From 2b7ea16c7bd6197f383060fed87722b11dbd1fd7 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 4 Feb 2026 19:07:18 -0800 Subject: [PATCH 1/4] Revert "fix(desktop): update scroll-to-bottom for xterm.js 6.0 (#1163)" This reverts commit ff72654ed6171e03abf481748a156e97493ff0be. --- .../ScrollToBottomButton/ScrollToBottomButton.tsx | 8 ++++++-- .../ContentView/TabsContent/Terminal/utils.ts | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/ScrollToBottomButton/ScrollToBottomButton.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/ScrollToBottomButton/ScrollToBottomButton.tsx index 2b38f6c5a16..be0e1399d4b 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/ScrollToBottomButton/ScrollToBottomButton.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/ScrollToBottomButton/ScrollToBottomButton.tsx @@ -28,11 +28,15 @@ export function ScrollToBottomButton({ terminal }: ScrollToBottomButtonProps) { checkScrollPosition(); const writeDisposable = terminal.onWriteParsed(checkScrollPosition); - const scrollDisposable = terminal.onScroll(checkScrollPosition); + const viewport = terminal.element?.querySelector(".xterm-viewport"); + + if (viewport) { + viewport.addEventListener("scroll", checkScrollPosition); + } return () => { writeDisposable.dispose(); - scrollDisposable.dispose(); + viewport?.removeEventListener("scroll", checkScrollPosition); }; }, [terminal, checkScrollPosition]); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/utils.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/utils.ts index e397d2296ff..95a10d2ea48 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/utils.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/utils.ts @@ -5,6 +5,17 @@ export function shellEscapePaths(paths: string[]): string { return quote(paths); } -export function scrollToBottom(terminal: Terminal): void { - terminal.scrollToBottom(); +export function scrollToBottom( + terminal: Terminal, + behavior: ScrollBehavior = "instant", +): void { + const viewport = terminal.element?.querySelector(".xterm-viewport"); + if (viewport) { + viewport.scrollTo({ + top: viewport.scrollHeight, + behavior, + }); + } else { + terminal.scrollToBottom(); + } } From 0fb55de5451445a6db4cf53f716382a4ccf83989 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 4 Feb 2026 19:07:21 -0800 Subject: [PATCH 2/4] Revert "fix(desktop): update xterm CSS for 6.0.0 viewport changes (#1133)" This reverts commit 5800bfd6063e8487f532b64e76ef5cee3f253708. --- apps/desktop/src/renderer/globals.css | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src/renderer/globals.css b/apps/desktop/src/renderer/globals.css index db9135ed702..de432d40ee5 100644 --- a/apps/desktop/src/renderer/globals.css +++ b/apps/desktop/src/renderer/globals.css @@ -167,14 +167,19 @@ min-height: 100vh; } - /* xterm 6.0.0+ requires explicit sizing due to VS Code scrollbar integration */ - .xterm, - .xterm .xterm-scrollable-element, - .xterm .xterm-viewport, - .xterm .xterm-screen { + /* Ensure xterm terminal fills container height */ + .xterm { height: 100%; width: 100%; } + + .xterm-screen { + height: 100%; + width: 100%; + } + + /* Style links in terminal (like iTerm) */ + /* xterm uses underline-5 (dashed) for links on hover */ .xterm .xterm-rows a { color: inherit; cursor: pointer; From 2c585b8af5f03091bf2a78e351c1455d5860fdbf Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 4 Feb 2026 19:07:28 -0800 Subject: [PATCH 3/4] Revert "chore(desktop): upgrade xterm.js to v6.0.0 (#1125)" This reverts commit cce723b013613c45e243343bef1c919eb9029854. --- apps/desktop/electron.vite.config.ts | 6 +- apps/desktop/package.json | 22 ++--- .../TabsContent/Terminal/config.ts | 2 + .../TabsContent/Terminal/helpers.ts | 87 ++++++++++--------- .../RightSidebar/FilesView/types.ts | 12 +++ bun.lock | 46 +++++----- 6 files changed, 99 insertions(+), 76 deletions(-) diff --git a/apps/desktop/electron.vite.config.ts b/apps/desktop/electron.vite.config.ts index 912e8a51f34..c1ac67d819a 100644 --- a/apps/desktop/electron.vite.config.ts +++ b/apps/desktop/electron.vite.config.ts @@ -89,11 +89,7 @@ export default defineConfig({ }, }, resolve: { - alias: { - // @xterm/headless 6.0.0 has a packaging bug: `module` field points to - // non-existent `lib/xterm.mjs`. Force Vite to use the CJS entry instead. - "@xterm/headless": "@xterm/headless/lib-headless/xterm-headless.js", - }, + alias: {}, }, }, diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 40f4c21784c..584ff635edd 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -92,16 +92,18 @@ "@trpc/server": "^11.7.1", "@types/express": "^5.0.5", "@vercel/blob": "^2.0.0", - "@xterm/addon-clipboard": "^0.2.0", - "@xterm/addon-fit": "^0.11.0", - "@xterm/addon-image": "^0.9.0", - "@xterm/addon-ligatures": "^0.10.0", - "@xterm/addon-search": "^0.16.0", - "@xterm/addon-serialize": "^0.14.0", - "@xterm/addon-unicode11": "^0.9.0", - "@xterm/addon-webgl": "^0.19.0", - "@xterm/headless": "^6.0.0", - "@xterm/xterm": "^6.0.0", + "@xterm/addon-canvas": "^0.7.0", + "@xterm/addon-clipboard": "^0.1.0", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-image": "^0.8.0", + "@xterm/addon-ligatures": "^0.9.0", + "@xterm/addon-search": "^0.15.0", + "@xterm/addon-serialize": "^0.13.0", + "@xterm/addon-unicode11": "^0.8.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/addon-webgl": "^0.18.0", + "@xterm/headless": "^5.5.0", + "@xterm/xterm": "^5.5.0", "better-auth": "1.4.17", "better-sqlite3": "12.6.2", "bindings": "^1.5.0", diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/config.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/config.ts index 33bb8cdc195..6d3135d9d7a 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/config.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/config.ts @@ -42,6 +42,8 @@ export const TERMINAL_OPTIONS: ITerminalOptions = { macOptionIsMeta: false, cursorStyle: "block", cursorInactiveStyle: "outline", + fastScrollModifier: "alt", + fastScrollSensitivity: 5, screenReaderMode: false, }; diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts index 12437e260fc..d57919aaea0 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts @@ -1,4 +1,5 @@ import { toast } from "@superset/ui/sonner"; +import { CanvasAddon } from "@xterm/addon-canvas"; import { ClipboardAddon } from "@xterm/addon-clipboard"; import { FitAddon } from "@xterm/addon-fit"; import { ImageAddon } from "@xterm/addon-image"; @@ -59,48 +60,33 @@ export function getDefaultTerminalBg(): string { /** * Load GPU-accelerated renderer with automatic fallback. - * Tries WebGL first, falls back to DOM if WebGL fails. - * This follows VS Code's approach: WebGL → DOM (canvas addon removed in xterm.js 6.0). + * Tries WebGL first, falls back to Canvas if WebGL fails. */ export type TerminalRenderer = { - kind: "webgl" | "dom"; + kind: "webgl" | "canvas" | "dom"; dispose: () => void; clearTextureAtlas?: () => void; }; type PreferredRenderer = TerminalRenderer["kind"] | "auto"; -// Track WebGL failures globally to avoid repeated initialization attempts (VS Code pattern) -let suggestedRendererType: TerminalRenderer["kind"] | undefined; - function getPreferredRenderer(): PreferredRenderer { - // If WebGL previously failed, don't try again - if (suggestedRendererType === "dom") { - return "dom"; - } - try { const stored = localStorage.getItem("terminal-renderer"); - if (stored === "webgl" || stored === "dom") { + if (stored === "webgl" || stored === "canvas" || stored === "dom") { return stored; } - if (stored === "canvas") { - // Canvas renderer was removed in xterm.js 6.0; fall back to DOM. - try { - localStorage.setItem("terminal-renderer", "dom"); - } catch { - // ignore storage errors - } - return "dom"; - } } catch { // ignore } - return "auto"; + // Default: avoid xterm-webgl on macOS. We've seen repeated corruption/glitching + // when terminals are hidden/shown or switched between panes. + return navigator.userAgent.includes("Macintosh") ? "canvas" : "webgl"; } function loadRenderer(xterm: XTerm): TerminalRenderer { + let renderer: WebglAddon | CanvasAddon | null = null; let webglAddon: WebglAddon | null = null; let kind: TerminalRenderer["kind"] = "dom"; @@ -110,35 +96,54 @@ function loadRenderer(xterm: XTerm): TerminalRenderer { return { kind: "dom", dispose: () => {}, clearTextureAtlas: undefined }; } + const tryLoadCanvas = () => { + try { + renderer = new CanvasAddon(); + xterm.loadAddon(renderer); + kind = "canvas"; + } catch { + // Canvas fallback failed, use default renderer + } + }; + + if (preferred === "canvas") { + tryLoadCanvas(); + return { + kind, + dispose: () => renderer?.dispose(), + clearTextureAtlas: undefined, + }; + } + try { webglAddon = new WebglAddon(); webglAddon.onContextLoss(() => { - console.warn( - "[Terminal] WebGL context lost, falling back to DOM renderer", - ); webglAddon?.dispose(); webglAddon = null; - kind = "dom"; - // Force refresh after context loss - xterm.refresh(0, xterm.rows - 1); + try { + renderer = new CanvasAddon(); + xterm.loadAddon(renderer); + kind = "canvas"; + // Force refresh after context loss recovery + xterm.refresh(0, xterm.rows - 1); + } catch { + // Canvas fallback failed, use default renderer + renderer = null; + kind = "dom"; + } }); xterm.loadAddon(webglAddon); + renderer = webglAddon; kind = "webgl"; - } catch (e) { - console.warn( - "[Terminal] WebGL could not be loaded, falling back to DOM renderer", - e, - ); - suggestedRendererType = "dom"; - webglAddon = null; - kind = "dom"; + } catch { + tryLoadCanvas(); } return { kind, - dispose: () => webglAddon?.dispose(), + dispose: () => renderer?.dispose(), clearTextureAtlas: webglAddon ? () => { try { @@ -210,11 +215,11 @@ export function createTerminalInstance( // Defer GPU renderer loading to next animation frame. // xterm.open() schedules a setTimeout for Viewport.syncScrollArea which expects - // the renderer to be ready. Loading WebGL immediately after open() can cause a - // race condition where the setTimeout fires during addon initialization, when - // _renderer is temporarily undefined (old renderer disposed, new not yet set). + // the renderer to be ready. Loading WebGL/Canvas immediately after open() can + // cause a race condition where the setTimeout fires during addon initialization, + // when _renderer is temporarily undefined (old renderer disposed, new not yet set). // Deferring to rAF ensures xterm's internal setTimeout completes first with the - // default DOM renderer, then we safely swap to WebGL. + // default DOM renderer, then we safely swap to WebGL/Canvas. rafId = requestAnimationFrame(() => { rafId = null; if (isDisposed) return; diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts index 6bb41fcd8f9..2c131994bbc 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts @@ -1 +1,13 @@ +import type { NodeRendererProps } from "react-arborist"; +import type { FileTreeNode } from "shared/file-tree-types"; + +export type FileTreeNodeProps = NodeRendererProps; + +export type OnFileOpen = (node: FileTreeNode) => void; + export type NewItemMode = "file" | "folder" | null; + +export interface TreeActionResult { + success: boolean; + error?: string; +} diff --git a/bun.lock b/bun.lock index 884f740a0bd..a8a771a6d2b 100644 --- a/bun.lock +++ b/bun.lock @@ -192,16 +192,18 @@ "@trpc/server": "^11.7.1", "@types/express": "^5.0.5", "@vercel/blob": "^2.0.0", - "@xterm/addon-clipboard": "^0.2.0", - "@xterm/addon-fit": "^0.11.0", - "@xterm/addon-image": "^0.9.0", - "@xterm/addon-ligatures": "^0.10.0", - "@xterm/addon-search": "^0.16.0", - "@xterm/addon-serialize": "^0.14.0", - "@xterm/addon-unicode11": "^0.9.0", - "@xterm/addon-webgl": "^0.19.0", - "@xterm/headless": "^6.0.0", - "@xterm/xterm": "^6.0.0", + "@xterm/addon-canvas": "^0.7.0", + "@xterm/addon-clipboard": "^0.1.0", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-image": "^0.8.0", + "@xterm/addon-ligatures": "^0.9.0", + "@xterm/addon-search": "^0.15.0", + "@xterm/addon-serialize": "^0.13.0", + "@xterm/addon-unicode11": "^0.8.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/addon-webgl": "^0.18.0", + "@xterm/headless": "^5.5.0", + "@xterm/xterm": "^5.5.0", "better-auth": "1.4.17", "better-sqlite3": "12.6.2", "bindings": "^1.5.0", @@ -2397,25 +2399,29 @@ "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], - "@xterm/addon-clipboard": ["@xterm/addon-clipboard@0.2.0", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-Dl31BCtBhLaUEECUbEiVcCLvLBbaeGYdT7NofB8OJkGTD3MWgBsaLjXvfGAD4tQNHhm6mbKyYkR7XD8kiZsdNg=="], + "@xterm/addon-canvas": ["@xterm/addon-canvas@0.7.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw=="], - "@xterm/addon-fit": ["@xterm/addon-fit@0.11.0", "", {}, "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g=="], + "@xterm/addon-clipboard": ["@xterm/addon-clipboard@0.1.0", "", { "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { "@xterm/xterm": "^5.4.0" } }, "sha512-zdoM7p53T5sv/HbRTyp4hY0kKmEQ3MZvAvEtiXqNIHc/JdpqwByCtsTaQF5DX2n4hYdXRPO4P/eOS0QEhX1nPw=="], - "@xterm/addon-image": ["@xterm/addon-image@0.9.0", "", {}, "sha512-oYWA8/QAr5/Emwl1xL7WCoOqeG3IZfpzEz/OVq1j4Oi9934TQmHiyubClikRf0D/jL3JNiNuz/Lsqx0kXQ02BA=="], + "@xterm/addon-fit": ["@xterm/addon-fit@0.10.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ=="], - "@xterm/addon-ligatures": ["@xterm/addon-ligatures@0.10.0", "", { "dependencies": { "font-finder": "^1.1.0", "font-ligatures": "^1.4.1" } }, "sha512-/Few8ZSHMib7sGjRJoc5l7bCtEB9XJfkNofvPpOcWADxKaUl8og8P172j67OoACSNJAXqeCLIuvj8WFCBkcTxg=="], + "@xterm/addon-image": ["@xterm/addon-image@0.8.0", "", { "peerDependencies": { "@xterm/xterm": "^5.2.0" } }, "sha512-b/dqpFn3jUad2pUP5UpF4scPIh0WdxRQL/1qyiahGfUI85XZTCXo0py9G6AcOR2QYUw8eJ8EowGspT7BQcgw6A=="], - "@xterm/addon-search": ["@xterm/addon-search@0.16.0", "", {}, "sha512-9OeuBFu0/uZJPu+9AHKY6g/w0Czyb/Ut0A5t79I4ULoU4IfU5BEpPFVGQxP4zTTMdfZEYkVIRYbHBX1xWwjeSA=="], + "@xterm/addon-ligatures": ["@xterm/addon-ligatures@0.9.0", "", { "dependencies": { "font-finder": "^1.1.0", "font-ligatures": "^1.4.1" }, "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-zVV1AHV1SIm/rdzR5VDPyg+qUnR1SjH4H75iXiB7r6YDa1yEHIqc/EwnUIwz+yeeZozkh8hjbH80L7luEgtxtQ=="], - "@xterm/addon-serialize": ["@xterm/addon-serialize@0.14.0", "", {}, "sha512-uteyTU1EkrQa2Ux6P/uFl2fzmXI46jy5uoQMKEOM0fKTyiW7cSn0WrFenHm5vO5uEXX/GpwW/FgILvv3r0WbkA=="], + "@xterm/addon-search": ["@xterm/addon-search@0.15.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-ZBZKLQ+EuKE83CqCmSSz5y1tx+aNOCUaA7dm6emgOX+8J9H1FWXZyrKfzjwzV+V14TV3xToz1goIeRhXBS5qjg=="], - "@xterm/addon-unicode11": ["@xterm/addon-unicode11@0.9.0", "", {}, "sha512-FxDnYcyuXhNl+XSqGZL/t0U9eiNb/q3EWT5rYkQT/zuig8Gz/VagnQANKHdDWFM2lTMk9ly0EFQxxxtZUoRetw=="], + "@xterm/addon-serialize": ["@xterm/addon-serialize@0.13.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-kGs8o6LWAmN1l2NpMp01/YkpxbmO4UrfWybeGu79Khw5K9+Krp7XhXbBTOTc3GJRRhd6EmILjpR8k5+odY39YQ=="], - "@xterm/addon-webgl": ["@xterm/addon-webgl@0.19.0", "", {}, "sha512-b3fMOsyLVuCeNJWxolACEUED0vm7qC0cy4wRvf3oURSzDTYVQiGPhTnhWZwIHdvC48Y+oLhvYXnY4XDXPoJo6A=="], + "@xterm/addon-unicode11": ["@xterm/addon-unicode11@0.8.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-LxinXu8SC4OmVa6FhgwsVCBZbr8WoSGzBl2+vqe8WcQ6hb1r6Gj9P99qTNdPiFPh4Ceiu2pC8xukZ6+2nnh49Q=="], - "@xterm/headless": ["@xterm/headless@6.0.0", "", {}, "sha512-5Yj1QINYCyzrZtf8OFIHi47iQtI+0qYFPHmouEfG8dHNxbZ9Tb9YGSuLcsEwj9Z+OL75GJqPyJbyoFer80a2Hw=="], + "@xterm/addon-web-links": ["@xterm/addon-web-links@0.11.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q=="], - "@xterm/xterm": ["@xterm/xterm@6.0.0", "", {}, "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg=="], + "@xterm/addon-webgl": ["@xterm/addon-webgl@0.18.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-xCnfMBTI+/HKPdRnSOHaJDRqEpq2Ugy8LEj9GiY4J3zJObo3joylIFaMvzBwbYRg8zLtkO0KQaStCeSfoaI2/w=="], + + "@xterm/headless": ["@xterm/headless@5.5.0", "", {}, "sha512-5xXB7kdQlFBP82ViMJTwwEc3gKCLGKR/eoxQm4zge7GPBl86tCdI0IdPJjoKd8mUSFXz5V7i/25sfsEkP4j46g=="], + + "@xterm/xterm": ["@xterm/xterm@5.5.0", "", {}, "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A=="], "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], From 6b52e4a10a07c63177e2b980b0ef5ec89730969e Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 4 Feb 2026 21:09:20 -0800 Subject: [PATCH 4/4] chore: remove unused FilesView/types.ts (dead react-arborist import) --- .../components/WorkspaceView/RightSidebar/FilesView/types.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts index 2c131994bbc..29922892179 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/FilesView/types.ts @@ -1,8 +1,5 @@ -import type { NodeRendererProps } from "react-arborist"; import type { FileTreeNode } from "shared/file-tree-types"; -export type FileTreeNodeProps = NodeRendererProps; - export type OnFileOpen = (node: FileTreeNode) => void; export type NewItemMode = "file" | "folder" | null;