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; label: string;
icon: LucideIcon; icon: LucideIcon;
group: TabGroup; group: TabGroup;
experimental?: boolean;
} }
const tabIcons: Record<Tab, LucideIcon> = { const tabIcons: Record<Tab, LucideIcon> = {
@@ -588,8 +587,8 @@ export default function SettingsPage() {
// Advanced // Advanced
{ id: 'about_data', label: t('tabs.about_data'), icon: tabIcons.about_data, group: '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('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, experimental: true }] : []), ...(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 }] : []), ...(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"> <span className="flex items-center gap-3">
<Icon className="w-4 h-4 text-muted-foreground" /> <Icon className="w-4 h-4 text-muted-foreground" />
{tab.label} {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> </span>
<ChevronRight className="w-4 h-4 text-muted-foreground" /> <ChevronRight className="w-4 h-4 text-muted-foreground" />
</button> </button>
@@ -918,11 +912,6 @@ export default function SettingsPage() {
effectiveActiveTab === tab.id ? 'text-accent-foreground' : 'text-muted-foreground' effectiveActiveTab === tab.id ? 'text-accent-foreground' : 'text-muted-foreground'
)} /> )} />
{tab.label} {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> </button>
{subs.map((sub) => ( {subs.map((sub) => (
<button <button
+1 -1
View File
@@ -71,7 +71,7 @@ export function PluginsSettings() {
}; };
return ( 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 */} {/* Plugin List */}
{plugins.length === 0 ? ( {plugins.length === 0 ? (
<div className="flex flex-col items-center justify-center py-12 text-center"> <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 { ReactNode } from 'react';
import { Lock, FlaskConical } from 'lucide-react'; import { Lock } from 'lucide-react';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
interface SettingsSectionProps { interface SettingsSectionProps {
title: string; title: string;
description?: string; description?: string;
children: ReactNode; children: ReactNode;
experimental?: boolean;
experimentalDescription?: string;
} }
export function SettingsSection({ title, description, children, experimental, experimentalDescription }: SettingsSectionProps) { export function SettingsSection({ title, description, children }: SettingsSectionProps) {
return ( return (
<div data-search-label={title} className="space-y-4"> <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> <div>
<h3 className="text-lg font-medium text-foreground">{title}</h3> <h3 className="text-lg font-medium text-foreground">{title}</h3>
{description && ( {description && (
+1 -1
View File
@@ -47,7 +47,7 @@ export function ThemesSettings() {
}; };
return ( 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 && ( {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"> <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" "description": "Synchronizovat nastavení mezi prohlížeči a zařízeními"
}, },
"sender_favicons": { "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ů" "description": "Zobrazovat ikony webových stránek jako profilové obrázky firemních odesílatelů"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronisieren Sie Ihre Einstellungen über Browser und Geräte hinweg" "description": "Synchronisieren Sie Ihre Einstellungen über Browser und Geräte hinweg"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Absender-Favicons (Experimentell)", "label": "Absender-Favicons",
"description": "Website-Symbole als Profilbilder für geschäftliche Absender anzeigen" "description": "Website-Symbole als Profilbilder für geschäftliche Absender anzeigen"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1367,7 +1367,7 @@
"description": "Sync your settings across browsers and devices" "description": "Sync your settings across browsers and devices"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Sender Favicons (Experimental)", "label": "Sender Favicons",
"description": "Show website icons as profile pictures for business senders" "description": "Show website icons as profile pictures for business senders"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronice sus ajustes entre navegadores y dispositivos" "description": "Sincronice sus ajustes entre navegadores y dispositivos"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Favicons de remitente (Experimental)", "label": "Favicons de remitente",
"description": "Mostrar iconos de sitios web como fotos de perfil para remitentes empresariales" "description": "Mostrar iconos de sitios web como fotos de perfil para remitentes empresariales"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronisez vos paramètres entre navigateurs et appareils" "description": "Synchronisez vos paramètres entre navigateurs et appareils"
}, },
"sender_favicons": { "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" "description": "Afficher les icônes de sites web comme photos de profil pour les expéditeurs professionnels"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronizza le impostazioni tra browser e dispositivi" "description": "Sincronizza le impostazioni tra browser e dispositivi"
}, },
"sender_favicons": { "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" "description": "Mostra le icone dei siti web come immagini profilo per i mittenti aziendali"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "ブラウザーやデバイス間で設定を同期します" "description": "ブラウザーやデバイス間で設定を同期します"
}, },
"sender_favicons": { "sender_favicons": {
"label": "送信者ファビコン(実験的)", "label": "送信者ファビコン",
"description": "ビジネス送信者のプロフィール画像としてウェブサイトアイコンを表示" "description": "ビジネス送信者のプロフィール画像としてウェブサイトアイコンを表示"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "여러 브라우저나 기기에서 내 설정을 동기화해요" "description": "여러 브라우저나 기기에서 내 설정을 동기화해요"
}, },
"sender_favicons": { "sender_favicons": {
"label": "보낸 사람 파비콘 (실험적 기능)", "label": "보낸 사람 파비콘",
"description": "비즈니스 메일의 경우 해당 웹사이트의 아이콘을 프로필 사진으로 보여줘요" "description": "비즈니스 메일의 경우 해당 웹사이트의 아이콘을 프로필 사진으로 보여줘요"
}, },
"show_avatars_in_junk": { "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" "description": "Sinhronizēt iestatījumus starp dažādiem pārlūkiem un ierīcēm"
}, },
"sender_favicons": { "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" "description": "Rādīt vietņu ikonas kā sūtītāju avatarus"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchroniseer uw instellingen tussen browsers en apparaten" "description": "Synchroniseer uw instellingen tussen browsers en apparaten"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Afzender-favicons (Experimenteel)", "label": "Afzender-favicons",
"description": "Toon websitepictogrammen als profielfoto's voor zakelijke afzenders" "description": "Toon websitepictogrammen als profielfoto's voor zakelijke afzenders"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Synchronizuj ustawienia między przeglądarkami i urządzeniami" "description": "Synchronizuj ustawienia między przeglądarkami i urządzeniami"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Favikony nadawców (eksperymentalne)", "label": "Favikony nadawców",
"description": "Pokazuj ikony stron internetowych jako zdjęcia profilowe nadawców firmowych" "description": "Pokazuj ikony stron internetowych jako zdjęcia profilowe nadawców firmowych"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Sincronize suas configurações entre navegadores e dispositivos" "description": "Sincronize suas configurações entre navegadores e dispositivos"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Favicons de remetente (Experimental)", "label": "Favicons de remetente",
"description": "Exibir ícones de sites como fotos de perfil para remetentes empresariais" "description": "Exibir ícones de sites como fotos de perfil para remetentes empresariais"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Синхронизировать настройки между браузерами и устройствами" "description": "Синхронизировать настройки между браузерами и устройствами"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Фавиконы отправителей (Экспериментально)", "label": "Фавиконы отправителей",
"description": "Показывать иконки сайтов как аватары для корпоративных отправителей" "description": "Показывать иконки сайтов как аватары для корпоративных отправителей"
}, },
"show_avatars_in_junk": { "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" "description": "Ayarlarınızı tarayıcılar ve cihazlar arasında senkronize edin"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Gönderici Favorikonları (Deneysel)", "label": "Gönderici Favorikonları",
"description": "İş göndericileri için profil resmi olarak web sitesi simgelerini göster" "description": "İş göndericileri için profil resmi olarak web sitesi simgelerini göster"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "Синхронізуйте налаштування між браузерами та пристроями" "description": "Синхронізуйте налаштування між браузерами та пристроями"
}, },
"sender_favicons": { "sender_favicons": {
"label": "Favicons відправника (експериментальний)", "label": "Favicons відправника",
"description": "Показувати піктограми веб-сайтів як зображення профілю для бізнес-відправників" "description": "Показувати піктограми веб-сайтів як зображення профілю для бізнес-відправників"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
+1 -1
View File
@@ -1364,7 +1364,7 @@
"description": "跨浏览器和设备同步您的设置" "description": "跨浏览器和设备同步您的设置"
}, },
"sender_favicons": { "sender_favicons": {
"label": "发件人图标(实验性)", "label": "发件人图标",
"description": "使用企业发件人的网站图标作为头像" "description": "使用企业发件人的网站图标作为头像"
}, },
"show_avatars_in_junk": { "show_avatars_in_junk": {
-2
View File
@@ -190,7 +190,6 @@ interface SettingsState {
// Email Display // Email Display
disableThreading: boolean; // Show emails as individual messages instead of grouped by conversation disableThreading: boolean; // Show emails as individual messages instead of grouped by conversation
// Experimental
senderFavicons: boolean; senderFavicons: boolean;
showAvatarsInJunk: boolean; // Show profile images/favicons in the junk folder showAvatarsInJunk: boolean; // Show profile images/favicons in the junk folder
@@ -343,7 +342,6 @@ const DEFAULT_SETTINGS = {
// Email Display // Email Display
disableThreading: false, disableThreading: false,
// Experimental
senderFavicons: true, senderFavicons: true,
showAvatarsInJunk: false, showAvatarsInJunk: false,