@opensumi/ide-terminal-next 3.5.1-next-1730882731.0 → 3.5.1-next-1730963433.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 (63) hide show
  1. package/lib/browser/component/resize.view.d.ts +1 -3
  2. package/lib/browser/component/resize.view.d.ts.map +1 -1
  3. package/lib/browser/component/resize.view.js +24 -20
  4. package/lib/browser/component/resize.view.js.map +1 -1
  5. package/lib/browser/component/tab.item.d.ts +2 -6
  6. package/lib/browser/component/tab.item.d.ts.map +1 -1
  7. package/lib/browser/component/tab.item.js +32 -24
  8. package/lib/browser/component/tab.item.js.map +1 -1
  9. package/lib/browser/component/tab.view.d.ts +1 -3
  10. package/lib/browser/component/tab.view.d.ts.map +1 -1
  11. package/lib/browser/component/tab.view.js +5 -9
  12. package/lib/browser/component/tab.view.js.map +1 -1
  13. package/lib/browser/component/terminal.view.d.ts +1 -3
  14. package/lib/browser/component/terminal.view.d.ts.map +1 -1
  15. package/lib/browser/component/terminal.view.js +8 -7
  16. package/lib/browser/component/terminal.view.js.map +1 -1
  17. package/lib/browser/contribution/terminal.command.d.ts.map +1 -1
  18. package/lib/browser/contribution/terminal.command.js +24 -19
  19. package/lib/browser/contribution/terminal.command.js.map +1 -1
  20. package/lib/browser/terminal.api.d.ts.map +1 -1
  21. package/lib/browser/terminal.api.js +5 -2
  22. package/lib/browser/terminal.api.js.map +1 -1
  23. package/lib/browser/terminal.client.d.ts.map +1 -1
  24. package/lib/browser/terminal.client.js +8 -4
  25. package/lib/browser/terminal.client.js.map +1 -1
  26. package/lib/browser/terminal.controller.d.ts.map +1 -1
  27. package/lib/browser/terminal.controller.js +12 -15
  28. package/lib/browser/terminal.controller.js.map +1 -1
  29. package/lib/browser/terminal.render.d.ts +2 -6
  30. package/lib/browser/terminal.render.d.ts.map +1 -1
  31. package/lib/browser/terminal.search.js +1 -1
  32. package/lib/browser/terminal.search.js.map +1 -1
  33. package/lib/browser/terminal.view.d.ts +19 -22
  34. package/lib/browser/terminal.view.d.ts.map +1 -1
  35. package/lib/browser/terminal.view.js +121 -214
  36. package/lib/browser/terminal.view.js.map +1 -1
  37. package/lib/common/controller.d.ts +7 -6
  38. package/lib/common/controller.d.ts.map +1 -1
  39. package/lib/common/controller.js.map +1 -1
  40. package/lib/common/render.d.ts +2 -5
  41. package/lib/common/render.d.ts.map +1 -1
  42. package/lib/common/render.js.map +1 -1
  43. package/lib/common/resize.d.ts +10 -9
  44. package/lib/common/resize.d.ts.map +1 -1
  45. package/package.json +18 -17
  46. package/src/browser/component/resize.view.tsx +69 -54
  47. package/src/browser/component/tab.item.tsx +43 -32
  48. package/src/browser/component/tab.view.tsx +11 -16
  49. package/src/browser/component/terminal.view.tsx +11 -8
  50. package/src/browser/contribution/terminal.command.ts +26 -20
  51. package/src/browser/terminal.api.ts +6 -2
  52. package/src/browser/terminal.client.ts +8 -4
  53. package/src/browser/terminal.controller.ts +12 -18
  54. package/src/browser/terminal.search.ts +1 -1
  55. package/src/browser/terminal.view.ts +132 -127
  56. package/src/common/controller.ts +7 -8
  57. package/src/common/render.ts +2 -5
  58. package/src/common/resize.ts +13 -9
  59. package/lib/browser/component/terminal.select.d.ts +0 -6
  60. package/lib/browser/component/terminal.select.d.ts.map +0 -1
  61. package/lib/browser/component/terminal.select.js +0 -19
  62. package/lib/browser/component/terminal.select.js.map +0 -1
  63. package/src/browser/component/terminal.select.tsx +0 -29
