FodMask
Descriere Generală
Componenta FodMask
oferă funcționalitate avansată de mascare pentru câmpuri de input, permițând formatarea automată a textului introdus conform unor pattern-uri predefinite. Este ideală pentru formate standardizate precum numere de telefon, CNP-uri, IBAN-uri, coduri poștale și alte formate structurate.
Componenta suportă mai multe tipuri de măști: - PatternMask - Pentru pattern-uri fixe - RegexMask - Pentru validare cu expresii regulate - MultiMask - Pentru pattern-uri multiple - BlockMask - Pentru blocuri de caractere
Ghid de Utilizare API
Exemplu de bază - număr de telefon
<FodMask @bind-Value="phoneNumber"
Mask="@(new PatternMask("(000) 000-0000"))"
Label="Număr telefon"
Placeholder="(xxx) xxx-xxxx" />
@code {
private string phoneNumber;
}
CNP/IDNP cu pattern mask
<FodMask @bind-Value="cnp"
Mask="@(new PatternMask("0 000000 00000 0"))"
Label="CNP"
Clearable="true" />
@code {
private string cnp;
}
Card bancar cu block mask
<FodMask @bind-Value="cardNumber"
Mask="@(new BlockMask("0000 0000 0000 0000"))"
Label="Număr card"
Placeholder="0000 0000 0000 0000"
AdornmentIcon="@FodIcons.Material.Filled.CreditCard"
Adornment="Adornment.Start" />
@code {
private string cardNumber;
}
Data cu pattern personalizat
<FodMask @bind-Value="date"
Mask="@(new PatternMask("00/00/0000"))"
Label="Data (LL/ZZ/AAAA)"
HelperText="Format: lună/zi/an" />
@code {
private string date;
}
Multi-mask pentru diferite formate
<FodMask @bind-Value="identifier"
Mask="@multiMask"
Label="CNP sau Pașaport"
Placeholder="CNP sau nr. pașaport" />
@code {
private string identifier;
private MultiMask multiMask = new MultiMask("00000000000000|AA 0000000",
new PatternMask("00000000000000"), // CNP
new PatternMask("AA 0000000") // Pașaport
);
}
Cu validare regex
<FodMask @bind-Value="ipAddress"
Mask="@(new RegexMask(@"^(\d{1,3}\.){3}\d{1,3}$", '0'))"
Label="Adresă IP"
Placeholder="192.168.1.1"
OnClearButtonClick="@(() => ipAddress = string.Empty)" />
@code {
private string ipAddress;
}
Atribute disponibile
Atribut | Tip | Valoare implicită | Descriere |
---|---|---|---|
Mask | IMask | PatternMask(" - ") | Obiectul de mascare |
Value | string | - | Valoarea curată (fără formatare) |
Text | string | - | Textul formatat cu mască |
InputType | InputType | Text | Tipul câmpului input |
Clearable | bool | false | Afișează buton de ștergere |
ClearIcon | string | Material.Filled.Clear | Iconița pentru butonul clear |
Placeholder | string | - | Text placeholder |
Label | string | - | Eticheta câmpului |
HelperText | string | - | Text ajutător |
Variant | FodVariant | Text | Varianta vizuală |
Margin | Margin | None | Marginea componentei |
Adornment | Adornment | None | Poziția adornment-ului |
AdornmentIcon | string | - | Iconița pentru adornment |
AdornmentText | string | - | Text pentru adornment |
AdornmentColor | FodColor | Default | Culoarea adornment-ului |
IconSize | FodSize | Medium | Dimensiunea iconiței |
DisableUnderLine | bool | false | Dezactivează linia de subliniere |
Evenimente
Eveniment | Tip | Descriere |
---|---|---|
ValueChanged | EventCallback |
Declanșat când valoarea se schimbă |
OnClearButtonClick | EventCallback |
Click pe butonul clear |
OnBlur | EventCallback |
Pierderea focusului |
OnKeyDown | EventCallback |
Tastă apăsată |
Metode publice
Metodă | Descriere |
---|---|
Clear() | Șterge textul și valoarea |
FocusAsync() | Setează focus pe input |
SelectAsync() | Selectează tot textul |
SelectRangeAsync(int pos1, int pos2) | Selectează un interval de text |
Componente asociate
- FodInputAdornment - Pentru iconițe și text adițional
- FodIconButton - Pentru butonul de ștergere
- IMask - Interfața pentru obiectele de mascare
Tipuri de măști
PatternMask
// 0 - cifră obligatorie
// 9 - cifră opțională
// * - orice caracter
new PatternMask("(000) 000-0000") // Telefon US
new PatternMask("00-00-0000") // Dată
new PatternMask("AA 0000000") // Pașaport
BlockMask
// Pentru grupuri de caractere
new BlockMask("0000 0000 0000 0000") // Card
new BlockMask("AA00 AA00") // Cod produs
RegexMask
// Validare cu regex
new RegexMask(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$", '0') // IP
new RegexMask(@"^[A-Z]{2}\d{6}$", '*') // ID
MultiMask
// Măști multiple bazate pe input
new MultiMask("00000000000000|AA 0000000",
new PatternMask("00000000000000"),
new PatternMask("AA 0000000")
)
Stilizare
Componenta moștenește stilurile de la FodInput cu clase adiționale pentru mascare.
Personalizare
/* Container principal */
.fod-mask .fod-input {
font-family: monospace;
}
/* Input field */
.fod-mask .fod-input-slot {
letter-spacing: 0.1em;
}
/* Clear button */
.fod-mask .fod-icon-button-edge-end {
opacity: 0.7;
}
.fod-mask .fod-icon-button-edge-end:hover {
opacity: 1;
}
Note și observații
- Valoare vs Text -
Value
conține textul curat,Text
conține textul formatat - Caret management - Poziția cursorului este gestionată automat
- Copy/Paste - Suportă operații clipboard cu formatare corectă
- Keyboard navigation - Gestionează taste speciale (Backspace, Delete, etc.)
- JS Interop - Folosește JS pentru gestionarea avansată a cursorului
Bune practici
- Pattern clar - Folosiți placeholder pentru a indica formatul așteptat
- Helper text - Adăugați explicații pentru formate complexe
- Validare - Combinați cu validatori pentru verificare completă
- Măști simple - Preferați PatternMask pentru majoritatea cazurilor
- Performance - Evitați regex-uri complexe în RegexMask
Exemple avansate
Formular complet cu măști
<EditForm Model="@model" OnValidSubmit="@HandleSubmit">
<DataAnnotationsValidator />
<FodMask @bind-Value="model.Phone"
Mask="@(new PatternMask("+00 (000) 000-000"))"
Label="Telefon"
Required="true" />
<FodMask @bind-Value="model.CNP"
Mask="@(new PatternMask("0000000000000"))"
Label="CNP"
Required="true" />
<FodMask @bind-Value="model.IBAN"
Mask="@(new PatternMask("AA00 AAAA 0000 0000 0000 0000"))"
Label="IBAN"
HelperText="Format: MD00 XXXX 0000 0000 0000 0000" />
<FodButton Type="submit">Salvează</FodButton>
</EditForm>
Mască dinamică
<FodSelect @bind-Value="maskType" Label="Tip document">
<FodSelectItem Value="cnp">CNP</FodSelectItem>
<FodSelectItem Value="passport">Pașaport</FodSelectItem>
</FodSelect>
<FodMask @bind-Value="documentNumber"
Mask="@GetMask()"
Label="Număr document"
Placeholder="@GetPlaceholder()" />
@code {
private string maskType = "cnp";
private string documentNumber;
private IMask GetMask() => maskType switch
{
"cnp" => new PatternMask("0000000000000"),
"passport" => new PatternMask("AA 0000000"),
_ => new PatternMask("*********")
};
private string GetPlaceholder() => maskType switch
{
"cnp" => "1234567890123",
"passport" => "AB 1234567",
_ => ""
};
}
Concluzie
FodMask oferă o soluție completă pentru formatarea automată a input-urilor conform pattern-urilor predefinite. Cu suport pentru multiple tipuri de măști, gestionare inteligentă a cursorului și integrare perfectă cu formularele Blazor, componenta îmbunătățește semnificativ experiența utilizatorului pentru introducerea datelor structurate.