SelectField

rendered, live
the wire — click a line to scrub
the contract — SelectField in catalog.json
{
  "type": "object",
  "properties": {
    "component": {
      "const": "SelectField"
    },
    "label": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
      "description": "Visible field label. Required — the accessible name."
    },
    "value": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DataBinding",
      "description": "Data binding for the chosen option's value, always {\"path\": ...}."
    },
    "options": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "value": {
                "type": "string"
              },
              "label": {
                "type": "string"
              }
            },
            "required": [
              "value",
              "label"
            ],
            "additionalProperties": false
          }
        ]
      },
      "description": "Flat list of choices. {\"value\", \"label\"} objects, or bare strings when value and label are the same."
    },
    "placeholder": {
      "type": "string",
      "description": "Prompt shown before a choice is made, e.g. 'Choose a region…'."
    },
    "hint": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString"
    },
    "checks": {
      "type": "array",
      "items": {
        "type": "object",
        "description": "A validation check. Spec-shaped — `condition` is a FunctionCall — but narrowed to the renderer's built-ins, and `message` is required because a check with no human text fails silently.",
        "properties": {
          "condition": {
            "type": "object",
            "properties": {
              "call": {
                "enum": [
                  "required",
                  "email",
                  "regex",
                  "length",
                  "numeric"
                ],
                "description": "One of the protocol's built-in validation functions. The renderer supplies the field's current value automatically."
              },
              "args": {
                "type": "object",
                "description": "Arguments beyond the value: regex takes {\"pattern\"}, length and numeric take {\"min\"} and/or {\"max\"}. required and email take none."
              }
            },
            "required": [
              "call"
            ],
            "additionalProperties": false
          },
          "message": {
            "type": "string",
            "description": "Human text shown when the check fails. Always required."
          }
        },
        "required": [
          "condition",
          "message"
        ],
        "additionalProperties": false
      },
      "description": "Validation rules, evaluated by the renderer as the user types. Submission is blocked while any check fails."
    }
  },
  "required": [
    "label",
    "value",
    "options"
  ]
}
the prompt-pack — paste into your agent
### SelectField — one of many, compact

| prop          | type       | required | notes                                                       |
| ------------- | ---------- | -------- | ----------------------------------------------------------- |
| `label`       | string     | yes      | visible label and accessible name                           |
| `value`       | `{"path"}` | yes      | binds the chosen option's `value`                           |
| `options`     | option[]   | yes      | `{"value","label"}` objects, or bare strings when identical |
| `placeholder` | string     | no       | prompt before a choice, e.g. `"Choose a region…"`           |
| `hint`        | string     | no       |                                                             |
| `checks`      | check[]    | no       | `required` makes the choice mandatory                       |

```
{"id":"region","component":"SelectField","label":"Region","value":{"path":"/svc/region"},"placeholder":"Choose a region…","options":[{"value":"eu-west-1","label":"Europe (Ireland)"},{"value":"us-east-1","label":"US East (Virginia)"}],"checks":[{"condition":{"call":"required"},"message":"Pick a region."}]}
```