enhancement
major
minor
major
minor
minor
#29553
React view <table>: <column> has no width, every column defaults to 150 px, so a table with more than six columns overflows a 940 px pane
Affects 8.0.0-SNAPSHOT (2026-09-11), tl-layout-view / tl-table.
The problem
TableElement.ColumnConfig declares attribute, filter, readonly and sort — nothing about the width. Every column of a <table> renders 150 px wide by default; the width can only be changed by the user through personalization (drag the header), and that is per user and per table id.
A table with seven columns (date, vendor, amount, category, status, submitted-at, …) in the left 70 % pane of a <split-panel> at 1600×900 is 1082 px wide in a 937 px container, so the last column is clipped and the table needs horizontal scrolling on a screen that has room for it. A short column (a date, an amount, a three-letter currency code) takes as much room as a long one (a vendor name, a description).
Lösung
- <column width="…"> on the <table> and the <composition-table> of the React view layer: an integer pixel value that becomes the column's default width (Column#defaultWidth()) and thus the width a user sees until they resize the column themselves; 0 (the default) keeps the type-derived width. The value travels with the ColumnSetup and is applied uniformly after the column binding built the column (ColumnSetup#buildColumn(), wrapping through the general DelegatingColumn#withDefaultWidth decorator in com.top_logic.table.impl), so custom filter bindings need no change.
- Type-derived default widths where no width is configured: the built-in column provider (ColumnProviderService) gives every column the width configured for the kind of its attribute. The widths are configuration properties of the service and can be retuned per application:
<config service-class="com.top_logic.layout.view.table.ColumnProviderService">
<instance
boolean-width="80"
number-width="100"
date-width="110"
time-width="90"
date-time-width="160"
enumeration-width="120"
string-width="150"
label-width="150"
/>
</config>
label-width applies to every column shown by its display label: references, multi-valued attributes, application-defined datatypes, unresolved attributes. A column binding that builds its own column (e.g. ScriptedFilter) asks ColumnProviderService#defaultWidth(part) for the same width.
Widths are pixels only; the last column keeps growing into the leftover space of the table as before. Flex weights and the TLColumnInfo model annotation are not evaluated by the view layer.