@opensumi/ide-terminal-next 3.5.1-next-1730948411.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.
- package/lib/browser/component/resize.view.d.ts +1 -3
- package/lib/browser/component/resize.view.d.ts.map +1 -1
- package/lib/browser/component/resize.view.js +24 -20
- package/lib/browser/component/resize.view.js.map +1 -1
- package/lib/browser/component/tab.item.d.ts +2 -6
- package/lib/browser/component/tab.item.d.ts.map +1 -1
- package/lib/browser/component/tab.item.js +32 -24
- package/lib/browser/component/tab.item.js.map +1 -1
- package/lib/browser/component/tab.view.d.ts +1 -3
- package/lib/browser/component/tab.view.d.ts.map +1 -1
- package/lib/browser/component/tab.view.js +5 -9
- package/lib/browser/component/tab.view.js.map +1 -1
- package/lib/browser/component/terminal.view.d.ts +1 -3
- package/lib/browser/component/terminal.view.d.ts.map +1 -1
- package/lib/browser/component/terminal.view.js +8 -7
- package/lib/browser/component/terminal.view.js.map +1 -1
- package/lib/browser/contribution/terminal.command.d.ts.map +1 -1
- package/lib/browser/contribution/terminal.command.js +24 -19
- package/lib/browser/contribution/terminal.command.js.map +1 -1
- package/lib/browser/terminal.api.d.ts.map +1 -1
- package/lib/browser/terminal.api.js +5 -2
- package/lib/browser/terminal.api.js.map +1 -1
- package/lib/browser/terminal.client.d.ts.map +1 -1
- package/lib/browser/terminal.client.js +8 -4
- package/lib/browser/terminal.client.js.map +1 -1
- package/lib/browser/terminal.controller.d.ts.map +1 -1
- package/lib/browser/terminal.controller.js +12 -15
- package/lib/browser/terminal.controller.js.map +1 -1
- package/lib/browser/terminal.render.d.ts +2 -6
- package/lib/browser/terminal.render.d.ts.map +1 -1
- package/lib/browser/terminal.search.js +1 -1
- package/lib/browser/terminal.search.js.map +1 -1
- package/lib/browser/terminal.view.d.ts +19 -22
- package/lib/browser/terminal.view.d.ts.map +1 -1
- package/lib/browser/terminal.view.js +121 -214
- package/lib/browser/terminal.view.js.map +1 -1
- package/lib/common/controller.d.ts +7 -6
- package/lib/common/controller.d.ts.map +1 -1
- package/lib/common/controller.js.map +1 -1
- package/lib/common/render.d.ts +2 -5
- package/lib/common/render.d.ts.map +1 -1
- package/lib/common/render.js.map +1 -1
- package/lib/common/resize.d.ts +10 -9
- package/lib/common/resize.d.ts.map +1 -1
- package/package.json +18 -17
- package/src/browser/component/resize.view.tsx +69 -54
- package/src/browser/component/tab.item.tsx +43 -32
- package/src/browser/component/tab.view.tsx +11 -16
- package/src/browser/component/terminal.view.tsx +11 -8
- package/src/browser/contribution/terminal.command.ts +26 -20
- package/src/browser/terminal.api.ts +6 -2
- package/src/browser/terminal.client.ts +8 -4
- package/src/browser/terminal.controller.ts +12 -18
- package/src/browser/terminal.search.ts +1 -1
- package/src/browser/terminal.view.ts +132 -127
- package/src/common/controller.ts +7 -8
- package/src/common/render.ts +2 -5
- package/src/common/resize.ts +13 -9
- package/lib/browser/component/terminal.select.d.ts +0 -6
- package/lib/browser/component/terminal.select.d.ts.map +0 -1
- package/lib/browser/component/terminal.select.js +0 -19
- package/lib/browser/component/terminal.select.js.map +0 -1
- package/src/browser/component/terminal.select.tsx +0 -29
package/lib/common/render.d.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ThemeType } from '@opensumi/ide-theme/lib/common';
|
|
3
|
-
import {
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/lib/common/render.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/common/resize.d.ts
CHANGED
|
@@ -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;
|
|
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-
|
|
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-
|
|
21
|
-
"@opensumi/ide-core-common": "3.5.1-next-
|
|
22
|
-
"@opensumi/ide-core-node": "3.5.1-next-
|
|
23
|
-
"@opensumi/ide-file-service": "3.5.1-next-
|
|
24
|
-
"@opensumi/ide-utils": "3.5.1-next-
|
|
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-
|
|
35
|
-
"@opensumi/ide-core-browser": "3.5.1-next-
|
|
36
|
-
"@opensumi/ide-dev-tool": "3.5.1-next-
|
|
37
|
-
"@opensumi/ide-editor": "3.5.1-next-
|
|
38
|
-
"@opensumi/ide-main-layout": "3.5.1-next-
|
|
39
|
-
"@opensumi/ide-
|
|
40
|
-
"@opensumi/ide-
|
|
41
|
-
"@opensumi/ide-
|
|
42
|
-
"@opensumi/ide-
|
|
43
|
-
"@opensumi/ide-
|
|
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": "
|
|
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
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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 {
|
|
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 =
|
|
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 (
|
|
50
|
-
if ((
|
|
51
|
-
iconClass = iconService.fromString(`$(${(
|
|
52
|
-
} else if (
|
|
53
|
-
iconClass = iconService.fromIcon(
|
|
54
|
-
} else if ((
|
|
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((
|
|
58
|
-
: iconService.fromIcon((
|
|
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
|
-
{
|
|
86
|
+
{editable ? (
|
|
74
87
|
<input
|
|
75
88
|
autoFocus
|
|
76
89
|
ref={(ele) => ele && ele.select()}
|
|
77
90
|
className={styles.item_info_input}
|
|
78
|
-
defaultValue={
|
|
91
|
+
defaultValue={name}
|
|
79
92
|
onClick={(e) => e.stopPropagation()}
|
|
80
|
-
onBlur={() => props.onInputBlur &&
|
|
93
|
+
onBlur={() => props.onInputBlur && group.id && props.onInputBlur(group.id)}
|
|
81
94
|
onKeyDown={(e) => handleOnKeyDown(e)}
|
|
82
95
|
></input>
|
|
83
96
|
) : (
|
|
84
|
-
<div id={
|
|
85
|
-
{
|
|
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}>{
|
|
104
|
+
<span className={styles.item_title}>{name}</span>
|
|
94
105
|
</>
|
|
95
106
|
) : (
|
|
96
107
|
<Loading />
|
|
97
108
|
)}
|
|
98
109
|
</div>
|
|
99
110
|
)}
|
|
100
|
-
{
|
|
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 =
|
|
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
|
|
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
|
-
{
|
|
45
|
-
if (!group) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
return (
|
|
47
|
+
{groups.filter(Boolean).map((group, index) => (
|
|
49
48
|
<TabItem
|
|
50
49
|
key={group.id}
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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
|
-
|
|
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
|
+
};
|