Compare commits

...

9 commits

Author SHA1 Message Date
Henry Jameson
a0e12cabc6 Merge branch 'themes3-grand-finale-maybe' into shigusegubu-themes3 2024-12-01 22:26:52 +02:00
Henry Jameson
51b62be34d better settings on mobile 2024-12-01 22:26:36 +02:00
Henry Jameson
13c482ea2a hide style tab on mobile 2024-12-01 22:26:36 +02:00
Henry Jameson
098087a722 mobile-friendly appearance tab 2024-12-01 22:16:21 +02:00
Henry Jameson
90b2efc6f7 better select-multiple 2024-12-01 22:15:15 +02:00
Henry Jameson
7be1ab53ec scratch that, just a smaller absolute value 2024-12-01 22:15:15 +02:00
Henry Jameson
7b0f72601b use relative value so it's more usable on mobile 2024-12-01 21:36:58 +02:00
Henry Jameson
bd644a7d52 update breezy theme 2024-12-01 21:34:17 +02:00
Henry Jameson
0e1c1b04a0 fix palette editor in appearace tab + make it expert 2024-12-01 21:33:24 +02:00
14 changed files with 175 additions and 74 deletions

View file

@ -67,6 +67,9 @@ export default {
themeApplied () { themeApplied () {
return this.$store.state.interface.themeApplied return this.$store.state.interface.themeApplied
}, },
layoutModalClass () {
return '-' + this.layoutType
},
classes () { classes () {
return [ return [
{ {

View file

@ -70,7 +70,7 @@
<PostStatusModal /> <PostStatusModal />
<EditStatusModal v-if="editingAvailable" /> <EditStatusModal v-if="editingAvailable" />
<StatusHistoryModal v-if="editingAvailable" /> <StatusHistoryModal v-if="editingAvailable" />
<SettingsModal /> <SettingsModal :class="layoutModalClass"/>
<UpdateNotification /> <UpdateNotification />
<GlobalNoticeList /> <GlobalNoticeList />
</div> </div>

View file

@ -168,6 +168,25 @@ const updatePalette = (paletteKey, value) => {
grid-column: 1 / span 2; grid-column: 1 / span 2;
} }
} }
.-mobile & {
grid-template-columns: 1fr;
grid-template-rows: repeat(10, 1fr) auto;
.palette-import-button {
grid-column: 1;
}
.palette-export-button {
grid-column: 1;
}
&.-apply {
.palette-apply-button {
grid-column: 1;
}
}
}
} }
} }
</style> </style>

View file

