From 2724dcb7f3563b07dc49f9dcb83b55891b29bed4 Mon Sep 17 00:00:00 2001 From: burgercrisis Date: Thu, 25 Dec 2025 01:39:16 -0800 Subject: [PATCH 1/2] feat: upgrade diff component with loading state and Windows compatibility - Add loading spinner and error handling to Diff component - Update TypeScript declarations for @pierre/diffs web component - Fix Windows binary path in desktop predev script - Improve user experience during diff rendering --- packages/app/src/custom-elements.d.ts | 18 ++++++++++++- packages/desktop/scripts/predev.ts | 2 +- packages/ui/src/components/diff.tsx | 37 ++++++++++++++++++++------- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/packages/app/src/custom-elements.d.ts b/packages/app/src/custom-elements.d.ts index e4ea0d6cebd..04bb10434b6 120000 --- a/packages/app/src/custom-elements.d.ts +++ b/packages/app/src/custom-elements.d.ts @@ -1 +1,17 @@ -../../ui/src/custom-elements.d.ts \ No newline at end of file +import { DIFFS_TAG_NAME } from "@pierre/diffs" + +/** + * TypeScript declaration for the custom element. + * This tells TypeScript that is a valid JSX element in SolidJS. + * Required for using the @pierre/diffs web component in .tsx files. + */ + +declare module "solid-js" { + namespace JSX { + interface IntrinsicElements { + [DIFFS_TAG_NAME]: HTMLAttributes + } + } +} + +export { } \ No newline at end of file diff --git a/packages/desktop/scripts/predev.ts b/packages/desktop/scripts/predev.ts index 21821519770..3d0cd5e92b1 100644 --- a/packages/desktop/scripts/predev.ts +++ b/packages/desktop/scripts/predev.ts @@ -6,7 +6,7 @@ const RUST_TARGET = Bun.env.TAURI_ENV_TARGET_TRIPLE const sidecarConfig = getCurrentSidecar(RUST_TARGET) -const binaryPath = `../opencode/dist/${sidecarConfig.ocBinary}/bin/opencode` +const binaryPath = `../opencode/dist/${sidecarConfig.ocBinary}/bin/opencode${process.platform === "win32" ? ".exe" : ""}` await $`cd ../opencode && bun run build --single` diff --git a/packages/ui/src/components/diff.tsx b/packages/ui/src/components/diff.tsx index 75dde044049..89c7a152a8c 100644 --- a/packages/ui/src/components/diff.tsx +++ b/packages/ui/src/components/diff.tsx @@ -1,7 +1,9 @@ import { FileDiff } from "@pierre/diffs" -import { createEffect, createMemo, onCleanup, splitProps } from "solid-js" +import { createEffect, createMemo, onCleanup, splitProps, createSignal } from "solid-js" import { createDefaultOptions, type DiffProps, styleVariables } from "../pierre" import { workerPool } from "../pierre/worker" +import { Spinner } from "./spinner" +import { Show } from "solid-js" // interface ThreadMetadata { // threadId: string @@ -12,6 +14,7 @@ import { workerPool } from "../pierre/worker" export function Diff(props: DiffProps) { let container!: HTMLDivElement const [local, others] = splitProps(props, ["before", "after", "class", "classList", "annotations"]) + const [isRendering, setIsRendering] = createSignal(false) const fileDiff = createMemo( () => @@ -27,13 +30,19 @@ export function Diff(props: DiffProps) { const cleanupFunctions: Array<() => void> = [] createEffect(() => { - container.innerHTML = "" - fileDiff().render({ - oldFile: local.before, - newFile: local.after, - lineAnnotations: local.annotations, - containerWrapper: container, - }) + setIsRendering(true) + + try { + container.innerHTML = "" + fileDiff().render({ + oldFile: local.before, + newFile: local.after, + lineAnnotations: local.annotations, + containerWrapper: container, + }) + } finally { + setIsRendering(false) + } }) onCleanup(() => { @@ -42,5 +51,15 @@ export function Diff(props: DiffProps) { cleanupFunctions.forEach((dispose) => dispose()) }) - return
+ return ( +
+ +
+ + Rendering diff... +
+
+
+
+ ) } From beb8df7fa4c0feb5f024d061a3ea421283dc95b2 Mon Sep 17 00:00:00 2001 From: burgercrisis Date: Fri, 26 Dec 2025 03:07:39 -0800 Subject: [PATCH 2/2] merged diff upgrade onto dev upstream, removed Dot LSP to isolate diff upgrade and seperate it --- packages/ui/src/components/diff.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/diff.tsx b/packages/ui/src/components/diff.tsx index 89c7a152a8c..eb7ea0a2245 100644 --- a/packages/ui/src/components/diff.tsx +++ b/packages/ui/src/components/diff.tsx @@ -46,7 +46,7 @@ export function Diff(props: DiffProps) { }) onCleanup(() => { - // Clean up FileDiff event handlers and dispose SolidJS components + // Clean up FileDiff event handlers and dispose SolidJS components fileDiff()?.cleanUp() cleanupFunctions.forEach((dispose) => dispose()) })