diff --git a/apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx b/apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx
index 0080f4348d..d85f973353 100644
--- a/apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx
+++ b/apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx
@@ -36,7 +36,6 @@ import {
LinkIcon,
MoreHorizontalIcon,
PanelRightIcon,
- PencilIcon,
PlayIcon,
RotateCcwIcon,
TriangleAlertIcon,
@@ -112,6 +111,7 @@ import {
import { EnvironmentMachineIcon } from "../EnvironmentMachineIcon";
import { Badge } from "../ui/badge";
import { Button } from "../ui/button";
+import { PullRequestEditButton } from "./PullRequestEditButton";
import { Input } from "../ui/input";
import { Toggle, ToggleGroup } from "../ui/toggle-group";
import {
@@ -2417,15 +2417,10 @@ export function PullRequestDetailPanel({
{detail.title}
{canEditPullRequestChangeRequest(detail) ? (
-
+ />
) : null}
) : (
diff --git a/apps/web/src/components/pullRequest/PullRequestEditButton.tsx b/apps/web/src/components/pullRequest/PullRequestEditButton.tsx
new file mode 100644
index 0000000000..b04ec17b87
--- /dev/null
+++ b/apps/web/src/components/pullRequest/PullRequestEditButton.tsx
@@ -0,0 +1,27 @@
+import { PencilIcon } from "lucide-react";
+import type { ComponentProps } from "react";
+
+import { cn } from "../../lib/utils";
+import { Button } from "../ui/button";
+
+/** Edit affordances stay visible on touch devices and reveal on hover or focus. */
+export function PullRequestEditButton({
+ className,
+ ...props
+}: Omit, "children" | "render" | "size" | "variant"> & {
+ "aria-label": string;
+}) {
+ return (
+
+ );
+}
diff --git a/apps/web/src/components/pullRequest/PullRequestReviewAnnotation.tsx b/apps/web/src/components/pullRequest/PullRequestReviewAnnotation.tsx
index f1e8955c3d..d49cb52cc3 100644
--- a/apps/web/src/components/pullRequest/PullRequestReviewAnnotation.tsx
+++ b/apps/web/src/components/pullRequest/PullRequestReviewAnnotation.tsx
@@ -14,7 +14,6 @@ import {
CircleIcon,
HammerIcon,
MessageSquareIcon,
- PencilIcon,
Trash2Icon,
} from "lucide-react";
import { useRef, useState } from "react";
@@ -23,6 +22,7 @@ import { formatRelativeTimeLabel } from "~/timestampFormat";
import { cn } from "~/lib/utils";
import { Button } from "../ui/button";
+import { PullRequestEditButton } from "./PullRequestEditButton";
import { Textarea } from "../ui/textarea";
import { isCommentSubmitShortcut } from "../diffs/commentSubmitShortcut";
import {
@@ -297,15 +297,10 @@ export function ReviewThreadCard({
environmentId={environmentId}
/>
{canEditComment(comment) ? (
-
+ />
) : null}
)}
diff --git a/apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx b/apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx
index be1dffb295..0937c1ee3e 100644
--- a/apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx
+++ b/apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx
@@ -12,7 +12,6 @@ import {
ChevronDownIcon,
ChevronRightIcon,
HammerIcon,
- PencilIcon,
TagIcon,
UsersIcon,
} from "lucide-react";
@@ -25,6 +24,7 @@ import { useOpenLink } from "~/browser/useOpenLink";
import { formatRelativeTimeLabel } from "~/timestampFormat";
import { Button } from "../ui/button";
+import { PullRequestEditButton } from "./PullRequestEditButton";
import { Collapsible, CollapsiblePanel, CollapsibleTrigger } from "../ui/collapsible";
import { toastManager } from "../ui/toast";
import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip";
@@ -194,15 +194,7 @@ function CommentBody({
threadRef={editing.threadRef}
/>
{editing.canEdit(comment) ? (
-
+ editing.onEdit(comment)} />
) : null}
);
@@ -871,15 +863,10 @@ export function PullRequestSummaryTab({
threadRef={threadRef}
/>
{canEditPullRequestChangeRequest(detail) ? (
-
+ />
) : null}
)}
diff --git a/apps/web/src/components/pullRequest/PullRequestTimelineTab.tsx b/apps/web/src/components/pullRequest/PullRequestTimelineTab.tsx
index b114250549..5d0ba801ed 100644
--- a/apps/web/src/components/pullRequest/PullRequestTimelineTab.tsx
+++ b/apps/web/src/components/pullRequest/PullRequestTimelineTab.tsx
@@ -12,7 +12,6 @@ import {
FileCode2Icon,
GitCommitHorizontalIcon,
MessageSquareIcon,
- PencilIcon,
} from "lucide-react";
import { useState, type ReactNode } from "react";
@@ -23,6 +22,7 @@ import { useAtomCommand } from "~/state/use-atom-command";
import { formatRelativeTimeLabel } from "~/timestampFormat";
import { Button } from "../ui/button";
+import { PullRequestEditButton } from "./PullRequestEditButton";
import { Collapsible, CollapsiblePanel, CollapsibleTrigger } from "../ui/collapsible";
import { toastManager } from "../ui/toast";
import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip";
@@ -235,15 +235,11 @@ function ConversationCard({
{editable !== null && !editing ? (
-
+ />
) : null}
{reactions.canReact || event.reactions.length > 0 ? (