@c8y/ngx-components 1024.20.1 → 1024.21.3

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 (142) hide show
  1. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +527 -12
  2. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  3. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +31 -9
  4. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-ai.mjs +503 -62
  6. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +2 -2
  8. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-alarms.mjs +3 -3
  10. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-application-access-list.mjs +1 -1
  12. package/fesm2022/c8y-ngx-components-application-access-list.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-application-select.mjs +1 -1
  14. package/fesm2022/c8y-ngx-components-application-select.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-asset-properties.mjs +3 -2
  16. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +1 -1
  18. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-bookmarks.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +5 -5
  24. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  25. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Jyjkv4JT.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CP1afwVe.mjs} +2 -2
  26. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Jyjkv4JT.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CP1afwVe.mjs.map} +1 -1
  27. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +81 -20
  28. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  29. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-UEUYsXBv.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CRvgIgri.mjs} +2 -2
  30. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-UEUYsXBv.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CRvgIgri.mjs.map} +1 -1
  31. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +2 -2
  32. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +3 -3
  35. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  37. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
  39. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
  41. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-echart.mjs +146 -126
  43. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -2
  45. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-ecosystem.mjs +4 -4
  49. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
  51. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-events.mjs +2 -2
  53. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-icon-selector.mjs +4 -4
  55. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +1 -1
  57. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  59. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
  61. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
  63. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +2 -2
  65. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
  67. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +2 -2
  69. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +5 -5
  71. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  73. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-register-device.mjs +3 -3
  75. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  77. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +1 -1
  79. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  81. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +4 -4
  83. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
  85. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-repository-software.mjs +3 -3
  89. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
  91. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-tracking.mjs +1 -1
  93. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  95. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +17 -1
  97. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs +21 -1
  99. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +60 -31
  101. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +2 -2
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
  105. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  109. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +1 -1
  111. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs +1 -1
  113. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components.mjs +500 -38
  115. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  116. package/locales/de.po +72 -0
  117. package/locales/es.po +72 -0
  118. package/locales/fr.po +72 -0
  119. package/locales/ja_JP.po +72 -0
  120. package/locales/ko.po +72 -0
  121. package/locales/locales.pot +72 -3
  122. package/locales/nl.po +72 -0
  123. package/locales/pl.po +73 -1
  124. package/locales/pt_BR.po +74 -2
  125. package/locales/zh_CN.po +72 -0
  126. package/locales/zh_TW.po +72 -0
  127. package/package.json +1 -1
  128. package/types/c8y-ngx-components-ai-agent-chat.d.ts +201 -3
  129. package/types/c8y-ngx-components-ai-agent-chat.d.ts.map +1 -1
  130. package/types/c8y-ngx-components-ai-ai-chat.d.ts +14 -4
  131. package/types/c8y-ngx-components-ai-ai-chat.d.ts.map +1 -1
  132. package/types/c8y-ngx-components-ai.d.ts +157 -2
  133. package/types/c8y-ngx-components-ai.d.ts.map +1 -1
  134. package/types/c8y-ngx-components-asset-properties.d.ts.map +1 -1
  135. package/types/c8y-ngx-components-context-dashboard.d.ts +37 -3
  136. package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
  137. package/types/c8y-ngx-components-echart.d.ts +6 -0
  138. package/types/c8y-ngx-components-echart.d.ts.map +1 -1
  139. package/types/c8y-ngx-components-widgets-implementations-asset-table.d.ts +5 -0
  140. package/types/c8y-ngx-components-widgets-implementations-asset-table.d.ts.map +1 -1
  141. package/types/c8y-ngx-components.d.ts +310 -12
  142. package/types/c8y-ngx-components.d.ts.map +1 -1
@@ -1,5 +1,5 @@
1
1
  import { PreviewService, DynamicManagedObjectResolver, WIDGET_CONFIGURATION_GRID_SIZE, DynamicComponentErrorStrategy, hookWidget, hookPreview } from '@c8y/ngx-components';
