Repository navigation
The repeater becomes a real container - #30
Merged
Merged
Conversation
The repeater used to be a card that said "set this up in the panel on the
right" — and the panel had no way to put fields in it. Now it is a container
everywhere it appears:
- Builder: the canvas draws the repeater as the row card the visitor will
get, sub-fields drop into it from the palette, drag in/out/reorder across
it, and each one is selectable, editable in place, and inspectable. The
card's title is the new itemLabel setting, editable where it sits.
- Front end: every row is a titled card — "Attendee 1", "Attendee 2" —
renumbered live, with a header, a named Remove button, and an Add button
that finally has margins and never inherits the submit button's width.
- Formulas: {attendees} is the row count, sum( {attendees.age} ) spreads one
argument per row into sum/avg/min/max, and {attendees.age} anywhere else
is the total across rows. Both engines resolve identically, held to it by
the shared conformance table.
- Analytics: the repeater's panel reports rows-per-entry, and every
sub-field reports as a question of its own — choice tallies and numeric
summaries aggregated across all rows, with honest per-row denominators.
- Validation: each row's sub-fields validate with the full rule set, named
by row — "Attendee 2: Age is required." — plus a minRows floor.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The repeater used to be a summary card that said "set this up in the panel on the right" — and the panel had no way to put fields in it. This makes it a container everywhere it appears.
Builder
itemLabelsetting, editable where it sits: type "Attendee" and every front-end card numbers itself.Front end
role="group"+aria-label, live renumbering on add/remove, and an Add button with real margins that no longer inherits the submit button's width.Formulas — both engines, held together by the shared fixture table
{attendees}→ the row count ({attendees} * 15is per-head pricing).sum( {attendees.age} )→ one argument per row, forsum/avg/min/maxas sole argument.{attendees.age}anywhere else → the total across rows (spreading intopow(x, 2)would shift its arguments, so it deliberately doesn't).Analytics
of/unit).Validation
minRowsfloor.Verified on the 8889 QA site: palette→repeater drag, itemLabel typed on the card,
sum({rep.age})composed by chips previewing 5, and the paired preview window summing 30+12→42.00 live, renumbering on add/remove.Tests: 353 vitest + 690 PHPUnit green (12 new repeater calc conformance cases run through both engines), PHPCS clean, docs updated.
🤖 Generated with Claude Code
https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp