diff --git a/frontend/src/components/Playlists.tsx b/frontend/src/components/Playlists.tsx index 8f25f8ab..fa03016d 100644 --- a/frontend/src/components/Playlists.tsx +++ b/frontend/src/components/Playlists.tsx @@ -634,7 +634,10 @@ export default function Playlists() { })), } : // Kept visible and disabled rather than dropped: an action that vanishes teaches - // nobody why. With one playlist there is nowhere to move to, and the title says so. + // nobody why. KNOWN GAP: the `title` that carries the why currently reaches nobody + // either — see ActionMenu's `title` prop, where the two failed attempts at fixing + // that are recorded. The row is honest about being off; it is not yet honest about + // the reason. { id: "move", label: t("playlists.moveTo"), @@ -656,8 +659,9 @@ export default function Playlists() { label, icon, separatorBefore: i === 0, - // Same gate as the drag handle, and it explains itself the same way instead of - // silently doing nothing. + // Same gate as the drag handle. NOTE the drag handle explains itself and this row + // does not: the handle is `aria-disabled` (focusable, tooltip-capable) while a menu + // row cannot be — see ActionMenu's `title` prop for why. disabled: !storedOrderEditable, title: storedOrderEditable ? undefined : dragHint, onSelect: () => moveInOrder(ctxRow, to), diff --git a/frontend/src/components/PlaylistsRail.tsx b/frontend/src/components/PlaylistsRail.tsx index 4446efe0..3442f3c8 100644 --- a/frontend/src/components/PlaylistsRail.tsx +++ b/frontend/src/components/PlaylistsRail.tsx @@ -163,38 +163,42 @@ export default function PlaylistsRail({ }, }); - // Which row to hand focus back to once the inline editor closes. Enter and Escape both unmount the - // focused and re-render the row as a