@opensumi/ide-notebook 3.5.1-next-1731935606.0 → 3.5.1-next-1732847732.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/browser/index.d.ts.map +1 -1
  2. package/lib/browser/index.js +0 -2
  3. package/lib/browser/index.js.map +1 -1
  4. package/lib/browser/kernel-panel/index.d.ts +0 -1
  5. package/lib/browser/kernel-panel/index.d.ts.map +1 -1
  6. package/lib/browser/kernel-panel/index.js +0 -1
  7. package/lib/browser/kernel-panel/index.js.map +1 -1
  8. package/lib/browser/libro/libro-opensumi-content-contribution.d.ts.map +1 -1
  9. package/lib/browser/libro/libro-opensumi-content-contribution.js +3 -2
  10. package/lib/browser/libro/libro-opensumi-content-contribution.js.map +1 -1
  11. package/lib/browser/libro-keybind-contribution.d.ts +5 -7
  12. package/lib/browser/libro-keybind-contribution.d.ts.map +1 -1
  13. package/lib/browser/libro-keybind-contribution.js +14 -23
  14. package/lib/browser/libro-keybind-contribution.js.map +1 -1
  15. package/lib/browser/libro.contribution.d.ts +4 -2
  16. package/lib/browser/libro.contribution.d.ts.map +1 -1
  17. package/lib/browser/libro.contribution.js +33 -4
  18. package/lib/browser/libro.contribution.js.map +1 -1
  19. package/lib/browser/variables/index.less +102 -0
  20. package/lib/browser/variables/inspector-script.d.ts +17 -0
  21. package/lib/browser/variables/inspector-script.d.ts.map +1 -0
  22. package/lib/browser/variables/inspector-script.js +339 -0
  23. package/lib/browser/variables/inspector-script.js.map +1 -0
  24. package/lib/browser/variables/libro-variable-color-registry.d.ts +6 -0
  25. package/lib/browser/variables/libro-variable-color-registry.d.ts.map +1 -0
  26. package/lib/browser/variables/libro-variable-color-registry.js +111 -0
  27. package/lib/browser/variables/libro-variable-color-registry.js.map +1 -0
  28. package/lib/browser/variables/libro-variable-module.d.ts +3 -0
  29. package/lib/browser/variables/libro-variable-module.d.ts.map +1 -0
  30. package/lib/browser/variables/libro-variable-module.js +5 -0
  31. package/lib/browser/variables/libro-variable-module.js.map +1 -0
  32. package/lib/browser/variables/variable-panel.d.ts +6 -0
  33. package/lib/browser/variables/variable-panel.d.ts.map +1 -0
  34. package/lib/browser/variables/variable-panel.js +57 -0
  35. package/lib/browser/variables/variable-panel.js.map +1 -0
  36. package/lib/browser/variables/variable-protocol.d.ts +2 -0
  37. package/lib/browser/variables/variable-protocol.d.ts.map +1 -0
  38. package/lib/browser/variables/variable-protocol.js +2 -0
  39. package/lib/browser/variables/variable-protocol.js.map +1 -0
  40. package/lib/browser/variables/variable-view.d.ts +45 -0
  41. package/lib/browser/variables/variable-view.d.ts.map +1 -0
  42. package/lib/browser/variables/variable-view.js +242 -0
  43. package/lib/browser/variables/variable-view.js.map +1 -0
  44. package/package.json +13 -13
  45. package/src/browser/index.ts +0 -2
  46. package/src/browser/kernel-panel/index.ts +0 -1
  47. package/src/browser/libro/libro-opensumi-content-contribution.ts +3 -2
  48. package/src/browser/libro-keybind-contribution.ts +17 -24
  49. package/src/browser/libro.contribution.tsx +47 -3
  50. package/src/browser/variables/index.less +102 -0
  51. package/src/browser/variables/inspector-script.ts +349 -0
  52. package/src/browser/variables/libro-variable-color-registry.ts +131 -0
  53. package/src/browser/variables/libro-variable-module.ts +6 -0
  54. package/src/browser/variables/variable-panel.tsx +73 -0
  55. package/src/browser/variables/variable-protocol.ts +1 -0
  56. package/src/browser/variables/variable-view.tsx +311 -0
  57. package/lib/browser/kernel-panel/kernel.panel.contribution.d.ts +0 -7
  58. package/lib/browser/kernel-panel/kernel.panel.contribution.d.ts.map +0 -1
  59. package/lib/browser/kernel-panel/kernel.panel.contribution.js +0 -32
  60. package/lib/browser/kernel-panel/kernel.panel.contribution.js.map +0 -1
  61. package/src/browser/kernel-panel/kernel.panel.contribution.ts +0 -32
