- {/* Left: Logo + title */}
-
-
-
{t("common.appName")}
-
-
- {/* Right: Desktop controls */}
-
-
-
- {token && user ? (
-
-
-
- {user.name || user.email}
-
-
-
- ) : (
-
- {t("auth.submit")}
-
- )}
-
-
- {/* Right: Mobile - avatar + hamburger both open drawer */}
-
- {token && user && (
-
- )}
+
+ {/* Right side only: avatar + hamburger */}
+ {token && user && (
-
+ )}
+
- {/* Mobile slide-out drawer */}
+ {/* Slide-out drawer */}
{drawerOpen && (
{/* Backdrop */}
diff --git a/apps/tasks/components/TaskCard.tsx b/apps/tasks/components/TaskCard.tsx
index 8f176be..e01a967 100644
--- a/apps/tasks/components/TaskCard.tsx
+++ b/apps/tasks/components/TaskCard.tsx
@@ -24,8 +24,7 @@ function isDone(status: string): boolean {
}
export default function TaskCard({ task, onComplete }: TaskCardProps) {
- const { t, locale } = useTranslation();
- const groupColor = task.group_color || "#6b7280";
+ const { t } = useTranslation();
const priorityColor = PRIORITY_COLORS[task.priority] || PRIORITY_COLORS.medium;
const taskDone = isDone(task.status);
const [swipeOffset, setSwipeOffset] = useState(0);
@@ -34,11 +33,8 @@ export default function TaskCard({ task, onComplete }: TaskCardProps) {
const SWIPE_THRESHOLD = 120;
- const dateLocale = locale === "ua" ? "uk-UA" : locale === "cs" ? "cs-CZ" : locale === "he" ? "he-IL" : "ru-RU";
-
const swipeHandlers = useSwipeable({
onSwiping: (e) => {
- // Only allow right swipe for complete gesture
if (e.dir === "Right" && !taskDone && onComplete) {
const offset = Math.min(e.deltaX, 160);
setSwipeOffset(offset);
@@ -66,25 +62,25 @@ export default function TaskCard({ task, onComplete }: TaskCardProps) {
const showCompleteHint = swipeOffset > 40;
return (
-
+
{/* Swipe background - green complete indicator */}
{onComplete && !taskDone && (
SWIPE_THRESHOLD
? "bg-green-500"
: "bg-green-400/80"
}`}
>
-
)}
@@ -97,81 +93,39 @@ export default function TaskCard({ task, onComplete }: TaskCardProps) {
}}
>
-
- {/* Priority dot on left edge */}
+
+ {/* Priority line on left edge */}
- {/* Group color accent bar on top (mobile) */}
-
+
+ {/* Group icon */}
+ {task.group_icon && (
+
{task.group_icon}
+ )}
-
- {/* Mobile: compact one-line layout */}
-
- {/* Group icon */}
- {task.group_icon && (
-
{task.group_icon}
- )}
+ {/* Title - single line, truncated */}
+
+ {task.title}
+
- {/* Content - mobile compact */}
-
- {/* Title + status on one line on mobile */}
-
-
- {task.title}
-
-
-
-
-
-
- {/* Description - hidden on very small screens */}
- {task.description && (
-
- {task.description}
-
- )}
-
- {/* Meta row */}
-
-
-
-
- {task.group_name && (
-
- {task.group_name}
-
- )}
- {task.due_at && (
-
-
-
-
- {new Date(task.due_at).toLocaleDateString(dateLocale)}
-
- )}
-
-
-
- {/* Priority indicator */}
-
+ {/* Status badge */}
+
+
+
+ {/* Priority dot */}
+