diff --git a/README.md b/README.md index 546e491a1..ecbabcf2c 100644 --- a/README.md +++ b/README.md @@ -115,30 +115,33 @@ For more details on the packages, see the For operating and deploying Element Call on your own server, refer to the [**Self-Hosting Guide**](./docs/self_hosting.md). -## đź§ MatrixRTC Backend Discovery and Selection +## MatrixRTC Transports -For proper Element Call operation each site deployment needs a MatrixRTC backend -setup as outlined in the [Self-Hosting Guide](./docs/self_hosting.md). A typical -federated site deployment for three different sites A, B and C is depicted below. +For proper operation of Element Call, each deployment needs to set up a +MatrixRTC transport in the form of a LiveKit server as outlined in the +[Self-Hosting Guide](./docs/self_hosting.md). A typical federated site +deployment for three different sites A, B and C is depicted below.
+ {t( + "settings.audio_processing_description", + "Changes apply on next call join.", + )} +
+
@@ -166,6 +364,7 @@ export const DeveloperSettingsTab: FC
{t("developer_mode.environment_variables")}
{JSON.stringify(env, null, 2)}
{t("developer_mode.url_params")}
diff --git a/src/settings/SettingsModal.module.css b/src/settings/SettingsModal.module.css index b07cb4c81..bff1a30ee 100644 --- a/src/settings/SettingsModal.module.css +++ b/src/settings/SettingsModal.module.css @@ -33,3 +33,27 @@ Please see LICENSE in the repository root for full details. .volumeSlider > p { color: var(--cpd-color-text-secondary); } + +.volumeSlider > select { + display: block; + width: 100%; + padding: 8px 12px; + margin-top: var(--cpd-space-1x); + border: 1px solid var(--cpd-color-border-interactive-primary); + border-radius: 4px; + background-color: var(--cpd-color-bg-canvas-default); + color: var(--cpd-color-text-primary); + font-size: var(--font-size-body); + font-family: inherit; + cursor: pointer; +} + +.volumeSlider > select:focus { + outline: none; + border-color: var(--cpd-color-text-link-external); +} + +.settingValue { + font-weight: normal; + color: var(--cpd-color-text-secondary); +} diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 4eb1efdd3..665eadf01 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -152,7 +152,13 @@ export const SettingsModal: FC{t("settings.audio_tab.effect_volume_description")}
Device ID: DEVICE123
++ Configure resolution, framerate, bitrate, and codec for camera video. Changes apply on next call join. +
++ Configure resolution, framerate, bitrate, and codec for screen sharing +
++ Changes apply on next call join. +
+Environment variables
diff --git a/src/settings/settings.test.ts b/src/settings/settings.test.ts new file mode 100644 index 000000000..5280e58ea --- /dev/null +++ b/src/settings/settings.test.ts @@ -0,0 +1,111 @@ +/* +Copyright 2026 Element Creations Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { describe, expect, it, beforeEach } from "vitest"; + +import { + Setting, + parseResolution, + seedSettingsFromConfig, + screenShareCodec, + screenShareResolution, + screenShareFramerate, + screenShareBitrate, + cameraCodec, + cameraResolution, + cameraFramerate, + cameraBitrate, +} from "./settings"; + +beforeEach(() => { + localStorage.clear(); +}); + +describe("parseResolution", () => { + it("parses a WIDTHxHEIGHT string", () => { + expect(parseResolution("1920x1080")).toEqual({ + width: 1920, + height: 1080, + }); + }); + + it("parses non-standard resolutions", () => { + expect(parseResolution("640x360")).toEqual({ width: 640, height: 360 }); + }); +}); + +describe("Setting", () => { + describe("seedFromConfig", () => { + it("updates value when no localStorage value exists", () => { + const setting = new Setting