@@ -56,6 +56,11 @@ export class DetailsPanel extends LitElement {
5656 display: flex;
5757 flex-direction: column;
5858 gap: 3.2rem;
59+ --commit-message-sticky-top: 0;
60+ }
61+
62+ .change-details gl-commit-message {
63+ --sticky-top: var(--commit-message-sticky-top);
5964 }
6065
6166 .change-details {
@@ -257,10 +262,14 @@ export class DetailsPanel extends LitElement {
257262 private draggedHunkIds : string [ ] = [ ] ;
258263 private autoScrollInterval ?: number ;
259264 private dragOverCleanupTimeout ?: number ;
265+ private commitMessageResizeObserver ?: ResizeObserver ;
260266
261267 @query ( '.details-panel' )
262268 private detailsPanel ! : HTMLDivElement ;
263269
270+ @query ( '.changes-list' )
271+ private changesList ?: HTMLDivElement ;
272+
264273 override updated ( changedProperties : Map < string | number | symbol , unknown > ) {
265274 super . updated ( changedProperties ) ;
266275
@@ -274,6 +283,33 @@ export class DetailsPanel extends LitElement {
274283 this . initializeHunksSortable ( ) ;
275284 this . setupAutoScroll ( ) ;
276285 }
286+
287+ if ( changedProperties . has ( 'selectedCommits' ) ) {
288+ this . updateCommitMessageStickyOffset ( ) ;
289+ }
290+ }
291+
292+ private updateCommitMessageStickyOffset ( ) {
293+ if ( ! this . commitMessageResizeObserver ) {
294+ this . commitMessageResizeObserver = new ResizeObserver ( ( ) => {
295+ const commitMessage = this . shadowRoot ?. querySelector ( 'gl-commit-message' ) ;
296+ if ( commitMessage && this . changesList ) {
297+ const height = commitMessage . getBoundingClientRect ( ) . height ;
298+ this . changesList . style . setProperty ( '--file-header-sticky-top' , `${ height } px` ) ;
299+ }
300+ } ) ;
301+ }
302+
303+ this . commitMessageResizeObserver . disconnect ( ) ;
304+
305+ const commitMessage = this . shadowRoot ?. querySelector ( 'gl-commit-message' ) ;
306+ if ( commitMessage ) {
307+ this . commitMessageResizeObserver . observe ( commitMessage ) ;
308+ if ( this . changesList ) {
309+ const height = commitMessage . getBoundingClientRect ( ) . height ;
310+ this . changesList . style . setProperty ( '--file-header-sticky-top' , `${ height } px` ) ;
311+ }
312+ }
277313 }
278314
279315 override disconnectedCallback ( ) {
@@ -284,6 +320,10 @@ export class DetailsPanel extends LitElement {
284320 clearTimeout ( this . dragOverCleanupTimeout ) ;
285321 this . dragOverCleanupTimeout = undefined ;
286322 }
323+ if ( this . commitMessageResizeObserver ) {
324+ this . commitMessageResizeObserver . disconnect ( ) ;
325+ this . commitMessageResizeObserver = undefined ;
326+ }
287327 }
288328
289329 private destroyHunksSortables ( ) {
0 commit comments