@@ -0,0 +1,242 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { SearchOutlined, SelectOutlined } from '@ant-design/icons';
3
+ import { LibroContextKey, LibroJupyterModel, NotebookCommands } from '@difizen/libro-jupyter/noeditor';
4
+ import { BaseView, CommandRegistry, ThemeService, ViewInstance, inject, prop, transient, useInject, view, } from '@difizen/mana-app';
5
+ import { Input, List, Tag, Tooltip, message } from 'antd';
6
+ import React, { forwardRef } from 'react';
7
+ import './index.less';
8
+ import { DisposableCollection, localize } from '@opensumi/ide-core-common';
9
+ import { Languages } from './inspector-script';
10
+ const LibroVariableComponent = forwardRef((props, ref) => {
11
+ const instance = useInject(ViewInstance);
12
+ const themeService = useInject(ThemeService);
13
+ const libroContextKey = useInject(LibroContextKey);
14
+ return (React.createElement("div", { ref: ref, className: 'libro-variable-content' },
15
+ React.createElement("div", { className: 'libro-variable-search' },
16
+ React.createElement(Input, { className: 'libro-variable-search-input', placeholder: localize('notebook.variable.panel.search.placeholder'), prefix: React.createElement(SearchOutlined, null), onChange: (e) => instance.search(e.target.value), onFocus: () => {
17
+ libroContextKey.disableCommandMode();
18
+ }, onBlur: () => {
19
+ libroContextKey.enableCommandMode();
20
+ } }),
21
+ React.createElement("img", { src: `${themeService.getCurrentTheme().type === 'dark'
22
+ ? 'https://mdn.alipayobjects.com/huamei_xt20ge/afts/img/A*rY0oTpYcmZsAAAAAAAAAAAAADiuUAQ/original'
23
+ : 'https://mdn.alipayobjects.com/huamei_xt20ge/afts/img/A*VApRSqHz8wQAAAAAAAAAAAAADiuUAQ/original'}`, onClick: instance.refresh, className: 'libro-variable-search-extra' })),
24
+ React.createElement(List, { className: 'libro-variable-list', itemLayout: 'horizontal', dataSource: instance.filteredList, renderItem: (item) => {
25
+ const DesrendeItem = () => React.createElement(Tooltip, { title: item.varContent }, item.varContent);
26
+ return (React.createElement(List.Item, null,
27
+ React.createElement(List.Item.Meta, { title: React.createElement("div", { className: 'libro-variable-title' },
28
+ React.createElement("span", { className: 'libro-variable-name' },
29
+ item.varName,
30
+ React.createElement(Tag, { className: 'libro-variable-type-tag', bordered: false }, item.varType)),
31
+ React.createElement(Tooltip, { placement: 'top', title: localize('notebook.variable.panel.show.detail') },
32
+ React.createElement(SelectOutlined, { onClick: () => instance.showVariable(item), className: 'libro-variable-extra' }))), description: React.createElement(DesrendeItem, null) })));
33
+ } })));
34
+ });
35
+ let LibroVariablePanelView = class LibroVariablePanelView extends BaseView {
36
+ constructor() {
37
+ super(...arguments);
38
+ this.connectorToDispose = new DisposableCollection();
39
+ this.kernelInited = false;
40
+ this.view = LibroVariableComponent;
41
+ this.showVariable = async (variable) => {
42
+ if (!this.parent) {
43
+ return;
44
+ }
45
+ let activeIndex = this.parent.model.cells.length;
46
+ if (this.parent.activeCell) {
47
+ activeIndex = this.parent.findCellIndex(this.parent.activeCell) + 1;
48
+ }
49
+ await this.parent.addCell({
50
+ cell: {
51
+ cell_type: 'code',
52
+ source: variable.varName,
53
+ metadata: {},
54
+ outputs: [],
55
+ },
56
+ }, activeIndex);
57
+ const cell = this.parent.model.cells[activeIndex];
58
+ window.requestAnimationFrame(() => {
59
+ var _a;
60
+ (_a = this.commands) === null || _a === void 0 ? void 0 : _a.executeCommand(NotebookCommands.RunCell.id, cell, this.parent);
61
+ });
62
+ };
63
+ this.pause = () => {
64
+ this.connectorToDispose.dispose();
65
+ this.connectorToDispose = new DisposableCollection();
66
+ };
67
+ this.search = (v) => {
68
+ this.searchValue = v;
69
+ };
70
+ /*
71
+ * Invokes a inspection if the signal emitted from specified session is an 'execute_input' msg.
72
+ */
73
+ this.queryCall = (msg) => {
74
+ var _a, _b, _c;
75
+ const msgType = msg.header.msg_type;
76
+ switch (msgType) {
77
+ case 'execute_input': {
78
+ const code = msg.content.code;
79
+ if (!(code === ((_a = this.languageModel) === null || _a === void 0 ? void 0 : _a.queryCommand)) &&
80
+ !(code === ((_b = this.languageModel) === null || _b === void 0 ? void 0 : _b.matrixQueryCommand)) &&
81
+ !code.startsWith(((_c = this.languageModel) === null || _c === void 0 ? void 0 : _c.widgetQueryCommand) || '')) {
82
+ this.performInspection();
83
+ }
84
+ break;
85
+ }
86
+ default:
87
+ break;
88
+ }
89
+ };
90
+ this.refresh = async () => {
91
+ try {
92
+ await this.performInspection();
93
+ message.success(localize('notebook.variable.panel.refresh.success', 'Variable refresh successful'));
94
+ }
95
+ catch (ex) {
96
+ message.error(localize('notebook.variable.panel.refresh.error', 'Variable refresh failed'));
97
+ }
98
+ };
99
+ /**
100
+ * Performs an inspection by sending an execute request with the query command to the kernel.
101
+ */
102
+ this.performInspection = () => {
103
+ const content = {
104
+ code: this.languageModel.queryCommand,
105
+ stop_on_error: false,
106
+ store_history: false,
107
+ };
108
+ return this.fetch(content, this.handleQueryResponse);
109
+ };
110
+ this.handleQueryResponse = (response) => {
111
+ const msgType = response.header.msg_type;
112
+ switch (msgType) {
113
+ case 'execute_result': {
114
+ const payload = response;
115
+ let content = payload.content.data['text/plain'];
116
+ if (content.slice(0, 1) === "'" || content.slice(0, 1) === '"') {
117
+ content = content.slice(1, -1);
118
+ content = content.replace(/\\"/g, '"').replace(/\\'/g, "'");
119
+ }
120
+ const update = JSON.parse(content);
121
+ this.list = update;
122
+ break;
123
+ }
124
+ case 'display_data': {
125
+ const payloadDisplay = response;
126
+ let contentDisplay = payloadDisplay.content.data['text/plain'];
127
+ if (contentDisplay.slice(0, 1) === "'" || contentDisplay.slice(0, 1) === '"') {
128
+ contentDisplay = contentDisplay.slice(1, -1);
129
+ contentDisplay = contentDisplay.replace(/\\"/g, '"').replace(/\\'/g, "'");
130
+ }
131
+ const updateDisplay = JSON.parse(contentDisplay);
132
+ this.list = updateDisplay;
133
+ break;
134
+ }
135
+ default:
136
+ break;
137
+ }
138
+ };
139
+ this.fetch = async (content, ioCallback) => {
140
+ const model = this.parent.model;
141
+ await model.kcReady;
142
+ const connection = model.kernelConnection;
143
+ const future = connection.requestExecute(content);
144
+ future.onIOPub = (msg) => {
145
+ ioCallback(msg);
146
+ };
147
+ return future.done;
148
+ };
149
+ }
150
+ get filteredList() {
151
+ if (!this.searchValue) {
152
+ return this.list;
153
+ }
154
+ if (!this.list) {
155
+ return undefined;
156
+ }
157
+ return this.list.filter((item) => {
158
+ if (!this.searchValue) {
159
+ return true;
160
+ }
161
+ return item.varName.includes(this.searchValue);
162
+ });
163
+ }
164
+ async update() {
165
+ if (!this.parent) {
166
+ return;
167
+ }
168
+ if (!(this.parent.model instanceof LibroJupyterModel)) {
169
+ return;
170
+ }
171
+ const model = this.parent.model;
172
+ const connection = model.kernelConnection;
173
+ if (connection) {
174
+ this.connectorToDispose.push(connection.statusChanged((status) => {
175
+ if (status === 'dead') {
176
+ this.kernelInited = false;
177
+ this.list = undefined;
178
+ this.connectorToDispose.dispose();
179
+ }
180
+ }));
181
+ this.connectorToDispose.push(connection.statusChanged((status) => {
182
+ if (status === 'restarting') {
183
+ this.kernelInited = false;
184
+ this.list = undefined;
185
+ this.setupConnector(model);
186
+ }
187
+ }));
188
+ }
189
+ this.setupConnector(model);
190
+ }
191
+ async setupConnector(model) {
192
+ if (!this.kernelInited) {
193
+ model.kcReady.then(async (connection) => {
194
+ const lang = (await connection.info).language_info.name;
195
+ const languageModel = await Languages.getScript(lang);
196
+ this.languageModel = languageModel;
197
+ this.initOnKernel().then(() => {
198
+ this.kernelInited = true;
199
+ this.connectorToDispose.push(connection.iopubMessage(this.queryCall));
200
+ this.performInspection();
201
+ });
202
+ });
203
+ }
204
+ else {
205
+ if (model.kernelConnection) {
206
+ this.connectorToDispose.push(model.kernelConnection.iopubMessage(this.queryCall));
207
+ this.performInspection();
208
+ }
209
+ }
210
+ }
211
+ /**
212
+ * Initializes the kernel by running the set up script located at _initScriptPath.
213
+ */
214
+ initOnKernel() {
215
+ const content = {
216
+ code: this.languageModel.initScript,
217
+ stop_on_error: false,
218
+ silent: true,
219
+ };
220
+ return this.fetch(content, () => {
221
+ // no op
222
+ });
223
+ }
224
+ };
225
+ __decorate([
226
+ inject(CommandRegistry),
227
+ __metadata("design:type", Object)
228
+ ], LibroVariablePanelView.prototype, "commands", void 0);
229
+ __decorate([
230
+ prop(),
231
+ __metadata("design:type", Array)
232
+ ], LibroVariablePanelView.prototype, "list", void 0);
233
+ __decorate([
234
+ prop(),
235
+ __metadata("design:type", String)
236
+ ], LibroVariablePanelView.prototype, "searchValue", void 0);
237
+ LibroVariablePanelView = __decorate([
238
+ transient(),
239
+ view('libro-variable-panel-view')
240
+ ], LibroVariablePanelView);
241
+ export { LibroVariablePanelView };
242
+ //# sourceMappingURL=variable-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable-view.js","sourceRoot":"","sources":["../../../src/browser/variables/variable-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAa,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAClH,OAAO,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,SAAS,EACT,SAAS,EACT,IAAI,GACL,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK/C,MAAM,sBAAsB,GAAG,UAAU,CAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACvE,MAAM,QAAQ,GAAG,SAAS,CAAyB,YAAY,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,CACL,6BAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,wBAAwB;QAC/C,6BAAK,SAAS,EAAC,uBAAuB;YACpC,oBAAC,KAAK,IACJ,SAAS,EAAC,6BAA6B,EACvC,WAAW,EAAE,QAAQ,CAAC,4CAA4C,CAAC,EACnE,MAAM,EAAE,oBAAC,cAAc,OAAG,EAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAChD,OAAO,EAAE,GAAG,EAAE;oBACZ,eAAe,CAAC,kBAAkB,EAAE,CAAC;gBACvC,CAAC,EACD,MAAM,EAAE,GAAG,EAAE;oBACX,eAAe,CAAC,iBAAiB,EAAE,CAAC;gBACtC,CAAC,GACD;YACF,6BACE,GAAG,EAAE,GACH,YAAY,CAAC,eAAe,EAAE,CAAC,IAAI,KAAK,MAAM;oBAC5C,CAAC,CAAC,gGAAgG;oBAClG,CAAC,CAAC,gGACN,EAAE,EACF,OAAO,EAAE,QAAQ,CAAC,OAAO,EACzB,SAAS,EAAC,6BAA6B,GAClC,CACH;QACN,oBAAC,IAAI,IACH,SAAS,EAAC,qBAAqB,EAC/B,UAAU,EAAC,YAAY,EACvB,UAAU,EAAE,QAAQ,CAAC,YAAY,EACjC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnB,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,oBAAC,OAAO,IAAC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAG,IAAI,CAAC,UAAU,CAAW,CAAC;gBACxF,OAAO,CACL,oBAAC,IAAI,CAAC,IAAI;oBACR,oBAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IACb,KAAK,EACH,6BAAK,SAAS,EAAC,sBAAsB;4BACnC,8BAAM,SAAS,EAAC,qBAAqB;gCAClC,IAAI,CAAC,OAAO;gCACb,oBAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,EAAC,QAAQ,EAAE,KAAK,IACrD,IAAI,CAAC,OAAO,CACT,CACD;4BACP,oBAAC,OAAO,IAAC,SAAS,EAAC,KAAK,EAAC,KAAK,EAAE,QAAQ,CAAC,qCAAqC,CAAC;gCAC7E,oBAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAC,sBAAsB,GAAG,CACvF,CACN,EAER,WAAW,EAAE,oBAAC,YAAY,OAAG,GAC7B,CACQ,CACb,CAAC;YACJ,CAAC,GACD,CACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAcI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,QAAQ;IAA7C;;QAEK,uBAAkB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAMhD,iBAAY,GAAG,KAAK,CAAC;QAC/B,SAAI,GAAG,sBAAsB,CAAC;QAiB9B,iBAAY,GAAG,KAAK,EAAE,QAAmB,EAAE,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC3B,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB;gBACE,IAAI,EAAE;oBACJ,SAAS,EAAE,MAAM;oBACjB,MAAM,EAAE,QAAQ,CAAC,OAAO;oBACxB,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,EAAE;iBACZ;aACF,EACD,WAAW,CACZ,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;;gBAChC,MAAA,IAAI,CAAC,QAAQ,0CAAE,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAqDF,UAAK,GAAG,GAAG,EAAE;YACX,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvD,CAAC,CAAC;QAEF,WAAM,GAAG,CAAC,CAAS,EAAE,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF;;WAEG;QACO,cAAS,GAAG,CAAC,GAA2B,EAAQ,EAAE;;YAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,IAAI,GAAI,GAAsC,CAAC,OAAO,CAAC,IAAI,CAAC;oBAClE,IACE,CAAC,CAAC,IAAI,MAAK,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY,CAAA,CAAC;wBAC5C,CAAC,CAAC,IAAI,MAAK,MAAA,IAAI,CAAC,aAAa,0CAAE,kBAAkB,CAAA,CAAC;wBAClD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,kBAAkB,KAAI,EAAE,CAAC,EAC9D,CAAC;wBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD;oBACE,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEK,YAAO,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC/B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,yCAAyC,EAAE,6BAA6B,CAAC,CAAC,CAAC;YACtG,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,uCAAuC,EAAE,yBAAyB,CAAC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC,CAAC;QACF;;WAEG;QACI,sBAAiB,GAAG,GAA4C,EAAE;YACvE,MAAM,OAAO,GAAgD;gBAC3D,IAAI,EAAE,IAAI,CAAC,aAAc,CAAC,YAAY;gBACtC,aAAa,EAAE,KAAK;gBACpB,aAAa,EAAE,KAAK;aACrB,CAAC;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvD,CAAC,CAAC;QAEQ,wBAAmB,GAAG,CAAC,QAAqC,EAAE,EAAE;YACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,MAAM,OAAO,GAAG,QAA2C,CAAC;oBAC5D,IAAI,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAW,CAAC;oBACnE,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC/D,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC/B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC9D,CAAC;oBAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;oBAClD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;oBACnB,MAAM;gBACR,CAAC;gBACD,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,cAAc,GAAG,QAA2C,CAAC;oBACnE,IAAI,cAAc,GAAW,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAW,CAAC;oBACjF,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC7E,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC7C,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC5E,CAAC;oBAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;oBAChE,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;oBAC1B,MAAM;gBACR,CAAC;gBACD;oBACE,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAiBQ,UAAK,GAAG,KAAK,EACrB,OAAoD,EACpD,UAAqD,EACrD,EAAE;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAO,CAAC,KAA2B,CAAC;YACvD,MAAM,KAAK,CAAC,OAAO,CAAC;YACpB,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAiB,CAAC;YAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;gBACvB,UAAU,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,OAAO,MAAM,CAAC,IAA+C,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC;IAzMC,IAAI,YAAY;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAyBD,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,iBAAiB,CAAC,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC1C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAC1B,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE;gBAClC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;oBACtB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YACF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAC1B,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE;gBAClC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;oBAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;oBACtB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,KAAwB;QACrD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACtC,MAAM,IAAI,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;gBACnC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACtE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAqFD;;OAEG;IACO,YAAY;QACpB,MAAM,OAAO,GAAgD;YAC3D,IAAI,EAAE,IAAI,CAAC,aAAc,CAAC,UAAU;YACpC,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9B,QAAQ;QACV,CAAC,CAAC,CAAC;IACL,CAAC;CAeF,CAAA;AApN0B;IAAxB,MAAM,CAAC,eAAe,CAAC;;wDAAuC;AAG/D;IADC,IAAI,EAAE;;oDACY;AAEnB;IADC,IAAI,EAAE;;2DACc;AANV,sBAAsB;IAFlC,SAAS,EAAE;IACX,IAAI,CAAC,2BAA2B,CAAC;GACrB,sBAAsB,CAqNlC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-notebook",
3
- "version": "3.5.1-next-1731935606.0",
3
+ "version": "3.5.1-next-1732847732.0",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -23,19 +23,19 @@
23
23
  "@difizen/libro-lsp": "0.2.45",
