diff --git a/apps/web/src/features/tracks/components/comment-thread/CommentRepliesList.tsx b/apps/web/src/features/tracks/components/comment-thread/CommentRepliesList.tsx
index 2c928ac9e..e87f0e078 100644
--- a/apps/web/src/features/tracks/components/comment-thread/CommentRepliesList.tsx
+++ b/apps/web/src/features/tracks/components/comment-thread/CommentRepliesList.tsx
@@ -1,4 +1,4 @@
-import { Loader2 } from 'lucide-react';
+import { CommentThreadSkeleton } from './CommentThreadSkeleton';
import { cn } from '@/lib/utils';
export interface CommentRepliesListProps {
@@ -21,11 +21,9 @@ export function CommentRepliesList({
data-testid="comment-replies-list"
>
{isLoading ? (
-
-
+
+
+
) : (
children
diff --git a/apps/web/src/features/tracks/components/comment-thread/CommentThread.tsx b/apps/web/src/features/tracks/components/comment-thread/CommentThread.tsx
index edb0c4672..045196664 100644
--- a/apps/web/src/features/tracks/components/comment-thread/CommentThread.tsx
+++ b/apps/web/src/features/tracks/components/comment-thread/CommentThread.tsx
@@ -4,6 +4,7 @@
*/
import { useState } from 'react';
+import { AnimatePresence, motion } from 'framer-motion';
import { Avatar } from '@/components/ui/avatar';
import { ConfirmationDialog } from '@/components/ui/confirmation-dialog';
import { useUser } from '@/features/auth/hooks/useUser';
@@ -139,18 +140,28 @@ export function CommentThread({
/>
)}
- {showReplies && (
-
- {replies.map((reply) => (
-
- ))}
-
- )}
+
+ {showReplies && (
+
+
+ {replies.map((reply) => (
+
+ ))}
+
+
+ )}
+
>
)}
diff --git a/apps/web/src/features/tracks/components/comment-thread/CommentThreadActions.tsx b/apps/web/src/features/tracks/components/comment-thread/CommentThreadActions.tsx
index eac19822b..b20091052 100644
--- a/apps/web/src/features/tracks/components/comment-thread/CommentThreadActions.tsx
+++ b/apps/web/src/features/tracks/components/comment-thread/CommentThreadActions.tsx
@@ -1,7 +1,14 @@
+import { motion } from 'framer-motion';
import { Button } from '@/components/ui/button';
import { MessageCircle, Reply } from 'lucide-react';
import { cn } from '@/lib/utils';
+const actionMotion = {
+ rest: { scale: 1 },
+ hover: { scale: 1.03 },
+ tap: { scale: 0.97 },
+};
+
export interface CommentThreadActionsProps {
canReply: boolean;
hasUser: boolean;
@@ -27,27 +34,43 @@ export function CommentThreadActions({
data-testid="comment-thread-actions"
>
{canReply && hasUser && (
-
+
+
)}
{repliesCount > 0 && (
-
+
+
)}
);
diff --git a/apps/web/src/features/tracks/components/comment-thread/CommentThreadSkeleton.tsx b/apps/web/src/features/tracks/components/comment-thread/CommentThreadSkeleton.tsx
index b2db6071c..ad797bc4c 100644
--- a/apps/web/src/features/tracks/components/comment-thread/CommentThreadSkeleton.tsx
+++ b/apps/web/src/features/tracks/components/comment-thread/CommentThreadSkeleton.tsx
@@ -22,8 +22,8 @@ export function CommentThreadSkeleton({
-
-
+
+
);