@@ -1,17 +1,14 @@
1
1
  /// <reference types="react" />
2
2
  import { ThemeType } from '@opensumi/ide-theme/lib/common';
3
- import { IShellLaunchConfig } from './pty';
3
+ import { IWidgetGroup } from '../index';
4
4
  export declare enum ItemType {
5
5
  info = 0,
6
6
  add = 1
7
7
  }
8
8
  export interface ItemProps {
9
- id?: string;
10
- name?: string;
9
+ group?: IWidgetGroup;
11
10
  selected?: boolean;
12
11
  type?: ItemType;
13
- editable?: boolean;
14
- options?: IShellLaunchConfig;
15
12
  onClick?: () => void;
16
13
  onClose?: () => void;
17
14
  onInputBlur?: (id: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/common/render.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,eAAmC,CAAC;AACxE,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnD,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACnD"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/common/render.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,eAAmC,CAAC;AACxE,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnD,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/common/render.ts"],"names":[],"mappings":";;;AAIA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAAQ,CAAA;IACR,qCAAG,CAAA;AACL,CAAC,EAHW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAGnB;AAoBY,QAAA,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/common/render.ts"],"names":[],"mappings":";;;AAIA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAAQ,CAAA;IACR,qCAAG,CAAA;AACL,CAAC,EAHW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAGnB;AAiBY,QAAA,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { Disposable, Event } from '@opensumi/ide-core-common';
2
+ import { IObservable, ISettableObservable } from '@opensumi/ide-monaco/lib/common/observable';
2
3
  import { IShellLaunchConfig } from './pty';