24
24
  "@difizen/libro-toc": "0.2.45",
25
25
  "@difizen/mana-app": "^0.1.27",
26
- "@opensumi/ide-components": "3.5.1-next-1731935606.0",
27
- "@opensumi/ide-core-browser": "3.5.1-next-1731935606.0",
28
- "@opensumi/ide-core-common": "3.5.1-next-1731935606.0",
29
- "@opensumi/ide-editor": "3.5.1-next-1731935606.0",
30
- "@opensumi/ide-explorer": "3.5.1-next-1731935606.0",
31
- "@opensumi/ide-file-service": "3.5.1-next-1731935606.0",
32
- "@opensumi/ide-main-layout": "3.5.1-next-1731935606.0",
33
- "@opensumi/ide-monaco": "3.5.1-next-1731935606.0",
34
- "@opensumi/ide-outline": "3.5.1-next-1731935606.0",
35
- "@opensumi/ide-overlay": "3.5.1-next-1731935606.0",
36
- "@opensumi/ide-theme": "3.5.1-next-1731935606.0",
26
+ "@opensumi/ide-components": "3.5.1-next-1732847732.0",
27
+ "@opensumi/ide-core-browser": "3.5.1-next-1732847732.0",
28
+ "@opensumi/ide-core-common": "3.5.1-next-1732847732.0",
29
+ "@opensumi/ide-editor": "3.5.1-next-1732847732.0",
30
+ "@opensumi/ide-explorer": "3.5.1-next-1732847732.0",
31
+ "@opensumi/ide-file-service": "3.5.1-next-1732847732.0",
32
+ "@opensumi/ide-main-layout": "3.5.1-next-1732847732.0",
33
+ "@opensumi/ide-monaco": "3.5.1-next-1732847732.0",
34
+ "@opensumi/ide-outline": "3.5.1-next-1732847732.0",
35
+ "@opensumi/ide-overlay": "3.5.1-next-1732847732.0",
36
+ "@opensumi/ide-theme": "3.5.1-next-1732847732.0",
37
37
  "@opensumi/monaco-editor-core": "0.47.0-patch.15",
