From 4efa8c4437e25e2d7a47f4f56430b99215b8a18f Mon Sep 17 00:00:00 2001 From: DIKER0K Date: Sun, 28 Dec 2025 14:32:39 +0500 Subject: [PATCH] stylize Notifier update --- src/renderer/components/Notifier.tsx | 148 ++++++++++++++++++++++----- 1 file changed, 120 insertions(+), 28 deletions(-) diff --git a/src/renderer/components/Notifier.tsx b/src/renderer/components/Notifier.tsx index 80adeb0..017fba5 100644 --- a/src/renderer/components/Notifier.tsx +++ b/src/renderer/components/Notifier.tsx @@ -1,12 +1,77 @@ -import { Alert, Box, Snackbar, Button } from '@mui/material'; +import { + Alert, + Box, + Snackbar, + Button, + Stack, + Typography, + Paper, +} from '@mui/material'; import { useEffect, useState } from 'react'; +import { styled, alpha, keyframes } from '@mui/material/styles'; + +export const GRADIENT = + 'linear-gradient(71deg, #F27121 0%, #E940CD 70%, #8A2387 100%)'; + +const glowPulse = keyframes` + 0% { opacity: .6 } + 50% { opacity: 1 } + 100% { opacity: .6 } +`; + +export const GlassCard = styled(Paper)(() => ({ + position: 'relative', + overflow: 'hidden', + borderRadius: 18, + background: 'rgba(0,0,0,0.45)', + border: '1px solid rgba(255,255,255,0.12)', + backdropFilter: 'blur(14px)', + boxShadow: '0 16px 40px rgba(0,0,0,0.45)', +})); + +export const Glow = styled('div')(() => ({ + position: 'absolute', + inset: -2, + background: + 'radial-gradient(400px 120px at 10% 0%, rgba(242,113,33,0.25), transparent 60%),' + + 'radial-gradient(400px 120px at 90% 0%, rgba(233,64,205,0.25), transparent 60%)', + pointerEvents: 'none', + animation: `${glowPulse} 5s ease-in-out infinite`, +})); + +export const GradientButton = styled(Button)(() => ({ + background: GRADIENT, + borderRadius: 999, + textTransform: 'none', + fontWeight: 700, + '&:hover': { + background: GRADIENT, + filter: 'brightness(1.08)', + }, +})); + +export const SoftButton = styled(Button)(() => ({ + borderRadius: 999, + textTransform: 'none', + color: '#fff', + border: '1px solid rgba(255,255,255,0.14)', + background: 'rgba(255,255,255,0.06)', + '&:hover': { background: 'rgba(255,255,255,0.1)' }, +})); + +type Severity = 'error' | 'warning' | 'info' | 'success'; + +const severityColor: Record = { + info: '#4fc3f7', + success: '#4caf50', + warning: '#ff9800', + error: '#f44336', +}; export const Notifier = () => { const [open, setOpen] = useState(false); const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState< - 'error' | 'warning' | 'info' | 'success' - >('info'); + const [severity, setSeverity] = useState('info'); const [hasUpdateAvailable, setHasUpdateAvailable] = useState(false); useEffect(() => { @@ -24,6 +89,15 @@ export const Notifier = () => { }; }, []); + useEffect(() => { + if (process.env.NODE_ENV === 'development') { + setMessage('Доступно новое обновление (dev preview)'); + setSeverity('info'); + setHasUpdateAvailable(true); + setOpen(true); + } + }, []); + const handleClose = () => { setOpen(false); }; @@ -34,30 +108,48 @@ export const Notifier = () => { }; return ( - - - - - - - ) - } + + + + + - {message} - - - + + {message} + + + {hasUpdateAvailable && ( + + + Обновить + + + + Позже + + + )} + + + ); };