pleroma-fe/src/components/settings_modal/tabs/appearance_tab.vue

392 lines
13 KiB
Vue
Raw Normal View History

<template>
2024-10-02 16:30:07 +03:00
<div
class="appearance-tab"
:label="$t('settings.general')"
>
2024-11-14 17:25:58 +02:00
<div class="setting-item">
2024-07-17 17:19:57 +03:00
<h2>{{ $t('settings.theme') }}</h2>
2024-07-17 19:58:04 +03:00
<ul
ref="themeList"
2024-10-02 16:30:07 +03:00
class="theme-list"
2024-07-17 19:58:04 +03:00
>
2024-10-01 00:42:33 +03:00
<button
class="button-default theme-preview"
data-theme-key="stock"
2024-10-02 16:30:07 +03:00
@click="resetTheming"
:class="{ toggled: isStyleActive('stock'), disabled: switchInProgress }"
:disabled="switchInProgress"
2024-10-01 00:42:33 +03:00
>
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
2024-12-22 15:12:06 +02:00
<!-- eslint-disable vue/no-v-html -->
2024-10-01 00:42:33 +03:00
<component
:is="'style'"
v-html="previewTheme('stock', 'v3')"
2024-10-01 00:42:33 +03:00
/>
2024-12-22 15:12:06 +02:00
<!-- eslint-enable vue/no-v-html -->
2024-10-01 00:42:33 +03:00
<!-- eslint-enable vue/no-v-text-v-html-on-component -->
<preview id="theme-preview-stock" />
2024-10-01 00:42:33 +03:00
<h4 class="theme-name">
{{ $t('settings.style.stock_theme_used') }}
<span class="alert neutral version">v3</span>
</h4>
</button>
2024-07-17 22:10:11 +03:00
<button
v-if="isCustomThemeUsed"
disabled
class="button-default theme-preview toggled"
2024-07-17 22:10:11 +03:00
>
<preview />
2024-10-01 00:42:33 +03:00
<h4 class="theme-name">
{{ $t('settings.style.custom_theme_used') }}
<span class="alert neutral version">v2</span>
</h4>
2024-07-17 22:10:11 +03:00
</button>
<button
v-if="isCustomStyleUsed"
disabled
class="button-default theme-preview toggled"
>
<preview />
<h4 class="theme-name">
{{ $t('settings.style.custom_style_used') }}
<span class="alert neutral version">v3</span>
</h4>
</button>
2024-07-17 19:58:04 +03:00
<button
2024-07-17 17:19:57 +03:00
v-for="style in availableStyles"
2024-07-17 19:58:04 +03:00
:key="style.key"
2024-10-02 16:30:07 +03:00
:data-theme-key="style.key"
2024-07-17 19:58:04 +03:00
class="button-default theme-preview"
:class="{ toggled: isStyleActive(style.key), disabled: switchInProgress }"
@click="style.version === 'v2' ? setTheme(style.key) : setStyle(style.key)"
:disabled="switchInProgress"
2024-07-17 17:19:57 +03:00
>
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
2024-12-22 15:12:06 +02:00
<!-- eslint-disable vue/no-v-html -->
<div v-if="style.ready || noIntersectionObserver">
<component
:is="'style'"
v-html="previewTheme(style.key, style.version, style.data)"
/>
</div>
2024-12-22 15:12:06 +02:00
<!-- eslint-enable vue/no-v-html -->
2024-07-17 17:19:57 +03:00
<!-- eslint-enable vue/no-v-text-v-html-on-component -->
2024-10-02 16:30:07 +03:00
<preview :id="'theme-preview-' + style.key" />
2024-10-01 00:42:33 +03:00
<h4 class="theme-name">
{{ style.name }}
<span class="alert neutral version">{{ style.version }}</span>
</h4>
2024-07-17 19:58:04 +03:00
</button>
2024-07-17 17:19:57 +03:00
</ul>
2024-11-14 19:18:10 +02:00
<div class="import-file-container">
2024-12-22 15:08:42 +02:00
<button
class="btn button-default"
@click="importFile"
:class="{ disabled: switchInProgress }"
:disabled="switchInProgress"
2024-12-22 15:08:42 +02:00
>
<FAIcon icon="folder-open" />
{{ $t('settings.style.themes3.editor.load_style') }}
</button>
2024-11-14 19:18:10 +02:00
</div>
<div class="setting-item">
<h2>{{ $t('settings.style.themes3.palette.label') }}</h2>
<div
v-if="customThemeVersion === 'v3'"
class="palettes"
>
<h4 v-if="stylePalettes?.length > 0">
{{ $t('settings.style.themes3.palette.style') }}
</h4>
<button
v-for="p in stylePalettes || []"
:key="p.name"
class="btn button-default palette-entry"
:class="{ toggled: isPaletteActive(p.key), disabled: switchInProgress }"
:disabled="switchInProgress"
@click="() => setPalette(p.key, p)"
>
<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>{{ $t('settings.style.themes3.palette.bundled') }}</h4>
<button
v-for="p in bundledPalettes"
:key="p.name"
class="btn button-default palette-entry"
:class="{ toggled: isPaletteActive(p.key), disabled: switchInProgress }"
:disabled="switchInProgress"
@click="() => setPalette(p.key, p)"
>
<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>
</div>
<div>
2024-11-14 19:18:10 +02:00
<template v-if="customThemeVersion === 'v3'">
<h4 v-if="expertLevel > 0">
2024-11-14 21:42:45 +02:00
{{ $t('settings.style.themes3.palette.user') }}
</h4>
<PaletteEditor
v-if="expertLevel > 0"
2024-11-14 21:42:45 +02:00
v-model="userPalette"
2024-12-22 15:08:42 +02:00
class="userPalette"
2024-11-14 21:42:45 +02:00
:compact="true"
:apply="true"
@applyPalette="data => setPaletteCustom(data)"
:disabled="switchInProgress"
2024-11-14 21:42:45 +02:00
/>
2024-11-14 19:18:10 +02:00
</template>
<template v-else-if="customThemeVersion === 'v2'">
<div class="alert neutral theme-notice unsupported-theme-v2">
{{ $t('settings.style.themes3.palette.v2_unsupported') }}
</div>
</template>
</div>
2024-10-01 00:42:33 +03:00
</div>
2024-07-23 21:35:29 +03:00
</div>
<div class="setting-item">
2024-06-13 02:22:47 +03:00
<h2>{{ $t('settings.scale_and_layout') }}</h2>
2024-11-14 19:18:10 +02:00
<div class="alert neutral theme-notice">
{{ $t("settings.style.appearance_tab_note") }}
</div>
<ul class="setting-list">
<li>
<UnitSetting
path="textSize"
:step="0.1"
:units="['px', 'rem']"
:reset-default="{ 'px': 14, 'rem': 1 }"
timed-apply-mode
>
{{ $t('settings.text_size') }}
</UnitSetting>
<div>
<small>
<i18n-t
scope="global"
keypath="settings.text_size_tip"
tag="span"
>
<code>px</code>
<code>rem</code>
</i18n-t>
2024-10-02 16:30:07 +03:00
<br>
<i18n-t
scope="global"
keypath="settings.text_size_tip2"
tag="span"
>
<code>14px</code>
</i18n-t>
</small>
</div>
</li>
2024-06-27 00:59:24 +03:00
<li>
<h3>{{ $t('settings.style.interface_font_user_override') }}</h3>
<ul class="setting-list">
<li>
<FontControl
:model-value="mergedConfig.theme3hacks.fonts.interface"
2024-06-27 00:59:24 +03:00
name="ui"
:label="$t('settings.style.fonts.components.interface')"
:fallback="{ family: 'sans-serif' }"
no-inherit="1"
@update:modelValue="v => updateFont('interface', v)"
2024-06-27 00:59:24 +03:00
/>
</li>
<li>
<FontControl
v-if="expertLevel > 0"
:model-value="mergedConfig.theme3hacks.fonts.input"
2024-06-27 00:59:24 +03:00
name="input"
:fallback="{ family: 'inherit' }"
:label="$t('settings.style.fonts.components.input')"
@update:modelValue="v => updateFont('input', v)"
2024-06-27 00:59:24 +03:00
/>
</li>
<li>
<FontControl
v-if="expertLevel > 0"
:model-value="mergedConfig.theme3hacks.fonts.post"
2024-06-27 00:59:24 +03:00
name="post"
:fallback="{ family: 'inherit' }"
:label="$t('settings.style.fonts.components.post')"
@update:modelValue="v => updateFont('post', v)"
2024-06-27 00:59:24 +03:00
/>
</li>
<li>
<FontControl
v-if="expertLevel > 0"
:model-value="mergedConfig.theme3hacks.fonts.monospace"
2024-06-27 00:59:24 +03:00
name="postCode"
:fallback="{ family: 'monospace' }"
:label="$t('settings.style.fonts.components.monospace')"
@update:modelValue="v => updateFont('monospace', v)"
2024-06-27 00:59:24 +03:00
/>
</li>
</ul>
</li>
2024-06-13 02:22:47 +03:00
<li>
<UnitSetting
path="emojiSize"
:step="0.1"
2024-06-13 02:22:47 +03:00
:units="['px', 'rem']"
:reset-default="{ 'px': 32, 'rem': 2.2 }"
>
{{ $t('settings.emoji_size') }}
</UnitSetting>
<ul
class="setting-list suboptions"
>
<li>
<FloatSetting
v-if="user"
path="emojiReactionsScale"
expert="1"
>
{{ $t('settings.emoji_reactions_scale') }}
</FloatSetting>
</li>
</ul>
</li>
<li>
<UnitSetting
path="navbarSize"
:step="0.1"
2024-06-13 02:22:47 +03:00
:units="['px', 'rem']"
:reset-default="{ 'px': 55, 'rem': 3.5 }"
2024-06-13 02:22:47 +03:00
>
{{ $t('settings.navbar_size') }}
</UnitSetting>
</li>
<h3>{{ $t('settings.columns') }}</h3>
<li>
<UnitSetting
path="panelHeaderSize"
:step="0.1"
2024-06-13 02:22:47 +03:00
:units="['px', 'rem']"
:reset-default="{ 'px': 52, 'rem': 3.2 }"
2024-06-13 02:22:47 +03:00
timed-apply-mode
>
{{ $t('settings.panel_header_size') }}
</UnitSetting>
</li>
<li>
<BooleanSetting path="sidebarRight">
{{ $t('settings.right_sidebar') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting path="navbarColumnStretch">
{{ $t('settings.navbar_column_stretch') }}
</BooleanSetting>
</li>
<li>
<ChoiceSetting
v-if="user"
id="thirdColumnMode"
path="thirdColumnMode"
:options="thirdColumnModeOptions"
>
{{ $t('settings.third_column_mode') }}
</ChoiceSetting>
</li>
<li v-if="expertLevel > 0">
{{ $t('settings.column_sizes') }}
<div class="column-settings">
<UnitSetting
v-for="column in columns"
:key="column"
:path="column + 'ColumnWidth'"
:units="horizontalUnits"
expert="1"
>
{{ $t('settings.column_sizes_' + column) }}
</UnitSetting>
</div>
</li>
<li>
<BooleanSetting path="disableStickyHeaders">
{{ $t('settings.disable_sticky_headers') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting path="showScrollbars">
{{ $t('settings.show_scrollbars') }}
</BooleanSetting>
</li>
</ul>
</div>
<div class="setting-item">
<h2>{{ $t('settings.visual_tweaks') }}</h2>
<ul class="setting-list">
2024-06-21 22:46:01 +03:00
<li>
<ChoiceSetting
id="forcedRoundness"
path="forcedRoundness"
:options="forcedRoundnessOptions"
>
{{ $t('settings.style.themes3.hacks.force_interface_roundness') }}
2024-06-21 22:46:01 +03:00
</ChoiceSetting>
</li>
<li>
<ChoiceSetting
id="underlayOverride"
path="theme3hacks.underlay"
:options="underlayOverrideModes"
>
{{ $t('settings.style.themes3.hacks.underlay_overrides') }}
</ChoiceSetting>
</li>
2024-06-13 02:22:47 +03:00
<li v-if="instanceWallpaperUsed">
<BooleanSetting path="hideInstanceWallpaper">
{{ $t('settings.hide_wallpaper') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting
path="forceThemeRecompilation"
:expert="1"
>
{{ $t('settings.force_theme_recompilation_debug') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting
path="themeDebug"
:expert="1"
>
{{ $t('settings.theme_debug') }}
</BooleanSetting>
</li>
</ul>
</div>
</div>
</template>
<script src="./appearance_tab.js"></script>
2024-10-01 00:42:33 +03:00
<style lang="scss" src="./appearance_tab.scss"></style>