FodCardWrapper
Documentație pentru componenta FodCardWrapper
1. Descriere Generală
FodCardWrapper
este o componentă wrapper care extinde FodCard
cu un header pre-stilizat ce include un titlu și o iconiță. Oferă o modalitate rapidă și consistentă de a crea card-uri cu header-e standardizate pentru secțiuni de conținut.
Caracteristici principale: - Header pre-configurat cu background deschis - Suport pentru iconiță și titlu în header - Culoare personalizabilă pentru iconiță - Spacing automat (margin-bottom) - Moștenește funcționalitatea FodCard - Ideal pentru secțiuni de formular sau dashboard
2. Utilizare de Bază
Card simplu cu titlu și iconiță
<FodCardWrapper Title="Informații personale"
Icon="@FodIcons.Material.Filled.Person">
<FodTextField Label="Nume" @bind-Value="name" />
<FodTextField Label="Email" @bind-Value="email" />
</FodCardWrapper>
Card cu iconiță colorată
<FodCardWrapper Title="Setări notificări"
Icon="@FodIcons.Material.Filled.Notifications"
IconColor="FodColor.Warning">
<FodCheckbox Label="Primește notificări email" @bind-Value="emailNotifications" />
<FodCheckbox Label="Primește notificări SMS" @bind-Value="smsNotifications" />
</FodCardWrapper>
3. Parametri
Parametru | Tip | Descriere | Valoare Implicită |
---|---|---|---|
Title |
string |
Titlul afișat în header | - |
Icon |
string |
Iconiță afișată lângă titlu | - |
IconColor |
FodColor |
Culoarea iconiței | Primary |
ChildContent |
RenderFragment |
Conținutul card-ului | - |
4. Moștenire și Styling
Componenta aplică automat:
- Class="mb-2"
- margin bottom pentru spacing
- HeaderClass="bg-light"
- background deschis pentru header
- Font size h3
și weight 500
pentru titlu
5. Exemple Avansate
Dashboard cu multiple card-uri
<FodGrid container spacing="3">
<FodGrid item xs="12" md="6">
<FodCardWrapper Title="Statistici vânzări"
Icon="@FodIcons.Material.Filled.TrendingUp"
IconColor="FodColor.Success">
<FodText Typo="Typo.h4">$25,430</FodText>
<FodText Color="FodColor.TextSecondary">Total luna aceasta</FodText>
<FodDivider Class="my-2" />
<FodText Typo="Typo.body2">
<span class="text-success">+15%</span> față de luna trecută
</FodText>
</FodCardWrapper>
</FodGrid>
<FodGrid item xs="12" md="6">
<FodCardWrapper Title="Clienți noi"
Icon="@FodIcons.Material.Filled.GroupAdd"
IconColor="FodColor.Info">
<FodText Typo="Typo.h4">142</FodText>
<FodText Color="FodColor.TextSecondary">Înregistrați această lună</FodText>
<FodDivider Class="my-2" />
<FodLoadingLinear Value="71" Max="200" Color="FodColor.Info" />
</FodCardWrapper>
</FodGrid>
</FodGrid>
Formular structurat cu secțiuni
<EditForm Model="@employeeModel" OnValidSubmit="HandleSubmit">
<DataAnnotationsValidator />
<FodCardWrapper Title="Date personale"
Icon="@FodIcons.Material.Filled.Badge">
<FodGrid container spacing="2">
<FodGrid item xs="12" sm="6">
<FodTextField Label="Nume"
@bind-Value="employeeModel.FirstName"
Required="true" />
</FodGrid>
<FodGrid item xs="12" sm="6">
<FodTextField Label="Prenume"
@bind-Value="employeeModel.LastName"
Required="true" />
</FodGrid>
<FodGrid item xs="12" sm="6">
<FodDatePicker Label="Data nașterii"
@bind-Value="employeeModel.BirthDate" />
</FodGrid>
<FodGrid item xs="12" sm="6">
<FodTextField Label="CNP"
@bind-Value="employeeModel.PersonalId" />
</FodGrid>
</FodGrid>
</FodCardWrapper>
<FodCardWrapper Title="Date contact"
Icon="@FodIcons.Material.Filled.ContactPhone"
IconColor="FodColor.Secondary">
<FodTextField Label="Email"
@bind-Value="employeeModel.Email"
Type="email" />
<FodTextField Label="Telefon"
@bind-Value="employeeModel.Phone" />
<FodTextField Label="Adresă"
@bind-Value="employeeModel.Address"
Multiline="true"
Rows="3" />
</FodCardWrapper>
<FodCardWrapper Title="Informații angajare"
Icon="@FodIcons.Material.Filled.Work"
IconColor="FodColor.Primary">
<FodSelect T="string" Label="Departament"
@bind-Value="employeeModel.Department">
<FodSelectItem Value="HR">Resurse Umane</FodSelectItem>
<FodSelectItem Value="IT">IT</FodSelectItem>
<FodSelectItem Value="Sales">Vânzări</FodSelectItem>
</FodSelect>
<FodTextField Label="Funcție"
@bind-Value="employeeModel.Position" />
<FodDatePicker Label="Data angajării"
@bind-Value="employeeModel.HireDate" />
</FodCardWrapper>
<div class="text-end mt-3">
<FodButton Type="submit" Color="FodColor.Primary">
Salvează
</FodButton>
</div>
</EditForm>
Card cu acțiuni în header (extins)
@* ExtendedCardWrapper.razor *@
<FodCard Class="mb-2" HeaderClass="bg-light">
<HeaderTemplate>
<div class="d-flex justify-content-between align-items-center">
<FodText Class="m-1 display-2" Style="font-weight: 500;" Typo="Typo.h3">
<FodIcon Icon="@Icon" Color="@IconColor"/>
@Title
</FodText>
@if (HeaderActions != null)
{
<div class="header-actions">
@HeaderActions
</div>
}
</div>
</HeaderTemplate>
<BodyTemplate>
@ChildContent
</BodyTemplate>
</FodCard>
@code {
[Parameter] public string Title { get; set; }
[Parameter] public string Icon { get; set; }
[Parameter] public FodColor IconColor { get; set; } = FodColor.Primary;
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public RenderFragment HeaderActions { get; set; }
}
@* Utilizare *@
<ExtendedCardWrapper Title="Listă utilizatori"
Icon="@FodIcons.Material.Filled.People">
<HeaderActions>
<FodButton Size="FodSize.Small"
StartIcon="@FodIcons.Material.Filled.Add">
Adaugă utilizator
</FodButton>
</HeaderActions>
<ChildContent>
<!-- Listă utilizatori -->
</ChildContent>
</ExtendedCardWrapper>
6. Stilizare CSS
/* Override pentru header */
.fod-card .bg-light {
background-color: #f8f9fa !important;
border-bottom: 1px solid var(--fod-palette-divider);
}
/* Stilizare titlu în header */
.fod-card-header .display-2 {
display: flex;
align-items: center;
gap: 0.5rem;
margin: 0.5rem;
}
/* Iconițe în header */
.fod-card-header .fod-icon-root {
font-size: 1.75rem;
}
/* Spacing între card-uri */
.fod-card.mb-2 {
margin-bottom: 1rem !important;
}
/* Responsive */
@media (max-width: 600px) {
.fod-card-header .display-2 {
font-size: 1.25rem !important;
}
.fod-card-header .fod-icon-root {
font-size: 1.5rem;
}
}
7. Scenarii de Utilizare
Wizard cu pași în card-uri
<FodWizard>
<FodWizardStep Title="Informații generale">
<FodCardWrapper Title="Detalii proiect"
Icon="@FodIcons.Material.Filled.Description">
<FodTextField Label="Nume proiect" @bind-Value="project.Name" />
<FodTextArea Label="Descriere" @bind-Value="project.Description" />
</FodCardWrapper>
</FodWizardStep>
<FodWizardStep Title="Echipă">
<FodCardWrapper Title="Membri echipă"
Icon="@FodIcons.Material.Filled.Groups"
IconColor="FodColor.Info">
<!-- Selector membri echipă -->
</FodCardWrapper>
</FodWizardStep>
<FodWizardStep Title="Planificare">
<FodCardWrapper Title="Timeline proiect"
Icon="@FodIcons.Material.Filled.Schedule"
IconColor="FodColor.Warning">
<FodDateRangePicker Label="Perioadă proiect"
@bind-StartDate="project.StartDate"
@bind-EndDate="project.EndDate" />
</FodCardWrapper>
</FodWizardStep>
</FodWizard>
Card-uri colapsabile
@foreach (var section in formSections)
{
<FodCardWrapper Title="@section.Title"
Icon="@section.Icon"
IconColor="@section.IconColor">
@if (section.IsExpanded)
{
<div class="card-content">
@section.Content
</div>
}
<div class="text-end">
<FodButton Variant="FodVariant.Text"
Size="FodSize.Small"
OnClick="() => ToggleSection(section)">
@(section.IsExpanded ? "Restrânge" : "Extinde")
</FodButton>
</div>
</FodCardWrapper>
}
@code {
private List<FormSection> formSections = new();
private void ToggleSection(FormSection section)
{
section.IsExpanded = !section.IsExpanded;
}
public class FormSection
{
public string Title { get; set; }
public string Icon { get; set; }
public FodColor IconColor { get; set; }
public RenderFragment Content { get; set; }
public bool IsExpanded { get; set; } = true;
}
}
8. Best Practices
- Iconițe descriptive - Folosiți iconițe care reprezintă conținutul
- Culori consistente - Mențineți o paletă de culori coerentă
- Titluri clare - Titluri scurte și descriptive
- Grupare logică - Grupați conținutul related într-un card
- Spacing consistent - Folosiți marginile implicite
9. Performanță
- Componentă lightweight, doar wrapper peste FodCard
- Nu adaugă logică complexă
- Randare eficientă
10. Accesibilitate
- Structură semantică cu header și body
- Iconițele sunt decorative (nu necesită alt text)
- Titlul oferă context pentru conținut
- Contrast adecvat pentru header
11. Comparație cu FodCard
Caracteristică | FodCard | FodCardWrapper |
---|---|---|
Header custom | Da | Pre-stilizat |
Flexibilitate | Maximă | Limitată |
Ușurință utilizare | Necesită mai mult cod | Rapid de implementat |
Use case | Card-uri complexe | Card-uri standard |
12. Migrare de la FodCard
@* Înainte - FodCard *@
<FodCard Class="mb-2" HeaderClass="bg-light">
<HeaderTemplate>
<FodText Class="m-1 display-2" Style="font-weight: 500;" Typo="Typo.h3">
<FodIcon Icon="@FodIcons.Material.Filled.Settings" Color="FodColor.Primary"/>
Setări
</FodText>
</HeaderTemplate>
<BodyTemplate>
<!-- conținut -->
</BodyTemplate>
</FodCard>
@* După - FodCardWrapper *@
<FodCardWrapper Title="Setări"
Icon="@FodIcons.Material.Filled.Settings">
<!-- conținut -->
</FodCardWrapper>
13. Troubleshooting
Iconița nu apare
- Verificați că valoarea Icon este validă
- Verificați importul FodIcons
Stilizare inconsistentă
- Verificați că nu există CSS care suprascrie stilurile
- Folosiți !important dacă e necesar
14. Concluzie
FodCardWrapper
simplifică crearea de card-uri cu header-e standardizate, reducând codul boilerplate și asigurând consistență vizuală. Perfect pentru formulare structurate, dashboard-uri și orice aplicație care necesită gruparea vizuală a conținutului cu titluri și iconițe descriptive.