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({
-
-
+
+
);