diff --git a/apps/web/src/components/file-viewer/FileEditorPane.tsx b/apps/web/src/components/file-viewer/FileEditorPane.tsx
index ae8136a21..061288bbb 100644
--- a/apps/web/src/components/file-viewer/FileEditorPane.tsx
+++ b/apps/web/src/components/file-viewer/FileEditorPane.tsx
@@ -1,7 +1,7 @@
/**
* Editable surface for the file viewer's edit mode.
*
- * Wraps a `contentEditable` pierre File in an `EditorProvider`. The attach is
+ * Wraps a `contentEditable` pierre File in an `EditProvider`. The attach is
* deferred to a post-mount effect: attaching during mount is unsafe under
* StrictMode (the doubled mount effect runs edit → cleanUp → edit and
* pierre's re-attach render sync short-circuits on cached content, leaving
@@ -18,7 +18,7 @@
import { useEffect, useMemo, useRef, useState } from "react";
import { useQueryClient } from "@tanstack/react-query";
import { Editor } from "@pierre/diffs/editor";
-import { EditorProvider, File as PierreFile } from "@pierre/diffs/react";
+import { EditProvider, File as PierreFile } from "@pierre/diffs/react";
import { useFileViewerStore, type FileViewerContext } from "../../fileViewerStore";
import { useTheme } from "../../hooks/useTheme";
@@ -134,7 +134,7 @@ export function FileEditorPane({
);
return (
-
+
-
+
);
}
diff --git a/apps/web/src/components/file-viewer/FileViewerPierre.browser.tsx b/apps/web/src/components/file-viewer/FileViewerPierre.browser.tsx
index 250171780..209511669 100644
--- a/apps/web/src/components/file-viewer/FileViewerPierre.browser.tsx
+++ b/apps/web/src/components/file-viewer/FileViewerPierre.browser.tsx
@@ -7,7 +7,7 @@ import { render } from "vitest-browser-react";
import type { SelectedLineRange } from "@pierre/diffs";
import { getFiletypeFromFileName, preloadHighlighter } from "@pierre/diffs";
import { Editor } from "@pierre/diffs/editor";
-import { EditorProvider, File as PierreFile } from "@pierre/diffs/react";
+import { EditProvider, File as PierreFile } from "@pierre/diffs/react";
import { DIFF_PANEL_UNSAFE_CSS } from "../DiffPanel.styles";
import { DiffWorkerPoolProvider } from "../DiffWorkerPoolProvider";
@@ -218,7 +218,7 @@ describe("FileViewer pierre integration", () => {
});
});
-// Mirrors the editable-file wiring (EditorProvider + contentEditable File) so
+// Mirrors the editable-file wiring (EditProvider + contentEditable File) so
// editor attachment regressions surface here instead of in the app.
function EditableHarness({
path,
@@ -231,7 +231,7 @@ function EditableHarness({
}) {
return (
-
+
-
+
);
}
@@ -255,7 +255,7 @@ async function waitForEditorDocument(editor: Editor, timeoutMs = 15_0
const deadline = performance.now() + timeoutMs;
const ready = () => {
try {
- return editor.getState().file != null;
+ return typeof editor.getText() === "string";
} catch {
return false;
}
@@ -350,7 +350,7 @@ describe("FileViewer pierre editing", () => {
function WrapHarness({ wrap }: { wrap: boolean }) {
return (
-
+
-
+
);
}
@@ -381,12 +381,12 @@ describe("FileViewer pierre editing", () => {
true,
);
await settle(100);
- expect(editor.getState().file.contents).toContain("const w = 7;");
+ expect(editor.getText()).toContain("const w = 7;");
screen.rerender();
await settle();
- expect(editor.getState().file.contents).toContain("const w = 7;");
+ expect(editor.getText()).toContain("const w = 7;");
expect(editor.canUndo).toBe(true);
screen.unmount();
@@ -413,11 +413,11 @@ describe("FileViewer pierre editing", () => {
await waitForEditorDocument(editor);
const deadline = performance.now() + 15_000;
- while (!editor.getState().file.contents.includes("start!") && performance.now() < deadline) {
+ while (!editor.getText().includes("start!") && performance.now() < deadline) {
await settle(150);
}
- expect(editor.getState().file.contents).toContain("start!\nnext");
+ expect(editor.getText()).toContain("start!\nnext");
expect(editor.getState().selections?.[0]).toMatchObject({
start: { line: 0, character: 6 },
end: { line: 0, character: 6 },
@@ -443,7 +443,7 @@ describe("FileViewer pierre editing", () => {
editorRef = editor;
return (
-
+
{
options={{ disableFileHeader: true, theme: "pierre-dark", themeType: "dark" }}
/>
-
+
);
}
@@ -477,7 +477,7 @@ describe("FileViewer pierre editing", () => {
true,
);
await settle(100);
- expect(editor.getState().file.contents).toContain("const s = 9;");
+ expect(editor.getText()).toContain("const s = 9;");
screen.unmount();
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 66d80b64a..e507c8f59 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -19,8 +19,8 @@ catalogs:
specifier: 0.13.2
version: 0.13.2
'@pierre/diffs':
- specifier: 1.3.0-beta.9
- version: 1.3.0-beta.9
+ specifier: 1.3.0-beta.10
+ version: 1.3.0-beta.10
'@types/bun':
specifier: ^1.3.11
version: 1.3.14
@@ -198,7 +198,7 @@ importers:
version: 1.18.3
'@pierre/diffs':
specifier: 'catalog:'
- version: 1.3.0-beta.9(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
+ version: 1.3.0-beta.10(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
effect:
specifier: 4.0.0-beta.97
version: 4.0.0-beta.97(patch_hash=181986b14edb53e2f3c82527e8e5a9f7675db32427ed6940ee3da64e2f5968e2)
@@ -283,7 +283,7 @@ importers:
version: 0.47.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(yjs@13.6.31)
'@pierre/diffs':
specifier: 'catalog:'
- version: 1.3.0-beta.9(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
+ version: 1.3.0-beta.10(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@tanstack/react-pacer':
specifier: ^0.22.1
version: 0.22.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
@@ -2444,8 +2444,8 @@ packages:
resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==}
engines: {node: '>=14.18.0'}
- '@pierre/diffs@1.3.0-beta.9':
- resolution: {integrity: sha512-XoSLsyHA9UjNb/5UGQoKN1Bqma+ecHHaaM2T2edYdeJ67iS27qivWNoKq+uWjKhRzZEB4JQQRzlXxKy79UvY9A==}
+ '@pierre/diffs@1.3.0-beta.10':
+ resolution: {integrity: sha512-efyFM9GRfI6WkmHJP0CnZBopuM8yCwGqIKbZHoe1D5PV15VDkr7Vpi8EZt40AYrN1km//utQtYhHDSwt2KwjSg==}
peerDependencies:
react: ^18.3.1 || ^19.0.0
react-dom: ^18.3.1 || ^19.0.0
@@ -2610,50 +2610,26 @@ packages:
'@shikijs/core@3.23.0':
resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==}
- '@shikijs/core@4.2.0':
- resolution: {integrity: sha512-Hc87Ab1Ld/vEbZRCbwx344I5v+4RU8CVToUTRkqXL1+TjbuOp9U5Xa0M23V4GEWHxVn+yO5otb+HkQVm3ptWQQ==}
- engines: {node: '>=20'}
-
'@shikijs/core@4.3.1':
resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==}
engines: {node: '>=20'}
- '@shikijs/engine-javascript@4.2.0':
- resolution: {integrity: sha512-fjETeq1k5ffyXqRgS6+3hpvqseLalp1kjNfRbXpUgWR8FpZ1CmQfiNHovc5lncYjt/Vg5JK/WJEmLahjwMa0og==}
- engines: {node: '>=20'}
-
'@shikijs/engine-javascript@4.3.1':
resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==}
engines: {node: '>=20'}
- '@shikijs/engine-oniguruma@4.2.0':
- resolution: {integrity: sha512-hTorK1dffPkpbMUk6Z+828PgRo7d07HbnizoP0hNPFjhxMHctj0Px/qoHeGMYafc6ju+u9iMldN4JbVzNQM++g==}
- engines: {node: '>=20'}
-
'@shikijs/engine-oniguruma@4.3.1':
resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==}
engines: {node: '>=20'}
- '@shikijs/langs@4.2.0':
- resolution: {integrity: sha512-bwrVRlJ0wUhZxAbVdvBbv2TTC9yLsh4C/IO5Ofz0T8MQntgDvyVnkbjw9vi50r1kx7RCIJdnJnjZAwmAsXFLZQ==}
- engines: {node: '>=20'}
-
'@shikijs/langs@4.3.1':
resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==}
engines: {node: '>=20'}
- '@shikijs/primitive@4.2.0':
- resolution: {integrity: sha512-NOq+DtUkVBJtZMVXL5A0vI0Xk8nvDYaXetFHSJFlOqjDZIVhIPRYFdGkSoElDqNuegikcc3A76SNUa8dTqtAYA==}
- engines: {node: '>=20'}
-
'@shikijs/primitive@4.3.1':
resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==}
engines: {node: '>=20'}
- '@shikijs/themes@4.2.0':
- resolution: {integrity: sha512-RX8IHYeLv8Cu2W6ruc3RxUqWn0IYCqSrMBzi/uRGAmfyDNOnNO5BF/Px7o97n4XTpmFTo5GbRaazuOWj+2ak2w==}
- engines: {node: '>=20'}
-
'@shikijs/themes@4.3.1':
resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==}
engines: {node: '>=20'}
@@ -2664,10 +2640,6 @@ packages:
'@shikijs/types@3.23.0':
resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==}
- '@shikijs/types@4.2.0':
- resolution: {integrity: sha512-VT/MKtlpOhEPZloSH3Pb9WCZEBDoQVMa9jedp5UAwmJOar1DVc9DRODAxmYPW9M93IK4ryuqRejFfmlvlVDemw==}
- engines: {node: '>=20'}
-
'@shikijs/types@4.3.1':
resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==}
engines: {node: '>=20'}
@@ -5418,10 +5390,6 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shiki@4.2.0:
- resolution: {integrity: sha512-hjNax6o/ylDy9lefQEaSDtzaT3iVNtZ3WmpQnbuQNoG4xvnSKf2kSKbihZVO4JRG1TTMejs7CmNRYlWgAL66pQ==}
- engines: {node: '>=20'}
-
shiki@4.3.1:
resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==}
engines: {node: '>=20'}
@@ -7787,29 +7755,29 @@ snapshots:
tslib: 2.8.1
webcrypto-core: 1.9.2
- '@pierre/diffs@1.3.0-beta.9(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
+ '@pierre/diffs@1.3.0-beta.10(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@pierre/theme': 1.1.0
- '@pierre/theming': 0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(shiki@4.2.0)
+ '@pierre/theming': 0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(shiki@4.3.1)
'@shikijs/transformers': 3.23.0
diff: 9.0.0
hast-util-to-html: 9.0.5
lru_map: 0.4.1
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
- shiki: 4.2.0
+ shiki: 4.3.1
transitivePeerDependencies:
- '@shikijs/themes'
'@pierre/theme@1.1.0': {}
- '@pierre/theming@0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(shiki@4.2.0)':
+ '@pierre/theming@0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(shiki@4.3.1)':
optionalDependencies:
'@pierre/theme': 1.1.0
'@shikijs/themes': 4.3.1
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
- shiki: 4.2.0
+ shiki: 4.3.1
'@polka/url@1.0.0-next.29': {}
@@ -7900,14 +7868,6 @@ snapshots:
'@types/hast': 3.0.5
hast-util-to-html: 9.0.5
- '@shikijs/core@4.2.0':
- dependencies:
- '@shikijs/primitive': 4.2.0
- '@shikijs/types': 4.2.0
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
- hast-util-to-html: 9.0.5
-
'@shikijs/core@4.3.1':
dependencies:
'@shikijs/primitive': 4.3.1
@@ -7916,52 +7876,27 @@ snapshots:
'@types/hast': 3.0.5
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@4.2.0':
- dependencies:
- '@shikijs/types': 4.2.0
- '@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.6
-
'@shikijs/engine-javascript@4.3.1':
dependencies:
'@shikijs/types': 4.3.1
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.6
- '@shikijs/engine-oniguruma@4.2.0':
- dependencies:
- '@shikijs/types': 4.2.0
- '@shikijs/vscode-textmate': 10.0.2
-
'@shikijs/engine-oniguruma@4.3.1':
dependencies:
'@shikijs/types': 4.3.1
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@4.2.0':
- dependencies:
- '@shikijs/types': 4.2.0
-
'@shikijs/langs@4.3.1':
dependencies:
'@shikijs/types': 4.3.1
- '@shikijs/primitive@4.2.0':
- dependencies:
- '@shikijs/types': 4.2.0
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
-
'@shikijs/primitive@4.3.1':
dependencies:
'@shikijs/types': 4.3.1
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.5
- '@shikijs/themes@4.2.0':
- dependencies:
- '@shikijs/types': 4.2.0
-
'@shikijs/themes@4.3.1':
dependencies:
'@shikijs/types': 4.3.1
@@ -7976,11 +7911,6 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.5
- '@shikijs/types@4.2.0':
- dependencies:
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
-
'@shikijs/types@4.3.1':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
@@ -9739,7 +9669,7 @@ snapshots:
hast-util-to-html@9.0.5:
dependencies:
- '@types/hast': 3.0.4
+ '@types/hast': 3.0.5
'@types/unist': 3.0.3
ccount: 2.0.1
comma-separated-tokens: 2.0.3
@@ -11320,17 +11250,6 @@ snapshots:
shebang-regex@3.0.0: {}
- shiki@4.2.0:
- dependencies:
- '@shikijs/core': 4.2.0
- '@shikijs/engine-javascript': 4.2.0
- '@shikijs/engine-oniguruma': 4.2.0
- '@shikijs/langs': 4.2.0
- '@shikijs/themes': 4.2.0
- '@shikijs/types': 4.2.0
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.4
-
shiki@4.3.1:
dependencies:
'@shikijs/core': 4.3.1
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 0150a8717..6ba2ff6f1 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -15,7 +15,7 @@ catalog:
"@effect/sql-sqlite-bun": 4.0.0-beta.97
"@effect/tsgo": 0.13.2
"@effect/vitest": 4.0.0-beta.97
- "@pierre/diffs": 1.3.0-beta.9
+ "@pierre/diffs": 1.3.0-beta.10
"@types/bun": ^1.3.11
"@types/node": ^24.10.13
"@typescript/native-preview": 7.0.0-dev.20260707.2