@copilotkitnext/angular 0.0.28 → 0.0.30

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 (65) hide show
  1. package/coverage/clover.xml +2008 -0
  2. package/coverage/coverage-final.json +44 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +87 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +251 -0
  7. package/coverage/lcov-report/prettify.css +1 -0
  8. package/coverage/lcov-report/prettify.js +2 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +210 -0
  11. package/coverage/lcov-report/src/components/chat/copilot-chat-assistant-message-buttons.ts.html +1039 -0
  12. package/coverage/lcov-report/src/components/chat/copilot-chat-assistant-message-renderer.ts.html +1411 -0
  13. package/coverage/lcov-report/src/components/chat/copilot-chat-assistant-message-toolbar.ts.html +145 -0
  14. package/coverage/lcov-report/src/components/chat/copilot-chat-assistant-message.ts.html +1486 -0
  15. package/coverage/lcov-report/src/components/chat/copilot-chat-audio-recorder.ts.html +811 -0
  16. package/coverage/lcov-report/src/components/chat/copilot-chat-buttons.ts.html +1009 -0
  17. package/coverage/lcov-report/src/components/chat/copilot-chat-input.ts.html +1519 -0
  18. package/coverage/lcov-report/src/components/chat/copilot-chat-input.types.ts.html +529 -0
  19. package/coverage/lcov-report/src/components/chat/copilot-chat-message-view-cursor.ts.html +196 -0
  20. package/coverage/lcov-report/src/components/chat/copilot-chat-message-view.ts.html +715 -0
  21. package/coverage/lcov-report/src/components/chat/copilot-chat-textarea.ts.html +634 -0
  22. package/coverage/lcov-report/src/components/chat/copilot-chat-tool-calls-view.ts.html +889 -0
  23. package/coverage/lcov-report/src/components/chat/copilot-chat-toolbar.ts.html +175 -0
  24. package/coverage/lcov-report/src/components/chat/copilot-chat-tools-menu.ts.html +625 -0
  25. package/coverage/lcov-report/src/components/chat/copilot-chat-user-message-branch-navigation.ts.html +403 -0
  26. package/coverage/lcov-report/src/components/chat/copilot-chat-user-message-buttons.ts.html +580 -0
  27. package/coverage/lcov-report/src/components/chat/copilot-chat-user-message-renderer.ts.html +181 -0
  28. package/coverage/lcov-report/src/components/chat/copilot-chat-user-message-toolbar.ts.html +184 -0
  29. package/coverage/lcov-report/src/components/chat/copilot-chat-user-message.ts.html +784 -0
  30. package/coverage/lcov-report/src/components/chat/copilot-chat-view-handlers.ts.html +127 -0
  31. package/coverage/lcov-report/src/components/chat/index.html +401 -0
  32. package/coverage/lcov-report/src/core/chat-configuration/chat-configuration.providers.ts.html +304 -0
  33. package/coverage/lcov-report/src/core/chat-configuration/chat-configuration.ts.html +580 -0
  34. package/coverage/lcov-report/src/core/chat-configuration/chat-configuration.types.ts.html +256 -0
  35. package/coverage/lcov-report/src/core/chat-configuration/index.html +146 -0
  36. package/coverage/lcov-report/src/core/copilotkit.providers.ts.html +262 -0
  37. package/coverage/lcov-report/src/core/copilotkit.ts.html +1612 -0
  38. package/coverage/lcov-report/src/core/copilotkit.types.ts.html +478 -0
  39. package/coverage/lcov-report/src/core/index.html +146 -0
  40. package/coverage/lcov-report/src/directives/copilotkit-agent-context.ts.html +499 -0
  41. package/coverage/lcov-report/src/directives/copilotkit-agent.ts.html +742 -0
  42. package/coverage/lcov-report/src/directives/copilotkit-chat-config.ts.html +781 -0
  43. package/coverage/lcov-report/src/directives/copilotkit-config.ts.html +328 -0
  44. package/coverage/lcov-report/src/directives/copilotkit-frontend-tool.ts.html +517 -0
  45. package/coverage/lcov-report/src/directives/copilotkit-human-in-the-loop.ts.html +925 -0
  46. package/coverage/lcov-report/src/directives/index.html +191 -0
  47. package/coverage/lcov-report/src/lib/directives/index.html +116 -0
  48. package/coverage/lcov-report/src/lib/directives/tooltip.ts.html +958 -0
  49. package/coverage/lcov-report/src/lib/index.html +116 -0
  50. package/coverage/lcov-report/src/lib/slots/copilot-slot.ts.html +526 -0
  51. package/coverage/lcov-report/src/lib/slots/index.html +146 -0
  52. package/coverage/lcov-report/src/lib/slots/slot.types.ts.html +274 -0
  53. package/coverage/lcov-report/src/lib/slots/slot.utils.ts.html +985 -0
  54. package/coverage/lcov-report/src/lib/utils.ts.html +112 -0
  55. package/coverage/lcov-report/src/testing/index.html +116 -0
  56. package/coverage/lcov-report/src/testing/testing.utils.ts.html +835 -0
  57. package/coverage/lcov-report/src/utils/agent.utils.ts.html +850 -0
  58. package/coverage/lcov-report/src/utils/chat-config.utils.ts.html +745 -0
  59. package/coverage/lcov-report/src/utils/frontend-tool.utils.ts.html +871 -0
  60. package/coverage/lcov-report/src/utils/human-in-the-loop.utils.ts.html +1150 -0
  61. package/coverage/lcov-report/src/utils/index.html +161 -0
  62. package/coverage/lcov-report/test-mocks/index.html +116 -0
  63. package/coverage/lcov-report/test-mocks/marked.ts.html +127 -0
  64. package/coverage/lcov.info +4216 -0
  65. package/package.json +3 -3
