style: update SwimlanesBase and TaskCard for improved layout and interaction

- Changed the class names in SwimlanesBase to enhance hover effects and spacing.
- Adjusted QuickAddTask visibility and styling for better user experience.
- Increased font size and opacity in TaskCard for improved readability.
- Minor spacing adjustments in SwimlanesBase to maintain visual consistency.
This commit is contained in:
Julien Froidefond
2025-09-16 08:44:14 +02:00
parent 845d12f098
commit 470f3bfafd
2 changed files with 27 additions and 23 deletions

View File

@@ -55,9 +55,9 @@ function DroppableColumn({
}); });
return ( return (
<div ref={setNodeRef} className="min-h-[100px] space-y-2"> <div ref={setNodeRef} className="min-h-[100px] relative group/column">
<SortableContext items={tasks.map(t => t.id)} strategy={verticalListSortingStrategy}> <SortableContext items={tasks.map(t => t.id)} strategy={verticalListSortingStrategy}>
<div className="space-y-1"> <div className="space-y-3">
{tasks.map(task => ( {tasks.map(task => (
<TaskCard <TaskCard
key={task.id} key={task.id}
@@ -71,29 +71,33 @@ function DroppableColumn({
</div> </div>
</SortableContext> </SortableContext>
{/* QuickAdd pour cette colonne */} {/* QuickAdd pour cette colonne - hors du flux, apparaît au hover */}
{onCreateTask && ( {onCreateTask && (
<div className="mt-2"> <>
{showQuickAdd ? ( {showQuickAdd ? (
<div className="mt-2">
<QuickAddTask <QuickAddTask
status={status} status={status}
onSubmit={onCreateTask} onSubmit={onCreateTask}
onCancel={onToggleQuickAdd || (() => {})} onCancel={onToggleQuickAdd || (() => {})}
swimlaneContext={swimlaneContext} swimlaneContext={swimlaneContext}
/> />
</div>
) : ( ) : (
<div className="h-0 flex justify-center opacity-0 group-hover/column:opacity-100 transition-opacity duration-200 pointer-events-none group-hover/column:pointer-events-auto">
<button <button
onClick={onToggleQuickAdd} onClick={onToggleQuickAdd}
className="w-full p-2 flex justify-center transition-colors" className="py-1 px-2 transition-colors"
title="Ajouter une tâche" title="Ajouter une tâche"
> >
<div className="w-5 h-5 rounded-full bg-[var(--card)] hover:bg-[var(--card-hover)] flex items-center justify-center text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-all text-sm"> <div className="w-5 h-5 rounded-full bg-[var(--card)] hover:bg-[var(--card-hover)] flex items-center justify-center text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-all text-sm shadow-lg border border-[var(--border)]/30">
+ +
</div> </div>
</button> </button>
)}
</div> </div>
)} )}
</>
)}
</div> </div>
); );
} }
@@ -230,7 +234,7 @@ export function SwimlanesBase({
{/* Swimlanes */} {/* Swimlanes */}
<div className="flex-1 overflow-y-auto px-6"> <div className="flex-1 overflow-y-auto px-6">
<div className="space-y-4"> <div className="space-y-3 pb-2">
{swimlanes.map(swimlane => { {swimlanes.map(swimlane => {
const isCollapsed = collapsedSwimlanes.has(swimlane.key); const isCollapsed = collapsedSwimlanes.has(swimlane.key);

View File

@@ -124,7 +124,7 @@ export function TaskCard({ task, onDelete, onEdit, onUpdateTitle, compactView =
{displayEmojis.slice(0, 1).map((emoji, index) => ( {displayEmojis.slice(0, 1).map((emoji, index) => (
<span <span
key={index} key={index}
className="text-sm opacity-80 font-emoji" className="text-base opacity-90 font-emoji"
style={{ style={{
fontFamily: 'Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji, sans-serif', fontFamily: 'Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji, sans-serif',
fontVariantEmoji: 'normal' fontVariantEmoji: 'normal'
@@ -148,7 +148,7 @@ export function TaskCard({ task, onDelete, onEdit, onUpdateTitle, compactView =
/> />
) : ( ) : (
<h4 <h4
className="font-mono text-xs font-medium text-[var(--foreground)] leading-tight line-clamp-2 flex-1 cursor-pointer hover:text-[var(--primary)] transition-colors" className="font-mono text-sm font-medium text-[var(--foreground)] leading-tight line-clamp-2 flex-1 cursor-pointer hover:text-[var(--primary)] transition-colors"
onClick={handleTitleClick} onClick={handleTitleClick}
title={onUpdateTitle ? "Cliquer pour éditer" : undefined} title={onUpdateTitle ? "Cliquer pour éditer" : undefined}
> >