Wrap pages in consistent container styling
Remove Back to List
This commit is contained in:
@@ -44,6 +44,11 @@
|
|||||||
</MudStack>
|
</MudStack>
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</PropertyColumn>
|
</PropertyColumn>
|
||||||
|
<TemplateColumn Title="Attributes" Sortable="false">
|
||||||
|
<CellTemplate>
|
||||||
|
<EventAttributes EventDefinition="context.Item"></EventAttributes>
|
||||||
|
</CellTemplate>
|
||||||
|
</TemplateColumn>
|
||||||
<PropertyColumn Property="@(e => e.EventFormat)" Title="Event Format" />
|
<PropertyColumn Property="@(e => e.EventFormat)" Title="Event Format" />
|
||||||
|
|
||||||
<TemplateColumn Title="Team Size" CellStyle="white-space:nowrap">
|
<TemplateColumn Title="Team Size" CellStyle="white-space:nowrap">
|
||||||
@@ -54,11 +59,7 @@
|
|||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
<PropertyColumn Property="@(e => e.ChapterEligibilityCountState)" Title="State#" />
|
<PropertyColumn Property="@(e => e.ChapterEligibilityCountState)" Title="State#" />
|
||||||
<TemplateColumn Title="Attributes" Sortable="false">
|
|
||||||
<CellTemplate>
|
|
||||||
<EventAttributes EventDefinition="context.Item"></EventAttributes>
|
|
||||||
</CellTemplate>
|
|
||||||
</TemplateColumn>
|
|
||||||
|
|
||||||
<PropertyColumn Property="@(e => e.LevelOfEffort)" Title="Level of Effort" />
|
<PropertyColumn Property="@(e => e.LevelOfEffort)" Title="Level of Effort" />
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<PageHeader Title="@($"{Configuration["ChapterSettings:Shortname"]} TSA Schedule {Configuration["ChapterSettings:CompetitionYear"]}")" />
|
<PageHeader Title="@($"{Configuration["ChapterSettings:Shortname"]} TSA Schedule {Configuration["ChapterSettings:CompetitionYear"]}")" />
|
||||||
|
|
||||||
<MudPaper Class="pa-4 mt-5">
|
<MudPaper Elevation="2" Class="pa-4 mt-4">
|
||||||
<MudGrid>
|
<MudGrid>
|
||||||
<MudItem xs="7" sm="8" lg="9">
|
<MudItem xs="7" sm="8" lg="9">
|
||||||
<MudText Typo="Typo.h4">Time Slots</MudText>
|
<MudText Typo="Typo.h4">Time Slots</MudText>
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
OnClick="PrintPage"
|
OnClick="PrintPage"
|
||||||
Variant="Variant.Outlined">Print</MudButton>
|
Variant="Variant.Outlined">Print</MudButton>
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.Edit" Href="@($"/students/edit?id={student.Id}&returnUrl={ReturnUrl ?? "/students"}")" Variant="Variant.Outlined">Edit</MudButton>
|
<MudButton StartIcon="@Icons.Material.Filled.Edit" Href="@($"/students/edit?id={student.Id}&returnUrl={ReturnUrl ?? "/students"}")" Variant="Variant.Outlined">Edit</MudButton>
|
||||||
<MudButton Href="@(ReturnUrl ?? "/students")" Variant="Variant.Text">Back to List</MudButton>
|
|
||||||
</div>
|
</div>
|
||||||
</ActionButtons>
|
</ActionButtons>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
@using Microsoft.EntityFrameworkCore
|
@using Microsoft.EntityFrameworkCore
|
||||||
@using WebApp.Models
|
@using WebApp.Models
|
||||||
@using WebApp.Components.Shared.Components
|
|
||||||
@using Core.Validation
|
@using Core.Validation
|
||||||
@inject AppDbContext Context
|
@inject AppDbContext Context
|
||||||
@inject ValidationService ValidationService
|
@inject ValidationService ValidationService
|
||||||
@@ -18,8 +17,10 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
<MudStack Spacing="4">
|
||||||
<MudTable Items="_students" Hover="true" Breakpoint="Breakpoint.Sm" LoadingProgressColor="Color.Info">
|
<MudPaper Elevation="2" Class="pa-4">
|
||||||
|
<MudText Typo="Typo.h5" Class="mb-4">Students by Rank</MudText>
|
||||||
|
<MudTable Items="_students" Hover="true" Striped="true" Breakpoint="Breakpoint.Sm" LoadingProgressColor="Color.Info">
|
||||||
<HeaderContent>
|
<HeaderContent>
|
||||||
|
|
||||||
<MudTh>Name</MudTh>
|
<MudTh>Name</MudTh>
|
||||||
@@ -61,7 +62,11 @@ else
|
|||||||
|
|
||||||
</RowTemplate>
|
</RowTemplate>
|
||||||
</MudTable>
|
</MudTable>
|
||||||
<MudTable Items="_eventStudentRankings" Hover="true" Breakpoint="Breakpoint.Sm" LoadingProgressColor="Color.Info">
|
</MudPaper>
|
||||||
|
|
||||||
|
<MudPaper Elevation="2" Class="pa-4">
|
||||||
|
<MudText Typo="Typo.h5" Class="mb-4">Events by Student</MudText>
|
||||||
|
<MudTable Items="_eventStudentRankings" Hover="true" Striped="true" Breakpoint="Breakpoint.Sm" LoadingProgressColor="Color.Info">
|
||||||
<HeaderContent>
|
<HeaderContent>
|
||||||
<MudTh>Event</MudTh>
|
<MudTh>Event</MudTh>
|
||||||
<MudTh>Level of Effort</MudTh>
|
<MudTh>Level of Effort</MudTh>
|
||||||
@@ -98,6 +103,8 @@ else
|
|||||||
}
|
}
|
||||||
</RowTemplate>
|
</RowTemplate>
|
||||||
</MudTable>
|
</MudTable>
|
||||||
|
</MudPaper>
|
||||||
|
</MudStack>
|
||||||
}
|
}
|
||||||
@code {
|
@code {
|
||||||
private Student[]? _students;
|
private Student[]? _students;
|
||||||
|
|||||||
@@ -3,33 +3,38 @@
|
|||||||
@using Microsoft.EntityFrameworkCore
|
@using Microsoft.EntityFrameworkCore
|
||||||
@using BlazorSortableList
|
@using BlazorSortableList
|
||||||
@using WebApp.Models
|
@using WebApp.Models
|
||||||
|
@using WebApp.Components.Shared.Components
|
||||||
@inject AppDbContext Context
|
@inject AppDbContext Context
|
||||||
@inject NavigationManager NavigationManager
|
@inject NavigationManager NavigationManager
|
||||||
@inject ISnackbar Snackbar
|
@inject ISnackbar Snackbar
|
||||||
@inject ILogger<EventRankingEdit> Logger
|
@inject ILogger<EventRankingEdit> Logger
|
||||||
|
|
||||||
<PageTitle>Student Event Ranks - TSA Chapter Organizer</PageTitle>
|
@if (_student == null)
|
||||||
|
{
|
||||||
<MudText Typo="Typo.h3"><MudIcon Icon="@AppIcons.EventRank"></MudIcon> Student Event Ranks</MudText>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
@if (_student == null)
|
|
||||||
{
|
|
||||||
<p><em>Loading...</em></p>
|
<p><em>Loading...</em></p>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudText Typo="Typo.h4" Class="mb-2">@_student.Name</MudText>
|
<PageHeader
|
||||||
|
Title="Student Event Ranks"
|
||||||
<div class="mb-4">
|
Subtitle="@_student.Name"
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.ArrowBack" Href="students/event-ranking" Variant="Variant.Outlined" Class="mr-2">Back</MudButton>
|
Icon="@AppIcons.EventRank"
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.Save" OnClick="Save" Color="Color.Primary" Variant="Variant.Filled">Save Rankings</MudButton>
|
ShowBackButton="true"
|
||||||
</div>
|
BackButtonUrl="/students/event-ranking">
|
||||||
|
<ActionButtons>
|
||||||
|
<MudButton StartIcon="@Icons.Material.Filled.Save"
|
||||||
|
OnClick="Save"
|
||||||
|
Color="Color.Primary"
|
||||||
|
Variant="Variant.Filled">
|
||||||
|
Save Rankings
|
||||||
|
</MudButton>
|
||||||
|
</ActionButtons>
|
||||||
|
</PageHeader>
|
||||||
|
|
||||||
@* https://github.com/AlexNek/BlazorSortableList *@
|
@* https://github.com/AlexNek/BlazorSortableList *@
|
||||||
<MudGrid Class="mt-2">
|
<MudGrid Class="mt-2">
|
||||||
<MudItem xs="12" md="6" xl="4">
|
<MudItem xs="12" md="6" xl="4">
|
||||||
<MudPaper Class="pa-3 mb-3" Elevation="0">
|
<MudPaper Class="pa-3 mb-3" Elevation="2">
|
||||||
<div class="d-flex align-center mb-1">
|
<div class="d-flex align-center mb-1">
|
||||||
<MudIcon Icon="@Icons.Material.Filled.FormatListNumbered" Class="mr-2" Color="Color.Primary" />
|
<MudIcon Icon="@Icons.Material.Filled.FormatListNumbered" Class="mr-2" Color="Color.Primary" />
|
||||||
<MudText Typo="Typo.h6" Color="Color.Primary">Ranked Events</MudText>
|
<MudText Typo="Typo.h6" Color="Color.Primary">Ranked Events</MudText>
|
||||||
@@ -59,7 +64,7 @@
|
|||||||
</SortableList>
|
</SortableList>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
<MudItem xs="12" md="6" xl="4">
|
<MudItem xs="12" md="6" xl="4">
|
||||||
<MudPaper Class="pa-3 mb-3" Elevation="0">
|
<MudPaper Class="pa-3 mb-3" Elevation="2">
|
||||||
<div class="d-flex align-center mb-1">
|
<div class="d-flex align-center mb-1">
|
||||||
<MudIcon Icon="@AppIcons.Events" Class="mr-2" />
|
<MudIcon Icon="@AppIcons.Events" Class="mr-2" />
|
||||||
<MudText Typo="Typo.h6">Available Events</MudText>
|
<MudText Typo="Typo.h6">Available Events</MudText>
|
||||||
@@ -82,8 +87,7 @@
|
|||||||
</SortableList>
|
</SortableList>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
</MudGrid>
|
</MudGrid>
|
||||||
}
|
}
|
||||||
</div>
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
</PropertyColumn>
|
</PropertyColumn>
|
||||||
<PropertyColumn Property="@(e => e.Grade)" Title="Grade (TSA Year)" Sortable="true">
|
<PropertyColumn Property="@(e => e.Grade)" Title="Grade (TSA Year)" Sortable="true">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@context.Item.Grade (@context.Item.TsaYear)
|
@((MarkupString)AppIcons.GetOrdinalSuperscript(context.Item.Grade)) (@context.Item.TsaYear)
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</PropertyColumn>
|
</PropertyColumn>
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|||||||
@@ -19,30 +19,37 @@
|
|||||||
</ActionButtons>
|
</ActionButtons>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
|
||||||
<MudText Typo="Typo.body2" Style="margin-top: 8px; margin-bottom: 4px;">
|
<MudPaper Elevation="2" Class="pa-4">
|
||||||
|
<MudText Typo="Typo.body2" Class="mb-2">
|
||||||
<MudIcon Icon="@AppIcons.Captain" Size="Size.Small" /> = Team Captain
|
<MudIcon Icon="@AppIcons.Captain" Size="Size.Small" /> = Team Captain
|
||||||
</MudText>
|
</MudText>
|
||||||
|
|
||||||
<MudText Typo="Typo.body2" Style="margin-bottom: 8px;">
|
<MudText Typo="Typo.body2" Class="mb-3">
|
||||||
|
<MudStack Row="true" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Spacing="1">
|
||||||
<strong>Show Columns:</strong>
|
<strong>Show Columns:</strong>
|
||||||
<MudCheckBox Value="_showGrade" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showGrade), val, v => _showGrade = v)" Label="Grade" Dense="true" Size="Size.Small" />
|
<MudCheckBox Value="_showGrade" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showGrade), val, v => _showGrade = v)" Label="Grade" Dense="true" Size="Size.Small"/>
|
||||||
<MudCheckBox Value="_showRegionalId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showRegionalId), val, v => _showRegionalId = v)" Label="Regional ID" Dense="true" Size="Size.Small" />
|
<MudCheckBox Value="_showRegionalId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showRegionalId), val, v => _showRegionalId = v)" Label="Regional ID" Dense="true" Size="Size.Small"/>
|
||||||
<MudCheckBox Value="_showStateId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showStateId), val, v => _showStateId = v)" Label="State ID" Dense="true" Size="Size.Small" />
|
<MudCheckBox Value="_showStateId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showStateId), val, v => _showStateId = v)" Label="State ID" Dense="true" Size="Size.Small"/>
|
||||||
<MudCheckBox Value="_showNationalId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showNationalId), val, v => _showNationalId = v)" Label="National ID" Dense="true" Size="Size.Small" />
|
<MudCheckBox Value="_showNationalId" ValueChanged="async (bool val) => await OnColumnToggle(nameof(_showNationalId), val, v => _showNationalId = v)" Label="National ID" Dense="true" Size="Size.Small"/>
|
||||||
</MudText>
|
</MudStack>
|
||||||
|
</MudText>
|
||||||
|
|
||||||
<MudDataGrid T="StudentTeamInfo" ServerData="ServerReload" @ref="_dataGrid" @key="_gridKey" Filterable="true" RowsPerPage="35">
|
<MudDataGrid T="StudentTeamInfo" ServerData="ServerReload" @ref="_dataGrid" @key="_gridKey" Filterable="true" RowsPerPage="35" Dense="true" Striped="true" Hover="true">
|
||||||
<Columns>
|
<Columns>
|
||||||
<PropertyColumn Property="@(e => e.Student.LastName)" Title="Student" Sortable="true">
|
<PropertyColumn Property="@(e => e.Student.LastName)" Title="Student" Sortable="true">
|
||||||
|
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
|
<MudStack Row="true" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Spacing="1">
|
||||||
@context.Item.Student.LastNameFirstName
|
@context.Item.Student.LastNameFirstName
|
||||||
<MudTooltip Text="Edit">
|
<MudTooltip Text="Edit">
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Edit"
|
<MudIconButton Icon="@Icons.Material.Filled.Edit"
|
||||||
Size="Size.Small"
|
Size="Size.Small"
|
||||||
Href="@($"/students/edit?id={context.Item.Student.Id}&returnUrl=/students/teams")"
|
Href="@($"/students/edit?id={context.Item.Student.Id}&returnUrl=/students/teams")"
|
||||||
Style="margin-left: 4px;" />
|
Style="margin-left: 4px;"/>
|
||||||
</MudTooltip>
|
</MudTooltip>
|
||||||
|
</MudStack>
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
|
|
||||||
</PropertyColumn>
|
</PropertyColumn>
|
||||||
<TemplateColumn Title="Warnings" Sortable="false">
|
<TemplateColumn Title="Warnings" Sortable="false">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@@ -67,10 +74,9 @@
|
|||||||
}
|
}
|
||||||
<TemplateColumn Title="Events">
|
<TemplateColumn Title="Events">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@if (context.Item.Teams != null)
|
@{
|
||||||
{
|
|
||||||
var teamsToDisplay = _showRegionalOnly
|
var teamsToDisplay = _showRegionalOnly
|
||||||
? context.Item.Teams.Where(t => t?.Event != null && t.Event.RegionalEvent).OrderBy(t => t.Event.Name)
|
? context.Item.Teams.Where(t => t?.Event is { RegionalEvent: true }).OrderBy(t => t.Event.Name)
|
||||||
: context.Item.Teams.Where(t => t?.Event != null).OrderBy(t => t.Event.Name);
|
: context.Item.Teams.Where(t => t?.Event != null).OrderBy(t => t.Event.Name);
|
||||||
|
|
||||||
foreach (var team in teamsToDisplay)
|
foreach (var team in teamsToDisplay)
|
||||||
@@ -98,7 +104,8 @@
|
|||||||
<PagerContent>
|
<PagerContent>
|
||||||
<MudDataGridPager T="StudentTeamInfo" PageSizeOptions="new int[] { 10, 25, 35, 50, 100 }"></MudDataGridPager>
|
<MudDataGridPager T="StudentTeamInfo" PageSizeOptions="new int[] { 10, 25, 35, 50, 100 }"></MudDataGridPager>
|
||||||
</PagerContent>
|
</PagerContent>
|
||||||
</MudDataGrid>
|
</MudDataGrid>
|
||||||
|
</MudPaper>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
MudDataGrid<StudentTeamInfo> _dataGrid = null!;
|
MudDataGrid<StudentTeamInfo> _dataGrid = null!;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
</ActionButtons>
|
</ActionButtons>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
|
||||||
<MudPaper Class="pa-4 mt-5">
|
<MudPaper Elevation="2" Class="pa-4 mt-4">
|
||||||
<MudGrid>
|
<MudGrid>
|
||||||
<MudItem Style="width:160px;">
|
<MudItem Style="width:160px;">
|
||||||
<MudNumericField @bind-Value="_parameters.TeamSizeLimit"
|
<MudNumericField @bind-Value="_parameters.TeamSizeLimit"
|
||||||
@@ -117,9 +117,10 @@
|
|||||||
<MudButton Class="ma-3" OnClick="Solve" Variant="Variant.Filled" Color="Color.Primary" Disabled="@_isSolving">Solve</MudButton>
|
<MudButton Class="ma-3" OnClick="Solve" Variant="Variant.Filled" Color="Color.Primary" Disabled="@_isSolving">Solve</MudButton>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
|
|
||||||
<MudGrid>
|
<MudPaper Elevation="2" Class="pa-4 mt-4">
|
||||||
|
<MudGrid>
|
||||||
<MudItem xs="12" lg="8">
|
<MudItem xs="12" lg="8">
|
||||||
<MudText Typo="Typo.h4">Students</MudText>
|
<MudText Typo="Typo.h5" Class="mb-4">Students</MudText>
|
||||||
|
|
||||||
<MudTable T="StudentEventStatistics" ServerData="ReloadStatistics" @ref="_statisticData" >
|
<MudTable T="StudentEventStatistics" ServerData="ReloadStatistics" @ref="_statisticData" >
|
||||||
<ColGroup>
|
<ColGroup>
|
||||||
@@ -234,7 +235,7 @@
|
|||||||
</MudTable>
|
</MudTable>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
<MudItem xs="12" lg="4">
|
<MudItem xs="12" lg="4">
|
||||||
<MudText Typo="Typo.h4">Teams</MudText>
|
<MudText Typo="Typo.h5" Class="mb-4">Teams</MudText>
|
||||||
<MudTable T="Team" ServerData="SolveAssignments" @ref="_teamData">
|
<MudTable T="Team" ServerData="SolveAssignments" @ref="_teamData">
|
||||||
<ColGroup>
|
<ColGroup>
|
||||||
<col style="width: 200px;" />
|
<col style="width: 200px;" />
|
||||||
@@ -289,7 +290,8 @@
|
|||||||
</LoadingContent>
|
</LoadingContent>
|
||||||
</MudTable>
|
</MudTable>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
</MudGrid>
|
</MudGrid>
|
||||||
|
</MudPaper>
|
||||||
|
|
||||||
@if (_hasExistingTeams)
|
@if (_hasExistingTeams)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
<MudButton StartIcon="@Icons.Material.Filled.Edit"
|
<MudButton StartIcon="@Icons.Material.Filled.Edit"
|
||||||
Href="@($"/teams/edit?id={Team.Id}&returnUrl={ReturnUrl ?? "/teams"}")"
|
Href="@($"/teams/edit?id={Team.Id}&returnUrl={ReturnUrl ?? "/teams"}")"
|
||||||
Variant="Variant.Outlined">Edit</MudButton>
|
Variant="Variant.Outlined">Edit</MudButton>
|
||||||
<MudButton Href="@(ReturnUrl ?? "/teams")" Variant="Variant.Text">Back to List</MudButton>
|
|
||||||
</div>
|
</div>
|
||||||
</ActionButtons>
|
</ActionButtons>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudContainer>
|
<MudPaper Elevation="2" Class="pa-4">
|
||||||
@foreach (var student in _students)
|
@foreach (var student in _students)
|
||||||
{
|
{
|
||||||
<MudContainer Class="pagebreak">
|
<MudContainer Class="pagebreak">
|
||||||
@@ -52,7 +52,7 @@ else
|
|||||||
}
|
}
|
||||||
</MudContainer>
|
</MudContainer>
|
||||||
}
|
}
|
||||||
</MudContainer>
|
</MudPaper>
|
||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ Consider using MudChip components with rank colors for better visual distinction
|
|||||||
### Phase 2: Visual Polish (Medium Impact, Medium Effort)
|
### Phase 2: Visual Polish (Medium Impact, Medium Effort)
|
||||||
4. ✅ Refine typography hierarchy usage
|
4. ✅ Refine typography hierarchy usage
|
||||||
5. Add loading states to all grids
|
5. Add loading states to all grids
|
||||||
6. Wrap pages in consistent container styling
|
6. ✅ Wrap pages in consistent container styling
|
||||||
|
|
||||||
### Phase 3: Enhancements (Nice to Have)
|
### Phase 3: Enhancements (Nice to Have)
|
||||||
7. Audit and ensure button hierarchy consistency
|
7. Audit and ensure button hierarchy consistency
|
||||||
|
|||||||
Reference in New Issue
Block a user