@device-management-toolkit/ui-toolkit-angular 11.1.9 → 12.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"device-management-toolkit-ui-toolkit-angular-kvm.mjs","sources":["../../kvm/src/kvm.component.ts","../../kvm/src/kvm.component.html","../../kvm/src/public_api.ts","../../kvm/src/device-management-toolkit-ui-toolkit-angular-kvm.ts"],"sourcesContent":["/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n viewChild,\n input,\n output,\n inject,\n Renderer2,\n effect,\n signal,\n DestroyRef\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport {\n AMTDesktop,\n AMTKvmDataRedirector,\n RedirectorConfig,\n DataProcessor,\n IDataProcessor,\n KeyBoardHelper,\n MouseHelper,\n Protocol\n} from '@device-management-toolkit/ui-toolkit/core'\nimport { fromEvent, timer, Subscription } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\ninterface EncodingOption {\n value: number\n viewValue: string\n}\ninterface KeyObject {\n code: number\n down: boolean\n}\n\n@Component({\n selector: 'amt-kvm',\n templateUrl: './kvm.component.html',\n styleUrls: ['./kvm.component.css']\n})\nexport class KVMComponent implements OnDestroy {\n private readonly renderer = inject(Renderer2)\n private readonly destroyRef = inject(DestroyRef)\n private KEY_SEQUENCE_DELAY_MS = 10\n readonly canvas = viewChild<ElementRef>('canvas')\n readonly device = viewChild.required<string>('device')\n\n // Canvas properties\n public context: CanvasRenderingContext2D | null = null\n public width = signal(400)\n public height = signal(400)\n\n // Input properties\n public isFullscreen = input(false)\n public mpsServer = input('')\n public authToken = input('')\n public deviceId = input('')\n\n // Input/Output properties\n readonly deviceStatus = output<number>()\n readonly deviceConnection = input<boolean>(false)\n readonly selectedEncoding = input<number>(1)\n readonly selectedHotkey = input<string>('')\n\n // Component state\n module: AMTDesktop | null = null\n redirector: AMTKvmDataRedirector | null = null\n dataProcessor: IDataProcessor | null = null\n mouseHelper: MouseHelper | null = null\n keyboardHelper: KeyBoardHelper | null = null\n selected = signal(1)\n private mouseMove$?: Subscription\n private isEncodingChange = false\n\n readonly encodings: EncodingOption[] = [\n { value: 1, viewValue: 'RLE 8' },\n { value: 2, viewValue: 'RLE 16' }\n ]\n\n constructor() {\n effect(() => {\n this.toggleFullscreen()\n })\n\n // React to deviceConnection changes\n effect(() => {\n const connected = this.deviceConnection()\n if (connected && this.redirector == null && !this.isEncodingChange) {\n console.log('KVMComponent: Device connected, initializing KVM...')\n this.init()\n } else if (!connected && this.redirector != null) {\n console.log('KVMComponent: Device disconnected, stopping KVM...')\n this.stopKvm()\n }\n })\n\n // React to selectedEncoding changes\n effect(() => {\n if (this.selectedEncoding() === this.selected() || !this.deviceConnection()) return\n console.log('KVMComponent: Encoding changed to', this.selectedEncoding())\n const encoding = this.selectedEncoding()\n this.selected.set(encoding)\n\n // Set flag to prevent connection effect interference\n if (this.redirector != null) {\n this.isEncodingChange = true\n this.onEncodingChange()\n }\n })\n\n // React to selectedHotkey changes\n effect(() => {\n const hotkey = this.selectedHotkey()\n if (hotkey && this.deviceConnection() && this.keyboardHelper) {\n console.log('KVMComponent: Hotkey triggered:', hotkey)\n this.sendHotkey(hotkey)\n }\n })\n }\n\n toggleFullscreen(): void {\n const canvasElement = this.canvas()?.nativeElement\n if (!canvasElement) return\n\n if (this.isFullscreen()) {\n if (canvasElement.requestFullscreen) {\n canvasElement.requestFullscreen()\n }\n this.renderer.addClass(canvasElement, 'fullscreen')\n } else {\n if (document.exitFullscreen && document.fullscreenElement != null) {\n document.exitFullscreen()\n }\n this.renderer.removeClass(canvasElement, 'fullscreen')\n }\n this.mouseHelper?.resetOffsets()\n }\n\n instantiate(): void {\n const canvas = this.canvas()\n this.context = canvas?.nativeElement.getContext('2d') || null\n const config: RedirectorConfig = {\n mode: 'kvm',\n protocol: Protocol.KVM,\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 AMTKvmDataRedirector(config)\n this.module = new AMTDesktop(this.context)\n this.dataProcessor = new DataProcessor(this.redirector, this.module)\n this.mouseHelper = new MouseHelper(this.module, this.redirector, 200)\n this.keyboardHelper = new KeyBoardHelper(this.module, this.redirector)\n this.redirector.onProcessData = this.module.processData.bind(this.module)\n this.redirector.onStart = this.module.start.bind(this.module)\n this.redirector.onNewState = this.module.onStateChange.bind(this.module)\n this.redirector.onSendKvmData = this.module.onSendKvmData.bind(this.module)\n this.redirector.onStateChanged = this.onConnectionStateChange.bind(this)\n this.redirector.onError = this.onRedirectorError.bind(this)\n this.module.onSend = this.redirector.send.bind(this.redirector)\n this.module.onProcessData = this.dataProcessor.processData.bind(this.dataProcessor)\n this.module.bpp = this.selected()\n\n this.mouseMove$ = fromEvent<MouseEvent>(canvas?.nativeElement, 'mousemove')\n .pipe(throttleTime(200), takeUntilDestroyed(this.destroyRef))\n .subscribe((event: MouseEvent) => {\n this.mouseHelper?.mousemove(event)\n })\n }\n\n private onConnectionStateChange = (redirector: any, state: number): void => {\n this.deviceStatus.emit(state)\n }\n\n onRedirectorError(): void {\n this.reset()\n }\n\n init(): void {\n this.instantiate()\n setTimeout(() => {\n this.autoConnect()\n }, 4000)\n }\n\n autoConnect(): void {\n if (this.redirector) {\n this.redirector.start(WebSocket)\n this.keyboardHelper?.GrabKeyInput()\n }\n }\n\n private onEncodingChange(): void {\n this.stopKvm()\n timer(1000).subscribe(() => {\n // Need to reinitialize since stopKvm() reset the redirector to null\n this.init()\n // Note: Parent component handles clearing isEncodingChange flag after full process\n })\n }\n\n reset(): void {\n this.redirector = null\n this.module = null\n this.dataProcessor = null\n this.height.set(400)\n this.width.set(400)\n }\n\n stopKvm(): void {\n this.redirector?.stop()\n this.keyboardHelper?.UnGrabKeyInput()\n this.reset()\n }\n\n onMouseup(event: MouseEvent): void {\n this.mouseHelper?.mouseup(event)\n }\n\n onMousedown(event: MouseEvent): void {\n this.mouseHelper?.mousedown(event)\n }\n\n onMousemove(event: MouseEvent): void {\n this.mouseHelper?.mousemove(event)\n }\n\n sendHotkey(hotKeyType: string): void {\n if (!this.keyboardHelper) {\n console.warn('KVMComponent: Cannot send hotkey - keyboard helper not available')\n return\n }\n\n const keySequence = this.getKeySequence(hotKeyType)\n if (keySequence?.keys) {\n console.log('KVMComponent: Sending hotkey sequence for', hotKeyType)\n // Send each key in the sequence with a small delay\n keySequence.keys.forEach((key: KeyObject, index: number) => {\n setTimeout(() => {\n // Use the KeyboardHelper's existing handleKeyEvent method\n // 0 = Up, 1 = Down (from the UpDown enum)\n const upDown = key.down ? 1 : 0\n\n // Create a mock keyboard event with the key code\n const mockEvent = {\n keyCode: key.code,\n preventDefault: () => {},\n stopPropagation: () => {}\n } as KeyboardEvent\n\n // Use the existing handleKeyEvent method\n this.keyboardHelper!.handleKeyEvent(upDown, mockEvent)\n }, index * this.KEY_SEQUENCE_DELAY_MS) // delay between keys\n })\n }\n }\n\n private getKeySequence(hotKeyType: string): { keys: KeyObject[] } | null {\n // Check for function key patterns (alt-f1 to alt-f12, ctrl-alt-f1 to ctrl-alt-f12)\n const altFnMatch = hotKeyType.match(/^alt-f(\\d+)$/)\n const ctrlAltFnMatch = hotKeyType.match(/^ctrl-alt-f(\\d+)$/)\n\n if (altFnMatch) {\n const fnNum = parseInt(altFnMatch[1], 10)\n return this.buildFunctionKeySequence(fnNum, false)\n }\n\n if (ctrlAltFnMatch) {\n const fnNum = parseInt(ctrlAltFnMatch[1], 10)\n return this.buildFunctionKeySequence(fnNum, true)\n }\n\n // Handle other hotkey combinations\n switch (hotKeyType) {\n case 'ctrl-alt-del':\n return {\n keys: [\n { code: 17, down: true }, // Ctrl down (JS keyCode)\n { code: 18, down: true }, // Alt down (JS keyCode)\n { code: 46, down: true }, // Delete down (JS keyCode)\n { code: 46, down: false }, // Delete up (JS keyCode)\n { code: 18, down: false }, // Alt up (JS keyCode)\n { code: 17, down: false } // Ctrl up (JS keyCode)\n ]\n }\n case 'alt-tab':\n return {\n keys: [\n { code: 18, down: true }, // Alt down (JS keyCode)\n { code: 9, down: true }, // Tab down (JS keyCode)\n { code: 9, down: false }, // Tab up (JS keyCode)\n { code: 18, down: false } // Alt up (JS keyCode)\n ]\n }\n case 'alt-release':\n return {\n keys: [\n { code: 18, down: false } // Alt up (JS keyCode)\n ]\n }\n case 'windows':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows key down\n { code: 0xffe7, down: false } // Windows key up\n ]\n }\n case 'windows-l':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 108, down: true }, // L down\n { code: 108, down: false }, // L up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-r':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 82, down: true }, // R down\n { code: 82, down: false }, // R up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-up':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff52, down: true }, // Up arrow down\n { code: 0xff52, down: false }, // Up arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-down':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff54, down: true }, // Down arrow down\n { code: 0xff54, down: false }, // Down arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-left':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff51, down: true }, // Left arrow down\n { code: 0xff51, down: false }, // Left arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-right':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff53, down: true }, // Right arrow down\n { code: 0xff53, down: false }, // Right arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'ctrl-w':\n return {\n keys: [\n { code: 0xffe3, down: true }, // Ctrl down\n { code: 87, down: true }, // W down\n { code: 87, down: false }, // W up\n { code: 0xffe3, down: false } // Ctrl up\n ]\n }\n default:\n return null\n }\n }\n\n private buildFunctionKeySequence(fnNum: number, includeCtrl: boolean): { keys: KeyObject[] } | null {\n // Validate function key number (F1-F12)\n if (fnNum < 1 || fnNum > 12) {\n return null\n }\n\n // Calculate function key code: F1 = 0xffbe, F2 = 0xffbf, ..., F12 = 0xffc9\n const fnKeyCode = 0xffbe + (fnNum - 1)\n const keys: KeyObject[] = []\n\n // Add Ctrl if needed\n if (includeCtrl) {\n keys.push({ code: 0xffe3, down: true }) // Ctrl down\n }\n\n // Add Alt\n keys.push({ code: 0xffe9, down: true }) // Alt down\n\n // Add function key press\n keys.push({ code: fnKeyCode, down: true }) // Fn down\n keys.push({ code: fnKeyCode, down: false }) // Fn up\n\n // Release modifiers in reverse order\n keys.push({ code: 0xffe9, down: false }) // Alt up\n\n if (includeCtrl) {\n keys.push({ code: 0xffe3, down: false }) // Ctrl up\n }\n\n return { keys }\n }\n\n ngOnDestroy(): void {\n this.mouseMove$?.unsubscribe()\n this.stopKvm()\n }\n}\n","<div>\n <canvas\n class=\"canvas\"\n #canvas\n [width]=\"width\"\n [height]=\"height\"\n oncontextmenu=\"return false\"\n (mouseup)=\"onMouseup($event)\"\n (mousedown)=\"onMousedown($event)\"\n (mousemove)=\"onMousemove($event)\"></canvas>\n</div>\n","/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\n/*\n * Public API Surface of kvm\n */\n\nexport * from './kvm.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-management-toolkit-ui-toolkit-angular-kvm.mjs","names":[],"sources":["../../kvm/src/kvm.component.ts","../../kvm/src/kvm.component.html"],"sourcesContent":["/*********************************************************************\n * Copyright (c) Intel Corporation 2023\n * SPDX-License-Identifier: Apache-2.0\n **********************************************************************/\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n viewChild,\n input,\n output,\n inject,\n Renderer2,\n effect,\n signal,\n DestroyRef\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport {\n AMTDesktop,\n AMTKvmDataRedirector,\n RedirectorConfig,\n DataProcessor,\n IDataProcessor,\n KeyBoardHelper,\n MouseHelper,\n Protocol\n} from '@device-management-toolkit/ui-toolkit/core'\nimport { fromEvent, timer, Subscription } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\ninterface EncodingOption {\n value: number\n viewValue: string\n}\ninterface KeyObject {\n code: number\n down: boolean\n}\n\n@Component({\n selector: 'amt-kvm',\n templateUrl: './kvm.component.html',\n styleUrls: ['./kvm.component.css']\n})\nexport class KVMComponent implements OnDestroy {\n private readonly renderer = inject(Renderer2)\n private readonly destroyRef = inject(DestroyRef)\n private KEY_SEQUENCE_DELAY_MS = 10\n readonly canvas = viewChild<ElementRef>('canvas')\n readonly device = viewChild.required<string>('device')\n\n // Canvas properties\n public context: CanvasRenderingContext2D | null = null\n public width = signal(400)\n public height = signal(400)\n\n // Input properties\n public isFullscreen = input(false)\n public mpsServer = input('')\n public authToken = input('')\n public deviceId = input('')\n\n // Input/Output properties\n readonly deviceStatus = output<number>()\n readonly deviceConnection = input<boolean>(false)\n readonly selectedEncoding = input<number>(1)\n readonly selectedHotkey = input<string>('')\n\n // Component state\n module: AMTDesktop | null = null\n redirector: AMTKvmDataRedirector | null = null\n dataProcessor: IDataProcessor | null = null\n mouseHelper: MouseHelper | null = null\n keyboardHelper: KeyBoardHelper | null = null\n selected = signal(1)\n private mouseMove$?: Subscription\n private isEncodingChange = false\n\n readonly encodings: EncodingOption[] = [\n { value: 1, viewValue: 'RLE 8' },\n { value: 2, viewValue: 'RLE 16' }\n ]\n\n constructor() {\n effect(() => {\n this.toggleFullscreen()\n })\n\n // React to deviceConnection changes\n effect(() => {\n const connected = this.deviceConnection()\n if (connected && this.redirector == null && !this.isEncodingChange) {\n console.log('KVMComponent: Device connected, initializing KVM...')\n this.init()\n } else if (!connected && this.redirector != null) {\n console.log('KVMComponent: Device disconnected, stopping KVM...')\n this.stopKvm()\n }\n })\n\n // React to selectedEncoding changes\n effect(() => {\n if (this.selectedEncoding() === this.selected() || !this.deviceConnection()) return\n console.log('KVMComponent: Encoding changed to', this.selectedEncoding())\n const encoding = this.selectedEncoding()\n this.selected.set(encoding)\n\n // Set flag to prevent connection effect interference\n if (this.redirector != null) {\n this.isEncodingChange = true\n this.onEncodingChange()\n }\n })\n\n // React to selectedHotkey changes\n effect(() => {\n const hotkey = this.selectedHotkey()\n if (hotkey && this.deviceConnection() && this.keyboardHelper) {\n console.log('KVMComponent: Hotkey triggered:', hotkey)\n this.sendHotkey(hotkey)\n }\n })\n }\n\n toggleFullscreen(): void {\n const canvasElement = this.canvas()?.nativeElement\n if (!canvasElement) return\n\n if (this.isFullscreen()) {\n if (canvasElement.requestFullscreen) {\n canvasElement.requestFullscreen()\n }\n this.renderer.addClass(canvasElement, 'fullscreen')\n } else {\n if (document.exitFullscreen && document.fullscreenElement != null) {\n document.exitFullscreen()\n }\n this.renderer.removeClass(canvasElement, 'fullscreen')\n }\n this.mouseHelper?.resetOffsets()\n }\n\n instantiate(): void {\n const canvas = this.canvas()\n this.context = canvas?.nativeElement.getContext('2d') || null\n const config: RedirectorConfig = {\n mode: 'kvm',\n protocol: Protocol.KVM,\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 AMTKvmDataRedirector(config)\n this.module = new AMTDesktop(this.context)\n this.dataProcessor = new DataProcessor(this.redirector, this.module)\n this.mouseHelper = new MouseHelper(this.module, this.redirector, 200)\n this.keyboardHelper = new KeyBoardHelper(this.module, this.redirector)\n this.redirector.onProcessData = this.module.processData.bind(this.module)\n this.redirector.onStart = this.module.start.bind(this.module)\n this.redirector.onNewState = this.module.onStateChange.bind(this.module)\n this.redirector.onSendKvmData = this.module.onSendKvmData.bind(this.module)\n this.redirector.onStateChanged = this.onConnectionStateChange.bind(this)\n this.redirector.onError = this.onRedirectorError.bind(this)\n this.module.onSend = this.redirector.send.bind(this.redirector)\n this.module.onProcessData = this.dataProcessor.processData.bind(this.dataProcessor)\n this.module.bpp = this.selected()\n\n this.mouseMove$ = fromEvent<MouseEvent>(canvas?.nativeElement, 'mousemove')\n .pipe(throttleTime(200), takeUntilDestroyed(this.destroyRef))\n .subscribe((event: MouseEvent) => {\n this.mouseHelper?.mousemove(event)\n })\n }\n\n private onConnectionStateChange = (redirector: any, state: number): void => {\n this.deviceStatus.emit(state)\n }\n\n onRedirectorError(): void {\n this.reset()\n }\n\n init(): void {\n this.instantiate()\n setTimeout(() => {\n this.autoConnect()\n }, 4000)\n }\n\n autoConnect(): void {\n if (this.redirector) {\n this.redirector.start(WebSocket)\n this.keyboardHelper?.GrabKeyInput()\n }\n }\n\n private onEncodingChange(): void {\n this.stopKvm()\n timer(1000).subscribe(() => {\n // Need to reinitialize since stopKvm() reset the redirector to null\n this.init()\n // Note: Parent component handles clearing isEncodingChange flag after full process\n })\n }\n\n reset(): void {\n this.redirector = null\n this.module = null\n this.dataProcessor = null\n this.height.set(400)\n this.width.set(400)\n }\n\n stopKvm(): void {\n this.redirector?.stop()\n this.keyboardHelper?.UnGrabKeyInput()\n this.reset()\n }\n\n onMouseup(event: MouseEvent): void {\n this.mouseHelper?.mouseup(event)\n }\n\n onMousedown(event: MouseEvent): void {\n this.mouseHelper?.mousedown(event)\n }\n\n onMousemove(event: MouseEvent): void {\n this.mouseHelper?.mousemove(event)\n }\n\n sendHotkey(hotKeyType: string): void {\n if (!this.keyboardHelper) {\n console.warn('KVMComponent: Cannot send hotkey - keyboard helper not available')\n return\n }\n\n const keySequence = this.getKeySequence(hotKeyType)\n if (keySequence?.keys) {\n console.log('KVMComponent: Sending hotkey sequence for', hotKeyType)\n // Send each key in the sequence with a small delay\n keySequence.keys.forEach((key: KeyObject, index: number) => {\n setTimeout(() => {\n // Use the KeyboardHelper's existing handleKeyEvent method\n // 0 = Up, 1 = Down (from the UpDown enum)\n const upDown = key.down ? 1 : 0\n\n // Create a mock keyboard event with the key code\n const mockEvent = {\n keyCode: key.code,\n preventDefault: () => {},\n stopPropagation: () => {}\n } as KeyboardEvent\n\n // Use the existing handleKeyEvent method\n this.keyboardHelper!.handleKeyEvent(upDown, mockEvent)\n }, index * this.KEY_SEQUENCE_DELAY_MS) // delay between keys\n })\n }\n }\n\n private getKeySequence(hotKeyType: string): { keys: KeyObject[] } | null {\n // Check for function key patterns (alt-f1 to alt-f12, ctrl-alt-f1 to ctrl-alt-f12)\n const altFnMatch = hotKeyType.match(/^alt-f(\\d+)$/)\n const ctrlAltFnMatch = hotKeyType.match(/^ctrl-alt-f(\\d+)$/)\n\n if (altFnMatch) {\n const fnNum = parseInt(altFnMatch[1], 10)\n return this.buildFunctionKeySequence(fnNum, false)\n }\n\n if (ctrlAltFnMatch) {\n const fnNum = parseInt(ctrlAltFnMatch[1], 10)\n return this.buildFunctionKeySequence(fnNum, true)\n }\n\n // Handle other hotkey combinations\n switch (hotKeyType) {\n case 'ctrl-alt-del':\n return {\n keys: [\n { code: 17, down: true }, // Ctrl down (JS keyCode)\n { code: 18, down: true }, // Alt down (JS keyCode)\n { code: 46, down: true }, // Delete down (JS keyCode)\n { code: 46, down: false }, // Delete up (JS keyCode)\n { code: 18, down: false }, // Alt up (JS keyCode)\n { code: 17, down: false } // Ctrl up (JS keyCode)\n ]\n }\n case 'alt-tab':\n return {\n keys: [\n { code: 18, down: true }, // Alt down (JS keyCode)\n { code: 9, down: true }, // Tab down (JS keyCode)\n { code: 9, down: false }, // Tab up (JS keyCode)\n { code: 18, down: false } // Alt up (JS keyCode)\n ]\n }\n case 'alt-release':\n return {\n keys: [\n { code: 18, down: false } // Alt up (JS keyCode)\n ]\n }\n case 'windows':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows key down\n { code: 0xffe7, down: false } // Windows key up\n ]\n }\n case 'windows-l':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 108, down: true }, // L down\n { code: 108, down: false }, // L up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-r':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 82, down: true }, // R down\n { code: 82, down: false }, // R up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-up':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff52, down: true }, // Up arrow down\n { code: 0xff52, down: false }, // Up arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-down':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff54, down: true }, // Down arrow down\n { code: 0xff54, down: false }, // Down arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-left':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff51, down: true }, // Left arrow down\n { code: 0xff51, down: false }, // Left arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'windows-right':\n return {\n keys: [\n { code: 0xffe7, down: true }, // Windows down\n { code: 0xff53, down: true }, // Right arrow down\n { code: 0xff53, down: false }, // Right arrow up\n { code: 0xffe7, down: false } // Windows up\n ]\n }\n case 'ctrl-w':\n return {\n keys: [\n { code: 0xffe3, down: true }, // Ctrl down\n { code: 87, down: true }, // W down\n { code: 87, down: false }, // W up\n { code: 0xffe3, down: false } // Ctrl up\n ]\n }\n default:\n return null\n }\n }\n\n private buildFunctionKeySequence(fnNum: number, includeCtrl: boolean): { keys: KeyObject[] } | null {\n // Validate function key number (F1-F12)\n if (fnNum < 1 || fnNum > 12) {\n return null\n }\n\n // Calculate function key code: F1 = 0xffbe, F2 = 0xffbf, ..., F12 = 0xffc9\n const fnKeyCode = 0xffbe + (fnNum - 1)\n const keys: KeyObject[] = []\n\n // Add Ctrl if needed\n if (includeCtrl) {\n keys.push({ code: 0xffe3, down: true }) // Ctrl down\n }\n\n // Add Alt\n keys.push({ code: 0xffe9, down: true }) // Alt down\n\n // Add function key press\n keys.push({ code: fnKeyCode, down: true }) // Fn down\n keys.push({ code: fnKeyCode, down: false }) // Fn up\n\n // Release modifiers in reverse order\n keys.push({ code: 0xffe9, down: false }) // Alt up\n\n if (includeCtrl) {\n keys.push({ code: 0xffe3, down: false }) // Ctrl up\n }\n\n return { keys }\n }\n\n ngOnDestroy(): void {\n this.mouseMove$?.unsubscribe()\n this.stopKvm()\n }\n}\n","<div>\n <canvas\n class=\"canvas\"\n #canvas\n [width]=\"width()\"\n [height]=\"height()\"\n oncontextmenu=\"return false\"\n (mouseup)=\"onMouseup($event)\"\n (mousedown)=\"onMousedown($event)\"\n (mousemove)=\"onMousemove($event)\"></canvas>\n</div>\n"],"mappings":"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"}
@@ -1,181 +1,298 @@
1
- import * as i0 from '@angular/core';
2
- import { input, output, Component, inject, DestroyRef, effect, 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, ...(ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []));
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: "21.2.23", ngImport: i0, type: TerminalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.23", 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: "21.2.23", 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
- }], propDecorators: { term: [{ type: i0.Input, args: [{ isSignal: true, alias: "term", required: false }] }], handleKeyPress: [{ type: i0.Output, args: ["handleKeyPress"] }] } });
66
-
67
- /*********************************************************************
68
- * Copyright (c) Intel Corporation 2023
69
- * SPDX-License-Identifier: Apache-2.0
70
- **********************************************************************/
71
- class SOLComponent {
72
- constructor() {
73
- this.destroyRef = inject(DestroyRef);
74
- this.deviceState = 0;
75
- this.deviceStatus = output();
76
- this.deviceConnection = input(false, ...(ngDevMode ? [{ debugName: "deviceConnection" }] : /* istanbul ignore next */ []));
77
- this.mpsServer = input('', ...(ngDevMode ? [{ debugName: "mpsServer" }] : /* istanbul ignore next */ []));
78
- this.authToken = input('', ...(ngDevMode ? [{ debugName: "authToken" }] : /* istanbul ignore next */ []));
79
- this.deviceId = input('', ...(ngDevMode ? [{ debugName: "deviceId" }] : /* istanbul ignore next */ []));
80
- // React to deviceConnection changes
81
- effect(() => {
82
- const connected = this.deviceConnection();
83
- if (connected) {
84
- if (this.redirector == null) {
85
- this.instantiate();
86
- }
87
- this.startSol();
88
- }
89
- else if (this.redirector != null) {
90
- this.stopSol();
91
- }
92
- });
93
- }
94
- instantiate() {
95
- this.terminal = new AmtTerminal();
96
- this.dataProcessor = new TerminalDataProcessor(this.terminal);
97
- const config = {
98
- mode: 'sol',
99
- protocol: Protocol.SOL,
100
- fr: new FileReader(),
101
- host: this.deviceId(),
102
- port: 16994,
103
- user: '',
104
- pass: '',
105
- tls: 0,
106
- tls1only: 0,
107
- authToken: this.authToken(),
108
- server: this.mpsServer()
109
- };
110
- this.redirector = new AMTRedirector(config);
111
- this.terminal.onSend = this.redirector.send.bind(this.redirector);
112
- this.redirector.onNewState = this.terminal.StateChange.bind(this.terminal);
113
- this.redirector.onStateChanged = this.onTerminalStateChange.bind(this);
114
- this.redirector.onProcessData = this.dataProcessor.processData.bind(this);
115
- this.dataProcessor.processDataToXterm = this.handleWriteToXterm.bind(this);
116
- this.dataProcessor.clearTerminal = this.handleClearTerminal.bind(this);
117
- this.term = new Terminal({
118
- rows: 30,
119
- cols: 100,
120
- cursorStyle: 'block',
121
- fontWeight: 'bold'
122
- });
123
- }
124
- handleKeyPress(domEvent) {
125
- this.terminal?.TermSendKeys(domEvent);
126
- }
127
- handleClearTerminal() {
128
- this.term?.reset();
129
- }
130
- handleWriteToXterm(str) {
131
- this.term?.write(str);
132
- }
133
- onTerminalStateChange(redirector, state) {
134
- this.deviceStatus.emit(state);
135
- this.deviceState = state;
136
- }
137
- startSol() {
138
- if (this.redirector != null) {
139
- this.redirector.start(WebSocket);
140
- }
141
- }
142
- stopSol() {
143
- if (this.redirector != null) {
144
- this.redirector.stop();
145
- this.handleClearTerminal();
146
- this.term?.dispose();
147
- this.cleanup();
148
- }
149
- }
150
- cleanup() {
151
- ;
152
- this.terminal = null;
153
- this.redirector = null;
154
- this.dataProcessor = null;
155
- this.term = null;
156
- }
157
- ngOnDestroy() {
158
- this.stopSol();
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SOLComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", 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 }); }
162
- }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SOLComponent, decorators: [{
164
- type: Component,
165
- 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"] }]
166
- }], ctorParameters: () => [], propDecorators: { deviceStatus: [{ type: i0.Output, args: ["deviceStatus"] }], deviceConnection: [{ type: i0.Input, args: [{ isSignal: true, alias: "deviceConnection", required: false }] }], mpsServer: [{ type: i0.Input, args: [{ isSignal: true, alias: "mpsServer", required: false }] }], authToken: [{ type: i0.Input, args: [{ isSignal: true, alias: "authToken", required: false }] }], deviceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "deviceId", required: false }] }] } });
167
-
168
- /*********************************************************************
169
- * Copyright (c) Intel Corporation 2023
170
- * SPDX-License-Identifier: Apache-2.0
171
- **********************************************************************/
172
- /*
173
- * Public API Surface of sol
174
- */
175
-
176
- /**
177
- * Generated bundle index. Do not edit.
178
- */
179
-
1
+ import * as i0 from "@angular/core";
2
+ import { Component, DestroyRef, ViewEncapsulation, effect, inject, input, output, signal } from "@angular/core";
3
+ import { Terminal } from "@xterm/xterm";
4
+ import { AMTRedirector, AmtTerminal, Protocol, TerminalDataProcessor } from "@device-management-toolkit/ui-toolkit/core";
5
+ var TerminalComponent = class TerminalComponent {
6
+ constructor() {
7
+ this.term = input.required(...ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []);
8
+ this.handleKeyPress = output();
9
+ this.container = null;
10
+ }
11
+ ngOnInit() {
12
+ const term = this.term();
13
+ if (term == null) throw new Error("Terminal not found");
14
+ this.container = document.getElementById("terminal");
15
+ if (this.container == null) throw new Error("Container not found");
16
+ term.open(this.container);
17
+ term.onKey(({ key, domEvent }) => {
18
+ domEvent.preventDefault();
19
+ if (domEvent.ctrlKey && domEvent.key === "c") {
20
+ const termValue = this.term();
21
+ if (termValue.hasSelection()) navigator.clipboard.writeText(termValue.getSelection()).then(() => {}).catch((err) => {
22
+ console.error("Failed to copy to clipboard", err);
23
+ });
24
+ else termValue.write("");
25
+ return false;
26
+ }
27
+ if (domEvent.ctrlKey && domEvent.key === "v") {
28
+ navigator.clipboard.readText().then((text) => {
29
+ this.handleKeyPress.emit(text);
30
+ }).catch((err) => {
31
+ console.error("Failed to read clipboard", err);
32
+ });
33
+ return false;
34
+ }
35
+ this.handleKeyPress.emit(key);
36
+ });
37
+ }
38
+ static {
39
+ this.ɵfac = i0.ɵɵngDeclareFactory({
40
+ minVersion: "12.0.0",
41
+ version: "22.2.2",
42
+ ngImport: i0,
43
+ type: TerminalComponent,
44
+ deps: [],
45
+ target: i0.ɵɵFactoryTarget.Component
46
+ });
47
+ }
48
+ static {
49
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
50
+ minVersion: "17.1.0",
51
+ version: "22.2.2",
52
+ type: TerminalComponent,
53
+ isStandalone: true,
54
+ selector: "amt-terminal",
55
+ inputs: { term: {
56
+ classPropertyName: "term",
57
+ publicName: "term",
58
+ isSignal: true,
59
+ isRequired: true,
60
+ transformFunction: null
61
+ } },
62
+ outputs: { handleKeyPress: "handleKeyPress" },
63
+ ngImport: i0,
64
+ template: "<div id=\"terminal\" class=\"xtermDisplay\" style=\"width: fit-content\"></div>\n"
65
+ });
66
+ }
67
+ };
68
+ i0.ɵɵngDeclareClassMetadata({
69
+ minVersion: "12.0.0",
70
+ version: "22.2.2",
71
+ ngImport: i0,
72
+ type: TerminalComponent,
73
+ decorators: [{
74
+ type: Component,
75
+ args: [{
76
+ selector: "amt-terminal",
77
+ template: "<div id=\"terminal\" class=\"xtermDisplay\" style=\"width: fit-content\"></div>\n"
78
+ }]
79
+ }],
80
+ propDecorators: {
81
+ term: [{
82
+ type: i0.Input,
83
+ args: [{
84
+ isSignal: true,
85
+ alias: "term",
86
+ required: true
87
+ }]
88
+ }],
89
+ handleKeyPress: [{
90
+ type: i0.Output,
91
+ args: ["handleKeyPress"]
92
+ }]
93
+ }
94
+ });
95
+ var SOLComponent = class SOLComponent {
96
+ constructor() {
97
+ this.destroyRef = inject(DestroyRef);
98
+ this.terminal = null;
99
+ this.term = null;
100
+ this.redirector = null;
101
+ this.dataProcessor = null;
102
+ this._deviceState = signal(0, ...ngDevMode ? [{ debugName: "_deviceState" }] : /* istanbul ignore next */ []);
103
+ this.deviceState = this._deviceState.asReadonly();
104
+ this.deviceStatus = output();
105
+ this.deviceConnection = input(false, ...ngDevMode ? [{ debugName: "deviceConnection" }] : /* istanbul ignore next */ []);
106
+ this.mpsServer = input("", ...ngDevMode ? [{ debugName: "mpsServer" }] : /* istanbul ignore next */ []);
107
+ this.authToken = input("", ...ngDevMode ? [{ debugName: "authToken" }] : /* istanbul ignore next */ []);
108
+ this.deviceId = input("", ...ngDevMode ? [{ debugName: "deviceId" }] : /* istanbul ignore next */ []);
109
+ effect(() => {
110
+ if (this.deviceConnection()) {
111
+ if (this.redirector == null) this.instantiate();
112
+ this.startSol();
113
+ } else if (this.redirector != null) this.stopSol();
114
+ });
115
+ }
116
+ instantiate() {
117
+ this.terminal = new AmtTerminal();
118
+ this.dataProcessor = new TerminalDataProcessor(this.terminal);
119
+ const config = {
120
+ mode: "sol",
121
+ protocol: Protocol.SOL,
122
+ fr: new FileReader(),
123
+ host: this.deviceId(),
124
+ port: 16994,
125
+ user: "",
126
+ pass: "",
127
+ tls: 0,
128
+ tls1only: 0,
129
+ authToken: this.authToken(),
130
+ server: this.mpsServer()
131
+ };
132
+ this.redirector = new AMTRedirector(config);
133
+ this.terminal.onSend = this.redirector.send.bind(this.redirector);
134
+ this.redirector.onNewState = this.terminal.StateChange.bind(this.terminal);
135
+ this.redirector.onStateChanged = this.onTerminalStateChange.bind(this);
136
+ this.redirector.onProcessData = this.dataProcessor.processData.bind(this);
137
+ this.dataProcessor.processDataToXterm = this.handleWriteToXterm.bind(this);
138
+ this.dataProcessor.clearTerminal = this.handleClearTerminal.bind(this);
139
+ this.term = new Terminal({
140
+ rows: 30,
141
+ cols: 100,
142
+ cursorStyle: "block",
143
+ fontWeight: "bold"
144
+ });
145
+ }
146
+ handleKeyPress(domEvent) {
147
+ this.terminal?.TermSendKeys(domEvent);
148
+ }
149
+ handleClearTerminal() {
150
+ this.term?.reset();
151
+ }
152
+ handleWriteToXterm(str) {
153
+ this.term?.write(str);
154
+ }
155
+ onTerminalStateChange(redirector, state) {
156
+ this.deviceStatus.emit(state);
157
+ this._deviceState.set(state);
158
+ }
159
+ startSol() {
160
+ if (this.redirector != null) this.redirector.start(WebSocket);
161
+ }
162
+ stopSol() {
163
+ if (this.redirector != null) {
164
+ this.redirector.stop();
165
+ this.handleClearTerminal();
166
+ this.term?.dispose();
167
+ this.cleanup();
168
+ }
169
+ }
170
+ cleanup() {
171
+ this.terminal = null;
172
+ this.redirector = null;
173
+ this.dataProcessor = null;
174
+ this.term = null;
175
+ }
176
+ ngOnDestroy() {
177
+ this.stopSol();
178
+ }
179
+ static {
180
+ this.ɵfac = i0.ɵɵngDeclareFactory({
181
+ minVersion: "12.0.0",
182
+ version: "22.2.2",
183
+ ngImport: i0,
184
+ type: SOLComponent,
185
+ deps: [],
186
+ target: i0.ɵɵFactoryTarget.Component
187
+ });
188
+ }
189
+ static {
190
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
191
+ minVersion: "17.0.0",
192
+ version: "22.2.2",
193
+ type: SOLComponent,
194
+ isStandalone: true,
195
+ selector: "amt-sol",
196
+ inputs: {
197
+ deviceConnection: {
198
+ classPropertyName: "deviceConnection",
199
+ publicName: "deviceConnection",
200
+ isSignal: true,
201
+ isRequired: false,
202
+ transformFunction: null
203
+ },
204
+ mpsServer: {
205
+ classPropertyName: "mpsServer",
206
+ publicName: "mpsServer",
207
+ isSignal: true,
208
+ isRequired: false,
209
+ transformFunction: null
210
+ },
211
+ authToken: {
212
+ classPropertyName: "authToken",
213
+ publicName: "authToken",
214
+ isSignal: true,
215
+ isRequired: false,
216
+ transformFunction: null
217
+ },
218
+ deviceId: {
219
+ classPropertyName: "deviceId",
220
+ publicName: "deviceId",
221
+ isSignal: true,
222
+ isRequired: false,
223
+ transformFunction: null
224
+ }
225
+ },
226
+ outputs: { deviceStatus: "deviceStatus" },
227
+ ngImport: i0,
228
+ template: "<div class=\"container\">\n @if (deviceState() === 3 && term) {\n <amt-terminal [term]=\"term\" (handleKeyPress)=\"handleKeyPress($event)\"></amt-terminal>\n }\n</div>\n",
229
+ styles: [".container{display:block;text-align:center}.xtermDisplay{display:inline-block}\n"],
230
+ dependencies: [{
231
+ kind: "component",
232
+ type: TerminalComponent,
233
+ selector: "amt-terminal",
234
+ inputs: ["term"],
235
+ outputs: ["handleKeyPress"]
236
+ }],
237
+ encapsulation: i0.ViewEncapsulation.None
238
+ });
239
+ }
240
+ };
241
+ i0.ɵɵngDeclareClassMetadata({
242
+ minVersion: "12.0.0",
243
+ version: "22.2.2",
244
+ ngImport: i0,
245
+ type: SOLComponent,
246
+ decorators: [{
247
+ type: Component,
248
+ args: [{
249
+ selector: "amt-sol",
250
+ encapsulation: ViewEncapsulation.None,
251
+ imports: [TerminalComponent],
252
+ template: "<div class=\"container\">\n @if (deviceState() === 3 && term) {\n <amt-terminal [term]=\"term\" (handleKeyPress)=\"handleKeyPress($event)\"></amt-terminal>\n }\n</div>\n",
253
+ styles: [".container{display:block;text-align:center}.xtermDisplay{display:inline-block}\n"]
254
+ }]
255
+ }],
256
+ ctorParameters: () => [],
257
+ propDecorators: {
258
+ deviceStatus: [{
259
+ type: i0.Output,
260
+ args: ["deviceStatus"]
261
+ }],
262
+ deviceConnection: [{
263
+ type: i0.Input,
264
+ args: [{
265
+ isSignal: true,
266
+ alias: "deviceConnection",
267
+ required: false
268
+ }]
269
+ }],
270
+ mpsServer: [{
271
+ type: i0.Input,
272
+ args: [{
273
+ isSignal: true,
274
+ alias: "mpsServer",
275
+ required: false
276
+ }]
277
+ }],
278
+ authToken: [{
279
+ type: i0.Input,
280
+ args: [{
281
+ isSignal: true,
282
+ alias: "authToken",
283
+ required: false
284
+ }]
285
+ }],
286
+ deviceId: [{
287
+ type: i0.Input,
288
+ args: [{
289
+ isSignal: true,
290
+ alias: "deviceId",
291
+ required: false
292
+ }]
293
+ }]
294
+ }
295
+ });
180
296
  export { SOLComponent };
181
- //# sourceMappingURL=device-management-toolkit-ui-toolkit-angular-sol.mjs.map
297
+
298
+ //# sourceMappingURL=device-management-toolkit-ui-toolkit-angular-sol.mjs.map