diff --git a/packages/ui/src/lib/components/discord/DiscordMessages.stories.tsx b/packages/ui/src/lib/components/discord/DiscordMessages.stories.tsx index 7bd932541..f3d734c90 100644 --- a/packages/ui/src/lib/components/discord/DiscordMessages.stories.tsx +++ b/packages/ui/src/lib/components/discord/DiscordMessages.stories.tsx @@ -57,13 +57,14 @@ export const Default = { author={{ avatar: '/assets/discordjs.png', username: 'Guide Bot', + url: 'https://discord.js.org', }} footer={{ content: 'Sometimes, titles just have to be.', icon: '/assets/discordjs.png', timestamp: 'Today at 21:02', }} - title={{ title: 'An amazing title' }} + title={{ title: 'An amazing title', url: 'https://discord.js.org' }} > This is a description. You can put a description here. It must be descriptive! @@ -73,6 +74,7 @@ export const Default = { username: 'Guide Bot', }} footer={{ content: "When one amazing title just wasn't enough." }} + thumbnail={{ alt: 'discord.js logo', image: '/assets/discordjs.png' }} title={{ title: 'Another amazing title' }} > Multiple embeds! @@ -104,6 +106,13 @@ export const Default = { }, ]} footer={{ timestamp: 'Today at 21:02' }} + image={{ + alt: 'discord.js logo', + url: '/assets/discordjs.png', + width: 300, + height: 300, + }} + thumbnail={{ alt: 'discord.js logo', image: '/assets/discordjs.png' }} title={{ title: 'Fields are also supported!' }} /> diff --git a/packages/ui/src/lib/components/discord/MessageEmbed.tsx b/packages/ui/src/lib/components/discord/MessageEmbed.tsx index 53b4ca1a9..16ba67358 100644 --- a/packages/ui/src/lib/components/discord/MessageEmbed.tsx +++ b/packages/ui/src/lib/components/discord/MessageEmbed.tsx @@ -3,6 +3,8 @@ import { DiscordMessageEmbedAuthor, type IDiscordMessageEmbedAuthor } from './Me import type { IDiscordMessageEmbedField } from './MessageEmbedField.jsx'; import { DiscordMessageEmbedFields } from './MessageEmbedFields.jsx'; import { DiscordMessageEmbedFooter, type IDiscordMessageEmbedFooter } from './MessageEmbedFooter.jsx'; +import { DiscordMessageEmbedImage, type IDiscordMessageEmbedImage } from './MessageEmbedImage.jsx'; +import { DiscordMessageEmbedThumbnail, type IDiscordMessageEmbedThumbnail } from './MessageEmbedThumbnail.jsx'; import { DiscordMessageEmbedTitle, type IDiscordMessageEmbedTitle } from './MessageEmbedTitle.jsx'; export interface IDiscordMessageEmbed { @@ -11,7 +13,8 @@ export interface IDiscordMessageEmbed { fields?: IDiscordMessageEmbedField[]; footer?: IDiscordMessageEmbedFooter | undefined; footerNode?: ReactNode | undefined; - timestamp?: string; + image?: IDiscordMessageEmbedImage; + thumbnail?: IDiscordMessageEmbedThumbnail; title?: IDiscordMessageEmbedTitle | undefined; titleNode?: ReactNode | undefined; } @@ -22,21 +25,26 @@ export function DiscordMessageEmbed({ fields, title, titleNode, + image, children, + thumbnail, footer, footerNode, }: PropsWithChildren) { return (
-
+
{author ? : authorNode ?? null} {title ? : titleNode ?? null} {children ?
{children}
: null} {fields ? : null} + {image ? : null} {footer ? : footerNode ?? null}
+ + {thumbnail ? : null}
diff --git a/packages/ui/src/lib/components/discord/MessageEmbedAuthor.tsx b/packages/ui/src/lib/components/discord/MessageEmbedAuthor.tsx index 793970d23..c0dafd25a 100644 --- a/packages/ui/src/lib/components/discord/MessageEmbedAuthor.tsx +++ b/packages/ui/src/lib/components/discord/MessageEmbedAuthor.tsx @@ -1,13 +1,25 @@ export interface IDiscordMessageEmbedAuthor { avatar: string; + url?: string; username: string; } -export function DiscordMessageEmbedAuthor({ avatar, username }: IDiscordMessageEmbedAuthor) { +export function DiscordMessageEmbedAuthor({ avatar, url, username }: IDiscordMessageEmbedAuthor) { return (
{`${username}'s - {username} + {url ? ( + + {username} + + ) : ( + {username} + )}
); } diff --git a/packages/ui/src/lib/components/discord/MessageEmbedImage.tsx b/packages/ui/src/lib/components/discord/MessageEmbedImage.tsx new file mode 100644 index 000000000..c0e284749 --- /dev/null +++ b/packages/ui/src/lib/components/discord/MessageEmbedImage.tsx @@ -0,0 +1,10 @@ +export interface IDiscordMessageEmbedImage { + alt: string; + height: number; + url: string; + width: number; +} + +export function DiscordMessageEmbedImage({ alt, height, url, width }: IDiscordMessageEmbedImage) { + return {alt}; +} diff --git a/packages/ui/src/lib/components/discord/MessageEmbedThumbnail.tsx b/packages/ui/src/lib/components/discord/MessageEmbedThumbnail.tsx new file mode 100644 index 000000000..bfa14a80c --- /dev/null +++ b/packages/ui/src/lib/components/discord/MessageEmbedThumbnail.tsx @@ -0,0 +1,8 @@ +export interface IDiscordMessageEmbedThumbnail { + alt: string; + image: string; +} + +export function DiscordMessageEmbedThumbnail({ alt, image }: IDiscordMessageEmbedThumbnail) { + return {alt}; +} diff --git a/packages/ui/src/lib/components/discord/MessageEmbedTitle.tsx b/packages/ui/src/lib/components/discord/MessageEmbedTitle.tsx index 0e3f2c75d..068cd8081 100644 --- a/packages/ui/src/lib/components/discord/MessageEmbedTitle.tsx +++ b/packages/ui/src/lib/components/discord/MessageEmbedTitle.tsx @@ -1,7 +1,19 @@ export interface IDiscordMessageEmbedTitle { title: string; + url?: string; } -export function DiscordMessageEmbedTitle({ title }: IDiscordMessageEmbedTitle) { - return
{title}
; +export function DiscordMessageEmbedTitle({ title, url }: IDiscordMessageEmbedTitle) { + return url ? ( + + {title} + + ) : ( +
{title}
+ ); }