@copilotkitnext/angular 0.0.2 → 0.0.4

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 (168) hide show
  1. package/README.md +3 -3
  2. package/dist/README.md +3 -3
  3. package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +10 -10
  4. package/dist/components/chat/copilot-chat-message-view.component.d.ts +42 -42
  5. package/dist/components/chat/copilot-chat-view.component.d.ts +14 -14
  6. package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +384 -0
  7. package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +286 -0
  8. package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +27 -0
  9. package/dist/esm2022/components/chat/copilot-chat-assistant-message.component.mjs +433 -0
  10. package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
  11. package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +202 -0
  12. package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +321 -0
  13. package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +38 -0
  14. package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +666 -0
  15. package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +10 -0
  16. package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +45 -0
  17. package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +296 -0
  18. package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +2 -0
  19. package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +188 -0
  20. package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +216 -0
  21. package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +25 -0
  22. package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +199 -0
  23. package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +137 -0
  24. package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +207 -0
  25. package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +35 -0
  26. package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +34 -0
  27. package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +341 -0
  28. package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +2 -0
  29. package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +52 -0
  30. package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +55 -0
  31. package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +19 -0
  32. package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +110 -0
  33. package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +93 -0
  34. package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +443 -0
  35. package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +479 -0
  36. package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +2 -0
  37. package/dist/esm2022/components/chat/copilot-chat.component.mjs +214 -0
  38. package/dist/esm2022/components/copilotkit-tool-render.component.mjs +153 -0
  39. package/dist/esm2022/copilotkitnext-angular.mjs +5 -0
  40. package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +65 -0
  41. package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +145 -0
  42. package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +26 -0
  43. package/dist/esm2022/core/copilotkit.providers.mjs +34 -0
  44. package/dist/esm2022/core/copilotkit.service.mjs +430 -0
  45. package/dist/esm2022/core/copilotkit.types.mjs +12 -0
  46. package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +130 -0
  47. package/dist/esm2022/directives/copilotkit-agent.directive.mjs +217 -0
  48. package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +218 -0
  49. package/dist/esm2022/directives/copilotkit-config.directive.mjs +94 -0
  50. package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +130 -0
  51. package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +266 -0
  52. package/dist/esm2022/directives/stick-to-bottom.directive.mjs +181 -0
  53. package/dist/esm2022/index.mjs +70 -0
  54. package/dist/esm2022/lib/directives/tooltip.directive.mjs +211 -0
  55. package/dist/esm2022/lib/slots/copilot-slot.component.mjs +144 -0
  56. package/dist/esm2022/lib/slots/slot.types.mjs +6 -0
  57. package/dist/esm2022/lib/slots/slot.utils.mjs +222 -0
  58. package/dist/esm2022/lib/utils.mjs +10 -0
  59. package/dist/esm2022/services/resize-observer.service.mjs +152 -0
  60. package/dist/esm2022/services/scroll-position.service.mjs +124 -0
  61. package/dist/esm2022/types/frontend-tool.mjs +2 -0
  62. package/dist/esm2022/types/human-in-the-loop.mjs +2 -0
  63. package/dist/esm2022/utils/agent-context.utils.mjs +114 -0
  64. package/dist/esm2022/utils/agent.utils.mjs +204 -0
  65. package/dist/esm2022/utils/chat-config.utils.mjs +186 -0
  66. package/dist/esm2022/utils/copilotkit.utils.mjs +20 -0
  67. package/dist/esm2022/utils/frontend-tool.utils.mjs +228 -0
  68. package/dist/esm2022/utils/human-in-the-loop.utils.mjs +296 -0
  69. package/dist/fesm2022/copilotkitnext-angular.mjs +163 -164
  70. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  71. package/package.json +21 -18
  72. package/vitest.config.mts +32 -21
  73. package/.turbo/turbo-build.log +0 -38
  74. package/.turbo/turbo-check-types.log +0 -0
  75. package/.turbo/turbo-test.log +0 -71
  76. package/ng-package.json +0 -19
  77. package/src/components/chat/__tests__/copilot-chat-assistant-message.component.spec.ts +0 -282
  78. package/src/components/chat/__tests__/copilot-chat-input.component.spec.ts +0 -419
  79. package/src/components/chat/__tests__/copilot-chat-message-view.component.spec.ts +0 -372
  80. package/src/components/chat/__tests__/copilot-chat-user-message.component.spec.ts +0 -249
  81. package/src/components/chat/copilot-chat-assistant-message-buttons.component.ts +0 -292
  82. package/src/components/chat/copilot-chat-assistant-message-renderer.component.ts +0 -472
  83. package/src/components/chat/copilot-chat-assistant-message-toolbar.component.ts +0 -29
  84. package/src/components/chat/copilot-chat-assistant-message.component.ts +0 -463
  85. package/src/components/chat/copilot-chat-assistant-message.types.ts +0 -50
  86. package/src/components/chat/copilot-chat-audio-recorder.component.ts +0 -241
  87. package/src/components/chat/copilot-chat-buttons.component.ts +0 -308
  88. package/src/components/chat/copilot-chat-buttons.component.ts.bak +0 -471
  89. package/src/components/chat/copilot-chat-input-defaults.ts +0 -47
  90. package/src/components/chat/copilot-chat-input.component.ts +0 -512
  91. package/src/components/chat/copilot-chat-input.types.ts +0 -148
  92. package/src/components/chat/copilot-chat-message-view-cursor.component.ts +0 -51
  93. package/src/components/chat/copilot-chat-message-view.component.ts +0 -233
  94. package/src/components/chat/copilot-chat-message-view.types.ts +0 -39
  95. package/src/components/chat/copilot-chat-textarea.component.ts +0 -220
  96. package/src/components/chat/copilot-chat-tool-calls-view.component.ts +0 -261
  97. package/src/components/chat/copilot-chat-toolbar.component.ts +0 -35
  98. package/src/components/chat/copilot-chat-tools-menu.component.ts +0 -185
  99. package/src/components/chat/copilot-chat-user-message-branch-navigation.component.ts +0 -121
  100. package/src/components/chat/copilot-chat-user-message-buttons.component.ts +0 -170
  101. package/src/components/chat/copilot-chat-user-message-renderer.component.ts +0 -37
  102. package/src/components/chat/copilot-chat-user-message-toolbar.component.ts +0 -37
  103. package/src/components/chat/copilot-chat-user-message.component.ts +0 -247
  104. package/src/components/chat/copilot-chat-user-message.types.ts +0 -42
  105. package/src/components/chat/copilot-chat-view-disclaimer.component.ts +0 -51
  106. package/src/components/chat/copilot-chat-view-feather.component.ts +0 -47
  107. package/src/components/chat/copilot-chat-view-handlers.service.ts +0 -14
  108. package/src/components/chat/copilot-chat-view-input-container.component.ts +0 -87
  109. package/src/components/chat/copilot-chat-view-scroll-to-bottom-button.component.ts +0 -79
  110. package/src/components/chat/copilot-chat-view-scroll-view.component.ts +0 -322
  111. package/src/components/chat/copilot-chat-view.component.ts +0 -420
  112. package/src/components/chat/copilot-chat-view.types.ts +0 -52
  113. package/src/components/chat/copilot-chat.component.ts +0 -232
  114. package/src/components/copilotkit-tool-render.component.ts +0 -169
  115. package/src/core/__tests__/copilotkit.service.spec.ts +0 -1051
  116. package/src/core/__tests__/copilotkit.service.wildcard.spec.ts +0 -316
  117. package/src/core/chat-configuration/__tests__/chat-configuration.service.spec.ts +0 -287
  118. package/src/core/chat-configuration/chat-configuration.providers.ts +0 -71
  119. package/src/core/chat-configuration/chat-configuration.service.ts +0 -162
  120. package/src/core/chat-configuration/chat-configuration.types.ts +0 -57
  121. package/src/core/copilotkit.providers.ts +0 -59
  122. package/src/core/copilotkit.service.ts +0 -542
  123. package/src/core/copilotkit.types.ts +0 -132
  124. package/src/directives/__tests__/copilotkit-agent-context.directive.spec.ts +0 -384
  125. package/src/directives/__tests__/copilotkit-agent.directive.spec.ts +0 -253
  126. package/src/directives/__tests__/copilotkit-chat-config.directive.spec.ts +0 -385
  127. package/src/directives/__tests__/copilotkit-config.directive.spec.ts +0 -69
  128. package/src/directives/__tests__/copilotkit-frontend-tool-simple.directive.spec.ts +0 -60
  129. package/src/directives/__tests__/copilotkit-frontend-tool.directive.spec.ts +0 -108
  130. package/src/directives/__tests__/copilotkit-human-in-the-loop.directive.spec.ts +0 -452
  131. package/src/directives/copilotkit-agent-context.directive.ts +0 -138
  132. package/src/directives/copilotkit-agent.directive.ts +0 -225
  133. package/src/directives/copilotkit-chat-config.directive.ts +0 -241
  134. package/src/directives/copilotkit-config.directive.ts +0 -81
  135. package/src/directives/copilotkit-frontend-tool.directive.ts +0 -145
  136. package/src/directives/copilotkit-human-in-the-loop.directive.ts +0 -281
  137. package/src/directives/stick-to-bottom.directive.ts +0 -204
  138. package/src/index.ts +0 -105
  139. package/src/lib/directives/tooltip.directive.ts +0 -292
  140. package/src/lib/slots/__tests__/slot.utils.spec.ts +0 -377
  141. package/src/lib/slots/copilot-slot.component.ts +0 -135
  142. package/src/lib/slots/index.ts +0 -3
  143. package/src/lib/slots/slot.types.ts +0 -64
  144. package/src/lib/slots/slot.utils.ts +0 -289
  145. package/src/lib/utils.ts +0 -10
  146. package/src/public-api.ts +0 -1
  147. package/src/services/resize-observer.service.ts +0 -181
  148. package/src/services/scroll-position.service.ts +0 -169
  149. package/src/styles/globals.css +0 -266
  150. package/src/styles/index.css +0 -3
  151. package/src/test-setup.ts +0 -15
  152. package/src/testing/index.ts +0 -3
  153. package/src/testing/testing.utils.ts +0 -248
  154. package/src/types/frontend-tool.ts +0 -44
  155. package/src/types/human-in-the-loop.ts +0 -52
  156. package/src/utils/__tests__/agent.utils.spec.ts +0 -234
  157. package/src/utils/__tests__/chat-config.utils.spec.ts +0 -306
  158. package/src/utils/__tests__/frontend-tool-inject.spec.ts +0 -350
  159. package/src/utils/__tests__/frontend-tool-integration.spec.ts +0 -199
  160. package/src/utils/__tests__/frontend-tool.utils.spec.ts +0 -272
  161. package/src/utils/__tests__/human-in-the-loop.utils.spec.ts +0 -365
  162. package/src/utils/agent-context.utils.ts +0 -133
  163. package/src/utils/agent.utils.ts +0 -239
  164. package/src/utils/chat-config.utils.ts +0 -221
  165. package/src/utils/copilotkit.utils.ts +0 -20
  166. package/src/utils/frontend-tool.utils.ts +0 -266
  167. package/src/utils/human-in-the-loop.utils.ts +0 -359
  168. package/tsconfig.spec.json +0 -12
