@copilotkitnext/angular 0.0.9-alpha.3 → 0.0.11

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 +5 -5
  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,306 @@
1
+ import { Component, input, output, TemplateRef, ContentChild, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CopilotSlot } from "../../slots/copilot-slot";
4
+ import { CopilotChatUserMessageRenderer } from "./copilot-chat-user-message-renderer";
5
+ import { CopilotChatUserMessageCopyButton, CopilotChatUserMessageEditButton, } from "./copilot-chat-user-message-buttons";
6
+ import { CopilotChatUserMessageToolbar } from "./copilot-chat-user-message-toolbar";
7
+ import { CopilotChatUserMessageBranchNavigation } from "./copilot-chat-user-message-branch-navigation";
8
+ import { cn } from "../../utils";
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common";
11
+ export class CopilotChatUserMessage {
12
+ // Capture templates from content projection
13
+ messageRendererTemplate;
14
+ toolbarTemplate;
15
+ copyButtonTemplate;
16
+ editButtonTemplate;
17
+ branchNavigationTemplate;
18
+ // Props for tweaking default components
19
+ messageRendererClass = input();
20
+ toolbarClass = input();
21
+ copyButtonClass = input();
22
+ editButtonClass = input();
23
+ branchNavigationClass = input();
24
+ // Component inputs for overrides
25
+ messageRendererComponent = input();
26
+ toolbarComponent = input();
27
+ copyButtonComponent = input();
28
+ editButtonComponent = input();
29
+ branchNavigationComponent = input();
30
+ // Regular inputs
31
+ message = input();
32
+ branchIndex = input();
33
+ numberOfBranches = input();
34
+ additionalToolbarItems = input();
35
+ inputClass = input();
36
+ // Output events
37
+ editMessage = output();
38
+ switchToBranch = output();
39
+ // Derived values
40
+ branchIndexValue = computed(() => this.branchIndex() ?? 0);
41
+ numberOfBranchesValue = computed(() => this.numberOfBranches() ?? 1);
42
+ // Default components
43
+ CopilotChatUserMessageRenderer = CopilotChatUserMessageRenderer;
44
+ CopilotChatUserMessageToolbar = CopilotChatUserMessageToolbar;
45
+ CopilotChatUserMessageCopyButton = CopilotChatUserMessageCopyButton;
46
+ CopilotChatUserMessageEditButton = CopilotChatUserMessageEditButton;
47
+ CopilotChatUserMessageBranchNavigation = CopilotChatUserMessageBranchNavigation;
48
+ // Computed values
49
+ showBranchNavigation = computed(() => (this.numberOfBranches() ?? 1) > 1);
50
+ computedClass = computed(() => cn("flex flex-col items-end group pt-10", this.inputClass()));
51
+ // Context for slots (reactive via signals)
52
+ messageRendererContext = computed(() => ({
53
+ content: this.message()?.content || "",
54
+ }));
55
+ // Output maps for slots
56
+ copyButtonOutputs = { clicked: () => this.handleCopy() };
57
+ editButtonOutputs = { clicked: () => this.handleEdit() };
58
+ branchNavigationContext = computed(() => ({
59
+ currentBranch: this.branchIndexValue(),
60
+ numberOfBranches: this.numberOfBranchesValue(),
61
+ onSwitchToBranch: (props) => this.handleSwitchToBranch(props),
62
+ message: this.message(),
63
+ }));
64
+ toolbarContext = computed(() => ({
65
+ children: null, // Will be populated by the toolbar content
66
+ }));
67
+ handleCopy() {
68
+ // Copy is handled by the button component itself
69
+ // This is just for any additional logic if needed
70
+ }
71
+ handleEdit() {
72
+ this.editMessage.emit({ message: this.message() });
73
+ }
74
+ handleSwitchToBranch(props) {
75
+ this.switchToBranch.emit(props);
76
+ }
77
+ constructor() { }
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatUserMessage, isStandalone: true, selector: "copilot-chat-user-message", inputs: { messageRendererClass: { classPropertyName: "messageRendererClass", publicName: "messageRendererClass", isSignal: true, isRequired: false, transformFunction: null }, toolbarClass: { classPropertyName: "toolbarClass", publicName: "toolbarClass", isSignal: true, isRequired: false, transformFunction: null }, copyButtonClass: { classPropertyName: "copyButtonClass", publicName: "copyButtonClass", isSignal: true, isRequired: false, transformFunction: null }, editButtonClass: { classPropertyName: "editButtonClass", publicName: "editButtonClass", isSignal: true, isRequired: false, transformFunction: null }, branchNavigationClass: { classPropertyName: "branchNavigationClass", publicName: "branchNavigationClass", isSignal: true, isRequired: false, transformFunction: null }, messageRendererComponent: { classPropertyName: "messageRendererComponent", publicName: "messageRendererComponent", isSignal: true, isRequired: false, transformFunction: null }, toolbarComponent: { classPropertyName: "toolbarComponent", publicName: "toolbarComponent", isSignal: true, isRequired: false, transformFunction: null }, copyButtonComponent: { classPropertyName: "copyButtonComponent", publicName: "copyButtonComponent", isSignal: true, isRequired: false, transformFunction: null }, editButtonComponent: { classPropertyName: "editButtonComponent", publicName: "editButtonComponent", isSignal: true, isRequired: false, transformFunction: null }, branchNavigationComponent: { classPropertyName: "branchNavigationComponent", publicName: "branchNavigationComponent", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, branchIndex: { classPropertyName: "branchIndex", publicName: "branchIndex", isSignal: true, isRequired: false, transformFunction: null }, numberOfBranches: { classPropertyName: "numberOfBranches", publicName: "numberOfBranches", isSignal: true, isRequired: false, transformFunction: null }, additionalToolbarItems: { classPropertyName: "additionalToolbarItems", publicName: "additionalToolbarItems", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editMessage: "editMessage", switchToBranch: "switchToBranch" }, queries: [{ propertyName: "messageRendererTemplate", first: true, predicate: ["messageRenderer"], descendants: true, read: TemplateRef }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, read: TemplateRef }, { propertyName: "copyButtonTemplate", first: true, predicate: ["copyButton"], descendants: true, read: TemplateRef }, { propertyName: "editButtonTemplate", first: true, predicate: ["editButton"], descendants: true, read: TemplateRef }, { propertyName: "branchNavigationTemplate", first: true, predicate: ["branchNavigation"], descendants: true, read: TemplateRef }], ngImport: i0, template: `
80
+ <div [class]="computedClass()" [attr.data-message-id]="message()?.id">
81
+ <!-- Message Renderer -->
82
+ @if (messageRendererTemplate || messageRendererComponent()) {
83
+ <copilot-slot
84
+ [slot]="messageRendererTemplate || messageRendererComponent()"
85
+ [context]="messageRendererContext()"
86
+ [defaultComponent]="CopilotChatUserMessageRenderer"
87
+ >
88
+ </copilot-slot>
89
+ } @else {
90
+ <copilot-chat-user-message-renderer
91
+ [content]="message()?.content || ''"
92
+ [inputClass]="messageRendererClass()"
93
+ >
94
+ </copilot-chat-user-message-renderer>
95
+ }
96
+
97
+ <!-- Toolbar -->
98
+ @if (toolbarTemplate || toolbarComponent()) {
99
+ <copilot-slot
100
+ [slot]="toolbarTemplate || toolbarComponent()"
101
+ [context]="toolbarContext()"
102
+ [defaultComponent]="CopilotChatUserMessageToolbar"
103
+ >
104
+ </copilot-slot>
105
+ } @else {
106
+ <div copilotChatUserMessageToolbar [inputClass]="toolbarClass()">
107
+ <div class="flex items-center gap-1 justify-end">
108
+ <!-- Additional toolbar items -->
109
+ @if (additionalToolbarItems()) {
110
+ <ng-container
111
+ [ngTemplateOutlet]="additionalToolbarItems() || null"
112
+ ></ng-container>
113
+ }
114
+
115
+ <!-- Copy button -->
116
+ @if (copyButtonTemplate || copyButtonComponent()) {
117
+ <copilot-slot
118
+ [slot]="copyButtonTemplate || copyButtonComponent()"
119
+ [context]="{ content: message()?.content || '' }"
120
+ [outputs]="copyButtonOutputs"
121
+ [defaultComponent]="CopilotChatUserMessageCopyButton"
122
+ >
123
+ </copilot-slot>
124
+ } @else {
125
+ <copilot-chat-user-message-copy-button
126
+ [content]="message()?.content"
127
+ [inputClass]="copyButtonClass()"
128
+ (clicked)="handleCopy()"
129
+ >
130
+ </copilot-chat-user-message-copy-button>
131
+ }
132
+
133
+ <!-- Edit button -->
134
+ @if (true) {
135
+ @if (editButtonTemplate || editButtonComponent()) {
136
+ <copilot-slot
137
+ [slot]="editButtonTemplate || editButtonComponent()"
138
+ [context]="{}"
139
+ [outputs]="editButtonOutputs"
140
+ [defaultComponent]="CopilotChatUserMessageEditButton"
141
+ >
142
+ </copilot-slot>
143
+ } @else {
144
+ <copilot-chat-user-message-edit-button
145
+ [inputClass]="editButtonClass()"
146
+ (clicked)="handleEdit()"
147
+ >
148
+ </copilot-chat-user-message-edit-button>
149
+ }
150
+ }
151
+
152
+ <!-- Branch navigation -->
153
+ @if (showBranchNavigation()) {
154
+ @if (branchNavigationTemplate || branchNavigationComponent()) {
155
+ <copilot-slot
156
+ [slot]="
157
+ branchNavigationTemplate || branchNavigationComponent()
158
+ "
159
+ [context]="branchNavigationContext()"
160
+ [defaultComponent]="CopilotChatUserMessageBranchNavigation"
161
+ >
162
+ </copilot-slot>
163
+ } @else {
164
+ <copilot-chat-user-message-branch-navigation
165
+ [currentBranch]="branchIndexValue()"
166
+ [numberOfBranches]="numberOfBranchesValue()"
167
+ [message]="message()!"
168
+ [inputClass]="branchNavigationClass()"
169
+ (switchToBranch)="handleSwitchToBranch($event)"
170
+ >
171
+ </copilot-chat-user-message-branch-navigation>
172
+ }
173
+ }
174
+ </div>
175
+ </div>
176
+ }
177
+ </div>
178
+ `, isInline: true, styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CopilotSlot, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }, { kind: "component", type: CopilotChatUserMessageRenderer, selector: "copilot-chat-user-message-renderer", inputs: ["content", "inputClass"] }, { kind: "component", type: CopilotChatUserMessageCopyButton, selector: "copilot-chat-user-message-copy-button", inputs: ["title", "disabled", "inputClass", "content"], outputs: ["clicked"] }, { kind: "component", type: CopilotChatUserMessageEditButton, selector: "copilot-chat-user-message-edit-button", inputs: ["title", "disabled", "inputClass"], outputs: ["clicked"] }, { kind: "component", type: CopilotChatUserMessageToolbar, selector: "div[copilotChatUserMessageToolbar]", inputs: ["inputClass"] }, { kind: "component", type: CopilotChatUserMessageBranchNavigation, selector: "copilot-chat-user-message-branch-navigation", inputs: ["currentBranch", "numberOfBranches", "message", "inputClass"], outputs: ["switchToBranch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
179
+ }
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatUserMessage, decorators: [{
181
+ type: Component,
182
+ args: [{ standalone: true, selector: "copilot-chat-user-message", imports: [
183
+ CommonModule,
184
+ CopilotSlot,
185
+ CopilotChatUserMessageRenderer,
186
+ CopilotChatUserMessageCopyButton,
187
+ CopilotChatUserMessageEditButton,
188
+ CopilotChatUserMessageToolbar,
189
+ CopilotChatUserMessageBranchNavigation,
190
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
191
+ <div [class]="computedClass()" [attr.data-message-id]="message()?.id">
192
+ <!-- Message Renderer -->
193
+ @if (messageRendererTemplate || messageRendererComponent()) {
194
+ <copilot-slot
195
+ [slot]="messageRendererTemplate || messageRendererComponent()"
196
+ [context]="messageRendererContext()"
197
+ [defaultComponent]="CopilotChatUserMessageRenderer"
198
+ >
199
+ </copilot-slot>
200
+ } @else {
201
+ <copilot-chat-user-message-renderer
202
+ [content]="message()?.content || ''"
203
+ [inputClass]="messageRendererClass()"
204
+ >
205
+ </copilot-chat-user-message-renderer>
206
+ }
207
+
208
+ <!-- Toolbar -->
209
+ @if (toolbarTemplate || toolbarComponent()) {
210
+ <copilot-slot
211
+ [slot]="toolbarTemplate || toolbarComponent()"
212
+ [context]="toolbarContext()"
213
+ [defaultComponent]="CopilotChatUserMessageToolbar"
214
+ >
215
+ </copilot-slot>
216
+ } @else {
217
+ <div copilotChatUserMessageToolbar [inputClass]="toolbarClass()">
218
+ <div class="flex items-center gap-1 justify-end">
219
+ <!-- Additional toolbar items -->
220
+ @if (additionalToolbarItems()) {
221
+ <ng-container
222
+ [ngTemplateOutlet]="additionalToolbarItems() || null"
223
+ ></ng-container>
224
+ }
225
+
226
+ <!-- Copy button -->
227
+ @if (copyButtonTemplate || copyButtonComponent()) {
228
+ <copilot-slot
229
+ [slot]="copyButtonTemplate || copyButtonComponent()"
230
+ [context]="{ content: message()?.content || '' }"
231
+ [outputs]="copyButtonOutputs"
232
+ [defaultComponent]="CopilotChatUserMessageCopyButton"
233
+ >
234
+ </copilot-slot>
235
+ } @else {
236
+ <copilot-chat-user-message-copy-button
237
+ [content]="message()?.content"
238
+ [inputClass]="copyButtonClass()"
239
+ (clicked)="handleCopy()"
240
+ >
241
+ </copilot-chat-user-message-copy-button>
242
+ }
243
+
244
+ <!-- Edit button -->
245
+ @if (true) {
246
+ @if (editButtonTemplate || editButtonComponent()) {
247
+ <copilot-slot
248
+ [slot]="editButtonTemplate || editButtonComponent()"
249
+ [context]="{}"
250
+ [outputs]="editButtonOutputs"
251
+ [defaultComponent]="CopilotChatUserMessageEditButton"
252
+ >
253
+ </copilot-slot>
254
+ } @else {
255
+ <copilot-chat-user-message-edit-button
256
+ [inputClass]="editButtonClass()"
257
+ (clicked)="handleEdit()"
258
+ >
259
+ </copilot-chat-user-message-edit-button>
260
+ }
261
+ }
262
+
263
+ <!-- Branch navigation -->
264
+ @if (showBranchNavigation()) {
265
+ @if (branchNavigationTemplate || branchNavigationComponent()) {
266
+ <copilot-slot
267
+ [slot]="
268
+ branchNavigationTemplate || branchNavigationComponent()
269
+ "
270
+ [context]="branchNavigationContext()"
271
+ [defaultComponent]="CopilotChatUserMessageBranchNavigation"
272
+ >
273
+ </copilot-slot>
274
+ } @else {
275
+ <copilot-chat-user-message-branch-navigation
276
+ [currentBranch]="branchIndexValue()"
277
+ [numberOfBranches]="numberOfBranchesValue()"
278
+ [message]="message()!"
279
+ [inputClass]="branchNavigationClass()"
280
+ (switchToBranch)="handleSwitchToBranch($event)"
281
+ >
282
+ </copilot-chat-user-message-branch-navigation>
283
+ }
284
+ }
285
+ </div>
286
+ </div>
287
+ }
288
+ </div>
289
+ `, styles: [":host{display:block;width:100%}\n"] }]
290
+ }], ctorParameters: () => [], propDecorators: { messageRendererTemplate: [{
291
+ type: ContentChild,
292
+ args: ["messageRenderer", { read: TemplateRef }]
293
+ }], toolbarTemplate: [{
294
+ type: ContentChild,
295
+ args: ["toolbar", { read: TemplateRef }]
296
+ }], copyButtonTemplate: [{
297
+ type: ContentChild,
298
+ args: ["copyButton", { read: TemplateRef }]
299
+ }], editButtonTemplate: [{
300
+ type: ContentChild,
301
+ args: ["editButton", { read: TemplateRef }]
302
+ }], branchNavigationTemplate: [{
303
+ type: ContentChild,
304
+ args: ["branchNavigation", { read: TemplateRef }]
305
+ }] } });
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUVSLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVd2RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxHQUNqQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQTZIakMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyw0Q0FBNEM7SUFFNUMsdUJBQXVCLENBQXVDO0lBRTlELGVBQWUsQ0FBMEM7SUFFekQsa0JBQWtCLENBQWtDO0lBRXBELGtCQUFrQixDQUFrQztJQUVwRCx3QkFBd0IsQ0FBd0M7SUFFaEUsd0NBQXdDO0lBQ3hDLG9CQUFvQixHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUNuRCxZQUFZLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQzNDLGVBQWUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDOUMsZUFBZSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUM5QyxxQkFBcUIsR0FB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QUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHakQsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR2pELHdCQUF3QjtzQkFEdkIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIGNvbXB1dGVkLFxuICBUeXBlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb3BpbG90U2xvdCB9IGZyb20gXCIuLi8uLi9zbG90cy9jb3BpbG90LXNsb3RcIjtcbmltcG9ydCB7XG4gIHR5cGUgVXNlck1lc3NhZ2UsXG4gIHR5cGUgQ29waWxvdENoYXRVc2VyTWVzc2FnZU9uRWRpdE1lc3NhZ2VQcm9wcyxcbiAgdHlwZSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzLFxuICB0eXBlIE1lc3NhZ2VSZW5kZXJlckNvbnRleHQsXG4gIHR5cGUgQ29weUJ1dHRvbkNvbnRleHQsXG4gIHR5cGUgRWRpdEJ1dHRvbkNvbnRleHQsXG4gIHR5cGUgQnJhbmNoTmF2aWdhdGlvbkNvbnRleHQsXG4gIHR5cGUgVXNlck1lc3NhZ2VUb29sYmFyQ29udGV4dCxcbn0gZnJvbSBcIi4vY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS50eXBlc1wiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRVc2VyTWVzc2FnZVJlbmRlcmVyIH0gZnJvbSBcIi4vY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlclwiO1xuaW1wb3J0IHtcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZUNvcHlCdXR0b24sXG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VFZGl0QnV0dG9uLFxufSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWJ1dHRvbnNcIjtcbmltcG9ydCB7IENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyIH0gZnJvbSBcIi4vY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS10b29sYmFyXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvbiB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlXCIsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29waWxvdFNsb3QsXG4gICAgQ29waWxvdENoYXRVc2VyTWVzc2FnZVJlbmRlcmVyLFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VDb3B5QnV0dG9uLFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VFZGl0QnV0dG9uLFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyLFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VCcmFuY2hOYXZpZ2F0aW9uLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzKClcIiBbYXR0ci5kYXRhLW1lc3NhZ2UtaWRdPVwibWVzc2FnZSgpPy5pZFwiPlxuICAgICAgPCEtLSBNZXNzYWdlIFJlbmRlcmVyIC0tPlxuICAgICAgQGlmIChtZXNzYWdlUmVuZGVyZXJUZW1wbGF0ZSB8fCBtZXNzYWdlUmVuZGVyZXJDb21wb25lbnQoKSkge1xuICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgW3Nsb3RdPVwibWVzc2FnZVJlbmRlcmVyVGVtcGxhdGUgfHwgbWVzc2FnZVJlbmRlcmVyQ29tcG9uZW50KClcIlxuICAgICAgICAgIFtjb250ZXh0XT1cIm1lc3NhZ2VSZW5kZXJlckNvbnRleHQoKVwiXG4gICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiQ29waWxvdENoYXRVc2VyTWVzc2FnZVJlbmRlcmVyXCJcbiAgICAgICAgPlxuICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlclxuICAgICAgICAgIFtjb250ZW50XT1cIm1lc3NhZ2UoKT8uY29udGVudCB8fCAnJ1wiXG4gICAgICAgICAgW2lucHV0Q2xhc3NdPVwibWVzc2FnZVJlbmRlcmVyQ2xhc3MoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLXJlbmRlcmVyPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgICBAaWYgKHRvb2xiYXJUZW1wbGF0ZSB8fCB0b29sYmFyQ29tcG9uZW50KCkpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cInRvb2xiYXJUZW1wbGF0ZSB8fCB0b29sYmFyQ29tcG9uZW50KClcIlxuICAgICAgICAgIFtjb250ZXh0XT1cInRvb2xiYXJDb250ZXh0KClcIlxuICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cIkNvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyXCJcbiAgICAgICAgPlxuICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyIFtpbnB1dENsYXNzXT1cInRvb2xiYXJDbGFzcygpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgdG9vbGJhciBpdGVtcyAtLT5cbiAgICAgICAgICAgIEBpZiAoYWRkaXRpb25hbFRvb2xiYXJJdGVtcygpKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRpdGlvbmFsVG9vbGJhckl0ZW1zKCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBDb3B5IGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoY29weUJ1dHRvblRlbXBsYXRlIHx8IGNvcHlCdXR0b25Db21wb25lbnQoKSkge1xuICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgW3Nsb3RdPVwiY29weUJ1dHRvblRlbXBsYXRlIHx8IGNvcHlCdXR0b25Db21wb25lbnQoKVwiXG4gICAgICAgICAgICAgICAgW2NvbnRleHRdPVwieyBjb250ZW50OiBtZXNzYWdlKCk/LmNvbnRlbnQgfHwgJycgfVwiXG4gICAgICAgICAgICAgICAgW291dHB1dHNdPVwiY29weUJ1dHRvbk91dHB1dHNcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cIkNvcGlsb3RDaGF0VXNlck1lc3NhZ2VDb3B5QnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8Y29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIm1lc3NhZ2UoKT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgW2lucHV0Q2xhc3NdPVwiY29weUJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZUNvcHkoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEVkaXQgYnV0dG9uIC0tPlxuICAgICAgICAgICAgQGlmICh0cnVlKSB7XG4gICAgICAgICAgICAgIEBpZiAoZWRpdEJ1dHRvblRlbXBsYXRlIHx8IGVkaXRCdXR0b25Db21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICAgICAgICAgIFtzbG90XT1cImVkaXRCdXR0b25UZW1wbGF0ZSB8fCBlZGl0QnV0dG9uQ29tcG9uZW50KClcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie31cIlxuICAgICAgICAgICAgICAgICAgW291dHB1dHNdPVwiZWRpdEJ1dHRvbk91dHB1dHNcIlxuICAgICAgICAgICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiQ29waWxvdENoYXRVc2VyTWVzc2FnZUVkaXRCdXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtZWRpdC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtpbnB1dENsYXNzXT1cImVkaXRCdXR0b25DbGFzcygpXCJcbiAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZUVkaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1lZGl0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEJyYW5jaCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICAgICAgQGlmIChzaG93QnJhbmNoTmF2aWdhdGlvbigpKSB7XG4gICAgICAgICAgICAgIEBpZiAoYnJhbmNoTmF2aWdhdGlvblRlbXBsYXRlIHx8IGJyYW5jaE5hdmlnYXRpb25Db21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICAgICAgICAgIFtzbG90XT1cIlxuICAgICAgICAgICAgICAgICAgICBicmFuY2hOYXZpZ2F0aW9uVGVtcGxhdGUgfHwgYnJhbmNoTmF2aWdhdGlvbkNvbXBvbmVudCgpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwiYnJhbmNoTmF2aWdhdGlvbkNvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1icmFuY2gtbmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgW2N1cnJlbnRCcmFuY2hdPVwiYnJhbmNoSW5kZXhWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgIFtudW1iZXJPZkJyYW5jaGVzXT1cIm51bWJlck9mQnJhbmNoZXNWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2UoKSFcIlxuICAgICAgICAgICAgICAgICAgW2lucHV0Q2xhc3NdPVwiYnJhbmNoTmF2aWdhdGlvbkNsYXNzKClcIlxuICAgICAgICAgICAgICAgICAgKHN3aXRjaFRvQnJhbmNoKT1cImhhbmRsZVN3aXRjaFRvQnJhbmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0VXNlck1lc3NhZ2Uge1xuICAvLyBDYXB0dXJlIHRlbXBsYXRlcyBmcm9tIGNvbnRlbnQgcHJvamVjdGlvblxuICBAQ29udGVudENoaWxkKFwibWVzc2FnZVJlbmRlcmVyXCIsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgbWVzc2FnZVJlbmRlcmVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxNZXNzYWdlUmVuZGVyZXJDb250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZChcInRvb2xiYXJcIiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICB0b29sYmFyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxVc2VyTWVzc2FnZVRvb2xiYXJDb250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZChcImNvcHlCdXR0b25cIiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjb3B5QnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxDb3B5QnV0dG9uQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoXCJlZGl0QnV0dG9uXCIsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgZWRpdEJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8RWRpdEJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKFwiYnJhbmNoTmF2aWdhdGlvblwiLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGJyYW5jaE5hdmlnYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPEJyYW5jaE5hdmlnYXRpb25Db250ZXh0PjtcblxuICAvLyBQcm9wcyBmb3IgdHdlYWtpbmcgZGVmYXVsdCBjb21wb25lbnRzXG4gIG1lc3NhZ2VSZW5kZXJlckNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICB0b29sYmFyQ2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGNvcHlCdXR0b25DbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgZWRpdEJ1dHRvbkNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBicmFuY2hOYXZpZ2F0aW9uQ2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gQ29tcG9uZW50IGlucHV0cyBmb3Igb3ZlcnJpZGVzXG4gIG1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudCA9IGlucHV0PFR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgdG9vbGJhckNvbXBvbmVudCA9IGlucHV0PFR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgY29weUJ1dHRvbkNvbXBvbmVudCA9IGlucHV0PFR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgZWRpdEJ1dHRvbkNvbXBvbmVudCA9IGlucHV0PFR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgYnJhbmNoTmF2aWdhdGlvbkNvbXBvbmVudCA9IGlucHV0PFR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBSZWd1bGFyIGlucHV0c1xuICBtZXNzYWdlID0gaW5wdXQ8VXNlck1lc3NhZ2U+KCk7XG4gIGJyYW5jaEluZGV4ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBudW1iZXJPZkJyYW5jaGVzID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBhZGRpdGlvbmFsVG9vbGJhckl0ZW1zID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgaW5wdXRDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBPdXRwdXQgZXZlbnRzXG4gIGVkaXRNZXNzYWdlID0gb3V0cHV0PENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPbkVkaXRNZXNzYWdlUHJvcHM+KCk7XG4gIHN3aXRjaFRvQnJhbmNoID0gb3V0cHV0PENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPblN3aXRjaFRvQnJhbmNoUHJvcHM+KCk7XG5cbiAgLy8gRGVyaXZlZCB2YWx1ZXNcbiAgYnJhbmNoSW5kZXhWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnJhbmNoSW5kZXgoKSA/PyAwKTtcbiAgbnVtYmVyT2ZCcmFuY2hlc1ZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5udW1iZXJPZkJyYW5jaGVzKCkgPz8gMSk7XG5cbiAgLy8gRGVmYXVsdCBjb21wb25lbnRzXG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VSZW5kZXJlciA9IENvcGlsb3RDaGF0VXNlck1lc3NhZ2VSZW5kZXJlcjtcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXIgPSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhcjtcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZUNvcHlCdXR0b24gPSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQ29weUJ1dHRvbjtcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZUVkaXRCdXR0b24gPSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlRWRpdEJ1dHRvbjtcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZUJyYW5jaE5hdmlnYXRpb24gPVxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VCcmFuY2hOYXZpZ2F0aW9uO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBzaG93QnJhbmNoTmF2aWdhdGlvbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLm51bWJlck9mQnJhbmNoZXMoKSA/PyAxKSA+IDEpO1xuXG4gIGNvbXB1dGVkQ2xhc3MgPSBjb21wdXRlZCgoKSA9PlxuICAgIGNuKFwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQgZ3JvdXAgcHQtMTBcIiwgdGhpcy5pbnB1dENsYXNzKCkpXG4gICk7XG5cbiAgLy8gQ29udGV4dCBmb3Igc2xvdHMgKHJlYWN0aXZlIHZpYSBzaWduYWxzKVxuICBtZXNzYWdlUmVuZGVyZXJDb250ZXh0ID0gY29tcHV0ZWQ8TWVzc2FnZVJlbmRlcmVyQ29udGV4dD4oKCkgPT4gKHtcbiAgICBjb250ZW50OiB0aGlzLm1lc3NhZ2UoKT8uY29udGVudCB8fCBcIlwiLFxuICB9KSk7XG5cbiAgLy8gT3V0cHV0IG1hcHMgZm9yIHNsb3RzXG4gIGNvcHlCdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZUNvcHkoKSB9O1xuICBlZGl0QnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVFZGl0KCkgfTtcblxuICBicmFuY2hOYXZpZ2F0aW9uQ29udGV4dCA9IGNvbXB1dGVkPEJyYW5jaE5hdmlnYXRpb25Db250ZXh0PigoKSA9PiAoe1xuICAgIGN1cnJlbnRCcmFuY2g6IHRoaXMuYnJhbmNoSW5kZXhWYWx1ZSgpLFxuICAgIG51bWJlck9mQnJhbmNoZXM6IHRoaXMubnVtYmVyT2ZCcmFuY2hlc1ZhbHVlKCksXG4gICAgb25Td2l0Y2hUb0JyYW5jaDogKHByb3BzKSA9PiB0aGlzLmhhbmRsZVN3aXRjaFRvQnJhbmNoKHByb3BzKSxcbiAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UoKSEsXG4gIH0pKTtcblxuICB0b29sYmFyQ29udGV4dCA9IGNvbXB1dGVkPFVzZXJNZXNzYWdlVG9vbGJhckNvbnRleHQ+KCgpID0+ICh7XG4gICAgY2hpbGRyZW46IG51bGwsIC8vIFdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoZSB0b29sYmFyIGNvbnRlbnRcbiAgfSkpO1xuXG4gIGhhbmRsZUNvcHkoKTogdm9pZCB7XG4gICAgLy8gQ29weSBpcyBoYW5kbGVkIGJ5IHRoZSBidXR0b24gY29tcG9uZW50IGl0c2VsZlxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgYW55IGFkZGl0aW9uYWwgbG9naWMgaWYgbmVlZGVkXG4gIH1cblxuICBoYW5kbGVFZGl0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSgpISB9KTtcbiAgfVxuXG4gIGhhbmRsZVN3aXRjaFRvQnJhbmNoKFxuICAgIHByb3BzOiBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3dpdGNoVG9CcmFuY2guZW1pdChwcm9wcyk7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTWVzc2FnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHJvbGU6IFwidXNlclwiO1xuICB0aW1lc3RhbXA/OiBEYXRlO1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPbkVkaXRNZXNzYWdlUHJvcHMge1xuICBtZXNzYWdlOiBVc2VyTWVzc2FnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzIHtcbiAgbWVzc2FnZTogVXNlck1lc3NhZ2U7XG4gIGJyYW5jaEluZGV4OiBudW1iZXI7XG4gIG51bWJlck9mQnJhbmNoZXM6IG51bWJlcjtcbn1cblxuLy8gQ29udGV4dCBpbnRlcmZhY2VzIGZvciBzbG90c1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlUmVuZGVyZXJDb250ZXh0IHtcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcHlCdXR0b25Db250ZXh0IHtcbiAgY29udGVudD86IHN0cmluZztcbiAgY29waWVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFZGl0QnV0dG9uQ29udGV4dCB7XG4gIC8vIEVtcHR5IGNvbnRleHQgLSBjbGljayBoYW5kbGVkIHZpYSBvdXRwdXRzIG1hcFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaE5hdmlnYXRpb25Db250ZXh0IHtcbiAgY3VycmVudEJyYW5jaDogbnVtYmVyO1xuICBudW1iZXJPZkJyYW5jaGVzOiBudW1iZXI7XG4gIG9uU3dpdGNoVG9CcmFuY2g/OiAoXG4gICAgcHJvcHM6IENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPblN3aXRjaFRvQnJhbmNoUHJvcHNcbiAgKSA9PiB2b2lkO1xuICBtZXNzYWdlOiBVc2VyTWVzc2FnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyTWVzc2FnZVRvb2xiYXJDb250ZXh0IHtcbiAgY2hpbGRyZW4/OiBhbnk7XG59XG4iXX0=
@@ -0,0 +1,48 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../..//utils";
4
+ import { injectChatLabels } from "../../chat-config";
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Disclaimer component for CopilotChatView
8
+ * Shows configurable disclaimer text below the input
9
+ * Integrates with CopilotChatConfigurationService for labels
10
+ */
11
+ export class CopilotChatViewDisclaimer {
12
+ inputClass = input();
13
+ text = input();
14
+ labels = injectChatLabels();
15
+ // Get disclaimer text from input or configuration
16
+ get disclaimerText() {
17
+ if (this.text()) {
18
+ return this.text();
19
+ }
20
+ return this.labels.chatDisclaimerText;
21
+ }
22
+ // Computed class matching React exactly
23
+ get computedClass() {
24
+ return cn("text-center text-xs text-muted-foreground py-3 px-4 max-w-3xl mx-auto", this.inputClass());
25
+ }
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewDisclaimer, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatViewDisclaimer, isStandalone: true, selector: "copilot-chat-view-disclaimer", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
28
+ <div [class]="computedClass">
29
+ {{ disclaimerText }}
30
+ </div>
31
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewDisclaimer, decorators: [{
34
+ type: Component,
35
+ args: [{
36
+ selector: "copilot-chat-view-disclaimer",
37
+ standalone: true,
38
+ imports: [CommonModule],
39
+ changeDetection: ChangeDetectionStrategy.OnPush,
40
+ encapsulation: ViewEncapsulation.None,
41
+ template: `
42
+ <div [class]="computedClass">
43
+ {{ disclaimerText }}
44
+ </div>
45
+ `,
46
+ }]
47
+ }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctZGlzY2xhaW1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFckQ7Ozs7R0FJRztBQWFILE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRTFCLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXJDLGtEQUFrRDtJQUNsRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQVksQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3hDLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLENBQ1AsdUVBQXVFLEVBQ3ZFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDbEIsQ0FBQztJQUNKLENBQUM7d0dBckJVLHlCQUF5Qjs0RkFBekIseUJBQXlCLGdXQU4xQjs7OztHQUlULDJEQVBTLFlBQVk7OzRGQVNYLHlCQUF5QjtrQkFackMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vLi4vL3V0aWxzXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5cbi8qKlxuICogRGlzY2xhaW1lciBjb21wb25lbnQgZm9yIENvcGlsb3RDaGF0Vmlld1xuICogU2hvd3MgY29uZmlndXJhYmxlIGRpc2NsYWltZXIgdGV4dCBiZWxvdyB0aGUgaW5wdXRcbiAqIEludGVncmF0ZXMgd2l0aCBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlIGZvciBsYWJlbHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXJcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj5cbiAgICAgIHt7IGRpc2NsYWltZXJUZXh0IH19XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Vmlld0Rpc2NsYWltZXIge1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICB0ZXh0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHJlYWRvbmx5IGxhYmVscyA9IGluamVjdENoYXRMYWJlbHMoKTtcblxuICAvLyBHZXQgZGlzY2xhaW1lciB0ZXh0IGZyb20gaW5wdXQgb3IgY29uZmlndXJhdGlvblxuICBnZXQgZGlzY2xhaW1lclRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFiZWxzLmNoYXREaXNjbGFpbWVyVGV4dDtcbiAgfVxuXG4gIC8vIENvbXB1dGVkIGNsYXNzIG1hdGNoaW5nIFJlYWN0IGV4YWN0bHlcbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInRleHQtY2VudGVyIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB5LTMgcHgtNCBtYXgtdy0zeGwgbXgtYXV0b1wiLFxuICAgICAgdGhpcy5pbnB1dENsYXNzKClcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../../utils";
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Feather component for CopilotChatView
7
+ * Creates a gradient overlay effect between messages and input
8
+ * Matches React implementation exactly with same Tailwind classes
9
+ */
10
+ export class CopilotChatViewFeather {
11
+ inputClass = input();
12
+ style = input();
13
+ // Computed class matching React exactly
14
+ get computedClass() {
15
+ return cn(
16
+ // Positioning
17
+ "absolute bottom-0 left-0 right-4 h-24 pointer-events-none z-10",
18
+ // Gradient
19
+ "bg-gradient-to-t",
20
+ // Light mode colors
21
+ "from-white via-white to-transparent",
22
+ // Dark mode colors
23
+ "dark:from-[rgb(33,33,33)] dark:via-[rgb(33,33,33)]",
24
+ // Custom classes
25
+ this.inputClass());
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewFeather, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatViewFeather, isStandalone: true, selector: "copilot-chat-view-feather", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: ` <div [class]="computedClass" [style]="style()"></div> `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewFeather, decorators: [{
31
+ type: Component,
32
+ args: [{
33
+ selector: "copilot-chat-view-feather",
34
+ standalone: true,
35
+ imports: [CommonModule],
36
+ changeDetection: ChangeDetectionStrategy.OnPush,
37
+ encapsulation: ViewEncapsulation.None,
38
+ template: ` <div [class]="computedClass" [style]="style()"></div> `,
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctZmVhdGhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LWZlYXRoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFakM7Ozs7R0FJRztBQVNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxLQUFLLEdBQUcsS0FBSyxFQUFzQyxDQUFDO0lBRXBELHdDQUF3QztJQUN4QyxJQUFJLGFBQWE7UUFDZixPQUFPLEVBQUU7UUFDUCxjQUFjO1FBQ2QsZ0VBQWdFO1FBQ2hFLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLHFDQUFxQztRQUNyQyxtQkFBbUI7UUFDbkIsb0RBQW9EO1FBQ3BELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQUM7SUFDSixDQUFDO3dHQWxCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnV0FGdkIseURBQXlELDJEQUh6RCxZQUFZOzs0RkFLWCxzQkFBc0I7a0JBUmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUseURBQXlEO2lCQUNwRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogRmVhdGhlciBjb21wb25lbnQgZm9yIENvcGlsb3RDaGF0Vmlld1xuICogQ3JlYXRlcyBhIGdyYWRpZW50IG92ZXJsYXkgZWZmZWN0IGJldHdlZW4gbWVzc2FnZXMgYW5kIGlucHV0XG4gKiBNYXRjaGVzIFJlYWN0IGltcGxlbWVudGF0aW9uIGV4YWN0bHkgd2l0aCBzYW1lIFRhaWx3aW5kIGNsYXNzZXNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC12aWV3LWZlYXRoZXJcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYCA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzXCIgW3N0eWxlXT1cInN0eWxlKClcIj48L2Rpdj4gYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRWaWV3RmVhdGhlciB7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHN0eWxlID0gaW5wdXQ8eyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBDb21wdXRlZCBjbGFzcyBtYXRjaGluZyBSZWFjdCBleGFjdGx5XG4gIGdldCBjb21wdXRlZENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gUG9zaXRpb25pbmdcbiAgICAgIFwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTQgaC0yNCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTBcIixcbiAgICAgIC8vIEdyYWRpZW50XG4gICAgICBcImJnLWdyYWRpZW50LXRvLXRcIixcbiAgICAgIC8vIExpZ2h0IG1vZGUgY29sb3JzXG4gICAgICBcImZyb20td2hpdGUgdmlhLXdoaXRlIHRvLXRyYW5zcGFyZW50XCIsXG4gICAgICAvLyBEYXJrIG1vZGUgY29sb3JzXG4gICAgICBcImRhcms6ZnJvbS1bcmdiKDMzLDMzLDMzKV0gZGFyazp2aWEtW3JnYigzMywzMywzMyldXCIsXG4gICAgICAvLyBDdXN0b20gY2xhc3Nlc1xuICAgICAgdGhpcy5pbnB1dENsYXNzKClcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { Injectable, signal } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class CopilotChatViewHandlers {
4
+ // Assistant message handler availability
5
+ hasAssistantThumbsUpHandler = signal(false);
6
+ hasAssistantThumbsDownHandler = signal(false);
7
+ hasAssistantReadAloudHandler = signal(false);
8
+ hasAssistantRegenerateHandler = signal(false);
9
+ // User message handler availability
10
+ hasUserCopyHandler = signal(false);
11
+ hasUserEditHandler = signal(false);
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewHandlers, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewHandlers, providedIn: "root" });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewHandlers, decorators: [{
16
+ type: Injectable,
17
+ args: [{ providedIn: "root" }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdmlldy1oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHbkQsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyx5Q0FBeUM7SUFDekMsMkJBQTJCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5Qyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLG9DQUFvQztJQUNwQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dHQVR4Qix1QkFBdUI7NEdBQXZCLHVCQUF1QixjQURWLE1BQU07OzRGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Vmlld0hhbmRsZXJzIHtcbiAgLy8gQXNzaXN0YW50IG1lc3NhZ2UgaGFuZGxlciBhdmFpbGFiaWxpdHlcbiAgaGFzQXNzaXN0YW50VGh1bWJzVXBIYW5kbGVyID0gc2lnbmFsKGZhbHNlKTtcbiAgaGFzQXNzaXN0YW50VGh1bWJzRG93bkhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuICBoYXNBc3Npc3RhbnRSZWFkQWxvdWRIYW5kbGVyID0gc2lnbmFsKGZhbHNlKTtcbiAgaGFzQXNzaXN0YW50UmVnZW5lcmF0ZUhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIFVzZXIgbWVzc2FnZSBoYW5kbGVyIGF2YWlsYWJpbGl0eVxuICBoYXNVc2VyQ29weUhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuICBoYXNVc2VyRWRpdEhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xufVxuIl19
@@ -0,0 +1,96 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, forwardRef, ElementRef, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CopilotSlot } from "../../slots/copilot-slot";
4
+ import { CopilotChatInput } from "./copilot-chat-input";
5
+ import { CopilotChatViewDisclaimer } from "./copilot-chat-view-disclaimer";
6
+ import { cn } from "../../utils";
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * InputContainer component for CopilotChatView
10
+ * Container for input and disclaimer components
11
+ * Uses ForwardRef for DOM access
12
+ */
13
+ export class CopilotChatViewInputContainer extends ElementRef {
14
+ inputContainerClass = input();
15
+ // Input slot configuration
16
+ input = input();
17
+ inputClass = input();
18
+ // Disclaimer slot configuration
19
+ disclaimer = input();
20
+ disclaimerText = input();
21
+ disclaimerClass = input();
22
+ // Default components
23
+ defaultInputComponent = CopilotChatInput;
24
+ defaultDisclaimerComponent = CopilotChatViewDisclaimer;
25
+ constructor(elementRef) {
26
+ super(elementRef.nativeElement);
27
+ }
28
+ get computedClass() {
29
+ return cn("absolute bottom-0 left-0 right-0 z-20", this.inputContainerClass());
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewInputContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatViewInputContainer, isStandalone: true, selector: "copilot-chat-view-input-container", inputs: { inputContainerClass: { classPropertyName: "inputContainerClass", publicName: "inputContainerClass", isSignal: true, isRequired: false, transformFunction: null }, input: { classPropertyName: "input", publicName: "input", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, disclaimer: { classPropertyName: "disclaimer", publicName: "disclaimer", isSignal: true, isRequired: false, transformFunction: null }, disclaimerText: { classPropertyName: "disclaimerText", publicName: "disclaimerText", isSignal: true, isRequired: false, transformFunction: null }, disclaimerClass: { classPropertyName: "disclaimerClass", publicName: "disclaimerClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
33
+ {
34
+ provide: ElementRef,
35
+ useExisting: forwardRef(() => CopilotChatViewInputContainer),
36
+ },
37
+ ], usesInheritance: true, ngImport: i0, template: `
38
+ <div [class]="computedClass">
39
+ <!-- Input component -->
40
+ <div class="max-w-3xl mx-auto py-0 px-4 sm:px-0">
41
+ <copilot-slot
42
+ [slot]="input()"
43
+ [context]="{ inputClass: inputClass() }"
44
+ [defaultComponent]="defaultInputComponent"
45
+ >
46
+ </copilot-slot>
47
+ </div>
48
+
49
+ <!-- Disclaimer - always rendered like in React -->
50
+ <copilot-slot
51
+ [slot]="disclaimer()"
52
+ [context]="{ text: disclaimerText(), inputClass: disclaimerClass() }"
53
+ [defaultComponent]="defaultDisclaimerComponent"
54
+ >
55
+ </copilot-slot>
56
+ </div>
57
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CopilotSlot, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewInputContainer, decorators: [{
60
+ type: Component,
61
+ args: [{
62
+ standalone: true,
63
+ selector: "copilot-chat-view-input-container",
64
+ imports: [CommonModule, CopilotSlot],
65
+ changeDetection: ChangeDetectionStrategy.OnPush,
66
+ encapsulation: ViewEncapsulation.None,
67
+ providers: [
68
+ {
69
+ provide: ElementRef,
70
+ useExisting: forwardRef(() => CopilotChatViewInputContainer),
71
+ },
72
+ ],
73
+ template: `
74
+ <div [class]="computedClass">
75
+ <!-- Input component -->
76
+ <div class="max-w-3xl mx-auto py-0 px-4 sm:px-0">
77
+ <copilot-slot
78
+ [slot]="input()"
79
+ [context]="{ inputClass: inputClass() }"
80
+ [defaultComponent]="defaultInputComponent"
81
+ >
82
+ </copilot-slot>
83
+ </div>
84
+
85
+ <!-- Disclaimer - always rendered like in React -->
86
+ <copilot-slot
87
+ [slot]="disclaimer()"
88
+ [context]="{ text: disclaimerText(), inputClass: disclaimerClass() }"
89
+ [defaultComponent]="defaultDisclaimerComponent"
90
+ >
91
+ </copilot-slot>
92
+ </div>
93
+ `,
94
+ }]
95
+ }], ctorParameters: () => [{ type: i0.ElementRef }] });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctaW5wdXQtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXctaW5wdXQtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRWpDOzs7O0dBSUc7QUFtQ0gsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFVBQVU7SUFDM0QsbUJBQW1CLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRWxELDJCQUEyQjtJQUMzQixLQUFLLEdBQUcsS0FBSyxFQUFtQixDQUFDO0lBQ2pDLFVBQVUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFFekMsZ0NBQWdDO0lBQ2hDLFVBQVUsR0FBRyxLQUFLLEVBQW1CLENBQUM7SUFDdEMsY0FBYyxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUM3QyxlQUFlLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRTlDLHFCQUFxQjtJQUNGLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0lBQ3pDLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0lBRTFFLFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLENBQ1AsdUNBQXVDLEVBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUMzQixDQUFDO0lBQ0osQ0FBQzt3R0F6QlUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsNjZCQTVCN0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQzthQUM3RDtTQUNGLGlEQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVCwyREE3QlMsWUFBWSwrQkFBRSxXQUFXOzs0RkErQnhCLDZCQUE2QjtrQkFsQ3pDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxVQUFVOzRCQUNuQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQzt5QkFDN0Q7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZixcbiAgRWxlbWVudFJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RTbG90IH0gZnJvbSBcIi4uLy4uL3Nsb3RzL2NvcGlsb3Qtc2xvdFwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRJbnB1dCB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC1pbnB1dFwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3RGlzY2xhaW1lciB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXJcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogSW5wdXRDb250YWluZXIgY29tcG9uZW50IGZvciBDb3BpbG90Q2hhdFZpZXdcbiAqIENvbnRhaW5lciBmb3IgaW5wdXQgYW5kIGRpc2NsYWltZXIgY29tcG9uZW50c1xuICogVXNlcyBGb3J3YXJkUmVmIGZvciBET00gYWNjZXNzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdmlldy1pbnB1dC1jb250YWluZXJcIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ29waWxvdFNsb3RdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRWxlbWVudFJlZixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvcGlsb3RDaGF0Vmlld0lucHV0Q29udGFpbmVyKSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj5cbiAgICAgIDwhLS0gSW5wdXQgY29tcG9uZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1heC13LTN4bCBteC1hdXRvIHB5LTAgcHgtNCBzbTpweC0wXCI+XG4gICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICBbc2xvdF09XCJpbnB1dCgpXCJcbiAgICAgICAgICBbY29udGV4dF09XCJ7IGlucHV0Q2xhc3M6IGlucHV0Q2xhc3MoKSB9XCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0SW5wdXRDb21wb25lbnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGlzY2xhaW1lciAtIGFsd2F5cyByZW5kZXJlZCBsaWtlIGluIFJlYWN0IC0tPlxuICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICBbc2xvdF09XCJkaXNjbGFpbWVyKClcIlxuICAgICAgICBbY29udGV4dF09XCJ7IHRleHQ6IGRpc2NsYWltZXJUZXh0KCksIGlucHV0Q2xhc3M6IGRpc2NsYWltZXJDbGFzcygpIH1cIlxuICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0RGlzY2xhaW1lckNvbXBvbmVudFwiXG4gICAgICA+XG4gICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRWaWV3SW5wdXRDb250YWluZXIgZXh0ZW5kcyBFbGVtZW50UmVmIHtcbiAgaW5wdXRDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBJbnB1dCBzbG90IGNvbmZpZ3VyYXRpb25cbiAgaW5wdXQgPSBpbnB1dDxhbnkgfCB1bmRlZmluZWQ+KCk7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gRGlzY2xhaW1lciBzbG90IGNvbmZpZ3VyYXRpb25cbiAgZGlzY2xhaW1lciA9IGlucHV0PGFueSB8IHVuZGVmaW5lZD4oKTtcbiAgZGlzY2xhaW1lclRleHQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGRpc2NsYWltZXJDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBEZWZhdWx0IGNvbXBvbmVudHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRJbnB1dENvbXBvbmVudCA9IENvcGlsb3RDaGF0SW5wdXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0RGlzY2xhaW1lckNvbXBvbmVudCA9IENvcGlsb3RDaGF0Vmlld0Rpc2NsYWltZXI7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBjbihcbiAgICAgIFwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgei0yMFwiLFxuICAgICAgdGhpcy5pbnB1dENvbnRhaW5lckNsYXNzKClcbiAgICApO1xuICB9XG59XG4iXX0=