From d3c14d6550e5267a0316bb7905bedd101c5da96f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 00:53:34 +0000 Subject: [PATCH 1/2] Initial plan From 411bef18ffc526d5d5b4cf2f5580dc1da55825a1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 01:02:48 +0000 Subject: [PATCH 2/2] Add release notes settings modal entry Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- frontend/app/modals/modalregistry.tsx | 2 ++ .../app/onboarding/onboarding-upgrade-patch.tsx | 16 ++++++++++++++-- frontend/app/workspace/widgets.tsx | 9 +++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/frontend/app/modals/modalregistry.tsx b/frontend/app/modals/modalregistry.tsx index 53fabde064..88d19e732c 100644 --- a/frontend/app/modals/modalregistry.tsx +++ b/frontend/app/modals/modalregistry.tsx @@ -4,6 +4,7 @@ import { MessageModal } from "@/app/modals/messagemodal"; import { NewInstallOnboardingModal } from "@/app/onboarding/onboarding"; import { UpgradeOnboardingModal } from "@/app/onboarding/onboarding-upgrade"; +import { UpgradeOnboardingPatch } from "@/app/onboarding/onboarding-upgrade-patch"; import { DeleteFileModal, PublishAppModal, RenameFileModal } from "@/builder/builder-apppanel"; import { SetSecretDialog } from "@/builder/tabs/builder-secrettab"; import { AboutModal } from "./about"; @@ -12,6 +13,7 @@ import { UserInputModal } from "./userinputmodal"; const modalRegistry: { [key: string]: React.ComponentType } = { [NewInstallOnboardingModal.displayName || "NewInstallOnboardingModal"]: NewInstallOnboardingModal, [UpgradeOnboardingModal.displayName || "UpgradeOnboardingModal"]: UpgradeOnboardingModal, + [UpgradeOnboardingPatch.displayName || "UpgradeOnboardingPatch"]: UpgradeOnboardingPatch, [UserInputModal.displayName || "UserInputModal"]: UserInputModal, [AboutModal.displayName || "AboutModal"]: AboutModal, [MessageModal.displayName || "MessageModal"]: MessageModal, diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx index 5984eeef53..0cea09ac75 100644 --- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx @@ -32,6 +32,10 @@ interface VersionConfig { nextText?: string; } +interface UpgradeOnboardingPatchProps { + isReleaseNotes?: boolean; +} + interface UpgradeOnboardingFooterProps { hasPrev: boolean; hasNext: boolean; @@ -131,7 +135,7 @@ export const UpgradeOnboardingVersions: VersionConfig[] = [ }, ]; -const UpgradeOnboardingPatch = () => { +const UpgradeOnboardingPatch = ({ isReleaseNotes = false }: UpgradeOnboardingPatchProps) => { const modalRef = useRef(null); const [isCompact, setIsCompact] = useState(window.innerHeight < 800); const [currentIndex, setCurrentIndex] = useState(UpgradeOnboardingVersions.length - 1); @@ -174,13 +178,21 @@ const UpgradeOnboardingPatch = () => { }, []); const doClose = () => { - globalStore.set(modalsModel.upgradeOnboardingOpen, false); + if (isReleaseNotes) { + modalsModel.popModal(); + } else { + globalStore.set(modalsModel.upgradeOnboardingOpen, false); + } setTimeout(() => { globalRefocus(); }, 10); }; const handleClose = () => { + if (isReleaseNotes) { + doClose(); + return; + } const clientId = ClientModel.getInstance().clientId; RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client", clientId), diff --git a/frontend/app/workspace/widgets.tsx b/frontend/app/workspace/widgets.tsx index 940fb4e96c..6db20fc219 100644 --- a/frontend/app/workspace/widgets.tsx +++ b/frontend/app/workspace/widgets.tsx @@ -7,6 +7,7 @@ import { RpcApi } from "@/app/store/wshclientapi"; import { TabRpcClient } from "@/app/store/wshrpcutil"; import { shouldIncludeWidgetForWorkspace } from "@/app/workspace/widgetfilter"; import { atoms, createBlock, getApi, isDev } from "@/store/global"; +import { modalsModel } from "@/store/modalmodel"; import { fireAndForget, isBlank, makeIconClass } from "@/util/util"; import { FloatingPortal, @@ -284,6 +285,14 @@ const SettingsFloatingWindow = memo( onClose(); }, }, + { + icon: "book-open", + label: "Release Notes", + onClick: () => { + modalsModel.pushModal("UpgradeOnboardingPatch", { isReleaseNotes: true }); + onClose(); + }, + }, { icon: "circle-question", label: "Help",