diff --git a/frontend/src/components/layout/RightSidebar.tsx b/frontend/src/components/layout/RightSidebar.tsx index a7703d1..943a365 100644 --- a/frontend/src/components/layout/RightSidebar.tsx +++ b/frontend/src/components/layout/RightSidebar.tsx @@ -31,7 +31,7 @@ import { formatApiError } from '../../lib/apiError' * rating / color / discard / pick across the entire selection. */ export function RightSidebar() { - const { selectedPhotos, activePhotoId, clearSelection } = usePhotoStore() + const { selectedPhotos, activePhotoId } = usePhotoStore() const queryClient = useQueryClient() const { @@ -182,9 +182,10 @@ export function RightSidebar() { }, }) - // Unified header rendered in every branch so the collapse button is - // always reachable regardless of selection state. Title and the - // clear-selection X adapt to what's selected. + // Unified header rendered in every branch so the panel always has + // a title strip regardless of selection state. The title adapts to + // what's selected; selection is cleared via Esc or by clicking + // empty space in the grid. const headerTitle = selectedPhotos.length === 0 ? 'Metadata' @@ -193,24 +194,10 @@ export function RightSidebar() { : `${selectedPhotos.length} Photos Selected` const Header = () => ( -
+

{headerTitle}

-
- {selectedPhotos.length > 0 && ( - - )} -
) diff --git a/frontend/src/components/sidebar/PhotoInfoPanel.tsx b/frontend/src/components/sidebar/PhotoInfoPanel.tsx index d9f3e74..f3452a4 100644 --- a/frontend/src/components/sidebar/PhotoInfoPanel.tsx +++ b/frontend/src/components/sidebar/PhotoInfoPanel.tsx @@ -143,7 +143,7 @@ export function PhotoInfoPanel({ photoId, darkTheme = false }: PhotoInfoPanelPro const queryClient = useQueryClient() const [expandedSections, setExpandedSections] = useState>( - new Set(['metadata', 'basic', 'camera', 'location', 'tags']) + new Set(['edit', 'metadata', 'basic', 'camera', 'location', 'tags']) ) const toggleSection = (section: string) => { const next = new Set(expandedSections) @@ -390,8 +390,24 @@ export function PhotoInfoPanel({ photoId, darkTheme = false }: PhotoInfoPanelPro isPlaceholderData && 'opacity-70' )} > - {/* Edit fields */} -
+ {/* Edit fields — collapsible group so the user can hide the + * editable form (filename, title, notes, rating, color, flag) + * the same way they can hide the readonly metadata block below. */} + toggleSection('edit')} + className="border-b border-border" + > + + Edit + {expandedSections.has('edit') ? ( + + ) : ( + + )} + + +
+
+
{/* Read-only metadata — collapsed/expanded as one block so the user * can hide everything below the editable form with a single click.