@k8slens/extensions 5.3.0-git.18e1c76b8f.0 → 5.3.0-git.1ce2e727af.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/__mocks__/electron.ts +2 -2
- package/dist/src/common/__tests__/system-ca.test.d.ts +1 -0
- package/dist/src/common/k8s-api/endpoints/cluster-role-binding.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/cluster-role.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/cluster.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/configmap.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/crd.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/cron-job.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/daemon-set.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/deployment.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/endpoint.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/events.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/hpa.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/ingress.api.d.ts +11 -8
- package/dist/src/common/k8s-api/endpoints/job.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/limit-range.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/namespaces.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/network-policy.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/nodes.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/persistent-volume-claims.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/persistent-volume.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/pod-metrics.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/poddisruptionbudget.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/pods.api.d.ts +29 -33
- package/dist/src/common/k8s-api/endpoints/podsecuritypolicy.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/replica-set.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/resource-quota.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/role-binding.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/role.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/secret.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/selfsubjectrulesreviews.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/service-accounts.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/service.api.d.ts +2 -2
- package/dist/src/common/k8s-api/endpoints/stateful-set.api.d.ts +1 -1
- package/dist/src/common/k8s-api/endpoints/storage-class.api.d.ts +1 -1
- package/dist/src/common/k8s-api/index.d.ts +1 -1
- package/dist/src/common/k8s-api/kube-json-api.d.ts +2 -0
- package/dist/src/common/system-ca.d.ts +20 -1
- package/dist/src/common/user-store/preferences-helpers.d.ts +2 -6
- package/dist/src/common/user-store/user-store.d.ts +2 -7
- package/dist/src/common/utils/base64.d.ts +12 -4
- package/dist/src/common/utils/index.d.ts +2 -2
- package/dist/src/{main → common/utils}/promise-exec.d.ts +0 -0
- package/dist/src/extensions/0.extension-api.js +15 -0
- package/dist/src/extensions/1.extension-api.js +15 -0
- package/dist/src/extensions/10.extension-api.js +15 -0
- package/dist/src/extensions/11.extension-api.js +15 -0
- package/dist/src/extensions/12.extension-api.js +15 -0
- package/dist/src/extensions/13.extension-api.js +15 -0
- package/dist/src/extensions/14.extension-api.js +15 -0
- package/dist/src/extensions/15.extension-api.js +15 -0
- package/dist/src/extensions/16.extension-api.js +15 -0
- package/dist/src/extensions/17.extension-api.js +15 -0
- package/dist/src/extensions/18.extension-api.js +15 -0
- package/dist/src/extensions/19.extension-api.js +15 -0
- package/dist/src/extensions/2.extension-api.js +543 -0
- package/dist/src/extensions/20.extension-api.js +15 -0
- package/dist/src/extensions/21.extension-api.js +15 -0
- package/dist/src/extensions/22.extension-api.js +15 -0
- package/dist/src/extensions/23.extension-api.js +15 -0
- package/dist/src/extensions/24.extension-api.js +15 -0
- package/dist/src/extensions/25.extension-api.js +15 -0
- package/dist/src/extensions/26.extension-api.js +15 -0
- package/dist/src/extensions/27.extension-api.js +15 -0
- package/dist/src/extensions/28.extension-api.js +15 -0
- package/dist/src/extensions/29.extension-api.js +15 -0
- package/dist/src/extensions/3.extension-api.js +423 -0
- package/dist/src/extensions/30.extension-api.js +15 -0
- package/dist/src/extensions/31.extension-api.js +15 -0
- package/dist/src/extensions/32.extension-api.js +15 -0
- package/dist/src/extensions/33.extension-api.js +15 -0
- package/dist/src/extensions/34.extension-api.js +15 -0
- package/dist/src/extensions/35.extension-api.js +15 -0
- package/dist/src/extensions/36.extension-api.js +15 -0
- package/dist/src/extensions/37.extension-api.js +15 -0
- package/dist/src/extensions/38.extension-api.js +15 -0
- package/dist/src/extensions/39.extension-api.js +15 -0
- package/dist/src/extensions/4.extension-api.js +363 -0
- package/dist/src/extensions/40.extension-api.js +15 -0
- package/dist/src/extensions/41.extension-api.js +15 -0
- package/dist/src/extensions/42.extension-api.js +15 -0
- package/dist/src/extensions/43.extension-api.js +15 -0
- package/dist/src/extensions/44.extension-api.js +15 -0
- package/dist/src/extensions/45.extension-api.js +15 -0
- package/dist/src/extensions/46.extension-api.js +15 -0
- package/dist/src/extensions/47.extension-api.js +15 -0
- package/dist/src/extensions/48.extension-api.js +15 -0
- package/dist/src/extensions/49.extension-api.js +15 -0
- package/dist/src/extensions/5.extension-api.js +51 -0
- package/dist/src/extensions/50.extension-api.js +15 -0
- package/dist/src/extensions/51.extension-api.js +15 -0
- package/dist/src/extensions/52.extension-api.js +15 -0
- package/dist/src/extensions/53.extension-api.js +15 -0
- package/dist/src/extensions/54.extension-api.js +15 -0
- package/dist/src/extensions/55.extension-api.js +15 -0
- package/dist/src/extensions/56.extension-api.js +15 -0
- package/dist/src/extensions/57.extension-api.js +15 -0
- package/dist/src/extensions/58.extension-api.js +15 -0
- package/dist/src/extensions/59.extension-api.js +15 -0
- package/dist/src/extensions/6.extension-api.js +27 -0
- package/dist/src/extensions/60.extension-api.js +15 -0
- package/dist/src/extensions/61.extension-api.js +15 -0
- package/dist/src/extensions/62.extension-api.js +15 -0
- package/dist/src/extensions/63.extension-api.js +15 -0
- package/dist/src/extensions/64.extension-api.js +15 -0
- package/dist/src/extensions/65.extension-api.js +15 -0
- package/dist/src/extensions/66.extension-api.js +15 -0
- package/dist/src/extensions/67.extension-api.js +15 -0
- package/dist/src/extensions/68.extension-api.js +15 -0
- package/dist/src/extensions/69.extension-api.js +15 -0
- package/dist/src/extensions/7.extension-api.js +15 -0
- package/dist/src/extensions/70.extension-api.js +15 -0
- package/dist/src/extensions/71.extension-api.js +15 -0
- package/dist/src/extensions/72.extension-api.js +15 -0
- package/dist/src/extensions/73.extension-api.js +15 -0
- package/dist/src/extensions/74.extension-api.js +15 -0
- package/dist/src/extensions/75.extension-api.js +15 -0
- package/dist/src/extensions/76.extension-api.js +15 -0
- package/dist/src/extensions/77.extension-api.js +15 -0
- package/dist/src/extensions/78.extension-api.js +15 -0
- package/dist/src/extensions/79.extension-api.js +15 -0
- package/dist/src/extensions/8.extension-api.js +15 -0
- package/dist/src/extensions/9.extension-api.js +15 -0
- package/dist/src/extensions/common-api/app.d.ts +2 -0
- package/dist/src/extensions/common-api/index.d.ts +1 -1
- package/dist/src/extensions/common-api/user-preferences.d.ts +24 -0
- package/dist/src/extensions/extension-api.js +5720 -1563
- package/dist/src/main/index.d.ts +0 -1
- package/dist/src/main/kubectl.d.ts +1 -1
- package/dist/src/main/proxy-functions/shell-api-request.d.ts +14 -0
- package/dist/src/main/shell-session/node-shell-session.d.ts +2 -2
- package/dist/src/main/shell-session/shell-session.d.ts +89 -7
- package/dist/src/migrations/user-store/index.d.ts +1 -1
- package/dist/src/preload.d.ts +1 -1
- package/dist/src/renderer/api/terminal-api.d.ts +5 -6
- package/dist/src/renderer/components/+add-cluster/add-cluster.d.ts +0 -1
- package/dist/src/renderer/components/+apps-helm-charts/helm-chart-details.d.ts +3 -3
- package/dist/src/renderer/components/+apps-releases/release-menu.d.ts +3 -3
- package/dist/src/renderer/components/+catalog/catalog-add-button.d.ts +7 -1
- package/dist/src/renderer/components/+namespaces/namespace-select-filter.d.ts +3 -0
- package/dist/src/renderer/components/+namespaces/namespace.store.d.ts +55 -2
- package/dist/src/renderer/components/+workloads-deployments/deployment-scale-dialog.d.ts +1 -0
- package/dist/src/renderer/components/+workloads-pods/pod-details-affinities.d.ts +1 -2
- package/dist/src/renderer/components/+workloads-replicasets/replicaset-scale-dialog.d.ts +1 -0
- package/dist/src/renderer/components/+workloads-statefulsets/statefulset-scale-dialog.d.ts +1 -0
- package/dist/src/renderer/components/dock/create-resource.d.ts +2 -2
- package/dist/src/renderer/components/dock/dock.store.d.ts +20 -2
- package/dist/src/renderer/components/dock/edit-resource.d.ts +2 -2
- package/dist/src/renderer/components/dock/editor-panel.d.ts +11 -17
- package/dist/src/renderer/components/dock/install-chart.d.ts +6 -5
- package/dist/src/renderer/components/dock/terminal-window.d.ts +2 -3
- package/dist/src/renderer/components/dock/upgrade-chart.d.ts +2 -1
- package/dist/src/renderer/components/drawer/drawer.d.ts +1 -0
- package/dist/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.d.ts +0 -1
- package/dist/src/renderer/components/layout/__tests__/sidebar-cluster.test.d.ts +21 -0
- package/dist/src/renderer/components/layout/sidebar-cluster.d.ts +24 -0
- package/dist/src/renderer/components/layout/sidebar.d.ts +1 -4
- package/dist/src/renderer/components/list/list.d.ts +1 -1
- package/dist/src/renderer/components/menu/menu.d.ts +1 -0
- package/dist/src/renderer/components/monaco-editor/index.d.ts +23 -0
- package/dist/src/renderer/components/monaco-editor/monaco-editor.d.ts +93 -0
- package/dist/src/renderer/components/{dock/monaco-model-manager.d.ts → monaco-editor/monaco-themes.d.ts} +8 -21
- package/dist/src/renderer/components/monaco-editor/monaco-validators.d.ts +9 -0
- package/dist/src/renderer/components/switch/switcher.d.ts +1 -1
- package/dist/src/renderer/lens-app.d.ts +0 -1
- package/dist/src/renderer/port-forward/index.d.ts +1 -0
- package/dist/src/renderer/port-forward/port-forward-notify.d.ts +21 -0
- package/dist/src/renderer/theme.store.d.ts +4 -15
- package/package.json +1 -1
package/dist/src/main/index.d.ts
CHANGED
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
|
-
import "../common/system-ca";
|
|
22
21
|
import * as Mobx from "mobx";
|
|
23
22
|
import * as LensExtensionsCommonApi from "../extensions/common-api";
|
|
24
23
|
import * as LensExtensionsMainApi from "../extensions/main-api";
|
|
@@ -41,5 +41,5 @@ export declare class Kubectl {
|
|
|
41
41
|
ensureKubectl(): Promise<boolean>;
|
|
42
42
|
downloadKubectl(): Promise<void>;
|
|
43
43
|
protected writeInitScripts(): Promise<void>;
|
|
44
|
-
protected getDownloadMirror():
|
|
44
|
+
protected getDownloadMirror(): string;
|
|
45
45
|
}
|
|
@@ -19,4 +19,18 @@
|
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
21
|
import type { ProxyApiRequestArgs } from "./types";
|
|
22
|
+
import { Singleton } from "../../common/utils";
|
|
23
|
+
import type { ClusterId } from "../../common/cluster-types";
|
|
24
|
+
export declare class ShellRequestAuthenticator extends Singleton {
|
|
25
|
+
private tokens;
|
|
26
|
+
init(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Authenticates a single use token for creating a new shell
|
|
29
|
+
* @param clusterId The `ClusterId` for the shell
|
|
30
|
+
* @param tabId The ID for the shell
|
|
31
|
+
* @param token The value that is being presented as a one time authentication token
|
|
32
|
+
* @returns `true` if `token` was valid, false otherwise
|
|
33
|
+
*/
|
|
34
|
+
authenticate(clusterId: ClusterId, tabId: string, token: string): boolean;
|
|
35
|
+
}
|
|
22
36
|
export declare function shellApiRequest({ req, socket, head }: ProxyApiRequestArgs): void;
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
/// <reference types="node" />
|
|
22
22
|
/// <reference types="node/http" />
|
|
23
23
|
/// <reference types="got/dist/source/core/utils/timed-out" />
|
|
24
|
-
import type
|
|
24
|
+
import type WebSocket from "ws";
|
|
25
25
|
import * as k8s from "@kubernetes/client-node";
|
|
26
26
|
import type { KubeConfig } from "@kubernetes/client-node";
|
|
27
27
|
import type { Cluster } from "../cluster";
|
|
@@ -32,7 +32,7 @@ export declare class NodeShellSession extends ShellSession {
|
|
|
32
32
|
protected podId: string;
|
|
33
33
|
protected kc: KubeConfig;
|
|
34
34
|
protected get cwd(): string | undefined;
|
|
35
|
-
constructor(socket: WebSocket, cluster: Cluster, nodeName: string);
|
|
35
|
+
constructor(socket: WebSocket, cluster: Cluster, nodeName: string, terminalId: string);
|
|
36
36
|
open(): Promise<void>;
|
|
37
37
|
protected createNodeShellPod(): Promise<{
|
|
38
38
|
response: import("http").IncomingMessage;
|
|
@@ -20,28 +20,110 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import type { Cluster } from "../cluster";
|
|
22
22
|
import { Kubectl } from "../kubectl";
|
|
23
|
-
import type
|
|
23
|
+
import type WebSocket from "ws";
|
|
24
24
|
import * as pty from "node-pty";
|
|
25
25
|
export declare class ShellOpenError extends Error {
|
|
26
26
|
cause: Error;
|
|
27
27
|
constructor(message: string, cause: Error);
|
|
28
28
|
}
|
|
29
|
+
export declare enum WebSocketCloseEvent {
|
|
30
|
+
/**
|
|
31
|
+
* The connection successfully completed the purpose for which it was created.
|
|
32
|
+
*/
|
|
33
|
+
NormalClosure = 1000,
|
|
34
|
+
/**
|
|
35
|
+
* The endpoint is going away, either because of a server failure or because
|
|
36
|
+
* the browser is navigating away from the page that opened the connection.
|
|
37
|
+
*/
|
|
38
|
+
GoingAway = 1001,
|
|
39
|
+
/**
|
|
40
|
+
* The endpoint is terminating the connection due to a protocol error.
|
|
41
|
+
*/
|
|
42
|
+
ProtocolError = 1002,
|
|
43
|
+
/**
|
|
44
|
+
* The connection is being terminated because the endpoint received data of a
|
|
45
|
+
* type it cannot accept. (For example, a text-only endpoint received binary
|
|
46
|
+
* data.)
|
|
47
|
+
*/
|
|
48
|
+
UnsupportedData = 1003,
|
|
49
|
+
/**
|
|
50
|
+
* Indicates that no status code was provided even though one was expected.
|
|
51
|
+
*/
|
|
52
|
+
NoStatusReceived = 1005,
|
|
53
|
+
/**
|
|
54
|
+
* Indicates that a connection was closed abnormally (that is, with no close
|
|
55
|
+
* frame being sent) when a status code is expected.
|
|
56
|
+
*/
|
|
57
|
+
AbnormalClosure = 1006,
|
|
58
|
+
/**
|
|
59
|
+
* The endpoint is terminating the connection because a message was received
|
|
60
|
+
* that contained inconsistent data (e.g., non-UTF-8 data within a text message).
|
|
61
|
+
*/
|
|
62
|
+
InvalidFramePayloadData = 1007,
|
|
63
|
+
/**
|
|
64
|
+
* The endpoint is terminating the connection because it received a message
|
|
65
|
+
* that violates its policy. This is a generic status code, used when codes
|
|
66
|
+
* 1003 and 1009 are not suitable.
|
|
67
|
+
*/
|
|
68
|
+
PolicyViolation = 1008,
|
|
69
|
+
/**
|
|
70
|
+
* The endpoint is terminating the connection because a data frame was
|
|
71
|
+
* received that is too large.
|
|
72
|
+
*/
|
|
73
|
+
MessageTooBig = 1009,
|
|
74
|
+
/**
|
|
75
|
+
* The client is terminating the connection because it expected the server to
|
|
76
|
+
* negotiate one or more extension, but the server didn't.
|
|
77
|
+
*/
|
|
78
|
+
MissingExtension = 1010,
|
|
79
|
+
/**
|
|
80
|
+
* The server is terminating the connection because it encountered an
|
|
81
|
+
* unexpected condition that prevented it from fulfilling the request.
|
|
82
|
+
*/
|
|
83
|
+
InternalError = 1011,
|
|
84
|
+
/**
|
|
85
|
+
* The server is terminating the connection because it is restarting.
|
|
86
|
+
*/
|
|
87
|
+
ServiceRestart = 1012,
|
|
88
|
+
/**
|
|
89
|
+
* The server is terminating the connection due to a temporary condition,
|
|
90
|
+
* e.g. it is overloaded and is casting off some of its clients.
|
|
91
|
+
*/
|
|
92
|
+
TryAgainLater = 1013,
|
|
93
|
+
/**
|
|
94
|
+
* The server was acting as a gateway or proxy and received an invalid
|
|
95
|
+
* response from the upstream server. This is similar to 502 HTTP Status Code.
|
|
96
|
+
*/
|
|
97
|
+
BadGateway = 1014,
|
|
98
|
+
/**
|
|
99
|
+
* Indicates that the connection was closed due to a failure to perform a TLS
|
|
100
|
+
* handshake (e.g., the server certificate can't be verified).
|
|
101
|
+
*/
|
|
102
|
+
TlsHandshake = 1015
|
|
103
|
+
}
|
|
29
104
|
export declare abstract class ShellSession {
|
|
30
105
|
protected websocket: WebSocket;
|
|
31
106
|
protected cluster: Cluster;
|
|
32
107
|
abstract ShellType: string;
|
|
33
|
-
static shellEnvs
|
|
108
|
+
private static shellEnvs;
|
|
109
|
+
private static processes;
|
|
110
|
+
/**
|
|
111
|
+
* Kill all remaining shell backing processes. Should be called when about to
|
|
112
|
+
* quit
|
|
113
|
+
*/
|
|
114
|
+
static cleanup(): void;
|
|
34
115
|
protected kubectl: Kubectl;
|
|
35
116
|
protected running: boolean;
|
|
36
|
-
protected shellProcess: pty.IPty;
|
|
37
117
|
protected kubectlBinDirP: Promise<string>;
|
|
38
118
|
protected kubeconfigPathP: Promise<string>;
|
|
119
|
+
protected readonly terminalId: string;
|
|
39
120
|
protected abstract get cwd(): string | undefined;
|
|
40
|
-
|
|
41
|
-
|
|
121
|
+
protected ensureShellProcess(shell: string, args: string[], env: Record<string, string>, cwd: string): pty.IPty;
|
|
122
|
+
constructor(websocket: WebSocket, cluster: Cluster, terminalId: string);
|
|
123
|
+
protected openShellProcess(shell: string, args: string[], env: Record<string, any>): Promise<void>;
|
|
42
124
|
protected getPathEntries(): string[];
|
|
43
|
-
protected getCachedShellEnv(): Promise<Record<string,
|
|
125
|
+
protected getCachedShellEnv(): Promise<Record<string, string>>;
|
|
44
126
|
protected getShellEnv(): Promise<Record<string, any>>;
|
|
45
|
-
protected exit(code?:
|
|
127
|
+
protected exit(code?: WebSocketCloseEvent): void;
|
|
46
128
|
protected sendResponse(msg: string): void;
|
|
47
129
|
}
|
|
@@ -19,6 +19,6 @@
|
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
21
|
import { fileNameMigration } from "./file-name-migration";
|
|
22
|
-
export { fileNameMigration };
|
|
22
|
+
export { fileNameMigration, };
|
|
23
23
|
declare const _default: import("conf/dist/source/types").Migrations<any>;
|
|
24
24
|
export default _default;
|
package/dist/src/preload.d.ts
CHANGED
|
@@ -41,26 +41,25 @@ declare enum TerminalColor {
|
|
|
41
41
|
export declare type TerminalApiQuery = Record<string, string> & {
|
|
42
42
|
id: string;
|
|
43
43
|
node?: string;
|
|
44
|
-
type?: string
|
|
44
|
+
type?: string;
|
|
45
45
|
};
|
|
46
46
|
export declare class TerminalApi extends WebSocketApi {
|
|
47
|
-
protected
|
|
47
|
+
protected query: TerminalApiQuery;
|
|
48
48
|
protected size: {
|
|
49
49
|
Width: number;
|
|
50
50
|
Height: number;
|
|
51
51
|
};
|
|
52
52
|
onReady: EventEmitter<[]>;
|
|
53
53
|
isReady: boolean;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
connect(): void;
|
|
54
|
+
constructor(query: TerminalApiQuery);
|
|
55
|
+
connect(): Promise<void>;
|
|
57
56
|
destroy(): void;
|
|
58
57
|
removeAllListeners(): void;
|
|
59
58
|
protected _onReady(data: string): boolean;
|
|
60
59
|
reconnect(): void;
|
|
61
60
|
sendCommand(key: string, channel?: TerminalChannels): void;
|
|
62
61
|
sendTerminalSize(cols: number, rows: number): void;
|
|
63
|
-
protected parseMessage(data: string):
|
|
62
|
+
protected parseMessage(data: string): string;
|
|
64
63
|
protected _onOpen(evt: Event): void;
|
|
65
64
|
protected _onClose(evt: CloseEvent): void;
|
|
66
65
|
protected emitStatus(data: string, options?: {
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
21
|
/// <reference types="lodash" />
|
|
22
|
-
import "./add-cluster.scss";
|
|
23
22
|
import type { KubeConfig } from "@kubernetes/client-node";
|
|
24
23
|
import React from "react";
|
|
25
24
|
interface Option {
|
|
@@ -28,9 +28,9 @@ interface Props {
|
|
|
28
28
|
}
|
|
29
29
|
export declare class HelmChartDetails extends Component<Props> {
|
|
30
30
|
chartVersions: HelmChart[];
|
|
31
|
-
selectedChart
|
|
32
|
-
readme
|
|
33
|
-
error
|
|
31
|
+
selectedChart?: HelmChart;
|
|
32
|
+
readme?: string;
|
|
33
|
+
error?: string;
|
|
34
34
|
private abortController?;
|
|
35
35
|
constructor(props: Props);
|
|
36
36
|
componentWillUnmount(): void;
|
|
@@ -26,9 +26,9 @@ interface Props extends MenuActionsProps {
|
|
|
26
26
|
hideDetails?(): void;
|
|
27
27
|
}
|
|
28
28
|
export declare class HelmReleaseMenu extends React.Component<Props> {
|
|
29
|
-
remove()
|
|
30
|
-
upgrade()
|
|
31
|
-
rollback()
|
|
29
|
+
remove: () => Promise<void>;
|
|
30
|
+
upgrade: () => void;
|
|
31
|
+
rollback: () => void;
|
|
32
32
|
renderContent(): JSX.Element;
|
|
33
33
|
render(): JSX.Element;
|
|
34
34
|
}
|
|
@@ -26,11 +26,17 @@ export declare type CatalogAddButtonProps = {
|
|
|
26
26
|
};
|
|
27
27
|
export declare class CatalogAddButton extends React.Component<CatalogAddButtonProps> {
|
|
28
28
|
protected isOpen: boolean;
|
|
29
|
-
|
|
29
|
+
menuItems: Map<string, CatalogEntityAddMenu[]>;
|
|
30
30
|
constructor(props: CatalogAddButtonProps);
|
|
31
31
|
componentDidMount(): void;
|
|
32
|
+
componentDidUpdate(prevProps: CatalogAddButtonProps): void;
|
|
33
|
+
get categories(): CatalogCategory[];
|
|
34
|
+
updateMenuItems(): void;
|
|
35
|
+
updateCategoryItems: (category: CatalogCategory) => void;
|
|
36
|
+
getCategoryFilteredItems: (category: CatalogCategory) => CatalogEntityAddMenu[];
|
|
32
37
|
onOpen(): void;
|
|
33
38
|
onClose(): void;
|
|
34
39
|
onButtonClick(): void;
|
|
40
|
+
get items(): CatalogEntityAddMenu[];
|
|
35
41
|
render(): JSX.Element;
|
|
36
42
|
}
|
|
@@ -24,6 +24,9 @@ import type { SelectOption, SelectProps } from "../select";
|
|
|
24
24
|
export declare class NamespaceSelectFilter extends React.Component<SelectProps> {
|
|
25
25
|
static isMultiSelection: import("mobx").IObservableValue<boolean>;
|
|
26
26
|
static isMenuOpen: import("mobx").IObservableValue<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Only updated on every open
|
|
29
|
+
*/
|
|
27
30
|
private selected;
|
|
28
31
|
private didToggle;
|
|
29
32
|
constructor(props: SelectProps);
|
|
@@ -30,18 +30,71 @@ export declare class NamespaceStore extends KubeObjectStore<Namespace> {
|
|
|
30
30
|
onContextChange(callback: (namespaces: string[]) => void, opts?: IReactionOptions): IReactionDisposer;
|
|
31
31
|
private autoLoadAllowedNamespaces;
|
|
32
32
|
private get initialNamespaces();
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* @private
|
|
35
|
+
* The current value (list of namespaces names) in the storage layer
|
|
36
|
+
*/
|
|
37
|
+
private get selectedNamespaces();
|
|
34
38
|
get allowedNamespaces(): string[];
|
|
39
|
+
/**
|
|
40
|
+
* The list of selected namespace names (for filtering)
|
|
41
|
+
*/
|
|
35
42
|
get contextNamespaces(): string[];
|
|
43
|
+
/**
|
|
44
|
+
* The set of select namespace names (for filtering)
|
|
45
|
+
*/
|
|
46
|
+
get selectedNames(): Set<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Is true when the the set of namespace names selected is implicitly all
|
|
49
|
+
*
|
|
50
|
+
* Namely, this will be true if the user has deselected all namespaces from
|
|
51
|
+
* the filter or if the user has clicked the "All Namespaces" option
|
|
52
|
+
*/
|
|
53
|
+
get areAllSelectedImplicitly(): boolean;
|
|
36
54
|
subscribe(): typeof noop;
|
|
37
55
|
protected loadItems(params: KubeObjectStoreLoadingParams<Namespace>): Promise<Namespace[]>;
|
|
38
56
|
selectNamespaces(namespace: string | string[]): void;
|
|
39
57
|
clearSelected(namespaces?: string | string[]): void;
|
|
58
|
+
/**
|
|
59
|
+
* Checks if namespace names are selected for filtering
|
|
60
|
+
* @param namespaces One or several names of namespaces to check if they are selected
|
|
61
|
+
* @returns `true` if all the provided names are selected
|
|
62
|
+
*/
|
|
40
63
|
hasContext(namespaces: string | string[]): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Is `true` if all available namespaces are selected, otherwise `false`
|
|
66
|
+
*/
|
|
41
67
|
get hasAllContexts(): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Acts like `toggleSingle` but can work on several at a time
|
|
70
|
+
* @param namespaces One or many names of namespaces to select
|
|
71
|
+
*/
|
|
42
72
|
toggleContext(namespaces: string | string[]): void;
|
|
73
|
+
/**
|
|
74
|
+
* Toggles the selection state of `namespace`. Namely, if it was previously
|
|
75
|
+
* specifically or implicitly selected then after this call it will be
|
|
76
|
+
* explicitly deselected.
|
|
77
|
+
* @param namespace The name of a namespace
|
|
78
|
+
*/
|
|
43
79
|
toggleSingle(namespace: string): void;
|
|
44
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Makes the given namespace the sole selected namespace
|
|
82
|
+
*/
|
|
83
|
+
selectSingle(namespace: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Selects all available namespaces.
|
|
86
|
+
*
|
|
87
|
+
* Note: If new namespaces appear in the future those will be selected too
|
|
88
|
+
*/
|
|
89
|
+
selectAll(): void;
|
|
90
|
+
/**
|
|
91
|
+
* This function selects all namespaces implicitly.
|
|
92
|
+
*
|
|
93
|
+
* NOTE: does not toggle any namespaces
|
|
94
|
+
* @param selectAll NOT USED
|
|
95
|
+
* @deprecated Use `NamespaceStore.selectAll` instead.
|
|
96
|
+
*/
|
|
97
|
+
toggleAll(selectAll?: boolean): void;
|
|
45
98
|
remove(item: Namespace): Promise<void>;
|
|
46
99
|
}
|
|
47
100
|
export declare const namespaceStore: NamespaceStore;
|
|
@@ -42,6 +42,7 @@ export declare class DeploymentScaleDialog extends Component<Props> {
|
|
|
42
42
|
onClose: () => void;
|
|
43
43
|
onChange: (evt: React.ChangeEvent, value: number) => void;
|
|
44
44
|
scale: () => Promise<void>;
|
|
45
|
+
private readonly scaleMin;
|
|
45
46
|
desiredReplicasUp: () => void;
|
|
46
47
|
desiredReplicasDown: () => void;
|
|
47
48
|
renderContents(): JSX.Element;
|
|
@@ -18,9 +18,8 @@
|
|
|
18
18
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
|
-
import "./pod-details-affinities.scss";
|
|
22
21
|
import React from "react";
|
|
23
|
-
import type {
|
|
22
|
+
import type { DaemonSet, Deployment, Job, Pod, ReplicaSet, StatefulSet } from "../../../common/k8s-api/endpoints";
|
|
24
23
|
interface Props {
|
|
25
24
|
workload: Pod | Deployment | DaemonSet | StatefulSet | ReplicaSet | Job;
|
|
26
25
|
}
|
|
@@ -42,6 +42,7 @@ export declare class ReplicaSetScaleDialog extends Component<Props> {
|
|
|
42
42
|
onChange: (evt: React.ChangeEvent, value: number) => void;
|
|
43
43
|
get scaleMax(): number;
|
|
44
44
|
scale: () => Promise<void>;
|
|
45
|
+
private readonly scaleMin;
|
|
45
46
|
desiredReplicasUp: () => void;
|
|
46
47
|
desiredReplicasDown: () => void;
|
|
47
48
|
renderContents(): JSX.Element;
|
|
@@ -42,6 +42,7 @@ export declare class StatefulSetScaleDialog extends Component<Props> {
|
|
|
42
42
|
onChange: (evt: React.ChangeEvent, value: number) => void;
|
|
43
43
|
get scaleMax(): number;
|
|
44
44
|
scale: () => Promise<void>;
|
|
45
|
+
private readonly scaleMin;
|
|
45
46
|
desiredReplicasUp: () => void;
|
|
46
47
|
desiredReplicasDown: () => void;
|
|
47
48
|
renderContents(): JSX.Element;
|
|
@@ -23,7 +23,6 @@ import React from "react";
|
|
|
23
23
|
import { GroupSelectOption, SelectOption } from "../select";
|
|
24
24
|
import type { DockTab } from "./dock.store";
|
|
25
25
|
interface Props {
|
|
26
|
-
className?: string;
|
|
27
26
|
tab: DockTab;
|
|
28
27
|
}
|
|
29
28
|
export declare class CreateResource extends React.Component<Props> {
|
|
@@ -37,7 +36,8 @@ export declare class CreateResource extends React.Component<Props> {
|
|
|
37
36
|
get tabId(): string;
|
|
38
37
|
get data(): string;
|
|
39
38
|
get currentTemplate(): SelectOption<any>;
|
|
40
|
-
onChange: (value: string
|
|
39
|
+
onChange: (value: string) => void;
|
|
40
|
+
onError: (error: Error | string) => void;
|
|
41
41
|
onSelectTemplate: (item: SelectOption) => void;
|
|
42
42
|
create: () => Promise<undefined>;
|
|
43
43
|
renderControls(): JSX.Element;
|
|
@@ -73,6 +73,24 @@ export interface DockStorageState {
|
|
|
73
73
|
selectedTabId?: TabId;
|
|
74
74
|
isOpen?: boolean;
|
|
75
75
|
}
|
|
76
|
+
export interface DockTabChangeEvent {
|
|
77
|
+
tab: DockTab;
|
|
78
|
+
tabId: TabId;
|
|
79
|
+
prevTab?: DockTab;
|
|
80
|
+
}
|
|
81
|
+
export interface DockTabChangeEventOptions extends IReactionOptions {
|
|
82
|
+
/**
|
|
83
|
+
* filter: by dockStore.selectedTab.kind == tabKind
|
|
84
|
+
*/
|
|
85
|
+
tabKind?: TabKind;
|
|
86
|
+
/**
|
|
87
|
+
* filter: dock and selected tab should be visible (default: true)
|
|
88
|
+
*/
|
|
89
|
+
dockIsVisible?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface DockTabCloseEvent {
|
|
92
|
+
tabId: TabId;
|
|
93
|
+
}
|
|
76
94
|
export declare class DockStore implements DockStorageState {
|
|
77
95
|
constructor();
|
|
78
96
|
readonly minHeight = 100;
|
|
@@ -94,9 +112,9 @@ export declare class DockStore implements DockStorageState {
|
|
|
94
112
|
get maxHeight(): number;
|
|
95
113
|
protected adjustHeight(): void;
|
|
96
114
|
onResize(callback: () => void, options?: IReactionOptions): import("mobx").IReactionDisposer;
|
|
97
|
-
|
|
115
|
+
onTabClose(callback: (evt: DockTabCloseEvent) => void, options?: IReactionOptions): import("mobx").IReactionDisposer;
|
|
116
|
+
onTabChange(callback: (evt: DockTabChangeEvent) => void, options?: DockTabChangeEventOptions): import("mobx").IReactionDisposer;
|
|
98
117
|
hasTabs(): boolean;
|
|
99
|
-
usesMonacoEditor(tab: DockTab): boolean;
|
|
100
118
|
open(fullSize?: boolean): void;
|
|
101
119
|
close(): void;
|
|
102
120
|
toggle(): void;
|
|
@@ -23,7 +23,6 @@ import React from "react";
|
|
|
23
23
|
import type { DockTab } from "./dock.store";
|
|
24
24
|
import type { KubeObject } from "../../../common/k8s-api/kube-object";
|
|
25
25
|
interface Props {
|
|
26
|
-
className?: string;
|
|
27
26
|
tab: DockTab;
|
|
28
27
|
}
|
|
29
28
|
export declare class EditResource extends React.Component<Props> {
|
|
@@ -34,7 +33,8 @@ export declare class EditResource extends React.Component<Props> {
|
|
|
34
33
|
get resource(): KubeObject | undefined;
|
|
35
34
|
get draft(): string;
|
|
36
35
|
saveDraft(draft: string | object): void;
|
|
37
|
-
onChange: (draft: string
|
|
36
|
+
onChange: (draft: string) => void;
|
|
37
|
+
onError: (error?: Error | string) => void;
|
|
38
38
|
save: () => Promise<JSX.Element>;
|
|
39
39
|
render(): JSX.Element;
|
|
40
40
|
}
|
|
@@ -18,27 +18,21 @@
|
|
|
18
18
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
|
-
import { monaco } from "react-monaco-editor";
|
|
22
21
|
import React from "react";
|
|
23
22
|
import { TabId } from "./dock.store";
|
|
24
|
-
import "monaco-editor";
|
|
25
|
-
interface
|
|
26
|
-
className?: string;
|
|
23
|
+
import { MonacoEditor, MonacoEditorProps } from "../monaco-editor";
|
|
24
|
+
export interface EditorPanelProps {
|
|
27
25
|
tabId: TabId;
|
|
28
|
-
value
|
|
29
|
-
|
|
26
|
+
value: string;
|
|
27
|
+
className?: string;
|
|
28
|
+
autoFocus?: boolean;
|
|
29
|
+
onChange: MonacoEditorProps["onChange"];
|
|
30
|
+
onError?: MonacoEditorProps["onError"];
|
|
30
31
|
}
|
|
31
|
-
export declare class EditorPanel extends React.Component<
|
|
32
|
-
|
|
33
|
-
editor
|
|
34
|
-
|
|
35
|
-
constructor(props: Props);
|
|
32
|
+
export declare class EditorPanel extends React.Component<EditorPanelProps> {
|
|
33
|
+
static defaultProps: object;
|
|
34
|
+
editor?: MonacoEditor;
|
|
35
|
+
constructor(props: EditorPanelProps);
|
|
36
36
|
componentDidMount(): void;
|
|
37
|
-
editorDidMount: (editor: monaco.editor.IStandaloneCodeEditor) => void;
|
|
38
|
-
validate(value: string): void;
|
|
39
|
-
onTabChange: () => void;
|
|
40
|
-
onResize: () => void;
|
|
41
|
-
onChange: (value: string) => void;
|
|
42
37
|
render(): JSX.Element;
|
|
43
38
|
}
|
|
44
|
-
export {};
|
|
@@ -35,12 +35,13 @@ export declare class InstallChart extends Component<Props> {
|
|
|
35
35
|
get tabId(): string;
|
|
36
36
|
get versions(): string[];
|
|
37
37
|
get releaseDetails(): import("../../../common/k8s-api/endpoints/helm-releases.api").IReleaseUpdateDetails;
|
|
38
|
-
viewRelease()
|
|
38
|
+
viewRelease: () => void;
|
|
39
39
|
save(data: Partial<IChartInstallData>): void;
|
|
40
|
-
onVersionChange(option: SelectOption)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
onVersionChange: (option: SelectOption) => void;
|
|
41
|
+
onChange: (values: string) => void;
|
|
42
|
+
onError: (error: Error | string) => void;
|
|
43
|
+
onNamespaceChange: (opt: SelectOption) => void;
|
|
44
|
+
onReleaseNameChange: (name: string) => void;
|
|
44
45
|
install: () => Promise<JSX.Element>;
|
|
45
46
|
render(): JSX.Element;
|
|
46
47
|
}
|
|
@@ -20,17 +20,16 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import "./terminal-window.scss";
|
|
22
22
|
import React from "react";
|
|
23
|
-
import type { DockTab } from "./dock.store";
|
|
24
23
|
import type { Terminal } from "./terminal";
|
|
24
|
+
import { DockTab, TabId } from "./dock.store";
|
|
25
25
|
interface Props {
|
|
26
|
-
className?: string;
|
|
27
26
|
tab: DockTab;
|
|
28
27
|
}
|
|
29
28
|
export declare class TerminalWindow extends React.Component<Props> {
|
|
30
29
|
elem: HTMLElement;
|
|
31
30
|
terminal: Terminal;
|
|
32
31
|
componentDidMount(): void;
|
|
33
|
-
activate(tabId
|
|
32
|
+
activate(tabId: TabId): void;
|
|
34
33
|
render(): JSX.Element;
|
|
35
34
|
}
|
|
36
35
|
export {};
|
|
@@ -38,7 +38,8 @@ export declare class UpgradeChart extends React.Component<Props> {
|
|
|
38
38
|
get release(): HelmRelease;
|
|
39
39
|
get value(): string;
|
|
40
40
|
loadVersions(): Promise<void>;
|
|
41
|
-
onChange: (value: string
|
|
41
|
+
onChange: (value: string) => void;
|
|
42
|
+
onError: (error: Error | string) => void;
|
|
42
43
|
upgrade: () => Promise<JSX.Element>;
|
|
43
44
|
formatVersionLabel: ({ value }: SelectOption<IChartVersion>) => string;
|
|
44
45
|
render(): JSX.Element;
|
|
@@ -46,6 +46,7 @@ export declare class Drawer extends React.Component<DrawerProps> {
|
|
|
46
46
|
state: State;
|
|
47
47
|
componentDidMount(): void;
|
|
48
48
|
componentWillUnmount(): void;
|
|
49
|
+
fixUpTripleClick: (ev: MouseEvent) => void;
|
|
49
50
|
saveScrollPos: () => void;
|
|
50
51
|
restoreScrollPos: () => void;
|
|
51
52
|
onEscapeKey: (evt: KeyboardEvent) => void;
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
19
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
|
-
import "./kubeconfig-dialog.scss";
|
|
22
21
|
import React from "react";
|
|
23
22
|
import type { ServiceAccount } from "../../../common/k8s-api/endpoints";
|
|
24
23
|
import { DialogProps } from "../dialog";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021 OpenLens Authors
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
|
+
* this software and associated documentation files (the "Software"), to deal in
|
|
6
|
+
* the Software without restriction, including without limitation the rights to
|
|
7
|
+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
8
|
+
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
9
|
+
* subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
16
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
17
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
18
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
|
+
*/
|
|
21
|
+
import "@testing-library/jest-dom/extend-expect";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021 OpenLens Authors
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
|
+
* this software and associated documentation files (the "Software"), to deal in
|
|
6
|
+
* the Software without restriction, including without limitation the rights to
|
|
7
|
+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
8
|
+
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
9
|
+
* subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
16
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
17
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
18
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
|
+
*/
|
|
21
|
+
import type { CatalogEntity } from "../../api/catalog-entity";
|
|
22
|
+
export declare function SidebarCluster({ clusterEntity }: {
|
|
23
|
+
clusterEntity: CatalogEntity;
|
|
24
|
+
}): JSX.Element;
|