✨ Phase 1.1-1.2: Enhance MainLayout & AuthLayout with MudBlazor
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 4s
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 4s
Phase 1.1: MainLayout Improvements ✅ Responsive sidebar with mobile toggle (MudDrawer) ✅ Enhanced top navigation (AppBar with icons) ✅ Dark mode toggle with persistence ✅ User profile menu (MudMenu with logout) ✅ Improved theme switching Features: - MudThemeProvider integration for dark/light mode - User avatar with initials - Profile, Settings, and Logout options in dropdown menu - Responsive navbar (hidden on mobile, visible on desktop) - Drawer footer with version info - Enhanced CSS with smooth transitions Phase 1.2: AuthLayout Complete Redesign ✅ Two-panel layout (branding + auth content) ✅ Left panel with QuantEngine branding and features ✅ Right panel for login/register/password recovery ✅ Mobile responsive design ✅ Dark mode support with smooth transitions Features: - Hero branding panel with feature list - Feature icons (CheckCircle animations) - Responsive grid (left panel hidden on mobile) - Dark mode theme toggle - Footer with legal links - Floating animation on logo - Mobile header with theme toggle - Accessibility support (prefers-reduced-motion) Styling Enhancements: - Modern gradient backgrounds - Smooth transitions and animations - Dark mode color schemes - Responsive breakpoints - Material Design principles Files Modified: - src/dotnet/QuantEngine.Web/Client/Layout/MainLayout.razor - src/dotnet/QuantEngine.Web/Client/Layout/MainLayout.razor.css - src/dotnet/QuantEngine.Web/Client/Layout/AuthLayout.razor - src/dotnet/QuantEngine.Web/Client/Layout/AuthLayout.razor.css (new) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,98 @@
|
||||
@inherits LayoutComponentBase
|
||||
@inject MudThemeProvider MudThemeProvider
|
||||
|
||||
@Body
|
||||
<MudThemeProvider @ref="mudThemeProvider" @bind-IsDarkMode="@isDarkMode" />
|
||||
|
||||
<div class="auth-container">
|
||||
<!-- Left Panel - Branding -->
|
||||
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true" Class="auth-left-panel">
|
||||
<div class="auth-branding">
|
||||
<div class="auth-logo">
|
||||
<MudIcon Icon="@Icons.Material.Filled.AnalyticsFill" Size="Size.Large" />
|
||||
</div>
|
||||
<MudText Typo="Typo.h3" Class="auth-title">
|
||||
QuantEngine
|
||||
</MudText>
|
||||
<MudText Typo="Typo.body1" Class="auth-subtitle">
|
||||
퇴직 자산 포트폴리오 관리 시스템
|
||||
</MudText>
|
||||
<div class="auth-features mt-8">
|
||||
<div class="auth-feature">
|
||||
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" />
|
||||
<MudText Typo="Typo.body2">실시간 자산 모니터링</MudText>
|
||||
</div>
|
||||
<div class="auth-feature">
|
||||
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" />
|
||||
<MudText Typo="Typo.body2">AI 기반 분석</MudText>
|
||||
</div>
|
||||
<div class="auth-feature">
|
||||
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" />
|
||||
<MudText Typo="Typo.body2">종합 보고서</MudText>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dark Mode Toggle -->
|
||||
<div class="auth-theme-toggle">
|
||||
<MudIconButton Icon="@(isDarkMode ? Icons.Material.Filled.Brightness4 : Icons.Material.Filled.Brightness7)"
|
||||
Color="Color.Inherit"
|
||||
OnClick="ToggleDarkMode"
|
||||
Title="@(isDarkMode ? "라이트 모드" : "다크 모드")"
|
||||
Size="Size.Large" />
|
||||
</div>
|
||||
</MudHidden>
|
||||
|
||||
<!-- Right Panel - Auth Content -->
|
||||
<div class="auth-right-panel">
|
||||
<!-- Mobile Header -->
|
||||
<MudHidden Breakpoint="Breakpoint.MdAndUp" Invert="true">
|
||||
<div class="auth-mobile-header">
|
||||
<MudText Typo="Typo.h5" Class="d-flex align-center">
|
||||
<MudIcon Icon="@Icons.Material.Filled.AnalyticsFill" Size="Size.Medium" Class="mr-2" />
|
||||
QuantEngine
|
||||
</MudText>
|
||||
<MudIconButton Icon="@(isDarkMode ? Icons.Material.Filled.Brightness4 : Icons.Material.Filled.Brightness7)"
|
||||
Color="Color.Inherit"
|
||||
OnClick="ToggleDarkMode"
|
||||
Title="@(isDarkMode ? "라이트 모드" : "다크 모드")" />
|
||||
</div>
|
||||
</MudHidden>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="auth-content">
|
||||
@Body
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="auth-footer">
|
||||
<MudText Typo="Typo.caption" Class="auth-footer-text">
|
||||
© 2026 QuantEngine. 모든 권리 예약.
|
||||
</MudText>
|
||||
<div class="auth-footer-links">
|
||||
<MudLink Href="/" Typo="Typo.caption">서비스 약관</MudLink>
|
||||
<MudText Typo="Typo.caption">·</MudText>
|
||||
<MudLink Href="/" Typo="Typo.caption">개인정보 처리방침</MudLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private MudThemeProvider mudThemeProvider = default!;
|
||||
private bool isDarkMode = false;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
isDarkMode = await mudThemeProvider.GetDarkModeAsync() ?? false;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ToggleDarkMode()
|
||||
{
|
||||
isDarkMode = !isDarkMode;
|
||||
await mudThemeProvider.SetDarkModeAsync(isDarkMode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user