using NexusReader.UI.Shared.Models; namespace NexusReader.UI.Shared.Services; public sealed class ReaderInteractionService : IReaderInteractionService { public event Func? OnNodeSelected; public event Func? OnScrollToBlockRequested; public event Func? OnHighlightBlockRequested; public event Func? OnTextSelected; public event Func? OnAssistantRequested; public event Func? OnScrollPercentChanged; public event Func? OnBlockReached; public async Task NotifyNodeSelected(string nodeId) { if (OnNodeSelected != null) await OnNodeSelected(nodeId); } public async Task RequestScrollToBlock(string blockId) { if (OnScrollToBlockRequested != null) await OnScrollToBlockRequested(blockId); } public async Task RequestHighlightBlock(string blockId) { if (OnHighlightBlockRequested != null) await OnHighlightBlockRequested(blockId); } public async Task NotifyTextSelected(string text, string blockId, SelectionCoordinates coords) { if (OnTextSelected != null) await OnTextSelected(text, blockId, coords); } public async Task RequestAssistant() { if (OnAssistantRequested != null) await OnAssistantRequested(); } public async Task NotifyScrollPercentChanged(int percent) { if (OnScrollPercentChanged != null) await OnScrollPercentChanged(percent); } public async Task NotifyBlockReached(string blockId) { if (OnBlockReached != null) await OnBlockReached(blockId); } }