From ae0ac58547d2bce8fea48290b6bf9a5ee9d69570 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 14 Feb 2026 01:59:42 +0100 Subject: [PATCH] Mobile responsiveness fixes for pipeline UI redesign - Detail page header: stack on mobile, icon-only Advanced button on small screens - InlineEditableText: show pencil icon on mobile (not hover-only) - EditableCard: show Edit button on mobile (not hover-only) - PipelineFlowchart: add right-edge fade gradient as scroll hint on mobile - Summary cards: always 3-col grid (compact on mobile) - Track switcher: add overflow-x-auto for horizontal scroll Co-Authored-By: Claude Opus 4.6 --- .../admin/rounds/pipeline/[id]/page.tsx | 225 +++++++++--------- .../admin/pipeline/pipeline-flowchart.tsx | 8 +- src/components/ui/editable-card.tsx | 2 +- src/components/ui/inline-editable-text.tsx | 2 +- 4 files changed, 124 insertions(+), 113 deletions(-) diff --git a/src/app/(admin)/admin/rounds/pipeline/[id]/page.tsx b/src/app/(admin)/admin/rounds/pipeline/[id]/page.tsx index 76c860b..eb885ea 100644 --- a/src/app/(admin)/admin/rounds/pipeline/[id]/page.tsx +++ b/src/app/(admin)/admin/rounds/pipeline/[id]/page.tsx @@ -199,127 +199,132 @@ export default function PipelineDetailPage() { return (
{/* Header */} -
-
- - - -
-
- updatePipeline({ name: newName })} - variant="h1" - placeholder="Untitled Pipeline" - disabled={isUpdating} - /> - - - - - - handleStatusChange('DRAFT')} - disabled={pipeline.status === 'DRAFT' || updateMutation.isPending} - > - Draft - - handleStatusChange('ACTIVE')} - disabled={pipeline.status === 'ACTIVE' || updateMutation.isPending} - > - Active - - handleStatusChange('CLOSED')} - disabled={pipeline.status === 'CLOSED' || updateMutation.isPending} - > - Closed - - - handleStatusChange('ARCHIVED')} - disabled={pipeline.status === 'ARCHIVED' || updateMutation.isPending} - > - Archived - - - -
-
- slug: - updatePipeline({ slug: newSlug })} - variant="mono" - placeholder="pipeline-slug" - disabled={isUpdating} - /> +
+
+
+ + + +
+
+ updatePipeline({ name: newName })} + variant="h1" + placeholder="Untitled Pipeline" + disabled={isUpdating} + /> + + + + + + handleStatusChange('DRAFT')} + disabled={pipeline.status === 'DRAFT' || updateMutation.isPending} + > + Draft + + handleStatusChange('ACTIVE')} + disabled={pipeline.status === 'ACTIVE' || updateMutation.isPending} + > + Active + + handleStatusChange('CLOSED')} + disabled={pipeline.status === 'CLOSED' || updateMutation.isPending} + > + Closed + + + handleStatusChange('ARCHIVED')} + disabled={pipeline.status === 'ARCHIVED' || updateMutation.isPending} + > + Archived + + + +
+
+ slug: + updatePipeline({ slug: newSlug })} + variant="mono" + placeholder="pipeline-slug" + disabled={isUpdating} + /> +
-
-
- - - - - - - - - {pipeline.status === 'DRAFT' && ( - publishMutation.mutate({ id: pipelineId })} - > - {publishMutation.isPending ? ( - - ) : ( - - )} - Publish - - )} - {pipeline.status === 'ACTIVE' && ( + + + + + + + + {pipeline.status === 'DRAFT' && ( + publishMutation.mutate({ id: pipelineId })} + > + {publishMutation.isPending ? ( + + ) : ( + + )} + Publish + + )} + {pipeline.status === 'ACTIVE' && ( + handleStatusChange('CLOSED')} + > + Close Pipeline + + )} + handleStatusChange('CLOSED')} + onClick={() => handleStatusChange('ARCHIVED')} > - Close Pipeline + + Archive - )} - - handleStatusChange('ARCHIVED')} - > - - Archive - - - + + +
{/* Pipeline Summary */} -
+
@@ -369,7 +374,7 @@ export default function PipelineDetailPage() { {/* Track Switcher (only if multiple tracks) */} {pipeline.tracks.length > 1 && ( -
+
{pipeline.tracks .sort((a, b) => a.sortOrder - b.sortOrder) .map((track) => ( diff --git a/src/components/admin/pipeline/pipeline-flowchart.tsx b/src/components/admin/pipeline/pipeline-flowchart.tsx index 4823b0a..e18b758 100644 --- a/src/components/admin/pipeline/pipeline-flowchart.tsx +++ b/src/components/admin/pipeline/pipeline-flowchart.tsx @@ -79,8 +79,9 @@ export function PipelineFlowchart({ return (
+
+
+ {/* Scroll hint gradient for mobile */} + {totalWidth > 400 && ( +
+ )}
) } diff --git a/src/components/ui/editable-card.tsx b/src/components/ui/editable-card.tsx index 1f9fbe1..a43ad81 100644 --- a/src/components/ui/editable-card.tsx +++ b/src/components/ui/editable-card.tsx @@ -56,7 +56,7 @@ export function EditableCard({ onClick={() => setIsEditing(true)} className={cn( 'h-7 gap-1.5 text-xs', - !alwaysShowEdit && 'opacity-0 group-hover:opacity-100 transition-opacity' + !alwaysShowEdit && 'sm:opacity-0 sm:group-hover:opacity-100 transition-opacity' )} > diff --git a/src/components/ui/inline-editable-text.tsx b/src/components/ui/inline-editable-text.tsx index addb561..0b4fef1 100644 --- a/src/components/ui/inline-editable-text.tsx +++ b/src/components/ui/inline-editable-text.tsx @@ -171,7 +171,7 @@ export function InlineEditableText({ {value || placeholder} - + )}