@c8y/ngx-components 1023.0.2 → 1023.4.5

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 (67) hide show
  1. package/ai/agent-chat/index.d.ts +114 -0
  2. package/ai/agent-chat/index.d.ts.map +1 -0
  3. package/ai/ai-chat/index.d.ts +145 -0
  4. package/ai/ai-chat/index.d.ts.map +1 -0
  5. package/ai/index.d.ts +203 -0
  6. package/ai/index.d.ts.map +1 -0
  7. package/context-dashboard/device/add/index.d.ts +15 -1
  8. package/context-dashboard/device/add/index.d.ts.map +1 -1
  9. package/context-dashboard/device/view/index.d.ts +14 -2
  10. package/context-dashboard/device/view/index.d.ts.map +1 -1
  11. package/context-dashboard/devicemanagement/index.d.ts +10 -0
  12. package/context-dashboard/devicemanagement/index.d.ts.map +1 -0
  13. package/context-dashboard/index.d.ts +6 -30
  14. package/context-dashboard/index.d.ts.map +1 -1
  15. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +387 -0
  16. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -0
  17. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +258 -0
  18. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -0
  19. package/fesm2022/c8y-ngx-components-ai.mjs +291 -0
  20. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -0
  21. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +1 -1
  24. package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +2 -2
  25. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +68 -0
  26. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs.map +1 -0
  27. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +33 -46
  28. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-global-context.mjs +10 -10
  30. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-register-device.mjs +4 -6
  32. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -2
  34. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +574 -0
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -0
  37. package/fesm2022/c8y-ngx-components-widgets-exports.mjs +8 -1
  38. package/fesm2022/c8y-ngx-components-widgets-exports.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +176 -41
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components.mjs +98 -46
  42. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  43. package/index.d.ts +25 -4
  44. package/index.d.ts.map +1 -1
  45. package/locales/de.po +150 -15
  46. package/locales/es.po +150 -15
  47. package/locales/fr.po +149 -15
  48. package/locales/ja_JP.po +147 -12
  49. package/locales/ko.po +149 -15
  50. package/locales/locales.pot +144 -9
  51. package/locales/nl.po +150 -15
  52. package/locales/pl.po +149 -14
  53. package/locales/pt_BR.po +149 -15
  54. package/locales/zh_CN.po +149 -14
  55. package/locales/zh_TW.po +148 -13
  56. package/package.json +1 -1
  57. package/register-device/index.d.ts.map +1 -1
  58. package/widgets/cockpit-exports/index.d.ts +6 -0
  59. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  60. package/widgets/definitions/html-widget-ai-config/index.d.ts +6 -0
  61. package/widgets/definitions/html-widget-ai-config/index.d.ts.map +1 -0
  62. package/widgets/device-management-exports/index.d.ts +6 -0
  63. package/widgets/device-management-exports/index.d.ts.map +1 -1
  64. package/widgets/exports/index.d.ts +8 -1
  65. package/widgets/exports/index.d.ts.map +1 -1
  66. package/widgets/implementations/html-widget/index.d.ts +72 -16
  67. package/widgets/implementations/html-widget/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-exports.mjs","sources":["../../widgets/exports/index.ts","../../widgets/exports/c8y-ngx-components-widgets-exports.ts"],"sourcesContent":["import { PluginsExports } from '@c8y/options';\n\nexport const radialGaugeWidgetExport = {\n name: 'Widgets: Radial Gauge widget',\n module: 'radialGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/radial-gauge',\n description: 'Radial gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const kpiWidgetExport = {\n name: 'Widgets: KPI widget',\n module: 'kpiWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/kpi',\n description: 'KPI widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const alarmListWidgetExport = {\n name: 'Widgets: Alarm list',\n module: 'alarmListWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/alarm-list',\n description: 'Alarm list widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const criticalAlarmsWidgetExport = {\n name: 'Widgets: All critical alarms',\n module: 'criticalAlarmsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/all-critical-alarms',\n description: 'All critical alarms widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const recentAlarmsWidgetExport = {\n name: 'Widgets: Recent alarms',\n module: 'recentAlarmsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/recent-alarms',\n description: 'Recent alarms widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const applicationsWidgetExport = {\n name: 'Widgets: Applications',\n module: 'applicationsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/applications',\n description: 'Applications widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const legacyCockpitWelcomeWidgetExport = {\n name: 'Widgets: Legacy welcome to Cockpit',\n module: 'legacyCockpitWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/cockpit-legacy-welcome',\n description: 'Legacy welcome to Cockpit widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const cockpitWelcomeWidgetExport = {\n name: 'Widgets: Welcome to Cockpit',\n module: 'cockpitWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/cockpit-welcome',\n description: 'Welcome to Cockpit widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const deviceControlMessageWidgetExport = {\n name: 'Widgets: Message sending',\n module: 'deviceControlMessageWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/device-control-message',\n description: 'Message sending widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const helpAndServiceWidgetExport = {\n name: 'Widgets: Help and service',\n module: 'helpAndServiceWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/help-and-service',\n description: 'Help and service widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const imageWidgetExport = {\n name: 'Widgets: Image',\n module: 'imageWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/image',\n description: 'Image widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const infoGaugeWidgetExport = {\n name: 'Widgets: Info gauge',\n module: 'infoGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/info-gauge',\n description: 'Info gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const mapWidgetExport = {\n name: 'Widgets: Map',\n module: 'mapWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/map',\n description: 'Map widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const markdownWidgetExport = {\n name: 'Widgets: Markdown',\n module: 'markdownWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/markdown',\n description: 'Markdown widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const threeDRotationWidgetExport = {\n name: 'Widgets: Rotation',\n module: 'threeDRotationWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/three-d-rotation',\n description: 'Rotation widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const siloWidgetExport = {\n name: 'Widgets: Silo',\n module: 'siloWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/silo',\n description: 'Silo widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const linearGaugeWidgetExport = {\n name: 'Widgets: Linear Gauge',\n module: 'linearGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/linear-gauge',\n description: 'Linear Gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const datapointGraphWidgetExport = {\n name: 'Widgets: Data points graph',\n module: 'datapointGraphWidgetproviders',\n path: '@c8y/ngx-components/widgets/definitions/datapoints-graph',\n description: 'Data points graph widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const dataPointsTableWidgetExport = {\n name: 'Widgets: Data Points Table',\n module: 'dataPointsTableWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/datapoints-table',\n description: 'Data Points Table widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const htmlWidgetExport = {\n name: 'Widgets: HTML Widget',\n module: 'htmlWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/html-widget',\n description: 'Allows to set custom HTML on a dashboard',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const quickLinksWidgetExport = {\n name: 'Widgets: Quick Links',\n module: 'quickLinksWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/quick-links',\n description: 'Quick Links widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const deviceManagementWelcomeWidgetExport = {\n name: 'Widgets: Welcome to Device Management',\n module: 'deviceManagementWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/device-management-welcome',\n description: 'Welcome to Device Management widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const assetNotesWidgetExport = {\n name: 'Widgets: Asset notes',\n module: 'assetNotesWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/asset-notes',\n description: 'Asset notes widget',\n scope: 'self'\n} as const satisfies PluginsExports;\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-exports.mjs","sources":["../../widgets/exports/index.ts","../../widgets/exports/c8y-ngx-components-widgets-exports.ts"],"sourcesContent":["import { PluginsExports } from '@c8y/options';\n\nexport const radialGaugeWidgetExport = {\n name: 'Widgets: Radial Gauge widget',\n module: 'radialGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/radial-gauge',\n description: 'Radial gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const kpiWidgetExport = {\n name: 'Widgets: KPI widget',\n module: 'kpiWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/kpi',\n description: 'KPI widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const alarmListWidgetExport = {\n name: 'Widgets: Alarm list',\n module: 'alarmListWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/alarm-list',\n description: 'Alarm list widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const criticalAlarmsWidgetExport = {\n name: 'Widgets: All critical alarms',\n module: 'criticalAlarmsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/all-critical-alarms',\n description: 'All critical alarms widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const recentAlarmsWidgetExport = {\n name: 'Widgets: Recent alarms',\n module: 'recentAlarmsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/alarms/recent-alarms',\n description: 'Recent alarms widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const applicationsWidgetExport = {\n name: 'Widgets: Applications',\n module: 'applicationsWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/applications',\n description: 'Applications widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const legacyCockpitWelcomeWidgetExport = {\n name: 'Widgets: Legacy welcome to Cockpit',\n module: 'legacyCockpitWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/cockpit-legacy-welcome',\n description: 'Legacy welcome to Cockpit widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const cockpitWelcomeWidgetExport = {\n name: 'Widgets: Welcome to Cockpit',\n module: 'cockpitWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/cockpit-welcome',\n description: 'Welcome to Cockpit widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const deviceControlMessageWidgetExport = {\n name: 'Widgets: Message sending',\n module: 'deviceControlMessageWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/device-control-message',\n description: 'Message sending widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const helpAndServiceWidgetExport = {\n name: 'Widgets: Help and service',\n module: 'helpAndServiceWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/help-and-service',\n description: 'Help and service widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const imageWidgetExport = {\n name: 'Widgets: Image',\n module: 'imageWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/image',\n description: 'Image widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const infoGaugeWidgetExport = {\n name: 'Widgets: Info gauge',\n module: 'infoGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/info-gauge',\n description: 'Info gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const mapWidgetExport = {\n name: 'Widgets: Map',\n module: 'mapWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/map',\n description: 'Map widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const markdownWidgetExport = {\n name: 'Widgets: Markdown',\n module: 'markdownWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/markdown',\n description: 'Markdown widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const threeDRotationWidgetExport = {\n name: 'Widgets: Rotation',\n module: 'threeDRotationWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/three-d-rotation',\n description: 'Rotation widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const siloWidgetExport = {\n name: 'Widgets: Silo',\n module: 'siloWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/silo',\n description: 'Silo widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const linearGaugeWidgetExport = {\n name: 'Widgets: Linear Gauge',\n module: 'linearGaugeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/linear-gauge',\n description: 'Linear Gauge widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const datapointGraphWidgetExport = {\n name: 'Widgets: Data points graph',\n module: 'datapointGraphWidgetproviders',\n path: '@c8y/ngx-components/widgets/definitions/datapoints-graph',\n description: 'Data points graph widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const dataPointsTableWidgetExport = {\n name: 'Widgets: Data Points Table',\n module: 'dataPointsTableWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/datapoints-table',\n description: 'Data Points Table widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const htmlWidgetExport = {\n name: 'Widgets: HTML Widget',\n module: 'htmlWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/html-widget',\n description: 'Allows to set custom HTML on a dashboard',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const quickLinksWidgetExport = {\n name: 'Widgets: Quick Links',\n module: 'quickLinksWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/quick-links',\n description: 'Quick Links widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const deviceManagementWelcomeWidgetExport = {\n name: 'Widgets: Welcome to Device Management',\n module: 'deviceManagementWelcomeWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/device-management-welcome',\n description: 'Welcome to Device Management widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const assetNotesWidgetExport = {\n name: 'Widgets: Asset notes',\n module: 'assetNotesWidgetProviders',\n path: '@c8y/ngx-components/widgets/definitions/asset-notes',\n description: 'Asset notes widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n\nexport const htmlWidgetAIChat = {\n name: 'Widgets: HTML Widget AI Code Assistant',\n module: 'htmlWidgetAIChatProviders',\n path: '@c8y/ngx-components/widgets/definitions/html-widget-ai-config',\n description: 'Adds AI Code Assistant capabilities to the HTML Widget',\n scope: 'self'\n} as const satisfies PluginsExports;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';
1
+ import { NgIf, NgClass, JsonPipe, AsyncPipe, NgFor } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { inject, Injectable, Input, Component, viewChild, SecurityContext, ViewChild } from '@angular/core';
4
4
  import * as i2 from '@angular/forms';
@@ -6,12 +6,12 @@ import { FormsModule } from '@angular/forms';
6
6
  import { Router, RouterModule } from '@angular/router';
7
7
  import { gettext } from '@c8y/ngx-components/gettext';
8
8
  import * as i2$1 from '@c8y/ngx-components';
9
- import { AppStateService, Permissions, IconDirective, C8yTranslatePipe, TabsModule, LoadingComponent, OptionsService, ClipboardService } from '@c8y/ngx-components';
10
- import { WidgetConfigService, WidgetConfigChangeMode, WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';
9
+ import { AppStateService, Permissions, IconDirective, C8yTranslatePipe, ListGroupComponent, ListItemComponent, ListItemCollapseComponent, ListItemBodyComponent, ListItemIconComponent, MarkdownToHtmlPipe, TabsModule, LoadingComponent, OptionsService, ClipboardService } from '@c8y/ngx-components';
10
+ import { WidgetConfigService, WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';
11
11
  import * as i1 from 'ngx-bootstrap/popover';
12
12
  import { PopoverModule } from 'ngx-bootstrap/popover';
13
13
  import * as i3 from 'ngx-bootstrap/tooltip';
14
- import { TooltipModule } from 'ngx-bootstrap/tooltip';
14
+ import { TooltipModule, TooltipDirective } from 'ngx-bootstrap/tooltip';
15
15
  import { isEmpty } from 'lodash';
16
16
  import { Subject, first, map, filter, withLatestFrom, switchMap, shareReplay, takeUntil, startWith, combineLatest, distinctUntilChanged, debounceTime, of, merge, from, isEmpty as isEmpty$1, catchError, EMPTY, fromEvent } from 'rxjs';
17
17
  import { DomSanitizer } from '@angular/platform-browser';
@@ -165,7 +165,6 @@ class HtmlWidgetConfigService {
165
165
  initConfig(appConfig, widgetConfig) {
166
166
  const defaultToAdvancedMode = appConfig?.htmlWidgetDefaultToAdvancedMode ?? false;
167
167
  const isEmptyConfig = isEmpty(widgetConfig);
168
- this.widgetConfigService.changeMode$.next(WidgetConfigChangeMode.ASSIGN);
169
168
  if (isEmptyConfig && !defaultToAdvancedMode) {
170
169
  widgetConfig = this.initDefaultMode(!appConfig?.htmlWidgetDisableSanitization);
171
170
  this.save(widgetConfig);
@@ -300,6 +299,140 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
300
299
  type: Input
301
300
  }] } });
302
301
 
302
+ class HtmlAiChatFeedbackComponent {
303
+ constructor() {
304
+ /**
305
+ * Indicates whether the feedback section is in a loading state.
306
+ */
307
+ this.loading = false;
308
+ /**
309
+ * Indicates whether the detailed feedback section is collapsed.
310
+ */
311
+ this.collapsed = true;
312
+ /**
313
+ * Indicates whether the feedback section can be collapsed.
314
+ */
315
+ this.canCollapse = false;
316
+ /**
317
+ * The code extracted from the agent step (if any).
318
+ */
319
+ this.code = '';
320
+ /**
321
+ * The text before the code block (if any).
322
+ */
323
+ this.textBeforeCode = '';
324
+ /**
325
+ * The text after the code block (if any).
326
+ */
327
+ this.textAfterCode = '';
328
+ this.codeTag = 'c8y-code-extract';
329
+ this.htmlWidgetConfigService = inject(HtmlWidgetConfigService);
330
+ }
331
+ /**
332
+ * @ignore
333
+ */
334
+ ngOnInit() {
335
+ if (this.step) {
336
+ this.parseAgentStep(this.step);
337
+ }
338
+ }
339
+ /**
340
+ * @ignore
341
+ */
342
+ ngOnChanges(changes) {
343
+ if (changes.step) {
344
+ this.parseAgentStep(changes.step.currentValue);
345
+ }
346
+ }
347
+ /**
348
+ * Parse the agent step. Extracts the code block if present and updates the state accordingly.
349
+ * @param step The agent step to parse.
350
+ */
351
+ parseAgentStep(step) {
352
+ if (step.reasoning) {
353
+ this.label = gettext('Reasoning');
354
+ this.loading = false;
355
+ this.canCollapse = true;
356
+ this.collapsed = false;
357
+ }
358
+ if (step.toolCalls?.length > 0 && !step.toolResults?.length) {
359
+ this.label = gettext('Analyzing query…');
360
+ this.loading = true;
361
+ this.canCollapse = false;
362
+ this.collapsed = true;
363
+ }
364
+ else if (step.toolResults?.length > 0) {
365
+ this.label = gettext('Query analyzed.');
366
+ this.loading = false;
367
+ this.canCollapse = true;
368
+ this.collapsed = true;
369
+ }
370
+ this.parseCodeBlock(step);
371
+ }
372
+ /**
373
+ * Revert to the last applied code.
374
+ */
375
+ revert() {
376
+ this.applyCurrentCode();
377
+ }
378
+ parseCodeBlock(step) {
379
+ const text = step.text;
380
+ const codeBlockStart = text.lastIndexOf(`<${this.codeTag}>`);
381
+ const codeBlockEnd = text.lastIndexOf(`</${this.codeTag}>`);
382
+ const codeBlockStartLength = this.codeTag.length + 2;
383
+ const codeBlockEndLength = this.codeTag.length + 3;
384
+ if (codeBlockStart !== -1) {
385
+ this.code = text.substring(codeBlockStart + codeBlockStartLength);
386
+ this.textBeforeCode = text.substring(0, codeBlockStart + codeBlockStartLength);
387
+ this.label = gettext('Creating widget…');
388
+ this.loading = true;
389
+ this.canCollapse = true;
390
+ this.collapsed = true;
391
+ }
392
+ if (codeBlockEnd !== -1) {
393
+ this.label = gettext('Widget created');
394
+ this.code = text.substring(codeBlockStart + codeBlockStartLength, codeBlockEnd);
395
+ this.loading = false;
396
+ this.textAfterCode = text.substring(codeBlockEnd + codeBlockEndLength);
397
+ this.canCollapse = true;
398
+ this.collapsed = true;
399
+ this.applyCurrentCode();
400
+ }
401
+ }
402
+ applyCurrentCode() {
403
+ const newConfig = {
404
+ code: this.code,
405
+ css: '',
406
+ devMode: true,
407
+ legacy: false,
408
+ options: { advancedSecurity: false, cssEncapsulation: false }
409
+ };
410
+ this.htmlWidgetConfigService.configChanged$.next(newConfig);
411
+ this.htmlWidgetConfigService.widgetConfigService.updateConfig({ config: newConfig }, true);
412
+ }
413
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlAiChatFeedbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
414
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: HtmlAiChatFeedbackComponent, isStandalone: true, selector: "c8y-html-ai-chat-feedback", inputs: { step: "step" }, host: { classAttribute: "agent-step-feedback" }, usesOnChanges: true, ngImport: i0, template: "@if (!step.reasoning && !code) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (code) {\n <div [innerHTML]=\"textBeforeCode | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (code) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ code }}</pre\n >\n @if (!loading) {\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Revert to this version' | translate\"\n [tooltip]=\"'Revert to this version' | translate\"\n container=\"body\"\n (click)=\"revert()\"\n >\n <i c8yIcon=\"undo\"></i>\n </button>\n }\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n\n@if (code) {\n <div [innerHTML]=\"textAfterCode | markdownToHtml | async\"></div>\n}\n", dependencies: [{ kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
415
+ }
416
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlAiChatFeedbackComponent, decorators: [{
417
+ type: Component,
418
+ args: [{ selector: 'c8y-html-ai-chat-feedback', imports: [
419
+ ListGroupComponent,
420
+ ListItemComponent,
421
+ ListItemCollapseComponent,
422
+ ListItemBodyComponent,
423
+ ListItemIconComponent,
424
+ NgClass,
425
+ JsonPipe,
426
+ MarkdownToHtmlPipe,
427
+ TooltipDirective,
428
+ AsyncPipe,
429
+ C8yTranslatePipe
430
+ ], standalone: true, host: { class: 'agent-step-feedback' }, template: "@if (!step.reasoning && !code) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (code) {\n <div [innerHTML]=\"textBeforeCode | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (code) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ code }}</pre\n >\n @if (!loading) {\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Revert to this version' | translate\"\n [tooltip]=\"'Revert to this version' | translate\"\n container=\"body\"\n (click)=\"revert()\"\n >\n <i c8yIcon=\"undo\"></i>\n </button>\n }\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n\n@if (code) {\n <div [innerHTML]=\"textAfterCode | markdownToHtml | async\"></div>\n}\n" }]
431
+ }], propDecorators: { step: [{
432
+ type: Input,
433
+ args: [{ required: true }]
434
+ }] } });
435
+
303
436
  class HtmlFrameComponent {
304
437
  constructor() {
305
438
  /**
@@ -485,6 +618,9 @@ class WidgetCodeEditorComponent {
485
618
  this.destroy$.complete();
486
619
  }
487
620
  ngOnChanges(changes) {
621
+ if (changes.config) {
622
+ this.changeCode(this.config.code);
623
+ }
488
624
  if (changes.config?.currentValue) {
489
625
  this.loadCode();
490
626
  }
@@ -539,7 +675,7 @@ class WidgetCodeEditorComponent {
539
675
  this.configService.changeCss(code);
540
676
  }
541
677
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WidgetCodeEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
542
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: WidgetCodeEditorComponent, isStandalone: true, selector: "c8y-widget-code-editor", inputs: { mode: "mode", config: "config" }, viewQueries: [{ propertyName: "editorComponent", first: true, predicate: EditorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n *ngIf=\"config?.devMode && !config?.legacy\"\n translate\n >\n Advanced developer mode\n </span>\n </div>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n *ngIf=\"config?.legacy\"\n translate\n >\n Legacy mode\n </span>\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n *ngIf=\"!config?.devMode && !config?.legacy\"\n ></c8y-tab>\n </div>\n\n <ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n *ngIf=\"!(mode === 'css' && config?.devMode)\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n </ng-container>\n <ng-template #loading>\n <c8y-loading></c8y-loading>\n </ng-template>\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions", "theme"], outputs: ["editorInit"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i2$1.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "openFirstTab", "hasHeader"] }, { kind: "component", type: i2$1.TabComponent, selector: "c8y-tab", inputs: ["path", "label", "icon", "priority", "orientation", "injector", "tabsOutlet", "isActive", "text", "showAlways"], outputs: ["onSelect"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: AdvancedSettingsComponent, selector: "c8y-html-widget-advanced-settings", inputs: ["devMode", "cssEncapsulation"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
678
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: WidgetCodeEditorComponent, isStandalone: true, selector: "c8y-widget-code-editor", inputs: { mode: "mode", config: "config" }, viewQueries: [{ propertyName: "editorComponent", first: true, predicate: EditorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n @if (config?.devMode && !config?.legacy) {\n <span\n class=\"tag tag--warning text-12\"\n translate\n >\n Advanced developer mode\n </span>\n }\n </div>\n <div class=\"d-flex\">\n @if (config?.legacy) {\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n translate\n >\n Legacy mode\n </span>\n }\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n @if (!config?.devMode && !config?.legacy) {\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n ></c8y-tab>\n }\n </div>\n\n @if (!isLoading) {\n @if (!(mode === 'css' && config?.devMode)) {\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n }\n } @else {\n <c8y-loading></c8y-loading>\n }\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions", "theme"], outputs: ["editorInit"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i2$1.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "openFirstTab", "hasHeader"] }, { kind: "component", type: i2$1.TabComponent, selector: "c8y-tab", inputs: ["path", "label", "icon", "priority", "orientation", "injector", "tabsOutlet", "isActive", "text", "showAlways"], outputs: ["onSelect"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: AdvancedSettingsComponent, selector: "c8y-html-widget-advanced-settings", inputs: ["devMode", "cssEncapsulation"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
543
679
  }
544
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WidgetCodeEditorComponent, decorators: [{
545
681
  type: Component,
@@ -548,14 +684,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
548
684
  FormsModule,
549
685
  IconDirective,
550
686
  C8yTranslatePipe,
551
- NgIf,
552
687
  WidgetConfigFeedbackComponent,
553
688
  TabsModule,
554
689
  TooltipModule,
555
690
  PopoverModule,
556
691
  LoadingComponent,
557
692
  AdvancedSettingsComponent
558
- ], selector: 'c8y-widget-code-editor', template: "<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n *ngIf=\"config?.devMode && !config?.legacy\"\n translate\n >\n Advanced developer mode\n </span>\n </div>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n *ngIf=\"config?.legacy\"\n translate\n >\n Legacy mode\n </span>\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n *ngIf=\"!config?.devMode && !config?.legacy\"\n ></c8y-tab>\n </div>\n\n <ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n *ngIf=\"!(mode === 'css' && config?.devMode)\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n </ng-container>\n <ng-template #loading>\n <c8y-loading></c8y-loading>\n </ng-template>\n </fieldset>\n</div>\n" }]
693
+ ], selector: 'c8y-widget-code-editor', template: "<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n @if (config?.devMode && !config?.legacy) {\n <span\n class=\"tag tag--warning text-12\"\n translate\n >\n Advanced developer mode\n </span>\n }\n </div>\n <div class=\"d-flex\">\n @if (config?.legacy) {\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n translate\n >\n Legacy mode\n </span>\n }\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n @if (!config?.devMode && !config?.legacy) {\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n ></c8y-tab>\n }\n </div>\n\n @if (!isLoading) {\n @if (!(mode === 'css' && config?.devMode)) {\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n }\n } @else {\n <c8y-loading></c8y-loading>\n }\n </fieldset>\n</div>\n" }]
559
694
  }], propDecorators: { mode: [{
560
695
  type: Input
561
696
  }], config: [{
@@ -596,38 +731,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
596
731
  args: ['htmlPreview']
597
732
  }] } });
598
733
 
599
- class HtmlWidgetComponent {
600
- ngOnInit() {
601
- if (this.config.html && !this.config.config) {
602
- this.config.config = this.mapLegacyConfig(this.config);
603
- }
604
- }
605
- mapLegacyConfig(current) {
606
- const isAlreadyInAdvancedMode = current?.config?.devMode === true;
607
- if (isAlreadyInAdvancedMode) {
608
- return current.config;
609
- }
610
- return {
611
- code: current.html,
612
- css: '',
613
- legacy: true,
614
- devMode: false,
615
- options: {
616
- cssEncapsulation: false,
617
- advancedSecurity: current.sanitization === 'strict'
618
- }
619
- };
620
- }
621
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
622
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: HtmlWidgetComponent, isStandalone: true, selector: "c8y-html-widget", inputs: { config: "config" }, ngImport: i0, template: "<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "component", type: HtmlFrameComponent, selector: "c8y-html-frame", inputs: ["config", "device", "useSalt"] }] }); }
623
- }
624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlWidgetComponent, decorators: [{
625
- type: Component,
626
- args: [{ selector: 'c8y-html-widget', standalone: true, imports: [RouterModule, HtmlFrameComponent], template: "<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n\n" }]
627
- }], propDecorators: { config: [{
628
- type: Input
629
- }] } });
630
-
631
734
  class HtmlWidgetPropertiesSelectorComponent {
632
735
  constructor() {
633
736
  this.widgetConfigService = inject(WidgetConfigService);
@@ -669,9 +772,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
669
772
  ], template: "<div\n class=\"d-flex m-b-8\"\n style=\"margin-top: -16px\"\n>\n <em\n class=\"m-l-24 text-muted\"\n translate\n >\n How to use properties in the widget\n </em>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n</div>\n<c8y-asset-property-list\n class=\"inner-scroll bg-inherit d-block\"\n style=\"max-height: 450px\"\n [asset]=\"(widgetConfigService.currentConfig$ | async).device\"\n [config]=\"{\n selectMode: 'none',\n expansionMode: 'expandedByDefault',\n filterable: false,\n allowDragAndDrop: true\n }\"\n>\n <button\n class=\"btn-dot btn fit-h\"\n [attr.aria-label]=\"'Copy' | translate\"\n tooltip=\"{{ 'Copy' | translate }}\"\n type=\"button\"\n *c8yAssetPropertyAction=\"let context\"\n [delay]=\"500\"\n (click)=\"copyProperty(context)\"\n >\n <i class=\"dlt-c8y-icon-copy\"></i>\n </button>\n</c8y-asset-property-list>\n\n<ng-template #helpContent>\n <p\n class=\"p-b-8\"\n translate\n >\n Click the copy icon next to a property, then paste it into the HTML editor below as a template\n literal.\n </p>\n</ng-template>\n" }]
670
773
  }] });
671
774
 
775
+ class HtmlWidgetComponent {
776
+ ngOnInit() {
777
+ if (this.config.html && !this.config.config) {
778
+ this.config.config = this.mapLegacyConfig(this.config);
779
+ }
780
+ }
781
+ mapLegacyConfig(current) {
782
+ const isAlreadyInAdvancedMode = current?.config?.devMode === true;
783
+ if (isAlreadyInAdvancedMode) {
784
+ return current.config;
785
+ }
786
+ return {
787
+ code: current.html,
788
+ css: '',
789
+ legacy: true,
790
+ devMode: false,
791
+ options: {
792
+ cssEncapsulation: false,
793
+ advancedSecurity: current.sanitization === 'strict'
794
+ }
795
+ };
796
+ }
797
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
798
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: HtmlWidgetComponent, isStandalone: true, selector: "c8y-html-widget", inputs: { config: "config" }, ngImport: i0, template: "<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "component", type: HtmlFrameComponent, selector: "c8y-html-frame", inputs: ["config", "device", "useSalt"] }] }); }
799
+ }
800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: HtmlWidgetComponent, decorators: [{
801
+ type: Component,
802
+ args: [{ selector: 'c8y-html-widget', standalone: true, imports: [RouterModule, HtmlFrameComponent], template: "<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n" }]
803
+ }], propDecorators: { config: [{
804
+ type: Input
805
+ }] } });
806
+
672
807
  /**
673
808
  * Generated bundle index. Do not edit.
674
809
  */
675
810
 
676
- export { AdvancedSettingsComponent, HtmlFrameComponent, HtmlWidgetComponent, HtmlWidgetConfigComponent, HtmlWidgetConfigService, HtmlWidgetPropertiesSelectorComponent, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED, WidgetCodeEditorComponent, defaultWebComponentAttributeNameContext, defaultWebComponentName, legacyTemplate, webComponentTemplate };
811
+ export { AdvancedSettingsComponent, HtmlAiChatFeedbackComponent, HtmlFrameComponent, HtmlWidgetComponent, HtmlWidgetConfigComponent, HtmlWidgetConfigService, HtmlWidgetPropertiesSelectorComponent, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED, WidgetCodeEditorComponent, defaultWebComponentAttributeNameContext, defaultWebComponentName, legacyTemplate, webComponentTemplate };
677
812
  //# sourceMappingURL=c8y-ngx-components-widgets-implementations-html-widget.mjs.map