@copilotkitnext/angular 0.0.9-alpha.3 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/esm2022/index.mjs +2 -70
  2. package/dist/esm2022/lib/agent.mjs +73 -0
  3. package/dist/esm2022/lib/chat-config.mjs +35 -0
  4. package/dist/esm2022/lib/chat-state.mjs +18 -0
  5. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
  6. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
  7. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
  8. package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
  9. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
  10. package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
  11. package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
  12. package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
  13. package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
  14. package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
  15. package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
  16. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
  17. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
  18. package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
  19. package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
  20. package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
  21. package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
  22. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
  23. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
  24. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
  25. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
  26. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
  27. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
  28. package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
  29. package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
  30. package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
  31. package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
  32. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
  33. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
  34. package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
  35. package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
  36. package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
  37. package/dist/esm2022/lib/config.mjs +9 -0
  38. package/dist/esm2022/lib/copilotkit.mjs +124 -0
  39. package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
  40. package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
  41. package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
  42. package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
  43. package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
  44. package/dist/esm2022/lib/resize-observer.mjs +152 -0
  45. package/dist/esm2022/lib/scroll-position.mjs +124 -0
  46. package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
  47. package/dist/esm2022/lib/slots/index.mjs +4 -0
  48. package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
  49. package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
  50. package/dist/esm2022/lib/tools.mjs +31 -0
  51. package/dist/esm2022/lib/utils.mjs +3 -3
  52. package/dist/esm2022/public-api.mjs +47 -0
  53. package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
  54. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  55. package/dist/index.d.ts +1 -55
  56. package/dist/lib/agent.d.ts +53 -0
  57. package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
  58. package/dist/lib/chat-state.d.ts +10 -0
  59. package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
  60. package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
  61. package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
  62. package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
  63. package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
  64. package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
  65. package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
  66. package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
  67. package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
  68. package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
  69. package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
  70. package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
  71. package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
  72. package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
  73. package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
  74. package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
  75. package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
  76. package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
  77. package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
  78. package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
  79. package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
  80. package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
  81. package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
  82. package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
  83. package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
  84. package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
  85. package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
  86. package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
  87. package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
  88. package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
  89. package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
  90. package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
  91. package/dist/lib/config.d.ts +16 -0
  92. package/dist/lib/copilotkit.d.ts +29 -0
  93. package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
  94. package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
  95. package/dist/lib/directives/tooltip.d.ts +33 -0
  96. package/dist/lib/human-in-the-loop.d.ts +13 -0
  97. package/dist/lib/render-tool-calls.d.ts +75 -0
  98. package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
  99. package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
  100. package/dist/lib/slots/copilot-slot.d.ts +34 -0
  101. package/dist/lib/slots/index.d.ts +3 -0
  102. package/dist/lib/slots/slot.types.d.ts +1 -1
  103. package/dist/lib/slots/slot.utils.d.ts +6 -4
  104. package/dist/lib/tools.d.ts +63 -0
  105. package/dist/lib/utils.d.ts +1 -1
  106. package/dist/public-api.d.ts +46 -0
  107. package/dist/styles.css +0 -69
  108. package/package.json +3 -3
  109. package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
  110. package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
  111. package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
  112. package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
  113. package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
  114. package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
  115. package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
  116. package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
  117. package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
  118. package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
  119. package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
  120. package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
  121. package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
  122. package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
  123. package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
  124. package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
  125. package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
  126. package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
  127. package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
  128. package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
  129. package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
  130. package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
  131. package/dist/components/chat/copilot-chat.component.d.ts +0 -36
  132. package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
  133. package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
  134. package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
  135. package/dist/core/copilotkit.providers.d.ts +0 -13
  136. package/dist/core/copilotkit.service.d.ts +0 -119
  137. package/dist/core/copilotkit.types.d.ts +0 -81
  138. package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
  139. package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
  140. package/dist/directives/copilotkit-config.directive.d.ts +0 -44
  141. package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
  142. package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
  143. package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
  144. package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
  145. package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
  146. package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
  147. package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
  148. package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
  149. package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
  150. package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
  151. package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
  152. package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
  153. package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
  154. package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
  155. package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
  156. package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
  157. package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
  158. package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
  159. package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
  160. package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
  161. package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
  162. package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
  163. package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
  164. package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
  165. package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
  166. package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
  167. package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
  168. package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
  169. package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
  170. package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
  171. package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
  172. package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
  173. package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
  174. package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
  175. package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
  176. package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
  177. package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
  178. package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
  179. package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
  180. package/dist/esm2022/core/copilotkit.service.mjs +0 -411
  181. package/dist/esm2022/core/copilotkit.types.mjs +0 -13
  182. package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
  183. package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
  184. package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
  185. package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
  186. package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
  187. package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
  188. package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
  189. package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
  190. package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
  191. package/dist/esm2022/services/resize-observer.service.mjs +0 -152
  192. package/dist/esm2022/services/scroll-position.service.mjs +0 -124
  193. package/dist/esm2022/types/frontend-tool.mjs +0 -2
  194. package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
  195. package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
  196. package/dist/esm2022/utils/agent.utils.mjs +0 -212
  197. package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
  198. package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
  199. package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
  200. package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
  201. package/dist/lib/directives/tooltip.directive.d.ts +0 -33
  202. package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
  203. package/dist/types/frontend-tool.d.ts +0 -37
  204. package/dist/types/human-in-the-loop.d.ts +0 -44
  205. package/dist/utils/agent-context.utils.d.ts +0 -75
  206. package/dist/utils/agent.utils.d.ts +0 -108
  207. package/dist/utils/chat-config.utils.d.ts +0 -166
  208. package/dist/utils/copilotkit.utils.d.ts +0 -16
  209. package/dist/utils/frontend-tool.utils.d.ts +0 -119
  210. package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
