2024-05-22 19:54:19 +03:00
|
|
|
<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:22:28 +03:00
|
|
|
:class="{ toggled: isStyleActive('stock') }"
|
2024-10-02 16:30:07 +03:00
|
|
|
@click="resetTheming"
|
2024-10-01 00:42:33 +03:00
|
|
|
>
|
|
|
|
|
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
|
|
|
|
|
<component
|
|
|
|
|
:is="'style'"
|
|
|
|
|
v-html="previewTheme('stock')"
|
|
|
|
|
/>
|
|
|
|
|
<!-- eslint-enable vue/no-v-text-v-html-on-component -->
|
2024-10-03 23:03:33 +03:00
|
|
|
<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"
|
|
|
|
|
>
|
|
|
|
|
<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>
|
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"
|
2024-07-17 22:10:11 +03:00
|
|
|
:class="{ toggled: isThemeActive(style.key) }"
|
|
|
|
|
@click="setTheme(style.key)"
|
2024-07-17 17:19:57 +03:00
|
|
|
>
|
|
|
|
|
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
|
2024-07-17 19:58:04 +03:00
|
|
|
<component
|
|
|
|
|
:is="'style'"
|
|
|
|
|
v-if="style.ready || noIntersectionObserver"
|
|
|
|
|
v-html="previewTheme(style.key, style.data)"
|
|
|
|
|
/>
|
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">
|
|
|
|
|
<button
|
|
|
|
|
class="btn button-default"
|
|
|
|
|
@click="importFile"
|
|
|
|
|
>
|
|
|
|
|
<FAIcon icon="folder-open" />
|
|
|
|
|
{{ $t('settings.style.themes3.editor.load_style') }}
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="setting-item">
|
|
|
|
|
<h2>{{ $t('settings.style.themes3.palette.label') }}</h2>
|
|
|
|
|
<div class="palettes">
|
|
|
|
|
<template v-if="customThemeVersion === 'v3'">
|
|
|
|
|
<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) }"
|
2024-11-14 21:42:45 +02:00
|
|
|
@click="() => setPalette(p.key, p)"
|
2024-11-14 19:18:10 +02:00
|
|
|
>
|
|
|
|
|
<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)') }"
|
|
|
|
|
/>
|
|
|
|
|
</button>
|
|
|
|
|
<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) }"
|
|
|
|
|
@click="() => setPaletteCustom(p)"
|
|
|
|
|
>
|
|
|
|
|
<label>
|
2024-11-19 01:16:51 +02:00
|
|
|
{{ p.name ?? $t('settings.style.themes3.palette.user') }}
|
2024-11-14 19:18:10 +02:00
|
|
|
</label>
|
|
|
|
|
<span
|
|
|
|
|
v-for="c in palettesKeys"
|
|
|
|
|
:key="c"
|
|
|
|
|
class="palette-square"
|
|
|
|
|
:style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }"
|
|
|
|
|
/>
|
|
|
|
|
</button>
|
2024-11-14 21:42:45 +02:00
|
|
|
<h4>
|
|
|
|
|
{{ $t('settings.style.themes3.palette.user') }}
|
|
|
|
|
</h4>
|
|
|
|
|
<PaletteEditor
|
|
|
|
|
class="userPalette"
|
|
|
|
|
v-model="userPalette"
|
|
|
|
|
:compact="true"
|
|
|
|
|
:apply="true"
|
|
|
|
|
@applyPalette="data => setPaletteCustom(data)"
|
|
|
|
|
/>
|
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>
|
2024-05-22 19:54:19 +03:00
|
|
|
<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>
|
2024-05-22 19:54:19 +03:00
|
|
|
<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>
|
2024-05-22 19:54:19 +03:00
|
|
|
<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
|
2024-07-21 23:27:11 +03:00
|
|
|
: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"
|
2024-07-21 23:27:11 +03:00
|
|
|
@update:modelValue="v => updateFont('interface', v)"
|
2024-06-27 00:59:24 +03:00
|
|
|
/>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<FontControl
|
|
|
|
|
v-if="expertLevel > 0"
|
2024-07-21 23:27:11 +03:00
|
|
|
: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')"
|
2024-07-21 23:27:11 +03:00
|
|
|
@update:modelValue="v => updateFont('input', v)"
|
2024-06-27 00:59:24 +03:00
|
|
|
/>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<FontControl
|
|
|
|
|
v-if="expertLevel > 0"
|
2024-07-21 23:27:11 +03:00
|
|
|
: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')"
|
2024-07-21 23:27:11 +03:00
|
|
|
@update:modelValue="v => updateFont('post', v)"
|
2024-06-27 00:59:24 +03:00
|
|
|
/>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<FontControl
|
|
|
|
|
v-if="expertLevel > 0"
|
2024-07-21 23:27:11 +03:00
|
|
|
:model-value="mergedConfig.theme3hacks.fonts.monospace"
|
2024-06-27 00:59:24 +03:00
|
|
|
name="postCode"
|
|
|
|
|
:fallback="{ family: 'monospace' }"
|
2024-07-21 23:27:11 +03:00
|
|
|
: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"
|
|
|
|
|
: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"
|
|
|
|
|
:units="['px', 'rem']"
|
2024-06-19 22:16:31 +03:00
|
|
|
: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"
|
|
|
|
|
:units="['px', 'rem']"
|
2024-06-19 22:16:31 +03:00
|
|
|
: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"
|
|
|
|
|
>
|
2024-07-16 21:01:20 +03:00
|
|
|
{{ $t('settings.style.themes3.hacks.force_interface_roundness') }}
|
2024-06-21 22:46:01 +03:00
|
|
|
</ChoiceSetting>
|
|
|
|
|
</li>
|
2024-07-10 22:49:56 +03:00
|
|
|
<li>
|
|
|
|
|
<ChoiceSetting
|
|
|
|
|
id="underlayOverride"
|
|
|
|
|
path="theme3hacks.underlay"
|
|
|
|
|
:options="underlayOverrideModes"
|
|
|
|
|
>
|
2024-07-16 21:01:20 +03:00
|
|
|
{{ $t('settings.style.themes3.hacks.underlay_overrides') }}
|
2024-07-10 22:49:56 +03:00
|
|
|
</ChoiceSetting>
|
|
|
|
|
</li>
|
2024-06-13 02:22:47 +03:00
|
|
|
<li v-if="instanceWallpaperUsed">
|
|
|
|
|
<BooleanSetting path="hideInstanceWallpaper">
|
|
|
|
|
{{ $t('settings.hide_wallpaper') }}
|
|
|
|
|
</BooleanSetting>
|
|
|
|
|
</li>
|
2024-06-21 23:28:24 +03:00
|
|
|
<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>
|
2024-05-22 19:54:19 +03:00
|
|
|
</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>
|