From 2bc6c5ec1a1ac6ae94041c5631c72a14439b78a1 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Wed, 16 Sep 2026 23:42:36 -0400 Subject: [PATCH] Make the change log fit its dialog Adding the Value column pushed the table past max-w-4xl: roughly 624px of declared column widths inside an 896px dialog, leaving Slice and Note to fight over the rest. With auto table layout the cells won and the table grew wider than its container, so the dialog got a horizontal scrollbar along the bottom. table-fixed makes the declared widths hold and the free-text columns truncate instead of widening the table -- which is what the truncate classes on them already assumed. Dialog widened to max-w-6xl, gutters down from px-4 to px-3, and Note given an explicit share rather than whatever was left. max-w-xs on the slice and note cells was doing nothing useful under fixed layout and is now overflow-hidden, which is what makes truncate work in a table cell. Co-Authored-By: Claude Opus 5 (1M context) --- ui/src/views/Forecast.jsx | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/ui/src/views/Forecast.jsx b/ui/src/views/Forecast.jsx index 7358f8d..ae7b87f 100644 --- a/ui/src/views/Forecast.jsx +++ b/ui/src/views/Forecast.jsx @@ -1394,7 +1394,7 @@ export default function Forecast({ sources = [], sourceId, versions = [], versio {/* History modal */} {showLog && (
setShowLog(false)}> -
e.stopPropagation()}> +
e.stopPropagation()}>
Change History @@ -1406,29 +1406,29 @@ export default function Forecast({ sources = [], sourceId, versions = [], versio ) : logEntries.length === 0 ? (
No log entries yet.
) : ( - +
- - - - - - - - + + + + + + + + {logEntries.map(entry => ( - - + - - - + -
TimeOpSliceTagNoteValueRowsTimeOpSliceTagNoteValueRows
{fmtStamp(entry.stamp)} + {fmtStamp(entry.stamp)} {entry.operation} + 0 ? 'text-green-700' : entry.value_total < 0 ? 'text-red-600' : 'text-gray-400'}`}> {entry.value_total == null ? '—' : entry.value_total.toLocaleString(undefined, { maximumFractionDigits: 0 })} {entry.row_count ?? '—'} + {entry.row_count ?? '—'}
+
@@ -1616,7 +1616,7 @@ function LogCell({ entry, field, placeholder, editing, setEditing, onSave, listI if (active) { return ( -
+
setEditing(c => ({ ...c, text: e.target.value }))} @@ -1635,7 +1635,7 @@ function LogCell({ entry, field, placeholder, editing, setEditing, onSave, listI } return ( -
+ setEditing({ id: entry.id, field, text: value })} className="cursor-text hover:bg-blue-50 rounded px-1 -mx-1 block truncate" title={value || `Click to ${placeholder}`}>