diff --git a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs index 4a729963c3..b6c9616f92 100644 --- a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs +++ b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs @@ -32,8 +32,8 @@ namespace Avalonia.Web.Blazor private SKHtmlCanvasInterop.GLInfo? _jsGlInfo = null; private AvaloniaModule? _avaloniaModule = null; private InputHelperInterop? _inputHelper = null; - private InputHelperInterop? _canvasHelper = null; - private InputHelperInterop? _containerHelper = null; + private FocusHelperInterop? _canvasHelper = null; + private FocusHelperInterop? _containerHelper = null; private NativeControlHostInterop? _nativeControlHost = null; private StorageProviderInterop? _storageProvider = null; private ElementReference _htmlCanvas; @@ -256,8 +256,8 @@ namespace Avalonia.Web.Blazor _avaloniaModule = await AvaloniaModule.ImportAsync(Js); - _canvasHelper = new InputHelperInterop(_avaloniaModule, _htmlCanvas); - _containerHelper = new InputHelperInterop(_avaloniaModule, _containerElement); + _canvasHelper = new FocusHelperInterop(_avaloniaModule, _htmlCanvas); + _containerHelper = new FocusHelperInterop(_avaloniaModule, _containerElement); _inputHelper = new InputHelperInterop(_avaloniaModule, _inputElement); _inputHelper.CompositionEvent += InputHelperOnCompositionEvent; diff --git a/src/Web/Avalonia.Web.Blazor/Interop/FocusHelperInterop.cs b/src/Web/Avalonia.Web.Blazor/Interop/FocusHelperInterop.cs new file mode 100644 index 0000000000..090909f98f --- /dev/null +++ b/src/Web/Avalonia.Web.Blazor/Interop/FocusHelperInterop.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Components; + +namespace Avalonia.Web.Blazor.Interop; + +internal class FocusHelperInterop +{ + private const string FocusSymbol = "FocusHelper.focus"; + private const string SetCursorSymbol = "FocusHelper.setCursor"; + + private readonly AvaloniaModule _module; + private readonly ElementReference _inputElement; + + public FocusHelperInterop(AvaloniaModule module, ElementReference inputElement) + { + _module = module; + _inputElement = inputElement; + } + + public void Focus() => _module.Invoke(FocusSymbol, _inputElement); + + public void SetCursor(string kind) => _module.Invoke(SetCursorSymbol, _inputElement, kind); +} diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts index bb497441aa..396126a1a6 100644 --- a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts +++ b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts @@ -1,5 +1,6 @@ export { DpiWatcher } from "./Avalonia/DpiWatcher" export { InputHelper } from "./Avalonia/InputHelper" +export { FocusHelper } from "./Avalonia/FocusHelper" export { NativeControlHost } from "./Avalonia/NativeControlHost" export { SizeWatcher } from "./Avalonia/SizeWatcher" export { SKHtmlCanvas } from "./Avalonia/SKHtmlCanvas" diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/FocusHelper.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/FocusHelper.ts new file mode 100644 index 0000000000..96ffee3d53 --- /dev/null +++ b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/FocusHelper.ts @@ -0,0 +1,9 @@ +export class FocusHelper { + public static focus(inputElement: HTMLElement) { + inputElement.focus(); + } + + public static setCursor(inputElement: HTMLInputElement, kind: string) { + inputElement.style.cursor = kind; + } +} diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts index c4708cb130..409fdebae9 100644 --- a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts +++ b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts @@ -13,18 +13,9 @@ public static clear(inputElement: HTMLInputElement) { inputElement.value = ""; } - - public static isInputElement( element : HTMLInputElement | HTMLElement ) : element is HTMLInputElement { - return ( element as HTMLInputElement).setSelectionRange !== undefined; - } - - public static focus(inputElement: HTMLElement) { + public static focus(inputElement: HTMLInputElement) { inputElement.focus(); - - if(this.isInputElement(inputElement)) - { - (inputElement as HTMLInputElement).setSelectionRange(0,0); - } + inputElement.setSelectionRange(0,0); } public static setCursor(inputElement: HTMLInputElement, kind: string) { @@ -54,3 +45,4 @@ } } } +