@c8y/ngx-components 1021.63.2 → 1021.67.0

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 (197) hide show
  1. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +7 -2
  2. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
  3. package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
  4. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  5. package/core/breadcrumb/breadcrumb-item.component.d.ts +1 -1
  6. package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
  7. package/core/breadcrumb/breadcrumb-outlet.component.d.ts +1 -1
  8. package/core/breadcrumb/breadcrumb-outlet.component.d.ts.map +1 -1
  9. package/core/breadcrumb/breadcrumb.component.d.ts +1 -1
  10. package/core/breadcrumb/breadcrumb.component.d.ts.map +1 -1
  11. package/core/breadcrumb/breadcrumb.module.d.ts +7 -7
  12. package/core/breadcrumb/breadcrumb.module.d.ts.map +1 -1
  13. package/core/common/common.module.d.ts +38 -38
  14. package/core/common/date-format.service.d.ts +30 -0
  15. package/core/common/date-format.service.d.ts.map +1 -0
  16. package/core/common/date.pipe.d.ts +7 -3
  17. package/core/common/date.pipe.d.ts.map +1 -1
  18. package/core/common/index.d.ts +1 -0
  19. package/core/common/index.d.ts.map +1 -1
  20. package/core/common/outlet.directive.d.ts +1 -1
  21. package/core/common/outlet.directive.d.ts.map +1 -1
  22. package/core/common/user-preferences/user-preferences-store-current-user.d.ts +11 -0
  23. package/core/common/user-preferences/user-preferences-store-current-user.d.ts.map +1 -0
  24. package/core/common/user-preferences/user-preferences.service.d.ts +40 -1
  25. package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
  26. package/core/date-picker/date-picker.component.d.ts +3 -1
  27. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  28. package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
  29. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  30. package/core/dynamic-forms/date/date.type.component.d.ts +3 -0
  31. package/core/dynamic-forms/date/date.type.component.d.ts.map +1 -1
  32. package/core/plugins/plugins.model.d.ts +1 -0
  33. package/core/plugins/plugins.model.d.ts.map +1 -1
  34. package/core/plugins/plugins.service.d.ts +7 -2
  35. package/core/plugins/plugins.service.d.ts.map +1 -1
  36. package/core/time-interval/time-interval.component.d.ts +4 -2
  37. package/core/time-interval/time-interval.component.d.ts.map +1 -1
  38. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
  39. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
  40. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
  41. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  42. package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
  43. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  44. package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
  45. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  46. package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
  47. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  48. package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
  49. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
  50. package/ecosystem/ecosystem.module.d.ts +2 -1
  51. package/ecosystem/ecosystem.module.d.ts.map +1 -1
  52. package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts +15 -0
  53. package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts.map +1 -0
  54. package/ecosystem/packages/package-changelog.guard.d.ts +10 -0
  55. package/ecosystem/packages/package-changelog.guard.d.ts.map +1 -0
  56. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
  57. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  58. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
  59. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  60. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +8 -3
  61. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  62. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
  63. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  64. package/ecosystem/shared/index.d.ts +1 -0
  65. package/ecosystem/shared/index.d.ts.map +1 -1
  66. package/ecosystem/shared/package-changelog/package-changelog.component.d.ts +24 -0
  67. package/ecosystem/shared/package-changelog/package-changelog.component.d.ts.map +1 -0
  68. package/ecosystem/shared/shared-ecosystem.module.d.ts +2 -1
  69. package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
  70. package/esm2022/auth-configuration/sso-configuration/template-parts/signature-configuration.component.mjs +11 -7
  71. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
  72. package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +3 -3
  73. package/esm2022/core/breadcrumb/breadcrumb-outlet.component.mjs +19 -9
  74. package/esm2022/core/breadcrumb/breadcrumb.component.mjs +3 -3
  75. package/esm2022/core/breadcrumb/breadcrumb.module.mjs +16 -5
  76. package/esm2022/core/common/common.module.mjs +6 -6
  77. package/esm2022/core/common/date-format.service.mjs +81 -0
  78. package/esm2022/core/common/date.pipe.mjs +29 -6
  79. package/esm2022/core/common/index.mjs +2 -1
  80. package/esm2022/core/common/outlet.directive.mjs +4 -3
  81. package/esm2022/core/common/user-preferences/user-preferences-store-current-user.mjs +22 -0
  82. package/esm2022/core/common/user-preferences/user-preferences.service.mjs +106 -16
  83. package/esm2022/core/date-picker/date-picker.component.mjs +11 -4
  84. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +20 -11
  85. package/esm2022/core/dynamic-forms/date/date.type.component.mjs +12 -4
  86. package/esm2022/core/plugins/plugins.model.mjs +1 -1
  87. package/esm2022/core/plugins/plugins.service.mjs +31 -5
  88. package/esm2022/core/time-interval/time-interval.component.mjs +9 -2
  89. package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
  90. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +29 -14
  91. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
  92. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
  93. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
  94. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
  95. package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
  96. package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +3 -3
  97. package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
  98. package/esm2022/ecosystem/ecosystem.module.mjs +21 -5
  99. package/esm2022/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.mjs +33 -0
  100. package/esm2022/ecosystem/packages/package-changelog.guard.mjs +22 -0
  101. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
  102. package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
  103. package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +27 -8
  104. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
  105. package/esm2022/ecosystem/shared/index.mjs +2 -1
  106. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  107. package/esm2022/ecosystem/shared/package-changelog/package-changelog.component.mjs +82 -0
  108. package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +3 -3
  109. package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +12 -6
  110. package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +9 -7
  111. package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
  112. package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
  113. package/esm2022/upgrade/ng1/index.mjs +3 -2
  114. package/esm2022/widgets/cockpit/index.mjs +3 -1
  115. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  116. package/esm2022/widgets/definitions/index.mjs +2 -1
  117. package/esm2022/widgets/definitions/radial-gauge/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +5 -0
  118. package/esm2022/widgets/definitions/radial-gauge/index.mjs +33 -0
  119. package/esm2022/widgets/implementations/info-gauge/index.mjs +2 -2
  120. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.mjs +295 -0
  121. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.mjs +141 -11
  122. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.mjs +67 -0
  123. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +34 -6
  124. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget.module.mjs +9 -4
  125. package/esm2022/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.mjs +97 -0
  126. package/esm2022/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.mjs +369 -0
  127. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +9 -5
  128. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  129. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +209 -142
  130. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  131. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +96 -13
  132. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  133. package/fesm2022/c8y-ngx-components-ecosystem.mjs +336 -186
  134. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  135. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -5
  136. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  137. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
  138. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  139. package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
  140. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  141. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  142. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  143. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +2 -0
  144. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  145. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +40 -0
  146. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -0
  147. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  148. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  149. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +991 -28
  150. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  151. package/fesm2022/c8y-ngx-components.mjs +833 -550
  152. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  153. package/locales/de.po +45 -6
  154. package/locales/es.po +45 -6
  155. package/locales/fr.po +45 -6
  156. package/locales/ja_JP.po +45 -6
  157. package/locales/ko.po +45 -6
  158. package/locales/locales.pot +73 -10
  159. package/locales/nl.po +45 -6
  160. package/locales/pl.po +45 -6
  161. package/locales/pt_BR.po +45 -6
  162. package/locales/zh_CN.po +45 -6
  163. package/locales/zh_TW.po +45 -6
  164. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +4 -2
  165. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  166. package/package.json +1 -1
  167. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  168. package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
  169. package/upgrade/ng1/index.d.ts.map +1 -1
  170. package/widgets/cockpit/index.d.ts +29 -0
  171. package/widgets/cockpit/index.d.ts.map +1 -1
  172. package/widgets/cockpit-exports/index.d.ts +6 -0
  173. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  174. package/widgets/definitions/index.d.ts +1 -0
  175. package/widgets/definitions/index.d.ts.map +1 -1
  176. package/widgets/definitions/radial-gauge/c8y-ngx-components-widgets-definitions-radial-gauge.d.ts.map +1 -0
  177. package/widgets/definitions/radial-gauge/index.d.ts +33 -0
  178. package/widgets/definitions/radial-gauge/index.d.ts.map +1 -0
  179. package/widgets/implementations/info-gauge/index.d.ts +1 -1
  180. package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
  181. package/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.d.ts +339 -0
  182. package/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.d.ts.map +1 -0
  183. package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts +27 -7
  184. package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
  185. package/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.d.ts +33 -0
  186. package/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.d.ts.map +1 -0
  187. package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts +7 -3
  188. package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts.map +1 -1
  189. package/widgets/implementations/info-gauge/info-gauge-widget.module.d.ts +2 -1
  190. package/widgets/implementations/info-gauge/info-gauge-widget.module.d.ts.map +1 -1
  191. package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.d.ts +37 -0
  192. package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.d.ts.map +1 -0
  193. package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.d.ts +146 -0
  194. package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.d.ts.map +1 -0
  195. package/esm2022/widgets/implementations/info-gauge/info-gauge.model.mjs +0 -2
  196. package/widgets/implementations/info-gauge/info-gauge.model.d.ts +0 -7
  197. package/widgets/implementations/info-gauge/info-gauge.model.d.ts.map +0 -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-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/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatePipe, MeasurementRealtimeService } 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 { InfoGaugeWidgetConfig } from '../info-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: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: InfoGaugeWidgetConfig;\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n\n constructor(@Optional() private dashboard: ContextDashboardComponent) {}\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 (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\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 class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\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\">\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 <div class=\"clearfix\"></div>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { InfoGaugeWidgetConfig } from '../info-gauge.model';\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 standalone: true,\n imports: [CoreModule, ReactiveFormsModule, DatapointSelectorModule]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: InfoGaugeWidgetConfig;\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true\n };\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent\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 return true;\n }\n return false;\n }\n\n ngOnInit() {\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 }\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 },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<div class=\"p-l-24 p-r-24\">\n <form\n class=\"no-card-context\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;AAOA,MAAM,iBAAiB,GAAG;AACxB,IAAA,KAAK,EAAE,qBAAqB;AAC5B,IAAA,MAAM,EAAE,mCAAmC;AAC3C,IAAA,GAAG,EAAE,kCAAkC;CAC/B,CAAC;MAOE,+BAA+B,CAAA;IAC1C,WACU,CAAA,mBAA+C,EAC/C,KAAmB,EAAA;QADnB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA4B;QAC/C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;KACzB;IAgBJ,SAAS,CACP,SAAqB,EACrB,cAAwB,EAAA;QASxB,OAAO,IAAI,CAAC,mBAAmB;AAC5B,aAAA,iCAAiC,CAChC,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,QAAQ,EAClB,CAAC,EACD,IAAI,CACL;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAG;;YAEN,IAAI,CAAC,CAAC,EAAE;gBACN,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;aACpF;AACD,YAAA,MAAM,gBAAgB,GAAsB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACpF,YAAA,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,gBAAgB,CAAC,KAAK;AAC7B,gBAAA,IAAI,EAAE,gBAAgB,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI;gBAC7C,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC;YACF,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACrE,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AAC/B,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE/B,YAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;SACtD,CAAC,CACH,CAAC;KACL;IAEO,cAAc,CAAC,SAAqB,EAAE,KAAa,EAAA;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;;;QAI3C,MAAM,KAAK,GAAG,CAAC,MAAc,KAAK,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;AAEvE,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC;AACzE,QAAA,IAAI,KAAK,GAA+D,iBAAiB,CAAC,KAAK,CAAC;AAEhG,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;AAC9B,gBAAA,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC;aAClC;SACF;AAED,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;AAC9B,gBAAA,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC;aAC/B;SACF;AAED,QAAA,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;KACpC;+GA9FU,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,CAAA,CAAA,EAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,6BAA6B;AACnC,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;MCDY,4BAA4B,CAAA;AAMvC,IAAA,WAAA,CAAgC,SAAoC,EAAA;QAApC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA2B;QAJpE,IAAqB,CAAA,qBAAA,GAAG,EAAE,CAAC;QAE3B,IAAY,CAAA,YAAA,GAAG,OAAO,CAAC;KAEiD;IAExE,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE;AACjF,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;SACtF;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;SAClF;QAED,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AAC3F,YAAA,IAAI,CAAC,YAAY,GAAG,CAAK,EAAA,EAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SACjF;KACF;AAEO,IAAA,iCAAiC,CAAC,SAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE;YAC1C,OAAO;SACR;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;AACxC,QAAA,IAAI,OAAO,EAAE,EAAE,EAAE;AACf,YAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SACnC;KACF;+GAjCU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,+IAJ5B,CAAC,0BAA0B,CAAC,ECZzC,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,w4HA2HA,4CD7GY,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAE,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,sEAAE,+BAA+B,EAAA,IAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAE,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,WAAW,0CAAE,QAAQ,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAEtF,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;+BACE,4BAA4B,EAAA,IAAA,EAEhC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAA,SAAA,EAClB,CAAC,0BAA0B,CAAC,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,w4HAAA,EAAA,CAAA;;0BAQrF,QAAQ;yCALZ,MAAM,EAAA,CAAA;sBAAd,KAAK;;;AEIR,SAAS,0CAA0C,CACjD,uBAAiC,EAAA;IAEjC,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;AAChC,QAAA,KAAK,MAAM,iBAAiB,IAAI,uBAAuB,EAAE;AACvD,YAAA,MAAM,YAAY,GAAiB,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACjD,SAAS;aACV;AAED,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;AACxC,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AACD,QAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;AACrC,KAAC,CAAC;AACJ,CAAC;MASY,8BAA8B,CAAA;AAczC,IAAA,WAAA,CACU,WAAwB,EACxB,IAAY,EACZ,YAAmC,EAAA;QAFnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACZ,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;QAd7C,IAAwB,CAAA,wBAAA,GAA2C,EAAE,CAAC;AACtE,QAAA,IAAA,CAAA,kBAAkB,GAA2C;AAC3D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,IAAI;SAChB,CAAC;AACM,QAAA,IAAA,CAAA,MAAM,GAAG;AACf,YAAA,wBAAwB,EAAE,EAAE;AAC5B,YAAA,wBAAwB,EAAE,CAAC;SACnB,CAAC;KAMP;AAEJ,IAAA,YAAY,CACV,MAAiD,EAAA;AAEjD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;SACzE;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;SAC/E;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;SAC7E;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;AAC7F,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;SACvE;KACF;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACxC;IAEO,UAAU,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAC3B;AACE,YAAA,YAAY,EAAE;gBACZ,CAAC;AACD,gBAAA;AACE,oBAAA,UAAU,CAAC,QAAQ;oBACnB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;oBACpD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;AACrD,iBAAA;AACF,aAAA;AACD,YAAA,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,KAAK,EAAc,EAAE,EAAE,CAAC;AACvE,YAAA,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,KAAK,EAAc,EAAE,EAAE,CAAC;SACvE,EACD;AACE,YAAA,UAAU,EAAE;AACV,gBAAA,0CAA0C,CAAC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AACpF,aAAA;AACF,SAAA,CACF,CAAC;KACH;+GAxEU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,sHC/C3C,06DA0DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDbY,UAAU,EAAE,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,8BAAE,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAFnD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAA,CAAA,CAAA,EAAA;;4FAIxD,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;+BACE,8BAA8B,EAAA,aAAA,EAEzB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAA,UAAA,EACvD,IAAI,EACP,OAAA,EAAA,CAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,06DAAA,EAAA,CAAA;6IAG1D,MAAM,EAAA,CAAA;sBAAd,KAAK;;;AE3CR;;AAEG;MAQU,qBAAqB,CAAA;+GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAL9B,4BAA4B;YAC5B,8BAA8B;YAC9B,+BAA+B,CAAA,EAAA,CAAA,CAAA,EAAA;AAGtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAJ9B,8BAA8B,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAIrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,4BAA4B;wBAC5B,8BAA8B;wBAC9B,+BAA+B;AAChC,qBAAA;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;;;"}
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/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { gettext } from '@c8y/ngx-components';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\n\n/* General properties for the gauge */\nexport interface GeneralGaugeOptions {\n /**\n * Name of the gauge preset\n */\n name?: string;\n\n /**\n * Radius of the gauge (e.g., '90%')\n */\n radius?: string;\n\n /**\n * Center of the gauge (e.g., ['50%', '50%'])\n */\n center?: string[];\n\n /**\n * Starting angle of the gauge\n */\n startAngle?: number;\n\n /**\n * Ending angle of the gauge\n */\n endAngle?: number;\n}\n\n/**\n * Properties related to the split lines of the gauge\n */\nexport interface SplitPropertiesGaugeOptions {\n /**\n * Number of segments in the gauge\n */\n splitNumber?: number;\n\n /**\n * Length of the split line, can be a percentage value relative to radius\n */\n splitLineLength?: number | string;\n\n /**\n * Length of the split line as a ratio relative to the axisLineWidth (overrides splitLineLength)\n */\n splitLineLengthRatio?: number;\n\n /**\n * Distance between the split line and axis line\n */\n splitLineDistance?: number;\n\n /**\n * Distance between the split line and axis line as a ratio relative to the axisLineWidth (overrides splitLineDistance)\n */\n splitLineDistanceRatio?: number;\n\n /**\n * Color of the split lines (used only in the custom preset)\n */\n splitLineColor?: string;\n\n /**\n * Width of the split lines\n */\n splitLineWidth?: number;\n}\n\n/**\n * Properties related to the ticks of the gauge\n */\nexport interface TickPropertiesGaugeOptions {\n /**\n * Whether to show ticks\n */\n tickShow?: boolean;\n\n /**\n * Width of the ticks\n */\n tickWidth?: number;\n\n /**\n * Color of the ticks (used only in the custom preset)\n */\n tickColor?: string;\n\n /**\n * Distance of the ticks from the center\n */\n tickDistance?: number;\n\n /**\n * Distance of the ticks from the center as a ratio relative to the axisLineWidth (overrides tickDistance)\n */\n tickDistanceRatio?: number;\n\n /**\n * Length of the ticks\n */\n tickLength?: number;\n\n /**\n * Length of the ticks as a ratio relative to the axisLineWidth (overrides tickLength)\n */\n tickLengthRatio?: number;\n}\n\n/**\n * Properties related to the axis of the gauge\n */\nexport interface AxisPropertiesGaugeOptions {\n /**\n * Distance of the axis labels from the center\n */\n axisLabelDistance?: number;\n\n /**\n * Distance of the axis labels from the center as a ratio relative to the axisLineWidth (overrides axisLabelDistance)\n */\n axisLabelDistanceRatio?: number;\n\n /**\n * Color of the axis labels (used only in the custom preset)\n */\n axisLabelColor?: string;\n\n /**\n * Font size of the axis labels\n */\n axisLabelFontSize?: number;\n\n /**\n * Font size of the axis labels as a ratio relative to the container size (overrides axisLabelFontSize)\n */\n axisLabelFontSizeRatio?: number;\n\n /**\n * Minimum font size of the axis labels (used for clamping)\n */\n axisLabelFontSizeMin?: number;\n\n /**\n * Maximum font size of the axis labels (used for clamping)\n */\n axisLabelFontSizeMax?: number;\n\n /**\n * Width of the axis line\n */\n axisLineWidth?: number;\n\n /**\n * Width of the axis line as a ratio relative to the container size (overrides axisLineWidth)\n */\n axisLineWidthRatio?: number;\n}\n\n/**\n * Properties related to the pointer of the gauge\n */\nexport interface PointerPropertiesGaugeOptions {\n /**\n * Whether to show the pointer\n */\n showPointer?: boolean;\n\n /**\n * Style of the pointer (e.g., custom path)\n */\n pointerStyle?: string;\n\n /**\n * Color of the pointer (used only in the custom preset)\n */\n pointerColor?: string;\n\n /**\n * Width of the pointer\n */\n pointerWidth?: string | number;\n\n /**\n * Width of the pointer as a ratio relative to the container size (overrides pointerWidth)\n */\n pointerWidthRatio?: number;\n\n /**\n * Length of the pointer\n */\n pointerLength?: string | number;\n\n /**\n * Length of the pointer as a ratio relative to the container size (overrides pointerLength)\n */\n pointerLenghtRatio?: number;\n\n /**\n * Offset of the pointer from the center\n */\n pointerOffset?: string | number;\n}\n\n/**\n * Properties related to the progress bar of the gauge\n */\nexport interface ProgressBarGaugeOptions {\n /**\n * Whether to show a progress bar\n */\n progressBar?: boolean;\n\n /**\n * Width of the progress bar\n */\n progressBarWidth?: number;\n\n /**\n * Whether the progress bar has rounded caps\n */\n progressBarRoundCap?: boolean;\n\n /**\n * Color of the progress bar\n */\n progressBarColor?: string;\n\n /**\n * Additional colors for the gauge\n */\n additionalGaugeColors?: string[];\n}\n\n/**\n * Typography-related properties for the gauge\n */\nexport interface TypographyGaugeOptions {\n /**\n * Font size of the measurement value\n */\n measurementValueFontRatio?: number;\n\n /**\n * Minimum font size of the measurement value\n */\n measurementValueFontMin?: number;\n\n /**\n * Maximum font size of the measurement value\n */\n measurementValueFontMax?: number;\n\n /**\n * Color of the measurement value\n */\n measurementValueColor?: string;\n\n /**\n * Font size of the unit\n */\n unitFontSize?: number;\n\n /**\n * Font size of the unit as a ratio relative to the container size (overrides unitFontSize)\n */\n unitFontRatio?: number;\n\n /**\n * Minimum font size of the unit\n */\n unitFontMin?: number;\n\n /**\n * Maximum font size of the unit\n */\n unitFontMax?: number;\n\n /**\n * Color of the unit\n */\n unitColor?: string;\n\n /**\n * Font size of the date\n */\n dateFontSize?: number;\n\n /**\n * Font size of the date as a ratio relative to the container size (overrides dateFontSize)\n */\n dateFontRatio?: number;\n\n /**\n * Minimum font size of the date\n */\n dateFontMin?: number;\n\n /**\n * Maximum font size of the date\n */\n dateFontMax?: number;\n\n /**\n * Color of the date\n */\n dateColor?: string;\n}\n\n/**\n * Properties related to detailed information display\n */\nexport interface DetailPropertiesGaugeOptions {\n /**\n * Whether to show detailed information\n */\n showDetail?: boolean;\n\n /**\n * Font size of the value displayed\n */\n valueFontSize?: number;\n\n /**\n * Offset of the detail from the center\n */\n detailOffsetCenter?: number[] | string[];\n\n /**\n * Whether to show mark points\n */\n showMarkPoint?: boolean;\n}\n\n/**\n * Main interface combining all the smaller interfaces\n */\nexport interface GaugeOptions\n extends GeneralGaugeOptions,\n SplitPropertiesGaugeOptions,\n TickPropertiesGaugeOptions,\n AxisPropertiesGaugeOptions,\n PointerPropertiesGaugeOptions,\n ProgressBarGaugeOptions,\n TypographyGaugeOptions,\n DetailPropertiesGaugeOptions {\n /**\n * Miscellaneous properties for flexibility\n */\n [key: string]: any;\n}\n\nexport interface GaugeOptionsColors {\n splitLineColor: string;\n tickColor: string;\n axisLabelColor: string;\n pointerColor: string;\n knobColor: string;\n knobFontColor: string;\n measurementValueColor: string;\n unitColor: string;\n dateColor: string;\n progressBarColor: string;\n fontFamily: string;\n}\n\nexport interface GaugeAnchor {\n /**\n * Indicates whether to show the anchor.\n */\n show?: boolean;\n\n /**\n * Indicates whether to show the anchor above the gauge.\n */\n showAbove?: boolean;\n\n /**\n * The size of the anchor.\n */\n size?: number;\n\n /**\n * The size of the anchor as a ratio relative to the container size.\n * Overrides the `size` property when set.\n */\n sizeRatio?: number;\n\n /**\n * The style of the anchor, represented as a key-value pair object.\n */\n itemStyle?: { [key: string]: any };\n}\n\nexport const GAUGE_PRESET_NAMES = {\n DEFAULT: gettext('Default'),\n CUSTOM: gettext('Custom preset'),\n POINTER: gettext('Pointer'),\n PROGRESS_BAR: gettext('Progress bar'),\n PROGRESS_INDICATOR: gettext('Progress indicator'),\n GRADE_RATING: gettext('Grade rating')\n} as const;\n\nexport interface InfoGaugeWidgetConfig {\n datapoints?: KPIDetails[];\n datapointsLabels?: KPIDetails[];\n datapointsGauge?: KPIDetails[];\n selectedPresetId?: string;\n gaugeOptions?: GaugeOptions;\n fractionSize: number;\n}\n\nexport const GAUGE_PRESETS: GaugeOptions[] = [\n {\n // General properties\n name: GAUGE_PRESET_NAMES.DEFAULT,\n id: 'default',\n radius: '90%',\n startAngle: 240,\n endAngle: 300,\n\n // Split properties\n splitNumber: 10,\n splitLineLengthRatio: 0.3,\n splitLineColor: '#fff',\n splitLineWidth: 4,\n splitLineDistanceRatio: -0.3,\n\n // Tick properties\n tickShow: true,\n tickDistanceRatio: -0.16,\n tickWidth: 2,\n tickColor: '#fff',\n tickLengthRatio: 0.16,\n\n // Axis properties\n axisLabelDistanceRatio: 0.25,\n axisLabelColor: 'black',\n axisLabelFontSizeMin: 8,\n axisLabelFontSizeRatio: 0.04,\n axisLabelFontSizeMax: 32,\n axisLineWidthRatio: 0.125,\n\n // Pointer properties\n showPointer: true,\n pointerColor: '#222',\n pointerStyle: 'triangle',\n pointerWidthRatio: 2,\n pointerLength: '55%',\n pointerOffset: 0,\n\n // Progress bar properties\n progressBar: false,\n progressBarColor: '#119d11',\n\n // Detail properties\n showDetail: false,\n showMarkPoint: true,\n\n // Typography & Anchor\n measurementValueFontRatio: 0.08,\n measurementValueFontMin: 16,\n measurementValueFontMax: 56,\n measurementValueColor: 'white',\n unitFontSize: 18,\n unitFontRatio: 0.045,\n unitFontMin: 14,\n unitFontMax: 40,\n unitColor: 'white',\n dateFontSize: 0.001,\n dateFontRatio: 0.03,\n dateFontMin: 10,\n dateFontMax: 16,\n dateColor: 'gray',\n anchor: {\n show: true,\n sizeRatio: 0.5,\n itemStyle: {\n color: '#222' // Color of the anchor\n }\n }\n },\n {\n // General properties\n name: GAUGE_PRESET_NAMES.POINTER,\n id: 'pointer',\n radius: '90%',\n startAngle: 240,\n endAngle: 300,\n\n // Split properties\n splitNumber: 10,\n splitLineLengthRatio: 1,\n splitLineColor: '#fff',\n splitLineWidth: 4,\n splitLineDistanceRatio: -1,\n\n // Tick properties\n tickShow: true,\n tickDistanceRatio: -1,\n tickWidth: 2,\n tickColor: '#fff',\n tickLengthRatio: 0.2666666667,\n\n // Axis properties\n axisLabelColor: '#212121',\n axisLabelFontSizeMin: 8,\n axisLabelFontSizeRatio: 0.04,\n axisLabelFontSizeMax: 32,\n axisLineWidthRatio: 0.075,\n axisLabelDistanceRatio: 1.1666666667,\n\n // Pointer properties\n showPointer: true,\n pointerStyle: 'default',\n pointerColor: 'black',\n pointerWidthRatio: 0.2666666667,\n pointerLength: '70%',\n pointerOffset: 5,\n\n // Progress bar properties\n progressBar: false,\n progressBarColor: '#119d11',\n\n // Detail properties\n showDetail: true,\n detailOffsetCenter: ['0%', '35%'],\n showMarkPoint: false,\n\n // Typography specs\n measurementValueFontRatio: 0.08,\n measurementValueFontMin: 16,\n measurementValueFontMax: 56,\n measurementValueColor: 'black',\n unitFontSize: 18,\n unitFontRatio: 0.045,\n unitFontMin: 8,\n unitFontMax: 40,\n unitColor: 'black',\n dateFontRatio: 0.03,\n dateFontMin: 10,\n dateFontMax: 16,\n dateColor: 'black'\n },\n {\n // General properties\n name: GAUGE_PRESET_NAMES.PROGRESS_BAR,\n id: 'progress-bar',\n radius: '85%',\n center: ['50%', '57%'],\n startAngle: 200,\n endAngle: -20,\n\n // Split properties\n splitNumber: 10,\n splitLineLengthRatio: 1,\n splitLineColor: '#fff',\n splitLineWidth: 3,\n splitLineDistanceRatio: -1,\n\n // Tick properties\n tickShow: false,\n\n // Axis properties\n axisLabelColor: '#212121',\n axisLabelFontSizeMin: 8,\n axisLabelFontSizeRatio: 0.04,\n axisLabelFontSizeMax: 32,\n axisLineWidthRatio: 0.075,\n axisLabelDistanceRatio: -0.8,\n\n // Pointer properties\n showPointer: false,\n\n // Progress bar properties\n progressBar: true,\n progressBarWidthRatio: 0.3333,\n progressBarRoundCap: false,\n progressBarColor: '#119d11',\n additionalGaugeColors: ['#FFAB91', '#FD7347'],\n\n // Detail properties\n showDetail: true,\n detailOffsetCenter: ['0%', '0%'],\n showMarkPoint: false,\n\n // Typography specs\n measurementValueFontRatio: 0.12,\n measurementValueFontMin: 16,\n measurementValueFontMax: 72,\n measurementValueColor: 'black',\n unitFontSize: 18,\n unitFontRatio: 0.085,\n unitFontMin: 10,\n unitFontMax: 40,\n unitColor: 'black',\n dateFontRatio: 0.03,\n dateFontMin: 10,\n dateFontMax: 16,\n dateColor: 'black'\n },\n {\n // General properties\n name: GAUGE_PRESET_NAMES.PROGRESS_INDICATOR,\n id: 'progress-indicator',\n radius: '85%',\n startAngle: 240,\n endAngle: 300,\n\n // Split line properties\n splitNumber: 4,\n splitLineLengthRatio: 1,\n splitLineColor: '#fff',\n splitLineWidth: 2,\n splitLineDistanceRatio: -1,\n\n // Tick properties\n tickShow: false,\n\n // Axis properties\n axisLabelColor: '#212121',\n axisLabelFontSizeMin: 7,\n axisLabelFontSizeRatio: 0.04,\n axisLabelFontSizeMax: 32,\n axisLineWidthRatio: 0.075,\n axisLabelDistanceRatio: -1,\n\n // Pointer properties\n showPointer: true,\n pointerStyle: 'default',\n pointerColor: 'black',\n pointerWidthRatio: 0.2,\n pointerLength: '100%',\n pointerOffset: 5,\n\n // Progress bar properties\n progressBar: true,\n progressBarWidthRatio: 0.3333,\n progressBarRoundCap: false,\n progressBarColor: '#119d11',\n\n // Detail properties\n showDetail: true,\n detailOffsetCenter: ['0%', '35%'],\n showMarkPoint: false,\n\n // Typography & Anchor\n measurementValueFontRatio: 0.08,\n measurementValueFontMin: 12,\n measurementValueFontMax: 56,\n measurementValueColor: 'black',\n unitFontSize: 18,\n unitFontRatio: 0.045,\n unitFontMin: 10,\n unitFontMax: 40,\n unitColor: 'black',\n dateFontRatio: 0.03,\n dateFontMin: 10,\n dateFontMax: 16,\n dateColor: 'black',\n\n anchor: {\n show: true,\n showAbove: true,\n sizeRatio: 0.1,\n itemStyle: {\n borderWidth: 10\n }\n }\n },\n {\n // General properties\n name: GAUGE_PRESET_NAMES.GRADE_RATING,\n id: 'grade-rating',\n radius: '75%',\n startAngle: 180,\n endAngle: 360,\n center: ['50%', '65%'],\n\n // Split line properties\n splitNumber: 4,\n splitLineLengthRatio: 3,\n splitLineColor: 'auto',\n splitLineWidth: 6,\n splitLineDistanceRatio: -3,\n\n // Tick properties\n tickShow: true,\n tickDistanceRatio: -2,\n tickWidth: 2,\n tickColor: 'auto',\n tickLengthRatio: 2,\n\n // Axis properties\n axisLabelDistanceRatio: -6,\n axisLabelColor: 'auto',\n axisLabelFontSizeMin: 6,\n axisLabelFontSizeRatio: 0.04,\n axisLabelFontSizeMax: 32,\n axisLineWidthRatio: 0.02,\n\n // Pointer properties\n showPointer: true,\n pointerColor: 'black',\n pointerStyle: 'triangle',\n pointerWidthRatio: 2,\n pointerLength: '12%',\n pointerOffset: '-50%',\n\n // Progress bar properties\n progressBar: false,\n progressBarColor: '#119d11',\n\n // Detail properties\n showDetail: true,\n detailOffsetCenter: ['0%', '0%'],\n showMarkPoint: false,\n\n // Typography\n measurementValueFontRatio: 0.08,\n measurementValueFontMin: 16,\n measurementValueFontMax: 56,\n measurementValueColor: 'black',\n unitFontRatio: 0.045,\n unitFontMin: 8,\n unitFontMax: 40,\n unitColor: 'black',\n dateFontRatio: 0.03,\n dateFontMin: 10,\n dateFontMax: 16,\n dateColor: 'black'\n }\n];\n","import { ElementRef, Injectable } from '@angular/core';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { GaugeOptions, GaugeOptionsColors } from '../info-gauge-widget-config/gauge.model';\nimport { IMeasurementValue } from '@c8y/client';\nimport { DatePipe } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RadialGaugeService {\n private chart: ElementRef;\n containerSize = 400;\n\n constructor(private c8yDatePipe: DatePipe) {}\n\n setChart(chart: ElementRef): void {\n this.chart = chart;\n }\n\n getChartOptions(\n gaugeOptions: GaugeOptions,\n activeDatapointGauge: KPIDetails,\n selectedPresetId: string,\n gaugeOptionsColors: GaugeOptionsColors,\n rangeColors: { default: string; yellow: string; red: string },\n measurement: IMeasurementValue,\n fractionSize: number\n ) {\n const colorArray = this.getColorArray(activeDatapointGauge, rangeColors);\n\n return {\n series: [\n {\n type: 'gauge',\n radius: gaugeOptions?.radius || '90%',\n center: gaugeOptions?.center || ['50%', '50%'],\n startAngle: gaugeOptions?.startAngle || 240,\n endAngle: gaugeOptions?.endAngle || 300,\n min: activeDatapointGauge?.min || 0,\n max:\n activeDatapointGauge?.max !== undefined && activeDatapointGauge?.max !== null\n ? activeDatapointGauge.max\n : 100,\n\n // Split properties\n splitNumber: gaugeOptions?.splitNumber || 10,\n splitLine: {\n distance: gaugeOptions?.splitLineDistanceRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.splitLineDistanceRatio\n : gaugeOptions?.splitLineDistance || -30,\n\n length: gaugeOptions?.splitLineLengthRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.splitLineLengthRatio\n : gaugeOptions?.splitLineLength || 30,\n\n lineStyle: {\n color:\n selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n ? gaugeOptions?.splitLineColor\n : gaugeOptionsColors?.splitLineColor || '#fff',\n width: gaugeOptions?.splitLineWidth || 4\n }\n },\n\n // Tick properties\n axisTick: {\n show: gaugeOptions?.tickShow || false,\n distance: gaugeOptions?.tickDistanceRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.tickDistanceRatio\n : gaugeOptions?.tickDistance || -30,\n length: gaugeOptions?.tickLengthRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.tickLengthRatio\n : gaugeOptions?.tickLength || 8,\n lineStyle: {\n color:\n selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n ? gaugeOptions.tickColor\n : gaugeOptionsColors?.tickColor || '#fff',\n width: gaugeOptions?.tickWidth || 2\n }\n },\n\n // Axis properties\n axisLine: {\n lineStyle: {\n width: gaugeOptions?.axisLineWidthRatio\n ? this.containerSize * gaugeOptions?.axisLineWidthRatio\n : gaugeOptions?.axisLineWidth || 30,\n color: colorArray\n }\n },\n\n axisLabel: {\n color:\n selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n ? gaugeOptions.axisLabelColor\n : gaugeOptionsColors?.axisLabelColor || 'inherit',\n distance: gaugeOptions?.axisLabelDistanceRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.axisLabelDistanceRatio\n : gaugeOptions?.axisLabelDistance || 40,\n fontSize: gaugeOptions?.axisLabelFontSizeRatio\n ? this.clampRelative(\n gaugeOptions?.axisLabelFontSizeRatio,\n gaugeOptions?.axisLabelFontSizeMin,\n gaugeOptions?.axisLabelFontSizeMax\n )\n : gaugeOptions?.axisLabelFontSize || 16,\n fontWeight: 'bold',\n fontFamily: gaugeOptionsColors?.fontFamily\n },\n\n // pointer properties\n pointer: {\n ...(gaugeOptions?.pointerStyle !== 'default' && {\n icon: gaugeOptions?.pointerStyle\n }),\n show: gaugeOptions?.showPointer || false,\n length: gaugeOptions?.pointerLengthRatio\n ? gaugeOptions?.pointerLengthRatio *\n (this.containerSize * gaugeOptions?.axisLineWidthRatio)\n : gaugeOptions?.pointerLength || '65%',\n width: gaugeOptions?.pointerWidthRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.pointerWidthRatio\n : gaugeOptions?.pointerWidth || 40,\n offsetCenter:\n selectedPresetId === 'default'\n ? [0, this.containerSize * gaugeOptions?.axisLineWidthRatio * -1]\n : [0, gaugeOptions?.pointerOffset || -30],\n itemStyle: {\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions.pointerColor\n : gaugeOptionsColors?.pointerColor || 'inherit'\n }\n },\n\n // Progress bar properties\n progress: {\n show: gaugeOptions?.progressBar || false,\n roundCap: gaugeOptions?.progressBarRoundCap || false,\n width: gaugeOptions?.progressBarWidthRatio\n ? this.containerSize *\n gaugeOptions?.axisLineWidthRatio *\n gaugeOptions?.progressBarWidthRatio\n : gaugeOptions?.progressBarWidth || 18,\n itemStyle: {\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions.progressBarColor\n : gaugeOptionsColors?.progressBarColor || 'inherit'\n }\n },\n\n // Anchor properties\n anchor: gaugeOptions?.anchor\n ? {\n ...gaugeOptions.anchor,\n size: gaugeOptions?.anchor?.sizeRatio\n ? this.containerSize * gaugeOptions?.anchor?.sizeRatio\n : gaugeOptions?.anchor?.size || 45,\n itemStyle: {\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions.pointerColor\n : gaugeOptionsColors?.pointerColor\n }\n }\n : undefined,\n\n // Detail properties\n detail: {\n show: gaugeOptions?.showDetail || false,\n valueAnimation: true,\n offsetCenter: gaugeOptions?.detailOffsetCenterYRatio\n ? [0, gaugeOptions?.detailOffsetCenterYRatio * this.containerSize]\n : gaugeOptions?.detailOffsetCenter || [0, 0],\n\n formatter: () => {\n const value = measurement?.value.toFixed(fractionSize) || 0;\n const unit = activeDatapointGauge?.unit || measurement?.unit || '';\n const date = new Date(measurement?.date);\n const formattedDate = this.c8yDatePipe.transform(date);\n return `{value|${value}}{unit|${unit}} \\n {date|${formattedDate}} `;\n },\n color: 'inherit',\n lineHeight: gaugeOptions?.measurementValueFontRatio\n ? this.clampRelative(\n gaugeOptions?.measurementValueFontRatio * 0.9,\n gaugeOptions?.measurementValueFontSizeMin,\n gaugeOptions?.measurementValueFontSizeMax\n )\n : gaugeOptions?.measurementValueFontSize || 32,\n rich: {\n value: {\n fontSize: gaugeOptions?.measurementValueFontRatio\n ? this.clampRelative(\n fractionSize > 5 || measurement?.value > 9999\n ? gaugeOptions?.measurementValueFontRatio * 0.5\n : gaugeOptions?.measurementValueFontRatio,\n gaugeOptions?.measurementValueFontSizeMin,\n gaugeOptions?.measurementValueFontSizeMax\n )\n : gaugeOptions?.measurementValueFontSize || 32,\n fontWeight: 'bolder',\n fontFamily: gaugeOptionsColors?.fontFamily,\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions.measurementValueColor\n : gaugeOptionsColors?.measurementValueColor || '#777'\n },\n unit: {\n fontSize: gaugeOptions?.unitFontRatio\n ? this.clampRelative(\n gaugeOptions?.unitFontRatio,\n gaugeOptions?.unitFontMin,\n gaugeOptions?.unitFontMax\n )\n : gaugeOptions?.unitFontSize || 20,\n fontFamily: gaugeOptionsColors?.fontFamily,\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions?.unitColor\n : gaugeOptionsColors?.unitColor || '#999'\n },\n date: {\n fontSize: gaugeOptions?.dateFontRatio\n ? this.clampRelative(\n gaugeOptions?.dateFontRatio,\n gaugeOptions?.dateFontSizeMin,\n gaugeOptions?.dateFontSizeMax\n )\n : gaugeOptions?.dateFontSize || 12,\n fontFamily: gaugeOptionsColors?.fontFamily,\n color:\n selectedPresetId === 'custom'\n ? gaugeOptions?.dateColor\n : gaugeOptionsColors?.dateColor || '#555'\n }\n }\n },\n markPoint: {\n symbolSize: 0,\n offsetCenter: gaugeOptions?.detailOffsetCenter || [0, 0],\n data: [\n {\n x: '50%',\n y: '50%',\n label: {\n show: gaugeOptions?.showMarkPoint,\n formatter: () => {\n const value = measurement?.value.toFixed(fractionSize) || 0;\n const unit = activeDatapointGauge?.unit || measurement?.unit || '';\n const date = new Date(measurement?.date);\n const formattedDate = this.c8yDatePipe.transform(date);\n return `{value|${value}}{unit|${unit}} \\n {date|${formattedDate}} `;\n },\n color: '#fff',\n align: 'center',\n rich: {\n value: {\n fontSize: gaugeOptions?.measurementValueFontRatio\n ? this.clampRelative(\n fractionSize > 5\n ? gaugeOptions?.measurementValueFontRatio * 0.5\n : gaugeOptions?.measurementValueFontRatio,\n fractionSize > 5\n ? gaugeOptions.measurementValueFontMin * 0.5\n : gaugeOptions?.measurementValueFontSizeMin,\n gaugeOptions?.measurementValueFontSizeMax\n )\n : gaugeOptions?.measurementValueFontSize || 32,\n fontFamily: gaugeOptionsColors?.fontFamily,\n fontWeight: 'bolder',\n color: gaugeOptionsColors?.knobFontColor || '#777'\n },\n unit: {\n fontSize: gaugeOptions?.unitFontRatio\n ? this.clampRelative(\n gaugeOptions?.unitFontRatio,\n gaugeOptions?.unitFontSizeMin,\n gaugeOptions?.unitFontSizeMax\n )\n : gaugeOptions?.unitFontSize || 20,\n fontFamily: gaugeOptionsColors?.fontFamily,\n color: gaugeOptionsColors?.knobFontColor || '#999'\n },\n date: {\n fontSize: gaugeOptions?.dateFontRatio\n ? this.clampRelative(\n gaugeOptions?.dateFontRatio,\n gaugeOptions?.dateFontSizeMin,\n gaugeOptions?.dateFontSizeMax\n )\n : gaugeOptions?.dateFontSize || 12,\n fontFamily: gaugeOptionsColors?.fontFamily,\n color: gaugeOptionsColors?.knobFontColor || '#555'\n }\n }\n }\n }\n ]\n },\n data: [\n {\n value: 0 || measurement?.value\n }\n ]\n }\n ]\n };\n }\n\n updateRangeColors(): any {\n if (!this.chart) {\n return;\n }\n\n return {\n default: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-form-control-border-color-default'\n ),\n yellow: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-palette-status-warning'\n ),\n red: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-palette-status-danger'\n )\n };\n }\n\n updateGaugeOptionsColors(): any {\n if (!this.chart) {\n return;\n }\n\n return {\n splitLineColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-background-default'\n ),\n tickColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-background-default'\n ),\n axisLabelColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-color-default'\n ),\n pointerColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-color-default'\n ),\n knobColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-color-default'\n ),\n knobFontColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-background-default'\n ),\n measurementValueColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-color-default'\n ),\n unitColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-color-default'\n ),\n dateColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-text-muted'\n ),\n progressBarColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n '--c8y-root-component-brand-primary'\n ),\n fontFamily: getComputedStyle(document.body).getPropertyValue('font-family')\n };\n }\n\n private getColorArray(\n activeDatapointGauge: KPIDetails,\n rangeColors: { default: string; yellow: string; red: string }\n ): [number, string][] {\n const min = activeDatapointGauge?.min ?? 0;\n const max = activeDatapointGauge?.max ?? 100;\n const range = max - min;\n\n const yellowMin = activeDatapointGauge?.yellowRangeMin;\n const yellowMax = activeDatapointGauge?.yellowRangeMax;\n const redMin = activeDatapointGauge?.redRangeMin;\n const redMax = activeDatapointGauge?.redRangeMax;\n\n type Range = { start: number; end: number; color: string };\n\n const ranges: Range[] = [];\n\n // First add red range\n if (redMin != null && redMax != null && redMin < redMax) {\n ranges.push({ start: redMin, end: redMax, color: rangeColors.red });\n }\n\n // Then add yellow, but clip out any overlap with red\n if (yellowMin != null && yellowMax != null && yellowMin < yellowMax) {\n const redRange = ranges.find(r => r.color === rangeColors.red);\n\n if (\n !redRange ||\n yellowMax <= redRange.start || // yellow ends before red\n yellowMin >= redRange.end // yellow starts after red\n ) {\n // no overlap\n ranges.push({ start: yellowMin, end: yellowMax, color: rangeColors.yellow });\n } else {\n // partial overlap – split yellow into non-overlapping parts\n if (yellowMin < redRange.start) {\n ranges.push({\n start: yellowMin,\n end: Math.min(yellowMax, redRange.start),\n color: rangeColors.yellow\n });\n }\n if (yellowMax > redRange.end) {\n ranges.push({\n start: Math.max(yellowMin, redRange.end),\n end: yellowMax,\n color: rangeColors.yellow\n });\n }\n }\n }\n\n // Sort by start position\n ranges.sort((a, b) => a.start - b.start);\n\n // Build segments\n const segments: [number, string][] = [];\n let current = min;\n\n for (const { start, end, color } of ranges) {\n if (start > current) {\n // Default fill before this range\n segments.push([(start - min) / range, rangeColors.default]);\n }\n // Start color\n segments.push([(start - min) / range, color]);\n // End color\n segments.push([(end - min) / range, color]);\n\n current = Math.max(current, end);\n }\n\n // Fill remaining with default\n if (current < max) {\n segments.push([(current - min) / range, rangeColors.default]);\n }\n\n if (segments.length === 0 || segments[segments.length - 1][0] < 1) {\n segments.push([1, rangeColors.default]);\n }\n\n return segments;\n }\n\n private clampRelative(ratio: number, min: number, max: number): number {\n const clampedValue = this.containerSize * ratio;\n if (clampedValue < min) {\n return min;\n } else if (clampedValue > max) {\n return max;\n } else {\n return clampedValue;\n }\n }\n}\n","import {\n Component,\n OnChanges,\n Input,\n SimpleChanges,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n inject\n} from '@angular/core';\nimport type { ECharts } from 'echarts';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { MeasurementRealtimeService, ThemeSwitcherService } from '@c8y/ngx-components';\nimport { AsyncPipe } from '@angular/common';\nimport { IMeasurementValue } from '@c8y/client';\nimport { BehaviorSubject, Observable, of, Subscription, switchMap, tap } from 'rxjs';\nimport { NGX_ECHARTS_CONFIG, NgxEchartsModule } from 'ngx-echarts';\nimport {\n GAUGE_PRESETS,\n GaugeOptions,\n GaugeOptionsColors\n} from '../info-gauge-widget-config/gauge.model';\nimport { RadialGaugeService } from './radial-gauge.service';\n\n@Component({\n selector: 'c8y-radial-gauge',\n templateUrl: './radial-gauge.component.html',\n host: { class: 'c8y-radial-gauge' },\n providers: [\n MeasurementRealtimeService,\n RadialGaugeService,\n { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) }\n ],\n standalone: true,\n imports: [AsyncPipe, NgxEchartsModule]\n})\nexport class RadialGaugeViewComponent implements OnChanges, OnDestroy, AfterViewInit {\n @Input() activeDatapointGauge: KPIDetails;\n @Input() measurement: IMeasurementValue;\n @Input() fractionSize = 2;\n @Input() gaugeOptions: GaugeOptions;\n @Input() selectedPresetId = '';\n @ViewChild('chart', { static: false }) chart!: ElementRef;\n private resizeObserver!: ResizeObserver;\n\n chartOptions$: Observable<GaugeOptions>;\n echartsInstance!: ECharts;\n rangeColors = { default: '#E8EBED', yellow: '#ff8800', red: '#d70f0f' };\n gaugeOptionsColors: GaugeOptionsColors;\n private configChangedSubject = new BehaviorSubject<void | null>(null);\n private themeSubscription: Subscription;\n\n private readonly themeSwitcherService = inject(ThemeSwitcherService);\n private readonly radialGaugeService = inject(RadialGaugeService);\n\n constructor() {\n this.chartOptions$ = this.configChangedSubject.pipe(\n switchMap(() =>\n of(\n this.radialGaugeService.getChartOptions(\n this.gaugeOptions,\n this.activeDatapointGauge,\n this.selectedPresetId,\n this.gaugeOptionsColors,\n this.rangeColors,\n this.measurement,\n this.fractionSize\n )\n )\n ),\n tap(options => {\n if (this.echartsInstance) {\n this.echartsInstance.setOption(options, false, true);\n }\n })\n );\n }\n\n ngOnInit() {\n if (!this.gaugeOptions) {\n this.gaugeOptions = GAUGE_PRESETS[0];\n }\n\n this.themeSubscription = this.themeSwitcherService.currentlyAppliedTheme$.subscribe(() => {\n queueMicrotask(() => {\n this.radialGaugeService.setChart(this.chart);\n this.rangeColors = this.radialGaugeService.updateRangeColors();\n this.gaugeOptionsColors = this.radialGaugeService.updateGaugeOptionsColors();\n requestAnimationFrame(() => {\n this.configChangedSubject.next();\n });\n });\n });\n }\n\n ngAfterViewInit() {\n this.resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {\n this.radialGaugeService.containerSize =\n entry.contentRect.width >= entry.contentRect.height\n ? entry.contentRect.height\n : entry.contentRect.width;\n this.configChangedSubject.next();\n }\n }\n });\n\n this.resizeObserver.observe(this.chart.nativeElement);\n }\n\n ngOnDestroy() {\n if (this.themeSubscription) {\n this.themeSubscription.unsubscribe();\n }\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.gaugeOptions || changes.measurement || changes.activeDatapointGauge) {\n this.configChangedSubject.next();\n }\n }\n\n onChartInit(ec: ECharts) {\n this.echartsInstance = ec;\n }\n}\n","<div\n class=\"p-absolute fit-w fit-h\"\n data-cy=\"c8y-radial-gauge--chart\"\n #chart\n echarts\n [options]=\"chartOptions$ | async\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n DatePipe,\n DynamicComponentComponent,\n MeasurementRealtimeService\n} from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { RadialGaugeViewComponent } from '../radial-gauge/radial-gauge.component';\nimport { InfoGaugeWidgetConfig } from '../info-gauge-widget-config/gauge.model';\n\n@Component({\n selector: 'c8y-info-gauge-widget-view',\n templateUrl: './info-gauge-widget-view.component.html',\n host: { class: 'd-contents' },\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n NgStyle,\n InfoGaugeCurrentMeasurementPipe,\n AsyncPipe,\n DecimalPipe,\n DatePipe,\n RadialGaugeViewComponent\n ]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: InfoGaugeWidgetConfig;\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n isInfoGauge: boolean;\n\n constructor(\n @Optional() private dashboard: ContextDashboardComponent,\n @Optional() private dynamicComponent?: DynamicComponentComponent\n ) {}\n\n ngOnInit() {\n if (this.config?.datapoints && !this.config.datapointsGauge) {\n this.config.datapointsGauge = this.config.datapoints;\n }\n }\n\n ngOnChanges(): void {\n if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n }\n\n if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n }\n\n if (\n this.config?.datapoints &&\n Array.isArray(this.config?.datapoints) &&\n this.config?.datapoints.length > 0 &&\n !this.config?.datapointsGauge\n ) {\n this.config.datapoints.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapoints.find(dp => dp.__active);\n }\n\n if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\n this.isInfoGauge = this.dynamicComponent?.componentId === defaultWidgetIds.INFO_GAUGE;\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboard?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboard?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n }\n }\n}\n","<div\n class=\"label-value-unit-gauge new-radial\"\n *ngIf=\"isInfoGauge\"\n>\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length && isInfoGauge\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <em>{{ measurement.date | c8yDate: 'short' }}</em>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge && isInfoGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <p class=\"center-date-time\">{{ measurement.date | c8yDate: 'short' }}</p>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n\n <div class=\"clearfix\"></div>\n</div>\n<ng-container *ngIf=\"!isInfoGauge\">\n <c8y-radial-gauge\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement | async as measurement\"\n [activeDatapointGauge]=\"activeDatapointGauge\"\n [measurement]=\"measurement\"\n [fractionSize]=\"config.fractionSize\"\n [gaugeOptions]=\"config.gaugeOptions\"\n [selectedPresetId]=\"config.selectedPresetId\"\n ></c8y-radial-gauge>\n</ng-container>\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { RadialGaugeViewComponent } from '../../radial-gauge/radial-gauge.component';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { GaugeOptions } from '../gauge.model';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'c8y-preset-preview',\n templateUrl: './preset-preview.component.html',\n standalone: true,\n imports: [CommonModule, RadialGaugeViewComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PresetPreviewComponent),\n multi: true\n }\n ]\n})\nexport class PresetPreviewComponent {\n @Input() ALL_GAUGE_PRESETS: GaugeOptions[];\n @Output() onPresetChange = new EventEmitter<string>();\n\n measurement = {\n value: Math.floor(Math.random() * 9) + 1,\n unit: 'ºC',\n date: '2025-04-22T20:07:49.354Z'\n };\n activeDatapointGauge = {\n fragment: 'c8y_Kpi',\n series: 'preview',\n unit: 'ºC',\n min: 0,\n max: 10,\n yellowRangeMax: 8,\n yellowRangeMin: 5,\n redRangeMin: 8,\n redRangeMax: 10\n };\n selectedPresetId: string | null = null;\n\n private onChange: (value: string) => void;\n private onTouched: () => void;\n\n writeValue(value: string): void {\n this.selectedPresetId = value;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n emitPresetChange(presetId: string): void {\n this.selectedPresetId = presetId;\n this.onChange(presetId);\n this.onTouched();\n this.onPresetChange.emit(presetId);\n }\n}\n","<div class=\"d-grid grid__col--4-4-4 gap-4\">\n <button\n class=\"c8y-radial-gauge__preset preset-{{ preset.id }}\"\n [class.selected]=\"preset.id === selectedPresetId\"\n [attr.aria-label]=\"preset.name | translate\"\n type=\"button\"\n *ngFor=\"let preset of ALL_GAUGE_PRESETS\"\n (click)=\"emitPresetChange(preset.id)\"\n >\n <c8y-radial-gauge\n class=\"c8y-radial-gauge--square\"\n *ngIf=\"preset.id !== 'custom'\"\n [activeDatapointGauge]=\"activeDatapointGauge\"\n [measurement]=\"measurement\"\n [fractionSize]=\"2\"\n [selectedPresetId]=\"preset.id\"\n [gaugeOptions]=\"preset\"\n ></c8y-radial-gauge>\n <span>{{ preset.name | translate }}</span>\n </button>\n</div>\n","import { Component, OnInit, Input, Optional, ViewChild, OnDestroy } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport {\n CommonModule,\n DynamicComponentComponent,\n FormGroupComponent,\n FormsModule,\n gettext,\n MeasurementRealtimeService,\n MessagesComponent,\n OnBeforeSave\n} from '@c8y/ngx-components';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { RadialGaugeViewComponent } from '../radial-gauge/radial-gauge.component';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport {\n GAUGE_PRESET_NAMES,\n GAUGE_PRESETS,\n GaugeOptions,\n InfoGaugeWidgetConfig\n} from './gauge.model';\nimport { EditorComponent, MonacoEditorMarkerValidatorDirective } from '@c8y/ngx-components/editor';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PresetPreviewComponent } from './preset-preview/preset-preview.component';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n datapointListAttributes: string[]\n): ValidatorFn {\n return (control: AbstractControl) => {\n const formValue = control.value;\n for (const listAttributeName of datapointListAttributes) {\n const valueForList: KPIDetails[] = formValue[listAttributeName];\n if (!valueForList || !Array.isArray(valueForList)) {\n continue;\n }\n\n if (valueForList.find(dp => dp.__active)) {\n return null;\n }\n }\n return { noActiveDatapoint: true };\n };\n}\n\n@Component({\n selector: 'c8y-info-gauge-widget-config',\n templateUrl: './info-gauge-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [\n FormGroupComponent,\n MessagesComponent,\n CommonModule,\n FormsModule,\n CollapseModule,\n ReactiveFormsModule,\n EditorComponent,\n MonacoEditorMarkerValidatorDirective,\n DatapointSelectorModule,\n RadialGaugeViewComponent,\n InfoGaugeCurrentMeasurementPipe,\n PresetPreviewComponent\n ]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n @Input() config: InfoGaugeWidgetConfig;\n @ViewChild(EditorComponent) editorComponent!: EditorComponent;\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true,\n selectableChartRenderTypes: []\n };\n isInfoGauge: boolean;\n activeDatapointGauge: KPIDetails;\n showAdvancedOptions = false;\n gaugeOptionsString = '';\n gaugeOptions: GaugeOptions;\n showAdvancedOptionsLabel = gettext('Show advanced options');\n hideAdvancedOptionsLabel = gettext('Hide advanced options');\n ALL_GAUGE_PRESETS = [...GAUGE_PRESETS];\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n readonly GAUGE_PRESETS = GAUGE_PRESETS;\n private destroy$ = new Subject<void>();\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent,\n @Optional() private dynamicComponent?: DynamicComponentComponent\n ) {}\n\n onBeforeSave(\n config?: InfoGaugeWidgetConfigComponent['config']\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n Object.assign(config, {\n gaugeOptions: this.gaugeOptions,\n selectedPresetId: this.isInfoGauge ? null : this.getPresetId(this.gaugeOptions)\n });\n return true;\n }\n return false;\n }\n\n ngOnInit(): void {\n if (this.widgetConfig.context?.id) {\n this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n }\n this.initForm();\n if (this.config?.datapointsLabels) {\n this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n }\n if (this.config?.datapointsGauge) {\n this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n }\n if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n }\n this.isInfoGauge = this.dynamicComponent?.componentId === defaultWidgetIds.INFO_GAUGE;\n\n const isRadialGauge = !this.isInfoGauge;\n\n if (isRadialGauge) {\n this.setupRadialGauge();\n }\n\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n if (value.datapointsGauge) {\n this.activeDatapointGauge = value.datapointsGauge.find(dp => dp.__active);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onRadioPresetChange(presetId: string): void {\n // Find the selected preset\n const selectedPreset = this.ALL_GAUGE_PRESETS.find(preset => preset.id === presetId);\n\n if (selectedPreset) {\n this.gaugeOptions = { ...selectedPreset }; // Update gaugeOptions with the selected preset\n this.gaugeOptionsString = JSON.stringify(this.gaugeOptions, null, 2);\n\n // If the selected preset is not custom, hide advanced options\n if (selectedPreset.id !== 'custom') {\n this.showAdvancedOptions = false;\n }\n\n // Update the form control value\n this.formGroup.patchValue({ gaugePresetId: selectedPreset.id });\n }\n }\n\n async assignSchema(): Promise<void> {\n const { schema } = await import(\n 'c8y-schema-loader?interfaceName=GaugeOptions!@c8y/ngx-components/widgets/implementations/info-gauge'\n );\n this.editorComponent.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n schemas: [\n {\n uri: 'gauge-schema.json',\n schema: schema,\n fileMatch: ['*']\n }\n ],\n enableSchemaRequest: false,\n allowComments: false\n });\n }\n\n gaugeJSONChange(value: string): void {\n try {\n const parsedOptions = JSON.parse(value);\n\n // Check if the parsed options match any existing preset\n const matchingPreset = this.GAUGE_PRESETS.find(\n preset => JSON.stringify(preset) === JSON.stringify(parsedOptions)\n );\n\n if (matchingPreset) {\n this.formGroup.patchValue({ gaugePresetId: matchingPreset.id });\n } else {\n this.gaugeOptions = parsedOptions;\n this.gaugeOptions.name = GAUGE_PRESET_NAMES.CUSTOM;\n this.gaugeOptions.id = 'custom';\n\n const customPresetExists = this.ALL_GAUGE_PRESETS.some(preset => preset.id === 'custom');\n\n if (!customPresetExists) {\n this.ALL_GAUGE_PRESETS = [...this.ALL_GAUGE_PRESETS, this.gaugeOptions];\n } else {\n this.ALL_GAUGE_PRESETS = this.ALL_GAUGE_PRESETS.map(preset =>\n preset.id === 'custom' ? this.gaugeOptions : preset\n );\n }\n\n this.formGroup.patchValue({ gaugePresetId: 'custom' });\n }\n } catch (error) {\n console.error('Invalid JSON:', error);\n }\n }\n\n trackByFn(_index: number, item: GaugeOptions): string {\n return item.id;\n }\n\n private getPresetId(gaugeOptions: GaugeOptions): string {\n const matchingPreset = this.GAUGE_PRESETS.find(preset => preset.id === gaugeOptions.id);\n\n return matchingPreset ? matchingPreset.id : 'custom';\n }\n\n private setupRadialGauge() {\n if (this.config.datapoints && !this.config.datapointsGauge) {\n this.config.datapointsGauge = this.config.datapoints;\n }\n\n this.gaugeOptions = this.config.gaugeOptions || { ...this.GAUGE_PRESETS[0] };\n\n if (this.config.selectedPresetId === 'custom') {\n this.gaugeOptions.name = GAUGE_PRESET_NAMES.CUSTOM;\n this.gaugeOptions.id = 'custom';\n this.ALL_GAUGE_PRESETS = [...this.GAUGE_PRESETS, this.config.gaugeOptions];\n this.formGroup.patchValue({ gaugePresetId: 'custom' });\n }\n\n this.gaugeOptionsString = JSON.stringify(this.gaugeOptions, null, 2);\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group(\n {\n fractionSize: [\n 2,\n [\n Validators.required,\n Validators.min(this.limits.numberOfDecimalPlacesMin),\n Validators.max(this.limits.numberOfDecimalPlacesMax)\n ]\n ],\n datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), []),\n gaugePresetId: [this.config.selectedPresetId || 'default']\n },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<form\n class=\"fit-h\"\n [formGroup]=\"formGroup\"\n>\n <div\n class=\"m-l-16 m-r-16\"\n *ngIf=\"isInfoGauge; else radialGauge\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n name=\"datapoints\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n name=\"datapoints\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </div>\n\n <ng-template #radialGauge>\n <div class=\"d-flex-md fit-h\">\n <div class=\"col-md-6 inner-scroll p-0 bg-component\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit d-block\"\n listTitle=\"{{ 'Data points`display`' | translate }}\"\n name=\"datapoints\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n\n <c8y-form-group class=\"p-t-8 p-r-16 p-l-16\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n\n <div class=\"form-group p-r-16 p-l-16 m-b-0\">\n <legend>\n {{ 'Presets' | translate }}\n </legend>\n <c8y-preset-preview\n formControlName=\"gaugePresetId\"\n [ALL_GAUGE_PRESETS]=\"ALL_GAUGE_PRESETS\"\n (onPresetChange)=\"onRadioPresetChange($event)\"\n ></c8y-preset-preview>\n </div>\n\n <div class=\"p-16\">\n <button\n class=\"btn btn-default\"\n aria-controls=\"advancedCollapse\"\n [attr.aria-expanded]=\"showAdvancedOptions\"\n type=\"button\"\n (click)=\"showAdvancedOptions = !showAdvancedOptions\"\n >\n {{ showAdvancedOptions ? hideAdvancedOptionsLabel : showAdvancedOptionsLabel }}\n </button>\n </div>\n\n <div\n class=\"collapse\"\n id=\"advancedCollapse\"\n [collapse]=\"!showAdvancedOptions\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"fit-h\"\n style=\"min-height: 400px\"\n >\n <c8y-editor\n [ngModel]=\"gaugeOptionsString\"\n (ngModelChange)=\"gaugeJSONChange($event)\"\n (editorInit)=\"assignSchema()\"\n [ngModelOptions]=\"{ standalone: true }\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"\n this.formGroup.value.datapointsGauge.length > 0 && activeDatapointGauge;\n else emptyState\n \"\n >\n <!-- Radial Gauge -->\n <c8y-radial-gauge\n class=\"c8y-radial-gauge--square\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement | async as measurement\"\n [activeDatapointGauge]=\"activeDatapointGauge\"\n [measurement]=\"measurement\"\n [fractionSize]=\"formGroup.value.fractionSize\"\n [gaugeOptions]=\"gaugeOptions\"\n [selectedPresetId]=\"formGroup.value.gaugePresetId\"\n ></c8y-radial-gauge>\n </div>\n </div>\n </ng-template>\n</form>\n\n<ng-template #emptyState>\n <div class=\"col-md-6 d-col a-i-start j-c-center\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'Please select a data point first.' | translate\"\n [horizontal]=\"false\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\nimport { RadialGaugeViewComponent } from './radial-gauge/radial-gauge.component';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe,\n RadialGaugeViewComponent\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}