@c8y/ngx-components 1024.20.8 → 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 (127) 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-auth-configuration.mjs +1 -1
  14. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-bookmarks.mjs +1 -1
  16. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  18. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +5 -5
  20. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  21. 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
  22. 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
  23. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +3 -3
  24. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  25. 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
  26. 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
  27. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +2 -2
  28. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +1 -1
  29. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +3 -3
  31. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  33. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
  35. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
  37. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-echart.mjs +101 -45
  39. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -2
  41. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  43. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-ecosystem.mjs +4 -4
  45. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-events.mjs +2 -2
  49. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-icon-selector.mjs +1 -1
  51. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +1 -1
  53. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  55. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
  57. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
  59. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +2 -2
  61. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
  63. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +2 -2
  65. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +5 -5
  67. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  69. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-register-device.mjs +3 -3
  71. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  73. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +1 -1
  75. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  77. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  79. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
  81. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
  83. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-repository-software.mjs +3 -3
  85. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
  87. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-tracking.mjs +1 -1
  89. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  91. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +1 -1
  93. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
  95. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1 -1
  97. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components.mjs +306 -22
  105. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  106. package/locales/de.po +72 -0
  107. package/locales/es.po +72 -0
  108. package/locales/fr.po +72 -0
  109. package/locales/ja_JP.po +72 -0
  110. package/locales/ko.po +72 -0
  111. package/locales/locales.pot +72 -3
  112. package/locales/nl.po +72 -0
  113. package/locales/pl.po +73 -1
  114. package/locales/pt_BR.po +72 -0
  115. package/locales/zh_CN.po +72 -0
  116. package/locales/zh_TW.po +72 -0
  117. package/package.json +1 -1
  118. package/types/c8y-ngx-components-ai-agent-chat.d.ts +201 -3
  119. package/types/c8y-ngx-components-ai-agent-chat.d.ts.map +1 -1
  120. package/types/c8y-ngx-components-ai-ai-chat.d.ts +14 -4
  121. package/types/c8y-ngx-components-ai-ai-chat.d.ts.map +1 -1
  122. package/types/c8y-ngx-components-ai.d.ts +157 -2
  123. package/types/c8y-ngx-components-ai.d.ts.map +1 -1
  124. package/types/c8y-ngx-components-echart.d.ts +6 -0
  125. package/types/c8y-ngx-components-echart.d.ts.map +1 -1
  126. package/types/c8y-ngx-components.d.ts +170 -9
  127. package/types/c8y-ngx-components.d.ts.map +1 -1
