@using NexusReader.UI.Shared.Services @using NexusReader.Application.DTOs.AI @inject KnowledgeCoordinator Coordinator @inject IReaderInteractionService InteractionService @if (IsVisible) {
E-Czytnik Asystent AI
@if (IsLoading) {
Skanowanie fragmentu...
} else if (Packet != null) {
@Packet.Summary
} else {
Wykryto ciekawy fragment! Czy chcesz, abym wygenerował podsumowanie lub quiz z tego rozdziału?
}
} @code { [Parameter] public string SelectedText { get; set; } = string.Empty; [Parameter] public string BlockId { get; set; } = string.Empty; [Parameter] public SelectionCoordinates? Coordinates { get; set; } [Parameter] public string FullPageContent { get; set; } = string.Empty; private bool IsVisible => !string.IsNullOrEmpty(SelectedText) && Coordinates != null; private bool IsLoading = false; private KnowledgePacket? Packet; private bool PositionBelow => Coordinates != null && Coordinates.Top < 320; protected override void OnParametersSet() { Console.WriteLine($"[SelectionAiPanel] Parameters set. SelectedText: {SelectedText.Length} chars, Coordinates: {Coordinates?.Top}, PositionBelow: {PositionBelow}"); // Reset packet when selection changes Packet = null; } private string PanelStyle => Coordinates != null ? string.Create(System.Globalization.CultureInfo.InvariantCulture, $"top: {(PositionBelow ? Coordinates.Top + 35 : Coordinates.Top - 15):F1}px !important; " + $"left: {Math.Clamp(Coordinates.Left + Coordinates.Width / 2, 280, 1600):F1}px !important; " + $"transform: translate(-50%, {(PositionBelow ? "0" : "-100%")}) !important;") : ""; private async Task RequestSummary() { IsLoading = true; var contextPrompt = !string.IsNullOrWhiteSpace(FullPageContent) ? $"ANALYSIS CONTEXT (Full Page Content):\n{FullPageContent}\n\nUSER SELECTION TO SUMMARIZE:\n" : ""; var result = await Coordinator.RequestSummaryAndQuizAsync($"{contextPrompt}{SelectedText}"); Packet = result.IsSuccess ? result.Value : null; IsLoading = false; } private async Task GenerateFullQuiz() { IsLoading = true; await Coordinator.RequestSummaryAndQuizAsync(FullPageContent); IsLoading = false; await CloseAsync(); } private async Task CloseAsync() { Packet = null; await InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!); } }