on main help sign in
fix(tui): make permissions dialog height responsive to resize (#877)
commit7b4cb401563a102eb72b60cac5bd184849ff90a5 authorJames Trew <66286082+jamestrew@users.noreply.github.com> dateWed 29 Oct 2025, 16:31 (1 year ago) parentcf6beff
23 files changed+23−119
internal/tui/components/dialogs/permissions/permissions.go+6−7 internal/tui/exp/diffview/diffview.go−29 internal/tui/exp/diffview/diffview_test.go−6 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden+1−2 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden+1−3 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden+1−4 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden+1−5 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden+1−6 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden+1−2 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden+1−3 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden+1−4 internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden+1−5 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden+1−2 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf12.golden+1−3 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden+1−4 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden+1−5 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf15.golden−5 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf16.golden−5 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden+1−2 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden+1−3 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden+1−4 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden+1−5 internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf16.golden−5
internal/tui/components/dialogs/permissions/permissions.go+6−7
@@ -698,15 +698,14 @@ func (p *permissionDialogCmp) render() string {
698698
699699 p.contentViewPort.SetWidth(p.width - 4)
700700
701− // Get cached or generate content
702− contentFinal := p.getOrGenerateContent()
703−
704701 // Always set viewport content (the caching is handled in getOrGenerateContent)
705702 const minContentHeight = 9
706− contentHeight := min(
707− max(minContentHeight, p.height-minContentHeight),
708− lipgloss.Height(contentFinal),
709− )
703+
704+ availableDialogHeight := max(minContentHeight, p.height-minContentHeight)
705+ p.contentViewPort.SetHeight(availableDialogHeight)
706+ contentFinal := p.getOrGenerateContent()
707+ contentHeight := min(availableDialogHeight, lipgloss.Height(contentFinal))
708+
710709 p.contentViewPort.SetHeight(contentHeight)
711710 p.contentViewPort.SetContent(contentFinal)
712711
internal/tui/exp/diffview/diffview.go−29
@@ -500,19 +500,6 @@ outer:
500500 }
501501 }
502502
503− for printedLines < dv.height {
504− if shouldWrite() {
505− ls := dv.style.MissingLine
506− if dv.lineNumbers {
507− b.WriteString(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
508− b.WriteString(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
509− }
510− b.WriteString(ls.Code.Width(dv.fullCodeWidth).Render(" "))
511− b.WriteRune('\n')
512− }
513− printedLines++
514− }
515−
516503 return b.String()
517504}
518505
@@ -670,22 +657,6 @@ outer:
670657 }
671658 }
672659
673− for printedLines < dv.height {
674− if shouldWrite() {
675− ls := dv.style.MissingLine
676− if dv.lineNumbers {
677− b.WriteString(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
678− }
679− b.WriteString(ls.Code.Width(dv.fullCodeWidth).Render(" "))
680− if dv.lineNumbers {
681− b.WriteString(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
682− }
683− b.WriteString(ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
684− b.WriteRune('\n')
685− }
686− printedLines++
687− }
688−
689660 return b.String()
690661}
691662
internal/tui/exp/diffview/diffview_test.go−6
@@ -249,8 +249,6 @@ func TestDiffViewHeight(t *testing.T) {
249249
250250 output := dv.String()
251251 golden.RequireEqual(t, []byte(output))
252−
253− assertHeight(t, height, output)
254252 })
255253 }
256254 })
@@ -301,8 +299,6 @@ func TestDiffViewYOffset(t *testing.T) {
301299
302300 output := dv.String()
303301 golden.RequireEqual(t, []byte(output))
304−
305− assertHeight(t, 5, output)
306302 })
307303 }
308304 })
@@ -328,8 +324,6 @@ func TestDiffViewYOffsetInfinite(t *testing.T) {
328324
329325 output := dv.String()
330326 golden.RequireEqual(t, []byte(output))
331−
332− assertHeight(t, 5, output)
333327 })
334328 }
335329 })
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden+1−2
@@ -12,5 +12,4 @@
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
1414      14 +  return content 
15− 13  }  15  } 
16−          
15+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden+1−3
@@ -12,6 +12,4 @@
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
1414      14 +  return content 
15− 13  }  15  } 
16−          
17−          
15+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden+1−4
@@ -12,7 +12,4 @@
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
1414      14 +  return content 
15− 13  }  15  } 
16−          
17−          
18−          
15+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden+1−5
@@ -12,8 +12,4 @@
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
1414      14 +  return content 
15− 13  }  15  } 
16−          
17−          
18−          
19−          
15+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden+1−6
@@ -12,9 +12,4 @@
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
1414      14 +  return content 
15− 13  }  15  } 
16−          
17−          
18−          
19−          
20−          
15+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden+1−2
@@ -13,5 +13,4 @@
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
1515    14 +  return content 
16− 13  15  } 
17−        
16+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden+1−3
@@ -13,6 +13,4 @@
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
1515    14 +  return content 
16− 13  15  } 
17−        
18−        
16+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden+1−4
@@ -13,7 +13,4 @@
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
1515    14 +  return content 
16− 13  15  } 
17−        
18−        
19−        
16+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden+1−5
@@ -13,8 +13,4 @@
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
1515    14 +  return content 
16− 13  15  } 
17−        
18−        
19−        
20−        
16+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden+1−2
@@ -1,5 +1,4 @@
11 11  func getContent() string {  12  func getContent() string { 
22 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
33      14 +  return content 
4− 13  }  15  } 
5−          
4+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf12.golden+1−3
@@ -1,5 +1,3 @@
11 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
22      14 +  return content 
3− 13  }  15  } 
4−          
5−          
3+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden+1−4
@@ -1,5 +1,2 @@
11      14 +  return content 
2− 13  }  15  } 
3−          
4−          
5−          
2+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden+1−5
@@ -1,5 +1 @@
1− 13  }  15  } 
2−          
3−          
4−          
5−          
1+ 13  }  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf15.golden−5
@@ -1,5 +0,0 @@
1−          
2−          
3−          
4−          
5−          
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf16.golden−5
@@ -1,5 +0,0 @@
1−          
2−          
3−          
4−          
5−          
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden+1−2
@@ -1,5 +1,4 @@
11 12    -  return "Hello, world!" 
22    13 +  content := strings.ToUpper("Hello, World!") 
33    14 +  return content 
4− 13  15  } 
5−        
4+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden+1−3
@@ -1,5 +1,3 @@
11    13 +  content := strings.ToUpper("Hello, World!") 
22    14 +  return content 
3− 13  15  } 
4−        
5−        
3+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden+1−4
@@ -1,5 +1,2 @@
11    14 +  return content 
2− 13  15  } 
3−        
4−        
5−        
2+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden+1−5
@@ -1,5 +1 @@
1− 13  15  } 
2−        
3−        
4−        
5−        
1+ 13  15  } 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf16.golden−5
@@ -1,5 +0,0 @@
1−        
2−        
3−        
4−        
5−