@opensumi/ide-editor 3.3.1-next-1725432779.0 → 3.3.1-next-1725433243.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 (43) hide show
  1. package/lib/browser/editor-collection.service.d.ts +1 -1
  2. package/lib/browser/editor-collection.service.d.ts.map +1 -1
  3. package/lib/browser/editor-collection.service.js +2 -2
  4. package/lib/browser/editor-collection.service.js.map +1 -1
  5. package/lib/browser/editor.module.less +1 -0
  6. package/lib/browser/editor.view.d.ts +4 -2
  7. package/lib/browser/editor.view.d.ts.map +1 -1
  8. package/lib/browser/editor.view.js +6 -16
  9. package/lib/browser/editor.view.js.map +1 -1
  10. package/lib/browser/index.d.ts.map +1 -1
  11. package/lib/browser/index.js +5 -0
  12. package/lib/browser/index.js.map +1 -1
  13. package/lib/browser/notebook.service.d.ts +20 -0
  14. package/lib/browser/notebook.service.d.ts.map +1 -0
  15. package/lib/browser/notebook.service.js +24 -0
  16. package/lib/browser/notebook.service.js.map +1 -0
  17. package/lib/browser/workbench-editor.service.d.ts +6 -1
  18. package/lib/browser/workbench-editor.service.d.ts.map +1 -1
  19. package/lib/browser/workbench-editor.service.js +118 -71
  20. package/lib/browser/workbench-editor.service.js.map +1 -1
  21. package/lib/common/editor.d.ts +1 -1
  22. package/lib/common/editor.d.ts.map +1 -1
  23. package/lib/common/index.d.ts +4 -3
  24. package/lib/common/index.d.ts.map +1 -1
  25. package/lib/common/index.js +4 -3
  26. package/lib/common/index.js.map +1 -1
  27. package/lib/common/language.d.ts +1 -0
  28. package/lib/common/language.d.ts.map +1 -1
  29. package/lib/common/notebook.d.ts +169 -0
  30. package/lib/common/notebook.d.ts.map +1 -0
  31. package/lib/common/notebook.js +26 -0
  32. package/lib/common/notebook.js.map +1 -0
  33. package/package.json +14 -14
  34. package/src/browser/editor-collection.service.ts +2 -2
  35. package/src/browser/editor.module.less +1 -0
  36. package/src/browser/editor.view.tsx +174 -183
  37. package/src/browser/index.ts +6 -0
  38. package/src/browser/notebook.service.ts +19 -0
  39. package/src/browser/workbench-editor.service.ts +105 -70
  40. package/src/common/editor.ts +1 -1
  41. package/src/common/index.ts +4 -3
  42. package/src/common/language.ts +1 -0
  43. package/src/common/notebook.ts +196 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/common/notebook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.notebookCellScheme = exports.INotebookService = exports.CellKind = exports.NotebookCellsChangeType = void 0;
