From 1b5504e7bfa0e683ca5ff5291ae77da8c413b073 Mon Sep 17 00:00:00 2001 From: Thomas Nordentoft Date: Sun, 5 Oct 2025 19:30:17 +0200 Subject: [PATCH 01/11] Install tinycolor, add svg, add code for dynamically modifying the SVG based on current theme, show svg in chat background --- bun.lockb | Bin 558554 -> 558970 bytes package.json | 1 + src/assets/backgrounds/layered-waves.svg | 1 + .../Option/Playground/Playground.tsx | 23 +++++++++++- src/hooks/useTheme.tsx | 35 +++++++++++++++++- 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/assets/backgrounds/layered-waves.svg diff --git a/bun.lockb b/bun.lockb index 78e15b1c3b737b5fd8ae01e96ca27662905d097a..405f64aff21d9d9f1cb851773588e916af0ea6e2 100755 GIT binary patch delta 75056 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 YrSGUzh0+w$*NF00bEK>umFoEa0q$Lb#{d8T diff --git a/package.json b/package.json index 021970136..4a71a4515 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "@ant-design/cssinjs": "^1.18.4", + "@ctrl/tinycolor": "^4.2.0", "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.1", "@langchain/community": "^0.0.41", diff --git a/src/assets/backgrounds/layered-waves.svg b/src/assets/backgrounds/layered-waves.svg new file mode 100644 index 000000000..6e0b6bc0a --- /dev/null +++ b/src/assets/backgrounds/layered-waves.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Option/Playground/Playground.tsx b/src/components/Option/Playground/Playground.tsx index de5eb55bf..19dd558e0 100644 --- a/src/components/Option/Playground/Playground.tsx +++ b/src/components/Option/Playground/Playground.tsx @@ -1,4 +1,4 @@ -import React from "react" +import React, { useState } from "react" import { PlaygroundForm } from "./PlaygroundForm" import { PlaygroundChat } from "./PlaygroundChat" import { useMessageOption } from "@/hooks/useMessageOption" @@ -15,6 +15,9 @@ import { ChevronDown } from "lucide-react" import { useStorage } from "@plasmohq/storage/hook" import { Storage } from "@plasmohq/storage" import { otherUnsupportedTypes } from "../Knowledge/utils/unsupported-types" +import { useTheme } from "@/hooks/useTheme" + + export const Playground = () => { const drop = React.useRef(null) const [dropedFile, setDropedFile] = React.useState() @@ -25,6 +28,8 @@ export const Playground = () => { }) }) + const { themeName, getThemedSVGUri } = useTheme(); + const { selectedKnowledge, messages, @@ -38,10 +43,20 @@ export const Playground = () => { const { containerRef, isAutoScrollToBottom, autoScrollToBottom } = useSmartScroll(messages, streaming, 120) + const [backgroundImage, setBackgroundImage] = useState(null); + const [dropState, setDropState] = React.useState< "idle" | "dragging" | "error" >("idle") + React.useEffect(() => { + async function loadBackground() { + setBackgroundImage(getThemedSVGUri()); + } + loadBackground(); + }, [themeName]); + + React.useEffect(() => { if (selectedKnowledge) { return @@ -162,6 +177,12 @@ export const Playground = () => {
diff --git a/src/hooks/useTheme.tsx b/src/hooks/useTheme.tsx index 519460a28..b988b2669 100644 --- a/src/hooks/useTheme.tsx +++ b/src/hooks/useTheme.tsx @@ -2,10 +2,15 @@ import { useEffect } from "react" import { themes, Theme } from "@/assets/colors" import { useThemeStore } from "@/store/theme" +import { TinyColor } from '@ctrl/tinycolor'; +import svgString from "@/assets/backgrounds/layered-waves.svg?raw"; // the ?raw is key! +import { useDarkMode } from "./useDarkmode"; + export function useTheme() { const themeName = useThemeStore((state) => state.themeName) const setTheme = useThemeStore((state) => state.setTheme) + const { mode } = useDarkMode() useEffect(() => { const themeObj = themes[themeName ?? "default"]; @@ -19,7 +24,35 @@ export function useTheme() { }); }, [themeName]); - return { themeName, setTheme } + const getThemedSVGUri = () : string => { + + const svgText = svgString + console.log("svgText", svgText) + + const color = new TinyColor(themes[themeName].primary[500]); + + const customizedSVG = svgText + .replace(/{{color1}}/g, themes[themeName].surface[mode == "dark" ? 900: 100]) + .replace(/{{color2}}/g, color.clone().lighten(5).toHexString()) + .replace(/{{color3}}/g, color.toHexString()) + .replace(/{{color4}}/g, color.clone().spin(2).darken(5).toHexString()) + .replace(/{{color5}}/g, color.clone().spin(-2).darken(7).toHexString()) + .replace(/{{color6}}/g, color.clone().spin(2).darken(10).toHexString()) + + return svgToDataURI(customizedSVG); + } + + + + return { themeName, setTheme, getThemedSVGUri } +} + +function svgToDataURI(svgString) { + const encoded = encodeURIComponent(svgString) + .replace(/'/g, '%27') + .replace(/"/g, '%22'); + + return `data:image/svg+xml,${encoded}`; } // Utility: Convert hex to R, G, B (no alpha) From d401671f418aa85b4d467b207153ddd4263f50f6 Mon Sep 17 00:00:00 2001 From: Thomas Nordentoft Date: Sun, 5 Oct 2025 20:00:41 +0200 Subject: [PATCH 02/11] Add blurryGradient, switching logic, state management --- src/assets/backgrounds/blurry-gradient.svg | 1 + src/hooks/useTheme.tsx | 50 ++++++++++++++++++---- src/store/theme.tsx | 13 ++++++ 3 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 src/assets/backgrounds/blurry-gradient.svg diff --git a/src/assets/backgrounds/blurry-gradient.svg b/src/assets/backgrounds/blurry-gradient.svg new file mode 100644 index 000000000..becb2cc73 --- /dev/null +++ b/src/assets/backgrounds/blurry-gradient.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/useTheme.tsx b/src/hooks/useTheme.tsx index b988b2669..b3b527132 100644 --- a/src/hooks/useTheme.tsx +++ b/src/hooks/useTheme.tsx @@ -1,15 +1,21 @@ import { useEffect } from "react" -import { themes, Theme } from "@/assets/colors" +import { themes } from "@/assets/colors" import { useThemeStore } from "@/store/theme" import { TinyColor } from '@ctrl/tinycolor'; -import svgString from "@/assets/backgrounds/layered-waves.svg?raw"; // the ?raw is key! +import layeredWavesSVG from "@/assets/backgrounds/layered-waves.svg?raw"; // the ?raw is key! +import blurryGradientSVG from "@/assets/backgrounds/blurry-gradient.svg?raw"; // the ?raw is key! + import { useDarkMode } from "./useDarkmode"; +export type BackgroundType = "blurryGradient" | "layeredWaves" export function useTheme() { const themeName = useThemeStore((state) => state.themeName) const setTheme = useThemeStore((state) => state.setTheme) + const backgroundName = useThemeStore((state) => state.backgroundName) + const setBackground = useThemeStore((state) => state.setBackground) + const { mode } = useDarkMode() useEffect(() => { @@ -24,10 +30,8 @@ export function useTheme() { }); }, [themeName]); - const getThemedSVGUri = () : string => { - - const svgText = svgString - console.log("svgText", svgText) + const generateLayeredWaves = () : string => { + const svgText = layeredWavesSVG const color = new TinyColor(themes[themeName].primary[500]); @@ -39,12 +43,40 @@ export function useTheme() { .replace(/{{color5}}/g, color.clone().spin(-2).darken(7).toHexString()) .replace(/{{color6}}/g, color.clone().spin(2).darken(10).toHexString()) - return svgToDataURI(customizedSVG); + return customizedSVG } - + const generateBlurryGradient = () : string => { + const svgText = blurryGradientSVG + + const color = new TinyColor(themes[themeName].primary[500]); + + const customizedSVG = svgText + .replace(/{{color1}}/g, themes[themeName].surface[mode == "dark" ? 900: 100]) + .replace(/{{color2}}/g, color.clone().lighten(10).toHexString()) + .replace(/{{color3}}/g, color.toHexString()) + .replace(/{{color4}}/g, color.clone().spin(2).lighten(7).toHexString()) + .replace(/{{color5}}/g, color.clone().spin(-2).darken(11).toHexString()) + .replace(/{{color6}}/g, color.clone().spin(2).lighten(14).toHexString()) + .replace(/{{color7}}/g, color.clone().spin(2).darken(17).toHexString()) + + return customizedSVG; + } + + const getThemedSVGUri = () : string => { + let customizedSVG = ""; + switch(backgroundName){ + case "blurryGradient": + customizedSVG = generateBlurryGradient(); + case "layeredWaves": + customizedSVG = generateLayeredWaves(); + default: + customizedSVG = generateLayeredWaves(); + } + return svgToDataURI(customizedSVG); + } - return { themeName, setTheme, getThemedSVGUri } + return { themeName, setTheme, backgroundName, setBackground, getThemedSVGUri } } function svgToDataURI(svgString) { diff --git a/src/store/theme.tsx b/src/store/theme.tsx index 4163ecfea..4de14dd13 100644 --- a/src/store/theme.tsx +++ b/src/store/theme.tsx @@ -1,9 +1,12 @@ import { create } from "zustand"; import { Theme } from "@/assets/colors"; +import { BackgroundType } from "@/hooks/useTheme"; interface ThemeState { themeName: Theme; setTheme: (theme: Theme) => void; + backgroundName: BackgroundType; + setBackground: (background: BackgroundType) => void; } const getInitialTheme = (): Theme => { @@ -11,10 +14,20 @@ const getInitialTheme = (): Theme => { return saved && ["default", "moss", "commodore"].includes(saved) ? saved : "default"; }; +const getInitialBackground = (): BackgroundType => { + const saved = localStorage.getItem("backgroundName") as BackgroundType | null; + return saved && ["blurryGradient", "layeredWaves"].includes(saved) ? saved : "layeredWaves"; +}; + export const useThemeStore = create((set) => ({ themeName: getInitialTheme(), setTheme: (theme) => { localStorage.setItem("themeName", theme); set({ themeName: theme }); }, + backgroundName: getInitialBackground(), + setBackground: (background) => { + localStorage.setItem("backgroundName", background); + set({backgroundName: background}) + } })); From c27c8a9cb433e75641bc347613cbad751a07c19c Mon Sep 17 00:00:00 2001 From: Thomas Nordentoft Date: Sun, 5 Oct 2025 21:17:32 +0200 Subject: [PATCH 03/11] Create background switcher component --- .../Option/Settings/background-switcher.tsx | 20 +++++++++++++++++++ .../Option/Settings/general-settings.tsx | 2 ++ src/hooks/useTheme.tsx | 3 +++ 3 files changed, 25 insertions(+) create mode 100644 src/components/Option/Settings/background-switcher.tsx diff --git a/src/components/Option/Settings/background-switcher.tsx b/src/components/Option/Settings/background-switcher.tsx new file mode 100644 index 000000000..2a4104b32 --- /dev/null +++ b/src/components/Option/Settings/background-switcher.tsx @@ -0,0 +1,20 @@ +import { Select } from "antd" +import { useTheme } from "@/hooks/useTheme" + +const { Option } = Select + +export function BackgroundSwitcher({ className }: { className?: string }) { + const { backgroundName, setBackground } = useTheme() + + return ( + + ) +} diff --git a/src/components/Option/Settings/general-settings.tsx b/src/components/Option/Settings/general-settings.tsx index 5cf4bdaca..0a3a8be2b 100644 --- a/src/components/Option/Settings/general-settings.tsx +++ b/src/components/Option/Settings/general-settings.tsx @@ -11,6 +11,7 @@ import { SSTSettings } from "./sst-settings" import { BetaTag } from "@/components/Common/Beta" import { getDefaultOcrLanguage, ocrLanguages } from "@/data/ocr-language" import { ThemeSwitcher } from "./theme-switcher" +import { BackgroundSwitcher } from "./background-switcher" export const GeneralSettings = () => { const [userChatBubble, setUserChatBubble] = useStorage("userChatBubble", true) @@ -373,6 +374,7 @@ export const GeneralSettings = () => {
+ @@ -406,7 +406,7 @@ export const PlaygroundMessage = (props: Props) => { @@ -417,7 +417,7 @@ export const PlaygroundMessage = (props: Props) => { @@ -428,7 +428,7 @@ export const PlaygroundMessage = (props: Props) => { @@ -440,7 +440,7 @@ export const PlaygroundMessage = (props: Props) => { @@ -449,7 +449,7 @@ export const PlaygroundMessage = (props: Props) => { ) : ( // add invisible div to prevent layout shift
-
+
)}
diff --git a/src/components/Common/Playground/PlaygroundUserMessage.tsx b/src/components/Common/Playground/PlaygroundUserMessage.tsx index 4192217b7..143760154 100644 --- a/src/components/Common/Playground/PlaygroundUserMessage.tsx +++ b/src/components/Common/Playground/PlaygroundUserMessage.tsx @@ -96,7 +96,7 @@ export const PlaygroundUserMessageBubble: React.FC = (props) => {
@@ -161,7 +161,7 @@ export const PlaygroundUserMessageBubble: React.FC = (props) => { }) } }} - className="flex items-center justify-center w-6 h-6 rounded-full bg-surface-100 dark:bg-[#242424] hover:bg-surface-200 dark:hover:bg-surface-700 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"> + className="flex items-center justify-center w-6 h-6 rounded-full bg-surface-100 dark:bg-surface-900 hover:bg-surface-200 dark:hover:bg-surface-700 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"> {!isSpeaking ? ( ) : ( @@ -181,7 +181,7 @@ export const PlaygroundUserMessageBubble: React.FC = (props) => { setIsBtnPressed(false) }, 2000) }} - className="flex items-center justify-center w-6 h-6 rounded-full bg-surface-50 dark:bg-[#242424] hover:bg-surface-200 dark:hover:bg-surface-700 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"> + className="flex items-center justify-center w-6 h-6 rounded-full bg-surface-50 dark:bg-surface-900 hover:bg-surface-200 dark:hover:bg-surface-700 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"> {!isBtnPressed ? ( ) : ( @@ -196,7 +196,7 @@ export const PlaygroundUserMessageBubble: React.FC = (props) => { @@ -205,7 +205,7 @@ export const PlaygroundUserMessageBubble: React.FC = (props) => { ) : ( // add invisible div to prevent layout shift
-
+
)}
diff --git a/src/components/Option/Sidebar.tsx b/src/components/Option/Sidebar.tsx index 240ce12c6..430107713 100644 --- a/src/components/Option/Sidebar.tsx +++ b/src/components/Option/Sidebar.tsx @@ -389,7 +389,7 @@ export const Sidebar = ({ className={`flex py-2 px-2 items-center gap-3 relative rounded-md truncate hover:pr-4 group transition-opacity duration-300 ease-in-out border ${ historyId === chat.id ? "bg-surface-200 dark:bg-[#454242] border-gray-400 dark:border-gray-600 text-gray-900 dark:text-gray-100" - : "bg-surface-50 dark:bg-[#242424] dark:text-gray-100 text-gray-800 border-gray-300 dark:border-[#404040] hover:bg-surface-200 dark:hover:bg-surface-800" + : "bg-surface-50 dark:bg-surface-900 dark:text-gray-100 text-gray-800 border-gray-300 dark:border-[#404040] hover:bg-surface-200 dark:hover:bg-surface-800" }`}> {chat?.message_source === "copilot" && ( From 58d4e93bca01b625904637b5b61e5ed4d26bb6ce Mon Sep 17 00:00:00 2001 From: Thomas Nordentoft Date: Mon, 6 Oct 2025 16:55:13 +0200 Subject: [PATCH 11/11] Add a plain background option --- src/assets/backgrounds/plain.svg | 1 + .../Option/Settings/background-switcher.tsx | 1 + src/hooks/useTheme.tsx | 17 +++++++++++++++-- src/store/theme.tsx | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 src/assets/backgrounds/plain.svg diff --git a/src/assets/backgrounds/plain.svg b/src/assets/backgrounds/plain.svg new file mode 100644 index 000000000..16a8cf0d5 --- /dev/null +++ b/src/assets/backgrounds/plain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Option/Settings/background-switcher.tsx b/src/components/Option/Settings/background-switcher.tsx index 00a87cb49..3232b35e8 100644 --- a/src/components/Option/Settings/background-switcher.tsx +++ b/src/components/Option/Settings/background-switcher.tsx @@ -16,6 +16,7 @@ export function BackgroundSwitcher({ className }: { className?: string }) { style={{ width: 160 }} className={`${className}`} > + diff --git a/src/hooks/useTheme.tsx b/src/hooks/useTheme.tsx index 63a9371d4..aff730265 100644 --- a/src/hooks/useTheme.tsx +++ b/src/hooks/useTheme.tsx @@ -3,6 +3,7 @@ import { useEffect } from "react" import { themes } from "@/assets/colors" import { useThemeStore } from "@/store/theme" import { TinyColor } from '@ctrl/tinycolor'; +import plainSVG from "@/assets/backgrounds/plain.svg?raw"; import layeredWavesSVG from "@/assets/backgrounds/layered-waves.svg?raw"; import blurryGradientSVG from "@/assets/backgrounds/blurry-gradient.svg?raw"; import blobSceneSVG from "@/assets/backgrounds/blob-scene.svg?raw"; @@ -10,7 +11,7 @@ import blobSceneSVG from "@/assets/backgrounds/blob-scene.svg?raw"; import { useDarkMode } from "./useDarkmode"; -export type BackgroundType = "blurryGradient" | "layeredWaves" | "blobScene" +export type BackgroundType = "plain" | "blurryGradient" | "layeredWaves" | "blobScene" export function useTheme() { const themeName = useThemeStore((state) => state.themeName) @@ -32,6 +33,15 @@ export function useTheme() { }); }, [themeName]); + const generatePlain = () : string => { + const svgText = plainSVG + + const customizedSVG = svgText + .replace(/{{color1}}/g, themes[themeName].surface[mode == "dark" ? 900: 200]) + + return customizedSVG + } + const generateLayeredWaves = () : string => { const svgText = layeredWavesSVG @@ -94,8 +104,11 @@ export function useTheme() { case "blobScene": customizedSVG = generateBlobScene(); break; + case "plain": + customizedSVG = generatePlain(); + break; default: - customizedSVG = generateLayeredWaves(); + customizedSVG = generatePlain(); break; } return svgToDataURI(customizedSVG); diff --git a/src/store/theme.tsx b/src/store/theme.tsx index c24c14028..55eeebaf3 100644 --- a/src/store/theme.tsx +++ b/src/store/theme.tsx @@ -1,7 +1,7 @@ import { create } from "zustand"; import { Theme } from "@/assets/colors"; import { BackgroundType } from "@/hooks/useTheme"; -export const backgroundTypes: BackgroundType[] = ["blurryGradient", "layeredWaves", "blobScene"] +export const backgroundTypes: BackgroundType[] = ["plain", "blurryGradient", "layeredWaves", "blobScene"] interface ThemeState { themeName: Theme; @@ -17,7 +17,7 @@ const getInitialTheme = (): Theme => { const getInitialBackground = (): BackgroundType => { const saved = localStorage.getItem("backgroundName") as BackgroundType | null; - return saved && backgroundTypes.includes(saved) ? saved : "layeredWaves"; + return saved && backgroundTypes.includes(saved) ? saved : "plain"; }; export const useThemeStore = create((set) => ({