diff --git a/frontend/src/components/Playlists.tsx b/frontend/src/components/Playlists.tsx
index 2d6dee92..595def0a 100644
--- a/frontend/src/components/Playlists.tsx
+++ b/frontend/src/components/Playlists.tsx
@@ -706,7 +706,10 @@ export default function Playlists() {
>
{/* Not clipped, so the header's filter popovers can overflow the table box. */}
-
+ {/* table-fixed, not auto: every column but the title has a declared width, so the
+ title absorbs the rest and its `truncate` works. Auto layout sizes columns from
+ min-content, and a nowrap title cell's min-content is the entire title. */}
+
v.title ?? "",
filter: { kind: "text", get: (v) => v.title ?? "" },
@@ -60,7 +65,7 @@ export function playlistColumns({
),
@@ -68,17 +73,20 @@ export function playlistColumns({
{
key: "channel",
header: t("playlists.colChannel"),
+ width: "12rem",
+ nowrap: true,
sortable: true,
sortValue: (v) => v.channel_title ?? "",
filter: { kind: "text", get: (v) => v.channel_title ?? "" },
render: (v) => (
- {v.channel_title}
+ {v.channel_title}
),
},
{
key: "duration",
header: t("playlists.colDuration"),
align: "right",
+ width: "5rem",
nowrap: true,
sortable: true,
// Nulls (live/upcoming, or not yet enriched) sort last in BOTH directions in the old