# Input fields

<PageBadges />

import { Callout } from "zudoku/ui/Callout"

This page lists input field types and their extra attributes beyond the common ones.

## TextField

```json
{
  "type": "TextField",
  "key": "first_name",
  "data_name": "first_name",
  "label": "First name",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": false,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": null,
  "pattern": null,
  "pattern_description": null,
  "supporting_image": false,
  "supporting_image_path": null,
  "supporting_image_display": null
}
```

Additional attributes:

- `pattern`: Regex pattern to validate input.
- `pattern_description`: Optional explanation for the pattern.

## NumericField

```json
{
  "type": "NumericField",
  "key": "age",
  "data_name": "age",
  "label": "Age",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": true,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": null,
  "min": 0,
  "max": 120,
  "format": "integer",
  "supporting_image": false,
  "supporting_image_path": null,
  "supporting_image_display": null
}
```

Additional attributes:

- `min`: Minimum allowed value.
- `max`: Maximum allowed value.
- `format`: `integer` or `float`.

## SingleChoiceField

```json
{
  "type": "SingleChoiceField",
  "key": "city",
  "data_name": "city",
  "label": "City",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": true,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": null,
  "allow_other": false,
  "choices": [
    { "label": "Paris", "value": "paris" },
    { "label": "Rome", "value": "rome" }
  ],
  "supporting_image": false,
  "supporting_image_path": null,
  "supporting_image_display": null,
  "is_searchable": false,
  "is_searchable_mode": null
}
```

Additional attributes:

- `choices`: Array of `{ label, value }` objects.
- `allow_other`: Enables a free-text option.
- `is_searchable`: Enables search in large lists.
- `is_searchable_mode`: Currently `default` or `null`.

## MultiChoiceField

```json
{
  "type": "MultiChoiceField",
  "key": "foods",
  "data_name": "foods",
  "label": "Favorite foods",
  "display": "checkbox",
  "description": null,
  "description_mode": null,
  "required": false,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": ["pasta"],
  "allow_other": false,
  "choices": [
    { "label": "Pasta", "value": "pasta" },
    { "label": "Pizza", "value": "pizza" }
  ],
  "supporting_image": false,
  "supporting_image_path": null,
  "supporting_image_display": null,
  "is_searchable": false,
  "is_searchable_mode": null
}
```

Additional attributes:

- `choices`: Array of `{ label, value }` objects.
- `allow_other`: Enables free-text items.
- `display`: `default` or `checkbox`.

## BooleanField

```json
{
  "type": "BooleanField",
  "key": "newsletter",
  "data_name": "newsletter",
  "label": "Subscribe?",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": false,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": null,
  "choices": [
    { "label": "Yes", "value": "yes" },
    { "label": "No", "value": "no" }
  ],
  "third_option_enabled": false,
  "supporting_image": false,
  "supporting_image_path": null,
  "supporting_image_display": null
}
```

Additional attributes:

- `choices`: Usually two options (yes/no).
- `third_option_enabled`: Enables a third neutral option.

## DateField

```json
{
  "type": "DateField",
  "key": "visit_date",
  "data_name": "visit_date",
  "label": "Visit date",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": false,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": "now"
}
```

Additional attributes:

- `default_value`: `now` (or `null`).

## TimeField

```json
{
  "type": "TimeField",
  "key": "visit_time",
  "data_name": "visit_time",
  "label": "Visit time",
  "display": "default",
  "description": null,
  "description_mode": null,
  "required": false,
  "required_conditions": null,
  "visible": true,
  "visible_conditions": null,
  "read_only": false,
  "read_only_conditions": null,
  "default_value": "now"
}
```

Additional attributes:

- `default_value`: `now` (or `null`).

<Callout type="info" title="Choice values">
  Choice values must match `^[a-z0-9_]+$`. If a choice does not provide a `value`, form0-core will
  generate one from the label.
</Callout>
