Compare commits

...

3 commits

Author SHA1 Message Date
Henry Jameson
d647cd82d1 Merge branch 'themes3-grand-finale-maybe' into shigusegubu-themes3 2024-10-06 01:49:46 +03:00
Henry Jameson
bae4836349 palettes editor done 2024-10-06 01:16:24 +03:00
Henry Jameson
3f55c08693 work on palette editor 2024-10-06 00:51:02 +03:00
5 changed files with 117 additions and 61 deletions

View file

@ -1,31 +1,27 @@
<template> <template>
<div class="PaletteEditor"> <div class="PaletteEditor">
<div class="colors"> <ColorInput
<ColorInput v-for="key in paletteKeys"
v-for="key in paletteKeys" :key="key"
:key="key" :model-value="props.modelValue[key]"
:model-value="props.modelValue[key]" :fallback="fallback(key)"
:fallback="fallback(key)" :label="$t('settings.style.themes3.palette.' + key)"
:label="$t('settings.style.themes3.palette.' + key)" @update:modelValue="value => updatePalette(key, value)"
@update:modelValue="value => updatePalette(key, value)" />
/> <button
</div> class="btn button-default palette-import-button"
<div class="controls"> @click="importPalette"
<button >
class="btn button-default" <FAIcon icon="file-import" />
@click="importPalette" {{ $t('settings.style.themes3.palette.import') }}
> </button>
<FAIcon icon="file-import" /> <button
{{ $t('settings.style.themes3.palette.import') }} class="btn button-default palette-export-button"
</button> @click="exportPalette"
<button >
class="btn button-default" <FAIcon icon="file-export" />
@click="exportPalette" {{ $t('settings.style.themes3.palette.export') }}
> </button>
<FAIcon icon="file-export" />
{{ $t('settings.style.themes3.palette.export') }}
</button>
</div>
</div> </div>
</template> </template>
@ -106,18 +102,23 @@ const updatePalette = (paletteKey, value) => {
<style lang="scss"> <style lang="scss">
.PaletteEditor { .PaletteEditor {
.colors { display: grid;
display: grid; justify-content: space-around;
justify-content: space-around; grid-template-columns: repeat(4, 1fr);
grid-template-columns: repeat(4, min-content); grid-template-rows: repeat(3, 1fr) auto;
grid-template-rows: repeat(auto-fit, min-content); grid-gap: 0.5em;
grid-gap: 0.5em; align-items: space-between;
.palette-import-button {
grid-column: 1 / span 2;
} }
.controls { .palette-export-button {
display: grid; grid-column: 3 / span 2;
grid-template-columns: 1fr 1fr; }
grid-gap: 0.5em;
.color-input.style-control {
margin: 0;
} }
} }
</style> </style>

View file

@ -2,6 +2,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { get, set } from 'lodash' import { get, set } from 'lodash'
import Select from 'src/components/select/select.vue' import Select from 'src/components/select/select.vue'
import SelectMotion from 'src/components/select/select_motion.vue'
import Checkbox from 'src/components/checkbox/checkbox.vue' import Checkbox from 'src/components/checkbox/checkbox.vue'
import ComponentPreview from 'src/components/component_preview/component_preview.vue' import ComponentPreview from 'src/components/component_preview/component_preview.vue'
import StringSetting from '../../helpers/string_setting.vue' import StringSetting from '../../helpers/string_setting.vue'
@ -42,6 +43,7 @@ library.add(
export default { export default {
components: { components: {
Select, Select,
SelectMotion,
Checkbox, Checkbox,
Tooltip, Tooltip,
StringSetting, StringSetting,
@ -70,8 +72,9 @@ export default {
}) })
// ### Palette stuff // ### Palette stuff
const palettes = reactive({ const palettes = reactive([
light: { {
name: 'light',
bg: '#f2f6f9', bg: '#f2f6f9',
fg: '#d6dfed', fg: '#d6dfed',
text: '#304055', text: '#304055',
@ -83,7 +86,8 @@ export default {
cOrange: '#ffa500', cOrange: '#ffa500',
border: '#d8e6f9' border: '#d8e6f9'
}, },
dark: { {
name: 'dark',
bg: '#121a24', bg: '#121a24',
fg: '#182230', fg: '#182230',
text: '#b9b9ba', text: '#b9b9ba',
@ -94,10 +98,11 @@ export default {
cGreen: '#0fa00f', cGreen: '#0fa00f',
cOrange: '#ffa500' cOrange: '#ffa500'
} }
}) ])
const palettesOut = computed(() => { const palettesOut = computed(() => {
return Object.entries(palettes).map(([name, palette]) => { console.log('WORK DAMN', palettes)
return palettes.map(({ name, ...palette }) => {
const entries = Object const entries = Object
.entries(palette) .entries(palette)
.map(([slot, data]) => ` ${slot}: ${data};`) .map(([slot, data]) => ` ${slot}: ${data};`)
@ -107,9 +112,10 @@ export default {
}).join('\n\n') }).join('\n\n')
}) })
const editedPalette = ref('dark') const editedPalette = ref(0)
const palette = computed({ const palette = computed({
get () { get () {
console.log(palettes, editedPalette.value)
return palettes[editedPalette.value] return palettes[editedPalette.value]
}, },
set (newPalette) { set (newPalette) {
@ -117,6 +123,19 @@ export default {
} }
}) })
const getNewPalette = () => ({
name: 'new palette',
bg: '#121a24',
fg: '#182230',
text: '#b9b9ba',
link: '#d8a070',
accent: '#d8a070',
cRed: '#FF0000',
cBlue: '#0095ff',
cGreen: '#0fa00f',
cOrange: '#ffa500'
})
// ### I18n stuff // ### I18n stuff
// The paths in i18n are getting ridicously long, this effectively shortens them // The paths in i18n are getting ridicously long, this effectively shortens them
const getI18nPath = (componentName) => `settings.style.themes3.editor.components.${componentName}` const getI18nPath = (componentName) => `settings.style.themes3.editor.components.${componentName}`
@ -420,10 +439,12 @@ export default {
const updatePreview = () => { const updatePreview = () => {
try { try {
const { name, ...paletteData } = palette.value
console.log('WORK', paletteData)
const rules = init({ const rules = init({
inputRuleset: editorFriendlyToOriginal.value, inputRuleset: editorFriendlyToOriginal.value,
initialStaticVars: { initialStaticVars: {
...palette.value ...paletteData
}, },
ultimateBackgroundColor: '#000000', ultimateBackgroundColor: '#000000',
rootComponentName: selectedComponentName.value, rootComponentName: selectedComponentName.value,
@ -514,7 +535,9 @@ export default {
license, license,
website, website,
palette, palette,
palettes,
editedPalette, editedPalette,
getNewPalette,
componentKeys, componentKeys,
componentsMap, componentsMap,
selectedComponent, selectedComponent,

View file

@ -88,9 +88,35 @@
} }
.palette-editor { .palette-editor {
> .label:not(.Select) { display: grid;
font-weight: bold; grid-template-areas:
justify-self: right; "label editor"
"selector editor"
"motion editor";
grid-template-columns: auto 1fr;
grid-template-rows: auto 1fr auto;
grid-gap: 0.5em;
.palette-editor-edit {
grid-area: editor;
}
.palette-selector {
&-label {
font-weight: bold;
grid-area: label;
margin: 0;
}
}
.palette-list {
grid-area: selector;
margin: 0;
&-movement {
grid-area: motion;
margin: 0;
}
} }
} }

View file

@ -260,30 +260,38 @@
:label="$t('settings.style.themes3.editor.palette_tab')" :label="$t('settings.style.themes3.editor.palette_tab')"
class="setting-item palette-editor" class="setting-item palette-editor"
> >
<div class="label"> <label
<label for="palette-selector"> class="palette-selector-label"
for="palette-selector"
>
{{ $t('settings.style.themes3.palette.label') }} {{ $t('settings.style.themes3.palette.label') }}
{{ ' ' }} {{ ' ' }}
</label> </label>
<Select <Select
id="palette-selector" id="palette-selector"
v-model="editedPalette" v-model="editedPalette"
class="palette-list"
size="9"
> >
<option <option
key="dark" v-for="(p, index) in palettes"
value="dark" :key="p.name"
:value="index"
> >
{{ $t('settings.style.themes3.palette.dark') }} {{ p.name }}
</option>
<option
key="light"
value="light"
>
{{ $t('settings.style.themes3.palette.light') }}
</option> </option>
</Select> </Select>
</div> <SelectMotion
<PaletteEditor v-model="palette" /> class="palette-list-movement"
v-model="palettes"
:selected-id="editedPalette"
:get-add-value="getNewPalette"
@update:selectedId="e => editedPalette = e"
/>
<PaletteEditor
class="palette-editor-edit"
v-model="palette"
/>
</div> </div>
</tab-switcher> </tab-switcher>
</div> </div>

View file

@ -760,8 +760,6 @@
"label": "Palette", "label": "Palette",
"import": "Import", "import": "Import",
"export": "Export", "export": "Export",
"dark": "Dark mode",
"light": "Light mode",
"bg": "Panel background", "bg": "Panel background",
"fg": "Buttons etc.", "fg": "Buttons etc.",
"text": "Text", "text": "Text",