diff --git a/apps/web/src/components/pull-requests/PullRequestDetailPanel.tsx b/apps/web/src/components/pull-requests/PullRequestDetailPanel.tsx
index 6a288c73..e0790a86 100644
--- a/apps/web/src/components/pull-requests/PullRequestDetailPanel.tsx
+++ b/apps/web/src/components/pull-requests/PullRequestDetailPanel.tsx
@@ -400,7 +400,10 @@ export function PullRequestDetailPanel({
return (
{/* The order toggle shares the row but not the tablist: it is not a tab,
- and inside one it would answer to the arrow keys as though it were. */}
+ and inside one it would answer to the arrow keys as though it were.
+ The tabs are drawn whole at every width; in a narrow panel they close
+ ranks and the control beside them keeps its glyph and loses its words,
+ so nothing is pushed past the edge. */}
-
+
{activeTab === "timeline" ? (
-
+
+
) : null}
{/* The rollup the header used to spell out on a line of its own. It is
a way into the Summary's Checks section rather than a label, so it
@@ -600,7 +619,7 @@ function PullRequestDetailHeader({
return (
{/* Row 1: where it lives, and what can be done to it. */}
-
+
{/* On a phone the list is not on screen, so the way back sits where
a back arrow belongs: first, at the top left. */}
@@ -624,7 +643,7 @@ function PullRequestDetailHeader({
Auto-merge on
) : null}
-
+
{showCheckout ? (
{/* Row 3: who wrote it, when it last moved, and the one command that
- takes the branch on a machine this app is not running on. */}
-
-
+ takes the branch on a machine this app is not running on. The command
+ drops to a line of its own before it can squeeze the author out. */}
+
- {/* Row 4: the branches this joins, and how much it changes. Below `md`
- the counts drop to a line of their own: the branch names are what the
- row is for, and sharing the line leaves them a letter each. */}
+ {/* Row 4: the branches this joins, and how much it changes. In a narrow
+ panel the counts drop to a line of their own: the branch names are
+ what the row is for, and sharing the line leaves them a letter each. */}
@@ -717,7 +737,7 @@ function PullRequestDetailHeader({
) : null}
-
+
{pluralize(detail.changedFiles, "file")}
@@ -815,7 +835,8 @@ function PullRequestCheckoutMenu({
* The rollup of the checks, beside the tabs: a glyph, a phrase, and a way down
* to the rows it counts. The glyph is drawn here rather than taken whole from
* the presentation module, because inside a button a second tooltip trigger
- * would fight the button for the pointer.
+ * would fight the button for the pointer. In a narrow panel the phrase is for
+ * screen readers and the tooltip only, and the glyph stands for it.
*/
function PullRequestChecksRollup({
summary,
@@ -825,23 +846,26 @@ function PullRequestChecksRollup({
readonly onShowChecks: () => void;
}) {
const tone = pullRequestChecksTone(summary.state);
+ const headline = formatPullRequestChecksHeadline(summary);
return (
-
+
+
+
);
}
@@ -977,11 +1001,11 @@ function PullRequestTitle({
tabIndex={-1}
className="group/title flex min-w-0 flex-1 items-center gap-1.5 rounded-sm focus-ring"
>
- {/* A phone's column, and a tablet's, are narrow enough that one truncated
+ {/* A phone's column, and a sidebar's, are narrow enough that one truncated
line says almost nothing, so there it wraps to two before it gives
up. */}
{detail.title}
diff --git a/apps/web/src/components/pull-requests/PullRequestSummaryTab.tsx b/apps/web/src/components/pull-requests/PullRequestSummaryTab.tsx
index cfc28c08..24756a12 100644
--- a/apps/web/src/components/pull-requests/PullRequestSummaryTab.tsx
+++ b/apps/web/src/components/pull-requests/PullRequestSummaryTab.tsx
@@ -99,7 +99,7 @@ export function PullRequestSummaryTab({
} label="Reviewers">
{detail.reviewers.length === 0 ? (
- No reviewers
+ No reviewers
) : (
detail.reviewers.map((reviewer) => (
@@ -224,7 +224,9 @@ function PullRequestMetaRow({
{icon}
{label}
- {children}
+ {/* The row wraps rather than overflows: in a narrow panel the Request
+ button sits under the reviewers instead of past the edge. */}
+ {children}