diff --git a/packages/pl-fe/src/features/preferences/index.tsx b/packages/pl-fe/src/features/preferences/index.tsx
index af53577c8..82377f824 100644
--- a/packages/pl-fe/src/features/preferences/index.tsx
+++ b/packages/pl-fe/src/features/preferences/index.tsx
@@ -107,6 +107,8 @@ const messages = defineMessages({
content_type_html: { id: 'preferences.options.content_type_html', defaultMessage: 'HTML' },
content_type_wysiwyg: { id: 'preferences.options.content_type_wysiwyg', defaultMessage: 'WYSIWYG' },
brandColor: { id: 'preferences.options.brand_color', defaultMessage: 'Base color' },
+ dark: { id: 'theme_toggle.dark', defaultMessage: 'Dark' },
+ black: { id: 'theme_toggle.black', defaultMessage: 'Black' },
});
const debouncedSave = debounce((dispatch: AppDispatch) => {
@@ -165,6 +167,11 @@ const Preferences = () => {
private: intl.formatMessage(messages.privacy_followers_only),
}), [settings.locale]);
+ const systemDarkThemePreferenceOptions = React.useMemo(() => ({
+ dark: intl.formatMessage(messages.dark),
+ black: intl.formatMessage(messages.black),
+ }), [settings.locale]);
+
const defaultContentTypeOptions = React.useMemo(() => {
const postFormats = instance.pleroma.metadata.post_formats;
@@ -209,6 +216,20 @@ const Preferences = () => {
}>
+ {settings.themeMode === 'system' && (
+ }
+ hint={}
+ >
+ ) => onSelectChange(event, ['theme', 'systemDarkThemePreference'])}
+ />
+
+
+ )}
diff --git a/packages/pl-fe/src/hooks/use-system-theme.ts b/packages/pl-fe/src/hooks/use-system-theme.ts
index 1b0c574d9..012f0662f 100644
--- a/packages/pl-fe/src/hooks/use-system-theme.ts
+++ b/packages/pl-fe/src/hooks/use-system-theme.ts
@@ -1,11 +1,14 @@
import { useState, useEffect } from 'react';
-type SystemTheme = 'light' | 'black';
+import { useSettings } from './use-settings';
+
+import type { Theme } from './use-theme';
/** Get the system color scheme of the system. */
-const useSystemTheme = (): SystemTheme => {
+const useSystemTheme = (): Theme => {
const query = window.matchMedia('(prefers-color-scheme: dark)');
const [dark, setDark] = useState(query.matches);
+ const { theme } = useSettings();
const handleChange = (event: MediaQueryListEvent) => {
setDark(event.matches);
@@ -29,7 +32,7 @@ const useSystemTheme = (): SystemTheme => {
};
}, []);
- return dark ? 'black' : 'light';
+ return dark ? (theme?.systemDarkThemePreference || 'black') : 'light';
};
export { useSystemTheme };
diff --git a/packages/pl-fe/src/hooks/use-theme.ts b/packages/pl-fe/src/hooks/use-theme.ts
index 563425c83..b4a3cfba9 100644
--- a/packages/pl-fe/src/hooks/use-theme.ts
+++ b/packages/pl-fe/src/hooks/use-theme.ts
@@ -14,4 +14,4 @@ const useTheme = (): Theme => {
return themeMode === 'system' ? systemTheme : themeMode;
};
-export { useTheme };
+export { useTheme, type Theme };
diff --git a/packages/pl-fe/src/locales/en.json b/packages/pl-fe/src/locales/en.json
index 73ac636df..102f39aba 100644
--- a/packages/pl-fe/src/locales/en.json
+++ b/packages/pl-fe/src/locales/en.json
@@ -1104,7 +1104,7 @@
"list.click_to_add": "Click here to add people",
"list_adder.header_title": "Add or remove from lists",
"lists.account.add": "Add to list",
- "lists.account.remove": "List members",
+ "lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
"lists.edit": "Edit list",
"lists.edit.error": "Error updating list",
@@ -1423,6 +1423,8 @@
"preferences.fields.system_emoji_font_label": "Use system emoji font",
"preferences.fields.system_font_label": "Use system's default font",
"preferences.fields.theme": "Theme",
+ "preferences.fields.theme.dark_theme_preference_hint": "Select dark theme to be used when theme is set to \"System\"",
+ "preferences.fields.theme.dark_theme_preference_label": "Dark theme preference",
"preferences.fields.theme.display_background_gradient": "Display background gradient",
"preferences.fields.theme_reset": "Reset theme",
"preferences.fields.underline_links_label": "Always underline links in posts",
diff --git a/packages/pl-fe/src/modals/list-editor-modal/components/list-members-form.tsx b/packages/pl-fe/src/modals/list-editor-modal/components/list-members-form.tsx
index d541fe4c9..82c6048ac 100644
--- a/packages/pl-fe/src/modals/list-editor-modal/components/list-members-form.tsx
+++ b/packages/pl-fe/src/modals/list-editor-modal/components/list-members-form.tsx
@@ -12,7 +12,7 @@ import Search from './search';
const messages = defineMessages({
addToList: { id: 'lists.account.add', defaultMessage: 'Add to list' },
- removeFromList: { id: 'lists.account.remove', defaultMessage: 'List members' },
+ removeFromList: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },
});
interface IListMembersForm {
diff --git a/packages/pl-fe/src/modals/list-editor-modal/index.tsx b/packages/pl-fe/src/modals/list-editor-modal/index.tsx
index 904d70bfc..2d712c7ab 100644
--- a/packages/pl-fe/src/modals/list-editor-modal/index.tsx
+++ b/packages/pl-fe/src/modals/list-editor-modal/index.tsx
@@ -26,7 +26,7 @@ const ListEditorModal: React.FC = ({ list
return (
: }
+ title={tab === 'info' ? : }
onClose={onClickClose}
onBack={tab === 'members' ? () => setTab('info') : undefined}
>
diff --git a/packages/pl-fe/src/schemas/pl-fe/settings.ts b/packages/pl-fe/src/schemas/pl-fe/settings.ts
index d1ba9b900..e4147e6a0 100644
--- a/packages/pl-fe/src/schemas/pl-fe/settings.ts
+++ b/packages/pl-fe/src/schemas/pl-fe/settings.ts
@@ -61,6 +61,7 @@ const settingsSchema = v.object({
colors: v.optional(v.any()),
interfaceSize: v.fallback(v.picklist(['sm', 'md', 'lg', 'xl']), 'md'),
backgroundGradient: v.optional(v.boolean(), true),
+ systemDarkThemePreference: v.fallback(v.picklist(['dark', 'black']), 'black'),
}), undefined),
systemFont: v.fallback(v.boolean(), false),