@@ -220,13 +220,20 @@ export class GlTimelineChart extends GlElement {
220220 }
221221
222222 private renderFooter ( ) {
223+ const sha = this . _shaHovered ?? this . _shaSelected ;
224+
223225 return html `< footer >
224226 < gl-chart-slider
225227 .data =${ this . _dataReversed }
226228 ?shift =${ this . _shiftKeyPressed }
227229 @gl-slider-change=${ this . onSliderChanged }
230+ @mouseover=${ this . onSliderMouseOver }
231+ @mouseout=${ this . onSliderMouseOut }
228232 > </ gl-chart-slider >
229- ${ renderCommitSha ( this . _shaHovered ?? this . _shaSelected , 16 ) } ${ this . renderActions ( ) }
233+ < span @mouseover =${ this . onFooterShaMouseOver } @mouseout =${ this . onFooterShaMouseOut }
234+ > ${ renderCommitSha ( sha , 16 ) } </ span
235+ >
236+ ${ this . renderActions ( ) }
230237 </ footer > ` ;
231238 }
232239
@@ -295,6 +302,16 @@ export class GlTimelineChart extends GlElement {
295302 this . _shiftKeyPressed = e . shiftKey ;
296303 } ;
297304
305+ private onFooterShaMouseOver ( ) {
306+ if ( ! this . _shaSelected ) return ;
307+
308+ this . showTooltip ( this . _data ?. find ( c => c . sha === this . _shaSelected ) ) ;
309+ }
310+
311+ private onFooterShaMouseOut ( ) {
312+ this . hideTooltip ( ) ;
313+ }
314+
298315 private readonly onResize = ( e : CustomEvent < { entries : ResizeObserverEntry [ ] } > ) => {
299316 if ( ! this . _chart ) return ;
300317
@@ -325,14 +342,25 @@ export class GlTimelineChart extends GlElement {
325342 private onSliderChanged ( e : CustomEvent < SliderChangeEventDetail > ) {
326343 this . revealDate ( e . detail . date , { focus : true , select : true } ) ;
327344
328- const sha = this . _commitsByTimestamp . get ( e . detail . date . getTime ( ) ) ?. sha ;
345+ const commit = this . _commitsByTimestamp . get ( e . detail . date . getTime ( ) ) ;
346+ const sha = commit ?. sha ;
329347 this . _shaHovered = undefined ;
330348 this . _shaSelected = sha ;
331349
350+ this . showTooltip ( commit ) ;
351+
332352 if ( sha == null ) return ;
333353 this . emit ( 'gl-commit-select' , { id : sha , shift : e . detail . shift } ) ;
334354 }
335355
356+ private onSliderMouseOver ( _e : MouseEvent ) {
357+ this . showTooltip ( this . slider ?. value ) ;
358+ }
359+
360+ private onSliderMouseOut ( _e : MouseEvent ) {
361+ this . hideTooltip ( ) ;
362+ }
363+
336364 private readonly onZoom = ( domain : [ Date , Date ] ) => {
337365 this . zoomedRange = domain [ 0 ] <= this . range [ 0 ] && domain [ 1 ] >= this . range [ 1 ] ? undefined : domain ;
338366 } ;
@@ -415,6 +443,16 @@ export class GlTimelineChart extends GlElement {
415443 }
416444 }
417445
446+ private showTooltip ( datum : TimelineDatum | undefined ) {
447+ if ( datum == null ) return ;
448+
449+ this . _chart ?. tooltip . show ( { x : new Date ( datum . date ) } ) ;
450+ }
451+
452+ private hideTooltip ( ) {
453+ this . _chart ?. tooltip . hide ( ) ;
454+ }
455+
418456 zoom ( factor : number ) : void {
419457 if ( factor === 0 ) {
420458 this . resetZoom ( ) ;
0 commit comments