4
+ var NotebookCellsChangeType;
5
+ (function (NotebookCellsChangeType) {
6
+ NotebookCellsChangeType[NotebookCellsChangeType["ModelChange"] = 1] = "ModelChange";
7
+ NotebookCellsChangeType[NotebookCellsChangeType["Move"] = 2] = "Move";
8
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeCellLanguage"] = 5] = "ChangeCellLanguage";
9
+ NotebookCellsChangeType[NotebookCellsChangeType["Initialize"] = 6] = "Initialize";
10
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeCellMetadata"] = 7] = "ChangeCellMetadata";
11
+ NotebookCellsChangeType[NotebookCellsChangeType["Output"] = 8] = "Output";
12
+ NotebookCellsChangeType[NotebookCellsChangeType["OutputItem"] = 9] = "OutputItem";
13
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeCellContent"] = 10] = "ChangeCellContent";
14
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeDocumentMetadata"] = 11] = "ChangeDocumentMetadata";
15
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeCellInternalMetadata"] = 12] = "ChangeCellInternalMetadata";
16
+ NotebookCellsChangeType[NotebookCellsChangeType["ChangeCellMime"] = 13] = "ChangeCellMime";
17
+ NotebookCellsChangeType[NotebookCellsChangeType["Unknown"] = 100] = "Unknown";
18
+ })(NotebookCellsChangeType = exports.NotebookCellsChangeType || (exports.NotebookCellsChangeType = {}));
19
+ var CellKind;
20
+ (function (CellKind) {
21
+ CellKind[CellKind["Markup"] = 1] = "Markup";
22
+ CellKind[CellKind["Code"] = 2] = "Code";
23
+ })(CellKind = exports.CellKind || (exports.CellKind = {}));
24
+ exports.INotebookService = Symbol('INotebookService');
25
+ exports.notebookCellScheme = 'vscode-notebook-cell';
26
+ //# sourceMappingURL=notebook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/common/notebook.ts"],"names":[],"mappings":";;;AAEA,IAAY,uBAaX;AAbD,WAAY,uBAAuB;IACjC,mFAAe,CAAA;IACf,qEAAQ,CAAA;IACR,iGAAsB,CAAA;IACtB,iFAAc,CAAA;IACd,iGAAsB,CAAA;IACtB,yEAAU,CAAA;IACV,iFAAc,CAAA;IACd,gGAAsB,CAAA;IACtB,0GAA2B,CAAA;IAC3B,kHAA+B,CAAA;IAC/B,0FAAmB,CAAA;IACnB,6EAAa,CAAA;AACf,CAAC,EAbW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAalC;AAmBD,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,2CAAU,CAAA;IACV,uCAAQ,CAAA;AACV,CAAC,EAHW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAGnB;AAiJY,QAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAa9C,QAAA,kBAAkB,GAAG,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-editor",
3
- "version": "3.3.1-next-1725432779.0",
3
+ "version": "3.3.1-next-1725433243.0",
4
4
  "files": [
5
5
  "lib",
6
6
  "src"
@@ -17,21 +17,21 @@
17
17
  "url": "git@github.com:opensumi/core.git"
18
18
  },
19
19
  "dependencies": {
20
- "@opensumi/ide-core-common": "3.3.1-next-1725432779.0",
21
- "@opensumi/ide-core-node": "3.3.1-next-1725432779.0",
22
- "@opensumi/ide-file-service": "3.3.1-next-1725432779.0",
23
- "@opensumi/ide-monaco": "3.3.1-next-1725432779.0",
24
- "@opensumi/ide-utils": "3.3.1-next-1725432779.0",
20
+ "@opensumi/ide-core-common": "3.3.1-next-1725433243.0",
21
+ "@opensumi/ide-core-node": "3.3.1-next-1725433243.0",
22
+ "@opensumi/ide-file-service": "3.3.1-next-1725433243.0",
23
+ "@opensumi/ide-monaco": "3.3.1-next-1725433243.0",
24
+ "@opensumi/ide-utils": "3.3.1-next-1725433243.0",
25
25
  "vscode-oniguruma": "1.5.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@opensumi/ide-components": "3.3.1-next-1725432779.0",
29
- "@opensumi/ide-core-browser": "3.3.1-next-1725432779.0",
30
- "@opensumi/ide-dev-tool": "3.3.1-next-1725432779.0",
31
- "@opensumi/ide-overlay": "3.3.1-next-1725432779.0",
32
- "@opensumi/ide-quick-open": "3.3.1-next-1725432779.0",
33
- "@opensumi/ide-theme": "3.3.1-next-1725432779.0",
34
- "@opensumi/ide-workspace": "3.3.1-next-1725432779.0"
28
+ "@opensumi/ide-components": "3.3.1-next-1725433243.0",
29
+ "@opensumi/ide-core-browser": "3.3.1-next-1725433243.0",
30
+ "@opensumi/ide-dev-tool": "3.3.1-next-1725433243.0",
31
+ "@opensumi/ide-overlay": "3.3.1-next-1725433243.0",
32
+ "@opensumi/ide-quick-open": "3.3.1-next-1725433243.0",
33
+ "@opensumi/ide-theme": "3.3.1-next-1725433243.0",
34
+ "@opensumi/ide-workspace": "3.3.1-next-1725433243.0"
35
35
  },
