@@ -2481,7 +2481,11 @@ func (m *UI) generateLayout(w, h int) uiLayout {
24812481 }
24822482
24832483 // Add app margins
2484− appRect, helpRect := layout.SplitVertical(area, layout.Fixed(area.Dy()-helpHeight))
2484+ var appRect, helpRect image.Rectangle
2485+ layout.Vertical(
2486+ layout.Len(area.Dy()-helpHeight),
2487+ layout.Fill(1),
2488+ ).Split(area).Assign(&appRect, &helpRect)
24852489 appRect.Min.Y += 1
24862490 appRect.Max.Y -= 1
24872491 helpRect.Min.Y -= 1
@@ -2510,7 +2514,11 @@ func (m *UI) generateLayout(w, h int) uiLayout {
25102514 // ------
25112515 // help
25122516
2513− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(landingHeaderHeight))
2517+ var headerRect, mainRect image.Rectangle
2518+ layout.Vertical(
2519+ layout.Len(landingHeaderHeight),
2520+ layout.Fill(1),
2521+ ).Split(appRect).Assign(&headerRect, &mainRect)
25142522 uiLayout.header = headerRect
25152523 uiLayout.main = mainRect
25162524
@@ -2524,8 +2532,16 @@ func (m *UI) generateLayout(w, h int) uiLayout {
25242532 // editor
25252533 // ------
25262534 // help
2527− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(landingHeaderHeight))
2528− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2535+ var headerRect, mainRect image.Rectangle
2536+ layout.Vertical(
2537+ layout.Len(landingHeaderHeight),
2538+ layout.Fill(1),
2539+ ).Split(appRect).Assign(&headerRect, &mainRect)
2540+ var editorRect image.Rectangle
2541+ layout.Vertical(
2542+ layout.Len(mainRect.Dy()-editorHeight),
2543+ layout.Fill(1),
2544+ ).Split(mainRect).Assign(&mainRect, &editorRect)
25292545 // Remove extra padding from editor (but keep it for header and main)
25302546 editorRect.Min.X -= 1
25312547 editorRect.Max.X += 1
@@ -2545,20 +2561,36 @@ func (m *UI) generateLayout(w, h int) uiLayout {
25452561 // ------
25462562 // help
25472563 const compactHeaderHeight = 1
2548− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(compactHeaderHeight))
2549− detailsHeight := min(sessionDetailsMaxHeight, area.Dy()-1) // One row for the header
2550− sessionDetailsArea, _ := layout.SplitVertical(appRect, layout.Fixed(detailsHeight))
2564+ var headerRect, mainRect image.Rectangle
2565+ layout.Vertical(
2566+ layout.Len(compactHeaderHeight),
2567+ layout.Fill(1),
2568+ ).Split(appRect).Assign(&headerRect, &mainRect)
2569+ detailsHeight := min(sessionDetailsMaxHeight, area.Dy()-1) // One row for the header
2570+ var sessionDetailsArea image.Rectangle
2571+ layout.Vertical(
2572+ layout.Len(detailsHeight),
2573+ layout.Fill(1),
2574+ ).Split(appRect).Assign(&sessionDetailsArea, new(image.Rectangle))
25512575 uiLayout.sessionDetails = sessionDetailsArea
25522576 uiLayout.sessionDetails.Min.Y += compactHeaderHeight // adjust for header
25532577 // Add one line gap between header and main content
25542578 mainRect.Min.Y += 1
2555− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2579+ var editorRect image.Rectangle
2580+ layout.Vertical(
2581+ layout.Len(mainRect.Dy()-editorHeight),
2582+ layout.Fill(1),
2583+ ).Split(mainRect).Assign(&mainRect, &editorRect)
25562584 mainRect.Max.X -= 1 // Add padding right
25572585 uiLayout.header = headerRect
25582586 pillsHeight := m.pillsAreaHeight()
25592587 if pillsHeight > 0 {
25602588 pillsHeight = min(pillsHeight, mainRect.Dy())
2561− chatRect, pillsRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-pillsHeight))
2589+ var chatRect, pillsRect image.Rectangle
2590+ layout.Vertical(
2591+ layout.Len(mainRect.Dy()-pillsHeight),
2592+ layout.Fill(1),
2593+ ).Split(mainRect).Assign(&chatRect, &pillsRect)
25622594 uiLayout.main = chatRect
25632595 uiLayout.pills = pillsRect
25642596 } else {
@@ -2577,16 +2609,28 @@ func (m *UI) generateLayout(w, h int) uiLayout {
25772609 // ----------
25782610 // help
25792611
2580− mainRect, sideRect := layout.SplitHorizontal(appRect, layout.Fixed(appRect.Dx()-sidebarWidth))
2612+ var mainRect, sideRect image.Rectangle
2613+ layout.Horizontal(
2614+ layout.Len(appRect.Dx()-sidebarWidth),
2615+ layout.Fill(1),
2616+ ).Split(appRect).Assign(&mainRect, &sideRect)
25812617 // Add padding left
25822618 sideRect.Min.X += 1
2583− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2619+ var editorRect image.Rectangle
2620+ layout.Vertical(
2621+ layout.Len(mainRect.Dy()-editorHeight),
2622+ layout.Fill(1),
2623+ ).Split(mainRect).Assign(&mainRect, &editorRect)
25842624 mainRect.Max.X -= 1 // Add padding right
25852625 uiLayout.sidebar = sideRect
25862626 pillsHeight := m.pillsAreaHeight()
25872627 if pillsHeight > 0 {
25882628 pillsHeight = min(pillsHeight, mainRect.Dy())
2589− chatRect, pillsRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-pillsHeight))
2629+ var chatRect, pillsRect image.Rectangle
2630+ layout.Vertical(
2631+ layout.Len(mainRect.Dy()-pillsHeight),
2632+ layout.Fill(1),
2633+ ).Split(mainRect).Assign(&chatRect, &pillsRect)
25902634 uiLayout.main = chatRect
25912635 uiLayout.pills = pillsRect
25922636 } else {