38
38
  "antd": "^5.21.4"
39
39
  },
40
- "gitHead": "5849361f31f3affe436c41a791112e3c7352c98c"
40
+ "gitHead": "fc4ad0d13ee8e3b0553fff08c7831719e88003b2"
41
41
  }
@@ -2,7 +2,6 @@ import { Injectable, Provider } from '@opensumi/di';
2
2
  import { BrowserModule } from '@opensumi/ide-core-browser';
3
3
  import { INotebookService } from '@opensumi/ide-editor';
4
4
 
5
- import { KernelPanelContribution } from './kernel-panel/kernel.panel.contribution';
6
5
  import { LibroKeybindContribution } from './libro-keybind-contribution';
7
6
  import { LibroCommandContribution } from './libro.command';
8
7
  import { LibroContribution } from './libro.contribution';
@@ -33,6 +32,5 @@ export class NotebookModule extends BrowserModule {
33
32
  useClass: NotebookServiceOverride,
34
33
  override: true,
35
34
  },
36
- KernelPanelContribution,
37
35
  ];
38
36
  }
@@ -1,4 +1,3 @@
1
1
  export * from './kernel-panel-view';
2
2
  export * from './kernel.panel.color.tokens';
3
- export * from './kernel.panel.contribution';
4
3
  export * from './kernel.panel.protocol';
