Inputs
TextField
Text fields give people a way to enter and edit text. They're used in forms, modal dialogs, tables, and other surfaces where text input is required. A single BitTextField renders either an input or a textarea, carries a label in any of the four positions around it, a visible or screen-reader-only description, a character counter and a message saying why the value was rejected, exposes every part of its chrome to templates and to the Styles and Classes parameters, wires its own labels and descriptions to the input through the aria attributes, and plugs into an EditForm the same way the built-in Blazor inputs do.
Usage
Every example is live. Open its code to see exactly what produced the component running underneath.
Basics
aria-describedby. Disabled takes the field out of the tab order entirely,
while ReadOnly keeps it focusable and copyable but refuses edits. Required renders the html
required attribute and marks the label with an asterisk, MaxLength and MinLength map to
the html length constraints, AutoFocus puts the caret in the field on the first render, and FullWidth
makes the field fill the width of its container instead of sizing to its content.
Variants
Multiline
off turns the wrapping off entirely and scrolls long lines sideways, which is what a field holding
code or log lines wants, and hard makes the breaks the wrapping adds travel with the submitted value.
Input type
text field asking for a PIN can still show the numeric keypad. EnterKeyHint relabels the return
key of that keyboard, and Pattern, SpellCheck, AutoCorrect and AutoCapitalize pass
through to the matching html attributes. The number type here is only the html one - the value is still bound as a
string and there is no bound, no step and no spinner: a field that really holds a number wants
BitNumberField, which binds any .NET numeric type and brings the clamping,
the stepping and the spinbutton keyboard set with it.
Icon & affixes
https:// prefix still binds only what was typed - so keep a descriptive label on the field, since a
screen reader reads the value without the affixes around it.
All three follow the reading direction rather than the screen, so they mirror themselves in a right-to-left page. The icon is decorative by default - hidden from screen readers and not focusable - and one that carries a meaning of its own gets a name through IconAriaLabel, shown in the Accessibility section. It picks up the Accent color while the field has focus, and the whole frame shows a text cursor and means it: a press on an affix, on the icon or on the busy indicator puts the caret in the input.
OnIconClick turns the icon into an action instead - opening a picker, copying the value, running a search. Giving it a handler renders the icon as a real button: it takes a tab stop, answers Enter and Space and draws a focus ring of its own, so pair it with an IconAriaLabel that says what pressing it does, and with an IconTitle for the tooltip. It keeps working on a read-only field, since an action the icon stands for is not an edit, and it is disabled along with the field.
Password
aria-pressed, which is what screen readers announce reliably; the caret is handed back
to the input after every toggle. RevealPasswordIconName and HidePasswordIconName customize the two
icons, and the native reveal affordance that Edge and Internet Explorer add to a password input is taken away so
that only one of them is ever shown. The ToggleRevealPassword method drives the same toggle from the
outside - from a checkbox next to the form, for instance - and is ignored unless the field is a revealable
password, so a revealed value can never survive the reveal being taken away. Pair the field with an
AutoComplete of current-password or new-password: it is what tells a password
manager whether to offer the saved credentials or to generate a new one, and it is the difference between a sign-in
form that fills itself and one that fights the browser.
Binding
Trim strips the leading and trailing whitespace off whatever is committed, which is what keeps a stray space from being saved along with an email address or a coupon code. It runs on the change event rather than on every keystroke, so a space can still be typed in the middle of a word while Immediate is on, and it leaves a DefaultValue alone, since that one is assigned as it is given.
Whatever the field ends up holding is what is left on screen: a trimmed value, and the old value of a Value bound without a ValueChanged or an OnChange, are both written back into the input, so the text under the caret is never something the field is not actually holding.
[]
[]
Clear button
Character count
typed/limit and is
pointed at by aria-describedby, so a screen reader announces the limit along with the field; without
one it is just the number of characters typed so far. The counter follows the keystrokes directly rather than the
bound value, so it stays live even when Immediate is off and the value is only committed on blur.
CountTemplate replaces the whole text with content of its own, shown in the
Templates section. A count above the limit turns red: the keyboard cannot get there, since
MaxLength renders the html maxlength attribute, but a value assigned from the code can, and a
counter reading a number above its own limit in the muted grey of a valid one would say nothing about it.
By default the characters are counted the way the browser counts them against the limit - in UTF-16 code units - which makes an emoji count as two and a family emoji as eleven. CountStrategy replaces that with a count of your own, most often
StringInfo.LengthInTextElements, which counts what a reader actually sees. It only
changes the number that is shown: the maxlength attribute keeps holding the keyboard back at its own
count, so a strategy that counts fewer characters than the browser does reaches the limit before the counter says so.
Templates
GhostText
Events
OnInput is the one that fires on every input event, whichever way the text arrived - a keystroke, a paste, a drop, an autofill - which is what a strength meter or a live preview needs. Unlike OnChange it does not wait for the field to lose focus and it does not require Immediate, so it can watch the text without committing it, and it is raised before DebounceTime and ThrottleTime hold the value back rather than along with it. Like the rest of the events it stays quiet while an input method editor is composing, so it never sees a half-composed word.
Selection
Label position
Loading
aria-busy while it is on, which is what tells an assistive technology that what it is reading is still
being worked on, and a polite live region that is always part of the field announces that it started - politely, so
it waits for the reader to finish the sentence it is on rather than cutting into it. LoadingAriaLabel is what
that announcement says instead of the default "Loading", and LoadingTemplate replaces the spinner with any
content - one of the other loading components of the library, an icon, a piece of text - without costing the field
its announcement.
Accessibility
aria-describedby,
in reading order, alongside the error message that comes first when there is one and the
character counter when it carries a limit. An aria-describedby of your
own, passed through InputHtmlAttributes, is kept and read first rather than replaced, which is what lets a
field point at an error message the app renders next to it and still keep its own description. An
aria-labelledby of your own is kept the same way and names the field instead of the visible label,
which is what a field labelled by a heading or a table column header needs.
Title renders the html title of the
field, which the browser shows as a tooltip on hover. The trailing icon is decorative and hidden from screen readers
by default; IconAriaLabel turns it into an image with a name for the cases where the icon carries a meaning of
its own. The placeholder is painted from the theme rather than left to the grey the browser picks, which fails the
contrast floor on a dark surface - but it still disappears the moment anything is typed, so it never carries what
the Label and the Description should.
The field keeps one polite live region of its own, which is what carries the things that happen away from the caret: a rejection that arrives while the field still has focus, the busy state, an inline suggestion, and the emptying of the field by the clear button - ClearedAnnouncement is what that last one says. They are announced politely, so none of them ever cuts into what is being read. AutoComplete is what says which piece of personal information a field collects, which a browser, a password manager and an assistive technology all read; a field asking for a name, an address, an email or a credential wants one (WCAG 2.2, Identify Input Purpose).
In Windows High Contrast the whole palette collapses to the system pair, which would take four of the states of the field with it: the disabled field is redrawn in the system grey, the rejected frame becomes a dashed one rather than a red one, the ghost suggestion keeps reading as a suggestion instead of as text already in the value, and a field that deliberately has no frame is given one back, since there is nothing else left to say where it is.
Validation
EditContext automatically, so the data
annotations on the model drive it: a failing field gets the bit-inv class and the
aria-invalid="true" attribute, and the state is refreshed on every validation pass. Use
NoValidate to opt a field out of the EditContext altogether, and DisplayName to control the name used
in the generated messages.
Not every rejection comes from a data annotation, though - a name a server reports as taken, a rule that needs two fields to be compared, a field that lives outside any form at all. Invalid forces the same state from the outside: the same red frame, the same focus ring and the same
aria-invalid, without an
EditContext being involved. It only ever adds to the validation of the field, so a value the
EditContext already rejected stays invalid whatever the parameter says.
ErrorMessage is what turns that red frame into something the reader can act on: the text is rendered under the field, above the description and the counter, and setting it marks the field invalid on its own - there is no need to also set Invalid. It is referenced by the input through
aria-describedby ahead of the
description, and announced by the live region of the field the moment it shows up, so a rejection that arrives
while the field still has focus is not something only sighted users learn about.
ErrorMessageTemplate replaces the text with content of its own, shown in the
Templates section. Both are meant for the rejections the app knows about; inside an
EditForm the messages of the data annotations belong to the ValidationMessage component
instead, so the same text is not printed twice.
Cascading parameters
Three groups of parameters are deliberately not on the params object, because sharing them between fields would be wrong rather than merely unused: what identifies a field and carries its value (Value, DefaultValue, Name, DisplayName), the event callbacks, and what says something about the value in one field alone (Invalid, ErrorMessage, GhostText, Loading, AutoFocus). InputHtmlAttributes and NoValidate stay out too, as they do for every input: the first is a dictionary the field writes into, and the second is read before a cascade is applied.
Background
Border
Accent
External Icons
Size
Style & Class
For the look rather than the layout there are the public --bit-TextField-* custom properties listed in the CSS variables table. They are read off the element and inherited, so the same name set on
:root re-skins every field of the app, set on an ancestor re-skins the fields inside it, and set on
the Style of one field re-skins that one alone - without a selector, a scoped stylesheet or a
::deep anywhere. Anything left unset keeps the value the theme gives it, so a single property can be
swapped without restating the rest.
RTL
CSS variables
The public custom properties this component reads off its root, for what no parameter covers.
Every variable is read with a fallback and never declared by the component, so it inherits like any other custom property:
set one on :root (or in a [bit-theme] block) to restyle every instance, on any ancestor to restyle the ones inside it,
or on the Style of one instance to restyle that one alone. Leave a variable unset and the component falls back to the theme token beside it.
BitTextField CSS variables
| Name | Default value | Description |
|---|---|---|
| --bit-TextField-background | --bit-clr-bg-pri, or the Background kind | Fill of the frame at rest. It is also what is painted over the background Chrome forces onto an autofilled field. |
| --bit-TextField-hover-background | --bit-TextField-background | Fill of the frame while the pointer is over it. Unchanged from the rest fill by default, since the frame color is what moves on hover. |
| --bit-TextField-border-color | --bit-clr-brd-pri, or the Border kind | Color of the frame, and of the bottom rule of the Underlined variant, at rest. |
| --bit-TextField-hover-border-color | The Border kind's hover step (transparent for the Transparent kind) | Color of the frame while the pointer is over it. Drawn on pointer devices only, and never over the focused or the rejected frame. |
| --bit-TextField-focus-border-color | --bit-TextField-border-color | Color of the frame while the field has focus. Unset by default - the focus ring is the indicator this design system draws - and there for a design system whose fields color their border instead. A rejected value keeps its own frame color regardless. |
| --bit-TextField-invalid-border-color | --bit-clr-err | Color of the frame of a rejected value, whether it was rejected by the EditContext, by Invalid or by an ErrorMessage. |
| --bit-TextField-focus-color | The Accent role's focus color | Color of the keyboard focus ring, of the underline of a focused Underlined field, and of the rings of the clear, reveal and icon buttons. |
| --bit-TextField-invalid-focus-color | --bit-clr-err-focus | Focus ring color of a rejected value. |
| --bit-TextField-accent-color | The Accent role's main color | Color the trailing icon, the prefix, the suffix and the busy indicator take while the field has focus, and the resting color of the reveal password glyph. |
| --bit-TextField-border-width | --bit-shp-brd-width | Thickness of the frame and of the bottom rule of the Underlined variant. |
| --bit-TextField-radius | --bit-shp-radius-control | Corner radius of the frame, which its focus ring and the clear button follow. |
| --bit-TextField-shadow | none | Elevation of the frame, for a field drawn as a raised surface rather than an outlined one. |
| --bit-TextField-min-height | Per Size: --bit-siz-ctrl-sm / -md / -lg | Smallest height of the frame, which is what lines a field up with the other controls of its size. It is a floor, not a height: a multiline field still grows with its content. |
| --bit-TextField-transition-duration | --bit-mot-duration-short | How long the frame takes to repaint between the rest, hover and focus colors. It collapses to near zero under prefers-reduced-motion unless ForceAnimation is set. |
| --bit-TextField-color | --bit-clr-fg-pri | Color of the typed text, and the fill color handed to an autofilled field. |
| --bit-TextField-caret-color | --bit-TextField-color | Color of the text cursor. |
| --bit-TextField-placeholder-color | --bit-clr-fg-ter | Color of the placeholder. It replaces the grey the browser picks on its own, which is not derived from the theme and drops below the contrast floor on a dark surface. |
| --bit-TextField-font-family | --bit-tpg-font-family | Typeface of the field and of its chrome, for a field holding code or a monospaced identifier. |
| --bit-TextField-font-size | Per Size, from the type ramp | Size of the typed text, the affixes, and the label when it has no size of its own. |
| --bit-TextField-font-weight | --bit-tpg-fw-regular | Weight of the typed text. |
| --bit-TextField-line-height | Per Size | Leading of the multiline text and of the ghost overlay behind it. It is also what AutoHeight measures the rows against, so changing it changes how tall Rows and MaxRows make the field. |
| --bit-TextField-padding | 0 spacing(1), and spacing(0.75) spacing(1) when Multiline | Padding of the input inside the frame, which the ghost overlay follows so the suggestion stays lined up with the text. |
| --bit-TextField-resize | vertical | The axes the grip of a Resizable multiline field drags along. Vertical only by default: a width dragged past the frame around it would leave the input hanging out of its own field. |
| --bit-TextField-label-color | --bit-clr-fg-pri | Color of the label. |
| --bit-TextField-label-font-size | --bit-TextField-font-size | Size of the label. |
| --bit-TextField-label-font-weight | --bit-tpg-field-label-font-weight | Weight of the label. |
| --bit-TextField-label-letter-spacing | --bit-tpg-ctrl-letter-spacing | Tracking of the label, which follows the global control tracking so a field matches the buttons next to it. |
| --bit-TextField-label-gap | spacing(1) | Room between the label and the frame when the two share a row, which is the Start and End label positions. |
| --bit-TextField-required-color | --bit-clr-req | Color of the asterisk marking a required field. |
| --bit-TextField-icon-color | --bit-clr-fg-pri | Color of the icon at rest, whether it is a decorative glyph or the button an OnIconClick makes of it. While the field has focus the icon takes the accent color instead. |
| --bit-TextField-icon-size | Per Size: --bit-siz-icon-sm / -md / -lg | Size of the icon and of the glyphs of the clear and reveal password buttons. |
| --bit-TextField-spinner-size | The icon size plus the spinner stroke on each side (16 / 20 / 24px per Size) | Diameter of the default busy spinner. |
| --bit-TextField-spinner-color | The busy indicator's color (see --bit-TextField-accent-color) | Color of the moving arc of the default busy spinner. |
| --bit-TextField-spinner-track-color | The arc color at 25% | Color of the ring the arc of the default busy spinner travels on. |
| --bit-TextField-button-width | Per Size: --bit-siz-ctrl-sm / -md / -lg | Width of the clear, reveal password and clickable icon buttons, which is what keeps them above the 24px minimum pointer target of WCAG 2.2. |
| --bit-TextField-button-color | --bit-clr-fg-sec for the clear button, the accent color for the reveal one | Glyph color of the clear and reveal password buttons at rest. |
| --bit-TextField-button-hover-color | --bit-clr-fg-pri-hover | Glyph color of the clear button and of a clickable icon while they are hovered. |
| --bit-TextField-button-hover-background | --bit-clr-bg-pri-hover | Background of the clear, reveal password and clickable icon buttons while they are hovered. |
| --bit-TextField-affix-color | --bit-clr-fg-pri | Color of the prefix and the suffix at rest. While the field has focus both take the accent color instead. |
| --bit-TextField-affix-background | --bit-clr-bg-sec, none in the Underlined variant | Fill behind the prefix and the suffix, which is what sets them apart from the input between them. The underlined variant has no box to fill against, so it leaves the affixes unfilled unless this is set. |
| --bit-TextField-affix-padding | 0 spacing(1.25) | Padding of the prefix and the suffix. |
| --bit-TextField-description-color | --bit-clr-fg-pri | Color of the description under the field. |
| --bit-TextField-count-color | --bit-clr-fg-sec | Color of the character counter while it is within the limit. |
| --bit-TextField-error-color | --bit-clr-err | Color of the message under a rejected value, and of a counter that is over its limit. |
| --bit-TextField-footer-font-size | --bit-tpg-fs-2xs | Size of the description, the counter and the error message. |
| --bit-TextField-footer-gap | spacing(0.625) | Room between the frame and what is written under it - the error message, the description and the counter - which is the same air the label leaves above the frame. |
| --bit-TextField-ghost-color | --bit-clr-fg-ter | Color of the inline ghost suggestion painted behind the input. |
| --bit-TextField-disabled-color | --bit-clr-fg-dis | Text, label, icon, affix and counter color while the field is disabled. |
| --bit-TextField-disabled-background | --bit-clr-bg-dis | Fill of the frame while the field is disabled. |
| --bit-TextField-disabled-border-color | --bit-clr-brd-dis | Frame color while the field is disabled. |
API
Every parameter, public member, sub-class and enum this component exposes.
BitTextField parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| Accent | BitColor? | null | The general color of the text field used when focused. |
| AriaDescription | string? | null | Detailed description of the input for the benefit of screen readers. It is rendered into a visually hidden element that the input references through its aria-describedby attribute, which is what lets a field carry an instruction that would be too long to show next to it. |
| AutoCapitalize | string? | null | Sets the autocapitalize html attribute of the input element, which tells the on-screen keyboard of a mobile device whether and how the typed text should be capitalized automatically. Accepted values are "off", "none", "on", "sentences", "words" and "characters". |
| AutoCorrect | bool? | null | Sets the autocorrect html attribute of the input element, which turns the automatic correction of the typed text on or off. Useful to turn off for identifiers, codes and other non-prose values. |
| AutoHeight | bool | false | Automatically adjust the height of the input in Multiline mode. |
| Background | BitColorKind? | null | The color kind of the text field background. |
| Border | BitColorKind? | null | The color kind of the text field border. |
| CanRevealPassword | bool | false | Whether to show the reveal password button for input type 'password'. |
| Classes | BitTextFieldClassStyles? | null | Custom CSS classes for different parts of the BitTextField. |
| ClearButtonAriaLabel | string? | null | The aria-label of the clear button, which is what a screen reader announces for it since the button only holds an icon. Defaults to "Clear text". |
| ClearButtonIcon | BitIconInfo? | null | The icon to display inside the clear button. Takes precedence over ClearButtonIconName when both are set. |
| ClearButtonIconName | string? | Cancel | Gets or sets the name of the icon to display on the clear button from the built-in Fluent UI icons. |
| ClearButtonTemplate | RenderFragment? | null | The custom content of the clear button, which replaces its icon. |
| ClearedAnnouncement | string? | null | What a screen reader announces once the field has been emptied - by the clear button or by ClearAsync - in place of the default "Cleared". Emptying a field moves nothing and says nothing on its own, so without it the one interaction that throws the whole value away is the one a screen reader user gets no confirmation of. Set it to an empty string to keep the clearing from being announced at all. |
| ClearOnEscape | bool | false | Empties the field when the Escape key is pressed in it, which is the keyboard counterpart of the clear button and what a filter or a search field is expected to do. It raises OnClear and is announced the same way a press on the button is, it leaves a read-only field alone, and it does not need ShowClearButton. OnEscape is still raised afterwards, and Escape keeps its own meaning while an input method editor is composing. |
| CountStrategy | Func<string?, int>? | null | Decides how the characters of the value are counted for the counter rendered by ShowCount. Leaving it unset counts the value the way the browser counts it against MaxLength - in UTF-16 code units - which makes an emoji count as two and a flag as four. A strategy of its own counts them the way the rest of the app does instead, for instance v => new StringInfo(v ?? string.Empty).LengthInTextElements to count what a reader actually sees. It only changes the number that is shown: the html maxlength attribute keeps holding the keyboard back at its own count. |
| CountTemplate | RenderFragment<int>? | null | The custom content of the character counter, which receives the current number of characters and replaces the default "count/maxLength" text. |
| Description | string? | null | Description displayed below the text field to provide additional details about what text to enter. |
| DescriptionTemplate | RenderFragment? | null | Shows the custom description for text field. |
| EnterKeyHint | string? | null | Sets the enterkeyhint html attribute of the input element, which decides the label of the return key of an on-screen keyboard. Accepted values are "enter", "done", "go", "next", "previous", "search" and "send". |
| ErrorMessage | string? | null | The message shown under the field when the value was rejected. Setting it marks the field invalid on its own - the same look and the same aria-invalid attribute Invalid gives it - and the message is referenced by the input through its aria-describedby attribute and announced by the live region of the field. |
| ErrorMessageTemplate | RenderFragment? | null | The custom content of the error message, which replaces the plain ErrorMessage text and marks the field invalid in the same way. Only the plain text is announced by the live region, since a template is free to render anything at all. |
| FullWidth | bool | false | Forces the text field fill 100% of its container width. |
| GhostText | string? | null | The ghost/suggestion text displayed inline after the current cursor position. Update this value from outside (e.g. from an AI or autocomplete suggestion) to show a faded inline suggestion. The user can accept it by pressing Tab or Enter, or clicking/touching the ghost text. |
| HidePasswordIcon | BitIconInfo? | null | Gets or sets the icon for the reveal password button when password is shown using custom CSS classes for external icon libraries. |
| HidePasswordIconName | string? | null | The icon name for the reveal password button when password is shown from the built-in Fluent UI icons. |
| Icon | BitIconInfo? | null | Gets or sets the icon to display using custom CSS classes for external icon libraries. Takes precedence over IconName when both are set. |
| IconAriaLabel | string? | null | The accessible name of the icon shown inside the text field. The icon is decorative and hidden from assistive technologies by default; setting this turns it into an image with a name, which is what an icon carrying a meaning of its own needs. |
| IconName | string? | null | The icon name for the icon shown inside the text field, at the end IconPlacement puts it at, from the built-in Fluent UI icons. |
| IconPlacement | BitPlacement? | null | Which end of the field the icon sits at, inside the frame. End (the default) puts it past the clear and reveal buttons, Start in front of the input. It follows the reading direction, so it mirrors itself in a right-to-left page. |
| IconTitle | string? | null | The html title of the icon shown inside the text field, which the browser shows as its tooltip. It is only rendered while OnIconClick makes the icon a button, since a tooltip on a decorative mark says something only a pointer ever finds. |
| InputMode | BitInputMode? | null | Sets the inputmode html attribute of the input element. |
| Invalid | bool | false | Marks the value of the field as invalid, which gives a value rejected by something other than the cascading EditContext - a server, a rule of the app, a validator of its own - the same look and the same aria-invalid attribute that a failing data annotation gives it. A field failing its own validation stays invalid regardless of this parameter. |
| Label | string? | null | Label displayed above the text field and read by screen readers. |
| LabelPlacement | BitPlacement? | null | Where the label sits relative to the input. Leaving it unset keeps the layout each variant comes with: above the input in the default one, and next to it in the Underlined one. Only Top, Bottom, Start and End are honoured; any other value leaves the layout as it is with this unset. |
| LabelTemplate | RenderFragment? | null | Shows the custom label for text field. |
| Loading | bool | false | Shows a busy indicator inside the field, which is what tells the user that something is running against what was typed - a suggestion being fetched, a value being checked against a server. The field stays editable while it is on, so the typing is never interrupted by it. |
| LoadingAriaLabel | string? | null | What a screen reader announces while Loading is on, in place of the default "Loading". It is announced whichever indicator is drawn, so a LoadingTemplate drawing a bare spinner of its own still tells an assistive technology that something is running. |
| LoadingTemplate | RenderFragment? | null | The custom content of the busy indicator, which replaces the default spinner. |
| MaxLength | int | -1 | Specifies the maximum number of characters allowed in the input. A negative value (the default) removes the limit and renders no maxlength attribute. |
| MaxRows | int? | null | The maximum number of rows the input grows to in the Multiline mode while AutoHeight is enabled. Beyond that height the input keeps its size and scrolls its content instead of pushing the rest of the page down. A null value (the default) lets the input grow indefinitely. |
| MinLength | int | -1 | Specifies the minimum number of characters the input accepts, which is what the browser validates the value against before the form is submitted. A negative value (the default) removes the constraint and renders no minlength attribute. |
| Multiline | bool | false | Whether or not the text field is a Multiline text field. |
| NoBorder | bool | false | Removes the border of the text input. |
| OnBlur | EventCallback<FocusEventArgs> | Callback for when the input loses focus. Unlike OnFocusOut it does not bubble, so it is the one to use when only the input itself losing focus is of interest. | |
| OnClear | EventCallback | Callback executed when the user clears the text field by clicking the clear button. | |
| OnClick | EventCallback<MouseEventArgs> | Callback for when the input clicked. | |
| OnEnter | EventCallback<KeyboardEventArgs> | Callback for when the Enter key is pressed while input has focus. | |
| OnEscape | EventCallback<KeyboardEventArgs> | Callback for when the Escape key is pressed while input has focus. | |
| OnFocus | EventCallback<FocusEventArgs> | Callback for when the input receives focus. Unlike OnFocusIn it does not bubble, so it is the one to use when only the input itself receiving focus is of interest. | |
| OnFocusIn | EventCallback<FocusEventArgs> | Callback for when focus moves into the input or any of its descendants, since unlike OnFocus it bubbles. | |
| OnFocusOut | EventCallback<FocusEventArgs> | Callback for when focus moves out of the input or any of its descendants, since unlike OnBlur it bubbles. | |
| OnGhostTextAccepted | EventCallback<string?> | Callback invoked when the ghost text is accepted via Tab or Enter key, or click/touch. The accepted ghost text string is passed as the argument. | |
| OnIconClick | EventCallback<MouseEventArgs> | Callback for when the icon inside the field is clicked, which is what turns the icon into an action - opening a picker, copying the value, running a search - instead of a mark that only says what the field is for. Giving it a handler renders the icon as a real button: it takes a tab stop, answers Enter and Space, draws a focus ring of its own and is named by IconAriaLabel, so give that one a value whenever this one has a handler. | |
| OnInput | EventCallback<ChangeEventArgs> | Callback for every input event of the input element, which is what lets a field watch the text as it is typed without having to turn Immediate on and commit the value along with it. It is raised before the value is committed and is not held back by DebounceTime or ThrottleTime, and it is not raised for the half-composed text of an input method editor. | |
| OnKeyDown | EventCallback<KeyboardEventArgs> | Callback for when a keyboard key is pressed. | |
| OnKeyUp | EventCallback<KeyboardEventArgs> | Callback for When a keyboard key is released. | |
| Pattern | string? | null | Sets the pattern html attribute of the input element, which is the regular expression the value is checked against by the browser before the form is submitted. |
| PermanentGhost | bool | false | Enables permanent ghost mode that forces the scrollbar-gutter to always be present, preventing layout shift of the ghost text rendering. |
| Placeholder | string? | null | Input placeholder text. |
| Prefix | string? | null | Prefix displayed before the text field contents. This is not included in the value. Ensure a descriptive label is present to assist screen readers, as the value does not include the prefix. |
| PrefixTemplate | RenderFragment? | null | Shows the custom prefix for text field. |
| PreventEnter | bool | false | Prevents the enter to add new line character into the input in the Multiline mode. |
| Resizable | bool | false | For multiline text fields, whether or not the field is resizable. Vertically only: a width dragged past the frame around it would leave the input hanging out of its own field. AutoHeight takes the grip away again, since the height is then the content's to decide. |
| RevealPasswordAriaLabel | string? | null | Aria label for the reveal password button. It stays the same in both states on purpose: the pressed state of the button is what tells a screen reader whether the password is currently revealed. Defaults to "Reveal password". |
| RevealPasswordIcon | BitIconInfo? | null | Gets or sets the icon for the reveal password button when password is hidden using custom CSS classes for external icon libraries. |
| RevealPasswordIconName | string? | null | The icon name for the reveal password button when password is hidden from the built-in Fluent UI icons. |
| RevealPasswordTemplate | RenderFragment<bool>? | null | The custom content of the reveal password button, which receives whether the password is currently revealed and replaces the default icon. |
| Rows | int? | null | For multiline text, Number of rows. |
| SelectOnFocus | bool | false | Selects the whole value when the input receives focus, so that the next keystroke replaces it. It is what a field holding a value the user is expected to overwrite rather than edit - a search term, a quantity, a generated code - usually wants. |
| ShowClearButton | bool | false | Whether to show the clear button while the input holds any text. The button follows what the input reports rather than the bound value, so it is there from the first keystroke even on a field that only commits its value when it loses focus. |
| ShowCount | bool | false | Shows the number of characters that were typed under the text field, followed by the MaxLength when one is set. A count above the limit - only reachable from the code, since the maxlength attribute holds the keyboard back - is colored like a rejected value. |
| Size | BitSize? | null | The size of the text field. |
| SpellCheck | bool? | null | Sets the spellcheck html attribute of the input element, which turns the spell checking of the browser on or off for this input. |
| Styles | BitTextFieldClassStyles? | null | Custom CSS styles for different parts of the BitTextField. |
| Suffix | string? | null | Suffix displayed after the text field contents. This is not included in the value. Ensure a descriptive label is present to assist screen readers, as the value does not include the suffix. |
| SuffixTemplate | RenderFragment? | null | Shows the custom suffix for text field. |
| Title | string? | null | A more descriptive title of the text field, shown by the browser as its tooltip. It is written on the frame, so the tooltip also covers the affixes and the icon around the input, and on the input itself, so it reaches a keyboard and an assistive technology. |
| Trim | bool | false | Specifies whether to remove any leading or trailing whitespace from the value. The trimming happens when the input reports a change, which is what lets a space still be typed in the middle of a word while Immediate is enabled. |
| Type | BitInputType? | null | Input type. |
| Underlined | bool | false | Whether or not the text field is underlined. |
| Wrap | string? | null | Sets the wrap html attribute of the textarea rendered in the Multiline mode, which decides how the text is wrapped and whether the breaks the wrapping adds travel with the value when a form is submitted. Accepted values are "soft" (what a browser does on its own), "hard" and "off", the last of which turns the wrapping off entirely and scrolls long lines sideways instead. |
BitTextField public members
| Name | Type | Default value | Description |
|---|---|---|---|
| InputElement | ElementReference | The ElementReference to the input element of the BitTextField. | |
| ClearAsync | Task | Empties the text field and raises OnClear, exactly as the clear button does (without requiring ShowClearButton, since there is no button involved). It does nothing while the field is disabled or read-only. | |
| FocusAsync | ValueTask | Gives focus to the input element of the BitTextField. The overload taking a preventScroll flag focuses it without scrolling the document to bring it into view. | |
| SelectAsync | ValueTask | Selects the whole value of the input, the programmatic counterpart of SelectOnFocus. | |
| SelectRangeAsync | ValueTask | Selects the text between the two given positions, or moves the caret when they are equal. A null start counts from the beginning of the value and a null end runs to its very end, and both are clamped to the length of the value. | |
| ToggleRevealPassword | void | Toggles the revealed state of the value while the type of the input is password and CanRevealPassword is enabled. |
BitTextInputBase parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| AutoComplete | string? | null | Specifies the value of the autocomplete attribute of the input component. |
| AutoFocus | bool | false | Determines if the text input is auto focused on first render. |
| DebounceTime | int | 0 | The debounce time in milliseconds. |
| Immediate | bool | false | Change the content of the input field when the user write text (based on 'oninput' HTML event). |
| ThrottleTime | int | 0 | The throttle time in milliseconds. |
BitInputBase parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| 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. |
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 | 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. |
| Disabled | bool | false | Gets or sets a value indicating whether the component is disabled and cannot respond to user interaction. |
| 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. |
| 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. |
BitComponentBase public members
| Name | Type | Default value | Description |
|---|---|---|---|
| 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. |
BitTextFieldClassStyles properties
| Name | Type | Default value | Description |
|---|---|---|---|
| Root | string? | null | Custom CSS classes/styles for the BitTextField's root element. |
| Focused | string? | null | Custom CSS classes/styles of the root element in focus state. |
| InputWrapper | string? | null | Custom CSS classes/styles for the wrapper of label and input in the BitTextField. |
| Label | string? | null | Custom CSS classes/styles for the BitTextField's label. |
| FieldGroup | string? | null | Custom CSS classes/styles for the BitTextField's field group. |
| PrefixContainer | string? | null | Custom CSS classes/styles for the BitTextField's prefix container. |
| Prefix | string? | null | Custom CSS classes/styles for the BitTextField's prefix. |
| Input | string? | null | Custom CSS classes/styles for the BitTextField's input. |
| Loading | string? | null | Custom CSS classes/styles for the BitTextField's busy indicator container. |
| Spinner | string? | null | Custom CSS classes/styles for the BitTextField's default busy spinner, drawn when no LoadingTemplate is set. |
| RevealPassword | string? | null | Custom CSS classes/styles for the BitTextField's reveal password. |
| RevealPasswordIconContainer | string? | null | Custom CSS classes/styles for the BitTextField's reveal password icon container. |
| RevealPasswordIcon | string? | null | Custom CSS classes/styles for the BitTextField's reveal password icon. |
| ClearButton | string? | null | Custom CSS classes/styles for the BitTextField's clear button. |
| ClearButtonIcon | string? | null | Custom CSS classes/styles for the BitTextField's clear button icon. |
| Icon | string? | null | Custom CSS classes/styles for the BitTextField's icon. |
| IconButton | string? | null | Custom CSS classes/styles for the button the BitTextField's icon is wrapped in while it has an OnIconClick handler. |
| SuffixContainer | string? | null | Custom CSS classes/styles for the BitTextField's suffix container. |
| Suffix | string? | null | Custom CSS classes/styles for the BitTextField's suffix. |
| ErrorMessageContainer | string? | null | Custom CSS classes/styles for the BitTextField's error message container. |
| ErrorMessage | string? | null | Custom CSS classes/styles for the BitTextField's error message. |
| Footer | string? | null | Custom CSS classes/styles for the BitTextField's footer, which holds the description and the character counter. |
| DescriptionContainer | string? | null | Custom CSS classes/styles for the BitTextField's description container. |
| Description | string? | null | Custom CSS classes/styles for the BitTextField's description. |
| Count | string? | null | Custom CSS classes/styles for the BitTextField's character counter. |
| GhostTextWrapper | string? | null | Custom CSS classes/styles for the BitTextField's ghost text wrapper element. |
| GhostTextOverlay | string? | null | Custom CSS classes/styles for the BitTextField's ghost text overlay container. |
BitIconInfo properties
| Name | Type | Default value | Description |
|---|---|---|---|
| Name | string? | null | Gets or sets the name of the icon. |
| BaseClass | string? | null | Gets or sets the base CSS class for the icon. For built-in Fluent UI icons, this defaults to "bit-icon". For external icon libraries like FontAwesome, you might set this to "fa" or leave empty. |
| Prefix | string? | null | Gets or sets the CSS class prefix used before the icon name. For built-in Fluent UI icons, this defaults to "bit-icon--". For external icon libraries, you might set this to "fa-" or leave empty. |
BitColor enum
| Name | Value | Description |
|---|---|---|
| Primary | 0 | Primary general color. |
| Secondary | 1 | Secondary general color. |
| Tertiary | 2 | Tertiary general color. |
| Info | 3 | Info general color. |
| Success | 4 | Success general color. |
| Warning | 5 | Warning general color. |
| SevereWarning | 6 | SevereWarning general color. |
| Error | 7 | Error general color. |
| PrimaryBackground | 8 | Primary background color. |
| SecondaryBackground | 9 | Secondary background color. |
| TertiaryBackground | 10 | Tertiary background color. |
| PrimaryForeground | 11 | Primary foreground color. |
| SecondaryForeground | 12 | Secondary foreground color. |
| TertiaryForeground | 13 | Tertiary foreground color. |
| PrimaryBorder | 14 | Primary border color. |
| SecondaryBorder | 15 | Secondary border color. |
| TertiaryBorder | 16 | Tertiary border color. |
BitColorKind enum
| Name | Value | Description |
|---|---|---|
| Primary | 0 | The primary color kind. |
| Secondary | 1 | The secondary color kind. |
| Tertiary | 2 | The tertiary color kind. |
| Transparent | 3 | The transparent color kind. |
BitPlacement enum
| Name | Value | Description |
|---|---|---|
| Top | 0 | The top edge. |
| Bottom | 1 | The bottom edge. |
| Start | 2 | The edge the reading direction starts from - the left in LTR, the right in RTL. On the vertical axis, which does not turn around, it is the top. |
| End | 3 | The edge the reading direction ends at - the right in LTR, the left in RTL. On the vertical axis, which does not turn around, it is the bottom. |
| Left | 4 | The left edge, in both reading directions. |
| Right | 5 | The right edge, in both reading directions. |
| Center | 6 | The middle of the axis, against neither edge. |
| TopAndBottom | 7 | Both edges of the block axis at once. |
| StartAndEnd | 8 | Both edges of the inline axis at once, following the reading direction the way Start and End do. |
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. |
| Search | 6 | The input expects a search term, which is what lets a browser offer the previous searches of the same field and show its own clear affordance. |
BitInputMode enum
| Name | Value | Description |
|---|---|---|
| None | 0 | No virtual keyboard. For when the page implements its own keyboard input control. |
| Text | 1 | Standard input keyboard for the user's current locale. |
| Decimal | 2 | Fractional numeric input keyboard containing the digits and decimal separator for the user's locale. |
| Numeric | 3 | Numeric input keyboard, but only requires the digits 0–9. |
| Tel | 4 | A telephone keypad input, including the digits 0–9, the asterisk (*), and the pound (#) key. |
| Search | 5 | A virtual keyboard optimized for search input. |
| 6 | A virtual keyboard optimized for entering email addresses. | |
| Url | 7 | A keypad optimized for entering URLs. |
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
Found a mistake, a gap, or something that could be clearer? Every page and every component is one click from its source.