@theia/ai-chat-ui 1.75.0-next.8 → 1.75.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-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 +1 -0
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +1 -0
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/change-set-actions/change-set-accept-action.js +2 -17
- package/lib/browser/change-set-actions/change-set-accept-action.js.map +1 -1
- package/lib/browser/chat-banner-widget.js +7 -6
- package/lib/browser/chat-banner-widget.js.map +1 -1
- package/lib/browser/chat-capabilities-panel.js +8 -11
- package/lib/browser/chat-capabilities-panel.js.map +1 -1
- package/lib/browser/chat-capabilities-service.d.ts.map +1 -1
- package/lib/browser/chat-capabilities-service.js +3 -2
- package/lib/browser/chat-capabilities-service.js.map +1 -1
- package/lib/browser/chat-input-agent-suggestions.js +3 -18
- package/lib/browser/chat-input-agent-suggestions.js.map +1 -1
- package/lib/browser/chat-input-history.d.ts +2 -0
- package/lib/browser/chat-input-history.d.ts.map +1 -1
- package/lib/browser/chat-input-history.js +7 -1
- package/lib/browser/chat-input-history.js.map +1 -1
- package/lib/browser/chat-input-widget.d.ts +13 -0
- package/lib/browser/chat-input-widget.d.ts.map +1 -1
- package/lib/browser/chat-input-widget.js +132 -158
- package/lib/browser/chat-input-widget.js.map +1 -1
- package/lib/browser/chat-node-toolbar-action-contribution.d.ts +7 -1
- package/lib/browser/chat-node-toolbar-action-contribution.d.ts.map +1 -1
- package/lib/browser/chat-node-toolbar-action-contribution.js.map +1 -1
- package/lib/browser/chat-progress-message.d.ts +2 -3
- package/lib/browser/chat-progress-message.d.ts.map +1 -1
- package/lib/browser/chat-progress-message.js +6 -27
- package/lib/browser/chat-progress-message.js.map +1 -1
- package/lib/browser/chat-response-renderer/blocked-resource-placeholder.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/blocked-resource-placeholder.js +4 -29
- package/lib/browser/chat-response-renderer/blocked-resource-placeholder.js.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js +11 -16
- package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/command-part-renderer.d.ts +2 -0
- package/lib/browser/chat-response-renderer/command-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/command-part-renderer.js +11 -21
- package/lib/browser/chat-response-renderer/command-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/compaction-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/compaction-part-renderer.js +3 -22
- package/lib/browser/chat-response-renderer/compaction-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/delegation-tool-renderer.js +10 -30
- package/lib/browser/chat-response-renderer/delegation-tool-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/error-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/error-part-renderer.js +2 -25
- package/lib/browser/chat-response-renderer/error-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.js +13 -13
- package/lib/browser/chat-response-renderer/horizontal-layout-part-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 +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js +3 -18
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.js +14 -14
- package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.js.map +1 -1
- package/lib/browser/chat-response-renderer/mcp-app-frame.d.ts +12 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.js +78 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.js.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.d.ts +2 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.js +79 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.js.map +1 -0
- package/lib/browser/chat-response-renderer/mermaid-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/mermaid-part-renderer.js +5 -5
- package/lib/browser/chat-response-renderer/mermaid-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/mermaid-rendering.js +14 -44
- package/lib/browser/chat-response-renderer/mermaid-rendering.js.map +1 -1
- package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.js +2 -23
- package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/progress-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/progress-part-renderer.js +2 -17
- package/lib/browser/chat-response-renderer/progress-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/question-part-renderer.js +13 -25
- package/lib/browser/chat-response-renderer/question-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js +5 -41
- package/lib/browser/chat-response-renderer/server-toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/text-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/text-part-renderer.js +3 -21
- package/lib/browser/chat-response-renderer/text-part-renderer.js.map +1 -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 +2 -20
- package/lib/browser/chat-response-renderer/thinking-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/tool-call-rendering.js +7 -14
- package/lib/browser/chat-response-renderer/tool-call-rendering.js.map +1 -1
- package/lib/browser/chat-response-renderer/tool-confirmation.js +25 -82
- package/lib/browser/chat-response-renderer/tool-confirmation.js.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +5 -65
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-result.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-result.js +23 -38
- package/lib/browser/chat-response-renderer/toolcall-result.js.map +1 -1
- package/lib/browser/chat-response-renderer/unknown-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/unknown-part-renderer.js +5 -9
- package/lib/browser/chat-response-renderer/unknown-part-renderer.js.map +1 -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 +107 -136
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.js +5 -5
- package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.js.map +1 -1
- package/lib/browser/chat-tree-view/model-badge.js +3 -2
- package/lib/browser/chat-tree-view/model-badge.js.map +1 -1
- package/lib/browser/chat-tree-view/prompt-variant-badge.js +3 -2
- package/lib/browser/chat-tree-view/prompt-variant-badge.js.map +1 -1
- package/lib/browser/chat-tree-view/sub-chat-widget.d.ts +2 -1
- package/lib/browser/chat-tree-view/sub-chat-widget.d.ts.map +1 -1
- package/lib/browser/chat-tree-view/sub-chat-widget.js +22 -20
- package/lib/browser/chat-tree-view/sub-chat-widget.js.map +1 -1
- package/lib/browser/chat-view-widget.d.ts +2 -1
- package/lib/browser/chat-view-widget.d.ts.map +1 -1
- package/lib/browser/chat-view-widget.js +6 -1
- package/lib/browser/chat-view-widget.js.map +1 -1
- package/lib/browser/generic-capabilities-section.js +2 -19
- package/lib/browser/generic-capabilities-section.js.map +1 -1
- package/lib/browser/generic-capabilities-service.js +2 -2
- package/lib/browser/generic-capabilities-service.js.map +1 -1
- package/lib/browser/generic-capabilities-service.spec.js +18 -2
- package/lib/browser/generic-capabilities-service.spec.js.map +1 -1
- package/lib/browser/generic-capabilities-tree.js +31 -47
- package/lib/browser/generic-capabilities-tree.js.map +1 -1
- package/lib/browser/session-settings-dialog.js +12 -51
- package/lib/browser/session-settings-dialog.js.map +1 -1
- package/package.json +13 -13
- package/src/browser/ai-chat-ui-contribution.ts +1 -1
- package/src/browser/ai-chat-ui-frontend-module.ts +1 -0
- package/src/browser/chat-capabilities-service.ts +3 -2
- package/src/browser/chat-input-history.ts +6 -2
- package/src/browser/chat-input-widget.tsx +58 -11
- package/src/browser/chat-node-toolbar-action-contribution.ts +7 -1
- package/src/browser/chat-progress-message.tsx +0 -1
- package/src/browser/chat-response-renderer/blocked-resource-placeholder.tsx +1 -2
- package/src/browser/chat-response-renderer/command-part-renderer.tsx +9 -6
- package/src/browser/chat-response-renderer/compaction-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/error-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/horizontal-layout-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/index.ts +1 -0
- package/src/browser/chat-response-renderer/markdown-part-renderer.spec.tsx +0 -1
- package/src/browser/chat-response-renderer/mcp-app-frame.spec.ts +87 -0
- package/src/browser/chat-response-renderer/mcp-app-frame.tsx +95 -0
- package/src/browser/chat-response-renderer/mermaid-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/not-available-toolcall-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/progress-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/text-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/thinking-part-renderer.tsx +0 -1
- package/src/browser/chat-response-renderer/toolcall-result.tsx +6 -1
- package/src/browser/chat-response-renderer/unknown-part-renderer.tsx +0 -1
- package/src/browser/chat-tree-view/chat-view-tree-widget.spec.tsx +0 -1
- package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +7 -0
- package/src/browser/chat-tree-view/sub-chat-widget.tsx +5 -2
- package/src/browser/chat-view-widget.tsx +5 -2
- package/src/browser/generic-capabilities-service.spec.ts +20 -2
- package/src/browser/generic-capabilities-service.ts +2 -2
- package/src/browser/session-settings-dialog.tsx +1 -1
- package/src/browser/style/index.css +24 -14
- package/src/browser/style/mcp-app-frame.css +34 -0
|
@@ -1,26 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2024 EclipseSource GmbH.
|
|
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
3
|
exports.useMarkdownRendering = exports.MarkdownPartRenderer = exports.MarkdownRender = void 0;
|
|
19
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
20
6
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
21
7
|
const common_1 = require("@theia/ai-chat/lib/common");
|
|
22
8
|
const react_1 = require("@theia/core/shared/react");
|
|
23
|
-
const React = require("@theia/core/shared/react");
|
|
24
9
|
const markdownit = require("@theia/core/shared/markdown-it");
|
|
25
10
|
const markdownitemoji = require("@theia/core/shared/markdown-it-emoji");
|
|
26
11
|
const DOMPurify = require("@theia/core/shared/dompurify");
|
|
@@ -33,7 +18,7 @@ const block_external_resources_1 = require("./block-external-resources");
|
|
|
33
18
|
*/
|
|
34
19
|
const MarkdownRender = ({ text, openerService, className }) => {
|
|
35
20
|
const ref = (0, exports.useMarkdownRendering)(text, openerService);
|
|
36
|
-
return
|
|
21
|
+
return (0, jsx_runtime_1.jsx)("div", { className: className, ref: ref });
|
|
37
22
|
};
|
|
38
23
|
exports.MarkdownRender = MarkdownRender;
|
|
39
24
|
let MarkdownPartRenderer = class MarkdownPartRenderer {
|
|
@@ -56,7 +41,7 @@ let MarkdownPartRenderer = class MarkdownPartRenderer {
|
|
|
56
41
|
// eslint-disable-next-line no-null/no-null
|
|
57
42
|
return null;
|
|
58
43
|
}
|
|
59
|
-
return
|
|
44
|
+
return (0, jsx_runtime_1.jsx)(exports.MarkdownRender, { text: response.content, openerService: this.openerService });
|
|
60
45
|
}
|
|
61
46
|
};
|
|
62
47
|
exports.MarkdownPartRenderer = MarkdownPartRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
2
4
|
// *****************************************************************************
|
|
3
5
|
// Copyright (C) 2026 EclipseSource GmbH.
|
|
4
6
|
//
|
|
@@ -14,11 +16,9 @@
|
|
|
14
16
|
//
|
|
15
17
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
18
|
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
19
|
const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
|
|
19
20
|
let disableJSDOM = (0, jsdom_1.enableJSDOM)();
|
|
20
21
|
const chai_1 = require("chai");
|
|
21
|
-
const React = require("@theia/core/shared/react");
|
|
22
22
|
const client_1 = require("@theia/core/shared/react-dom/client");
|
|
23
23
|
const markdown_part_renderer_1 = require("./markdown-part-renderer");
|
|
24
24
|
const block_external_resources_1 = require("./block-external-resources");
|
|
@@ -33,11 +33,11 @@ describe('useMarkdownRendering', () => {
|
|
|
33
33
|
};
|
|
34
34
|
const Markdown = ({ markdown, eventHandler }) => {
|
|
35
35
|
const ref = (0, markdown_part_renderer_1.useMarkdownRendering)(markdown, openerService, false, eventHandler);
|
|
36
|
-
return
|
|
36
|
+
return (0, jsx_runtime_1.jsx)("div", { ref: ref });
|
|
37
37
|
};
|
|
38
38
|
const TrustedMarkdown = ({ markdown }) => {
|
|
39
39
|
const ref = (0, markdown_part_renderer_1.useMarkdownRendering)(markdown, openerService, false, undefined, false);
|
|
40
|
-
return
|
|
40
|
+
return (0, jsx_runtime_1.jsx)("div", { ref: ref });
|
|
41
41
|
};
|
|
42
42
|
before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
|
|
43
43
|
after(() => disableJSDOM());
|
|
@@ -51,7 +51,7 @@ describe('useMarkdownRendering', () => {
|
|
|
51
51
|
document.body.removeChild(container);
|
|
52
52
|
});
|
|
53
53
|
it('blocks external markdown images before they are mounted', done => {
|
|
54
|
-
root.render(
|
|
54
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: "" }));
|
|
55
55
|
setTimeout(() => {
|
|
56
56
|
(0, chai_1.expect)(container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`)).to.exist;
|
|
57
57
|
(0, chai_1.expect)(container.querySelector('img')).to.be.null;
|
|
@@ -59,7 +59,7 @@ describe('useMarkdownRendering', () => {
|
|
|
59
59
|
}, 50);
|
|
60
60
|
});
|
|
61
61
|
it('allows a blocked resource after explicit user action', done => {
|
|
62
|
-
root.render(
|
|
62
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: "" }));
|
|
63
63
|
setTimeout(() => {
|
|
64
64
|
const allow = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_ALLOW_CLASS}`);
|
|
65
65
|
(0, chai_1.expect)(allow).to.exist;
|
|
@@ -78,7 +78,7 @@ describe('useMarkdownRendering', () => {
|
|
|
78
78
|
return true;
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
root.render(
|
|
81
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: "", eventHandler: eventHandler }));
|
|
82
82
|
setTimeout(() => {
|
|
83
83
|
const allow = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_ALLOW_CLASS}`);
|
|
84
84
|
(0, chai_1.expect)(allow).to.exist;
|
|
@@ -93,7 +93,7 @@ describe('useMarkdownRendering', () => {
|
|
|
93
93
|
it('does not restore forged blocked-resource placeholders', done => {
|
|
94
94
|
const forgedPlaceholder = '<span class="theia-blocked-resource" data-blocked-html="<img src=x onerror=alert(1)>">'
|
|
95
95
|
+ '<button class="theia-blocked-resource-allow">Allow this resource</button></span>';
|
|
96
|
-
root.render(
|
|
96
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: forgedPlaceholder }));
|
|
97
97
|
setTimeout(() => {
|
|
98
98
|
const allow = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_ALLOW_CLASS}`);
|
|
99
99
|
(0, chai_1.expect)(allow).to.exist;
|
|
@@ -104,7 +104,7 @@ describe('useMarkdownRendering', () => {
|
|
|
104
104
|
}, 50);
|
|
105
105
|
});
|
|
106
106
|
it('renders external resources directly when blocking is disabled', done => {
|
|
107
|
-
root.render(
|
|
107
|
+
root.render((0, jsx_runtime_1.jsx)(TrustedMarkdown, { markdown: "" }));
|
|
108
108
|
setTimeout(() => {
|
|
109
109
|
(0, chai_1.expect)(container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`)).to.be.null;
|
|
110
110
|
(0, chai_1.expect)(container.querySelector('img')?.getAttribute('src')).to.equal('https://evil.com/x.gif');
|
|
@@ -112,7 +112,7 @@ describe('useMarkdownRendering', () => {
|
|
|
112
112
|
}, 50);
|
|
113
113
|
});
|
|
114
114
|
it('shows blocked placeholders for iframe markdown', done => {
|
|
115
|
-
root.render(
|
|
115
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: '<iframe src="https://evil.com"></iframe>' }));
|
|
116
116
|
setTimeout(() => {
|
|
117
117
|
const placeholder = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`);
|
|
118
118
|
(0, chai_1.expect)(placeholder).to.exist;
|
|
@@ -122,7 +122,7 @@ describe('useMarkdownRendering', () => {
|
|
|
122
122
|
}, 50);
|
|
123
123
|
});
|
|
124
124
|
it('sandboxes allowed iframes with inline content', done => {
|
|
125
|
-
root.render(
|
|
125
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: '<iframe srcdoc="<img src=x onerror=alert(1)>"></iframe>' }));
|
|
126
126
|
setTimeout(() => {
|
|
127
127
|
const allow = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_ALLOW_CLASS}`);
|
|
128
128
|
(0, chai_1.expect)(allow).to.exist;
|
|
@@ -134,7 +134,7 @@ describe('useMarkdownRendering', () => {
|
|
|
134
134
|
}, 50);
|
|
135
135
|
});
|
|
136
136
|
it('shows blocked placeholders for SVG resource markdown', done => {
|
|
137
|
-
root.render(
|
|
137
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: '<svg><image href="https://evil.com/x.png"></image></svg>' }));
|
|
138
138
|
setTimeout(() => {
|
|
139
139
|
const placeholder = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`);
|
|
140
140
|
(0, chai_1.expect)(placeholder).to.exist;
|
|
@@ -144,7 +144,7 @@ describe('useMarkdownRendering', () => {
|
|
|
144
144
|
}, 50);
|
|
145
145
|
});
|
|
146
146
|
it('shows blocked placeholders for style sheets importing external CSS', done => {
|
|
147
|
-
root.render(
|
|
147
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: 'some text\n\n<style>@import url("https://evil.com/main.css");</style>\n<div class="App">content</div>' }));
|
|
148
148
|
setTimeout(() => {
|
|
149
149
|
const placeholder = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`);
|
|
150
150
|
(0, chai_1.expect)(placeholder).to.exist;
|
|
@@ -154,7 +154,7 @@ describe('useMarkdownRendering', () => {
|
|
|
154
154
|
}, 50);
|
|
155
155
|
});
|
|
156
156
|
it('shows blocked placeholders for SVG filter image markdown', done => {
|
|
157
|
-
root.render(
|
|
157
|
+
root.render((0, jsx_runtime_1.jsx)(Markdown, { markdown: '<svg><filter><feImage href="https://evil.com/filter.png"></feImage></filter></svg>' }));
|
|
158
158
|
setTimeout(() => {
|
|
159
159
|
const placeholder = container.querySelector(`.${block_external_resources_1.BLOCKED_RESOURCE_CLASS}`);
|
|
160
160
|
(0, chai_1.expect)(placeholder).to.exist;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-part-renderer.spec.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.spec.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown-part-renderer.spec.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
export interface McpAppFrameProps {
|
|
3
|
+
html: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Builds the `srcDoc` for the sandboxed iframe by injecting a CSP meta tag and a resize-reporting script.
|
|
8
|
+
* Exported for testability.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildSrcDoc(html: string): string;
|
|
11
|
+
export declare const McpAppFrame: React.FC<McpAppFrameProps>;
|
|
12
|
+
//# sourceMappingURL=mcp-app-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAoClD,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.McpAppFrame = void 0;
|
|
4
|
+
exports.buildSrcDoc = buildSrcDoc;
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
6
|
+
// *****************************************************************************
|
|
7
|
+
// Copyright (C) 2026 Ericsson and others.
|
|
8
|
+
//
|
|
9
|
+
// This program and the accompanying materials are made available under the
|
|
10
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
11
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
12
|
+
//
|
|
13
|
+
// This Source Code may also be made available under the following Secondary
|
|
14
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
15
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
16
|
+
// with the GNU Classpath Exception which is available at
|
|
17
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
18
|
+
//
|
|
19
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
20
|
+
// *****************************************************************************
|
|
21
|
+
const React = require("@theia/core/shared/react");
|
|
22
|
+
/** Maximum height the iframe can grow to (px). Consistent with the mermaid renderer viewport cap. */
|
|
23
|
+
const MAX_HEIGHT = 800;
|
|
24
|
+
const CSP_META = '<meta http-equiv="Content-Security-Policy" ' +
|
|
25
|
+
'content="default-src \'none\'; script-src \'unsafe-inline\'; style-src \'unsafe-inline\'; img-src data: blob:; font-src data:; connect-src \'none\';">';
|
|
26
|
+
const RESIZE_SCRIPT = `<script>
|
|
27
|
+
new ResizeObserver(() => {
|
|
28
|
+
window.parent.postMessage({ type: 'mcp-app-resize', height: document.documentElement.scrollHeight }, '*');
|
|
29
|
+
}).observe(document.documentElement);
|
|
30
|
+
</script>`;
|
|
31
|
+
/**
|
|
32
|
+
* Builds the `srcDoc` for the sandboxed iframe by injecting a CSP meta tag and a resize-reporting script.
|
|
33
|
+
* Exported for testability.
|
|
34
|
+
*/
|
|
35
|
+
function buildSrcDoc(html) {
|
|
36
|
+
let doc = html;
|
|
37
|
+
// Inject CSP meta tag into <head> if present (tolerant of attributes and casing), otherwise prepend it.
|
|
38
|
+
if (/<head[\s>]/i.test(doc)) {
|
|
39
|
+
doc = doc.replace(/<head[\s>]/i, match => `${match}${CSP_META}`);
|
|
40
|
+
}
|
|
41
|
+
else if (doc.includes('<html')) {
|
|
42
|
+
doc = doc.replace(/(<html[^>]*>)/, `$1<head>${CSP_META}</head>`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
doc = `${CSP_META}${doc}`;
|
|
46
|
+
}
|
|
47
|
+
// Inject resize script before </body> if present, otherwise append it.
|
|
48
|
+
if (doc.includes('</body>')) {
|
|
49
|
+
doc = doc.replace('</body>', `${RESIZE_SCRIPT}</body>`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
doc = `${doc}${RESIZE_SCRIPT}`;
|
|
53
|
+
}
|
|
54
|
+
return doc;
|
|
55
|
+
}
|
|
56
|
+
const McpAppFrame = ({ html, title }) => {
|
|
57
|
+
// eslint-disable-next-line no-null/no-null
|
|
58
|
+
const iframeRef = React.useRef(null);
|
|
59
|
+
const [height, setHeight] = React.useState(200);
|
|
60
|
+
React.useEffect(() => {
|
|
61
|
+
const handler = (event) => {
|
|
62
|
+
if (iframeRef.current?.contentWindow === event.source &&
|
|
63
|
+
event.data?.type === 'mcp-app-resize' &&
|
|
64
|
+
typeof event.data.height === 'number') {
|
|
65
|
+
const h = event.data.height;
|
|
66
|
+
if (Number.isFinite(h) && h > 0) {
|
|
67
|
+
setHeight(Math.min(h, MAX_HEIGHT));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
window.addEventListener('message', handler);
|
|
72
|
+
return () => window.removeEventListener('message', handler);
|
|
73
|
+
}, []);
|
|
74
|
+
const srcDoc = buildSrcDoc(html);
|
|
75
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'theia-mcp-app-container', children: [title && (0, jsx_runtime_1.jsx)("div", { className: 'theia-mcp-app-title', children: title }), (0, jsx_runtime_1.jsx)("iframe", { ref: iframeRef, srcDoc: srcDoc, sandbox: 'allow-scripts', allow: '', className: 'theia-mcp-app-iframe', style: { height: `${height}px` }, title: title ?? 'MCP App' })] }));
|
|
76
|
+
};
|
|
77
|
+
exports.McpAppFrame = McpAppFrame;
|
|
78
|
+
//# sourceMappingURL=mcp-app-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 Ericsson 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 chai_1 = require("chai");
|
|
19
|
+
const mcp_app_frame_1 = require("./mcp-app-frame");
|
|
20
|
+
describe('McpAppFrame buildSrcDoc', () => {
|
|
21
|
+
it('injects CSP into <head> and resize script before </body>', () => {
|
|
22
|
+
const html = '<html><head><title>App</title></head><body><p>Hello</p></body></html>';
|
|
23
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
24
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
25
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
26
|
+
(0, chai_1.expect)(result.indexOf('Content-Security-Policy')).to.be.lessThan(result.indexOf('</head>'));
|
|
27
|
+
(0, chai_1.expect)(result.indexOf('ResizeObserver')).to.be.lessThan(result.indexOf('</body>'));
|
|
28
|
+
});
|
|
29
|
+
it('handles <head> with attributes (e.g. <head lang="en">)', () => {
|
|
30
|
+
const html = '<html><head lang="en"><title>App</title></head><body><p>Hi</p></body></html>';
|
|
31
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
32
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
33
|
+
// Should not inject a second <head>
|
|
34
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
35
|
+
(0, chai_1.expect)(headCount).to.equal(1);
|
|
36
|
+
});
|
|
37
|
+
it('handles uppercase <HEAD>', () => {
|
|
38
|
+
const html = '<html><HEAD><title>App</title></HEAD><body><p>Hi</p></body></html>';
|
|
39
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
40
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
41
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
42
|
+
(0, chai_1.expect)(headCount).to.equal(1);
|
|
43
|
+
});
|
|
44
|
+
it('wraps CSP in a new <head> when only <html> is present', () => {
|
|
45
|
+
const html = '<html><body><p>No head</p></body></html>';
|
|
46
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
47
|
+
(0, chai_1.expect)(result).to.contain('<head>');
|
|
48
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
49
|
+
});
|
|
50
|
+
it('prepends CSP when no <html> or <head> present', () => {
|
|
51
|
+
const html = '<div>Simple content</div>';
|
|
52
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
53
|
+
(0, chai_1.expect)(result).to.match(/^<meta/);
|
|
54
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
55
|
+
(0, chai_1.expect)(result).to.contain('<div>Simple content</div>');
|
|
56
|
+
});
|
|
57
|
+
it('appends resize script when no </body> tag', () => {
|
|
58
|
+
const html = '<div>Simple content</div>';
|
|
59
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
60
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
61
|
+
(0, chai_1.expect)(result.endsWith('</script>')).to.be.true;
|
|
62
|
+
});
|
|
63
|
+
it('handles empty html', () => {
|
|
64
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)('');
|
|
65
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
66
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
67
|
+
});
|
|
68
|
+
it('preserves original html content', () => {
|
|
69
|
+
const html = '<html><head></head><body><h1>Title</h1><p>Content</p></body></html>';
|
|
70
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
71
|
+
(0, chai_1.expect)(result).to.contain('<h1>Title</h1>');
|
|
72
|
+
(0, chai_1.expect)(result).to.contain('<p>Content</p>');
|
|
73
|
+
});
|
|
74
|
+
it('CSP blocks connect-src', () => {
|
|
75
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)('<html><head></head><body></body></html>');
|
|
76
|
+
(0, chai_1.expect)(result).to.contain("connect-src 'none'");
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=mcp-app-frame.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.spec.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mermaid-part-renderer.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"mermaid-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mermaid-part-renderer.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAMvE;;;;;;;GAOG;AACH,qBACa,mBAAoB,YAAW,wBAAwB,CAAC,uBAAuB,CAAC;IAGzF,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAGtE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAG9C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS;CAYjF"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MermaidPartRenderer = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
2
6
|
// *****************************************************************************
|
|
3
7
|
// Copyright (C) 2026 EclipseSource GmbH.
|
|
4
8
|
//
|
|
@@ -14,15 +18,11 @@
|
|
|
14
18
|
//
|
|
15
19
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
20
|
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.MermaidPartRenderer = void 0;
|
|
19
|
-
const tslib_1 = require("tslib");
|
|
20
21
|
const common_1 = require("@theia/ai-chat/lib/common");
|
|
21
22
|
const core_1 = require("@theia/core");
|
|
22
23
|
const clipboard_service_1 = require("@theia/core/lib/browser/clipboard-service");
|
|
23
24
|
const theming_1 = require("@theia/core/lib/browser/theming");
|
|
24
25
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
25
|
-
const React = require("@theia/core/shared/react");
|
|
26
26
|
const monaco_editor_provider_1 = require("@theia/monaco/lib/browser/monaco-editor-provider");
|
|
27
27
|
const mermaid_rendering_1 = require("./mermaid-rendering");
|
|
28
28
|
/** Priority returned by {@link MermaidPartRenderer.canHandle}. Must exceed the {@link CodePartRenderer} priority (10). */
|
|
@@ -43,7 +43,7 @@ let MermaidPartRenderer = class MermaidPartRenderer {
|
|
|
43
43
|
return -1;
|
|
44
44
|
}
|
|
45
45
|
render(response, parentNode) {
|
|
46
|
-
return (
|
|
46
|
+
return ((0, jsx_runtime_1.jsx)(mermaid_rendering_1.MermaidViewer, { code: response.code, isComplete: parentNode.response.isComplete, themeService: this.themeService, clipboardService: this.clipboardService, editorProvider: this.editorProvider, untitledResourceResolver: this.untitledResourceResolver }));
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
exports.MermaidPartRenderer = MermaidPartRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mermaid-part-renderer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mermaid-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mermaid-part-renderer.tsx"],"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,sDAAyF;AACzF,sCAAuD;AACvD,iFAA6E;AAC7E,6DAA+D;AAC/D,4DAAkE;AAElE,6FAAwF;AAGxF,2DAAoD;AAEpD,0HAA0H;AAC1H,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;;;;;;GAOG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAc5B,SAAS,CAAC,QAA6B;QACnC,IAAI,gCAAuB,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;YACzF,OAAO,yBAAyB,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,MAAM,CAAC,QAAiC,EAAE,UAAwB;QAC9D,OAAO,CACH,uBAAC,iCAAa,IACV,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,EAC1C,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,GACzD,CACL,CAAC;IACN,CAAC;CACJ,CAAA;AAjCY,kDAAmB;AAGT;IADlB,IAAA,kBAAM,EAAC,6CAAoB,CAAC;sCACM,6CAAoB;2DAAC;AAGrC;IADlB,IAAA,kBAAM,EAAC,+BAAwB,CAAC;sCACY,+BAAwB;qEAAC;AAGnD;IADlB,IAAA,kBAAM,EAAC,sBAAY,CAAC;sCACY,sBAAY;yDAAC;AAG3B;IADlB,IAAA,kBAAM,EAAC,oCAAgB,CAAC;;6DAC6B;8BAZ7C,mBAAmB;IAD/B,IAAA,sBAAU,GAAE;GACA,mBAAmB,CAiC/B"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2026 EclipseSource GmbH.
|
|
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
3
|
exports.MarkdownWithMermaid = exports.MermaidViewer = exports.splitMermaidSegments = exports.useThemeMode = exports.MermaidDiagram = exports.sanitizeDiagram = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
19
5
|
const os_1 = require("@theia/core/lib/common/os");
|
|
20
6
|
const nls_1 = require("@theia/core/lib/common/nls");
|
|
21
7
|
const theme_1 = require("@theia/core/lib/common/theme");
|
|
@@ -183,17 +169,15 @@ const MermaidDiagram = ({ code, themeMode, isComplete }) => {
|
|
|
183
169
|
}, [code, themeMode]);
|
|
184
170
|
if (svg) {
|
|
185
171
|
// eslint-disable-next-line react/no-danger
|
|
186
|
-
return
|
|
172
|
+
return (0, jsx_runtime_1.jsx)("div", { className: 'theia-MermaidViewer-diagram', dangerouslySetInnerHTML: { __html: svg } });
|
|
187
173
|
}
|
|
188
174
|
// Only show the error once the content is complete and rendering actually failed. Before that (initial async
|
|
189
175
|
// render, or a still-streaming definition that cannot parse yet) show the "rendering" hint, so a freshly shown
|
|
190
176
|
// diagram does not briefly flash the error message before it appears.
|
|
191
177
|
if (error && isComplete) {
|
|
192
|
-
return (
|
|
193
|
-
React.createElement("span", { className: 'codicon codicon-warning' }),
|
|
194
|
-
React.createElement("span", null, nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/error', 'Unable to render the Mermaid diagram. Switch to the source view to inspect the definition.'))));
|
|
178
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'theia-MermaidViewer-error', title: error, children: [(0, jsx_runtime_1.jsx)("span", { className: 'codicon codicon-warning' }), (0, jsx_runtime_1.jsx)("span", { children: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/error', 'Unable to render the Mermaid diagram. Switch to the source view to inspect the definition.') })] }));
|
|
195
179
|
}
|
|
196
|
-
return
|
|
180
|
+
return (0, jsx_runtime_1.jsx)("div", { className: 'theia-MermaidViewer-status', children: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/rendering', 'Rendering diagram…') });
|
|
197
181
|
};
|
|
198
182
|
exports.MermaidDiagram = MermaidDiagram;
|
|
199
183
|
/** Tracks the workbench theme mode (light/dark), re-rendering the consumer when the color theme changes. */
|
|
@@ -230,7 +214,7 @@ const splitMermaidSegments = (text) => {
|
|
|
230
214
|
};
|
|
231
215
|
exports.splitMermaidSegments = splitMermaidSegments;
|
|
232
216
|
/** A small icon button (codicon) used in the diagram toolbar. */
|
|
233
|
-
const ToolbarButton = ({ icon, title, onClick }) =>
|
|
217
|
+
const ToolbarButton = ({ icon, title, onClick }) => (0, jsx_runtime_1.jsx)("div", { className: `action-label codicon codicon-${icon}`, title: title, role: 'button', onClick: onClick });
|
|
234
218
|
/**
|
|
235
219
|
* Hosts the rendered diagram. Expanded, it provides drag-to-pan and (Ctrl/Cmd +) wheel-to-zoom and is resizable via
|
|
236
220
|
* CSS; collapsed, it shrinks to a thumbnail and a click expands it. It always keeps its children mounted - collapse,
|
|
@@ -275,8 +259,7 @@ const MermaidViewport = ({ scale, offset, onOffsetChange, onScaleChange, collaps
|
|
|
275
259
|
element.addEventListener('wheel', onWheel, { passive: false });
|
|
276
260
|
return () => element.removeEventListener('wheel', onWheel);
|
|
277
261
|
}, [collapsed, onScaleChange]);
|
|
278
|
-
return (
|
|
279
|
-
React.createElement("div", { className: 'theia-MermaidViewer-canvas', style: collapsed ? undefined : { transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})` } }, children)));
|
|
262
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: viewportRef, className: `theia-MermaidViewer-viewport${collapsed ? ' collapsed' : ''}`, hidden: hidden, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, onPointerLeave: onPointerUp, onClick: collapsed ? onExpand : undefined, children: (0, jsx_runtime_1.jsx)("div", { className: 'theia-MermaidViewer-canvas', style: collapsed ? undefined : { transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})` }, children: children }) }));
|
|
280
263
|
};
|
|
281
264
|
/**
|
|
282
265
|
* A self-contained, reusable mermaid viewer: a toolbar (collapse, diagram/source toggle, zoom, copy), a pan/zoom
|
|
@@ -297,25 +280,12 @@ const MermaidViewer = ({ code, isComplete, themeService, clipboardService, edito
|
|
|
297
280
|
const resetView = () => { setScale(1); setOffset({ x: 0, y: 0 }); };
|
|
298
281
|
const copySource = () => clipboardService.writeText(code);
|
|
299
282
|
const isDiagram = mode === 'diagram';
|
|
300
|
-
const diagram =
|
|
283
|
+
const diagram = (0, jsx_runtime_1.jsx)(exports.MermaidDiagram, { code: code, themeMode: themeMode, isComplete: isComplete });
|
|
301
284
|
const wheelZoomHint = nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/wheelZoomHint', '{0} + Scroll', os_1.isOSX ? 'Cmd' : 'Ctrl');
|
|
302
|
-
return (
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
!collapsed && isDiagram && React.createElement(React.Fragment, null,
|
|
307
|
-
React.createElement(ToolbarButton, { icon: 'zoom-in', title: `${nls_1.nls.localizeByDefault('Zoom In')} (${wheelZoomHint})`, onClick: zoomIn }),
|
|
308
|
-
React.createElement(ToolbarButton, { icon: 'zoom-out', title: `${nls_1.nls.localizeByDefault('Zoom Out')} (${wheelZoomHint})`, onClick: zoomOut }),
|
|
309
|
-
React.createElement(ToolbarButton, { icon: 'screen-normal', title: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/resetView', 'Reset View'), onClick: resetView })),
|
|
310
|
-
React.createElement(ToolbarButton, { icon: 'copy', title: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/copySource', 'Copy Source'), onClick: copySource }),
|
|
311
|
-
!collapsed && React.createElement(ToolbarButton, { icon: isDiagram ? 'code' : 'graph', title: isDiagram
|
|
312
|
-
? nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/showSource', 'Show Source')
|
|
313
|
-
: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/showDiagram', 'Show Diagram'), onClick: toggleMode }),
|
|
314
|
-
React.createElement(ToolbarButton, { icon: collapsed ? 'chevron-down' : 'chevron-up', title: collapsed ? nls_1.nls.localizeByDefault('Expand') : nls_1.nls.localizeByDefault('Collapse'), onClick: toggleCollapsed }))),
|
|
315
|
-
React.createElement(MermaidViewport, { scale: scale, offset: offset, onOffsetChange: setOffset, onScaleChange: setScale, collapsed: collapsed, hidden: !collapsed && !isDiagram, onExpand: expand }, diagram),
|
|
316
|
-
!collapsed && !isDiagram &&
|
|
317
|
-
React.createElement("div", { className: 'theia-MermaidViewer-source' },
|
|
318
|
-
React.createElement(code_part_renderer_1.CodeWrapper, { content: code, editorProvider: editorProvider, untitledResourceResolver: untitledResourceResolver, contextMenuCallback: contextMenuCallback ?? (() => { }) }))));
|
|
285
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'theia-MermaidViewer-root', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'theia-MermaidViewer-toolbar', role: 'button', title: collapsed ? nls_1.nls.localizeByDefault('Expand') : nls_1.nls.localizeByDefault('Collapse'), onClick: toggleCollapsed, children: [(0, jsx_runtime_1.jsx)("span", { className: 'theia-MermaidViewer-title', children: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/title', 'Mermaid Diagram') }), (0, jsx_runtime_1.jsxs)("div", { className: 'theia-MermaidViewer-actions', onClick: stopPropagation, children: [!collapsed && isDiagram && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ToolbarButton, { icon: 'zoom-in', title: `${nls_1.nls.localizeByDefault('Zoom In')} (${wheelZoomHint})`, onClick: zoomIn }), (0, jsx_runtime_1.jsx)(ToolbarButton, { icon: 'zoom-out', title: `${nls_1.nls.localizeByDefault('Zoom Out')} (${wheelZoomHint})`, onClick: zoomOut }), (0, jsx_runtime_1.jsx)(ToolbarButton, { icon: 'screen-normal', title: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/resetView', 'Reset View'), onClick: resetView })] }), (0, jsx_runtime_1.jsx)(ToolbarButton, { icon: 'copy', title: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/copySource', 'Copy Source'), onClick: copySource }), !collapsed && (0, jsx_runtime_1.jsx)(ToolbarButton, { icon: isDiagram ? 'code' : 'graph', title: isDiagram
|
|
286
|
+
? nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/showSource', 'Show Source')
|
|
287
|
+
: nls_1.nls.localize('theia/ai/chat-ui/mermaid-rendering/showDiagram', 'Show Diagram'), onClick: toggleMode }), (0, jsx_runtime_1.jsx)(ToolbarButton, { icon: collapsed ? 'chevron-down' : 'chevron-up', title: collapsed ? nls_1.nls.localizeByDefault('Expand') : nls_1.nls.localizeByDefault('Collapse'), onClick: toggleCollapsed })] })] }), (0, jsx_runtime_1.jsx)(MermaidViewport, { scale: scale, offset: offset, onOffsetChange: setOffset, onScaleChange: setScale, collapsed: collapsed, hidden: !collapsed && !isDiagram, onExpand: expand, children: diagram }), !collapsed && !isDiagram &&
|
|
288
|
+
(0, jsx_runtime_1.jsx)("div", { className: 'theia-MermaidViewer-source', children: (0, jsx_runtime_1.jsx)(code_part_renderer_1.CodeWrapper, { content: code, editorProvider: editorProvider, untitledResourceResolver: untitledResourceResolver, contextMenuCallback: contextMenuCallback ?? (() => { }) }) })] }));
|
|
319
289
|
};
|
|
320
290
|
exports.MermaidViewer = MermaidViewer;
|
|
321
291
|
/**
|
|
@@ -330,9 +300,9 @@ exports.MermaidViewer = MermaidViewer;
|
|
|
330
300
|
*/
|
|
331
301
|
const MarkdownWithMermaid = ({ content, openerService, themeService, clipboardService, editorProvider, untitledResourceResolver }) => {
|
|
332
302
|
const segments = React.useMemo(() => (0, exports.splitMermaidSegments)(content).filter(segment => segment.type === 'mermaid' || segment.content.trim().length > 0), [content]);
|
|
333
|
-
return
|
|
334
|
-
|
|
335
|
-
|
|
303
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: segments.map((segment, index) => segment.type === 'mermaid'
|
|
304
|
+
? (0, jsx_runtime_1.jsx)(exports.MermaidViewer, { code: segment.content, isComplete: true, themeService: themeService, clipboardService: clipboardService, editorProvider: editorProvider, untitledResourceResolver: untitledResourceResolver }, index)
|
|
305
|
+
: (0, jsx_runtime_1.jsx)(markdown_part_renderer_1.MarkdownRender, { text: segment.content, openerService: openerService }, index)) });
|
|
336
306
|
};
|
|
337
307
|
exports.MarkdownWithMermaid = MarkdownWithMermaid;
|
|
338
308
|
//# sourceMappingURL=mermaid-rendering.js.map
|