## AirField 0.3.0: Define once on the model, render anywhere

Pydantic models can carry a full description of how each field should be presented. Sixteen frozen dataclasses cover labels, widgets, choices, table columns, visibility, grouping, and display formatting. Annotate your fields with `Annotated[str, Label("Full name"), Widget("text")]` and any form renderer, table builder, or CLI prompt generator can discover exactly what it needs.

```sh
uv add AirField>=0.3.0
```

### What's new

- **16 presentation types** in `airfield.types`, all frozen dataclasses inheriting from `BasePresentation`: `Label`, `Placeholder`, `HelpText`, `Widget`, `DisplayFormat`, `Choices`, `ColumnAlign`, `ColumnWidth`, `Filterable`, `Sortable`, `Hidden`, `ReadOnly`, `Grouped`, `Priority`, and `Compact`. Consumers find them via `isinstance(m, BasePresentation)` when traversing field annotations.

- **`AirField()` accepts form and UI parameters directly**: `type`, `label`, `widget`, `choices`, `placeholder`, `help_text`, and `autofocus`, alongside the existing `primary_key`. Two ways to attach the same metadata: `Annotated` types for full type safety, or keyword arguments for quick inline declarations.

### Contributors

[@audreyfeldroy](https://audrey.feldroy.com/) (Audrey M. Roy Greenfeld) designed and built this release: the presentation type vocabulary and the expanded AirField signature.
