From 5c32cae14f39a71e467bcd9d36a9d5a8a54375c0 Mon Sep 17 00:00:00 2001 From: Xavi Abad <77491413+xabg2@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:53:42 +0100 Subject: [PATCH 1/3] feat: email list --- src/components/mail/tray/MessageCheap.tsx | 48 ++++++ .../mail/tray/MessageCheapSkeleton.tsx | 15 ++ src/components/mail/tray/TrayList.tsx | 85 ++++++++++ .../components/mail/tray/Tray.stories.tsx | 157 ++++++++++++++++++ .../tray/message/MessageCheap.stories.tsx | 101 +++++++++++ .../message/MessageCheapSkeleton.stories.tsx | 33 ++++ 6 files changed, 439 insertions(+) create mode 100644 src/components/mail/tray/MessageCheap.tsx create mode 100644 src/components/mail/tray/MessageCheapSkeleton.tsx create mode 100644 src/components/mail/tray/TrayList.tsx create mode 100644 src/stories/components/mail/tray/Tray.stories.tsx create mode 100644 src/stories/components/mail/tray/message/MessageCheap.stories.tsx create mode 100644 src/stories/components/mail/tray/message/MessageCheapSkeleton.stories.tsx diff --git a/src/components/mail/tray/MessageCheap.tsx b/src/components/mail/tray/MessageCheap.tsx new file mode 100644 index 0000000..61357c8 --- /dev/null +++ b/src/components/mail/tray/MessageCheap.tsx @@ -0,0 +1,48 @@ +import { Avatar } from '@/components/avatar'; + +interface MessageCheapProps { + email: { + id: string; + from: { + name: string; + avatar: string; + }; + subject: string; + createdAt: string; + body: string; + read: boolean; + }; + active?: boolean; + selected?: boolean; + onClick: (id: string) => void; +} + +export const MessageCheap = ({ email, active, selected, onClick }: MessageCheapProps) => { + const isHighlighted = active || selected; + + return ( + + ); +}; diff --git a/src/components/mail/tray/MessageCheapSkeleton.tsx b/src/components/mail/tray/MessageCheapSkeleton.tsx new file mode 100644 index 0000000..17cfad6 --- /dev/null +++ b/src/components/mail/tray/MessageCheapSkeleton.tsx @@ -0,0 +1,15 @@ +export const MessageCheapSkeleton = () => ( +
No emails
+No emails
-