@@ -460,9 +460,11 @@ class AiChatMessageActionComponent {
460
460
  */
461
461
  this.disabled = false;
462
462
  /**
463
- * Tooltip text displayed when hovering over the action button.
463
+ * Tooltip text displayed when hovering over the action button, also used as its accessible name.
464
+ * Not named `tooltip`, as that attribute would also attach ngx-bootstrap's tooltip directive to
465
+ * this component wherever `TooltipModule` is imported, showing the tooltip twice.
464
466
  */
465
- this.tooltip = '';
467
+ this.tooltipText = '';
466
468
  /**
467
469
  * Icon to display in the action button.
468
470
  */
@@ -472,16 +474,28 @@ class AiChatMessageActionComponent {
472
474
  */
473
475
  this.actionClicked = new EventEmitter();
474
476
  }
477
+ /**
478
+ * @deprecated Use `tooltipText` instead. Binding `tooltip` on this component also attaches
479
+ * ngx-bootstrap's tooltip directive wherever `TooltipModule` is imported, showing the tooltip twice.
480
+ */
481
+ set tooltip(value) {
482
+ this.tooltipText = value;
483
+ }
484
+ get tooltip() {
485
+ return this.tooltipText;
486
+ }
475
487
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AiChatMessageActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
476
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AiChatMessageActionComponent, isStandalone: true, selector: "c8y-ai-chat-message-action", inputs: { custom: "custom", disabled: "disabled", tooltip: "tooltip", icon: "icon" }, outputs: { actionClicked: "actionClicked" }, ngImport: i0, template: "@if (!custom) {\n <button\n class=\"btn btn-dot text-muted\"\n [attr.aria-label]=\"tooltip | translate\"\n [tooltip]=\"tooltip | translate\"\n [adaptivePosition]=\"true\"\n [delay]=\"500\"\n (click)=\"actionClicked.emit()\"\n [disabled]=\"disabled\"\n >\n <i\n class=\"text-12\"\n [c8yIcon]=\"icon\"\n ></i>\n </button>\n} @else {\n <ng-content></ng-content>\n}\n", dependencies: [{ kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$1.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: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
488
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AiChatMessageActionComponent, isStandalone: true, selector: "c8y-ai-chat-message-action", inputs: { custom: "custom", disabled: "disabled", tooltipText: "tooltipText", tooltip: "tooltip", icon: "icon" }, outputs: { actionClicked: "actionClicked" }, ngImport: i0, template: "@if (!custom) {\n <button\n class=\"btn btn-dot text-muted\"\n [attr.aria-label]=\"tooltipText | translate\"\n [tooltip]=\"tooltipText | translate\"\n placement=\"top\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n (click)=\"actionClicked.emit()\"\n [disabled]=\"disabled\"\n >\n <i\n class=\"text-12\"\n [c8yIcon]=\"icon\"\n ></i>\n </button>\n} @else {\n <ng-content></ng-content>\n}\n", dependencies: [{ kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$1.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: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
477
489
  }
478
490
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AiChatMessageActionComponent, decorators: [{
479
491
  type: Component,
480
- args: [{ selector: 'c8y-ai-chat-message-action', standalone: true, imports: [TooltipModule, C8yTranslatePipe, IconDirective], changeDetection: ChangeDetectionStrategy.Eager, template: "@if (!custom) {\n <button\n class=\"btn btn-dot text-muted\"\n [attr.aria-label]=\"tooltip | translate\"\n [tooltip]=\"tooltip | translate\"\n [adaptivePosition]=\"true\"\n [delay]=\"500\"\n (click)=\"actionClicked.emit()\"\n [disabled]=\"disabled\"\n >\n <i\n class=\"text-12\"\n [c8yIcon]=\"icon\"\n ></i>\n </button>\n} @else {\n <ng-content></ng-content>\n}\n" }]
492
+ args: [{ selector: 'c8y-ai-chat-message-action', standalone: true, imports: [TooltipModule, C8yTranslatePipe, IconDirective], changeDetection: ChangeDetectionStrategy.Eager, template: "@if (!custom) {\n <button\n class=\"btn btn-dot text-muted\"\n [attr.aria-label]=\"tooltipText | translate\"\n [tooltip]=\"tooltipText | translate\"\n placement=\"top\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n (click)=\"actionClicked.emit()\"\n [disabled]=\"disabled\"\n >\n <i\n class=\"text-12\"\n [c8yIcon]=\"icon\"\n ></i>\n </button>\n} @else {\n <ng-content></ng-content>\n}\n" }]
481
493
  }], propDecorators: { custom: [{
482
494
  type: Input
483
495
  }], disabled: [{
484
496
  type: Input
497
+ }], tooltipText: [{
498
+ type: Input
485
499
  }], tooltip: [{
486
500
  type: Input
487
501
  }], icon: [{
@@ -500,6 +514,8 @@ class AiChatMessageComponent {
500
514
  constructor() {
501
515
  this.role = input(...(ngDevMode ? [undefined, { debugName: "role" }] : /* istanbul ignore next */ []));
502
516
  this.message = input(...(ngDevMode ? [undefined, { debugName: "message" }] : /* istanbul ignore next */ []));
517
+ /** Name of the agent to show above the message; nothing is shown when undefined. */
518
+ this.agentLabel = input(undefined, ...(ngDevMode ? [{ debugName: "agentLabel" }] : /* istanbul ignore next */ []));
503
519
  this.translateService = inject(TranslateService);
504
520
  this.roleResolved = computed(() => {
505
521
  return this.message()?.role || this.role();
@@ -522,8 +538,14 @@ class AiChatMessageComponent {
522
538
  this.messageContentAriaLabel = computed(() => {
523
539
  const msg = this.message();
524
540
  const time = msg.role != 'system' && msg.timestamp ? new Date(msg.timestamp).toLocaleTimeString() : '';
541
+ const agent = this.agentLabel();
525
542
  let tpl;
526
- if (time) {
543
+ if (agent && this.roleResolved() !== 'user') {
544
+ tpl = time
545
+ ? gettext('Assistant message from {{ agent }} at {{ time }}')
546
+ : gettext('Assistant message from {{ agent }}');
547
+ }
548
+ else if (time) {
527
549
  tpl =
528
550
  this.roleResolved() === 'user'
529
551
  ? gettext('User message at {{ time }}')
@@ -532,16 +554,16 @@ class AiChatMessageComponent {
532
554
  else {
533
555
  tpl = this.roleResolved() === 'user' ? gettext('User message') : gettext('Assistant message');
534
556
  }
535
- return this.translateService.instant(tpl, { time });
557
+ return this.translateService.instant(tpl, { time, agent });
536
558
  }, ...(ngDevMode ? [{ debugName: "messageContentAriaLabel" }] : /* istanbul ignore next */ []));
537
559
  }
538
560
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AiChatMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
539
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AiChatMessageComponent, isStandalone: true, selector: "c8y-ai-chat-message", inputs: { role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"d-col\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"article\"\n>\n <div\n class=\"chat-message text-break-word\"\n [ngClass]=\"{\n 'user-message': message()?.role === 'user' || role() === 'user',\n 'agent-message': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `====== ${messageContentAriaLabel()} ======` }}</span\n >\n\n <!-- Apply the class and aria-label to both the main content and whatever is projected, so we get the same styling by default -->\n <div\n class=\"message-content\"\n [attr.aria-label]=\"messageContentAriaLabel()\"\n >\n <div style=\"display: contents\">\n <ng-content select=\":not(c8y-ai-chat-message-action)\"></ng-content>\n </div>\n </div>\n @if (message()?.timestamp) {\n <div class=\"message-timestamp\">\n <span\n tabindex=\"0\"\n [tooltip]=\"message()?.timestamp | c8yDate\"\n >\n {{ message()?.timestamp | c8yDate: 'adaptiveDate' }}\n </span>\n </div>\n }\n </div>\n <div\n class=\"message-action\"\n [attr.aria-label]=\"'Message actions' | translate\"\n role=\"toolbar\"\n [ngClass]=\"{\n 'user-action showOnHover': message()?.role === 'user' || role() === 'user',\n 'agent-action p-l-16': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <ng-content select=\"c8y-ai-chat-message-action\"></ng-content>\n </div>\n</div>\n", styles: [".hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$1.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: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
561
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AiChatMessageComponent, isStandalone: true, selector: "c8y-ai-chat-message", inputs: { role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, agentLabel: { classPropertyName: "agentLabel", publicName: "agentLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"d-col\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"article\"\n>\n <div\n class=\"chat-message text-break-word\"\n [ngClass]=\"{\n 'user-message': message()?.role === 'user' || role() === 'user',\n 'agent-message': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `====== ${messageContentAriaLabel()} ======` }}</span\n >\n\n @if (agentLabel()) {\n <div\n class=\"text-muted text-12 m-b-4\"\n aria-hidden=\"true\"\n data-cy=\"ai-chat-message-agent\"\n >\n {{ agentLabel() }}\n </div>\n }\n\n <!-- Apply the class and aria-label to both the main content and whatever is projected, so we get the same styling by default -->\n <div\n class=\"message-content\"\n [attr.aria-label]=\"messageContentAriaLabel()\"\n >\n <div style=\"display: contents\">\n <ng-content select=\":not(c8y-ai-chat-message-action)\"></ng-content>\n </div>\n </div>\n @if (message()?.timestamp) {\n <div class=\"message-timestamp\">\n <span\n tabindex=\"0\"\n [tooltip]=\"message()?.timestamp | c8yDate\"\n >\n {{ message()?.timestamp | c8yDate: 'adaptiveDate' }}\n </span>\n </div>\n }\n </div>\n <div\n class=\"message-action\"\n [attr.aria-label]=\"'Message actions' | translate\"\n role=\"toolbar\"\n [ngClass]=\"{\n 'user-action showOnHover': message()?.role === 'user' || role() === 'user',\n 'agent-action p-l-16': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <ng-content select=\"c8y-ai-chat-message-action\"></ng-content>\n </div>\n</div>\n", styles: [".hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$1.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: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
540
562
  }
541
563
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AiChatMessageComponent, decorators: [{
542
564
  type: Component,
543
- args: [{ selector: 'c8y-ai-chat-message', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, TooltipModule, C8yTranslatePipe, DatePipe], template: "<div\n class=\"d-col\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"article\"\n>\n <div\n class=\"chat-message text-break-word\"\n [ngClass]=\"{\n 'user-message': message()?.role === 'user' || role() === 'user',\n 'agent-message': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `====== ${messageContentAriaLabel()} ======` }}</span\n >\n\n <!-- Apply the class and aria-label to both the main content and whatever is projected, so we get the same styling by default -->\n <div\n class=\"message-content\"\n [attr.aria-label]=\"messageContentAriaLabel()\"\n >\n <div style=\"display: contents\">\n <ng-content select=\":not(c8y-ai-chat-message-action)\"></ng-content>\n </div>\n </div>\n @if (message()?.timestamp) {\n <div class=\"message-timestamp\">\n <span\n tabindex=\"0\"\n [tooltip]=\"message()?.timestamp | c8yDate\"\n >\n {{ message()?.timestamp | c8yDate: 'adaptiveDate' }}\n </span>\n </div>\n }\n </div>\n <div\n class=\"message-action\"\n [attr.aria-label]=\"'Message actions' | translate\"\n role=\"toolbar\"\n [ngClass]=\"{\n 'user-action showOnHover': message()?.role === 'user' || role() === 'user',\n 'agent-action p-l-16': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <ng-content select=\"c8y-ai-chat-message-action\"></ng-content>\n </div>\n</div>\n", styles: [".hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"] }]
544
- }], propDecorators: { role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }] } });
565
+ args: [{ selector: 'c8y-ai-chat-message', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, TooltipModule, C8yTranslatePipe, DatePipe], template: "<div\n class=\"d-col\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"article\"\n>\n <div\n class=\"chat-message text-break-word\"\n [ngClass]=\"{\n 'user-message': message()?.role === 'user' || role() === 'user',\n 'agent-message': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `====== ${messageContentAriaLabel()} ======` }}</span\n >\n\n @if (agentLabel()) {\n <div\n class=\"text-muted text-12 m-b-4\"\n aria-hidden=\"true\"\n data-cy=\"ai-chat-message-agent\"\n >\n {{ agentLabel() }}\n </div>\n }\n\n <!-- Apply the class and aria-label to both the main content and whatever is projected, so we get the same styling by default -->\n <div\n class=\"message-content\"\n [attr.aria-label]=\"messageContentAriaLabel()\"\n >\n <div style=\"display: contents\">\n <ng-content select=\":not(c8y-ai-chat-message-action)\"></ng-content>\n </div>\n </div>\n @if (message()?.timestamp) {\n <div class=\"message-timestamp\">\n <span\n tabindex=\"0\"\n [tooltip]=\"message()?.timestamp | c8yDate\"\n >\n {{ message()?.timestamp | c8yDate: 'adaptiveDate' }}\n </span>\n </div>\n }\n </div>\n <div\n class=\"message-action\"\n [attr.aria-label]=\"'Message actions' | translate\"\n role=\"toolbar\"\n [ngClass]=\"{\n 'user-action showOnHover': message()?.role === 'user' || role() === 'user',\n 'agent-action p-l-16': message()?.role === 'assistant' || role() === 'assistant'\n }\"\n >\n <ng-content select=\"c8y-ai-chat-message-action\"></ng-content>\n </div>\n</div>\n", styles: [".hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"] }]
566
+ }], propDecorators: { role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], agentLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentLabel", required: false }] }] } });
545
567
 
546
568
  /**
547
569
  * Thin wrapper around the browser's Web Speech API (`SpeechRecognition`) used to transcribe speech