From d8ce9a052c788da3d54d46564219de4751e44582 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Wed, 17 Jun 2026 01:01:35 +0200 Subject: [PATCH] feat(grid): stop bars at the last symbol and shade today's column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - bar line begins/ends at a glyph centre — no stub past the first/last symbol - glyph halos so the bar passes behind, not through, the symbols - today's week is a shaded column instead of a vertical rule - widen week columns so date labels stop colliding - drop "slip" wording from the legend --- src/components/MacroplanGrid.vue | 61 ++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/src/components/MacroplanGrid.vue b/src/components/MacroplanGrid.vue index e65959e..a93656e 100644 --- a/src/components/MacroplanGrid.vue +++ b/src/components/MacroplanGrid.vue @@ -78,7 +78,9 @@ function markerAt(row: FeatureRow, w: WeekId): MarkerKind | null { } interface Cell { - inBar: boolean + // how far the bar line runs within this cell: none, half-from-center-right, + // half-from-left-to-center, or full width + line: 'none' | 'right' | 'left' | 'full' isStart: boolean glyph: string glyphCls: string @@ -90,8 +92,16 @@ const matrix = computed(() => weeks.value.map((w) => { const m = markerAt(row, w) const inBar = w >= row.startWeek && w <= row.barEndWeek + let line: Cell['line'] = 'none' + if (inBar) { + const isStart = w === row.startWeek + const isEnd = w === row.barEndWeek + // line runs center→edge so it begins and ends at a glyph centre, + // never stubbing past the first/last symbol + line = isStart && isEnd ? 'none' : isStart ? 'right' : isEnd ? 'left' : 'full' + } return { - inBar, + line, isStart: inBar && w === row.startWeek, glyph: m ? GLYPH[m] : '', glyphCls: m ? MARKER_CLASS[m] : '', @@ -157,7 +167,7 @@ function milestoneTitle(ms: Plan['milestones']): string { class="cell" :class="colClass(ci)" > - + {{ cell.glyph }} @@ -178,18 +188,18 @@ function milestoneTitle(ms: Plan['milestones']): string {
original estimate - re-estimate (slip) + re-estimate on time late ┣━ feature bar milestone - vertical rule = now + today