@copilotkitnext/angular 0.0.9-alpha.2 → 0.0.10

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 (210) hide show
  1. package/dist/esm2022/index.mjs +2 -70
  2. package/dist/esm2022/lib/agent.mjs +73 -0
  3. package/dist/esm2022/lib/chat-config.mjs +35 -0
  4. package/dist/esm2022/lib/chat-state.mjs +18 -0
  5. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
  6. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
  7. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
  8. package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
  9. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
  10. package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
  11. package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
  12. package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
  13. package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
  14. package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
  15. package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
  16. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
  17. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
  18. package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
  19. package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
  20. package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
  21. package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
  22. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
  23. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
  24. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
  25. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
  26. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
  27. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
  28. package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
  29. package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
  30. package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
  31. package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
  32. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
  33. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
  34. package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
  35. package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
  36. package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
  37. package/dist/esm2022/lib/config.mjs +9 -0
  38. package/dist/esm2022/lib/copilotkit.mjs +124 -0
  39. package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
  40. package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
  41. package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
  42. package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
  43. package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
  44. package/dist/esm2022/lib/resize-observer.mjs +152 -0
  45. package/dist/esm2022/lib/scroll-position.mjs +124 -0
  46. package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
  47. package/dist/esm2022/lib/slots/index.mjs +4 -0
  48. package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
  49. package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
  50. package/dist/esm2022/lib/tools.mjs +31 -0
  51. package/dist/esm2022/lib/utils.mjs +3 -3
  52. package/dist/esm2022/public-api.mjs +47 -0
  53. package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
  54. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  55. package/dist/index.d.ts +1 -55
  56. package/dist/lib/agent.d.ts +53 -0
  57. package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
  58. package/dist/lib/chat-state.d.ts +10 -0
  59. package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
  60. package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
  61. package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
  62. package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
  63. package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
  64. package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
  65. package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
  66. package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
  67. package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
  68. package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
  69. package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
  70. package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
  71. package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
  72. package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
  73. package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
  74. package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
  75. package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
  76. package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
  77. package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
  78. package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
  79. package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
  80. package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
  81. package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
  82. package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
  83. package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
  84. package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
  85. package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
  86. package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
  87. package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
  88. package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
  89. package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
  90. package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
  91. package/dist/lib/config.d.ts +16 -0
  92. package/dist/lib/copilotkit.d.ts +29 -0
  93. package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
  94. package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
  95. package/dist/lib/directives/tooltip.d.ts +33 -0
  96. package/dist/lib/human-in-the-loop.d.ts +13 -0
  97. package/dist/lib/render-tool-calls.d.ts +75 -0
  98. package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
  99. package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
  100. package/dist/lib/slots/copilot-slot.d.ts +34 -0
  101. package/dist/lib/slots/index.d.ts +3 -0
  102. package/dist/lib/slots/slot.types.d.ts +1 -1
  103. package/dist/lib/slots/slot.utils.d.ts +6 -4
  104. package/dist/lib/tools.d.ts +63 -0
  105. package/dist/lib/utils.d.ts +1 -1
  106. package/dist/public-api.d.ts +46 -0
  107. package/dist/styles.css +0 -69
  108. package/package.json +3 -3
  109. package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
  110. package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
  111. package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
  112. package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
  113. package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
  114. package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
  115. package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
  116. package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
  117. package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
  118. package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
  119. package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
  120. package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
  121. package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
  122. package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
  123. package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
  124. package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
  125. package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
  126. package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
  127. package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
  128. package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
  129. package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
  130. package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
  131. package/dist/components/chat/copilot-chat.component.d.ts +0 -36
  132. package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
  133. package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
  134. package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
  135. package/dist/core/copilotkit.providers.d.ts +0 -13
  136. package/dist/core/copilotkit.service.d.ts +0 -119
  137. package/dist/core/copilotkit.types.d.ts +0 -81
  138. package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
  139. package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
  140. package/dist/directives/copilotkit-config.directive.d.ts +0 -44
  141. package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
  142. package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
  143. package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
  144. package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
  145. package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
  146. package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
  147. package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
  148. package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
  149. package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
  150. package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
  151. package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
  152. package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
  153. package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
  154. package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
  155. package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
  156. package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
  157. package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
  158. package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
  159. package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
  160. package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
  161. package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
  162. package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
  163. package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
  164. package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
  165. package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
  166. package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
  167. package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
  168. package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
  169. package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
  170. package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
  171. package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
  172. package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
  173. package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
  174. package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
  175. package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
  176. package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
  177. package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
  178. package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
  179. package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
  180. package/dist/esm2022/core/copilotkit.service.mjs +0 -411
  181. package/dist/esm2022/core/copilotkit.types.mjs +0 -13
  182. package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
  183. package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
  184. package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
  185. package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
  186. package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
  187. package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
  188. package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
  189. package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
  190. package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
  191. package/dist/esm2022/services/resize-observer.service.mjs +0 -152
  192. package/dist/esm2022/services/scroll-position.service.mjs +0 -124
  193. package/dist/esm2022/types/frontend-tool.mjs +0 -2
  194. package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
  195. package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
  196. package/dist/esm2022/utils/agent.utils.mjs +0 -212
  197. package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
  198. package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
  199. package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
  200. package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
  201. package/dist/lib/directives/tooltip.directive.d.ts +0 -33
  202. package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
  203. package/dist/types/frontend-tool.d.ts +0 -37
  204. package/dist/types/human-in-the-loop.d.ts +0 -44
  205. package/dist/utils/agent-context.utils.d.ts +0 -75
  206. package/dist/utils/agent.utils.d.ts +0 -108
  207. package/dist/utils/chat-config.utils.d.ts +0 -166
  208. package/dist/utils/copilotkit.utils.d.ts +0 -16
  209. package/dist/utils/frontend-tool.utils.d.ts +0 -119
  210. package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
