fix(replies): one invitation to reply, the same one everywhere

A post offered two ways into the same reply editor, and a reply card offered a different one from the post it belongs to.

One way in, not two

The post showed the reply arrow and the "post your reply" box a few pixels apart, both opening the same editor. The box wins while it is on offer, because it is the one that says what it does; the arrow comes back once the editor is open, where it is no longer a duplicate but the way to close it again.

Both controls now read one exported, pure rule instead of each testing its own conditions, and a sweep of every combination asserts the two are never on screen together. Rendering the component in a test is not practical, and testing each condition separately is exactly how they drifted into overlapping.

No empty tab

With the arrow hidden, a post whose reader can do nothing else to it -- not the author, not a moderator -- still got the footer's action tab, drawn around nothing. The footer decides by whether it was handed actions, and a JSX element is truthy however little it renders, so it cannot work this out for itself. It is told instead.

The same invitation on a reply card

The replies list offered an arrow where the full post offers a box you can click into: the same action presented as two different things to learn. The invitation moves into a component with its own stylesheet, so the post and the card cannot drift apart, and the rule that keeps the arrow and the box from both appearing moves beside it.

Only where an inline reply is actually on offer, which is one place: the replies tab passes allowInlineReply and nothing else does. A feed card is untouched.

Layout

.articles__content is a flex row whose children carry explicit order on a scale that differs by breakpoint. The block holding the invitation carried none, so it took 0, sorted ahead of the footer and shrank into a flex item beside the body -- the box floated mid-card with empty space around it. It now sits past the largest footer order at full basis, landing under the footer at every width.

On a card it takes the step and the dotted rule the threaded view already uses for a nested reply: 62px in, collapsing to 10px on a phone the way comments do, and stopping at 34rem so a wide screen gives it air rather than more box.

Rendered and checked at 390px and 1200px in both themes. 60 suites / 543 tests pass, and the branch merges onto main with no conflicts.

Merge request reports

Loading
Loading