@@ -1,224 +0,0 @@
1
- import { DestroyRef, inject } from '@angular/core';
2
- import { CopilotKitService } from '../core/copilotkit.service';
3
- /**
4
- * Explicitly adds a frontend tool to CopilotKit.
5
- * Requires CopilotKitService to be passed as a parameter.
6
- *
7
- * @param service - The CopilotKitService instance
8
- * @param tool - The tool to add
9
- * @returns A cleanup function that removes the tool
10
- *
11
- * @example
12
- * ```typescript
13
- * export class MyComponent implements OnInit, OnDestroy {
14
- * private cleanupFns: Array<() => void> = [];
15
- *
16
- * constructor(private copilotkit: CopilotKitService) {}
17
- *
18
- * ngOnInit() {
19
- * const cleanup = addFrontendTool(this.copilotkit, {
20
- * name: 'calculator',
21
- * description: 'Performs calculations',
22
- * parameters: z.object({
23
- * expression: z.string()
24
- * }),
25
- * handler: async (args) => {
26
- * return eval(args.expression);
27
- * }
28
- * });
29
- *
30
- * this.cleanupFns.push(cleanup);
31
- * }
32
- *
33
- * ngOnDestroy() {
34
- * this.cleanupFns.forEach(fn => fn());
35
- * }
36
- * }
37
- * ```
38
- */
39
- export function addFrontendTool(service, tool) {
40
- // Add the tool to CopilotKit
41
- service.copilotkit.addTool(tool);
42
- // Register the render if provided
43
- if (tool.render) {
44
- const currentRenders = service.currentRenderToolCalls();
45
- const existingIndex = currentRenders.findIndex((r) => r.name === tool.name);
46
- if (existingIndex !== -1) {
47
- console.error(`Tool with name '${tool.name}' already has a render. Skipping.`);
48
- }
49
- else {
50
- const renderEntry = {
51
- name: tool.name,
52
- render: tool.render
53
- };
54
- service.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
55
- }
56
- }
57
- // Return cleanup function
58
- return () => {
59
- removeFrontendTool(service, tool.name);
60
- };
61
- }
62
- /**
63
- * Registers a frontend tool with CopilotKit and automatically removes it when the component/service is destroyed.
64
- * Must be called within an injection context.
65
- *
66
- * @param tool - The tool to register
67
- * @returns The tool name
68
- *
69
- * @example
70
- * ```typescript
71
- * export class MyComponent implements OnInit {
72
- * ngOnInit() {
73
- * // Automatically cleaned up on component destroy
74
- * registerFrontendTool({
75
- * name: 'search',
76
- * description: 'Search for items',
77
- * parameters: z.object({
78
- * query: z.string()
79
- * }),
80
- * handler: async (args) => {
81
- * return this.searchService.search(args.query);
82
- * },
83
- * render: SearchResultsComponent
84
- * });
85
- * }
86
- * }
87
- * ```
88
- */
89
- export function registerFrontendTool(tool) {
90
- const service = inject(CopilotKitService);
91
- const destroyRef = inject(DestroyRef);
92
- // Add the tool
93
- service.copilotkit.addTool(tool);
94
- // Register the render if provided
95
- if (tool.render) {
96
- const currentRenders = service.currentRenderToolCalls();
97
- const existingIndex = currentRenders.findIndex((r) => r.name === tool.name);
98
- if (existingIndex !== -1) {
99
- console.error(`Tool with name '${tool.name}' already has a render. Skipping.`);
100
- }
101
- else {
102
- const renderEntry = {
103
- name: tool.name,
104
- render: tool.render
105
- };
106
- service.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
107
- }
108
- }
109
- // Register cleanup with Angular's DestroyRef
110
- destroyRef.onDestroy(() => {
111
- removeFrontendTool(service, tool.name);
112
- });
113
- return tool.name;
114
- }
115
- /**
116
- * Explicitly removes a frontend tool from CopilotKit.
117
- *
118
- * @param service - The CopilotKitService instance
119
- * @param toolName - The name of the tool to remove
120
- *
121
- * @example
122
- * ```typescript
123
- * removeFrontendTool(this.copilotkit, 'calculator');
124
- * ```
125
- */
126
- export function removeFrontendTool(service, toolName) {
127
- // Remove the tool
128
- service.copilotkit.removeTool(toolName);
129
- // Remove the render if it exists
130
- const currentRenders = service.currentRenderToolCalls();
131
- const filtered = currentRenders.filter((r) => r.name !== toolName);
132
- if (filtered.length !== currentRenders.length) {
133
- service.setCurrentRenderToolCalls(filtered);
134
- }
135
- }
136
- /**
137
- * Creates a frontend tool with dynamic parameters that can change over time.
138
- * Uses Angular signals for reactivity.
139
- *
140
- * @param name - Tool name
141
- * @param description - Tool description
142
- * @param parameters - Zod schema for parameters
143
- * @param handler - Signal or function that provides the handler
144
- * @param render - Optional render component or template
145
- * @returns Object with update and destroy methods
146
- *
147
- * @example
148
- * ```typescript
149
- * export class MyComponent {
150
- * private toolConfig = signal({
151
- * handler: async (args: any) => this.processDefault(args)
152
- * });
153
- *
154
- * ngOnInit() {
155
- * const tool = createDynamicFrontendTool(
156
- * 'processor',
157
- * 'Processes data',
158
- * z.object({ data: z.string() }),
159
- * () => this.toolConfig().handler
160
- * );
161
- *
162
- * // Later, update the handler
163
- * this.toolConfig.set({
164
- * handler: async (args: any) => this.processAdvanced(args)
165
- * });
166
- * tool.update();
167
- * }
168
- * }
169
- * ```
170
- */
171
- export function createDynamicFrontendTool(name, description, parameters, handler, render) {
172
- const service = inject(CopilotKitService);
173
- const destroyRef = inject(DestroyRef);
174
- let isRegistered = false;
175
- const update = () => {
176
- // Remove old tool if registered
177
- if (isRegistered) {
178
- service.copilotkit.removeTool(name);
179
- }
180
- // Create new tool configuration
181
- const desc = typeof description === 'function' ? description() : description;
182
- const currentHandler = handler();
183
- const currentRender = render ? render() : undefined;
184
- const tool = {
185
- name,
186
- description: desc,
187
- parameters,
188
- handler: currentHandler,
189
- render: currentRender
190
- };
191
- // Add the tool
192
- service.copilotkit.addTool(tool);
193
- // Update render if provided
194
- if (currentRender) {
195
- const currentRenders = service.currentRenderToolCalls();
196
- const renderEntry = {
197
- name: name,
198
- render: currentRender
199
- };
200
- const existingIndex = currentRenders.findIndex((r) => r.name === name);
201
- if (existingIndex !== -1) {
202
- const updated = [...currentRenders];
203
- updated[existingIndex] = renderEntry;
204
- service.setCurrentRenderToolCalls(updated);
205
- }
206
- else {
207
- service.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
208
- }
209
- }
210
- isRegistered = true;
211
- };
212
- const destroy = () => {
213
- if (isRegistered) {
214
- removeFrontendTool(service, name);
215
- isRegistered = false;
216
- }
217
- };
218
- // Initial setup
219
- update();
220
- // Register cleanup
221
- destroyRef.onDestroy(destroy);
222
- return { update, destroy };
223
- }
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtdG9vbC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9mcm9udGVuZC10b29sLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE9BQTBCLEVBQzFCLElBQTRCO0lBRTVCLDZCQUE2QjtJQUM3QixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyxrQ0FBa0M7SUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVGLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksbUNBQW1DLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sV0FBVyxHQUEwQjtnQkFDekMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1lBRUYsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixPQUFPLEdBQUcsRUFBRTtRQUNWLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsSUFBNEI7SUFFNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGVBQWU7SUFDZixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyxrQ0FBa0M7SUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVGLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksbUNBQW1DLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sV0FBVyxHQUEwQjtnQkFDekMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1lBRUYsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUN4QixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUEwQixFQUMxQixRQUFnQjtJQUVoQixrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEMsaUNBQWlDO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ25GLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLElBQVksRUFDWixXQUFvQyxFQUNwQyxVQUEwQixFQUMxQixPQUEwQyxFQUMxQyxNQUFrQjtJQUVsQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtRQUNsQixnQ0FBZ0M7UUFDaEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sV0FBVyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM3RSxNQUFNLGNBQWMsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFcEQsTUFBTSxJQUFJLEdBQTJCO1lBQ25DLElBQUk7WUFDSixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVO1lBQ1YsT0FBTyxFQUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLGFBQWE7U0FDdEIsQ0FBQztRQUVGLGVBQWU7UUFDZixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyw0QkFBNEI7UUFDNUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN4RCxNQUFNLFdBQVcsR0FBMEI7Z0JBQ3pDLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxhQUFhO2FBQ3RCLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN2RixJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxXQUFXLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDO1FBQ0gsQ0FBQztRQUVELFlBQVksR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLGdCQUFnQjtJQUNoQixNQUFNLEVBQUUsQ0FBQztJQUVULG1CQUFtQjtJQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29waWxvdEtpdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2NvcGlsb3RraXQuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyRnJvbnRlbmRUb29sLCBBbmd1bGFyVG9vbENhbGxSZW5kZXIsIFRvb2xDYWxsUmVuZGVyIH0gZnJvbSAnLi4vY29yZS9jb3BpbG90a2l0LnR5cGVzJztcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gJ3pvZCc7XG5cbi8qKlxuICogRXhwbGljaXRseSBhZGRzIGEgZnJvbnRlbmQgdG9vbCB0byBDb3BpbG90S2l0LlxuICogUmVxdWlyZXMgQ29waWxvdEtpdFNlcnZpY2UgdG8gYmUgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxuICogXG4gKiBAcGFyYW0gc2VydmljZSAtIFRoZSBDb3BpbG90S2l0U2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIHRvb2wgLSBUaGUgdG9vbCB0byBhZGRcbiAqIEByZXR1cm5zIEEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHJlbW92ZXMgdGhlIHRvb2xcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAqICAgcHJpdmF0ZSBjbGVhbnVwRm5zOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuICogICBcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb3BpbG90a2l0OiBDb3BpbG90S2l0U2VydmljZSkge31cbiAqICAgXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIGNvbnN0IGNsZWFudXAgPSBhZGRGcm9udGVuZFRvb2wodGhpcy5jb3BpbG90a2l0LCB7XG4gKiAgICAgICBuYW1lOiAnY2FsY3VsYXRvcicsXG4gKiAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmZvcm1zIGNhbGN1bGF0aW9ucycsXG4gKiAgICAgICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4gKiAgICAgICAgIGV4cHJlc3Npb246IHouc3RyaW5nKClcbiAqICAgICAgIH0pLFxuICogICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3MpID0+IHtcbiAqICAgICAgICAgcmV0dXJuIGV2YWwoYXJncy5leHByZXNzaW9uKTtcbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqICAgICBcbiAqICAgICB0aGlzLmNsZWFudXBGbnMucHVzaChjbGVhbnVwKTtcbiAqICAgfVxuICogICBcbiAqICAgbmdPbkRlc3Ryb3koKSB7XG4gKiAgICAgdGhpcy5jbGVhbnVwRm5zLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRnJvbnRlbmRUb29sPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICB0b29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+XG4pOiAoKSA9PiB2b2lkIHtcbiAgLy8gQWRkIHRoZSB0b29sIHRvIENvcGlsb3RLaXRcbiAgc2VydmljZS5jb3BpbG90a2l0LmFkZFRvb2wodG9vbCk7XG4gIFxuICAvLyBSZWdpc3RlciB0aGUgcmVuZGVyIGlmIHByb3ZpZGVkXG4gIGlmICh0b29sLnJlbmRlcikge1xuICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJzID0gc2VydmljZS5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGN1cnJlbnRSZW5kZXJzLmZpbmRJbmRleCgocjogVG9vbENhbGxSZW5kZXIpID0+IHIubmFtZSA9PT0gdG9vbC5uYW1lKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRvb2wgd2l0aCBuYW1lICcke3Rvb2wubmFtZX0nIGFscmVhZHkgaGFzIGEgcmVuZGVyLiBTa2lwcGluZy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVuZGVyRW50cnk6IEFuZ3VsYXJUb29sQ2FsbFJlbmRlciA9IHtcbiAgICAgICAgbmFtZTogdG9vbC5uYW1lLFxuICAgICAgICByZW5kZXI6IHRvb2wucmVuZGVyXG4gICAgICB9O1xuICAgICAgXG4gICAgICBzZXJ2aWNlLnNldEN1cnJlbnRSZW5kZXJUb29sQ2FsbHMoWy4uLmN1cnJlbnRSZW5kZXJzLCByZW5kZXJFbnRyeV0pO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICByZW1vdmVGcm9udGVuZFRvb2woc2VydmljZSwgdG9vbC5uYW1lKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBmcm9udGVuZCB0b29sIHdpdGggQ29waWxvdEtpdCBhbmQgYXV0b21hdGljYWxseSByZW1vdmVzIGl0IHdoZW4gdGhlIGNvbXBvbmVudC9zZXJ2aWNlIGlzIGRlc3Ryb3llZC5cbiAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIFxuICogQHBhcmFtIHRvb2wgLSBUaGUgdG9vbCB0byByZWdpc3RlclxuICogQHJldHVybnMgVGhlIHRvb2wgbmFtZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgLy8gQXV0b21hdGljYWxseSBjbGVhbmVkIHVwIG9uIGNvbXBvbmVudCBkZXN0cm95XG4gKiAgICAgcmVnaXN0ZXJGcm9udGVuZFRvb2woe1xuICogICAgICAgbmFtZTogJ3NlYXJjaCcsXG4gKiAgICAgICBkZXNjcmlwdGlvbjogJ1NlYXJjaCBmb3IgaXRlbXMnLFxuICogICAgICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuICogICAgICAgICBxdWVyeTogei5zdHJpbmcoKVxuICogICAgICAgfSksXG4gKiAgICAgICBoYW5kbGVyOiBhc3luYyAoYXJncykgPT4ge1xuICogICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaChhcmdzLnF1ZXJ5KTtcbiAqICAgICAgIH0sXG4gKiAgICAgICByZW5kZXI6IFNlYXJjaFJlc3VsdHNDb21wb25lbnRcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZyb250ZW5kVG9vbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICB0b29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+XG4pOiBzdHJpbmcge1xuICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgXG4gIC8vIEFkZCB0aGUgdG9vbFxuICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbCh0b29sKTtcbiAgXG4gIC8vIFJlZ2lzdGVyIHRoZSByZW5kZXIgaWYgcHJvdmlkZWRcbiAgaWYgKHRvb2wucmVuZGVyKSB7XG4gICAgY29uc3QgY3VycmVudFJlbmRlcnMgPSBzZXJ2aWNlLmN1cnJlbnRSZW5kZXJUb29sQ2FsbHMoKTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gY3VycmVudFJlbmRlcnMuZmluZEluZGV4KChyOiBUb29sQ2FsbFJlbmRlcikgPT4gci5uYW1lID09PSB0b29sLm5hbWUpO1xuICAgIFxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVG9vbCB3aXRoIG5hbWUgJyR7dG9vbC5uYW1lfScgYWxyZWFkeSBoYXMgYSByZW5kZXIuIFNraXBwaW5nLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZW5kZXJFbnRyeTogQW5ndWxhclRvb2xDYWxsUmVuZGVyID0ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIHJlbmRlcjogdG9vbC5yZW5kZXJcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHNlcnZpY2Uuc2V0Q3VycmVudFJlbmRlclRvb2xDYWxscyhbLi4uY3VycmVudFJlbmRlcnMsIHJlbmRlckVudHJ5XSk7XG4gICAgfVxuICB9XG4gIFxuICAvLyBSZWdpc3RlciBjbGVhbnVwIHdpdGggQW5ndWxhcidzIERlc3Ryb3lSZWZcbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHJlbW92ZUZyb250ZW5kVG9vbChzZXJ2aWNlLCB0b29sLm5hbWUpO1xuICB9KTtcbiAgXG4gIHJldHVybiB0b29sLm5hbWU7XG59XG5cbi8qKlxuICogRXhwbGljaXRseSByZW1vdmVzIGEgZnJvbnRlbmQgdG9vbCBmcm9tIENvcGlsb3RLaXQuXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdG9vbCB0byByZW1vdmVcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlbW92ZUZyb250ZW5kVG9vbCh0aGlzLmNvcGlsb3RraXQsICdjYWxjdWxhdG9yJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb250ZW5kVG9vbChcbiAgc2VydmljZTogQ29waWxvdEtpdFNlcnZpY2UsXG4gIHRvb2xOYW1lOiBzdHJpbmdcbik6IHZvaWQge1xuICAvLyBSZW1vdmUgdGhlIHRvb2xcbiAgc2VydmljZS5jb3BpbG90a2l0LnJlbW92ZVRvb2wodG9vbE5hbWUpO1xuICBcbiAgLy8gUmVtb3ZlIHRoZSByZW5kZXIgaWYgaXQgZXhpc3RzXG4gIGNvbnN0IGN1cnJlbnRSZW5kZXJzID0gc2VydmljZS5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG4gIGNvbnN0IGZpbHRlcmVkID0gY3VycmVudFJlbmRlcnMuZmlsdGVyKChyOiBUb29sQ2FsbFJlbmRlcikgPT4gci5uYW1lICE9PSB0b29sTmFtZSk7XG4gIGlmIChmaWx0ZXJlZC5sZW5ndGggIT09IGN1cnJlbnRSZW5kZXJzLmxlbmd0aCkge1xuICAgIHNlcnZpY2Uuc2V0Q3VycmVudFJlbmRlclRvb2xDYWxscyhmaWx0ZXJlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnJvbnRlbmQgdG9vbCB3aXRoIGR5bmFtaWMgcGFyYW1ldGVycyB0aGF0IGNhbiBjaGFuZ2Ugb3ZlciB0aW1lLlxuICogVXNlcyBBbmd1bGFyIHNpZ25hbHMgZm9yIHJlYWN0aXZpdHkuXG4gKiBcbiAqIEBwYXJhbSBuYW1lIC0gVG9vbCBuYW1lXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBUb29sIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIFpvZCBzY2hlbWEgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBoYW5kbGVyIC0gU2lnbmFsIG9yIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSByZW5kZXIgLSBPcHRpb25hbCByZW5kZXIgY29tcG9uZW50IG9yIHRlbXBsYXRlXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB1cGRhdGUgYW5kIGRlc3Ryb3kgbWV0aG9kc1xuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSB0b29sQ29uZmlnID0gc2lnbmFsKHtcbiAqICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB0aGlzLnByb2Nlc3NEZWZhdWx0KGFyZ3MpXG4gKiAgIH0pO1xuICogICBcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgY29uc3QgdG9vbCA9IGNyZWF0ZUR5bmFtaWNGcm9udGVuZFRvb2woXG4gKiAgICAgICAncHJvY2Vzc29yJyxcbiAqICAgICAgICdQcm9jZXNzZXMgZGF0YScsXG4gKiAgICAgICB6Lm9iamVjdCh7IGRhdGE6IHouc3RyaW5nKCkgfSksXG4gKiAgICAgICAoKSA9PiB0aGlzLnRvb2xDb25maWcoKS5oYW5kbGVyXG4gKiAgICAgKTtcbiAqICAgICBcbiAqICAgICAvLyBMYXRlciwgdXBkYXRlIHRoZSBoYW5kbGVyXG4gKiAgICAgdGhpcy50b29sQ29uZmlnLnNldCh7XG4gKiAgICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB0aGlzLnByb2Nlc3NBZHZhbmNlZChhcmdzKVxuICogICAgIH0pO1xuICogICAgIHRvb2wudXBkYXRlKCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRHluYW1pY0Zyb250ZW5kVG9vbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKSxcbiAgcGFyYW1ldGVyczogei5ab2RTY2hlbWE8VD4sXG4gIGhhbmRsZXI6ICgpID0+ICgoYXJnczogVCkgPT4gUHJvbWlzZTxhbnk+KSxcbiAgcmVuZGVyPzogKCkgPT4gYW55XG4pOiB7IHVwZGF0ZTogKCkgPT4gdm9pZDsgZGVzdHJveTogKCkgPT4gdm9pZCB9IHtcbiAgY29uc3Qgc2VydmljZSA9IGluamVjdChDb3BpbG90S2l0U2VydmljZSk7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIFxuICBsZXQgaXNSZWdpc3RlcmVkID0gZmFsc2U7XG4gIFxuICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgLy8gUmVtb3ZlIG9sZCB0b29sIGlmIHJlZ2lzdGVyZWRcbiAgICBpZiAoaXNSZWdpc3RlcmVkKSB7XG4gICAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbChuYW1lKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIG5ldyB0b29sIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkZXNjID0gdHlwZW9mIGRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gZGVzY3JpcHRpb24oKSA6IGRlc2NyaXB0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRIYW5kbGVyID0gaGFuZGxlcigpO1xuICAgIGNvbnN0IGN1cnJlbnRSZW5kZXIgPSByZW5kZXIgPyByZW5kZXIoKSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICBjb25zdCB0b29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICAgIGhhbmRsZXI6IGN1cnJlbnRIYW5kbGVyLFxuICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdGhlIHRvb2xcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbCh0b29sKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgcmVuZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJzID0gc2VydmljZS5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG4gICAgICBjb25zdCByZW5kZXJFbnRyeTogQW5ndWxhclRvb2xDYWxsUmVuZGVyID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjdXJyZW50UmVuZGVycy5maW5kSW5kZXgoKHI6IFRvb2xDYWxsUmVuZGVyKSA9PiByLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBbLi4uY3VycmVudFJlbmRlcnNdO1xuICAgICAgICB1cGRhdGVkW2V4aXN0aW5nSW5kZXhdID0gcmVuZGVyRW50cnk7XG4gICAgICAgIHNlcnZpY2Uuc2V0Q3VycmVudFJlbmRlclRvb2xDYWxscyh1cGRhdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcnZpY2Uuc2V0Q3VycmVudFJlbmRlclRvb2xDYWxscyhbLi4uY3VycmVudFJlbmRlcnMsIHJlbmRlckVudHJ5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7XG4gIH07XG4gIFxuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmIChpc1JlZ2lzdGVyZWQpIHtcbiAgICAgIHJlbW92ZUZyb250ZW5kVG9vbChzZXJ2aWNlLCBuYW1lKTtcbiAgICAgIGlzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgXG4gIC8vIEluaXRpYWwgc2V0dXBcbiAgdXBkYXRlKCk7XG4gIFxuICAvLyBSZWdpc3RlciBjbGVhbnVwXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KGRlc3Ryb3kpO1xuICBcbiAgcmV0dXJuIHsgdXBkYXRlLCBkZXN0cm95IH07XG59Il19
@@ -1,293 +0,0 @@
1
- import { DestroyRef, inject, signal } from '@angular/core';
2
- import { CopilotKitService } from '../core/copilotkit.service';
3
- import { ToolCallStatus } from '../core/copilotkit.types';
4
- /**
5
- * Registers a human-in-the-loop tool that requires user interaction.
6
- * Must be called within an injection context.
7
- * Automatically cleans up when the component/service is destroyed.
8
- *
9
- * @param tool - The human-in-the-loop tool configuration
10
- * @returns The tool ID
11
- *
12
- * @example
13
- * ```typescript
14
- * export class ApprovalComponent {
15
- * toolId = registerHumanInTheLoop({
16
- * name: 'requireApproval',
17
- * description: 'Requires user approval',
18
- * args: z.object({ action: z.string() }),
19
- * render: ApprovalDialogComponent
20
- * });
21
- * }
22
- * ```
23
- */
24
- export function registerHumanInTheLoop(tool) {
25
- const service = inject(CopilotKitService);
26
- const destroyRef = inject(DestroyRef);
27
- // Create state management
28
- const statusSignal = signal(ToolCallStatus.InProgress);
29
- let resolvePromise = null;
30
- // Create respond function
31
- const respond = async (result) => {
32
- if (resolvePromise) {
33
- resolvePromise(result);
34
- statusSignal.set(ToolCallStatus.Complete);
35
- resolvePromise = null;
36
- }
37
- };
38
- // Create handler that returns a Promise
39
- const handler = async (_args) => {
40
- return new Promise((resolve) => {
41
- statusSignal.set(ToolCallStatus.Executing);
42
- resolvePromise = resolve;
43
- });
44
- };
45
- // Create enhanced render function
46
- const enhancedRender = createEnhancedRender(tool.render, statusSignal, respond);
47
- // Create the frontend tool
48
- const frontendTool = {
49
- ...tool,
50
- handler,
51
- render: enhancedRender
52
- };
53
- // Add the tool (returns void, so we use the tool name as ID)
54
- service.copilotkit.addTool(frontendTool);
55
- const toolId = frontendTool.name;
56
- // Register tool render if provided
57
- if (frontendTool.render) {
58
- service.registerToolRender(frontendTool.name, {
59
- name: frontendTool.name,
60
- render: frontendTool.render
61
- });
62
- }
63
- // Cleanup on destroy
64
- destroyRef.onDestroy(() => {
65
- service.copilotkit.removeTool(toolId);
66
- if (frontendTool.render) {
67
- service.unregisterToolRender(frontendTool.name);
68
- }
69
- });
70
- return toolId;
71
- }
72
- /**
73
- * Adds a human-in-the-loop tool with explicit service parameter.
74
- * Returns a cleanup function.
75
- *
76
- * @param service - The CopilotKitService instance
77
- * @param tool - The human-in-the-loop tool configuration
78
- * @returns Cleanup function to remove the tool
79
- *
80
- * @example
81
- * ```typescript
82
- * export class MyComponent implements OnInit, OnDestroy {
83
- * private cleanup?: () => void;
84
- *
85
- * constructor(private copilotkit: CopilotKitService) {}
86
- *
87
- * ngOnInit() {
88
- * this.cleanup = addHumanInTheLoop(this.copilotkit, {
89
- * name: 'requireApproval',
90
- * description: 'Requires user approval',
91
- * args: z.object({ action: z.string() }),
92
- * render: ApprovalDialogComponent
93
- * });
94
- * }
95
- *
96
- * ngOnDestroy() {
97
- * this.cleanup?.();
98
- * }
99
- * }
100
- * ```
101
- */
102
- export function addHumanInTheLoop(service, tool) {
103
- // Create state management
104
- const statusSignal = signal(ToolCallStatus.InProgress);
105
- let resolvePromise = null;
106
- // Create respond function
107
- const respond = async (result) => {
108
- if (resolvePromise) {
109
- resolvePromise(result);
110
- statusSignal.set(ToolCallStatus.Complete);
111
- resolvePromise = null;
112
- }
113
- };
114
- // Create handler that returns a Promise
115
- const handler = async (_args) => {
116
- return new Promise((resolve) => {
117
- statusSignal.set(ToolCallStatus.Executing);
118
- resolvePromise = resolve;
119
- });
120
- };
121
- // Create enhanced render function
122
- const enhancedRender = createEnhancedRender(tool.render, statusSignal, respond);
123
- // Create the frontend tool
124
- const frontendTool = {
125
- ...tool,
126
- handler,
127
- render: enhancedRender
128
- };
129
- // Add the tool (returns void, so we use the tool name as ID)
130
- service.copilotkit.addTool(frontendTool);
131
- const toolId = frontendTool.name;
132
- // Register tool render if provided
133
- if (frontendTool.render) {
134
- service.registerToolRender(frontendTool.name, {
135
- name: frontendTool.name,
136
- render: frontendTool.render
137
- });
138
- }
139
- // Return cleanup function
140
- return () => {
141
- service.copilotkit.removeTool(toolId);
142
- if (frontendTool.render) {
143
- service.unregisterToolRender(frontendTool.name);
144
- }
145
- };
146
- }
147
- /**
148
- * Creates a human-in-the-loop tool with dynamic update capabilities.
149
- *
150
- * @param service - The CopilotKitService instance
151
- * @param tool - The human-in-the-loop tool configuration
152
- * @returns Object with status signal, update and destroy methods
153
- *
154
- * @example
155
- * ```typescript
156
- * export class MyComponent {
157
- * humanInTheLoop = createHumanInTheLoop(this.copilotkit, {
158
- * name: 'requireApproval',
159
- * description: 'Requires user approval',
160
- * args: z.object({ action: z.string() }),
161
- * render: ApprovalDialogComponent
162
- * });
163
- *
164
- * updateDescription(newDesc: string) {
165
- * this.humanInTheLoop.update({ description: newDesc });
166
- * }
167
- *
168
- * ngOnDestroy() {
169
- * this.humanInTheLoop.destroy();
170
- * }
171
- * }
172
- * ```
173
- */
174
- export function createHumanInTheLoop(service, tool) {
175
- // Create state management
176
- const statusSignal = signal(ToolCallStatus.InProgress);
177
- let currentTool = { ...tool };
178
- let toolId = '';
179
- let resolvePromise = null;
180
- // Create respond function
181
- const respond = async (result) => {
182
- if (resolvePromise) {
183
- resolvePromise(result);
184
- statusSignal.set(ToolCallStatus.Complete);
185
- resolvePromise = null;
186
- }
187
- };
188
- // Create handler that returns a Promise
189
- const handler = async (_args) => {
190
- return new Promise((resolve) => {
191
- statusSignal.set(ToolCallStatus.Executing);
192
- resolvePromise = resolve;
193
- });
194
- };
195
- // Function to add the tool
196
- const addTool = () => {
197
- // Create enhanced render function
198
- const enhancedRender = createEnhancedRender(currentTool.render, statusSignal, respond);
199
- // Create the frontend tool
200
- const frontendTool = {
201
- ...currentTool,
202
- handler,
203
- render: enhancedRender
204
- };
205
- // Add tool (returns void, so we use the tool name as ID)
206
- service.copilotkit.addTool(frontendTool);
207
- toolId = frontendTool.name;
208
- // Register tool render if provided
209
- if (frontendTool.render) {
210
- service.registerToolRender(frontendTool.name, {
211
- name: frontendTool.name,
212
- render: frontendTool.render
213
- });
214
- }
215
- };
216
- // Initialize the tool
217
- addTool();
218
- return {
219
- status: statusSignal.asReadonly(),
220
- toolId,
221
- update: (updates) => {
222
- // Remove old tool
223
- service.copilotkit.removeTool(toolId);
224
- if (currentTool.render) {
225
- service.unregisterToolRender(currentTool.name);
226
- }
227
- // Update tool configuration
228
- currentTool = { ...currentTool, ...updates };
229
- // Re-add with new configuration
230
- addTool();
231
- },
232
- destroy: () => {
233
- service.copilotkit.removeTool(toolId);
234
- if (currentTool.render) {
235
- service.unregisterToolRender(currentTool.name);
236
- }
237
- }
238
- };
239
- }
240
- /**
241
- * Creates an enhanced render function that injects the respond function
242
- * when the status is 'executing'.
243
- */
244
- function createEnhancedRender(originalRender, _statusSignal, _respond) {
245
- // For component classes, we need to create a wrapper
246
- if (isComponentClass(originalRender)) {
247
- // Return a wrapper component factory
248
- // This is complex in Angular and would require dynamic component creation
249
- // For now, we'll return the original and rely on prop injection
250
- return originalRender;
251
- }
252
- // For templates, we can't easily wrap them
253
- // The template context will be enhanced in the render component
254
- return originalRender;
255
- }
256
- /**
257
- * Helper function to check if a value is a component class
258
- */
259
- function isComponentClass(value) {
260
- return typeof value === 'function' && value.prototype;
261
- }
262
- /**
263
- * Enhanced component wrapper for human-in-the-loop.
264
- * This would be used internally by the tool render component to inject
265
- * the respond function based on status.
266
- *
267
- * @internal
268
- */
269
- export function enhancePropsForHumanInTheLoop(props, status, respond) {
270
- if (status === ToolCallStatus.Executing && respond) {
271
- return {
272
- ...props,
273
- status: ToolCallStatus.Executing,
274
- respond
275
- };
276
- }
277
- if (status === ToolCallStatus.Complete) {
278
- return {
279
- ...props,
280
- status: ToolCallStatus.Complete,
281
- result: typeof props.result === 'string' ? props.result : '',
282
- respond: undefined
283
- };
284
- }
285
- // InProgress
286
- return {
287
- ...props,
288
- status: ToolCallStatus.InProgress,
289
- result: undefined,
290
- respond: undefined
291
- };
292
- }
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4taW4tdGhlLWxvb3AudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaHVtYW4taW4tdGhlLWxvb3AudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxjQUFjLEVBSWYsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsSUFBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLDBCQUEwQjtJQUMxQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQWlCLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxJQUFJLGNBQWMsR0FBdUMsSUFBSSxDQUFDO0lBRTlELDBCQUEwQjtJQUMxQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBZSxFQUFpQixFQUFFO1FBQ3ZELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBUSxFQUFvQixFQUFFO1FBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsR0FB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QU87U0FDa0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixNQUFNLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDL0IsTUFBTSxFQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTyxFQUFFLFNBQVM7U0FDTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhO0lBQ2IsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLE1BQU0sRUFBRSxjQUFjLENBQUMsVUFBVTtRQUNqQyxNQUFNLEVBQUUsU0FBUztRQUNqQixPQUFPLEVBQUUsU0FBUztLQUNPLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFxuICBEZXN0cm95UmVmLCBcbiAgaW5qZWN0LCBcbiAgc2lnbmFsLCBcbiAgU2lnbmFsLFxuICBUeXBlLFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9jb3BpbG90a2l0LnNlcnZpY2UnO1xuaW1wb3J0IHsgXG4gIEFuZ3VsYXJIdW1hbkluVGhlTG9vcCwgXG4gIFRvb2xDYWxsU3RhdHVzLFxuICBIdW1hbkluVGhlTG9vcFN0YXRlLFxuICBIdW1hbkluVGhlTG9vcFByb3BzLFxuICBBbmd1bGFyRnJvbnRlbmRUb29sXG59IGZyb20gJy4uL2NvcmUvY29waWxvdGtpdC50eXBlcyc7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgaHVtYW4taW4tdGhlLWxvb3AgdG9vbCB0aGF0IHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24uXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKiBBdXRvbWF0aWNhbGx5IGNsZWFucyB1cCB3aGVuIHRoZSBjb21wb25lbnQvc2VydmljZSBpcyBkZXN0cm95ZWQuXG4gKiBcbiAqIEBwYXJhbSB0b29sIC0gVGhlIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgVGhlIHRvb2wgSURcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBBcHByb3ZhbENvbXBvbmVudCB7XG4gKiAgIHRvb2xJZCA9IHJlZ2lzdGVySHVtYW5JblRoZUxvb3Aoe1xuICogICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgYXJnczogei5vYmplY3QoeyBhY3Rpb246IHouc3RyaW5nKCkgfSksXG4gKiAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJIdW1hbkluVGhlTG9vcDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6IHN0cmluZyB7XG4gIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29waWxvdEtpdFNlcnZpY2UpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IHJlc29sdmVQcm9taXNlOiAoKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENyZWF0ZSByZXNwb25kIGZ1bmN0aW9uXG4gIGNvbnN0IHJlc3BvbmQgPSBhc3luYyAocmVzdWx0OiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZShyZXN1bHQpO1xuICAgICAgc3RhdHVzU2lnbmFsLnNldChUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gQ3JlYXRlIGhhbmRsZXIgdGhhdCByZXR1cm5zIGEgUHJvbWlzZVxuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKF9hcmdzOiBUKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uXG4gIGNvbnN0IGVuaGFuY2VkUmVuZGVyID0gY3JlYXRlRW5oYW5jZWRSZW5kZXIodG9vbC5yZW5kZXIsIHN0YXR1c1NpZ25hbCwgcmVzcG9uZCk7XG4gIFxuICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgY29uc3QgZnJvbnRlbmRUb29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+ID0ge1xuICAgIC4uLnRvb2wsXG4gICAgaGFuZGxlcixcbiAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gIH07XG4gIFxuICAvLyBBZGQgdGhlIHRvb2wgKHJldHVybnMgdm9pZCwgc28gd2UgdXNlIHRoZSB0b29sIG5hbWUgYXMgSUQpXG4gIHNlcnZpY2UuY29waWxvdGtpdC5hZGRUb29sKGZyb250ZW5kVG9vbCk7XG4gIGNvbnN0IHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICBcbiAgLy8gUmVnaXN0ZXIgdG9vbCByZW5kZXIgaWYgcHJvdmlkZWRcbiAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICBzZXJ2aWNlLnJlZ2lzdGVyVG9vbFJlbmRlcihmcm9udGVuZFRvb2wubmFtZSwge1xuICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8gQ2xlYW51cCBvbiBkZXN0cm95XG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgIGlmIChmcm9udGVuZFRvb2wucmVuZGVyKSB7XG4gICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIHRvb2xJZDtcbn1cblxuLyoqXG4gKiBBZGRzIGEgaHVtYW4taW4tdGhlLWxvb3AgdG9vbCB3aXRoIGV4cGxpY2l0IHNlcnZpY2UgcGFyYW1ldGVyLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24uXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSB0b29sXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gKiAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gKiAgIFxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICogICBcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgdGhpcy5jbGVhbnVwID0gYWRkSHVtYW5JblRoZUxvb3AodGhpcy5jb3BpbG90a2l0LCB7XG4gKiAgICAgICBuYW1lOiAncmVxdWlyZUFwcHJvdmFsJyxcbiAqICAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgICBhcmdzOiB6Lm9iamVjdCh7IGFjdGlvbjogei5zdHJpbmcoKSB9KSxcbiAqICAgICAgIHJlbmRlcjogQXBwcm92YWxEaWFsb2dDb21wb25lbnRcbiAqICAgICB9KTtcbiAqICAgfVxuICogICBcbiAqICAgbmdPbkRlc3Ryb3koKSB7XG4gKiAgICAgdGhpcy5jbGVhbnVwPy4oKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIdW1hbkluVGhlTG9vcDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgdG9vbDogQW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+XG4pOiAoKSA9PiB2b2lkIHtcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IHJlc29sdmVQcm9taXNlOiAoKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENyZWF0ZSByZXNwb25kIGZ1bmN0aW9uXG4gIGNvbnN0IHJlc3BvbmQgPSBhc3luYyAocmVzdWx0OiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZShyZXN1bHQpO1xuICAgICAgc3RhdHVzU2lnbmFsLnNldChUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gQ3JlYXRlIGhhbmRsZXIgdGhhdCByZXR1cm5zIGEgUHJvbWlzZVxuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKF9hcmdzOiBUKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uXG4gIGNvbnN0IGVuaGFuY2VkUmVuZGVyID0gY3JlYXRlRW5oYW5jZWRSZW5kZXIodG9vbC5yZW5kZXIsIHN0YXR1c1NpZ25hbCwgcmVzcG9uZCk7XG4gIFxuICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgY29uc3QgZnJvbnRlbmRUb29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+ID0ge1xuICAgIC4uLnRvb2wsXG4gICAgaGFuZGxlcixcbiAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gIH07XG4gIFxuICAvLyBBZGQgdGhlIHRvb2wgKHJldHVybnMgdm9pZCwgc28gd2UgdXNlIHRoZSB0b29sIG5hbWUgYXMgSUQpXG4gIHNlcnZpY2UuY29waWxvdGtpdC5hZGRUb29sKGZyb250ZW5kVG9vbCk7XG4gIGNvbnN0IHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICBcbiAgLy8gUmVnaXN0ZXIgdG9vbCByZW5kZXIgaWYgcHJvdmlkZWRcbiAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICBzZXJ2aWNlLnJlZ2lzdGVyVG9vbFJlbmRlcihmcm9udGVuZFRvb2wubmFtZSwge1xuICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgIGlmIChmcm9udGVuZFRvb2wucmVuZGVyKSB7XG4gICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgd2l0aCBkeW5hbWljIHVwZGF0ZSBjYXBhYmlsaXRpZXMuXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN0YXR1cyBzaWduYWwsIHVwZGF0ZSBhbmQgZGVzdHJveSBtZXRob2RzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBodW1hbkluVGhlTG9vcCA9IGNyZWF0ZUh1bWFuSW5UaGVMb29wKHRoaXMuY29waWxvdGtpdCwge1xuICogICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgYXJnczogei5vYmplY3QoeyBhY3Rpb246IHouc3RyaW5nKCkgfSksXG4gKiAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICB9KTtcbiAqICAgXG4gKiAgIHVwZGF0ZURlc2NyaXB0aW9uKG5ld0Rlc2M6IHN0cmluZykge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AudXBkYXRlKHsgZGVzY3JpcHRpb246IG5ld0Rlc2MgfSk7XG4gKiAgIH1cbiAqICAgXG4gKiAgIG5nT25EZXN0cm95KCkge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AuZGVzdHJveSgpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh1bWFuSW5UaGVMb29wPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6IEh1bWFuSW5UaGVMb29wU3RhdGUgJiB7IHVwZGF0ZTogKHVwZGF0ZXM6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PikgPT4gdm9pZCB9IHtcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IGN1cnJlbnRUb29sID0geyAuLi50b29sIH07XG4gIGxldCB0b29sSWQ6IHN0cmluZyA9ICcnO1xuICBsZXQgcmVzb2x2ZVByb21pc2U6ICgocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8gQ3JlYXRlIHJlc3BvbmQgZnVuY3Rpb25cbiAgY29uc3QgcmVzcG9uZCA9IGFzeW5jIChyZXN1bHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAocmVzb2x2ZVByb21pc2UpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHJlc3VsdCk7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgaGFuZGxlciB0aGF0IHJldHVybnMgYSBQcm9taXNlXG4gIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoX2FyZ3M6IFQpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHN0YXR1c1NpZ25hbC5zZXQoVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfTtcbiAgXG4gIC8vIEZ1bmN0aW9uIHRvIGFkZCB0aGUgdG9vbFxuICBjb25zdCBhZGRUb29sID0gKCkgPT4ge1xuICAgIC8vIENyZWF0ZSBlbmhhbmNlZCByZW5kZXIgZnVuY3Rpb25cbiAgICBjb25zdCBlbmhhbmNlZFJlbmRlciA9IGNyZWF0ZUVuaGFuY2VkUmVuZGVyKGN1cnJlbnRUb29sLnJlbmRlciwgc3RhdHVzU2lnbmFsLCByZXNwb25kKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgICBjb25zdCBmcm9udGVuZFRvb2w6IEFuZ3VsYXJGcm9udGVuZFRvb2w8VD4gPSB7XG4gICAgICAuLi5jdXJyZW50VG9vbCxcbiAgICAgIGhhbmRsZXIsXG4gICAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdG9vbCAocmV0dXJucyB2b2lkLCBzbyB3ZSB1c2UgdGhlIHRvb2wgbmFtZSBhcyBJRClcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbChmcm9udGVuZFRvb2wpO1xuICAgIHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHRvb2wgcmVuZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICAgIHNlcnZpY2UucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lLCB7XG4gICAgICAgIG5hbWU6IGZyb250ZW5kVG9vbC5uYW1lLFxuICAgICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgXG4gIC8vIEluaXRpYWxpemUgdGhlIHRvb2xcbiAgYWRkVG9vbCgpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHN0YXR1c1NpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgdG9vbElkLFxuICAgIHVwZGF0ZTogKHVwZGF0ZXM6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PikgPT4ge1xuICAgICAgLy8gUmVtb3ZlIG9sZCB0b29sXG4gICAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgICAgaWYgKGN1cnJlbnRUb29sLnJlbmRlcikge1xuICAgICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGN1cnJlbnRUb29sLm5hbWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdG9vbCBjb25maWd1cmF0aW9uXG4gICAgICBjdXJyZW50VG9vbCA9IHsgLi4uY3VycmVudFRvb2wsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIFxuICAgICAgLy8gUmUtYWRkIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgIGFkZFRvb2woKTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgIHNlcnZpY2UuY29waWxvdGtpdC5yZW1vdmVUb29sKHRvb2xJZCk7XG4gICAgICBpZiAoY3VycmVudFRvb2wucmVuZGVyKSB7XG4gICAgICAgIHNlcnZpY2UudW5yZWdpc3RlclRvb2xSZW5kZXIoY3VycmVudFRvb2wubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgaW5qZWN0cyB0aGUgcmVzcG9uZCBmdW5jdGlvblxuICogd2hlbiB0aGUgc3RhdHVzIGlzICdleGVjdXRpbmcnLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbmhhbmNlZFJlbmRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9yaWdpbmFsUmVuZGVyOiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxIdW1hbkluVGhlTG9vcFByb3BzPFQ+PixcbiAgX3N0YXR1c1NpZ25hbDogU2lnbmFsPFRvb2xDYWxsU3RhdHVzPixcbiAgX3Jlc3BvbmQ6IChyZXN1bHQ6IHVua25vd24pID0+IFByb21pc2U8dm9pZD5cbik6IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAvLyBGb3IgY29tcG9uZW50IGNsYXNzZXMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlclxuICBpZiAoaXNDb21wb25lbnRDbGFzcyhvcmlnaW5hbFJlbmRlcikpIHtcbiAgICAvLyBSZXR1cm4gYSB3cmFwcGVyIGNvbXBvbmVudCBmYWN0b3J5XG4gICAgLy8gVGhpcyBpcyBjb21wbGV4IGluIEFuZ3VsYXIgYW5kIHdvdWxkIHJlcXVpcmUgZHluYW1pYyBjb21wb25lbnQgY3JlYXRpb25cbiAgICAvLyBGb3Igbm93LCB3ZSdsbCByZXR1cm4gdGhlIG9yaWdpbmFsIGFuZCByZWx5IG9uIHByb3AgaW5qZWN0aW9uXG4gICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyO1xuICB9XG4gIFxuICAvLyBGb3IgdGVtcGxhdGVzLCB3ZSBjYW4ndCBlYXNpbHkgd3JhcCB0aGVtXG4gIC8vIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IHdpbGwgYmUgZW5oYW5jZWQgaW4gdGhlIHJlbmRlciBjb21wb25lbnRcbiAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgY29tcG9uZW50IGNsYXNzXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcG9uZW50Q2xhc3ModmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIEVuaGFuY2VkIGNvbXBvbmVudCB3cmFwcGVyIGZvciBodW1hbi1pbi10aGUtbG9vcC5cbiAqIFRoaXMgd291bGQgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB0b29sIHJlbmRlciBjb21wb25lbnQgdG8gaW5qZWN0XG4gKiB0aGUgcmVzcG9uZCBmdW5jdGlvbiBiYXNlZCBvbiBzdGF0dXMuXG4gKiBcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5oYW5jZVByb3BzRm9ySHVtYW5JblRoZUxvb3A8VD4oXG4gIHByb3BzOiBIdW1hbkluVGhlTG9vcFByb3BzPFQ+LFxuICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLFxuICByZXNwb25kPzogKHJlc3VsdDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPlxuKTogSHVtYW5JblRoZUxvb3BQcm9wczxUPiB7XG4gIGlmIChzdGF0dXMgPT09IFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyAmJiByZXNwb25kKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc3RhdHVzOiBUb29sQ2FsbFN0YXR1cy5FeGVjdXRpbmcsXG4gICAgICByZXNwb25kXG4gICAgfSBhcyBIdW1hbkluVGhlTG9vcFByb3BzPFQ+O1xuICB9XG4gIFxuICBpZiAoc3RhdHVzID09PSBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuQ29tcGxldGUsXG4gICAgICByZXN1bHQ6IHR5cGVvZiBwcm9wcy5yZXN1bHQgPT09ICdzdHJpbmcnID8gcHJvcHMucmVzdWx0IDogJycsXG4gICAgICByZXNwb25kOiB1bmRlZmluZWRcbiAgICB9IGFzIEh1bWFuSW5UaGVMb29wUHJvcHM8VD47XG4gIH1cbiAgXG4gIC8vIEluUHJvZ3Jlc3NcbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLkluUHJvZ3Jlc3MsXG4gICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgcmVzcG9uZDogdW5kZWZpbmVkXG4gIH0gYXMgSHVtYW5JblRoZUxvb3BQcm9wczxUPjtcbn0iXX0=
@@ -1,33 +0,0 @@
1
- import { OnDestroy } from '@angular/core';
2
- import { ChangeDetectorRef } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export declare class TooltipContentComponent {
5
- private cdr;
6
- text: string;
7
- private _position;
8
- get position(): 'above' | 'below' | 'left' | 'right';
9
- set position(value: 'above' | 'below' | 'left' | 'right');
10
- constructor(cdr: ChangeDetectorRef);
11
- static ɵfac: i0.ɵɵFactoryDeclaration<TooltipContentComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<TooltipContentComponent, "copilot-tooltip-content", never, {}, {}, never, never, true, never>;
13
- }
14
- export declare class CopilotTooltipDirective implements OnDestroy {
15
- tooltipText: string;
16
- tooltipPosition: 'above' | 'below' | 'left' | 'right';
17
- tooltipDelay: number;
18
- private overlay;
19
- private overlayPositionBuilder;
20
- private elementRef;
21
- private viewContainerRef;
22
- private overlayRef?;
23
- private tooltipTimeout?;
24
- private originalTitle?;
25
- onMouseEnter(): void;
26
- onMouseLeave(): void;
27
- private show;
28
- private hide;
29
- private getPositions;
30
- ngOnDestroy(): void;
31
- static ɵfac: i0.ɵɵFactoryDeclaration<CopilotTooltipDirective, never>;
32
- static ɵdir: i0.ɵɵDirectiveDeclaration<CopilotTooltipDirective, "[copilotTooltip]", never, { "tooltipText": { "alias": "copilotTooltip"; "required": false; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; }; "tooltipDelay": { "alias": "tooltipDelay"; "required": false; }; }, {}, never, never, true, never>;
33
- }
@@ -1,34 +0,0 @@
1
- import { TemplateRef, ViewContainerRef, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
- import { Type } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @internal - This component is for internal use only.
6
- * Simple slot component for rendering custom content or defaults.
7
- * Supports templates and components only.
8
- *
9
- * @example
10
- * ```html
11
- * <!-- With template -->
12
- * <copilot-slot [slot]="sendButtonTemplate" [context]="buttonContext">
13
- * <button class="default-btn">Default</button>
14
- * </copilot-slot>
15
- * ```
16
- */
17
- export declare class CopilotSlotComponent implements OnInit, OnChanges {
18
- private viewContainer;
19
- private cdr;
20
- slot?: TemplateRef<any> | Type<any>;
21
- context?: any;
22
- defaultComponent?: Type<any>;
23
- outputs?: Record<string, (event: any) => void>;
24
- private slotContainer;
25
- private componentRef?;
26
- constructor(viewContainer: ViewContainerRef, cdr: ChangeDetectorRef);
27
- ngOnInit(): void;
28
- ngOnChanges(changes: SimpleChanges): void;
29
- isTemplate(value: any): value is TemplateRef<any>;
30
- private renderSlot;
31
- private updateComponentProps;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<CopilotSlotComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<CopilotSlotComponent, "copilot-slot", never, { "slot": { "alias": "slot"; "required": false; }; "context": { "alias": "context"; "required": false; }; "defaultComponent": { "alias": "defaultComponent"; "required": false; }; "outputs": { "alias": "outputs"; "required": false; }; }, {}, never, ["*"], true, never>;
34
- }