174 lines
5.7 KiB
TypeScript
174 lines
5.7 KiB
TypeScript
import { get } from "svelte/store";
|
|
import { DataBase, setDatabase } from "../storage/database";
|
|
import { cloneDeep } from "lodash";
|
|
|
|
export interface ColorScheme{
|
|
bgcolor: string;
|
|
darkbg: string;
|
|
borderc: string;
|
|
selected: string;
|
|
draculared: string;
|
|
textcolor: string;
|
|
textcolor2: string;
|
|
darkBorderc: string;
|
|
darkbutton: string;
|
|
type:'light'|'dark';
|
|
}
|
|
|
|
|
|
export const defaultColorScheme: ColorScheme = {
|
|
bgcolor: "#282a36",
|
|
darkbg: "#21222c",
|
|
borderc: "#6272a4",
|
|
selected: "#44475a",
|
|
draculared: "#ff5555",
|
|
textcolor: "#f8f8f2",
|
|
textcolor2: "#64748b",
|
|
darkBorderc: "#4b5563",
|
|
darkbutton: "#374151",
|
|
type:'dark'
|
|
}
|
|
|
|
const colorShemes = {
|
|
"default": defaultColorScheme,
|
|
"light": {
|
|
bgcolor: "#f0f0f0",
|
|
darkbg: "#ffffff",
|
|
borderc: "#0f172a",
|
|
selected: "#e0e0e0",
|
|
draculared: "#ff5555",
|
|
textcolor: "#0f172a",
|
|
textcolor2: "#64748b",
|
|
darkBorderc: "#d1d5db",
|
|
darkbutton: "#e5e7eb",
|
|
type:'light'
|
|
},
|
|
"cherry": {
|
|
bgcolor: "#450a0a",
|
|
darkbg: "#7f1d1d",
|
|
borderc: "#ea580c",
|
|
selected: "#d97706",
|
|
draculared: "#ff5555",
|
|
textcolor: "#f8f8f2",
|
|
textcolor2: "#fca5a5",
|
|
darkBorderc: "#92400e",
|
|
darkbutton: "#b45309",
|
|
type:'dark'
|
|
},
|
|
"galaxy": {
|
|
bgcolor: "#0f172a",
|
|
darkbg: "#1f2a48",
|
|
borderc: "#8be9fd",
|
|
selected: "#457b9d",
|
|
draculared: "#ff5555",
|
|
textcolor: "#f8f8f2",
|
|
textcolor2: "#8be9fd",
|
|
darkBorderc: "#457b9d",
|
|
darkbutton: "#1f2a48",
|
|
type:'dark'
|
|
},
|
|
"nature": {
|
|
bgcolor: "#1b4332",
|
|
darkbg: "#2d6a4f",
|
|
borderc: "#a8dadc",
|
|
selected: "#4d908e",
|
|
draculared: "#ff5555",
|
|
textcolor: "#f8f8f2",
|
|
textcolor2: "#4d908e",
|
|
darkBorderc: "#457b9d",
|
|
darkbutton: "#2d6a4f",
|
|
type:'dark'
|
|
},
|
|
"realblack": {
|
|
bgcolor: "#000000",
|
|
darkbg: "#000000",
|
|
borderc: "#6272a4",
|
|
selected: "#44475a",
|
|
draculared: "#ff5555",
|
|
textcolor: "#f8f8f2",
|
|
textcolor2: "#64748b",
|
|
darkBorderc: "#4b5563",
|
|
darkbutton: "#374151",
|
|
type:'dark'
|
|
}
|
|
|
|
} as const
|
|
|
|
export const colorSchemeList = Object.keys(colorShemes) as (keyof typeof colorShemes)[]
|
|
|
|
export function changeColorScheme(colorScheme: string){
|
|
let db = get(DataBase)
|
|
if(colorScheme !== 'custom'){
|
|
db.colorScheme = cloneDeep(colorShemes[colorScheme])
|
|
}
|
|
db.colorSchemeName = colorScheme
|
|
setDatabase(db)
|
|
updateColorScheme()
|
|
}
|
|
|
|
export function updateColorScheme(){
|
|
let db = get(DataBase)
|
|
|
|
let colorScheme = db.colorScheme
|
|
|
|
if(colorScheme == null){
|
|
colorScheme = defaultColorScheme
|
|
}
|
|
|
|
//set css variables
|
|
document.documentElement.style.setProperty("--risu-theme-bgcolor", colorScheme.bgcolor);
|
|
document.documentElement.style.setProperty("--risu-theme-darkbg", colorScheme.darkbg);
|
|
document.documentElement.style.setProperty("--risu-theme-borderc", colorScheme.borderc);
|
|
document.documentElement.style.setProperty("--risu-theme-selected", colorScheme.selected);
|
|
document.documentElement.style.setProperty("--risu-theme-draculared", colorScheme.draculared);
|
|
document.documentElement.style.setProperty("--risu-theme-textcolor", colorScheme.textcolor);
|
|
document.documentElement.style.setProperty("--risu-theme-textcolor2", colorScheme.textcolor2);
|
|
document.documentElement.style.setProperty("--risu-theme-darkborderc", colorScheme.darkBorderc);
|
|
document.documentElement.style.setProperty("--risu-theme-darkbutton", colorScheme.darkbutton);
|
|
}
|
|
|
|
export function updateTextTheme(){
|
|
let db = get(DataBase)
|
|
const root = document.querySelector(':root') as HTMLElement;
|
|
if(!root){
|
|
return
|
|
}
|
|
switch(db.textTheme){
|
|
case "standard":{
|
|
if(db.colorScheme.type === 'dark'){
|
|
root.style.setProperty('--FontColorStandard', '#fafafa');
|
|
root.style.setProperty('--FontColorItalic', '#8C8D93');
|
|
root.style.setProperty('--FontColorBold', '#fafafa');
|
|
root.style.setProperty('--FontColorItalicBold', '#8C8D93');
|
|
}else{
|
|
root.style.setProperty('--FontColorStandard', '#0f172a');
|
|
root.style.setProperty('--FontColorItalic', '#8C8D93');
|
|
root.style.setProperty('--FontColorBold', '#0f172a');
|
|
root.style.setProperty('--FontColorItalicBold', '#8C8D93');
|
|
}
|
|
break
|
|
}
|
|
case "highcontrast":{
|
|
if(db.colorScheme.type === 'dark'){
|
|
root.style.setProperty('--FontColorStandard', '#f8f8f2');
|
|
root.style.setProperty('--FontColorItalic', '#eab308');
|
|
root.style.setProperty('--FontColorBold', '#8BE9FD');
|
|
root.style.setProperty('--FontColorItalicBold', '#FFB86C');
|
|
}
|
|
else{
|
|
root.style.setProperty('--FontColorStandard', '#0f172a');
|
|
root.style.setProperty('--FontColorItalic', '#F1FA8C');
|
|
root.style.setProperty('--FontColorBold', '#8BE9FD');
|
|
root.style.setProperty('--FontColorItalicBold', '#FFB86C');
|
|
}
|
|
break
|
|
}
|
|
case "custom":{
|
|
root.style.setProperty('--FontColorStandard', db.customTextTheme.FontColorStandard);
|
|
root.style.setProperty('--FontColorItalic', db.customTextTheme.FontColorItalic);
|
|
root.style.setProperty('--FontColorBold', db.customTextTheme.FontColorBold);
|
|
root.style.setProperty('--FontColorItalicBold', db.customTextTheme.FontColorItalicBold);
|
|
break
|
|
}
|
|
}
|
|
} |