diff --git a/src/features/marketplace/components/Items/Items.jsx b/src/features/marketplace/components/Items/Items.jsx index 42bd436e..2acb5c18 100644 --- a/src/features/marketplace/components/Items/Items.jsx +++ b/src/features/marketplace/components/Items/Items.jsx @@ -1,5 +1,5 @@ import { useT } from 'contexts'; -import React, { memo, useState, useMemo } from 'react'; +import React, { memo, useState, useMemo, useEffect } from 'react'; import { MdCheckCircle, MdOutlineUploadFile, MdClose, MdSettings, MdAdd } from 'react-icons/md'; import placeholderIcon from 'assets/icons/marketplace-placeholder.png'; @@ -200,32 +200,36 @@ function ItemCard({ onClick={handleInstallClick} style={{ position: 'absolute', - top: '12px', - right: '12px', + top: '20px', + right: '20px', zIndex: 2, - width: '32px', - height: '32px', + width: '36px', + height: '36px', borderRadius: '50%', - border: 'none', - backgroundColor: 'var(--linkColor, #ff5c25)', + border: '1px solid rgba(255, 255, 255, 0.18)', + background: + 'linear-gradient(135deg, rgba(255, 92, 37, 0.95) 0%, rgba(255, 130, 67, 0.85) 100%)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', color: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', - transition: 'transform 0.2s, opacity 0.2s', - opacity: 0.9, + transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)', }} onMouseEnter={(e) => { - e.currentTarget.style.opacity = '1'; - e.currentTarget.style.transform = 'scale(1.1)'; + e.currentTarget.style.transform = 'scale(1.15)'; + e.currentTarget.style.background = + 'linear-gradient(135deg, rgba(255, 92, 37, 1) 0%, rgba(255, 130, 67, 0.95) 100%)'; }} onMouseLeave={(e) => { - e.currentTarget.style.opacity = '0.9'; e.currentTarget.style.transform = 'scale(1)'; + e.currentTarget.style.background = + 'linear-gradient(135deg, rgba(255, 92, 37, 0.95) 0%, rgba(255, 130, 67, 0.85) 100%)'; }} > - + )} {item.icon_url ? ( @@ -325,11 +329,23 @@ function Items({ }) { const [selectedCategory, setSelectedCategory] = useState('all'); const [sortType, setSortType] = useState(localStorage.getItem('sortMarketplace') || 'a-z'); + const [installCounter, setInstallCounter] = useState(0); + + useEffect(() => { + const handleInstalledAddonsChanged = () => { + setInstallCounter((prev) => prev + 1); + }; + + window.addEventListener('installedAddonsChanged', handleInstalledAddonsChanged); + return () => { + window.removeEventListener('installedAddonsChanged', handleInstalledAddonsChanged); + }; + }, []); const installedNames = useMemo(() => { const installed = JSON.parse(localStorage.getItem('installed')) || []; return new Set(installed.map((item) => item.name)); - }, []); + }, [installCounter]); const filterCategories = [ { id: 'all', label: 'All' },