36
- "gitHead": "09d64abea23087b5bcbcb2a1853143c6c6539b05"
36
+ "gitHead": "76cbd0614c78862e45f0a908727ca9f9561a6482"
37
37
  }
@@ -799,8 +799,8 @@ export class BrowserDiffEditor extends WithEventBus implements IDiffEditor {
799
799
  ];
800
800
  }
801
801
 
802
- layout(dimension?: monaco.IDimension, postponeRendering?: boolean) {
803
- return this.monacoDiffEditor.layout(dimension, postponeRendering);
802
+ layout(): void {
803
+ return this.monacoDiffEditor.layout();
804
804
  }
805
805
 
806
806
  focus(): void {
@@ -19,6 +19,7 @@
19
19
  }
20
20
 
21
21
  .kt_editor_components {
22
+ height: 0;
22
23
  flex-grow: 1;
23
24
  }
24
25
 
@@ -1,7 +1,8 @@
1
1
  import cls from 'classnames';
2
2
  import { observer } from 'mobx-react-lite';
3
- import React, { forwardRef } from 'react';
3
+ import React from 'react';
4
4
  import ReactDOM from 'react-dom/client';
5
+ import ReactIs from 'react-is';
5
6
 
6
7
  import { Scrollbars } from '@opensumi/ide-components';
7
8
  import {
@@ -281,6 +282,7 @@ export const EditorGroupView = observer(({ group }: { group: EditorGroup }) => {
281
282
 
282
283
  return (
283
284
  <div
285
+ ref={groupWrapperRef as any}
284
286
  className={styles_kt_editor_group}
285
287
  tabIndex={1}
286
288
  onFocus={(e) => {
@@ -292,7 +294,7 @@ export const EditorGroupView = observer(({ group }: { group: EditorGroup }) => {
292
294
  <Tabs group={group} />
293
295
  </div>
294
296
  )}
295
- <EditorGroupBody ref={groupWrapperRef as any} group={group} />
297
+ <EditorGroupBody group={group} />
296
298
  {isEmpty && (
297
299
  <div
298
300
  className={styles.kt_editor_background}
@@ -307,201 +309,190 @@ export const EditorGroupView = observer(({ group }: { group: EditorGroup }) => {
307
309
  );
308
310
  });
309
311
 
310
- export const EditorGroupBody = observer(
311
- forwardRef(({ group }: { group: EditorGroup }, ref) => {
312
- const [context, setContext] = React.useState<IEditorContext>(defaultEditorContext);
313
-
314
- const editorBodyRef = React.useRef<HTMLDivElement | null>(null);
315
- const editorService = useInjectable(WorkbenchEditorService) as WorkbenchEditorServiceImpl;
316
- const eventBus = useInjectable(IEventBus) as IEventBus;
317
- const styles_kt_editor_component = useDesignStyles(styles.kt_editor_component, 'kt_editor_component');
318
- const components: React.ReactNode[] = [];
319
- const codeEditorRef = React.useRef<HTMLDivElement>(null);
320
- const diffEditorRef = React.useRef<HTMLDivElement>(null);
321
- const mergeEditorRef = React.useRef<HTMLDivElement>(null);
322
- const [, updateState] = React.useState<any>();
323
- const forceUpdate = React.useCallback(() => updateState({}), []);
324
-
325
- React.useEffect(() => {
326
- const disposables = new DisposableStore();
327
-
328
- disposables.add(
329
- group.onDidEditorGroupBodyChanged(() => {
330
- forceUpdate();
331
- }),
332
- );
333
-
334
- if (codeEditorRef.current) {
335
- if (cachedEditor[group.name]) {
336
- cachedEditor[group.name].remove();
337
- codeEditorRef.current.appendChild(cachedEditor[group.name]);
338
- } else {
339
- const container = document.createElement('div');
340
- codeEditorRef.current.appendChild(container);
341
- cachedEditor[group.name] = container;
342
- group.createEditor(container);
343
- const minimapWith = group.codeEditor.monacoEditor.getOption(monaco.editor.EditorOption.layoutInfo).minimap
344
- .minimapWidth;
345
- setContext({ minimapWidth: minimapWith });
346
-
347
- disposables.add(
348
- group.codeEditor.monacoEditor.onDidChangeConfiguration((e) => {
349
- if (e.hasChanged(monaco.editor.EditorOption.layoutInfo)) {
350
- setContext({
351
- minimapWidth: group.codeEditor.monacoEditor.getOption(monaco.editor.EditorOption.layoutInfo).minimap
352
- .minimapWidth,
353
- });
354
- }
355
- }),
356
- );
357
- }
358
- }
312
+ export const EditorGroupBody = observer(({ group }: { group: EditorGroup }) => {
313
+ const [context, setContext] = React.useState<IEditorContext>(defaultEditorContext);
359
314
 
360
- if (diffEditorRef.current) {
361
- group.attachDiffEditorDom(diffEditorRef.current);
362
- }
363
- if (mergeEditorRef.current) {
364
- group.attachMergeEditorDom(mergeEditorRef.current);
365
- }
366
-
367
- return () => {
368
- disposables.dispose();
369
- };
370
- }, []);
315
+ const editorBodyRef = React.useRef<HTMLDivElement>(null);
316
+ const editorService = useInjectable(WorkbenchEditorService) as WorkbenchEditorServiceImpl;
317
+ const eventBus = useInjectable(IEventBus) as IEventBus;
318
+ const styles_kt_editor_component = useDesignStyles(styles.kt_editor_component, 'kt_editor_component');
319
+ const components: React.ReactNode[] = [];
320
+ const codeEditorRef = React.useRef<HTMLDivElement>(null);
321
+ const diffEditorRef = React.useRef<HTMLDivElement>(null);
322
+ const mergeEditorRef = React.useRef<HTMLDivElement>(null);
323
+ const [, updateState] = React.useState<any>();
324
+ const forceUpdate = React.useCallback(() => updateState({}), []);
371
325
 
372
- group.activeComponents.forEach((resources, component) => {
373
- const initialProps = group.activateComponentsProps.get(component);
374
- components.push(
375
- <div
376
- key={component.uid}
377
- className={cls({
378
- [styles.kt_hidden]: !(group.currentOpenType && group.currentOpenType.componentId === component.uid),
379
- })}
380
- >
381
- <ComponentsWrapper
382
- key={component.uid}
383
- component={component}
384
- {...initialProps}
385
- resources={resources}
386
- current={group.currentResource}
387
- ></ComponentsWrapper>
388
- </div>,
389
- );
390
- });
326
+ React.useEffect(() => {
327
+ const disposables = new DisposableStore();
391
328
 
392
- const editorHasNoTab = React.useMemo(
393
- () => group.resources.length === 0 || !group.currentResource,
394
- [group.resources.length, group.currentResource],
329
+ disposables.add(
330
+ group.onDidEditorGroupBodyChanged(() => {
331
+ forceUpdate();
332
+ }),
395
333
  );
396
334
 
397
- React.useEffect(() => {
398
- if (group.currentOpenType?.type === EditorOpenType.code) {
399
- eventBus.fire(
400
- new CodeEditorDidVisibleEvent({
401
- groupName: group.name,
402
- type: EditorOpenType.code,
403
- editorId: group.codeEditor.getId(),
404
- }),
405
- );
406
- } else if (group.currentOpenType?.type === EditorOpenType.diff) {
407
- eventBus.fire(
408
- new CodeEditorDidVisibleEvent({
409
- groupName: group.name,
410
- type: EditorOpenType.diff,
411
- editorId: group.diffEditor.modifiedEditor.getId(),
335
+ if (codeEditorRef.current) {
336
+ if (cachedEditor[group.name]) {
337
+ cachedEditor[group.name].remove();
338
+ codeEditorRef.current.appendChild(cachedEditor[group.name]);
339
+ } else {
340
+ const container = document.createElement('div');
341
+ codeEditorRef.current.appendChild(container);
342
+ cachedEditor[group.name] = container;
343
+ group.createEditor(container);
344
+ const minimapWith = group.codeEditor.monacoEditor.getOption(monaco.editor.EditorOption.layoutInfo).minimap
345
+ .minimapWidth;
346
+ setContext({ minimapWidth: minimapWith });
347
+
348
+ disposables.add(
349
+ group.codeEditor.monacoEditor.onDidChangeConfiguration((e) => {
350
+ if (e.hasChanged(monaco.editor.EditorOption.layoutInfo)) {
351
+ setContext({
352
+ minimapWidth: group.codeEditor.monacoEditor.getOption(monaco.editor.EditorOption.layoutInfo).minimap
353
+ .minimapWidth,
354
+ });
355
+ }
412
356
  }),
413
357
  );
414
358
  }
415
- });
359
+ }
416
360
 
417
- return (
418
- <EditorContext.Provider value={context}>
419
- <div
420
- id={VIEW_CONTAINERS.EDITOR}
421
- ref={(_ref) => {
422
- editorBodyRef.current = _ref;
423
- if (ref) {
424
- if (typeof ref === 'function') {
425
- ref(_ref);
426
- } else {
427
- ref.current = _ref;
361
+ if (diffEditorRef.current) {
362
+ group.attachDiffEditorDom(diffEditorRef.current);
363
+ }
364
+ if (mergeEditorRef.current) {
365
+ group.attachMergeEditorDom(mergeEditorRef.current);
366
+ }
367
+
368
+ return () => {
369
+ disposables.dispose();
370
+ };
371
+ }, []);
372
+
373
+ group.activeComponents.forEach((resources, component) => {
374
+ const initialProps = group.activateComponentsProps.get(component);
375
+ components.push(
376
+ <div
377
+ key={component.uid}
378
+ className={cls({
379
+ [styles.kt_hidden]: !(group.currentOpenType && group.currentOpenType.componentId === component.uid),
380
+ })}
381
+ >
382
+ <ComponentsWrapper
383
+ key={component.uid}
384
+ component={component}
385
+ {...initialProps}
386
+ resources={resources}
387
+ current={group.currentResource}
388
+ ></ComponentsWrapper>
389
+ </div>,
390
+ );
391
+ });
392
+
393
+ const editorHasNoTab = React.useMemo(
394
+ () => group.resources.length === 0 || !group.currentResource,
395
+ [group.resources.length, group.currentResource],
396
+ );
397
+
398
+ React.useEffect(() => {
399
+ if (group.currentOpenType?.type === EditorOpenType.code) {
400
+ eventBus.fire(
401
+ new CodeEditorDidVisibleEvent({
402
+ groupName: group.name,
403
+ type: EditorOpenType.code,
404
+ editorId: group.codeEditor.getId(),
405
+ }),
406
+ );
407
+ } else if (group.currentOpenType?.type === EditorOpenType.diff) {
408
+ eventBus.fire(
409
+ new CodeEditorDidVisibleEvent({
410
+ groupName: group.name,
411
+ type: EditorOpenType.diff,
412
+ editorId: group.diffEditor.modifiedEditor.getId(),
413
+ }),
414
+ );
415
+ }
416
+ });
417
+
418
+ return (
419
+ <EditorContext.Provider value={context}>
420
+ <div
421
+ id={VIEW_CONTAINERS.EDITOR}
422
+ ref={editorBodyRef}
423
+ className={styles.kt_editor_body}
424
+ onDragOver={(e) => {
425
+ e.preventDefault();
426
+ if (editorBodyRef.current) {
427
+ const position = getDragOverPosition(e.nativeEvent, editorBodyRef.current);
428
+ decorateDragOverElement(editorBodyRef.current, position);
429
+ }
430
+ }}
431
+ onDragLeave={(e) => {
432
+ if (editorBodyRef.current) {
433
+ removeDecorationDragOverElement(editorBodyRef.current);
434
+ }
435
+ }}
436
+ onDrop={(e) => {
437
+ if (editorBodyRef.current) {
438
+ removeDecorationDragOverElement(editorBodyRef.current);
439
+ if (e.dataTransfer.getData('uri')) {
440
+ const uri = new URI(e.dataTransfer.getData('uri'));
441
+ let sourceGroup: EditorGroup | undefined;
442
+ if (e.dataTransfer.getData('uri-source-group')) {
443
+ sourceGroup = editorService.getEditorGroup(e.dataTransfer.getData('uri-source-group'));
428
444
  }
445
+ group.dropUri(uri, getDragOverPosition(e.nativeEvent, editorBodyRef.current), sourceGroup);
429
446
  }
430
- }}
431
- className={styles.kt_editor_body}
432
- onDragOver={(e) => {
433
- e.preventDefault();
434
- if (editorBodyRef.current) {
435
- const position = getDragOverPosition(e.nativeEvent, editorBodyRef.current);
436
- decorateDragOverElement(editorBodyRef.current, position);
437
- }
438
- }}
439
- onDragLeave={(e) => {
440
- if (editorBodyRef.current) {
441
- removeDecorationDragOverElement(editorBodyRef.current);
442
- }
443
- }}
444
- onDrop={(e) => {
445
- if (editorBodyRef.current) {
446
- removeDecorationDragOverElement(editorBodyRef.current);
447
- if (e.dataTransfer.getData('uri')) {
448
- const uri = new URI(e.dataTransfer.getData('uri'));
449
- let sourceGroup: EditorGroup | undefined;
450
- if (e.dataTransfer.getData('uri-source-group')) {
451
- sourceGroup = editorService.getEditorGroup(e.dataTransfer.getData('uri-source-group'));
452
- }
453
- group.dropUri(uri, getDragOverPosition(e.nativeEvent, editorBodyRef.current), sourceGroup);
454
- }
455
- if (e.dataTransfer.files.length > 0) {
456
- eventBus.fire(
457
- new EditorGroupFileDropEvent({
458
- group,
459
- files: e.dataTransfer.files,
460
- position: getDragOverPosition(e.nativeEvent, editorBodyRef.current),
461
- }),
462
- );
463
- }
447
+ if (e.dataTransfer.files.length > 0) {
448
+ eventBus.fire(
449
+ new EditorGroupFileDropEvent({
450
+ group,
451
+ files: e.dataTransfer.files,
452
+ position: getDragOverPosition(e.nativeEvent, editorBodyRef.current),
453
+ }),
454
+ );
464
455
  }
465
- }}
466
- >
467
- {group.currentResource && <EditorSideView side='top' resource={group.currentResource}></EditorSideView>}
468
- {!editorHasNoTab && <NavigationBar editorGroup={group} />}
469
- <div className={styles.kt_editor_components}>
470
- <div
471
- className={cls({
472
- [styles_kt_editor_component]: true,
473
- [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.component,
474
- })}
475
- >
476
- {components}
477
- </div>
478
- <div
479
- className={cls({
480
- [styles.kt_editor_code_editor]: true,
481
- [styles_kt_editor_component]: true,
482
- [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.code,
483
- })}
484
- ref={codeEditorRef}
485
- />
486
- <div
487
- className={cls(styles.kt_editor_diff_editor, styles_kt_editor_component, {
488
- [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.diff,
489
- })}
490
- ref={diffEditorRef}
491
- />
492
- <div
493
- className={cls(styles.kt_editor_diff_3_editor, styles_kt_editor_component, {
494
- [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.mergeEditor,
495
- })}
496
- ref={mergeEditorRef}
497
- />
456
+ }
457
+ }}
458
+ >
459
+ {group.currentResource && <EditorSideView side={'top'} resource={group.currentResource}></EditorSideView>}
460
+ {!editorHasNoTab && <NavigationBar editorGroup={group} />}
461
+ <div className={styles.kt_editor_components}>
462
+ <div
463
+ className={cls({
464
+ [styles_kt_editor_component]: true,
465
+ [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.component,
466
+ })}
467
+ >
468
+ {components}
498
469
  </div>
499
- {group.currentResource && <EditorSideView side={'bottom'} resource={group.currentResource}></EditorSideView>}
470
+ <div
471
+ className={cls({
472
+ [styles.kt_editor_code_editor]: true,
473
+ [styles_kt_editor_component]: true,
474
+ [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.code,
475
+ })}
476
+ ref={codeEditorRef}
477
+ />
478
+ <div
479
+ className={cls(styles.kt_editor_diff_editor, styles_kt_editor_component, {
480
+ [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.diff,
481
+ })}
482
+ ref={diffEditorRef}
483
+ />
484
+ <div
485
+ className={cls(styles.kt_editor_diff_3_editor, styles_kt_editor_component, {
486
+ [styles.kt_hidden]: !group.currentOpenType || group.currentOpenType.type !== EditorOpenType.mergeEditor,
487
+ })}
488
+ ref={mergeEditorRef}
489
+ />
500
490
  </div>
501
- </EditorContext.Provider>
502
- );
503
- }),
504
- );
491
+ {group.currentResource && <EditorSideView side={'bottom'} resource={group.currentResource}></EditorSideView>}
492
+ </div>
493
+ </EditorContext.Provider>
494
+ );
495
+ });
505
496
 
506
497
  export const ComponentsWrapper = ({
507
498
  component,
@@ -52,6 +52,7 @@ import {
52
52
  MonacoCommandService,
53
53
  } from './monaco-contrib/command/command.service';
54
54
  import { TextmateService } from './monaco-contrib/tokenizer/textmate.service';
55
+ import { NotebookService } from './notebook.service';
55
56
  import { EditorPreferenceContribution } from './preference/contribution';
56
57
  import { EditorPreferences, editorPreferenceSchema } from './preference/schema';
57
58
  import { ResourceServiceImpl } from './resource.service';
@@ -65,6 +66,7 @@ import {
65
66
  IEditorFeatureRegistry,
66
67
  IEditorTabService,
67
68
  ILanguageStatusService,
69
+ INotebookService,
68
70
  } from './types';
69
71
  import { WorkbenchEditorServiceImpl } from './workbench-editor.service';
70
72
  export * from './doc-cache';
@@ -169,6 +171,10 @@ export class EditorModule extends BrowserModule {
169
171
  token: IEditorTabService,
170
172
  useClass: EditorTabService,
171
173
  },
174
+ {
175
+ token: INotebookService,
176
+ useClass: NotebookService,
177
+ },
172
178
  EditorPreferenceContribution,
173
179
  DefaultDiffEditorContribution,
174
180
  MergeEditorContribution,
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@opensumi/di';
2
+ import { Emitter, Event, UriComponents, WithEventBus } from '@opensumi/ide-core-browser';
3
+
4
+ import type { INotebookModelAddedData, INotebookService, NotebookDataDto, NotebookDocumentChangeDto } from './types';
5
+
6
+ @Injectable()
7
+ export class NotebookService extends WithEventBus implements INotebookService {
8
+ createNotebook: (data?: NotebookDataDto) => Promise<{ uri: UriComponents }>;
9
+ openNotebook: (uriComponents: UriComponents) => Promise<{ uri: UriComponents }>;
10
+ saveNotebook: (uriComponents: UriComponents) => Promise<boolean>;
11
+ protected _onDidOpenNotebookDocument = new Emitter<INotebookModelAddedData>();
12
+ onDidOpenNotebookDocument: Event<INotebookModelAddedData> = this._onDidOpenNotebookDocument.event;
13
+ protected _onDidCloseNotebookDocument = new Emitter<UriComponents>();
14
+ onDidCloseNotebookDocument: Event<UriComponents> = this._onDidCloseNotebookDocument.event;
15
+ protected _onDidSaveNotebookDocument = new Emitter<UriComponents>();
16
+ onDidSaveNotebookDocument: Event<UriComponents> = this._onDidSaveNotebookDocument.event;
17
+ protected _onDidChangeNotebookDocument = new Emitter<NotebookDocumentChangeDto>();
18
+ onDidChangeNotebookDocument: Event<NotebookDocumentChangeDto> = this._onDidChangeNotebookDocument.event;
19
+ }