chore: remove experimental tags from themes, plugins, and sender favicons settings

This commit is contained in:
Linus Rath
2026-05-06 20:03:19 +02:00
parent f4b7ef8117
commit 91cf125a5d
21 changed files with 22 additions and 48 deletions
+2 -13
View File
@@ -111,7 +111,6 @@ interface TabDef {
label: string;
icon: LucideIcon;
group: TabGroup;
experimental?: boolean;
}
const tabIcons: Record<Tab, LucideIcon> = {
@@ -588,8 +587,8 @@ export default function SettingsPage() {
// Advanced
{ id: 'about_data', label: t('tabs.about_data'), icon: tabIcons.about_data, group: 'advanced' },
...(isFeatureEnabled('themesEnabled') ? [{ id: 'themes' as Tab, label: 'Themes', icon: tabIcons.themes, group: 'advanced' as TabGroup, experimental: true }] : []),
...(isFeatureEnabled('pluginsEnabled') ? [{ id: 'plugins' as Tab, label: 'Plugins', icon: tabIcons.plugins, group: 'advanced' as TabGroup, experimental: true }] : []),
...(isFeatureEnabled('themesEnabled') ? [{ id: 'themes' as Tab, label: 'Themes', icon: tabIcons.themes, group: 'advanced' as TabGroup }] : []),
...(isFeatureEnabled('pluginsEnabled') ? [{ id: 'plugins' as Tab, label: 'Plugins', icon: tabIcons.plugins, group: 'advanced' as TabGroup }] : []),
...(isFeatureEnabled('debugModeEnabled') ? [{ id: 'debug' as Tab, label: t('tabs.debug'), icon: tabIcons.debug, group: 'advanced' as TabGroup }] : []),
];
@@ -774,11 +773,6 @@ export default function SettingsPage() {
<span className="flex items-center gap-3">
<Icon className="w-4 h-4 text-muted-foreground" />
{tab.label}
{tab.experimental && (
<span className="text-[10px] font-medium px-1.5 py-0.5 rounded-full bg-warning/15 text-warning">
Experimental
</span>
)}
</span>
<ChevronRight className="w-4 h-4 text-muted-foreground" />
</button>
@@ -918,11 +912,6 @@ export default function SettingsPage() {
effectiveActiveTab === tab.id ? 'text-accent-foreground' : 'text-muted-foreground'
)} />
{tab.label}
{tab.experimental && (
<span className="ml-auto text-[10px] font-medium px-1.5 py-0.5 rounded-full bg-warning/15 text-warning shrink-0">
Experimental
</span>
)}
</button>
{subs.map((sub) => (
<button
+1 -1
View File
@@ -71,7 +71,7 @@ export function PluginsSettings() {
};
return (
<SettingsSection title="Plugins" description="Plugins deployed by your administrator. Toggle to enable or disable for your account." experimental experimentalDescription="Plugins is an experimental feature. The plugin API is not yet stable and may change between releases, which could break existing plugins. Plugins run in a sandboxed environment but have access to your data within the application.">
<SettingsSection title="Plugins" description="Plugins deployed by your administrator. Toggle to enable or disable for your account.">
{/* Plugin List */}
{plugins.length === 0 ? (
<div className="flex flex-col items-center justify-center py-12 text-center">
+2 -15
View File
@@ -1,29 +1,16 @@
import { ReactNode } from 'react';
import { Lock, FlaskConical } from 'lucide-react';
import { Lock } from 'lucide-react';
import { cn } from '@/lib/utils';
interface SettingsSectionProps {
title: string;
description?: string;
children: ReactNode;
experimental?: boolean;
experimentalDescription?: string;
}
export function SettingsSection({ title, description, children, experimental, experimentalDescription }: SettingsSectionProps) {
export function SettingsSection({ title, description, children }: SettingsSectionProps) {
return (
<div data-search-label={title} className="space-y-4">
{experimental && (
<div className="flex gap-3 rounded-lg border border-amber-300 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-950/30">
<FlaskConical className="w-5 h-5 text-amber-600 dark:text-amber-400 mt-0.5 shrink-0" />
<div>
<p className="text-sm font-medium text-amber-800 dark:text-amber-300">Experimental Feature</p>
{experimentalDescription && (
<p className="text-xs text-amber-700 dark:text-amber-400/80 mt-1">{experimentalDescription}</p>
)}
</div>
</div>
)}
<div>
<h3 className="text-lg font-medium text-foreground">{title}</h3>
{description && (
+1 -1
View File
@@ -47,7 +47,7 @@ export function ThemesSettings() {
};
return (
<SettingsSection title="Themes" description="Choose from themes deployed by your administrator and built-in presets." experimental experimentalDescription="Themes is an experimental feature. Custom themes may not cover all UI elements, and theme formats could change in future updates. Built-in presets are stable.">
<SettingsSection title="Themes" description="Choose from themes deployed by your administrator and built-in presets.">
{forcedThemeId && (
<div className="mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:border-amber-900/40 dark:bg-amber-950/20 dark:text-amber-300">
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronizovat nastavení mezi prohlížeči a zařízeními"
},
"sender_favicons": {
"label": "Favikony odesílatelů (experimentální)",
"label": "Favikony odesílatelů",
"description": "Zobrazovat ikony webových stránek jako profilové obrázky firemních odesílatelů"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronisieren Sie Ihre Einstellungen über Browser und Geräte hinweg"
},
"sender_favicons": {
"label": "Absender-Favicons (Experimentell)",
"label": "Absender-Favicons",
"description": "Website-Symbole als Profilbilder für geschäftliche Absender anzeigen"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1367,7 +1367,7 @@
"description": "Sync your settings across browsers and devices"
},
"sender_favicons": {
"label": "Sender Favicons (Experimental)",
"label": "Sender Favicons",
"description": "Show website icons as profile pictures for business senders"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronice sus ajustes entre navegadores y dispositivos"
},
"sender_favicons": {
"label": "Favicons de remitente (Experimental)",
"label": "Favicons de remitente",
"description": "Mostrar iconos de sitios web como fotos de perfil para remitentes empresariales"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronisez vos paramètres entre navigateurs et appareils"
},
"sender_favicons": {
"label": "Favicons des expéditeurs (Expérimental)",
"label": "Favicons des expéditeurs",
"description": "Afficher les icônes de sites web comme photos de profil pour les expéditeurs professionnels"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronizza le impostazioni tra browser e dispositivi"
},
"sender_favicons": {
"label": "Favicon dei mittenti (Sperimentale)",
"label": "Favicon dei mittenti",
"description": "Mostra le icone dei siti web come immagini profilo per i mittenti aziendali"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "ブラウザーやデバイス間で設定を同期します"
},
"sender_favicons": {
"label": "送信者ファビコン(実験的)",
"label": "送信者ファビコン",
"description": "ビジネス送信者のプロフィール画像としてウェブサイトアイコンを表示"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "여러 브라우저나 기기에서 내 설정을 동기화해요"
},
"sender_favicons": {
"label": "보낸 사람 파비콘 (실험적 기능)",
"label": "보낸 사람 파비콘",
"description": "비즈니스 메일의 경우 해당 웹사이트의 아이콘을 프로필 사진으로 보여줘요"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1345,7 +1345,7 @@
"description": "Sinhronizēt iestatījumus starp dažādiem pārlūkiem un ierīcēm"
},
"sender_favicons": {
"label": "Sūtītāju ikonas (Eksperimentāli)",
"label": "Sūtītāju ikonas",
"description": "Rādīt vietņu ikonas kā sūtītāju avatarus"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchroniseer uw instellingen tussen browsers en apparaten"
},
"sender_favicons": {
"label": "Afzender-favicons (Experimenteel)",
"label": "Afzender-favicons",
"description": "Toon websitepictogrammen als profielfoto's voor zakelijke afzenders"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronizuj ustawienia między przeglądarkami i urządzeniami"
},
"sender_favicons": {
"label": "Favikony nadawców (eksperymentalne)",
"label": "Favikony nadawców",
"description": "Pokazuj ikony stron internetowych jako zdjęcia profilowe nadawców firmowych"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronize suas configurações entre navegadores e dispositivos"
},
"sender_favicons": {
"label": "Favicons de remetente (Experimental)",
"label": "Favicons de remetente",
"description": "Exibir ícones de sites como fotos de perfil para remetentes empresariais"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Синхронизировать настройки между браузерами и устройствами"
},
"sender_favicons": {
"label": "Фавиконы отправителей (Экспериментально)",
"label": "Фавиконы отправителей",
"description": "Показывать иконки сайтов как аватары для корпоративных отправителей"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Ayarlarınızı tarayıcılar ve cihazlar arasında senkronize edin"
},
"sender_favicons": {
"label": "Gönderici Favorikonları (Deneysel)",
"label": "Gönderici Favorikonları",
"description": "İş göndericileri için profil resmi olarak web sitesi simgelerini göster"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Синхронізуйте налаштування між браузерами та пристроями"
},
"sender_favicons": {
"label": "Favicons відправника (експериментальний)",
"label": "Favicons відправника",
"description": "Показувати піктограми веб-сайтів як зображення профілю для бізнес-відправників"
},
"show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "跨浏览器和设备同步您的设置"
},
"sender_favicons": {
"label": "发件人图标(实验性)",
"label": "发件人图标",
"description": "使用企业发件人的网站图标作为头像"
},
"show_avatars_in_junk": {
-2
View File
@@ -190,7 +190,6 @@ interface SettingsState {
// Email Display
disableThreading: boolean; // Show emails as individual messages instead of grouped by conversation
// Experimental
senderFavicons: boolean;
showAvatarsInJunk: boolean; // Show profile images/favicons in the junk folder
@@ -343,7 +342,6 @@ const DEFAULT_SETTINGS = {
// Email Display
disableThreading: false,
// Experimental
senderFavicons: true,
showAvatarsInJunk: false,