@using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Shared.Schemas.Web @inject EmojiService EmojiService @inject GlobalComponentSvc GlobalComponentSvc @inject IJSRuntime Js @foreach (var el in EmojiList) { Select(el)" src="@el.PublicUrl" alt="@el.Name"/> } @code { private EventCallback OnEmojiSelect { get; set; } private List EmojiList { get; set; } = []; private ElementReference EmojiPickerRef { get; set; } private float _top; private float _left; private IJSInProcessObjectReference _module = null!; protected override async Task OnInitializedAsync() { GlobalComponentSvc.EmojiPicker = this; EmojiList = await EmojiService.GetEmoji(); _module = (IJSInProcessObjectReference)await Js.InvokeAsync("import", "./Components/EmojiPicker.razor.js"); } private async void Select(EmojiResponse emoji) { await OnEmojiSelect.InvokeAsync(emoji); } private void Close() { _module.InvokeVoid("closeDialog", EmojiPickerRef); } public void Open(ElementReference root, EventCallback func) { OnEmojiSelect = func; var pos = _module.Invoke>("getPosition", root); _left = pos[0]; _top = pos[1]; StateHasChanged(); _module.InvokeVoid("openDialog", EmojiPickerRef); } }