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 () {
return this.$store.state.interface.themeApplied
},
layoutModalClass () {
return '-' + this.layoutType
},
classes () {
return [
{

View file

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

View file

@ -168,6 +168,25 @@ const updatePalette = (paletteKey, value) => {
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>

View file

@ -10,31 +10,33 @@
<slot />
</label>
{{ ' ' }}
<input
:id="path"
class="input number-input"
type="number"
:step="step"
:disabled="disabled"
:min="min || 0"
: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"
<span class="no-break">
<input
:id="path"
class="input number-input"
type="number"
:step="step"
:disabled="disabled"
:min="min || 0"
:value="stateValue"
@change="updateValue"
>
{{ getUnitString(option) }}
</option>
</Select>
<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) }}
</option>
</Select>
</span>
{{ ' ' }}
<ModifiedIndicator
:changed="isChanged"
@ -47,6 +49,10 @@
<style lang="scss">
.UnitSetting {
.no-break {
display: inline-block;
}
.number-input {
max-width: 6.5em;
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 {
.settings-modal-panel {
/* Explanation:

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -35,9 +35,11 @@
.palette-entry {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 0.5em;
> label {
flex: 1 0 auto;
.palette-label label {
text-align: center;
}
.palette-square {
@ -60,6 +62,26 @@
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 {
list-style: none;
display: flex;

View file

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

View file

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

View file

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