@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
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Error class for audio recorder failures
3
+ */
4
+ export class AudioRecorderError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "AudioRecorderError";
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWlucHV0LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWlucHV0LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCQTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZSwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIE1vZGUgb2YgdGhlIGNoYXQgaW5wdXQgY29tcG9uZW50XG4gKi9cbmV4cG9ydCB0eXBlIENvcGlsb3RDaGF0SW5wdXRNb2RlID0gXCJpbnB1dFwiIHwgXCJ0cmFuc2NyaWJlXCIgfCBcInByb2Nlc3NpbmdcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWVudSBpdGVtIGluIHRoZSB0b29scyBtZW51XG4gKi9cbmV4cG9ydCB0eXBlIFRvb2xzTWVudUl0ZW0gPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG59ICYgKFxuICB8IHtcbiAgICAgIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgICAgIGl0ZW1zPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIGFjdGlvbj86IG5ldmVyO1xuICAgICAgaXRlbXM6IChUb29sc01lbnVJdGVtIHwgXCItXCIpW107XG4gICAgfVxuKTtcblxuLyoqXG4gKiBBdWRpbyByZWNvcmRlciBzdGF0ZVxuICovXG5leHBvcnQgdHlwZSBBdWRpb1JlY29yZGVyU3RhdGUgPSBcImlkbGVcIiB8IFwicmVjb3JkaW5nXCIgfCBcInByb2Nlc3NpbmdcIjtcblxuLyoqXG4gKiBFcnJvciBjbGFzcyBmb3IgYXVkaW8gcmVjb3JkZXIgZmFpbHVyZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvUmVjb3JkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJBdWRpb1JlY29yZGVyRXJyb3JcIjtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciB0ZXh0YXJlYSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdFRleHRhcmVhUHJvcHMge1xuICB2YWx1ZT86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIG1heFJvd3M/OiBudW1iZXI7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICBpbnB1dENsYXNzPzogc3RyaW5nO1xuICBzdHlsZT86IGFueTtcbiAgcm93cz86IG51bWJlcjtcbiAgY29scz86IG51bWJlcjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBzcGVsbGNoZWNrPzogYm9vbGVhbjtcbiAgd3JhcD86IFwiaGFyZFwiIHwgXCJzb2Z0XCIgfCBcIm9mZlwiO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBidXR0b24gY29tcG9uZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0QnV0dG9uUHJvcHMge1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBpbnB1dENsYXNzPzogc3RyaW5nO1xuICBzdHlsZT86IGFueTtcbiAgdHlwZT86IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiO1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGFyaWFQcmVzc2VkPzogYm9vbGVhbjtcbiAgYXJpYUV4cGFuZGVkPzogYm9vbGVhbjtcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRvb2xiYXIgYnV0dG9uIHdpdGggdG9vbHRpcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0VG9vbGJhckJ1dHRvblByb3BzIGV4dGVuZHMgQ29waWxvdENoYXRCdXR0b25Qcm9wcyB7XG4gIGljb24/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICB0b29sdGlwPzogc3RyaW5nO1xuICB2YXJpYW50PzogXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0b29scyBtZW51IGJ1dHRvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0VG9vbHNCdXR0b25Qcm9wcyBleHRlbmRzIENvcGlsb3RDaGF0QnV0dG9uUHJvcHMge1xuICB0b29sc01lbnU/OiAoVG9vbHNNZW51SXRlbSB8IFwiLVwiKVtdO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBhdWRpbyByZWNvcmRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0QXVkaW9SZWNvcmRlclByb3BzIHtcbiAgaW5wdXRDbGFzcz86IHN0cmluZztcbiAgc3R5bGU/OiBhbnk7XG4gIG9uU3RhdGVDaGFuZ2U/OiAoc3RhdGU6IEF1ZGlvUmVjb3JkZXJTdGF0ZSkgPT4gdm9pZDtcbiAgc2hvd0NvbnRyb2xzPzogYm9vbGVhbjtcbiAgbWF4RHVyYXRpb24/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRvb2xiYXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdFRvb2xiYXJQcm9wcyB7XG4gIGlucHV0Q2xhc3M/OiBzdHJpbmc7XG4gIHN0eWxlPzogYW55O1xuICBwb3NpdGlvbj86IFwidG9wXCIgfCBcImJvdHRvbVwiO1xuICBhbGlnbm1lbnQ/OiBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcInNwYWNlLWJldHdlZW5cIjtcbn1cblxuLyoqXG4gKiBTbG90IGNvbmZpZ3VyYXRpb24gZm9yIGNoYXQgaW5wdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdElucHV0U2xvdHMge1xuICB0ZXh0QXJlYT86IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT47XG4gIHNlbmRCdXR0b24/OiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdGFydFRyYW5zY3JpYmVCdXR0b24/OiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBjYW5jZWxUcmFuc2NyaWJlQnV0dG9uPzogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgZmluaXNoVHJhbnNjcmliZUJ1dHRvbj86IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT47XG4gIGFkZEZpbGVCdXR0b24/OiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICB0b29sc0J1dHRvbj86IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT47XG4gIHRvb2xiYXI/OiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBhdWRpb1JlY29yZGVyPzogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuLyoqXG4gKiBJbnB1dCBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hhdCBpbnB1dCBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdElucHV0Q29uZmlnIHtcbiAgbW9kZT86IENvcGlsb3RDaGF0SW5wdXRNb2RlO1xuICB0b29sc01lbnU/OiAoVG9vbHNNZW51SXRlbSB8IFwiLVwiKVtdO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBhZGRpdGlvbmFsVG9vbGJhckl0ZW1zPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGNsYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE91dHB1dCBldmVudHMgZm9yIHRoZSBjaGF0IGlucHV0IGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0SW5wdXRPdXRwdXRzIHtcbiAgc3VibWl0TWVzc2FnZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN0YXJ0VHJhbnNjcmliZTogKCkgPT4gdm9pZDtcbiAgY2FuY2VsVHJhbnNjcmliZTogKCkgPT4gdm9pZDtcbiAgZmluaXNoVHJhbnNjcmliZTogKCkgPT4gdm9pZDtcbiAgYWRkRmlsZTogKCkgPT4gdm9pZDtcbiAgY2hhbmdlVmFsdWU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, computed, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../../utils";
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Cursor component that matches the React implementation exactly.
7
+ * Shows a pulsing dot animation to indicate activity.
8
+ */
9
+ export class CopilotChatMessageViewCursor {
10
+ inputClass = input();
11
+ // Computed class that matches React exactly: w-[11px] h-[11px] rounded-full bg-foreground animate-pulse-cursor ml-1
12
+ computedClass = computed(() => cn("w-[11px] h-[11px] rounded-full bg-foreground animate-pulse-cursor ml-1", this.inputClass()));
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatMessageViewCursor, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatMessageViewCursor, isStandalone: true, selector: "copilot-chat-message-view-cursor", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: ` <div [class]="computedClass()"></div> `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatMessageViewCursor, decorators: [{
17
+ type: Component,
18
+ args: [{
19
+ selector: "copilot-chat-message-view-cursor",
20
+ standalone: true,
21
+ imports: [CommonModule],
22
+ changeDetection: ChangeDetectionStrategy.OnPush,
23
+ encapsulation: ViewEncapsulation.None,
24
+ template: ` <div [class]="computedClass()"></div> `,
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlldy1jdXJzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtbWVzc2FnZS12aWV3LWN1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFakM7OztHQUdHO0FBU0gsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRXpDLG9IQUFvSDtJQUNwSCxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1QixFQUFFLENBQ0Esd0VBQXdFLEVBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDbEIsQ0FDRixDQUFDO3dHQVRTLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLCtPQUY3Qix5Q0FBeUMsMkRBSHpDLFlBQVk7OzRGQUtYLDRCQUE0QjtrQkFSeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRSx5Q0FBeUM7aUJBQ3BEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogQ3Vyc29yIGNvbXBvbmVudCB0aGF0IG1hdGNoZXMgdGhlIFJlYWN0IGltcGxlbWVudGF0aW9uIGV4YWN0bHkuXG4gKiBTaG93cyBhIHB1bHNpbmcgZG90IGFuaW1hdGlvbiB0byBpbmRpY2F0ZSBhY3Rpdml0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXctY3Vyc29yXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzcygpXCI+PC9kaXY+IGAsXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0TWVzc2FnZVZpZXdDdXJzb3Ige1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8vIENvbXB1dGVkIGNsYXNzIHRoYXQgbWF0Y2hlcyBSZWFjdCBleGFjdGx5OiB3LVsxMXB4XSBoLVsxMXB4XSByb3VuZGVkLWZ1bGwgYmctZm9yZWdyb3VuZCBhbmltYXRlLXB1bHNlLWN1cnNvciBtbC0xXG4gIGNvbXB1dGVkQ2xhc3MgPSBjb21wdXRlZCgoKSA9PlxuICAgIGNuKFxuICAgICAgXCJ3LVsxMXB4XSBoLVsxMXB4XSByb3VuZGVkLWZ1bGwgYmctZm9yZWdyb3VuZCBhbmltYXRlLXB1bHNlLWN1cnNvciBtbC0xXCIsXG4gICAgICB0aGlzLmlucHV0Q2xhc3MoKVxuICAgIClcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,268 @@
1
+ import { Component, input, output, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, computed, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CopilotSlot } from "../../slots/copilot-slot";
4
+ import { CopilotChatAssistantMessage } from "./copilot-chat-assistant-message";
5
+ import { CopilotChatUserMessage } from "./copilot-chat-user-message";
6
+ import { CopilotChatMessageViewCursor } from "./copilot-chat-message-view-cursor";
7
+ import { cn } from "../../utils";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ /**
11
+ * CopilotChatMessageView component - Angular port of the React component.
12
+ * Renders a list of chat messages with support for custom slots and layouts.
13
+ * DOM structure and Tailwind classes match the React implementation exactly.
14
+ */
15
+ export class CopilotChatMessageView {
16
+ // Core inputs matching React props
17
+ messages = input([]);
18
+ showCursor = input(false);
19
+ isLoading = input(false);
20
+ inputClass = input();
21
+ // Handler availability handled via DI service
22
+ // Assistant message slot inputs
23
+ assistantMessageComponent = input();
24
+ assistantMessageTemplate = input();
25
+ assistantMessageClass = input();
26
+ // User message slot inputs
27
+ userMessageComponent = input();
28
+ userMessageTemplate = input();
29
+ userMessageClass = input();
30
+ // Cursor slot inputs
31
+ cursorComponent = input();
32
+ cursorTemplate = input();
33
+ cursorClass = input();
34
+ // Custom layout template (render prop pattern)
35
+ customLayoutTemplate;
36
+ // Output events (bubbled from child components)
37
+ assistantMessageThumbsUp = output();
38
+ assistantMessageThumbsDown = output();
39
+ assistantMessageReadAloud = output();
40
+ assistantMessageRegenerate = output();
41
+ userMessageCopy = output();
42
+ userMessageEdit = output();
43
+ // Default components for slots
44
+ defaultAssistantComponent = CopilotChatAssistantMessage;
45
+ defaultUserComponent = CopilotChatUserMessage;
46
+ defaultCursorComponent = CopilotChatMessageViewCursor;
47
+ // Derived values from inputs
48
+ messagesValue = computed(() => this.messages());
49
+ showCursorValue = computed(() => this.showCursor());
50
+ isLoadingValue = computed(() => this.isLoading());
51
+ // Computed class matching React: twMerge("flex flex-col", className)
52
+ computedClass = computed(() => cn("flex flex-col", this.inputClass()));
53
+ // Layout context for custom templates (render prop pattern)
54
+ layoutContext = computed(() => ({
55
+ isLoading: this.isLoadingValue(),
56
+ messages: this.messagesValue(),
57
+ showCursor: this.showCursorValue(),
58
+ messageElements: this.messagesValue().filter((m) => m && (m.role === "assistant" || m.role === "user")),
59
+ }));
60
+ // Slot resolution computed signals
61
+ assistantMessageSlot = computed(() => this.assistantMessageComponent() || this.assistantMessageClass());
62
+ userMessageSlot = computed(() => this.userMessageComponent() || this.userMessageClass());
63
+ cursorSlot = computed(() => this.cursorComponent() || this.cursorClass());
64
+ // Props merging helpers
65
+ mergeAssistantProps(message) {
66
+ return {
67
+ message,
68
+ messages: this.messagesValue(),
69
+ isLoading: this.isLoadingValue(),
70
+ inputClass: this.assistantMessageClass(),
71
+ };
72
+ }
73
+ mergeUserProps(message) {
74
+ return {
75
+ message,
76
+ inputClass: this.userMessageClass(),
77
+ };
78
+ }
79
+ // TrackBy function for performance optimization
80
+ trackByMessageId(index, message) {
81
+ return message?.id || `index-${index}`;
82
+ }
83
+ constructor() { }
84
+ // Event handlers - just pass them through
85
+ handleAssistantThumbsUp(event) {
86
+ this.assistantMessageThumbsUp.emit(event);
87
+ }
88
+ handleAssistantThumbsDown(event) {
89
+ this.assistantMessageThumbsDown.emit(event);
90
+ }
91
+ handleAssistantReadAloud(event) {
92
+ this.assistantMessageReadAloud.emit(event);
93
+ }
94
+ handleAssistantRegenerate(event) {
95
+ this.assistantMessageRegenerate.emit(event);
96
+ }
97
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatMessageView, deps: [], target: i0.ɵɵFactoryTarget.Component });
98
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatMessageView, isStandalone: true, selector: "copilot-chat-message-view", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, showCursor: { classPropertyName: "showCursor", publicName: "showCursor", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageComponent: { classPropertyName: "assistantMessageComponent", publicName: "assistantMessageComponent", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageTemplate: { classPropertyName: "assistantMessageTemplate", publicName: "assistantMessageTemplate", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageClass: { classPropertyName: "assistantMessageClass", publicName: "assistantMessageClass", isSignal: true, isRequired: false, transformFunction: null }, userMessageComponent: { classPropertyName: "userMessageComponent", publicName: "userMessageComponent", isSignal: true, isRequired: false, transformFunction: null }, userMessageTemplate: { classPropertyName: "userMessageTemplate", publicName: "userMessageTemplate", isSignal: true, isRequired: false, transformFunction: null }, userMessageClass: { classPropertyName: "userMessageClass", publicName: "userMessageClass", isSignal: true, isRequired: false, transformFunction: null }, cursorComponent: { classPropertyName: "cursorComponent", publicName: "cursorComponent", isSignal: true, isRequired: false, transformFunction: null }, cursorTemplate: { classPropertyName: "cursorTemplate", publicName: "cursorTemplate", isSignal: true, isRequired: false, transformFunction: null }, cursorClass: { classPropertyName: "cursorClass", publicName: "cursorClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { assistantMessageThumbsUp: "assistantMessageThumbsUp", assistantMessageThumbsDown: "assistantMessageThumbsDown", assistantMessageReadAloud: "assistantMessageReadAloud", assistantMessageRegenerate: "assistantMessageRegenerate", userMessageCopy: "userMessageCopy", userMessageEdit: "userMessageEdit" }, queries: [{ propertyName: "customLayoutTemplate", first: true, predicate: ["customLayout"], descendants: true }], ngImport: i0, template: `
99
+ <!-- Custom layout template support (render prop pattern) -->
100
+ @if (customLayoutTemplate) {
101
+ <ng-container
102
+ [ngTemplateOutlet]="customLayoutTemplate"
103
+ [ngTemplateOutletContext]="layoutContext()"
104
+ ></ng-container>
105
+ } @else {
106
+ <!-- Default layout - exact React DOM structure: div with "flex flex-col" classes -->
107
+ <div [class]="computedClass()">
108
+ <!-- Message iteration - simplified without tool calls -->
109
+ @for (
110
+ message of messagesValue();
111
+ track trackByMessageId($index, message)
112
+ ) {
113
+ @if (message && message.role === "assistant") {
114
+ <!-- Assistant message with slot support -->
115
+ @if (assistantMessageComponent() || assistantMessageTemplate()) {
116
+ <copilot-slot
117
+ [slot]="
118
+ assistantMessageTemplate() || assistantMessageComponent()
119
+ "
120
+ [context]="mergeAssistantProps(message)"
121
+ [defaultComponent]="defaultAssistantComponent"
122
+ >
123
+ </copilot-slot>
124
+ } @else {
125
+ <copilot-chat-assistant-message
126
+ [message]="message"
127
+ [messages]="messagesValue()"
128
+ [isLoading]="isLoadingValue()"
129
+ [inputClass]="assistantMessageClass()"
130
+ (thumbsUp)="handleAssistantThumbsUp($event)"
131
+ (thumbsDown)="handleAssistantThumbsDown($event)"
132
+ (readAloud)="handleAssistantReadAloud($event)"
133
+ (regenerate)="handleAssistantRegenerate($event)"
134
+ >
135
+ </copilot-chat-assistant-message>
136
+ }
137
+ } @else if (message && message.role === "user") {
138
+ <!-- User message with slot support -->
139
+ @if (userMessageComponent() || userMessageTemplate()) {
140
+ <copilot-slot
141
+ [slot]="userMessageTemplate() || userMessageComponent()"
142
+ [context]="mergeUserProps(message)"
143
+ [defaultComponent]="defaultUserComponent"
144
+ >
145
+ </copilot-slot>
146
+ } @else {
147
+ <copilot-chat-user-message
148
+ [message]="message"
149
+ [inputClass]="userMessageClass()"
150
+ >
151
+ </copilot-chat-user-message>
152
+ }
153
+ }
154
+ }
155
+
156
+ <!-- Cursor - exactly like React's conditional rendering -->
157
+ @if (showCursorValue()) {
158
+ @if (cursorComponent() || cursorTemplate()) {
159
+ <copilot-slot
160
+ [slot]="cursorTemplate() || cursorComponent()"
161
+ [context]="{ inputClass: cursorClass() }"
162
+ [defaultComponent]="defaultCursorComponent"
163
+ >
164
+ </copilot-slot>
165
+ } @else {
166
+ <copilot-chat-message-view-cursor [inputClass]="cursorClass()">
167
+ </copilot-chat-message-view-cursor>
168
+ }
169
+ }
170
+ </div>
171
+ }
172
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CopilotSlot, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }, { kind: "component", type: CopilotChatAssistantMessage, selector: "copilot-chat-assistant-message", inputs: ["markdownRendererClass", "toolbarClass", "copyButtonClass", "thumbsUpButtonClass", "thumbsDownButtonClass", "readAloudButtonClass", "regenerateButtonClass", "toolCallsViewClass", "markdownRendererComponent", "toolbarComponent", "copyButtonComponent", "thumbsUpButtonComponent", "thumbsDownButtonComponent", "readAloudButtonComponent", "regenerateButtonComponent", "toolCallsViewComponent", "message", "messages", "isLoading", "additionalToolbarItems", "toolbarVisible", "inputClass"], outputs: ["thumbsUp", "thumbsDown", "readAloud", "regenerate"] }, { kind: "component", type: CopilotChatUserMessage, selector: "copilot-chat-user-message", inputs: ["messageRendererClass", "toolbarClass", "copyButtonClass", "editButtonClass", "branchNavigationClass", "messageRendererComponent", "toolbarComponent", "copyButtonComponent", "editButtonComponent", "branchNavigationComponent", "message", "branchIndex", "numberOfBranches", "additionalToolbarItems", "inputClass"], outputs: ["editMessage", "switchToBranch"] }, { kind: "component", type: CopilotChatMessageViewCursor, selector: "copilot-chat-message-view-cursor", inputs: ["inputClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatMessageView, decorators: [{
175
+ type: Component,
176
+ args: [{
177
+ selector: "copilot-chat-message-view",
178
+ standalone: true,
179
+ imports: [
180
+ CommonModule,
181
+ CopilotSlot,
182
+ CopilotChatAssistantMessage,
183
+ CopilotChatUserMessage,
184
+ CopilotChatMessageViewCursor,
185
+ ],
186
+ changeDetection: ChangeDetectionStrategy.OnPush,
187
+ encapsulation: ViewEncapsulation.None,
188
+ template: `
189
+ <!-- Custom layout template support (render prop pattern) -->
190
+ @if (customLayoutTemplate) {
191
+ <ng-container
192
+ [ngTemplateOutlet]="customLayoutTemplate"
193
+ [ngTemplateOutletContext]="layoutContext()"
194
+ ></ng-container>
195
+ } @else {
196
+ <!-- Default layout - exact React DOM structure: div with "flex flex-col" classes -->
197
+ <div [class]="computedClass()">
198
+ <!-- Message iteration - simplified without tool calls -->
199
+ @for (
200
+ message of messagesValue();
201
+ track trackByMessageId($index, message)
202
+ ) {
203
+ @if (message && message.role === "assistant") {
204
+ <!-- Assistant message with slot support -->
205
+ @if (assistantMessageComponent() || assistantMessageTemplate()) {
206
+ <copilot-slot
207
+ [slot]="
208
+ assistantMessageTemplate() || assistantMessageComponent()
209
+ "
210
+ [context]="mergeAssistantProps(message)"
211
+ [defaultComponent]="defaultAssistantComponent"
212
+ >
213
+ </copilot-slot>
214
+ } @else {
215
+ <copilot-chat-assistant-message
216
+ [message]="message"
217
+ [messages]="messagesValue()"
218
+ [isLoading]="isLoadingValue()"
219
+ [inputClass]="assistantMessageClass()"
220
+ (thumbsUp)="handleAssistantThumbsUp($event)"
221
+ (thumbsDown)="handleAssistantThumbsDown($event)"
222
+ (readAloud)="handleAssistantReadAloud($event)"
223
+ (regenerate)="handleAssistantRegenerate($event)"
224
+ >
225
+ </copilot-chat-assistant-message>
226
+ }
227
+ } @else if (message && message.role === "user") {
228
+ <!-- User message with slot support -->
229
+ @if (userMessageComponent() || userMessageTemplate()) {
230
+ <copilot-slot
231
+ [slot]="userMessageTemplate() || userMessageComponent()"
232
+ [context]="mergeUserProps(message)"
233
+ [defaultComponent]="defaultUserComponent"
234
+ >
235
+ </copilot-slot>
236
+ } @else {
237
+ <copilot-chat-user-message
238
+ [message]="message"
239
+ [inputClass]="userMessageClass()"
240
+ >
241
+ </copilot-chat-user-message>
242
+ }
243
+ }
244
+ }
245
+
246
+ <!-- Cursor - exactly like React's conditional rendering -->
247
+ @if (showCursorValue()) {
248
+ @if (cursorComponent() || cursorTemplate()) {
249
+ <copilot-slot
250
+ [slot]="cursorTemplate() || cursorComponent()"
251
+ [context]="{ inputClass: cursorClass() }"
252
+ [defaultComponent]="defaultCursorComponent"
253
+ >
254
+ </copilot-slot>
255
+ } @else {
256
+ <copilot-chat-message-view-cursor [inputClass]="cursorClass()">
257
+ </copilot-chat-message-view-cursor>
258
+ }
259
+ }
260
+ </div>
261
+ }
262
+ `,
263
+ }]
264
+ }], ctorParameters: () => [], propDecorators: { customLayoutTemplate: [{
265
+ type: ContentChild,
266
+ args: ["customLayout"]
267
+ }] } });
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUVqQzs7OztHQUlHO0FBeUZILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsbUNBQW1DO0lBQ25DLFFBQVEsR0FBRyxLQUFLLENBQVksRUFBRSxDQUFDLENBQUM7SUFDaEMsVUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuQyxTQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLFVBQVUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFFekMsOENBQThDO0lBRTlDLGdDQUFnQztJQUNoQyx5QkFBeUIsR0FBRyxLQUFLLEVBQXlCLENBQUM7SUFDM0Qsd0JBQXdCLEdBQUcsS0FBSyxFQUFnQyxDQUFDO0lBQ2pFLHFCQUFxQixHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUVwRCwyQkFBMkI7SUFDM0Isb0JBQW9C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YUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwRVQ7aUJBQ0Y7d0RBMEIrQixvQkFBb0I7c0JBQWpELFlBQVk7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgQ29udGVudENoaWxkLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RTbG90IH0gZnJvbSBcIi4uLy4uL3Nsb3RzL2NvcGlsb3Qtc2xvdFwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSBcIkBhZy11aS9jb3JlXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2UgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2VcIjtcbmltcG9ydCB7IENvcGlsb3RDaGF0VXNlck1lc3NhZ2UgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdE1lc3NhZ2VWaWV3Q3Vyc29yIH0gZnJvbSBcIi4vY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlldy1jdXJzb3JcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogQ29waWxvdENoYXRNZXNzYWdlVmlldyBjb21wb25lbnQgLSBBbmd1bGFyIHBvcnQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudC5cbiAqIFJlbmRlcnMgYSBsaXN0IG9mIGNoYXQgbWVzc2FnZXMgd2l0aCBzdXBwb3J0IGZvciBjdXN0b20gc2xvdHMgYW5kIGxheW91dHMuXG4gKiBET00gc3RydWN0dXJlIGFuZCBUYWlsd2luZCBjbGFzc2VzIG1hdGNoIHRoZSBSZWFjdCBpbXBsZW1lbnRhdGlvbiBleGFjdGx5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlld1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcGlsb3RTbG90LFxuICAgIENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZSxcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlLFxuICAgIENvcGlsb3RDaGF0TWVzc2FnZVZpZXdDdXJzb3IsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gQ3VzdG9tIGxheW91dCB0ZW1wbGF0ZSBzdXBwb3J0IChyZW5kZXIgcHJvcCBwYXR0ZXJuKSAtLT5cbiAgICBAaWYgKGN1c3RvbUxheW91dFRlbXBsYXRlKSB7XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUxheW91dFRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImxheW91dENvbnRleHQoKVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIERlZmF1bHQgbGF5b3V0IC0gZXhhY3QgUmVhY3QgRE9NIHN0cnVjdHVyZTogZGl2IHdpdGggXCJmbGV4IGZsZXgtY29sXCIgY2xhc3NlcyAtLT5cbiAgICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3MoKVwiPlxuICAgICAgICA8IS0tIE1lc3NhZ2UgaXRlcmF0aW9uIC0gc2ltcGxpZmllZCB3aXRob3V0IHRvb2wgY2FsbHMgLS0+XG4gICAgICAgIEBmb3IgKFxuICAgICAgICAgIG1lc3NhZ2Ugb2YgbWVzc2FnZXNWYWx1ZSgpO1xuICAgICAgICAgIHRyYWNrIHRyYWNrQnlNZXNzYWdlSWQoJGluZGV4LCBtZXNzYWdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBAaWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5yb2xlID09PSBcImFzc2lzdGFudFwiKSB7XG4gICAgICAgICAgICA8IS0tIEFzc2lzdGFudCBtZXNzYWdlIHdpdGggc2xvdCBzdXBwb3J0IC0tPlxuICAgICAgICAgICAgQGlmIChhc3Npc3RhbnRNZXNzYWdlQ29tcG9uZW50KCkgfHwgYXNzaXN0YW50TWVzc2FnZVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgIFtzbG90XT1cIlxuICAgICAgICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZVRlbXBsYXRlKCkgfHwgYXNzaXN0YW50TWVzc2FnZUNvbXBvbmVudCgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY29udGV4dF09XCJtZXJnZUFzc2lzdGFudFByb3BzKG1lc3NhZ2UpXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0QXNzaXN0YW50Q29tcG9uZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8Y29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRDbGFzc109XCJhc3Npc3RhbnRNZXNzYWdlQ2xhc3MoKVwiXG4gICAgICAgICAgICAgICAgKHRodW1ic1VwKT1cImhhbmRsZUFzc2lzdGFudFRodW1ic1VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICh0aHVtYnNEb3duKT1cImhhbmRsZUFzc2lzdGFudFRodW1ic0Rvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHJlYWRBbG91ZCk9XCJoYW5kbGVBc3Npc3RhbnRSZWFkQWxvdWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHJlZ2VuZXJhdGUpPVwiaGFuZGxlQXNzaXN0YW50UmVnZW5lcmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIGlmIChtZXNzYWdlICYmIG1lc3NhZ2Uucm9sZSA9PT0gXCJ1c2VyXCIpIHtcbiAgICAgICAgICAgIDwhLS0gVXNlciBtZXNzYWdlIHdpdGggc2xvdCBzdXBwb3J0IC0tPlxuICAgICAgICAgICAgQGlmICh1c2VyTWVzc2FnZUNvbXBvbmVudCgpIHx8IHVzZXJNZXNzYWdlVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgW3Nsb3RdPVwidXNlck1lc3NhZ2VUZW1wbGF0ZSgpIHx8IHVzZXJNZXNzYWdlQ29tcG9uZW50KClcIlxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cIm1lcmdlVXNlclByb3BzKG1lc3NhZ2UpXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0VXNlckNvbXBvbmVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2VcbiAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRDbGFzc109XCJ1c2VyTWVzc2FnZUNsYXNzKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEN1cnNvciAtIGV4YWN0bHkgbGlrZSBSZWFjdCdzIGNvbmRpdGlvbmFsIHJlbmRlcmluZyAtLT5cbiAgICAgICAgQGlmIChzaG93Q3Vyc29yVmFsdWUoKSkge1xuICAgICAgICAgIEBpZiAoY3Vyc29yQ29tcG9uZW50KCkgfHwgY3Vyc29yVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICBbc2xvdF09XCJjdXJzb3JUZW1wbGF0ZSgpIHx8IGN1cnNvckNvbXBvbmVudCgpXCJcbiAgICAgICAgICAgICAgW2NvbnRleHRdPVwieyBpbnB1dENsYXNzOiBjdXJzb3JDbGFzcygpIH1cIlxuICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0Q3Vyc29yQ29tcG9uZW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXctY3Vyc29yIFtpbnB1dENsYXNzXT1cImN1cnNvckNsYXNzKClcIj5cbiAgICAgICAgICAgIDwvY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlldy1jdXJzb3I+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0TWVzc2FnZVZpZXcge1xuICAvLyBDb3JlIGlucHV0cyBtYXRjaGluZyBSZWFjdCBwcm9wc1xuICBtZXNzYWdlcyA9IGlucHV0PE1lc3NhZ2VbXT4oW10pO1xuICBzaG93Q3Vyc29yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gSGFuZGxlciBhdmFpbGFiaWxpdHkgaGFuZGxlZCB2aWEgREkgc2VydmljZVxuXG4gIC8vIEFzc2lzdGFudCBtZXNzYWdlIHNsb3QgaW5wdXRzXG4gIGFzc2lzdGFudE1lc3NhZ2VDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGFzc2lzdGFudE1lc3NhZ2VUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGFzc2lzdGFudE1lc3NhZ2VDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBVc2VyIG1lc3NhZ2Ugc2xvdCBpbnB1dHNcbiAgdXNlck1lc3NhZ2VDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIHVzZXJNZXNzYWdlVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPigpO1xuICB1c2VyTWVzc2FnZUNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8vIEN1cnNvciBzbG90IGlucHV0c1xuICBjdXJzb3JDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGN1cnNvclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgY3Vyc29yQ2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gQ3VzdG9tIGxheW91dCB0ZW1wbGF0ZSAocmVuZGVyIHByb3AgcGF0dGVybilcbiAgQENvbnRlbnRDaGlsZChcImN1c3RvbUxheW91dFwiKSBjdXN0b21MYXlvdXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLy8gT3V0cHV0IGV2ZW50cyAoYnViYmxlZCBmcm9tIGNoaWxkIGNvbXBvbmVudHMpXG4gIGFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcCA9IG91dHB1dDx7IG1lc3NhZ2U6IE1lc3NhZ2UgfT4oKTtcbiAgYXNzaXN0YW50TWVzc2FnZVRodW1ic0Rvd24gPSBvdXRwdXQ8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIGFzc2lzdGFudE1lc3NhZ2VSZWFkQWxvdWQgPSBvdXRwdXQ8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIGFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlID0gb3V0cHV0PHsgbWVzc2FnZTogTWVzc2FnZSB9PigpO1xuICB1c2VyTWVzc2FnZUNvcHkgPSBvdXRwdXQ8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIHVzZXJNZXNzYWdlRWRpdCA9IG91dHB1dDx7IG1lc3NhZ2U6IE1lc3NhZ2UgfT4oKTtcblxuICAvLyBEZWZhdWx0IGNvbXBvbmVudHMgZm9yIHNsb3RzXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0QXNzaXN0YW50Q29tcG9uZW50ID0gQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFVzZXJDb21wb25lbnQgPSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdEN1cnNvckNvbXBvbmVudCA9IENvcGlsb3RDaGF0TWVzc2FnZVZpZXdDdXJzb3I7XG5cbiAgLy8gRGVyaXZlZCB2YWx1ZXMgZnJvbSBpbnB1dHNcbiAgcHJvdGVjdGVkIG1lc3NhZ2VzVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1lc3NhZ2VzKCkpO1xuICBwcm90ZWN0ZWQgc2hvd0N1cnNvclZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zaG93Q3Vyc29yKCkpO1xuICBwcm90ZWN0ZWQgaXNMb2FkaW5nVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzTG9hZGluZygpKTtcblxuICAvLyBDb21wdXRlZCBjbGFzcyBtYXRjaGluZyBSZWFjdDogdHdNZXJnZShcImZsZXggZmxleC1jb2xcIiwgY2xhc3NOYW1lKVxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4gY24oXCJmbGV4IGZsZXgtY29sXCIsIHRoaXMuaW5wdXRDbGFzcygpKSk7XG5cbiAgLy8gTGF5b3V0IGNvbnRleHQgZm9yIGN1c3RvbSB0ZW1wbGF0ZXMgKHJlbmRlciBwcm9wIHBhdHRlcm4pXG4gIGxheW91dENvbnRleHQgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdWYWx1ZSgpLFxuICAgIG1lc3NhZ2VzOiB0aGlzLm1lc3NhZ2VzVmFsdWUoKSxcbiAgICBzaG93Q3Vyc29yOiB0aGlzLnNob3dDdXJzb3JWYWx1ZSgpLFxuICAgIG1lc3NhZ2VFbGVtZW50czogdGhpcy5tZXNzYWdlc1ZhbHVlKCkuZmlsdGVyKFxuICAgICAgKG0pID0+IG0gJiYgKG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiB8fCBtLnJvbGUgPT09IFwidXNlclwiKVxuICAgICksXG4gIH0pKTtcblxuICAvLyBTbG90IHJlc29sdXRpb24gY29tcHV0ZWQgc2lnbmFsc1xuICBhc3Npc3RhbnRNZXNzYWdlU2xvdCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXNzaXN0YW50TWVzc2FnZUNvbXBvbmVudCgpIHx8IHRoaXMuYXNzaXN0YW50TWVzc2FnZUNsYXNzKClcbiAgKTtcblxuICB1c2VyTWVzc2FnZVNsb3QgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnVzZXJNZXNzYWdlQ29tcG9uZW50KCkgfHwgdGhpcy51c2VyTWVzc2FnZUNsYXNzKClcbiAgKTtcblxuICBjdXJzb3JTbG90ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJzb3JDb21wb25lbnQoKSB8fCB0aGlzLmN1cnNvckNsYXNzKCkpO1xuXG4gIC8vIFByb3BzIG1lcmdpbmcgaGVscGVyc1xuICBtZXJnZUFzc2lzdGFudFByb3BzKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG1lc3NhZ2VzOiB0aGlzLm1lc3NhZ2VzVmFsdWUoKSxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdWYWx1ZSgpLFxuICAgICAgaW5wdXRDbGFzczogdGhpcy5hc3Npc3RhbnRNZXNzYWdlQ2xhc3MoKSxcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VVc2VyUHJvcHMobWVzc2FnZTogTWVzc2FnZSkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaW5wdXRDbGFzczogdGhpcy51c2VyTWVzc2FnZUNsYXNzKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRyYWNrQnkgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICB0cmFja0J5TWVzc2FnZUlkKGluZGV4OiBudW1iZXIsIG1lc3NhZ2U6IE1lc3NhZ2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBtZXNzYWdlPy5pZCB8fCBgaW5kZXgtJHtpbmRleH1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8vIEV2ZW50IGhhbmRsZXJzIC0ganVzdCBwYXNzIHRoZW0gdGhyb3VnaFxuICBoYW5kbGVBc3Npc3RhbnRUaHVtYnNVcChldmVudDogeyBtZXNzYWdlOiBNZXNzYWdlIH0pOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGhhbmRsZUFzc2lzdGFudFRodW1ic0Rvd24oZXZlbnQ6IHsgbWVzc2FnZTogTWVzc2FnZSB9KTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGhhbmRsZUFzc2lzdGFudFJlYWRBbG91ZChldmVudDogeyBtZXNzYWdlOiBNZXNzYWdlIH0pOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudE1lc3NhZ2VSZWFkQWxvdWQuZW1pdChldmVudCk7XG4gIH1cblxuICBoYW5kbGVBc3Npc3RhbnRSZWdlbmVyYXRlKGV2ZW50OiB7IG1lc3NhZ2U6IE1lc3NhZ2UgfSk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50TWVzc2FnZVJlZ2VuZXJhdGUuZW1pdChldmVudCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LW1lc3NhZ2Utdmlldy50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXcudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuaW1wb3J0IHsgVHlwZSwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vLyBDb250ZXh0IGludGVyZmFjZXMgZm9yIHRlbXBsYXRlIHNsb3RzXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VWaWV3Q29udGV4dCB7XG4gIHNob3dDdXJzb3I6IGJvb2xlYW47XG4gIG1lc3NhZ2VzOiBNZXNzYWdlW107XG4gIG1lc3NhZ2VFbGVtZW50czogYW55W107IC8vIFdpbGwgYmUgcG9wdWxhdGVkIHdpdGggcmVuZGVyZWQgZWxlbWVudHNcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBDdXJzb3JDb250ZXh0IHtcbiAgLy8gRW1wdHkgZm9yIG5vdywgY2FuIGJlIGV4dGVuZGVkIGlmIG5lZWRlZFxufVxuXG4vLyBDb21wb25lbnQgaW5wdXQgcHJvcHMgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0TWVzc2FnZVZpZXdQcm9wcyB7XG4gIG1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuICBzaG93Q3Vyc29yPzogYm9vbGVhbjtcbiAgaW5wdXRDbGFzcz86IHN0cmluZztcblxuICAvLyBBc3Npc3RhbnQgbWVzc2FnZSBzbG90c1xuICBhc3Npc3RhbnRNZXNzYWdlQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBhc3Npc3RhbnRNZXNzYWdlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBhc3Npc3RhbnRNZXNzYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLy8gVXNlciBtZXNzYWdlIHNsb3RzXG4gIHVzZXJNZXNzYWdlQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICB1c2VyTWVzc2FnZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdXNlck1lc3NhZ2VDbGFzcz86IHN0cmluZztcblxuICAvLyBDdXJzb3Igc2xvdHNcbiAgY3Vyc29yQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBjdXJzb3JUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGN1cnNvckNsYXNzPzogc3RyaW5nO1xufVxuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IE1lc3NhZ2UgfTtcbiJdfQ==
@@ -0,0 +1,139 @@
1
+ import { Component, input, output, ElementRef, signal, computed, inject, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { cn } from "../../utils";
3
+ import { injectChatLabels } from "../../chat-config";
4
+ import { injectChatState } from "../../chat-state";
5
+ import * as i0 from "@angular/core";
6
+ export class CopilotChatTextarea {
7
+ elementRef = inject((ElementRef));
8
+ get textareaRef() {
9
+ return this.elementRef;
10
+ }
11
+ inputValue = input();
12
+ inputPlaceholder = input();
13
+ inputMaxRows = input();
14
+ inputAutoFocus = input();
15
+ inputDisabled = input();
16
+ inputClass = input();
17
+ valueChange = output();
18
+ keyDown = output();
19
+ chatLabels = injectChatLabels();
20
+ chatState = injectChatState();
21
+ // Internal signals
22
+ maxHeight = signal(0);
23
+ // Computed values
24
+ computedValue = computed(() => this.inputValue() ?? this.chatState.inputValue() ?? "");
25
+ placeholder = computed(() => this.inputPlaceholder() || this.chatLabels.chatInputPlaceholder);
26
+ disabled = computed(() => this.inputDisabled() ?? false);
27
+ computedClass = computed(() => {
28
+ const baseClasses = cn(
29
+ // Layout and sizing
30
+ "w-full p-5 pb-0",
31
+ // Behavior
32
+ "outline-none resize-none",
33
+ // Background
34
+ "bg-transparent",
35
+ // Typography
36
+ "antialiased font-regular leading-relaxed text-[16px]",
37
+ // Placeholder styles
38
+ "placeholder:text-[#00000077] dark:placeholder:text-[#fffc]");
39
+ return cn(baseClasses, this.inputClass());
40
+ });
41
+ constructor() { }
42
+ ngAfterViewInit() {
43
+ this.calculateMaxHeight();
44
+ this.adjustHeight();
45
+ if (this.inputAutoFocus() ?? true) {
46
+ setTimeout(() => {
47
+ this.elementRef.nativeElement.focus();
48
+ });
49
+ }
50
+ }
51
+ onInput(event) {
52
+ const textarea = event.target;
53
+ const newValue = textarea.value;
54
+ this.valueChange.emit(newValue);
55
+ this.chatState.changeInput(newValue);
56
+ this.adjustHeight();
57
+ }
58
+ onKeyDown(event) {
59
+ // Check for Enter key without Shift
60
+ if (event.key === "Enter" && !event.shiftKey) {
61
+ event.preventDefault();
62
+ this.keyDown.emit(event);
63
+ }
64
+ else {
65
+ this.keyDown.emit(event);
66
+ }
67
+ }
68
+ calculateMaxHeight() {
69
+ const textarea = this.elementRef.nativeElement;
70
+ const maxRowsValue = this.inputMaxRows() ?? 5;
71
+ // Save current value
72
+ const currentValue = textarea.value;
73
+ // Clear content to measure single row height
74
+ textarea.value = "";
75
+ textarea.style.height = "auto";
76
+ // Get computed styles to account for padding
77
+ const computedStyle = window.getComputedStyle(textarea);
78
+ const paddingTop = parseFloat(computedStyle.paddingTop);
79
+ const paddingBottom = parseFloat(computedStyle.paddingBottom);
80
+ // Calculate actual content height (without padding)
81
+ const contentHeight = textarea.scrollHeight - paddingTop - paddingBottom;
82
+ // Calculate max height: content height for maxRows + padding
83
+ const calculatedMaxHeight = contentHeight * maxRowsValue + paddingTop + paddingBottom;
84
+ this.maxHeight.set(calculatedMaxHeight);
85
+ // Restore original value
86
+ textarea.value = currentValue;
87
+ // Adjust height after calculating maxHeight
88
+ if (currentValue) {
89
+ this.adjustHeight();
90
+ }
91
+ }
92
+ adjustHeight() {
93
+ const textarea = this.elementRef.nativeElement;
94
+ const maxHeightValue = this.maxHeight();
95
+ if (maxHeightValue > 0) {
96
+ textarea.style.height = "auto";
97
+ textarea.style.height = `${Math.min(textarea.scrollHeight, maxHeightValue)}px`;
98
+ }
99
+ }
100
+ /**
101
+ * Public method to focus the textarea
102
+ */
103
+ focus() {
104
+ this.elementRef.nativeElement.focus();
105
+ }
106
+ /**
107
+ * Public method to get current value
108
+ */
109
+ getValue() {
110
+ return this.elementRef.nativeElement.value;
111
+ }
112
+ /**
113
+ * Public method to set value programmatically
114
+ */
115
+ setValue(value) {
116
+ this.elementRef.nativeElement.value = value;
117
+ this.valueChange.emit(value);
118
+ this.chatState.changeInput(value);
119
+ setTimeout(() => this.adjustHeight());
120
+ }
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatTextarea, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatTextarea, isStandalone: true, selector: "textarea[copilotChatTextarea]", inputs: { inputValue: { classPropertyName: "inputValue", publicName: "inputValue", isSignal: true, isRequired: false, transformFunction: null }, inputPlaceholder: { classPropertyName: "inputPlaceholder", publicName: "inputPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, inputMaxRows: { classPropertyName: "inputMaxRows", publicName: "inputMaxRows", isSignal: true, isRequired: false, transformFunction: null }, inputAutoFocus: { classPropertyName: "inputAutoFocus", publicName: "inputAutoFocus", isSignal: true, isRequired: false, transformFunction: null }, inputDisabled: { classPropertyName: "inputDisabled", publicName: "inputDisabled", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", keyDown: "keyDown" }, host: { listeners: { "input": "onInput($event)", "keydown": "onKeyDown($event)" }, properties: { "value": "computedValue()", "placeholder": "placeholder()", "disabled": "disabled()", "class": "computedClass()", "style.max-height.px": "maxHeight()", "style.overflow": "'auto'", "style.resize": "'none'", "attr.rows": "1" } }, ngImport: i0, template: "", isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatTextarea, decorators: [{
125
+ type: Component,
126
+ args: [{ selector: "textarea[copilotChatTextarea]", standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
127
+ "[value]": "computedValue()",
128
+ "[placeholder]": "placeholder()",
129
+ "[disabled]": "disabled()",
130
+ "[class]": "computedClass()",
131
+ "[style.max-height.px]": "maxHeight()",
132
+ "[style.overflow]": "'auto'",
133
+ "[style.resize]": "'none'",
134
+ "(input)": "onInput($event)",
135
+ "(keydown)": "onKeyDown($event)",
136
+ "[attr.rows]": "1",
137
+ }, template: "" }]
138
+ }], ctorParameters: () => [] });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRleHRhcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXRleHRhcmVhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBRVYsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUF1Qm5ELE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQStCLENBQUEsQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxnQkFBZ0IsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDL0MsWUFBWSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUMzQyxjQUFjLEdBQUcsS0FBSyxFQUF1QixDQUFDO0lBQzlDLGFBQWEsR0FBRyxLQUFLLEVBQXVCLENBQUM7SUFDN0MsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUV6QyxXQUFXLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDL0IsT0FBTyxHQUFHLE1BQU0sRUFBaUIsQ0FBQztJQUV6QixVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoQyxTQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFFdkMsbUJBQW1CO0lBQ25CLFNBQVMsR0FB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S0FBYTtRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQW5KVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw4ekNBSHBCLEVBQUU7OzRGQUdELG1CQUFtQjtrQkFyQi9CLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxFQUFFLG1CQUNNLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLFlBQVksRUFBRSxZQUFZO3dCQUMxQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1Qix1QkFBdUIsRUFBRSxhQUFhO3dCQUN0QyxrQkFBa0IsRUFBRSxRQUFRO3dCQUM1QixnQkFBZ0IsRUFBRSxRQUFRO3dCQUMxQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO3dCQUNoQyxhQUFhLEVBQUUsR0FBRztxQkFDbkIsWUFDUyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0U3RhdGUgfSBmcm9tIFwiLi4vLi4vY2hhdC1zdGF0ZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwidGV4dGFyZWFbY29waWxvdENoYXRUZXh0YXJlYV1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgXCJbdmFsdWVdXCI6IFwiY29tcHV0ZWRWYWx1ZSgpXCIsXG4gICAgXCJbcGxhY2Vob2xkZXJdXCI6IFwicGxhY2Vob2xkZXIoKVwiLFxuICAgIFwiW2Rpc2FibGVkXVwiOiBcImRpc2FibGVkKClcIixcbiAgICBcIltjbGFzc11cIjogXCJjb21wdXRlZENsYXNzKClcIixcbiAgICBcIltzdHlsZS5tYXgtaGVpZ2h0LnB4XVwiOiBcIm1heEhlaWdodCgpXCIsXG4gICAgXCJbc3R5bGUub3ZlcmZsb3ddXCI6IFwiJ2F1dG8nXCIsXG4gICAgXCJbc3R5bGUucmVzaXplXVwiOiBcIidub25lJ1wiLFxuICAgIFwiKGlucHV0KVwiOiBcIm9uSW5wdXQoJGV2ZW50KVwiLFxuICAgIFwiKGtleWRvd24pXCI6IFwib25LZXlEb3duKCRldmVudClcIixcbiAgICBcIlthdHRyLnJvd3NdXCI6IFwiMVwiLFxuICB9LFxuICB0ZW1wbGF0ZTogXCJcIixcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUZXh0YXJlYSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50Pik7XG4gIGdldCB0ZXh0YXJlYVJlZigpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmO1xuICB9XG5cbiAgaW5wdXRWYWx1ZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgaW5wdXRQbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgaW5wdXRNYXhSb3dzID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBpbnB1dEF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7XG4gIGlucHV0RGlzYWJsZWQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHZhbHVlQ2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcbiAga2V5RG93biA9IG91dHB1dDxLZXlib2FyZEV2ZW50PigpO1xuXG4gIHJlYWRvbmx5IGNoYXRMYWJlbHMgPSBpbmplY3RDaGF0TGFiZWxzKCk7XG4gIHJlYWRvbmx5IGNoYXRTdGF0ZSA9IGluamVjdENoYXRTdGF0ZSgpO1xuXG4gIC8vIEludGVybmFsIHNpZ25hbHNcbiAgbWF4SGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgLy8gQ29tcHV0ZWQgdmFsdWVzXG4gIGNvbXB1dGVkVmFsdWUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmlucHV0VmFsdWUoKSA/PyB0aGlzLmNoYXRTdGF0ZS5pbnB1dFZhbHVlKCkgPz8gXCJcIlxuICApO1xuICBwbGFjZWhvbGRlciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuaW5wdXRQbGFjZWhvbGRlcigpIHx8IHRoaXMuY2hhdExhYmVscy5jaGF0SW5wdXRQbGFjZWhvbGRlclxuICApO1xuICBkaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXREaXNhYmxlZCgpID8/IGZhbHNlKTtcblxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gY24oXG4gICAgICAvLyBMYXlvdXQgYW5kIHNpemluZ1xuICAgICAgXCJ3LWZ1bGwgcC01IHBiLTBcIixcbiAgICAgIC8vIEJlaGF2aW9yXG4gICAgICBcIm91dGxpbmUtbm9uZSByZXNpemUtbm9uZVwiLFxuICAgICAgLy8gQmFja2dyb3VuZFxuICAgICAgXCJiZy10cmFuc3BhcmVudFwiLFxuICAgICAgLy8gVHlwb2dyYXBoeVxuICAgICAgXCJhbnRpYWxpYXNlZCBmb250LXJlZ3VsYXIgbGVhZGluZy1yZWxheGVkIHRleHQtWzE2cHhdXCIsXG4gICAgICAvLyBQbGFjZWhvbGRlciBzdHlsZXNcbiAgICAgIFwicGxhY2Vob2xkZXI6dGV4dC1bIzAwMDAwMDc3XSBkYXJrOnBsYWNlaG9sZGVyOnRleHQtWyNmZmZjXVwiXG4gICAgKTtcbiAgICByZXR1cm4gY24oYmFzZUNsYXNzZXMsIHRoaXMuaW5wdXRDbGFzcygpKTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGN1bGF0ZU1heEhlaWdodCgpO1xuICAgIHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG5cbiAgICBpZiAodGhpcy5pbnB1dEF1dG9Gb2N1cygpID8/IHRydWUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGV4dGFyZWEudmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcblxuICAgIHRoaXMuY2hhdFN0YXRlLmNoYW5nZUlucHV0KG5ld1ZhbHVlKTtcblxuICAgIHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgRW50ZXIga2V5IHdpdGhvdXQgU2hpZnRcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5rZXlEb3duLmVtaXQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmtleURvd24uZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhIZWlnaHQoKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBtYXhSb3dzVmFsdWUgPSB0aGlzLmlucHV0TWF4Um93cygpID8/IDU7XG5cbiAgICAvLyBTYXZlIGN1cnJlbnQgdmFsdWVcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTtcblxuICAgIC8vIENsZWFyIGNvbnRlbnQgdG8gbWVhc3VyZSBzaW5nbGUgcm93IGhlaWdodFxuICAgIHRleHRhcmVhLnZhbHVlID0gXCJcIjtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcblxuICAgIC8vIEdldCBjb21wdXRlZCBzdHlsZXMgdG8gYWNjb3VudCBmb3IgcGFkZGluZ1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSk7XG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKTtcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20pO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFjdHVhbCBjb250ZW50IGhlaWdodCAod2l0aG91dCBwYWRkaW5nKVxuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcblxuICAgIC8vIENhbGN1bGF0ZSBtYXggaGVpZ2h0OiBjb250ZW50IGhlaWdodCBmb3IgbWF4Um93cyArIHBhZGRpbmdcbiAgICBjb25zdCBjYWxjdWxhdGVkTWF4SGVpZ2h0ID1cbiAgICAgIGNvbnRlbnRIZWlnaHQgKiBtYXhSb3dzVmFsdWUgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbTtcbiAgICB0aGlzLm1heEhlaWdodC5zZXQoY2FsY3VsYXRlZE1heEhlaWdodCk7XG5cbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlXG4gICAgdGV4dGFyZWEudmFsdWUgPSBjdXJyZW50VmFsdWU7XG5cbiAgICAvLyBBZGp1c3QgaGVpZ2h0IGFmdGVyIGNhbGN1bGF0aW5nIG1heEhlaWdodFxuICAgIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RIZWlnaHQoKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBtYXhIZWlnaHRWYWx1ZSA9IHRoaXMubWF4SGVpZ2h0KCk7XG5cbiAgICBpZiAobWF4SGVpZ2h0VmFsdWUgPiAwKSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke01hdGgubWluKHRleHRhcmVhLnNjcm9sbEhlaWdodCwgbWF4SGVpZ2h0VmFsdWUpfXB4YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBmb2N1cyB0aGUgdGV4dGFyZWFcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBnZXQgY3VycmVudCB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBzZXQgdmFsdWUgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgc2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcblxuICAgIHRoaXMuY2hhdFN0YXRlLmNoYW5nZUlucHV0KHZhbHVlKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGp1c3RIZWlnaHQoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Component, ChangeDetectionStrategy, input } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { RenderToolCalls } from "../../render-tool-calls";
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatToolCallsView {
6
+ message = input.required();
7
+ messages = input.required();
8
+ isLoading = input(false);
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolCallsView, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatToolCallsView, isStandalone: true, selector: "copilot-chat-tool-calls-view", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
11
+ <copilot-render-tool-calls
12
+ [message]="message()"
13
+ [messages]="messages()"
14
+ [isLoading]="isLoading()"
15
+ >
16
+ </copilot-render-tool-calls>
17
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RenderToolCalls, selector: "copilot-render-tool-calls", inputs: ["message", "messages", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolCallsView, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ standalone: true,
23
+ selector: "copilot-chat-tool-calls-view",
24
+ imports: [CommonModule, RenderToolCalls],
25
+ changeDetection: ChangeDetectionStrategy.OnPush,
26
+ template: `
27
+ <copilot-render-tool-calls
28
+ [message]="message()"
29
+ [messages]="messages()"
30
+ [isLoading]="isLoading()"
31
+ >
32
+ </copilot-render-tool-calls>
33
+ `,
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFnQjFELE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW9CLENBQUM7SUFDN0MsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWEsQ0FBQztJQUN2QyxTQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO3dHQUhoQyx3QkFBd0I7NEZBQXhCLHdCQUF3QixxZUFUekI7Ozs7Ozs7R0FPVCwyREFUUyxZQUFZLCtCQUFFLGVBQWU7OzRGQVc1Qix3QkFBd0I7a0JBZHBDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7b0JBQ3hDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7R0FPVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIGlucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgQXNzaXN0YW50TWVzc2FnZSwgTWVzc2FnZSB9IGZyb20gXCJAYWctdWkvY29yZVwiO1xuaW1wb3J0IHsgUmVuZGVyVG9vbENhbGxzIH0gZnJvbSBcIi4uLy4uL3JlbmRlci10b29sLWNhbGxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdG9vbC1jYWxscy12aWV3XCIsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlbmRlclRvb2xDYWxsc10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxjb3BpbG90LXJlbmRlci10b29sLWNhbGxzXG4gICAgICBbbWVzc2FnZV09XCJtZXNzYWdlKClcIlxuICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzKClcIlxuICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmcoKVwiXG4gICAgPlxuICAgIDwvY29waWxvdC1yZW5kZXItdG9vbC1jYWxscz5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sQ2FsbHNWaWV3IHtcbiAgcmVhZG9ubHkgbWVzc2FnZSA9IGlucHV0LnJlcXVpcmVkPEFzc2lzdGFudE1lc3NhZ2U+KCk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VzID0gaW5wdXQucmVxdWlyZWQ8TWVzc2FnZVtdPigpO1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Component, input, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { cn } from "../../utils";
4
+ import * as i0 from "@angular/core";
5
+ export class CopilotChatToolbar {
6
+ inputClass = input();
7
+ computedClass = computed(() => {
8
+ const baseClasses = "w-full h-[60px] bg-transparent flex items-center justify-between";
9
+ return cn(baseClasses, this.inputClass());
10
+ });
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatToolbar, isStandalone: true, selector: "div[copilotChatToolbar]", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbar, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: "div[copilotChatToolbar]", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
17
+ "[class]": "computedClass()",
18
+ }, template: `<ng-content></ng-content>` }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2xiYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdG9vbGJhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFjakMsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRXpDLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sV0FBVyxHQUNmLGtFQUFrRSxDQUFDO1FBQ3JFLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQzt3R0FQUSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw0UkFIbkIsMkJBQTJCLDJEQU4zQixZQUFZOzs0RkFTWCxrQkFBa0I7a0JBWjlCLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLFNBQVMsRUFBRSxpQkFBaUI7cUJBQzdCLFlBQ1MsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkaXZbY29waWxvdENoYXRUb29sYmFyXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBcIltjbGFzc11cIjogXCJjb21wdXRlZENsYXNzKClcIixcbiAgfSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sYmFyIHtcbiAgcmVhZG9ubHkgaW5wdXRDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICByZWFkb25seSBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID1cbiAgICAgIFwidy1mdWxsIGgtWzYwcHhdIGJnLXRyYW5zcGFyZW50IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiO1xuICAgIHJldHVybiBjbihiYXNlQ2xhc3NlcywgdGhpcy5pbnB1dENsYXNzKCkpO1xuICB9KTtcbn1cbiJdfQ==