Skip to content
This repository was archived by the owner on Feb 11, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions res/css/_components.pcss
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@
@import "./views/settings/tabs/user/_PreferencesUserSettingsTab.pcss";
@import "./views/settings/tabs/user/_SecurityUserSettingsTab.pcss";
@import "./views/settings/tabs/user/_SidebarUserSettingsTab.pcss";
@import "./views/settings/tabs/user/_ChangelogUserSettingsTab.pcss";
@import "./views/spaces/_SpaceBasicSettings.pcss";
@import "./views/spaces/_SpaceChildrenPicker.pcss";
@import "./views/spaces/_SpaceCreateMenu.pcss";
Expand Down
15 changes: 15 additions & 0 deletions res/css/views/settings/tabs/user/_ChangelogUserSettingsTab.pcss
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
Copyright 2025 hazzuk.

SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/

.mx_ChangelogDescription_buttons {
display: flex;
gap: var(--cpd-space-4x);

svg {
margin-left: var(--cpd-space-2x);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,22 @@ import DOMPurify from "dompurify";
import { SettingsSubsectionText } from "../../shared/SettingsSubsection";
import SdkConfig from "../../../../../SdkConfig";

const CHANGELOG_URL = "https://roadmap.elecord.app/";
const ROADMAP_URL = "https://roadmap.elecord.app/";
const RELEASES_URL = "https://github.com/elecordapp/elecord-web/releases";

const ChangelogUserSettingsTab: React.FC = () => {
const [changelog, setChangelog] = useState<string>("");
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState<string | null>(null);

// open external roadmap
const onOpenChangelog = (): void => {
window.open(CHANGELOG_URL, "_blank");
const onOpenRoadmap = (): void => {
window.open(ROADMAP_URL, "_blank");
};

// open github releases
const onOpenReleases = (): void => {
window.open(RELEASES_URL, "_blank");
};

// fetch LATEST.md changelog
Expand Down Expand Up @@ -67,16 +73,29 @@ const ChangelogUserSettingsTab: React.FC = () => {
return (
<SettingsTab>
<SettingsSection heading={_t("settings|changelog|latest_changes")}>

{/* description */}
<SettingsSubsectionText>
{_t("settings|changelog|description", { brand: SdkConfig.get("brand") })}
</SettingsSubsectionText>
{/* roadmap button */}
<AccessibleButton kind="primary_outline" onClick={onOpenChangelog}>
{_t("settings|changelog|roadmap")}
<PopOutIcon height={20} width={20} />
</AccessibleButton>

{/* external links */}
<div className="mx_ChangelogDescription_buttons">
{/* roadmap button */}
<AccessibleButton kind="primary_outline" onClick={onOpenRoadmap}>
{_t("settings|changelog|roadmap")}
<PopOutIcon height={20} width={20} />
</AccessibleButton>
{/* releases button */}
<AccessibleButton kind="primary_outline" onClick={onOpenReleases}>
{_t("settings|changelog|releases")}
<PopOutIcon height={20} width={20} />
</AccessibleButton>
</div>

{/* render changelog */}
<div dangerouslySetInnerHTML={{ __html: changelog }} />

</SettingsSection>
</SettingsTab>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ const RichPresenceUserSettingsTab: React.FC = () => {
{/* download button */}
<AccessibleButton kind="primary_outline" onClick={onDownloadClick}>
{_t("settings|rich_presence|download_button")}
<PopOutIcon height={20} width={20} />
<PopOutIcon height={20} width={20} style={{ marginLeft: "var(--cpd-space-2x)" }}/>
</AccessibleButton>

{/* detection notice */}
Expand Down
1 change: 1 addition & 0 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -2469,6 +2469,7 @@
"latest_changes": "Latest changes",
"loading_changelog": "Loading changelog…",
"roadmap": "Roadmap",
"releases": "Release history",
"description": "Read about %(brand)s's latest new features and bug fixes here. Or see what's coming next by checking out the roadmap."
},
"code_block_expand_default": "Expand code blocks by default",
Expand Down