-
- {icon}
-
+
{icon}
{label}
-
- ℹ️
-
+
+
+
{isDowngrade ? (
@@ -117,9 +134,10 @@ const TrustBox: FunctionComponent = ({
) : null}
@@ -183,13 +201,16 @@ const TrustComparison: FunctionComponent = ({
}
/>
{compareUrl ? (
-
-
- ⇄ Compare source
-
+
+
) : null}
>
From 48329cddcf8f12d038a172b9749294ee7e61ca54 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 9 Jan 2026 13:59:49 +0000
Subject: [PATCH 13/17] Refine Trust Level UI based on feedback
- Move Info icon inline with trust level labels (Provenance/Trusted Publisher)
- Reserve space in left column with invisible placeholder for alignment
- Replace PackageOpen icon with FileCode (looks less like an insect)
- Change compare button from outline to secondary variant (filled like npm diff button)
- Add bottom margin (mb-4) to Trust Level section for spacing from Packagephobia
- All tests pass, linting passes, build succeeds
Co-authored-by: oBusk <13413409+oBusk@users.noreply.github.com>
---
.../_page/TrustComparison/TrustComparison.tsx | 41 +++++++++++--------
1 file changed, 25 insertions(+), 16 deletions(-)
diff --git a/src/app/[...parts]/_page/TrustComparison/TrustComparison.tsx b/src/app/[...parts]/_page/TrustComparison/TrustComparison.tsx
index 8b6a3386..1dc43c94 100644
--- a/src/app/[...parts]/_page/TrustComparison/TrustComparison.tsx
+++ b/src/app/[...parts]/_page/TrustComparison/TrustComparison.tsx
@@ -2,9 +2,9 @@
import {
CheckCircle2,
+ FileCode,
GitCompareArrows,
Info,
- PackageOpen,
Shield,
XCircle,
} from "lucide-react";
@@ -109,16 +109,20 @@ const TrustBox: FunctionComponent
= ({
)}
>
{icon}
- {label}
-
-
-
+
+
{label}
+ {evidence !== undefined ? (
+
+
+
+ ) : null}
+
{isDowngrade ? (
@@ -129,14 +133,17 @@ const TrustBox: FunctionComponent = ({
✓ Trust improvement
- ) : null}
+ ) : (
+ // Reserve space to keep alignment when there's no upgrade/downgrade message
+ Placeholder
+ )}
{provenanceUrl ? (
@@ -201,8 +208,8 @@ const TrustComparison: FunctionComponent = ({
}
/>
{compareUrl ? (
-
-
- }
- center={
-
- }
- right={
-
-
-
- }
- />
- >
- );
-};
-
-export { default } from "./TrustComparison";
diff --git a/src/app/[...parts]/_page/TrustDiff.tsx b/src/app/[...parts]/_page/TrustDiff.tsx
deleted file mode 100644
index f34d09d0..00000000
--- a/src/app/[...parts]/_page/TrustDiff.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { cacheLife } from "next/cache";
-import trustComparison from "^/lib/api/npm/trustComparison";
-import type SimplePackageSpec from "^/lib/SimplePackageSpec";
-import suspense from "^/lib/suspense";
-import measuredPromise from "^/lib/utils/measuredPromise";
-import TrustComparison, { TrustComparisonSkeleton } from "./TrustComparison";
-
-export interface TrustDiffProps {
- a: SimplePackageSpec;
- b: SimplePackageSpec;
- specs: [string, string];
-}
-
-const TrustDiffInner = async ({ specs, a, b }: TrustDiffProps) => {
- "use cache";
-
- // Cache for hours since trust evidence doesn't change often
- cacheLife("hours");
-
- const { result, time } = await measuredPromise(trustComparison(specs));
-
- console.log("Trust comparison", { specs, time });
-
- // Always render - showing "no trust evidence" is also valuable information
- return (
-
- );
-};
-
-const TrustDiffSkeleton = () => ;
-
-const TrustDiff = suspense(TrustDiffInner, TrustDiffSkeleton);
-
-export default TrustDiff;
From d1dafaa4a65843d820473aab77c457adb608505e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 10 Jan 2026 22:42:54 +0000
Subject: [PATCH 16/17] Show trust level badges in diff intro section
Co-authored-by: oBusk <13413409+oBusk@users.noreply.github.com>
---
next-env.d.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c7..c4b7818f 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
From 62ce130956df316d63c33962984afd868b82c19b Mon Sep 17 00:00:00 2001
From: Oscar Busk
Date: Mon, 12 Jan 2026 22:36:43 +0100
Subject: [PATCH 17/17] WIP
---
.../[...parts]/_page/DiffIntro/DiffIntro.tsx | 6 ---
.../[...parts]/_page/DiffIntro/SpecBox.tsx | 8 ----
.../_page/SourceDiff/SourceDiff.tsx | 42 +++++++++++++++++++
.../{DiffIntro => SourceDiff}/TrustBadge.tsx | 0
src/app/[...parts]/_page/SourceDiff/index.ts | 3 ++
src/app/[...parts]/page.tsx | 2 +
6 files changed, 47 insertions(+), 14 deletions(-)
create mode 100644 src/app/[...parts]/_page/SourceDiff/SourceDiff.tsx
rename src/app/[...parts]/_page/{DiffIntro => SourceDiff}/TrustBadge.tsx (100%)
create mode 100644 src/app/[...parts]/_page/SourceDiff/index.ts
diff --git a/src/app/[...parts]/_page/DiffIntro/DiffIntro.tsx b/src/app/[...parts]/_page/DiffIntro/DiffIntro.tsx
index 27094115..6993695a 100644
--- a/src/app/[...parts]/_page/DiffIntro/DiffIntro.tsx
+++ b/src/app/[...parts]/_page/DiffIntro/DiffIntro.tsx
@@ -6,7 +6,6 @@ import { cx } from "^/lib/cva";
import { type NpmDiffOptions } from "^/lib/npmDiff";
import type SimplePackageSpec from "^/lib/SimplePackageSpec";
import contentVisibility from "^/lib/utils/contentVisibility";
-import CompareSourceButton from "./CompareSourceButton";
import Halfs from "./Halfs";
import Options from "./Options";
import SpecBox from "./SpecBox";
@@ -55,11 +54,6 @@ const DiffIntro = forwardRef, DiffIntroProps>(
/>
}
/>
-
{services}
diff --git a/src/app/[...parts]/_page/DiffIntro/SpecBox.tsx b/src/app/[...parts]/_page/DiffIntro/SpecBox.tsx
index 08112aef..bbeed4e4 100644
--- a/src/app/[...parts]/_page/DiffIntro/SpecBox.tsx
+++ b/src/app/[...parts]/_page/DiffIntro/SpecBox.tsx
@@ -5,7 +5,6 @@ import type SimplePackageSpec from "^/lib/SimplePackageSpec";
import { simplePackageSpecToString } from "^/lib/SimplePackageSpec";
import PublishDate from "./PublishDate";
import ServiceLinks from "./ServiceLinks";
-import TrustBadge from "./TrustBadge";
interface SpecBoxProps extends HTMLAttributes {
pkg: SimplePackageSpec;
@@ -24,13 +23,6 @@ const SpecBox = forwardRef(
({ pkg, pkgClassName, comparisonPkg, isTarget, ...props }, ref) => (
-
+ }
+ center={
+
+ }
+ right={
+
+ }
+ />
+ );
+}
diff --git a/src/app/[...parts]/_page/DiffIntro/TrustBadge.tsx b/src/app/[...parts]/_page/SourceDiff/TrustBadge.tsx
similarity index 100%
rename from src/app/[...parts]/_page/DiffIntro/TrustBadge.tsx
rename to src/app/[...parts]/_page/SourceDiff/TrustBadge.tsx
diff --git a/src/app/[...parts]/_page/SourceDiff/index.ts b/src/app/[...parts]/_page/SourceDiff/index.ts
new file mode 100644
index 00000000..49529f8c
--- /dev/null
+++ b/src/app/[...parts]/_page/SourceDiff/index.ts
@@ -0,0 +1,3 @@
+import SourceDiff from "./SourceDiff";
+
+export default SourceDiff;
diff --git a/src/app/[...parts]/page.tsx b/src/app/[...parts]/page.tsx
index d3d223e4..bd513f2b 100644
--- a/src/app/[...parts]/page.tsx
+++ b/src/app/[...parts]/page.tsx
@@ -15,6 +15,7 @@ import DiffIntro from "./_page/DiffIntro";
import NpmDiff from "./_page/NpmDiff";
import PackagephobiaDiff from "./_page/PackagephobiaDiff";
import { type DIFF_TYPE_PARAM_NAME } from "./_page/paramNames";
+import SourceDiff from "./_page/SourceDiff/SourceDiff";
export interface DiffPageProps {
params: Promise<{ parts: string | string[] }>;
@@ -75,6 +76,7 @@ const DiffPageInner = async ({
b={b}
services={
<>
+