Files
ThreadNet-Web/src/settings/Settings.tsx
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1398 lines
53 KiB
TypeScript
Raw Normal View History

/*
Copyright 2024, 2025 New Vector Ltd.
2024-09-09 14:57:16 +01:00
Copyright 2018-2024 The Matrix.org Foundation C.I.C.
Copyright 2017 Travis Ralston
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
2024-09-09 14:57:16 +01:00
Please see LICENSE files in the repository root for full details.
*/
2025-02-05 13:25:06 +00:00
import React, { type ReactNode } from "react";
2024-09-12 14:18:25 +01:00
import { UNSTABLE_MSC4133_EXTENDED_PROFILES } from "matrix-js-sdk/src/matrix";
import { type MediaPreviewConfig } from "../@types/media_preview.ts";
2025-02-05 13:25:06 +00:00
import { _t, _td, type TranslationKey } from "../languageHandler";
import DeviceIsolationModeController from "./controllers/DeviceIsolationModeController.ts";
2017-11-04 22:28:35 -07:00
import {
NotificationBodyEnabledController,
NotificationsEnabledController,
} from "./controllers/NotificationControllers";
import ThemeController from "./controllers/ThemeController";
import ReloadOnChangeController from "./controllers/ReloadOnChangeController";
2020-04-14 16:18:57 +01:00
import FontSizeController from "./controllers/FontSizeController";
2020-06-15 15:33:52 +01:00
import SystemFontController from "./controllers/SystemFontController";
2020-07-28 12:02:02 -06:00
import { SettingLevel } from "./SettingLevel";
2025-02-05 13:25:06 +00:00
import type SettingController from "./controllers/SettingController";
import { IS_MAC } from "../Keyboard";
import UIFeatureController from "./controllers/UIFeatureController";
import { UIFeature } from "./UIFeature";
import { Layout } from "./enums/Layout";
import ReducedMotionController from "./controllers/ReducedMotionController";
import IncompatibleController from "./controllers/IncompatibleController";
import { ImageSize } from "./enums/ImageSize";
2021-11-11 13:07:41 +00:00
import { MetaSpace } from "../stores/spaces";
import SdkConfig from "../SdkConfig";
2022-09-07 16:42:39 +01:00
import SlidingSyncController from "./controllers/SlidingSyncController";
import { FontWatcher } from "./watchers/FontWatcher";
import ServerSupportUnstableFeatureController from "./controllers/ServerSupportUnstableFeatureController";
import { WatchManager } from "./WatchManager";
2025-02-05 13:25:06 +00:00
import { type CustomTheme } from "../theme";
2024-04-22 17:15:29 +01:00
import AnalyticsController from "./controllers/AnalyticsController";
import FallbackIceServerController from "./controllers/FallbackIceServerController";
2025-02-05 13:25:06 +00:00
import { type IRightPanelForRoomStored } from "../stores/right-panel/RightPanelStoreIPanelState.ts";
import { type ILayoutSettings } from "../stores/widgets/WidgetLayoutStore.ts";
import { type ReleaseAnnouncementData } from "../stores/ReleaseAnnouncementStore.ts";
import { type Json, type JsonValue } from "../@types/json.ts";
import { type RecentEmojiData } from "../emojipicker/recent.ts";
import { type Assignable } from "../@types/common.ts";
import { SortingAlgorithm } from "../stores/room-list-v3/skip-list/sorters/index.ts";
import MediaPreviewConfigController from "./controllers/MediaPreviewConfigController.ts";
export const defaultWatchManager = new WatchManager();
// These are just a bunch of helper arrays to avoid copy/pasting a bunch of times
2020-07-28 12:02:02 -06:00
const LEVELS_ROOM_SETTINGS = [
SettingLevel.DEVICE,
SettingLevel.ROOM_DEVICE,
SettingLevel.ROOM_ACCOUNT,
SettingLevel.ACCOUNT,
SettingLevel.CONFIG,
];
const LEVELS_ROOM_OR_ACCOUNT = [SettingLevel.ROOM_ACCOUNT, SettingLevel.ACCOUNT];
const LEVELS_ROOM_SETTINGS_WITH_ROOM = [
SettingLevel.DEVICE,
SettingLevel.ROOM_DEVICE,
SettingLevel.ROOM_ACCOUNT,
SettingLevel.ACCOUNT,
SettingLevel.CONFIG,
SettingLevel.ROOM,
];
const LEVELS_ACCOUNT_SETTINGS = [SettingLevel.DEVICE, SettingLevel.ACCOUNT, SettingLevel.CONFIG];
const LEVELS_DEVICE_ONLY_SETTINGS = [SettingLevel.DEVICE];
const LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG = [SettingLevel.DEVICE, SettingLevel.CONFIG];
const LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED = [SettingLevel.CONFIG, SettingLevel.DEVICE];
const LEVELS_UI_FEATURE = [
SettingLevel.CONFIG,
// in future we might have a .well-known level or something
];
2021-11-25 16:21:10 +00:00
export enum LabGroup {
Messaging,
Profile,
Spaces,
Widgets,
Rooms,
Threads,
VoiceAndVideo,
2021-11-25 16:21:10 +00:00
Moderation,
Analytics,
Themes,
Encryption,
Experimental,
Developer,
2024-04-08 10:43:59 +02:00
Ui,
2021-11-25 16:21:10 +00:00
}
export enum Features {
2023-06-29 17:46:31 +02:00
NotificationSettings2 = "feature_notification_settings2",
2024-04-08 10:43:59 +02:00
ReleaseAnnouncement = "feature_release_announcement",
}
export const labGroupNames: Record<LabGroup, TranslationKey> = {
[LabGroup.Messaging]: _td("labs|group_messaging"),
[LabGroup.Profile]: _td("labs|group_profile"),
[LabGroup.Spaces]: _td("labs|group_spaces"),
[LabGroup.Widgets]: _td("labs|group_widgets"),
[LabGroup.Rooms]: _td("labs|group_rooms"),
[LabGroup.Threads]: _td("labs|group_threads"),
[LabGroup.VoiceAndVideo]: _td("labs|group_voip"),
[LabGroup.Moderation]: _td("labs|group_moderation"),
[LabGroup.Analytics]: _td("common|analytics"),
[LabGroup.Themes]: _td("labs|group_themes"),
[LabGroup.Encryption]: _td("labs|group_encryption"),
[LabGroup.Experimental]: _td("labs|group_experimental"),
[LabGroup.Developer]: _td("labs|group_developer"),
2024-04-08 10:43:59 +02:00
[LabGroup.Ui]: _td("labs|group_ui"),
2021-11-25 16:21:10 +00:00
};
2024-12-23 20:25:15 +00:00
export type SettingValueType = Json | JsonValue | Record<string, unknown> | Record<string, unknown>[];
2022-02-22 11:04:27 +01:00
export interface IBaseSetting<T extends SettingValueType = SettingValueType> {
2021-11-25 16:21:10 +00:00
isFeature?: false | undefined;
2020-07-28 12:02:02 -06:00
// Display names are strongly recommended for clarity.
// Display name can also be an object for different levels.
displayName?:
| TranslationKey
2023-02-13 11:39:16 +00:00
| Partial<{
[level in SettingLevel]: TranslationKey;
2023-02-13 11:39:16 +00:00
}>;
2020-07-28 12:02:02 -06:00
2021-06-17 16:22:40 +01:00
// Optional description which will be shown as microCopy under SettingsFlags
description?: TranslationKey | (() => ReactNode);
2021-06-17 16:22:40 +01:00
2020-07-28 12:02:02 -06:00
// The supported levels are required. Preferably, use the preset arrays
// at the top of this file to define this rather than a custom array.
supportedLevels: SettingLevel[];
2020-07-28 12:02:02 -06:00
// Required. Can be any data type. The value specified here should match
// the data being stored (ie: if a boolean is used, the setting should
// represent a boolean).
2022-02-22 11:04:27 +01:00
default: T;
2020-07-28 12:02:02 -06:00
// Optional settings controller. See SettingsController for more information.
2020-07-28 15:24:32 -06:00
controller?: SettingController;
2020-07-28 12:02:02 -06:00
// Optional flag to make supportedLevels be respected as the order to handle
// settings. The first element is treated as "most preferred". The "default"
// level is always appended to the end.
supportedLevelsAreOrdered?: boolean;
// Optional value to invert a boolean setting's value. The string given will
// be read as the setting's ID instead of the one provided as the key for the
// setting definition. By setting this, the returned value will automatically
// be inverted, except for when the default value is returned. Inversion will
// occur after the controller is asked for an override. This should be used by
// historical settings which we don't want existing user's values be wiped. Do
// not use this for new settings.
invertedSettingName?: string;
// XXX: Keep this around for re-use in future Betas
betaInfo?: {
title: TranslationKey;
caption: () => ReactNode;
faq?: (enabled: boolean) => ReactNode;
image?: string; // require(...)
feedbackSubheading?: TranslationKey;
2021-05-11 15:58:19 +01:00
feedbackLabel?: string;
2024-12-23 20:25:15 +00:00
extraSettings?: BooleanSettingKey[];
requiresRefresh?: boolean;
};
// Whether the setting should have a warning sign in the microcopy
shouldWarn?: boolean;
2020-07-28 12:02:02 -06:00
}
2022-02-22 11:04:27 +01:00
export interface IFeature extends Omit<IBaseSetting<boolean>, "isFeature"> {
2021-11-25 16:21:10 +00:00
// Must be set to true for features.
isFeature: true;
labsGroup: LabGroup;
}
// Type using I-identifier for backwards compatibility from before it became a discriminated union
export type ISetting = IBaseSetting | IFeature;
2024-12-23 20:25:15 +00:00
export interface Settings {
[settingName: `UIFeature.${string}`]: IBaseSetting<boolean>;
// We can't use the following type because of `feature_sliding_sync_proxy_url` & `feature_hidebold` being in the namespace incorrectly
// [settingName: `feature_${string}`]: IFeature;
"feature_video_rooms": IFeature;
[Features.NotificationSettings2]: IFeature;
[Features.ReleaseAnnouncement]: IFeature;
"feature_msc3531_hide_messages_pending_moderation": IFeature;
"feature_report_to_moderators": IFeature;
"feature_latex_maths": IFeature;
"feature_wysiwyg_composer": IFeature;
"feature_mjolnir": IFeature;
"feature_custom_themes": IFeature;
"feature_exclude_insecure_devices": IFeature;
"feature_html_topic": IFeature;
"feature_bridge_state": IFeature;
"feature_jump_to_date": IFeature;
2025-03-18 17:54:32 +00:00
"feature_sliding_sync": IBaseSetting<boolean>;
"feature_simplified_sliding_sync": IFeature;
2024-12-23 20:25:15 +00:00
"feature_element_call_video_rooms": IFeature;
"feature_group_calls": IFeature;
"feature_disable_call_per_sender_encryption": IFeature;
"feature_allow_screen_share_only_mode": IFeature;
"feature_location_share_live": IFeature;
"feature_dynamic_room_predecessors": IFeature;
"feature_render_reaction_images": IFeature;
"feature_new_room_list": IFeature;
2024-12-23 20:25:15 +00:00
"feature_ask_to_join": IFeature;
"feature_notifications": IFeature;
// These are in the feature namespace but aren't actually features
"feature_hidebold": IBaseSetting<boolean>;
"useOnlyCurrentProfiles": IBaseSetting<boolean>;
"mjolnirRooms": IBaseSetting<string[]>;
"mjolnirPersonalRoom": IBaseSetting<string | null>;
"RoomList.backgroundImage": IBaseSetting<string | null>;
"sendReadReceipts": IBaseSetting<boolean>;
"baseFontSize": IBaseSetting<"" | number>;
"baseFontSizeV2": IBaseSetting<"" | number>;
"fontSizeDelta": IBaseSetting<number>;
"useCustomFontSize": IBaseSetting<boolean>;
"MessageComposerInput.suggestEmoji": IBaseSetting<boolean>;
"MessageComposerInput.showStickersButton": IBaseSetting<boolean>;
"MessageComposerInput.showPollsButton": IBaseSetting<boolean>;
"MessageComposerInput.insertTrailingColon": IBaseSetting<boolean>;
"Notifications.alwaysShowBadgeCounts": IBaseSetting<boolean>;
"Notifications.showbold": IBaseSetting<boolean>;
"Notifications.tac_only_notifications": IBaseSetting<boolean>;
"useCompactLayout": IBaseSetting<boolean>;
"showRedactions": IBaseSetting<boolean>;
"showJoinLeaves": IBaseSetting<boolean>;
"showAvatarChanges": IBaseSetting<boolean>;
"showDisplaynameChanges": IBaseSetting<boolean>;
"showReadReceipts": IBaseSetting<boolean>;
"showTwelveHourTimestamps": IBaseSetting<boolean>;
"alwaysShowTimestamps": IBaseSetting<boolean>;
"userTimezone": IBaseSetting<string>;
"userTimezonePublish": IBaseSetting<boolean>;
"autoplayGifs": IBaseSetting<boolean>;
"autoplayVideo": IBaseSetting<boolean>;
"enableSyntaxHighlightLanguageDetection": IBaseSetting<boolean>;
"expandCodeByDefault": IBaseSetting<boolean>;
"showCodeLineNumbers": IBaseSetting<boolean>;
"scrollToBottomOnMessageSent": IBaseSetting<boolean>;
"Pill.shouldShowPillAvatar": IBaseSetting<boolean>;
"TextualBody.enableBigEmoji": IBaseSetting<boolean>;
"MessageComposerInput.isRichTextEnabled": IBaseSetting<boolean>;
"MessageComposer.showFormatting": IBaseSetting<boolean>;
"sendTypingNotifications": IBaseSetting<boolean>;
"showTypingNotifications": IBaseSetting<boolean>;
"ctrlFForSearch": IBaseSetting<boolean>;
"MessageComposerInput.ctrlEnterToSend": IBaseSetting<boolean>;
"MessageComposerInput.surroundWith": IBaseSetting<boolean>;
"MessageComposerInput.autoReplaceEmoji": IBaseSetting<boolean>;
"MessageComposerInput.useMarkdown": IBaseSetting<boolean>;
"VideoView.flipVideoHorizontally": IBaseSetting<boolean>;
"theme": IBaseSetting<string>;
"custom_themes": IBaseSetting<CustomTheme[]>;
"use_system_theme": IBaseSetting<boolean>;
"useBundledEmojiFont": IBaseSetting<boolean>;
"useSystemFont": IBaseSetting<boolean>;
"systemFont": IBaseSetting<string>;
"webRtcAllowPeerToPeer": IBaseSetting<boolean>;
"webrtc_audiooutput": IBaseSetting<string>;
"webrtc_audioinput": IBaseSetting<string>;
"webrtc_videoinput": IBaseSetting<string>;
"webrtc_audio_autoGainControl": IBaseSetting<boolean>;
"webrtc_audio_echoCancellation": IBaseSetting<boolean>;
"webrtc_audio_noiseSuppression": IBaseSetting<boolean>;
"language": IBaseSetting<string>;
"breadcrumb_rooms": IBaseSetting<string[]>;
"recent_emoji": IBaseSetting<RecentEmojiData>;
"showMediaEventIds": IBaseSetting<{ [eventId: string]: boolean }>;
2024-12-23 20:25:15 +00:00
"SpotlightSearch.recentSearches": IBaseSetting<string[]>;
"SpotlightSearch.showNsfwPublicRooms": IBaseSetting<boolean>;
"room_directory_servers": IBaseSetting<string[]>;
"integrationProvisioning": IBaseSetting<boolean>;
"allowedWidgets": IBaseSetting<{ [eventId: string]: boolean }>;
"analyticsOptIn": IBaseSetting<boolean>;
"pseudonymousAnalyticsOptIn": IBaseSetting<boolean | null>;
"deviceClientInformationOptIn": IBaseSetting<boolean>;
"Registration.mobileRegistrationHelper": IBaseSetting<boolean>;
"autocompleteDelay": IBaseSetting<number>;
"readMarkerInViewThresholdMs": IBaseSetting<number>;
"readMarkerOutOfViewThresholdMs": IBaseSetting<number>;
"blacklistUnverifiedDevices": IBaseSetting<boolean>;
"urlPreviewsEnabled": IBaseSetting<boolean>;
"urlPreviewsEnabled_e2ee": IBaseSetting<boolean>;
"notificationsEnabled": IBaseSetting<boolean>;
"deviceNotificationsEnabled": IBaseSetting<boolean>;
"notificationSound": IBaseSetting<
| {
name: string;
type: string;
size: number;
url: string;
}
| false
>;
"notificationBodyEnabled": IBaseSetting<boolean>;
"audioNotificationsEnabled": IBaseSetting<boolean>;
"enableWidgetScreenshots": IBaseSetting<boolean>;
"promptBeforeInviteUnknownUsers": IBaseSetting<boolean>;
"widgetOpenIDPermissions": IBaseSetting<{
allow?: string[];
deny?: string[];
}>;
"breadcrumbs": IBaseSetting<boolean>;
"showHiddenEventsInTimeline": IBaseSetting<boolean>;
"lowBandwidth": IBaseSetting<boolean>;
"fallbackICEServerAllowed": IBaseSetting<boolean | null>;
"RoomList.preferredSorting": IBaseSetting<SortingAlgorithm>;
"RoomList.showMessagePreview": IBaseSetting<boolean>;
2024-12-23 20:25:15 +00:00
"RightPanel.phasesGlobal": IBaseSetting<IRightPanelForRoomStored | null>;
"RightPanel.phases": IBaseSetting<IRightPanelForRoomStored | null>;
"enableEventIndexing": IBaseSetting<boolean>;
"crawlerSleepTime": IBaseSetting<number>;
"showCallButtonsInComposer": IBaseSetting<boolean>;
"ircDisplayNameWidth": IBaseSetting<number>;
"layout": IBaseSetting<Layout>;
"Images.size": IBaseSetting<ImageSize>;
"showChatEffects": IBaseSetting<boolean>;
"Performance.addSendMessageTimingMetadata": IBaseSetting<boolean>;
"Widgets.pinned": IBaseSetting<{ [widgetId: string]: boolean }>;
"Widgets.layout": IBaseSetting<ILayoutSettings | null>;
"Spaces.allRoomsInHome": IBaseSetting<boolean>;
"Spaces.enabledMetaSpaces": IBaseSetting<Partial<Record<MetaSpace, boolean>>>;
"Spaces.showPeopleInSpace": IBaseSetting<boolean>;
"developerMode": IBaseSetting<boolean>;
"automaticErrorReporting": IBaseSetting<boolean>;
"automaticDecryptionErrorReporting": IBaseSetting<boolean>;
"automaticKeyBackNotEnabledReporting": IBaseSetting<boolean>;
"debug_scroll_panel": IBaseSetting<boolean>;
"debug_timeline_panel": IBaseSetting<boolean>;
"debug_registration": IBaseSetting<boolean>;
"debug_animation": IBaseSetting<boolean>;
"debug_legacy_call_handler": IBaseSetting<boolean>;
"audioInputMuted": IBaseSetting<boolean>;
"videoInputMuted": IBaseSetting<boolean>;
"activeCallRoomIds": IBaseSetting<string[]>;
"releaseAnnouncementData": IBaseSetting<ReleaseAnnouncementData>;
"Electron.autoLaunch": IBaseSetting<boolean>;
"Electron.warnBeforeExit": IBaseSetting<boolean>;
"Electron.alwaysShowMenuBar": IBaseSetting<boolean>;
"Electron.showTrayIcon": IBaseSetting<boolean>;
"Electron.enableHardwareAcceleration": IBaseSetting<boolean>;
"Electron.enableContentProtection": IBaseSetting<boolean>;
"mediaPreviewConfig": IBaseSetting<MediaPreviewConfig>;
"Developer.elementCallUrl": IBaseSetting<string>;
2024-12-23 20:25:15 +00:00
}
export type SettingKey = keyof Settings;
export type FeatureSettingKey = Assignable<Settings, IFeature>;
export type BooleanSettingKey = Assignable<Settings, IBaseSetting<boolean>> | FeatureSettingKey;
export type StringSettingKey = Assignable<Settings, IBaseSetting<string>>;
2024-12-23 20:25:15 +00:00
export const SETTINGS: Settings = {
"feature_video_rooms": {
isFeature: true,
labsGroup: LabGroup.VoiceAndVideo,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|video_rooms"),
2024-01-11 09:49:00 +00:00
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: false,
// Reload to ensure that the left panel etc. get remounted
controller: new ReloadOnChangeController(),
betaInfo: {
2023-08-24 11:16:06 +01:00
title: _td("labs|video_rooms"),
caption: () => (
<>
<p>
2023-08-24 11:16:06 +01:00
{_t("labs|video_rooms_a_new_way_to_chat", {
brand: SdkConfig.get().brand,
})}
</p>
<p>
2023-08-24 11:16:06 +01:00
{_t("labs|video_rooms_always_on_voip_channels", {
brand: SdkConfig.get().brand,
})}
</p>
</>
),
faq: () =>
SdkConfig.get().bug_report_endpoint_url && (
<>
2023-08-24 11:16:06 +01:00
<h4>{_t("labs|video_rooms_faq1_question")}</h4>
<p>{_t("labs|video_rooms_faq1_answer")}</p>
<h4>{_t("labs|video_rooms_faq2_question")}</h4>
<p>{_t("labs|video_rooms_faq2_answer")}</p>
</>
),
feedbackLabel: "video-room-feedback",
feedbackSubheading: _td("labs|video_rooms_feedbackSubheading"),
2024-10-16 16:43:07 +01:00
// eslint-disable-next-line @typescript-eslint/no-require-imports
image: require("../../res/img/betas/video_rooms.png"),
requiresRefresh: true,
},
},
2023-06-29 17:46:31 +02:00
[Features.NotificationSettings2]: {
isFeature: true,
labsGroup: LabGroup.Experimental,
2024-01-11 09:49:00 +00:00
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|notification_settings"),
2023-06-29 17:46:31 +02:00
default: false,
betaInfo: {
title: _td("labs|notification_settings_beta_title"),
2023-06-29 17:46:31 +02:00
caption: () => (
<>
<p>
{_t("labs|notification_settings_beta_caption", {
brand: SdkConfig.get().brand,
})}
2023-06-29 17:46:31 +02:00
</p>
</>
),
},
},
"feature_msc3531_hide_messages_pending_moderation": {
isFeature: true,
labsGroup: LabGroup.Moderation,
// Requires a reload since this setting is cached in EventUtils
controller: new ReloadOnChangeController(),
2023-08-24 11:16:06 +01:00
displayName: _td("labs|msc3531_hide_messages_pending_moderation"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
default: false,
},
"mediaPreviewConfig": {
controller: new MediaPreviewConfigController(),
supportedLevels: LEVELS_ROOM_SETTINGS,
default: MediaPreviewConfigController.default,
},
"feature_report_to_moderators": {
isFeature: true,
2021-11-25 16:21:10 +00:00
labsGroup: LabGroup.Moderation,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|report_to_moderators"),
description: _td("labs|report_to_moderators_description"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
default: false,
},
2020-10-10 16:32:49 +01:00
"feature_latex_maths": {
isFeature: true,
2021-11-25 16:21:10 +00:00
labsGroup: LabGroup.Messaging,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|latex_maths"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2020-10-10 16:32:49 +01:00
default: false,
},
"feature_wysiwyg_composer": {
isFeature: true,
labsGroup: LabGroup.Messaging,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|wysiwyg_composer"),
description: _td("labs|feature_wysiwyg_composer_description"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
default: false,
},
2019-10-31 13:19:54 -06:00
"feature_mjolnir": {
isFeature: true,
2021-11-25 16:21:10 +00:00
labsGroup: LabGroup.Moderation,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|mjolnir"),
description: _td("labs|currently_experimental"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
default: false,
},
2020-02-28 11:42:16 -07:00
"feature_custom_themes": {
isFeature: true,
2021-11-25 16:21:10 +00:00
labsGroup: LabGroup.Themes,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|custom_themes"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2020-02-28 11:42:16 -07:00
default: false,
},
"feature_exclude_insecure_devices": {
isFeature: true,
labsGroup: LabGroup.Encryption,
controller: new DeviceIsolationModeController(),
displayName: _td("labs|exclude_insecure_devices"),
description: _td("labs|exclude_insecure_devices_description"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
default: false,
},
"useOnlyCurrentProfiles": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|disable_historical_profile"),
default: false,
},
2019-10-31 13:19:54 -06:00
"mjolnirRooms": {
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
2019-10-31 13:19:54 -06:00
default: [],
},
"mjolnirPersonalRoom": {
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
2019-10-31 13:19:54 -06:00
default: null,
},
"feature_html_topic": {
isFeature: true,
labsGroup: LabGroup.Rooms,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|html_topic"),
default: false,
},
2019-12-09 13:28:43 +00:00
"feature_bridge_state": {
isFeature: true,
2021-11-25 16:21:10 +00:00
labsGroup: LabGroup.Rooms,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|bridge_state"),
2019-12-09 13:28:43 +00:00
default: false,
},
2021-12-15 06:34:47 -06:00
"feature_jump_to_date": {
isFeature: true,
labsGroup: LabGroup.Messaging,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|jump_to_date"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2021-12-15 06:34:47 -06:00
default: false,
controller: new ServerSupportUnstableFeatureController(
"feature_jump_to_date",
defaultWatchManager,
[["org.matrix.msc3030"], ["org.matrix.msc3030.stable"]],
"v1.6",
2023-08-24 11:16:06 +01:00
_td("labs|jump_to_date_msc_support"),
),
2021-12-15 06:34:47 -06:00
},
"RoomList.backgroundImage": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: null,
},
"sendReadReceipts": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|send_read_receipts"),
default: true,
controller: new ServerSupportUnstableFeatureController(
"sendReadReceipts",
defaultWatchManager,
[["org.matrix.msc2285.stable"]],
"v1.4",
_td("settings|send_read_receipts_unsupported"),
true,
),
2021-07-14 15:12:35 +02:00
},
2025-03-18 17:54:32 +00:00
// legacy sliding sync flag: no longer works, will error for anyone who's still using it
2022-09-07 16:42:39 +01:00
"feature_sliding_sync": {
2025-03-18 17:54:32 +00:00
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
shouldWarn: true,
default: false,
},
"feature_simplified_sliding_sync": {
2022-09-07 16:42:39 +01:00
isFeature: true,
labsGroup: LabGroup.Developer,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|sliding_sync"),
description: _td("labs|sliding_sync_description"),
shouldWarn: true,
2022-09-07 16:42:39 +01:00
default: false,
controller: new SlidingSyncController(),
},
2022-09-16 11:12:27 -04:00
"feature_element_call_video_rooms": {
isFeature: true,
labsGroup: LabGroup.VoiceAndVideo,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|element_call_video_rooms"),
2022-09-16 11:12:27 -04:00
controller: new ReloadOnChangeController(),
default: false,
},
"feature_group_calls": {
isFeature: true,
labsGroup: LabGroup.VoiceAndVideo,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|group_calls"),
controller: new ReloadOnChangeController(),
default: false,
},
"feature_disable_call_per_sender_encryption": {
isFeature: true,
labsGroup: LabGroup.VoiceAndVideo,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
displayName: _td("labs|feature_disable_call_per_sender_encryption"),
default: false,
},
"feature_allow_screen_share_only_mode": {
isFeature: true,
2024-01-11 09:49:00 +00:00
labsGroup: LabGroup.VoiceAndVideo,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
description: _td("labs|under_active_development"),
displayName: _td("labs|allow_screen_share_only_mode"),
controller: new ReloadOnChangeController(),
default: false,
},
"feature_location_share_live": {
isFeature: true,
labsGroup: LabGroup.Messaging,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|location_share_live"),
description: _td("labs|location_share_live_description"),
shouldWarn: true,
default: false,
},
"feature_dynamic_room_predecessors": {
isFeature: true,
labsGroup: LabGroup.Rooms,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|dynamic_room_predecessors"),
description: _td("labs|dynamic_room_predecessors_description"),
shouldWarn: true,
default: false,
},
/**
* @deprecated in favor of {@link fontSizeDelta}
*/
"baseFontSize": {
displayName: _td("settings|appearance|font_size"),
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
2023-06-29 11:30:25 +01:00
default: "",
controller: new FontSizeController(),
},
2023-09-01 04:16:24 -06:00
"feature_render_reaction_images": {
isFeature: true,
labsGroup: LabGroup.Messaging,
displayName: _td("labs|render_reaction_images"),
description: _td("labs|render_reaction_images_description"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-09-01 04:16:24 -06:00
default: false,
},
"feature_new_room_list": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
labsGroup: LabGroup.Ui,
displayName: _td("labs|new_room_list"),
description: _td("labs|under_active_development"),
isFeature: true,
default: false,
controller: new ReloadOnChangeController(),
},
2023-06-29 11:30:25 +01:00
/**
* With the transition to Compound we are moving to a base font size
* of 16px. We're taking the opportunity to move away from the `baseFontSize`
* setting that had a 5px offset.
* @deprecated in favor {@link fontSizeDelta}
2023-06-29 11:30:25 +01:00
*/
"baseFontSizeV2": {
displayName: _td("settings|appearance|font_size"),
2023-06-29 11:30:25 +01:00
supportedLevels: [SettingLevel.DEVICE],
default: "",
controller: new FontSizeController(),
},
/**
* This delta is added to the browser default font size
* Moving from `baseFontSizeV2` to `fontSizeDelta` to replace the default 16px to --cpd-font-size-root (browser default font size) + fontSizeDelta
*/
"fontSizeDelta": {
displayName: _td("settings|appearance|font_size"),
supportedLevels: [SettingLevel.DEVICE],
default: FontWatcher.DEFAULT_DELTA,
controller: new FontSizeController(),
},
"useCustomFontSize": {
displayName: _td("settings|appearance|custom_font_size"),
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
},
2019-01-24 20:57:40 -07:00
"MessageComposerInput.suggestEmoji": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|emoji_autocomplete"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "MessageComposerInput.dontSuggestEmoji",
},
"MessageComposerInput.showStickersButton": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|show_stickers_button"),
default: true,
controller: new UIFeatureController(UIFeature.Widgets, false),
},
"MessageComposerInput.showPollsButton": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|preferences|show_polls_button"),
default: true,
},
"MessageComposerInput.insertTrailingColon": {
2022-03-04 08:23:26 +01:00
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|insert_trailing_colon_mentions"),
2022-03-04 08:23:26 +01:00
default: true,
},
// TODO: Wire up appropriately to UI (FTUE notifications)
"Notifications.alwaysShowBadgeCounts": {
2020-06-25 08:58:54 +01:00
supportedLevels: LEVELS_ROOM_OR_ACCOUNT,
default: false,
},
2024-04-12 14:18:09 +01:00
// Used to be a feature, name kept for backwards compat
"feature_hidebold": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
2023-08-24 11:16:06 +01:00
displayName: _td("labs|hidebold"),
default: false,
},
2024-04-12 14:18:09 +01:00
"Notifications.showbold": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
displayName: _td("settings|showbold"),
default: false,
invertedSettingName: "feature_hidebold",
2024-04-22 17:15:29 +01:00
controller: new AnalyticsController("WebSettingsNotificationsShowBoldToggle"),
2024-04-12 14:18:09 +01:00
},
"Notifications.tac_only_notifications": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
displayName: _td("settings|tac_only_notifications"),
default: true,
2024-04-22 17:15:29 +01:00
controller: new AnalyticsController("WebSettingsNotificationsTACOnlyNotificationsToggle"),
2024-04-12 14:18:09 +01:00
},
2023-07-10 10:01:03 +02:00
"feature_ask_to_join": {
isFeature: true,
labsGroup: LabGroup.Rooms,
2024-01-11 09:49:00 +00:00
default: false,
displayName: _td("labs|ask_to_join"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-07-10 10:01:03 +02:00
},
2023-08-31 21:21:32 +01:00
"feature_notifications": {
isFeature: true,
labsGroup: LabGroup.Messaging,
displayName: _td("labs|notifications"),
description: _td("labs|unrealiable_e2e"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
2023-08-31 21:21:32 +01:00
default: false,
},
"useCompactLayout": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|preferences|compact_modern"),
default: false,
controller: new IncompatibleController("layout", false, (v: Layout) => v !== Layout.Group),
},
2019-01-24 20:57:40 -07:00
"showRedactions": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("settings|show_redaction_placeholder"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "hideRedactions",
},
2019-01-24 20:57:40 -07:00
"showJoinLeaves": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("settings|show_join_leave"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "hideJoinLeaves",
},
2019-01-24 20:57:40 -07:00
"showAvatarChanges": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("settings|show_avatar_changes"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "hideAvatarChanges",
2017-11-13 12:58:10 -07:00
},
2019-01-24 20:57:40 -07:00
"showDisplaynameChanges": {
2017-11-13 12:58:10 -07:00
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("settings|show_displayname_changes"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "hideDisplaynameChanges",
},
2019-01-24 20:57:40 -07:00
"showReadReceipts": {
supportedLevels: LEVELS_ROOM_SETTINGS,
displayName: _td("settings|show_read_receipts"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "hideReadReceipts",
},
"showTwelveHourTimestamps": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|use_12_hour_format"),
default: false,
},
"alwaysShowTimestamps": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|always_show_message_timestamps"),
default: false,
},
2024-09-02 11:07:07 +02:00
"userTimezone": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|preferences|user_timezone"),
default: "",
},
2024-09-12 14:18:25 +01:00
"userTimezonePublish": {
// This is per-device so you can avoid having devices overwrite each other.
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|preferences|publish_timezone"),
default: false,
controller: new ServerSupportUnstableFeatureController(
"userTimezonePublish",
defaultWatchManager,
[[UNSTABLE_MSC4133_EXTENDED_PROFILES]],
undefined,
_td("labs|extended_profiles_msc_support"),
),
},
"autoplayGifs": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|autoplay_gifs"),
default: false,
},
"autoplayVideo": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|autoplay_videos"),
default: false,
},
"enableSyntaxHighlightLanguageDetection": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|automatic_language_detection_syntax_highlight"),
default: false,
},
2021-01-18 17:44:32 +01:00
"expandCodeByDefault": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|code_block_expand_default"),
2021-01-18 17:44:32 +01:00
default: false,
},
2021-01-21 13:08:55 +01:00
"showCodeLineNumbers": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|code_block_line_numbers"),
2021-01-21 13:08:55 +01:00
default: true,
},
2021-02-26 18:34:54 +01:00
"scrollToBottomOnMessageSent": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|jump_to_bottom_on_send"),
2021-02-26 18:34:54 +01:00
default: true,
},
2019-01-24 20:57:40 -07:00
"Pill.shouldShowPillAvatar": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|preferences|show_avatars_pills"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "Pill.shouldHidePillAvatar",
},
2019-01-24 20:57:40 -07:00
"TextualBody.enableBigEmoji": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|big_emoji"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "TextualBody.disableBigEmoji",
},
"MessageComposerInput.isRichTextEnabled": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
},
"MessageComposer.showFormatting": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
},
2019-01-24 20:57:40 -07:00
"sendTypingNotifications": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|send_typing_notifications"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "dontSendTypingNotifications",
},
2020-02-08 21:21:30 +00:00
"showTypingNotifications": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|show_typing_notifications"),
2020-02-08 21:21:30 +00:00
default: true,
},
2021-01-17 16:44:29 +01:00
"ctrlFForSearch": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: IS_MAC ? _td("settings|use_command_f_search") : _td("settings|use_control_f_search"),
2021-01-17 16:44:29 +01:00
default: false,
},
"MessageComposerInput.ctrlEnterToSend": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: IS_MAC
? _td("settings|use_command_enter_send_message")
: _td("settings|use_control_enter_send_message"),
default: false,
},
2021-02-12 07:53:09 +01:00
"MessageComposerInput.surroundWith": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|preferences|surround_text"),
2021-02-12 07:53:09 +01:00
default: false,
},
"MessageComposerInput.autoReplaceEmoji": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|replace_plain_emoji"),
default: false,
},
"MessageComposerInput.useMarkdown": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|enable_markdown"),
description: () => _t("settings|enable_markdown_description", {}, { code: (sub) => <code>{sub}</code> }),
default: true,
},
"VideoView.flipVideoHorizontally": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|voip|mirror_local_feed"),
default: false,
},
"theme": {
2019-02-12 09:13:39 +00:00
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
2019-02-13 09:45:20 +00:00
default: "light",
controller: new ThemeController(),
},
2019-10-01 15:21:22 +02:00
"custom_themes": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
2024-12-23 20:25:15 +00:00
default: [],
2019-10-01 15:21:22 +02:00
},
2019-11-20 13:41:06 +00:00
"use_system_theme": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: true,
displayName: _td("settings|appearance|match_system_theme"),
2019-11-20 13:41:06 +00:00
},
2023-11-23 13:04:05 +00:00
"useBundledEmojiFont": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
2023-11-27 09:59:09 +00:00
default: true,
2023-11-23 13:04:05 +00:00
displayName: _td("settings|appearance|bundled_emoji_font"),
controller: new SystemFontController(),
},
2020-06-15 15:33:52 +01:00
"useSystemFont": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
displayName: _td("settings|appearance|custom_font"),
2023-11-23 13:04:05 +00:00
controller: new SystemFontController(),
2020-06-15 15:33:52 +01:00
},
"systemFont": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: "",
displayName: _td("settings|appearance|custom_font_name"),
2020-06-15 15:33:52 +01:00
controller: new SystemFontController(),
},
2019-02-13 11:51:32 +00:00
"webRtcAllowPeerToPeer": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
displayName: _td("settings|voip|allow_p2p"),
description: _td("settings|voip|allow_p2p_description"),
2019-01-24 20:57:40 -07:00
default: true,
invertedSettingName: "webRtcForceTURN",
},
"webrtc_audiooutput": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: "default",
},
"webrtc_audioinput": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: "default",
},
"webrtc_videoinput": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: "default",
},
2022-11-09 21:14:55 +01:00
"webrtc_audio_autoGainControl": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|voip|auto_gain_control"),
2022-11-09 21:14:55 +01:00
default: true,
},
"webrtc_audio_echoCancellation": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|voip|echo_cancellation"),
2022-11-09 21:14:55 +01:00
default: true,
},
"webrtc_audio_noiseSuppression": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|voip|noise_suppression"),
2022-11-09 21:14:55 +01:00
default: true,
},
"language": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
2017-11-05 15:37:06 -07:00
default: "en",
},
2019-04-04 15:06:03 -06:00
"breadcrumb_rooms": {
// not really a setting
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
default: [],
},
"recent_emoji": {
// not really a setting
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
2019-04-04 15:06:03 -06:00
default: [],
},
2021-12-10 11:50:01 +00:00
"SpotlightSearch.recentSearches": {
// not really a setting
supportedLevels: [SettingLevel.ACCOUNT],
default: [], // list of room IDs, most recent first
},
"showMediaEventIds": {
// not really a setting
supportedLevels: [SettingLevel.DEVICE],
default: {}, // List of events => is visible
},
"SpotlightSearch.showNsfwPublicRooms": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|show_nsfw_content"),
default: false,
},
"room_directory_servers": {
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
default: [],
},
2019-10-29 14:26:35 -06:00
"integrationProvisioning": {
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ACCOUNT],
default: true,
},
2019-10-29 14:35:35 -06:00
"allowedWidgets": {
supportedLevels: [SettingLevel.ROOM_ACCOUNT, SettingLevel.ROOM_DEVICE],
supportedLevelsAreOrdered: true,
2019-10-29 14:35:35 -06:00
default: {}, // none allowed
},
2022-06-14 17:51:51 +01:00
// Legacy, kept around for transitionary purposes
2018-05-15 13:15:40 +01:00
"analyticsOptIn": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: false,
},
2021-12-06 09:39:33 +11:00
"pseudonymousAnalyticsOptIn": {
supportedLevels: [SettingLevel.ACCOUNT],
displayName: _td("settings|security|send_analytics"),
2021-12-06 09:39:33 +11:00
default: null,
},
"deviceClientInformationOptIn": {
supportedLevels: [SettingLevel.ACCOUNT],
displayName: _td("settings|security|record_session_details"),
default: false,
},
"Registration.mobileRegistrationHelper": {
supportedLevels: [SettingLevel.CONFIG],
default: false,
},
"autocompleteDelay": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: 200,
},
2019-09-17 17:34:30 +01:00
"readMarkerInViewThresholdMs": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: 3000,
},
"readMarkerOutOfViewThresholdMs": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: 30000,
},
"blacklistUnverifiedDevices": {
// We specifically want to have room-device > device so that users may set a device default
// with a per-room override.
2020-07-29 21:00:32 -06:00
supportedLevels: [SettingLevel.ROOM_DEVICE, SettingLevel.DEVICE],
supportedLevelsAreOrdered: true,
2017-11-04 19:15:55 -07:00
displayName: {
"default": _td("settings|security|strict_encryption"),
"room-device": _td("room_settings|security|strict_encryption"),
2017-11-04 19:15:55 -07:00
},
default: false,
controller: new UIFeatureController(UIFeature.AdvancedEncryption),
},
"urlPreviewsEnabled": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: {
"default": _td("settings|inline_url_previews_default"),
"room-account": _td("settings|inline_url_previews_room_account"),
"room": _td("settings|inline_url_previews_room"),
},
default: true,
controller: new UIFeatureController(UIFeature.URLPreviews),
},
"urlPreviewsEnabled_e2ee": {
2024-08-06 10:54:11 +01:00
supportedLevels: [SettingLevel.ROOM_DEVICE],
displayName: {
"room-account": _td("settings|inline_url_previews_room_account"),
},
default: false,
controller: new UIFeatureController(UIFeature.URLPreviews),
},
2017-11-04 21:47:18 -07:00
"notificationsEnabled": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
2017-11-04 22:28:35 -07:00
controller: new NotificationsEnabledController(),
2017-11-04 21:47:18 -07:00
},
"deviceNotificationsEnabled": {
supportedLevels: [SettingLevel.DEVICE],
default: true,
},
2019-04-19 22:31:51 +01:00
"notificationSound": {
supportedLevels: LEVELS_ROOM_OR_ACCOUNT,
default: false,
},
2017-11-04 21:47:18 -07:00
"notificationBodyEnabled": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
2017-11-04 22:28:35 -07:00
default: true,
controller: new NotificationBodyEnabledController(),
2017-11-04 21:47:18 -07:00
},
"audioNotificationsEnabled": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
2017-11-04 22:28:35 -07:00
default: true,
2017-11-04 21:47:18 -07:00
},
"enableWidgetScreenshots": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("devtools|widget_screenshots"),
default: false,
},
2019-01-16 15:07:30 +00:00
"promptBeforeInviteUnknownUsers": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|prompt_invite"),
2019-01-16 15:07:30 +00:00
default: true,
},
"widgetOpenIDPermissions": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: {
allow: [],
deny: [],
},
},
"breadcrumbs": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|show_breadcrumbs"),
default: true,
},
2019-05-17 17:43:08 +01:00
"showHiddenEventsInTimeline": {
displayName: _td("devtools|show_hidden_events"),
2019-05-17 17:43:08 +01:00
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
2019-02-08 16:44:03 +00:00
"lowBandwidth": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
displayName: _td("devtools|low_bandwidth_mode"),
description: _td("devtools|low_bandwidth_mode_description"),
2019-02-08 16:44:03 +00:00
default: false,
controller: new ReloadOnChangeController(),
shouldWarn: true,
2019-02-08 16:44:03 +00:00
},
"fallbackICEServerAllowed": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
description: _td("settings|voip|enable_fallback_ice_server_description"),
// This is a tri-state value, where `null` means "prompt the user".
default: null,
controller: new FallbackIceServerController(),
},
"RoomList.preferredSorting": {
supportedLevels: [SettingLevel.DEVICE],
default: SortingAlgorithm.Recency,
},
"RoomList.showMessagePreview": {
supportedLevels: [SettingLevel.DEVICE],
default: false,
displayName: _td("settings|show_message_previews"),
},
2022-01-05 16:14:44 +01:00
"RightPanel.phasesGlobal": {
supportedLevels: [SettingLevel.DEVICE],
default: null,
},
2022-01-05 16:14:44 +01:00
"RightPanel.phases": {
supportedLevels: [SettingLevel.ROOM_DEVICE],
default: null,
},
"enableEventIndexing": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|security|enable_message_search"),
default: true,
2019-11-26 15:06:04 +01:00
},
"crawlerSleepTime": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
displayName: _td("settings|security|message_search_sleep_time"),
default: 3000,
},
"showCallButtonsInComposer": {
2021-02-26 13:46:39 -07:00
// Dev note: This is no longer "in composer" but is instead "in room header".
// TODO: Rename with settings v3
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: true,
2020-09-16 13:40:27 +01:00
controller: new UIFeatureController(UIFeature.Voip),
},
2020-05-13 02:16:43 +01:00
"ircDisplayNameWidth": {
// We specifically want to have room-device > device so that users may set a device default
// with a per-room override.
2020-07-28 12:02:02 -06:00
supportedLevels: [SettingLevel.ROOM_DEVICE, SettingLevel.DEVICE],
supportedLevelsAreOrdered: true,
2020-05-13 02:16:43 +01:00
default: 80,
},
2021-01-22 13:44:45 +01:00
"layout": {
2020-06-16 17:55:19 +01:00
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
2021-01-22 13:44:45 +01:00
default: Layout.Group,
2020-06-16 17:55:19 +01:00
},
"Images.size": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: ImageSize.Normal,
},
2020-10-19 21:25:01 +02:00
"showChatEffects": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("settings|show_chat_effects"),
2020-10-19 21:25:01 +02:00
default: true,
controller: new ReducedMotionController(),
2020-10-19 13:24:22 +02:00
},
"Performance.addSendMessageTimingMetadata": {
supportedLevels: [SettingLevel.CONFIG],
default: false,
},
"Widgets.pinned": {
// deprecated
supportedLevels: LEVELS_ROOM_OR_ACCOUNT,
default: {},
},
"Widgets.layout": {
2020-09-08 08:48:03 +01:00
supportedLevels: LEVELS_ROOM_OR_ACCOUNT,
2020-09-08 16:27:09 +01:00
default: {},
2020-09-08 08:48:03 +01:00
},
2021-07-30 12:20:02 +01:00
"Spaces.allRoomsInHome": {
displayName: _td("settings|all_rooms_home"),
description: _td("settings|all_rooms_home_description"),
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
2020-09-24 09:28:49 +01:00
},
2021-11-11 13:07:41 +00:00
"Spaces.enabledMetaSpaces": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: {
[MetaSpace.Home]: true,
},
},
"Spaces.showPeopleInSpace": {
supportedLevels: [SettingLevel.ROOM_ACCOUNT],
default: true,
},
"developerMode": {
displayName: _td("devtools|developer_mode"),
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
},
2021-10-29 09:34:25 +01:00
"automaticErrorReporting": {
displayName: _td("labs|automatic_debug_logs"),
2021-10-29 09:34:25 +01:00
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: false,
controller: new ReloadOnChangeController(),
},
"automaticDecryptionErrorReporting": {
displayName: _td("labs|automatic_debug_logs_decryption"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
controller: new ReloadOnChangeController(),
},
"automaticKeyBackNotEnabledReporting": {
displayName: _td("labs|automatic_debug_logs_key_backup"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: false,
},
"debug_scroll_panel": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"debug_timeline_panel": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"debug_registration": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
2022-07-29 13:43:29 +02:00
"debug_animation": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"debug_legacy_call_handler": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"audioInputMuted": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"videoInputMuted": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: false,
},
"activeCallRoomIds": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: [],
},
2024-04-08 10:43:59 +02:00
/**
* Enable or disable the release announcement feature
*/
[Features.ReleaseAnnouncement]: {
isFeature: true,
labsGroup: LabGroup.Ui,
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
default: true,
displayName: _td("labs|release_announcement"),
},
/**
* Managed by the {@link ReleaseAnnouncementStore}
* Store the release announcement data
*/
"releaseAnnouncementData": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: {},
},
[UIFeature.RoomHistorySettings]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.AdvancedEncryption]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.URLPreviews]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.Widgets]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.LocationSharing]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
2020-09-16 13:40:27 +01:00
[UIFeature.Voip]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
2020-09-16 10:59:14 +01:00
[UIFeature.Feedback]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.Registration]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.PasswordReset]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.Deactivate]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.ShareQRCode]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.ShareSocial]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
2020-09-16 14:45:34 +01:00
[UIFeature.IdentityServer]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
2021-07-13 15:05:27 +01:00
// Identity server (discovery) settings make no sense if 3PIDs in general are hidden
2020-09-18 11:15:48 +01:00
controller: new UIFeatureController(UIFeature.ThirdPartyID),
2020-09-16 14:45:34 +01:00
},
2020-09-17 13:25:18 +01:00
[UIFeature.ThirdPartyID]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.AdvancedSettings]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.TimelineEnableRelativeDates]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
[UIFeature.BulkUnverifiedSessionsReminder]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
// Electron-specific settings, they are stored by Electron and set/read over an IPC.
// We store them over there are they are necessary to know before the renderer process launches.
"Electron.autoLaunch": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|start_automatically"),
default: false,
},
"Electron.warnBeforeExit": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|warn_quit"),
default: true,
},
"Electron.alwaysShowMenuBar": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|preferences|always_show_menu_bar"),
default: false,
},
"Electron.showTrayIcon": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|preferences|enable_tray_icon"),
default: true,
},
"Electron.enableHardwareAcceleration": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|preferences|enable_hardware_acceleration"),
default: true,
},
"Electron.enableContentProtection": {
supportedLevels: [SettingLevel.PLATFORM],
displayName: _td("settings|preferences|enable_hardware_acceleration"),
default: false,
},
"Developer.elementCallUrl": {
supportedLevels: [SettingLevel.DEVICE],
displayName: _td("devtools|settings|elementCallUrl"),
default: "",
},
2017-11-05 15:37:06 -07:00
};