From e0b4a2963519d4c96e1eac78a6a4cba85384ba32 Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Fri, 20 Oct 2023 06:37:52 +1100 Subject: [PATCH] added multiple custom backgrounds --- interface/src/main.tsx | 12 +++++++ interface/src/pages/Themes.css | 21 +++++++++++ interface/src/pages/Themes.tsx | 58 +++++++++++++++++++++++++----- interface/tailwind.config.js | 16 +++++++++ public/backgrounds/background.html | 2 +- 5 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 interface/src/pages/Themes.css diff --git a/interface/src/main.tsx b/interface/src/main.tsx index e9aa89bf..e932a711 100644 --- a/interface/src/main.tsx +++ b/interface/src/main.tsx @@ -6,6 +6,18 @@ import { SettingsContextProvider } from './SettingsContext.js'; const root = ReactDOM.createRoot(document.getElementById('ExtensionPopup')!); +const fontURL = chrome.runtime.getURL("fonts/IconFamily.woff"); + +const style = document.createElement("style"); +style.setAttribute("type", "text/css"); +style.innerHTML = ` +@font-face { + font-family: 'IconFamily'; + src: url('${fontURL}') format('woff'); + font-weight: normal; + font-style: normal; +}`; +document.head.appendChild(style); root.render( diff --git a/interface/src/pages/Themes.css b/interface/src/pages/Themes.css new file mode 100644 index 00000000..6a02b1c4 --- /dev/null +++ b/interface/src/pages/Themes.css @@ -0,0 +1,21 @@ +@keyframes shake { + 0% { + transform: translateX(0) rotate(0); + } + 25% { + transform: translateX(-1px) rotate(-1deg); + } + 50% { + transform: translateX(1px) rotate(1deg); + } + 75% { + transform: translateX(-1px) rotate(-1deg); + } + 100% { + transform: translateX(0) rotate(0); + } +} + +.animate-shake { + animation: shake 1s linear infinite; +} diff --git a/interface/src/pages/Themes.tsx b/interface/src/pages/Themes.tsx index 40a174f7..f894a1c5 100644 --- a/interface/src/pages/Themes.tsx +++ b/interface/src/pages/Themes.tsx @@ -1,4 +1,5 @@ import { useState, useEffect, ChangeEvent, FC } from 'react'; +import './Themes.css'; // Custom Types and Interfaces interface Background { @@ -54,6 +55,7 @@ const readAllData = async (): Promise => { const Themes: FC = () => { const [backgrounds, setBackgrounds] = useState([]); const [selectedBackground, setSelectedBackground] = useState(localStorage.getItem('selectedBackground')); + const [isEditMode, setIsEditMode] = useState(false); const handleFileChange = async (e: ChangeEvent): Promise => { const file = e.target.files?.[0]; @@ -78,29 +80,67 @@ const Themes: FC = () => { localStorage.setItem('selectedBackground', fileId); }; + const deleteBackground = async (fileId: string): Promise => { + const db = await openDB(); + const tx = db.transaction('backgrounds', 'readwrite'); + const store = tx.objectStore('backgrounds'); + store.delete(fileId); + setBackgrounds(prev => prev.filter(bg => bg.id !== fileId)); + }; + useEffect(() => { loadBackgrounds(); }, []); return (
-

Upload a Background

- - -

Images

+ +

Images

+ {/* Image uploader swatch */} +
+
+ {/* Plus icon */} +  +
+ +
{backgrounds.filter(bg => bg.type === 'image').map(bg => ( -
selectBackground(bg.id)} className={`w-16 h-16 rounded-lg overflow-hidden transition ring ring-white ${selectedBackground === bg.id ? 'ring-4' : 'ring-0'}`}> - swatch +
selectBackground(bg.id)} + className={`relative w-16 h-16 cursor-pointer rounded-xl transition ring ring-white ${isEditMode ? 'animate-shake' : ''} ${selectedBackground === bg.id ? 'ring-2' : 'ring-0'}`}> + {isEditMode && ( +
deleteBackground(bg.id)}> +
+
+ )} + swatch
))}
-

Videos

+

Videos

+ {/* Video uploader swatch */} +
+
+ {/* Plus icon */} +  +
+ +
{backgrounds.filter(bg => bg.type === 'video').map(bg => ( -
selectBackground(bg.id)} className={`w-16 h-16 rounded-lg overflow-hidden transition ring ring-white ${selectedBackground === bg.id ? 'ring-4' : 'ring-0'}`}> -
diff --git a/interface/tailwind.config.js b/interface/tailwind.config.js index 829e4be9..92fa0285 100644 --- a/interface/tailwind.config.js +++ b/interface/tailwind.config.js @@ -15,6 +15,22 @@ export default { "xl": "1.25rem", "2xl": "1.5rem", "3xl": "1.875rem", + "4xl": "2.25rem", + "5xl": "3rem", + "6xl": "4rem", + "7xl": "5rem", + "8xl": "6rem", + "9xl": "8rem", + "10xl": "10rem", + "11xl": "12rem", + "12xl": "14rem", + "13xl": "16rem", + "14xl": "18rem", + }, + extend: { + fontFamily: { + "IconFamily": "IconFamily" + } } }, plugins: [], diff --git a/public/backgrounds/background.html b/public/backgrounds/background.html index 3a5b5203..ad0a8b9f 100644 --- a/public/backgrounds/background.html +++ b/public/backgrounds/background.html @@ -18,7 +18,7 @@ object-fit: cover; - animation: fade 0.2s ease-in-out; + animation: fade 0.4s ease-in-out; } @keyframes fade {