Accent color
# Toggle
**Also known as:** Switch
## Description
A toggle represents a physical switch that allows someone to choose between two mutually exclusive options. For example, “On/Off”, “Show/Hide”. Choosing an option should produce an immediate result.
## Parameters
| Name | Type | Default Value | Description |
| :--- | :--- | :------------ | :---------- |
| Classes | `BitToggleClassStyles?` | null | Custom CSS classes for different parts of the toggle. |
| FullWidth | `bool` | false | Renders the toggle in full width of its container while putting space between the label and the knob. |
| Inline | `bool` | false | Renders the label and the knob in a single line together. |
| Label | `string?` | null | Label of the toggle. |
| LabelTemplate | `RenderFragment?` | null | Custom label of the toggle. |
| OffText | `string?` | null | Text to display when toggle is OFF. |
| OnText | `string?` | null | Text to display when toggle is ON. |
| Role | `string` | switch | Denotes role of the toggle, default is switch. |
| Styles | `BitToggleClassStyles?` | null | Custom CSS styles for different parts of the toggle. |
| Text | `string?` | null | Default text used when the On or Off texts are null. |
| DefaultValue | `TValue?` | null | The default value of the input to be used in uncontrolled mode (i.e. when the Value is not bound), typically used alongside the OnChange callback. |
| 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. |
| AriaLabel | `string?` | null | Gets or sets the accessible label for the component, used by assistive technologies. |
| Class | `string?` | null | Gets or sets the CSS class name(s) to apply to the rendered element. |
| Dir | `BitDir?` | null | Gets or sets the text directionality for the component's content. |
| ForceAnimation | `bool` | false | Gets or sets a value indicating whether the component's animations play at their full duration even when reduced motion is requested. |
| HtmlAttributes | `Dictionary<string, object>` | new Dictionary<string, object>() | Captures additional HTML attributes to be applied to the rendered element, in addition to the component's parameters. |
| Id | `string?` | null | Gets or sets the unique identifier for the component's root element. |
| IsEnabled | `bool` | true | Gets or sets a value indicating whether the component is enabled and can respond to user interaction. |
| Style | `string?` | null | Gets or sets the CSS style string to apply to the rendered element. |
| TabIndex | `string?` | null | Gets or sets the tab order index for the component when navigating with the keyboard. |
| Visibility | `BitVisibility` | BitVisibility.Visible | Gets or sets the visibility state (visible, hidden, or collapsed) of the component. |
## 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. |
| UniqueId | `Guid` | Guid.NewGuid() | Gets the readonly unique identifier for the component's root element, assigned when the component instance is constructed. |
| RootElement | `ElementReference` | | Gets the reference to the root HTML element associated with this component. |
## Enums
### 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. |
## Sub Classes
### BitToggleClassStyles Properties
| Name | Type | Default Value | Description |
| :--- | :--- | :------------ | :---------- |
| Root | `string?` | null | Custom CSS classes/styles for the root element of the BitToggle. |
| Label | `string?` | null | Custom CSS classes/styles for the label of the BitToggle. |
| Container | `string?` | null | Custom CSS classes/styles for the container of the BitToggle. |
| Button | `string?` | null | Custom CSS classes/styles for the button of the BitToggle. |
| Checked | `string?` | null | Custom CSS classes/styles for the checked state of the BitToggle. |
| Thumb | `string?` | null | Custom CSS classes/styles for the thumb of the BitToggle. |
| Text | `string?` | null | Custom CSS classes/styles for the text of the BitToggle. |
## Examples
\n**Basic**:
```razor
```
\n**Texts**:
```razor
```
\n**Label**:
```razor
This is custom Label
```
\n**Reversed**:
```razor
```
\n**FullWidth**:
```razor
```
\n**Binding**:
```razor
```
```csharp
private bool oneWayValue;
private bool twoWayValue;
```
\n**Style & Class**:
```razor
```
\n**Validation**:
```razor
Submit
```
```csharp
public class BitToggleValidationModel
{
[Range(typeof(bool), "true", "true", ErrorMessage = "You must agree to the terms and conditions.")]
public bool TermsAgreement { get; set; } = true;
}
public BitToggleValidationModel validationModel { get; set; } = new();
private async Task HandleValidSubmit() { }
private void HandleInvalidSubmit() { }
```
\n**RTL**:
```razor
```