@theia/ai-chat-ui 1.56.0 → 1.57.0-next.136
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/README.md +2 -1
- package/lib/browser/ai-chat-ui-contribution.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-contribution.js +1 -1
- package/lib/browser/ai-chat-ui-contribution.js.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +9 -1
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/chat-input-widget.d.ts +18 -5
- package/lib/browser/chat-input-widget.d.ts.map +1 -1
- package/lib/browser/chat-input-widget.js +229 -80
- package/lib/browser/chat-input-widget.js.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts +30 -2
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js +45 -10
- package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +8 -3
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js +38 -10
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +8 -2
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +2 -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 +8 -4
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
- package/lib/browser/chat-view-language-contribution.d.ts +2 -1
- package/lib/browser/chat-view-language-contribution.d.ts.map +1 -1
- package/lib/browser/chat-view-language-contribution.js +3 -6
- package/lib/browser/chat-view-language-contribution.js.map +1 -1
- package/lib/browser/chat-view-widget.d.ts +4 -1
- package/lib/browser/chat-view-widget.d.ts.map +1 -1
- package/lib/browser/chat-view-widget.js +14 -4
- package/lib/browser/chat-view-widget.js.map +1 -1
- package/package.json +12 -12
- package/src/browser/ai-chat-ui-contribution.ts +2 -2
- package/src/browser/ai-chat-ui-frontend-module.ts +27 -5
- package/src/browser/chat-input-widget.tsx +339 -100
- package/src/browser/chat-response-renderer/code-part-renderer.tsx +48 -9
- package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +39 -12
- package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +8 -2
- package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +10 -4
- package/src/browser/chat-view-language-contribution.ts +6 -8
- package/src/browser/chat-view-widget.tsx +19 -6
- package/src/browser/style/index.css +209 -28
package/README.md
CHANGED
|
@@ -28,5 +28,6 @@ It is based on `@theia/ai-chat`.
|
|
|
28
28
|
- [一 (Secondary) GNU General Public License, version 2 with the GNU Classpath Exception](https://projects.eclipse.org/license/secondary-gpl-2.0-cp)
|
|
29
29
|
|
|
30
30
|
## Trademark
|
|
31
|
+
|
|
31
32
|
"Theia" is a trademark of the Eclipse Foundation
|
|
32
|
-
https://www.eclipse.org/theia
|
|
33
|
+
<https://www.eclipse.org/theia>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAS,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAqB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD,qBACa,kBAAmB,SAAQ,wBAAwB,CAAC,cAAc,CAAE,YAAW,yBAAyB;IAGjH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAE5C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAG5D;IAGF,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;;IAezD,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IA8B1D,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAe3D,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;cAIpC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D,SAAS,CAAC,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAmCjE,SAAS,CAAC,UAAU,CAChB,MAAM,GAAE,MAAM,GAAG,SAA+B,EAChD,SAAS,GAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAoB,GAC5D,OAAO,GAAG,KAAK;IAIlB,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIzD,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;CAGxD"}
|
|
@@ -37,7 +37,7 @@ let AIChatContribution = AIChatContribution_1 = class AIChatContribution extends
|
|
|
37
37
|
rank: 100
|
|
38
38
|
},
|
|
39
39
|
toggleCommandId: exports.AI_CHAT_TOGGLE_COMMAND_ID,
|
|
40
|
-
toggleKeybinding: '
|
|
40
|
+
toggleKeybinding: core_1.isOSX ? 'ctrl+cmd+i' : 'ctrl+alt+i'
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
registerCommands(registry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;AAEhF,4DAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAc,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAc,MAAM,8BAA8B,CAAC;AAgC3E,OAAO,mCAAmC,CAAC;;AAE3C,wBA0DG"}
|
|
@@ -20,7 +20,6 @@ const browser_1 = require("@theia/core/lib/browser");
|
|
|
20
20
|
const tab_bar_toolbar_1 = require("@theia/core/lib/browser/shell/tab-bar-toolbar");
|
|
21
21
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
22
|
const browser_2 = require("@theia/editor/lib/browser");
|
|
23
|
-
require("../../src/browser/style/index.css");
|
|
24
23
|
const ai_chat_ui_contribution_1 = require("./ai-chat-ui-contribution");
|
|
25
24
|
const chat_input_widget_1 = require("./chat-input-widget");
|
|
26
25
|
const chat_node_toolbar_action_contribution_1 = require("./chat-node-toolbar-action-contribution");
|
|
@@ -35,12 +34,16 @@ const chat_view_widget_1 = require("./chat-view-widget");
|
|
|
35
34
|
const chat_view_widget_toolbar_contribution_1 = require("./chat-view-widget-toolbar-contribution");
|
|
36
35
|
const editor_preview_manager_1 = require("@theia/editor-preview/lib/browser/editor-preview-manager");
|
|
37
36
|
const question_part_renderer_1 = require("./chat-response-renderer/question-part-renderer");
|
|
37
|
+
require("../../src/browser/style/index.css");
|
|
38
38
|
exports.default = new inversify_1.ContainerModule((bind, _unbind, _isBound, rebind) => {
|
|
39
39
|
(0, browser_1.bindViewContribution)(bind, ai_chat_ui_contribution_1.AIChatContribution);
|
|
40
40
|
bind(tab_bar_toolbar_1.TabBarToolbarContribution).toService(ai_chat_ui_contribution_1.AIChatContribution);
|
|
41
41
|
(0, core_1.bindContributionProvider)(bind, chat_response_part_renderer_1.ChatResponsePartRenderer);
|
|
42
42
|
bindChatViewWidget(bind);
|
|
43
43
|
bind(chat_input_widget_1.AIChatInputWidget).toSelf();
|
|
44
|
+
bind(chat_input_widget_1.AIChatInputConfiguration).toConstantValue({
|
|
45
|
+
showContext: false
|
|
46
|
+
});
|
|
44
47
|
bind(browser_1.WidgetFactory).toDynamicValue(({ container }) => ({
|
|
45
48
|
id: chat_input_widget_1.AIChatInputWidget.ID,
|
|
46
49
|
createWidget: () => container.get(chat_input_widget_1.AIChatInputWidget)
|
|
@@ -59,6 +62,11 @@ exports.default = new inversify_1.ContainerModule((bind, _unbind, _isBound, rebi
|
|
|
59
62
|
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).to(chat_response_renderer_1.ErrorPartRenderer).inSingletonScope();
|
|
60
63
|
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).to(question_part_renderer_1.QuestionPartRenderer).inSingletonScope();
|
|
61
64
|
[core_1.CommandContribution, core_1.MenuContribution].forEach(serviceIdentifier => bind(serviceIdentifier).to(chat_view_contribution_1.ChatViewMenuContribution).inSingletonScope());
|
|
65
|
+
(0, core_1.bindContributionProvider)(bind, chat_response_renderer_1.CodePartRendererAction);
|
|
66
|
+
bind(chat_response_renderer_1.CopyToClipboardButtonAction).toSelf().inSingletonScope();
|
|
67
|
+
bind(chat_response_renderer_1.CodePartRendererAction).toService(chat_response_renderer_1.CopyToClipboardButtonAction);
|
|
68
|
+
bind(chat_response_renderer_1.InsertCodeAtCursorButtonAction).toSelf().inSingletonScope();
|
|
69
|
+
bind(chat_response_renderer_1.CodePartRendererAction).toService(chat_response_renderer_1.InsertCodeAtCursorButtonAction);
|
|
62
70
|
bind(ai_editor_manager_1.AIEditorManager).toSelf().inSingletonScope();
|
|
63
71
|
rebind(browser_2.EditorManager).toService(ai_editor_manager_1.AIEditorManager);
|
|
64
72
|
rebind(editor_preview_manager_1.EditorPreviewManager).toService(ai_editor_manager_1.AIEditorManager);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,sCAA8F;AAC9F,qDAA+G;AAC/G,mFAA0F;AAC1F,4DAA2E;AAC3E,uDAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,42 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import { ChatModel, ChatRequestModel } from '@theia/ai-chat';
|
|
3
3
|
import { UntitledResourceResolver } from '@theia/core';
|
|
4
|
-
import { ContextMenuRenderer, Message, ReactWidget } from '@theia/core/lib/browser';
|
|
4
|
+
import { ContextMenuRenderer, LabelProvider, Message, ReactWidget } from '@theia/core/lib/browser';
|
|
5
5
|
import * as React from '@theia/core/shared/react';
|
|
6
|
-
import { MonacoEditorProvider } from '@theia/monaco/lib/browser/monaco-editor-provider';
|
|
7
6
|
import { IMouseEvent } from '@theia/monaco-editor-core';
|
|
7
|
+
import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor';
|
|
8
|
+
import { MonacoEditorProvider } from '@theia/monaco/lib/browser/monaco-editor-provider';
|
|
8
9
|
type Query = (query: string) => Promise<void>;
|
|
9
10
|
type Cancel = (requestModel: ChatRequestModel) => void;
|
|
11
|
+
type DeleteChangeSet = (requestModel: ChatRequestModel) => void;
|
|
12
|
+
type DeleteChangeSetElement = (requestModel: ChatRequestModel, index: number) => void;
|
|
13
|
+
export declare const AIChatInputConfiguration: unique symbol;
|
|
14
|
+
export interface AIChatInputConfiguration {
|
|
15
|
+
showContext?: boolean;
|
|
16
|
+
}
|
|
10
17
|
export declare class AIChatInputWidget extends ReactWidget {
|
|
11
18
|
static ID: string;
|
|
12
19
|
static readonly CONTEXT_MENU: string[];
|
|
13
|
-
protected readonly agentService: ChatAgentService;
|
|
14
20
|
protected readonly editorProvider: MonacoEditorProvider;
|
|
15
21
|
protected readonly untitledResourceResolver: UntitledResourceResolver;
|
|
16
22
|
protected readonly contextMenuRenderer: ContextMenuRenderer;
|
|
23
|
+
protected readonly configuration: AIChatInputConfiguration | undefined;
|
|
24
|
+
protected readonly labelProvider: LabelProvider;
|
|
25
|
+
protected editorRef: MonacoEditor | undefined;
|
|
26
|
+
private editorReady;
|
|
17
27
|
protected isEnabled: boolean;
|
|
18
28
|
private _onQuery;
|
|
19
29
|
set onQuery(query: Query);
|
|
20
30
|
private _onCancel;
|
|
21
31
|
set onCancel(cancel: Cancel);
|
|
32
|
+
private _onDeleteChangeSet;
|
|
33
|
+
set onDeleteChangeSet(deleteChangeSet: DeleteChangeSet);
|
|
34
|
+
private _onDeleteChangeSetElement;
|
|
35
|
+
set onDeleteChangeSetElement(deleteChangeSetElement: DeleteChangeSetElement);
|
|
22
36
|
private _chatModel;
|
|
23
37
|
set chatModel(chatModel: ChatModel);
|
|
24
38
|
protected init(): void;
|
|
25
39
|
protected onActivateRequest(msg: Message): void;
|
|
26
|
-
protected getChatAgents(): ChatAgent[];
|
|
27
40
|
protected render(): React.ReactNode;
|
|
28
41
|
setEnabled(enabled: boolean): void;
|
|
29
42
|
protected handleContextMenu(event: IMouseEvent): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/chat-input-widget.tsx"],"names":[],"mappings":";AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"chat-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/chat-input-widget.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAgD,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC3G,OAAO,EAAc,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGnG,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAGxF,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C,KAAK,MAAM,GAAG,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;AACvD,KAAK,eAAe,GAAG,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAChE,KAAK,sBAAsB,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtF,eAAO,MAAM,wBAAwB,eAAqC,CAAC;AAC3E,MAAM,WAAW,wBAAwB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBACa,iBAAkB,SAAQ,WAAW;IAC9C,OAAc,EAAE,SAAuB;IACvC,MAAM,CAAC,QAAQ,CAAC,YAAY,WAA+B;IAG3D,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAGtE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAGvE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEhD,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,SAAS,CAAa;IAC1D,OAAO,CAAC,WAAW,CAAwB;IAE3C,SAAS,CAAC,SAAS,UAAS;IAE5B,OAAO,CAAC,QAAQ,CAAQ;IACxB,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAEvB;IACD,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,EAE1B;IACD,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,IAAI,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAErD;IACD,OAAO,CAAC,yBAAyB,CAAyB;IAC1D,IAAI,wBAAwB,CAAC,sBAAsB,EAAE,sBAAsB,EAE1E;IACD,OAAO,CAAC,UAAU,CAAY;IAC9B,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,EAGjC;IAGD,SAAS,CAAC,IAAI,IAAI,IAAI;cAMH,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IASxD,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;IAsB5B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKzC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;CAQxD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var AIChatInputWidget_1;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AIChatInputWidget = void 0;
|
|
4
|
+
exports.AIChatInputWidget = exports.AIChatInputConfiguration = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
6
|
// *****************************************************************************
|
|
7
7
|
// Copyright (C) 2024 EclipseSource GmbH.
|
|
@@ -21,13 +21,17 @@ const tslib_1 = require("tslib");
|
|
|
21
21
|
const ai_chat_1 = require("@theia/ai-chat");
|
|
22
22
|
const core_1 = require("@theia/core");
|
|
23
23
|
const browser_1 = require("@theia/core/lib/browser");
|
|
24
|
+
const promise_util_1 = require("@theia/core/lib/common/promise-util");
|
|
24
25
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
25
26
|
const React = require("@theia/core/shared/react");
|
|
26
27
|
const monaco_editor_provider_1 = require("@theia/monaco/lib/browser/monaco-editor-provider");
|
|
27
28
|
const chat_view_language_contribution_1 = require("./chat-view-language-contribution");
|
|
29
|
+
exports.AIChatInputConfiguration = Symbol('AIChatInputConfiguration');
|
|
28
30
|
let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends browser_1.ReactWidget {
|
|
29
31
|
constructor() {
|
|
30
32
|
super(...arguments);
|
|
33
|
+
this.editorRef = undefined;
|
|
34
|
+
this.editorReady = new promise_util_1.Deferred();
|
|
31
35
|
this.isEnabled = false;
|
|
32
36
|
}
|
|
33
37
|
set onQuery(query) {
|
|
@@ -36,6 +40,12 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
36
40
|
set onCancel(cancel) {
|
|
37
41
|
this._onCancel = cancel;
|
|
38
42
|
}
|
|
43
|
+
set onDeleteChangeSet(deleteChangeSet) {
|
|
44
|
+
this._onDeleteChangeSet = deleteChangeSet;
|
|
45
|
+
}
|
|
46
|
+
set onDeleteChangeSetElement(deleteChangeSetElement) {
|
|
47
|
+
this._onDeleteChangeSetElement = deleteChangeSetElement;
|
|
48
|
+
}
|
|
39
49
|
set chatModel(chatModel) {
|
|
40
50
|
this._chatModel = chatModel;
|
|
41
51
|
this.update();
|
|
@@ -47,13 +57,18 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
47
57
|
}
|
|
48
58
|
onActivateRequest(msg) {
|
|
49
59
|
super.onActivateRequest(msg);
|
|
50
|
-
this.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
this.editorReady.promise.then(() => {
|
|
61
|
+
if (this.editorRef) {
|
|
62
|
+
this.editorRef.focus();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
54
65
|
}
|
|
55
66
|
render() {
|
|
56
|
-
|
|
67
|
+
var _a;
|
|
68
|
+
return (React.createElement(ChatInput, { onQuery: this._onQuery.bind(this), onCancel: this._onCancel.bind(this), onDeleteChangeSet: this._onDeleteChangeSet.bind(this), onDeleteChangeSetElement: this._onDeleteChangeSetElement.bind(this), chatModel: this._chatModel, editorProvider: this.editorProvider, untitledResourceResolver: this.untitledResourceResolver, contextMenuCallback: this.handleContextMenu.bind(this), isEnabled: this.isEnabled, setEditorRef: editor => {
|
|
69
|
+
this.editorRef = editor;
|
|
70
|
+
this.editorReady.resolve();
|
|
71
|
+
}, showContext: (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.showContext, labelProvider: this.labelProvider }));
|
|
57
72
|
}
|
|
58
73
|
setEnabled(enabled) {
|
|
59
74
|
this.isEnabled = enabled;
|
|
@@ -70,10 +85,6 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
70
85
|
exports.AIChatInputWidget = AIChatInputWidget;
|
|
71
86
|
AIChatInputWidget.ID = 'chat-input-widget';
|
|
72
87
|
AIChatInputWidget.CONTEXT_MENU = ['chat-input-context-menu'];
|
|
73
|
-
tslib_1.__decorate([
|
|
74
|
-
(0, inversify_1.inject)(ai_chat_1.ChatAgentService),
|
|
75
|
-
tslib_1.__metadata("design:type", Object)
|
|
76
|
-
], AIChatInputWidget.prototype, "agentService", void 0);
|
|
77
88
|
tslib_1.__decorate([
|
|
78
89
|
(0, inversify_1.inject)(monaco_editor_provider_1.MonacoEditorProvider),
|
|
79
90
|
tslib_1.__metadata("design:type", monaco_editor_provider_1.MonacoEditorProvider)
|
|
@@ -86,6 +97,15 @@ tslib_1.__decorate([
|
|
|
86
97
|
(0, inversify_1.inject)(browser_1.ContextMenuRenderer),
|
|
87
98
|
tslib_1.__metadata("design:type", browser_1.ContextMenuRenderer)
|
|
88
99
|
], AIChatInputWidget.prototype, "contextMenuRenderer", void 0);
|
|
100
|
+
tslib_1.__decorate([
|
|
101
|
+
(0, inversify_1.inject)(exports.AIChatInputConfiguration),
|
|
102
|
+
(0, inversify_1.optional)(),
|
|
103
|
+
tslib_1.__metadata("design:type", Object)
|
|
104
|
+
], AIChatInputWidget.prototype, "configuration", void 0);
|
|
105
|
+
tslib_1.__decorate([
|
|
106
|
+
(0, inversify_1.inject)(browser_1.LabelProvider),
|
|
107
|
+
tslib_1.__metadata("design:type", browser_1.LabelProvider)
|
|
108
|
+
], AIChatInputWidget.prototype, "labelProvider", void 0);
|
|
89
109
|
tslib_1.__decorate([
|
|
90
110
|
(0, inversify_1.postConstruct)(),
|
|
91
111
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -96,86 +116,121 @@ exports.AIChatInputWidget = AIChatInputWidget = AIChatInputWidget_1 = tslib_1.__
|
|
|
96
116
|
(0, inversify_1.injectable)()
|
|
97
117
|
], AIChatInputWidget);
|
|
98
118
|
const ChatInput = (props) => {
|
|
119
|
+
const onDeleteChangeSet = () => props.onDeleteChangeSet(props.chatModel.id);
|
|
120
|
+
const onDeleteChangeSetElement = (index) => props.onDeleteChangeSetElement(props.chatModel.id, index);
|
|
99
121
|
const [inProgress, setInProgress] = React.useState(false);
|
|
122
|
+
const [isInputEmpty, setIsInputEmpty] = React.useState(true);
|
|
123
|
+
const [changeSetUI, setChangeSetUI] = React.useState(() => props.chatModel.changeSet ? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) : undefined);
|
|
100
124
|
// eslint-disable-next-line no-null/no-null
|
|
101
125
|
const editorContainerRef = React.useRef(null);
|
|
102
126
|
// eslint-disable-next-line no-null/no-null
|
|
103
127
|
const placeholderRef = React.useRef(null);
|
|
104
128
|
const editorRef = React.useRef(undefined);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
});
|
|
142
|
-
if (editorContainerRef.current) {
|
|
143
|
-
editorContainerRef.current.style.height = (lineHeight + (2 * paddingTop)) + 'px';
|
|
144
|
-
}
|
|
145
|
-
const updateEditorHeight = () => {
|
|
129
|
+
React.useEffect(() => {
|
|
130
|
+
const createInputElement = async () => {
|
|
131
|
+
const paddingTop = 6;
|
|
132
|
+
const lineHeight = 20;
|
|
133
|
+
const maxHeight = 240;
|
|
134
|
+
const resource = await props.untitledResourceResolver.createUntitledResource('', chat_view_language_contribution_1.CHAT_VIEW_LANGUAGE_EXTENSION);
|
|
135
|
+
const editor = await props.editorProvider.createInline(resource.uri, editorContainerRef.current, {
|
|
136
|
+
language: chat_view_language_contribution_1.CHAT_VIEW_LANGUAGE_EXTENSION,
|
|
137
|
+
// Disable code lens, inlay hints and hover support to avoid console errors from other contributions
|
|
138
|
+
codeLens: false,
|
|
139
|
+
inlayHints: { enabled: 'off' },
|
|
140
|
+
hover: { enabled: false },
|
|
141
|
+
autoSizing: false, // we handle the sizing ourselves
|
|
142
|
+
scrollBeyondLastLine: false,
|
|
143
|
+
scrollBeyondLastColumn: 0,
|
|
144
|
+
minHeight: 1,
|
|
145
|
+
fontFamily: 'var(--theia-ui-font-family)',
|
|
146
|
+
fontSize: 13,
|
|
147
|
+
cursorWidth: 1,
|
|
148
|
+
maxHeight: -1,
|
|
149
|
+
scrollbar: { horizontal: 'hidden' },
|
|
150
|
+
automaticLayout: true,
|
|
151
|
+
lineNumbers: 'off',
|
|
152
|
+
lineHeight,
|
|
153
|
+
padding: { top: paddingTop },
|
|
154
|
+
suggest: {
|
|
155
|
+
showIcons: true,
|
|
156
|
+
showSnippets: false,
|
|
157
|
+
showWords: false,
|
|
158
|
+
showStatusBar: false,
|
|
159
|
+
insertMode: 'replace',
|
|
160
|
+
},
|
|
161
|
+
bracketPairColorization: { enabled: false },
|
|
162
|
+
wrappingStrategy: 'advanced',
|
|
163
|
+
stickyScroll: { enabled: false },
|
|
164
|
+
});
|
|
146
165
|
if (editorContainerRef.current) {
|
|
147
|
-
|
|
148
|
-
editorContainerRef.current.style.height = `${Math.min(contentHeight, maxHeight)}px`;
|
|
166
|
+
editorContainerRef.current.style.height = (lineHeight + (2 * paddingTop)) + 'px';
|
|
149
167
|
}
|
|
168
|
+
const updateEditorHeight = () => {
|
|
169
|
+
if (editorContainerRef.current) {
|
|
170
|
+
const contentHeight = editor.getControl().getContentHeight() + paddingTop;
|
|
171
|
+
editorContainerRef.current.style.height = `${Math.min(contentHeight, maxHeight)}px`;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
editor.getControl().onDidChangeModelContent(() => {
|
|
175
|
+
const value = editor.getControl().getValue();
|
|
176
|
+
setIsInputEmpty(!value || value.length === 0);
|
|
177
|
+
updateEditorHeight();
|
|
178
|
+
handleOnChange();
|
|
179
|
+
});
|
|
180
|
+
const resizeObserver = new ResizeObserver(updateEditorHeight);
|
|
181
|
+
if (editorContainerRef.current) {
|
|
182
|
+
resizeObserver.observe(editorContainerRef.current);
|
|
183
|
+
}
|
|
184
|
+
editor.getControl().onDidDispose(() => {
|
|
185
|
+
resizeObserver.disconnect();
|
|
186
|
+
});
|
|
187
|
+
editor.getControl().onContextMenu(e => props.contextMenuCallback(e.event));
|
|
188
|
+
editorRef.current = editor;
|
|
189
|
+
props.setEditorRef(editor);
|
|
150
190
|
};
|
|
151
|
-
editor.getControl().onDidChangeModelContent(updateEditorHeight);
|
|
152
|
-
const resizeObserver = new ResizeObserver(updateEditorHeight);
|
|
153
|
-
if (editorContainerRef.current) {
|
|
154
|
-
resizeObserver.observe(editorContainerRef.current);
|
|
155
|
-
}
|
|
156
|
-
editor.getControl().onDidDispose(() => {
|
|
157
|
-
resizeObserver.disconnect();
|
|
158
|
-
});
|
|
159
|
-
editor.getControl().onContextMenu(e => props.contextMenuCallback(e.event));
|
|
160
|
-
editorRef.current = editor;
|
|
161
|
-
};
|
|
162
|
-
React.useEffect(() => {
|
|
163
191
|
createInputElement();
|
|
164
192
|
return () => {
|
|
193
|
+
props.setEditorRef(undefined);
|
|
165
194
|
if (editorRef.current) {
|
|
166
195
|
editorRef.current.dispose();
|
|
167
196
|
}
|
|
168
197
|
};
|
|
169
198
|
}, []);
|
|
199
|
+
const responseListenerRef = React.useRef();
|
|
200
|
+
// track chat model updates to keep our UI in sync
|
|
201
|
+
// - keep "inProgress" in sync with the request state
|
|
202
|
+
// - keep "changeSetUI" in sync with the change set
|
|
170
203
|
React.useEffect(() => {
|
|
171
|
-
const listener =
|
|
172
|
-
|
|
173
|
-
|
|
204
|
+
const listener = props.chatModel.onDidChange(event => {
|
|
205
|
+
var _a;
|
|
206
|
+
if (event.kind === 'addRequest') {
|
|
207
|
+
if (event.request) {
|
|
208
|
+
setInProgress(ai_chat_1.ChatRequestModel.isInProgress(event.request));
|
|
209
|
+
}
|
|
210
|
+
(_a = responseListenerRef.current) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
211
|
+
responseListenerRef.current = event.request.response.onDidChange(() => setInProgress(ai_chat_1.ChatRequestModel.isInProgress(event.request)));
|
|
212
|
+
}
|
|
213
|
+
else if (ai_chat_1.ChatChangeEvent.isChangeSetEvent(event)) {
|
|
214
|
+
if (event.changeSet) {
|
|
215
|
+
setChangeSetUI(buildChangeSetUI(event.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement));
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
setChangeSetUI(undefined);
|
|
219
|
+
}
|
|
174
220
|
}
|
|
175
221
|
});
|
|
176
|
-
|
|
177
|
-
|
|
222
|
+
setChangeSetUI(props.chatModel.changeSet ? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) : undefined);
|
|
223
|
+
return () => {
|
|
224
|
+
var _a;
|
|
225
|
+
listener === null || listener === void 0 ? void 0 : listener.dispose();
|
|
226
|
+
(_a = responseListenerRef.current) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
227
|
+
responseListenerRef.current = undefined;
|
|
228
|
+
};
|
|
229
|
+
}, [props.chatModel]);
|
|
178
230
|
function submit(value) {
|
|
231
|
+
if (!value || value.trim().length === 0) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
179
234
|
setInProgress(true);
|
|
180
235
|
props.onQuery(value);
|
|
181
236
|
if (editorRef.current) {
|
|
@@ -193,25 +248,119 @@ const ChatInput = (props) => {
|
|
|
193
248
|
}
|
|
194
249
|
}, [props.isEnabled]);
|
|
195
250
|
const handleInputFocus = () => {
|
|
196
|
-
|
|
197
|
-
|
|
251
|
+
hidePlaceholderIfEditorFilled();
|
|
252
|
+
};
|
|
253
|
+
const handleOnChange = () => {
|
|
254
|
+
showPlaceholderIfEditorEmpty();
|
|
255
|
+
hidePlaceholderIfEditorFilled();
|
|
198
256
|
};
|
|
199
257
|
const handleInputBlur = () => {
|
|
258
|
+
showPlaceholderIfEditorEmpty();
|
|
259
|
+
};
|
|
260
|
+
const showPlaceholderIfEditorEmpty = () => {
|
|
200
261
|
var _a, _b;
|
|
201
262
|
if (!((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.getControl().getValue())) {
|
|
202
263
|
(_b = placeholderRef.current) === null || _b === void 0 ? void 0 : _b.classList.remove('hidden');
|
|
203
264
|
}
|
|
204
265
|
};
|
|
266
|
+
const hidePlaceholderIfEditorFilled = () => {
|
|
267
|
+
var _a, _b;
|
|
268
|
+
const value = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.getControl().getValue();
|
|
269
|
+
if (value && value.length > 0) {
|
|
270
|
+
(_b = placeholderRef.current) === null || _b === void 0 ? void 0 : _b.classList.add('hidden');
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
const leftOptions = props.showContext ? [{
|
|
274
|
+
title: 'Attach elements to context',
|
|
275
|
+
handler: () => { },
|
|
276
|
+
className: 'codicon-add'
|
|
277
|
+
}] : [];
|
|
278
|
+
const rightOptions = inProgress
|
|
279
|
+
? [{
|
|
280
|
+
title: 'Cancel (Esc)',
|
|
281
|
+
handler: () => {
|
|
282
|
+
const latestRequest = getLatestRequest(props.chatModel);
|
|
283
|
+
if (latestRequest) {
|
|
284
|
+
props.onCancel(latestRequest);
|
|
285
|
+
}
|
|
286
|
+
setInProgress(false);
|
|
287
|
+
},
|
|
288
|
+
className: 'codicon-stop-circle'
|
|
289
|
+
}]
|
|
290
|
+
: [{
|
|
291
|
+
title: 'Send (Enter)',
|
|
292
|
+
handler: () => {
|
|
293
|
+
var _a;
|
|
294
|
+
if (props.isEnabled) {
|
|
295
|
+
submit(((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.document.textEditorModel.getValue()) || '');
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
className: 'codicon-send',
|
|
299
|
+
disabled: isInputEmpty || !props.isEnabled
|
|
300
|
+
}];
|
|
205
301
|
return React.createElement("div", { className: 'theia-ChatInput' },
|
|
302
|
+
(changeSetUI === null || changeSetUI === void 0 ? void 0 : changeSetUI.elements) &&
|
|
303
|
+
React.createElement(ChangeSetBox, { changeSet: changeSetUI }),
|
|
206
304
|
React.createElement("div", { className: 'theia-ChatInput-Editor-Box' },
|
|
207
305
|
React.createElement("div", { className: 'theia-ChatInput-Editor', ref: editorContainerRef, onKeyDown: onKeyDown, onFocus: handleInputFocus, onBlur: handleInputBlur },
|
|
208
|
-
React.createElement("div", { ref: placeholderRef, className: 'theia-ChatInput-Editor-Placeholder' }, "Ask a question"))
|
|
209
|
-
|
|
210
|
-
if (lastRequest) {
|
|
211
|
-
props.onCancel(lastRequest);
|
|
212
|
-
}
|
|
213
|
-
setInProgress(false);
|
|
214
|
-
} }) :
|
|
215
|
-
React.createElement("span", { className: "codicon codicon-send option", title: "Send (Enter)", onClick: !props.isEnabled ? undefined : () => { var _a; return submit(((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.document.textEditorModel.getValue()) || ''); }, style: { cursor: !props.isEnabled ? 'default' : 'pointer', opacity: !props.isEnabled ? 0.5 : 1 } })));
|
|
306
|
+
React.createElement("div", { ref: placeholderRef, className: 'theia-ChatInput-Editor-Placeholder' }, "Ask a question")),
|
|
307
|
+
React.createElement(ChatInputOptions, { leftOptions: leftOptions, rightOptions: rightOptions })));
|
|
216
308
|
};
|
|
309
|
+
const noPropagation = (handler) => (e) => {
|
|
310
|
+
handler();
|
|
311
|
+
e.stopPropagation();
|
|
312
|
+
};
|
|
313
|
+
const buildChangeSetUI = (changeSet, labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) => ({
|
|
314
|
+
title: changeSet.title,
|
|
315
|
+
disabled: !hasPendingElementsToAccept(changeSet),
|
|
316
|
+
acceptAllPendingElements: () => acceptAllPendingElements(changeSet),
|
|
317
|
+
delete: () => onDeleteChangeSet(),
|
|
318
|
+
elements: changeSet.getElements().map(element => {
|
|
319
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
320
|
+
return ({
|
|
321
|
+
open: (_a = element === null || element === void 0 ? void 0 : element.open) === null || _a === void 0 ? void 0 : _a.bind(element),
|
|
322
|
+
iconClass: (_c = (_b = element.icon) !== null && _b !== void 0 ? _b : labelProvider.getIcon(element.uri)) !== null && _c !== void 0 ? _c : labelProvider.fileIcon,
|
|
323
|
+
nameClass: `${element.type} ${element.state}`,
|
|
324
|
+
name: (_d = element.name) !== null && _d !== void 0 ? _d : labelProvider.getName(element.uri),
|
|
325
|
+
additionalInfo: (_e = element.additionalInfo) !== null && _e !== void 0 ? _e : labelProvider.getDetails(element.uri),
|
|
326
|
+
openChange: (_f = element === null || element === void 0 ? void 0 : element.openChange) === null || _f === void 0 ? void 0 : _f.bind(element),
|
|
327
|
+
accept: element.state !== 'applied' ? (_g = element === null || element === void 0 ? void 0 : element.accept) === null || _g === void 0 ? void 0 : _g.bind(element) : undefined,
|
|
328
|
+
discard: element.state === 'applied' ? (_h = element === null || element === void 0 ? void 0 : element.discard) === null || _h === void 0 ? void 0 : _h.bind(element) : undefined,
|
|
329
|
+
delete: () => onDeleteChangeSetElement(changeSet.getElements().indexOf(element))
|
|
330
|
+
});
|
|
331
|
+
})
|
|
332
|
+
});
|
|
333
|
+
const ChangeSetBox = ({ changeSet }) => (React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Box' },
|
|
334
|
+
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header' },
|
|
335
|
+
React.createElement("h3", null, changeSet.title),
|
|
336
|
+
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header-Actions' },
|
|
337
|
+
React.createElement("button", { className: 'theia-button', disabled: changeSet.disabled, title: 'Accept all pending changes', onClick: () => changeSet.acceptAllPendingElements() }, "Accept"),
|
|
338
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: 'Delete Change Set', onClick: () => changeSet.delete() }))),
|
|
339
|
+
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-List' },
|
|
340
|
+
React.createElement("ul", null, changeSet.elements.map((element, index) => (React.createElement("li", { key: index, title: 'Open Diff', onClick: () => { var _a; return (_a = element.openChange) === null || _a === void 0 ? void 0 : _a.call(element); } },
|
|
341
|
+
React.createElement("div", { className: `theia-ChatInput-ChangeSet-Icon ${element.iconClass}` }),
|
|
342
|
+
React.createElement("span", { className: 'theia-ChatInput-ChangeSet-labelParts' },
|
|
343
|
+
React.createElement("span", { className: `theia-ChatInput-ChangeSet-title ${element.nameClass}` }, element.name),
|
|
344
|
+
React.createElement("span", { className: 'theia-ChatInput-ChangeSet-additionalInfo' }, element.additionalInfo)),
|
|
345
|
+
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Actions' },
|
|
346
|
+
element.open && (React.createElement("span", { className: 'codicon codicon-file action', title: 'Open Original File', onClick: noPropagation(() => element.open()) })),
|
|
347
|
+
element.discard && (React.createElement("span", { className: 'codicon codicon-discard action', title: 'Undo', onClick: noPropagation(() => element.discard()) })),
|
|
348
|
+
element.accept && (React.createElement("span", { className: 'codicon codicon-check action', title: 'Accept', onClick: noPropagation(() => element.accept()) })),
|
|
349
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: 'Delete', onClick: noPropagation(() => element.delete()) })))))))));
|
|
350
|
+
const ChatInputOptions = ({ leftOptions, rightOptions }) => (React.createElement("div", { className: "theia-ChatInputOptions" },
|
|
351
|
+
React.createElement("div", { className: "theia-ChatInputOptions-left" }, leftOptions.map((option, index) => (React.createElement("span", { key: index, className: `codicon ${option.className} option ${option.disabled ? 'disabled' : ''}`, title: option.title, onClick: option.handler })))),
|
|
352
|
+
React.createElement("div", { className: "theia-ChatInputOptions-right" }, rightOptions.map((option, index) => (React.createElement("span", { key: index, className: `codicon ${option.className} option ${option.disabled ? 'disabled' : ''}`, title: option.title, onClick: option.handler }))))));
|
|
353
|
+
function acceptAllPendingElements(changeSet) {
|
|
354
|
+
acceptablePendingElements(changeSet).forEach(e => e.accept());
|
|
355
|
+
}
|
|
356
|
+
function hasPendingElementsToAccept(changeSet) {
|
|
357
|
+
return acceptablePendingElements(changeSet).length > 0;
|
|
358
|
+
}
|
|
359
|
+
function acceptablePendingElements(changeSet) {
|
|
360
|
+
return changeSet.getElements().filter(e => e.accept && (e.state === undefined || e.state === 'pending'));
|
|
361
|
+
}
|
|
362
|
+
function getLatestRequest(chatModel) {
|
|
363
|
+
const requests = chatModel.getRequests();
|
|
364
|
+
return requests.length > 0 ? requests[requests.length - 1] : undefined;
|
|
365
|
+
}
|
|
217
366
|
//# sourceMappingURL=chat-input-widget.js.map
|