@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
@@ -1,130 +0,0 @@
1
- import { Directive, Input, Inject, } from "@angular/core";
2
- import { CopilotKitService } from "../core/copilotkit.service";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../core/copilotkit.service";
5
- /**
6
- * Directive to manage agent context in CopilotKit.
7
- * Automatically adds context on init, updates on changes, and removes on destroy.
8
- *
9
- * @example
10
- * ```html
11
- * <!-- With separate inputs -->
12
- * <div copilotkitAgentContext
13
- * [description]="'User preferences'"
14
- * [value]="userSettings">
15
- * </div>
16
- *
17
- * <!-- With context object -->
18
- * <div [copilotkitAgentContext]="contextObject">
19
- * </div>
20
- *
21
- * <!-- With dynamic values -->
22
- * <div copilotkitAgentContext
23
- * description="Form state"
24
- * [value]="formData$ | async">
25
- * </div>
26
- * ```
27
- */
28
- export class CopilotKitAgentContextDirective {
29
- copilotkit;
30
- contextId;
31
- constructor(copilotkit) {
32
- this.copilotkit = copilotkit;
33
- }
34
- /**
35
- * Context object containing both description and value.
36
- * If provided, this takes precedence over individual inputs.
37
- */
38
- context;
39
- /**
40
- * Description of the context.
41
- * Used when context object is not provided.
42
- */
43
- description;
44
- /**
45
- * Value of the context.
46
- * Used when context object is not provided.
47
- */
48
- value;
49
- ngOnInit() {
50
- this.addContext();
51
- }
52
- ngOnChanges(changes) {
53
- // Check if any relevant input has changed
54
- const hasContextChange = "context" in changes;
55
- const hasDescriptionChange = "description" in changes;
56
- const hasValueChange = "value" in changes;
57
- if (hasContextChange || hasDescriptionChange || hasValueChange) {
58
- // Skip the first change as ngOnInit handles initial setup
59
- if (this.contextId) {
60
- this.updateContext();
61
- }
62
- }
63
- }
64
- ngOnDestroy() {
65
- this.removeContext();
66
- }
67
- /**
68
- * Adds the context to CopilotKit
69
- */
70
- addContext() {
71
- const contextToAdd = this.getContext();
72
- if (contextToAdd) {
73
- this.contextId = this.copilotkit.copilotkit.addContext(contextToAdd);
74
- }
75
- }
76
- /**
77
- * Updates the context by removing the old one and adding a new one
78
- */
79
- updateContext() {
80
- this.removeContext();
81
- this.addContext();
82
- }
83
- /**
84
- * Removes the current context from CopilotKit
85
- */
86
- removeContext() {
87
- if (this.contextId) {
88
- this.copilotkit.copilotkit.removeContext(this.contextId);
89
- this.contextId = undefined;
90
- }
91
- }
92
- /**
93
- * Gets the context object from inputs
94
- */
95
- getContext() {
96
- // If context object is provided, use it
97
- if (this.context) {
98
- return this.context;
99
- }
100
- // Otherwise, build from individual inputs
101
- // Note: null is a valid value, but undefined means not set
102
- if (this.description !== undefined && this.value !== undefined) {
103
- return {
104
- description: this.description,
105
- value: this.value,
106
- };
107
- }
108
- return null;
109
- }
110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentContextDirective, deps: [{ token: CopilotKitService }], target: i0.ɵɵFactoryTarget.Directive });
111
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitAgentContextDirective, isStandalone: true, selector: "[copilotkitAgentContext]", inputs: { context: ["copilotkitAgentContext", "context"], description: "description", value: "value" }, usesOnChanges: true, ngImport: i0 });
112
- }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentContextDirective, decorators: [{
114
- type: Directive,
115
- args: [{
116
- selector: "[copilotkitAgentContext]",
117
- standalone: true,
118
- }]
119
- }], ctorParameters: () => [{ type: i1.CopilotKitService, decorators: [{
120
- type: Inject,
121
- args: [CopilotKitService]
122
- }] }], propDecorators: { context: [{
123
- type: Input,
124
- args: ["copilotkitAgentContext"]
125
- }], description: [{
126
- type: Input
127
- }], value: [{
128
- type: Input
129
- }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1hZ2VudC1jb250ZXh0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL2NvcGlsb3RraXQtYWdlbnQtY29udGV4dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBS0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFHL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sK0JBQStCO0lBTUk7SUFIdEMsU0FBUyxDQUFVO0lBRTNCLFlBQzhDLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQ3hFLENBQUM7SUFFSjs7O09BR0c7SUFDOEIsT0FBTyxDQUFXO0lBRW5EOzs7T0FHRztJQUNNLFdBQVcsQ0FBVTtJQUU5Qjs7O09BR0c7SUFDTSxLQUFLLENBQU87SUFFckIsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDBDQUEwQztRQUMxQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDOUMsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLElBQUksT0FBTyxDQUFDO1FBQ3RELE1BQU0sY0FBYyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFFMUMsSUFBSSxnQkFBZ0IsSUFBSSxvQkFBb0IsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMvRCwwREFBMEQ7WUFDMUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVU7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXZDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVU7UUFDaEIsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QixDQUFDO1FBRUQsMENBQTBDO1FBQzFDLDJEQUEyRDtRQUMzRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FqR1UsK0JBQStCLGtCQU1oQyxpQkFBaUI7NEZBTmhCLCtCQUErQjs7NEZBQS9CLCtCQUErQjtrQkFKM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQU9JLE1BQU07MkJBQUMsaUJBQWlCO3lDQU9NLE9BQU87c0JBQXZDLEtBQUs7dUJBQUMsd0JBQXdCO2dCQU10QixXQUFXO3NCQUFuQixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYW5hZ2UgYWdlbnQgY29udGV4dCBpbiBDb3BpbG90S2l0LlxuICogQXV0b21hdGljYWxseSBhZGRzIGNvbnRleHQgb24gaW5pdCwgdXBkYXRlcyBvbiBjaGFuZ2VzLCBhbmQgcmVtb3ZlcyBvbiBkZXN0cm95LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIFdpdGggc2VwYXJhdGUgaW5wdXRzIC0tPlxuICogPGRpdiBjb3BpbG90a2l0QWdlbnRDb250ZXh0XG4gKiAgICAgIFtkZXNjcmlwdGlvbl09XCInVXNlciBwcmVmZXJlbmNlcydcIlxuICogICAgICBbdmFsdWVdPVwidXNlclNldHRpbmdzXCI+XG4gKiA8L2Rpdj5cbiAqXG4gKiA8IS0tIFdpdGggY29udGV4dCBvYmplY3QgLS0+XG4gKiA8ZGl2IFtjb3BpbG90a2l0QWdlbnRDb250ZXh0XT1cImNvbnRleHRPYmplY3RcIj5cbiAqIDwvZGl2PlxuICpcbiAqIDwhLS0gV2l0aCBkeW5hbWljIHZhbHVlcyAtLT5cbiAqIDxkaXYgY29waWxvdGtpdEFnZW50Q29udGV4dFxuICogICAgICBkZXNjcmlwdGlvbj1cIkZvcm0gc3RhdGVcIlxuICogICAgICBbdmFsdWVdPVwiZm9ybURhdGEkIHwgYXN5bmNcIj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbY29waWxvdGtpdEFnZW50Q29udGV4dF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdEFnZW50Q29udGV4dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSBjb250ZXh0SWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChDb3BpbG90S2l0U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBjb3BpbG90a2l0OiBDb3BpbG90S2l0U2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIENvbnRleHQgb2JqZWN0IGNvbnRhaW5pbmcgYm90aCBkZXNjcmlwdGlvbiBhbmQgdmFsdWUuXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBpbmRpdmlkdWFsIGlucHV0cy5cbiAgICovXG4gIEBJbnB1dChcImNvcGlsb3RraXRBZ2VudENvbnRleHRcIikgY29udGV4dD86IENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSBjb250ZXh0LlxuICAgKiBVc2VkIHdoZW4gY29udGV4dCBvYmplY3QgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBjb250ZXh0LlxuICAgKiBVc2VkIHdoZW4gY29udGV4dCBvYmplY3QgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWU/OiBhbnk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRDb250ZXh0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgYW55IHJlbGV2YW50IGlucHV0IGhhcyBjaGFuZ2VkXG4gICAgY29uc3QgaGFzQ29udGV4dENoYW5nZSA9IFwiY29udGV4dFwiIGluIGNoYW5nZXM7XG4gICAgY29uc3QgaGFzRGVzY3JpcHRpb25DaGFuZ2UgPSBcImRlc2NyaXB0aW9uXCIgaW4gY2hhbmdlcztcbiAgICBjb25zdCBoYXNWYWx1ZUNoYW5nZSA9IFwidmFsdWVcIiBpbiBjaGFuZ2VzO1xuXG4gICAgaWYgKGhhc0NvbnRleHRDaGFuZ2UgfHwgaGFzRGVzY3JpcHRpb25DaGFuZ2UgfHwgaGFzVmFsdWVDaGFuZ2UpIHtcbiAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGNoYW5nZSBhcyBuZ09uSW5pdCBoYW5kbGVzIGluaXRpYWwgc2V0dXBcbiAgICAgIGlmICh0aGlzLmNvbnRleHRJZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBjb250ZXh0IHRvIENvcGlsb3RLaXRcbiAgICovXG4gIHByaXZhdGUgYWRkQ29udGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZXh0VG9BZGQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGlmIChjb250ZXh0VG9BZGQpIHtcbiAgICAgIHRoaXMuY29udGV4dElkID0gdGhpcy5jb3BpbG90a2l0LmNvcGlsb3RraXQuYWRkQ29udGV4dChjb250ZXh0VG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb250ZXh0IGJ5IHJlbW92aW5nIHRoZSBvbGQgb25lIGFuZCBhZGRpbmcgYSBuZXcgb25lXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVDb250ZXh0KCk7XG4gICAgdGhpcy5hZGRDb250ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY3VycmVudCBjb250ZXh0IGZyb20gQ29waWxvdEtpdFxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVDb250ZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRleHRJZCkge1xuICAgICAgdGhpcy5jb3BpbG90a2l0LmNvcGlsb3RraXQucmVtb3ZlQ29udGV4dCh0aGlzLmNvbnRleHRJZCk7XG4gICAgICB0aGlzLmNvbnRleHRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29udGV4dCBvYmplY3QgZnJvbSBpbnB1dHNcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29udGV4dCgpOiBDb250ZXh0IHwgbnVsbCB7XG4gICAgLy8gSWYgY29udGV4dCBvYmplY3QgaXMgcHJvdmlkZWQsIHVzZSBpdFxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgLy8gTm90ZTogbnVsbCBpcyBhIHZhbGlkIHZhbHVlLCBidXQgdW5kZWZpbmVkIG1lYW5zIG5vdCBzZXRcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,221 +0,0 @@
1
- import { Directive, Input, Output, EventEmitter, signal, Inject, } from "@angular/core";
2
- import { toObservable } from "@angular/core/rxjs-interop";
3
- import { CopilotKitService } from "../core/copilotkit.service";
4
- import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
5
- import { CopilotKitCoreRuntimeConnectionStatus } from "@copilotkitnext/core";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../core/copilotkit.service";
8
- /**
9
- * Directive to watch and interact with CopilotKit agents.
10
- * Provides reactive outputs for agent state changes.
11
- *
12
- * @example
13
- * ```html
14
- * <!-- Basic usage with default agent -->
15
- * <div copilotkitAgent
16
- * (agentChange)="onAgentChange($event)"
17
- * (runningChange)="isProcessing = $event">
18
- * Content here
19
- * </div>
20
- *
21
- * <!-- With specific agent ID -->
22
- * <div copilotkitAgent
23
- * [agentId]="'my-agent-id'"
24
- * (agentChange)="currentAgent = $event"
25
- * (runningChange)="onRunningStateChange($event)"
26
- * (messagesChange)="onMessagesUpdate($event)"
27
- * (stateChange)="onStateUpdate($event)">
28
- * Content here
29
- * </div>
30
- *
31
- * <!-- Two-way binding for running state -->
32
- * <div copilotkitAgent
33
- * [(running)]="isAgentRunning">
34
- * <span *ngIf="isAgentRunning">Processing...</span>
35
- * </div>
36
- * ```
37
- */
38
- export class CopilotKitAgentDirective {
39
- copilotkit;
40
- agent;
41
- agentSubscription;
42
- coreUnsubscribe; // subscribe returns function directly
43
- _isRunning = false;
44
- runningSignal = signal(false);
45
- agentSignal = signal(undefined);
46
- constructor(copilotkit) {
47
- this.copilotkit = copilotkit;
48
- }
49
- /**
50
- * The ID of the agent to watch.
51
- * If not provided, uses the default agent ID.
52
- */
53
- agentId;
54
- /**
55
- * Alternative input using the directive selector.
56
- * Allows: [copilotkitAgent]="'agent-id'"
57
- */
58
- set directiveAgentId(value) {
59
- this.agentId = value || undefined;
60
- }
61
- /**
62
- * Emits when the agent instance changes.
63
- */
64
- agentChange = new EventEmitter();
65
- /**
66
- * Emits when the running state changes.
67
- */
68
- runningChange = new EventEmitter();
69
- /**
70
- * Observable of the running state.
71
- */
72
- get running$() {
73
- return toObservable(this.runningSignal);
74
- }
75
- /**
76
- * Observable of the agent instance.
77
- */
78
- get agent$() {
79
- return toObservable(this.agentSignal);
80
- }
81
- /**
82
- * Two-way binding for running state.
83
- */
84
- get running() {
85
- return this._isRunning;
86
- }
87
- set running(value) {
88
- // Input setter for two-way binding (though typically read-only from agent)
89
- this._isRunning = value;
90
- }
91
- /**
92
- * Emits when agent messages change.
93
- */
94
- messagesChange = new EventEmitter();
95
- /**
96
- * Emits when agent state changes.
97
- */
98
- stateChange = new EventEmitter();
99
- /**
100
- * Emits when a run is initialized.
101
- */
102
- runInitialized = new EventEmitter();
103
- /**
104
- * Emits when a run is finalized.
105
- */
106
- runFinalized = new EventEmitter();
107
- /**
108
- * Emits when a run fails.
109
- */
110
- runFailed = new EventEmitter();
111
- ngOnInit() {
112
- this.setupAgent();
113
- this.subscribeToCore();
114
- }
115
- ngOnChanges(changes) {
116
- if (changes["agentId"] && !changes["agentId"].firstChange) {
117
- // Agent ID changed, re-setup
118
- this.cleanupAgentSubscription();
119
- this.setupAgent();
120
- }
121
- }
122
- ngOnDestroy() {
123
- this.cleanupAgentSubscription();
124
- this.cleanupCoreSubscription();
125
- }
126
- setupAgent() {
127
- const effectiveAgentId = this.agentId ?? DEFAULT_AGENT_ID;
128
- this.agent = this.copilotkit.getAgent(effectiveAgentId);
129
- // Update signals
130
- this.agentSignal.set(this.agent);
131
- // Emit initial agent
132
- this.agentChange.emit(this.agent);
133
- // Subscribe to agent events
134
- this.subscribeToAgent();
135
- }
136
- subscribeToAgent() {
137
- this.cleanupAgentSubscription();
138
- if (this.agent) {
139
- this.agentSubscription = this.agent.subscribe({
140
- onMessagesChanged: (params) => {
141
- this.messagesChange.emit(params);
142
- },
143
- onStateChanged: (params) => {
144
- this.stateChange.emit(params);
145
- },
146
- onRunInitialized: (params) => {
147
- this._isRunning = true;
148
- this.runningSignal.set(true);
149
- this.runningChange.emit(true);
150
- this.runInitialized.emit(params);
151
- },
152
- onRunFinalized: (params) => {
153
- this._isRunning = false;
154
- this.runningSignal.set(false);
155
- this.runningChange.emit(false);
156
- this.runFinalized.emit(params);
157
- },
158
- onRunFailed: (params) => {
159
- this._isRunning = false;
160
- this.runningSignal.set(false);
161
- this.runningChange.emit(false);
162
- this.runFailed.emit(params);
163
- },
164
- });
165
- }
166
- }
167
- subscribeToCore() {
168
- // Subscribe to CopilotKit changes to detect agent updates
169
- this.coreUnsubscribe = this.copilotkit.copilotkit.subscribe({
170
- onRuntimeConnectionStatusChanged: ({ status }) => {
171
- if (status === CopilotKitCoreRuntimeConnectionStatus.Connected ||
172
- status === CopilotKitCoreRuntimeConnectionStatus.Disconnected) {
173
- // Re-check agent when runtime connection changes state
174
- this.setupAgent();
175
- }
176
- },
177
- });
178
- }
179
- cleanupAgentSubscription() {
180
- this.agentSubscription?.unsubscribe();
181
- this.agentSubscription = undefined;
182
- }
183
- cleanupCoreSubscription() {
184
- this.coreUnsubscribe?.();
185
- this.coreUnsubscribe = undefined;
186
- }
187
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentDirective, deps: [{ token: CopilotKitService }], target: i0.ɵɵFactoryTarget.Directive });
188
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitAgentDirective, isStandalone: true, selector: "[copilotkitAgent]", inputs: { agentId: "agentId", directiveAgentId: ["copilotkitAgent", "directiveAgentId"], running: "running" }, outputs: { agentChange: "agentChange", runningChange: "runningChange", messagesChange: "messagesChange", stateChange: "stateChange", runInitialized: "runInitialized", runFinalized: "runFinalized", runFailed: "runFailed" }, usesOnChanges: true, ngImport: i0 });
189
- }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentDirective, decorators: [{
191
- type: Directive,
192
- args: [{
193
- selector: "[copilotkitAgent]",
194
- standalone: true,
195
- }]
196
- }], ctorParameters: () => [{ type: i1.CopilotKitService, decorators: [{
197
- type: Inject,
198
- args: [CopilotKitService]
199
- }] }], propDecorators: { agentId: [{
200
- type: Input
201
- }], directiveAgentId: [{
202
- type: Input,
203
- args: ["copilotkitAgent"]
204
- }], agentChange: [{
205
- type: Output
206
- }], runningChange: [{
207
- type: Output
208
- }], running: [{
209
- type: Input
210
- }], messagesChange: [{
211
- type: Output
212
- }], stateChange: [{
213
- type: Output
214
- }], runInitialized: [{
215
- type: Output
216
- }], runFinalized: [{
217
- type: Output
218
- }], runFailed: [{
219
- type: Output
220
- }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1hZ2VudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9jb3BpbG90a2l0LWFnZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUtaLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBS0gsTUFBTSxPQUFPLHdCQUF3QjtJQVNXO0lBUnRDLEtBQUssQ0FBaUI7SUFDdEIsaUJBQWlCLENBQStCO0lBQ2hELGVBQWUsQ0FBYyxDQUFDLHNDQUFzQztJQUNwRSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDdkMsV0FBVyxHQUFHLE1BQU0sQ0FBNEIsU0FBUyxDQUFDLENBQUM7SUFFbkUsWUFDOEMsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFDeEUsQ0FBQztJQUVKOzs7T0FHRztJQUNNLE9BQU8sQ0FBVTtJQUUxQjs7O09BR0c7SUFDSCxJQUNJLGdCQUFnQixDQUFDLEtBQXlCO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7SUFF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LENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUNuQyxDQUFDO3dHQWhMVSx3QkFBd0Isa0JBU3pCLGlCQUFpQjs0RkFUaEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBVUksTUFBTTsyQkFBQyxpQkFBaUI7eUNBT2xCLE9BQU87c0JBQWYsS0FBSztnQkFPRixnQkFBZ0I7c0JBRG5CLEtBQUs7dUJBQUMsaUJBQWlCO2dCQVFkLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFvQkgsT0FBTztzQkFEVixLQUFLO2dCQVlJLGNBQWM7c0JBQXZCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxjQUFjO3NCQUF2QixNQUFNO2dCQUtHLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBzaWduYWwsXG4gIEluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb3BpbG90S2l0U2VydmljZSB9IGZyb20gXCIuLi9jb3JlL2NvcGlsb3RraXQuc2VydmljZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RBZ2VudCB9IGZyb20gXCJAYWctdWkvY2xpZW50XCI7XG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRDb3JlUnVudGltZUNvbm5lY3Rpb25TdGF0dXMgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L2NvcmVcIjtcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gd2F0Y2ggYW5kIGludGVyYWN0IHdpdGggQ29waWxvdEtpdCBhZ2VudHMuXG4gKiBQcm92aWRlcyByZWFjdGl2ZSBvdXRwdXRzIGZvciBhZ2VudCBzdGF0ZSBjaGFuZ2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIEJhc2ljIHVzYWdlIHdpdGggZGVmYXVsdCBhZ2VudCAtLT5cbiAqIDxkaXYgY29waWxvdGtpdEFnZW50XG4gKiAgICAgIChhZ2VudENoYW5nZSk9XCJvbkFnZW50Q2hhbmdlKCRldmVudClcIlxuICogICAgICAocnVubmluZ0NoYW5nZSk9XCJpc1Byb2Nlc3NpbmcgPSAkZXZlbnRcIj5cbiAqICAgQ29udGVudCBoZXJlXG4gKiA8L2Rpdj5cbiAqXG4gKiA8IS0tIFdpdGggc3BlY2lmaWMgYWdlbnQgSUQgLS0+XG4gKiA8ZGl2IGNvcGlsb3RraXRBZ2VudFxuICogICAgICBbYWdlbnRJZF09XCInbXktYWdlbnQtaWQnXCJcbiAqICAgICAgKGFnZW50Q2hhbmdlKT1cImN1cnJlbnRBZ2VudCA9ICRldmVudFwiXG4gKiAgICAgIChydW5uaW5nQ2hhbmdlKT1cIm9uUnVubmluZ1N0YXRlQ2hhbmdlKCRldmVudClcIlxuICogICAgICAobWVzc2FnZXNDaGFuZ2UpPVwib25NZXNzYWdlc1VwZGF0ZSgkZXZlbnQpXCJcbiAqICAgICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVVcGRhdGUoJGV2ZW50KVwiPlxuICogICBDb250ZW50IGhlcmVcbiAqIDwvZGl2PlxuICpcbiAqIDwhLS0gVHdvLXdheSBiaW5kaW5nIGZvciBydW5uaW5nIHN0YXRlIC0tPlxuICogPGRpdiBjb3BpbG90a2l0QWdlbnRcbiAqICAgICAgWyhydW5uaW5nKV09XCJpc0FnZW50UnVubmluZ1wiPlxuICogICA8c3BhbiAqbmdJZj1cImlzQWdlbnRSdW5uaW5nXCI+UHJvY2Vzc2luZy4uLjwvc3Bhbj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbY29waWxvdGtpdEFnZW50XVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90S2l0QWdlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhZ2VudD86IEFic3RyYWN0QWdlbnQ7XG4gIHByaXZhdGUgYWdlbnRTdWJzY3JpcHRpb24/OiB7IHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkIH07XG4gIHByaXZhdGUgY29yZVVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZDsgLy8gc3Vic2NyaWJlIHJldHVybnMgZnVuY3Rpb24gZGlyZWN0bHlcbiAgcHJpdmF0ZSBfaXNSdW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcnVubmluZ1NpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgYWdlbnRTaWduYWwgPSBzaWduYWw8QWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBhZ2VudCB0byB3YXRjaC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB1c2VzIHRoZSBkZWZhdWx0IGFnZW50IElELlxuICAgKi9cbiAgQElucHV0KCkgYWdlbnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQWx0ZXJuYXRpdmUgaW5wdXQgdXNpbmcgdGhlIGRpcmVjdGl2ZSBzZWxlY3Rvci5cbiAgICogQWxsb3dzOiBbY29waWxvdGtpdEFnZW50XT1cIidhZ2VudC1pZCdcIlxuICAgKi9cbiAgQElucHV0KFwiY29waWxvdGtpdEFnZW50XCIpXG4gIHNldCBkaXJlY3RpdmVBZ2VudElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmFnZW50SWQgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgYWdlbnQgaW5zdGFuY2UgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBhZ2VudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgcnVubmluZyBzdGF0ZSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIHJ1bm5pbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHJ1bm5pbmcgc3RhdGUuXG4gICAqL1xuICBnZXQgcnVubmluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRvT2JzZXJ2YWJsZSh0aGlzLnJ1bm5pbmdTaWduYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGFnZW50IGluc3RhbmNlLlxuICAgKi9cbiAgZ2V0IGFnZW50JCgpOiBPYnNlcnZhYmxlPEFic3RyYWN0QWdlbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdG9PYnNlcnZhYmxlKHRoaXMuYWdlbnRTaWduYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFR3by13YXkgYmluZGluZyBmb3IgcnVubmluZyBzdGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBydW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1J1bm5pbmc7XG4gIH1cbiAgc2V0IHJ1bm5pbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvLyBJbnB1dCBzZXR0ZXIgZm9yIHR3by13YXkgYmluZGluZyAodGhvdWdoIHR5cGljYWxseSByZWFkLW9ubHkgZnJvbSBhZ2VudClcbiAgICB0aGlzLl9pc1J1bm5pbmcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGFnZW50IG1lc3NhZ2VzIGNoYW5nZS5cbiAgICovXG4gIEBPdXRwdXQoKSBtZXNzYWdlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGFnZW50IHN0YXRlIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHJ1biBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIEBPdXRwdXQoKSBydW5Jbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgcnVuIGlzIGZpbmFsaXplZC5cbiAgICovXG4gIEBPdXRwdXQoKSBydW5GaW5hbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHJ1biBmYWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSBydW5GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwQWdlbnQoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvQ29yZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wiYWdlbnRJZFwiXSAmJiAhY2hhbmdlc1tcImFnZW50SWRcIl0uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIEFnZW50IElEIGNoYW5nZWQsIHJlLXNldHVwXG4gICAgICB0aGlzLmNsZWFudXBBZ2VudFN1YnNjcmlwdGlvbigpO1xuICAgICAgdGhpcy5zZXR1cEFnZW50KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwQWdlbnRTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmNsZWFudXBDb3JlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQWdlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgZWZmZWN0aXZlQWdlbnRJZCA9IHRoaXMuYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuICAgIHRoaXMuYWdlbnQgPSB0aGlzLmNvcGlsb3RraXQuZ2V0QWdlbnQoZWZmZWN0aXZlQWdlbnRJZCk7XG5cbiAgICAvLyBVcGRhdGUgc2lnbmFsc1xuICAgIHRoaXMuYWdlbnRTaWduYWwuc2V0KHRoaXMuYWdlbnQpO1xuXG4gICAgLy8gRW1pdCBpbml0aWFsIGFnZW50XG4gICAgdGhpcy5hZ2VudENoYW5nZS5lbWl0KHRoaXMuYWdlbnQpO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGFnZW50IGV2ZW50c1xuICAgIHRoaXMuc3Vic2NyaWJlVG9BZ2VudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0FnZW50KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cEFnZW50U3Vic2NyaXB0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5hZ2VudCkge1xuICAgICAgdGhpcy5hZ2VudFN1YnNjcmlwdGlvbiA9IHRoaXMuYWdlbnQuc3Vic2NyaWJlKHtcbiAgICAgICAgb25NZXNzYWdlc0NoYW5nZWQ6IChwYXJhbXMpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ2hhbmdlLmVtaXQocGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TdGF0ZUNoYW5nZWQ6IChwYXJhbXMpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQocGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5Jbml0aWFsaXplZDogKHBhcmFtcykgPT4ge1xuICAgICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ydW5uaW5nU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLnJ1bm5pbmdDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgICB0aGlzLnJ1bkluaXRpYWxpemVkLmVtaXQocGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5GaW5hbGl6ZWQ6IChwYXJhbXMpID0+IHtcbiAgICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJ1bm5pbmdTaWduYWwuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJ1bm5pbmdDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5ydW5GaW5hbGl6ZWQuZW1pdChwYXJhbXMpO1xuICAgICAgICB9LFxuICAgICAgICBvblJ1bkZhaWxlZDogKHBhcmFtcykgPT4ge1xuICAgICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucnVubmluZ1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucnVubmluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJ1bkZhaWxlZC5lbWl0KHBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvQ29yZSgpOiB2b2lkIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gQ29waWxvdEtpdCBjaGFuZ2VzIHRvIGRldGVjdCBhZ2VudCB1cGRhdGVzXG4gICAgdGhpcy5jb3JlVW5zdWJzY3JpYmUgPSB0aGlzLmNvcGlsb3RraXQuY29waWxvdGtpdC5zdWJzY3JpYmUoe1xuICAgICAgb25SdW50aW1lQ29ubmVjdGlvblN0YXR1c0NoYW5nZWQ6ICh7IHN0YXR1cyB9KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0dXMgPT09IENvcGlsb3RLaXRDb3JlUnVudGltZUNvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGVkIHx8XG4gICAgICAgICAgc3RhdHVzID09PSBDb3BpbG90S2l0Q29yZVJ1bnRpbWVDb25uZWN0aW9uU3RhdHVzLkRpc2Nvbm5lY3RlZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBSZS1jaGVjayBhZ2VudCB3aGVuIHJ1bnRpbWUgY29ubmVjdGlvbiBjaGFuZ2VzIHN0YXRlXG4gICAgICAgICAgdGhpcy5zZXR1cEFnZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBBZ2VudFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYWdlbnRTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBDb3JlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29yZVVuc3Vic2NyaWJlPy4oKTtcbiAgICB0aGlzLmNvcmVVbnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -1,218 +0,0 @@
1
- import { Directive, Input, Output, EventEmitter, Optional, isDevMode, Inject, } from "@angular/core";
2
- import { CopilotChatConfigurationService } from "../core/chat-configuration/chat-configuration.service";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../core/chat-configuration/chat-configuration.service";
5
- /**
6
- * Directive for configuring CopilotKit chat settings declaratively in templates.
7
- * Works with the CopilotChatConfigurationService to provide reactive chat configuration.
8
- *
9
- * @example
10
- * ```html
11
- * <!-- Basic usage with individual inputs -->
12
- * <div copilotkitChatConfig
13
- * [labels]="customLabels"
14
- * [inputValue]="currentInput"
15
- * (submitInput)="onSubmit($event)"
16
- * (changeInput)="onChange($event)">
17
- * <!-- Chat UI components -->
18
- * </div>
19
- *
20
- * <!-- Using configuration object -->
21
- * <div [copilotkitChatConfig]="chatConfig">
22
- * <!-- Chat UI components -->
23
- * </div>
24
- *
25
- * <!-- Two-way binding for input value -->
26
- * <div copilotkitChatConfig
27
- * [(value)]="chatInput"
28
- * (submitInput)="handleSubmit($event)">
29
- * <!-- Chat UI components -->
30
- * </div>
31
- * ```
32
- */
33
- export class CopilotKitChatConfigDirective {
34
- chatConfig;
35
- _value;
36
- submitHandler;
37
- changeHandler;
38
- constructor(chatConfig) {
39
- this.chatConfig = chatConfig;
40
- }
41
- /**
42
- * Partial labels to override defaults
43
- */
44
- labels;
45
- /**
46
- * The current input value
47
- */
48
- inputValue;
49
- /**
50
- * Event emitted when input is submitted
51
- */
52
- submitInput = new EventEmitter();
53
- /**
54
- * Event emitted when input value changes
55
- */
56
- changeInput = new EventEmitter();
57
- /**
58
- * Alternative: accept full configuration object
59
- */
60
- set config(value) {
61
- if (value) {
62
- if (value.labels)
63
- this.labels = value.labels;
64
- if (value.inputValue !== undefined)
65
- this.inputValue = value.inputValue;
66
- // Store handlers for later setup
67
- if (value.onSubmitInput)
68
- this.submitHandler = value.onSubmitInput;
69
- if (value.onChangeInput)
70
- this.changeHandler = value.onChangeInput;
71
- }
72
- }
73
- /**
74
- * Two-way binding for input value
75
- */
76
- get value() {
77
- return this._value;
78
- }
79
- set value(v) {
80
- this._value = v;
81
- this.valueChange.emit(v);
82
- if (v !== undefined) {
83
- this.updateInputValue(v);
84
- }
85
- }
86
- /**
87
- * Two-way binding output for value
88
- */
89
- valueChange = new EventEmitter();
90
- ngOnInit() {
91
- if (!this.chatConfig) {
92
- if (isDevMode()) {
93
- console.warn("CopilotKitChatConfigDirective: No CopilotChatConfigurationService found. " +
94
- "Make sure to provide it using provideCopilotChatConfiguration().");
95
- }
96
- return;
97
- }
98
- this.updateConfiguration();
99
- this.setupHandlers();
100
- }
101
- ngOnChanges(changes) {
102
- if (!this.chatConfig) {
103
- return;
104
- }
105
- const relevantChanges = changes["labels"] || changes["inputValue"] || changes["value"];
106
- if (relevantChanges && !relevantChanges.firstChange) {
107
- this.updateConfiguration();
108
- }
109
- }
110
- ngOnDestroy() {
111
- // Cleanup if needed
112
- }
113
- /**
114
- * Submit the current input value
115
- */
116
- submit(value) {
117
- // Emit to template binding
118
- this.submitInput.emit(value);
119
- // Call service handler
120
- if (this.chatConfig) {
121
- this.chatConfig.submitInput(value);
122
- }
123
- // Call provided handler
124
- if (this.submitHandler) {
125
- this.submitHandler(value);
126
- }
127
- }
128
- /**
129
- * Handle input value change
130
- */
131
- change(value) {
132
- // Update internal value
133
- this._value = value;
134
- // Emit to template bindings
135
- this.changeInput.emit(value);
136
- this.valueChange.emit(value);
137
- // Call service handler
138
- if (this.chatConfig) {
139
- this.chatConfig.changeInput(value);
140
- }
141
- // Call provided handler
142
- if (this.changeHandler) {
143
- this.changeHandler(value);
144
- }
145
- }
146
- updateConfiguration() {
147
- if (!this.chatConfig) {
148
- return;
149
- }
150
- // Update labels if provided
151
- if (this.labels) {
152
- this.chatConfig.setLabels(this.labels);
153
- }
154
- // Update input value if provided
155
- const valueToSet = this._value !== undefined ? this._value : this.inputValue;
156
- if (valueToSet !== undefined) {
157
- this.chatConfig.setInputValue(valueToSet);
158
- }
159
- }
160
- updateInputValue(value) {
161
- if (this.chatConfig) {
162
- this.chatConfig.setInputValue(value);
163
- this.chatConfig.changeInput(value);
164
- }
165
- }
166
- setupHandlers() {
167
- if (!this.chatConfig) {
168
- return;
169
- }
170
- // Create composite handlers that call both service and directive handlers
171
- const submitComposite = (value) => {
172
- this.submitInput.emit(value);
173
- if (this.submitHandler) {
174
- this.submitHandler(value);
175
- }
176
- };
177
- const changeComposite = (value) => {
178
- this.changeInput.emit(value);
179
- this.valueChange.emit(value);
180
- if (this.changeHandler) {
181
- this.changeHandler(value);
182
- }
183
- };
184
- // Set handlers on the service
185
- this.chatConfig.setSubmitHandler(submitComposite);
186
- this.chatConfig.setChangeHandler(changeComposite);
187
- }
188
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitChatConfigDirective, deps: [{ token: CopilotChatConfigurationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
189
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitChatConfigDirective, isStandalone: true, selector: "[copilotkitChatConfig]", inputs: { labels: "labels", inputValue: "inputValue", config: ["copilotkitChatConfig", "config"], value: "value" }, outputs: { submitInput: "submitInput", changeInput: "changeInput", valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0 });
190
- }
191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitChatConfigDirective, decorators: [{
192
- type: Directive,
193
- args: [{
194
- selector: "[copilotkitChatConfig]",
195
- standalone: true,
196
- }]
197
- }], ctorParameters: () => [{ type: i1.CopilotChatConfigurationService, decorators: [{
198
- type: Optional
199
- }, {
200
- type: Inject,
201
- args: [CopilotChatConfigurationService]
202
- }] }], propDecorators: { labels: [{
203
- type: Input
204
- }], inputValue: [{
205
- type: Input
206
- }], submitInput: [{
207
- type: Output
208
- }], changeInput: [{
209
- type: Output
210
- }], config: [{
211
- type: Input,
212
- args: ["copilotkitChatConfig"]
213
- }], value: [{
214
- type: Input
215
- }], valueChange: [{
216
- type: Output
217
- }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1jaGF0LWNvbmZpZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9jb3BpbG90a2l0LWNoYXQtY29uZmlnLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUtaLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7QUFNeEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUtILE1BQU0sT0FBTyw2QkFBNkI7SUFVckI7SUFQWCxNQUFNLENBQVU7SUFDaEIsYUFBYSxDQUEyQjtJQUN4QyxhQUFhLENBQTJCO0lBRWhELFlBR21CLFVBQWtEO1FBQWxELGVBQVUsR0FBVixVQUFVLENBQXdDO0lBQ2xFLENBQUM7SUFFSjs7T0FFRztJQUNNLE1BQU0sQ0FBOEI7SUFFN0M7O09BRUc7SUFDTSxVQUFVLENBQVU7SUFFN0I7O09BRUc7SUFDTyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVuRDs7T0FFRztJQUNPLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRW5EOztPQUVHO0lBQ0gsSUFDSSxNQUFNLENBQUMsS0FBMkM7UUFDcEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksS0FBSyxDQUFDLE1BQU07Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzdDLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTO2dCQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUN2RSxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsYUFBYTtnQkFBRSxJ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Q0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEQsQ0FBQzt3R0E1TFUsNkJBQTZCLGtCQVM5QiwrQkFBK0I7NEZBVDlCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQVNJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsK0JBQStCO3lDQU9oQyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLSSxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUgsTUFBTTtzQkFEVCxLQUFLO3VCQUFDLHNCQUFzQjtnQkFlekIsS0FBSztzQkFEUixLQUFLO2dCQWVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIGlzRGV2TW9kZSxcbiAgSW5qZWN0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9jb3JlL2NoYXQtY29uZmlndXJhdGlvbi9jaGF0LWNvbmZpZ3VyYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgQ29waWxvdENoYXRDb25maWd1cmF0aW9uLFxuICBDb3BpbG90Q2hhdExhYmVscyxcbn0gZnJvbSBcIi4uL2NvcmUvY2hhdC1jb25maWd1cmF0aW9uL2NoYXQtY29uZmlndXJhdGlvbi50eXBlc1wiO1xuXG4vKipcbiAqIERpcmVjdGl2ZSBmb3IgY29uZmlndXJpbmcgQ29waWxvdEtpdCBjaGF0IHNldHRpbmdzIGRlY2xhcmF0aXZlbHkgaW4gdGVtcGxhdGVzLlxuICogV29ya3Mgd2l0aCB0aGUgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSB0byBwcm92aWRlIHJlYWN0aXZlIGNoYXQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPCEtLSBCYXNpYyB1c2FnZSB3aXRoIGluZGl2aWR1YWwgaW5wdXRzIC0tPlxuICogPGRpdiBjb3BpbG90a2l0Q2hhdENvbmZpZ1xuICogICAgICBbbGFiZWxzXT1cImN1c3RvbUxhYmVsc1wiXG4gKiAgICAgIFtpbnB1dFZhbHVlXT1cImN1cnJlbnRJbnB1dFwiXG4gKiAgICAgIChzdWJtaXRJbnB1dCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAqICAgICAgKGNoYW5nZUlucHV0KT1cIm9uQ2hhbmdlKCRldmVudClcIj5cbiAqICAgPCEtLSBDaGF0IFVJIGNvbXBvbmVudHMgLS0+XG4gKiA8L2Rpdj5cbiAqXG4gKiA8IS0tIFVzaW5nIGNvbmZpZ3VyYXRpb24gb2JqZWN0IC0tPlxuICogPGRpdiBbY29waWxvdGtpdENoYXRDb25maWddPVwiY2hhdENvbmZpZ1wiPlxuICogICA8IS0tIENoYXQgVUkgY29tcG9uZW50cyAtLT5cbiAqIDwvZGl2PlxuICpcbiAqIDwhLS0gVHdvLXdheSBiaW5kaW5nIGZvciBpbnB1dCB2YWx1ZSAtLT5cbiAqIDxkaXYgY29waWxvdGtpdENoYXRDb25maWdcbiAqICAgICAgWyh2YWx1ZSldPVwiY2hhdElucHV0XCJcbiAqICAgICAgKHN1Ym1pdElucHV0KT1cImhhbmRsZVN1Ym1pdCgkZXZlbnQpXCI+XG4gKiAgIDwhLS0gQ2hhdCBVSSBjb21wb25lbnRzIC0tPlxuICogPC9kaXY+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIltjb3BpbG90a2l0Q2hhdENvbmZpZ11cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdENoYXRDb25maWdEaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nO1xuICBwcml2YXRlIHN1Ym1pdEhhbmRsZXI/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjaGFuZ2VIYW5kbGVyPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGF0Q29uZmlnOiBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlIHwgbnVsbFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFBhcnRpYWwgbGFiZWxzIHRvIG92ZXJyaWRlIGRlZmF1bHRzXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbHM/OiBQYXJ0aWFsPENvcGlsb3RDaGF0TGFiZWxzPjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgaW5wdXQgdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIGlucHV0VmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCBpcyBzdWJtaXR0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBzdWJtaXRJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gaW5wdXQgdmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUlucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlOiBhY2NlcHQgZnVsbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgQElucHV0KFwiY29waWxvdGtpdENoYXRDb25maWdcIilcbiAgc2V0IGNvbmZpZyh2YWx1ZTogQ29waWxvdENoYXRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUubGFiZWxzKSB0aGlzLmxhYmVscyA9IHZhbHVlLmxhYmVscztcbiAgICAgIGlmICh2YWx1ZS5pbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlLmlucHV0VmFsdWU7XG4gICAgICAvLyBTdG9yZSBoYW5kbGVycyBmb3IgbGF0ZXIgc2V0dXBcbiAgICAgIGlmICh2YWx1ZS5vblN1Ym1pdElucHV0KSB0aGlzLnN1Ym1pdEhhbmRsZXIgPSB2YWx1ZS5vblN1Ym1pdElucHV0O1xuICAgICAgaWYgKHZhbHVlLm9uQ2hhbmdlSW5wdXQpIHRoaXMuY2hhbmdlSGFuZGxlciA9IHZhbHVlLm9uQ2hhbmdlSW5wdXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFR3by13YXkgYmluZGluZyBmb3IgaW5wdXQgdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUodik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFR3by13YXkgYmluZGluZyBvdXRwdXQgZm9yIHZhbHVlXG4gICAqL1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hhdENvbmZpZykge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkNvcGlsb3RLaXRDaGF0Q29uZmlnRGlyZWN0aXZlOiBObyBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlIGZvdW5kLiBcIiArXG4gICAgICAgICAgICBcIk1ha2Ugc3VyZSB0byBwcm92aWRlIGl0IHVzaW5nIHByb3ZpZGVDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24oKS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGF0Q29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZXZhbnRDaGFuZ2VzID1cbiAgICAgIGNoYW5nZXNbXCJsYWJlbHNcIl0gfHwgY2hhbmdlc1tcImlucHV0VmFsdWVcIl0gfHwgY2hhbmdlc1tcInZhbHVlXCJdO1xuXG4gICAgaWYgKHJlbGV2YW50Q2hhbmdlcyAmJiAhcmVsZXZhbnRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbnVwIGlmIG5lZWRlZFxuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgc3VibWl0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBFbWl0IHRvIHRlbXBsYXRlIGJpbmRpbmdcbiAgICB0aGlzLnN1Ym1pdElucHV0LmVtaXQodmFsdWUpO1xuXG4gICAgLy8gQ2FsbCBzZXJ2aWNlIGhhbmRsZXJcbiAgICBpZiAodGhpcy5jaGF0Q29uZmlnKSB7XG4gICAgICB0aGlzLmNoYXRDb25maWcuc3VibWl0SW5wdXQodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbGwgcHJvdmlkZWQgaGFuZGxlclxuICAgIGlmICh0aGlzLnN1Ym1pdEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuc3VibWl0SGFuZGxlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbnB1dCB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIGNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIGludGVybmFsIHZhbHVlXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIC8vIEVtaXQgdG8gdGVtcGxhdGUgYmluZGluZ3NcbiAgICB0aGlzLmNoYW5nZUlucHV0LmVtaXQodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG5cbiAgICAvLyBDYWxsIHNlcnZpY2UgaGFuZGxlclxuICAgIGlmICh0aGlzLmNoYXRDb25maWcpIHtcbiAgICAgIHRoaXMuY2hhdENvbmZpZy5jaGFuZ2VJbnB1dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBwcm92aWRlZCBoYW5kbGVyXG4gICAgaWYgKHRoaXMuY2hhbmdlSGFuZGxlcikge1xuICAgICAgdGhpcy5jaGFuZ2VIYW5kbGVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoYXRDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbGFiZWxzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMubGFiZWxzKSB7XG4gICAgICB0aGlzLmNoYXRDb25maWcuc2V0TGFiZWxzKHRoaXMubGFiZWxzKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaW5wdXQgdmFsdWUgaWYgcHJvdmlkZWRcbiAgICBjb25zdCB2YWx1ZVRvU2V0ID1cbiAgICAgIHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLl92YWx1ZSA6IHRoaXMuaW5wdXRWYWx1ZTtcbiAgICBpZiAodmFsdWVUb1NldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoYXRDb25maWcuc2V0SW5wdXRWYWx1ZSh2YWx1ZVRvU2V0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXRDb25maWcpIHtcbiAgICAgIHRoaXMuY2hhdENvbmZpZy5zZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMuY2hhdENvbmZpZy5jaGFuZ2VJbnB1dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGF0Q29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGNvbXBvc2l0ZSBoYW5kbGVycyB0aGF0IGNhbGwgYm90aCBzZXJ2aWNlIGFuZCBkaXJlY3RpdmUgaGFuZGxlcnNcbiAgICBjb25zdCBzdWJtaXRDb21wb3NpdGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zdWJtaXRJbnB1dC5lbWl0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLnN1Ym1pdEhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRIYW5kbGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2hhbmdlQ29tcG9zaXRlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuY2hhbmdlSW5wdXQuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgaWYgKHRoaXMuY2hhbmdlSGFuZGxlcikge1xuICAgICAgICB0aGlzLmNoYW5nZUhhbmRsZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBTZXQgaGFuZGxlcnMgb24gdGhlIHNlcnZpY2VcbiAgICB0aGlzLmNoYXRDb25maWcuc2V0U3VibWl0SGFuZGxlcihzdWJtaXRDb21wb3NpdGUpO1xuICAgIHRoaXMuY2hhdENvbmZpZy5zZXRDaGFuZ2VIYW5kbGVyKGNoYW5nZUNvbXBvc2l0ZSk7XG4gIH1cbn1cbiJdfQ==