diff --git a/.gitignore b/.gitignore index ca7cbb0..b3e145a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,18 @@ -/.settings -/target -/.classpath -/.project -/node_modules -/frontend -/webpack.generated.js -/node -/drivers -/package-lock.json -/webpack.config.js -/package.json +node_modules +target +.vscode +.settings +.project +.classpath +webpack.generated.js +package-lock.json +package.json +webpack.config.js /error-screenshots -/tsconfig.json -/.npmrc -/pnpm-lock.yaml -/pnpmfile.js -/types.d.ts +drivers +tsconfig.json .idea +types.d.ts +/frontend/generated +/frontend/index.html +vite.generated.ts \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9f71a45..fdac0db 100644 --- a/pom.xml +++ b/pom.xml @@ -111,7 +111,7 @@ com.flowingcode.vaadin.addons.demo commons-demo - 3.5.0 + 3.5.1 test @@ -455,7 +455,28 @@ - + + + v24 + + 17 + 17 + 24.0.0.alpha5 + 11.0.12 + + + + vaadin-prerelease + https://maven.vaadin.com/vaadin-prereleases + + + + + vaadin-prerelease + https://maven.vaadin.com/vaadin-prereleases + + + diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-clipboard-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-clipboard-mixin.ts index b53874a..a1f028b 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-clipboard-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-clipboard-mixin.ts @@ -57,8 +57,8 @@ class ClipboardAddon extends TerminalAddon { } let onEvent = (event, listener) => { - terminal.element.addEventListener(event, listener); - return {dispose : () => terminal.element.removeEventListener(event, listener)}; + terminal.element!.addEventListener(event, listener); + return {dispose : () => terminal.element!.removeEventListener(event, listener)}; }; diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-console-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-console-mixin.ts index db009b3..e312b4d 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-console-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-console-mixin.ts @@ -56,11 +56,11 @@ class ConsoleAddon extends TerminalAddon { this._activeBuffer.x = Math.min(col, terminal.cols); }).bind(inputHandler); - let cursorForwardWrapped = (function(params: any) { + let cursorForwardWrapped = (function(params: any = [0]) { let buffer = this._bufferService.buffer; let x = buffer.x; let y = buffer.y; - for (let i=(params && params[0] || 1); i>0; --i) { + for (let i=(params[0] || 1); i>0; --i) { let apply=false; if (buffer.x>=this._bufferService.cols-1) { let next = buffer.lines.get(buffer.y+buffer.ybase+1); @@ -85,13 +85,13 @@ class ConsoleAddon extends TerminalAddon { return true; }).bind(inputHandler); - let cursorBackwardWrapped = (function(params : any) { + let cursorBackwardWrapped = (function(params : any = [0]) { let buffer = this._bufferService.buffer; let x = buffer.x; let y = buffer.y; let apply=false; - for (let i=0; i< (params && params[0] || 1); i++) { + for (let i=0; i< (params[0] || 1); i++) { let line = buffer.lines.get(buffer.y+buffer.ybase); if (!line.isWrapped && buffer.x< 1+promptLength()) { break; @@ -115,11 +115,11 @@ class ConsoleAddon extends TerminalAddon { return apply; }).bind(inputHandler); - let deleteChar = (function(params: any) { + let deleteChar = (function(params: any = [0]) { let buffer = this._bufferService.buffer; let x = buffer.x; let y = buffer.y; - for (let j=0; j< (params && params[0] || 1); j++) { + for (let j=0; j< (params[0] || 1); j++) { this.deleteChars({params:[1]}); let line = buffer.lines.get(buffer.ybase+buffer.y); let range = buffer.getWrappedRangeForLine(buffer.y + buffer.ybase) @@ -204,27 +204,32 @@ class ConsoleAddon extends TerminalAddon { }).bind(inputHandler); let hasModifiers = (ev:KeyboardEvent) => ev.shiftKey || ev.altKey || ev.metaKey || ev.ctrlKey; + + function probe_others(callback: ((params: T[]) => void)): ((params: T[]) => boolean) { + // execute callback and also probe for other handlers + return params => {callback(params); return false;} + }; this._disposables = [ - terminal.parser.registerCsiHandler({prefix: '<', final: 'H'}, cursorHome), + terminal.parser.registerCsiHandler({prefix: '<', final: 'H'}, probe_others(cursorHome)), this.$node.customKeyEventHandlers.register(ev=> ev.key=='Home' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='End' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='ArrowLeft' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='ArrowRight' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='Backspace' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='Delete' && !hasModifiers(ev), ()=> terminal.write('\x1b[ ev.key=='Insert' && !hasModifiers(ev), ev=>{ this.$.insertMode = !this.$.insertMode; @@ -248,9 +253,9 @@ class ConsoleAddon extends TerminalAddon { 'F5', 'F6', 'F12' - ].includes(ev.key), null), + ].includes(ev.key), undefined), - terminal.parser.registerCsiHandler({prefix: '<', final: 'N'}, linefeed) + terminal.parser.registerCsiHandler({prefix: '<', final: 'N'}, probe_others(linefeed)) ]; @@ -312,12 +317,12 @@ export function XTermConsoleMixin>(Base } get currentLine() : string { - return this._consoleAddon.currentLine; + return this._consoleAddon!.currentLine; } writePrompt() { //execute writePrompt with blocking semantics - this.node.terminal.write('', ()=>this._consoleAddon.writePrompt()); + this.node.terminal.write('', ()=>this._consoleAddon!.writePrompt()); } } diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts index d3421fa..42db279 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts @@ -50,9 +50,9 @@ class CustomKeyEventHandlerRegistry { private handlers: CustomKeyEventHandler[] = []; private next:integer=0; - register(customKey: CustomKey, handle: (event: KeyboardEvent) => void): CustomKeyEventHandlerRegistryDisposable; - register(predicate: KeyboardEventPredicate, handle: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable; - register(arg: CustomKey | KeyboardEventPredicate, handle: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable { + register(customKey: CustomKey, handle?: (event: KeyboardEvent) => void): CustomKeyEventHandlerRegistryDisposable; + register(predicate: KeyboardEventPredicate, handle?: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable; + register(arg: CustomKey | KeyboardEventPredicate, handle?: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable { let predicate : KeyboardEventPredicate; if ((typeof arg) === 'object') { let customKey = arg as any; diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-fit-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-fit-mixin.ts index 2aa0332..18025c5 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-fit-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-fit-mixin.ts @@ -86,10 +86,10 @@ export function XTermFitMixin>(Base: TB } fit() { - this._fitAddon.proposeDimensions(); + this._fitAddon!.proposeDimensions(); window.setTimeout(()=>{ try { - this._fitAddon?.fit(); + this._fitAddon!.fit(); } catch (e) { console.warn(e); } diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts index 30d4020..e7faabe 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts @@ -28,7 +28,7 @@ interface ISelectionMixin extends TerminalMixin { class SelectionAddon extends TerminalAddon { __selectionLength: number; - __selectionAnchor: number; + __selectionAnchor?: number; __selectionRight: boolean = true; activateCallback(terminal: Terminal): void { @@ -69,7 +69,7 @@ class SelectionAddon extends TerminalAddon { this.__selectionRight = !this.__selectionRight; } - let newSelectionStart = this.__selectionAnchor; + let newSelectionStart = this.__selectionAnchor!; if (!this.__selectionRight) { newSelectionStart -= newSelectionLength; } @@ -101,7 +101,7 @@ class SelectionAddon extends TerminalAddon { resetSelection(); ensureSelection(); - let dx = range.first * terminal.cols - this.__selectionAnchor; + let dx = range.first * terminal.cols - this.__selectionAnchor!; if (pos.startRow != range.first || pos.startColumn != promptLength()) { dx+= promptLength(); } @@ -117,7 +117,7 @@ class SelectionAddon extends TerminalAddon { resetSelection(); ensureSelection(); - moveSelection(range.last * terminal.cols + buffer.lines.get(range.last).getTrimmedLength() - this.__selectionAnchor); + moveSelection(range.last * terminal.cols + buffer.lines.get(range.last).getTrimmedLength() - this.__selectionAnchor!); }; let deleteSelection = (ev: KeyboardEvent) => {