Core concepts
How to use
Loomora works out of the box. Add LoomoraProvider when you want to change defaults for your whole app, or for just part of it.
1. Wrap your app with LoomoraProvider
The provider merges the config you pass over the built-in defaults. You only write the values you want to change; everything else keeps its default.
import 'loomora/dist/index.css' // not needed in a Tailwind project that scans loomora
import type { ReactNode } from 'react'
import { LoomoraProvider } from 'loomora'
export function Providers({ children }: { children: ReactNode }) {
return (
<LoomoraProvider
config={{
button: { defaultColor: 'success', defaultLoadingTitle: 'Please wait' },
settings: { isRtl: false, locale: 'en' },
}}
>
{children}
</LoomoraProvider>
)
}2. Override per subtree
Providers can be nested. A nested provider starts from its parent's resolved configuration and only replaces the keys it sets.
<LoomoraProvider config={{ button: { defaultColor: 'success' } }}>
{/* every Button here defaults to "success" */}
<LoomoraProvider config={{ button: { defaultColor: 'error' } }}>
{/* this subtree defaults to "error"; every other default is inherited from the parent */}
</LoomoraProvider>
</LoomoraProvider>The provider is optional
import { Button, TextField } from 'loomora'
// Works without LoomoraProvider: components read the built-in defaults.
export function Example() {
return <Button title="Save" />
}Good to know
LoomoraProviderincludes bothResponsiveProviderandThemeProvider, and reads localized labels fromconfig.translations.- Configuration is merged recursively, so changing
form.textField.classNamenever removes otherformdefaults. - Each component page links to the configuration sections that affect it, so you can jump straight to the relevant rows below.
Configuration reference
Every key you can pass to config, with its type and default value. This table is generated from the library defaults (248 entries), so it always matches the version in this repository.
General
Top-level options that affect several components.
| Path | Type | Default | Description |
|---|---|---|---|
| hasTranslationStrategy | boolean | false | When true, translation strings are returned untouched and `{variable}` interpolation is left to your own i18n layer. |
| flagResource | string | "https://flagcdn.com/{key}.svg" | URL template used by Flag. `{key}` is replaced by the country key. |
| LinkType | string | "a" | Element or component used to render links (Button with `href`, Copyrights). Pass your router link, e.g. next/link. |
translations.countries
Country names used by country pickers, phone inputs and country hooks.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.countries | object | { 239 entries }Show full value{
"AF": {
"name": "Afghanistan"
},
"AL": {
"name": "Albania"
},
"DZ": {
"name": "Algeria"
},
"AS": {
"name": "American Samoa"
},
"AD": {
"name": "Andorra"
},
"AO": {
"name": "Angola"
},
"AI": {
"name": "Anguilla"
},
"AQ": {
"name": "Antarctica"
},
"AR": {
"name": "Argentina"
},
"AM": {
"name": "Armenia"
},
"AW": {
"name": "Aruba"
},
"AU": {
"name": "Australia"
},
"AT": {
"name": "Austria"
},
"AZ": {
"name": "Azerbaijan"
},
"BS": {
"name": "Bahamas"
},
"BH": {
"name": "Bahrain"
},
"BD": {
"name": "Bangladesh"
},
"BB": {
"name": "Barbados"
},
"BY": {
"name": "Belarus"
},
"BE": {
"name": "Belgium"
},
"BZ": {
"name": "Belize"
},
"BJ": {
"name": "Benin"
},
"BM": {
"name": "Bermuda"
},
"BT": {
"name": "Bhutan"
},
"BO": {
"name": "Bolivia"
},
"BA": {
"name": "Bosnia and Herzegovina"
},
"BW": {
"name": "Botswana"
},
"BR": {
"name": "Brazil"
},
"IO": {
"name": "British Indian Ocean Territory"
},
"VG": {
"name": "British Virgin Islands"
},
"BN": {
"name": "Brunei Darussalam"
},
"BG": {
"name": "Bulgaria"
},
"BF": {
"name": "Burkina Faso"
},
"BI": {
"name": "Burundi"
},
"KH": {
"name": "Cambodia"
},
"CM": {
"name": "Cameroon"
},
"CA": {
"name": "Canada"
},
"CV": {
"name": "Cape Verde"
},
"KY": {
"name": "Cayman Islands"
},
"CF": {
"name": "Central African Republic"
},
"TD": {
"name": "Chad"
},
"CL": {
"name": "Chile"
},
"CN": {
"name": "China"
},
"CX": {
"name": "Christmas Island"
},
"CC": {
"name": "Cocos (Keeling) Islands"
},
"CO": {
"name": "Colombia"
},
"KM": {
"name": "Comoros"
},
"CG": {
"name": "Congo"
},
"CD": {
"name": "Congo (Democratic Republic)"
},
"CK": {
"name": "Cook Islands"
},
"CR": {
"name": "Costa Rica"
},
"CI": {
"name": "Cote-d-Ivoire"
},
"HR": {
"name": "Croatia"
},
"CU": {
"name": "Cuba"
},
"CW": {
"name": "Curaçao"
},
"CY": {
"name": "Cyprus"
},
"CZ": {
"name": "Czech Republic"
},
"DK": {
"name": "Denmark"
},
"DJ": {
"name": "Djibouti"
},
"DM": {
"name": "Dominica"
},
"DO": {
"name": "Dominican Republic"
},
"EC": {
"name": "Ecuador"
},
"EG": {
"name": "Egypt"
},
"SV": {
"name": "El Salvador"
},
"GQ": {
"name": "Equatorial Guinea"
},
"ER": {
"name": "Eritrea"
},
"EE": {
"name": "Estonia"
},
"SZ": {
"name": "Eswatini"
},
"ET": {
"name": "Ethiopia"
},
"FK": {
"name": "Falkland Islands"
},
"FO": {
"name": "Faroe Islands"
},
"FJ": {
"name": "Fiji"
},
"FI": {
"name": "Finland"
},
"FR": {
"name": "France"
},
"GF": {
"name": "French Guiana"
},
"PF": {
"name": "French Polynesia"
},
"GA": {
"name": "Gabon"
},
"GM": {
"name": "Gambia"
},
"GE": {
"name": "Georgia"
},
"DE": {
"name": "Germany"
},
"GH": {
"name": "Ghana"
},
"GI": {
"name": "Gibraltar"
},
"GR": {
"name": "Greece"
},
"GL": {
"name": "Greenland"
},
"GD": {
"name": "Grenada"
},
"GP": {
"name": "Guadeloupe"
},
"GU": {
"name": "Guam"
},
"GG": {
"name": "Guernsey"
},
"GT": {
"name": "Guatemala"
},
"GN": {
"name": "Guinea"
},
"GW": {
"name": "Guinea-Bissau"
},
"GY": {
"name": "Guyana"
},
"HT": {
"name": "Haiti"
},
"HM": {
"name": "Heard Island and McDonald Islands"
},
"VA": {
"name": "Holy See"
},
"HN": {
"name": "Honduras"
},
"HK": {
"name": "Hong Kong"
},
"HU": {
"name": "Hungary"
},
"IS": {
"name": "Iceland"
},
"IM": {
"name": "Isle of Man"
},
"IN": {
"name": "India"
},
"… | — |
translations.timezones
Timezone display names.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.timezones | object | { 105 entries }Show full value{
"regions": {
"africa": "Africa",
"america": "America",
"asia": "Asia",
"australia": "Australia",
"europe": "Europe",
"pacific": "Pacific",
"atlantic": "Atlantic",
"indian": "Indian"
},
"africa/cairo": "Cairo",
"africa/casablanca": "Casablanca",
"africa/johannesburg": "Johannesburg",
"africa/lagos": "Lagos",
"africa/nairobi": "Nairobi",
"america/new_york": "New York",
"america/chicago": "Chicago",
"america/denver": "Denver",
"america/los_angeles": "Los Angeles",
"america/anchorage": "Anchorage",
"america/honolulu": "Honolulu",
"america/sao_paulo": "Sao Paulo",
"america/argentina/buenos_aires": "Buenos Aires",
"america/mexico_city": "Mexico City",
"america/toronto": "Toronto",
"america/caracas": "Caracas",
"america/st_johns": "St. John's",
"asia/singapore": "Singapore",
"asia/kuala_lumpur": "Kuala Lumpur",
"asia/bangkok": "Bangkok",
"asia/jakarta": "Jakarta",
"asia/manila": "Manila",
"asia/hong_kong": "Hong Kong",
"asia/shanghai": "Shanghai",
"asia/tokyo": "Tokyo",
"asia/seoul": "Seoul",
"asia/pyongyang": "Pyongyang",
"asia/kolkata": "Kolkata",
"asia/dhaka": "Dhaka",
"asia/karachi": "Karachi",
"asia/kabul": "Kabul",
"asia/dubai": "Dubai",
"asia/tehran": "Tehran",
"asia/riyadh": "Riyadh",
"asia/damascus": "Damascus",
"asia/kathmandu": "Kathmandu",
"asia/yangon": "Yangon",
"asia/almaty": "Almaty",
"asia/tashkent": "Tashkent",
"asia/baku": "Baku",
"asia/yerevan": "Yerevan",
"asia/tbilisi": "Tbilisi",
"australia/sydney": "Sydney",
"australia/melbourne": "Melbourne",
"australia/brisbane": "Brisbane",
"australia/perth": "Perth",
"australia/adelaide": "Adelaide",
"australia/darwin": "Darwin",
"australia/eucla": "Eucla",
"australia/lord_howe": "Lord Howe",
"europe/london": "London",
"europe/paris": "Paris",
"europe/berlin": "Berlin",
"europe/rome": "Rome",
"europe/madrid": "Madrid",
"europe/amsterdam": "Amsterdam",
"europe/brussels": "Brussels",
"europe/zurich": "Zurich",
"europe/vienna": "Vienna",
"europe/prague": "Prague",
"europe/warsaw": "Warsaw",
"europe/stockholm": "Stockholm",
"europe/oslo": "Oslo",
"europe/helsinki": "Helsinki",
"europe/athens": "Athens",
"europe/bucharest": "Bucharest",
"europe/istanbul": "Istanbul",
"europe/moscow": "Moscow",
"europe/kiev": "Kiev",
"europe/minsk": "Minsk",
"europe/dublin": "Dublin",
"europe/lisbon": "Lisbon",
"europe/reykjavik": "Reykjavik",
"pacific/auckland": "Auckland",
"pacific/fiji": "Fiji",
"pacific/tahiti": "Tahiti",
"pacific/marquesas": "Marquesas",
"pacific/gambier": "Gambier",
"pacific/easter": "Easter",
"pacific/galapagos": "Galapagos",
"pacific/guadalcanal": "Guadalcanal",
"pacific/noumea": "Noumea",
"pacific/port_moresby": "Port Moresby",
"pacific/guam": "Guam",
"pacific/saipan": "Saipan",
"pacific/palau": "Palau",
"pacific/chatham": "Chatham",
"pacific/kiritimati": "Kiritimati",
"pacific/apia": "Apia",
"pacific/tongatapu": "Tongatapu",
"atlantic/azores": "Azores",
"atlantic/cape_verde": "Cape Verde",
"atlantic/canary": "Canary",
"atlantic/reykjavik": "Reykjavik",
"atlantic/south_georgia": "South Georgia",
"indian/maldives": "Maldives",
"indian/mauritius": "Mauritius",
"indian/reunion": "Reunion",
"indian/seychelles": "Seychelles",
"indian/comoro": "Comoro",
"indian/madagascar": "Madagascar",
"indian/mayotte": "Mayotte",
"indian/cocos": "Cocos",
"indian/christmas": "Christmas"
} | — |
translations.dates
Month / weekday names used by the date hooks.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.dates | object | { 26 entries }Show full value{
"months": {
"JAN": {
"name": "January",
"shortName": "Jan"
},
"FEB": {
"name": "February",
"shortName": "Feb"
},
"MAR": {
"name": "March",
"shortName": "Mar"
},
"APR": {
"name": "April",
"shortName": "Apr"
},
"MAY": {
"name": "May",
"shortName": "May"
},
"JUN": {
"name": "June",
"shortName": "Jun"
},
"JUL": {
"name": "July",
"shortName": "Jul"
},
"AUG": {
"name": "August",
"shortName": "Aug"
},
"SEP": {
"name": "September",
"shortName": "Sep"
},
"OCT": {
"name": "October",
"shortName": "Oct"
},
"NOV": {
"name": "November",
"shortName": "Nov"
},
"DEC": {
"name": "December",
"shortName": "Dec"
}
},
"justNow": "just now",
"fewSecondsAgo": "a few seconds ago",
"inFewSeconds": "in a few seconds",
"secondsAgo": "{count} seconds ago",
"inSeconds": "in {count} seconds",
"minuteAgo": "a minute ago",
"minutesAgo": "{count} minutes ago",
"inMinute": "in a minute",
"inMinutes": "in {count} minutes",
"hourAgo": "an hour ago",
"hoursAgo": "{count} hours ago",
"inHour": "in an hour",
"inHours": "in {count} hours",
"yesterday": "yesterday",
"daysAgo": "{count} days ago",
"tomorrow": "tomorrow",
"inDays": "in {count} days",
"monthAgo": "a month ago",
"monthsAgo": "{count} months ago",
"inMonth": "in a month",
"inMonths": "in {count} months",
"yearAgo": "a year ago",
"yearsAgo": "{count} years ago",
"inYear": "in a year",
"inYears": "in {count} years"
} | — |
translations.form
Generic form strings (validation, actions, empty states).
| Path | Type | Default | Description |
|---|---|---|---|
| translations.form.dialogTitle | string | "Form" | — |
| translations.form.dialogCloseTitle | string | "Close" | — |
translations.textEditorField
Menu titles shown by the rich-text editor.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.textEditorField.menusView | string | "View" | — |
| translations.textEditorField.menusEdit | string | "Edit" | — |
| translations.textEditorField.menusFormat | string | "Format" | — |
| translations.textEditorField.menusInsert | string | "Insert" | — |
translations.searchField
Strings used by SearchField.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.searchField.clearSearchTitle | string | "Clear" | — |
| translations.searchField.searchButtonTitle | string | "Search" | — |
translations.passwordField
Strings used by PasswordField (rules, strength labels, actions).
| Path | Type | Default | Description |
|---|---|---|---|
| translations.passwordField.placeholder | string | "e.g.: ********" | — |
| translations.passwordField.confirmMatch | string | "Match" | — |
| translations.passwordField.confirmMismatch | string | "Mismatch" | — |
| translations.passwordField.copyTooltip | string | "Copy {password} to clipboard" | — |
| translations.passwordField.generate | string | "Generate {length}bit {password}" | — |
| translations.passwordField.hideTooltip | string | "Hide {password}" | — |
| translations.passwordField.label | string | "{password}" | — |
| translations.passwordField.missing | string | "Please enter a password." | — |
| translations.passwordField.missingButton | string | "Enter a password" | — |
| translations.passwordField.showTooltip | string | "Show {password}" | — |
| translations.passwordField.validation.weak | string | "Weak" | — |
| translations.passwordField.validation.medium | string | "Medium" | — |
| translations.passwordField.validation.strong | string | "Strong" | — |
| translations.passwordField.validation.minLength.short | string | "{length}+ letter(s) long" | — |
| translations.passwordField.validation.minLength.long | string | "At least {maxLength}+ letter(s) long" | — |
| translations.passwordField.validation.lowercase.short | string | "{lowercaseLength}+ Lowercase letter(s) long" | — |
| translations.passwordField.validation.lowercase.long | string | "At least {lowercaseLength}+ Lowercase letter(s) long" | — |
| translations.passwordField.validation.uppercase.short | string | "{uppercaseLength}+ Uppercase letter(s) long" | — |
| translations.passwordField.validation.uppercase.long | string | "At least {uppercaseLength}+ Uppercase letter(s) long" | — |
| translations.passwordField.validation.number.short | string | "{numbersLength}+ Number(s) long" | — |
| translations.passwordField.validation.number.long | string | "At least {numbersLength}+ Number(s) long" | — |
| translations.passwordField.validation.special.short | string | "{specialCharsLength}+ special character(s) long" | — |
| translations.passwordField.validation.special.long | string | "At least {specialCharsLength}+ special character(s) long" | — |
translations.phoneField
Strings used by PhoneInput.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.phoneField.startPlaceholder | string | "[{start}]XXXXXXXXX" | — |
| translations.phoneField.startPlaceholderOne | string | "{start}XXXXXXXXX" | — |
| translations.phoneField.defaultTitle | string | "Country" | — |
| translations.phoneField.startError | string | "Phone number must start with one of [{start}] for {country}" | — |
translations.autoCompleteField
Strings used by AutocompleteField.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.autoCompleteField.loadingState | string | "Loading options..." | — |
| translations.autoCompleteField.emptyState | string | "No options available" | — |
| translations.autoCompleteField.searchPlaceholder | string | "Search..." | — |
| translations.autoCompleteField.selectedCount | string | "{count} selected" | — |
translations.uploaderField
Strings used by UploaderField.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.uploaderField.allCatAccepted | string | "All {cat} file(s) allowed" | — |
| translations.uploaderField.extsAccepted | string | "Only {exts} files allowed" | — |
| translations.uploaderField.duplicateFileRule | string | "File/Files already uploaded" | — |
| translations.uploaderField.maxFilesRule | string | "Max of {max} file(s) allowed" | — |
| translations.uploaderField.maxFilesSizeRule | string | "Max total size of {max} allowed" | — |
| translations.uploaderField.maxSizeRule | string | "Max size of {max} allowed" | — |
| translations.uploaderField.minFilesRule | string | "Min of {min} file(s) required" | — |
| translations.uploaderField.minFilesSizeRule | string | "Min total size of {min} required" | — |
| translations.uploaderField.minSizeRule | string | "Min size of {min} required" | — |
| translations.uploaderField.uploadError | string | "Failed to upload, Please try again" | — |
| translations.uploaderField.acceptRule | string | "Only {rules} files allowed" | — |
| translations.uploaderField.dialogTitle | string | "Manage Uploaded file(s)" | — |
| translations.uploaderField.dropFilesHere.title | string | "Drop Files Here" | — |
| translations.uploaderField.dropFilesHere.description | string | "Drop your file(s) here to upload" | — |
| translations.uploaderField.actions.removeFile | string | "Remove file" | — |
| translations.uploaderField.actions.update | string | "Update file" | — |
| translations.uploaderField.actions.view | string | "View file" | — |
| translations.uploaderField.item.id | string | "ID: {id}" | — |
| translations.uploaderField.item.number | string | "Item {number}" | — |
| translations.uploaderField.item.size | string | "Size: {size}" | — |
| translations.uploaderField.item.ext | string | "Extension: {ext}" | — |
| translations.uploaderField.placeholder | string | "" | — |
| translations.uploaderField.pasteAndDragAndDropSupportRule | string | "You can (hover & paste) or (drag & drop) files here" | — |
| translations.uploaderField.pasteSupportRule | string | "Hover & paste files here" | — |
| translations.uploaderField.dragAndDropSupportRule | string | "Drag and drop files here" | — |
translations.dateField
Strings used by DateField (labels, presets, weekday names, AM/PM).
| Path | Type | Default | Description |
|---|---|---|---|
| translations.dateField | object | { 27 entries }Show full value{
"selectDate": "Select date",
"selectTime": "Select time",
"selectRange": "Select date range",
"startDate": "Start date",
"endDate": "End date",
"startTime": "Start time",
"endTime": "End time",
"today": "Today",
"yesterday": "Yesterday",
"tomorrow": "Tomorrow",
"thisWeek": "This week",
"last7Days": "Last 7 days",
"last30Days": "Last 30 days",
"thisMonth": "This month",
"lastMonth": "Last month",
"thisYear": "This year",
"now": "Now",
"apply": "Apply",
"cancel": "Cancel",
"clear": "Clear",
"hours": "Hours",
"minutes": "Minutes",
"seconds": "Seconds",
"am": "AM",
"pm": "PM",
"weekDays": {
"sun": "Sunday",
"mon": "Monday",
"tue": "Tuesday",
"wed": "Wednesday",
"thu": "Thursday",
"fri": "Friday",
"sat": "Saturday"
},
"shortWeekDays": {
"sun": "Sun",
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat"
}
} | — |
translations.settings
Strings used by the theme settings UI.
| Path | Type | Default | Description |
|---|---|---|---|
| translations.settings.darkMode | string | "Dark Mode" | — |
| translations.settings.darkModeEndTime | string | "Dark Mode End Time" | — |
| translations.settings.darkModeStartTime | string | "Dark Mode Start Time" | — |
| translations.settings.dynamicMode | string | "Dynamic Mode" | — |
| translations.settings.dynamicModeDescription | string | "Dynamic Mode auto-switches between Light and Dark based on time. Set start and end times … | — |
| translations.settings.lightMode | string | "Light Mode" | — |
| translations.settings.systemDetection | string | "System Detection" | — |
| translations.settings.systemDetectionDescription | string | "System Detection mode follows your device settings and auto-switches between Light and Da… | — |
dates
Options for the date-related hooks (currently no defaults).
| Path | Type | Default | Description |
|---|---|---|---|
| dates | object | {} | — |
form.label
Floating label behaviour and class names shared by every field.
| Path | Type | Default | Description |
|---|---|---|---|
| form.label.as | string | "label" | Element used to render labels. |
| form.label.showRequiredIndicator | boolean | true | Show the required marker when the field is `required`. |
| form.label.className | string | "flex-nowrap items-center text-xs font-medium text-title-2 gap-1" | Base class names of the label. |
| form.label.stateSharedClassName | string | "absolute flex-nowrap items-center origin-left z-25 rtl:origin-right rounded transition-al… | Class names shared by the resting and floating label states. |
| form.label.inactiveClassName | string | "inset-px scale-100 px-3 pointer-events-none" | Class names while the label rests inside the input. |
| form.label.activeClassName | string | "top-0 inset-s-3 translate-y-[-50%] scale-90 max-w-[calc(100%-0.5rem)] px-1.5 py-px" | Class names while the label floats above the input (focused or filled). |
form.fieldset
Wrapper class applied around every field.
| Path | Type | Default | Description |
|---|---|---|---|
| form.fieldset.className | string | "text-title-2 [&_label]:bg-[inherit]" | Class names applied to the fieldset that wraps a field. |
form.textField
Defaults for TextField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.textField.className | string | "text-sm placeholder:text-body-3" | Class names applied to the text input. |
form.textareaField
Defaults for TextareaField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.textareaField.className | string | "text-sm placeholder:text-body-3" | Class names applied to the textarea. |
| form.textareaField.defaultRows | number | 2 | Rows used when `properties.rows` is not set. |
form.searchField
Icons used by SearchField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.searchField.clearIcon | string | "🗙" | — |
| form.searchField.searchIcon | string | "🔎︎" | — |
form.selectField
Defaults for SelectField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.selectField.triggerIcon | string | "⮟" | Default content of the select trigger. |
| form.selectField.optionClassName | string | "bg-main hover:bg-third" | Class names of each option. |
| form.selectField.optionGroupClassName | string | "bg-main hover:bg-third" | Class names of each option group. |
form.checkField
Defaults for CheckField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.checkField.checkIcon | string | "" | — |
| form.checkField.color | string | "text-muted" | — |
| form.checkField.activeColor | string | "text-primary" | — |
form.passwordField
Defaults for PasswordField: validation rules, colors per strength and icons.
| Path | Type | Default | Description |
|---|---|---|---|
| form.passwordField.useLength | boolean | true | — |
| form.passwordField.length | number | 8 | — |
| form.passwordField.maxLength | undefined | undefined | — |
| form.passwordField.useLowercase | boolean | true | — |
| form.passwordField.lowercaseLength | number | 1 | — |
| form.passwordField.useUppercase | boolean | true | — |
| form.passwordField.uppercaseLength | number | 1 | — |
| form.passwordField.useNumbers | boolean | true | — |
| form.passwordField.numbersLength | number | 1 | — |
| form.passwordField.useSpecialChars | boolean | true | — |
| form.passwordField.specialCharsLength | number | 1 | — |
| form.passwordField.hasCopy | boolean | true | — |
| form.passwordField.hasGenerate | boolean | false | — |
| form.passwordField.hasShow | boolean | true | — |
| form.passwordField.hasValidation | boolean | false | — |
| form.passwordField.showValidationProgress | boolean | true | — |
| form.passwordField.showValidationsList | boolean | false | — |
| form.passwordField.colors.0.textColor | string | "text-error" | — |
| form.passwordField.colors.0.progressColor | string | "bg-error" | — |
| form.passwordField.colors.20.textColor | string | "text-error" | — |
| form.passwordField.colors.20.progressColor | string | "bg-error" | — |
| form.passwordField.colors.40.textColor | string | "text-warning" | — |
| form.passwordField.colors.40.progressColor | string | "bg-warning" | — |
| form.passwordField.colors.60.textColor | string | "text-info" | — |
| form.passwordField.colors.60.progressColor | string | "bg-info" | — |
| form.passwordField.colors.80.textColor | string | "text-primary" | — |
| form.passwordField.colors.80.progressColor | string | "bg-primary" | — |
| form.passwordField.colors.100.textColor | string | "text-success" | — |
| form.passwordField.colors.100.progressColor | string | "bg-success" | — |
| form.passwordField.invalidIcon | string | "✘" | — |
| form.passwordField.validIcon | string | "✔" | — |
| form.passwordField.showIcon | string | "👁" | — |
| form.passwordField.hideIcon | string | "⊘" | — |
| form.passwordField.confirmMainIcon | string | "🔒︎" | — |
| form.passwordField.confirmingMainIcon | string | "ᗢ" | — |
| form.passwordField.copyIcon | string | "🗐" | — |
form.pinField
Defaults for PinField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.pinField.length | number | 6 | — |
| form.pinField.className | string | "rounded-xl text-center text-xl font-bold text-title-1" | — |
form.rangeField
Defaults for RangeField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.rangeField.step | number | 1 | — |
| form.rangeField.showMinMax | boolean | true | — |
| form.rangeField.showValue | boolean | true | — |
| form.rangeField.valuePrefix | string | "" | — |
| form.rangeField.valueSuffix | string | "" | — |
| form.rangeField.className | string | "text-sm" | — |
form.colorField
Defaults for ColorField (preset swatches, alpha, empty state).
| Path | Type | Default | Description |
|---|---|---|---|
| form.colorField.presets | Set | ["#ef4444","#f97316","#f59e0b","#eab308","#84cc16","#22c55e","#10b981","#14b8a6","#06b6d4"…Show full value[ "#ef4444", "#f97316", "#f59e0b", "#eab308", "#84cc16", "#22c55e", "#10b981", "#14b8a6", "#06b6d4", "#0ea5e9", "#3b82f6", "#6366f1", "#8b5cf6", "#a855f7", "#d946ef", "#ec4899", "#f43f5e", "#78716c", "#64748b", "#000000", "#ffffff" ] | Preset swatches offered by the picker. |
| form.colorField.alpha | boolean | true | Allow selecting opacity. |
| form.colorField.allowEmpty | boolean | true | Allow clearing the value. |
form.phoneField
Defaults for PhoneInput.
| Path | Type | Default | Description |
|---|---|---|---|
| form.phoneField.worldwide | boolean | true | — |
| form.phoneField.codePrefix | string | "+" | — |
| form.phoneField.showCountriesName | boolean | true | — |
| form.phoneField.selectedCountriesOnly | array | []Show full value[] | — |
| form.phoneField.showCountriesFlags | boolean | true | — |
form.autoCompleteField
Defaults for AutocompleteField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.autoCompleteField.triggerIcon | string | "⮟" | — |
| form.autoCompleteField.triggerWrapperClassName | string | "text-sm" | — |
| form.autoCompleteField.multiple | boolean | false | — |
| form.autoCompleteField.searchable | boolean | true | — |
| form.autoCompleteField.searchViaLabel | boolean | true | — |
| form.autoCompleteField.showClearSearch | boolean | true | — |
| form.autoCompleteField.ClearSearchIcon | string | "🗙" | — |
| form.autoCompleteField.multipleTagsCloseIcon | string | "🗙" | — |
form.uploaderField
Defaults for UploaderField: limits, accepted categories and icons.
| Path | Type | Default | Description |
|---|---|---|---|
| form.uploaderField | object | { 27 entries }Show full value{
"defaultFileCategory": [
"all"
],
"onDetectErrors": "[function]",
"minBlockHeight": "min-h-[100px]",
"showProgress": true,
"progressColor": "text-primary",
"allowDragAndDrop": true,
"allowPaste": true,
"minFiles": 1,
"maxSize": 5,
"fileIcon": "🗎",
"filesIcon": "🗐",
"imageIcon": "⛶",
"imagesIcon": "⛶",
"videoIcon": "▷",
"videosIcon": "▷",
"audioIcon": "♫",
"audiosIcon": "♫",
"textIcon": "🗎",
"textsIcon": "🗐",
"applicationIcon": "■",
"applicationsIcon": "■",
"executableIcon": "■",
"executablesIcon": "■"
} | — |
form.numberField
Defaults for NumberField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.numberField.allowTelSymbols | boolean | false | — |
| form.numberField.decimalSeparator | string | "." | — |
| form.numberField.decimalsMax | number | 3 | — |
| form.numberField.decimalsMin | number | 0 | — |
| form.numberField.thousandSeparator | string | "," | — |
form.ratingField
Defaults for RatingField.
| Path | Type | Default | Description |
|---|---|---|---|
| form.ratingField.max | number | 5 | — |
| form.ratingField.step | number | 1 | — |
| form.ratingField.allowClear | boolean | true | — |
| form.ratingField.className | string | "text-body-3" | — |
| form.ratingField.activeClassName | string | "text-amber-400" | — |
| form.ratingField.iconSize | number | 24 | — |
| form.ratingField.emptyIcon | undefined | undefined | — |
| form.ratingField.icon | undefined | undefined | — |
form.dateField
Defaults for DateField: week start, 12/24h clock, steps, icons and presets.
| Path | Type | Default | Description |
|---|---|---|---|
| form.dateField.firstDayOfWeek | number | 0 | First day of the calendar week: 0 = Sunday, 1 = Monday, 6 = Saturday. |
| form.dateField.hour12 | boolean | true | Use a 12-hour clock with AM/PM. |
| form.dateField.timeFormat | string | "12" | Clock format: `12` or `24`. |
| form.dateField.showSeconds | boolean | false | Show a seconds column in time pickers. |
| form.dateField.allowClear | boolean | true | Show the clear action. |
| form.dateField.minuteStep | number | 1 | Step of the minutes column. |
| form.dateField.secondStep | number | 1 | Step of the seconds column. |
| form.dateField.openOnInputClick | boolean | false | Open the picker when the input is clicked. |
| form.dateField.manualInput | boolean | true | Allow typing a value directly into the input. |
| form.dateField.editManual | boolean | true | Alias of `manualInput`. |
| form.dateField.calendarIcon | string | "📅" | — |
| form.dateField.clockIcon | string | "🕒" | — |
| form.dateField.clearIcon | string | "✕" | — |
| form.dateField.chevronLeft | string | "‹" | — |
| form.dateField.chevronRight | string | "›" | — |
| form.dateField.presets | object | { 7 entries }Show full value{
"date": [
{
"title": "Today",
"date": "[function]"
},
{
"title": "Yesterday",
"date": "[function]"
},
{
"title": "Tomorrow",
"date": "[function]"
}
],
"dateRange": [
{
"title": "Today",
"date": "[function]"
},
{
"title": "Yesterday",
"date": "[function]"
},
{
"title": "Last 7 Days",
"date": "[function]"
},
{
"title": "Last 30 Days",
"date": "[function]"
},
{
"title": "This Month",
"date": "[function]"
},
{
"title": "Last Month",
"date": "[function]"
},
{
"title": "This Year",
"date": "[function]"
}
],
"time": [
{
"title": "Now",
"date": "[function]"
},
{
"title": "09:00",
"date": "09:00"
},
{
"title": "12:00",
"date": "12:00"
},
{
"title": "15:00",
"date": "15:00"
},
{
"title": "18:00",
"date": "18:00"
}
],
"timeRange": [
{
"title": "Morning (09:00 - 12:00)",
"date": [
"09:00",
"12:00"
]
},
{
"title": "Afternoon (13:00 - 17:00)",
"date": [
"13:00",
"17:00"
]
},
{
"title": "Business Day (09:00 - 18:00)",
"date": [
"09:00",
"18:00"
]
}
],
"dateTime": [
{
"title": "Now",
"date": "[function]"
}
],
"dateTimeRange": [
{
"title": "Today",
"date": "[function]"
},
{
"title": "Last 7 Days",
"date": "[function]"
},
{
"title": "This Month",
"date": "[function]"
}
],
"datetime": []
} | Quick-pick presets per mode (`date`, `dateRange`, `time`, ...). |
theme
Theme switching behaviour and icons.
| Path | Type | Default | Description |
|---|---|---|---|
| theme.default | string | "LIGHT" | Initial theme: LIGHT, DARK, ... |
| theme.switchingAnimation | boolean | true | Animate theme changes. |
| theme.themeStorageKey | string | "theme" | localStorage key that stores the chosen theme. |
| theme.themeRangeStorageKey | string | "theme-dynamic-range" | localStorage key that stores the dynamic-mode time range. |
| theme.themeDynamicStartTime | string | "06:00" | Dynamic mode: time the dark theme starts (HH:mm). |
| theme.themeDynamicEndTime | string | "18:00" | Dynamic mode: time the dark theme ends (HH:mm). |
| theme.lightModeIcon | string | "☼" | — |
| theme.darkModeIcon | string | "☾︎" | — |
| theme.systemDetectionIcon | string | "🖧" | — |
| theme.dynamicModeIcon | string | "◐" | — |
responsive
Breakpoints used by the responsive provider and hooks.
| Path | Type | Default | Description |
|---|---|---|---|
| responsive.xs | number | 0 | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.sm | string | "40rem" | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.md | string | "48rem" | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.lg | string | "64rem" | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.xl | string | "80rem" | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.2xl | string | "96rem" | Breakpoint values, in the same shape as Tailwind screens. |
| responsive.3xl | string | "120rem" | Breakpoint values, in the same shape as Tailwind screens. |
settings
Global direction and locale.
| Path | Type | Default | Description |
|---|---|---|---|
| settings.isRtl | boolean | false | Render in right-to-left direction (also feeds rich-text editor direction). |
| settings.locale | string | "en" | Locale code (also feeds the rich-text editor language). |