@@ -13,7 +13,7 @@ import { ContentLoaderType, OpensumiInjector } from '../mana';
13
13
  export class LibroOpensumiContentContribution implements ContentContribution {
14
14
  @inject(OpensumiInjector) injector: Injector;
15
15
 
16
- canHandle = (options) => options.loadType === ContentLoaderType ? 100 : 1;
16
+ canHandle = (options) => (options.loadType === ContentLoaderType ? 100 : 1);
17
17
  async loadContent(options: NotebookOption, model: LibroJupyterModel) {
18
18
  const fileServiceClient: IFileServiceClient = this.injector.get(IFileServiceClient);
19
19
  const messageService = this.injector.get(IMessageService);
@@ -33,7 +33,8 @@ export class LibroOpensumiContentContribution implements ContentContribution {
33
33
  }
34
34
  const uri = new URI(options.resource.toString());
35
35
  const currentFileContents: IContentsModel = {
36
- name: uri.path.name,
36
+ name: uri.path.base,
37
+ // TODO: should be relative path to notebook root, notebook root may not be same as ide root, and jupyter provide no api to get root dir
37
38
  path: uri.path.toString(),
38
39
  last_modified: stat?.lastModification.toString() || new Date().toJSON(),
39
40
  created: stat?.createTime?.toString() || new Date().toJSON(),
@@ -1,24 +1,26 @@
1
- import { LibroSearchToggleCommand, LibroService, LibroView, NotebookCommands } from '@difizen/libro-jupyter/noeditor';
1
+ import { LibroSearchToggleCommand, LibroService, NotebookCommands } from '@difizen/libro-jupyter/noeditor';
2
2
  import { Container, CommandRegistry as LibroCommandRegistry } from '@difizen/mana-app';
3
3
 
4
4
  import { Autowired } from '@opensumi/di';
5
5
  import {
6
6
  ClientAppContribution,
7
+ CommandContribution,
7
8
  CommandRegistry,
8
9
  Domain,
9
10
  IContextKeyService,
11
+ KeybindingContribution,
10
12
  KeybindingRegistry,
11
13
  KeybindingScope,
14
+ MaybePromise,
12
15
  } from '@opensumi/ide-core-browser';
13
16
  import { WorkbenchEditorService } from '@opensumi/ide-editor';
14
17
 
15
18
  import { LIBRO_COMPONENTS_SCHEME_ID } from './libro.protocol';
16
19
  import { ManaContainer } from './mana';
17
20
 
18
- @Domain(ClientAppContribution)
19
- export class LibroKeybindContribution implements ClientAppContribution {
21
+ @Domain(ClientAppContribution, KeybindingContribution, CommandContribution)
22
+ export class LibroKeybindContribution implements ClientAppContribution, KeybindingContribution, CommandContribution {
20
23
  @Autowired(IContextKeyService) contextKeyService: IContextKeyService;
21
- @Autowired(KeybindingRegistry) keybindingRegistry: KeybindingRegistry;
22
24
  @Autowired(WorkbenchEditorService)
23
25
  workbenchEditorService: WorkbenchEditorService;
24
26
  @Autowired(CommandRegistry)
@@ -26,17 +28,12 @@ export class LibroKeybindContribution implements ClientAppContribution {
26
28
  @Autowired(ManaContainer)
27
29
  private readonly manaContainer: Container;
28
30
 
29
- onStart() {
31
+ initialize(): MaybePromise<void> {
30
32
  this.registerContextKey();
31
- this.registerCommand();
32
- this.registerKeybind();
33
33
  }
34
34
 
35
35
  registerContextKey() {
36
- const notebookFocusContext = this.contextKeyService.createKey<boolean>(
37
- 'libroNotebookFocused',
38
- this.hasActiveNotebook(),
39
- );
36
+ const notebookFocusContext = this.contextKeyService.createKey<boolean>('libroNotebookFocused', false);
40
37
 
41
38
  this.workbenchEditorService.onActiveResourceChange((e) => {
42
39
  if (e?.uri?.path.ext === `.${LIBRO_COMPONENTS_SCHEME_ID}`) {
@@ -55,45 +52,41 @@ export class LibroKeybindContribution implements ClientAppContribution {
55
52
  return this.manaContainer.get(LibroCommandRegistry);
56
53
  }
57
54
 
58
- hasActiveNotebook() {
59
- return this.libroService.active instanceof LibroView;
60
- }
61
-
62
- registerCommand() {
63
- this.commandRegistry.registerCommand(NotebookCommands['EnterCommandMode'], {
55
+ registerCommands(commands: CommandRegistry) {
56
+ commands.registerCommand(NotebookCommands['EnterCommandMode'], {
64
57
  execute: () => {
65
58
  this.libroCommandRegistry.executeCommand(NotebookCommands['EnterCommandMode'].id);
66
59
  },
67
60
  });
68
- this.commandRegistry.registerCommand(NotebookCommands['RunCell'], {
61
+ commands.registerCommand(NotebookCommands['RunCell'], {
69
62
  execute: () => {
70
63
  this.libroCommandRegistry.executeCommand(NotebookCommands['RunCell'].id);
71
64
  },
72
65
  });
73
- this.commandRegistry.registerCommand(NotebookCommands['RunCellAndSelectNext'], {
66
+ commands.registerCommand(NotebookCommands['RunCellAndSelectNext'], {
74
67
  execute: () => {
75
68
  this.libroCommandRegistry.executeCommand(NotebookCommands['RunCellAndSelectNext'].id);
76
69
  },
77
70
  });
78
- this.commandRegistry.registerCommand(NotebookCommands['RunCellAndInsertBelow'], {
71
+ commands.registerCommand(NotebookCommands['RunCellAndInsertBelow'], {
79
72
  execute: () => {
80
73
  this.libroCommandRegistry.executeCommand(NotebookCommands['RunCellAndInsertBelow'].id);
81
74
  },
82
75
  });
83
- this.commandRegistry.registerCommand(NotebookCommands['SplitCellAntCursor'], {
76
+ commands.registerCommand(NotebookCommands['SplitCellAntCursor'], {
84
77
  execute: () => {
85
78
  this.libroCommandRegistry.executeCommand(NotebookCommands['SplitCellAntCursor'].id);
86
79
  },
87
80
  });
88
- this.commandRegistry.registerCommand(LibroSearchToggleCommand.ShowLibroSearch, {
81
+ commands.registerCommand(LibroSearchToggleCommand.ShowLibroSearch, {
89
82
  execute: () => {
90
83
  this.libroCommandRegistry.executeCommand(LibroSearchToggleCommand.ShowLibroSearch.id);
91
84
  },
92
85
  });
93
86
  }
94
87
 
95
- registerKeybind() {
96
- this.keybindingRegistry.registerKeybindings(
88
+ registerKeybindings(keybindings: KeybindingRegistry): void {
89
+ keybindings.registerKeybindings(
97
90
  [
98
91
  {
99
92
  keybinding: 'f1',
@@ -15,6 +15,8 @@ import {
15
15
  ClientAppContribution,
16
16
  CommandContribution,
17
17
  type CommandRegistry,
18
+ ComponentContribution,
19
+ ComponentRegistry,
18
20
  Disposable,
19
21
  Domain,
20
22
  IClientApp,
@@ -22,6 +24,7 @@ import {
22
24
  OpenerContribution,
23
25
  Schemes,
24
26
  URI,
27
+ localize,
25
28
  } from '@opensumi/ide-core-browser';
26
29
  import { message } from '@opensumi/ide-core-browser/lib/components';
27
30
  import {
@@ -36,7 +39,7 @@ import { IEditorDocumentModelContentRegistry } from '@opensumi/ide-editor/lib/br
36
39
  import { IconService } from '@opensumi/ide-theme/lib/browser';
37
40
  import { IThemeService, IconType } from '@opensumi/ide-theme/lib/common';
38
41
 
39
- import { initKernelPanelColorToken } from './kernel-panel';
42
+ import { KERNEL_PANEL_ID, KernelPanel, initKernelPanelColorToken } from './kernel-panel';
40
43
  import { LibroOpensumiModule } from './libro';
41
44
  import { LibroOpener } from './libro-opener';
42
45
  import { initLibroColorToken } from './libro.color.tokens';
@@ -46,6 +49,9 @@ import { ManaContainer, initLibroOpensumi, manaContainer } from './mana/index';
46
49
  import { NotebookDocumentContentProvider } from './notebook-document-content-provider';
47
50
  import { NotebookServiceOverride } from './notebook.service';
48
51
  import { initTocPanelColorToken } from './toc';
52
+ import { LibroVariableModule } from './variables/libro-variable-module';
53
+ import { VariablePanel } from './variables/variable-panel';
54
+ import { VARIABLE_ID } from './variables/variable-protocol';
49
55
 
50
56
  const LIBRO_COMPONENTS_VIEW_COMMAND = {
51
57
  id: 'opensumi-libro',
@@ -56,7 +62,7 @@ const LayoutWrapper: React.FC<React.PropsWithChildren> = ({ children }) => {
56
62
  return (
57
63
  <ManaComponents.Application
58
64
  context={{ container: manaContainer }}
59
- modules={[ManaAppPreset, LibroJupyterNoEditorModule, LibroTOCModule, LibroOpensumiModule]}
65
+ modules={[ManaAppPreset, LibroJupyterNoEditorModule, LibroTOCModule, LibroOpensumiModule, LibroVariableModule]}
60
66
  renderChildren
61
67
  onReady={() => setIsReady(true)}
62
68
  >
@@ -65,12 +71,15 @@ const LayoutWrapper: React.FC<React.PropsWithChildren> = ({ children }) => {
65
71
  );
66
72
  };
67
73
 
74
+ export const NOTE_BOOK_PANEL_ID = 'notebook-panel';
75
+
68
76
  @Domain(
69
77
  ClientAppContribution,
70
78
  BrowserEditorContribution,
71
79
  ClientAppContextContribution,
72
80
  CommandContribution,
73
81
  OpenerContribution,
82
+ ComponentContribution,
74
83
  )
75
84
  export class LibroContribution
76
85
  extends Disposable
@@ -79,7 +88,8 @@ export class LibroContribution
79
88
  BrowserEditorContribution,
80
89
  ClientAppContextContribution,
81
90
  CommandContribution,
82
- OpenerContribution
91
+ OpenerContribution,
92
+ ComponentContribution
83
93
  {
84
94
  @Autowired(ManaContainer)
85
95
  private readonly manaContainer: Container;
@@ -115,6 +125,40 @@ export class LibroContribution
115
125
  initLibroOpensumi(app.injector, manaContainer);
116
126
  }
117
127
 
128
+ registerComponent(registry: ComponentRegistry) {
129
+ const iconClass = this.iconService.fromIcon(
130
+ '',
131
+ {
132
+ dark: 'https://mdn.alipayobjects.com/huamei_rm3rgy/afts/img/A*tFyaRbqux_4AAAAAAAAAAAAADr2GAQ/original',
133
+ light: 'https://mdn.alipayobjects.com/huamei_rm3rgy/afts/img/A*ebL7T4dWefUAAAAAAAAAAAAADr2GAQ/original',
134
+ },
135
+ IconType.Background,
136
+ );
137
+ registry.register(
138
+ '@opensumi/ide-notebook',
139
+ [
140
+ {
141
+ id: KERNEL_PANEL_ID,
142
+ name: localize('notebook.kernel.panel.title'),
143
+ component: KernelPanel,
144
+ priority: 0,
145
+ },
146
+ {
147
+ id: VARIABLE_ID,
148
+ name: localize('notebook.variable.panel.title'),
149
+ weight: 2,
150
+ priority: 1,
151
+ component: VariablePanel,
152
+ },
153
+ ],
154
+ {
155
+ activateKeyBinding: 'ctrlcmd+shift+k',
156
+ containerId: NOTE_BOOK_PANEL_ID,
157
+ iconClass,
158
+ },
159
+ );
160
+ }
161
+
118
162
  registerClientAppContext(Layout: React.FC, injector: Injector): React.FC {
119
163
  initLibroColorToken();
120
164
  initKernelPanelColorToken();
@@ -0,0 +1,102 @@
1
+ .libro-variable-content {
2
+ height: calc(100% - 40px);
3
+
4
+ .libro-variable-list {
5
+ height: 100%;
6
+ overflow-y: auto;
7
+
8
+ .ant-list-item {
9
+ padding: 4px 12px 0;
10
+ border-bottom: none;
11
+
12
+ &:hover {
13
+ border-radius: 6px;
14
+ background-color: var(--mana-libro-variable-background-hover-color);
15
+ }
16
+
17
+ .ant-list-item-meta {
18
+ border-bottom: 1px solid var(--mana-libro-variable-border-color);
19
+ }
20
+
21
+ .ant-list-item-meta-title {
22
+ color: var(--mana-libro-variable-title-color);
23
+
24
+ .libro-variable-title {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: space-between;
28
+
29
+ .libro-variable-type-tag {
30
+ font-size: 10px;
31
+ margin-left: 8px;
32
+ color: var(--mana-libro-variable-tag-text-color);
33
+ background-color: var(--mana-libro-variable-tag-background-color);
34
+ border-radius: 4px;
35
+ }
36
+
37
+ .libro-variable-extra {
38
+ color: var(--mana-libro-variable-icon-color);
39
+ transform: rotate(90deg);
40
+
41
+ :hover {
42
+ color: #1890ff;
43
+ cursor: pointer;
44
+ }
45
+ }
46
+ }
47
+
48
+ .libro-variable-name {
49
+ color: var(--mana-libro-variable-name-color);
50
+ }
51
+ }
52
+
53
+ .ant-list-item-meta-description {
54
+ overflow: hidden;
55
+ color: var(--mana-libro-variable-description-color);
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+ }
60
+ }
61
+
62
+ .libro-variable-search {
63
+ display: flex;
64
+ align-items: center;
65
+ padding: 4px 12px 8px;
66
+
67
+ &-input {
68
+ background: var(--mana-libro-variable-search-background-color);
69
+ border: none;
70
+ border-radius: 6px;
71
+ height: 28px;
72
+
73
+ input {
74
+ color: var(--mana-libro-variable-title-color);
75
+ background: transparent;
76
+ }
77
+
78
+ .ant-input-prefix {
79
+ color: var(--mana-libro-variable-icon-color);
80
+ }
81
+ }
82
+
83
+ &-extra {
84
+ margin-left: 8px;
85
+ color: var(--mana-libro-variable-icon-color);
86
+
87
+ :hover {
88
+ color: #1890ff;
89
+ cursor: pointer;
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ .libro-variable-empty {
96
+ display: flex;
97
+ flex-direction: column;
98
+ align-items: center;
99
+ justify-content: center;
100
+ height: 100%;
101
+ margin: unset !important;
102
+ }