/** @jsxImportSource @emotion/react */ import { css } from '@emotion/react'; import { INotification } from '@magicbell/react-headless'; import { useTheme } from '../../context/MagicBellThemeContext.js'; import { toRGBA } from '../../lib/color.js'; import Text from '../Text/index.js'; export interface Props { notification: INotification; } /** * Context menu for the clickable notification. Renders a menu with two items: * "Mark as read" and "Delete". * * @example * */ export default function NotificationContextMenu({ notification }: Props) { const { isRead, markAsUnread, markAsRead } = notification; const theme = useTheme(); const { container: containerTheme, notification: { default: notificationTheme }, } = theme; const handleDelete = () => notification.delete(); const toggleRead = () => (isRead ? markAsUnread() : markAsRead()); return (
e.preventDefault()} css={css` background: ${containerTheme.backgroundColor} !important; border-radius: 4px !important; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); padding: 4px 0 !important; color: ${notificationTheme.textColor} !important; font-family: ${notificationTheme.fontFamily} !important; font-size: ${notificationTheme.fontSize} !important; text-transform: ${notificationTheme.textTransform} !important; min-width: 10em; button { display: block; padding: 0.75em 1.25em !important; width: 100%; text-align: left; background-color: ${toRGBA( notificationTheme.backgroundColor, notificationTheme.backgroundOpacity, )} !important; &:hover { background-color: ${toRGBA( notificationTheme.hover.backgroundColor, notificationTheme.hover.backgroundOpacity, )} !important; } &:focus { outline: none; } &:focus-visible { outline: 2px ${notificationTheme.textColor} solid !important; } } `} >
); }