@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.
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +6 -0
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/chat-find/chat-find-contribution.d.ts +18 -0
- package/lib/browser/chat-find/chat-find-contribution.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-contribution.js +76 -0
- package/lib/browser/chat-find/chat-find-contribution.js.map +1 -0
- package/lib/browser/chat-find/chat-find-highlighter.d.ts +114 -0
- package/lib/browser/chat-find/chat-find-highlighter.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-highlighter.js +353 -0
- package/lib/browser/chat-find/chat-find-highlighter.js.map +1 -0
- package/lib/browser/chat-find/chat-find-highlighter.spec.d.ts +2 -0
- package/lib/browser/chat-find/chat-find-highlighter.spec.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-highlighter.spec.js +283 -0
- package/lib/browser/chat-find/chat-find-highlighter.spec.js.map +1 -0
- package/lib/browser/chat-find/chat-find-matcher.d.ts +72 -0
- package/lib/browser/chat-find/chat-find-matcher.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-matcher.js +168 -0
- package/lib/browser/chat-find/chat-find-matcher.js.map +1 -0
- package/lib/browser/chat-find/chat-find-matcher.spec.d.ts +2 -0
- package/lib/browser/chat-find/chat-find-matcher.spec.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-matcher.spec.js +145 -0
- package/lib/browser/chat-find/chat-find-matcher.spec.js.map +1 -0
- package/lib/browser/chat-find/chat-find-text.d.ts +20 -0
- package/lib/browser/chat-find/chat-find-text.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-text.js +56 -0
- package/lib/browser/chat-find/chat-find-text.js.map +1 -0
- package/lib/browser/chat-find/chat-find-widget.d.ts +96 -0
- package/lib/browser/chat-find/chat-find-widget.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-widget.js +332 -0
- package/lib/browser/chat-find/chat-find-widget.js.map +1 -0
- package/lib/browser/chat-find/chat-find-widget.spec.d.ts +2 -0
- package/lib/browser/chat-find/chat-find-widget.spec.d.ts.map +1 -0
- package/lib/browser/chat-find/chat-find-widget.spec.js +236 -0
- package/lib/browser/chat-find/chat-find-widget.spec.js.map +1 -0
- package/lib/browser/chat-input-scroll-util.d.ts +7 -0
- package/lib/browser/chat-input-scroll-util.d.ts.map +1 -0
- package/lib/browser/chat-input-scroll-util.js +33 -0
- package/lib/browser/chat-input-scroll-util.js.map +1 -0
- package/lib/browser/chat-input-scroll-util.spec.d.ts +2 -0
- package/lib/browser/chat-input-scroll-util.spec.d.ts.map +1 -0
- package/lib/browser/chat-input-scroll-util.spec.js +38 -0
- package/lib/browser/chat-input-scroll-util.spec.js.map +1 -0
- package/lib/browser/chat-input-widget.d.ts +21 -3
- package/lib/browser/chat-input-widget.d.ts.map +1 -1
- package/lib/browser/chat-input-widget.js +109 -50
- package/lib/browser/chat-input-widget.js.map +1 -1
- package/lib/browser/chat-input-widget.spec.js +21 -0
- package/lib/browser/chat-input-widget.spec.js.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js +9 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/code-wrapper-editors.d.ts +13 -0
- package/lib/browser/chat-response-renderer/code-wrapper-editors.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/code-wrapper-editors.js +41 -0
- package/lib/browser/chat-response-renderer/code-wrapper-editors.js.map +1 -0
- package/lib/browser/chat-response-renderer/delegation-tool-renderer.js +74 -43
- package/lib/browser/chat-response-renderer/delegation-tool-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/index.d.ts +1 -0
- package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/index.js +1 -0
- package/lib/browser/chat-response-renderer/index.js.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +9 -0
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js +34 -16
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js +2 -2
- package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/spinner.d.ts +3 -0
- package/lib/browser/chat-response-renderer/spinner.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/spinner.js +24 -0
- package/lib/browser/chat-response-renderer/spinner.js.map +1 -0
- package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts +9 -1
- package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/thinking-part-renderer.js +93 -2
- package/lib/browser/chat-response-renderer/thinking-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.d.ts +2 -0
- package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.js +84 -0
- package/lib/browser/chat-response-renderer/thinking-part-renderer.spec.js.map +1 -0
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +2 -2
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.spec.js +16 -0
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.spec.js.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-utils.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-utils.js +7 -2
- package/lib/browser/chat-response-renderer/toolcall-utils.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-container.d.ts.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-container.js +4 -0
- package/lib/browser/chat-tree-view/chat-view-tree-container.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +20 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js +88 -7
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
- package/lib/common/toolcall-utils.d.ts +11 -1
- package/lib/common/toolcall-utils.d.ts.map +1 -1
- package/lib/common/toolcall-utils.js +191 -9
- package/lib/common/toolcall-utils.js.map +1 -1
- package/lib/common/toolcall-utils.spec.js +92 -4
- package/lib/common/toolcall-utils.spec.js.map +1 -1
- package/package.json +13 -13
- package/src/browser/ai-chat-ui-frontend-module.ts +7 -0
- package/src/browser/chat-find/chat-find-contribution.ts +74 -0
- package/src/browser/chat-find/chat-find-highlighter.spec.ts +313 -0
- package/src/browser/chat-find/chat-find-highlighter.ts +385 -0
- package/src/browser/chat-find/chat-find-matcher.spec.ts +173 -0
- package/src/browser/chat-find/chat-find-matcher.ts +197 -0
- package/src/browser/chat-find/chat-find-text.ts +65 -0
- package/src/browser/chat-find/chat-find-widget.spec.tsx +261 -0
- package/src/browser/chat-find/chat-find-widget.tsx +418 -0
- package/src/browser/chat-input-scroll-util.spec.ts +42 -0
- package/src/browser/chat-input-scroll-util.ts +30 -0
- package/src/browser/chat-input-widget.spec.ts +29 -0
- package/src/browser/chat-input-widget.tsx +118 -56
- package/src/browser/chat-response-renderer/code-part-renderer.tsx +9 -1
- package/src/browser/chat-response-renderer/code-wrapper-editors.ts +41 -0
- package/src/browser/chat-response-renderer/delegation-tool-renderer.tsx +88 -62
- package/src/browser/chat-response-renderer/index.ts +1 -0
- package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +34 -17
- package/src/browser/chat-response-renderer/server-toolcall-part-renderer.tsx +2 -5
- package/src/browser/chat-response-renderer/spinner.tsx +22 -0
- package/src/browser/chat-response-renderer/thinking-part-renderer.spec.tsx +104 -0
- package/src/browser/chat-response-renderer/thinking-part-renderer.tsx +129 -9
- package/src/browser/chat-response-renderer/toolcall-part-renderer.spec.ts +16 -0
- package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +1 -4
- package/src/browser/chat-response-renderer/toolcall-utils.ts +5 -0
- package/src/browser/chat-tree-view/chat-view-tree-container.ts +4 -0
- package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +99 -6
- package/src/browser/style/chat-find.css +107 -0
- package/src/browser/style/index.css +75 -8
- package/src/common/toolcall-utils.spec.ts +113 -4
- package/src/common/toolcall-utils.ts +207 -9
|
@@ -0,0 +1,353 @@
|
|
|
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
|
+
var ChatFindHighlighter_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ChatFindHighlighter = exports.ChatFindHighlightRegistry = void 0;
|
|
20
|
+
const tslib_1 = require("tslib");
|
|
21
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
+
const range_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/core/range");
|
|
23
|
+
const code_wrapper_editors_1 = require("../chat-response-renderer/code-wrapper-editors");
|
|
24
|
+
const chat_find_matcher_1 = require("./chat-find-matcher");
|
|
25
|
+
const chat_find_text_1 = require("./chat-find-text");
|
|
26
|
+
var ChatFindHighlightRegistry;
|
|
27
|
+
(function (ChatFindHighlightRegistry) {
|
|
28
|
+
/** The CSS Custom Highlight API registry, or `undefined` when the browser does not support it. */
|
|
29
|
+
function fromCssHighlights() {
|
|
30
|
+
if (typeof CSS === 'undefined' || !('highlights' in CSS) || typeof Highlight === 'undefined') {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
set: (name, ranges) => { CSS.highlights.set(name, new Highlight(...ranges)); },
|
|
35
|
+
delete: name => { CSS.highlights.delete(name); }
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
ChatFindHighlightRegistry.fromCssHighlights = fromCssHighlights;
|
|
39
|
+
})(ChatFindHighlightRegistry || (exports.ChatFindHighlightRegistry = ChatFindHighlightRegistry = {}));
|
|
40
|
+
/**
|
|
41
|
+
* Highlights find matches in the mounted rows of the chat tree: text with the CSS Custom Highlight API, code parts
|
|
42
|
+
* with decorations in their editor.
|
|
43
|
+
*
|
|
44
|
+
* Only the content the matcher actually searched is highlighted: the elements to scan are derived from the
|
|
45
|
+
* match list, so content the matcher skips (tool calls, reasoning, delegated sub-chats) is never highlighted
|
|
46
|
+
* even though it renders inside the same row. While active, DOM mutations under the root (virtuoso mounting
|
|
47
|
+
* rows, streamed content) re-apply the highlights on the next animation frame.
|
|
48
|
+
*/
|
|
49
|
+
let ChatFindHighlighter = class ChatFindHighlighter {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.matches = [];
|
|
52
|
+
this.codeDecorations = new Map();
|
|
53
|
+
this.scheduled = false;
|
|
54
|
+
}
|
|
55
|
+
static { ChatFindHighlighter_1 = this; }
|
|
56
|
+
static { this.MATCH_HIGHLIGHT = 'theia-chat-find-match'; }
|
|
57
|
+
static { this.CURRENT_HIGHLIGHT = 'theia-chat-find-current'; }
|
|
58
|
+
/** Monaco's own find decorations, so code parts look the same as a match of the editor find widget. */
|
|
59
|
+
static { this.CODE_MATCH_DECORATION = {
|
|
60
|
+
description: 'chat-find-match',
|
|
61
|
+
className: 'findMatch',
|
|
62
|
+
stickiness: 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */,
|
|
63
|
+
zIndex: 13
|
|
64
|
+
}; }
|
|
65
|
+
static { this.CODE_CURRENT_DECORATION = {
|
|
66
|
+
description: 'chat-find-current',
|
|
67
|
+
className: 'currentFindMatch',
|
|
68
|
+
stickiness: 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */,
|
|
69
|
+
zIndex: 13
|
|
70
|
+
}; }
|
|
71
|
+
init() {
|
|
72
|
+
this.registry = this.createRegistry();
|
|
73
|
+
}
|
|
74
|
+
createRegistry() {
|
|
75
|
+
return ChatFindHighlightRegistry.fromCssHighlights();
|
|
76
|
+
}
|
|
77
|
+
/** Highlights the given matches under `root` and marks `current`; an undefined `regexp` clears. */
|
|
78
|
+
update(root, regexp, matches, current) {
|
|
79
|
+
this.regexp = regexp;
|
|
80
|
+
this.matches = matches;
|
|
81
|
+
this.current = current;
|
|
82
|
+
if (!regexp) {
|
|
83
|
+
this.clear();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.observe(root);
|
|
87
|
+
this.apply();
|
|
88
|
+
}
|
|
89
|
+
/** Re-applies the current highlights, e.g. after a scroll mounted new rows. */
|
|
90
|
+
refresh() {
|
|
91
|
+
if (this.regexp && this.root) {
|
|
92
|
+
this.apply();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** The mounted row rendering the tree node `nodeId`, if any. */
|
|
96
|
+
findRow(root, nodeId) {
|
|
97
|
+
return root.querySelector(`[data-node-id="${nodeId.replace(/["\\]/g, '\\$&')}"]`) ?? undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Scrolls the current match into view within the chat tree's own scroll container.
|
|
101
|
+
*
|
|
102
|
+
* Deliberately does not use `Element.scrollIntoView()`: that scrolls every scrollable ancestor up to the
|
|
103
|
+
* viewport, which shifts the whole application shell. Only the first scroll container between the match
|
|
104
|
+
* and `root` is moved, and only when the match is not already visible.
|
|
105
|
+
*/
|
|
106
|
+
scrollCurrentIntoView(root) {
|
|
107
|
+
const target = this.getCurrentBounds();
|
|
108
|
+
if (!target) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const scroller = this.findScrollContainer(target.element, root);
|
|
112
|
+
if (!scroller) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const scrollerRect = scroller.getBoundingClientRect();
|
|
116
|
+
if (target.top >= scrollerRect.top && target.top + target.height <= scrollerRect.top + scroller.clientHeight) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const centered = scroller.scrollTop + (target.top - scrollerRect.top) - (scroller.clientHeight - target.height) / 2;
|
|
120
|
+
scroller.scrollTop = Math.max(0, Math.min(centered, scroller.scrollHeight - scroller.clientHeight));
|
|
121
|
+
}
|
|
122
|
+
clear() {
|
|
123
|
+
this.observer?.disconnect();
|
|
124
|
+
this.observer = undefined;
|
|
125
|
+
this.root = undefined;
|
|
126
|
+
this.currentTarget = undefined;
|
|
127
|
+
this.registry?.delete(ChatFindHighlighter_1.MATCH_HIGHLIGHT);
|
|
128
|
+
this.registry?.delete(ChatFindHighlighter_1.CURRENT_HIGHLIGHT);
|
|
129
|
+
this.codeDecorations.forEach(decorations => decorations.collection.clear());
|
|
130
|
+
this.codeDecorations.clear();
|
|
131
|
+
}
|
|
132
|
+
dispose() {
|
|
133
|
+
this.clear();
|
|
134
|
+
}
|
|
135
|
+
/** The element showing the current match and its vertical extent in viewport coordinates, if it is mounted. */
|
|
136
|
+
getCurrentBounds() {
|
|
137
|
+
const target = this.currentTarget;
|
|
138
|
+
if (target?.kind === 'code') {
|
|
139
|
+
const control = target.editor.getControl();
|
|
140
|
+
const editorNode = control.getDomNode();
|
|
141
|
+
// The editor is sized to its content, so this only scrolls long lines horizontally.
|
|
142
|
+
control.revealRangeInCenterIfOutsideViewport(target.range);
|
|
143
|
+
const position = control.getScrolledVisiblePosition(target.range.getStartPosition());
|
|
144
|
+
if (!editorNode?.isConnected || !position) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
return { element: editorNode, top: editorNode.getBoundingClientRect().top + position.top, height: position.height };
|
|
148
|
+
}
|
|
149
|
+
const container = target?.range.startContainer;
|
|
150
|
+
const element = container instanceof Element ? container : container?.parentElement;
|
|
151
|
+
if (!element?.isConnected) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
const rect = element.getBoundingClientRect();
|
|
155
|
+
return { element, top: rect.top, height: rect.height };
|
|
156
|
+
}
|
|
157
|
+
/** The first scroll container between `from` and `root`, inclusive; never anything outside `root`. */
|
|
158
|
+
findScrollContainer(from, root) {
|
|
159
|
+
let element = from instanceof HTMLElement ? from : from.parentElement ?? undefined;
|
|
160
|
+
while (element && (root === element || root.contains(element))) {
|
|
161
|
+
const overflowY = element.ownerDocument.defaultView?.getComputedStyle(element).overflowY;
|
|
162
|
+
if ((overflowY === 'auto' || overflowY === 'scroll') && element.scrollHeight > element.clientHeight) {
|
|
163
|
+
return element;
|
|
164
|
+
}
|
|
165
|
+
element = element.parentElement ?? undefined;
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
observe(root) {
|
|
170
|
+
if (this.root === root && this.observer) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.observer?.disconnect();
|
|
174
|
+
this.root = root;
|
|
175
|
+
this.observer = new MutationObserver(() => this.scheduleApply());
|
|
176
|
+
this.observer.observe(root, { childList: true, subtree: true, characterData: true });
|
|
177
|
+
}
|
|
178
|
+
scheduleApply() {
|
|
179
|
+
if (this.scheduled) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
this.scheduled = true;
|
|
183
|
+
const run = () => {
|
|
184
|
+
this.scheduled = false;
|
|
185
|
+
if (this.root && this.regexp) {
|
|
186
|
+
this.apply();
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
if (typeof requestAnimationFrame === 'function') {
|
|
190
|
+
requestAnimationFrame(run);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
setTimeout(run, 16);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
apply() {
|
|
197
|
+
const { root, regexp } = this;
|
|
198
|
+
if (!root || !regexp) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const all = [];
|
|
202
|
+
const decorated = new Set();
|
|
203
|
+
let currentTarget;
|
|
204
|
+
for (const matches of this.groupByContent().values()) {
|
|
205
|
+
const element = this.findContentElement(root, matches[0]);
|
|
206
|
+
if (!element) {
|
|
207
|
+
continue; // the row is not mounted
|
|
208
|
+
}
|
|
209
|
+
const current = this.findCurrentIn(matches);
|
|
210
|
+
if (matches[0].kind === 'code') {
|
|
211
|
+
const editor = this.findCodeEditor(element);
|
|
212
|
+
if (editor) {
|
|
213
|
+
decorated.add(editor);
|
|
214
|
+
currentTarget = this.decorateCode(editor, matches, current) ?? currentTarget;
|
|
215
|
+
}
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
const ranges = this.collectRanges(this.findTextRoot(element, matches[0]), regexp);
|
|
219
|
+
all.push(...ranges.map(({ range }) => range));
|
|
220
|
+
if (current) {
|
|
221
|
+
// The DOM text is the text the matcher searched, so the current match is found by its offsets. Only
|
|
222
|
+
// while the DOM lags behind the model (e.g. mid-stream) does it fall back to the occurrence index.
|
|
223
|
+
const range = ranges.find(({ start, end }) => start === current.start && end === current.end) ?? ranges[current.occurrence];
|
|
224
|
+
currentTarget = range ? { kind: 'dom', range: range.range } : currentTarget;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
this.clearCodeDecorations(decorated);
|
|
228
|
+
this.currentTarget = currentTarget;
|
|
229
|
+
this.registry?.set(ChatFindHighlighter_1.MATCH_HIGHLIGHT, all);
|
|
230
|
+
this.registry?.set(ChatFindHighlighter_1.CURRENT_HIGHLIGHT, currentTarget?.kind === 'dom' ? [currentTarget.range] : []);
|
|
231
|
+
}
|
|
232
|
+
findCurrentIn(matches) {
|
|
233
|
+
const current = this.current;
|
|
234
|
+
if (!current) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
const key = chat_find_matcher_1.ChatFindMatch.key(current);
|
|
238
|
+
return matches.find(match => match === current || chat_find_matcher_1.ChatFindMatch.key(match) === key);
|
|
239
|
+
}
|
|
240
|
+
/** Matches grouped by the element that renders them, so each element is scanned once. */
|
|
241
|
+
groupByContent() {
|
|
242
|
+
const groups = new Map();
|
|
243
|
+
for (const match of this.matches) {
|
|
244
|
+
const key = `${match.nodeId}/${match.contentIndex ?? chat_find_matcher_1.ChatFindMatch.REQUEST_KIND}`;
|
|
245
|
+
const group = groups.get(key);
|
|
246
|
+
if (group) {
|
|
247
|
+
group.push(match);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
groups.set(key, [match]);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return groups;
|
|
254
|
+
}
|
|
255
|
+
/** The element rendering the text a match was found in, or `undefined` when its row is not mounted. */
|
|
256
|
+
findContentElement(root, match) {
|
|
257
|
+
const row = this.findRow(root, match.nodeId);
|
|
258
|
+
if (!row) {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
// Only the row's own nodes: a delegated sub-chat renders another response node inside a content element.
|
|
262
|
+
if (match.contentIndex === undefined) {
|
|
263
|
+
return row.querySelector(':scope > .theia-RequestNode > p') ?? undefined;
|
|
264
|
+
}
|
|
265
|
+
return row.querySelectorAll(':scope > .theia-ResponseNode > .theia-ResponseNode-Content')[match.contentIndex] ?? undefined;
|
|
266
|
+
}
|
|
267
|
+
/** The element holding exactly the text the matcher searched for a part: an error part searches only its message. */
|
|
268
|
+
findTextRoot(contentElement, match) {
|
|
269
|
+
if (match.kind === 'error') {
|
|
270
|
+
return contentElement.querySelector('.theia-ChatPart-Error-message') ?? contentElement;
|
|
271
|
+
}
|
|
272
|
+
return contentElement;
|
|
273
|
+
}
|
|
274
|
+
/** The editor of a code part, once it has been created. */
|
|
275
|
+
findCodeEditor(contentElement) {
|
|
276
|
+
const wrapper = contentElement.querySelector(`.${code_wrapper_editors_1.CodeWrapperEditors.CLASS}`);
|
|
277
|
+
return wrapper ? code_wrapper_editors_1.CodeWrapperEditors.get(wrapper) : undefined;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Decorates the matches of a code part in its editor; match offsets are offsets into the code the editor shows.
|
|
281
|
+
* @returns the current match's target when it is one of `matches`.
|
|
282
|
+
*/
|
|
283
|
+
decorateCode(editor, matches, current) {
|
|
284
|
+
const model = editor.document.textEditorModel;
|
|
285
|
+
const toRange = (match) => range_1.Range.fromPositions(model.getPositionAt(match.start), model.getPositionAt(match.end));
|
|
286
|
+
const decorations = matches.map(match => ({
|
|
287
|
+
range: toRange(match),
|
|
288
|
+
options: match === current ? ChatFindHighlighter_1.CODE_CURRENT_DECORATION : ChatFindHighlighter_1.CODE_MATCH_DECORATION
|
|
289
|
+
}));
|
|
290
|
+
// Setting the value of the model drops its decorations, so the version is part of what is shown.
|
|
291
|
+
const signature = `${model.getVersionId()}:${matches.map(match => `${match.start}-${match.end}${match === current ? '*' : ''}`).join(',')}`;
|
|
292
|
+
const existing = this.codeDecorations.get(editor);
|
|
293
|
+
if (existing?.signature !== signature) {
|
|
294
|
+
// Only set when changed: decorating re-renders the editor, which would otherwise re-trigger `apply()`.
|
|
295
|
+
const collection = existing?.collection ?? editor.getControl().createDecorationsCollection();
|
|
296
|
+
collection.set(decorations);
|
|
297
|
+
this.codeDecorations.set(editor, { collection, signature });
|
|
298
|
+
}
|
|
299
|
+
return current ? { kind: 'code', editor, range: toRange(current) } : undefined;
|
|
300
|
+
}
|
|
301
|
+
/** Removes the decorations of editors that no longer show a match, e.g. because their row was unmounted. */
|
|
302
|
+
clearCodeDecorations(keep) {
|
|
303
|
+
for (const [editor, decorations] of this.codeDecorations) {
|
|
304
|
+
if (!keep.has(editor)) {
|
|
305
|
+
decorations.collection.clear();
|
|
306
|
+
this.codeDecorations.delete(editor);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/** One `Range` per occurrence of `regexp` in the text of `element`, with its offsets in that text. */
|
|
311
|
+
collectRanges(element, regexp) {
|
|
312
|
+
const { text, segments } = chat_find_text_1.ChatFindText.collect(element);
|
|
313
|
+
if (!text) {
|
|
314
|
+
return [];
|
|
315
|
+
}
|
|
316
|
+
return this.matcher.findInText(text, regexp).map(({ start, end }) => {
|
|
317
|
+
const range = element.ownerDocument.createRange();
|
|
318
|
+
const from = this.locate(segments, start);
|
|
319
|
+
const to = this.locate(segments, end);
|
|
320
|
+
range.setStart(from.node, from.offset);
|
|
321
|
+
range.setEnd(to.node, to.offset);
|
|
322
|
+
return { start, end, range };
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
/** Map an offset in the concatenated text to a text node and offset inside it (end offsets stay in the preceding node). */
|
|
326
|
+
locate(segments, offset) {
|
|
327
|
+
let segment = segments[0];
|
|
328
|
+
for (const candidate of segments) {
|
|
329
|
+
if (candidate.start < offset) {
|
|
330
|
+
segment = candidate;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return { node: segment.node, offset: offset - segment.start };
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
exports.ChatFindHighlighter = ChatFindHighlighter;
|
|
340
|
+
tslib_1.__decorate([
|
|
341
|
+
(0, inversify_1.inject)(chat_find_matcher_1.ChatFindMatcher),
|
|
342
|
+
tslib_1.__metadata("design:type", chat_find_matcher_1.ChatFindMatcher)
|
|
343
|
+
], ChatFindHighlighter.prototype, "matcher", void 0);
|
|
344
|
+
tslib_1.__decorate([
|
|
345
|
+
(0, inversify_1.postConstruct)(),
|
|
346
|
+
tslib_1.__metadata("design:type", Function),
|
|
347
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
348
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
349
|
+
], ChatFindHighlighter.prototype, "init", null);
|
|
350
|
+
exports.ChatFindHighlighter = ChatFindHighlighter = ChatFindHighlighter_1 = tslib_1.__decorate([
|
|
351
|
+
(0, inversify_1.injectable)()
|
|
352
|
+
], ChatFindHighlighter);
|
|
353
|
+
//# sourceMappingURL=chat-find-highlighter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-find-highlighter.js","sourceRoot":"","sources":["../../../src/browser/chat-find/chat-find-highlighter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-find-highlighter.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-find/chat-find-highlighter.spec.ts"],"names":[],"mappings":""}
|