Initial commit: NexusArchitect Professional Workstation Overhaul

This commit is contained in:
Debian
2026-04-24 20:27:22 +02:00
commit f3e94c4f42
193 changed files with 5809 additions and 0 deletions
@@ -0,0 +1,44 @@
using Microsoft.JSInterop;
namespace NexusReader.UI.Shared.Services;
public sealed class FocusModeService : IFocusModeService
{
private readonly IJSRuntime _jsRuntime;
public bool IsFocusModeActive { get; private set; }
public event Action? OnFocusModeChanged;
public FocusModeService(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
public async Task InitializeAsync()
{
try
{
var value = await _jsRuntime.InvokeAsync<string>("localStorage.getItem", "nexus_focus_mode");
if (value == "true" && !IsFocusModeActive)
{
IsFocusModeActive = true;
OnFocusModeChanged?.Invoke();
}
}
catch
{
// Ignored during pre-rendering or unsupported environments
}
}
public async Task ToggleAsync()
{
IsFocusModeActive = !IsFocusModeActive;
OnFocusModeChanged?.Invoke();
try
{
await _jsRuntime.InvokeVoidAsync("localStorage.setItem", "nexus_focus_mode", IsFocusModeActive ? "true" : "false");
}
catch { }
}
}
@@ -0,0 +1,9 @@
namespace NexusReader.UI.Shared.Services;
public interface IFocusModeService
{
bool IsFocusModeActive { get; }
event Action? OnFocusModeChanged;
Task InitializeAsync();
Task ToggleAsync();
}
@@ -0,0 +1,8 @@
namespace NexusReader.UI.Shared.Services;
public interface IQuizStateService
{
string? CurrentQuizBlockId { get; }
event Action<string>? OnQuizRequested;
void RequestQuiz(string blockId);
}
@@ -0,0 +1,8 @@
namespace NexusReader.UI.Shared.Services;
public interface IThemeService
{
bool IsLightMode { get; }
event Action? OnThemeChanged;
void ToggleTheme();
}
@@ -0,0 +1,13 @@
namespace NexusReader.UI.Shared.Services;
public sealed class QuizStateService : IQuizStateService
{
public string? CurrentQuizBlockId { get; private set; }
public event Action<string>? OnQuizRequested;
public void RequestQuiz(string blockId)
{
CurrentQuizBlockId = blockId;
OnQuizRequested?.Invoke(blockId);
}
}
@@ -0,0 +1,13 @@
namespace NexusReader.UI.Shared.Services;
public sealed class ThemeService : IThemeService
{
public bool IsLightMode { get; private set; } = false;
public event Action? OnThemeChanged;
public void ToggleTheme()
{
IsLightMode = !IsLightMode;
OnThemeChanged?.Invoke();
}
}