@ -10,31 +10,33 @@
<slot /> <slot />
</label> </label>
{{ ' ' }} {{ ' ' }}
<input <span class="no-break">
:id="path" <input
class="input number-input" :id="path"
type="number" class="input number-input"
:step="step" type="number"
:disabled="disabled" :step="step"
:min="min || 0" :disabled="disabled"
:value="stateValue" :min="min || 0"
@change="updateValue" :value="stateValue"
> @change="updateValue"
<Select
:id="path"
:model-value="stateUnit"
:disabled="disabled"
class="unit-input unstyled"
@change="updateUnit"
>
<option
v-for="option in units"
:key="option"
:value="option"
> >
{{ getUnitString(option) }} <Select
</option> :id="path"
</Select> :model-value="stateUnit"
:disabled="disabled"
class="unit-input unstyled"
@change="updateUnit"
>
<option
v-for="option in units"
:key="option"
:value="option"
>
{{ getUnitString(option) }}
</option>
</Select>
</span>
{{ ' ' }} {{ ' ' }}
<ModifiedIndicator <ModifiedIndicator
:changed="isChanged" :changed="isChanged"
@ -47,6 +49,10 @@
<style lang="scss"> <style lang="scss">
.UnitSetting { .UnitSetting {
.no-break {
display: inline-block;
}
.number-input { .number-input {
max-width: 6.5em; max-width: 6.5em;
text-align: right; text-align: right;

View file

@ -76,6 +76,23 @@
} }
} }
&.-mobile {
.setting-list,
.option-list {
padding-left: 0.25em;
> li {
margin: 1em 0;
line-height: 1.5em;
vertical-align: center;
}
&.two-column {
column-count: 1;
}
}
}
&.peek { &.peek {
.settings-modal-panel { .settings-modal-panel {
/* Explanation: /* Explanation:

View file

@ -17,10 +17,13 @@
} }
.select-multiple { .select-multiple {
margin-top: 0.5em;
display: flex; display: flex;
flex-direction: column;
.option-list { .option-list {
margin: 0; margin: 0;
margin-top: 0.5em;
padding-left: 0.5em; padding-left: 0.5em;
} }
} }

View file

@ -67,6 +67,9 @@ const SettingsModalContent = {
}, },
expertLevel () { expertLevel () {
return this.$store.state.config.expertLevel return this.$store.state.config.expertLevel
},
isMobileLayout () {
return this.$store.state.interface.layoutType === 'mobile'
} }
}, },
methods: { methods: {

View file

@ -31,10 +31,13 @@
} }
.select-multiple { .select-multiple {
margin-top: 1em;
display: flex; display: flex;
flex-direction: column;
.option-list { .option-list {
margin: 0; margin: 0;
margin-top: 0.5em;
padding-left: 0.5em; padding-left: 0.5em;
} }
} }

View file

@ -21,6 +21,7 @@
<AppearanceTab /> <AppearanceTab />
</div> </div>
<div <div
v-if="expertLevel > 0 && !isMobileLayout"
:label="$t('settings.style.themes3.editor.title')" :label="$t('settings.style.themes3.editor.title')"
icon="palette" icon="palette"
data-tab-name="style" data-tab-name="style"
@ -28,7 +29,7 @@
<StyleTab /> <StyleTab />
</div> </div>
<div <div
v-if="expertLevel > 0" v-if="expertLevel > 0 && !isMobileLayout"
:label="$t('settings.theme_old')" :label="$t('settings.theme_old')"
icon="paint-brush" icon="paint-brush"
data-tab-name="theme" data-tab-name="theme"

View file

@ -119,6 +119,8 @@ const AppearanceTab = {
})) }))
}) })
this.userPalette = this.$store.state.interface.paletteDataUsed || {}
updateIndex('palette').then(bundledPalettes => { updateIndex('palette').then(bundledPalettes => {
bundledPalettes.forEach(([key, palettePromise]) => palettePromise.then(v => { bundledPalettes.forEach(([key, palettePromise]) => palettePromise.then(v => {
let palette let palette
@ -140,10 +142,6 @@ const AppearanceTab = {
palette = { key, ...v } palette = { key, ...v }
} }
this.bundledPalettes.push(palette) this.bundledPalettes.push(palette)
if (this.isPaletteActive(key)) {
this.userPalette = palette
}
})) }))
}) })
@ -169,7 +167,15 @@ const AppearanceTab = {
}) })
}) })
}, },
watch: {
paletteDataUsed () {
this.userPalette = this.paletteDataUsed || {}
}
},
computed: { computed: {
paletteDataUsed () {
return this.$store.state.interface.paletteDataUsed
},
availableStyles () { availableStyles () {
return [ return [
...this.availableThemesV3, ...this.availableThemesV3,
@ -184,11 +190,6 @@ const AppearanceTab = {
}, },
stylePalettes () { stylePalettes () {
const ruleset = this.$store.state.interface.styleDataUsed || [] const ruleset = this.$store.state.interface.styleDataUsed || []
console.log(
'ASR',
this.$store.state.interface.paletteDataUsed,
this.$store.state.interface.styleDataUsed
)
if (!ruleset && ruleset.length === 0) return if (!ruleset && ruleset.length === 0) return
const meta = ruleset.find(x => x.component === '@meta') const meta = ruleset.find(x => x.component === '@meta')
const result = ruleset.filter(x => x.component.startsWith('@palette')) const result = ruleset.filter(x => x.component.startsWith('@palette'))

View file

@ -35,9 +35,11 @@
.palette-entry { .palette-entry {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
padding: 0 0.5em;
> label { .palette-label label {
flex: 1 0 auto; text-align: center;
} }
.palette-square { .palette-square {
@ -60,6 +62,26 @@
margin-top: 0.5em; margin-top: 0.5em;
} }
.modal-view.-mobile & {
.palette-entry {
flex-wrap: wrap;
justify-content: center;
}
.palette-label {
line-height: 1.5em;
margin-top: 0.5em;
width: 100%;
}
.palette-preview {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 1em 1em;
margin-bottom: 0.5em;
}
}
.theme-list { .theme-list {
list-style: none; list-style: none;
display: flex; display: flex;

View file

@ -93,15 +93,19 @@
:class="{ toggled: isPaletteActive(p.key) }" :class="{ toggled: isPaletteActive(p.key) }"
@click="() => setPalette(p.key, p)" @click="() => setPalette(p.key, p)"
> >
<label> <div class="palette-label">
{{ p.name }} <label>
</label> {{ p.name }}
<span </label>
v-for="c in palettesKeys" </div>
:key="c" <div class="palette-preview">
class="palette-square" <span
:style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" v-for="c in palettesKeys"
/> :key="c"
class="palette-square"
:style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }"
/>
</div>
</button> </button>
<h4 v-if="stylePalettes?.length > 0"> <h4 v-if="stylePalettes?.length > 0">
{{ $t('settings.style.themes3.palette.style') }} {{ $t('settings.style.themes3.palette.style') }}
@ -113,20 +117,25 @@
:class="{ toggled: isPaletteActive(p.key) }" :class="{ toggled: isPaletteActive(p.key) }"
@click="() => setPaletteCustom(p)" @click="() => setPaletteCustom(p)"
> >
<label> <div class="palette-label">
{{ p.name ?? $t('settings.style.themes3.palette.user') }} <label>
</label> {{ p.name ?? $t('settings.style.themes3.palette.user') }}
<span </label>
v-for="c in palettesKeys" </div>
:key="c" <div class="palette-preview">
class="palette-square" <span
:style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" v-for="c in palettesKeys"
/> :key="c"
class="palette-square"
:style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }"
/>
</div>
</button> </button>
<h4> <h4 v-if="expertLevel > 0">
{{ $t('settings.style.themes3.palette.user') }} {{ $t('settings.style.themes3.palette.user') }}
</h4> </h4>
<PaletteEditor <PaletteEditor
v-if="expertLevel > 0"
class="userPalette" class="userPalette"
v-model="userPalette" v-model="userPalette"
:compact="true" :compact="true"

View file

@ -139,6 +139,11 @@
margin-right: calc(0.25em - 200px); margin-right: calc(0.25em - 200px);
margin-left: 0.25em; margin-left: 0.25em;
&:not(.active) {
margin-top: 0;
margin-left: 0.5em;
}
.text { .text {
display: none; display: none;
} }

View file

@ -6,28 +6,29 @@
} }
@palette.Dark { @palette.Dark {
bg: #121a24; bg: #292C32;
fg: #182230; fg: #292C32;
text: #b9b9ba; text: #ffffff;
link: #d8a070; link: #1CA4F3;
accent: #d8a070; accent: #1CA4F3;
cRed: #FF0000; cRed: #f41a51;
cBlue: #0095ff; cBlue: #1CA4F3;
cGreen: #0fa00f; cGreen: #1af46e;
cOrange: #ffa500; cOrange: #f4af1a;
} }
@palette.Light { @palette.Light {
bg: #f2f6f9; bg: #EFF0F2;
fg: #d6dfed; fg: #EFF0F2;
text: #304055; text: #1B1F22;
underlay: #5d6086; underlay: #5d6086;
accent: #f55b1b; accent: #1CA4F3;
cBlue: #0095ff; cBlue: #1CA4F3;
cRed: #d31014; cRed: #f41a51;
cGreen: #0fa00f; cGreen: #1af46e;
cOrange: #ffa500; cOrange: #f4af1a;
border: #d8e6f9; border: #d8e6f9;
link: #1CA4F3;
} }
Root { Root {
@ -36,7 +37,7 @@ Root {
--buttonDefaultFocusGlow: shadow | inset 0 0 0 1 --accent / 1; --buttonDefaultFocusGlow: shadow | inset 0 0 0 1 --accent / 1;
--buttonDefaultShadow: shadow | inset 0 0 0 1 --text / 0.35, 0 5 5 -5 #000000 / 0.35; --buttonDefaultShadow: shadow | inset 0 0 0 1 --text / 0.35, 0 5 5 -5 #000000 / 0.35;
--buttonDefaultBevel: shadow | inset 0 14 14 -14 #FFFFFF / 0.1; --buttonDefaultBevel: shadow | inset 0 14 14 -14 #FFFFFF / 0.1;
--buttonPressedBevel: shadow | inset 0 -20 20 -20 #000000 / 0.05, inset 0 20 0 80 --accent / 0.2; --buttonPressedBevel: shadow | inset 0 -20 20 -20 #000000 / 0.05;
--defaultInputBevel: shadow | inset 0 0 0 1 --text / 0.35; --defaultInputBevel: shadow | inset 0 0 0 1 --text / 0.35;
--defaultInputHoverGlow: shadow | 0 0 0 1 --accent / 1; --defaultInputHoverGlow: shadow | 0 0 0 1 --accent / 1;
--defaultInputFocusGlow: shadow | 0 0 0 1 --link / 1; --defaultInputFocusGlow: shadow | 0 0 0 1 --link / 1;
@ -50,6 +51,14 @@ Button:hover {
shadow: --buttonDefaultHoverGlow, --buttonDefaultBevel, --buttonDefaultShadow shadow: --buttonDefaultHoverGlow, --buttonDefaultBevel, --buttonDefaultShadow
} }
Button:toggled {
background: $blend(--bg 0.8 --accent)
}
Button:pressed {
background: $blend(--bg 0.8 --accent)
}
Input { Input {
shadow: --defaultInputBevel shadow: --defaultInputBevel
} }