commit: d2cce990863725634653baf5cda86505e12a6b41
parent d5571216fee0ea9c8b3ad0ff64eb04a019a42997
Author: Henry Jameson <me@hjkos.com>
Date: Sun, 29 Sep 2024 21:14:31 +0300
palette editor done
Diffstat:
5 files changed, 160 insertions(+), 20 deletions(-)
diff --git a/src/components/color_input/color_input.vue b/src/components/color_input/color_input.vue
@@ -15,7 +15,7 @@
:model-value="present"
:disabled="disabled"
class="opt"
- @update:modelValue="update(typeof modelValue === 'undefined' ? fallback : undefined)"
+ @update:modelValue="updateValue(typeof modelValue === 'undefined' ? fallback : undefined)"
/>
<div
class="input color-input-field"
diff --git a/src/components/settings_modal/tabs/style_tab/style_tab.js b/src/components/settings_modal/tabs/style_tab/style_tab.js
@@ -56,21 +56,45 @@ export default {
const license = ref('')
const website = ref('')
- // ### Initialization stuff
- const palette = {
- // These are here just to establish order,
- // themes should override those
- bg: '#121a24',
- fg: '#182230',
- text: '#b9b9ba',
- link: '#d8a070',
- accent: '#d8a070',
- cRed: '#FF0000',
- cBlue: '#0095ff',
- cGreen: '#0fa00f',
- cOrange: '#ffa500'
- }
+ // ### Palette stuff
+ const palettes = reactive({
+ light: {
+ bg: '#f2f6f9',
+ fg: '#d6dfed',
+ text: '#304055',
+ underlay: '#5d6086',
+ accent: '#f55b1b',
+ cBlue: '#0095ff',
+ cRed: '#d31014',
+ cGreen: '#0fa00f',
+ cOrange: '#ffa500',
+ border: '#d8e6f9'
+ },
+ dark: {
+ bg: '#121a24',
+ fg: '#182230',
+ text: '#b9b9ba',
+ link: '#d8a070',
+ accent: '#d8a070',
+ cRed: '#FF0000',
+ cBlue: '#0095ff',
+ cGreen: '#0fa00f',
+ cOrange: '#ffa500'
+ }
+ })
+
+ const editedPalette = ref('dark')
+ const palette = computed({
+ get () {
+ return palettes[editedPalette.value]
+ },
+ set (newPalette) {
+ console.log(newPalette)
+ palettes[editedPalette.value] = newPalette
+ }
+ })
+ // ### I18n stuff
// The paths in i18n are getting ridicously long, this effectively shortens them
const getI18nPath = (componentName) => `settings.style.themes3.editor.components.${componentName}`
const getFriendlyNamePath = (componentName) => getI18nPath(componentName) + '.friendlyName'
@@ -85,6 +109,7 @@ export default {
: `${getI18nPath(componentName)}.states.${state}`
}
+ // ### Initialization stuff
// Getting existing components
const componentsContext = require.context('src', true, /\.style.js(on)?$/)
const componentKeysAll = componentsContext.keys()
@@ -356,7 +381,7 @@ export default {
previewRules.push(...init({
inputRuleset: editorFriendlyToOriginal.value,
initialStaticVars: {
- ...palette
+ ...palette.value
},
ultimateBackgroundColor: '#000000',
rootComponentName: selectedComponentName.value,
@@ -378,6 +403,16 @@ export default {
)
watch(
+ palettes,
+ updatePreview
+ )
+
+ watch(
+ editedPalette,
+ updatePreview
+ )
+
+ watch(
selectedComponentName,
updateSelectedComponent
)
@@ -417,6 +452,8 @@ export default {
author,
license,
website,
+ palette,
+ editedPalette,
componentKeys,
componentsMap,
selectedComponent,
diff --git a/src/components/settings_modal/tabs/style_tab/style_tab.scss b/src/components/settings_modal/tabs/style_tab/style_tab.scss
@@ -9,16 +9,13 @@
margin-right: 0.5em;
flex: 1 1 0;
line-height: 2;
+ min-height: 2em;
}
&.suboption {
margin-left: 1em;
}
- .opt {
- margin: 0.5em;
- }
-
.color-input {
flex: 0 0 0;
}
@@ -90,6 +87,21 @@
}
}
+ .palette-editor {
+ > label:not(.Select) {
+ font-weight: bold;
+ justify-self: right;
+ }
+
+ .colors {
+ display: grid;
+ justify-content: space-around;
+ grid-template-columns: repeat(4, min-content);
+ grid-template-rows: repeat(auto-fit, min-content);
+ grid-gap: 0.5em;
+ }
+ }
+
.component-editor {
display: grid;
grid-template-columns: 6fr 3fr 4fr;
diff --git a/src/components/settings_modal/tabs/style_tab/style_tab.vue b/src/components/settings_modal/tabs/style_tab/style_tab.vue
@@ -51,6 +51,80 @@
</li>
</ul>
</div>
+ <div class="setting-item palette-editor">
+ <div class="label">
+ <label for="palette-selector">
+ {{ $t('settings.style.themes3.editor.palette.label') }}
+ {{ ' ' }}
+ </label>
+ <Select
+ v-model="editedPalette"
+ id="palette-selector"
+ >
+ <option key="dark" value="dark">
+ {{ $t('settings.style.themes3.editor.palette.dark') }}
+ </option>
+ <option key="light" value="light">
+ {{ $t('settings.style.themes3.editor.palette.light') }}
+ </option>
+ </Select>
+ </div>
+ <div class="colors">
+ <ColorInput
+ v-model="palette.bg"
+ :label="$t('settings.style.themes3.editor.palette.bg')"
+ />
+ <ColorInput
+ v-model="palette.fg"
+ :label="$t('settings.style.themes3.editor.palette.fg')"
+ />
+ <ColorInput
+ v-model="palette.text"
+ :label="$t('settings.style.themes3.editor.palette.text')"
+ />
+ <ColorInput
+ v-model="palette.link"
+ :label="$t('settings.style.themes3.editor.palette.link')"
+ :fallback="palette.accent"
+ />
+ <ColorInput
+ v-model="palette.accent"
+ :label="$t('settings.style.themes3.editor.palette.accent')"
+ :fallback="palette.link"
+ />
+ <ColorInput
+ v-model="palette.cRed"
+ :label="$t('settings.style.themes3.editor.palette.cRed')"
+ />
+ <ColorInput
+ v-model="palette.cBlue"
+ :label="$t('settings.style.themes3.editor.palette.cBlue')"
+ />
+ <ColorInput
+ v-model="palette.cGreen"
+ :label="$t('settings.style.themes3.editor.palette.cGreen')"
+ />
+ <ColorInput
+ v-model="palette.cOrange"
+ :label="$t('settings.style.themes3.editor.palette.cOrange')"
+ />
+ <ColorInput
+ v-model="palette.extra1"
+ fallback="#000000"
+ :label="$t('settings.style.themes3.editor.palette.extra1')"
+ />
+ <ColorInput
+ v-model="palette.extra2"
+ fallback="#000000"
+ :label="$t('settings.style.themes3.editor.palette.extra2')"
+ />
+ <ColorInput
+ v-model="palette.extra3"
+ fallback="#000000"
+ :label="$t('settings.style.themes3.editor.palette.extra3')"
+ />
+ </div>
+ </div>
<div class="setting-item component-editor">
<div class="component-selector">
<label for="component-selector">
diff --git a/src/i18n/en.json b/src/i18n/en.json
@@ -778,6 +778,23 @@
"preserve": "Keep color",
"no-auto": "Disabled"
},
+ "palette": {
+ "label": "Edited palette",
+ "dark": "Dark mode",
+ "light": "Light mode",
+ "bg": "Panel background",
+ "fg": "Buttons etc.",
+ "text": "Text",
+ "link": "Links",
+ "accent": "Accent color",
+ "cRed": "Red color",
+ "cBlue": "Blue color",
+ "cGreen": "Green color",
+ "cOrange": "Orange color",
+ "extra1": "Extra 1",
+ "extra2": "Extra 2",
+ "extra3": "Extra 3"
+ },
"components": {
"normal": {
"state": "Normal",