Toggle buttons
Introduction
Section titled “Introduction”ToggleButtons subclasses Select but does not render a <select>. Each option becomes a labeled radio inside or-toggle-buttons, with is-active on the selected chip. State is a single option key. Use it for compact status, visibility, or size pickers where a dropdown feels heavy. Note: Field helpers .descriptions() and .options_columns() exist on the base class for Radio/CheckboxList; ToggleButtons’ render loop currently ignores those and only paints labels.
Each variation below includes a detailed explanation, the fluent API to paste into your schema, and light/dark screenshots of the rendered control.
Basic toggle buttons
Section titled “Basic toggle buttons”Provide .options({value: label}). The first selection dehydrates as that key string.
ToggleButtons.make('status') .label('Status') .options({ 'draft': 'Draft', 'review': 'In review', 'published': 'Published', })

Boolean Yes / No
Section titled “Boolean Yes / No”.boolean() sets options to {1: "Yes", 0: "No"} — same helper as Select/Radio.
ToggleButtons.make('featured') .label('Featured') .boolean()

Required selection
Section titled “Required selection”.required() injects a required rule and asterisk. Disable the whole group with .disabled() or .disabled_on('view').
ToggleButtons.make('priority') .label('Priority') .options({'low': 'Low', 'medium': 'Medium', 'high': 'High'}) .required()

Enum options
Section titled “Enum options”.enum(MyEnum) populates options from an Enum’s values → title-cased names, inherited from Field.
from enum import Enum
class Size(Enum): S = 's' M = 'm' L = 'l'
ToggleButtons.make('size') .label('Size') .enum(Size)

Closures work on .label(), .helper_text(), .placeholder(), .visible(), .disabled(), and .required() where applicable — see Form closures.