Files
Nexus.Reader/src/NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor
T
mjasin 55cc3ae10d feat(ui/arch): Optimize Graph Dynamics, Immersive Reader, and Core Stability (#19)
This PR introduces a major optimization of graph dynamics, immersive reading experience, and architectural stabilization.

### 🚀 Key Improvements

- **Knowledge Graph (Fix #16)**:
  - Implemented smooth D3.js transitions using the General Update Pattern.
  - Added "Neon Flash" entry animations and dynamic node dimming for better focus.
- **Immersive Reader (Fix #12)**:
  - Standardized centered layout (`max-width: 800px`) with **Merriweather** typography.
  - Optimized line-height and letter-spacing for premium readability.
- **Technical Code Blocks (Fix #20)**:
  - High-contrast dark containers for code snippets.
  - **JetBrains Mono** integration and neon-accented scrollbars.
- **Architectural Stabilization**:
  - Enforced a strict **'no async void'** policy in UI services using `Func<Task>`.
  - Resolved WASM runtime DI errors by implementing dummy service proxies for server-side dependencies.
  - Replaced generic 'Not Found' message with a branded Nexus preloader.

Fixes #7, Fixes #12, Fixes #16, Fixes #20.

Reviewed-on: #19
Co-authored-by: Marek Jasiński <jasins.marek@gmail.com>
Co-committed-by: Marek Jasiński <jasins.marek@gmail.com>
2026-05-08 18:16:09 +00:00

55 lines
1.9 KiB
Plaintext

@using NexusReader.UI.Shared.Services
@inject IReaderNavigationService NavigationService
@implements IDisposable
<footer class="reader-footer">
<div class="footer-content">
<div class="navigation-controls">
<button class="nav-btn" @onclick="NavigationService.GoToPreviousChapter" disabled="@(NavigationService.CurrentChapterIndex == 0)">
<NexusIcon Name="arrow-left" Size="14" />
</button>
<div class="chapter-info">
<span class="chapter-title">@NavigationService.ChapterTitle</span>
<span class="chapter-count">(@(NavigationService.CurrentChapterIndex + 1) / @NavigationService.TotalChapters)</span>
</div>
<button class="nav-btn" @onclick="NavigationService.GoToNextChapter" disabled="@(NavigationService.CurrentChapterIndex >= NavigationService.TotalChapters - 1)">
<NexusIcon Name="arrow-right" Size="14" />
</button>
</div>
<div class="progress-container">
<div class="progress-bar" style="width: @CalculateProgress()%"></div>
</div>
<div class="meta-info">
<span class="battery">45% 🔋</span>
<span class="time">@DateTime.Now.ToString("HH:mm")</span>
</div>
</div>
</footer>
@code {
protected override void OnInitialized()
{
NavigationService.OnNavigationChanged += HandleNavigationChanged;
}
private async Task HandleNavigationChanged()
{
await InvokeAsync(StateHasChanged);
}
private int CalculateProgress()
{
if (NavigationService.TotalChapters <= 1) return 0;
return (int)((NavigationService.CurrentChapterIndex / (float)(NavigationService.TotalChapters - 1)) * 100);
}
public void Dispose()
{
NavigationService.OnNavigationChanged -= HandleNavigationChanged;
}
}