@@ -0,0 +1,634 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/components/chat/copilot-chat-textarea.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">src/components/chat</a> copilot-chat-textarea.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">89.7% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>61/68</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">67.5% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>27/40</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">81.25% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>13/16</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">90.47% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>57/63</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-yes">1x</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-yes">1x</span>
287
+ <span class="cline-any cline-yes">31x</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-yes">31x</span>
291
+ <span class="cline-any cline-yes">31x</span>
292
+ <span class="cline-any cline-yes">31x</span>
293
+ <span class="cline-any cline-yes">31x</span>
294
+ <span class="cline-any cline-yes">31x</span>
295
+ <span class="cline-any cline-yes">31x</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-yes">31x</span>
298
+ <span class="cline-any cline-yes">31x</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-yes">31x</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-yes">31x</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-yes">32x</span>
307
+ <span class="cline-any cline-yes">31x</span>
308
+ <span class="cline-any cline-yes">31x</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-yes">31x</span>
311
+ <span class="cline-any cline-yes">31x</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-yes">31x</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-yes">31x</span>
330
+ <span class="cline-any cline-yes">31x</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-yes">31x</span>
333
+ <span class="cline-any cline-yes">22x</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-yes">2x</span>
341
+ <span class="cline-any cline-yes">2x</span>
342
+ <span class="cline-any cline-yes">2x</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-yes">2x</span>
346
+ <span class="cline-any cline-yes">2x</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-yes">2x</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-yes">31x</span>
364
+ <span class="cline-any cline-yes">31x</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-yes">31x</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-yes">31x</span>
371
+ <span class="cline-any cline-yes">31x</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-yes">31x</span>
375
+ <span class="cline-any cline-yes">31x</span>
376
+ <span class="cline-any cline-yes">31x</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">31x</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-yes">31x</span>
383
+ <span class="cline-any cline-yes">31x</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-yes">31x</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-yes">31x</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-yes">33x</span>
396
+ <span class="cline-any cline-yes">33x</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-yes">33x</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-yes">1x</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-yes">3x</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-yes">5x</span>
423
+ <span class="cline-any cline-yes">5x</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-yes">5x</span>
426
+ <span class="cline-any cline-yes">5x</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-yes">5x</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
433
+ Component,
434
+ input,
435
+ output,
436
+ ElementRef,
437
+ AfterViewInit,
438
+ signal,
439
+ computed,
440
+ effect,
441
+ inject,
442
+ ChangeDetectionStrategy,
443
+ ViewEncapsulation
444
+ } from '@angular/core';
445
+ import { CopilotChatConfigurationService } from '../../core/chat-configuration/chat-configuration';
446
+ import { cn } from '../../lib/utils';
447
+ &nbsp;
448
+ @Component({
449
+ standalone: true,
450
+ selector: 'textarea[copilotChatTextarea]',
451
+ imports: [],
452
+ changeDetection: ChangeDetectionStrategy.OnPush,
453
+ encapsulation: ViewEncapsulation.None,
454
+ host: {
455
+ '[value]': 'computedValue()',
456
+ '[placeholder]': 'placeholder()',
457
+ '[disabled]': 'disabled()',
458
+ '[class]': 'computedClass()',
459
+ '[style.max-height.px]': 'maxHeight()',
460
+ '[style.overflow]': "'auto'",
461
+ '[style.resize]': "'none'",
462
+ '(input)': 'onInput($event)',
463
+ '(keydown)': 'onKeyDown($event)',
464
+ '[attr.rows]': '1'
465
+ },
466
+ template: '',
467
+ styles: []
468
+ })
469
+ export class CopilotChatTextarea implements AfterViewInit {
470
+ private elementRef = inject(ElementRef&lt;HTMLTextAreaElement&gt;);
471
+ <span class="fstat-no" title="function not covered" > get t</span>extareaRef() { <span class="cstat-no" title="statement not covered" >return this.elementRef; </span>}
472
+
473
+ inputValue = input&lt;string | undefined&gt;();
474
+ inputPlaceholder = input&lt;string | undefined&gt;();
475
+ inputMaxRows = input&lt;number | undefined&gt;();
476
+ inputAutoFocus = input&lt;boolean | undefined&gt;();
477
+ inputDisabled = input&lt;boolean | undefined&gt;();
478
+ inputClass = input&lt;string | undefined&gt;();
479
+
480
+ valueChange = output&lt;string&gt;();
481
+ keyDown = output&lt;KeyboardEvent&gt;();
482
+
483
+ private chatConfig = inject(CopilotChatConfigurationService);
484
+
485
+ // Internal signals
486
+ maxHeight = signal&lt;number&gt;(0);
487
+
488
+ // Computed values
489
+ computedValue = computed(() =&gt; this.inputValue() ?? <span class="branch-1 cbranch-no" title="branch not covered" >this.chatConfig.inputValue?.() </span>?? <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>;
490
+ placeholder = computed(() =&gt; this.inputPlaceholder() || this.chatConfig.labels().chatInputPlaceholder);
491
+ disabled = computed(() =&gt; this.inputDisabled() ?? <span class="branch-1 cbranch-no" title="branch not covered" >false)</span>;
492
+
493
+ computedClass = computed(() =&gt; {
494
+ const baseClasses = cn(
495
+ // Layout and sizing
496
+ 'w-full p-5 pb-0',
497
+ // Behavior
498
+ 'outline-none resize-none',
499
+ // Background
500
+ 'bg-transparent',
501
+ // Typography
502
+ 'antialiased font-regular leading-relaxed text-[16px]',
503
+ // Placeholder styles
504
+ 'placeholder:text-[#00000077] dark:placeholder:text-[#fffc]'
505
+ );
506
+ return cn(baseClasses, this.inputClass());
507
+ });
508
+
509
+ constructor() {}
510
+
511
+ ngAfterViewInit(): void {
512
+ this.calculateMaxHeight();
513
+ this.adjustHeight();
514
+
515
+ if (this.inputAutoFocus() ?? <span class="branch-1 cbranch-no" title="branch not covered" >true)</span> {
516
+ setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {
517
+ <span class="cstat-no" title="statement not covered" > this.elementRef.nativeElement.focus();</span>
518
+ });
519
+ }
520
+ }
521
+
522
+ onInput(event: Event): void {
523
+ const textarea = event.target as HTMLTextAreaElement;
524
+ const newValue = textarea.value;
525
+ this.valueChange.emit(newValue);
526
+
527
+ // Update chat configuration if available
528
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.chatConfig) {
529
+ this.chatConfig.setInputValue(newValue);
530
+ }
531
+
532
+ this.adjustHeight();
533
+ }
534
+
535
+ onKeyDown(event: KeyboardEvent): void {
536
+ // Check for Enter key without Shift
537
+ if (event.key === 'Enter' &amp;&amp; !event.shiftKey) {
538
+ event.preventDefault();
539
+ this.keyDown.emit(event);
540
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
541
+ <span class="cstat-no" title="statement not covered" > this.keyDown.emit(event);</span>
542
+ }
543
+ }
544
+
545
+ private calculateMaxHeight(): void {
546
+ const textarea = this.elementRef.nativeElement;
547
+ const maxRowsValue = this.inputMaxRows() ?? 5;
548
+
549
+ // Save current value
550
+ const currentValue = textarea.value;
551
+
552
+ // Clear content to measure single row height
553
+ textarea.value = '';
554
+ textarea.style.height = 'auto';
555
+
556
+ // Get computed styles to account for padding
557
+ const computedStyle = window.getComputedStyle(textarea);
558
+ const paddingTop = parseFloat(computedStyle.paddingTop);
559
+ const paddingBottom = parseFloat(computedStyle.paddingBottom);
560
+
561
+ // Calculate actual content height (without padding)
562
+ const contentHeight = textarea.scrollHeight - paddingTop - paddingBottom;
563
+
564
+ // Calculate max height: content height for maxRows + padding
565
+ const calculatedMaxHeight = contentHeight * maxRowsValue + paddingTop + paddingBottom;
566
+ this.maxHeight.set(calculatedMaxHeight);
567
+
568
+ // Restore original value
569
+ textarea.value = currentValue;
570
+
571
+ // Adjust height after calculating maxHeight
572
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (currentValue) {
573
+ <span class="cstat-no" title="statement not covered" > this.adjustHeight();</span>
574
+ }
575
+ }
576
+
577
+ private adjustHeight(): void {
578
+ const textarea = this.elementRef.nativeElement;
579
+ const maxHeightValue = this.maxHeight();
580
+
581
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (maxHeightValue &gt; 0) {
582
+ <span class="cstat-no" title="statement not covered" > textarea.style.height = 'auto';</span>
583
+ <span class="cstat-no" title="statement not covered" > textarea.style.height = `${Math.min(textarea.scrollHeight, maxHeightValue)}px`;</span>
584
+ }
585
+ }
586
+
587
+ /**
588
+ * Public method to focus the textarea
589
+ */
590
+ focus(): void {
591
+ this.elementRef.nativeElement.focus();
592
+ }
593
+
594
+ /**
595
+ * Public method to get current value
596
+ */
597
+ getValue(): string {
598
+ return this.elementRef.nativeElement.value;
599
+ }
600
+
601
+ /**
602
+ * Public method to set value programmatically
603
+ */
604
+ setValue(value: string): void {
605
+ this.elementRef.nativeElement.value = value;
606
+ this.valueChange.emit(value);
607
+
608
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.chatConfig) {
609
+ this.chatConfig.setInputValue(value);
610
+ }
611
+
612
+ setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >this.adjustHeight())</span>;
613
+ }
614
+ }
615
+ &nbsp;</pre></td></tr></table></pre>
616
+
617
+ <div class='push'></div><!-- for sticky footer -->
618
+ </div><!-- /wrapper -->
619
+ <div class='footer quiet pad2 space-top1 center small'>
620
+ Code coverage generated by
621
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
622
+ at 2025-09-15T01:22:45.642Z
623
+ </div>
624
+ <script src="../../../prettify.js"></script>
625
+ <script>
626
+ window.onload = function () {
627
+ prettyPrint();
628
+ };
629
+ </script>
630
+ <script src="../../../sorter.js"></script>
631
+ <script src="../../../block-navigation.js"></script>
632
+ </body>
633
+ </html>
634
+