@device-management-toolkit/ui-toolkit-angular 9.1.4

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.
@@ -0,0 +1,186 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, output, Component, EventEmitter, ViewEncapsulation } from '@angular/core';
3
+ import { Terminal } from '@xterm/xterm';
4
+ import { AmtTerminal, TerminalDataProcessor, Protocol, AMTRedirector } from '@device-management-toolkit/ui-toolkit/core';
5
+
6
+ /*********************************************************************
7
+ * Copyright (c) Intel Corporation 2023
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ **********************************************************************/
10
+ class TerminalComponent {
11
+ constructor() {
12
+ // TODO: Notes from signal input migration:
13
+ // Input is initialized to `undefined` but type does not allow this value.
14
+ // This worked with `@Input` because your project uses `--strictPropertyInitialization=false`.
15
+ this.term = input(undefined);
16
+ this.handleKeyPress = output();
17
+ }
18
+ ngOnInit() {
19
+ const term = this.term();
20
+ if (term == null)
21
+ throw new Error('Terminal not found');
22
+ this.container = document.getElementById('terminal');
23
+ if (this.container == null)
24
+ throw new Error('Container not found');
25
+ term.open(this.container);
26
+ term.onKey(({ key, domEvent }) => {
27
+ domEvent.preventDefault();
28
+ if (domEvent.ctrlKey && domEvent.key === 'c') {
29
+ const termValue = this.term();
30
+ if (termValue.hasSelection()) {
31
+ navigator.clipboard
32
+ .writeText(termValue.getSelection())
33
+ .then(() => { })
34
+ .catch((err) => {
35
+ console.error('Failed to copy to clipboard', err);
36
+ });
37
+ }
38
+ else {
39
+ // Send interrupt signal (SIGINT) to terminal
40
+ termValue.write('\x03'); // Sends Ctrl + C (ASCII code 03)
41
+ }
42
+ // Prevent the default browser behavior (like opening menus)
43
+ return false;
44
+ }
45
+ if (domEvent.ctrlKey && domEvent.key === 'v') {
46
+ navigator.clipboard
47
+ .readText()
48
+ .then((text) => {
49
+ this.handleKeyPress.emit(text);
50
+ })
51
+ .catch((err) => {
52
+ console.error('Failed to read clipboard', err);
53
+ });
54
+ return false;
55
+ }
56
+ this.handleKeyPress.emit(key);
57
+ });
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TerminalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.13", type: TerminalComponent, isStandalone: true, selector: "amt-terminal", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { handleKeyPress: "handleKeyPress" }, ngImport: i0, template: "<div id=\"terminal\" class=\"xtermDisplay\" style=\"width: fit-content\"></div>\n" }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TerminalComponent, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: 'amt-terminal', template: "<div id=\"terminal\" class=\"xtermDisplay\" style=\"width: fit-content\"></div>\n" }]
65
+ }] });
66
+
67
+ /*********************************************************************
68
+ * Copyright (c) Intel Corporation 2023
69
+ * SPDX-License-Identifier: Apache-2.0
70
+ **********************************************************************/
71
+ class SOLComponent {
72
+ constructor() {
73
+ this.deviceState = 0;
74
+ this.deviceStatus = output();
75
+ this.deviceConnection = input(new EventEmitter());
76
+ this.mpsServer = input('');
77
+ this.authToken = input('');
78
+ this.deviceId = input('');
79
+ }
80
+ ngOnInit() {
81
+ this.deviceConnection().subscribe((data) => {
82
+ if (data) {
83
+ this.init();
84
+ }
85
+ else {
86
+ this.stopSol();
87
+ }
88
+ });
89
+ }
90
+ ngAfterViewInit() {
91
+ this.init();
92
+ }
93
+ init() {
94
+ this.instantiate();
95
+ setTimeout(() => {
96
+ this.startSol();
97
+ }, 4000);
98
+ }
99
+ instantiate() {
100
+ this.terminal = new AmtTerminal();
101
+ this.dataProcessor = new TerminalDataProcessor(this.terminal);
102
+ const config = {
103
+ mode: 'sol',
104
+ protocol: Protocol.SOL,
105
+ fr: new FileReader(),
106
+ host: this.deviceId(),
107
+ port: 16994,
108
+ user: '',
109
+ pass: '',
110
+ tls: 0,
111
+ tls1only: 0,
112
+ authToken: this.authToken(),
113
+ server: this.mpsServer()
114
+ };
115
+ this.redirector = new AMTRedirector(config);
116
+ this.terminal.onSend = this.redirector.send.bind(this.redirector);
117
+ this.redirector.onNewState = this.terminal.StateChange.bind(this.terminal);
118
+ this.redirector.onStateChanged = this.onTerminalStateChange.bind(this);
119
+ this.redirector.onProcessData = this.dataProcessor.processData.bind(this);
120
+ this.dataProcessor.processDataToXterm = this.handleWriteToXterm.bind(this);
121
+ this.dataProcessor.clearTerminal = this.handleClearTerminal.bind(this);
122
+ this.term = new Terminal({
123
+ rows: 30,
124
+ cols: 100,
125
+ cursorStyle: 'block',
126
+ fontWeight: 'bold'
127
+ });
128
+ }
129
+ handleKeyPress(domEvent) {
130
+ this.terminal?.TermSendKeys(domEvent);
131
+ }
132
+ handleClearTerminal() {
133
+ this.term?.reset();
134
+ }
135
+ handleWriteToXterm(str) {
136
+ this.term?.write(str);
137
+ }
138
+ onTerminalStateChange(redirector, state) {
139
+ this.deviceStatus.emit(state);
140
+ this.deviceState = state;
141
+ }
142
+ startSol() {
143
+ if (this.redirector !== null) {
144
+ this.redirector.start(WebSocket);
145
+ }
146
+ }
147
+ stopSol() {
148
+ if (this.redirector !== null) {
149
+ this.redirector.stop();
150
+ this.handleClearTerminal();
151
+ this.term?.dispose();
152
+ this.cleanup();
153
+ }
154
+ }
155
+ cleanup() {
156
+ ;
157
+ this.terminal = null;
158
+ this.redirector = null;
159
+ this.dataProcessor = null;
160
+ this.term = null;
161
+ }
162
+ ngOnDestroy() {
163
+ this.stopSol();
164
+ }
165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SOLComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
166
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: SOLComponent, isStandalone: true, selector: "amt-sol", inputs: { deviceConnection: { classPropertyName: "deviceConnection", publicName: "deviceConnection", isSignal: true, isRequired: false, transformFunction: null }, mpsServer: { classPropertyName: "mpsServer", publicName: "mpsServer", isSignal: true, isRequired: false, transformFunction: null }, authToken: { classPropertyName: "authToken", publicName: "authToken", isSignal: true, isRequired: false, transformFunction: null }, deviceId: { classPropertyName: "deviceId", publicName: "deviceId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deviceStatus: "deviceStatus" }, ngImport: i0, template: "<div class=\"container\">\n @if (deviceState === 3) {\n <amt-terminal [term]=\"term\" (handleKeyPress)=\"handleKeyPress($event)\"></amt-terminal>\n }\n</div>\n", styles: [".container{display:block;text-align:center}.xtermDisplay{display:inline-block}\n"], dependencies: [{ kind: "component", type: TerminalComponent, selector: "amt-terminal", inputs: ["term"], outputs: ["handleKeyPress"] }], encapsulation: i0.ViewEncapsulation.None }); }
167
+ }
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SOLComponent, decorators: [{
169
+ type: Component,
170
+ args: [{ selector: 'amt-sol', encapsulation: ViewEncapsulation.None, imports: [TerminalComponent], template: "<div class=\"container\">\n @if (deviceState === 3) {\n <amt-terminal [term]=\"term\" (handleKeyPress)=\"handleKeyPress($event)\"></amt-terminal>\n }\n</div>\n", styles: [".container{display:block;text-align:center}.xtermDisplay{display:inline-block}\n"] }]
171
+ }] });
172
+
173
+ /*********************************************************************
174
+ * Copyright (c) Intel Corporation 2023
175
+ * SPDX-License-Identifier: Apache-2.0
176
+ **********************************************************************/
177
+ /*
178
+ * Public API Surface of sol
179
+ */
180
+
181
+ /**
182
+ * Generated bundle index. Do not edit.
183
+ */
184
+
185
+ export { SOLComponent };
186
+ //# sourceMappingURL=device-management-toolkit-ui-toolkit-angular-sol.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-management-toolkit-ui-toolkit-angular-sol.mjs","sources":["../../sol/src/terminal/terminal.component.ts","../../sol/src/terminal/terminal.component.html","../../sol/src/sol.component.ts","../../sol/src/sol.component.html","../../sol/src/public_api.ts","../../sol/src/device-management-toolkit-ui-toolkit-angular-sol.ts"],"sourcesContent":["/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\nimport { Component, OnInit, input, output } from '@angular/core'\nimport { Terminal } from '@xterm/xterm'\n@Component({\n selector: 'amt-terminal',\n templateUrl: './terminal.component.html'\n})\nexport class TerminalComponent implements OnInit {\n // TODO: Notes from signal input migration:\n // Input is initialized to `undefined` but type does not allow this value.\n // This worked with `@Input` because your project uses `--strictPropertyInitialization=false`.\n readonly term = input<Terminal>(undefined!)\n readonly handleKeyPress = output<any>()\n container!: HTMLElement | null\n ngOnInit(): void {\n const term = this.term()\n if (term == null) throw new Error('Terminal not found')\n this.container = document.getElementById('terminal')\n if (this.container == null) throw new Error('Container not found')\n term.open(this.container)\n term.onKey(({ key, domEvent }) => {\n domEvent.preventDefault()\n if (domEvent.ctrlKey && domEvent.key === 'c') {\n const termValue = this.term()\n if (termValue.hasSelection()) {\n navigator.clipboard\n .writeText(termValue.getSelection())\n .then(() => {})\n .catch((err) => {\n console.error('Failed to copy to clipboard', err)\n })\n } else {\n // Send interrupt signal (SIGINT) to terminal\n termValue.write('\\x03') // Sends Ctrl + C (ASCII code 03)\n }\n // Prevent the default browser behavior (like opening menus)\n return false\n }\n if (domEvent.ctrlKey && domEvent.key === 'v') {\n navigator.clipboard\n .readText()\n .then((text) => {\n this.handleKeyPress.emit(text)\n })\n .catch((err) => {\n console.error('Failed to read clipboard', err)\n })\n return false\n }\n this.handleKeyPress.emit(key)\n })\n }\n}\n","<div id=\"terminal\" class=\"xtermDisplay\" style=\"width: fit-content\"></div>\n","/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\nimport {\n Component,\n OnInit,\n ViewEncapsulation,\n OnDestroy,\n AfterViewInit,\n input,\n output,\n EventEmitter\n} from '@angular/core'\nimport { Terminal } from '@xterm/xterm'\nimport {\n AmtTerminal,\n AMTRedirector,\n TerminalDataProcessor,\n RedirectorConfig,\n Protocol\n} from '@device-management-toolkit/ui-toolkit/core'\nimport { TerminalComponent } from './terminal/terminal.component'\n\n@Component({\n selector: 'amt-sol',\n templateUrl: './sol.component.html',\n styleUrls: ['./sol.component.css'],\n encapsulation: ViewEncapsulation.None,\n imports: [TerminalComponent]\n})\nexport class SOLComponent implements OnInit, OnDestroy, AfterViewInit {\n terminal: AmtTerminal\n container!: any\n term: Terminal\n redirector: AMTRedirector\n dataProcessor: TerminalDataProcessor\n deviceState = 0\n readonly deviceStatus = output<number>()\n readonly deviceConnection = input<EventEmitter<boolean>>(new EventEmitter<boolean>())\n public mpsServer = input('')\n public authToken = input('')\n public deviceId = input('')\n\n ngOnInit(): void {\n this.deviceConnection().subscribe((data: boolean) => {\n if (data) {\n this.init()\n } else {\n this.stopSol()\n }\n })\n }\n\n ngAfterViewInit(): void {\n this.init()\n }\n\n init(): void {\n this.instantiate()\n setTimeout(() => {\n this.startSol()\n }, 4000)\n }\n\n instantiate(): void {\n this.terminal = new AmtTerminal()\n this.dataProcessor = new TerminalDataProcessor(this.terminal)\n const config: RedirectorConfig = {\n mode: 'sol',\n protocol: Protocol.SOL,\n fr: new FileReader(),\n host: this.deviceId(),\n port: 16994,\n user: '',\n pass: '',\n tls: 0,\n tls1only: 0,\n authToken: this.authToken(),\n server: this.mpsServer()\n }\n this.redirector = new AMTRedirector(config)\n this.terminal.onSend = this.redirector.send.bind(this.redirector)\n this.redirector.onNewState = this.terminal.StateChange.bind(this.terminal)\n this.redirector.onStateChanged = this.onTerminalStateChange.bind(this)\n this.redirector.onProcessData = this.dataProcessor.processData.bind(this)\n this.dataProcessor.processDataToXterm = this.handleWriteToXterm.bind(this)\n this.dataProcessor.clearTerminal = this.handleClearTerminal.bind(this)\n this.term = new Terminal({\n rows: 30,\n cols: 100,\n cursorStyle: 'block',\n fontWeight: 'bold'\n })\n }\n\n handleKeyPress(domEvent: any): void {\n this.terminal?.TermSendKeys(domEvent)\n }\n\n handleClearTerminal(): void {\n this.term?.reset()\n }\n\n handleWriteToXterm(str: string): void {\n this.term?.write(str)\n }\n\n onTerminalStateChange(redirector: AMTRedirector, state: number): void {\n this.deviceStatus.emit(state)\n this.deviceState = state\n }\n\n startSol(): void {\n if (this.redirector !== null) {\n this.redirector.start(WebSocket)\n }\n }\n\n stopSol(): void {\n if (this.redirector !== null) {\n this.redirector.stop()\n this.handleClearTerminal()\n this.term?.dispose()\n this.cleanup()\n }\n }\n\n cleanup(): void {\n ;(this.terminal as any) = null\n ;(this.redirector as any) = null\n ;(this.dataProcessor as any) = null\n ;(this.term as any) = null\n }\n\n ngOnDestroy(): void {\n this.stopSol()\n }\n}\n","<div class=\"container\">\n @if (deviceState === 3) {\n <amt-terminal [term]=\"term\" (handleKeyPress)=\"handleKeyPress($event)\"></amt-terminal>\n }\n</div>\n","/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\n/*\n * Public API Surface of sol\n */\n\nexport * from './sol.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}