VuiAdmin docs
Components

Forms and inputs

Every input type in the VuiAdmin admin dashboard template: text, select, multi-select, date, time, radio, checkbox, switch, file upload and password.

The form screen covers every input type the template ships, which is deliberate: a form page that demonstrates three of the eight controls you need is a form page you have to finish yourself.

What is there

ControlNotes
Text inputWith and without a placeholder, plus disabled and error states
Input groupA leading icon or a select, sharing one border with the field
SelectKeyboard navigable, with a searchable variant in Pro
Multi-selectChips, removable, with a count when the list is long
Date pickerType into it or pick from the calendar, both parse
Time pickerHours, minutes and meridiem as three columns
Radio group and checkboxGrouped, with a legend that screen readers reach
SwitchFor settings that apply immediately, not for form submission
File uploadA styled control over the native input, so the platform keeps the file dialog
PasswordWith a reveal toggle, and the toggle is a real button
TextareaResizable, with a character hint

The form elements screen, with every input type in two columns

The date and time fields are typeable

This is the detail most templates skip. Both fields accept typing as well as picking, and the mask that parses what you type lives in @viliha/vui-core so all six editions agree about what 03/04 means. A picker you can only click is a picker that is slower than the keyboard for anyone entering more than one date.

Validation

The screens show the states (error, hint, disabled, required marker) but do not wire a validation library, because your choice of one is not ours to make. The required marker is a component rather than a literal asterisk, so it stays consistent and stays announced.

import { Input } from "@viliha/vui-react/input";
import { Label } from "@viliha/vui-react/label";

<Label htmlFor="email">Email <RequiredMark /></Label>
<Input id="email" type="email" aria-invalid={!!error} />
{error ? <p className="text-sm text-destructive">{error}</p> : null}

On this page