@@ -0,0 +1,203 @@
1
+ import { Component, input, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CdkMenuModule } from "@angular/cdk/menu";
4
+ import { OverlayModule } from "@angular/cdk/overlay";
5
+ import { LucideAngularModule, Settings2, ChevronRight } from "lucide-angular";
6
+ import { cn } from "../../utils";
7
+ import { injectChatLabels } from "../../chat-config";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/cdk/menu";
10
+ import * as i2 from "lucide-angular";
11
+ export class CopilotChatToolsMenu {
12
+ Settings2Icon = Settings2;
13
+ ChevronRightIcon = ChevronRight;
14
+ inputToolsMenu = input();
15
+ inputDisabled = input();
16
+ inputClass = input();
17
+ labels = injectChatLabels();
18
+ // Derive state from inputs
19
+ toolsMenu = computed(() => this.inputToolsMenu() ?? []);
20
+ disabled = computed(() => this.inputDisabled() ?? false);
21
+ customClass = computed(() => this.inputClass());
22
+ hasItems = computed(() => this.toolsMenu().length > 0);
23
+ label = this.labels.chatInputToolbarToolsButtonLabel;
24
+ buttonClass = computed(() => {
25
+ const baseClasses = cn(
26
+ // Base button styles
27
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-sm font-medium", "transition-all disabled:pointer-events-none disabled:opacity-50", "shrink-0 outline-none", "focus-visible:ring-[3px]",
28
+ // chatInputToolbarSecondary variant
29
+ "cursor-pointer", "bg-transparent text-[#444444]", "dark:text-white dark:border-[#404040]", "transition-colors", "focus:outline-none", "hover:bg-[#f8f8f8] hover:text-[#333333]", "dark:hover:bg-[#404040] dark:hover:text-[#FFFFFF]", "disabled:cursor-not-allowed disabled:opacity-50", "disabled:hover:bg-transparent disabled:hover:text-[#444444]", "dark:disabled:hover:bg-transparent dark:disabled:hover:text-[#CCCCCC]",
30
+ // Size
31
+ "h-9 px-3 gap-2 font-normal");
32
+ return cn(baseClasses, this.customClass());
33
+ });
34
+ isMenuItem(item) {
35
+ return item && typeof item === "object" && "label" in item;
36
+ }
37
+ handleItemClick(item) {
38
+ if (item.action) {
39
+ item.action();
40
+ }
41
+ }
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolsMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatToolsMenu, isStandalone: true, selector: "copilot-chat-tools-menu", inputs: { inputToolsMenu: { classPropertyName: "inputToolsMenu", publicName: "inputToolsMenu", isSignal: true, isRequired: false, transformFunction: null }, inputDisabled: { classPropertyName: "inputDisabled", publicName: "inputDisabled", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
44
+ @if (hasItems()) {
45
+ <button
46
+ type="button"
47
+ [disabled]="disabled()"
48
+ [class]="buttonClass()"
49
+ [cdkMenuTriggerFor]="menu"
50
+ >
51
+ <lucide-angular [img]="Settings2Icon" [size]="18"></lucide-angular>
52
+ <span class="text-sm font-normal">{{ label }}</span>
53
+ </button>
54
+
55
+ <ng-template #menu>
56
+ <div
57
+ class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
58
+ cdkMenu
59
+ >
60
+ @for (item of toolsMenu(); track $index) {
61
+ @if (item === "-") {
62
+ <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
63
+ } @else if (isMenuItem(item)) {
64
+ @if (item.items && item.items.length > 0) {
65
+ <!-- Submenu trigger -->
66
+ <button
67
+ type="button"
68
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm flex items-center justify-between"
69
+ [cdkMenuTriggerFor]="submenu"
70
+ cdkMenuItem
71
+ >
72
+ {{ item.label }}
73
+ <lucide-angular
74
+ [img]="ChevronRightIcon"
75
+ [size]="12"
76
+ class="ml-auto"
77
+ ></lucide-angular>
78
+ </button>
79
+
80
+ <!-- Submenu template -->
81
+ <ng-template #submenu>
82
+ <div
83
+ class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
84
+ cdkMenu
85
+ >
86
+ @for (subItem of item.items; track $index) {
87
+ @if (subItem === "-") {
88
+ <div
89
+ class="h-px bg-gray-200 dark:bg-gray-700 my-1"
90
+ ></div>
91
+ } @else if (isMenuItem(subItem)) {
92
+ <button
93
+ type="button"
94
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
95
+ (click)="handleItemClick(subItem)"
96
+ cdkMenuItem
97
+ >
98
+ {{ subItem.label }}
99
+ </button>
100
+ }
101
+ }
102
+ </div>
103
+ </ng-template>
104
+ } @else {
105
+ <!-- Regular menu item -->
106
+ <button
107
+ type="button"
108
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
109
+ (click)="handleItemClick(item)"
110
+ cdkMenuItem
111
+ >
112
+ {{ item.label }}
113
+ </button>
114
+ }
115
+ }
116
+ }
117
+ </div>
118
+ </ng-template>
119
+ }
120
+ `, isInline: true, styles: [".cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-container{position:fixed;z-index:1000}[cdkMenu]{animation:menuFadeIn .15s ease-out}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i1.CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: i1.CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: i1.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "ngmodule", type: OverlayModule }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolsMenu, decorators: [{
123
+ type: Component,
124
+ args: [{ selector: "copilot-chat-tools-menu", standalone: true, imports: [CommonModule, CdkMenuModule, OverlayModule, LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
125
+ @if (hasItems()) {
126
+ <button
127
+ type="button"
128
+ [disabled]="disabled()"
129
+ [class]="buttonClass()"
130
+ [cdkMenuTriggerFor]="menu"
131
+ >
132
+ <lucide-angular [img]="Settings2Icon" [size]="18"></lucide-angular>
133
+ <span class="text-sm font-normal">{{ label }}</span>
134
+ </button>
135
+
136
+ <ng-template #menu>
137
+ <div
138
+ class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
139
+ cdkMenu
140
+ >
141
+ @for (item of toolsMenu(); track $index) {
142
+ @if (item === "-") {
143
+ <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
144
+ } @else if (isMenuItem(item)) {
145
+ @if (item.items && item.items.length > 0) {
146
+ <!-- Submenu trigger -->
147
+ <button
148
+ type="button"
149
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm flex items-center justify-between"
150
+ [cdkMenuTriggerFor]="submenu"
151
+ cdkMenuItem
152
+ >
153
+ {{ item.label }}
154
+ <lucide-angular
155
+ [img]="ChevronRightIcon"
156
+ [size]="12"
157
+ class="ml-auto"
158
+ ></lucide-angular>
159
+ </button>
160
+
161
+ <!-- Submenu template -->
162
+ <ng-template #submenu>
163
+ <div
164
+ class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
165
+ cdkMenu
166
+ >
167
+ @for (subItem of item.items; track $index) {
168
+ @if (subItem === "-") {
169
+ <div
170
+ class="h-px bg-gray-200 dark:bg-gray-700 my-1"
171
+ ></div>
172
+ } @else if (isMenuItem(subItem)) {
173
+ <button
174
+ type="button"
175
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
176
+ (click)="handleItemClick(subItem)"
177
+ cdkMenuItem
178
+ >
179
+ {{ subItem.label }}
180
+ </button>
181
+ }
182
+ }
183
+ </div>
184
+ </ng-template>
185
+ } @else {
186
+ <!-- Regular menu item -->
187
+ <button
188
+ type="button"
189
+ class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
190
+ (click)="handleItemClick(item)"
191
+ cdkMenuItem
192
+ >
193
+ {{ item.label }}
194
+ </button>
195
+ }
196
+ }
197
+ }
198
+ </div>
199
+ </ng-template>
200
+ }
201
+ `, styles: [".cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-container{position:fixed;z-index:1000}[cdkMenu]{animation:menuFadeIn .15s ease-out}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
202
+ }] });
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2xzLW1lbnUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdG9vbHMtbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUF1SHJELE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixnQkFBZ0IsR0FBRyxZQUFZLENBQUM7SUFDekMsY0FBYyxHQUFHLEtBQUssRUFBdUMsQ0FBQztJQUM5RCxhQUFhLEdBQUcsS0FBSyxFQUF1QixDQUFDO0lBQzdDLFVBQVUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFFakMsTUFBTSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFcEMsMkJBQTJCO0lBQzNCLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3pELFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFaEQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO0lBRTlELFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzFCLE1BQU0sV0FBVyxHQUFHLEVBQUU7UUFDcEIscUJBQXFCO1FBQ3JCLGtHQUFrRyxFQUNsRyxpRUFBaUUsRUFDakUsdUJBQXVCLEVBQ3ZCLDBCQUEwQjtRQUMxQixvQ0FBb0M7UUFDcEMsZ0JBQWdCLEVBQ2hCLCtCQUErQixFQUMvQix1Q0FBdUMsRUFDdkMsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQix5Q0FBeUMsRUFDekMsbURBQW1ELEVBQ25ELGlEQUFpRCxFQUNqRCw2REFBNkQsRUFDN0QsdUVBQXVFO1FBQ3ZFLE9BQU87UUFDUCw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNGLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBbUI7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO3dHQWxEVSxvQkFBb0I7NEZBQXBCLG9CQUFvQix5Z0JBL0dyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2RVQsbVZBaEZTLFlBQVksOEJBQUUsYUFBYSxxakJBQUUsYUFBYSw4QkFBRSxtQkFBbUI7OzRGQWtIOUQsb0JBQW9CO2tCQXJIaEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsbUJBQ3pELHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksWUFDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkVUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENka01lbnVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL21lbnVcIjtcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IEx1Y2lkZUFuZ3VsYXJNb2R1bGUsIFNldHRpbmdzMiwgQ2hldnJvblJpZ2h0IH0gZnJvbSBcImx1Y2lkZS1hbmd1bGFyXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2xzTWVudUl0ZW0gfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtaW5wdXQudHlwZXNcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdG9vbHMtbWVudVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDZGtNZW51TW9kdWxlLCBPdmVybGF5TW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChoYXNJdGVtcygpKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCJcbiAgICAgICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgPlxuICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJTZXR0aW5nczJJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ub3JtYWxcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI21lbnU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gYmctd2hpdGUgZGFyazpiZy1bIzFGMUYxRl0gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMCByb3VuZGVkLWxnIHNoYWRvdy1sZyBwLTFcIlxuICAgICAgICAgIGNka01lbnVcbiAgICAgICAgPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgdG9vbHNNZW51KCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgQGlmIChpdGVtID09PSBcIi1cIikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1weCBiZy1ncmF5LTIwMCBkYXJrOmJnLWdyYXktNzAwIG15LTFcIj48L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGlzTWVudUl0ZW0oaXRlbSkpIHtcbiAgICAgICAgICAgICAgQGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDwhLS0gU3VibWVudSB0cmlnZ2VyIC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIHRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZ3JheS04MDAgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInN1Ym1lbnVcIlxuICAgICAgICAgICAgICAgICAgY2RrTWVudUl0ZW1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8bHVjaWRlLWFuZ3VsYXJcbiAgICAgICAgICAgICAgICAgICAgW2ltZ109XCJDaGV2cm9uUmlnaHRJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgPjwvbHVjaWRlLWFuZ3VsYXI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFN1Ym1lbnUgdGVtcGxhdGUgLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdWJtZW51PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gYmctd2hpdGUgZGFyazpiZy1bIzFGMUYxRl0gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMCByb3VuZGVkLWxnIHNoYWRvdy1sZyBwLTFcIlxuICAgICAgICAgICAgICAgICAgICBjZGtNZW51XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5pdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzdWJJdGVtID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtcHggYmctZ3JheS0yMDAgZGFyazpiZy1ncmF5LTcwMCBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChpc01lbnVJdGVtKHN1Ykl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgdGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1DbGljayhzdWJJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNka01lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1Ykl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPCEtLSBSZWd1bGFyIG1lbnUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiB0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCBob3ZlcjpiZy1ncmF5LTEwMCBkYXJrOmhvdmVyOmJnLWdyYXktODAwIGN1cnNvci1wb2ludGVyIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1DbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBjZGtNZW51SXRlbVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogQ0RLIE92ZXJsYXkgc3R5bGVzIGZvciBwb3NpdGlvbmluZyAqL1xuICAgICAgLmNkay1vdmVybGF5LXBhbmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgfVxuXG4gICAgICAvKiBFbnN1cmUgbWVudSBhcHBlYXJzIGFib3ZlIG90aGVyIGNvbnRlbnQgKi9cbiAgICAgIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICB9XG5cbiAgICAgIC8qIE1lbnUgYW5pbWF0aW9uICovXG4gICAgICBbY2RrTWVudV0ge1xuICAgICAgICBhbmltYXRpb246IG1lbnVGYWRlSW4gMC4xNXMgZWFzZS1vdXQ7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgbWVudUZhZGVJbiB7XG4gICAgICAgIGZyb20ge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7XG4gICAgICAgIH1cbiAgICAgICAgdG8ge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sc01lbnUge1xuICByZWFkb25seSBTZXR0aW5nczJJY29uID0gU2V0dGluZ3MyO1xuICByZWFkb25seSBDaGV2cm9uUmlnaHRJY29uID0gQ2hldnJvblJpZ2h0O1xuICBpbnB1dFRvb2xzTWVudSA9IGlucHV0PChUb29sc01lbnVJdGVtIHwgXCItXCIpW10gfCB1bmRlZmluZWQ+KCk7XG4gIGlucHV0RGlzYWJsZWQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHByaXZhdGUgbGFiZWxzID0gaW5qZWN0Q2hhdExhYmVscygpO1xuXG4gIC8vIERlcml2ZSBzdGF0ZSBmcm9tIGlucHV0c1xuICB0b29sc01lbnUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlucHV0VG9vbHNNZW51KCkgPz8gW10pO1xuICBkaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXREaXNhYmxlZCgpID8/IGZhbHNlKTtcbiAgY3VzdG9tQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlucHV0Q2xhc3MoKSk7XG5cbiAgaGFzSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRvb2xzTWVudSgpLmxlbmd0aCA+IDApO1xuXG4gIHJlYWRvbmx5IGxhYmVsID0gdGhpcy5sYWJlbHMuY2hhdElucHV0VG9vbGJhclRvb2xzQnV0dG9uTGFiZWw7XG5cbiAgYnV0dG9uQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBjbihcbiAgICAgIC8vIEJhc2UgYnV0dG9uIHN0eWxlc1xuICAgICAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW1cIixcbiAgICAgIFwidHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwXCIsXG4gICAgICBcInNocmluay0wIG91dGxpbmUtbm9uZVwiLFxuICAgICAgXCJmb2N1cy12aXNpYmxlOnJpbmctWzNweF1cIixcbiAgICAgIC8vIGNoYXRJbnB1dFRvb2xiYXJTZWNvbmRhcnkgdmFyaWFudFxuICAgICAgXCJjdXJzb3ItcG9pbnRlclwiLFxuICAgICAgXCJiZy10cmFuc3BhcmVudCB0ZXh0LVsjNDQ0NDQ0XVwiLFxuICAgICAgXCJkYXJrOnRleHQtd2hpdGUgZGFyazpib3JkZXItWyM0MDQwNDBdXCIsXG4gICAgICBcInRyYW5zaXRpb24tY29sb3JzXCIsXG4gICAgICBcImZvY3VzOm91dGxpbmUtbm9uZVwiLFxuICAgICAgXCJob3ZlcjpiZy1bI2Y4ZjhmOF0gaG92ZXI6dGV4dC1bIzMzMzMzM11cIixcbiAgICAgIFwiZGFyazpob3ZlcjpiZy1bIzQwNDA0MF0gZGFyazpob3Zlcjp0ZXh0LVsjRkZGRkZGXVwiLFxuICAgICAgXCJkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MFwiLFxuICAgICAgXCJkaXNhYmxlZDpob3ZlcjpiZy10cmFuc3BhcmVudCBkaXNhYmxlZDpob3Zlcjp0ZXh0LVsjNDQ0NDQ0XVwiLFxuICAgICAgXCJkYXJrOmRpc2FibGVkOmhvdmVyOmJnLXRyYW5zcGFyZW50IGRhcms6ZGlzYWJsZWQ6aG92ZXI6dGV4dC1bI0NDQ0NDQ11cIixcbiAgICAgIC8vIFNpemVcbiAgICAgIFwiaC05IHB4LTMgZ2FwLTIgZm9udC1ub3JtYWxcIlxuICAgICk7XG4gICAgcmV0dXJuIGNuKGJhc2VDbGFzc2VzLCB0aGlzLmN1c3RvbUNsYXNzKCkpO1xuICB9KTtcblxuICBpc01lbnVJdGVtKGl0ZW06IGFueSk6IGl0ZW0gaXMgVG9vbHNNZW51SXRlbSB7XG4gICAgcmV0dXJuIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIgJiYgXCJsYWJlbFwiIGluIGl0ZW07XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soaXRlbTogVG9vbHNNZW51SXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmFjdGlvbikge1xuICAgICAgaXRlbS5hY3Rpb24oKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,118 @@
1
+ import { Component, input, output, ChangeDetectionStrategy, ViewEncapsulation, computed, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { LucideAngularModule, ChevronLeft, ChevronRight } from "lucide-angular";
4
+ import { cn } from "../../utils";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "lucide-angular";
7
+ export class CopilotChatUserMessageBranchNavigation {
8
+ currentBranch = input(0);
9
+ numberOfBranches = input(1);
10
+ message = input();
11
+ inputClass = input();
12
+ switchToBranch = output();
13
+ ChevronLeftIcon = ChevronLeft;
14
+ ChevronRightIcon = ChevronRight;
15
+ buttonClass = cn(
16
+ // Flex centering
17
+ "inline-flex items-center justify-center",
18
+ // Cursor
19
+ "cursor-pointer",
20
+ // Background and text
21
+ "p-0 text-[rgb(93,93,93)] hover:bg-[#E8E8E8]",
22
+ // Dark mode
23
+ "dark:text-[rgb(243,243,243)] dark:hover:bg-[#303030]",
24
+ // Shape and sizing
25
+ "h-6 w-6 rounded-md",
26
+ // Interactions
27
+ "transition-colors",
28
+ // Disabled state
29
+ "disabled:opacity-50 disabled:cursor-not-allowed");
30
+ showNavigation = computed(() => this.numberOfBranches() > 1);
31
+ canGoPrev = computed(() => this.currentBranch() > 0);
32
+ canGoNext = computed(() => this.currentBranch() < this.numberOfBranches() - 1);
33
+ computedClass = computed(() => {
34
+ return cn("flex items-center gap-1", this.inputClass());
35
+ });
36
+ handlePrevious() {
37
+ if (this.canGoPrev()) {
38
+ const newIndex = this.currentBranch() - 1;
39
+ this.switchToBranch.emit({
40
+ branchIndex: newIndex,
41
+ numberOfBranches: this.numberOfBranches(),
42
+ message: this.message(),
43
+ });
44
+ }
45
+ }
46
+ handleNext() {
47
+ if (this.canGoNext()) {
48
+ const newIndex = this.currentBranch() + 1;
49
+ this.switchToBranch.emit({
50
+ branchIndex: newIndex,
51
+ numberOfBranches: this.numberOfBranches(),
52
+ message: this.message(),
53
+ });
54
+ }
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageBranchNavigation, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatUserMessageBranchNavigation, isStandalone: true, selector: "copilot-chat-user-message-branch-navigation", inputs: { currentBranch: { classPropertyName: "currentBranch", publicName: "currentBranch", isSignal: true, isRequired: false, transformFunction: null }, numberOfBranches: { classPropertyName: "numberOfBranches", publicName: "numberOfBranches", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { switchToBranch: "switchToBranch" }, ngImport: i0, template: `
58
+ @if (showNavigation()) {
59
+ <div [class]="computedClass()">
60
+ <button
61
+ type="button"
62
+ [class]="buttonClass"
63
+ [disabled]="!canGoPrev()"
64
+ (click)="handlePrevious()"
65
+ >
66
+ <lucide-angular [img]="ChevronLeftIcon" [size]="20"></lucide-angular>
67
+ </button>
68
+ <span class="text-sm text-muted-foreground px-0 font-medium">
69
+ {{ currentBranch() + 1 }}/{{ numberOfBranches() }}
70
+ </span>
71
+ <button
72
+ type="button"
73
+ [class]="buttonClass"
74
+ [disabled]="!canGoNext()"
75
+ (click)="handleNext()"
76
+ >
77
+ <lucide-angular [img]="ChevronRightIcon" [size]="20"></lucide-angular>
78
+ </button>
79
+ </div>
80
+ }
81
+ `, 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 });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageBranchNavigation, decorators: [{
84
+ type: Component,
85
+ args: [{
86
+ standalone: true,
87
+ selector: "copilot-chat-user-message-branch-navigation",
88
+ imports: [CommonModule, LucideAngularModule],
89
+ changeDetection: ChangeDetectionStrategy.OnPush,
90
+ encapsulation: ViewEncapsulation.None,
91
+ template: `
92
+ @if (showNavigation()) {
93
+ <div [class]="computedClass()">
94
+ <button
95
+ type="button"
96
+ [class]="buttonClass"
97
+ [disabled]="!canGoPrev()"
98
+ (click)="handlePrevious()"
99
+ >
100
+ <lucide-angular [img]="ChevronLeftIcon" [size]="20"></lucide-angular>
101
+ </button>
102
+ <span class="text-sm text-muted-foreground px-0 font-medium">
103
+ {{ currentBranch() + 1 }}/{{ numberOfBranches() }}
104
+ </span>
105
+ <button
106
+ type="button"
107
+ [class]="buttonClass"
108
+ [disabled]="!canGoNext()"
109
+ (click)="handleNext()"
110
+ >
111
+ <lucide-angular [img]="ChevronRightIcon" [size]="20"></lucide-angular>
112
+ </button>
113
+ </div>
114
+ }
115
+ `,
116
+ }]
117
+ }] });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1icmFuY2gtbmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2hGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQWtDakMsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxhQUFhLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLGdCQUFnQixHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFDL0IsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxjQUFjLEdBQUcsTUFBTSxFQUErQyxDQUFDO0lBRTlELGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDOUIsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0lBRWhDLFdBQVcsR0FBRyxFQUFFO0lBQ3ZCLGlCQUFpQjtJQUNqQix5Q0FBeUM7SUFDekMsU0FBUztJQUNULGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsNkNBQTZDO0lBQzdDLFlBQVk7SUFDWixzREFBc0Q7SUFDdEQsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpREFBaUQsQ0FDbEQsQ0FBQztJQUVGLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFN0QsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFckQsU0FBUyxHQUFHLFFBQVEsQ0FDbEIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FDekQsQ0FBQztJQUVGLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE9BQU8sRUFBRSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0lBRUgsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDdkIsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUc7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUN2QixXQUFXLEVBQUUsUUFBUTtnQkFDckIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRzthQUN6QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzt3R0EzRFUsc0NBQXNDOzRGQUF0QyxzQ0FBc0MsZ3RCQTFCdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCVCwyREEzQlMsWUFBWSw4QkFBRSxtQkFBbUI7OzRGQTZCaEMsc0NBQXNDO2tCQWhDbEQsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLDZDQUE2QztvQkFDdkQsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDO29CQUM1QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSwgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gXCJsdWNpZGUtYW5ndWxhclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBVc2VyTWVzc2FnZSxcbiAgdHlwZSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzLFxufSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLnR5cGVzXCI7XG5pbXBvcnQgeyBjbiB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1icmFuY2gtbmF2aWdhdGlvblwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChzaG93TmF2aWdhdGlvbigpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzKClcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb1ByZXYoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVByZXZpb3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGx1Y2lkZS1hbmd1bGFyIFtpbWddPVwiQ2hldnJvbkxlZnRJY29uXCIgW3NpemVdPVwiMjBcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0wIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAge3sgY3VycmVudEJyYW5jaCgpICsgMSB9fS97eyBudW1iZXJPZkJyYW5jaGVzKCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvTmV4dCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlTmV4dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsdWNpZGUtYW5ndWxhciBbaW1nXT1cIkNoZXZyb25SaWdodEljb25cIiBbc2l6ZV09XCIyMFwiPjwvbHVjaWRlLWFuZ3VsYXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvbiB7XG4gIGN1cnJlbnRCcmFuY2ggPSBpbnB1dDxudW1iZXI+KDApO1xuICBudW1iZXJPZkJyYW5jaGVzID0gaW5wdXQ8bnVtYmVyPigxKTtcbiAgbWVzc2FnZSA9IGlucHV0PFVzZXJNZXNzYWdlPigpO1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBzd2l0Y2hUb0JyYW5jaCA9IG91dHB1dDxDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzPigpO1xuXG4gIHJlYWRvbmx5IENoZXZyb25MZWZ0SWNvbiA9IENoZXZyb25MZWZ0O1xuICByZWFkb25seSBDaGV2cm9uUmlnaHRJY29uID0gQ2hldnJvblJpZ2h0O1xuXG4gIHJlYWRvbmx5IGJ1dHRvbkNsYXNzID0gY24oXG4gICAgLy8gRmxleCBjZW50ZXJpbmdcbiAgICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiLFxuICAgIC8vIEN1cnNvclxuICAgIFwiY3Vyc29yLXBvaW50ZXJcIixcbiAgICAvLyBCYWNrZ3JvdW5kIGFuZCB0ZXh0XG4gICAgXCJwLTAgdGV4dC1bcmdiKDkzLDkzLDkzKV0gaG92ZXI6YmctWyNFOEU4RThdXCIsXG4gICAgLy8gRGFyayBtb2RlXG4gICAgXCJkYXJrOnRleHQtW3JnYigyNDMsMjQzLDI0MyldIGRhcms6aG92ZXI6YmctWyMzMDMwMzBdXCIsXG4gICAgLy8gU2hhcGUgYW5kIHNpemluZ1xuICAgIFwiaC02IHctNiByb3VuZGVkLW1kXCIsXG4gICAgLy8gSW50ZXJhY3Rpb25zXG4gICAgXCJ0cmFuc2l0aW9uLWNvbG9yc1wiLFxuICAgIC8vIERpc2FibGVkIHN0YXRlXG4gICAgXCJkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICk7XG5cbiAgc2hvd05hdmlnYXRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLm51bWJlck9mQnJhbmNoZXMoKSA+IDEpO1xuXG4gIGNhbkdvUHJldiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudEJyYW5jaCgpID4gMCk7XG5cbiAgY2FuR29OZXh0ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5jdXJyZW50QnJhbmNoKCkgPCB0aGlzLm51bWJlck9mQnJhbmNoZXMoKSAtIDFcbiAgKTtcblxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBjbihcImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCIsIHRoaXMuaW5wdXRDbGFzcygpKTtcbiAgfSk7XG5cbiAgaGFuZGxlUHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuR29QcmV2KCkpIHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5jdXJyZW50QnJhbmNoKCkgLSAxO1xuICAgICAgdGhpcy5zd2l0Y2hUb0JyYW5jaC5lbWl0KHtcbiAgICAgICAgYnJhbmNoSW5kZXg6IG5ld0luZGV4LFxuICAgICAgICBudW1iZXJPZkJyYW5jaGVzOiB0aGlzLm51bWJlck9mQnJhbmNoZXMoKSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlKCkhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTmV4dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW5Hb05leHQoKSkge1xuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmN1cnJlbnRCcmFuY2goKSArIDE7XG4gICAgICB0aGlzLnN3aXRjaFRvQnJhbmNoLmVtaXQoe1xuICAgICAgICBicmFuY2hJbmRleDogbmV3SW5kZXgsXG4gICAgICAgIG51bWJlck9mQnJhbmNoZXM6IHRoaXMubnVtYmVyT2ZCcmFuY2hlcygpLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UoKSEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,182 @@
1
+ import { Component, input, output, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { LucideAngularModule, Copy, Check, Edit } from "lucide-angular";
4
+ import { CopilotTooltip } from "../../directives/tooltip";
5
+ import { cn } from "../../utils";
6
+ import { injectChatLabels } from "../../chat-config";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../directives/tooltip";
9
+ import * as i2 from "lucide-angular";
10
+ // Base toolbar button component
11
+ export class CopilotChatUserMessageToolbarButton {
12
+ title = input("");
13
+ disabled = input(false);
14
+ inputClass = input();
15
+ computedClass = computed(() => {
16
+ return cn(
17
+ // Flex centering
18
+ "inline-flex items-center justify-center",
19
+ // Cursor
20
+ "cursor-pointer",
21
+ // Background and text
22
+ "p-0 text-[rgb(93,93,93)] hover:bg-[#E8E8E8]",
23
+ // Dark mode
24
+ "dark:text-[rgb(243,243,243)] dark:hover:bg-[#303030]",
25
+ // Shape and sizing
26
+ "h-8 w-8 rounded-md",
27
+ // Interactions
28
+ "transition-colors",
29
+ // Hover states
30
+ "hover:text-[rgb(93,93,93)]", "dark:hover:text-[rgb(243,243,243)]",
31
+ // Focus states
32
+ "focus:outline-none focus:ring-2 focus:ring-offset-2",
33
+ // Disabled state
34
+ "disabled:opacity-50 disabled:cursor-not-allowed", this.inputClass());
35
+ });
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatUserMessageToolbarButton, isStandalone: true, selector: "button[copilotChatUserMessageToolbarButton]", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, properties: { "class": "computedClass()", "attr.disabled": "disabled() ? true : null", "attr.aria-label": "title()" } }, hostDirectives: [{ directive: i1.CopilotTooltip, inputs: ["copilotTooltip", "title", "tooltipPosition", "tooltipPosition", "tooltipDelay", "tooltipDelay"] }], ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbarButton, decorators: [{
40
+ type: Component,
41
+ args: [{
42
+ selector: "button[copilotChatUserMessageToolbarButton]",
43
+ standalone: true,
44
+ imports: [CommonModule],
45
+ changeDetection: ChangeDetectionStrategy.OnPush,
46
+ encapsulation: ViewEncapsulation.None,
47
+ template: ` <ng-content></ng-content> `,
48
+ host: {
49
+ "[class]": "computedClass()",
50
+ "[attr.disabled]": "disabled() ? true : null",
51
+ type: "button",
52
+ "[attr.aria-label]": "title()",
53
+ },
54
+ hostDirectives: [
55
+ {
56
+ directive: CopilotTooltip,
57
+ inputs: ["copilotTooltip: title", "tooltipPosition", "tooltipDelay"],
58
+ },
59
+ ],
60
+ }]
61
+ }] });
62
+ // Copy button component
63
+ export class CopilotChatUserMessageCopyButton {
64
+ title = input();
65
+ disabled = input(false);
66
+ inputClass = input();
67
+ content = input();
68
+ clicked = output();
69
+ CopyIcon = Copy;
70
+ CheckIcon = Check;
71
+ copied = signal(false);
72
+ labels = injectChatLabels();
73
+ handleCopy() {
74
+ if (!this.content())
75
+ return;
76
+ // Set copied immediately for instant feedback
77
+ this.copied.set(true);
78
+ setTimeout(() => this.copied.set(false), 2000);
79
+ // Copy to clipboard (fire and forget)
80
+ navigator.clipboard.writeText(this.content()).then(() => this.clicked.emit(), (err) => {
81
+ console.error("Failed to copy message:", err);
82
+ this.copied.set(false);
83
+ });
84
+ }
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageCopyButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
86
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatUserMessageCopyButton, isStandalone: true, selector: "copilot-chat-user-message-copy-button", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
87
+ <button
88
+ copilotChatUserMessageToolbarButton
89
+ [title]="title() || labels.userMessageToolbarCopyMessageLabel"
90
+ [disabled]="disabled()"
91
+ [inputClass]="inputClass()"
92
+ (click)="handleCopy()"
93
+ >
94
+ @if (copied()) {
95
+ <lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
96
+ } @else {
97
+ <lucide-angular [img]="CopyIcon" [size]="18"></lucide-angular>
98
+ }
99
+ </button>
100
+ `, 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: CopilotChatUserMessageToolbarButton, selector: "button[copilotChatUserMessageToolbarButton]", inputs: ["title", "disabled", "inputClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageCopyButton, decorators: [{
103
+ type: Component,
104
+ args: [{
105
+ standalone: true,
106
+ selector: "copilot-chat-user-message-copy-button",
107
+ imports: [
108
+ CommonModule,
109
+ LucideAngularModule,
110
+ CopilotChatUserMessageToolbarButton,
111
+ ],
112
+ changeDetection: ChangeDetectionStrategy.OnPush,
113
+ encapsulation: ViewEncapsulation.None,
114
+ template: `
115
+ <button
116
+ copilotChatUserMessageToolbarButton
117
+ [title]="title() || labels.userMessageToolbarCopyMessageLabel"
118
+ [disabled]="disabled()"
119
+ [inputClass]="inputClass()"
120
+ (click)="handleCopy()"
121
+ >
122
+ @if (copied()) {
123
+ <lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
124
+ } @else {
125
+ <lucide-angular [img]="CopyIcon" [size]="18"></lucide-angular>
126
+ }
127
+ </button>
128
+ `,
129
+ }]
130
+ }] });
131
+ // Edit button component
132
+ export class CopilotChatUserMessageEditButton {
133
+ title = input();
134
+ disabled = input(false);
135
+ inputClass = input();
136
+ clicked = output();
137
+ EditIcon = Edit;
138
+ labels = injectChatLabels();
139
+ handleEdit() {
140
+ if (!this.disabled()) {
141
+ this.clicked.emit();
142
+ }
143
+ }
144
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageEditButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
145
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatUserMessageEditButton, isStandalone: true, selector: "copilot-chat-user-message-edit-button", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
146
+ <button
147
+ copilotChatUserMessageToolbarButton
148
+ [title]="title() || labels.userMessageToolbarEditMessageLabel"
149
+ [disabled]="disabled()"
150
+ [inputClass]="inputClass()"
151
+ (click)="handleEdit()"
152
+ >
153
+ <lucide-angular [img]="EditIcon" [size]="18"></lucide-angular>
154
+ </button>
155
+ `, 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: CopilotChatUserMessageToolbarButton, selector: "button[copilotChatUserMessageToolbarButton]", inputs: ["title", "disabled", "inputClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
156
+ }
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageEditButton, decorators: [{
158
+ type: Component,
159
+ args: [{
160
+ selector: "copilot-chat-user-message-edit-button",
161
+ standalone: true,
162
+ imports: [
163
+ CommonModule,
164
+ LucideAngularModule,
165
+ CopilotChatUserMessageToolbarButton,
166
+ ],
167
+ changeDetection: ChangeDetectionStrategy.OnPush,
168
+ encapsulation: ViewEncapsulation.None,
169
+ template: `
170
+ <button
171
+ copilotChatUserMessageToolbarButton
172
+ [title]="title() || labels.userMessageToolbarEditMessageLabel"
173
+ [disabled]="disabled()"
174
+ [inputClass]="inputClass()"
175
+ (click)="handleEdit()"
176
+ >
177
+ <lucide-angular [img]="EditIcon" [size]="18"></lucide-angular>
178
+ </button>
179
+ `,
180
+ }]
181
+ }] });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1idXR0b25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1idXR0b25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBRXJELGdDQUFnQztBQXFCaEMsTUFBTSxPQUFPLG1DQUFtQztJQUM5QyxLQUFLLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLFFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDakMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUV6QyxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM1QixPQUFPLEVBQUU7UUFDUCxpQkFBaUI7UUFDakIseUNBQXlDO1FBQ3pDLFNBQVM7UUFDVCxnQkFBZ0I7UUFDaEIsc0JBQXNCO1FBQ3RCLDZDQUE2QztRQUM3QyxZQUFZO1FBQ1osc0RBQXNEO1FBQ3RELG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsNEJBQTRCLEVBQzVCLG9DQUFvQztRQUNwQyxlQUFlO1FBQ2YscURBQXFEO1FBQ3JELGlCQUFpQjtRQUNqQixpREFBaUQsRUFDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUNsQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7d0dBNUJRLG1DQUFtQzs0RkFBbkMsbUNBQW1DLHF6QkFkcEMsNkJBQTZCLDJEQUg3QixZQUFZOzs0RkFpQlgsbUNBQW1DO2tCQXBCL0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkNBQTZDO29CQUN2RCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixpQkFBaUIsRUFBRSwwQkFBMEI7d0JBQzdDLElBQUksRUFBRSxRQUFRO3dCQUNkLG1CQUFtQixFQUFFLFNBQVM7cUJBQy9CO29CQUNELGNBQWMsRUFBRTt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsY0FBYzs0QkFDekIsTUFBTSxFQUFFLENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxDQUFDO3lCQUNyRTtxQkFDRjtpQkFDRjs7QUFnQ0Qsd0JBQXdCO0FBMkJ4QixNQUFNLE9BQU8sZ0NBQWdDO0lBQ2xDLEtBQUssR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDcEMsUUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ3pDLE9BQU8sR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDdEMsT0FBTyxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXJDLFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU87UUFFNUIsOENBQThDO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUvQyxzQ0FBc0M7UUFDdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRyxDQUFDLENBQUMsSUFBSSxDQUNqRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUN6QixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7d0dBMUJVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLDRvQkFoQmpDOzs7Ozs7Ozs7Ozs7OztHQWNULDJEQXBCQyxZQUFZLDhCQUNaLG1CQUFtQixnUEFyQ1YsbUNBQW1DOzs0RkEwRG5DLGdDQUFnQztrQkExQjVDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSx1Q0FBdUM7b0JBQ2pELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsbUNBQW1DO3FCQUNwQztvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtpQkFDRjs7QUE4QkQsd0JBQXdCO0FBdUJ4QixNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLEtBQUssR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDcEMsUUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ3pDLE9BQU8sR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUVoQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXJDLFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQzt3R0FiVSxnQ0FBZ0M7NEZBQWhDLGdDQUFnQyw4Z0JBWmpDOzs7Ozs7Ozs7O0dBVVQsMkRBaEJDLFlBQVksOEJBQ1osbUJBQW1CLGdQQTdGVixtQ0FBbUM7OzRGQThHbkMsZ0NBQWdDO2tCQXRCNUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUNBQXVDO29CQUNqRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixtQ0FBbUM7cUJBQ3BDO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEx1Y2lkZUFuZ3VsYXJNb2R1bGUsIENvcHksIENoZWNrLCBFZGl0IH0gZnJvbSBcImx1Y2lkZS1hbmd1bGFyXCI7XG5pbXBvcnQgeyBDb3BpbG90VG9vbHRpcCB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3Rvb2x0aXBcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5cbi8vIEJhc2UgdG9vbGJhciBidXR0b24gY29tcG9uZW50XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYnV0dG9uW2NvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyQnV0dG9uXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gYCxcbiAgaG9zdDoge1xuICAgIFwiW2NsYXNzXVwiOiBcImNvbXB1dGVkQ2xhc3MoKVwiLFxuICAgIFwiW2F0dHIuZGlzYWJsZWRdXCI6IFwiZGlzYWJsZWQoKSA/IHRydWUgOiBudWxsXCIsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBcIlthdHRyLmFyaWEtbGFiZWxdXCI6IFwidGl0bGUoKVwiLFxuICB9LFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogQ29waWxvdFRvb2x0aXAsXG4gICAgICBpbnB1dHM6IFtcImNvcGlsb3RUb29sdGlwOiB0aXRsZVwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcInRvb2x0aXBEZWxheVwiXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhckJ1dHRvbiB7XG4gIHRpdGxlID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBGbGV4IGNlbnRlcmluZ1xuICAgICAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIixcbiAgICAgIC8vIEN1cnNvclxuICAgICAgXCJjdXJzb3ItcG9pbnRlclwiLFxuICAgICAgLy8gQmFja2dyb3VuZCBhbmQgdGV4dFxuICAgICAgXCJwLTAgdGV4dC1bcmdiKDkzLDkzLDkzKV0gaG92ZXI6YmctWyNFOEU4RThdXCIsXG4gICAgICAvLyBEYXJrIG1vZGVcbiAgICAgIFwiZGFyazp0ZXh0LVtyZ2IoMjQzLDI0MywyNDMpXSBkYXJrOmhvdmVyOmJnLVsjMzAzMDMwXVwiLFxuICAgICAgLy8gU2hhcGUgYW5kIHNpemluZ1xuICAgICAgXCJoLTggdy04IHJvdW5kZWQtbWRcIixcbiAgICAgIC8vIEludGVyYWN0aW9uc1xuICAgICAgXCJ0cmFuc2l0aW9uLWNvbG9yc1wiLFxuICAgICAgLy8gSG92ZXIgc3RhdGVzXG4gICAgICBcImhvdmVyOnRleHQtW3JnYig5Myw5Myw5MyldXCIsXG4gICAgICBcImRhcms6aG92ZXI6dGV4dC1bcmdiKDI0MywyNDMsMjQzKV1cIixcbiAgICAgIC8vIEZvY3VzIHN0YXRlc1xuICAgICAgXCJmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTJcIixcbiAgICAgIC8vIERpc2FibGVkIHN0YXRlXG4gICAgICBcImRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCIsXG4gICAgICB0aGlzLmlucHV0Q2xhc3MoKVxuICAgICk7XG4gIH0pO1xufVxuXG4vLyBDb3B5IGJ1dHRvbiBjb21wb25lbnRcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWNvcHktYnV0dG9uXCIsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTHVjaWRlQW5ndWxhck1vZHVsZSxcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhckJ1dHRvbixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgY29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXJCdXR0b25cbiAgICAgIFt0aXRsZV09XCJ0aXRsZSgpIHx8IGxhYmVscy51c2VyTWVzc2FnZVRvb2xiYXJDb3B5TWVzc2FnZUxhYmVsXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgIFtpbnB1dENsYXNzXT1cImlucHV0Q2xhc3MoKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlQ29weSgpXCJcbiAgICA+XG4gICAgICBAaWYgKGNvcGllZCgpKSB7XG4gICAgICAgIDxsdWNpZGUtYW5ndWxhciBbaW1nXT1cIkNoZWNrSWNvblwiIFtzaXplXT1cIjE4XCI+PC9sdWNpZGUtYW5ndWxhcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJDb3B5SWNvblwiIFtzaXplXT1cIjE4XCI+PC9sdWNpZGUtYW5ndWxhcj5cbiAgICAgIH1cbiAgICA8L2J1dHRvbj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRVc2VyTWVzc2FnZUNvcHlCdXR0b24ge1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNvbnRlbnQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNsaWNrZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgQ29weUljb24gPSBDb3B5O1xuICByZWFkb25seSBDaGVja0ljb24gPSBDaGVjaztcbiAgcmVhZG9ubHkgY29waWVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbGFiZWxzID0gaW5qZWN0Q2hhdExhYmVscygpO1xuXG4gIGhhbmRsZUNvcHkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnQoKSkgcmV0dXJuO1xuXG4gICAgLy8gU2V0IGNvcGllZCBpbW1lZGlhdGVseSBmb3IgaW5zdGFudCBmZWVkYmFja1xuICAgIHRoaXMuY29waWVkLnNldCh0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29waWVkLnNldChmYWxzZSksIDIwMDApO1xuXG4gICAgLy8gQ29weSB0byBjbGlwYm9hcmQgKGZpcmUgYW5kIGZvcmdldClcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmNvbnRlbnQoKSEpLnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLmNsaWNrZWQuZW1pdCgpLFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgbWVzc2FnZTpcIiwgZXJyKTtcbiAgICAgICAgdGhpcy5jb3BpZWQuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbi8vIEVkaXQgYnV0dG9uIGNvbXBvbmVudFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtZWRpdC1idXR0b25cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMdWNpZGVBbmd1bGFyTW9kdWxlLFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyQnV0dG9uLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uXG4gICAgICBjb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhckJ1dHRvblxuICAgICAgW3RpdGxlXT1cInRpdGxlKCkgfHwgbGFiZWxzLnVzZXJNZXNzYWdlVG9vbGJhckVkaXRNZXNzYWdlTGFiZWxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgW2lucHV0Q2xhc3NdPVwiaW5wdXRDbGFzcygpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVFZGl0KClcIlxuICAgID5cbiAgICAgIDxsdWNpZGUtYW5ndWxhciBbaW1nXT1cIkVkaXRJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgIDwvYnV0dG9uPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlRWRpdEJ1dHRvbiB7XG4gIHRpdGxlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5wdXRDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgY2xpY2tlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IEVkaXRJY29uID0gRWRpdDtcbiAgcmVhZG9ubHkgbGFiZWxzID0gaW5qZWN0Q2hhdExhYmVscygpO1xuXG4gIGhhbmRsZUVkaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, computed, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../../utils";
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatUserMessageRenderer {
6
+ content = input("");
7
+ inputClass = input();
8
+ computedClass = computed(() => {
9
+ 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.inputClass());
10
+ });
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatUserMessageRenderer, isStandalone: true, selector: "copilot-chat-user-message-renderer", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: `{{ content() }}`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageRenderer, decorators: [{
15
+ type: Component,
16
+ args: [{
17
+ selector: "copilot-chat-user-message-renderer",
18
+ standalone: true,
19
+ imports: [CommonModule],
20
+ changeDetection: ChangeDetectionStrategy.OnPush,
21
+ encapsulation: ViewEncapsulation.None,
22
+ host: {
23
+ "[class]": "computedClass()",
24
+ },
25
+ template: `{{ content() }}`,
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBYWpDLE1BQU0sT0FBTyw4QkFBOEI7SUFDaEMsT0FBTyxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRXpDLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE9BQU8sRUFBRSxDQUNQLHlJQUF5SSxFQUN6SSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQzt3R0FUUSw4QkFBOEI7NEZBQTlCLDhCQUE4QixxYUFGL0IsaUJBQWlCLDJEQU5qQixZQUFZOzs0RkFRWCw4QkFBOEI7a0JBWDFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLGlCQUFpQjtxQkFDN0I7b0JBQ0QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtcmVuZGVyZXJcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgXCJbY2xhc3NdXCI6IFwiY29tcHV0ZWRDbGFzcygpXCIsXG4gIH0sXG4gIHRlbXBsYXRlOiBge3sgY29udGVudCgpIH19YCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRVc2VyTWVzc2FnZVJlbmRlcmVyIHtcbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0PHN0cmluZz4oXCJcIik7XG4gIHJlYWRvbmx5IGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInByb3NlIGRhcms6cHJvc2UtaW52ZXJ0IGJnLW11dGVkIHJlbGF0aXZlIG1heC13LVs4MCVdIHJvdW5kZWQtWzE4cHhdIHB4LTQgcHktMS41IGRhdGEtW211bHRpbGluZV06cHktMyBpbmxpbmUtYmxvY2sgd2hpdGVzcGFjZS1wcmUtd3JhcFwiLFxuICAgICAgdGhpcy5pbnB1dENsYXNzKClcbiAgICApO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { Component, input, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../../utils";
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatUserMessageToolbar {
6
+ inputClass = input();
7
+ computedClass = computed(() => cn("w-full bg-transparent flex items-center justify-end mt-[4px] invisible group-hover:visible", this.inputClass()));
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatUserMessageToolbar, isStandalone: true, selector: "div[copilotChatUserMessageToolbar]", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessageToolbar, decorators: [{
12
+ type: Component,
13
+ args: [{
14
+ selector: "div[copilotChatUserMessageToolbar]",
15
+ standalone: true,
16
+ imports: [CommonModule],
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ encapsulation: ViewEncapsulation.None,
19
+ template: ` <ng-content></ng-content> `,
20
+ host: {
21
+ "[class]": "computedClass()",
22
+ },
23
+ }]
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS10b29sYmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS10b29sYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUix1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQWFqQyxNQUFNLE9BQU8sNkJBQTZCO0lBQy9CLFVBQVUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFFekMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDckMsRUFBRSxDQUNBLDRGQUE0RixFQUM1RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQ0YsQ0FBQzt3R0FSUyw2QkFBNkI7NEZBQTdCLDZCQUE2Qix1U0FMOUIsNkJBQTZCLDJEQUg3QixZQUFZOzs0RkFRWCw2QkFBNkI7a0JBWHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLGlCQUFpQjtxQkFDN0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBjb21wdXRlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImRpdltjb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhcl1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYCA8bmctY29udGVudD48L25nLWNvbnRlbnQ+IGAsXG4gIGhvc3Q6IHtcbiAgICBcIltjbGFzc11cIjogXCJjb21wdXRlZENsYXNzKClcIixcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXIge1xuICByZWFkb25seSBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVkQ2xhc3MgPSBjb21wdXRlZCgoKSA9PlxuICAgIGNuKFxuICAgICAgXCJ3LWZ1bGwgYmctdHJhbnNwYXJlbnQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgbXQtWzRweF0gaW52aXNpYmxlIGdyb3VwLWhvdmVyOnZpc2libGVcIixcbiAgICAgIHRoaXMuaW5wdXRDbGFzcygpXG4gICAgKVxuICApO1xufVxuIl19