OtpInput
The OTP input is used for MFA procedure of authenticating users by a one-time password.
Usage
Basic
Basic usage examples of BitOtpInput, including different lengths, disabled state, auto-shift, and autofocus.
Basic
Disabled
Length = 4
AutoShift
AutoFocus
<BitOtpInput />
<BitOtpInput IsEnabled="false" />
<BitOtpInput Length="4" />
<BitOtpInput AutoShift />
<BitOtpInput AutoFocus />Label
Label can express the title of the otp inputs.
Label:
LabelTemplate:
<BitOtpInput Label="OTP" />
<BitOtpInput>
<LabelTemplate>
<BitStack Horizontal>
<BitText Gutter><i>Custom label</i></BitText>
<BitSpacer />
<BitIcon IconName="@BitIconName.TemporaryAccessPass" />
</BitStack>
</LabelTemplate>
</BitOtpInput>Type
Set different input types for the OTP input: text, number, and password.
<BitOtpInput Label="Text" Type="BitInputType.Text" />
<BitOtpInput Label="Number" Type="BitInputType.Number" />
<BitOtpInput Label="Password" Type="BitInputType.Password" />Directions
Demonstrating various layout directions for BitOtpInput: default, reversed, vertical, and reversed vertical.
<BitOtpInput Label="Default" />
<BitOtpInput Label="Reversed" Reversed />
<BitOtpInput Label="Vertical" Vertical />
<BitOtpInput Label="Reversed Vertical" Vertical Reversed />Binding
Examples of one-way and two-way data binding with BitOtpInput.
<BitOtpInput Label="One-way" Value="@oneWayValue" /> <BitTextField Style="margin-top: 5px;" @bind-Value="oneWayValue" /> <BitOtpInput Label="Two-way" @bind-Value="twoWayValue" /> <BitTextField Style="margin-top: 5px;" @bind-Value="twoWayValue" />@code { private string? oneWayValue; private string? twoWayValue; }
Events
Handle various events in BitOtpInput, including change, fill, focus, input, keydown, and paste events.
OnChange value:
OnFill value:
Focus type:
Input index:
Focus type:
Input index:
Value:
Input index:
Key & Code: [] []
Input index:
Focus type:
Input index:
<BitOtpInput Label="OnChange" OnChange="v => onChangeValue = v" /> <div>OnChange value: @onChangeValue</div> <BitOtpInput Label="OnFill" OnFill="v => onFillValue = v" /> <div>OnFill value: @onFillValue</div> <BitOtpInput Label="OnFocusIn" OnFocusIn="args => onFocusInArgs = args" /> <div>Focus type: @onFocusInArgs?.Event.Type</div> <div>Input index: @onFocusInArgs?.Index</div> <BitOtpInput Label="OnFocusOut" OnFocusOut="args => onFocusOutArgs = args" /> <div>Focus type: @onFocusOutArgs?.Event.Type</div> <div>Input index: @onFocusOutArgs?.Index</div> <BitOtpInput Label="OnInput" OnInput="args => onInputArgs = args" /> <div>Value: @onInputArgs?.Event.Value</div> <div>Input index: @onInputArgs?.Index</div> <BitOtpInput Label="OnKeyDown" OnKeyDown="args => onKeyDownArgs = args" /> <div>Key & Code: [@onKeyDownArgs?.Event.Key] [@onKeyDownArgs?.Event.Code]</div> <div>Input index: @onKeyDownArgs?.Index</div> <BitOtpInput Label="OnPaste" OnPaste="args => onPasteArgs = args" /> <div>Focus type: @onPasteArgs?.Event.Type</div> <div>Input index: @onPasteArgs?.Index</div>@code { private string? onChangeValue; private string? onFillValue; private (FocusEventArgs Event, int Index)? onFocusInArgs; private (FocusEventArgs Event, int Index)? onFocusOutArgs; private (ChangeEventArgs Event, int Index)? onInputArgs; private (KeyboardEventArgs Event, int Index)? onKeyDownArgs; private (ClipboardEventArgs Event, int Index)? onPasteArgs; }
Validation
Use data annotations to validate the BitOtpInput component in a form submission scenario.
<style> .validation-message { color: red; font-size: 0.75rem; } </style> <EditForm Model="validationOtpInputModel" OnValidSubmit="HandleValidSubmit" OnInvalidSubmit="HandleInvalidSubmit"> <DataAnnotationsValidator /> <BitOtpInput Length="6" @bind-Value="validationOtpInputModel.OtpValue" /> <ValidationMessage For="() => validationOtpInputModel.OtpValue" /> <BitButton Style="margin-top: 10px;" ButtonType="BitButtonType.Submit">Submit</BitButton> </EditForm>@code { public class ValidationOtpInputModel { [Required(ErrorMessage = "The OTP value is required.")] [MinLength(6, ErrorMessage = "Minimum length is 6.")] public string OtpValue { get; set; } } private ValidationOtpInputModel validationOtpInputModel = new(); private void HandleValidSubmit() { } private void HandleInvalidSubmit() { } }
Size
Varying sizes for inputs tailored to meet diverse design needs, ensuring flexibility and visual hierarchy within your interface.
<BitOtpInput Label="Small" Size="BitSize.Small" />
<BitOtpInput Label="Medium" Size="BitSize.Medium" />
<BitOtpInput Label="Large" Size="BitSize.Large" />Style & Class
Explore styling and class customization for BitOtpInput, including component styles, custom classes, and detailed styles.
Component's Style & Class:
Styles & Classes:
<style>
.custom-class {
gap: 1rem;
margin-inline: 1rem;
}
.custom-class input {
border-radius: 0;
border-width: 0 0 1px 0;
border-color: lightseagreen;
}
.custom-root {
margin-inline: 1rem;
}
.custom-input {
border-radius: 50%;
border: 1px solid tomato;
}
.custom-focused {
border-color: red;
box-shadow: tomato 0 0 1rem;
}
</style>
<BitOtpInput Style="margin-inline: 1rem; box-shadow: aqua 0 0 0.5rem;" />
<BitOtpInput Class="custom-class" />
<BitOtpInput Styles="@(new() { Root = "margin-inline: 1rem;",
Input = "border-color: blueviolet;",
Focused = "box-shadow: blueviolet 0 0 1rem;" })" />
<BitOtpInput Classes="@(new() { Root = "custom-root",
Input = "custom-input",
Focused = "custom-focused" })" />RTL
Use BitOtpInput in right-to-left (RTL).
<BitOtpInput Label="Default" Dir="BitDir.Rtl" />
<BitOtpInput Label="Reversed" Reversed Dir="BitDir.Rtl" />API
BitOtpInput parameters
Name |
Type |
Default value |
Description |
|---|---|---|---|
| AutoFocus | bool | false | If true, the first input is auto focused. |
| AutoShift | bool | false | Enables auto shifting the indexes while clearing the inputs using Delete or Backspace. |
| Classes | BitOtpInputClassStyles? | null | Custom CSS classes for different parts of the BitOtpInput. |
| Label | string? | null | Label displayed above the inputs. |
| LabelTemplate | RenderFragment? | null | Custom template for the label displayed above the inputs. |
| Length | int | 5 | Length of the OTP or number of the inputs. |
| OnFill | EventCallback<string?> | Callback for when all of the inputs are filled. | |
| OnFocusIn | EventCallback<FocusEventArgs> | onfocusin event callback for each input. | |
| OnFocusOut | EventCallback<FocusEventArgs> | onfocusout event callback for each input. | |
| OnInput | EventCallback<ChangeEventArgs> | oninput event callback for each input. | |
| OnKeyDown | EventCallback<KeyboardEventArgs> | onkeydown event callback for each input. | |
| OnPaste | EventCallback<ClipboardEventArgs> | onpaste event callback for each input. | |
| Reversed | bool | false | Defines whether to render inputs in the opposite direction. |
| Size | BitSize? | null | The size of the inputs. |
| Styles | BitOtpInputClassStyles? | null | Custom CSS styles for different parts of the BitOtpInput. |
| Type | BitInputType? | null | Type of the inputs. |
| Vertical | bool | false | Defines whether to render inputs vertically. |
BitOtpInput public members
Name |
Type |
Default value |
Description |
|---|---|---|---|
| InputElements | ElementReference[] | The ElementReferences to the input elements of the BitOtpInput. | |
| FocusAsync | ValueTask | Gives focus to a specific input element of the BitOtpInput. |
BitInputBase parameters
Name |
Type |
Default value |
Description |
|---|---|---|---|
| DisplayName | string? | null | Gets or sets the display name for this field. |
| InputHtmlAttributes | IReadOnlyDictionary<string, object>? | null | Gets or sets a collection of additional attributes that will be applied to the created element. |
| Name | string? | null | Gets or sets the name of the element. Allows access by name from the associated form. |
| NoValidate | bool | false | Disables the validation of the input. |
| OnChange | EventCallback<TValue?> | Callback for when the input value changes. | |
| ReadOnly | bool | false | Makes the input read-only. |
| Required | bool | false | Makes the input required. |
| Value | TValue? | null | Gets or sets the value of the input. This should be used with two-way binding. |
BitInputBase public members
Name |
Type |
Default value |
Description |
|---|---|---|---|
| InputElement | ElementReference | The ElementReference of the input element. | |
| FocusAsync() | () => ValueTask | Gives focus to the input element. | |
| FocusAsync(bool preventScroll) | (bool preventScroll) => ValueTask | Gives focus to the input element. |
BitComponentBase parameters
Name |
Type |
Default value |
Description |
|---|---|---|---|
| AriaLabel | string? | null | The aria-label of the control for the benefit of screen readers. |
| Class | string? | null | Custom CSS class for the root element of the component. |
| Dir | BitDir? | null | Determines the component direction. |
| HtmlAttributes | Dictionary<string, object> | new Dictionary<string, object>() | Capture and render additional attributes in addition to the component's parameters. |
| Id | string? | null | Custom id attribute for the root element. if null the UniqueId will be used instead. |
| IsEnabled | bool | true | Whether or not the component is enabled. |
| Style | string? | null | Custom CSS style for the root element of the component. |
| Visibility | BitVisibility | BitVisibility.Visible | Whether the component is visible, hidden or collapsed. |
BitComponentBase public members
Name |
Type |
Default value |
Description |
|---|---|---|---|
| UniqueId | Guid | Guid.NewGuid() | The readonly unique id of the root element. it will be assigned to a new Guid at component instance construction. |
| RootElement | ElementReference | The ElementReference of the root element. |
BitOtpInputClassStyles properties
Name |
Type |
Default value |
Description |
|---|---|---|---|
| Root | string? | null | Custom CSS classes/styles for the root element of the otp input. |
| Label | string? | null | Custom CSS classes/styles for the label of the otp input. |
| InputsWrapper | string? | null | Custom CSS classes/styles for the wrapper element of the inputs. |
| Input | string? | null | Custom CSS classes/styles for each input in otp input. |
| Focused | string? | null | Custom CSS classes/styles for the focused input in otp input. |
BitSize enum
Name |
Value |
Description |
|---|---|---|
| Small | 0 | The small size. |
| Medium | 1 | The medium size. |
| Large | 2 | The large size. |
BitInputType enum
Name |
Value |
Description |
|---|---|---|
| Text | 0 | The input expects text characters. |
| Password | 1 | The input expects password characters. |
| Number | 2 | The input expects number characters. |
| 3 | The input expects email characters. | |
| Tel | 4 | The input expects tel characters. |
| Url | 5 | The input expects url characters. |
BitVisibility enum
Name |
Value |
Description |
|---|---|---|
| Visible | 0 | The content of the component is visible. |
| Hidden | 1 | The content of the component is hidden, but the space it takes on the page remains (visibility:hidden). |
| Collapsed | 2 | The component is hidden (display:none). |
BitDir enum
Name |
Value |
Description |
|---|---|---|
| Ltr | 0 | Ltr (left to right) is to be used for languages that are written from the left to the right (like English). |
| Rtl | 1 | Rtl (right to left) is to be used for languages that are written from the right to the left (like Arabic). |
| Auto | 2 | Auto lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then applies that directionality to the whole element. |
Feedback
You can give us your feedback through our GitHub repo by filing a new Issue or starting a new Discussion.
Or you can review / edit this page on GitHub.
Or you can review / edit this component on GitHub.
- On this page