@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,222 +0,0 @@
1
- import { Component, Input, ViewContainerRef, inject, ViewChild, TemplateRef, ChangeDetectionStrategy, signal, } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { ToolCallStatus } from "@copilotkitnext/core";
4
- import { CopilotKitService } from "../../core/copilotkit.service";
5
- import { partialJSONParse } from "@copilotkitnext/shared";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- /**
9
- * Component for rendering all tool calls for an assistant message.
10
- * This component iterates through the message's tool calls and renders each one
11
- * using the registered render functions in CopilotKitService.
12
- */
13
- export class CopilotChatToolCallsViewComponent {
14
- message;
15
- messages = [];
16
- isLoading = false;
17
- container;
18
- copilotkit = inject(CopilotKitService, {
19
- optional: true,
20
- });
21
- componentRefs = new Map();
22
- templateCache = new Map();
23
- // Signals for reactive state
24
- messageSignal = signal(null);
25
- messagesSignal = signal([]);
26
- isLoadingSignal = signal(false);
27
- ngAfterViewInit() {
28
- this.renderAllToolCalls();
29
- }
30
- ngOnChanges(changes) {
31
- if (changes["message"]) {
32
- this.messageSignal.set(this.message);
33
- }
34
- if (changes["messages"]) {
35
- this.messagesSignal.set(this.messages);
36
- }
37
- if (changes["isLoading"]) {
38
- this.isLoadingSignal.set(this.isLoading);
39
- }
40
- this.renderAllToolCalls();
41
- }
42
- ngOnDestroy() {
43
- // Clean up all component refs
44
- this.componentRefs.forEach((ref) => ref.destroy());
45
- this.componentRefs.clear();
46
- this.templateCache.clear();
47
- }
48
- getTemplateForToolCall(toolCall) {
49
- return this.templateCache.get(toolCall.id) || null;
50
- }
51
- renderAllToolCalls() {
52
- const message = this.messageSignal();
53
- if (!message || !message.toolCalls || message.toolCalls.length === 0) {
54
- return;
55
- }
56
- // Clear existing renders
57
- this.componentRefs.forEach((ref) => ref.destroy());
58
- this.componentRefs.clear();
59
- this.templateCache.clear();
60
- if (!this.copilotkit || !this.container) {
61
- return;
62
- }
63
- const messages = this.messagesSignal();
64
- const isLoading = this.isLoadingSignal();
65
- // Render each tool call
66
- message.toolCalls.forEach((toolCall) => {
67
- const toolMessage = messages.find((m) => m.role === "tool" && m.toolCallId === toolCall.id);
68
- this.renderSingleToolCall(toolCall, toolMessage, isLoading);
69
- });
70
- }
71
- renderSingleToolCall(toolCall, toolMessage, isLoading) {
72
- if (!this.copilotkit) {
73
- return;
74
- }
75
- // Get current render tool calls
76
- const currentRenderToolCalls = this.copilotkit.currentRenderToolCalls();
77
- // Find the render config for this tool call by name
78
- // Also check for wildcard (*) renders if no exact match
79
- const renderConfig = currentRenderToolCalls.find((rc) => rc.name === toolCall.function.name) || currentRenderToolCalls.find((rc) => rc.name === "*");
80
- if (!renderConfig) {
81
- return;
82
- }
83
- // Parse the arguments if they're a string
84
- const args = partialJSONParse(toolCall.function.arguments);
85
- // Determine status
86
- let status;
87
- if (toolMessage) {
88
- status = ToolCallStatus.Complete;
89
- }
90
- else if (isLoading) {
91
- status = ToolCallStatus.InProgress;
92
- }
93
- else {
94
- status = ToolCallStatus.Complete;
95
- }
96
- // Create props based on status - use discriminated union properly
97
- let props;
98
- if (status === ToolCallStatus.InProgress) {
99
- props = {
100
- name: toolCall.function.name,
101
- description: "",
102
- args: args, // Partial args for InProgress
103
- status: ToolCallStatus.InProgress,
104
- result: undefined,
105
- };
106
- }
107
- else {
108
- // Complete status
109
- props = {
110
- name: toolCall.function.name,
111
- description: "",
112
- args: args, // Full args for Complete
113
- status: ToolCallStatus.Complete,
114
- result: toolMessage?.content || "",
115
- };
116
- }
117
- // Check if render is a Component class or TemplateRef
118
- if (this.isComponentClass(renderConfig.render)) {
119
- // Create component dynamically
120
- this.renderComponent(toolCall.id, renderConfig.render, props);
121
- }
122
- else if (this.isTemplateRef(renderConfig.render)) {
123
- // Use template
124
- this.renderTemplate(toolCall.id, renderConfig.render, props);
125
- }
126
- }
127
- renderComponent(toolCallId, componentClass, props) {
128
- if (!this.container) {
129
- return;
130
- }
131
- // Create the component
132
- const componentRef = this.container.createComponent(componentClass);
133
- this.componentRefs.set(toolCallId, componentRef);
134
- // Determine declared inputs to avoid Angular NG0303 console errors
135
- const cmpDef = componentClass.ɵcmp;
136
- const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
137
- // Prefer a single 'props' input if declared
138
- if (declaredInputs.has('props')) {
139
- componentRef.setInput('props', props);
140
- }
141
- else {
142
- // Otherwise, set only inputs that the component actually declares
143
- for (const [key, value] of Object.entries(props)) {
144
- if (declaredInputs.has(key)) {
145
- componentRef.setInput(key, value);
146
- }
147
- }
148
- }
149
- // Trigger change detection
150
- componentRef.changeDetectorRef.detectChanges();
151
- }
152
- renderTemplate(toolCallId, template, props) {
153
- this.templateCache.set(toolCallId, {
154
- template,
155
- context: {
156
- $implicit: props,
157
- name: props.name,
158
- description: props.description,
159
- args: props.args,
160
- status: props.status,
161
- result: props.result,
162
- },
163
- });
164
- }
165
- isComponentClass(value) {
166
- return typeof value === "function" && value.prototype;
167
- }
168
- isTemplateRef(value) {
169
- return value instanceof TemplateRef;
170
- }
171
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolCallsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
172
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatToolCallsViewComponent, isStandalone: true, selector: "copilot-chat-tool-calls-view", inputs: { message: "message", messages: "messages", isLoading: "isLoading" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: `
173
- @for (toolCall of message?.toolCalls ?? []; track toolCall.id) {
174
- <ng-container>
175
- <ng-container #dynamicContainer></ng-container>
176
- <ng-container *ngIf="getTemplateForToolCall(toolCall) as templateData">
177
- <ng-container
178
- *ngTemplateOutlet="
179
- templateData.template;
180
- context: templateData.context
181
- "
182
- ></ng-container>
183
- </ng-container>
184
- </ng-container>
185
- }
186
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
187
- }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolCallsViewComponent, decorators: [{
189
- type: Component,
190
- args: [{
191
- selector: "copilot-chat-tool-calls-view",
192
- standalone: true,
193
- imports: [CommonModule],
194
- changeDetection: ChangeDetectionStrategy.OnPush,
195
- template: `
196
- @for (toolCall of message?.toolCalls ?? []; track toolCall.id) {
197
- <ng-container>
198
- <ng-container #dynamicContainer></ng-container>
199
- <ng-container *ngIf="getTemplateForToolCall(toolCall) as templateData">
200
- <ng-container
201
- *ngTemplateOutlet="
202
- templateData.template;
203
- context: templateData.context
204
- "
205
- ></ng-container>
206
- </ng-container>
207
- </ng-container>
208
- }
209
- `,
210
- }]
211
- }], propDecorators: { message: [{
212
- type: Input,
213
- args: [{ required: true }]
214
- }], messages: [{
215
- type: Input
216
- }], isLoading: [{
217
- type: Input
218
- }], container: [{
219
- type: ViewChild,
220
- args: ["dynamicContainer", { read: ViewContainerRef }]
221
- }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixFQUVoQixNQUFNLEVBQ04sU0FBUyxFQUlULFdBQVcsRUFFWCx1QkFBdUIsRUFDdkIsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQU0xRDs7OztHQUlHO0FBc0JILE1BQU0sT0FBTyxpQ0FBaUM7SUFHakIsT0FBTyxDQUFvQjtJQUM3QyxRQUFRLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFHbkIsU0FBUyxDQUFvQjtJQUU3QixVQUFVLEdBQTZCLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtRQUN2RSxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNLLGFBQWEsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxhQUFhLEdBR2pCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCw2QkFBNkI7SUFDckIsYUFBYSxHQUFHLE1BQU0sQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBWSxFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLGVB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TyxhQUFhLENBQUMsS0FBVTtRQUM5QixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDdEMsQ0FBQzt3R0FsTlUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsZ1FBT0wsZ0JBQWdCLGtEQXZCN0M7Ozs7Ozs7Ozs7Ozs7O0dBY1QsMkRBaEJTLFlBQVk7OzRGQWtCWCxpQ0FBaUM7a0JBckI3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7aUJBQ0Y7OEJBSTRCLE9BQU87c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0UsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgaW5qZWN0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2lzdGFudE1lc3NhZ2UsXG4gIE1lc3NhZ2UsXG4gIFRvb2xDYWxsLFxuICBUb29sTWVzc2FnZSxcbn0gZnJvbSBcIkBhZy11aS9jb3JlXCI7XG5pbXBvcnQgeyBUb29sQ2FsbFN0YXR1cyB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvY29yZVwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9jb3BpbG90a2l0LnNlcnZpY2VcIjtcbmltcG9ydCB7IHBhcnRpYWxKU09OUGFyc2UgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUge1xuICBUb29sQ2FsbFByb3BzLFxuICBUb29sQ2FsbFJlbmRlcixcbn0gZnJvbSBcIi4uLy4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgcmVuZGVyaW5nIGFsbCB0b29sIGNhbGxzIGZvciBhbiBhc3Npc3RhbnQgbWVzc2FnZS5cbiAqIFRoaXMgY29tcG9uZW50IGl0ZXJhdGVzIHRocm91Z2ggdGhlIG1lc3NhZ2UncyB0b29sIGNhbGxzIGFuZCByZW5kZXJzIGVhY2ggb25lXG4gKiB1c2luZyB0aGUgcmVnaXN0ZXJlZCByZW5kZXIgZnVuY3Rpb25zIGluIENvcGlsb3RLaXRTZXJ2aWNlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlld1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGZvciAodG9vbENhbGwgb2YgbWVzc2FnZT8udG9vbENhbGxzID8/IFtdOyB0cmFjayB0b29sQ2FsbC5pZCkge1xuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZHluYW1pY0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlRm9yVG9vbENhbGwodG9vbENhbGwpIGFzIHRlbXBsYXRlRGF0YVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIHRlbXBsYXRlRGF0YS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDogdGVtcGxhdGVEYXRhLmNvbnRleHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sQ2FsbHNWaWV3Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbWVzc2FnZSE6IEFzc2lzdGFudE1lc3NhZ2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgQElucHV0KCkgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZChcImR5bmFtaWNDb250YWluZXJcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHByaXZhdGUgY29udGFpbmVyPzogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlIHwgbnVsbCA9IGluamVjdChDb3BpbG90S2l0U2VydmljZSwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWZzOiBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdGVtcGxhdGVDYWNoZTogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBjb250ZXh0OiBhbnkgfVxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIC8vIFNpZ25hbHMgZm9yIHJlYWN0aXZlIHN0YXRlXG4gIHByaXZhdGUgbWVzc2FnZVNpZ25hbCA9IHNpZ25hbDxBc3Npc3RhbnRNZXNzYWdlIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgbWVzc2FnZXNTaWduYWwgPSBzaWduYWw8TWVzc2FnZVtdPihbXSk7XG4gIHByaXZhdGUgaXNMb2FkaW5nU2lnbmFsID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJBbGxUb29sQ2FsbHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcIm1lc3NhZ2VcIl0pIHtcbiAgICAgIHRoaXMubWVzc2FnZVNpZ25hbC5zZXQodGhpcy5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJtZXNzYWdlc1wiXSkge1xuICAgICAgdGhpcy5tZXNzYWdlc1NpZ25hbC5zZXQodGhpcy5tZXNzYWdlcyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiaXNMb2FkaW5nXCJdKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1NpZ25hbC5zZXQodGhpcy5pc0xvYWRpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyQWxsVG9vbENhbGxzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbiB1cCBhbGwgY29tcG9uZW50IHJlZnNcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZm9yRWFjaCgocmVmKSA9PiByZWYuZGVzdHJveSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuY2xlYXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIGdldFRlbXBsYXRlRm9yVG9vbENhbGwoXG4gICAgdG9vbENhbGw6IFRvb2xDYWxsXG4gICk6IHsgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IGNvbnRleHQ6IGFueSB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVDYWNoZS5nZXQodG9vbENhbGwuaWQpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFsbFRvb2xDYWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlU2lnbmFsKCk7XG4gICAgaWYgKCFtZXNzYWdlIHx8ICFtZXNzYWdlLnRvb2xDYWxscyB8fCBtZXNzYWdlLnRvb2xDYWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBleGlzdGluZyByZW5kZXJzXG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmZvckVhY2goKHJlZikgPT4gcmVmLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUNhY2hlLmNsZWFyKCk7XG5cbiAgICBpZiAoIXRoaXMuY29waWxvdGtpdCB8fCAhdGhpcy5jb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZXNTaWduYWwoKTtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZ1NpZ25hbCgpO1xuXG4gICAgLy8gUmVuZGVyIGVhY2ggdG9vbCBjYWxsXG4gICAgbWVzc2FnZS50b29sQ2FsbHMuZm9yRWFjaCgodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xNZXNzYWdlID0gbWVzc2FnZXMuZmluZChcbiAgICAgICAgKG0pID0+XG4gICAgICAgICAgbS5yb2xlID09PSBcInRvb2xcIiAmJiAobSBhcyBUb29sTWVzc2FnZSkudG9vbENhbGxJZCA9PT0gdG9vbENhbGwuaWRcbiAgICAgICkgYXMgVG9vbE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMucmVuZGVyU2luZ2xlVG9vbENhbGwodG9vbENhbGwsIHRvb2xNZXNzYWdlLCBpc0xvYWRpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTaW5nbGVUb29sQ2FsbChcbiAgICB0b29sQ2FsbDogVG9vbENhbGwsXG4gICAgdG9vbE1lc3NhZ2U6IFRvb2xNZXNzYWdlIHwgdW5kZWZpbmVkLFxuICAgIGlzTG9hZGluZzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29waWxvdGtpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IHJlbmRlciB0b29sIGNhbGxzXG4gICAgY29uc3QgY3VycmVudFJlbmRlclRvb2xDYWxscyA9IHRoaXMuY29waWxvdGtpdC5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG5cbiAgICAvLyBGaW5kIHRoZSByZW5kZXIgY29uZmlnIGZvciB0aGlzIHRvb2wgY2FsbCBieSBuYW1lXG4gICAgLy8gQWxzbyBjaGVjayBmb3Igd2lsZGNhcmQgKCopIHJlbmRlcnMgaWYgbm8gZXhhY3QgbWF0Y2hcbiAgICBjb25zdCByZW5kZXJDb25maWcgPVxuICAgICAgY3VycmVudFJlbmRlclRvb2xDYWxscy5maW5kKFxuICAgICAgICAocmM6IFRvb2xDYWxsUmVuZGVyKSA9PiByYy5uYW1lID09PSB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lXG4gICAgICApIHx8IGN1cnJlbnRSZW5kZXJUb29sQ2FsbHMuZmluZCgocmM6IFRvb2xDYWxsUmVuZGVyKSA9PiByYy5uYW1lID09PSBcIipcIik7XG5cbiAgICBpZiAoIXJlbmRlckNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHMgaWYgdGhleSdyZSBhIHN0cmluZ1xuICAgIGNvbnN0IGFyZ3MgPSBwYXJ0aWFsSlNPTlBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICAvLyBEZXRlcm1pbmUgc3RhdHVzXG4gICAgbGV0IHN0YXR1czogVG9vbENhbGxTdGF0dXM7XG4gICAgaWYgKHRvb2xNZXNzYWdlKSB7XG4gICAgICBzdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZTtcbiAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgc3RhdHVzID0gVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gVG9vbENhbGxTdGF0dXMuQ29tcGxldGU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHByb3BzIGJhc2VkIG9uIHN0YXR1cyAtIHVzZSBkaXNjcmltaW5hdGVkIHVuaW9uIHByb3Blcmx5XG4gICAgbGV0IHByb3BzOiBUb29sQ2FsbFByb3BzO1xuICAgIGlmIChzdGF0dXMgPT09IFRvb2xDYWxsU3RhdHVzLkluUHJvZ3Jlc3MpIHtcbiAgICAgIHByb3BzID0ge1xuICAgICAgICBuYW1lOiB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgYXJnczogYXJncywgLy8gUGFydGlhbCBhcmdzIGZvciBJblByb2dyZXNzXG4gICAgICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcyxcbiAgICAgICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb21wbGV0ZSBzdGF0dXNcbiAgICAgIHByb3BzID0ge1xuICAgICAgICBuYW1lOiB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgYXJnczogYXJncywgLy8gRnVsbCBhcmdzIGZvciBDb21wbGV0ZVxuICAgICAgICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlLFxuICAgICAgICByZXN1bHQ6IHRvb2xNZXNzYWdlPy5jb250ZW50IHx8IFwiXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHJlbmRlciBpcyBhIENvbXBvbmVudCBjbGFzcyBvciBUZW1wbGF0ZVJlZlxuICAgIGlmICh0aGlzLmlzQ29tcG9uZW50Q2xhc3MocmVuZGVyQ29uZmlnLnJlbmRlcikpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgZHluYW1pY2FsbHlcbiAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50KHRvb2xDYWxsLmlkLCByZW5kZXJDb25maWcucmVuZGVyLCBwcm9wcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGVtcGxhdGVSZWYocmVuZGVyQ29uZmlnLnJlbmRlcikpIHtcbiAgICAgIC8vIFVzZSB0ZW1wbGF0ZVxuICAgICAgdGhpcy5yZW5kZXJUZW1wbGF0ZSh0b29sQ2FsbC5pZCwgcmVuZGVyQ29uZmlnLnJlbmRlciwgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29tcG9uZW50KFxuICAgIHRvb2xDYWxsSWQ6IHN0cmluZyxcbiAgICBjb21wb25lbnRDbGFzczogVHlwZTxhbnk+LFxuICAgIHByb3BzOiBUb29sQ2FsbFByb3BzXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnNldCh0b29sQ2FsbElkLCBjb21wb25lbnRSZWYpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGRlY2xhcmVkIGlucHV0cyB0byBhdm9pZCBBbmd1bGFyIE5HMDMwMyBjb25zb2xlIGVycm9yc1xuICAgIGNvbnN0IGNtcERlZjogYW55ID0gKGNvbXBvbmVudENsYXNzIGFzIGFueSkuybVjbXA7XG4gICAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICBPYmplY3Qua2V5cyhjbXBEZWY/LmlucHV0cyA/PyB7fSlcbiAgICApO1xuXG4gICAgLy8gUHJlZmVyIGEgc2luZ2xlICdwcm9wcycgaW5wdXQgaWYgZGVjbGFyZWRcbiAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKCdwcm9wcycpKSB7XG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Byb3BzJywgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHNldCBvbmx5IGlucHV0cyB0aGF0IHRoZSBjb21wb25lbnQgYWN0dWFsbHkgZGVjbGFyZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUZW1wbGF0ZShcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJvcHM6IFRvb2xDYWxsUHJvcHNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZUNhY2hlLnNldCh0b29sQ2FsbElkLCB7XG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgJGltcGxpY2l0OiBwcm9wcyxcbiAgICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBhcmdzOiBwcm9wcy5hcmdzLFxuICAgICAgICBzdGF0dXM6IHByb3BzLnN0YXR1cyxcbiAgICAgICAgcmVzdWx0OiBwcm9wcy5yZXN1bHQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbXBvbmVudENsYXNzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGU7XG4gIH1cblxuICBwcml2YXRlIGlzVGVtcGxhdGVSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG59XG4iXX0=
@@ -1,25 +0,0 @@
1
- import { Component, Input, signal, computed, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { cn } from '../../lib/utils';
4
- import * as i0 from "@angular/core";
5
- export class CopilotChatToolbarComponent {
6
- set inputClass(val) {
7
- this.customClass.set(val);
8
- }
9
- customClass = signal(undefined);
10
- computedClass = computed(() => {
11
- const baseClasses = 'w-full h-[60px] bg-transparent flex items-center justify-between';
12
- return cn(baseClasses, this.customClass());
13
- });
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatToolbarComponent, isStandalone: true, selector: "div[copilotChatToolbar]", inputs: { inputClass: "inputClass" }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbarComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: 'div[copilotChatToolbar]', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
20
- '[class]': 'computedClass()'
21
- }, template: `<ng-content></ng-content>` }]
22
- }], propDecorators: { inputClass: [{
23
- type: Input
24
- }] } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBY3JDLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsSUFBYSxVQUFVLENBQUMsR0FBdUI7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBRXBELGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE1BQU0sV0FBVyxHQUFHLGtFQUFrRSxDQUFDO1FBQ3ZGLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQzt3R0FWUSwyQkFBMkI7NEZBQTNCLDJCQUEyQiwrS0FINUIsMkJBQTJCLDJEQU4zQixZQUFZOzs0RkFTWCwyQkFBMkI7a0JBWnZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLFNBQVMsRUFBRSxpQkFBaUI7cUJBQzdCLFlBQ1MsMkJBQTJCOzhCQUl4QixVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGl2W2NvcGlsb3RDaGF0VG9vbGJhcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzXSc6ICdjb21wdXRlZENsYXNzKCknXG4gIH0sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sYmFyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc2V0IGlucHV0Q2xhc3ModmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmN1c3RvbUNsYXNzLnNldCh2YWwpO1xuICB9XG4gIFxuICBjdXN0b21DbGFzcyA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIFxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gJ3ctZnVsbCBoLVs2MHB4XSBiZy10cmFuc3BhcmVudCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4nO1xuICAgIHJldHVybiBjbihiYXNlQ2xhc3NlcywgdGhpcy5jdXN0b21DbGFzcygpKTtcbiAgfSk7XG59Il19
@@ -1,199 +0,0 @@
1
- import { Component, Input, signal, computed, inject, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { CdkMenuModule } from '@angular/cdk/menu';
4
- import { OverlayModule } from '@angular/cdk/overlay';
5
- import { LucideAngularModule, Settings2, ChevronRight } from 'lucide-angular';
6
- import { CopilotChatConfigurationService } from '../../core/chat-configuration/chat-configuration.service';
7
- import { cn } from '../../lib/utils';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/cdk/menu";
10
- import * as i2 from "lucide-angular";
11
- export class CopilotChatToolsMenuComponent {
12
- Settings2Icon = Settings2;
13
- ChevronRightIcon = ChevronRight;
14
- set inputToolsMenu(val) {
15
- this.toolsMenu.set(val || []);
16
- }
17
- set inputDisabled(val) {
18
- this.disabled.set(val || false);
19
- }
20
- set inputClass(val) {
21
- this.customClass.set(val);
22
- }
23
- chatConfig = inject(CopilotChatConfigurationService);
24
- toolsMenu = signal([]);
25
- disabled = signal(false);
26
- customClass = signal(undefined);
27
- hasItems = computed(() => this.toolsMenu().length > 0);
28
- label = computed(() => this.chatConfig.labels().chatInputToolbarToolsButtonLabel);
29
- buttonClass = computed(() => {
30
- const baseClasses = cn(
31
- // Base button styles
32
- 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-sm font-medium', 'transition-all disabled:pointer-events-none disabled:opacity-50', 'shrink-0 outline-none', 'focus-visible:ring-[3px]',
33
- // chatInputToolbarSecondary variant
34
- 'cursor-pointer', 'bg-transparent text-[#444444]', 'dark:text-white dark:border-[#404040]', 'transition-colors', 'focus:outline-none', 'hover:bg-[#f8f8f8] hover:text-[#333333]', 'dark:hover:bg-[#404040] dark:hover:text-[#FFFFFF]', 'disabled:cursor-not-allowed disabled:opacity-50', 'disabled:hover:bg-transparent disabled:hover:text-[#444444]', 'dark:disabled:hover:bg-transparent dark:disabled:hover:text-[#CCCCCC]',
35
- // Size
36
- 'h-9 px-3 gap-2 font-normal');
37
- return cn(baseClasses, this.customClass());
38
- });
39
- isMenuItem(item) {
40
- return item && typeof item === 'object' && 'label' in item;
41
- }
42
- handleItemClick(item) {
43
- if (item.action) {
44
- item.action();
45
- }
46
- }
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolsMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatToolsMenuComponent, isStandalone: true, selector: "copilot-chat-tools-menu", inputs: { inputToolsMenu: "inputToolsMenu", inputDisabled: "inputDisabled", inputClass: "inputClass" }, ngImport: i0, template: `
49
- @if (hasItems()) {
50
- <button
51
- type="button"
52
- [disabled]="disabled()"
53
- [class]="buttonClass()"
54
- [cdkMenuTriggerFor]="menu"
55
- >
56
- <lucide-angular [img]="Settings2Icon" [size]="18"></lucide-angular>
57
- <span class="text-sm font-normal">{{ label() }}</span>
58
- </button>
59
-
60
- <ng-template #menu>
61
- <div class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
62
- cdkMenu>
63
- @for (item of toolsMenu(); track $index) {
64
- @if (item === '-') {
65
- <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
66
- } @else if (isMenuItem(item)) {
67
- @if (item.items && item.items.length > 0) {
68
- <!-- Submenu trigger -->
69
- <button
70
- type="button"
71
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm flex items-center justify-between"
72
- [cdkMenuTriggerFor]="submenu"
73
- cdkMenuItem
74
- >
75
- {{ item.label }}
76
- <lucide-angular [img]="ChevronRightIcon" [size]="12" class="ml-auto"></lucide-angular>
77
- </button>
78
-
79
- <!-- Submenu template -->
80
- <ng-template #submenu>
81
- <div class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
82
- cdkMenu>
83
- @for (subItem of item.items; track $index) {
84
- @if (subItem === '-') {
85
- <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
86
- } @else if (isMenuItem(subItem)) {
87
- <button
88
- type="button"
89
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
90
- (click)="handleItemClick(subItem)"
91
- cdkMenuItem
92
- >
93
- {{ subItem.label }}
94
- </button>
95
- }
96
- }
97
- </div>
98
- </ng-template>
99
- } @else {
100
- <!-- Regular menu item -->
101
- <button
102
- type="button"
103
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
104
- (click)="handleItemClick(item)"
105
- cdkMenuItem
106
- >
107
- {{ item.label }}
108
- </button>
109
- }
110
- }
111
- }
112
- </div>
113
- </ng-template>
114
- }
115
- `, isInline: true, styles: [".cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-container{position:fixed;z-index:1000}[cdkMenu]{animation:menuFadeIn .15s ease-out}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i1.CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: i1.CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: i1.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
116
- }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolsMenuComponent, decorators: [{
118
- type: Component,
119
- args: [{ selector: 'copilot-chat-tools-menu', standalone: true, imports: [
120
- CommonModule,
121
- CdkMenuModule,
122
- OverlayModule,
123
- LucideAngularModule
124
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
125
- @if (hasItems()) {
126
- <button
127
- type="button"
128
- [disabled]="disabled()"
129
- [class]="buttonClass()"
130
- [cdkMenuTriggerFor]="menu"
131
- >
132
- <lucide-angular [img]="Settings2Icon" [size]="18"></lucide-angular>
133
- <span class="text-sm font-normal">{{ label() }}</span>
134
- </button>
135
-
136
- <ng-template #menu>
137
- <div class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
138
- cdkMenu>
139
- @for (item of toolsMenu(); track $index) {
140
- @if (item === '-') {
141
- <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
142
- } @else if (isMenuItem(item)) {
143
- @if (item.items && item.items.length > 0) {
144
- <!-- Submenu trigger -->
145
- <button
146
- type="button"
147
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm flex items-center justify-between"
148
- [cdkMenuTriggerFor]="submenu"
149
- cdkMenuItem
150
- >
151
- {{ item.label }}
152
- <lucide-angular [img]="ChevronRightIcon" [size]="12" class="ml-auto"></lucide-angular>
153
- </button>
154
-
155
- <!-- Submenu template -->
156
- <ng-template #submenu>
157
- <div class="min-w-[200px] bg-white dark:bg-[#1F1F1F] border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-1"
158
- cdkMenu>
159
- @for (subItem of item.items; track $index) {
160
- @if (subItem === '-') {
161
- <div class="h-px bg-gray-200 dark:bg-gray-700 my-1"></div>
162
- } @else if (isMenuItem(subItem)) {
163
- <button
164
- type="button"
165
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
166
- (click)="handleItemClick(subItem)"
167
- cdkMenuItem
168
- >
169
- {{ subItem.label }}
170
- </button>
171
- }
172
- }
173
- </div>
174
- </ng-template>
175
- } @else {
176
- <!-- Regular menu item -->
177
- <button
178
- type="button"
179
- class="w-full px-3 py-2 text-left bg-transparent border-none rounded hover:bg-gray-100 dark:hover:bg-gray-800 cursor-pointer text-sm"
180
- (click)="handleItemClick(item)"
181
- cdkMenuItem
182
- >
183
- {{ item.label }}
184
- </button>
185
- }
186
- }
187
- }
188
- </div>
189
- </ng-template>
190
- }
191
- `, styles: [".cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-container{position:fixed;z-index:1000}[cdkMenu]{animation:menuFadeIn .15s ease-out}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
192
- }], propDecorators: { inputToolsMenu: [{
193
- type: Input
194
- }], inputDisabled: [{
195
- type: Input
196
- }], inputClass: [{
197
- type: Input
198
- }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2xzLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdG9vbHMtbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBRTNHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQWdIckMsTUFBTSxPQUFPLDZCQUE2QjtJQUMvQixhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQzFCLGdCQUFnQixHQUFHLFlBQVksQ0FBQztJQUV6QyxJQUFhLGNBQWMsQ0FBQyxHQUF3QztRQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQWEsYUFBYSxDQUFDLEdBQXdCO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBYSxVQUFVLENBQUMsR0FBdUI7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLFVBQVUsR0FBRyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUU3RCxTQUFTLEdBQUcsTUFBTSxDQUEwQixFQUFFLENBQUMsQ0FBQztJQUNoRCxRQUFRLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLFdBQVcsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBRXBELFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV2RCxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUVsRixXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUMxQixNQUFNLFdBQVcsR0FBRyxFQUFFO1FBQ3BCLHFCQUFxQjtRQUNyQixrR0FBa0csRUFDbEcsaUVBQWlFLEVBQ2pFLHVCQUF1QixFQUN2QiwwQkFBMEI7UUFDMUIsb0NBQW9DO1FBQ3BDLGdCQUFnQixFQUNoQiwrQkFBK0IsRUFDL0IsdUNBQXVDLEVBQ3ZDLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIseUNBQXlDLEVBQ3pDLG1EQUFtRCxFQUNuRCxpREFBaUQsRUFDakQsNkRBQTZELEVBQzdELHVFQUF1RTtRQUN2RSxPQUFPO1FBQ1AsNEJBQTRCLENBQzdCLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsSUFBUztRQUNsQixPQUFPLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQW1CO1FBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQzt3R0F4RFUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsMkxBbkc5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FVCxtVkExRUMsWUFBWSw4QkFDWixhQUFhLHFqQkFDYixhQUFhLDhCQUNiLG1CQUFtQjs7NEZBdUdWLDZCQUE2QjtrQkE5R3pDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixtQkFBbUI7cUJBQ3BCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFlBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUVUOzhCQW9DWSxjQUFjO3NCQUExQixLQUFLO2dCQUdPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBR08sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka01lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvbWVudSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSwgU2V0dGluZ3MyLCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtYW5ndWxhcic7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jaGF0LWNvbmZpZ3VyYXRpb24vY2hhdC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBUb29sc01lbnVJdGVtIH0gZnJvbSAnLi9jb3BpbG90LWNoYXQtaW5wdXQudHlwZXMnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb3BpbG90LWNoYXQtdG9vbHMtbWVudScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ2RrTWVudU1vZHVsZSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIEx1Y2lkZUFuZ3VsYXJNb2R1bGVcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChoYXNJdGVtcygpKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCJcbiAgICAgICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgPlxuICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJTZXR0aW5nczJJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ub3JtYWxcIj57eyBsYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICBcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gYmctd2hpdGUgZGFyazpiZy1bIzFGMUYxRl0gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMCByb3VuZGVkLWxnIHNoYWRvdy1sZyBwLTFcIlxuICAgICAgICAgICAgIGNka01lbnU+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiB0b29sc01lbnUoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICBAaWYgKGl0ZW0gPT09ICctJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1weCBiZy1ncmF5LTIwMCBkYXJrOmJnLWdyYXktNzAwIG15LTFcIj48L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGlzTWVudUl0ZW0oaXRlbSkpIHtcbiAgICAgICAgICAgICAgQGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDwhLS0gU3VibWVudSB0cmlnZ2VyIC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIHRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZ3JheS04MDAgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInN1Ym1lbnVcIlxuICAgICAgICAgICAgICAgICAgY2RrTWVudUl0ZW1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJDaGV2cm9uUmlnaHRJY29uXCIgW3NpemVdPVwiMTJcIiBjbGFzcz1cIm1sLWF1dG9cIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gU3VibWVudSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N1Ym1lbnU+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBiZy13aGl0ZSBkYXJrOmJnLVsjMUYxRjFGXSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWdyYXktNzAwIHJvdW5kZWQtbGcgc2hhZG93LWxnIHAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNka01lbnU+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5pdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzdWJJdGVtID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLXB4IGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS03MDAgbXktMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGlzTWVudUl0ZW0oc3ViSXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiB0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCBob3ZlcjpiZy1ncmF5LTEwMCBkYXJrOmhvdmVyOmJnLWdyYXktODAwIGN1cnNvci1wb2ludGVyIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKHN1Ykl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3ViSXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8IS0tIFJlZ3VsYXIgbWVudSBpdGVtIC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIHRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZ3JheS04MDAgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIGNka01lbnVJdGVtXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLyogQ0RLIE92ZXJsYXkgc3R5bGVzIGZvciBwb3NpdGlvbmluZyAqL1xuICAgIC5jZGstb3ZlcmxheS1wYW5lIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgei1pbmRleDogMTAwMDtcbiAgICB9XG4gICAgXG4gICAgLyogRW5zdXJlIG1lbnUgYXBwZWFycyBhYm92ZSBvdGhlciBjb250ZW50ICovXG4gICAgLmNkay1vdmVybGF5LWNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB6LWluZGV4OiAxMDAwO1xuICAgIH1cbiAgICBcbiAgICAvKiBNZW51IGFuaW1hdGlvbiAqL1xuICAgIFtjZGtNZW51XSB7XG4gICAgICBhbmltYXRpb246IG1lbnVGYWRlSW4gMC4xNXMgZWFzZS1vdXQ7XG4gICAgfVxuICAgIFxuICAgIEBrZXlmcmFtZXMgbWVudUZhZGVJbiB7XG4gICAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7XG4gICAgICB9XG4gICAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0VG9vbHNNZW51Q29tcG9uZW50IHtcbiAgcmVhZG9ubHkgU2V0dGluZ3MySWNvbiA9IFNldHRpbmdzMjtcbiAgcmVhZG9ubHkgQ2hldnJvblJpZ2h0SWNvbiA9IENoZXZyb25SaWdodDtcbiAgXG4gIEBJbnB1dCgpIHNldCBpbnB1dFRvb2xzTWVudSh2YWw6IChUb29sc01lbnVJdGVtIHwgJy0nKVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50b29sc01lbnUuc2V0KHZhbCB8fCBbXSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IGlucHV0RGlzYWJsZWQodmFsOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQodmFsIHx8IGZhbHNlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgaW5wdXRDbGFzcyh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY3VzdG9tQ2xhc3Muc2V0KHZhbCk7XG4gIH1cbiAgXG4gIHByaXZhdGUgY2hhdENvbmZpZyA9IGluamVjdChDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgXG4gIHRvb2xzTWVudSA9IHNpZ25hbDwoVG9vbHNNZW51SXRlbSB8ICctJylbXT4oW10pO1xuICBkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGN1c3RvbUNsYXNzID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgXG4gIGhhc0l0ZW1zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50b29sc01lbnUoKS5sZW5ndGggPiAwKTtcbiAgXG4gIGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jaGF0Q29uZmlnLmxhYmVscygpLmNoYXRJbnB1dFRvb2xiYXJUb29sc0J1dHRvbkxhYmVsKTtcbiAgXG4gIGJ1dHRvbkNsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gY24oXG4gICAgICAvLyBCYXNlIGJ1dHRvbiBzdHlsZXNcbiAgICAgICdpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0nLFxuICAgICAgJ3RyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAnc2hyaW5rLTAgb3V0bGluZS1ub25lJyxcbiAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuICAgICAgLy8gY2hhdElucHV0VG9vbGJhclNlY29uZGFyeSB2YXJpYW50XG4gICAgICAnY3Vyc29yLXBvaW50ZXInLFxuICAgICAgJ2JnLXRyYW5zcGFyZW50IHRleHQtWyM0NDQ0NDRdJyxcbiAgICAgICdkYXJrOnRleHQtd2hpdGUgZGFyazpib3JkZXItWyM0MDQwNDBdJyxcbiAgICAgICd0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAnZm9jdXM6b3V0bGluZS1ub25lJyxcbiAgICAgICdob3ZlcjpiZy1bI2Y4ZjhmOF0gaG92ZXI6dGV4dC1bIzMzMzMzM10nLFxuICAgICAgJ2Rhcms6aG92ZXI6YmctWyM0MDQwNDBdIGRhcms6aG92ZXI6dGV4dC1bI0ZGRkZGRl0nLFxuICAgICAgJ2Rpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICdkaXNhYmxlZDpob3ZlcjpiZy10cmFuc3BhcmVudCBkaXNhYmxlZDpob3Zlcjp0ZXh0LVsjNDQ0NDQ0XScsXG4gICAgICAnZGFyazpkaXNhYmxlZDpob3ZlcjpiZy10cmFuc3BhcmVudCBkYXJrOmRpc2FibGVkOmhvdmVyOnRleHQtWyNDQ0NDQ0NdJyxcbiAgICAgIC8vIFNpemVcbiAgICAgICdoLTkgcHgtMyBnYXAtMiBmb250LW5vcm1hbCdcbiAgICApO1xuICAgIHJldHVybiBjbihiYXNlQ2xhc3NlcywgdGhpcy5jdXN0b21DbGFzcygpKTtcbiAgfSk7XG4gIFxuICBpc01lbnVJdGVtKGl0ZW06IGFueSk6IGl0ZW0gaXMgVG9vbHNNZW51SXRlbSB7XG4gICAgcmV0dXJuIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICdsYWJlbCcgaW4gaXRlbTtcbiAgfVxuICBcbiAgaGFuZGxlSXRlbUNsaWNrKGl0ZW06IFRvb2xzTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5hY3Rpb24pIHtcbiAgICAgIGl0ZW0uYWN0aW9uKCk7XG4gICAgfVxuICB9XG59XG4iXX0=