diff --git a/apps/code/package.json b/apps/code/package.json index 8cc87ad3d..3b5152496 100644 --- a/apps/code/package.json +++ b/apps/code/package.json @@ -101,7 +101,7 @@ "@opentelemetry/semantic-conventions": "^1.39.0", "@parcel/watcher": "^2.5.6", "@phosphor-icons/react": "^2.1.10", - "@pierre/diffs": "^1.1.21", + "@pierre/diffs": "^1.2.10", "@posthog/agent": "workspace:*", "@posthog/api-client": "workspace:*", "@posthog/core": "workspace:*", diff --git a/packages/core/package.json b/packages/core/package.json index 99d84fffe..883bc3227 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -18,7 +18,7 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "^1.1.2", "@modelcontextprotocol/sdk": "^1.12.1", - "@pierre/diffs": "^1.1.21", + "@pierre/diffs": "^1.2.10", "@posthog/api-client": "workspace:*", "@posthog/di": "workspace:*", "@posthog/platform": "workspace:*", diff --git a/packages/core/src/code-review/diffAnnotations.test.ts b/packages/core/src/code-review/diffAnnotations.test.ts index df5f8f347..145a564c1 100644 --- a/packages/core/src/code-review/diffAnnotations.test.ts +++ b/packages/core/src/code-review/diffAnnotations.test.ts @@ -1,6 +1,7 @@ import type { FileDiffMetadata } from "@pierre/diffs"; import { describe, expect, it } from "vitest"; import { + buildCommentMergedOptions, buildDraftAnnotations, buildHunkAnnotations, getLastChangeLineNumber, @@ -80,3 +81,24 @@ describe("buildDraftAnnotations", () => { }); }); }); + +describe("buildCommentMergedOptions", () => { + it.each([ + { hasOpenComment: false, expectedEnabled: true }, + { hasOpenComment: true, expectedEnabled: false }, + ])( + "with hasOpenComment=$hasOpenComment sets selection/gutter enabled=$expectedEnabled and routes both callbacks to the handler", + ({ hasOpenComment, expectedEnabled }) => { + const handler = () => {}; + const merged = buildCommentMergedOptions( + undefined, + hasOpenComment, + handler, + ); + expect(merged.enableLineSelection).toBe(expectedEnabled); + expect(merged.enableGutterUtility).toBe(expectedEnabled); + expect(merged.onLineSelectionEnd).toBe(handler); + expect(merged.onGutterUtilityClick).toBe(handler); + }, + ); +}); diff --git a/packages/core/src/code-review/diffAnnotations.ts b/packages/core/src/code-review/diffAnnotations.ts index 5f49817a8..09a198bf0 100644 --- a/packages/core/src/code-review/diffAnnotations.ts +++ b/packages/core/src/code-review/diffAnnotations.ts @@ -61,5 +61,6 @@ export function buildCommentMergedOptions( enableLineSelection: !hasOpenComment, enableGutterUtility: !hasOpenComment, onLineSelectionEnd: handleLineSelectionEnd, + onGutterUtilityClick: handleLineSelectionEnd, }; } diff --git a/packages/ui/package.json b/packages/ui/package.json index d97408ae6..26c9ad064 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -52,7 +52,7 @@ "@lezer/highlight": "^1.2.3", "@modelcontextprotocol/ext-apps": "^1.1.2", "@modelcontextprotocol/sdk": "^1.12.1", - "@pierre/diffs": "^1.1.21", + "@pierre/diffs": "^1.2.10", "@posthog/agent": "workspace:*", "@posthog/api-client": "workspace:*", "@posthog/core": "workspace:*", diff --git a/packages/ui/src/features/code-review/constants.ts b/packages/ui/src/features/code-review/constants.ts index cd757bb50..eb62947ef 100644 --- a/packages/ui/src/features/code-review/constants.ts +++ b/packages/ui/src/features/code-review/constants.ts @@ -9,5 +9,5 @@ export const DIFF_METRICS = { lineHeight: 20, diffHeaderHeight: 31, hunkSeparatorHeight: 32, - fileGap: 8, + spacing: 8, } as const; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7cc77acba..43085c47c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -155,8 +155,8 @@ importers: specifier: ^2.1.10 version: 2.1.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@pierre/diffs': - specifier: ^1.1.21 - version: 1.1.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.2.10 + version: 1.2.10(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@posthog/agent': specifier: workspace:* version: link:../../packages/agent @@ -826,8 +826,8 @@ importers: specifier: ^1.12.1 version: 1.29.0(zod@4.3.6) '@pierre/diffs': - specifier: ^1.1.21 - version: 1.1.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.2.10 + version: 1.2.10(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@posthog/api-client': specifier: workspace:* version: link:../api-client @@ -1175,8 +1175,8 @@ importers: specifier: ^1.12.1 version: 1.29.0(zod@4.4.3) '@pierre/diffs': - specifier: ^1.1.21 - version: 1.1.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.2.10 + version: 1.2.10(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@posthog/agent': specifier: workspace:* version: link:../agent @@ -4486,16 +4486,36 @@ packages: react: '>= 16.8' react-dom: '>= 16.8' - '@pierre/diffs@1.1.21': - resolution: {integrity: sha512-4vz4YRg1qZEiVwx6EnaYlMSIIDOq1CvtcBEc4b/gNxDbQtlvGJof+IWH5cv/bwgDre377Txe/ML4zoSp78yWWw==} + '@pierre/diffs@1.2.10': + resolution: {integrity: sha512-rPeAmDWarxFVTQpaf4y6wTxjZxU44xKJKoJti2zU21P06DVd9nRHZX+xSIObLB307Qjpaesyb1x/j0z94t7vLw==} peerDependencies: react: ^18.3.1 || ^19.0.0 react-dom: ^18.3.1 || ^19.0.0 - '@pierre/theme@0.0.28': - resolution: {integrity: sha512-1j/H/fECBuc9dEvntdWI+l435HZapw+RCJTlqCA6BboQ5TjlnE005j/ROWutXIs8aq5OAc82JI2Kwk4A1WWBgw==} + '@pierre/theme@1.0.3': + resolution: {integrity: sha512-sWHv11TMoqKxKDgTIk5VbhQjdPhs8DCcBxbjh3mRlS3YOM/OcrWoGX6MM8eBGn9cUu3M46Py0JnxsG2nJaFTuA==} engines: {vscode: ^1.0.0} + '@pierre/theming@0.0.1': + resolution: {integrity: sha512-1thlEtJbqdyLzc1ZS2KQa1q7FzDGHT4dTEdKHoyQjOMeWWOmbVG5/ndEfOKfAb5Fzkz8cNJrOjFLiZoDH/A03A==} + peerDependencies: + '@pierre/theme': ^1.0.0 + '@shikijs/themes': ^3.0.0 || ^4.0.0 + react: ^18.3.1 || ^19.0.0 + react-dom: ^18.3.1 || ^19.0.0 + shiki: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@pierre/theme': + optional: true + '@shikijs/themes': + optional: true + react: + optional: true + react-dom: + optional: true + shiki: + optional: true + '@pixi/colord@2.9.6': resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==} @@ -17019,9 +17039,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@pierre/diffs@1.1.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@pierre/diffs@1.2.10(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@pierre/theme': 0.0.28 + '@pierre/theme': 1.0.3 + '@pierre/theming': 0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(shiki@3.23.0) '@shikijs/transformers': 3.23.0 diff: 8.0.3 hast-util-to-html: 9.0.5 @@ -17029,8 +17050,18 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) shiki: 3.23.0 + transitivePeerDependencies: + - '@shikijs/themes' - '@pierre/theme@0.0.28': {} + '@pierre/theme@1.0.3': {} + + '@pierre/theming@0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@3.23.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(shiki@3.23.0)': + optionalDependencies: + '@pierre/theme': 1.0.3 + '@shikijs/themes': 3.23.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + shiki: 3.23.0 '@pixi/colord@2.9.6': {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 632c2ec98..671f10a17 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -51,6 +51,7 @@ minimumReleaseAgeExclude: - '@anthropic-ai/claude-agent-sdk-win32-x64' - '@anthropic-ai/sdk' - '@pierre/diffs' + - '@pierre/theming' - '@posthog/quill' - '@posthog/quill-tokens' - '@tanstack/devtools-core'