From 3abeda9a3298e0970a28dbac5b30e9d9dcccac67 Mon Sep 17 00:00:00 2001 From: Thomas Jung Date: Sat, 24 Oct 2026 15:53:06 +0200 Subject: [PATCH 1/4] fix(app-space): widen multi-lane fork timeline to use full horizontal space Fork tracks with 3-4 lanes were squished into the single-column 740px timeline cap, wrapping lane-card titles to one word per line while the right two-thirds of the viewport sat empty. Scale the timeline max-width with the widest fork's lane count (~280px/lane, clamped by the 1200px .content-area). Linear/cluster tracks keep the readable 740px cap. A 4-lane fork now spans 1120px (268px/lane vs ~160px before). --- hugo-apps/src/app-space/AppSpace.vue | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/hugo-apps/src/app-space/AppSpace.vue b/hugo-apps/src/app-space/AppSpace.vue index 7371ca5ad..6fd026c98 100644 --- a/hugo-apps/src/app-space/AppSpace.vue +++ b/hugo-apps/src/app-space/AppSpace.vue @@ -283,6 +283,17 @@ function hasSegments(track: AppSpaceTrack): boolean { return Array.isArray(track.segments) && track.segments.length > 0 } +// Widest fork in the track (max lanes across all fork segments; 1 if none). +// Drives the timeline's max-width so multi-lane forks get the horizontal room +// they need instead of being squished into the single-column 740px cap — a +// 3-4 lane fork at 740px wraps titles to one word per line (#2887 follow-up). +function maxLaneCount(track: AppSpaceTrack): number { + return trackSegments(track).reduce( + (max, seg) => (seg.kind === 'fork' ? Math.max(max, seg.lanes.length) : max), + 1, + ) +} + // Flatten every item a segment contains (cluster/linear items, or all lane items // for a fork). Used for progress math and "all tutorials" totals. function segmentItems(seg: AppSpaceSegment): AppSpaceItem[] { @@ -670,7 +681,7 @@ const emptyStateMessage = computed(() => { Renders from selectedTrack.segments: linear nodes, side-by-side fork lanes with fork/join connectors, and any-order clusters. Falls back to the legacy flat timeline for payloads without segments. --> -
+