From 527f692abd15540e35cb1c5e05a3257829167cfe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 23:59:42 +0000 Subject: [PATCH 1/7] Initial plan From 969c856c37d04433ea8b964fb3335f062f24d784 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 00:08:38 +0000 Subject: [PATCH 2/7] Add consolidated onboarding preview page Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- .../app/onboarding/onboarding-features.tsx | 87 +++++++++++++++++++ .../onboarding/onboarding-upgrade-patch.tsx | 23 ++++- .../preview/previews/onboarding.preview.tsx | 16 ++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 frontend/preview/previews/onboarding.preview.tsx diff --git a/frontend/app/onboarding/onboarding-features.tsx b/frontend/app/onboarding/onboarding-features.tsx index 595a69938d..db6cc2ccbb 100644 --- a/frontend/app/onboarding/onboarding-features.tsx +++ b/frontend/app/onboarding/onboarding-features.tsx @@ -266,6 +266,93 @@ const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => ); }; +const FilesPageV = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { + const [fireClicked, setFireClicked] = useState(false); + + const handleFireClick = () => { + setFireClicked(!fireClicked); + }; + + return ( +
+
+
+ +
+
Viewing/Editing Files
+
+
+
+
+
+

+ Wave can preview markdown, images, and video files on both local and remote{" "} + machines. +

+
+ +
+

+ Use{" "} + wsh view [filename]{" "} + to preview files in Wave's graphical viewer +

+
+
+
+ +
+

+ Use{" "} + wsh edit [filename]{" "} + to open config files or code files in Wave's graphical editor +

+
+
+

+ These commands work seamlessly on both local and remote machines, making it easy to view + and edit files wherever they are. +

+ +
+
+
+
+
+
+
+ > + wsh view keyboard-shortcuts.md +
+
+
+
+
+ +
+ ); +}; + +export const OnboardingFeaturesV = () => { + const noop = () => {}; + return ( +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ ); +}; + export const OnboardingFeatures = ({ onComplete }: { onComplete: () => void }) => { const [currentPage, setCurrentPage] = useState("waveai"); diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx index fc2a0ee3ac..5e322b38b4 100644 --- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx @@ -66,6 +66,27 @@ const versions: VersionConfig[] = [ }, ]; +const UpgradeOnboardingPatchV = () => { + return ( +
+ {versions.map((version) => ( +
+
+
+
+
+ +
+
Wave {version.version} Update
+
+
{version.content()}
+
+
+ ))} +
+ ); +}; + const UpgradeOnboardingPatch = () => { const modalRef = useRef(null); const [isCompact, setIsCompact] = useState(window.innerHeight < 800); @@ -191,4 +212,4 @@ const UpgradeOnboardingPatch = () => { UpgradeOnboardingPatch.displayName = "UpgradeOnboardingPatch"; -export { UpgradeOnboardingPatch }; +export { UpgradeOnboardingPatch, UpgradeOnboardingPatchV }; diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx new file mode 100644 index 0000000000..e2a087851b --- /dev/null +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -0,0 +1,16 @@ +// Copyright 2026, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +import { OnboardingFeaturesV } from "@/app/onboarding/onboarding-features"; +import { UpgradeOnboardingPatchV } from "@/app/onboarding/onboarding-upgrade-patch"; + +export function OnboardingPreview() { + return ( +
+
Onboarding features
+ +
Onboarding patch updates
+ +
+ ); +} From b5d014ff0d3fa5ef96853e57aebdd6ecaef20b12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:12:57 +0000 Subject: [PATCH 3/7] Enable scrolling for preview pages Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- frontend/preview/preview.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/preview/preview.tsx b/frontend/preview/preview.tsx index e481ed351a..c38c9fe297 100644 --- a/frontend/preview/preview.tsx +++ b/frontend/preview/preview.tsx @@ -93,7 +93,7 @@ function PreviewApp() { return ( <> -
+
From 96528316b8e1b143f57978859f48ff95adde049c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:44:08 +0000 Subject: [PATCH 4/7] Move onboarding preview wrappers into preview file Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- .../app/onboarding/onboarding-features.tsx | 149 +++++------------- .../onboarding/onboarding-upgrade-patch.tsx | 31 +--- .../preview/previews/onboarding.preview.tsx | 69 +++++++- 3 files changed, 114 insertions(+), 135 deletions(-) diff --git a/frontend/app/onboarding/onboarding-features.tsx b/frontend/app/onboarding/onboarding-features.tsx index db6cc2ccbb..8f9ee1634b 100644 --- a/frontend/app/onboarding/onboarding-features.tsx +++ b/frontend/app/onboarding/onboarding-features.tsx @@ -19,7 +19,7 @@ import { FakeLayout } from "./onboarding-layout"; type FeaturePageName = "waveai" | "durable" | "magnify" | "files"; -const WaveAIPage = ({ onNext, onSkip }: { onNext: () => void; onSkip: () => void }) => { +export const WaveAIPage = ({ onNext, onSkip }: { onNext: () => void; onSkip: () => void }) => { const isMac = isMacOS(); const shortcutKey = isMac ? "⌘-Shift-A" : "Alt-Shift-A"; const [fireClicked, setFireClicked] = useState(false); @@ -106,7 +106,7 @@ const WaveAIPage = ({ onNext, onSkip }: { onNext: () => void; onSkip: () => void ); }; -const MagnifyBlocksPage = ({ +export const MagnifyBlocksPage = ({ onNext, onSkip, onPrev, @@ -172,12 +172,25 @@ const MagnifyBlocksPage = ({ ); }; -const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { - const [fireClicked, setFireClicked] = useState(false); +export const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { const isMac = isMacOS(); + const [fireClicked, setFireClicked] = useState(false); const [commandIndex, setCommandIndex] = useState(0); const [key, setKey] = useState(0); + const commands = [ + (onComplete: () => void) => , + (onComplete: () => void) => , + (onComplete: () => void) => , + ]; + + const handleCommandComplete = () => { + setTimeout(() => { + setCommandIndex((prev) => (prev + 1) % commands.length); + setKey((prev) => prev + 1); + }, 2500); + }; + const handleFireClick = () => { setFireClicked(!fireClicked); if (!fireClicked) { @@ -191,19 +204,30 @@ const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => } }; - const commands = [ - (onComplete: () => void) => , - (onComplete: () => void) => , - (onComplete: () => void) => , - ]; - - const handleCommandComplete = () => { - setTimeout(() => { - setCommandIndex((prev) => (prev + 1) % commands.length); - setKey((prev) => prev + 1); - }, 2500); - }; + return ( + + ); +}; +export const FilesPageContent = ({ + onFinish, + onPrev, + fireClicked, + onFireClick, + rightPanel, +}: { + onFinish: () => void; + onPrev?: () => void; + fireClicked: boolean; + onFireClick: () => void; + rightPanel: React.ReactNode; +}) => { return (
@@ -252,107 +276,18 @@ const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => and edit files wherever they are.

- +
-
- {commands[commandIndex](handleCommandComplete)} -
+
{rightPanel}
); }; -const FilesPageV = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { - const [fireClicked, setFireClicked] = useState(false); - - const handleFireClick = () => { - setFireClicked(!fireClicked); - }; - - return ( -
-
-
- -
-
Viewing/Editing Files
-
-
-
-
-
-

- Wave can preview markdown, images, and video files on both local and remote{" "} - machines. -

-
- -
-

- Use{" "} - wsh view [filename]{" "} - to preview files in Wave's graphical viewer -

-
-
-
- -
-

- Use{" "} - wsh edit [filename]{" "} - to open config files or code files in Wave's graphical editor -

-
-
-

- These commands work seamlessly on both local and remote machines, making it easy to view - and edit files wherever they are. -

- -
-
-
-
-
-
-
- > - wsh view keyboard-shortcuts.md -
-
-
-
-
- -
- ); -}; - -export const OnboardingFeaturesV = () => { - const noop = () => {}; - return ( -
-
- -
-
- -
-
- -
-
- -
-
- ); -}; - export const OnboardingFeatures = ({ onComplete }: { onComplete: () => void }) => { const [currentPage, setCurrentPage] = useState("waveai"); diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx index 5e322b38b4..a4e09945de 100644 --- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx @@ -29,7 +29,7 @@ interface VersionConfig { nextText?: string; } -const versions: VersionConfig[] = [ +export const UpgradeOnboardingVersions: VersionConfig[] = [ { version: "v0.12.1", content: () => , @@ -66,35 +66,14 @@ const versions: VersionConfig[] = [ }, ]; -const UpgradeOnboardingPatchV = () => { - return ( -
- {versions.map((version) => ( -
-
-
-
-
- -
-
Wave {version.version} Update
-
-
{version.content()}
-
-
- ))} -
- ); -}; - const UpgradeOnboardingPatch = () => { const modalRef = useRef(null); const [isCompact, setIsCompact] = useState(window.innerHeight < 800); - const [currentIndex, setCurrentIndex] = useState(versions.length - 1); + const [currentIndex, setCurrentIndex] = useState(UpgradeOnboardingVersions.length - 1); - const currentVersion = versions[currentIndex]; + const currentVersion = UpgradeOnboardingVersions[currentIndex]; const hasPrev = currentIndex > 0; - const hasNext = currentIndex < versions.length - 1; + const hasNext = currentIndex < UpgradeOnboardingVersions.length - 1; const updateModalHeight = () => { const windowHeight = window.innerHeight; @@ -212,4 +191,4 @@ const UpgradeOnboardingPatch = () => { UpgradeOnboardingPatch.displayName = "UpgradeOnboardingPatch"; -export { UpgradeOnboardingPatch, UpgradeOnboardingPatchV }; +export { UpgradeOnboardingPatch }; diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index e2a087851b..b8580bdc8c 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -1,8 +1,73 @@ // Copyright 2026, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 -import { OnboardingFeaturesV } from "@/app/onboarding/onboarding-features"; -import { UpgradeOnboardingPatchV } from "@/app/onboarding/onboarding-upgrade-patch"; +import Logo from "@/app/asset/logo.svg"; +import { + FilesPageContent, + MagnifyBlocksPage, + WaveAIPage, +} from "@/app/onboarding/onboarding-features"; +import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; +import { UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; +import { useState } from "react"; + +function OnboardingFeaturesV() { + const noop = () => {}; + const [fireClicked, setFireClicked] = useState(false); + return ( +
+
+ +
+
+ +
+
+ +
+
+ setFireClicked(!fireClicked)} + rightPanel={ +
+
+ > + wsh view keyboard-shortcuts.md +
+
+
+ } + /> +
+
+ ); +} + +function UpgradeOnboardingPatchV() { + return ( +
+ {UpgradeOnboardingVersions.map((version) => ( +
+
+
+
+
+ +
+
+ Wave {version.version} Update +
+
+
{version.content()}
+
+
+ ))} +
+ ); +} export function OnboardingPreview() { return ( From 7363f503c3bf0f9926807cc788e75512caecbb96 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:45:37 +0000 Subject: [PATCH 5/7] Apply minor onboarding file ordering cleanup Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- frontend/app/onboarding/onboarding-features.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/onboarding/onboarding-features.tsx b/frontend/app/onboarding/onboarding-features.tsx index 8f9ee1634b..210e933672 100644 --- a/frontend/app/onboarding/onboarding-features.tsx +++ b/frontend/app/onboarding/onboarding-features.tsx @@ -173,8 +173,8 @@ export const MagnifyBlocksPage = ({ }; export const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { - const isMac = isMacOS(); const [fireClicked, setFireClicked] = useState(false); + const isMac = isMacOS(); const [commandIndex, setCommandIndex] = useState(0); const [key, setKey] = useState(0); From 50549c83622832fe43b680e3b5d75349a0711cbb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 23:09:30 +0000 Subject: [PATCH 6/7] Use FilesPage in preview with injected command renderers Co-authored-by: sawka <2722291+sawka@users.noreply.github.com> --- .../app/onboarding/onboarding-features.tsx | 23 +++++++++++++----- .../preview/previews/onboarding.preview.tsx | 24 +++++++------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/frontend/app/onboarding/onboarding-features.tsx b/frontend/app/onboarding/onboarding-features.tsx index 210e933672..3226cb03a4 100644 --- a/frontend/app/onboarding/onboarding-features.tsx +++ b/frontend/app/onboarding/onboarding-features.tsx @@ -18,6 +18,7 @@ import { OnboardingFooter } from "./onboarding-features-footer"; import { FakeLayout } from "./onboarding-layout"; type FeaturePageName = "waveai" | "durable" | "magnify" | "files"; +type FilesPageCommandRenderer = (onComplete: () => void) => React.ReactNode; export const WaveAIPage = ({ onNext, onSkip }: { onNext: () => void; onSkip: () => void }) => { const isMac = isMacOS(); @@ -172,17 +173,27 @@ export const MagnifyBlocksPage = ({ ); }; -export const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { +export const FilesPage = ({ + onFinish, + onPrev, + commandRenderers, +}: { + onFinish: () => void; + onPrev?: () => void; + commandRenderers?: FilesPageCommandRenderer[]; +}) => { const [fireClicked, setFireClicked] = useState(false); const isMac = isMacOS(); const [commandIndex, setCommandIndex] = useState(0); const [key, setKey] = useState(0); - const commands = [ - (onComplete: () => void) => , - (onComplete: () => void) => , - (onComplete: () => void) => , - ]; + const commands = + commandRenderers ?? + [ + (onComplete: () => void) => , + (onComplete: () => void) => , + (onComplete: () => void) => , + ]; const handleCommandComplete = () => { setTimeout(() => { diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index b8580bdc8c..8d4f4ded47 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -3,17 +3,18 @@ import Logo from "@/app/asset/logo.svg"; import { - FilesPageContent, + FilesPage, MagnifyBlocksPage, WaveAIPage, } from "@/app/onboarding/onboarding-features"; +import { ViewLogoCommand, ViewShortcutsCommand } from "@/app/onboarding/onboarding-command"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; import { UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; -import { useState } from "react"; +import { isMacOS } from "@/util/platformutil"; function OnboardingFeaturesV() { const noop = () => {}; - const [fireClicked, setFireClicked] = useState(false); + const isMac = isMacOS(); return (
@@ -26,20 +27,13 @@ function OnboardingFeaturesV() {
- setFireClicked(!fireClicked)} - rightPanel={ -
-
- > - wsh view keyboard-shortcuts.md -
-
-
- } + commandRenderers={[ + (onComplete: () => void) => , + (onComplete: () => void) => , + ]} />
From 28491c430858cbb79eee3a1b5f711d165315f265 Mon Sep 17 00:00:00 2001 From: sawka Date: Sat, 28 Feb 2026 15:48:32 -0800 Subject: [PATCH 7/7] cleanup to get the full filespage working --- .../app/onboarding/onboarding-features.tsx | 27 ++++++------------- frontend/app/store/global.ts | 7 +++++ .../preview/previews/onboarding.preview.tsx | 23 +++++----------- frontend/util/endpoints.ts | 13 ++++++--- frontend/util/util.ts | 1 + 5 files changed, 32 insertions(+), 39 deletions(-) diff --git a/frontend/app/onboarding/onboarding-features.tsx b/frontend/app/onboarding/onboarding-features.tsx index 3226cb03a4..53f89298fb 100644 --- a/frontend/app/onboarding/onboarding-features.tsx +++ b/frontend/app/onboarding/onboarding-features.tsx @@ -18,7 +18,6 @@ import { OnboardingFooter } from "./onboarding-features-footer"; import { FakeLayout } from "./onboarding-layout"; type FeaturePageName = "waveai" | "durable" | "magnify" | "files"; -type FilesPageCommandRenderer = (onComplete: () => void) => React.ReactNode; export const WaveAIPage = ({ onNext, onSkip }: { onNext: () => void; onSkip: () => void }) => { const isMac = isMacOS(); @@ -150,13 +149,13 @@ export const MagnifyBlocksPage = ({ better view.

Use the magnify feature to work with complex outputs and large files more efficiently.

-

+

You can also magnify a block by clicking on the{" "} {" "} icon in the block header. -

+

A quick {shortcutKey}-M to magnify and another {shortcutKey}-M to unmagnify

@@ -173,27 +172,17 @@ export const MagnifyBlocksPage = ({ ); }; -export const FilesPage = ({ - onFinish, - onPrev, - commandRenderers, -}: { - onFinish: () => void; - onPrev?: () => void; - commandRenderers?: FilesPageCommandRenderer[]; -}) => { +export const FilesPage = ({ onFinish, onPrev }: { onFinish: () => void; onPrev?: () => void }) => { const [fireClicked, setFireClicked] = useState(false); const isMac = isMacOS(); const [commandIndex, setCommandIndex] = useState(0); const [key, setKey] = useState(0); - const commands = - commandRenderers ?? - [ - (onComplete: () => void) => , - (onComplete: () => void) => , - (onComplete: () => void) => , - ]; + const commands = [ + (onComplete: () => void) => , + (onComplete: () => void) => , + (onComplete: () => void) => , + ]; const handleCommandComplete = () => { setTimeout(() => { diff --git a/frontend/app/store/global.ts b/frontend/app/store/global.ts index 2cfb5945ae..628ae03626 100644 --- a/frontend/app/store/global.ts +++ b/frontend/app/store/global.ts @@ -25,7 +25,9 @@ import { isBlank, isLocalConnName, isWslConnName, + NullAtom, } from "@/util/util"; +import { isPreviewWindow } from "./windowtype"; import { atom, Atom, PrimitiveAtom, useAtomValue } from "jotai"; import { atoms, @@ -168,6 +170,7 @@ function useOrefMetaKeyAtom(oref: string, key: T): Met } function getConnConfigKeyAtom(connName: string, key: T): Atom { + if (isPreviewWindow()) return NullAtom as Atom; let connCache = getSingleConnAtomCache(connName); const keyAtomName = "#conn-" + key; let keyAtom = connCache.get(keyAtomName); @@ -185,6 +188,7 @@ function getConnConfigKeyAtom(connName: string, ke const settingsAtomCache = new Map>(); function getOverrideConfigAtom(blockId: string, key: T): Atom { + if (isPreviewWindow()) return NullAtom as Atom; const blockCache = getSingleBlockAtomCache(blockId); const overrideAtomName = "#settingsoverride-" + key; let overrideAtom = blockCache.get(overrideAtomName); @@ -223,6 +227,7 @@ function useOverrideConfigAtom(blockId: string | n } function getSettingsKeyAtom(key: T): Atom { + if (isPreviewWindow()) return NullAtom as Atom; let settingsKeyAtom = settingsAtomCache.get(key) as Atom; if (settingsKeyAtom == null) { settingsKeyAtom = atom((get) => { @@ -242,6 +247,7 @@ function useSettingsKeyAtom(key: T): SettingsType[ } function getSettingsPrefixAtom(prefix: string): Atom { + if (isPreviewWindow()) return NullAtom as Atom; let settingsPrefixAtom = settingsAtomCache.get(prefix + ":"); if (settingsPrefixAtom == null) { // create a stable, closured reference to use as the deepCompareReturnPrev key @@ -745,6 +751,7 @@ function setActiveTab(tabId: string) { } function recordTEvent(event: string, props?: TEventProps) { + if (isPreviewWindow()) return; if (props == null) { props = {}; } diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index 8d4f4ded47..6ea2312d3e 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -2,19 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 import Logo from "@/app/asset/logo.svg"; -import { - FilesPage, - MagnifyBlocksPage, - WaveAIPage, -} from "@/app/onboarding/onboarding-features"; -import { ViewLogoCommand, ViewShortcutsCommand } from "@/app/onboarding/onboarding-command"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; +import { FilesPage, MagnifyBlocksPage, WaveAIPage } from "@/app/onboarding/onboarding-features"; import { UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; -import { isMacOS } from "@/util/platformutil"; function OnboardingFeaturesV() { const noop = () => {}; - const isMac = isMacOS(); return (
@@ -27,14 +20,7 @@ function OnboardingFeaturesV() {
- void) => , - (onComplete: () => void) => , - ]} - /> +
); @@ -44,7 +30,10 @@ function UpgradeOnboardingPatchV() { return (
{UpgradeOnboardingVersions.map((version) => ( -
+
diff --git a/frontend/util/endpoints.ts b/frontend/util/endpoints.ts index 849c7a9404..4c073a3afc 100644 --- a/frontend/util/endpoints.ts +++ b/frontend/util/endpoints.ts @@ -1,12 +1,19 @@ -// Copyright 2025, Command Line Inc. +// Copyright 2026, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 +import { isPreviewWindow } from "@/app/store/windowtype"; import { getEnv } from "./getenv"; import { lazy } from "./util"; export const WebServerEndpointVarName = "WAVE_SERVER_WEB_ENDPOINT"; export const WSServerEndpointVarName = "WAVE_SERVER_WS_ENDPOINT"; -export const getWebServerEndpoint = lazy(() => `http://${getEnv(WebServerEndpointVarName)}`); +export const getWebServerEndpoint = lazy(() => { + if (isPreviewWindow()) return null; + return `http://${getEnv(WebServerEndpointVarName)}`; +}); -export const getWSServerEndpoint = lazy(() => `ws://${getEnv(WSServerEndpointVarName)}`); +export const getWSServerEndpoint = lazy(() => { + if (isPreviewWindow()) return null; + return `ws://${getEnv(WSServerEndpointVarName)}`; +}); diff --git a/frontend/util/util.ts b/frontend/util/util.ts index 2eea82f82e..2e5a3b5a13 100644 --- a/frontend/util/util.ts +++ b/frontend/util/util.ts @@ -534,6 +534,7 @@ export { makeExternLink, makeIconClass, mergeMeta, + NullAtom, parseDataUrl, sleep, sortByDisplayOrder,