Post sits after the tag, not under the ledger

A footer across the panel put Post directly below the ledger in the
bottom dock, since the ledger is the tall column -- so you could read a
figure, hit Post and never pass the tag. An untagged adjustment is
invisible to the bridge and ungrouped in the change log, so the layout
has to route you through that field rather than leave it beside the
work.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Paul Trowbridge 2026-09-23 22:08:44 -04:00
parent 6af4902849
commit 065d1c2571

View File

@ -1395,6 +1395,19 @@ export default function OperationPanel({
placeholder="optional" className={`${TEXT} w-full`} /> placeholder="optional" className={`${TEXT} w-full`} />
</Field> </Field>
{/* Last field, then the button. In the bottom dock the ledger is the tall
column and this one is short, so a footer under both put Post directly
below the ledger -- you could read a figure, hit Post, and never pass
the tag at all. An untagged adjustment is invisible to the bridge and
to the change log's grouping, so the layout has to walk you through
the field rather than leave it off to the side. */}
<div className="pt-1 flex items-center gap-3">
<Submit onClick={() => submitOp(activeOp)} busy={!!opBusy}>
{opBusy ? POSTING : POST}
</Submit>
{opBusy && <span className="text-gray-500 leading-snug">writing rows…</span>}
</div>
<RequestPreview payload={buildPayload(activeOp)} /> <RequestPreview payload={buildPayload(activeOp)} />
</div> </div>
) )
@ -1476,22 +1489,6 @@ export default function OperationPanel({
</div> </div>
)} )}
{/* Last, because it is last: pick the operation, read the ledger, name
the change, post it. The blank label keeps Post in the same column as
every other button in the panel rather than at an edge of its own.
Sticky, because the bottom dock is a fixed height with its own scroll
-- a primary action that has to be scrolled to is a primary action
people miss. */}
{hasSlice && (
<div className="sticky bottom-0 z-10 flex items-center gap-3 px-3 py-2 border-t border-gray-200 bg-gray-50">
<Field label="">
<Submit onClick={() => submitOp(activeOp)} busy={!!opBusy}>
{opBusy ? POSTING : POST}
</Submit>
</Field>
{opBusy && <span className="text-gray-500">writing rows — the pivot updates when it finishes</span>}
</div>
)}
</div> </div>
) )
} }