+
+ {/* pt-6 gives the "SELECTED" badge room above the card without clipping */}
+
{sorted.map((d, i) => (
{i < sorted.length - 1 && (
-
+
@@ -31,7 +39,7 @@ export default function FocusTimeline({ project, activeDeliverableId, onEditDeli
))}
{sorted.length === 0 && (
-
No deliverables yet.
+
No deliverables yet.
)}
diff --git a/frontend/src/components/UI/Drawer.jsx b/frontend/src/components/UI/Drawer.jsx
index 25dd4a5..a3acfde 100644
--- a/frontend/src/components/UI/Drawer.jsx
+++ b/frontend/src/components/UI/Drawer.jsx
@@ -1,23 +1,32 @@
import { useEffect } from 'react'
+
export default function Drawer({ isOpen, onClose, children }) {
useEffect(() => {
const h = (e) => { if (e.key === 'Escape') onClose() }
if (isOpen) document.addEventListener('keydown', h)
return () => document.removeEventListener('keydown', h)
}, [isOpen, onClose])
+
return (
<>
- {isOpen &&
}
+ {isOpen && (
+
+ )}
-
+ {/* Handle bar + close */}
+
+
+ {/* Scrollable content — overflow-visible on x so badge doesn't clip */}
+
+ {children}
-
{children}
>
)
diff --git a/frontend/src/store/useFocusStore.js b/frontend/src/store/useFocusStore.js
index a231166..b5ff6a1 100644
--- a/frontend/src/store/useFocusStore.js
+++ b/frontend/src/store/useFocusStore.js
@@ -5,8 +5,9 @@ const useFocusStore = create((set) => ({
projectId: null,
activeDeliverableId: null,
- openFocus: (projectId, deliverableId) => set({ isOpen: true, projectId, activeDeliverableId: deliverableId }),
- closeFocus: () => set({ isOpen: false, projectId: null, activeDeliverableId: null }),
+ openFocus: (projectId, deliverableId) => set({ isOpen: true, projectId, activeDeliverableId: deliverableId }),
+ closeFocus: () => set({ isOpen: false, projectId: null, activeDeliverableId: null }),
+ setActiveDeliverable: (id) => set({ activeDeliverableId: id }),
}))
export default useFocusStore