2
- import { quoteAndEscape, hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';
2
+ import { quoteAndEscape, bindAssetReferenceToContext, bindAssetPropertyMappingsToContext, replaceContextInAssetReference, replaceContextInAssetPropertyMappings, hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { gettext } from '@c8y/ngx-components/gettext';
@@ -145,6 +145,22 @@ class HtmlWidgetFactory {
145
145
  schema: () => import('c8y-schema-loader?interfaceName=HtmlWidgetConfig&type=widget-config!@c8y/ngx-components/widgets/implementations/html-widget'),
146
146
  export: exportConfigWithDevice,
147
147
  import: importConfigWithDevice,
148
+ paste: (config, newContext, oldContext) => {
149
+ // Both hooks replace the default context replacement entirely, so the primary device has
150
+ // to be rebound here as well as the per-placeholder properties.
151
+ replaceContextInAssetReference(config?.device, newContext, oldContext);
152
+ if (config?.properties) {
153
+ config.properties = replaceContextInAssetPropertyMappings(config.properties, newContext, oldContext);
154
+ }
155
+ return config;
156
+ },
157
+ applyContext: (config, context) => {
158
+ bindAssetReferenceToContext(config?.device, context);
159
+ if (config?.properties) {
160
+ config.properties = bindAssetPropertyMappingsToContext(config.properties, context);
161
+ }
162
+ return config;
163
+ },
148
164
  settings: {
149
165
  noNewWidgets: false,
150
166
  configurationViewGridSize: WIDGET_CONFIGURATION_GRID_SIZE.HALF,
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-definitions-html-widget.mjs","sources":["../../widgets/definitions/html-widget/html-widget-config.factory.ts","../../widgets/definitions/html-widget/html-widget.factory.ts","../../widgets/definitions/html-widget/index.ts","../../widgets/definitions/html-widget/c8y-ngx-components-widgets-definitions-html-widget.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { ExtensionFactory, PreviewService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type {\n AssetPropertyMapping,\n WidgetConfigSectionDefinition\n} from '@c8y/ngx-components/context-dashboard';\nimport { map, Observable } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PRESET_NAME } from '@c8y/ngx-components/global-context';\nimport { quoteAndEscape } from '@c8y/ngx-components/context-dashboard';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlWidgetConfigFactory implements ExtensionFactory<WidgetConfigSectionDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetConfigDefinition: WidgetConfigSectionDefinition[] = [\n {\n widgetId: defaultWidgetIds.HTML,\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(m => [\n m.HtmlWidgetConfigService\n ]),\n label: gettext('Asset selection'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.WidgetAssetSelectorComponent),\n priority: 100,\n initialState: {\n isRequired: false,\n groupsSelectable: true\n }\n },\n {\n widgetId: defaultWidgetIds.HTML,\n label: gettext('Asset properties'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.AssetPropertyMappingsComponent),\n priority: 70,\n initialState: {\n widgetConfigPath: ['properties'],\n initialMappings: {\n lastUpdated: {\n label: 'Last updated',\n assetProperty: {\n c8y_JsonSchema: {\n properties: {\n lastUpdated: {\n type: 'string',\n label: 'Last updated'\n }\n }\n },\n name: 'lastUpdated',\n label: 'Last updated',\n type: 'string',\n isEditable: false,\n isStandardProperty: true,\n active: true\n }\n },\n lastDeviceMessage: {\n label: 'Last device message',\n assetProperty: {\n c8y_JsonSchema: {\n properties: {\n lastDeviceMessage: {\n label: 'Last device message',\n type: 'string'\n }\n }\n },\n name: 'lastDeviceMessage',\n label: 'Last device message',\n printFormat: 'datetime',\n type: 'string',\n computed: true,\n isEditable: false,\n isStandardProperty: true,\n active: true\n }\n }\n },\n allowAddingNewMappings: true,\n allowRenamingMappings: true,\n allowRelabellingMappings: false,\n allowEditingMappings: true,\n allowRemovingMappings: true,\n showLabels: false,\n showNames: true,\n showAssets: true,\n showValues: true,\n onBeforeCopyMappingToClipboard: (mapping: AssetPropertyMapping) => {\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n const name = String(mapping.name);\n const nameQuotedEscaped = quoteAndEscape(name);\n const key = nonAlphanumericRegex.test(name) ? `[${nameQuotedEscaped}]` : name;\n return '${this.c8yProperties?.' + key + '}';\n }\n }\n },\n {\n widgetId: defaultWidgetIds.HTML,\n priority: 40,\n label: gettext('Time context'),\n initialState: {\n controls: PRESET_NAME.AUTO_REFRESH_ONLY_CONFIG\n },\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.GlobalContextSectionComponent)\n },\n {\n widgetId: defaultWidgetIds.HTML,\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(m => [\n m.HtmlWidgetConfigService\n ]),\n label: gettext('Settings'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(\n m => m.HtmlWidgetConfigComponent\n ),\n priority: 0,\n expanded: true\n }\n ];\n\n get(): Observable<WidgetConfigSectionDefinition[]> {\n return this.betaPreviewService.getState$('ui.html-widget.v2').pipe(\n map(state => {\n if (state) {\n return this.baseWidgetConfigDefinition;\n }\n return [];\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n DynamicComponentDefinition,\n DynamicComponentErrorStrategy,\n DynamicManagedObjectResolver,\n DynamicWidgetDefinition,\n ExtensionFactory,\n PreviewService,\n WIDGET_CONFIGURATION_GRID_SIZE\n} from '@c8y/ngx-components';\nimport { map, Observable } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport {\n exportConfigWithDevice,\n importConfigWithDevice\n} from '@c8y/ngx-components/widgets/import-export-config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlWidgetFactory implements ExtensionFactory<DynamicComponentDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetDefinition: DynamicComponentDefinition = {\n id: defaultWidgetIds.HTML,\n label: gettext('HTML'),\n description: gettext(`Display custom HTML code.`),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(\n m => m.HtmlWidgetComponent\n ),\n errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,\n previewImage: 'c8y-style-assets/html-widget-pr.png',\n data: {\n schema: () =>\n import(\n 'c8y-schema-loader?interfaceName=HtmlWidgetConfig&type=widget-config!@c8y/ngx-components/widgets/implementations/html-widget'\n ),\n export: exportConfigWithDevice,\n import: importConfigWithDevice,\n settings: {\n noNewWidgets: false,\n configurationViewGridSize: WIDGET_CONFIGURATION_GRID_SIZE.HALF,\n widgetDefaults: {\n _width: 8,\n _height: 6\n }\n }\n },\n resolve: {\n device: DynamicManagedObjectResolver\n }\n };\n\n get(): Observable<DynamicWidgetDefinition[]> {\n return this.betaPreviewService.getState$('ui.html-widget.v2').pipe(\n map(state => {\n if (state) {\n return [this.baseWidgetDefinition];\n }\n return [];\n })\n );\n }\n}\n","import { hookPreview, hookWidget } from '@c8y/ngx-components';\nimport { hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlWidgetConfigFactory } from './html-widget-config.factory';\nimport { HtmlWidgetFactory } from './html-widget.factory';\n\nexport const htmlWidgetProviders = [\n hookWidget(HtmlWidgetFactory),\n hookWidgetConfig(HtmlWidgetConfigFactory),\n hookPreview({\n key: 'ui.html-widget.v2',\n label: 'Improved HTML widget',\n description: () =>\n import('@c8y/style/markdown-files/html-widget-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-definitions-html-widget.mjs","sources":["../../widgets/definitions/html-widget/html-widget-config.factory.ts","../../widgets/definitions/html-widget/html-widget.factory.ts","../../widgets/definitions/html-widget/index.ts","../../widgets/definitions/html-widget/c8y-ngx-components-widgets-definitions-html-widget.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { ExtensionFactory, PreviewService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type {\n AssetPropertyMapping,\n WidgetConfigSectionDefinition\n} from '@c8y/ngx-components/context-dashboard';\nimport { map, Observable } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PRESET_NAME } from '@c8y/ngx-components/global-context';\nimport { quoteAndEscape } from '@c8y/ngx-components/context-dashboard';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlWidgetConfigFactory implements ExtensionFactory<WidgetConfigSectionDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetConfigDefinition: WidgetConfigSectionDefinition[] = [\n {\n widgetId: defaultWidgetIds.HTML,\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(m => [\n m.HtmlWidgetConfigService\n ]),\n label: gettext('Asset selection'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.WidgetAssetSelectorComponent),\n priority: 100,\n initialState: {\n isRequired: false,\n groupsSelectable: true\n }\n },\n {\n widgetId: defaultWidgetIds.HTML,\n label: gettext('Asset properties'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.AssetPropertyMappingsComponent),\n priority: 70,\n initialState: {\n widgetConfigPath: ['properties'],\n initialMappings: {\n lastUpdated: {\n label: 'Last updated',\n assetProperty: {\n c8y_JsonSchema: {\n properties: {\n lastUpdated: {\n type: 'string',\n label: 'Last updated'\n }\n }\n },\n name: 'lastUpdated',\n label: 'Last updated',\n type: 'string',\n isEditable: false,\n isStandardProperty: true,\n active: true\n }\n },\n lastDeviceMessage: {\n label: 'Last device message',\n assetProperty: {\n c8y_JsonSchema: {\n properties: {\n lastDeviceMessage: {\n label: 'Last device message',\n type: 'string'\n }\n }\n },\n name: 'lastDeviceMessage',\n label: 'Last device message',\n printFormat: 'datetime',\n type: 'string',\n computed: true,\n isEditable: false,\n isStandardProperty: true,\n active: true\n }\n }\n },\n allowAddingNewMappings: true,\n allowRenamingMappings: true,\n allowRelabellingMappings: false,\n allowEditingMappings: true,\n allowRemovingMappings: true,\n showLabels: false,\n showNames: true,\n showAssets: true,\n showValues: true,\n onBeforeCopyMappingToClipboard: (mapping: AssetPropertyMapping) => {\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n const name = String(mapping.name);\n const nameQuotedEscaped = quoteAndEscape(name);\n const key = nonAlphanumericRegex.test(name) ? `[${nameQuotedEscaped}]` : name;\n return '${this.c8yProperties?.' + key + '}';\n }\n }\n },\n {\n widgetId: defaultWidgetIds.HTML,\n priority: 40,\n label: gettext('Time context'),\n initialState: {\n controls: PRESET_NAME.AUTO_REFRESH_ONLY_CONFIG\n },\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.GlobalContextSectionComponent)\n },\n {\n widgetId: defaultWidgetIds.HTML,\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(m => [\n m.HtmlWidgetConfigService\n ]),\n label: gettext('Settings'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(\n m => m.HtmlWidgetConfigComponent\n ),\n priority: 0,\n expanded: true\n }\n ];\n\n get(): Observable<WidgetConfigSectionDefinition[]> {\n return this.betaPreviewService.getState$('ui.html-widget.v2').pipe(\n map(state => {\n if (state) {\n return this.baseWidgetConfigDefinition;\n }\n return [];\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n DynamicComponentDefinition,\n DynamicComponentErrorStrategy,\n DynamicManagedObjectResolver,\n DynamicWidgetDefinition,\n ExtensionFactory,\n PreviewService,\n WIDGET_CONFIGURATION_GRID_SIZE\n} from '@c8y/ngx-components';\nimport { map, Observable } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport {\n exportConfigWithDevice,\n importConfigWithDevice\n} from '@c8y/ngx-components/widgets/import-export-config';\nimport {\n bindAssetPropertyMappingsToContext,\n bindAssetReferenceToContext,\n replaceContextInAssetPropertyMappings,\n replaceContextInAssetReference\n} from '@c8y/ngx-components/context-dashboard';\nimport type { HtmlWidgetConfig } from '@c8y/ngx-components/widgets/implementations/html-widget';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlWidgetFactory implements ExtensionFactory<DynamicComponentDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetDefinition: DynamicComponentDefinition = {\n id: defaultWidgetIds.HTML,\n label: gettext('HTML'),\n description: gettext(`Display custom HTML code.`),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/html-widget').then(\n m => m.HtmlWidgetComponent\n ),\n errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,\n previewImage: 'c8y-style-assets/html-widget-pr.png',\n data: {\n schema: () =>\n import(\n 'c8y-schema-loader?interfaceName=HtmlWidgetConfig&type=widget-config!@c8y/ngx-components/widgets/implementations/html-widget'\n ),\n export: exportConfigWithDevice,\n import: importConfigWithDevice,\n paste: (\n config: HtmlWidgetConfig,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) => {\n // Both hooks replace the default context replacement entirely, so the primary device has\n // to be rebound here as well as the per-placeholder properties.\n replaceContextInAssetReference(config?.device, newContext, oldContext);\n if (config?.properties) {\n config.properties = replaceContextInAssetPropertyMappings(\n config.properties,\n newContext,\n oldContext\n );\n }\n return config;\n },\n applyContext: (config: HtmlWidgetConfig, context: Partial<IManagedObject>) => {\n bindAssetReferenceToContext(config?.device, context);\n if (config?.properties) {\n config.properties = bindAssetPropertyMappingsToContext(config.properties, context);\n }\n return config;\n },\n settings: {\n noNewWidgets: false,\n configurationViewGridSize: WIDGET_CONFIGURATION_GRID_SIZE.HALF,\n widgetDefaults: {\n _width: 8,\n _height: 6\n }\n }\n },\n resolve: {\n device: DynamicManagedObjectResolver\n }\n };\n\n get(): Observable<DynamicWidgetDefinition[]> {\n return this.betaPreviewService.getState$('ui.html-widget.v2').pipe(\n map(state => {\n if (state) {\n return [this.baseWidgetDefinition];\n }\n return [];\n })\n );\n }\n}\n","import { hookPreview, hookWidget } from '@c8y/ngx-components';\nimport { hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlWidgetConfigFactory } from './html-widget-config.factory';\nimport { HtmlWidgetFactory } from './html-widget.factory';\n\nexport const htmlWidgetProviders = [\n hookWidget(HtmlWidgetFactory),\n hookWidgetConfig(HtmlWidgetConfigFactory),\n hookPreview({\n key: 'ui.html-widget.v2',\n label: 'Improved HTML widget',\n description: () =>\n import('@c8y/style/markdown-files/html-widget-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { PreviewService, DynamicManagedObjectResolver, DynamicComponentErrorStrategy, hookWidget, hookPreview } from '@c8y/ngx-components';
2
- import { replaceContextInAssetReference, replaceContextInAssetPropertyMappings, WidgetAssetSelectorComponent, quoteAndEscape, hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';
2
+ import { bindAssetReferenceToContext, bindAssetPropertyMappingsToContext, replaceContextInAssetReference, replaceContextInAssetPropertyMappings, WidgetAssetSelectorComponent, quoteAndEscape, hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { gettext } from '@c8y/ngx-components/gettext';
@@ -31,6 +31,26 @@ class ScadaWidgetFactory {
31
31
  }
32
32
  return config;
33
33
  },
34
+ applyContext: (config, context) => {
35
+ // The hook replaces the default context replacement entirely, so the primary device has
36
+ // to be bound here as well as the per-placeholder mappings.
37
+ bindAssetReferenceToContext(config?.device, context);
38
+ if (config?.config?.mappings) {
39
+ config.config.mappings = bindAssetPropertyMappingsToContext(config.config.mappings, context);
40
+ }
41
+ // A widget still holding a SCADA 1.0 configuration has not been migrated to 2.0 at this
42
+ // point: ScadaWidgetConfigService migrates it when the widget renders, which is after this
43
+ // hook runs, and the result is not written back unless the user saves the widget. So the
44
+ // legacy `deviceIds` map is what the migration reads to resolve each placeholder's asset,
45
+ // and binding it here is what makes the migrated mappings point at the viewed device.
46
+ Object.keys(config?.deviceIds ?? {}).forEach(placeholder => (config.deviceIds[placeholder] = context.id));
47
+ // Legacy computed properties, such as "Last measurement", keep their own data point
48
+ // targets, which the migration copies over as they are.
49
+ Object.values(config?.mapping ?? {})
50
+ .flatMap(legacyMapping => legacyMapping?.config?.dp ?? [])
51
+ .forEach(dataPoint => bindAssetReferenceToContext(dataPoint?.__target, context));
52
+ return config;
53
+ },
34
54
  settings: {
35
55
  noNewWidgets: false,
36
56
  widgetDefaults: {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-definitions-scada.mjs","sources":["../../widgets/definitions/scada/scada-widget.factory.ts","../../widgets/definitions/scada/scada-widget-config.factory.ts","../../widgets/definitions/scada/index.ts","../../widgets/definitions/scada/c8y-ngx-components-widgets-definitions-scada.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport {\n DynamicComponentDefinition,\n DynamicComponentErrorStrategy,\n DynamicManagedObjectResolver,\n DynamicWidgetDefinition,\n ExtensionFactory,\n PreviewService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { from, map, Observable, switchMap } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport {\n exportConfigWithDevice,\n importConfigWithDevice\n} from '@c8y/ngx-components/widgets/import-export-config';\nimport {\n replaceContextInAssetPropertyMappings,\n replaceContextInAssetReference\n} from '@c8y/ngx-components/context-dashboard';\n\n@Injectable({ providedIn: 'root' })\nexport class ScadaWidgetFactory implements ExtensionFactory<DynamicComponentDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetDefinition: DynamicComponentDefinition = {\n id: defaultWidgetIds.SCADA,\n label: gettext('SCADA'),\n description: gettext(\n `Displays a dynamically updated SVG image for real-time device monitoring.`\n ),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetViewComponent\n ),\n errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,\n previewImage: 'c8y-style-assets/scada-widget-preview.png',\n data: {\n schema: () =>\n import(\n 'c8y-schema-loader?interfaceName=ScadaWidgetConfig!@c8y/ngx-components/widgets/implementations/scada'\n ),\n export: exportConfigWithDevice,\n import: importConfigWithDevice,\n paste: (config, newContext, oldContext) => {\n // The hook replaces the default context replacement entirely, so the primary device has\n // to be rebound here as well as the per-placeholder mappings.\n replaceContextInAssetReference(config?.device, newContext, oldContext);\n if (config?.config?.mappings) {\n config.config.mappings = replaceContextInAssetPropertyMappings(\n config.config.mappings,\n newContext,\n oldContext\n );\n }\n return config;\n },\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 8,\n _height: 4\n }\n }\n },\n resolve: {\n device: DynamicManagedObjectResolver\n }\n };\n\n get(): Observable<DynamicWidgetDefinition[]> {\n return from(\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.SCADA_WIDGET_FEATURE_FLAG_NAME\n )\n ).pipe(\n switchMap(featureFlagName => this.betaPreviewService.getState$(featureFlagName)),\n map(active => {\n if (active) {\n return [this.baseWidgetDefinition];\n }\n return [];\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { from, map, Observable, switchMap } from 'rxjs';\nimport { ExtensionFactory, PreviewService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AssetPropertyMapping,\n ContextWidgetConfig,\n quoteAndEscape,\n WidgetAssetSelectorComponent,\n WidgetConfigSectionDefinition\n} from '@c8y/ngx-components/context-dashboard';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PRESET_NAME } from '@c8y/ngx-components/global-context';\n\n@Injectable({ providedIn: 'root' })\nexport class ScadaWidgetConfigFactory implements ExtensionFactory<WidgetConfigSectionDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetConfigDefinition: WidgetConfigSectionDefinition[] = [\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Asset selection'),\n loadComponent: () => Promise.resolve(WidgetAssetSelectorComponent),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 100,\n initialState: {\n isRequired: false,\n groupsSelectable: true\n }\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('SVG configuration'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetSvgSelectorComponent\n ),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 70\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Placeholder mappings'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.AssetPropertyMappingsComponent),\n priority: 50,\n expanded: true,\n initialState: {\n widgetConfigPath: ['config', 'mappings'],\n allowAddingNewMappings: false,\n allowRenamingMappings: true,\n mappingNameFormatRegex: /^[a-zA-Z_$][a-zA-Z0-9_$]*$/,\n mappingNameFormatErrorMessage: gettext(\n 'Name must be a valid identifier (only letters, digits, underscores, or dollar signs allowed, cannot start with a digit).'\n ),\n allowRelabellingMappings: false,\n allowEditingMappings: true,\n allowRemovingMappings: false,\n showLabels: false,\n showNames: true,\n showAssets: true,\n showValues: true,\n emptyStateTitle: gettext('No placeholder mappings'),\n emptyStateSubtitle: gettext('Add first placeholder in the preview or code.'),\n feedbackMessage: gettext('{{ count }} placeholders'),\n onBeforeCopyMappingToClipboard: (\n mapping: AssetPropertyMapping,\n config?: ContextWidgetConfig | null\n ) => {\n const name = String(mapping.name);\n if (config?.config?.htmlWidgetConfig?.config?.legacy) {\n return `{{ ${name} }}`;\n }\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n const nameQuotedEscaped = quoteAndEscape(name);\n const key = nonAlphanumericRegex.test(name) ? `[${nameQuotedEscaped}]` : name;\n return '${this.c8yScadaValues?.' + key + '}';\n }\n }\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Time context'),\n initialState: {\n controls: PRESET_NAME.AUTO_REFRESH_ONLY_CONFIG\n },\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.GlobalContextSectionComponent),\n priority: 90\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Advanced editor'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetAdvancedEditorComponent\n ),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 40,\n expanded: false\n }\n ];\n\n get(): Observable<WidgetConfigSectionDefinition[]> {\n return from(\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.SCADA_WIDGET_FEATURE_FLAG_NAME\n )\n ).pipe(\n switchMap(featureFlagName => this.betaPreviewService.getState$(featureFlagName)),\n map(active => {\n if (active) {\n return this.baseWidgetConfigDefinition;\n }\n return [];\n })\n );\n }\n}\n","import { hookPreview, hookWidget } from '@c8y/ngx-components';\nimport { hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { ScadaWidgetFactory } from './scada-widget.factory';\nimport { ScadaWidgetConfigFactory } from './scada-widget-config.factory';\n\nexport const scadaWidgetProviders = [\n hookWidget(ScadaWidgetFactory),\n hookWidgetConfig(ScadaWidgetConfigFactory),\n hookPreview({\n key: 'ui.scada-widget.v2',\n label: 'SCADA widget v2',\n description: () =>\n import('@c8y/style/markdown-files/scada-widget-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-definitions-scada.mjs","sources":["../../widgets/definitions/scada/scada-widget.factory.ts","../../widgets/definitions/scada/scada-widget-config.factory.ts","../../widgets/definitions/scada/index.ts","../../widgets/definitions/scada/c8y-ngx-components-widgets-definitions-scada.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport type { IManagedObject } from '@c8y/client';\nimport {\n DynamicComponentDefinition,\n DynamicComponentErrorStrategy,\n DynamicManagedObjectResolver,\n DynamicWidgetDefinition,\n ExtensionFactory,\n PreviewService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { from, map, Observable, switchMap } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport {\n exportConfigWithDevice,\n importConfigWithDevice\n} from '@c8y/ngx-components/widgets/import-export-config';\nimport {\n bindAssetPropertyMappingsToContext,\n bindAssetReferenceToContext,\n replaceContextInAssetPropertyMappings,\n replaceContextInAssetReference\n} from '@c8y/ngx-components/context-dashboard';\nimport type {\n LegacyMappingComputed,\n ScadaWidgetConfig,\n ScadaWidgetConfigLegacy\n} from '@c8y/ngx-components/widgets/implementations/scada';\n\n@Injectable({ providedIn: 'root' })\nexport class ScadaWidgetFactory implements ExtensionFactory<DynamicComponentDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetDefinition: DynamicComponentDefinition = {\n id: defaultWidgetIds.SCADA,\n label: gettext('SCADA'),\n description: gettext(\n `Displays a dynamically updated SVG image for real-time device monitoring.`\n ),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetViewComponent\n ),\n errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,\n previewImage: 'c8y-style-assets/scada-widget-preview.png',\n data: {\n schema: () =>\n import(\n 'c8y-schema-loader?interfaceName=ScadaWidgetConfig!@c8y/ngx-components/widgets/implementations/scada'\n ),\n export: exportConfigWithDevice,\n import: importConfigWithDevice,\n paste: (\n config: ScadaWidgetConfig,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) => {\n // The hook replaces the default context replacement entirely, so the primary device has\n // to be rebound here as well as the per-placeholder mappings.\n replaceContextInAssetReference(config?.device, newContext, oldContext);\n if (config?.config?.mappings) {\n config.config.mappings = replaceContextInAssetPropertyMappings(\n config.config.mappings,\n newContext,\n oldContext\n );\n }\n return config;\n },\n applyContext: (\n config: Partial<ScadaWidgetConfig> & Partial<ScadaWidgetConfigLegacy>,\n context: Partial<IManagedObject>\n ) => {\n // The hook replaces the default context replacement entirely, so the primary device has\n // to be bound here as well as the per-placeholder mappings.\n bindAssetReferenceToContext(config?.device, context);\n if (config?.config?.mappings) {\n config.config.mappings = bindAssetPropertyMappingsToContext(\n config.config.mappings,\n context\n );\n }\n // A widget still holding a SCADA 1.0 configuration has not been migrated to 2.0 at this\n // point: ScadaWidgetConfigService migrates it when the widget renders, which is after this\n // hook runs, and the result is not written back unless the user saves the widget. So the\n // legacy `deviceIds` map is what the migration reads to resolve each placeholder's asset,\n // and binding it here is what makes the migrated mappings point at the viewed device.\n Object.keys(config?.deviceIds ?? {}).forEach(\n placeholder => (config.deviceIds[placeholder] = context.id)\n );\n // Legacy computed properties, such as \"Last measurement\", keep their own data point\n // targets, which the migration copies over as they are.\n Object.values(config?.mapping ?? {})\n .flatMap(legacyMapping => (legacyMapping as LegacyMappingComputed)?.config?.dp ?? [])\n .forEach(dataPoint => bindAssetReferenceToContext(dataPoint?.__target, context));\n return config;\n },\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 8,\n _height: 4\n }\n }\n },\n resolve: {\n device: DynamicManagedObjectResolver\n }\n };\n\n get(): Observable<DynamicWidgetDefinition[]> {\n return from(\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.SCADA_WIDGET_FEATURE_FLAG_NAME\n )\n ).pipe(\n switchMap(featureFlagName => this.betaPreviewService.getState$(featureFlagName)),\n map(active => {\n if (active) {\n return [this.baseWidgetDefinition];\n }\n return [];\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { from, map, Observable, switchMap } from 'rxjs';\nimport { ExtensionFactory, PreviewService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AssetPropertyMapping,\n ContextWidgetConfig,\n quoteAndEscape,\n WidgetAssetSelectorComponent,\n WidgetConfigSectionDefinition\n} from '@c8y/ngx-components/context-dashboard';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PRESET_NAME } from '@c8y/ngx-components/global-context';\n\n@Injectable({ providedIn: 'root' })\nexport class ScadaWidgetConfigFactory implements ExtensionFactory<WidgetConfigSectionDefinition> {\n private readonly betaPreviewService = inject(PreviewService);\n private readonly baseWidgetConfigDefinition: WidgetConfigSectionDefinition[] = [\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Asset selection'),\n loadComponent: () => Promise.resolve(WidgetAssetSelectorComponent),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 100,\n initialState: {\n isRequired: false,\n groupsSelectable: true\n }\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('SVG configuration'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetSvgSelectorComponent\n ),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 70\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Placeholder mappings'),\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.AssetPropertyMappingsComponent),\n priority: 50,\n expanded: true,\n initialState: {\n widgetConfigPath: ['config', 'mappings'],\n allowAddingNewMappings: false,\n allowRenamingMappings: true,\n mappingNameFormatRegex: /^[a-zA-Z_$][a-zA-Z0-9_$]*$/,\n mappingNameFormatErrorMessage: gettext(\n 'Name must be a valid identifier (only letters, digits, underscores, or dollar signs allowed, cannot start with a digit).'\n ),\n allowRelabellingMappings: false,\n allowEditingMappings: true,\n allowRemovingMappings: false,\n showLabels: false,\n showNames: true,\n showAssets: true,\n showValues: true,\n emptyStateTitle: gettext('No placeholder mappings'),\n emptyStateSubtitle: gettext('Add first placeholder in the preview or code.'),\n feedbackMessage: gettext('{{ count }} placeholders'),\n onBeforeCopyMappingToClipboard: (\n mapping: AssetPropertyMapping,\n config?: ContextWidgetConfig | null\n ) => {\n const name = String(mapping.name);\n if (config?.config?.htmlWidgetConfig?.config?.legacy) {\n return `{{ ${name} }}`;\n }\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n const nameQuotedEscaped = quoteAndEscape(name);\n const key = nonAlphanumericRegex.test(name) ? `[${nameQuotedEscaped}]` : name;\n return '${this.c8yScadaValues?.' + key + '}';\n }\n }\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Time context'),\n initialState: {\n controls: PRESET_NAME.AUTO_REFRESH_ONLY_CONFIG\n },\n loadComponent: () =>\n import('@c8y/ngx-components/context-dashboard').then(m => m.GlobalContextSectionComponent),\n priority: 90\n },\n {\n widgetId: defaultWidgetIds.SCADA,\n label: gettext('Advanced editor'),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.ScadaWidgetAdvancedEditorComponent\n ),\n providers: () =>\n import('@c8y/ngx-components/widgets/implementations/scada').then(m => [\n m.ScadaWidgetConfigService\n ]),\n priority: 40,\n expanded: false\n }\n ];\n\n get(): Observable<WidgetConfigSectionDefinition[]> {\n return from(\n import('@c8y/ngx-components/widgets/implementations/scada').then(\n m => m.SCADA_WIDGET_FEATURE_FLAG_NAME\n )\n ).pipe(\n switchMap(featureFlagName => this.betaPreviewService.getState$(featureFlagName)),\n map(active => {\n if (active) {\n return this.baseWidgetConfigDefinition;\n }\n return [];\n })\n );\n }\n}\n","import { hookPreview, hookWidget } from '@c8y/ngx-components';\nimport { hookWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { ScadaWidgetFactory } from './scada-widget.factory';\nimport { ScadaWidgetConfigFactory } from './scada-widget-config.factory';\n\nexport const scadaWidgetProviders = [\n hookWidget(ScadaWidgetFactory),\n hookWidgetConfig(ScadaWidgetConfigFactory),\n hookPreview({\n key: 'ui.scada-widget.v2',\n label: 'SCADA widget v2',\n description: () =>\n import('@c8y/style/markdown-files/scada-widget-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;MA8Ba,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAA+B;YAClE,EAAE,EAAE,gBAAgB,CAAC,KAAK;AAC1B,YAAA,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;AACvB,YAAA,WAAW,EAAE,OAAO,CAClB,CAAA,yEAAA,CAA2E,CAC5E;AACD,YAAA,aAAa,EAAE,MACb,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,CAAC,CAAC,wBAAwB,CAChC;YACH,aAAa,EAAE,6BAA6B,CAAC,aAAa;AAC1D,YAAA,YAAY,EAAE,2CAA2C;AACzD,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,MACN,OACE,qGAAqG,CACtG;AACH,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,MAAM,EAAE,sBAAsB;gBAC9B,KAAK,EAAE,CACL,MAAyB,EACzB,UAAmC,EACnC,UAAmC,KACjC;;;oBAGF,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;AACtE,oBAAA,IAAI,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC5B,wBAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,qCAAqC,CAC5D,MAAM,CAAC,MAAM,CAAC,QAAQ,EACtB,UAAU,EACV,UAAU,CACX;oBACH;AACA,oBAAA,OAAO,MAAM;gBACf,CAAC;AACD,gBAAA,YAAY,EAAE,CACZ,MAAqE,EACrE,OAAgC,KAC9B;;;AAGF,oBAAA,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AACpD,oBAAA,IAAI,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC5B,wBAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,kCAAkC,CACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,EACtB,OAAO,CACR;oBACH;;;;;;AAMA,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAC1C,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAC5D;;;oBAGD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;AAChC,yBAAA,OAAO,CAAC,aAAa,IAAK,aAAuC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;AACnF,yBAAA,OAAO,CAAC,SAAS,IAAI,2BAA2B,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClF,oBAAA,OAAO,MAAM;gBACf,CAAC;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,cAAc,EAAE;AACd,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,OAAO,EAAE;AACV;AACF;AACF,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE;AACT;SACF;AAiBF,IAAA;IAfC,GAAG,GAAA;AACD,QAAA,OAAO,IAAI,CACT,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,CAAC,CAAC,8BAA8B,CACtC,CACF,CAAC,IAAI,CACJ,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,EAChF,GAAG,CAAC,MAAM,IAAG;YACX,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACpC;AACA,YAAA,OAAO,EAAE;QACX,CAAC,CAAC,CACH;IACH;+GA7FW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCdrB,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,QAAA,IAAA,CAAA,0BAA0B,GAAoC;AAC7E,YAAA;gBACE,QAAQ,EAAE,gBAAgB,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;gBACjC,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,SAAS,EAAE,MACT,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AACpE,oBAAA,CAAC,CAAC;iBACH,CAAC;AACJ,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,YAAY,EAAE;AACZ,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,gBAAgB,EAAE;AACnB;AACF,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,gBAAgB,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,gBAAA,aAAa,EAAE,MACb,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,CAAC,CAAC,+BAA+B,CACvC;AACH,gBAAA,SAAS,EAAE,MACT,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AACpE,oBAAA,CAAC,CAAC;iBACH,CAAC;AACJ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,gBAAgB,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACtC,gBAAA,aAAa,EAAE,MACb,OAAO,uCAAuC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,8BAA8B,CAAC;AAC7F,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,YAAY,EAAE;AACZ,oBAAA,gBAAgB,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;AACxC,oBAAA,sBAAsB,EAAE,KAAK;AAC7B,oBAAA,qBAAqB,EAAE,IAAI;AAC3B,oBAAA,sBAAsB,EAAE,4BAA4B;AACpD,oBAAA,6BAA6B,EAAE,OAAO,CACpC,0HAA0H,CAC3H;AACD,oBAAA,wBAAwB,EAAE,KAAK;AAC/B,oBAAA,oBAAoB,EAAE,IAAI;AAC1B,oBAAA,qBAAqB,EAAE,KAAK;AAC5B,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,eAAe,EAAE,OAAO,CAAC,yBAAyB,CAAC;AACnD,oBAAA,kBAAkB,EAAE,OAAO,CAAC,+CAA+C,CAAC;AAC5E,oBAAA,eAAe,EAAE,OAAO,CAAC,0BAA0B,CAAC;AACpD,oBAAA,8BAA8B,EAAE,CAC9B,OAA6B,EAC7B,MAAmC,KACjC;wBACF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;wBACjC,IAAI,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;4BACpD,OAAO,CAAA,GAAA,EAAM,IAAI,CAAA,GAAA,CAAK;wBACxB;wBACA,MAAM,oBAAoB,GAAG,cAAc;AAC3C,wBAAA,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC;AAC9C,wBAAA,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAA,CAAA,CAAG,GAAG,IAAI;AAC7E,wBAAA,OAAO,yBAAyB,GAAG,GAAG,GAAG,GAAG;oBAC9C;AACD;AACF,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,gBAAgB,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,gBAAA,YAAY,EAAE;oBACZ,QAAQ,EAAE,WAAW,CAAC;AACvB,iBAAA;AACD,gBAAA,aAAa,EAAE,MACb,OAAO,uCAAuC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AAC5F,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,gBAAgB,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,gBAAA,aAAa,EAAE,MACb,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,CAAC,CAAC,kCAAkC,CAC1C;AACH,gBAAA,SAAS,EAAE,MACT,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AACpE,oBAAA,CAAC,CAAC;iBACH,CAAC;AACJ,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,QAAQ,EAAE;AACX;SACF;AAiBF,IAAA;IAfC,GAAG,GAAA;AACD,QAAA,OAAO,IAAI,CACT,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,CAAC,CAAC,8BAA8B,CACtC,CACF,CAAC,IAAI,CACJ,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,EAChF,GAAG,CAAC,MAAM,IAAG;YACX,IAAI,MAAM,EAAE;gBACV,OAAO,IAAI,CAAC,0BAA0B;YACxC;AACA,YAAA,OAAO,EAAE;QACX,CAAC,CAAC,CACH;IACH;+GA9GW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;4FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACT3B,MAAM,oBAAoB,GAAG;IAClC,UAAU,CAAC,kBAAkB,CAAC;IAC9B,gBAAgB,CAAC,wBAAwB,CAAC;AAC1C,IAAA,WAAW,CAAC;AACV,QAAA,GAAG,EAAE,oBAAoB;AACzB,QAAA,KAAK,EAAE,iBAAiB;AACxB,QAAA,WAAW,EAAE,MACX,OAAO,mDAAmD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAClF,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE;AACT;KACF;;;AChBH;;AAEG;;;;"}