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) => {