@@ -22,6 +22,7 @@ import {
2222 WarningIcon ,
2323 XIcon ,
2424} from "@phosphor-icons/react" ;
25+ import { Kbd } from "@posthog/quill" ;
2526import {
2627 Box ,
2728 Flex ,
@@ -46,7 +47,14 @@ import type {
4647} from "@shared/types" ;
4748import { useNavigationStore } from "@stores/navigationStore" ;
4849import { useQuery } from "@tanstack/react-query" ;
49- import { type ReactNode , useCallback , useMemo , useState } from "react" ;
50+ import { isMac } from "@utils/platform" ;
51+ import {
52+ type ReactNode ,
53+ useCallback ,
54+ useEffect ,
55+ useMemo ,
56+ useState ,
57+ } from "react" ;
5058import { toast } from "sonner" ;
5159import { ReportImplementationPrLink } from "../utils/ReportImplementationPrLink" ;
5260import { SignalReportActionabilityBadge } from "../utils/SignalReportActionabilityBadge" ;
@@ -280,6 +288,31 @@ export function ReportDetailPane({
280288 report ,
281289 ] ) ;
282290
291+ useEffect ( ( ) => {
292+ if ( ! canCreateImplementationPr ) return ;
293+ const handler = ( e : KeyboardEvent ) => {
294+ if ( e . key !== "Enter" ) return ;
295+ if ( ! ( e . metaKey || e . ctrlKey ) ) return ;
296+ if (
297+ document . querySelector (
298+ "[data-radix-popper-content-wrapper], [role='dialog'][data-state='open']" ,
299+ )
300+ ) {
301+ return ;
302+ }
303+ const target = e . target as HTMLElement | null ;
304+ if (
305+ target ?. closest ( "input, select, textarea, [contenteditable='true']" )
306+ ) {
307+ return ;
308+ }
309+ e . preventDefault ( ) ;
310+ handleCreateImplementationTask ( ) ;
311+ } ;
312+ window . addEventListener ( "keydown" , handler ) ;
313+ return ( ) => window . removeEventListener ( "keydown" , handler ) ;
314+ } , [ canCreateImplementationPr , handleCreateImplementationTask ] ) ;
315+
283316 return (
284317 < >
285318 { /* ── Header bar ──────────────────────────────────────────── */ }
@@ -343,15 +376,23 @@ export function ReportDetailPane({
343376 size = "md"
344377 />
345378 ) : canCreateImplementationPr ? (
346- < Button
347- size = "1"
348- variant = "solid"
349- className = "gap-1 text-[12px]"
350- onClick = { handleCreateImplementationTask }
379+ < Tooltip
380+ content = {
381+ < Flex align = "center" gap = "1" >
382+ Create PR < Kbd > { isMac ? "⌘↵" : "Ctrl+↵" } </ Kbd >
383+ </ Flex >
384+ }
351385 >
352- < Plus size = { 12 } />
353- Create PR
354- </ Button >
386+ < Button
387+ size = "1"
388+ variant = "solid"
389+ className = "gap-1 text-[12px]"
390+ onClick = { handleCreateImplementationTask }
391+ >
392+ < Plus size = { 12 } />
393+ Create PR
394+ </ Button >
395+ </ Tooltip >
355396 ) : null }
356397 < button
357398 type = "button"
0 commit comments