Files
Jack BenningandClaude Opus 5 36a2767b5c Address review: keep the slide, keep the section, say what the server does
Every apps form lost its slide-in animation. Bootstrap's `transition:
transform 0.3s ease-out` sits on `.modal.fade .modal-dialog`, exactly as
specific as the new `.modal .modal-dialog.apps-form-modal` rule and earlier
in the cascade, so naming only `width` replaced it rather than adding to it
— and every apps form carries the class, not just a grid. Both transitions
are listed now.

The three width tiers were the same width between 768px and 991px, because
`medium` borrowed `.modal-lg`, whose 700px Mattermost sets app-wide only
above 992px. Both wide tiers get a class of their own and start at
Bootstrap's own 768px breakpoint, so a dialog's width no longer moves when
an unrelated rule does, and the tiers differ wherever a dialog is not
already fluid.

A grid container was rendering its own subtree, which dropped the three
things a collapsible says about itself: `collapsed`, `borderless` and
`display_name` were all ignored, including in the docs' own grid example.
The grid now lays out inside the same CollapsibleSection the stacked layout
uses, so only the arrangement of the children differs.

Accessibility and ragged input, in the grid itself:
- the table takes the container's name through a clipped `<caption>`, and
  each row keeps its `display_name` as the row's accessible name
- a required cell's marker was only in the clipped per-cell label, so the
  cell looked optional until submission failed; the column heading carries
  it too
- rows that are all empty fell through to an empty table instead of the
  fallback
- two cells sharing a name in one row collided on their React key and cost
  the row a cell; the keys carry the column index
- the sticky first column could cover the cell that just took focus while
  tabbing sideways (`scroll-padding-inline-start`)

The docs and a Go comment said an unrecognised `size` or collapsible
subtype was rejected when the dialog opens. It is not:
App.OpenInteractiveDialog logs what IsValid returns and opens the dialog
anyway, and the client falls back to the default width and to a stacked
layout. Both now say that, and tests pin it on the open-dialog path rather
than only on Dialog and DialogElement in isolation. `12.0` in the two new
sections is `12.1`: v12.0.0 is tagged and has neither feature.

Cells are matched to columns by position, so a row that omits an element in
the middle shifts the rest left under the wrong heading. The docs claimed a
mismatch always showed as a gap; they now say what actually happens and
what to do about it.

Also: the grid spec measured nothing it claimed to — `overflow-x: auto` is
set unconditionally, and the width check only read a class name. It now
measures the modal at each tier, checks the sticky column by scrolling the
table, checks the clip on the per-cell labels rather than `not.be.visible`
(which passes for a clipped element either way), waits on
`cy.intercept`/`cy.wait` like action_button_spec rather than on fixed
delays, and covers a window too narrow for the tier. The MM-T5700A–H IDs
were invented and are gone; 942 specs in the repo carry no TestRail ID.

Jest gains the gaps: required cells and per-cell errors, a collapsed grid,
a grid nested in a grid through AppsForm, unique keys, an unknown size, and
the router and adapter hops that carry `size`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-15 18:47:57 -04:00
..
…
…
…
…