3
4
  export interface IWidget extends Disposable {
5
+ dynamic: IObservable<number>;
6
+ shadowDynamic: IObservable<number>;
7
+ name: ISettableObservable<string>;
8
+ processName: ISettableObservable<string>;
4
9
  id: string;
5
- name: string;
6
- processName?: string;
7
- dynamic: number;
8
- shadowDynamic: number;
9
10
  element: HTMLDivElement;
10
11
  group: IWidgetGroup;
11
12
  reuse: boolean;
@@ -22,16 +23,16 @@ export interface IWidget extends Disposable {
22
23
  onError: Event<boolean>;
23
24
  }
24
25
  export interface IWidgetGroup extends Disposable {
26
+ name: IObservable<string>;
27
+ snapshot: IObservable<string>;
28
+ activated: IObservable<boolean>;
29
+ editable: IObservable<boolean>;
30
+ widgets: IObservable<IWidget[]>;
25
31
  id: string;
26
- name: string;
27
32
  options?: IShellLaunchConfig;
28
- editable: boolean;
29
- activated: boolean;
30
33
  length: number;
31
- widgets: IWidget[];
32
34
  widgetsMap: Map<string, IWidget>;
33
35
  last: IWidget;
34
- snapshot: string;
35
36
  addWidget(widget: IWidget): void;
36
37
  removeWidgetByIndex: (index: number) => IWidget;
37
38
  edit(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../src/common/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../src/common/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEzC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IAEf,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-terminal-next",
3
- "version": "3.5.1-next-1730882731.0",
3
+ "version": "3.5.1-next-1730963433.0",
4
4
  "files": [
5
5
  "lib",
6
6
  "src"
@@ -17,11 +17,11 @@
17
17
  "url": "git@github.com:opensumi/core.git"
18
18
  },
19
19
  "dependencies": {
20
- "@opensumi/ide-connection": "3.5.1-next-1730882731.0",
21
- "@opensumi/ide-core-common": "3.5.1-next-1730882731.0",
22
- "@opensumi/ide-core-node": "3.5.1-next-1730882731.0",
23
- "@opensumi/ide-file-service": "3.5.1-next-1730882731.0",
24
- "@opensumi/ide-utils": "3.5.1-next-1730882731.0",
20
+ "@opensumi/ide-connection": "3.5.1-next-1730963433.0",
21
+ "@opensumi/ide-core-common": "3.5.1-next-1730963433.0",
22
+ "@opensumi/ide-core-node": "3.5.1-next-1730963433.0",
23
+ "@opensumi/ide-file-service": "3.5.1-next-1730963433.0",
24
+ "@opensumi/ide-utils": "3.5.1-next-1730963433.0",
25
25
  "@xterm/addon-canvas": "0.7.0",
26
26
  "@xterm/addon-fit": "0.10.0",
27
27
  "@xterm/addon-search": "0.15.0",
@@ -31,18 +31,19 @@
31
31
  "os-locale": "^4.0.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@opensumi/ide-components": "3.5.1-next-1730882731.0",
35
- "@opensumi/ide-core-browser": "3.5.1-next-1730882731.0",
36
- "@opensumi/ide-dev-tool": "3.5.1-next-1730882731.0",
37
- "@opensumi/ide-editor": "3.5.1-next-1730882731.0",
38
- "@opensumi/ide-main-layout": "3.5.1-next-1730882731.0",
39
- "@opensumi/ide-overlay": "3.5.1-next-1730882731.0",
40
- "@opensumi/ide-status-bar": "3.5.1-next-1730882731.0",
41
- "@opensumi/ide-theme": "3.5.1-next-1730882731.0",
42
- "@opensumi/ide-variable": "3.5.1-next-1730882731.0",
43
- "@opensumi/ide-workspace": "3.5.1-next-1730882731.0",
34
+ "@opensumi/ide-components": "3.5.1-next-1730963433.0",
35
+ "@opensumi/ide-core-browser": "3.5.1-next-1730963433.0",
36
+ "@opensumi/ide-dev-tool": "3.5.1-next-1730963433.0",
37
+ "@opensumi/ide-editor": "3.5.1-next-1730963433.0",
38
+ "@opensumi/ide-main-layout": "3.5.1-next-1730963433.0",
39
+ "@opensumi/ide-monaco": "3.5.1-next-1730963433.0",
40
+ "@opensumi/ide-overlay": "3.5.1-next-1730963433.0",
41
+ "@opensumi/ide-status-bar": "3.5.1-next-1730963433.0",
42
+ "@opensumi/ide-theme": "3.5.1-next-1730963433.0",
43
+ "@opensumi/ide-variable": "3.5.1-next-1730963433.0",
44
+ "@opensumi/ide-workspace": "3.5.1-next-1730963433.0",
44
45
  "@types/http-proxy": "^1.17.2",
45
46
  "http-proxy": "^1.18.0"
46
47
  },
47
- "gitHead": "1c3aee168f065114a1e696c4893ba5c2001d34d3"
48
+ "gitHead": "1ef9d77a91894dc04e317a815be97c786b7f9920"
48
49
  }
@@ -1,8 +1,7 @@
1
1
  import cls from 'classnames';
2
- import { observer } from 'mobx-react-lite';
3
2
  import React from 'react';
4
3
 
5
- import { getIcon, useInjectable } from '@opensumi/ide-core-browser';
4
+ import { getIcon, useAutorun, useInjectable } from '@opensumi/ide-core-browser';
6
5
 
7
6
  import { ITerminalGroupViewService } from '../../common/controller';
8
7
  import { IWidget, IWidgetGroup } from '../../common/resize';
@@ -23,8 +22,46 @@ export interface IResizeViewProps {
23
22
  draw: (widget: IWidget) => JSX.Element;
24
23
  }
25
24
 
26
- export default observer((props: IResizeViewProps) => {
25
+ const ResizeItem = ({ index, widget, wholeWidth, setEvent, self, left, right, last }) => {
26
+ const shadowDynamic = useAutorun(widget.shadowDynamic);
27
+
28
+ return (
29
+ <div key={`resize-item-${index}`} style={{ width: `${shadowDynamic}%` }} className={styles.resizeHandler}>
30
+ <ResizeDelegate
31
+ wholeWidth={wholeWidth}
32
+ start={() => setEvent(true)}
33
+ stop={() => setEvent(false)}
34
+ self={self}
35
+ left={left}
36
+ right={right}
37
+ last={last}
38
+ />
39
+ </div>
40
+ );
41
+ };
42
+
43
+ const ResizePanelItem = ({ widget, dynamic, draw, handleRemoveWidget, widgetsLength }) => {
44
+ const _dynamic = useAutorun(dynamic);
45
+
46
+ return (
47
+ <div key={widget.id} style={{ width: `${_dynamic}%` }} className={styles.resizeItem}>
48
+ {draw(widget)}
49
+ {widgetsLength > 1 && (
50
+ <div
51
+ className={cls(styles.closeBtn, getIcon('close'))}
52
+ onClick={() => {
53
+ handleRemoveWidget(widget.id);
54
+ }}
55
+ />
56
+ )}
57
+ </div>
58
+ );
59
+ };
60
+
61
+ export default (props: IResizeViewProps) => {
27
62
  const { group, shadow } = props;
63
+ const widgets = useAutorun(group.widgets);
64
+
28
65
  const [event, setEvent] = React.useState(false);
29
66
  const [wholeWidth, setWholeWidth] = React.useState(Infinity);
30
67
  const view = useInjectable<ITerminalGroupViewService>(ITerminalGroupViewService);
@@ -42,61 +79,39 @@ export default observer((props: IResizeViewProps) => {
42
79
 
43
80
  return (
44
81
  <div className={styles.resizeWrapper} ref={whole}>
45
- <div
46
- style={{
47
- pointerEvents: event ? 'all' : 'none',
48
- }}
49
- className={styles.resizeDelegate}
50
- >
51
- {group &&
52
- group.widgets.map((widget, index) => {
53
- const left = index - 1 > -1 ? group.widgets[index - 1] : null;
54
- const self = group.widgets[index];
55
- const right = index + 1 < group.widgets.length ? group.widgets[index + 1] : null;
82
+ <div style={{ pointerEvents: event ? 'all' : 'none' }} className={styles.resizeDelegate}>
83
+ {widgets &&
84
+ widgets.map((widget, index) => {
85
+ const left = index - 1 > -1 ? widgets[index - 1] : null;
86
+ const self = widgets[index];
87
+ const right = index + 1 < widgets.length ? widgets[index + 1] : null;
88
+
56
89
  return (
57
- <div
58
- key={`resize-item-${index}`}
59
- style={{ width: `${widget.shadowDynamic}%` }}
60
- className={styles.resizeHandler}
61
- >
62
- <ResizeDelegate
63
- wholeWidth={wholeWidth}
64
- start={() => setEvent(true)}
65
- stop={() => setEvent(false)}
66
- self={self}
67
- left={left}
68
- right={right}
69
- last={index === group.widgets.length - 1}
70
- />
71
- </div>
90
+ <ResizeItem
91
+ index={index}
92
+ widget={widget}
93
+ wholeWidth={wholeWidth}
94
+ setEvent={setEvent}
95
+ self={self}
96
+ left={left}
97
+ right={right}
98
+ last={index === widgets.length - 1}
99
+ />
72
100
  );
73
101
  })}
74
102
  </div>
75
- <div
76
- style={{
77
- pointerEvents: !event ? 'all' : 'none',
78
- }}
79
- className={styles.resizePanel}
80
- >
81
- {group &&
82
- group.widgets.map((widget) => (
83
- <div
84
- key={widget.id}
85
- style={{ width: `${shadow ? widget.dynamic : widget.shadowDynamic}%` }}
86
- className={styles.resizeItem}
87
- >
88
- {props.draw(widget)}
89
- {group.widgets.length > 1 && (
90
- <div
91
- className={cls(styles.closeBtn, getIcon('close'))}
92
- onClick={() => {
93
- handleRemoveWidget(widget.id);
94
- }}
95
- />
96
- )}
97
- </div>
98
- ))}
103
+ <div style={{ pointerEvents: !event ? 'all' : 'none' }} className={styles.resizePanel}>
104
+ {widgets &&
105
+ widgets.map((widget) => (
106
+ <ResizePanelItem
107
+ widget={widget}
108
+ dynamic={shadow ? widget.dynamic : widget.shadowDynamic}
109
+ draw={props.draw}
110
+ handleRemoveWidget={handleRemoveWidget}
111
+ widgetsLength={widgets.length}
112
+ />
113
+ ))}
99
114
  </div>
100
115
  </div>
101
116
  );
102
- });
117
+ };
@@ -1,15 +1,14 @@
1
1
  import cls from 'classnames';
2
2
  import debounce from 'lodash/debounce';
3
- import { observer } from 'mobx-react-lite';
4
- import React, { KeyboardEvent, createElement, useEffect, useRef } from 'react';
3
+ import React, { KeyboardEvent, createElement, useCallback, useEffect, useRef } from 'react';
5
4
 
6
5
  import { Icon } from '@opensumi/ide-components/lib/icon/icon';
7
6
  import {
8
- AppConfig,
9
7
  TERMINAL_COMMANDS,
10
8
  URI,
11
9
  getIcon,
12
10
  localize,
11
+ useAutorun,
13
12
  useDesignStyles,
14
13
  useInjectable,
15
14
  } from '@opensumi/ide-core-browser';
@@ -22,7 +21,7 @@ import { ItemProps, ItemType } from '../../common';
22
21
 
23
22
  import styles from './tab.module.less';
24
23
 
25
- export const renderInfoItem = observer((props: ItemProps) => {
24
+ export const renderInfoItem = (props: ItemProps) => {
26
25
  const iconService = useInjectable<IIconService>(IconService);
27
26
  const handleSelect = debounce(() => props.onClick && props.onClick(), 20);
28
27
  const handleClose = debounce(() => props.onClose && props.onClose(), 20);
@@ -31,31 +30,45 @@ export const renderInfoItem = observer((props: ItemProps) => {
31
30
  const styles_item_info_name = useDesignStyles(styles.item_info_name, 'item_info_name');
32
31
  const styles_tab_close_icon = useDesignStyles(styles.tab_close_icon, 'tab_close_icon');
33
32
  const layoutViewSize = useInjectable<LayoutViewSizeConfig>(LayoutViewSizeConfig);
34
-
35
- const handleOnKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
36
- if (e.key === 'Enter' && props.onInputEnter && props.id) {
37
- props.onInputEnter(props.id, (e.target as any).value);
38
- }
39
- };
40
33
  const ref = useRef<HTMLDivElement>(null);
34
+
35
+ const { group } = props;
36
+ if (!group) {
37
+ return null;
38
+ }
39
+
40
+ const { options, id } = group;
41
+
42
+ const editable = useAutorun(group.editable);
43
+ const name = useAutorun(group.snapshot);
44
+
45
+ const handleOnKeyDown = useCallback(
46
+ (e: KeyboardEvent<HTMLInputElement>) => {
47
+ if (e.key === 'Enter' && props.onInputEnter && id) {
48
+ props.onInputEnter(id, (e.target as any).value);
49
+ }
50
+ },
51
+ [id, props.onInputEnter],
52
+ );
53
+
41
54
  useEffect(() => {
42
55
  if (props.selected) {
43
56
  ref.current?.scrollIntoView();
44
57
  }
45
- }, [props.selected]);
58
+ }, [ref, props.selected]);
46
59
 
47
60
  let iconClass;
48
61
 
49
- if (props.options?.icon) {
50
- if ((props.options.icon as any)?.id) {
51
- iconClass = iconService.fromString(`$(${(props.options.icon as any)?.id})`);
52
- } else if (props.options.icon instanceof URI) {
53
- iconClass = iconService.fromIcon(props.options?.icon.toString());
54
- } else if ((props.options.icon as any)?.light || (props.options?.icon as any)?.dark) {
62
+ if (options?.icon) {
63
+ if ((options.icon as any)?.id) {
64
+ iconClass = iconService.fromString(`$(${(options.icon as any)?.id})`);
65
+ } else if (options.icon instanceof URI) {
66
+ iconClass = iconService.fromIcon(options?.icon.toString());
67
+ } else if ((options.icon as any)?.light || (options?.icon as any)?.dark) {
55
68
  iconClass =
56
69
  props.theme === 'light'
57
- ? iconService.fromIcon((props.options.icon as any).light.toString())
58
- : iconService.fromIcon((props.options.icon as any).dark.toString());
70
+ ? iconService.fromIcon((options.icon as any).light.toString())
71
+ : iconService.fromIcon((options.icon as any).dark.toString());
59
72
  }
60
73
  }
61
74
 
@@ -70,34 +83,32 @@ export const renderInfoItem = observer((props: ItemProps) => {
70
83
  onClick={() => handleSelect()}
71
84
  onContextMenu={(event) => props.onContextMenu && props.onContextMenu(event)}
72
85
  >
73
- {props.editable ? (
86
+ {editable ? (
74
87
  <input
75
88
  autoFocus
76
89
  ref={(ele) => ele && ele.select()}
77
90
  className={styles.item_info_input}
78
- defaultValue={props.name}
91
+ defaultValue={name}
79
92
  onClick={(e) => e.stopPropagation()}
80
- onBlur={() => props.onInputBlur && props.id && props.onInputBlur(props.id)}
93
+ onBlur={() => props.onInputBlur && group.id && props.onInputBlur(group.id)}
81
94
  onKeyDown={(e) => handleOnKeyDown(e)}
82
95
  ></input>
83
96
  ) : (
84
- <div id={props.id} className={styles_item_info_name} title={props.name}>
85
- {props.name !== '' ? (
97
+ <div id={group.id} className={styles_item_info_name} title={name}>
98
+ {name !== '' ? (
86
99
  <>
87
100
  <Icon
88
- iconClass={
89
- iconClass ? iconClass : getIcon(props.name?.toLowerCase() || 'terminal') || getIcon('terminal')
90
- }
101
+ iconClass={iconClass ? iconClass : getIcon(name?.toLowerCase() || 'terminal') || getIcon('terminal')}
91
102
  style={{ marginRight: 4, color: 'inherit', fontSize: 14 }}
92
103
  />
93
- <span className={styles.item_title}>{props.name}</span>
104
+ <span className={styles.item_title}>{name}</span>
94
105
  </>
95
106
  ) : (
96
107
  <Loading />
97
108
  )}
98
109
  </div>
99
110
  )}
100
- {props.editable ? (
111
+ {editable ? (
101
112
  <div></div>
102
113
  ) : (
103
114
  <div
@@ -110,9 +121,9 @@ export const renderInfoItem = observer((props: ItemProps) => {
110
121
  )}
111
122
  </div>
112
123
  );
113
- });
124
+ };
114
125
 
115
- export const renderAddItem = observer((props: ItemProps) => {
126
+ export const renderAddItem = (props: ItemProps) => {
116
127
  const handleAdd = debounce(() => props.onClick && props.onClick(), 20);
117
128
  const keybinding = props.getKeybinding && props.getKeybinding(TERMINAL_COMMANDS.ADD.id);
118
129
  const createTitle = keybinding ? `${localize('terminal.new')}(${keybinding})` : localize('terminal.new');
@@ -138,7 +149,7 @@ export const renderAddItem = observer((props: ItemProps) => {
138
149
  />
139
150
  </div>
140
151
  );
141
- });
152
+ };
142
153
 
143
154
  export default (props: ItemProps) => {
144
155
  const type = props.type || ItemType.info;
@@ -1,8 +1,7 @@
1
- import { observer } from 'mobx-react-lite';
2
1
  import React, { useCallback, useEffect, useRef, useState } from 'react';
3
2
 
4
3
  import { Scrollbars } from '@opensumi/ide-components';
5
- import { KeybindingRegistry, useDesignStyles, useInjectable } from '@opensumi/ide-core-browser';
4
+ import { KeybindingRegistry, useAutorun, useDesignStyles, useInjectable } from '@opensumi/ide-core-browser';
6
5
  import { IThemeService, ThemeType } from '@opensumi/ide-theme';
7
6
 
8
7
  import { ITerminalGroupViewService, ITerminalRenderProvider, ItemType } from '../../common';
@@ -11,7 +10,7 @@ import { TerminalContextMenuService } from '../terminal.context-menu';
11
10
  import TabItem from './tab.item';
12
11
  import styles from './tab.module.less';
13
12
 
14
- export default observer(() => {
13
+ export default () => {
15
14
  const view = useInjectable<ITerminalGroupViewService>(ITerminalGroupViewService);
16
15
  const provider = useInjectable<ITerminalRenderProvider>(ITerminalRenderProvider);
17
16
  const menuService = useInjectable<TerminalContextMenuService>(TerminalContextMenuService);
@@ -21,6 +20,9 @@ export default observer(() => {
21
20
  const [theme, setTheme] = useState<ThemeType>('dark');
22
21
  const styles_tab_contents = useDesignStyles(styles.tab_contents, 'tab_contents');
23
22
 
23
+ const groups = useAutorun(view.groups);
24
+ const currentGroup = useAutorun(view.currentGroup);
25
+
24
26
  const init = useCallback(() => {
25
27
  themeService.getCurrentTheme().then((theme) => {
26
28
  setTheme(theme.type);
@@ -36,23 +38,17 @@ export default observer(() => {
36
38
  disposable.dispose();
37
39
  };
38
40
  }, []);
41
+
39
42
  return (
40
43
  <div className={styles.view_container}>
41
44
  <div className={styles.tabs}>
42
45
  <Scrollbars forwardedRef={(el) => (el ? (tabContainer.current = el.ref) : null)}>
43
46
  <div className={styles_tab_contents}>
44
- {view.groups.map((group, index) => {
45
- if (!group) {
46
- return;
47
- }
48
- return (
47
+ {groups.filter(Boolean).map((group, index) => (
49
48
  <TabItem
50
49
  key={group.id}
51
- id={group.id}
52
- options={group.options}
53
- editable={group.editable}
54
- name={group.snapshot}
55
- selected={view.currentGroup && view.currentGroup.id === group.id}
50
+ group={group}
51
+ selected={currentGroup && currentGroup.id === group.id}
56
52
  onInputBlur={() => group.unedit()}
57
53
  onInputEnter={(_: string, name: string) => group.rename(name)}
58
54
  onClick={() => view.selectGroup(index)}
@@ -61,8 +57,7 @@ export default observer(() => {
61
57
  provider={provider}
62
58
  theme={theme}
63
59
  ></TabItem>
64
- );
65
- })}
60
+ ))}
66
61
  <div className={styles.button}>
67
62
  <TabItem
68
63
  type={ItemType.add}
@@ -89,4 +84,4 @@ export default observer(() => {
89
84
  </div>
90
85
  </div>
91
86
  );
92
- });
87
+ };
@@ -1,9 +1,8 @@
1
1
  import cls from 'classnames';
2
2
  import debounce from 'lodash/debounce';
3
- import { observer } from 'mobx-react-lite';
4
3
  import React from 'react';
5
4
 
6
- import { FRAME_THREE, getIcon, localize, useEventEffect, useInjectable } from '@opensumi/ide-core-browser';
5
+ import { FRAME_THREE, getIcon, localize, useAutorun, useEventEffect, useInjectable } from '@opensumi/ide-core-browser';
7
6
 
8
7
  import {
9
8
  ITerminalController,
@@ -21,16 +20,20 @@ import TerminalWidget from './terminal.widget';
21
20
 
22
21
  import '@xterm/xterm/css/xterm.css';
23
22
 
24
- export default observer(() => {
23
+ export default () => {
25
24
  const controller = useInjectable<ITerminalController>(ITerminalController);
26
- const view = useInjectable<ITerminalGroupViewService>(ITerminalGroupViewService);
27
25
  const searchService = useInjectable<ITerminalSearchService>(ITerminalSearchService);
28
26
  const errorService = useInjectable<ITerminalErrorService>(ITerminalErrorService);
29
27
  const network = useInjectable<ITerminalNetwork>(ITerminalNetwork);
30
- const { groups, currentGroupIndex, currentGroupId } = view;
28
+
31
29
  const inputRef = React.useRef<HTMLInputElement>(null);
32
30
  const wrapperRef = React.useRef<HTMLDivElement | null>(null);
33
31
 
32
+ const view = useInjectable<ITerminalGroupViewService>(ITerminalGroupViewService);
33
+ const currentGroupId = useAutorun(view.currentGroupId);
34
+ const currentGroupIndex = useAutorun(view.currentGroupIndex);
35
+ const groups = useAutorun(view.groups);
36
+
34
37
  React.useEffect(() => {
35
38
  const dispose = searchService.onVisibleChange((show) => {
36
39
  if (show && inputRef.current) {
@@ -130,12 +133,12 @@ export default observer(() => {
130
133
  </div>
131
134
  )}
132
135
  {groups.map((group, index) => {
133
- if (!group.activated) {
136
+ if (!group.activated.get()) {
134
137
  return;
135
138
  }
136
139
  return (
137
140
  <div
138
- data-group-rendered={group.activated}
141
+ data-group-rendered={group.activated.get()}
139
142
  key={`terminal-${group.id}`}
140
143
  style={{ display: currentGroupIndex === index ? 'block' : 'none' }}
141
144
  className={styles.group}
@@ -155,4 +158,4 @@ export default observer(() => {
155
158
  })}
156
159
  </div>
157
160
  );
158
- });
161
+ };