History

Fix editable file focus and live syntax highlighting (#3979)

Jake Leventhal committed 3 months ago

Commit fc28abf1 parent 85a89866 files · +131 −56Browse files

Unified · Split

6 files
  1. apps/web/src/components/files/FilePreviewPanel.tsx +13 −5
  2. apps/web/src/components/files/fileContentRevision.test.ts +28 −1
  3. apps/web/src/components/files/fileContentRevision.ts +18 −0
  4. patches/@pierre%2Fdiffs@1.3.0-beta.10.patch +38 −22
  5. pnpm-lock.yaml +32 −26
  6. pnpm-workspace.yaml +2 −2
apps/web/src/components/files/FilePreviewPanel.tsx+13−5
@@ -7,7 +7,7 @@ import type { · 6 unmodified lines
77 import { isWorkspaceImagePreviewPath } from "@t3tools/shared/filePreview";
88 import { VirtualizedFile, type SelectedLineRange } from "@pierre/diffs";
99 import { Editor } from "@pierre/diffs/editor";
10−import { EditorProvider, File, type FileOptions, Virtualizer } from "@pierre/diffs/react";
10+import { EditProvider, File, type FileOptions, Virtualizer } from "@pierre/diffs/react";
1111 import {
1212 isAtomCommandInterrupted,
1313 squashAtomCommandFailure,
@@ -52,7 +52,7 @@ import { · 38 unmodified lines
5252 } from "./fileCommentAnnotations";
5353 import { installFileEditorDismissal } from "./fileEditorDismissal";
5454 import { LocalCommentAnnotation } from "./LocalCommentAnnotation";
55−import { projectFileCacheKey } from "./fileContentRevision";
55+import { projectFileCacheKey, projectFileEditorCacheKey } from "./fileContentRevision";
5656 import { fileBreadcrumbs } from "./filePath";
5757 import { isMarkdownPreviewFile, setMarkdownTaskChecked } from "./filePreviewMode";
5858 import { FileSaveCoordinator } from "./fileSaveCoordinator";
@@ -364,6 +364,8 @@ function EditableFileSurface({ · 305 unmodified lines
364364 const editor = useMemo(
365365 () =>
366366 new Editor<FileCommentAnnotationGroup>({
367+ persistState: true,
368+ persistStateStorage: "inMemory",
367369 onChange: (file, nextLineAnnotations) => {
368370 setProjectFileQueryData(environmentId, cwd, relativePath, file.contents);
369371 saveCoordinator.change(file.contents);
@@ -536,7 +538,7 @@ function EditableFileSurface({ · 166 unmodified lines
536538 );
537539
538540 return (
539− <EditorProvider editor={editor}>
541+ <EditProvider editor={editor}>
540542 <div ref={surfaceRef} className="flex min-h-0 flex-1">
541543 <Virtualizer
542544 className="file-preview-virtualizer min-h-0 flex-1 overflow-auto"
@@ -549,7 +551,13 @@ function EditableFileSurface({ · 6 unmodified lines
549551 file={{
550552 name: relativePath,
551553 contents,
552− cacheKey: projectFileCacheKey(cwd, relativePath, contents),
554+ cacheKey: projectFileEditorCacheKey(
555+ environmentId,
556+ cwd,
557+ relativePath,
558+ contents,
559+ editor.getFile(),
560+ ),
553561 }}
554562 options={{
555563 disableFileHeader: true,
@@ -586,7 +594,7 @@ function EditableFileSurface({ · 30 unmodified lines
586594 />
587595 </Virtualizer>
588596 </div>
589− </EditorProvider>
597+ </EditProvider>
590598 );
591599 }
592600
apps/web/src/components/files/fileContentRevision.test.ts+28−1
@@ -1,6 +1,10 @@
11 import { describe, expect, it } from "vite-plus/test";
22
3−import { fileContentRevision, projectFileCacheKey } from "./fileContentRevision";
3+import {
4+ fileContentRevision,
5+ projectFileCacheKey,
6+ projectFileEditorCacheKey,
7+} from "./fileContentRevision";
48
59 describe("fileContentRevision", () => {
610 it("changes for same-length edits", () => {
@@ -12,4 +16,27 @@ describe("fileContentRevision", () => { · 5 unmodified lines
1216 projectFileCacheKey("/repo", "file.json", "contents"),
1317 );
1418 });
19+
20+ it("keeps editor identity stable for locally edited contents", () => {
21+ const cacheKey = projectFileEditorCacheKey("local", "/repo", "file.json", "after", undefined);
22+
23+ expect(
24+ projectFileEditorCacheKey("local", "/repo", "file.json", "after edit", {
25+ cacheKey,
26+ contents: "after edit",
27+ }),
28+ ).toBe(cacheKey);
29+ });
30+
31+ it("rotates editor identity for external contents and environments", () => {
32+ const cacheKey = projectFileEditorCacheKey("local", "/repo", "file.json", "before", undefined);
33+ const editorFile = { cacheKey, contents: "before" };
34+
35+ expect(
36+ projectFileEditorCacheKey("local", "/repo", "file.json", "external edit", editorFile),
37+ ).not.toBe(cacheKey);
38+ expect(projectFileEditorCacheKey("remote", "/repo", "file.json", "before", undefined)).not.toBe(
39+ cacheKey,
40+ );
41+ });
1542 });
apps/web/src/components/files/fileContentRevision.ts+18−0
@@ -10,3 +10,21 @@ export function fileContentRevision(contents: string): string { · 9 unmodified lines
1010 export function projectFileCacheKey(cwd: string, relativePath: string, contents: string): string {
1111 return `${cwd}:${relativePath}:${fileContentRevision(contents)}`;
1212 }
13+
14+interface EditorFileIdentity {
15+ readonly cacheKey?: string;
16+ readonly contents: string;
17+}
18+
19+export function projectFileEditorCacheKey(
20+ environmentId: string,
21+ cwd: string,
22+ relativePath: string,
23+ contents: string,
24+ editorFile: EditorFileIdentity | undefined,
25+): string {
26+ if (editorFile?.contents === contents && editorFile.cacheKey) {
27+ return editorFile.cacheKey;
28+ }
29+ return `editor:${environmentId}:${projectFileCacheKey(cwd, relativePath, contents)}`;
30+}
patches/@pierre%2Fdiffs@1.3.0-beta.10.patchrenamed from patches/@pierre%2Fdiffs@1.3.0-beta.5.patch+38−22
@@ -1,38 +1,54 @@
11 diff --git a/dist/editor/editor.js b/dist/editor/editor.js
2−index e8013fc6eb6f243a6c912facf3fc0319ac66a8d0..80c82df4cdeb828bd331f5ec2f443d216bedc304 100644
2+index ff78e2a..f9df318 100644
33 --- a/dist/editor/editor.js
44 +++ b/dist/editor/editor.js
5−@@ -77,15 +77,12 @@ var Editor = class {
6− this.#options = options;
7− }
8− edit(component) {
9−- const { useTokenTransformer, enableGutterUtility, enableLineSelection, expandUnchanged, diffStyle, lineHoverHighlight,...rest } = component.options;
10−+ const { useTokenTransformer, expandUnchanged, diffStyle,...rest } = component.options;
11− const isDiff = component.type === "file-diff";
12−- if (useTokenTransformer !== true || enableGutterUtility === true || enableLineSelection === true || lineHoverHighlight !== "disabled" || expandUnchanged !== true && isDiff || diffStyle === "unified" && isDiff) {
13−+ if (useTokenTransformer !== true || expandUnchanged !== true && isDiff || diffStyle === "unified" && isDiff) {
14− component.setOptions({
5+@@ -146,14 +146,11 @@ var Editor = class {
6+ const file = fileInstance.__getCurrentFile?.();
7+ if (file !== void 0) requirePersistedCacheKey(file);
8+ }
9+- const { useTokenTransformer, enableGutterUtility, enableLineSelection, lineHoverHighlight = "disabled", ...rest } = fileInstance.options;
10+- if (useTokenTransformer !== true || enableGutterUtility === true || enableLineSelection === true || lineHoverHighlight !== "disabled") {
11++ const { useTokenTransformer, ...rest } = fileInstance.options;
12++ if (useTokenTransformer !== true) {
13+ fileInstance.setOptions({
1514 ...rest,
16− useTokenTransformer: true,
15+- useTokenTransformer: true,
1716 - enableGutterUtility: false,
1817 - enableLineSelection: false,
19−- lineHoverHighlight: "disabled",
20− expandUnchanged: true,
21− diffStyle: "split"
18+- lineHoverHighlight: "disabled"
19++ useTokenTransformer: true
2220 });
23−@@ -511,6 +508,7 @@ var Editor = class {
21+ fileInstance.rerender();
22+ }
23+@@ -908,6 +905,7 @@ var Editor = class {
2424 return lineNumber - 1;
2525 };
2626 this.#editorEventDisposes.push(addEventListener(gutterEl, "pointerdown", (e) => {
2727 + if (this.#fileInstance?.options.enableLineSelection === true) return;
28− const textDocument = this.#textDocument;
29− const lineIndex = resolveEditableLine(resolveGutterTarget(e.composedPath()[0]));
30− if (lineIndex === void 0 || textDocument === void 0) return;
28+ const gutterRow = resolveGutterTarget(e.composedPath()[0]);
29+ if (gutterRow?.dataset.lineType === "change-deletion") {
30+ const code = gutterRow.closest("[data-code]");
31+@@ -1522,6 +1520,7 @@ var Editor = class {
32+ if (gutterEl !== void 0) gutterEl.style.gridRow = "span " + gridRow;
33+ }
34+ fileInstance.updateRenderCache(dirtyLines, tokenizer.themeType, !didLineCountChange, didLineCountChange);
35++ if (fileInstance.file !== void 0) fileInstance.file.contents = textDocument.getText();
36+ if (didLineCountChange) fileInstance.applyDocumentChange(textDocument, newLineAnnotations, shouldUpdateBuffer);
37+ if (this.#isDiff && (this.#diffSyle === "unified" || didLineCountChange)) this.#resetCache();
38+ if (newLineAnnotations !== void 0) {
39+@@ -1788,6 +1787,7 @@ var Editor = class {
40+ }
41+ }
42+ #setSelectedLinesSafe(range, lineNumberOnly = false) {
43++ if (this.#fileInstance?.options.controlledSelection === true) return;
44+ try {
45+ this.#fileInstance?.setSelectedLines(range, {
46+ notify: false,
3147 diff --git a/dist/react/utils/useFileInstance.js b/dist/react/utils/useFileInstance.js
32−index cb8e2026fb5d7a19f489c0a2402efbcb7dff3322..510fad6364d4a2214c7dd65fe2b114f1cce0c815 100644
48+index e9f62f5..af82a46 100644
3349 --- a/dist/react/utils/useFileInstance.js
3450 +++ b/dist/react/utils/useFileInstance.js
35−@@ -92,10 +92,7 @@ function mergeFileOptions({ options, controlledSelection, contentEditable, hasCu
51+@@ -91,10 +91,7 @@ function mergeFileOptions({ options, controlledSelection, contentEditable, hasCu
3652 };
3753 if (needsEditorOptions) merged = {
3854 ...merged,
@@ -45,7 +61,7 @@ index cb8e2026fb5d7a19f489c0a2402efbcb7dff3322..510fad6364d4a2214c7dd65fe2b114f1 · 6 unmodified lines
4561 return merged;
4662 }
4763 diff --git a/package.json b/package.json
48−index d1558633de87044b7aa96cff09443db11f163cec..c0b16f0a0bec6fba2026f24f38b2c0a8fa06af7c 100644
64+index ff61c90..1e170e5 100644
4965 --- a/package.json
5066 +++ b/package.json
5167 @@ -55,6 +55,18 @@
pnpm-lock.yaml+32−26
@@ -19,8 +19,8 @@ catalogs: · 18 unmodified lines
1919 specifier: 1.8.0
2020 version: 1.8.0
2121 '@pierre/diffs':
22− specifier: 1.3.0-beta.5
23− version: 1.3.0-beta.5
22+ specifier: 1.3.0-beta.10
23+ version: 1.3.0-beta.10
2424 '@typescript/native-preview':
2525 specifier: 7.0.0-dev.20260604.1
2626 version: 7.0.0-dev.20260604.1
@@ -75,7 +75,7 @@ patchedDependencies: · 48 unmodified lines
7575 '@expo/metro-config@56.0.14': 8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46
7676 '@ff-labs/fff-node@0.9.4': 2b16019ce7ab61aec6478dd02f79ef468cc1d5c51e9d00764f7d2ab8167210c8
7777 '@legendapp/list@3.2.0': 9203ec3db86574a31e157a265cefd8997b259cc420a0c4c61c580c80ed8cf78d
78− '@pierre/diffs@1.3.0-beta.5': 7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a
78+ '@pierre/diffs@1.3.0-beta.10': 7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa
7979 '@react-native-menu/menu@2.0.0': 5ea3ae4bf1d9baf5443b65c269bb09621c27a68d556f713778f37b1e8d46aaae
8080 '@react-navigation/native-stack@7.17.6': c7fc101b78d434904425e5a24c22fb0042298dec6f807250486e784f3c717273
8181 effect@4.0.0-beta.102: 71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488
@@ -222,7 +222,7 @@ importers: · 140 unmodified lines
222222 version: 1.8.0
223223 '@pierre/diffs':
224224 specifier: 'catalog:'
225− version: 1.3.0-beta.5(patch_hash=7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
225+ version: 1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
226226 '@react-native-menu/menu':
227227 specifier: ^2.0.0
228228 version: 2.0.0(patch_hash=5ea3ae4bf1d9baf5443b65c269bb09621c27a68d556f713778f37b1e8d46aaae)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
@@ -466,7 +466,7 @@ importers: · 237 unmodified lines
466466 version: 1.15.13
467467 '@pierre/diffs':
468468 specifier: 'catalog:'
469− version: 1.3.0-beta.5(patch_hash=7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
469+ version: 1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
470470 effect:
471471 specifier: 4.0.0-beta.102
472472 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
@@ -551,7 +551,7 @@ importers: · 78 unmodified lines
551551 version: 0.41.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(yjs@13.6.31)
552552 '@pierre/diffs':
553553 specifier: 'catalog:'
554− version: 1.3.0-beta.5(patch_hash=7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
554+ version: 1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
555555 '@pierre/trees':
556556 specifier: 1.0.0-beta.4
557557 version: 1.0.0-beta.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -3584,20 +3584,20 @@ packages: · 3026 unmodified lines
35843584 resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==}
35853585 engines: {node: '>=14.18.0'}
35863586
3587− '@pierre/diffs@1.3.0-beta.5':
3588− resolution: {integrity: sha512-d7449IY6Phcg9LCRLbPxhsxn6Bv4KoaP/vPyZtGu2uR1SFsSJPQcRoPf8lzyobNGKD0GZGuhgHW5LrOlilFo7w==}
3587+ '@pierre/diffs@1.3.0-beta.10':
3588+ resolution: {integrity: sha512-efyFM9GRfI6WkmHJP0CnZBopuM8yCwGqIKbZHoe1D5PV15VDkr7Vpi8EZt40AYrN1km//utQtYhHDSwt2KwjSg==}
35893589 peerDependencies:
35903590 react: ^18.3.1 || ^19.0.0
35913591 react-dom: ^18.3.1 || ^19.0.0
35923592
3593− '@pierre/theme@1.0.3':
3594− resolution: {integrity: sha512-sWHv11TMoqKxKDgTIk5VbhQjdPhs8DCcBxbjh3mRlS3YOM/OcrWoGX6MM8eBGn9cUu3M46Py0JnxsG2nJaFTuA==}
3593+ '@pierre/theme@1.1.0':
3594+ resolution: {integrity: sha512-GC2OWTAfTIIWWYhPCygwG8t2EtePQkRfON4MI2rwIkJylmiyqIttJID2dCL8sUD8cNdEvYkEyfEHHKMeCiDLoQ==}
35953595 engines: {vscode: ^1.0.0}
35963596
3597− '@pierre/theming@0.0.1':
3598− resolution: {integrity: sha512-1thlEtJbqdyLzc1ZS2KQa1q7FzDGHT4dTEdKHoyQjOMeWWOmbVG5/ndEfOKfAb5Fzkz8cNJrOjFLiZoDH/A03A==}
3597+ '@pierre/theming@0.0.2':
3598+ resolution: {integrity: sha512-QM1M4stXfnzfaE8I8YbjXSApV8c+2dBsXJj8eYg9WTpBR/cTmCZIcfGnN4p13iRrYu2Br/R/OJfEL7uR8Qjctw==}
35993599 peerDependencies:
3600− '@pierre/theme': ^1.0.0
3600+ '@pierre/theme': ^1.1.0
36013601 '@shikijs/themes': ^3.0.0 || ^4.0.0
36023602 react: ^18.3.1 || ^19.0.0
36033603 react-dom: ^18.3.1 || ^19.0.0
@@ -6104,6 +6104,10 @@ packages: · 2500 unmodified lines
61046104 resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
61056105 engines: {node: '>=0.3.1'}
61066106
6107+ diff@9.0.0:
6108+ resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==}
6109+ engines: {node: '>=0.3.1'}
6110+
61076111 dir-compare@4.2.0:
61086112 resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==}
61096113
@@ -13569,12 +13573,12 @@ snapshots: · 7459 unmodified lines
1356913573 tslib: 2.8.1
1357013574 webcrypto-core: 1.9.2
1357113575
13572− '@pierre/diffs@1.3.0-beta.5(patch_hash=7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
13576+ '@pierre/diffs@1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
1357313577 dependencies:
13574− '@pierre/theme': 1.0.3
13575− '@pierre/theming': 0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(shiki@4.2.0)
13578+ '@pierre/theme': 1.1.0
13579+ '@pierre/theming': 0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(shiki@4.2.0)
1357613580 '@shikijs/transformers': 4.2.0
13577− diff: 8.0.3
13581+ diff: 9.0.0
1357813582 hast-util-to-html: 9.0.5
1357913583 lru_map: 0.4.1
1358013584 react: 19.2.3
@@ -13583,12 +13587,12 @@ snapshots: · 2 unmodified lines
1358313587 transitivePeerDependencies:
1358413588 - '@shikijs/themes'
1358513589
13586− '@pierre/diffs@1.3.0-beta.5(patch_hash=7cb6da88544119adda056b2f46f43956f99326227732da0b345081e285a6c53a)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
13590+ '@pierre/diffs@1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
1358713591 dependencies:
13588− '@pierre/theme': 1.0.3
13589− '@pierre/theming': 0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(shiki@4.2.0)
13592+ '@pierre/theme': 1.1.0
13593+ '@pierre/theming': 0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(shiki@4.2.0)
1359013594 '@shikijs/transformers': 4.2.0
13591− diff: 8.0.3
13595+ diff: 9.0.0
1359213596 hast-util-to-html: 9.0.5
1359313597 lru_map: 0.4.1
1359413598 react: 19.2.6
@@ -13597,19 +13601,19 @@ snapshots: · 2 unmodified lines
1359713601 transitivePeerDependencies:
1359813602 - '@shikijs/themes'
1359913603
13600− '@pierre/theme@1.0.3': {}
13604+ '@pierre/theme@1.1.0': {}
1360113605
13602− '@pierre/theming@0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(shiki@4.2.0)':
13606+ '@pierre/theming@0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(shiki@4.2.0)':
1360313607 optionalDependencies:
13604− '@pierre/theme': 1.0.3
13608+ '@pierre/theme': 1.1.0
1360513609 '@shikijs/themes': 4.2.0
1360613610 react: 19.2.3
1360713611 react-dom: 19.2.3(react@19.2.3)
1360813612 shiki: 4.2.0
1360913613
13610− '@pierre/theming@0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(shiki@4.2.0)':
13614+ '@pierre/theming@0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(shiki@4.2.0)':
1361113615 optionalDependencies:
13612− '@pierre/theme': 1.0.3
13616+ '@pierre/theme': 1.1.0
1361313617 '@shikijs/themes': 4.3.0
1361413618 react: 19.2.6
1361513619 react-dom: 19.2.6(react@19.2.6)
@@ -16379,6 +16383,8 @@ snapshots: · 2763 unmodified lines
1637916383
1638016384 diff@8.0.3: {}
1638116385
16386+ diff@9.0.0: {}
16387+
1638216388 dir-compare@4.2.0:
1638316389 dependencies:
1638416390 minimatch: 3.1.5
pnpm-workspace.yaml+2−2
@@ -41,7 +41,7 @@ catalog: · 40 unmodified lines
4141 "@effect/vitest": 4.0.0-beta.102
4242 "@noble/curves": 1.9.1
4343 "@noble/hashes": 1.8.0
44− "@pierre/diffs": 1.3.0-beta.5
44+ "@pierre/diffs": 1.3.0-beta.10
4545 "@types/node": 24.12.4
4646 "@typescript/native-preview": 7.0.0-dev.20260604.1
4747 effect: 4.0.0-beta.102
@@ -128,7 +128,7 @@ patchedDependencies: · 80 unmodified lines
128128 "@expo/metro-config@56.0.14": patches/@expo%2Fmetro-config@56.0.14.patch
129129 "@ff-labs/fff-node@0.9.4": patches/@ff-labs__fff-node@0.9.4.patch
130130 "@legendapp/list@3.2.0": patches/@legendapp__list@3.2.0.patch
131− "@pierre/diffs@1.3.0-beta.5": patches/@pierre%2Fdiffs@1.3.0-beta.5.patch
131+ "@pierre/diffs@1.3.0-beta.10": patches/@pierre%2Fdiffs@1.3.0-beta.10.patch
132132 "@react-native-menu/menu@2.0.0": patches/@react-native-menu__menu@2.0.0.patch
133133 "@react-navigation/native-stack@7.17.6": patches/@react-navigation%2Fnative-stack@7.17.6.patch
134134 effect@4.0.0-beta.102: patches/effect@4.0.0-beta.102.patch