Field Types & Properties
Every field type the entry sheet supports, and every key its properties column accepts.
Properties Reference — every key, at a glance
This is the complete set of keys the properties column accepts, across every field type. Only include the keys relevant to a field's own ui_smarttable_element — an unrecognized key is simply ignored, and an empty/missing properties value is always valid (the field just uses its plain default rendering).
| Key | Applies to | Accepts |
|---|---|---|
comma_separator | number | "none", "indian", "international" |
number_scale | number | "none", "num_thousands", "num_lakhs", "num_crores", "num_millions", "num_billions", "num_trillions" |
num_fraction_digits | number | Integer — fixed decimal places |
format | date, month, time | A format-token string — see Date & Time Formatting below |
display_as | checkbox | A label string to show only when TRUE on the display/PDF sheet (e.g. {"display_as": "Verified"} shows "Verified" when checked, blank when unchecked). Only affects Display & Header Sheet rendering of a <pa_ID>/<pa_ID_oN> placeholder — the entry form itself always shows a plain checkbox regardless of this key. |
min_rows / max_rows | Table groups only — see the callout below | Integer — minimum/maximum rows for the whole table, set on the group's first column only |
table_name | Table groups only | A label string shown above the table's grid (e.g. {"table_name": "Materials Used"}). Set on the group's first column only, same as min_rows/max_rows — ignored on any other column of the same table_no. |
columnWidth | Any field used as a table column | A number — percentage of the table's available width for that one column (e.g. {"columnWidth": 20} for 20%). Set per column, unlike min_rows/table_name — every column that should get a specific width needs its own value. If no column in the table sets this, all columns auto-size instead; but the moment any column sets it, every column switches to a fixed width — a column left without columnWidth then falls back to a flat minimum (not a proportional share of the remaining space), so mixing set and unset columns in the same table can look uneven. There's also a hard floor of roughly 80px regardless of how small a percentage computes to. |
root_dir | text | An absolute server-side directory path (e.g. {"root_dir": "/mnt/shared/templates"}). Turns the plain text input into a Browse Files button that opens a folder picker rooted at that path — the user navigates the server's directory tree and picks a file or folder, and its full path is stored as the field's text value. This does not upload anything; it only references an existing path already present on the server. |
ℹ️ Field types with no
properties keys
textarea and attachment don't read anything from properties — leave the column empty for these. Attachment limits are their own dedicated column (attachment_max_count) on the entry sheet, not part of properties. A table field's own row/column layout is configured through the row/table/table_no entry-sheet columns, not through properties either — each column of a table is just a regular field (of any type in this list) marked to repeat.
Field Type Reference (ui_smarttable_element)
Every value ui_smarttable_element actually accepts — 12 in total, confirmed against the renderer dictionary itself rather than assumed from naming conventions.
| Type | Renders As | Options / Properties |
|---|---|---|
text | Single-line text input | properties: optional root_dir (see Properties Reference above) — turns the input into a server-side file/folder picker instead of a plain text box |
textarea | Multi-line text input | — |
number | Numeric input with min/max validation | properties: {"comma_separator": "indian", "number_scale": "num_lakhs", "num_fraction_digits": 2} — all optional; omit a key to leave that aspect unformatted. Applies wherever the value is shown (entries table, display, print, PDF). |
date | Date-only picker (no time component) | properties: {"format": "dd/MM/yyyy"} — optional |
month | Native month/year picker, no day component (value stored as YYYY-MM) — for a field like "Reporting Month" where a specific day doesn't apply | properties: {"format": "MMM-yyyy"} — optional |
time | Despite the name, this renders a full date-and-time picker (<input type="datetime-local">), not a time-only control. There is no separate datetime key — this is it. | properties: {"format": "dd/MM/yyyy HH:mm"} — optional |
dropdown | Single-select dropdown | allowed_data (own column, not properties): Option A, Option B |
multi_select_dropdown | Multi-select with checkboxes | allowed_data: Tag 1, Tag 2, Tag 3 |
radio_button | Radio button group (circles) | allowed_data: Yes, No, N/A |
button_group | The exact same one-of-many choice as radio_button, rendered as a row of toggle buttons instead of radio circles — purely a visual variant, same allowed_data format | allowed_data: Yes, No, N/A |
checkbox | Boolean toggle | properties: optional display_as (see Properties Reference above) — affects display/PDF rendering only |
attachment | File upload only (no text input) | — |
💡 When the stored value shouldn't equal the displayed label
allowed_data also accepts a JSON array of {"value":..., "label":...} objects instead of a plain comma list — useful when what gets saved (e.g. an internal code) should differ from what the user sees in the option list.
💡 Table fields aren't a
ui_smarttable_element value
A "table" (Handsontable multi-row grid) isn't one of the 12 types above — it's a group of regular fields (any type in this list, one per column). Every field sharing the same table_no becomes one column of the same table; there's no separate JSON list of columns anywhere. To cap how many rows the table allows or give it a label, put min_rows/max_rows/table_name in the properties of that group's first field only (the one entered first in the sheet, by row order) — the app reads them from there and ignores the same keys on any other column of the same table. To size an individual column, set columnWidth instead — that one's the opposite: it goes on each column that needs a specific width, not just the first. See Entry Sheet — Column Reference for the table/row/table_no columns themselves.
💡 Autofill / Relational Lookups
A dropdown/multi-select field's options can also be pulled live from another (relational) smarttable instead of a fixed list — including a linked-field auto-populate behavior. This is not configured in the entry sheet's
properties column — it's configured afterward in the app itself, per field, from SmartTable Settings. See Autofill Configuration for the full setup steps.
Number Formatting (properties, for number fields)
| Key | Description | Values |
|---|---|---|
| comma_separator | Digit grouping style | none, indian (12,34,567), international (1,234,567) |
| number_scale | Scales large numbers down with a unit suffix. Falls back to the next smaller unit if the value doesn't reach the chosen one. | none, num_thousands (k), num_lakhs (L), num_crores (Cr), num_millions (M), num_billions (B), num_trillions (T) |
| num_fraction_digits | Fixed number of decimal places to show | 0, 1, 2, ... |
💡 Example
{"comma_separator": "indian", "number_scale": "none", "num_fraction_digits": 0} turns 1234567 into 12,34,567. Leave a field's properties empty to show plain numbers as-is.
Date & Time Formatting (properties, for date/month/time fields)
Set a format key to control how the value is displayed — in the entries table, on Display/Print, and in exported PDFs — independent of how it's stored internally.
| Token | Meaning | Example |
|---|---|---|
yyyy | 4-digit year | 2026 |
MMM | 3-letter month name | Aug |
MMMM | Full month name | August |
MM | 2-digit month | 08 |
dd | 2-digit day | 26 |
HH | 2-digit hour, 24-hour | 14 |
hh | 2-digit hour, 12-hour | 02 |
mm | 2-digit minute | 05 |
ss | 2-digit second | 09 |
a | AM/PM marker | PM |
💡 Examples
{"format": "MMM-yyyy"} shows Aug-2026. {"format": "dd/MM/yyyy HH:mm"} shows 26/08/2026 14:05. {"format": "hh:mm a"} shows 02:05 PM. Leave properties empty to use the field's default format.