Skip to content

Repeater

A list of nested field schemas — line items, speakers, “add another.”

from almasix.orbit.forms import Form, Repeater, TextInput
form = Form.make("demo").schema([
Repeater.make("links")
.schema([
TextInput.make("label").required(),
TextInput.make("url").url().required(),
])
.cloneable()
.collapsible()
.reorderable()
.item_label(lambda index, **_: f"Link {index + 1}")
.min_items(1)
.max_items(5)
])
from almasix.orbit import Resource
from almasix.orbit.forms import Form, Repeater, TextInput
class PostResource(Resource):
@classmethod
def form(cls, form: Form) -> Form:
return form.schema([
Repeater.make("speakers").schema([
TextInput.make("name").required(),
TextInput.make("title"),
]),
])
  • .schema([...]) — nested fields / layouts
  • .cloneable() / .collapsible() / .reorderable() — item action buttons
  • .item_label(str | callable) — per-item header
  • .min_items(n) / .max_items(n) — limits (data-min-items / data-max-items)
  • Wire actions: addRepeaterItem, removeRepeaterItem, cloneRepeaterItem, moveRepeaterItem

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

Import nested fields from almasix.orbit.forms as usual.

Orbit form example (light)

Orbit form example (dark)