@using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @inject IStringLocalizer Loc; @inject IJSRuntime Js; @inject SessionService Session; @inject GlobalComponentSvc GlobalComponentSvc @code { [Parameter] [EditorRequired] public required List Reactions { get; set; } [Parameter] [EditorRequired] public required int Likes { get; set; } [Parameter] [EditorRequired] public required bool IsLiked { get; set; } [Parameter] [EditorRequired] public required int Renotes { get; set; } [Parameter] public bool RenotePossible { get; set; } private Menu ContextMenu { get; set; } = null!; private Menu RenoteMenu { get; set; } = null!; private ElementReference EmojiButton { get; set; } [CascadingParameter] Note Note { get; set; } = null!; private void ToggleMenu() => ContextMenu.Toggle(); private void Delete() => _ = Note.Delete(); private void OpenOriginal() => Js.InvokeVoidAsync("open", Note.NoteResponse.Url, "_blank"); private void CopyLink() => Js.InvokeVoidAsync("navigator.clipboard.writeText", Note.NoteResponse.Url); private void Like() { _ = Note.ToggleLike(); } private void Reply() { Note.Reply(); } private void ToggleRenoteMenu() { RenoteMenu.Toggle(); } private void Renote(NoteVisibility visibility) { _ = Note.Renote(visibility); } private void Quote() { Note.DoQuote(); } private void ToggleEmojiPicker() { GlobalComponentSvc.EmojiPicker?.Open(EmojiButton, new EventCallback(this, React)); } private void React(EmojiResponse emoji) { Note.React(emoji); } }