@@ -7,6 +7,7 @@ import { Loader2 } from "lucide-react";
77import { useCallback , useEffect , useRef , useState } from "react" ;
88import { SymbolDefinition , useHoveredOverSymbolInfo } from "./useHoveredOverSymbolInfo" ;
99import { SymbolDefinitionPreview } from "./symbolDefinitionPreview" ;
10+ import { createPortal } from "react-dom" ;
1011
1112interface SymbolHoverPopupProps {
1213 editorRef : ReactCodeMirrorRef ;
@@ -55,9 +56,11 @@ export const SymbolHoverPopup: React.FC<SymbolHoverPopupProps> = ({
5556 crossAxis : false ,
5657 fallbackPlacements : [ 'bottom' ] ,
5758 boundary : editorRef . view ?. dom ,
59+ padding : 20 ,
5860 } ) ,
5961 shift ( {
6062 padding : 5 ,
63+ boundary : editorRef . view ?. dom ,
6164 } )
6265 ]
6366 } ) . then ( ( { x, y } ) => {
@@ -92,47 +95,47 @@ export const SymbolHoverPopup: React.FC<SymbolHoverPopupProps> = ({
9295 } , [ symbolInfo , onGotoDefinition ] ) ;
9396
9497 return symbolInfo ? (
95- < div
96- ref = { ref }
97- className = "absolute z-10 flex flex-col gap-2 bg-background border border-gray-300 dark:border-gray-700 rounded-md shadow-lg p-2 max-w-3xl"
98- onMouseOver = { ( ) => setIsSticky ( true ) }
99- onMouseOut = { ( ) => setIsSticky ( false ) }
100- >
101- { symbolInfo . isSymbolDefinitionsLoading ? (
102- < div className = "flex flex-row items-center gap-2 text-sm" >
103- < Loader2 className = "w-4 h-4 animate-spin" />
104- Loading...
98+ < div
99+ ref = { ref }
100+ className = "absolute z-10 flex flex-col gap-2 bg-background border border-gray-300 dark:border-gray-700 rounded-md shadow-lg p-2 max-w-3xl"
101+ onMouseOver = { ( ) => setIsSticky ( true ) }
102+ onMouseOut = { ( ) => setIsSticky ( false ) }
103+ >
104+ { symbolInfo . isSymbolDefinitionsLoading ? (
105+ < div className = "flex flex-row items-center gap-2 text-sm" >
106+ < Loader2 className = "w-4 h-4 animate-spin" />
107+ Loading...
108+ </ div >
109+ ) : symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 0 ? (
110+ < SymbolDefinitionPreview
111+ symbolDefinition = { symbolInfo . symbolDefinitions [ 0 ] }
112+ />
113+ ) : (
114+ < p className = "text-sm font-medium text-muted-foreground" > No hover info found</ p >
115+ ) }
116+ < Separator />
117+ < div className = "flex flex-row gap-2 mt-2" >
118+ < LoadingButton
119+ loading = { symbolInfo . isSymbolDefinitionsLoading }
120+ disabled = { ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 }
121+ variant = "outline"
122+ size = "sm"
123+ onClick = { onGotoDefinition }
124+ >
125+ {
126+ ! symbolInfo . isSymbolDefinitionsLoading && ( ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 ) ?
127+ "No definition found" :
128+ `Go to ${ symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 1 ? "definitions" : "definition" } `
129+ }
130+ </ LoadingButton >
131+ < Button
132+ variant = "outline"
133+ size = "sm"
134+ onClick = { ( ) => onFindReferences ( symbolInfo . symbolName ) }
135+ >
136+ Find references
137+ </ Button >
105138 </ div >
106- ) : symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 0 ? (
107- < SymbolDefinitionPreview
108- symbolDefinition = { symbolInfo . symbolDefinitions [ 0 ] }
109- />
110- ) : (
111- < p className = "text-sm font-medium text-muted-foreground" > No hover info found</ p >
112- ) }
113- < Separator />
114- < div className = "flex flex-row gap-2 mt-2" >
115- < LoadingButton
116- loading = { symbolInfo . isSymbolDefinitionsLoading }
117- disabled = { ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 }
118- variant = "outline"
119- size = "sm"
120- onClick = { onGotoDefinition }
121- >
122- {
123- ! symbolInfo . isSymbolDefinitionsLoading && ( ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 ) ?
124- "No definition found" :
125- `Go to ${ symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 1 ? "definitions" : "definition" } `
126- }
127- </ LoadingButton >
128- < Button
129- variant = "outline"
130- size = "sm"
131- onClick = { ( ) => onFindReferences ( symbolInfo . symbolName ) }
132- >
133- Find references
134- </ Button >
135- </ div >
136139 </ div >
137140 ) : null ;
138141} ;
0 commit comments