@@ -0,0 +1,137 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, computed, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { LucideAngularModule, ChevronLeft, ChevronRight } from 'lucide-angular';
4
+ import { cn } from '../../lib/utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "lucide-angular";
7
+ export class CopilotChatUserMessageBranchNavigationComponent {
8
+ set currentBranch(val) {
9
+ this.currentBranchSignal.set(val);
10
+ }
11
+ set numberOfBranches(val) {
12
+ this.numberOfBranchesSignal.set(val);
13
+ }
14
+ message;
15
+ inputClass;
16
+ switchToBranch = new EventEmitter();
17
+ ChevronLeftIcon = ChevronLeft;
18
+ ChevronRightIcon = ChevronRight;
19
+ currentBranchSignal = signal(0);
20
+ numberOfBranchesSignal = signal(1);
21
+ buttonClass = cn(
22
+ // Flex centering
23
+ 'inline-flex items-center justify-center',
24
+ // Cursor
25
+ 'cursor-pointer',
26
+ // Background and text
27
+ 'p-0 text-[rgb(93,93,93)] hover:bg-[#E8E8E8]',
28
+ // Dark mode
29
+ 'dark:text-[rgb(243,243,243)] dark:hover:bg-[#303030]',
30
+ // Shape and sizing
31
+ 'h-6 w-6 rounded-md',
32
+ // Interactions
33
+ 'transition-colors',
34
+ // Disabled state
35
+ 'disabled:opacity-50 disabled:cursor-not-allowed');
36
+ showNavigation = computed(() => {
37
+ const branches = this.numberOfBranchesSignal();
38
+ return branches > 1;
39
+ });
40
+ canGoPrev = computed(() => {
41
+ return this.currentBranchSignal() > 0;
42
+ });
43
+ canGoNext = computed(() => {
44
+ return this.currentBranchSignal() < this.numberOfBranchesSignal() - 1;
45
+ });
46
+ computedClass = computed(() => {
47
+ return cn('flex items-center gap-1', this.inputClass);
48
+ });
49
+ handlePrevious() {
50
+ if (this.canGoPrev()) {
51
+ const newIndex = this.currentBranchSignal() - 1;
52
+ this.switchToBranch.emit({
53
+ branchIndex: newIndex,
54
+ numberOfBranches: this.numberOfBranchesSignal(),
55
+ message: this.message
56
+ });
57
+ }
58
+ }
59
+ handleNext() {
60
+ if (this.canGoNext()) {
61
+ const newIndex = this.currentBranchSignal() + 1;
62
+ this.switchToBranch.emit({
63
+ branchIndex: newIndex,
64
+ numberOfBranches: this.numberOfBranchesSignal(),
65
+ message: this.message
66
+ });
67
+ }
68
+ }
69
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageBranchNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
70
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatUserMessageBranchNavigationComponent, isStandalone: true, selector: "copilot-chat-user-message-branch-navigation", inputs: { currentBranch: "currentBranch", numberOfBranches: "numberOfBranches", message: "message", inputClass: "inputClass" }, outputs: { switchToBranch: "switchToBranch" }, ngImport: i0, template: `
71
+ @if (showNavigation()) {
72
+ <div [class]="computedClass()">
73
+ <button
74
+ type="button"
75
+ [class]="buttonClass"
76
+ [disabled]="!canGoPrev()"
77
+ (click)="handlePrevious()">
78
+ <lucide-angular [img]="ChevronLeftIcon" [size]="20"></lucide-angular>
79
+ </button>
80
+ <span class="text-sm text-muted-foreground px-0 font-medium">
81
+ {{ currentBranchSignal() + 1 }}/{{ numberOfBranchesSignal() }}
82
+ </span>
83
+ <button
84
+ type="button"
85
+ [class]="buttonClass"
86
+ [disabled]="!canGoNext()"
87
+ (click)="handleNext()">
88
+ <lucide-angular [img]="ChevronRightIcon" [size]="20"></lucide-angular>
89
+ </button>
90
+ </div>
91
+ }
92
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageBranchNavigationComponent, decorators: [{
95
+ type: Component,
96
+ args: [{
97
+ selector: 'copilot-chat-user-message-branch-navigation',
98
+ standalone: true,
99
+ imports: [CommonModule, LucideAngularModule],
100
+ changeDetection: ChangeDetectionStrategy.OnPush,
101
+ encapsulation: ViewEncapsulation.None,
102
+ template: `
103
+ @if (showNavigation()) {
104
+ <div [class]="computedClass()">
105
+ <button
106
+ type="button"
107
+ [class]="buttonClass"
108
+ [disabled]="!canGoPrev()"
109
+ (click)="handlePrevious()">
110
+ <lucide-angular [img]="ChevronLeftIcon" [size]="20"></lucide-angular>
111
+ </button>
112
+ <span class="text-sm text-muted-foreground px-0 font-medium">
113
+ {{ currentBranchSignal() + 1 }}/{{ numberOfBranchesSignal() }}
114
+ </span>
115
+ <button
116
+ type="button"
117
+ [class]="buttonClass"
118
+ [disabled]="!canGoNext()"
119
+ (click)="handleNext()">
120
+ <lucide-angular [img]="ChevronRightIcon" [size]="20"></lucide-angular>
121
+ </button>
122
+ </div>
123
+ }
124
+ `
125
+ }]
126
+ }], propDecorators: { currentBranch: [{
127
+ type: Input
128
+ }], numberOfBranches: [{
129
+ type: Input
130
+ }], message: [{
131
+ type: Input
132
+ }], inputClass: [{
133
+ type: Input
134
+ }], switchToBranch: [{
135
+ type: Output
136
+ }] } });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1icmFuY2gtbmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2hGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBZ0NyQyxNQUFNLE9BQU8sK0NBQStDO0lBQzFELElBQWEsYUFBYSxDQUFDLEdBQVc7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBYSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNRLE9BQU8sQ0FBZTtJQUN0QixVQUFVLENBQVU7SUFDbkIsY0FBYyxHQUFHLElBQUksWUFBWSxFQUErQyxDQUFDO0lBRWxGLGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDOUIsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0lBRXpDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUIsV0FBVyxHQUFHLEVBQUU7SUFDdkIsaUJBQWlCO0lBQ2pCLHlDQUF5QztJQUN6QyxTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0Qiw2Q0FBNkM7SUFDN0MsWUFBWTtJQUNaLHNEQUFzRDtJQUN0RCxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGlEQUFpRCxDQUNsRCxDQUFDO0lBRUYsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDL0MsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztJQUVILGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE9BQU8sRUFBRSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztJQUVILGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDdkIsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDL0MsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUN2QixXQUFXLEVBQUUsUUFBUTtnQkFDckIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7d0dBdkVVLCtDQUErQzs0RkFBL0MsK0NBQStDLHNSQXhCaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQsMkRBekJTLFlBQVksOEJBQUUsbUJBQW1COzs0RkEyQmhDLCtDQUErQztrQkE5QjNELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZDQUE2QztvQkFDdkQsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQ7aUJBQ0Y7OEJBRWMsYUFBYTtzQkFBekIsS0FBSztnQkFHTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSwgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcbmltcG9ydCB7IFxuICB0eXBlIFVzZXJNZXNzYWdlLFxuICB0eXBlIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPblN3aXRjaFRvQnJhbmNoUHJvcHMgXG59IGZyb20gJy4vY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChzaG93TmF2aWdhdGlvbigpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzKClcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb1ByZXYoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVByZXZpb3VzKClcIj5cbiAgICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJDaGV2cm9uTGVmdEljb25cIiBbc2l6ZV09XCIyMFwiPjwvbHVjaWRlLWFuZ3VsYXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICB7eyBjdXJyZW50QnJhbmNoU2lnbmFsKCkgKyAxIH19L3t7IG51bWJlck9mQnJhbmNoZXNTaWduYWwoKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29OZXh0KClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVOZXh0KClcIj5cbiAgICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJDaGV2cm9uUmlnaHRJY29uXCIgW3NpemVdPVwiMjBcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNldCBjdXJyZW50QnJhbmNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50QnJhbmNoU2lnbmFsLnNldCh2YWwpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBudW1iZXJPZkJyYW5jaGVzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5udW1iZXJPZkJyYW5jaGVzU2lnbmFsLnNldCh2YWwpO1xuICB9XG4gIEBJbnB1dCgpIG1lc3NhZ2UhOiBVc2VyTWVzc2FnZTtcbiAgQElucHV0KCkgaW5wdXRDbGFzcz86IHN0cmluZztcbiAgQE91dHB1dCgpIHN3aXRjaFRvQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzPigpO1xuICBcbiAgcmVhZG9ubHkgQ2hldnJvbkxlZnRJY29uID0gQ2hldnJvbkxlZnQ7XG4gIHJlYWRvbmx5IENoZXZyb25SaWdodEljb24gPSBDaGV2cm9uUmlnaHQ7XG4gIFxuICBjdXJyZW50QnJhbmNoU2lnbmFsID0gc2lnbmFsKDApO1xuICBudW1iZXJPZkJyYW5jaGVzU2lnbmFsID0gc2lnbmFsKDEpO1xuICBcbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3MgPSBjbihcbiAgICAvLyBGbGV4IGNlbnRlcmluZ1xuICAgICdpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgIC8vIEN1cnNvclxuICAgICdjdXJzb3ItcG9pbnRlcicsXG4gICAgLy8gQmFja2dyb3VuZCBhbmQgdGV4dFxuICAgICdwLTAgdGV4dC1bcmdiKDkzLDkzLDkzKV0gaG92ZXI6YmctWyNFOEU4RThdJyxcbiAgICAvLyBEYXJrIG1vZGVcbiAgICAnZGFyazp0ZXh0LVtyZ2IoMjQzLDI0MywyNDMpXSBkYXJrOmhvdmVyOmJnLVsjMzAzMDMwXScsXG4gICAgLy8gU2hhcGUgYW5kIHNpemluZ1xuICAgICdoLTYgdy02IHJvdW5kZWQtbWQnLFxuICAgIC8vIEludGVyYWN0aW9uc1xuICAgICd0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAnZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQnXG4gICk7XG4gIFxuICBzaG93TmF2aWdhdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBicmFuY2hlcyA9IHRoaXMubnVtYmVyT2ZCcmFuY2hlc1NpZ25hbCgpO1xuICAgIHJldHVybiBicmFuY2hlcyA+IDE7XG4gIH0pO1xuICBcbiAgY2FuR29QcmV2ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCcmFuY2hTaWduYWwoKSA+IDA7XG4gIH0pO1xuICBcbiAgY2FuR29OZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCcmFuY2hTaWduYWwoKSA8IHRoaXMubnVtYmVyT2ZCcmFuY2hlc1NpZ25hbCgpIC0gMTtcbiAgfSk7XG4gIFxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCB0aGlzLmlucHV0Q2xhc3MpO1xuICB9KTtcbiAgXG4gIGhhbmRsZVByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkdvUHJldigpKSB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEJyYW5jaFNpZ25hbCgpIC0gMTtcbiAgICAgIHRoaXMuc3dpdGNoVG9CcmFuY2guZW1pdCh7XG4gICAgICAgIGJyYW5jaEluZGV4OiBuZXdJbmRleCxcbiAgICAgICAgbnVtYmVyT2ZCcmFuY2hlczogdGhpcy5udW1iZXJPZkJyYW5jaGVzU2lnbmFsKCksXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBoYW5kbGVOZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkdvTmV4dCgpKSB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEJyYW5jaFNpZ25hbCgpICsgMTtcbiAgICAgIHRoaXMuc3dpdGNoVG9CcmFuY2guZW1pdCh7XG4gICAgICAgIGJyYW5jaEluZGV4OiBuZXdJbmRleCxcbiAgICAgICAgbnVtYmVyT2ZCcmFuY2hlczogdGhpcy5udW1iZXJPZkJyYW5jaGVzU2lnbmFsKCksXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59Il19
@@ -0,0 +1,207 @@
1
+ import { Component, Input, Output, EventEmitter, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { LucideAngularModule, Copy, Check, Edit } from 'lucide-angular';
4
+ import { CopilotTooltipDirective } from '../../lib/directives/tooltip.directive';
5
+ import { CopilotChatConfigurationService } from '../../core/chat-configuration/chat-configuration.service';
6
+ import { cn } from '../../lib/utils';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../lib/directives/tooltip.directive";
9
+ import * as i2 from "lucide-angular";
10
+ // Base toolbar button component
11
+ export class CopilotChatUserMessageToolbarButtonComponent {
12
+ title = '';
13
+ disabled = false;
14
+ set inputClass(value) {
15
+ this.customClass.set(value);
16
+ }
17
+ customClass = signal(undefined);
18
+ computedClass = computed(() => {
19
+ return cn(
20
+ // Flex centering
21
+ 'inline-flex items-center justify-center',
22
+ // Cursor
23
+ 'cursor-pointer',
24
+ // Background and text
25
+ 'p-0 text-[rgb(93,93,93)] hover:bg-[#E8E8E8]',
26
+ // Dark mode
27
+ 'dark:text-[rgb(243,243,243)] dark:hover:bg-[#303030]',
28
+ // Shape and sizing
29
+ 'h-8 w-8 rounded-md',
30
+ // Interactions
31
+ 'transition-colors',
32
+ // Hover states
33
+ 'hover:text-[rgb(93,93,93)]', 'dark:hover:text-[rgb(243,243,243)]',
34
+ // Focus states
35
+ 'focus:outline-none focus:ring-2 focus:ring-offset-2',
36
+ // Disabled state
37
+ 'disabled:opacity-50 disabled:cursor-not-allowed', this.customClass());
38
+ });
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatUserMessageToolbarButtonComponent, isStandalone: true, selector: "button[copilotChatUserMessageToolbarButton]", inputs: { title: "title", disabled: "disabled", inputClass: "inputClass" }, host: { attributes: { "type": "button" }, properties: { "class": "computedClass()", "attr.disabled": "disabled ? true : null", "attr.aria-label": "title" } }, hostDirectives: [{ directive: i1.CopilotTooltipDirective, inputs: ["copilotTooltip", "title", "tooltipPosition", "tooltipPosition", "tooltipDelay", "tooltipDelay"] }], ngImport: i0, template: `
41
+ <ng-content></ng-content>
42
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarButtonComponent, decorators: [{
45
+ type: Component,
46
+ args: [{
47
+ selector: 'button[copilotChatUserMessageToolbarButton]',
48
+ standalone: true,
49
+ imports: [CommonModule],
50
+ changeDetection: ChangeDetectionStrategy.OnPush,
51
+ encapsulation: ViewEncapsulation.None,
52
+ template: `
53
+ <ng-content></ng-content>
54
+ `,
55
+ host: {
56
+ '[class]': 'computedClass()',
57
+ '[attr.disabled]': 'disabled ? true : null',
58
+ 'type': 'button',
59
+ '[attr.aria-label]': 'title'
60
+ },
61
+ hostDirectives: [
62
+ {
63
+ directive: CopilotTooltipDirective,
64
+ inputs: ['copilotTooltip: title', 'tooltipPosition', 'tooltipDelay']
65
+ }
66
+ ]
67
+ }]
68
+ }], propDecorators: { title: [{
69
+ type: Input
70
+ }], disabled: [{
71
+ type: Input
72
+ }], inputClass: [{
73
+ type: Input
74
+ }] } });
75
+ // Copy button component
76
+ export class CopilotChatUserMessageCopyButtonComponent {
77
+ title;
78
+ disabled = false;
79
+ inputClass;
80
+ content;
81
+ clicked = new EventEmitter();
82
+ CopyIcon = Copy;
83
+ CheckIcon = Check;
84
+ copied = signal(false);
85
+ chatConfig = inject(CopilotChatConfigurationService);
86
+ get labels() {
87
+ return this.chatConfig.labels();
88
+ }
89
+ handleCopy() {
90
+ if (!this.content)
91
+ return;
92
+ // Set copied immediately for instant feedback
93
+ this.copied.set(true);
94
+ setTimeout(() => this.copied.set(false), 2000);
95
+ // Copy to clipboard (fire and forget)
96
+ navigator.clipboard.writeText(this.content).then(() => this.clicked.emit(), (err) => {
97
+ console.error('Failed to copy message:', err);
98
+ this.copied.set(false);
99
+ });
100
+ }
101
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageCopyButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatUserMessageCopyButtonComponent, isStandalone: true, selector: "copilot-chat-user-message-copy-button", inputs: { title: "title", disabled: "disabled", inputClass: "inputClass", content: "content" }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
103
+ <button
104
+ copilotChatUserMessageToolbarButton
105
+ [title]="title || labels.userMessageToolbarCopyMessageLabel"
106
+ [disabled]="disabled"
107
+ [inputClass]="inputClass"
108
+ (click)="handleCopy()">
109
+ @if (copied()) {
110
+ <lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
111
+ } @else {
112
+ <lucide-angular [img]="CopyIcon" [size]="18"></lucide-angular>
113
+ }
114
+ </button>
115
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: CopilotChatUserMessageToolbarButtonComponent, selector: "button[copilotChatUserMessageToolbarButton]", inputs: ["title", "disabled", "inputClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageCopyButtonComponent, decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: 'copilot-chat-user-message-copy-button',
121
+ standalone: true,
122
+ imports: [CommonModule, LucideAngularModule, CopilotChatUserMessageToolbarButtonComponent],
123
+ changeDetection: ChangeDetectionStrategy.OnPush,
124
+ encapsulation: ViewEncapsulation.None,
125
+ template: `
126
+ <button
127
+ copilotChatUserMessageToolbarButton
128
+ [title]="title || labels.userMessageToolbarCopyMessageLabel"
129
+ [disabled]="disabled"
130
+ [inputClass]="inputClass"
131
+ (click)="handleCopy()">
132
+ @if (copied()) {
133
+ <lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
134
+ } @else {
135
+ <lucide-angular [img]="CopyIcon" [size]="18"></lucide-angular>
136
+ }
137
+ </button>
138
+ `
139
+ }]
140
+ }], propDecorators: { title: [{
141
+ type: Input
142
+ }], disabled: [{
143
+ type: Input
144
+ }], inputClass: [{
145
+ type: Input
146
+ }], content: [{
147
+ type: Input
148
+ }], clicked: [{
149
+ type: Output
150
+ }] } });
151
+ // Edit button component
152
+ export class CopilotChatUserMessageEditButtonComponent {
153
+ title;
154
+ disabled = false;
155
+ inputClass;
156
+ clicked = new EventEmitter();
157
+ EditIcon = Edit;
158
+ chatConfig = inject(CopilotChatConfigurationService);
159
+ get labels() {
160
+ return this.chatConfig.labels();
161
+ }
162
+ handleEdit() {
163
+ if (!this.disabled) {
164
+ this.clicked.emit();
165
+ }
166
+ }
167
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageEditButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
168
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatUserMessageEditButtonComponent, isStandalone: true, selector: "copilot-chat-user-message-edit-button", inputs: { title: "title", disabled: "disabled", inputClass: "inputClass" }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
169
+ <button
170
+ copilotChatUserMessageToolbarButton
171
+ [title]="title || labels.userMessageToolbarEditMessageLabel"
172
+ [disabled]="disabled"
173
+ [inputClass]="inputClass"
174
+ (click)="handleEdit()">
175
+ <lucide-angular [img]="EditIcon" [size]="18"></lucide-angular>
176
+ </button>
177
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: CopilotChatUserMessageToolbarButtonComponent, selector: "button[copilotChatUserMessageToolbarButton]", inputs: ["title", "disabled", "inputClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
178
+ }
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageEditButtonComponent, decorators: [{
180
+ type: Component,
181
+ args: [{
182
+ selector: 'copilot-chat-user-message-edit-button',
183
+ standalone: true,
184
+ imports: [CommonModule, LucideAngularModule, CopilotChatUserMessageToolbarButtonComponent],
185
+ changeDetection: ChangeDetectionStrategy.OnPush,
186
+ encapsulation: ViewEncapsulation.None,
187
+ template: `
188
+ <button
189
+ copilotChatUserMessageToolbarButton
190
+ [title]="title || labels.userMessageToolbarEditMessageLabel"
191
+ [disabled]="disabled"
192
+ [inputClass]="inputClass"
193
+ (click)="handleEdit()">
194
+ <lucide-angular [img]="EditIcon" [size]="18"></lucide-angular>
195
+ </button>
196
+ `
197
+ }]
198
+ }], propDecorators: { title: [{
199
+ type: Input
200
+ }], disabled: [{
201
+ type: Input
202
+ }], inputClass: [{
203
+ type: Input
204
+ }], clicked: [{
205
+ type: Output
206
+ }] } });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1idXR0b25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsdUJBQXVCLEVBRXZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUVyQyxnQ0FBZ0M7QUF1QmhDLE1BQU0sT0FBTyw0Q0FBNEM7SUFDOUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsSUFBYSxVQUFVLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLFdBQVcsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBRTVELGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE9BQU8sRUFBRTtRQUNQLGlCQUFpQjtRQUNqQix5Q0FBeUM7UUFDekMsU0FBUztRQUNULGdCQUFnQjtR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Q0FBQztvQkFDMUYsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7OztHQVNUO2lCQUNGOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSwgQ29weSwgQ2hlY2ssIEVkaXQgfSBmcm9tICdsdWNpZGUtYW5ndWxhcic7XG5pbXBvcnQgeyBDb3BpbG90VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2xpYi9kaXJlY3RpdmVzL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2NoYXQtY29uZmlndXJhdGlvbi9jaGF0LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5cbi8vIEJhc2UgdG9vbGJhciBidXR0b24gY29tcG9uZW50XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdidXR0b25bY29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXJCdXR0b25dJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3NdJzogJ2NvbXB1dGVkQ2xhc3MoKScsXG4gICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCA/IHRydWUgOiBudWxsJyxcbiAgICAndHlwZSc6ICdidXR0b24nLFxuICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICd0aXRsZSdcbiAgfSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IENvcGlsb3RUb29sdGlwRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ2NvcGlsb3RUb29sdGlwOiB0aXRsZScsICd0b29sdGlwUG9zaXRpb24nLCAndG9vbHRpcERlbGF5J11cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXJCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgaW5wdXRDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jdXN0b21DbGFzcy5zZXQodmFsdWUpO1xuICB9XG4gIFxuICBwcml2YXRlIGN1c3RvbUNsYXNzID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgXG4gIGNvbXB1dGVkQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gRmxleCBjZW50ZXJpbmdcbiAgICAgICdpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgLy8gQ3Vyc29yXG4gICAgICAnY3Vyc29yLXBvaW50ZXInLFxuICAgICAgLy8gQmFja2dyb3VuZCBhbmQgdGV4dFxuICAgICAgJ3AtMCB0ZXh0LVtyZ2IoOTMsOTMsOTMpXSBob3ZlcjpiZy1bI0U4RThFOF0nLFxuICAgICAgLy8gRGFyayBtb2RlXG4gICAgICAnZGFyazp0ZXh0LVtyZ2IoMjQzLDI0MywyNDMpXSBkYXJrOmhvdmVyOmJnLVsjMzAzMDMwXScsXG4gICAgICAvLyBTaGFwZSBhbmQgc2l6aW5nXG4gICAgICAnaC04IHctOCByb3VuZGVkLW1kJyxcbiAgICAgIC8vIEludGVyYWN0aW9uc1xuICAgICAgJ3RyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgIC8vIEhvdmVyIHN0YXRlc1xuICAgICAgJ2hvdmVyOnRleHQtW3JnYig5Myw5Myw5MyldJyxcbiAgICAgICdkYXJrOmhvdmVyOnRleHQtW3JnYigyNDMsMjQzLDI0MyldJyxcbiAgICAgIC8vIEZvY3VzIHN0YXRlc1xuICAgICAgJ2ZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMicsXG4gICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkJyxcbiAgICAgIHRoaXMuY3VzdG9tQ2xhc3MoKVxuICAgICk7XG4gIH0pO1xufVxuXG4vLyBDb3B5IGJ1dHRvbiBjb21wb25lbnRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtY29weS1idXR0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlLCBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhckJ1dHRvbkNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b24gXG4gICAgICBjb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhckJ1dHRvblxuICAgICAgW3RpdGxlXT1cInRpdGxlIHx8IGxhYmVscy51c2VyTWVzc2FnZVRvb2xiYXJDb3B5TWVzc2FnZUxhYmVsXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbaW5wdXRDbGFzc109XCJpbnB1dENsYXNzXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVDb3B5KClcIj5cbiAgICAgIEBpZiAoY29waWVkKCkpIHtcbiAgICAgICAgPGx1Y2lkZS1hbmd1bGFyIFtpbWddPVwiQ2hlY2tJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxsdWNpZGUtYW5ndWxhciBbaW1nXT1cIkNvcHlJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgfVxuICAgIDwvYnV0dG9uPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VDb3B5QnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlucHV0Q2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBcbiAgcmVhZG9ubHkgQ29weUljb24gPSBDb3B5O1xuICByZWFkb25seSBDaGVja0ljb24gPSBDaGVjaztcbiAgXG4gIGNvcGllZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgY2hhdENvbmZpZyA9IGluamVjdChDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgXG4gIGdldCBsYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdENvbmZpZy5sYWJlbHMoKTtcbiAgfVxuICBcbiAgaGFuZGxlQ29weSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGVudCkgcmV0dXJuO1xuICAgIFxuICAgIC8vIFNldCBjb3BpZWQgaW1tZWRpYXRlbHkgZm9yIGluc3RhbnQgZmVlZGJhY2tcbiAgICB0aGlzLmNvcGllZC5zZXQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcGllZC5zZXQoZmFsc2UpLCAyMDAwKTtcbiAgICBcbiAgICAvLyBDb3B5IHRvIGNsaXBib2FyZCAoZmlyZSBhbmQgZm9yZ2V0KVxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuY29udGVudCkudGhlbihcbiAgICAgICgpID0+IHRoaXMuY2xpY2tlZC5lbWl0KCksXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb3B5IG1lc3NhZ2U6JywgZXJyKTtcbiAgICAgICAgdGhpcy5jb3BpZWQuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbi8vIEVkaXQgYnV0dG9uIGNvbXBvbmVudFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1lZGl0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEx1Y2lkZUFuZ3VsYXJNb2R1bGUsIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyQnV0dG9uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvbiBcbiAgICAgIGNvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyQnV0dG9uXG4gICAgICBbdGl0bGVdPVwidGl0bGUgfHwgbGFiZWxzLnVzZXJNZXNzYWdlVG9vbGJhckVkaXRNZXNzYWdlTGFiZWxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtpbnB1dENsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUVkaXQoKVwiPlxuICAgICAgPGx1Y2lkZS1hbmd1bGFyIFtpbWddPVwiRWRpdEljb25cIiBbc2l6ZV09XCIxOFwiPjwvbHVjaWRlLWFuZ3VsYXI+XG4gICAgPC9idXR0b24+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRVc2VyTWVzc2FnZUVkaXRCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5wdXRDbGFzcz86IHN0cmluZztcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIFxuICByZWFkb25seSBFZGl0SWNvbiA9IEVkaXQ7XG4gIHByaXZhdGUgY2hhdENvbmZpZyA9IGluamVjdChDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgXG4gIGdldCBsYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdENvbmZpZy5sYWJlbHMoKTtcbiAgfVxuICBcbiAgaGFuZGxlRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation, computed, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { cn } from '../../lib/utils';
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatUserMessageRendererComponent {
6
+ content = '';
7
+ set inputClass(value) {
8
+ this.customClass.set(value);
9
+ }
10
+ customClass = signal(undefined);
11
+ computedClass = computed(() => {
12
+ return cn("prose dark:prose-invert bg-muted relative max-w-[80%] rounded-[18px] px-4 py-1.5 data-[multiline]:py-3 inline-block whitespace-pre-wrap", this.customClass());
13
+ });
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatUserMessageRendererComponent, isStandalone: true, selector: "copilot-chat-user-message-renderer", inputs: { content: "content", inputClass: "inputClass" }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: `{{ content }}`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageRendererComponent, decorators: [{
18
+ type: Component,
19
+ args: [{
20
+ selector: 'copilot-chat-user-message-renderer',
21
+ standalone: true,
22
+ imports: [CommonModule],
23
+ changeDetection: ChangeDetectionStrategy.OnPush,
24
+ encapsulation: ViewEncapsulation.None,
25
+ host: {
26
+ '[class]': 'computedClass()'
27
+ },
28
+ template: `{{ content }}`
29
+ }]
30
+ }], propDecorators: { content: [{
31
+ type: Input
32
+ }], inputClass: [{
33
+ type: Input
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWFyQyxNQUFNLE9BQU8sdUNBQXVDO0lBQ3pDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDdEIsSUFBYSxVQUFVLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLFdBQVcsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBRTVELGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE9BQU8sRUFBRSxDQUNQLHlJQUF5SSxFQUN6SSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ25CLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQzt3R0FiUSx1Q0FBdUM7NEZBQXZDLHVDQUF1Qyw4TUFGeEMsZUFBZSwyREFOZixZQUFZOzs0RkFRWCx1Q0FBdUM7a0JBWG5ELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLGlCQUFpQjtxQkFDN0I7b0JBQ0QsUUFBUSxFQUFFLGVBQWU7aUJBQzFCOzhCQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3NdJzogJ2NvbXB1dGVkQ2xhc3MoKSdcbiAgfSxcbiAgdGVtcGxhdGU6IGB7eyBjb250ZW50IH19YFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlUmVuZGVyZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBjb250ZW50ID0gJyc7XG4gIEBJbnB1dCgpIHNldCBpbnB1dENsYXNzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmN1c3RvbUNsYXNzLnNldCh2YWx1ZSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgY3VzdG9tQ2xhc3MgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBcbiAgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInByb3NlIGRhcms6cHJvc2UtaW52ZXJ0IGJnLW11dGVkIHJlbGF0aXZlIG1heC13LVs4MCVdIHJvdW5kZWQtWzE4cHhdIHB4LTQgcHktMS41IGRhdGEtW211bHRpbGluZV06cHktMyBpbmxpbmUtYmxvY2sgd2hpdGVzcGFjZS1wcmUtd3JhcFwiLFxuICAgICAgdGhpcy5jdXN0b21DbGFzcygpXG4gICAgKTtcbiAgfSk7XG59Il19
@@ -0,0 +1,34 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { cn } from '../../lib/utils';
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatUserMessageToolbarComponent {
6
+ inputClass;
7
+ computedClass = signal('');
8
+ ngOnInit() {
9
+ this.computedClass.set(cn("w-full bg-transparent flex items-center justify-end mt-[4px] invisible group-hover:visible", this.inputClass));
10
+ }
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatUserMessageToolbarComponent, isStandalone: true, selector: "div[copilotChatUserMessageToolbar]", inputs: { inputClass: "inputClass" }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13
+ <ng-content></ng-content>
14
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarComponent, decorators: [{
17
+ type: Component,
18
+ args: [{
19
+ selector: 'div[copilotChatUserMessageToolbar]',
20
+ standalone: true,
21
+ imports: [CommonModule],
22
+ changeDetection: ChangeDetectionStrategy.OnPush,
23
+ encapsulation: ViewEncapsulation.None,
24
+ template: `
25
+ <ng-content></ng-content>
26
+ `,
27
+ host: {
28
+ '[class]': 'computedClass()'
29
+ }
30
+ }]
31
+ }], propDecorators: { inputClass: [{
32
+ type: Input
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS10b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWVyQyxNQUFNLE9BQU8sc0NBQXNDO0lBQ3hDLFVBQVUsQ0FBVTtJQUU3QixhQUFhLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRW5DLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsRUFBRSxDQUNBLDRGQUE0RixFQUM1RixJQUFJLENBQUMsVUFBVSxDQUNoQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQVpVLHNDQUFzQzs0RkFBdEMsc0NBQXNDLDBMQVB2Qzs7R0FFVCwyREFMUyxZQUFZOzs0RkFVWCxzQ0FBc0M7a0JBYmxELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLFNBQVMsRUFBRSxpQkFBaUI7cUJBQzdCO2lCQUNGOzhCQUVVLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rpdltjb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnY29tcHV0ZWRDbGFzcygpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaW5wdXRDbGFzcz86IHN0cmluZztcbiAgXG4gIGNvbXB1dGVkQ2xhc3MgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXB1dGVkQ2xhc3Muc2V0KFxuICAgICAgY24oXG4gICAgICAgIFwidy1mdWxsIGJnLXRyYW5zcGFyZW50IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIG10LVs0cHhdIGludmlzaWJsZSBncm91cC1ob3Zlcjp2aXNpYmxlXCIsXG4gICAgICAgIHRoaXMuaW5wdXRDbGFzc1xuICAgICAgKVxuICAgICk7XG4gIH1cbn0iXX0=