. truncate from Tailwind expands to overflow:hidden; text-overflow:ellipsis; white-space:nowrap;. For columns whose render returns a flex/inline composite (e.g. a Status badge + icon, or a Visibility chip with two states), white-space:nowrap and overflow:hidden will clip badges and produce an unintended title="" (see finding #1) on visually rich cells. The title attribute on a
is also weaker a11y-wise than CSS text-overflow with a tooltip on the cell text, and risks double tooltips when an inner Oxygen component already provides one.
- Suggested fix: only wrap when col.width is defined (the only case fixed-layout truncation is meaningful), or expose an opt-in truncate?: boolean flag on ColumnConfig. This avoids forcing nowrap on columns that contain composite UI (Status/Visibility) and pairs nicely with the new width field.
---
Notes / Lower-confidence observations (below 80, not blocking)
- The width: '25%' lives on the public ColumnConfig type but no column factory in this PR sets it; this is intentional per the PR description (the consumer monolith PR provides values). Worth confirming the consumer PR before merge so this addition isn't a no-op in production.
- NhrDocumentListTable.test.tsx:65 asserts document.querySelector('.dl-table-layout-fixed'). The CSS-selector policy in .claude/rules/frontend/react/test/testing-patterns.md flags this as needing a justification, and the comment "Testing that Oxygen's fixedLayout prop applies the CSS class" is present — fine, just calling it out as the same pattern is used in the pre-existing dl-table-body-skeleton-loader assertion.
- TypeScript style of the helper file (function declaration vs. arrow) is consistent with surrounding code; replace_all is fine.
---
Conclusion
Two important issues should be addressed before merge — both center on the getTextContent + unconditional truncate wrapper combination producing empty/missing tooltips and clipping rich content for non-string columns (Status, Visibility, action chips). The simplest safe path is to make truncation opt-in via either col.width presence or an explicit flag, and to provide a tooltipAccessor escape hatch on ColumnConfig. The rest of the change (Oxygen fixedLayout, initialWidth, width in ColumnConfig) is well-scoped, test-covered, and consistent with the package's UpFront/Oxygen rules. Lint, type-check, and 43 tests all pass.