@theia/ai-chat-ui 1.76.0-next.7 → 1.76.0

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 (134) hide show
  1. package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
  2. package/lib/browser/ai-chat-ui-frontend-module.js +6 -0
  3. package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
  4. package/lib/browser/chat-find/chat-find-contribution.d.ts +18 -0
  5. package/lib/browser/chat-find/chat-find-contribution.d.ts.map +1 -0
  6. package/lib/browser/chat-find/chat-find-contribution.js +76 -0
  7. package/lib/browser/chat-find/chat-find-contribution.js.map +1 -0
  8. package/lib/browser/chat-find/chat-find-highlighter.d.ts +114 -0
  9. package/lib/browser/chat-find/chat-find-highlighter.d.ts.map +1 -0
  10. package/lib/browser/chat-find/chat-find-highlighter.js +353 -0
  11. package/lib/browser/chat-find/chat-find-highlighter.js.map +1 -0
  12. package/lib/browser/chat-find/chat-find-highlighter.spec.d.ts +2 -0
  13. package/lib/browser/chat-find/chat-find-highlighter.spec.d.ts.map +1 -0
  14. package/lib/browser/chat-find/chat-find-highlighter.spec.js +283 -0
  15. package/lib/browser/chat-find/chat-find-highlighter.spec.js.map +1 -0
  16. package/lib/browser/chat-find/chat-find-matcher.d.ts +72 -0
  17. package/lib/browser/chat-find/chat-find-matcher.d.ts.map +1 -0
  18. package/lib/browser/chat-find/chat-find-matcher.js +168 -0
  19. package/lib/browser/chat-find/chat-find-matcher.js.map +1 -0
  20. package/lib/browser/chat-find/chat-find-matcher.spec.d.ts +2 -0
  21. package/lib/browser/chat-find/chat-find-matcher.spec.d.ts.map +1 -0
  22. package/lib/browser/chat-find/chat-find-matcher.spec.js +145 -0
  23. package/lib/browser/chat-find/chat-find-matcher.spec.js.map +1 -0
  24. package/lib/browser/chat-find/chat-find-text.d.ts +20 -0
  25. package/lib/browser/chat-find/chat-find-text.d.ts.map +1 -0
  26. package/lib/browser/chat-find/chat-find-text.js +56 -0
  27. package/lib/browser/chat-find/chat-find-text.js.map +1 -0
  28. package/lib/browser/chat-find/chat-find-widget.d.ts +96 -0
  29. package/lib/browser/chat-find/chat-find-widget.d.ts.map +1 -0
  30. package/lib/browser/chat-find/chat-find-widget.js +332 -0
  31. package/lib/browser/chat-find/chat-find-widget.js.map +1 -0
  32. package/lib/browser/chat-find/chat-find-widget.spec.d.ts +2 -0
  33. package/lib/browser/chat-find/chat-find-widget.spec.d.ts.map +1 -0
  34. package/lib/browser/chat-find/chat-find-widget.spec.js +236 -0
  35. package/lib/browser/chat-find/chat-find-widget.spec.js.map +1 -0
  36. package/lib/browser/chat-input-scroll-util.d.ts +7 -0
  37. package/lib/browser/chat-input-scroll-util.d.ts.map +1 -0
  38. package/lib/browser/chat-input-scroll-util.js +33 -0
  39. package/lib/browser/chat-input-scroll-util.js.map +1 -0
  40. package/lib/browser/chat-input-scroll-util.spec.d.ts +2 -0
  41. package/lib/browser/chat-input-scroll-util.spec.d.ts.map +1 -0
  42. package/lib/browser/chat-input-scroll-util.spec.js +38 -0
  43. package/lib/browser/chat-input-scroll-util.spec.js.map +1 -0
  44. package/lib/browser/chat-input-widget.d.ts +21 -3
  45. package/lib/browser/chat-input-widget.d.ts.map +1 -1
  46. package/lib/browser/chat-input-widget.js +109 -50
  47. package/lib/browser/chat-input-widget.js.map +1 -1
  48. package/lib/browser/chat-input-widget.spec.js +21 -0
  49. package/lib/browser/chat-input-widget.spec.js.map +1 -1
  50. package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
  51. package/lib/browser/chat-response-renderer/code-part-renderer.js +9 -1
  52. package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
  53. package/lib/browser/chat-response-renderer/code-wrapper-editors.d.ts +13 -0
  54. package/lib/browser/chat-response-renderer/code-wrapper-editors.d.ts.map +1 -0
  55. package/lib/browser/chat-response-renderer/code-wrapper-editors.js +41 -0
  56. package/lib/browser/chat-response-renderer/code-wrapper-editors.js.map +1 -0
  57. package/lib/browser/chat-response-renderer/delegation-tool-renderer.js +74 -43
  58. package/lib/browser/chat-response-renderer/delegation-tool-renderer.js.map +1 -1
  59. package/lib/browser/chat-response-renderer/index.d.ts +1 -0
  60. package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
  61. package/lib/browser/chat-response-renderer/index.js +1 -0
  62. package/lib/browser/chat-response-renderer/index.js.map +1 -1
  63. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +9 -0
  64. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
  65. package/lib/browser/chat-response-renderer/markdown-part-renderer.js +34 -16
  66. package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
  67. package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.d.ts.map +1 -1
  68. package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js +2 -2
  69. package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js.map +1 -1
  70. package/lib/browser/chat-response-renderer/spinner.d.ts +3 -0
  71. package/lib/browser/chat-response-renderer/spinner.d.ts.map +1 -0
  72. package/lib/browser/chat-response-renderer/spinner.js +24 -0
  73. package/lib/browser/chat-response-renderer/spinner.js.map +1 -0
  74. package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts +9 -1
  75. package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts.map +1 -1
  76. package/lib/browser/chat-response-renderer/thinking-part-renderer.js +93 -2
  77. package/lib/browser/chat-response-renderer/thinking-part-renderer.js.map +1 -1
  78. package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.d.ts +2 -0
  79. package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.d.ts.map +1 -0
  80. package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.js +84 -0
  81. package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.js.map +1 -0
  82. package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -1
  83. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +2 -2
  84. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
  85. package/lib/browser/chat-response-renderer/toolcall-part-renderer.spec.js +16 -0
  86. package/lib/browser/chat-response-renderer/toolcall-part-renderer.spec.js.map +1 -1
  87. package/lib/browser/chat-response-renderer/toolcall-utils.d.ts.map +1 -1
  88. package/lib/browser/chat-response-renderer/toolcall-utils.js +7 -2
  89. package/lib/browser/chat-response-renderer/toolcall-utils.js.map +1 -1
  90. package/lib/browser/chat-tree-view/chat-view-tree-container.d.ts.map +1 -1
  91. package/lib/browser/chat-tree-view/chat-view-tree-container.js +4 -0
  92. package/lib/browser/chat-tree-view/chat-view-tree-container.js.map +1 -1
  93. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +20 -1
  94. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -1
  95. package/lib/browser/chat-tree-view/chat-view-tree-widget.js +88 -7
  96. package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
  97. package/lib/common/toolcall-utils.d.ts +11 -1
  98. package/lib/common/toolcall-utils.d.ts.map +1 -1
  99. package/lib/common/toolcall-utils.js +191 -9
  100. package/lib/common/toolcall-utils.js.map +1 -1
  101. package/lib/common/toolcall-utils.spec.js +92 -4
  102. package/lib/common/toolcall-utils.spec.js.map +1 -1
  103. package/package.json +13 -13
  104. package/src/browser/ai-chat-ui-frontend-module.ts +7 -0
  105. package/src/browser/chat-find/chat-find-contribution.ts +74 -0
  106. package/src/browser/chat-find/chat-find-highlighter.spec.ts +313 -0
  107. package/src/browser/chat-find/chat-find-highlighter.ts +385 -0
  108. package/src/browser/chat-find/chat-find-matcher.spec.ts +173 -0
  109. package/src/browser/chat-find/chat-find-matcher.ts +197 -0
  110. package/src/browser/chat-find/chat-find-text.ts +65 -0
  111. package/src/browser/chat-find/chat-find-widget.spec.tsx +261 -0
  112. package/src/browser/chat-find/chat-find-widget.tsx +418 -0
  113. package/src/browser/chat-input-scroll-util.spec.ts +42 -0
  114. package/src/browser/chat-input-scroll-util.ts +30 -0
  115. package/src/browser/chat-input-widget.spec.ts +29 -0
  116. package/src/browser/chat-input-widget.tsx +118 -56
  117. package/src/browser/chat-response-renderer/code-part-renderer.tsx +9 -1
  118. package/src/browser/chat-response-renderer/code-wrapper-editors.ts +41 -0
  119. package/src/browser/chat-response-renderer/delegation-tool-renderer.tsx +88 -62
  120. package/src/browser/chat-response-renderer/index.ts +1 -0
  121. package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +34 -17
  122. package/src/browser/chat-response-renderer/server-toolcall-part-renderer.tsx +2 -5
  123. package/src/browser/chat-response-renderer/spinner.tsx +22 -0
  124. package/src/browser/chat-response-renderer/thinking-part-renderer.spec.tsx +104 -0
  125. package/src/browser/chat-response-renderer/thinking-part-renderer.tsx +129 -9
  126. package/src/browser/chat-response-renderer/toolcall-part-renderer.spec.ts +16 -0
  127. package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +1 -4
  128. package/src/browser/chat-response-renderer/toolcall-utils.ts +5 -0
  129. package/src/browser/chat-tree-view/chat-view-tree-container.ts +4 -0
  130. package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +99 -6
  131. package/src/browser/style/chat-find.css +107 -0
  132. package/src/browser/style/index.css +75 -8
  133. package/src/common/toolcall-utils.spec.ts +113 -4
  134. package/src/common/toolcall-utils.ts +207 -9
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var ChatFindWidget_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ChatFindWidget = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
7
+ const core_1 = require("@theia/core");
8
+ const browser_1 = require("@theia/core/lib/browser");
9
+ const context_key_service_1 = require("@theia/core/lib/browser/context-key-service");
10
+ const nls_1 = require("@theia/core/lib/common/nls");
11
+ const inversify_1 = require("@theia/core/shared/inversify");
12
+ require("../../../src/browser/style/chat-find.css");
13
+ const chat_find_matcher_1 = require("./chat-find-matcher");
14
+ /**
15
+ * The find bar of a chat view: owns query, options, matches and the current match, and tracks the
16
+ * chat model so matches follow streamed responses. Reveal and highlighting are done by the host
17
+ * (the chat tree widget) via {@link onDidRequestReveal} and {@link onDidChangeState}.
18
+ */
19
+ let ChatFindWidget = class ChatFindWidget extends browser_1.ReactWidget {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.onDidChangeStateEmitter = new core_1.Emitter();
23
+ this.onDidChangeState = this.onDidChangeStateEmitter.event;
24
+ this.onDidRequestRevealEmitter = new core_1.Emitter();
25
+ this.onDidRequestReveal = this.onDidRequestRevealEmitter.event;
26
+ this.query = '';
27
+ this.options = { matchCase: false, wholeWord: false, useRegex: false };
28
+ this.matches = [];
29
+ this.currentIndex = -1;
30
+ this.nodeOrder = new Map();
31
+ this.toDisposeOnModelChange = new core_1.DisposableCollection();
32
+ this.pendingFocus = false;
33
+ this.setInput = (input) => {
34
+ this.input = input ?? undefined;
35
+ if (input && this.pendingFocus) {
36
+ this.pendingFocus = false;
37
+ input.focus();
38
+ input.select();
39
+ }
40
+ };
41
+ this.handleInputChange = (event) => {
42
+ this.setQuery(event.target.value);
43
+ };
44
+ this.handleInputKeyDown = (event) => {
45
+ if (event.key === 'Enter') {
46
+ event.preventDefault();
47
+ event.stopPropagation();
48
+ if (event.shiftKey) {
49
+ this.previous();
50
+ }
51
+ else {
52
+ this.next();
53
+ }
54
+ }
55
+ else if (event.key === 'Escape') {
56
+ event.preventDefault();
57
+ event.stopPropagation();
58
+ this.dismiss();
59
+ }
60
+ };
61
+ this.handleToggleClick = (event) => {
62
+ const option = event.currentTarget.dataset.option;
63
+ if (option) {
64
+ this.toggleOption(option);
65
+ this.input?.focus();
66
+ }
67
+ };
68
+ this.handlePreviousClick = () => {
69
+ this.previous();
70
+ this.input?.focus();
71
+ };
72
+ this.handleNextClick = () => {
73
+ this.next();
74
+ this.input?.focus();
75
+ };
76
+ this.handleCloseClick = () => {
77
+ this.dismiss();
78
+ };
79
+ }
80
+ static { ChatFindWidget_1 = this; }
81
+ static { this.ID = 'chat-find-widget'; }
82
+ static { this.RECOMPUTE_DELAY_MS = 100; }
83
+ init() {
84
+ this.id = ChatFindWidget_1.ID;
85
+ this.addClass('theia-chat-find-widget');
86
+ this.visibleKey = this.contextKeyService.createKey('chatFindVisible', false);
87
+ // No perfect-scrollbar: its `.ps { overflow: hidden }` would clip the bar, which overflows this zero-height host.
88
+ this.scrollOptions = undefined;
89
+ this.toDispose.pushAll([this.onDidChangeStateEmitter, this.onDidRequestRevealEmitter, this.toDisposeOnModelChange]);
90
+ this.hide();
91
+ this.update();
92
+ }
93
+ dispose() {
94
+ if (this.recomputeTimeout !== undefined) {
95
+ clearTimeout(this.recomputeTimeout);
96
+ this.recomputeTimeout = undefined;
97
+ }
98
+ this.hideBar();
99
+ super.dispose();
100
+ }
101
+ get isOpen() {
102
+ return !this.isHidden;
103
+ }
104
+ get state() {
105
+ return { regexp: this.regexp, matches: this.matches, current: this.currentMatch };
106
+ }
107
+ get currentMatch() {
108
+ return this.matches[this.currentIndex];
109
+ }
110
+ /**
111
+ * Whether there is anything to search. A session without requests renders the welcome screen (which hosts
112
+ * the session list), so the find bar has nothing to search and stays closed there.
113
+ */
114
+ get canFind() {
115
+ return this.chatModel !== undefined && !this.chatModel.isEmpty();
116
+ }
117
+ /**
118
+ * Track a chat model; query and options are kept, the position resets. Like the find widget of an editor, the bar
119
+ * belongs to one session: it closes when another session is tracked, and `Ctrl+F` brings the query back.
120
+ */
121
+ setChatModel(model) {
122
+ if (model !== this.chatModel) {
123
+ // Not `dismiss()`: the user just picked another session, so focus must stay where it is.
124
+ this.hideBar();
125
+ }
126
+ this.toDisposeOnModelChange.dispose();
127
+ this.chatModel = model;
128
+ this.currentIndex = -1;
129
+ if (model) {
130
+ this.toDisposeOnModelChange.push(model.onDidChange(event => this.handleModelChange(event)));
131
+ model.getRequests().forEach(request => this.trackResponse(request));
132
+ }
133
+ this.recompute(false);
134
+ this.closeWhenNothingToFind();
135
+ }
136
+ open() {
137
+ if (!this.canFind) {
138
+ return;
139
+ }
140
+ const active = document.activeElement;
141
+ if (!this.isOpen && active instanceof HTMLElement && !this.node.contains(active)) {
142
+ this.previouslyFocused = active;
143
+ }
144
+ this.show();
145
+ this.visibleKey.set(true);
146
+ this.recompute(false);
147
+ this.focusInput();
148
+ }
149
+ /** Closes the bar and returns focus to where it was before the bar opened. */
150
+ dismiss() {
151
+ if (!this.isOpen) {
152
+ return;
153
+ }
154
+ const target = this.previouslyFocused?.isConnected ? this.previouslyFocused : this.fallbackFocusTarget;
155
+ this.hideBar();
156
+ target?.focus();
157
+ }
158
+ /** Closes the bar and clears the highlights without touching focus. */
159
+ hideBar() {
160
+ if (this.isDisposed || !this.isOpen) {
161
+ return;
162
+ }
163
+ this.hide();
164
+ this.visibleKey.set(false);
165
+ this.previouslyFocused = undefined;
166
+ this.onDidChangeStateEmitter.fire({ regexp: undefined, matches: [], current: undefined });
167
+ }
168
+ setQuery(query) {
169
+ if (query === this.query) {
170
+ return;
171
+ }
172
+ this.query = query;
173
+ this.recompute(true);
174
+ this.revealCurrent();
175
+ }
176
+ toggleOption(option) {
177
+ this.options = { ...this.options, [option]: !this.options[option] };
178
+ this.recompute(true);
179
+ this.revealCurrent();
180
+ }
181
+ next() {
182
+ this.step(1);
183
+ }
184
+ previous() {
185
+ this.step(-1);
186
+ }
187
+ step(delta) {
188
+ if (this.matches.length === 0) {
189
+ return;
190
+ }
191
+ this.currentIndex = (this.currentIndex + delta + this.matches.length) % this.matches.length;
192
+ this.update();
193
+ this.fireStateIfOpen();
194
+ this.revealCurrent();
195
+ }
196
+ revealCurrent() {
197
+ const current = this.currentMatch;
198
+ if (current) {
199
+ this.onDidRequestRevealEmitter.fire(current);
200
+ }
201
+ }
202
+ handleModelChange(event) {
203
+ if (event.kind === 'addRequest') {
204
+ this.trackResponse(event.request);
205
+ }
206
+ this.scheduleRecompute();
207
+ }
208
+ trackResponse(request) {
209
+ if (!request.response.isComplete) {
210
+ this.toDisposeOnModelChange.push(request.response.onDidChange(() => this.scheduleRecompute()));
211
+ }
212
+ }
213
+ scheduleRecompute() {
214
+ // A closed bar keeps its query but does not follow the model; `open()` recomputes.
215
+ if (!this.isOpen || this.recomputeTimeout !== undefined) {
216
+ return;
217
+ }
218
+ this.recomputeTimeout = setTimeout(() => {
219
+ this.recomputeTimeout = undefined;
220
+ this.recompute(false);
221
+ }, ChatFindWidget_1.RECOMPUTE_DELAY_MS);
222
+ }
223
+ /**
224
+ * Recompute matches. The current match is kept by identity when it still exists; otherwise (or when
225
+ * `moveToNearest` is set after a query change) the first match at or after the previous position becomes current.
226
+ * While the bar is closed there are no matches.
227
+ */
228
+ recompute(moveToNearest) {
229
+ const previous = this.currentMatch;
230
+ this.regexp = this.matcher.createRegExp(this.query, this.options);
231
+ this.nodeOrder = this.computeNodeOrder();
232
+ this.matches = this.isOpen && this.chatModel && this.regexp ? this.matcher.findMatches(this.chatModel, this.regexp) : [];
233
+ this.currentIndex = this.pickCurrentIndex(previous, moveToNearest);
234
+ this.update();
235
+ this.fireStateIfOpen();
236
+ this.closeWhenNothingToFind();
237
+ }
238
+ /** Closes the bar once the tracked session has no requests left to search. */
239
+ closeWhenNothingToFind() {
240
+ if (this.isOpen && !this.canFind) {
241
+ this.dismiss();
242
+ }
243
+ }
244
+ fireStateIfOpen() {
245
+ if (this.isOpen) {
246
+ this.onDidChangeStateEmitter.fire(this.state);
247
+ }
248
+ }
249
+ computeNodeOrder() {
250
+ const order = new Map();
251
+ this.chatModel?.getRequests().forEach((request, index) => {
252
+ order.set(request.id, 2 * index);
253
+ order.set(request.response.id, 2 * index + 1);
254
+ });
255
+ return order;
256
+ }
257
+ pickCurrentIndex(previous, moveToNearest) {
258
+ if (this.matches.length === 0) {
259
+ return -1;
260
+ }
261
+ if (!previous) {
262
+ return 0;
263
+ }
264
+ if (!moveToNearest) {
265
+ const key = chat_find_matcher_1.ChatFindMatch.key(previous);
266
+ const same = this.matches.findIndex(match => chat_find_matcher_1.ChatFindMatch.key(match) === key);
267
+ if (same >= 0) {
268
+ return same;
269
+ }
270
+ }
271
+ const nearest = this.matches.findIndex(match => this.compare(match, previous) >= 0);
272
+ return nearest >= 0 ? nearest : 0;
273
+ }
274
+ /** Document order of two matches: row order, then content index, then offset. */
275
+ compare(a, b) {
276
+ const rowA = this.nodeOrder.get(a.nodeId) ?? -1;
277
+ const rowB = this.nodeOrder.get(b.nodeId) ?? -1;
278
+ if (rowA !== rowB) {
279
+ return rowA - rowB;
280
+ }
281
+ const contentA = a.contentIndex ?? -1;
282
+ const contentB = b.contentIndex ?? -1;
283
+ if (contentA !== contentB) {
284
+ return contentA - contentB;
285
+ }
286
+ return a.start - b.start;
287
+ }
288
+ focusInput() {
289
+ if (this.input) {
290
+ this.input.focus();
291
+ this.input.select();
292
+ }
293
+ else {
294
+ this.pendingFocus = true;
295
+ }
296
+ }
297
+ render() {
298
+ const hasQuery = this.query.length > 0;
299
+ const count = this.matches.length;
300
+ const noResults = hasQuery && count === 0;
301
+ const label = count > 0
302
+ ? nls_1.nls.localizeByDefault('{0} of {1}', this.currentIndex + 1, count)
303
+ : nls_1.nls.localizeByDefault('No results');
304
+ return (0, jsx_runtime_1.jsxs)("div", { className: 'theia-chat-find-bar', role: 'search', children: [(0, jsx_runtime_1.jsxs)("div", { className: `theia-chat-find-input-box${noResults ? ' no-results' : ''}`, children: [(0, jsx_runtime_1.jsx)("input", { ref: this.setInput, type: 'text', className: 'theia-input', spellCheck: false, defaultValue: this.query, placeholder: nls_1.nls.localizeByDefault('Find'), title: nls_1.nls.localizeByDefault('Find'), "aria-label": nls_1.nls.localizeByDefault('Find'), onChange: this.handleInputChange, onKeyDown: this.handleInputKeyDown }), this.renderToggle('matchCase', 'case-sensitive', nls_1.nls.localizeByDefault('Match Case')), this.renderToggle('wholeWord', 'whole-word', nls_1.nls.localizeByDefault('Match Whole Word')), this.renderToggle('useRegex', 'regex', nls_1.nls.localizeByDefault('Use Regular Expression'))] }), (0, jsx_runtime_1.jsx)("span", { className: `theia-chat-find-count${noResults ? ' no-results' : ''}`, "aria-live": 'polite', children: label }), this.renderButton('arrow-up', nls_1.nls.localizeByDefault('Previous Match'), count > 0, this.handlePreviousClick), this.renderButton('arrow-down', nls_1.nls.localizeByDefault('Next Match'), count > 0, this.handleNextClick), this.renderButton('close', nls_1.nls.localizeByDefault('Close'), true, this.handleCloseClick)] });
305
+ }
306
+ renderToggle(option, icon, title) {
307
+ const enabled = this.options[option];
308
+ return (0, jsx_runtime_1.jsx)("button", { "data-option": option, className: `theia-chat-find-option ${(0, browser_1.codicon)(icon, true)}${enabled ? ' enabled' : ''}`, title: title, "aria-label": title, "aria-pressed": enabled, onClick: this.handleToggleClick }, option);
309
+ }
310
+ renderButton(icon, title, enabled, onClick) {
311
+ return (0, jsx_runtime_1.jsx)("button", { className: `theia-chat-find-option ${(0, browser_1.codicon)(icon, true)}${enabled ? '' : ' ' + browser_1.DISABLED_CLASS}`, title: title, "aria-label": title, disabled: !enabled, onClick: onClick });
312
+ }
313
+ };
314
+ exports.ChatFindWidget = ChatFindWidget;
315
+ tslib_1.__decorate([
316
+ (0, inversify_1.inject)(chat_find_matcher_1.ChatFindMatcher),
317
+ tslib_1.__metadata("design:type", chat_find_matcher_1.ChatFindMatcher)
318
+ ], ChatFindWidget.prototype, "matcher", void 0);
319
+ tslib_1.__decorate([
320
+ (0, inversify_1.inject)(context_key_service_1.ContextKeyService),
321
+ tslib_1.__metadata("design:type", Object)
322
+ ], ChatFindWidget.prototype, "contextKeyService", void 0);
323
+ tslib_1.__decorate([
324
+ (0, inversify_1.postConstruct)(),
325
+ tslib_1.__metadata("design:type", Function),
326
+ tslib_1.__metadata("design:paramtypes", []),
327
+ tslib_1.__metadata("design:returntype", void 0)
328
+ ], ChatFindWidget.prototype, "init", null);
329
+ exports.ChatFindWidget = ChatFindWidget = ChatFindWidget_1 = tslib_1.__decorate([
330
+ (0, inversify_1.injectable)()
331
+ ], ChatFindWidget);
332
+ //# sourceMappingURL=chat-find-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-find-widget.js","sourceRoot":"","sources":["../../../src/browser/chat-find/chat-find-widget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=chat-find-widget.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-find-widget.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-find/chat-find-widget.spec.tsx"],"names":[],"mappings":"AAoBA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Safi Seid-Ahmad, K2view and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ let disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
21
+ frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
22
+ require("reflect-metadata");
23
+ const common_1 = require("@theia/ai-chat/lib/common");
24
+ const core_1 = require("@theia/core");
25
+ const chai_1 = require("chai");
26
+ const chat_find_matcher_1 = require("./chat-find-matcher");
27
+ const chat_find_widget_1 = require("./chat-find-widget");
28
+ disableJSDOM();
29
+ function fakeRequest(id, text, ...responseTexts) {
30
+ const responseChanged = new core_1.Emitter();
31
+ const content = responseTexts.map(t => new common_1.TextChatResponseContentImpl(t));
32
+ const request = {
33
+ id,
34
+ message: { parts: [{ kind: 'text', text }] },
35
+ response: { id: `${id}-response`, isComplete: false, onDidChange: responseChanged.event, response: { content } }
36
+ };
37
+ return { request, responseChanged, content };
38
+ }
39
+ function fakeModel(requests) {
40
+ const changed = new core_1.Emitter();
41
+ const model = {
42
+ onDidChange: changed.event,
43
+ getRequests: () => requests.map(r => r.request),
44
+ isEmpty: () => requests.length === 0
45
+ };
46
+ return { model, changed };
47
+ }
48
+ class TestChatFindWidget extends chat_find_widget_1.ChatFindWidget {
49
+ constructor() {
50
+ super();
51
+ this.visible = false;
52
+ this.matcher = new chat_find_matcher_1.ChatFindMatcher();
53
+ this.contextKeyService = {
54
+ createKey: () => ({
55
+ set: (value) => { this.visible = value; },
56
+ get: () => this.visible,
57
+ reset: () => { this.visible = false; }
58
+ })
59
+ };
60
+ this.init();
61
+ }
62
+ }
63
+ describe('ChatFindWidget', () => {
64
+ let widget;
65
+ let states;
66
+ let reveals;
67
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
68
+ after(() => disableJSDOM());
69
+ beforeEach(() => {
70
+ widget = new TestChatFindWidget();
71
+ widget.fallbackFocusTarget = document.body;
72
+ states = [];
73
+ reveals = [];
74
+ widget.onDidChangeState(state => states.push(state));
75
+ widget.onDidRequestReveal(match => reveals.push(match));
76
+ });
77
+ afterEach(() => widget.dispose());
78
+ it('computes matches for the query and reveals the first one', () => {
79
+ const { model } = fakeModel([fakeRequest('r1', 'alpha', 'alpha beta alpha')]);
80
+ widget.setChatModel(model);
81
+ widget.open();
82
+ widget.setQuery('alpha');
83
+ (0, chai_1.expect)(widget.state.matches).to.have.length(3);
84
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r1', occurrence: 0 });
85
+ (0, chai_1.expect)(reveals).to.have.length(1);
86
+ });
87
+ it('cycles with next and previous, wrapping around', () => {
88
+ const { model } = fakeModel([fakeRequest('r1', 'x', 'x', 'x')]);
89
+ widget.setChatModel(model);
90
+ widget.open();
91
+ widget.setQuery('x');
92
+ widget.next();
93
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r1-response', contentIndex: 0 });
94
+ widget.next();
95
+ widget.next();
96
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r1' });
97
+ widget.previous();
98
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r1-response', contentIndex: 1 });
99
+ (0, chai_1.expect)(reveals).to.have.length(5);
100
+ });
101
+ it('keeps the current match while a response streams', async () => {
102
+ const first = fakeRequest('r1', 'needle', 'needle');
103
+ const second = fakeRequest('r2', '', 'nee');
104
+ const { model } = fakeModel([first, second]);
105
+ widget.setChatModel(model);
106
+ widget.open();
107
+ widget.setQuery('needle');
108
+ widget.next(); // current: r1-response
109
+ second.content[0] = new common_1.TextChatResponseContentImpl('needle needle');
110
+ second.responseChanged.fire();
111
+ await new Promise(resolve => setTimeout(resolve, 150));
112
+ (0, chai_1.expect)(widget.state.matches).to.have.length(4);
113
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r1-response', occurrence: 0 });
114
+ (0, chai_1.expect)(reveals).to.have.length(2); // a recompute never reveals
115
+ });
116
+ it('moves to the nearest following match when the current one disappears', async () => {
117
+ const first = fakeRequest('r1', 'a', 'a');
118
+ const second = fakeRequest('r2', 'a', 'a');
119
+ const requests = [first, second];
120
+ const { model, changed } = fakeModel(requests);
121
+ widget.setChatModel(model);
122
+ widget.open();
123
+ widget.setQuery('a');
124
+ widget.next(); // r1-response
125
+ requests.splice(0, 1);
126
+ changed.fire({ kind: 'removeRequest', requestId: 'r1' });
127
+ await new Promise(resolve => setTimeout(resolve, 150));
128
+ (0, chai_1.expect)(widget.state.matches).to.have.length(2);
129
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r2' });
130
+ });
131
+ it('does not search while closed, and catches up on open', async () => {
132
+ const streaming = fakeRequest('r1', '', 'nee');
133
+ const { model } = fakeModel([streaming]);
134
+ let searches = 0;
135
+ const findMatches = widget['matcher'].findMatches.bind(widget['matcher']);
136
+ widget['matcher'].findMatches = (...args) => { searches++; return findMatches(...args); };
137
+ widget.setChatModel(model);
138
+ widget.open();
139
+ widget.setQuery('needle');
140
+ widget.dismiss();
141
+ searches = 0;
142
+ streaming.content[0] = new common_1.TextChatResponseContentImpl('needle');
143
+ streaming.responseChanged.fire();
144
+ await new Promise(resolve => setTimeout(resolve, 150));
145
+ (0, chai_1.expect)(searches).to.equal(0);
146
+ widget.open();
147
+ (0, chai_1.expect)(widget.state.matches).to.have.length(1);
148
+ });
149
+ it('reports no matches for an invalid regular expression', () => {
150
+ const { model } = fakeModel([fakeRequest('r1', '(', '(')]);
151
+ widget.setChatModel(model);
152
+ widget.toggleOption('useRegex');
153
+ widget.setQuery('(');
154
+ (0, chai_1.expect)(widget.state.regexp).to.be.undefined;
155
+ (0, chai_1.expect)(widget.state.matches).to.deep.equal([]);
156
+ (0, chai_1.expect)(widget.currentMatch).to.be.undefined;
157
+ });
158
+ it('sets the context key and clears highlights on open and close', () => {
159
+ const { model } = fakeModel([fakeRequest('r1', 'q', 'q')]);
160
+ widget.setChatModel(model);
161
+ widget.setQuery('q');
162
+ widget.open();
163
+ (0, chai_1.expect)(widget.isOpen).to.be.true;
164
+ (0, chai_1.expect)(widget.visible).to.be.true;
165
+ widget.dismiss();
166
+ (0, chai_1.expect)(widget.isOpen).to.be.false;
167
+ (0, chai_1.expect)(widget.visible).to.be.false;
168
+ const last = states[states.length - 1];
169
+ (0, chai_1.expect)(last.regexp).to.be.undefined;
170
+ (0, chai_1.expect)(last.matches).to.deep.equal([]);
171
+ widget.open();
172
+ (0, chai_1.expect)(widget.state.matches).to.have.length(2);
173
+ (0, chai_1.expect)(states[states.length - 1].matches).to.have.length(2);
174
+ });
175
+ it('does not open on a session without requests, where the tree shows the session list', () => {
176
+ const { model } = fakeModel([]);
177
+ widget.setChatModel(model);
178
+ widget.open();
179
+ (0, chai_1.expect)(widget.isOpen).to.be.false;
180
+ (0, chai_1.expect)(widget.canFind).to.be.false;
181
+ });
182
+ it('closes when the tracked session is replaced by one without requests', () => {
183
+ const { model: withRequests } = fakeModel([fakeRequest('r1', 'q', 'q')]);
184
+ const { model: empty } = fakeModel([]);
185
+ widget.setChatModel(withRequests);
186
+ widget.setQuery('q');
187
+ widget.open();
188
+ (0, chai_1.expect)(widget.isOpen).to.be.true;
189
+ widget.setChatModel(empty);
190
+ (0, chai_1.expect)(widget.isOpen).to.be.false;
191
+ });
192
+ it('closes on a session switch, keeping query and options for the next open', () => {
193
+ const { model: a } = fakeModel([fakeRequest('r1', 'k k', 'k')]);
194
+ const { model: b } = fakeModel([fakeRequest('r9', 'K', 'k')]);
195
+ widget.setChatModel(a);
196
+ widget.open();
197
+ widget.setQuery('k');
198
+ widget.next();
199
+ widget.next();
200
+ widget.setChatModel(b);
201
+ (0, chai_1.expect)(widget.isOpen).to.be.false;
202
+ (0, chai_1.expect)(widget.visible).to.be.false;
203
+ (0, chai_1.expect)(states[states.length - 1].matches).to.deep.equal([]);
204
+ widget.open();
205
+ (0, chai_1.expect)(widget.state.matches).to.have.length(2);
206
+ (0, chai_1.expect)(widget.currentMatch).to.deep.include({ nodeId: 'r9', occurrence: 0 });
207
+ });
208
+ it('does not move focus when it closes on a session switch', () => {
209
+ const before = document.createElement('button');
210
+ const picked = document.createElement('button');
211
+ document.body.append(before, picked);
212
+ const { model: a } = fakeModel([fakeRequest('r1', 'k', 'k')]);
213
+ widget.setChatModel(a);
214
+ before.focus();
215
+ widget.open();
216
+ picked.focus(); // e.g. the entry the user clicked in the session history
217
+ widget.setChatModel(fakeModel([fakeRequest('r2', 'k', 'k')]).model);
218
+ (0, chai_1.expect)(document.activeElement).to.equal(picked);
219
+ before.remove();
220
+ picked.remove();
221
+ });
222
+ it('stays open when the same session is tracked again', () => {
223
+ const { model } = fakeModel([fakeRequest('r1', 'k', 'k')]);
224
+ widget.setChatModel(model);
225
+ widget.open();
226
+ widget.setChatModel(model);
227
+ (0, chai_1.expect)(widget.isOpen).to.be.true;
228
+ });
229
+ it('resets the context key when disposed while open', () => {
230
+ widget.setChatModel(fakeModel([fakeRequest('r1', 'k', 'k')]).model);
231
+ widget.open();
232
+ widget.dispose();
233
+ (0, chai_1.expect)(widget.visible).to.be.false;
234
+ });
235
+ });
236
+ //# sourceMappingURL=chat-find-widget.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-find-widget.spec.js","sourceRoot":"","sources":["../../../src/browser/chat-find/chat-find-widget.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Computes how far a scroll container must scroll so that the vertical range `[rowTop, rowBottom]`,
3
+ * given in pixels relative to the top edge of the container's visible area, becomes fully visible.
4
+ * Negative values scroll up, positive values scroll down, `0` means the range is already visible.
5
+ */
6
+ export declare function computeRevealScrollDelta(rowTop: number, rowBottom: number, viewportHeight: number): number;
7
+ //# sourceMappingURL=chat-input-scroll-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input-scroll-util.d.ts","sourceRoot":"","sources":["../../src/browser/chat-input-scroll-util.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAQ1G"}