1
- import { pointer , select } from "d3" ;
1
+ import { pointer } from "d3" ;
2
+ import { create } from "../context.js" ;
2
3
import { formatDefault } from "../format.js" ;
3
4
import { Mark } from "../mark.js" ;
4
5
import { keyword , maybeFrameAnchor , maybeKeyword , maybeTuple , number , string } from "../options.js" ;
@@ -218,16 +219,7 @@ export class Tooltip extends Mark {
218
219
}
219
220
}
220
221
221
- // We listen to the svg element; listening to the window instead would let
222
- // us receive pointer events from farther away, but would also make it hard
223
- // to know when to remove the listeners. (Using a mutation observer to watch
224
- // the entire document is likely too expensive.)
225
- svg . addEventListener ( "pointermove" , pointermove ) ;
226
- svg . addEventListener ( "pointerdown" , pointerdown ) ;
227
- svg . addEventListener ( "pointerleave" , pointerleave ) ;
228
-
229
- const dot = select ( svg )
230
- . append ( "g" )
222
+ const dot = create ( "svg:g" , context )
231
223
. attr ( "aria-label" , "tooltip" )
232
224
. attr ( "pointer-events" , "none" ) // initially not sticky
233
225
. attr ( "display" , "none" ) ;
@@ -245,6 +237,17 @@ export class Tooltip extends Mark {
245
237
. call ( applyIndirectTextStyles , this )
246
238
. on ( "pointerdown pointermove" , stopPropagation ) ;
247
239
240
+ // We listen to the svg element; listening to the window instead would let
241
+ // us receive pointer events from farther away, but would also make it hard
242
+ // to know when to remove the listeners. (Using a mutation observer to watch
243
+ // the entire document is likely too expensive.)
244
+ svg . addEventListener ( "pointermove" , pointermove ) ;
245
+ svg . addEventListener ( "pointerdown" , pointerdown ) ;
246
+ svg . addEventListener ( "pointerleave" , pointerleave ) ;
247
+
248
+ // The tooltip is added asynchronously to draw on top of all other marks.
249
+ Promise . resolve ( ) . then ( ( ) => svg . append ( dot . node ( ) ) ) ;
250
+
248
251
return null ;
249
252
}
250
253
}
0 commit comments