@qredence/fleet 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/web/client/assets/{action-swap-roll-BfVrBOVd.js → action-swap-roll-Bek47h-E.js} +1 -1
  3. package/dist/web/client/assets/{alert-dialog-FCppNafx.js → alert-dialog-OoasP5iO.js} +1 -1
  4. package/dist/web/client/assets/{artifacts-panel-C69vz-oo.js → artifacts-panel-DVY0-7X0.js} +1 -1
  5. package/dist/web/client/assets/{badge-DOGhnsYk.js → badge-9wr3qUp1.js} +2 -2
  6. package/dist/web/client/assets/{button-BJyg7l5W.js → button-Bqms7ZKX.js} +1 -1
  7. package/dist/web/client/assets/{card-BScRdZNS.js → card-DPCbcrMK.js} +1 -1
  8. package/dist/web/client/assets/{chat-command-palette-wyZjTNa8.js → chat-command-palette-CXS5eTiy.js} +1 -1
  9. package/dist/web/client/assets/{citations-BhyqbxcZ.js → citations-C7USoVdz.js} +1 -1
  10. package/dist/web/client/assets/{command-Bo31U-UD.js → command-s2yLD3tA.js} +1 -1
  11. package/dist/web/client/assets/{create-project-dialog-SDyXTpl-.js → create-project-dialog-C99_Lyjg.js} +1 -1
  12. package/dist/web/client/assets/{dialog-DLIPvl1s.js → dialog-DuCD5hRq.js} +1 -1
  13. package/dist/web/client/assets/{ease-DKi-MOH5.js → ease-2gsl7ABx.js} +1 -1
  14. package/dist/web/client/assets/{fork-picker-dialog-BDleMADF.js → fork-picker-dialog--dV6TE-9.js} +1 -1
  15. package/dist/web/client/assets/globals-BXtzVIWE.css +2 -0
  16. package/dist/web/client/assets/{index-BARp0bjW.js → index-C2EkVtv5.js} +3 -3
  17. package/dist/web/client/assets/{input-Ce8yLnXY.js → input-DECT4vz2.js} +1 -1
  18. package/dist/web/client/assets/{input-group-BZLQiZOA.js → input-group-CZlz1ygA.js} +1 -1
  19. package/dist/web/client/assets/{ipython-tool-CuSGRhXl.js → ipython-tool-Bs6ESZe1.js} +1 -1
  20. package/dist/web/client/assets/{layout-constants-Bl6XCvhY.js → layout-constants-C4hoW3YP.js} +1 -1
  21. package/dist/web/client/assets/{markdown-yn-nhRzB.js → markdown-B2tpfUKu.js} +2 -2
  22. package/dist/web/client/assets/{markdown-code-DfJbKhL9.js → markdown-code-B5YUmtLX.js} +1 -1
  23. package/dist/web/client/assets/{message-queue-CiptKSb6.js → message-queue-BD2sIUTH.js} +1 -1
  24. package/dist/web/client/assets/{model-selector-list-BHQ-Q8b9.js → model-selector-list-zPZRE3JY.js} +1 -1
  25. package/dist/web/client/assets/{notify-BC0a76VJ.js → notify-mVA6z9Ly.js} +1 -1
  26. package/dist/web/client/assets/{openui-renderer-DrfHxs1t.js → openui-renderer-ByP8yQph.js} +1 -1
  27. package/dist/web/client/assets/{prompt-input-IwZOepG7.js → prompt-input-Bnl0HyL6.js} +1 -1
  28. package/dist/web/client/assets/{prompt-suggestions-BRFWFm5y.js → prompt-suggestions-DcgETXtw.js} +1 -1
  29. package/dist/web/client/assets/{provider-label-DNZOLldn.js → provider-label-COVNyoZo.js} +1 -1
  30. package/dist/web/client/assets/{repl-panel-UQN9UFG7.js → repl-panel-BoDNpJOe.js} +1 -1
  31. package/dist/web/client/assets/{resources-panel-kp_UjnpX.js → resources-panel-DD6iWOF3.js} +1 -1
  32. package/dist/web/client/assets/{right-panel-registry-CF7GLJrk.js → right-panel-registry-CIfLdAfS.js} +2 -2
  33. package/dist/web/client/assets/{routes-DCP1DP1g.js → routes-DO93P3Xm.js} +5 -5
  34. package/dist/web/client/assets/{select-COK0Kaq2.js → select-Dp15z1lf.js} +1 -1
  35. package/dist/web/client/assets/{session-reasoning-panel-DrTWp8d4.js → session-reasoning-panel-WMedZp__.js} +1 -1
  36. package/dist/web/client/assets/session-tool-renderer-BFC3-Md4.js +170 -0
  37. package/dist/web/client/assets/{session-tree-panel-deGRKAhX.js → session-tree-panel-CnHOsPzz.js} +1 -1
  38. package/dist/web/client/assets/{settings-dialog-BU1Tw0CQ.js → settings-dialog-BN138nzK.js} +1 -1
  39. package/dist/web/client/assets/{skeleton-D5Y9nBfp.js → skeleton-DNAr5ULI.js} +1 -1
  40. package/dist/web/client/assets/{skeleton-loaders-DOKGa7CW.js → skeleton-loaders-B28mF4tJ.js} +1 -1
  41. package/dist/web/client/assets/{spinner-C3sPnLdu.js → spinner-CSBXk3Lo.js} +1 -1
  42. package/dist/web/client/assets/{subagent-chat-panel-bVnkDkgs.js → subagent-chat-panel-DYKOKRPp.js} +1 -1
  43. package/dist/web/client/assets/subagent-transcript-BCUhqVvi.js +1 -0
  44. package/dist/web/client/assets/{subagent-utils-D7sXbLsS.js → subagent-utils-CM2qX9BG.js} +2 -2
  45. package/dist/web/client/assets/{subagents-panel-i5-12E1U.js → subagents-panel-CTvtU0Sh.js} +1 -1
  46. package/dist/web/client/assets/{surface-context-DWplCCcO.js → surface-context-VvasJf_6.js} +1 -1
  47. package/dist/web/client/assets/{surfaces-BULKVm-B.js → surfaces-m1vs5aMP.js} +1 -1
  48. package/dist/web/client/assets/{switch-DQETDDJT.js → switch-eqXIzePo.js} +1 -1
  49. package/dist/web/client/assets/{toast-BFeqSeaR.js → toast-DRDVljMF.js} +1 -1
  50. package/dist/web/client/assets/{tool-result-D7HtJ_yg.js → tool-result-DWUV8hEz.js} +1 -1
  51. package/dist/web/client/assets/{tool-timeline-B4ci1oJg.js → tool-timeline-4k2iSEky.js} +1 -1
  52. package/dist/web/client/assets/{use-reduced-motion-BgG7f9xw.js → use-reduced-motion-BzGFRmoG.js} +1 -1
  53. package/dist/web/client/assets/utils-CFDGLzf6.js +1 -0
  54. package/dist/web/client/assets/{workspace-panel-Clbmrdza.js → workspace-panel-BNeGABPi.js} +1 -1
  55. package/dist/web/client/assets/{workspace-path-nav-eVT0rYvv.js → workspace-path-nav-umvkE4ut.js} +2 -2
  56. package/dist/web/client/bundle-budget.json +5 -5
  57. package/dist/web/server/{_tanstack-start-manifest_v-CaT-3S-N-VAOGUHEJ.js → _tanstack-start-manifest_v-DTCFS0PG-ARV2V4FW.js} +26 -26
  58. package/dist/web/server/{artifacts-panel-BuAqeJzj-6DYYLKUW.js → artifacts-panel-Ct2R_4wM-DAPQMI57.js} +13 -13
  59. package/dist/web/server/{chat-command-palette-Ca8gXVi2-P6EOQ43G.js → chat-command-palette-ETZzg35Q-TAV74IAW.js} +8 -8
  60. package/dist/web/server/{chunk-5AYK2KDO.js → chunk-777VIBCH.js} +176 -176
  61. package/dist/web/server/{chunk-7VFULIHV.js → chunk-AAPVQJAD.js} +2 -2
  62. package/dist/web/server/{chunk-K4KN3QBT.js → chunk-BNB7T7P6.js} +2 -2
  63. package/dist/web/server/{chunk-E4YWFQX5.js → chunk-FFGFTGLQ.js} +415 -383
  64. package/dist/web/server/{chunk-GCDOYNXR.js → chunk-FL3FOWSC.js} +30 -30
  65. package/dist/web/server/{chunk-ITKXE2Q5.js → chunk-GS5F6X7H.js} +497 -234
  66. package/dist/web/server/{chunk-B7YWDA2F.js → chunk-INRE3X52.js} +2 -2
  67. package/dist/web/server/{chunk-35AFSKDX.js → chunk-JOCVZVZ3.js} +5 -5
  68. package/dist/web/server/{chunk-J4Y2Z3XM.js → chunk-JU7PCOE7.js} +4 -4
  69. package/dist/web/server/{chunk-UTV66W5H.js → chunk-KVW6XTN3.js} +14 -9
  70. package/dist/web/server/{chunk-NB3TVOGB.js → chunk-LECHJX4M.js} +483 -481
  71. package/dist/web/server/{chunk-JFAUSHBI.js → chunk-M6K66QBV.js} +6 -6
  72. package/dist/web/server/{chunk-COWE2EJ6.js → chunk-R7KUUFDW.js} +4 -4
  73. package/dist/web/server/chunk-SHNODG3C.js +18343 -0
  74. package/dist/web/server/{chunk-PXSOI3XF.js → chunk-SQXJ5TUB.js} +2 -2
  75. package/dist/web/server/{chunk-B5Y7XOIJ.js → chunk-TMQ3MT3D.js} +78 -17
  76. package/dist/web/server/{chunk-M7BTY55G.js → chunk-UWZYLMEH.js} +2 -2
  77. package/dist/web/server/{chunk-YIJ7D7G5.js → chunk-VTEYQNJE.js} +7 -7
  78. package/dist/web/server/{chunk-ABYOWAMD.js → chunk-X76RBZ37.js} +2 -2
  79. package/dist/web/server/{chunk-FPPKECLB.js → chunk-XMAAYUOT.js} +14 -14
  80. package/dist/web/server/{create-project-dialog-DCvdysey-IZUGGDAN.js → create-project-dialog-CqBmLTlA-X6HI6AYR.js} +9 -9
  81. package/dist/web/server/{dist-DVCLWOYT.js → dist-3UIQ7SZN.js} +2 -2
  82. package/dist/web/server/{dist-4A22NBTB.js → dist-ZPEDRNZ4.js} +2 -2
  83. package/dist/web/server/{fork-picker-dialog-QH00XmqX-6YLU5REF.js → fork-picker-dialog-PYNd9ozc-EA7BRLRR.js} +6 -6
  84. package/dist/web/server/{markdown-CShfYRVO-OKGCYPQK.js → markdown-CShfYRVO-22N5LNAN.js} +2 -2
  85. package/dist/web/server/{markdown-code-BDV_2b2T-VZGAECQB.js → markdown-code-BDV_2b2T-KUPHX52W.js} +2 -2
  86. package/dist/web/server/{message-queue-BzEFQR8k-2W53EW32.js → message-queue-DmSFAI5Y-XDZHJ2Z6.js} +6 -6
  87. package/dist/web/server/{model-selector-list-BjoXmw92-TEKBPB3E.js → model-selector-list-C-Y3p5UM-HTSWVVHP.js} +8 -8
  88. package/dist/web/server/{openui-renderer-CJ7Q2zZ_-FPXKZPSO.js → openui-renderer-C4B1EJxC-QDYQF5LD.js} +10 -10
  89. package/dist/web/server/{prompt-suggestions-EqAaAx6L-723M64XJ.js → prompt-suggestions-EqAaAx6L-B4KCWNZX.js} +1 -1
  90. package/dist/web/server/{repl-panel-DOyUyuQR-IMYO4FKX.js → repl-panel-DOyUyuQR-LRBDRMHW.js} +3 -3
  91. package/dist/web/server/{resources-panel-yVB4xF_K-OHFHXVU4.js → resources-panel-Bo-TmRON-O47AKGEQ.js} +7 -7
  92. package/dist/web/server/{router-UgU5vJxm-R33FGTXY.js → router-DtS2wXhd-I2SZV7YF.js} +5 -5
  93. package/dist/web/server/{routes-Cbbo-jh9-ZUPH4SJD.js → routes-DuSYlASY-U7C32ONE.js} +5 -5
  94. package/dist/web/server/server.js +3 -3
  95. package/dist/web/server/{session-reasoning-panel-C50VbaQ8-4YLMVVY6.js → session-reasoning-panel-BFcZs1pZ-KNHSU5GX.js} +7 -7
  96. package/dist/web/server/{session-tool-renderer-QcAkYD-V-6RXRKDH6.js → session-tool-renderer-TiFeeJEc-YUZPEEZ4.js} +9 -9
  97. package/dist/web/server/{session-tree-panel-CL49XSTK-4ZPK6AIV.js → session-tree-panel-CjsqVYLY-DGZBGY2E.js} +6 -6
  98. package/dist/web/server/{settings-dialog-DG9HEZeP-TWDRDGMN.js → settings-dialog-Bj5LrAE8-6BQRLUJT.js} +10 -10
  99. package/dist/web/server/{start-DEejK9Uj-FODAOTAO.js → start-cCC--AXu-BBMIT6OU.js} +1 -1
  100. package/dist/web/server/{subagent-chat-panel-Cg2CxshI-WWGFHTIF.js → subagent-chat-panel-DAS4Ne-1-TWIUXSQC.js} +12 -12
  101. package/dist/web/server/{subagents-panel-aC3Eo-MR-RNIPLCZQ.js → subagents-panel-C3CdUcqw-DFTJTPHA.js} +12 -12
  102. package/dist/web/server/{tool-timeline-C4dgQITK-CFWANSDL.js → tool-timeline-C4dgQITK-IWCLQLWG.js} +3 -3
  103. package/dist/web/server/{workspace-panel-DfdFkgHU-6HIOXRBX.js → workspace-panel-DNs0Ye2U-VFB6X5PK.js} +7 -7
  104. package/package.json +4 -4
  105. package/dist/web/client/assets/globals-DZbMyHfg.css +0 -2
  106. package/dist/web/client/assets/session-tool-renderer-Yu4G1165.js +0 -1389
  107. package/dist/web/client/assets/subagent-transcript-D_L-8PQi.js +0 -1
  108. package/dist/web/client/assets/utils-Dpy9ZFOr.js +0 -1
  109. package/dist/web/server/chunk-PHHC52CO.js +0 -38412
@@ -7,12 +7,12 @@ import {
7
7
  FileDiff,
8
8
  ToolResult,
9
9
  ToolResultOutput
10
- } from "./chunk-J4Y2Z3XM.js";
10
+ } from "./chunk-JU7PCOE7.js";
11
11
  import {
12
12
  Collapsible$1,
13
13
  CollapsibleContent,
14
14
  CollapsibleTrigger
15
- } from "./chunk-K4KN3QBT.js";
15
+ } from "./chunk-BNB7T7P6.js";
16
16
  import {
17
17
  ActionSwapRollText,
18
18
  AgentDisclosure,
@@ -27,19 +27,19 @@ import {
27
27
  mono,
28
28
  stripSandboxPrefixes,
29
29
  useHoverCapable
30
- } from "./chunk-GCDOYNXR.js";
30
+ } from "./chunk-FL3FOWSC.js";
31
31
  import {
32
32
  AnimatePresence,
33
33
  m,
34
34
  useReducedMotion
35
- } from "./chunk-E4YWFQX5.js";
35
+ } from "./chunk-FFGFTGLQ.js";
36
36
  import {
37
37
  IpythonTool,
38
38
  ToolApprovalFooter,
39
39
  ToolTextShimmer,
40
40
  adaptToolPart,
41
41
  useToolComplete
42
- } from "./chunk-B7YWDA2F.js";
42
+ } from "./chunk-INRE3X52.js";
43
43
  import {
44
44
  Check,
45
45
  ChevronDown,
@@ -68,7 +68,7 @@ import {
68
68
  Terminal,
69
69
  Wrench,
70
70
  X
71
- } from "./chunk-5AYK2KDO.js";
71
+ } from "./chunk-777VIBCH.js";
72
72
  import {
73
73
  bundledLanguages,
74
74
  createHighlighter,
@@ -82,13 +82,13 @@ import {
82
82
  } from "./chunk-OO7NBFQQ.js";
83
83
  import {
84
84
  cn
85
- } from "./chunk-B5Y7XOIJ.js";
85
+ } from "./chunk-TMQ3MT3D.js";
86
86
 
87
- // web/app/dist/server/assets/session-tool-renderer-QcAkYD-V.js
88
- import React, { memo, useCallback as useCallback4, useEffect as useEffect3, useId, useLayoutEffect as useLayoutEffect2, useMemo as useMemo2, useRef as useRef3, useState as useState3 } from "react";
87
+ // web/app/dist/server/assets/session-tool-renderer-TiFeeJEc.js
88
+ import React, { memo, useCallback as useCallback4, useEffect as useEffect3, useId, useLayoutEffect as useLayoutEffect2, useMemo as useMemo2, useRef as useRef3, useState as useState4 } from "react";
89
89
  import { Fragment as Fragment$1, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
90
90
 
91
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/useStableCallback.js
91
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/useStableCallback.js
92
92
  import { useCallback, useInsertionEffect, useRef } from "react";
93
93
  function useStableCallback(callback) {
94
94
  const callbackRef = useRef(callback);
@@ -98,7 +98,7 @@ function useStableCallback(callback) {
98
98
  }, []);
99
99
  }
100
100
 
101
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/EditContext.js
101
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/EditContext.js
102
102
  import { createContext, useContext } from "react";
103
103
  import { jsx } from "react/jsx-runtime";
104
104
  var EditContext = createContext(void 0);
@@ -106,7 +106,7 @@ function useCreateEditor() {
106
106
  return useContext(EditContext);
107
107
  }
108
108
 
109
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/constants.js
109
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/constants.js
110
110
  var GutterUtilitySlotStyles = {
111
111
  position: "absolute",
112
112
  top: 0,
@@ -120,7 +120,7 @@ function noopRender() {
120
120
  return null;
121
121
  }
122
122
 
123
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/constants.js
123
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/constants.js
124
124
  var DIFFS_TAG_NAME = "diffs-container";
125
125
  var DIFFS_DEVELOPMENT_BUILD = (() => {
126
126
  try {
@@ -132,8 +132,6 @@ var DIFFS_DEVELOPMENT_BUILD = (() => {
132
132
  var GIT_DIFF_FILE_BREAK_REGEX = /(?=^diff --git)/gm;
133
133
  var SPLIT_WITH_NEWLINES = /(?<=\n)/;
134
134
  var FILENAME_HEADER_REGEX = /^(---|\+\+\+)\s+([^\t\r\n]+)/;
135
- var FILENAME_HEADER_REGEX_GIT = /^(---|\+\+\+)\s+[ab]\/([^\t\r\n]+)/;
136
- var ALTERNATE_FILE_NAMES_GIT = /^diff --git (?:"a\/(.+?)"|a\/(.+?)) (?:"b\/(.+?)"|b\/(.+?))$/;
137
135
  var INDEX_LINE_METADATA = /^index ([0-9a-f]+)\.\.([0-9a-f]+)(?: (\d+))?$/i;
138
136
  var HEADER_PREFIX_SLOT_ID = "header-prefix";
139
137
  var HEADER_FILENAME_SUFFIX_SLOT_ID = "header-filename-suffix";
@@ -175,17 +173,17 @@ var EMPTY_RENDER_RANGE = {
175
173
  bufferAfter: 0
176
174
  };
177
175
 
178
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.js
176
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.js
179
177
  function getLineAnnotationName(annotation) {
180
178
  return `annotation-${"side" in annotation ? `${annotation.side}-` : ""}${annotation.lineNumber}`;
181
179
  }
182
180
 
183
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.js
181
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.js
184
182
  function getMergeConflictActionSlotName({ hunkIndex, lineIndex, conflictIndex }) {
185
183
  return `merge-conflict-action-${hunkIndex}-${lineIndex}-${conflictIndex}`;
186
184
  }
187
185
 
188
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHunkSideBoundaries.js
186
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHunkSideBoundaries.js
189
187
  function getHunkSideStartBoundary(start, count) {
190
188
  return start - (count === 0 ? 0 : 1);
191
189
  }
@@ -193,7 +191,7 @@ function getHunkSideEndBoundary(start, count) {
193
191
  return getHunkSideStartBoundary(start, count) + count;
194
192
  }
195
193
 
196
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.js
194
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.js
197
195
  function getMergeConflictActionAnchor(action, fileDiff) {
198
196
  const hunk = fileDiff.hunks[action.hunkIndex];
199
197
  if (hunk == null) return;
@@ -211,7 +209,7 @@ function getUnifiedLineStartForContent(hunk, contentIndex) {
211
209
  return lineIndex;
212
210
  }
213
211
 
214
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.js
212
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.js
215
213
  import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
216
214
  function renderDiffChildren({ fileDiff, actions, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderAnnotation, renderGutterUtility, renderMergeConflictUtility, lineAnnotations, getHoveredLine, getInstance, getAnnotationSlotName: getAnnotationSlotName2 = getLineAnnotationName }) {
217
215
  const customHeader = renderCustomHeader?.(fileDiff);
@@ -265,13 +263,13 @@ function getSlotName(action, fileDiff) {
265
263
  }) : void 0;
266
264
  }
267
265
 
268
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/constants.js
266
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/constants.js
269
267
  var ResolvedLanguages = /* @__PURE__ */ new Map();
270
268
  var ResolvingLanguages = /* @__PURE__ */ new Map();
271
269
  var RegisteredCustomLanguages = /* @__PURE__ */ new Map();
272
270
  var AttachedLanguages = /* @__PURE__ */ new Set();
273
271
 
274
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.js
272
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.js
275
273
  function areLanguagesAttached(languages) {
276
274
  for (const language of Array.isArray(languages) ? languages : [languages]) {
277
275
  if (language === "text" || language === "ansi") continue;
@@ -280,7 +278,7 @@ function areLanguagesAttached(languages) {
280
278
  return true;
281
279
  }
282
280
 
283
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getThemes.js
281
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getThemes.js
284
282
  function getThemes(theme = DEFAULT_THEMES) {
285
283
  const themesArr = [];
286
284
  if (typeof theme === "string") themesArr.push(theme);
@@ -291,7 +289,7 @@ function getThemes(theme = DEFAULT_THEMES) {
291
289
  return themesArr;
292
290
  }
293
291
 
294
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/constants.js
292
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/constants.js
295
293
  var AttachedThemes = /* @__PURE__ */ new Set();
296
294
 
297
295
  // node_modules/.pnpm/@pierre+theming@1.0.1_@pierre+theme@2.0.0_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0_shiki@4.4.3/node_modules/@pierre/theming/dist/modules/createThemeCollection.js
@@ -501,10 +499,10 @@ function createThemeResolver() {
501
499
  };
502
500
  }
503
501
 
504
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.js
502
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.js
505
503
  var themeResolver = createThemeResolver();
506
504
 
507
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.js
505
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.js
508
506
  function attachResolvedThemes(themes2, highlighter2) {
509
507
  themes2 = Array.isArray(themes2) ? themes2 : [themes2];
510
508
  for (let themeRef of themes2) {
@@ -523,7 +521,7 @@ function attachResolvedThemes(themes2, highlighter2) {
523
521
  }
524
522
  }
525
523
 
526
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.js
524
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.js
527
525
  function attachResolvedLanguages(resolvedLanguages, highlighter2) {
528
526
  resolvedLanguages = Array.isArray(resolvedLanguages) ? resolvedLanguages : [resolvedLanguages];
529
527
  for (const resolvedLang of resolvedLanguages) {
@@ -533,17 +531,24 @@ function attachResolvedLanguages(resolvedLanguages, highlighter2) {
533
531
  lang = resolvedLang;
534
532
  ResolvedLanguages.set(resolvedLang.name, lang);
535
533
  }
536
- AttachedLanguages.add(lang.name);
534
+ const grammar = lang.data.find((grammar2) => grammar2.name === lang.name || grammar2.aliases?.includes(lang.name) === true);
535
+ if (grammar == null) throw new Error(`attachResolvedLanguages: No returned grammar declares "${lang.name}" as its name or an alias.`);
537
536
  highlighter2.loadLanguageSync(lang.data);
537
+ try {
538
+ highlighter2.getLanguage(lang.name);
539
+ } catch {
540
+ throw new Error(`attachResolvedLanguages: "${grammar.name}" is already loaded without alias "${lang.name}". Load the alias first or give the grammar a unique name.`);
541
+ }
542
+ AttachedLanguages.add(lang.name);
538
543
  }
539
544
  }
540
545
 
541
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isWorkerContext.js
546
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isWorkerContext.js
542
547
  function isWorkerContext() {
543
548
  return typeof WorkerGlobalScope !== "undefined" && typeof self !== "undefined" && self instanceof WorkerGlobalScope;
544
549
  }
545
550
 
546
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.js
551
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.js
547
552
  async function resolveLanguage(lang) {
548
553
  if (isWorkerContext()) throw new Error(`resolveLanguage("${lang}") cannot be called from a worker context. Languages must be pre-resolved on the main thread and passed to the worker via the resolvedLanguages parameter.`);
549
554
  const resolver = ResolvingLanguages.get(lang);
@@ -567,12 +572,12 @@ async function resolveLanguage(lang) {
567
572
  }
568
573
  }
569
574
 
570
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.js
575
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.js
571
576
  function getResolvedOrResolveLanguage(language) {
572
577
  return ResolvedLanguages.get(language) ?? resolveLanguage(language);
573
578
  }
574
579
 
575
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.js
580
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.js
576
581
  function areThemesAttached(themes2) {
577
582
  for (const theme of getThemes(themes2)) if (!AttachedThemes.has(theme)) return false;
578
583
  return true;
@@ -807,7 +812,7 @@ var shikiThemes = createThemeCollection({ themes: Object.freeze([...LIGHT_SHIKI_
807
812
  // node_modules/.pnpm/@pierre+theming@1.0.1_@pierre+theme@2.0.0_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0_shiki@4.4.3/node_modules/@pierre/theming/dist/themes.js
808
813
  var themes = createThemeCollection({ themes: [pierreThemes, shikiThemes] });
809
814
 
810
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.js
815
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.js
811
816
  function prepareThemeResolution(themeName) {
812
817
  if (isWorkerContext()) throw new Error(`Theme "${themeName}" cannot be resolved from a worker context. Themes must be pre-resolved on the main thread and passed to the worker via the resolvedLanguages parameter.`);
813
818
  if (themeResolver.hasRegisteredTheme(themeName)) return;
@@ -822,7 +827,7 @@ function validateResolvedThemeName(themeName, theme) {
822
827
  if (theme.name !== themeName) throw new Error(`resolvedTheme: themeName: ${themeName} does not match theme.name: ${theme.name}`);
823
828
  }
824
829
 
825
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.js
830
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.js
826
831
  async function resolveTheme(themeName) {
827
832
  prepareThemeResolution(themeName);
828
833
  const theme = await themeResolver.resolveTheme(themeName);
@@ -830,12 +835,12 @@ async function resolveTheme(themeName) {
830
835
  return theme;
831
836
  }
832
837
 
833
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.js
838
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.js
834
839
  function getResolvedOrResolveTheme(themeName) {
835
840
  return themeResolver.getResolvedTheme(themeName) ?? resolveTheme(themeName);
836
841
  }
837
842
 
838
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.js
843
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.js
839
844
  var highlighter;
840
845
  async function getSharedHighlighter({ themes: themes2, langs, preferredHighlighter = "shiki-js" }) {
841
846
  highlighter ??= createHighlighter({
@@ -875,13 +880,13 @@ function isHighlighterLoading(h = highlighter) {
875
880
  }
876
881
  for (const descriptor of pierreThemes.getThemes()) themeResolver.registerThemeIfAbsent(descriptor.name, descriptor.load);
877
882
 
878
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areThemesEqual.js
883
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areThemesEqual.js
879
884
  function areThemesEqual(themeA, themeB) {
880
885
  if (themeA == null || themeB == null || typeof themeA === "string" || typeof themeB === "string") return themeA === themeB;
881
886
  return themeA.dark === themeB.dark && themeA.light === themeB.light;
882
887
  }
883
888
 
884
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.js
889
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.js
885
890
  var CUSTOM_EXTENSION_TO_FILE_FORMAT = /* @__PURE__ */ new Map();
886
891
  var EXTENSION_TO_FILE_FORMAT = {
887
892
  "1c": "1c",
@@ -1243,12 +1248,12 @@ function getFiletypeFromFileName(fileName) {
1243
1248
  return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? "text";
1244
1249
  }
1245
1250
 
1246
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/appendItems.js
1251
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/appendItems.js
1247
1252
  function appendItems(target, items) {
1248
1253
  for (const item of items) target.push(item);
1249
1254
  }
1250
1255
 
1251
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hast_utils.js
1256
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hast_utils.js
1252
1257
  function createTextNodeElement(value) {
1253
1258
  return {
1254
1259
  type: "text",
@@ -1321,7 +1326,7 @@ function createGutterGap(type, bufferType, size) {
1321
1326
  });
1322
1327
  }
1323
1328
 
1324
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/processLine.js
1329
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/processLine.js
1325
1330
  function processLine(node, line, state) {
1326
1331
  const lineInfo = typeof state.lineInfo === "function" ? state.lineInfo(line) : state.lineInfo[line - 1];
1327
1332
  if (lineInfo == null) {
@@ -1342,7 +1347,7 @@ function processLine(node, line, state) {
1342
1347
  return node;
1343
1348
  }
1344
1349
 
1345
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.js
1350
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.js
1346
1351
  var NO_TOKEN = /* @__PURE__ */ Symbol("no-token");
1347
1352
  var MULTIPLE_TOKENS = /* @__PURE__ */ Symbol("multiple-tokens");
1348
1353
  function wrapTokenFragments(container) {
@@ -1479,7 +1484,7 @@ function cyrb53(str, seed = 0) {
1479
1484
  return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36).slice(0, 6);
1480
1485
  }
1481
1486
 
1482
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.js
1487
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.js
1483
1488
  function createTransformerWithState(useTokenTransformer = false, useCSSClasses = false) {
1484
1489
  const state = { lineInfo: [] };
1485
1490
  const transformers = [{
@@ -1561,7 +1566,7 @@ var tokenStyleNormalizer = {
1561
1566
  }
1562
1567
  };
1563
1568
 
1564
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/formatCSSVariablePrefix.js
1569
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/formatCSSVariablePrefix.js
1565
1570
  function formatCSSVariablePrefix(type) {
1566
1571
  return `--${type === "token" ? "diffs-token" : "diffs"}-`;
1567
1572
  }
@@ -1672,7 +1677,7 @@ function matchesSurface(color, surface) {
1672
1677
  return surface != null && color.toLowerCase() === surface.toLowerCase();
1673
1678
  }
1674
1679
 
1675
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.js
1680
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.js
1676
1681
  function getHighlighterThemeStyles({ theme = DEFAULT_THEMES, highlighter: highlighter2, prefix }) {
1677
1682
  let styles = "";
1678
1683
  if (typeof theme === "string") {
@@ -1709,7 +1714,7 @@ function getGitVariables(themeData, modePrefix) {
1709
1714
  return styles;
1710
1715
  }
1711
1716
 
1712
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getLineNodes.js
1717
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getLineNodes.js
1713
1718
  function getLineNodes(nodes) {
1714
1719
  let firstChild = nodes.children[0];
1715
1720
  while (firstChild != null) {
@@ -1721,29 +1726,29 @@ function getLineNodes(nodes) {
1721
1726
  throw new Error("getLineNodes: Unable to find children");
1722
1727
  }
1723
1728
 
1724
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.js
1729
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.js
1725
1730
  function areDiffTargetsEqual(diffA, diffB) {
1726
1731
  return diffA?.cacheKey != null || diffB?.cacheKey != null ? diffA?.cacheKey === diffB?.cacheKey : diffA === diffB;
1727
1732
  }
1728
1733
 
1729
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areFilesEqual.js
1734
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areFilesEqual.js
1730
1735
  function areFilesEqual(fileA, fileB) {
1731
1736
  return fileA?.cacheKey === fileB?.cacheKey && fileA?.contents === fileB?.contents && fileA?.name === fileB?.name && fileA?.lang === fileB?.lang;
1732
1737
  }
1733
1738
 
1734
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.js
1739
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.js
1735
1740
  function areDiffRenderOptionsEqual(optionsA, optionsB) {
1736
1741
  return areThemesEqual(optionsA.theme, optionsB.theme) && optionsA.useTokenTransformer === optionsB.useTokenTransformer && optionsA.tokenizeMaxLineLength === optionsB.tokenizeMaxLineLength && optionsA.lineDiffType === optionsB.lineDiffType && optionsA.maxLineDiffLength === optionsB.maxLineDiffLength;
1737
1742
  }
1738
1743
 
1739
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.js
1744
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.js
1740
1745
  function isDiffPlainText(diff) {
1741
1746
  const computedLang = diff.lang ?? getFiletypeFromFileName(diff.name);
1742
1747
  const computedPreviousLang = diff.lang ?? (diff.prevName != null ? getFiletypeFromFileName(diff.prevName) : "text");
1743
1748
  return computedLang === "text" && computedPreviousLang === "text";
1744
1749
  }
1745
1750
 
1746
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.js
1751
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.js
1747
1752
  function computeVirtualFileMetrics(metrics) {
1748
1753
  return {
1749
1754
  ...DEFAULT_VIRTUAL_FILE_METRICS,
@@ -1772,7 +1777,7 @@ function getDefaultHunkSeparatorHeight(type) {
1772
1777
  }
1773
1778
  }
1774
1779
 
1775
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.js
1780
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.js
1776
1781
  function getHunkAdditionLineRange(hunk) {
1777
1782
  return [getHunkSideStartBoundary(hunk.additionStart, hunk.additionCount) + 1, getHunkSideEndBoundary(hunk.additionStart, hunk.additionCount) + 1];
1778
1783
  }
@@ -1982,7 +1987,7 @@ function getTrailingHunkSeparatorLayout({ type, metrics }) {
1982
1987
  };
1983
1988
  }
1984
1989
 
1985
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js
1990
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js
1986
1991
  function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, collapsedContextThreshold = 1, callback }) {
1987
1992
  const iterationStart = getIterationStartState({
1988
1993
  diff,
@@ -2470,7 +2475,7 @@ function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, d
2470
2475
  };
2471
2476
  }
2472
2477
 
2473
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cleanLastNewline.js
2478
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cleanLastNewline.js
2474
2479
  function cleanLastNewline(contents) {
2475
2480
  let end = contents.length;
2476
2481
  if (contents.charCodeAt(end - 1) === 10) {
@@ -3262,7 +3267,7 @@ function splitLines(text) {
3262
3267
  return result;
3263
3268
  }
3264
3269
 
3265
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.js
3270
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.js
3266
3271
  function createDiffSpanDecoration({ line, spanStart, spanLength }) {
3267
3272
  return {
3268
3273
  start: {
@@ -3291,7 +3296,7 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
3291
3296
  arr.push([isNeutral ? 0 : 1, item.value]);
3292
3297
  }
3293
3298
 
3294
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.js
3299
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.js
3295
3300
  var DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
3296
3301
  function renderDiffWithHighlighter(diff, highlighter2, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = 1 } = DEFAULT_PLAIN_TEXT_OPTIONS) {
3297
3302
  if (forcePlainText) {
@@ -3414,12 +3419,51 @@ function renderDiffWithHighlighter(diff, highlighter2, options, { forcePlainText
3414
3419
  baseThemeType
3415
3420
  };
3416
3421
  }
3422
+ function pushWordLineDecorations(lineDiff2, { deletionLineIndex, additionLineIndex, deletionDecorations, additionDecorations }) {
3423
+ let deletionOffset = 0;
3424
+ let additionOffset = 0;
3425
+ let deletionStart = -1;
3426
+ let deletionEnd = 0;
3427
+ let additionStart = -1;
3428
+ let additionEnd = 0;
3429
+ for (const { value, added, removed } of lineDiff2) if (removed) {
3430
+ if (deletionStart === -1) deletionStart = deletionOffset;
3431
+ deletionOffset += value.length;
3432
+ deletionEnd = deletionOffset;
3433
+ } else if (added) {
3434
+ if (additionStart === -1) additionStart = additionOffset;
3435
+ additionOffset += value.length;
3436
+ additionEnd = additionOffset;
3437
+ } else {
3438
+ deletionOffset += value.length;
3439
+ additionOffset += value.length;
3440
+ }
3441
+ if (deletionStart !== -1) deletionDecorations.push(createDiffSpanDecoration({
3442
+ line: deletionLineIndex,
3443
+ spanStart: deletionStart,
3444
+ spanLength: deletionEnd - deletionStart
3445
+ }));
3446
+ if (additionStart !== -1) additionDecorations.push(createDiffSpanDecoration({
3447
+ line: additionLineIndex,
3448
+ spanStart: additionStart,
3449
+ spanLength: additionEnd - additionStart
3450
+ }));
3451
+ }
3417
3452
  function computeLineDiffDecorations({ deletionLine, additionLine, deletionLineIndex, additionLineIndex, deletionDecorations, additionDecorations, lineDiffType, maxLineDiffLength }) {
3418
3453
  if (deletionLine == null || additionLine == null || lineDiffType === "none") return;
3419
3454
  deletionLine = cleanLastNewline(deletionLine);
3420
3455
  additionLine = cleanLastNewline(additionLine);
3421
3456
  if (deletionLine.length > maxLineDiffLength || additionLine.length > maxLineDiffLength) return;
3422
3457
  const lineDiff2 = lineDiffType === "char" ? diffChars(deletionLine, additionLine) : diffWordsWithSpace(deletionLine, additionLine);
3458
+ if (lineDiffType === "word-line") {
3459
+ pushWordLineDecorations(lineDiff2, {
3460
+ deletionLineIndex,
3461
+ additionLineIndex,
3462
+ deletionDecorations,
3463
+ additionDecorations
3464
+ });
3465
+ return;
3466
+ }
3423
3467
  const deletionSpans = [];
3424
3468
  const additionSpans = [];
3425
3469
  const enableJoin = lineDiffType === "word-alt";
@@ -3542,12 +3586,12 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
3542
3586
  };
3543
3587
  }
3544
3588
 
3545
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.js
3589
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.js
3546
3590
  import { createContext as createContext2, useContext as useContext2, useEffect, useInsertionEffect as useInsertionEffect2, useState } from "react";
3547
3591
  import { jsx as jsx3 } from "react/jsx-runtime";
3548
3592
  var WorkerPoolContext = createContext2(void 0);
3549
3593
 
3550
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areObjectsEqual.js
3594
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areObjectsEqual.js
3551
3595
  function areObjectsEqual(objA, objB, omitKeys) {
3552
3596
  if (objA === objB || objA == null || objB == null) return objA === objB;
3553
3597
  const omitSet = new Set(omitKeys);
@@ -3562,7 +3606,7 @@ function areObjectsEqual(objA, objB, omitKeys) {
3562
3606
  return true;
3563
3607
  }
3564
3608
 
3565
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.js
3609
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.js
3566
3610
  function areOptionsEqual(optionsA, optionsB) {
3567
3611
  const themeA = optionsA?.theme ?? DEFAULT_THEMES;
3568
3612
  const themeB = optionsB?.theme ?? DEFAULT_THEMES;
@@ -3574,7 +3618,7 @@ function getParseDiffOptions(options) {
3574
3618
  if (options != null && "parseDiffOptions" in options) return options.parseDiffOptions;
3575
3619
  }
3576
3620
 
3577
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/UniversalRenderingManager.js
3621
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/UniversalRenderingManager.js
3578
3622
  var callbacks = /* @__PURE__ */ new Set();
3579
3623
  var frameId = null;
3580
3624
  function queueRender(callback) {
@@ -3599,24 +3643,24 @@ function render(time) {
3599
3643
  else frameId = null;
3600
3644
  }
3601
3645
 
3602
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.js
3646
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.js
3603
3647
  function areSelectionsEqual(selectionA, selectionB) {
3604
3648
  return selectionA?.start === selectionB?.start && selectionA?.end === selectionB?.end && selectionA?.side === selectionB?.side && selectionA?.endSide === selectionB?.endSide;
3605
3649
  }
3606
3650
 
3607
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isStyleNode.js
3651
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isStyleNode.js
3608
3652
  function isStyleNode(element) {
3609
3653
  if (typeof HTMLStyleElement !== "undefined" && element instanceof HTMLStyleElement) return true;
3610
3654
  const tagName = element.tagName ?? element.nodeName;
3611
3655
  return typeof tagName === "string" && tagName.toLowerCase() === "style";
3612
3656
  }
3613
3657
 
3614
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.js
3658
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.js
3615
3659
  function areFileTargetsEqual(fileA, fileB) {
3616
3660
  return fileA?.cacheKey != null || fileB?.cacheKey != null ? fileA?.cacheKey === fileB?.cacheKey : fileA?.contents === fileB?.contents && fileA?.name === fileB?.name && fileA?.lang === fileB?.lang;
3617
3661
  }
3618
3662
 
3619
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.js
3663
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.js
3620
3664
  var FILE_ANNOTATION_DOM_KEY = `-1,-1`;
3621
3665
  function includesFileAnnotations(annotations) {
3622
3666
  return annotations?.some((annotation) => annotation.lineNumber === 0) ?? false;
@@ -3629,12 +3673,12 @@ function shouldRenderFileAnnotations(renderRange) {
3629
3673
  return renderRange.startingLine === 0 && renderRange.totalLines > 0;
3630
3674
  }
3631
3675
 
3632
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.js
3676
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.js
3633
3677
  function areSelectionPointsEqual(a, b) {
3634
3678
  return a.lineNumber === b.lineNumber && a.side === b.side;
3635
3679
  }
3636
3680
 
3637
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.js
3681
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.js
3638
3682
  function createGutterUtilityElement() {
3639
3683
  return createHastElement({
3640
3684
  tagName: "button",
@@ -3649,7 +3693,7 @@ function createGutterUtilityElement() {
3649
3693
  });
3650
3694
  }
3651
3695
 
3652
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isGutterUtilityPath.js
3696
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isGutterUtilityPath.js
3653
3697
  function isGutterUtilityPath(path) {
3654
3698
  for (const element of path) {
3655
3699
  if (!(element instanceof HTMLElement)) continue;
@@ -3658,7 +3702,7 @@ function isGutterUtilityPath(path) {
3658
3702
  return false;
3659
3703
  }
3660
3704
 
3661
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/InteractionManager.js
3705
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/InteractionManager.js
3662
3706
  var InteractionManager = class {
3663
3707
  mode;
3664
3708
  options;
@@ -4868,7 +4912,7 @@ function debugLogIfEnabled(debugLogType = "none", logIfType, ...args) {
4868
4912
  console.log(...args);
4869
4913
  }
4870
4914
 
4871
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/ResizeManager.js
4915
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/ResizeManager.js
4872
4916
  var ResizeManager = class ResizeManager2 {
4873
4917
  static resizeObserver;
4874
4918
  static managersByElement = /* @__PURE__ */ new Map();
@@ -5148,13 +5192,13 @@ function cleanupStaleAnnotationItem(item) {
5148
5192
  if (item.column2.container.isConnected) item.column2.container.style.removeProperty("--diffs-annotation-min-height");
5149
5193
  }
5150
5194
 
5151
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.js
5195
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.js
5152
5196
  function areRenderRangesEqual(renderRangeA, renderRangeB) {
5153
5197
  if (renderRangeA == null || renderRangeB == null) return renderRangeA === renderRangeB;
5154
5198
  return renderRangeA.startingLine === renderRangeB.startingLine && renderRangeA.totalLines === renderRangeB.totalLines && renderRangeA.bufferBefore === renderRangeB.bufferBefore && renderRangeA.bufferAfter === renderRangeB.bufferAfter;
5155
5199
  }
5156
5200
 
5157
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/applyLineTextWithNewline.js
5201
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/applyLineTextWithNewline.js
5158
5202
  function applyLineTextWithNewline(line, lineText) {
5159
5203
  if (line.endsWith("\r\n")) return lineText + "\r\n";
5160
5204
  if (line.endsWith("\r")) return lineText + "\r";
@@ -5162,7 +5206,7 @@ function applyLineTextWithNewline(line, lineText) {
5162
5206
  return lineText;
5163
5207
  }
5164
5208
 
5165
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.js
5209
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.js
5166
5210
  function createAnnotationElement(span) {
5167
5211
  return createHastElement({
5168
5212
  tagName: "div",
@@ -5178,7 +5222,7 @@ function createAnnotationElement(span) {
5178
5222
  });
5179
5223
  }
5180
5224
 
5181
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createContentColumn.js
5225
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createContentColumn.js
5182
5226
  function createContentColumn(children, rowCount) {
5183
5227
  return createHastElement({
5184
5228
  tagName: "div",
@@ -5190,7 +5234,7 @@ function createContentColumn(children, rowCount) {
5190
5234
  });
5191
5235
  }
5192
5236
 
5193
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getIconForType.js
5237
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getIconForType.js
5194
5238
  function getIconForType(type) {
5195
5239
  switch (type) {
5196
5240
  case "file":
@@ -5207,7 +5251,7 @@ function getIconForType(type) {
5207
5251
  }
5208
5252
  }
5209
5253
 
5210
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.js
5254
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.js
5211
5255
  function createFileHeaderElement({ fileOrDiff, mode, stickyHeader }) {
5212
5256
  const fileDiff = "type" in fileOrDiff ? fileOrDiff : void 0;
5213
5257
  const properties = {
@@ -5299,7 +5343,7 @@ function createMetadataElement(fileDiff) {
5299
5343
  });
5300
5344
  }
5301
5345
 
5302
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createPreElement.js
5346
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createPreElement.js
5303
5347
  function createPreElement(options) {
5304
5348
  return createHastElement({
5305
5349
  tagName: "pre",
@@ -5320,7 +5364,7 @@ function createPreWrapperProperties({ diffIndicators, disableBackground, disable
5320
5364
  };
5321
5365
  }
5322
5366
 
5323
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js
5367
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js
5324
5368
  function getHighlighterOptions(lang, { theme, preferredHighlighter = "shiki-js" }) {
5325
5369
  return {
5326
5370
  langs: Array.isArray(lang) ? lang : [lang ?? "text"],
@@ -5329,12 +5373,12 @@ function getHighlighterOptions(lang, { theme, preferredHighlighter = "shiki-js"
5329
5373
  };
5330
5374
  }
5331
5375
 
5332
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.js
5376
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.js
5333
5377
  function isDefaultRenderRange(renderRange) {
5334
5378
  return renderRange.startingLine === 0 && renderRange.totalLines === Infinity && renderRange.bufferBefore === 0 && renderRange.bufferAfter === 0;
5335
5379
  }
5336
5380
 
5337
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/sprite.js
5381
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/sprite.js
5338
5382
  var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height="0">
5339
5383
  <symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
5340
5384
  <path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
@@ -5360,6 +5404,9 @@ var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height=
5360
5404
  <symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
5361
5405
  <path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
5362
5406
  </symbol>
5407
+ <symbol id="diffs-icon-eye-slash" viewBox="0 0 16 16">
5408
+ <path d="m13.47 1.47-12 12 1.06 1.06 12-12zM8 14c-.92 0-1.802-.208-2.624-.547l1.173-1.174c.476.142.963.221 1.451.221 1.66 0 3.307-.949 4.626-2.196a10.4 10.4 0 0 0 1.494-1.751A5 5 0 0 0 14.443 8a5 5 0 0 0-.323-.553 10 10 0 0 0-1.238-1.5l1.061-1.062C15.222 6.173 16 7.511 16 8c0 1.05-3.582 6-8 6"/><path d="M8 11q-.084 0-.167-.005l3.162-3.162q.006.083.005.167a3 3 0 0 1-3 3M5.005 8.167l3.162-3.162a3 3 0 0 0-3.162 3.162"/><path d="M8 3.5c.485 0 .97.081 1.445.227l1.168-1.169C9.794 2.212 8.915 2 8 2 3.582 2 0 6.8 0 8c0 .555.766 1.88 2.027 3.144l1.06-1.06a9.5 9.5 0 0 1-1.203-1.461 4.3 4.3 0 0 1-.345-.617L1.536 8l.003-.006c.064-.149.176-.359.345-.617a9.8 9.8 0 0 1 1.482-1.73C4.675 4.427 6.326 3.5 8 3.5"/>
5409
+ </symbol>
5363
5410
  <symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
5364
5411
  <path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
5365
5412
  </symbol>
@@ -5369,27 +5416,81 @@ var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height=
5369
5416
  <symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
5370
5417
  <path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
5371
5418
  </symbol>
5419
+ <symbol id="diffs-icon-symbol-added-duo" viewBox="0 0 16 16">
5420
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/>
5421
+ </symbol>
5422
+ <symbol id="diffs-icon-symbol-added-fill" viewBox="0 0 16 16">
5423
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8m0 4a.75.75 0 0 0-.75.75v2.5h-2.5a.75.75 0 0 0 0 1.5h2.5v2.5a.75.75 0 0 0 1.5 0v-2.5h2.5a.75.75 0 0 0 0-1.5h-2.5v-2.5A.75.75 0 0 0 8 4" clip-rule="evenodd"/>
5424
+ </symbol>
5372
5425
  <symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
5373
5426
  <path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
5374
5427
  </symbol>
5428
+ <symbol id="diffs-icon-symbol-deleted-duo" viewBox="0 0 16 16">
5429
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/>
5430
+ </symbol>
5431
+ <symbol id="diffs-icon-symbol-deleted-fill" viewBox="0 0 16 16">
5432
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8M4.75 7.25a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5z" clip-rule="evenodd"/>
5433
+ </symbol>
5375
5434
  <symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
5376
5435
  <path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
5377
5436
  </symbol>
5437
+ <symbol id="diffs-icon-symbol-diffstat-duo" viewBox="0 0 16 16">
5438
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
5439
+ </symbol>
5440
+ <symbol id="diffs-icon-symbol-diffstat-fill" viewBox="0 0 16 16">
5441
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8M5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5zM8 3.546a.75.75 0 0 0-.75.75V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2V4.296a.75.75 0 0 0-.75-.75" clip-rule="evenodd"/>
5442
+ </symbol>
5443
+ <symbol id="diffs-icon-symbol-extracted" viewBox="0 0 16 16">
5444
+ <path d="M8.25 4.25a.75.75 0 0 1 0 1.5H6.81l3.302 3.302a1.5 1.5 0 1 1-1.06 1.06L5.75 6.811V8.25a.75.75 0 0 1-1.5 0V5A.75.75 0 0 1 5 4.25z"/><path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8m0 1.5c-1.613 0-2.807.089-3.704.288-.88.196-1.382.477-1.706.802-.325.324-.606.826-.802 1.706C1.588 5.193 1.5 6.387 1.5 8s.089 2.807.288 3.704c.196.88.477 1.382.802 1.706.324.325.826.606 1.706.802.897.2 2.091.288 3.704.288s2.807-.089 3.704-.288c.88-.196 1.382-.477 1.706-.802.325-.324.606-.826.802-1.706.2-.897.288-2.091.288-3.704s-.089-2.807-.288-3.704c-.196-.88-.477-1.382-.802-1.706-.324-.325-.826-.606-1.706-.802C10.807 1.588 9.613 1.5 8 1.5" clip-rule="evenodd"/>
5445
+ </symbol>
5446
+ <symbol id="diffs-icon-symbol-extracted-duo" viewBox="0 0 16 16">
5447
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8" clip-rule="evenodd" opacity=".2"/><path d="M8.25 4.25a.75.75 0 0 1 0 1.5H6.81l3.302 3.302a1.5 1.5 0 1 1-1.06 1.06L5.75 6.811V8.25a.75.75 0 0 1-1.5 0V5A.75.75 0 0 1 5 4.25z"/>
5448
+ </symbol>
5449
+ <symbol id="diffs-icon-symbol-extracted-fill" viewBox="0 0 16 16">
5450
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8M5 4.25a.75.75 0 0 0-.75.75v3.25a.75.75 0 0 0 1.5 0V6.81l3.302 3.302a1.5 1.5 0 1 0 1.06-1.06L6.811 5.75H8.25a.75.75 0 0 0 0-1.5z" clip-rule="evenodd"/>
5451
+ </symbol>
5378
5452
  <symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
5379
5453
  <path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
5380
5454
  </symbol>
5455
+ <symbol id="diffs-icon-symbol-ignored-duo" viewBox="0 0 16 16">
5456
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M11.53 4.47a.75.75 0 0 1 0 1.06l-6 6a.75.75 0 0 1-1.06-1.06l6-6a.75.75 0 0 1 1.06 0"/>
5457
+ </symbol>
5458
+ <symbol id="diffs-icon-symbol-ignored-fill" viewBox="0 0 16 16">
5459
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8m3.53 4.47a.75.75 0 0 0-1.06 0l-6 6a.75.75 0 1 0 1.06 1.06l6-6a.75.75 0 0 0 0-1.06" clip-rule="evenodd"/>
5460
+ </symbol>
5461
+ <symbol id="diffs-icon-symbol-inlined" viewBox="0 0 16 16">
5462
+ <path d="M7.75 11.75a.75.75 0 0 1 0-1.5h1.44L5.887 6.948a1.5 1.5 0 1 1 1.06-1.06l3.302 3.301V7.75a.75.75 0 0 1 1.5 0V11a.75.75 0 0 1-.75.75z"/><path fill-rule="evenodd" d="M8 16c-6.588 0-8-1.412-8-8s1.412-8 8-8 8 1.412 8 8-1.412 8-8 8m0-1.5c1.613 0 2.807-.089 3.704-.288.88-.196 1.382-.477 1.706-.802.325-.324.606-.826.802-1.706.2-.897.288-2.091.288-3.704s-.089-2.807-.288-3.704c-.196-.88-.477-1.382-.802-1.706-.324-.325-.826-.606-1.706-.802C10.807 1.588 9.613 1.5 8 1.5s-2.807.089-3.704.288c-.88.196-1.382.477-1.706.802-.325.324-.606.826-.802 1.706C1.588 5.193 1.5 6.387 1.5 8s.089 2.807.288 3.704c.196.88.477 1.382.802 1.706.324.325.826.606 1.706.802.897.2 2.091.288 3.704.288" clip-rule="evenodd"/>
5463
+ </symbol>
5464
+ <symbol id="diffs-icon-symbol-inlined-duo" viewBox="0 0 16 16">
5465
+ <path fill-rule="evenodd" d="M8 16c-6.588 0-8-1.412-8-8s1.412-8 8-8 8 1.412 8 8-1.412 8-8 8" clip-rule="evenodd" opacity=".2"/><path d="M7.75 11.75a.75.75 0 0 1 0-1.5h1.44L5.887 6.948a1.5 1.5 0 1 1 1.06-1.06l3.302 3.301V7.75a.75.75 0 0 1 1.5 0V11a.75.75 0 0 1-.75.75z"/>
5466
+ </symbol>
5467
+ <symbol id="diffs-icon-symbol-inlined-fill" viewBox="0 0 16 16">
5468
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8M5.5 4a1.5 1.5 0 1 0 .388 2.948l3.301 3.302H7.75a.75.75 0 0 0 0 1.5H11a.75.75 0 0 0 .75-.75V7.75a.75.75 0 0 0-1.5 0v1.44L6.948 5.887A1.5 1.5 0 0 0 5.5 4" clip-rule="evenodd"/>
5469
+ </symbol>
5381
5470
  <symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
5382
5471
  <path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
5383
5472
  </symbol>
5473
+ <symbol id="diffs-icon-symbol-modified-duo" viewBox="0 0 16 16">
5474
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0"/>
5475
+ </symbol>
5476
+ <symbol id="diffs-icon-symbol-modified-fill" viewBox="0 0 16 16">
5477
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8m0 5a3 3 0 1 0 0 6 3 3 0 0 0 0-6" clip-rule="evenodd"/>
5478
+ </symbol>
5384
5479
  <symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
5385
5480
  <path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
5386
5481
  </symbol>
5482
+ <symbol id="diffs-icon-symbol-moved-duo" viewBox="0 0 16 16">
5483
+ <path d="M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8" opacity=".2"/><path d="M8.496 4.695a.75.75 0 0 0-.051 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.051 1.06L6.49 8.003 4.693 9.998a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
5484
+ </symbol>
5485
+ <symbol id="diffs-icon-symbol-moved-fill" viewBox="0 0 16 16">
5486
+ <path fill-rule="evenodd" d="M8 0c6.588 0 8 1.412 8 8s-1.412 8-8 8-8-1.412-8-8 1.412-8 8-8m1.555 4.745a.75.75 0 0 0-1.11 1.01L10.486 8l-2.04 2.245a.75.75 0 0 0 1.109 1.01l2.5-2.75a.75.75 0 0 0 0-1.01zm-4 0a.75.75 0 0 0-1.11 1.01l2.043 2.248-1.796 1.995a.75.75 0 0 0 1.116 1.004l2.25-2.5a.75.75 0 0 0-.003-1.007z" clip-rule="evenodd"/>
5487
+ </symbol>
5387
5488
  <symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
5388
5489
  <path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
5389
5490
  </symbol>
5390
5491
  </svg>`;
5391
5492
 
5392
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.js
5493
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.js
5393
5494
  function arePrePropertiesEqual(propsA, propsB) {
5394
5495
  if (propsA == null || propsB == null) return propsA === propsB;
5395
5496
  return areCustomPropertiesEqual(propsA.customProperties, propsB.customProperties) && propsA.type === propsB.type && propsA.diffIndicators === propsB.diffIndicators && propsA.disableBackground === propsB.disableBackground && propsA.disableLineNumbers === propsB.disableLineNumbers && propsA.overflow === propsB.overflow && propsA.split === propsB.split && propsA.totalLines === propsB.totalLines;
@@ -5404,7 +5505,7 @@ function areCustomPropertiesEqual(customPropertiesA = EMPTY_CUSTOM_PROPERTIES, c
5404
5505
  return true;
5405
5506
  }
5406
5507
 
5407
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createAnnotationWrapperNode.js
5508
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createAnnotationWrapperNode.js
5408
5509
  function createAnnotationWrapperNode(slot) {
5409
5510
  const wrapper = document.createElement("div");
5410
5511
  wrapper.dataset.annotationSlot = "";
@@ -5413,7 +5514,7 @@ function createAnnotationWrapperNode(slot) {
5413
5514
  return wrapper;
5414
5515
  }
5415
5516
 
5416
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createGutterUtilityContentNode.js
5517
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createGutterUtilityContentNode.js
5417
5518
  function createGutterUtilityContentNode() {
5418
5519
  const gutterUtilityContent = document.createElement("div");
5419
5520
  gutterUtilityContent.slot = "gutter-utility-slot";
@@ -5426,14 +5527,14 @@ function createGutterUtilityContentNode() {
5426
5527
  return gutterUtilityContent;
5427
5528
  }
5428
5529
 
5429
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createUnsafeCSSStyleNode.js
5530
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createUnsafeCSSStyleNode.js
5430
5531
  function createUnsafeCSSStyleNode() {
5431
5532
  const node = document.createElement("style");
5432
5533
  node.setAttribute(UNSAFE_CSS_ATTRIBUTE, "");
5433
5534
  return node;
5434
5535
  }
5435
5536
 
5436
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js
5537
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js
5437
5538
  var measuredScrollbarGutter;
5438
5539
  function getMeasuredScrollbarGutter(shadowRoot) {
5439
5540
  if (measuredScrollbarGutter != null) return measuredScrollbarGutter;
@@ -5457,10 +5558,10 @@ function createMeasuredScrollbarGutterDeclaration(scrollbarGutter) {
5457
5558
  return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${value};`;
5458
5559
  }
5459
5560
 
5460
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/style.js
5461
- var style_default = '@layer base {\n :host {\n --diffs-font-fallback: "SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono",\n "Courier New", monospace;\n --diffs-header-font-fallback: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue",\n "Noto Sans", "Liberation Sans", Arial, sans-serif;\n --diffs-mixer: light-dark(#000, #fff);\n --diffs-gap-fallback: 8px;\n --diffs-scrollbar-gutter-fallback: 6px;\n --diffs-scrollbar-gutter: var(--diffs-scrollbar-gutter-override, var(--diffs-scrollbar-gutter-measured, var(--diffs-scrollbar-gutter-fallback)));\n --diffs-added-light: #0dbe4e;\n --diffs-added-dark: #5ecc71;\n --diffs-modified-light: #009fff;\n --diffs-modified-dark: #69b1ff;\n --diffs-deleted-light: #ff2e3f;\n --diffs-deleted-dark: #ff6762;\n --diffs-warning-light: #d5a910;\n --diffs-warning-dark: #ffd452;\n color-scheme: light dark;\n font-family: var(--diffs-header-font-family, var(--diffs-header-font-fallback));\n font-size: var(--diffs-font-size, 13px);\n line-height: var(--diffs-line-height, 20px);\n font-feature-settings: var(--diffs-font-features);\n --diffs-bg: light-dark(var(--diffs-light-bg, #fff), var(--diffs-dark-bg, #000));\n --diffs-bg-buffer: var(--diffs-bg-buffer-override, light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)), color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));\n --diffs-bg-context: var(--diffs-bg-context-override, light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)), color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));\n --diffs-bg-context-gutter: var(--diffs-bg-context-gutter-override, light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)), color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));\n --diffs-bg-separator: var(--diffs-bg-separator-override, light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)), color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));\n --diffs-fg: light-dark(var(--diffs-light, #000), var(--diffs-dark, #fff));\n --diffs-fg-number: var(--diffs-fg-number-override, light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)), color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));\n --diffs-fg-conflict-marker: var(--diffs-fg-conflict-marker-override, var(--diffs-fg-number));\n --diffs-deletion-base: var(--diffs-deletion-color-override, light-dark(var(--diffs-light-deletion-color, var(--diffs-deletion-color, var(--diffs-deleted-light))), var(--diffs-dark-deletion-color, var(--diffs-deletion-color, var(--diffs-deleted-dark)))));\n --diffs-addition-base: var(--diffs-addition-color-override, light-dark(var(--diffs-light-addition-color, var(--diffs-addition-color, var(--diffs-added-light))), var(--diffs-dark-addition-color, var(--diffs-addition-color, var(--diffs-added-dark)))));\n --diffs-modified-base: var(--diffs-modified-color-override, light-dark(var(--diffs-light-modified-color, var(--diffs-modified-color, var(--diffs-modified-light))), var(--diffs-dark-modified-color, var(--diffs-modified-color, var(--diffs-modified-dark)))));\n --diffs-bg-deletion: var(--diffs-bg-deletion-override, light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)), color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));\n --diffs-bg-deletion-emphasis: var(--diffs-bg-deletion-emphasis-override, light-dark(rgb(from var(--diffs-deletion-base) r g b / .15), rgb(from var(--diffs-deletion-base) r g b / .2)));\n --diffs-bg-addition: var(--diffs-bg-addition-override, light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)), color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));\n --diffs-bg-addition-emphasis: var(--diffs-bg-addition-emphasis-override, light-dark(rgb(from var(--diffs-addition-base) r g b / .15), rgb(from var(--diffs-addition-base) r g b / .2)));\n --diffs-selection-base: var(--diffs-modified-base);\n --diffs-selection-number-fg: light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)), color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));\n background-color: var(--diffs-bg);\n color: var(--diffs-fg);\n display: block;\n }\n\n pre, code, [data-error-wrapper] {\n isolation: isolate;\n font-family: var(--diffs-font-family, var(--diffs-font-fallback));\n outline: none;\n margin: 0;\n padding: 0;\n display: block;\n }\n\n pre, code {\n background-color: var(--diffs-bg);\n }\n\n code {\n contain: content;\n }\n\n input, button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n\n *, :before, :after {\n box-sizing: border-box;\n }\n\n [data-icon-sprite] {\n display: none;\n }\n\n [data-diffs-header], [data-separator] {\n font-family: var(--diffs-header-font-family, var(--diffs-header-font-fallback));\n }\n\n [data-diffs-header][data-sticky] {\n z-index: 1;\n background-color: var(--diffs-bg);\n position: sticky;\n top: 0;\n }\n\n [data-file-info] {\n color: var(--fg);\n background-color: color-mix(in lab, var(--bg) 98%, var(--fg));\n border-block: 1px solid color-mix(in lab, var(--bg) 95%, var(--fg));\n padding: 10px;\n font-weight: 700;\n }\n\n [data-diff], [data-file] {\n --diffs-grid-number-column-width: minmax(min-content, max-content);\n --diffs-code-grid: var(--diffs-grid-number-column-width) 1fr;\n\n &[data-dehydrated] {\n --diffs-code-grid: var(--diffs-grid-number-column-width) minmax(0, 1fr);\n }\n\n &:hover [data-code]::-webkit-scrollbar-thumb {\n background-color: var(--diffs-bg-context);\n }\n }\n\n @supports (-webkit-touch-callout: none) {\n :host {\n --diffs-scrollbar-gutter-fallback: 0px;\n }\n }\n\n [data-line] span, [data-edit-prediction-suffix] span {\n color: light-dark(var(--diffs-token-light, var(--diffs-light)), var(--diffs-token-dark, var(--diffs-dark)));\n background-color: light-dark(var(--diffs-token-light-bg, inherit), var(--diffs-token-dark-bg, inherit));\n font-weight: light-dark(var(--diffs-token-light-font-weight, inherit), var(--diffs-token-dark-font-weight, inherit));\n font-style: light-dark(var(--diffs-token-light-font-style, inherit), var(--diffs-token-dark-font-style, inherit));\n text-decoration: light-dark(var(--diffs-token-light-text-decoration, inherit), var(--diffs-token-dark-text-decoration, inherit));\n }\n\n [data-line], [data-gutter-buffer], [data-column-number], [data-line-annotation], [data-no-newline], [data-merge-conflict], [data-merge-conflict-actions], [data-editor-overlay] {\n --diffs-computed-decoration-bg: var(--diffs-bg);\n --diffs-computed-diff-line-bg: var(--diffs-computed-decoration-bg);\n --diffs-computed-selected-line-bg: var(--diffs-computed-diff-line-bg);\n --diffs-computed-editor-active-line-bg: var(--diffs-computed-selected-line-bg);\n --diffs-computed-hovered-line-bg: var(--diffs-computed-editor-active-line-bg);\n --diffs-hover-mix-target: var(--diffs-bg-hover-override, var(--diffs-mixer));\n --diffs-line-bg: var(--diffs-computed-hovered-line-bg);\n color: var(--diffs-fg);\n background-color: var(--diffs-line-bg, var(--diffs-bg));\n }\n\n [data-line], [data-no-newline] {\n &[data-decoration-bg] {\n --mix-deco-light: 92%;\n --mix-deco-dark: 85%;\n\n &[data-decoration-bg-depth="2"] {\n --mix-deco-light: 88%;\n --mix-deco-dark: 80%;\n }\n\n &[data-decoration-bg-depth="3"] {\n --mix-deco-light: 85%;\n --mix-deco-dark: 78%;\n }\n\n --diffs-hover-mix-target: var(--diffs-decoration-bg);\n --diffs-computed-decoration-bg: light-dark(color-mix(in lab,\n var(--diffs-bg) var(--mix-deco-light),\n var(--diffs-decoration-bg)), color-mix(in lab,\n var(--diffs-bg) var(--mix-deco-dark),\n var(--diffs-decoration-bg)));\n }\n }\n\n [data-line-annotation], [data-gutter-buffer="annotation"] {\n --diffs-annotation-bg: var(--diffs-bg-context);\n --diffs-computed-decoration-bg: var(--diffs-annotation-bg);\n --diffs-hover-mix-target: var(--diffs-computed-editor-active-line-bg);\n }\n\n [data-merge-conflict-actions], [data-gutter-buffer="merge-conflict-action"], [data-gutter-buffer="merge-conflict-marker-base"], [data-gutter-buffer="merge-conflict-marker-separator"], [data-merge-conflict="marker-base"], [data-merge-conflict="marker-separator"] {\n --diffs-computed-decoration-bg: var(--diffs-bg-context);\n --diffs-hover-mix-target: var(--diffs-computed-editor-active-line-bg);\n }\n\n [data-gutter-buffer="merge-conflict-marker-start"], [data-merge-conflict="marker-start"] {\n --diffs-computed-decoration-bg: light-dark(color-mix(in lab,\n var(--diffs-bg) 78%,\n var(--conflict-bg-current-header-override, var(--diffs-addition-base))), color-mix(in lab,\n var(--diffs-bg) 68%,\n var(--conflict-bg-current-header-override, var(--diffs-addition-base))));\n --diffs-hover-mix-target: var(--diffs-computed-editor-active-line-bg);\n }\n\n [data-gutter-buffer="merge-conflict-marker-end"], [data-merge-conflict="marker-end"] {\n --diffs-computed-decoration-bg: light-dark(color-mix(in lab,\n var(--diffs-bg) 78%,\n var(--conflict-bg-incoming-header-override, var(--diffs-modified-base))), color-mix(in lab,\n var(--diffs-bg) 68%,\n var(--conflict-bg-incoming-header-override, var(--diffs-modified-base))));\n --diffs-hover-mix-target: var(--diffs-computed-editor-active-line-bg);\n }\n\n [data-has-merge-conflict] [data-line-annotation], [data-has-merge-conflict] [data-gutter-buffer="annotation"] {\n --diffs-computed-decoration-bg: var(--diffs-bg);\n --diffs-hover-mix-target: var(--diffs-computed-editor-active-line-bg);\n }\n\n :where([data-background]) {\n & [data-gutter-buffer], & [data-column-number] {\n --mix-light: 91%;\n --mix-dark: 85%;\n }\n\n & [data-line], & [data-no-newline] {\n --mix-light: 88%;\n --mix-dark: 80%;\n }\n\n & [data-gutter-buffer], & [data-column-number], & [data-line], & [data-no-newline] {\n --diffs-diff-line-mix-target: var(--diffs-bg);\n\n &[data-line-type="change-deletion"] {\n --diffs-diff-line-mix-target: var(--diffs-bg-deletion-override, var(--diffs-deletion-base));\n --diffs-hover-mix-target: var(--diffs-diff-line-mix-target);\n\n &:where([data-gutter-buffer], [data-column-number]) {\n color: var(--diffs-fg-number-deletion-override, var(--diffs-deletion-base));\n --diffs-diff-line-mix-target: var(--diffs-bg-deletion-number-override, var(--diffs-deletion-base));\n }\n\n --diffs-computed-diff-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-light),\n var(--diffs-diff-line-mix-target)), color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-dark),\n var(--diffs-diff-line-mix-target)));\n }\n\n &[data-line-type="change-addition"] {\n --diffs-diff-line-mix-target: var(--diffs-bg-addition-override, var(--diffs-addition-base));\n --diffs-hover-mix-target: var(--diffs-diff-line-mix-target);\n\n &:where([data-gutter-buffer], [data-column-number]) {\n color: var(--diffs-fg-number-addition-override, var(--diffs-addition-base));\n --diffs-diff-line-mix-target: var(--diffs-bg-addition-number-override, var(--diffs-addition-base));\n }\n\n --diffs-computed-diff-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-light),\n var(--diffs-diff-line-mix-target)), color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-dark),\n var(--diffs-diff-line-mix-target)));\n }\n\n &[data-merge-conflict="current"] {\n --diffs-diff-line-mix-target: var(--conflict-bg-current-override, var(--diffs-addition-base));\n --diffs-hover-mix-target: var(--diffs-diff-line-mix-target);\n\n &:where([data-gutter-buffer], [data-column-number]) {\n color: var(--diffs-fg-number-addition-override, var(--diffs-addition-base));\n --diffs-diff-line-mix-target: var(--conflict-bg-current-number-override, var(--diffs-addition-base));\n }\n\n --diffs-computed-diff-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-light),\n var(--diffs-diff-line-mix-target)), color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-dark),\n var(--diffs-diff-line-mix-target)));\n }\n\n &[data-merge-conflict="incoming"] {\n --diffs-diff-line-mix-target: var(--conflict-bg-incoming-override, var(--diffs-modified-base));\n --diffs-hover-mix-target: var(--diffs-diff-line-mix-target);\n\n &:where([data-gutter-buffer], [data-column-number]) {\n color: var(--diffs-modified-base);\n --diffs-diff-line-mix-target: var(--conflict-bg-incoming-number-override, var(--diffs-modified-base));\n }\n\n --diffs-computed-diff-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-light),\n var(--diffs-diff-line-mix-target)), color-mix(in lab,\n var(--diffs-computed-decoration-bg) var(--mix-dark),\n var(--diffs-diff-line-mix-target)));\n }\n }\n }\n\n [data-gutter-buffer], [data-column-number], [data-line], [data-line-annotation], [data-merge-conflict], [data-merge-conflict-actions], [data-no-newline], [data-editor-overlay] {\n --diffs-selection-mix-target: var(--diffs-bg-selection-override, var(--diffs-selection-base));\n --diffs-selection-emphasis-mix-target: var(--diffs-selection-mix-target);\n\n &:where([data-editor-overlay]), &:where([data-line], [data-line-annotation], [data-merge-conflict], [data-merge-conflict-actions], [data-no-newline])[data-selected-line] {\n --mix-selection-light: 82%;\n --mix-selection-dark: 75%;\n --diffs-hover-mix-target: var(--diffs-selection-mix-target);\n }\n\n &:where([data-gutter-buffer][data-selected-line], [data-column-number]:is([data-selected-line], [data-editor-active-line])) {\n --mix-selection-light: 75%;\n --mix-selection-dark: 60%;\n --diffs-selection-mix-target: var(--diffs-bg-selection-number-override, var(--diffs-selection-base));\n --diffs-hover-mix-target: var(--diffs-selection-mix-target);\n }\n\n &:where([data-line][data-selected-line]):is([data-line-type="change-addition"], [data-line-type="change-deletion"]) {\n --diffs-selection-emphasis-mix-target: light-dark(color-mix(in lab,\n var(--diffs-diff-line-mix-target, var(--diffs-selection-mix-target))\n var(--mix-selection-light),\n var(--diffs-selection-mix-target)), var(--diffs-selection-mix-target));\n }\n\n &:where([data-editor-overlay]), &[data-selected-line] {\n --diffs-computed-selected-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-diff-line-bg) var(--mix-selection-light),\n var(--diffs-selection-mix-target)), color-mix(in lab,\n var(--diffs-computed-diff-line-bg) var(--mix-selection-dark),\n var(--diffs-selection-mix-target)));\n }\n }\n\n [data-line][data-editor-active-line], [data-column-number][data-editor-active-line] {\n --diffs-computed-editor-active-line-bg: color-mix(in lab,\n var(--diffs-computed-selected-line-bg)\n var(--diffs-editor-active-line-source-mix, 100%),\n var(--diffs-selection-emphasis-mix-target));\n }\n\n @media (pointer: fine) {\n [data-line][data-hovered], [data-gutter-buffer][data-hovered], [data-column-number][data-hovered], [data-line-annotation][data-hovered], [data-no-newline][data-hovered], [data-merge-conflict][data-hovered], [data-merge-conflict-actions][data-hovered], [data-editor-overlay][data-hovered] {\n --diffs-computed-hovered-line-bg: light-dark(color-mix(in lab,\n var(--diffs-computed-editor-active-line-bg) 97%,\n var(--diffs-hover-mix-target)), color-mix(in lab,\n var(--diffs-computed-editor-active-line-bg) 91%,\n var(--diffs-hover-mix-target)));\n }\n }\n\n [data-gutter-buffer][data-selected-line], [data-column-number]:is([data-selected-line], [data-editor-active-line]) {\n color: var(--diffs-selection-number-fg);\n }\n\n [data-no-newline] {\n user-select: none;\n\n & span {\n opacity: .6;\n }\n }\n\n [data-diff-type="split"][data-overflow="scroll"] {\n grid-template-columns: 1fr 1fr;\n display: grid;\n\n & [data-additions] {\n border-left: 1px solid var(--diffs-bg);\n }\n\n & [data-deletions] {\n border-right: 1px solid var(--diffs-bg);\n }\n }\n\n [data-code] {\n grid-auto-flow: dense;\n grid-template-columns: var(--diffs-code-grid);\n overflow: var(--diffs-overflow-override, scroll) clip;\n overscroll-behavior-x: none;\n tab-size: var(--diffs-tab-size, 2);\n padding-top: var(--diffs-gap-block, var(--diffs-gap-fallback));\n padding-bottom: max(0px,\n calc(var(--diffs-gap-block, var(--diffs-gap-fallback)) -\n var(--diffs-scrollbar-gutter)));\n scrollbar-gutter: stable;\n align-self: flex-start;\n display: grid;\n }\n\n [data-diffs-scrollbar-measure] {\n opacity: 0;\n pointer-events: none;\n scrollbar-gutter: auto;\n grid-template-columns: none;\n width: 100px;\n height: 100px;\n padding: 0;\n position: absolute;\n top: -200px;\n left: -200px;\n }\n\n [data-container-size] {\n container-type: inline-size;\n }\n\n [data-code]::-webkit-scrollbar {\n width: 0;\n height: var(--diffs-scrollbar-gutter);\n }\n\n [data-code]::-webkit-scrollbar-track {\n background: none;\n }\n\n [data-code]::-webkit-scrollbar-thumb {\n background-color: #0000;\n background-clip: content-box;\n border: 1px solid #0000;\n border-radius: 3px;\n }\n\n [data-code]::-webkit-scrollbar-corner {\n background-color: #0000;\n }\n\n @supports ((-moz-appearance: none)) {\n [data-code] {\n scrollbar-width: thin;\n scrollbar-color: var(--diffs-bg-context) transparent;\n padding-bottom: var(--diffs-gap-block, var(--diffs-gap-fallback));\n }\n }\n\n [data-diffs-header] ~ [data-diff], [data-diffs-header] ~ [data-file] {\n & [data-code], &[data-overflow="wrap"], &[data-dehydrated][data-diff-type="split"][data-overflow="scroll"] {\n padding-top: 0;\n }\n }\n\n [data-gutter] {\n grid-template-rows: subgrid;\n grid-template-columns: subgrid;\n z-index: 3;\n background-color: var(--diffs-bg);\n grid-column: 1;\n display: grid;\n position: relative;\n\n & [data-gutter-buffer], & [data-column-number] {\n border-right: var(--diffs-gap-style, 2px solid var(--diffs-bg));\n }\n }\n\n [data-content] {\n grid-template-rows: subgrid;\n grid-template-columns: subgrid;\n background-color: var(--diffs-bg);\n grid-column: 2;\n min-width: 0;\n display: grid;\n }\n\n [data-diff-type="split"][data-overflow="wrap"], [data-dehydrated][data-diff-type="split"][data-overflow="scroll"] {\n grid-auto-flow: dense;\n grid-template-columns: repeat(2, var(--diffs-code-grid));\n padding-block: var(--diffs-gap-block, var(--diffs-gap-fallback));\n display: grid;\n\n & [data-code] {\n display: contents;\n }\n\n & [data-deletions] {\n & [data-gutter] {\n grid-column: 1;\n }\n\n & [data-content] {\n border-right: 1px solid var(--diffs-bg);\n grid-column: 2;\n }\n }\n\n & [data-additions] {\n & [data-gutter] {\n border-left: 1px solid var(--diffs-bg);\n grid-column: 3;\n }\n\n & [data-content] {\n grid-column: 4;\n }\n }\n }\n\n [data-dehydrated][data-diff-type="split"][data-overflow="scroll"] [data-content] {\n overflow: clip;\n }\n\n [data-overflow="scroll"] [data-gutter] {\n position: sticky;\n left: 0;\n }\n\n [data-interactive-lines] [data-line] {\n cursor: pointer;\n }\n\n [data-interactive-line-numbers] [data-column-number] {\n cursor: pointer;\n touch-action: none;\n }\n\n [data-content-buffer], [data-gutter-buffer] {\n user-select: none;\n min-height: 1lh;\n position: relative;\n }\n\n [data-gutter-buffer] {\n padding-left: 2ch;\n padding-right: 1ch;\n\n &:before {\n content: "";\n min-width: var(--diffs-min-number-column-width, var(--diffs-min-number-column-width-default, 3ch));\n display: block;\n }\n }\n\n [data-gutter-buffer="annotation"] {\n --diffs-annotation-bg: var(--diffs-bg-context-gutter);\n min-height: 0;\n }\n\n [data-gutter-buffer="buffer"] {\n --diffs-line-bg: var(--diffs-bg-context-gutter);\n }\n\n [data-content-buffer] {\n background-position: 5px 0;\n background-size: 8px 8px;\n background-origin: border-box;\n background-image: repeating-linear-gradient(-45deg,\n transparent,\n transparent calc(3px * 1.414),\n var(--diffs-bg-buffer) calc(3px * 1.414),\n var(--diffs-bg-buffer) calc(4px * 1.414));\n grid-column: 1;\n }\n\n [data-separator] {\n box-sizing: content-box;\n background-color: var(--diffs-bg);\n }\n\n [data-separator="simple"] {\n min-height: 4px;\n }\n\n [data-separator="line-info"], [data-separator="line-info-basic"], [data-separator="metadata"], [data-separator="simple"] {\n background-color: var(--diffs-bg-separator);\n }\n\n [data-separator="line-info"], [data-separator="line-info-basic"], [data-separator="metadata"] {\n height: 32px;\n position: relative;\n }\n\n [data-separator-wrapper] {\n user-select: none;\n fill: currentColor;\n background-color: var(--diffs-bg);\n align-items: center;\n height: 100%;\n display: flex;\n position: absolute;\n inset-inline: 0;\n }\n\n [data-content] [data-separator-wrapper] {\n display: none;\n }\n\n [data-separator="metadata"] [data-separator-wrapper] {\n background-color: var(--diffs-bg-separator);\n height: 100%;\n color: var(--diffs-fg-number);\n white-space: nowrap;\n text-overflow: ellipsis;\n min-width: min-content;\n padding-inline: 1ch;\n inset-inline: 100% auto;\n overflow: hidden;\n }\n\n [data-separator="line-info"] {\n margin-block: var(--diffs-gap-block, var(--diffs-gap-fallback));\n\n & [data-separator-wrapper] {\n min-width: 16px;\n }\n }\n\n [data-separator="line-info-basic"], [data-separator="metadata"] {\n margin-block: 0;\n }\n\n [data-separator="line-info"][data-separator-first] {\n margin-top: 0;\n }\n\n [data-separator="line-info"][data-separator-last] {\n margin-bottom: 0;\n }\n\n [data-expand-index] [data-separator-wrapper] {\n grid-template-columns: 32px auto;\n display: grid;\n }\n\n [data-expand-index] [data-separator-wrapper][data-separator-multi-button] {\n grid-template-columns: 32px 32px auto;\n }\n\n [data-expand-button], [data-separator-content] {\n background-color: var(--diffs-bg-separator);\n flex: none;\n align-items: center;\n display: flex;\n }\n\n [data-expand-index] [data-separator-content]:hover {\n cursor: pointer;\n text-decoration: underline;\n }\n\n [data-expand-button] {\n cursor: pointer;\n min-width: 32px;\n color: var(--diffs-fg-number);\n border-right: 2px solid var(--diffs-bg);\n flex-shrink: 0;\n justify-content: center;\n align-self: stretch;\n\n &:hover {\n color: var(--diffs-fg);\n }\n\n &[data-expand-all-button] {\n display: none;\n }\n }\n\n [data-expand-down] [data-icon] {\n transform: scaleY(-1);\n }\n\n [data-separator-content] {\n height: 100%;\n color: var(--diffs-fg-number);\n flex: auto;\n justify-content: flex-start;\n padding: 0 1ch;\n overflow: hidden;\n }\n\n [data-separator="line-info"], [data-separator="line-info-basic"] {\n & [data-separator-content] {\n user-select: none;\n height: 100%;\n overflow: clip;\n }\n }\n\n [data-unmodified-lines] {\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 0 auto;\n min-width: 0;\n display: block;\n overflow: hidden;\n }\n\n @supports (width: 1cqi) {\n [data-unified] {\n & [data-separator="line-info"] [data-separator-wrapper] {\n padding-inline: var(--diffs-gap-inline, var(--diffs-gap-fallback));\n width: 100cqi;\n\n & [data-separator-content] {\n border-radius: 6px;\n }\n }\n\n & [data-separator="line-info"][data-expand-index] [data-separator-wrapper] [data-separator-content] {\n border-top-left-radius: unset;\n border-bottom-left-radius: unset;\n }\n }\n\n [data-gutter] {\n & [data-separator="line-info"] [data-separator-wrapper] {\n padding-left: var(--diffs-gap-inline, var(--diffs-gap-fallback));\n }\n\n & [data-separator="line-info"] [data-separator-content] {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n }\n\n & [data-separator="line-info"][data-expand-index] [data-separator-content] {\n border-top-left-radius: unset;\n border-bottom-left-radius: unset;\n }\n }\n\n [data-additions] {\n & [data-content] [data-separator="line-info"] {\n background-color: var(--diffs-bg);\n\n & [data-separator-wrapper] {\n display: none;\n }\n }\n\n & [data-gutter] [data-separator="line-info"] [data-separator-wrapper] {\n background-color: var(--diffs-bg-separator);\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n height: 100%;\n display: block;\n\n & [data-separator-content], & [data-expand-button] {\n display: none;\n }\n }\n }\n\n [data-overflow="scroll"] [data-additions] [data-gutter] [data-separator="line-info"] [data-separator-wrapper] {\n width: calc(100cqi - var(--diffs-gap-inline, var(--diffs-gap-fallback)));\n }\n\n [data-overflow="wrap"] [data-additions] [data-content] [data-separator="line-info"] [data-separator-wrapper] {\n background-color: var(--diffs-bg-separator);\n height: 100%;\n margin-right: var(--diffs-gap-inline, var(--diffs-gap-fallback));\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n display: block;\n\n & [data-separator-content], & [data-expand-button] {\n display: none;\n }\n }\n\n [data-separator="line-info"] [data-separator-wrapper] {\n & [data-expand-both], & [data-expand-down], & [data-expand-up] {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n }\n }\n\n @media (pointer: fine) {\n [data-separator="line-info"] [data-separator-wrapper] {\n &[data-separator-multi-button] {\n & [data-expand-up] {\n border-top-left-radius: 6px;\n border-bottom-left-radius: unset;\n }\n\n & [data-expand-down] {\n border-bottom-left-radius: 6px;\n border-top-left-radius: unset;\n }\n }\n }\n }\n }\n\n @media (pointer: coarse) {\n [data-separator="line-info-basic"] [data-separator-wrapper][data-separator-multi-button] {\n grid-template-columns: 34px 34px auto;\n\n & [data-separator-content] {\n grid-column: unset;\n grid-row: unset;\n }\n }\n\n @supports (width: 1cqi) {\n [data-separator="line-info"] [data-separator-wrapper] {\n & [data-expand-both], & [data-expand-down], & [data-expand-up] {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n }\n\n &[data-separator-multi-button] {\n & [data-expand-up] {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n }\n\n & [data-expand-down] {\n border-bottom-left-radius: unset;\n border-top-left-radius: unset;\n }\n }\n }\n }\n }\n\n @media (pointer: fine) {\n [data-separator-wrapper][data-separator-multi-button] {\n grid-template-rows: 50% 50%;\n display: grid;\n\n & [data-separator-content] {\n grid-area: 1 / 2 / -1;\n min-width: min-content;\n }\n\n & [data-expand-button] {\n grid-column: 1;\n }\n }\n\n [data-separator="line-info"] [data-separator-wrapper], [data-separator="line-info"] [data-separator-wrapper][data-separator-multi-button] {\n grid-template-columns: 34px auto;\n }\n\n [data-separator="line-info-basic"][data-expand-index] [data-separator-wrapper] {\n grid-template-columns: 100% auto;\n }\n\n [data-separator="line-info"], [data-separator="line-info-basic"] {\n & [data-separator-multi-button] {\n & [data-expand-up] {\n border-bottom: 1px solid var(--diffs-bg);\n border-right: 2px solid var(--diffs-bg);\n }\n\n & [data-expand-down] {\n border-top: 1px solid var(--diffs-bg);\n border-right: 2px solid var(--diffs-bg);\n }\n }\n }\n }\n\n [data-additions] [data-gutter] [data-separator-wrapper], [data-additions] [data-separator="line-info-basic"] [data-separator-wrapper], [data-content] [data-separator-wrapper] {\n display: none;\n }\n\n [data-line-annotation] {\n min-height: var(--diffs-annotation-min-height, 0);\n z-index: 2;\n }\n\n [data-merge-conflict-actions] {\n z-index: 2;\n }\n\n [data-separator="custom"] {\n grid-template-columns: subgrid;\n display: grid;\n }\n\n [data-line], [data-column-number], [data-no-newline] {\n padding-inline: 1ch;\n position: relative;\n }\n\n [data-indicators="classic"] [data-line] {\n padding-inline-start: 2ch;\n }\n\n [data-indicators="classic"] {\n & [data-line-type="change-addition"], & [data-line-type="change-deletion"] {\n &[data-no-newline], &[data-line] {\n &:before {\n user-select: none;\n width: 1ch;\n height: 1lh;\n display: inline-block;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n\n & [data-line-type="change-addition"] {\n &[data-line], &[data-no-newline] {\n &:before {\n content: "+";\n color: var(--diffs-addition-base);\n }\n }\n }\n\n & [data-line-type="change-deletion"] {\n &[data-line], &[data-no-newline] {\n &:before {\n content: "-";\n color: var(--diffs-deletion-base);\n }\n }\n }\n }\n\n [data-indicators="bars"] {\n & [data-line-type="change-deletion"], & [data-line-type="change-addition"] {\n &[data-column-number] {\n &:before {\n content: "";\n user-select: none;\n contain: strict;\n width: 4px;\n height: 100%;\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n\n & [data-line-type="change-deletion"] {\n &[data-column-number] {\n &:before {\n background-image: linear-gradient(0deg,\n var(--diffs-bg-deletion) 50%,\n var(--diffs-deletion-base) 50%);\n background-repeat: repeat;\n background-size: 2px 2px;\n background-size: calc(1lh / round(1lh / 2px))\n calc(1lh / round(1lh / 2px));\n }\n }\n }\n\n & [data-line-type="change-addition"] {\n &[data-column-number] {\n &:before {\n background-color: var(--diffs-addition-base);\n }\n }\n }\n }\n\n [data-overflow="wrap"] {\n & [data-line] {\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n & [data-annotation-content] {\n word-break: break-word;\n }\n }\n\n [data-overflow="scroll"] [data-line] {\n white-space: pre;\n min-height: 1lh;\n }\n\n [data-column-number] {\n box-sizing: content-box;\n text-align: right;\n user-select: none;\n color: var(--diffs-fg-number);\n padding-left: 2ch;\n }\n\n [data-line-number-content] {\n min-width: var(--diffs-min-number-column-width, var(--diffs-min-number-column-width-default, 3ch));\n z-index: 1;\n display: inline-block;\n position: relative;\n }\n\n [data-disable-line-numbers] {\n & [data-gutter-buffer], & [data-column-number] {\n min-width: 4px;\n padding: 0;\n\n &:before {\n min-width: 0;\n }\n }\n\n & [data-line-number-content] {\n display: none;\n }\n\n & [data-gutter-utility-slot] {\n right: unset;\n justify-content: flex-start;\n left: 0;\n }\n\n &[data-indicators="bars"] [data-gutter-utility-slot] {\n left: 6px;\n }\n }\n\n [data-file][data-disable-line-numbers] {\n & [data-gutter-buffer], & [data-column-number] {\n border-right: 0;\n min-width: 0;\n }\n }\n\n [data-diff-span] {\n box-decoration-break: clone;\n border-radius: 3px;\n }\n\n [data-line-type="change-addition"] [data-diff-span] {\n background-color: var(--diffs-bg-addition-emphasis);\n }\n\n [data-line-type="change-deletion"] [data-diff-span] {\n background-color: var(--diffs-bg-deletion-emphasis);\n }\n\n [data-merge-conflict="marker-start"], [data-merge-conflict="marker-base"], [data-merge-conflict="marker-separator"], [data-merge-conflict="marker-end"] {\n color: var(--diffs-fg);\n padding-left: 1ch;\n }\n\n [data-merge-conflict="marker-start"], [data-merge-conflict="marker-end"] {\n align-items: center;\n display: flex;\n\n &:after {\n color: var(--diffs-fg-conflict-marker);\n font-size: .75rem;\n font-style: normal;\n line-height: 1.25rem;\n font-family: var(--diffs-header-font-family, var(--diffs-header-font-fallback));\n padding-left: 1ch;\n }\n }\n\n [data-merge-conflict="marker-start"]:after {\n content: "(Current Change)";\n }\n\n [data-merge-conflict="marker-end"]:after {\n content: "(Incoming Change)";\n }\n\n [data-merge-conflict-actions-content] {\n min-height: 1.75rem;\n font-family: var(--diffs-header-font-family, var(--diffs-header-font-fallback));\n color: var(--diffs-fg);\n align-items: center;\n gap: .25rem;\n padding-inline: .5rem;\n font-size: .75rem;\n line-height: 1.2;\n display: flex;\n }\n\n [data-merge-conflict-action] {\n appearance: none;\n color: var(--diffs-fg-number);\n font: inherit;\n cursor: pointer;\n background: none;\n border: 0;\n padding: 0;\n font-style: normal;\n }\n\n [data-merge-conflict-action]:hover {\n color: var(--diffs-fg);\n }\n\n [data-merge-conflict-action="current"]:hover {\n color: var(--diffs-addition-base);\n }\n\n [data-merge-conflict-action="incoming"]:hover {\n color: var(--diffs-modified-base);\n }\n\n [data-merge-conflict-action-separator] {\n color: var(--diffs-fg-number);\n opacity: .6;\n user-select: none;\n }\n\n [data-diffs-header="default"] {\n background-color: var(--diffs-bg);\n justify-content: space-between;\n align-items: center;\n gap: var(--diffs-gap-inline, var(--diffs-gap-fallback));\n min-height: calc(1lh + (var(--diffs-gap-block, var(--diffs-gap-fallback)) * 3));\n z-index: 2;\n flex-direction: row;\n padding-inline: 16px;\n display: flex;\n position: relative;\n top: 0;\n }\n\n [data-header-content] {\n align-items: center;\n gap: var(--diffs-gap-inline, var(--diffs-gap-fallback));\n white-space: nowrap;\n flex-direction: row;\n min-width: 0;\n display: flex;\n }\n\n [data-header-content] [data-prev-name], [data-header-content] [data-title] {\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n min-width: 0;\n overflow: hidden;\n }\n\n [data-prev-name] {\n opacity: .7;\n }\n\n [data-rename-icon] {\n fill: currentColor;\n flex-grow: 0;\n flex-shrink: 0;\n }\n\n [data-diffs-header="default"] [data-metadata] {\n white-space: nowrap;\n align-items: center;\n gap: 1ch;\n display: flex;\n }\n\n [data-diffs-header="default"] [data-additions-count] {\n font-family: var(--diffs-font-family, var(--diffs-font-fallback));\n color: var(--diffs-addition-base);\n }\n\n [data-diffs-header="default"] [data-deletions-count] {\n font-family: var(--diffs-font-family, var(--diffs-font-fallback));\n color: var(--diffs-deletion-base);\n }\n\n [data-change-icon] {\n fill: currentColor;\n flex-shrink: 0;\n }\n\n [data-change-icon="change"], [data-change-icon="rename-pure"], [data-change-icon="rename-changed"] {\n color: var(--diffs-modified-base);\n }\n\n [data-change-icon="new"] {\n color: var(--diffs-addition-base);\n }\n\n [data-change-icon="deleted"] {\n color: var(--diffs-deletion-base);\n }\n\n [data-change-icon="file"] {\n opacity: .6;\n }\n\n [data-annotation-content] {\n z-index: 2;\n isolation: isolate;\n white-space: normal;\n align-self: flex-start;\n min-width: 0;\n display: flow-root;\n position: relative;\n }\n\n [data-overflow="scroll"] [data-annotation-content], [data-overflow="scroll"] [data-merge-conflict-actions-content] {\n width: var(--diffs-column-content-width, auto);\n left: var(--diffs-column-number-width, 0);\n position: sticky;\n }\n\n [data-annotation-slot] {\n text-wrap-mode: wrap;\n word-break: normal;\n white-space-collapse: collapse;\n }\n\n [data-gutter-utility-slot] {\n touch-action: none;\n justify-content: flex-end;\n display: flex;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n }\n\n [data-utility-button] {\n appearance: none;\n cursor: pointer;\n width: 1lh;\n height: 1lh;\n font-size: var(--diffs-font-size, 13px);\n line-height: var(--diffs-line-height, 20px);\n background-color: var(--diffs-modified-base);\n color: var(--diffs-bg);\n fill: currentColor;\n z-index: 4;\n touch-action: none;\n border: none;\n border-radius: 4px;\n justify-content: center;\n align-items: center;\n margin-right: calc(-1lh + 1ch);\n padding: 0;\n display: flex;\n position: relative;\n\n &:before {\n content: "";\n display: block;\n position: absolute;\n inset: 0 0 0 -4px;\n }\n }\n\n [data-decoration-bar-stack] {\n pointer-events: none;\n isolation: isolate;\n z-index: 1;\n background-color: var(--diffs-decoration-bar-color, transparent);\n box-sizing: content-box;\n border-left: 2px solid var(--diffs-bg);\n border-right: 2px solid var(--diffs-bg);\n width: 6px;\n position: absolute;\n top: 0;\n bottom: 0;\n right: -2px;\n\n [data-decoration-bar-depth="1"] & {\n background-color: color-mix(in lab,\n var(--diffs-bg) 20%,\n var(--diffs-decoration-bar-color, transparent));\n }\n\n [data-decoration-bar-depth="2"] & {\n background-color: color-mix(in lab,\n var(--diffs-bg) 45%,\n var(--diffs-decoration-bar-color, transparent));\n }\n\n [data-decoration-bar-depth="3"] & {\n background-color: color-mix(in lab,\n var(--diffs-bg) 65%,\n var(--diffs-decoration-bar-color, transparent));\n }\n\n [data-decoration-bar-start] & {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n [data-decoration-bar-end] & {\n z-index: 3;\n border-bottom-right-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n }\n\n [data-placeholder] {\n contain: strict;\n }\n\n [data-error-wrapper] {\n padding: var(--diffs-gap-block, var(--diffs-gap-fallback))\n var(--diffs-gap-inline, var(--diffs-gap-fallback));\n scrollbar-width: none;\n max-height: 400px;\n overflow: auto;\n\n & [data-error-message] {\n color: var(--diffs-deletion-base);\n font-size: 18px;\n font-weight: bold;\n }\n\n & [data-error-stack] {\n color: var(--diffs-fg-number);\n }\n }\n}\n\n@layer theme, rendered, unsafe;\n';
5561
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/style.js
5562
+ var style_default = '@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;--diffs-warning-light:#d5a910;--diffs-warning-dark:#ffd452;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}input,button{font-family:inherit;font-size:inherit;line-height:inherit}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr;&[data-dehydrated]{--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}&:hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span,[data-edit-prediction-suffix] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions],[data-editor-overlay]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-computed-editor-active-line-bg:var(--diffs-computed-selected-line-bg);--diffs-computed-hovered-line-bg:var(--diffs-computed-editor-active-line-bg);--diffs-hover-mix-target:var(--diffs-bg-hover-override,var(--diffs-mixer));--diffs-line-bg:var(--diffs-computed-hovered-line-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}[data-line],[data-no-newline]{&[data-decoration-bg]{--mix-deco-light:92%;--mix-deco-dark:85%;&[data-decoration-bg-depth="2"]{--mix-deco-light:88%;--mix-deco-dark:80%}&[data-decoration-bg-depth="3"]{--mix-deco-light:85%;--mix-deco-dark:78%}--diffs-hover-mix-target:var(--diffs-decoration-bg);--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)))}}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-hover-mix-target:var(--diffs-computed-editor-active-line-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-hover-mix-target:var(--diffs-computed-editor-active-line-bg)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-hover-mix-target:var(--diffs-computed-editor-active-line-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-hover-mix-target:var(--diffs-computed-editor-active-line-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-hover-mix-target:var(--diffs-computed-editor-active-line-bg)}:where([data-background]){& [data-gutter-buffer],& [data-column-number]{--mix-light:91%;--mix-dark:85%}& [data-line],& [data-no-newline]{--mix-light:88%;--mix-dark:80%}& [data-gutter-buffer],& [data-column-number],& [data-line],& [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg);&[data-line-type=change-deletion]{--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base));--diffs-hover-mix-target:var(--diffs-diff-line-mix-target);&:where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)))}&[data-line-type=change-addition]{--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base));--diffs-hover-mix-target:var(--diffs-diff-line-mix-target);&:where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)))}&[data-merge-conflict=current]{--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base));--diffs-hover-mix-target:var(--diffs-diff-line-mix-target);&:where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)))}&[data-merge-conflict=incoming]{--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base));--diffs-hover-mix-target:var(--diffs-diff-line-mix-target);&:where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)))}}}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline],[data-editor-overlay]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base));--diffs-selection-emphasis-mix-target:var(--diffs-selection-mix-target);&:where([data-editor-overlay]),&:where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline])[data-selected-line]{--mix-selection-light:82%;--mix-selection-dark:75%;--diffs-hover-mix-target:var(--diffs-selection-mix-target)}&:where([data-gutter-buffer][data-selected-line],[data-column-number]:is([data-selected-line],[data-editor-active-line])){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base));--diffs-hover-mix-target:var(--diffs-selection-mix-target)}&:where([data-line][data-selected-line]):is([data-line-type=change-addition],[data-line-type=change-deletion]){--diffs-selection-emphasis-mix-target:light-dark(color-mix(in lab, var(--diffs-diff-line-mix-target,var(--diffs-selection-mix-target)) var(--mix-selection-light), var(--diffs-selection-mix-target)),var(--diffs-selection-mix-target))}&:where([data-editor-overlay]),&[data-selected-line]{--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)))}}[data-line][data-editor-active-line],[data-column-number][data-editor-active-line]{--diffs-computed-editor-active-line-bg:color-mix(in lab, var(--diffs-computed-selected-line-bg) var(--diffs-editor-active-line-source-mix,100%), var(--diffs-selection-emphasis-mix-target))}@media (pointer:fine){[data-line][data-hovered],[data-gutter-buffer][data-hovered],[data-column-number][data-hovered],[data-line-annotation][data-hovered],[data-no-newline][data-hovered],[data-merge-conflict][data-hovered],[data-merge-conflict-actions][data-hovered],[data-editor-overlay][data-hovered]{--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-editor-active-line-bg) 97%, var(--diffs-hover-mix-target)),color-mix(in lab, var(--diffs-computed-editor-active-line-bg) 91%, var(--diffs-hover-mix-target)))}}[data-gutter-buffer][data-selected-line],[data-column-number]:is([data-selected-line],[data-editor-active-line]){color:var(--diffs-selection-number-fg)}[data-no-newline]{user-select:none;& span{opacity:.6}}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid;& [data-additions]{border-left:1px solid var(--diffs-bg)}& [data-deletions]{border-right:1px solid var(--diffs-bg)}}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}[data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]{& [data-code],&[data-overflow=wrap],&[data-dehydrated][data-diff-type=split][data-overflow=scroll]{padding-top:0}}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative;& [data-gutter-buffer],& [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap],[data-dehydrated][data-diff-type=split][data-overflow=scroll]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid;& [data-code]{display:contents}& [data-deletions]{& [data-gutter]{grid-column:1}& [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}}& [data-additions]{& [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}& [data-content]{grid-column:4}}}[data-dehydrated][data-diff-type=split][data-overflow=scroll] [data-content]{overflow:clip}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch;&:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent calc(3px * 1.414), var(--diffs-bg-buffer) calc(3px * 1.414), var(--diffs-bg-buffer) calc(4px * 1.414));grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback));& [data-separator-wrapper]{min-width:16px}}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch;&:hover{color:var(--diffs-fg)}&[data-expand-all-button]{display:none}}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}[data-separator=line-info],[data-separator=line-info-basic]{& [data-separator-content]{user-select:none;height:100%;overflow:clip}}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified]{& [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi;& [data-separator-content]{border-radius:6px}}& [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}}[data-gutter]{& [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}& [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}& [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}}[data-additions]{& [data-content] [data-separator=line-info]{background-color:var(--diffs-bg);& [data-separator-wrapper]{display:none}}& [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block;& [data-separator-content],& [data-expand-button]{display:none}}}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block;& [data-separator-content],& [data-expand-button]{display:none}}[data-separator=line-info] [data-separator-wrapper]{& [data-expand-both],& [data-expand-down],& [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}}@media (pointer:fine){[data-separator=line-info] [data-separator-wrapper]{&[data-separator-multi-button]{& [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}& [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto;& [data-separator-content]{grid-column:unset;grid-row:unset}}@supports (width:1cqi){[data-separator=line-info] [data-separator-wrapper]{& [data-expand-both],& [data-expand-down],& [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}&[data-separator-multi-button]{& [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}& [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid;& [data-separator-content]{grid-area:1/2/-1;min-width:min-content}& [data-expand-button]{grid-column:1}}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}[data-separator=line-info],[data-separator=line-info-basic]{& [data-separator-multi-button]{& [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}& [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}[data-indicators=classic]{& [data-line-type=change-addition],& [data-line-type=change-deletion]{&[data-no-newline],&[data-line]{&:before{user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}}}& [data-line-type=change-addition]{&[data-line],&[data-no-newline]{&:before{content:"+";color:var(--diffs-addition-base)}}}& [data-line-type=change-deletion]{&[data-line],&[data-no-newline]{&:before{content:"-";color:var(--diffs-deletion-base)}}}}[data-indicators=bars]{& [data-line-type=change-deletion],& [data-line-type=change-addition]{&[data-column-number]{&:before{content:"";user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}}}& [data-line-type=change-deletion]{&[data-column-number]{&:before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh / round(1lh / 2px)) calc(1lh / round(1lh / 2px))}}}& [data-line-type=change-addition]{&[data-column-number]{&:before{background-color:var(--diffs-addition-base)}}}}[data-overflow=wrap]{& [data-line]{white-space:pre-wrap;word-break:break-word}& [data-annotation-content]{word-break:break-word}}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers]{& [data-gutter-buffer],& [data-column-number]{min-width:4px;padding:0;&:before{min-width:0}}& [data-line-number-content]{display:none}& [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}&[data-indicators=bars] [data-gutter-utility-slot]{left:6px}}[data-file][data-disable-line-numbers]{& [data-gutter-buffer],& [data-column-number]{border-right:0;min-width:0}}[data-diff-span]{box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex;&:after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + (var(--diffs-gap-block,var(--diffs-gap-fallback)) * 3));z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;white-space:normal;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(-1lh + 1ch);padding:0;display:flex;position:relative;&:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px;[data-decoration-bar-depth="1"] &{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] &{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] &{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] &{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] &{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto;& [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}& [data-error-stack]{color:var(--diffs-fg-number)}}}@layer theme,rendered,unsafe;\n';
5462
5563
 
5463
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cssWrappers.js
5564
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cssWrappers.js
5464
5565
  var LAYER_ORDER = `@layer base, theme, rendered, unsafe;`;
5465
5566
  var SCROLLBAR_GUTTER_DECLARATION_PATTERN = new RegExp(`${escapeRegExp(DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY)}\\s*:\\s*[^;]+;`);
5466
5567
  function wrapUnsafeCSS(unsafeCSS) {
@@ -5489,14 +5590,14 @@ function escapeRegExp(value) {
5489
5590
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5490
5591
  }
5491
5592
 
5492
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.js
5593
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.js
5493
5594
  var lineAnnotationSources = /* @__PURE__ */ new WeakMap();
5494
5595
  function getLineAnnotationSource(annotation) {
5495
5596
  const source = lineAnnotationSources.get(annotation);
5496
5597
  return source == null ? annotation : source;
5497
5598
  }
5498
5599
 
5499
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.js
5600
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.js
5500
5601
  function adoptEditSessionAnnotations(annotations, getName, previousSession) {
5501
5602
  const slotNames = /* @__PURE__ */ new Map();
5502
5603
  for (const annotation of annotations) {
@@ -5528,12 +5629,12 @@ function resolveEditSessionSlotName(session, annotation, getName) {
5528
5629
  return name;
5529
5630
  }
5530
5631
 
5531
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.js
5632
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.js
5532
5633
  function shouldUseTokenTransformer(options) {
5533
5634
  return options?.useTokenTransformer === true || options?.onTokenClick != null || options?.onTokenEnter != null || options?.onTokenLeave != null;
5534
5635
  }
5535
5636
 
5536
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.js
5637
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.js
5537
5638
  function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize = false } = {}) {
5538
5639
  if (code == null) {
5539
5640
  code = document.createElement("code");
@@ -5548,7 +5649,7 @@ function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize = f
5548
5649
  return code;
5549
5650
  }
5550
5651
 
5551
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/guardWebKitScrollDuringRebuild.js
5652
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/guardWebKitScrollDuringRebuild.js
5552
5653
  function guardWebKitScrollDuringRebuild(pre, rebuild) {
5553
5654
  const height = pre?.offsetHeight ?? 0;
5554
5655
  if (pre == null || height === 0) {
@@ -5564,7 +5665,7 @@ function guardWebKitScrollDuringRebuild(pre, rebuild) {
5564
5665
  }
5565
5666
  }
5566
5667
 
5567
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hostTheme.js
5668
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hostTheme.js
5568
5669
  function upsertHostThemeStyle({ shadowRoot, currentNode, themeCSS }) {
5569
5670
  if (themeCSS.trim() === "") {
5570
5671
  currentNode?.remove();
@@ -5581,20 +5682,20 @@ function createHostThemeStyleNode() {
5581
5682
  return node;
5582
5683
  }
5583
5684
 
5584
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/platform.js
5685
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/platform.js
5585
5686
  var _isSafari = void 0;
5586
5687
  function isSafari() {
5587
5688
  return _isSafari ??= "safari" in window && "pushNotification" in window.safari || /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
5588
5689
  }
5589
5690
 
5590
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/prerenderHTMLIfNecessary.js
5691
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/prerenderHTMLIfNecessary.js
5591
5692
  function prerenderHTMLIfNecessary(element, html) {
5592
5693
  if (html == null) return;
5593
5694
  const shadowRoot = element.shadowRoot ?? element.attachShadow({ mode: "open" });
5594
5695
  if (shadowRoot.innerHTML === "") shadowRoot.innerHTML = html;
5595
5696
  }
5596
5697
 
5597
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js
5698
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js
5598
5699
  function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, totalLines, customProperties }) {
5599
5700
  if (customProperties != null) for (const key in customProperties) {
5600
5701
  const value = customProperties[key];
@@ -5626,7 +5727,7 @@ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, di
5626
5727
  return pre;
5627
5728
  }
5628
5729
 
5629
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/web-components.js
5730
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/web-components.js
5630
5731
  if (typeof HTMLElement !== "undefined" && customElements.get("diffs-container") == null) {
5631
5732
  let sheet;
5632
5733
  class FileDiffContainer extends HTMLElement {
@@ -5648,7 +5749,7 @@ if (typeof HTMLElement !== "undefined" && customElements.get("diffs-container")
5648
5749
  customElements.define(DIFFS_TAG_NAME, FileDiffContainer);
5649
5750
  }
5650
5751
 
5651
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/awaitWithTimeout.js
5752
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/awaitWithTimeout.js
5652
5753
  async function awaitWithTimeout(callback, timeout = 300) {
5653
5754
  let timeoutId;
5654
5755
  try {
@@ -5660,7 +5761,7 @@ async function awaitWithTimeout(callback, timeout = 300) {
5660
5761
  }
5661
5762
  }
5662
5763
 
5663
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.js
5764
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.js
5664
5765
  function computeEstimatedDiffHeights({ fileDiff, metrics, disableFileHeader, hunkSeparators, expandUnchanged, expandedHunks: configuredExpandedHunks, collapsedContextThreshold, canHydratePartialDiff }) {
5665
5766
  let splitHeight = getVirtualFileHeaderRegion(metrics, disableFileHeader);
5666
5767
  let unifiedHeight = splitHeight;
@@ -5761,7 +5862,7 @@ function getChangeNoNewlineMetadataLineCounts(hunk, content) {
5761
5862
  };
5762
5863
  }
5763
5864
 
5764
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.js
5865
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.js
5765
5866
  function getDiffFileInput({ oldFile, newFile }, context) {
5766
5867
  if (oldFile === void 0 && newFile === void 0) return;
5767
5868
  if (oldFile === void 0 || newFile === void 0) throw new Error(`${context}: Pass null for an intentionally missing oldFile or newFile side`);
@@ -5782,7 +5883,7 @@ function getDiffFileInput({ oldFile, newFile }, context) {
5782
5883
  };
5783
5884
  }
5784
5885
 
5785
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.js
5886
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.js
5786
5887
  function cloneHunks(hunks) {
5787
5888
  return hunks.map((hunk) => ({
5788
5889
  ...hunk,
@@ -5798,18 +5899,18 @@ function cloneFileDiffMetadata(fileDiff) {
5798
5899
  };
5799
5900
  }
5800
5901
 
5801
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/composeCacheKey.js
5902
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/composeCacheKey.js
5802
5903
  var CACHE_KEY_VERSION = 1;
5803
5904
  function composeCacheKey(scope, ...segments) {
5804
5905
  return `ck${CACHE_KEY_VERSION}:${JSON.stringify([scope, ...segments])}`;
5805
5906
  }
5806
5907
 
5807
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/splitFileContents.js
5908
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/splitFileContents.js
5808
5909
  function splitFileContents(contents) {
5809
5910
  return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
5810
5911
  }
5811
5912
 
5812
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.js
5913
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.js
5813
5914
  function hydratePartialDiff(type, fileDiff, files) {
5814
5915
  const targetFileDiff = type === "clone" ? cloneFileDiffMetadata(fileDiff) : fileDiff;
5815
5916
  if (!targetFileDiff.isPartial) throw new Error("hydratePartialDiff: fileDiff must be partial");
@@ -5942,7 +6043,7 @@ function getLoadedFileCacheKey(oldFile, newFile) {
5942
6043
  return oldFile?.cacheKey ?? newFile?.cacheKey;
5943
6044
  }
5944
6045
 
5945
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/detachString.js
6046
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/detachString.js
5946
6047
  var stringDetachEncoder = new TextEncoder();
5947
6048
  var stringDetachDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
5948
6049
  var SURROGATE_CODE_UNIT_PATTERN = /[\uD800-\uDFFF]/;
@@ -5960,24 +6061,72 @@ function detachString(value) {
5960
6061
  return stringDetachDecoder.decode(stringDetachBuffer.subarray(0, written));
5961
6062
  }
5962
6063
 
5963
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/realignChangeContent.js
6064
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseQuotedDiffFileName.js
6065
+ var filenameDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
6066
+ var NAMED_ESCAPES = {
6067
+ '"': '"',
6068
+ "\\": "\\",
6069
+ a: "\x07",
6070
+ b: "\b",
6071
+ t: " ",
6072
+ n: "\n",
6073
+ v: "\v",
6074
+ f: "\f",
6075
+ r: "\r"
6076
+ };
6077
+ function parseQuotedDiffFileName(input) {
6078
+ if (input[0] !== '"') return;
6079
+ let fileName = "";
6080
+ let index = 1;
6081
+ while (index < input.length) {
6082
+ const char = input[index];
6083
+ if (char === '"') return {
6084
+ fileName,
6085
+ rawLength: index + 1
6086
+ };
6087
+ if (char !== "\\") {
6088
+ fileName += char;
6089
+ index++;
6090
+ continue;
6091
+ }
6092
+ const escaped = NAMED_ESCAPES[input[index + 1]];
6093
+ if (escaped != null) {
6094
+ fileName += escaped;
6095
+ index += 2;
6096
+ continue;
6097
+ }
6098
+ const bytes = [];
6099
+ do {
6100
+ const byte = readOctalByte(input, index + 1);
6101
+ if (byte == null) return;
6102
+ bytes.push(byte);
6103
+ index += 4;
6104
+ } while (input[index] === "\\" && input[index + 1] >= "0" && input[index + 1] <= "7");
6105
+ fileName += filenameDecoder.decode(new Uint8Array(bytes));
6106
+ }
6107
+ }
6108
+ function readOctalByte(input, index) {
6109
+ const first = input.charCodeAt(index) - 48;
6110
+ const second = input.charCodeAt(index + 1) - 48;
6111
+ const third = input.charCodeAt(index + 2) - 48;
6112
+ if (first >= 0 && first <= 3 && second >= 0 && second <= 7 && third >= 0 && third <= 7) return first * 64 + second * 8 + third;
6113
+ }
6114
+
6115
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/realignChangeContent.js
5964
6116
  var MAX_ALIGNMENT_COMPARISONS = 4096;
5965
6117
  var MIN_IMPROVEMENT_PER_PAIR = 0.5;
5966
6118
  function realignChangeContentBySimilarity(diff) {
5967
- for (const hunk of diff.hunks) {
5968
- for (let index = 0; index < hunk.hunkContent.length; index++) {
5969
- const content = hunk.hunkContent[index];
5970
- if (content.type !== "change") continue;
5971
- const replacement = realignChangeBlock(diff, content);
5972
- if (replacement != null) {
5973
- hunk.hunkContent.splice(index, 1, ...replacement);
5974
- index += replacement.length - 1;
5975
- }
6119
+ for (const hunk of diff.hunks) for (let index = 0; index < hunk.hunkContent.length; index++) {
6120
+ const content = hunk.hunkContent[index];
6121
+ if (content.type !== "change") continue;
6122
+ const replacement = realignChangeBlock(diff, content);
6123
+ if (replacement != null) {
6124
+ hunk.hunkContent.splice(index, 1, ...replacement);
6125
+ index += replacement.length - 1;
5976
6126
  }
5977
- slideBlankBoundaryBlocksUp(hunk, diff);
5978
6127
  }
5979
6128
  }
5980
- function slideBlankBoundaryBlocksUp(hunk, diff) {
6129
+ function slideBlankBoundaryBlocksUp(hunk, diff, resolveSlide) {
5981
6130
  const { hunkContent } = hunk;
5982
6131
  for (let index = 1; index < hunkContent.length; index++) {
5983
6132
  const block = hunkContent[index];
@@ -5999,6 +6148,10 @@ function slideBlankBoundaryBlocksUp(hunk, diff) {
5999
6148
  while (slide < previous.lines && diff.additionLines[previous.additionLineIndex + previous.lines - 1 - slide] === unit) slide++;
6000
6149
  if (slide === 0) continue;
6001
6150
  if (index === 1 && slide === previous.lines) continue;
6151
+ if (resolveSlide != null) {
6152
+ slide = resolveSlide(block, slide);
6153
+ if (slide === 0) continue;
6154
+ }
6002
6155
  block.additionLineIndex -= slide;
6003
6156
  block.deletionLineIndex -= slide;
6004
6157
  const blockAdditionEnd = block.additionLineIndex + block.additions;
@@ -6080,7 +6233,8 @@ function lineSimilarity(a, b) {
6080
6233
  return (prefix + suffix) / maxLength;
6081
6234
  }
6082
6235
 
6083
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js
6236
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js
6237
+ var GIT_DIFF_HEADER_FILENAMES = /^diff --git ("a\/(?:[^"\\]|\\.)*"|a\/.+?) ("b\/(?:[^"\\]|\\.)*"|b\/.+?)$/;
6084
6238
  function processFile(fileDiffString, options) {
6085
6239
  try {
6086
6240
  return _processFile(fileDiffString, options);
@@ -6127,26 +6281,27 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6127
6281
  if (currentFile.deletionLines.length === 1 && oldFile?.contents === "") currentFile.deletionLines.length = 0;
6128
6282
  for (const line of lines) {
6129
6283
  if (line.startsWith("diff --git")) {
6130
- const filenameMatch2 = line.trim().match(ALTERNATE_FILE_NAMES_GIT);
6131
- const prevName = filenameMatch2?.[1] ?? filenameMatch2?.[2];
6132
- const name = filenameMatch2?.[3] ?? filenameMatch2?.[4];
6133
- if (prevName == null || name == null) {
6284
+ const filenameMatch2 = line.trim().match(GIT_DIFF_HEADER_FILENAMES);
6285
+ if (filenameMatch2 == null) {
6134
6286
  if (throwOnError) throw Error("parsePatchContent: invalid git diff header");
6135
6287
  else console.error("parsePatchContent: invalid git diff header", line);
6136
6288
  continue;
6137
6289
  }
6138
- currentFile.name = detachString(name.trim());
6139
- if (prevName !== name) currentFile.prevName = detachString(prevName.trim());
6290
+ const prevName = decodeDiffFileName(filenameMatch2[1], true);
6291
+ const name = decodeDiffFileName(filenameMatch2[2], true);
6292
+ currentFile.name = detachString(name);
6293
+ if (prevName !== name) currentFile.prevName = detachString(prevName);
6140
6294
  continue;
6141
6295
  }
6142
- const filenameMatch = line.startsWith("---") || line.startsWith("+++") ? line.match(isGitDiff ? FILENAME_HEADER_REGEX_GIT : FILENAME_HEADER_REGEX) : null;
6296
+ const filenameMatch = line.startsWith("---") || line.startsWith("+++") ? line.match(FILENAME_HEADER_REGEX) : null;
6143
6297
  if (filenameMatch != null) {
6144
- const [, type, fileName] = filenameMatch;
6298
+ const [, type, rawFileName] = filenameMatch;
6299
+ const fileName = decodeDiffFileName(rawFileName, isGitDiff);
6145
6300
  if (type === "---" && fileName !== "/dev/null") {
6146
- const detachedFileName = detachString(fileName.trim());
6301
+ const detachedFileName = detachString(fileName);
6147
6302
  currentFile.prevName = detachedFileName;
6148
6303
  currentFile.name = detachedFileName;
6149
- } else if (type === "+++" && fileName !== "/dev/null") currentFile.name = detachString(fileName.trim());
6304
+ } else if (type === "+++" && fileName !== "/dev/null") currentFile.name = detachString(fileName);
6150
6305
  } else if (isGitDiff) {
6151
6306
  if (line.startsWith("new mode ")) currentFile.mode = detachString(line.slice(8).trim());
6152
6307
  if (line.startsWith("old mode ")) currentFile.prevMode = detachString(line.slice(8).trim());
@@ -6168,8 +6323,8 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6168
6323
  if (newObjectId != null) currentFile.newObjectId = detachString(newObjectId);
6169
6324
  if (mode != null) currentFile.mode = detachString(mode);
6170
6325
  }
6171
- if (line.startsWith("rename from ")) currentFile.prevName = detachString(line.slice(12).trim());
6172
- if (line.startsWith("rename to ")) currentFile.name = detachString(line.slice(10).trim());
6326
+ if (line.startsWith("rename from ") || line.startsWith("copy from ")) currentFile.prevName = detachString(decodeDiffFileName(line.slice(line.startsWith("rename") ? 12 : 10)));
6327
+ if (line.startsWith("rename to ") || line.startsWith("copy to ")) currentFile.name = detachString(decodeDiffFileName(line.slice(line.startsWith("rename") ? 10 : 8)));
6173
6328
  }
6174
6329
  }
6175
6330
  continue;
@@ -6333,6 +6488,11 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6333
6488
  realignChangeContentBySimilarity(currentFile);
6334
6489
  return currentFile;
6335
6490
  }
6491
+ function decodeDiffFileName(value, stripGitPrefix = false) {
6492
+ const rawName = value.trim();
6493
+ const name = rawName.startsWith('"') ? parseQuotedDiffFileName(rawName)?.fileName ?? rawName : rawName;
6494
+ return stripGitPrefix && (name.startsWith("a/") || name.startsWith("b/")) ? name.slice(2) : name;
6495
+ }
6336
6496
  function splitFileContents2(contents) {
6337
6497
  const lines = splitWithNewlines(contents);
6338
6498
  for (let index = 0; index < lines.length; index++) lines[index] = detachString(lines[index]);
@@ -6469,7 +6629,7 @@ function createContentGroup(type, deletionLineIndex, additionLineIndex) {
6469
6629
  };
6470
6630
  }
6471
6631
 
6472
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js
6632
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js
6473
6633
  var MISSING_FILE_NAME = "/dev/null";
6474
6634
  function parseDiffFromFile(oldFile, newFile, options, throwOnError = false) {
6475
6635
  if (oldFile === null && newFile === null) throw new Error("parseDiffFromFile: You must pass oldFile, newFile, or both");
@@ -6505,7 +6665,7 @@ function createMissingFile() {
6505
6665
  };
6506
6666
  }
6507
6667
 
6508
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/ScrollSyncManager.js
6668
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/managers/ScrollSyncManager.js
6509
6669
  var ScrollSyncManager = class {
6510
6670
  isDeletionsScrolling = false;
6511
6671
  isAdditionsScrolling = false;
@@ -6564,7 +6724,7 @@ var ScrollSyncManager = class {
6564
6724
  };
6565
6725
  };
6566
6726
 
6567
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.js
6727
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.js
6568
6728
  function recomputeDiffHunks(diff, parseDiffOptions) {
6569
6729
  const recomputed = parseDiffFromFile({
6570
6730
  name: diff.prevName ?? diff.name,
@@ -6792,7 +6952,7 @@ function recomputeDiffRenderLineCounts(diff) {
6792
6952
  diff.unifiedLineCount = unifiedTotal;
6793
6953
  }
6794
6954
 
6795
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/editSessionHunks.js
6955
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/editSessionHunks.js
6796
6956
  var deletionLineSetCache = /* @__PURE__ */ new WeakMap();
6797
6957
  function normalizeEditorLines(lines) {
6798
6958
  if (lines.length > 1 && lines[lines.length - 1] === "") return lines.slice(0, -1);
@@ -6815,7 +6975,7 @@ function findDivergenceCore(deletionLines, additionLines) {
6815
6975
  additionEnd
6816
6976
  };
6817
6977
  }
6818
- function rebuildSessionHunks(diff, parseDiffOptions) {
6978
+ function rebuildSessionHunks(diff, parseDiffOptions, getPreviousAdditionLine) {
6819
6979
  const previousHunks = diff.hunks;
6820
6980
  const editorAdditionLines = diff.additionLines;
6821
6981
  const canonicalAdditionLines = normalizeEditorLines(editorAdditionLines);
@@ -6823,7 +6983,7 @@ function rebuildSessionHunks(diff, parseDiffOptions) {
6823
6983
  ...diff,
6824
6984
  additionLines: canonicalAdditionLines
6825
6985
  };
6826
- const plans = buildRegionPlans(previousHunks, parseCanonicalChangeBlocks(canonicalDiff, parseDiffOptions), diff.deletionLines.length);
6986
+ const plans = buildRegionPlans(previousHunks, parseSessionChangeBlocks(canonicalDiff, parseDiffOptions, getPreviousAdditionLine), diff.deletionLines.length);
6827
6987
  const nextHunks = buildRegionHunks(canonicalDiff, plans);
6828
6988
  diff.additionLines = canonicalAdditionLines;
6829
6989
  diff.hunks = nextHunks;
@@ -6834,8 +6994,10 @@ function rebuildSessionHunks(diff, parseDiffOptions) {
6834
6994
  return { regions: plans.map((plan) => plan.previousSpan) };
6835
6995
  }
6836
6996
  function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOptions, previousAdditionLines) {
6837
- const lines = Array.from(new Set(changedAdditionLineIndexes)).filter((line) => line >= 0 && line < diff.additionLines.length).sort((a, b) => a - b);
6997
+ const changedLines = new Set(changedAdditionLineIndexes);
6998
+ const lines = Array.from(changedLines).filter((line) => line >= 0 && line < diff.additionLines.length).sort((a, b) => a - b);
6838
6999
  if (lines.length === 0) return;
7000
+ const getPreviousAdditionLine = (index) => changedLines.has(index) ? previousAdditionLines?.get(index) : diff.additionLines[index];
6839
7001
  const { hunks } = diff;
6840
7002
  let regionIndex;
6841
7003
  let hunkIndex = 0;
@@ -6847,7 +7009,7 @@ function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOpt
6847
7009
  }
6848
7010
  const hunk = hunks[hunkIndex];
6849
7011
  const start = hunk == null ? void 0 : getHunkAdditionStart(hunk);
6850
- if (start == null || line < start || regionIndex != null && regionIndex !== hunkIndex) return rebuildSessionHunks(diff, parseDiffOptions);
7012
+ if (start == null || line < start || regionIndex != null && regionIndex !== hunkIndex) return rebuildSessionHunks(diff, parseDiffOptions, getPreviousAdditionLine);
6851
7013
  regionIndex = hunkIndex;
6852
7014
  }
6853
7015
  if (regionIndex == null) return;
@@ -6855,7 +7017,7 @@ function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOpt
6855
7017
  diff.editSessionDirty = true;
6856
7018
  return;
6857
7019
  }
6858
- return rebuildSessionHunks(diff, parseDiffOptions);
7020
+ return rebuildSessionHunks(diff, parseDiffOptions, getPreviousAdditionLine);
6859
7021
  }
6860
7022
  function canRetainCanonicalBlocks(diff, changedLines, regionIndex, previousAdditionLines, parseDiffOptions) {
6861
7023
  if (previousAdditionLines == null || parseDiffOptions?.ignoreWhitespace === true || parseDiffOptions?.stripTrailingCr === true) return false;
@@ -6967,7 +7129,7 @@ function finishEditSessionForDiff(diff, parseDiffOptions) {
6967
7129
  Object.assign(diff, diff.additionLines.length <= 1 && diff.additionLines.join("") === "" ? recomputeDiffHunks(diff, parseDiffOptions) : recomputeDiffHunksForEdit(diff, parseDiffOptions));
6968
7130
  return true;
6969
7131
  }
6970
- function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
7132
+ function parseSessionChangeBlocks(diff, parseDiffOptions, getPreviousAdditionLine) {
6971
7133
  if (findDivergenceCore(diff.deletionLines, diff.additionLines) == null) return [];
6972
7134
  const parsed = parseDiffFromFile({
6973
7135
  name: diff.prevName ?? diff.name,
@@ -6977,10 +7139,24 @@ function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
6977
7139
  contents: diff.additionLines.join(""),
6978
7140
  lang: diff.lang
6979
7141
  }, parseDiffOptions);
7142
+ let previousBlocks;
7143
+ const resolveSlide = (block, maxSlide) => {
7144
+ previousBlocks ??= collectPureChangeBlocks(diff.hunks);
7145
+ for (let offset = 0; offset <= maxSlide; offset++) {
7146
+ const previous = previousBlocks.get(block.deletionLineIndex - offset);
7147
+ if (previous == null || previous.additions !== block.additions || previous.deletions !== block.deletions) continue;
7148
+ if (block.additions > 0 && getPreviousAdditionLine != null) {
7149
+ for (let line = 0; line < block.additions; line++) if (getPreviousAdditionLine(previous.additionLineIndex + line) !== parsed.additionLines[block.additionLineIndex + line]) return maxSlide;
7150
+ }
7151
+ return offset;
7152
+ }
7153
+ return maxSlide;
7154
+ };
6980
7155
  const blocks = [];
6981
7156
  let coveredAdditions = 0;
6982
7157
  let coveredDeletions = 0;
6983
7158
  for (const hunk of parsed.hunks) {
7159
+ slideBlankBoundaryBlocksUp(hunk, parsed, resolveSlide);
6984
7160
  const contextLines = hunk.additionCount > 0 ? hunk.additionLineIndex - coveredAdditions : hunk.deletionLineIndex - coveredDeletions;
6985
7161
  coveredAdditions += contextLines;
6986
7162
  coveredDeletions += contextLines;
@@ -7000,6 +7176,11 @@ function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
7000
7176
  }
7001
7177
  return blocks;
7002
7178
  }
7179
+ function collectPureChangeBlocks(hunks) {
7180
+ const blocks = /* @__PURE__ */ new Map();
7181
+ for (const hunk of hunks) for (const content of hunk.hunkContent) if (content.type === "change" && (content.additions === 0 || content.deletions === 0)) blocks.set(content.deletionLineIndex, content);
7182
+ return blocks;
7183
+ }
7003
7184
  function buildRegionPlans(previousHunks, blocks, deletionLineCount) {
7004
7185
  const previousPlans = previousHunks.map((hunk, index) => {
7005
7186
  const deletionStart = getHunkDeletionStart(hunk);
@@ -7191,7 +7372,7 @@ function finalizeSessionHunks(diff) {
7191
7372
  for (let index = 0; index < diff.hunks.length; index++) syncHunkNoEOFCRFromFullFile(diff, index);
7192
7373
  }
7193
7374
 
7194
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.js
7375
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.js
7195
7376
  function createEmptyRowBuffer(size) {
7196
7377
  return createHastElement({
7197
7378
  tagName: "div",
@@ -7203,7 +7384,7 @@ function createEmptyRowBuffer(size) {
7203
7384
  });
7204
7385
  }
7205
7386
 
7206
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.js
7387
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.js
7207
7388
  function createNoNewlineElement(type) {
7208
7389
  return createHastElement({
7209
7390
  tagName: "div",
@@ -7219,7 +7400,7 @@ function createNoNewlineElement(type) {
7219
7400
  });
7220
7401
  }
7221
7402
 
7222
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createSeparator.js
7403
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/createSeparator.js
7223
7404
  function createExpandButton(type) {
7224
7405
  return createHastElement({
7225
7406
  tagName: "div",
@@ -7304,19 +7485,19 @@ function createSeparator({ type, content, expandIndex, chunked = false, slotName
7304
7485
  });
7305
7486
  }
7306
7487
 
7307
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.js
7488
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.js
7308
7489
  function getHunkSeparatorSlotName(type, hunkIndex) {
7309
7490
  return `hunk-separator-${type}-${hunkIndex}`;
7310
7491
  }
7311
7492
 
7312
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.js
7493
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.js
7313
7494
  function getTotalLineCountFromHunks(hunks) {
7314
7495
  const lastHunk = hunks.at(-1);
7315
7496
  if (lastHunk == null) return 0;
7316
7497
  return Math.max(getHunkSideEndBoundary(lastHunk.additionStart, lastHunk.additionCount), getHunkSideEndBoundary(lastHunk.deletionStart, lastHunk.deletionCount));
7317
7498
  }
7318
7499
 
7319
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js
7500
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js
7320
7501
  var instanceId = -1;
7321
7502
  var DiffHunksRenderer = class {
7322
7503
  options;
@@ -7342,6 +7523,7 @@ var DiffHunksRenderer = class {
7342
7523
  if (workerManager?.isWorkingPool() !== true) this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES) ? getHighlighterIfLoaded() : void 0;
7343
7524
  }
7344
7525
  cleanUp() {
7526
+ this.endEditSession();
7345
7527
  this.recycle();
7346
7528
  this.expandedHunks.clear();
7347
7529
  this.workerManager = void 0;
@@ -7350,11 +7532,14 @@ var DiffHunksRenderer = class {
7350
7532
  recycle() {
7351
7533
  this.highlighter = void 0;
7352
7534
  this.diff = void 0;
7353
- this.clearRenderCache();
7535
+ if (this.editSessionActive) {
7536
+ if (this.renderCache != null) this.renderCache.renderRange = void 0;
7537
+ this.pendingHighlightResult = void 0;
7538
+ this.pendingStructuralRows = void 0;
7539
+ } else this.clearRenderCache();
7354
7540
  this.additionAnnotations = {};
7355
7541
  this.deletionAnnotations = {};
7356
7542
  this.workerManager?.cleanUpTasks(this);
7357
- this.endEditSession();
7358
7543
  }
7359
7544
  /**
7360
7545
  * Enter edit-session mode: hunk updates preserve the current region
@@ -7366,10 +7551,12 @@ var DiffHunksRenderer = class {
7366
7551
  * empty additions document gets one row for the editor's caret.
7367
7552
  */
7368
7553
  beginEditSession(diff, externalDiff) {
7369
- const { editSessionActive: wasAlreadyActive, renderCache } = this;
7554
+ const { editSessionActive: wasAlreadyActive } = this;
7370
7555
  this.editSessionActive = true;
7371
7556
  if (!wasAlreadyActive) this.pendingHighlightResult = void 0;
7372
7557
  this.diff = diff;
7558
+ if (wasAlreadyActive && this.renderCache != null && this.renderCache.diff !== diff) this.clearRenderCache();
7559
+ const { renderCache } = this;
7373
7560
  if (!diff.isPartial && diff.additionLines.length === 0) {
7374
7561
  Object.assign(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7375
7562
  this.markEditSessionPass(diff);
@@ -7405,6 +7592,7 @@ var DiffHunksRenderer = class {
7405
7592
  endEditSession() {
7406
7593
  this.editSessionActive = false;
7407
7594
  this.pendingHighlightResult = void 0;
7595
+ if (this.diff == null) this.clearRenderCache();
7408
7596
  }
7409
7597
  /**
7410
7598
  * Ensures that the DOM is compatible with editor render updates
@@ -7593,31 +7781,31 @@ var DiffHunksRenderer = class {
7593
7781
  applyDocumentChange(textDocument) {
7594
7782
  const { pendingStructuralRows, renderCache } = this;
7595
7783
  this.pendingStructuralRows = void 0;
7596
- if (renderCache == null) return;
7597
- const { diff, result } = renderCache;
7598
- if (result == null) return;
7784
+ const diff = this.diff ?? renderCache?.diff;
7785
+ if (diff == null) return;
7786
+ const result = renderCache?.result;
7599
7787
  if (diff.isPartial) throw new Error("Could not apply document change for partial diff");
7600
7788
  const { additionLines: previousAdditionLines } = diff;
7601
7789
  diff.additionLines = getEditorDocumentLines(textDocument);
7602
- result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
7790
+ if (result != null) result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
7603
7791
  if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
7604
7792
  this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7605
- result.code.additionLines[0] = createPlainAdditionLineElement(0, textDocument.getLineText(0));
7606
- } else if (this.editSessionActive) this.applySessionDocumentChange(diff);
7793
+ if (result != null) result.code.additionLines[0] = createPlainAdditionLineElement(0, textDocument.getLineText(0));
7794
+ } else if (this.editSessionActive) this.applySessionDocumentChange(diff, previousAdditionLines);
7607
7795
  else Object.assign(diff, recomputeDiffHunksForEdit(diff, this.options.parseDiffOptions));
7608
- if (pendingStructuralRows != null) {
7796
+ if (pendingStructuralRows != null && result != null) {
7609
7797
  for (const [line, row] of pendingStructuralRows) if (line < result.code.additionLines.length) result.code.additionLines[line] = row;
7610
7798
  }
7611
- renderCache.isDirty = true;
7799
+ if (renderCache != null) renderCache.isDirty = true;
7612
7800
  }
7613
- applySessionDocumentChange(diff) {
7801
+ applySessionDocumentChange(diff, previousAdditionLines) {
7614
7802
  const { parseDiffOptions } = this.options;
7615
7803
  const rawLines = diff.additionLines;
7616
7804
  if (shouldTopAlignAdditionRecompute(diff, rawLines)) {
7617
7805
  this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, parseDiffOptions));
7618
7806
  return;
7619
7807
  }
7620
- this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions));
7808
+ this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions, (index) => previousAdditionLines[index]));
7621
7809
  }
7622
7810
  applyRecomputePreservingSessionType(diff, update) {
7623
7811
  const sessionType = this.editSessionActive ? diff.type : void 0;
@@ -8554,17 +8742,17 @@ function canHydrateCollapsedContext(fileDiff, hasFileLoader) {
8554
8742
  return fileDiff.isPartial && hasFileLoader && (fileDiff.type === "change" || fileDiff.type === "rename-changed");
8555
8743
  }
8556
8744
 
8557
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.js
8745
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.js
8558
8746
  function areDiffLineAnnotationsEqual(annotationA, annotationB) {
8559
8747
  return annotationA.lineNumber === annotationB.lineNumber && annotationA.side === annotationB.side && annotationA.metadata === annotationB.metadata;
8560
8748
  }
8561
8749
 
8562
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.js
8750
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.js
8563
8751
  function areHunkDataEqual(hunkA, hunkB) {
8564
8752
  return hunkA.slotName === hunkB.slotName && hunkA.hunkIndex === hunkB.hunkIndex && hunkA.lines === hunkB.lines && hunkA.lineCountKnown === hunkB.lineCountKnown && hunkA.type === hunkB.type && hunkA.expandable?.chunked === hunkB.expandable?.chunked && hunkA.expandable?.up === hunkB.expandable?.up && hunkA.expandable?.down === hunkB.expandable?.down;
8565
8753
  }
8566
8754
 
8567
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.js
8755
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.js
8568
8756
  function getDiffHunksRendererOptions(options) {
8569
8757
  return {
8570
8758
  theme: options?.theme,
@@ -8593,7 +8781,7 @@ function getDiffHunksRendererOptions(options) {
8593
8781
  };
8594
8782
  }
8595
8783
 
8596
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/FileDiff.js
8784
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/FileDiff.js
8597
8785
  function canHydrateDiff(fileDiff) {
8598
8786
  return fileDiff.isPartial && (fileDiff.type === "change" || fileDiff.type === "rename-changed" || fileDiff.type === "rename-pure");
8599
8787
  }
@@ -9050,13 +9238,14 @@ var FileDiff2 = class {
9050
9238
  this.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9051
9239
  };
9052
9240
  expandHunk = (hunkIndex, direction, expansionLineCountOverride) => {
9053
- this.hunksRenderer.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9054
9241
  this.loadFilesIfNecessary();
9242
+ this.hunksRenderer.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9055
9243
  this.rerender();
9056
9244
  };
9057
9245
  loadFilesIfNecessary() {
9058
9246
  const { fileDiff, options: { loadDiffFiles } } = this;
9059
- if (fileDiff == null || loadDiffFiles == null || !canHydrateDiff(fileDiff) || this.pendingFiles?.fileDiff === fileDiff) return;
9247
+ if (fileDiff == null || !canHydrateDiff(fileDiff) || this.pendingFiles?.fileDiff === fileDiff) return;
9248
+ if (loadDiffFiles == null) throw new Error("FileDiff: loadDiffFiles is required to load full files for a partial diff");
9060
9249
  const promise = this.loadFilesForDiff(fileDiff, loadDiffFiles);
9061
9250
  const pendingFiles = this.pendingFiles = {
9062
9251
  fileDiff,
@@ -9067,10 +9256,41 @@ var FileDiff2 = class {
9067
9256
  };
9068
9257
  pendingFiles.promise = promise.finally(clearPendingFiles);
9069
9258
  }
9259
+ /**
9260
+ * In order to start an edit session, you must be using a `fileDiff` that
9261
+ * includes the full contents for both files. In other words, `isPartial`
9262
+ * must be false You can use `prepareForEditing` to hydrate if
9263
+ * `loadDiffFiles` was passed in to `options`
9264
+ */
9265
+ __canAttachEditor() {
9266
+ return this.fileDiff != null && !this.fileDiff.isPartial;
9267
+ }
9268
+ /**
9269
+ * Load a partial diff before starting a new edit session. Call this before
9270
+ * Editor.edit when the diff may still be partial; it resolves only when this
9271
+ * instance has a complete diff to edit.
9272
+ */
9273
+ async prepareForEditing() {
9274
+ if (this.__canAttachEditor()) return;
9275
+ const pending = this.__prepareForEditing();
9276
+ if (pending == null) {
9277
+ if (this.fileDiff?.isPartial === true && !canHydrateDiff(this.fileDiff)) throw new Error("FileDiff.prepareForEditing: this partial diff cannot be hydrated; provide a complete diff");
9278
+ throw new Error("FileDiff.prepareForEditing: a partial diff requires loadDiffFiles");
9279
+ }
9280
+ await pending;
9281
+ if (!this.__canAttachEditor()) throw new Error("FileDiff.prepareForEditing: the diff did not finish loading");
9282
+ }
9283
+ /** Hydrate a diff if necessary */
9284
+ __prepareForEditing() {
9285
+ if (this.__canAttachEditor()) return;
9286
+ if (this.fileDiff?.isPartial === true && !canHydrateDiff(this.fileDiff)) throw new Error("FileDiff: this partial diff cannot be hydrated; provide a complete diff to edit");
9287
+ this.loadFilesIfNecessary();
9288
+ return this.pendingFiles?.promise;
9289
+ }
9070
9290
  async loadFilesForDiff(fileDiff, loadDiffFiles) {
9071
9291
  try {
9072
9292
  const files = await loadDiffFiles(fileDiff);
9073
- if (!this.enabled || this.fileDiff !== fileDiff) return;
9293
+ if (this.fileDiff !== fileDiff) return;
9074
9294
  await this.handleFilesLoaded(fileDiff, files);
9075
9295
  } catch (error) {
9076
9296
  if (this.options.disableErrorHandling === true) throw error;
@@ -9081,7 +9301,7 @@ var FileDiff2 = class {
9081
9301
  if (this.fileDiff !== expectedDiff || !expectedDiff.isPartial) return;
9082
9302
  hydratePartialDiff("merge", expectedDiff, files);
9083
9303
  this.setHydratedState(files);
9084
- if (this.startHydratedEditSession(expectedDiff)) {
9304
+ if (this.installHydratedSessionDiff(expectedDiff)) {
9085
9305
  this.rerender();
9086
9306
  return;
9087
9307
  }
@@ -9089,17 +9309,14 @@ var FileDiff2 = class {
9089
9309
  if (!this.enabled || this.fileDiff !== expectedDiff) return;
9090
9310
  this.rerender();
9091
9311
  }
9092
- startHydratedEditSession(expectedDiff) {
9093
- if (expectedDiff.isPartial) throw new Error("FileDiff.startHydratedEditSession: diffs cannot be partial for editing");
9312
+ installHydratedSessionDiff(expectedDiff) {
9313
+ if (expectedDiff.isPartial) throw new Error("FileDiff.installHydratedSessionDiff: diffs cannot be partial for editing");
9094
9314
  if (this.fileDiff !== expectedDiff) return false;
9095
- const { editor } = this;
9096
9315
  if (this.editSession?.outgoingDiff != null) {
9097
9316
  this.installEditSession(expectedDiff);
9098
9317
  return true;
9099
9318
  }
9100
- if (editor == null || this.editSession != null) return false;
9101
- this.installEditSession(expectedDiff, editor.__getDocumentContents(getAdditionFile(expectedDiff)), editor.__getDocumentSessionState());
9102
- return true;
9319
+ return false;
9103
9320
  }
9104
9321
  updateExternalDiff(incomingExternalDiff, lineAnnotations) {
9105
9322
  if (areDiffTargetsEqual(this.fileDiff, incomingExternalDiff)) return false;
@@ -9109,9 +9326,6 @@ var FileDiff2 = class {
9109
9326
  if (incomingExternalDiff.isPartial) this.loadFilesIfNecessary();
9110
9327
  else this.installEditSession(incomingExternalDiff);
9111
9328
  if (this.editSession != null) this.editSession.outgoingDiff = outgoingDiff;
9112
- } else if (this.editor != null) {
9113
- if (incomingExternalDiff.isPartial) this.loadFilesIfNecessary();
9114
- else this.installEditSession(incomingExternalDiff, this.editor.__getDocumentContents(getAdditionFile(incomingExternalDiff)), this.editor.__getDocumentSessionState());
9115
9329
  }
9116
9330
  if (this.editSession?.annotations != null && lineAnnotations != null) {
9117
9331
  this.lineAnnotations = lineAnnotations;
@@ -9297,9 +9511,9 @@ var FileDiff2 = class {
9297
9511
  const sync = (highlighter3) => {
9298
9512
  if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getLatestDiff() !== fileDiff) return;
9299
9513
  const replacement = this.editSession?.outgoingDiff;
9300
- const externalDiff = this.fileDiff;
9514
+ const { fileDiff: externalDiff } = this;
9301
9515
  const externalDocument = replacement != null && externalDiff != null && replacement !== fileDiff;
9302
- const resetHistory = externalDocument ? shouldResetUndoState(replacement, externalDiff) : false;
9516
+ const resetHistory = externalDocument && replacement != null && externalDiff != null ? shouldResetUndoState(replacement, externalDiff) : false;
9303
9517
  editor.__syncRenderView({
9304
9518
  highlighter: highlighter3,
9305
9519
  fileContainer,
@@ -9396,6 +9610,7 @@ var FileDiff2 = class {
9396
9610
  __attachEditor(editor) {
9397
9611
  if (this.type !== "file-diff") throw new Error(`FileDiff.__attachEditor: cannot attach an editor to a "${this.type}" diff`);
9398
9612
  if (this.editor != null) throw new Error("FileDiff.__attachEditor: an editor is already attached");
9613
+ if (!this.__canAttachEditor()) throw new Error("FileDiff.__attachEditor: a complete diff is required before editing");
9399
9614
  const detach = () => {
9400
9615
  this.editor = void 0;
9401
9616
  this.finishEditSession();
@@ -9539,6 +9754,11 @@ var FileDiff2 = class {
9539
9754
  this.rerender();
9540
9755
  this.interactionManager.setSelectionDirty();
9541
9756
  }
9757
+ /** Update the private diff without editor DOM, then rehighlight on return. */
9758
+ applySuspendedDocumentChange(textDocument, newLineAnnotations) {
9759
+ this.applyDocumentChange(textDocument, newLineAnnotations);
9760
+ this.hunksRenderer.clearRenderCache();
9761
+ }
9542
9762
  updateRenderCache(dirtyLines, themeType, options = {}) {
9543
9763
  const editSessionDiff = this.editSession?.diff;
9544
9764
  if (editSessionDiff == null) throw new Error("FileDiff.updateRenderCache: requires an active edit session");
@@ -9679,6 +9899,10 @@ var FileDiff2 = class {
9679
9899
  this.placeHolder.dataset.placeholder = "";
9680
9900
  shadowRoot.appendChild(this.placeHolder);
9681
9901
  }
9902
+ return this.setPlaceholderHeight(height);
9903
+ }
9904
+ setPlaceholderHeight(height) {
9905
+ if (this.placeHolder == null) return false;
9682
9906
  this.placeHolder.style.setProperty("height", `${height}px`);
9683
9907
  return true;
9684
9908
  }
@@ -10530,7 +10754,7 @@ function getElementChildren(node) {
10530
10754
  return node.children ?? [];
10531
10755
  }
10532
10756
 
10533
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js
10757
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js
10534
10758
  var VIRTUALIZED_FILE_DIFF_LAYOUT_CHECKPOINT_INTERVAL = 3e3;
10535
10759
  var NO_GHOST_TEXT_ROWS = /* @__PURE__ */ new Map();
10536
10760
  var instanceId3 = -1;
@@ -10572,7 +10796,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10572
10796
  this.resetLayoutCache({ includeEstimatedHeights: true });
10573
10797
  }
10574
10798
  setLineAnnotations(lineAnnotations) {
10575
- if (this.syncLineAnnotations(lineAnnotations)) this.resetLayoutCache({ includeEstimatedHeights: false });
10799
+ if (this.syncLineAnnotations(lineAnnotations)) this.forceRenderOverride = true;
10576
10800
  }
10577
10801
  syncLineAnnotations(lineAnnotations) {
10578
10802
  if (lineAnnotations == null || !this.isNewAnnotations(lineAnnotations) || lineAnnotations.length === 0 && this.getLatestAnnotations().length === 0) return false;
@@ -10581,7 +10805,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10581
10805
  }
10582
10806
  syncEditSessionAnnotationsFromEditor(lineAnnotations) {
10583
10807
  if (super.syncEditSessionAnnotationsFromEditor(lineAnnotations)) {
10584
- this.resetLayoutCache({ includeEstimatedHeights: false });
10808
+ this.forceRenderOverride = true;
10585
10809
  return true;
10586
10810
  }
10587
10811
  return false;
@@ -10674,8 +10898,8 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10674
10898
  }
10675
10899
  reconcileHeights() {
10676
10900
  let hasHeightChange = false;
10677
- const { options: { overflow = "scroll" }, cache: { ghostTextRowsByIndex }, metrics: { lineHeight } } = this;
10678
- const fileDiff = this.getRenderedDiff();
10901
+ const { options: { overflow = "scroll" }, metrics: { lineHeight } } = this;
10902
+ const fileDiff = this.placeHolder != null ? this.getLayoutDiff() : this.getRenderedDiff();
10679
10903
  if (this.fileContainer == null || fileDiff == null) {
10680
10904
  if (this.height !== 0) hasHeightChange = true;
10681
10905
  this.height = 0;
@@ -10683,18 +10907,21 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10683
10907
  }
10684
10908
  this.top = this.getVirtualizedTop();
10685
10909
  hasHeightChange = this.applyGhostTextRows(fileDiff, this.editor?.__getGhostTextRows() ?? NO_GHOST_TEXT_ROWS);
10686
- const lineAnnotations = this.getLatestAnnotations();
10687
- if (overflow === "scroll" && lineAnnotations.length === 0 && !this.isResizeDebuggingEnabled()) {
10688
- if (hasHeightChange) this.computeApproximateSize(true);
10910
+ const { ghostTextRowsByIndex } = this.cache;
10911
+ const measureAllRows = overflow !== "scroll" || this.getLatestAnnotations().length > 0 || this.isResizeDebuggingEnabled();
10912
+ if (this.placeHolder != null || !measureAllRows && this.cache.heightDeltas.size === 0 && this.cache.fileAnnotationHeight === 0) {
10913
+ if (hasHeightChange) {
10914
+ this.computeApproximateSize(true);
10915
+ this.setPlaceholderHeight(this.height);
10916
+ }
10689
10917
  return hasHeightChange;
10690
10918
  }
10691
10919
  const diffStyle = this.getDiffStyle();
10692
10920
  const codeGroups = diffStyle === "split" ? [this.codeDeletions, this.codeAdditions] : [this.codeUnified];
10693
- const hasFileAnnotations = this.hasFileAnnotations(fileDiff);
10694
- if (this.renderRange != null && hasFileAnnotations && shouldRenderFileAnnotations(this.renderRange)) {
10921
+ if (this.renderRange != null && shouldRenderFileAnnotations(this.renderRange)) {
10695
10922
  const nextFileAnnotationHeight = measureFileAnnotationHeight(codeGroups) ?? 0;
10696
10923
  if (this.setFileAnnotationHeight(nextFileAnnotationHeight)) hasHeightChange = true;
10697
- } else if (!hasFileAnnotations && this.setFileAnnotationHeight(0)) hasHeightChange = true;
10924
+ }
10698
10925
  for (const codeGroup of codeGroups) {
10699
10926
  if (codeGroup == null) continue;
10700
10927
  const content = codeGroup.children[1];
@@ -10707,6 +10934,8 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10707
10934
  const lineIndex = parseLineIndex(lineIndexAttr, diffStyle);
10708
10935
  const ghostRows = ghostTextRowsByIndex.get(lineIndex) ?? 0;
10709
10936
  if (skipsGhostRows && ghostRows > 0) continue;
10937
+ const previousDelta = this.cache.heightDeltas.get(lineIndex) ?? 0;
10938
+ if (!measureAllRows && previousDelta === ghostRows * lineHeight) continue;
10710
10939
  let measuredHeight = line.getBoundingClientRect().height + ghostRows * lineHeight;
10711
10940
  let hasMetadata = false;
10712
10941
  if (line.nextElementSibling instanceof HTMLElement && ("lineAnnotation" in line.nextElementSibling.dataset || "noNewline" in line.nextElementSibling.dataset)) {
@@ -10714,7 +10943,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10714
10943
  measuredHeight += line.nextElementSibling.getBoundingClientRect().height;
10715
10944
  }
10716
10945
  const estimatedHeight = this.getEstimatedLineHeight(hasMetadata);
10717
- const previousDelta = this.cache.heightDeltas.get(lineIndex) ?? 0;
10718
10946
  const nextDelta = measuredHeight - estimatedHeight;
10719
10947
  if (nextDelta === previousDelta) continue;
10720
10948
  hasHeightChange = true;
@@ -10744,7 +10972,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10744
10972
  if (pendingHydratedDiff.expectedDiff === fileDiff) {
10745
10973
  Object.assign(fileDiff, pendingHydratedDiff.nextDiff);
10746
10974
  this.setHydratedState(pendingHydratedDiff.files);
10747
- this.startHydratedEditSession(fileDiff);
10975
+ this.installHydratedSessionDiff(fileDiff);
10748
10976
  this.forceRenderOverride = true;
10749
10977
  resetLayoutCache = true;
10750
10978
  resetEstimatedHeights = true;
@@ -10761,7 +10989,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10761
10989
  const diffChanged = this.updateExternalDiff(fileDiff, lineAnnotations);
10762
10990
  const { pendingRenderDiff, layoutDiffChanged, renderedDiffChanged, annotationsChanged } = this.updatePendingRender(fileDiff, lineAnnotations);
10763
10991
  if (!this.forceRenderOverride && (diffChanged || renderedDiffChanged || annotationsChanged)) this.forceRenderOverride = true;
10764
- if (reset?.resetDiffLayoutCache === true || layoutDiffChanged || annotationsChanged) resetLayoutCache = true;
10992
+ if (reset?.resetDiffLayoutCache === true || layoutDiffChanged) resetLayoutCache = true;
10765
10993
  if (layoutDiffChanged || reset?.resetDiffLayoutCache === true && reset.includeEstimatedDiffHeights) resetEstimatedHeights = true;
10766
10994
  if (reset?.metrics != null) {
10767
10995
  this.metrics = computeVirtualFileMetrics(reset.metrics);
@@ -10953,6 +11181,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10953
11181
  }
10954
11182
  expandHunk = (hunkIndex, direction, expansionLineCountOverride) => {
10955
11183
  if (this.fileDiff == null) return;
11184
+ this.loadFilesIfNecessary();
10956
11185
  if (this.isAdvancedMode()) {
10957
11186
  this.pendingExpansions ??= [];
10958
11187
  this.pendingExpansions.push({
@@ -10965,7 +11194,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10965
11194
  this.resetLayoutCache({ includeEstimatedHeights: true });
10966
11195
  this.computeApproximateSize();
10967
11196
  }
10968
- this.loadFilesIfNecessary();
10969
11197
  this.forceRenderOverride = true;
10970
11198
  this.virtualizer.instanceChanged(this, true);
10971
11199
  };
@@ -10974,7 +11202,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10974
11202
  if (this.isAdvancedMode()) {
10975
11203
  const nextDiff = hydratePartialDiff("clone", expectedDiff, files);
10976
11204
  await awaitWithTimeout(() => this.primeHighlightCache(nextDiff));
10977
- if (!this.enabled || this.fileDiff !== expectedDiff) return;
11205
+ if (this.fileDiff !== expectedDiff) return;
10978
11206
  this.pendingHydratedDiff = {
10979
11207
  expectedDiff,
10980
11208
  nextDiff,
@@ -10983,9 +11211,9 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10983
11211
  } else {
10984
11212
  hydratePartialDiff("merge", expectedDiff, files);
10985
11213
  this.setHydratedState(files);
10986
- if (!this.startHydratedEditSession(expectedDiff)) {
11214
+ if (!this.installHydratedSessionDiff(expectedDiff)) {
10987
11215
  await awaitWithTimeout(() => this.primeHighlightCache(expectedDiff));
10988
- if (!this.enabled || this.fileDiff !== expectedDiff) return;
11216
+ if (this.fileDiff !== expectedDiff) return;
10989
11217
  }
10990
11218
  this.resetLayoutCache({ includeEstimatedHeights: true });
10991
11219
  this.computeApproximateSize();
@@ -11184,11 +11412,11 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11184
11412
  pendingRenderDiff: this.pendingRender.diff,
11185
11413
  layoutDiffChanged: false,
11186
11414
  renderedDiffChanged: false,
11187
- annotationsChanged: false
11415
+ annotationsChanged: this.syncLineAnnotations(lineAnnotations)
11188
11416
  };
11189
11417
  return this.updatePendingRender(nextFileDiff, lineAnnotations);
11190
11418
  })();
11191
- if (annotationsChanged || layoutDiffChanged) this.resetLayoutCache({ includeEstimatedHeights: layoutDiffChanged });
11419
+ if (layoutDiffChanged) this.resetLayoutCache({ includeEstimatedHeights: true });
11192
11420
  if (!isSetup) {
11193
11421
  this.computeApproximateSize(false, pendingRenderDiff);
11194
11422
  const virtualizer = this.getSimpleVirtualizer();
@@ -11202,7 +11430,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11202
11430
  this.isSetup = true;
11203
11431
  } else {
11204
11432
  this.top ??= this.getVirtualizedTop();
11205
- if (layoutDiffChanged) {
11433
+ if (this.layoutDirty && this.isSimpleMode()) {
11206
11434
  this.getSimpleVirtualizer()?.markDOMDirty();
11207
11435
  this.computeApproximateSize(false, pendingRenderDiff);
11208
11436
  }
@@ -11213,7 +11441,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11213
11441
  this.additionFile = newFile;
11214
11442
  }
11215
11443
  if (targetChanged) this.clearReusableHeader();
11216
- this.pendingRender = void 0;
11217
11444
  return this.renderPlaceholder(this.height);
11218
11445
  }
11219
11446
  const windowSpecs = this.virtualizer.getWindowSpecs();
@@ -11230,7 +11457,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11230
11457
  });
11231
11458
  }
11232
11459
  finalizeRender() {
11233
- if (this.getRenderedDiff() !== this.pendingRender?.diff) throw new Error("VirtualizedFileDiff.render: rendered a different diff than its prepared layout");
11460
+ if (!areDiffTargetsEqual(this.getRenderedDiff(), this.pendingRender?.diff)) throw new Error("VirtualizedFileDiff.render: rendered a different diff than its prepared layout");
11234
11461
  this.pendingRender = void 0;
11235
11462
  if (this.isSimpleMode()) this.getSimpleVirtualizer()?.requestHeightReconcile(this);
11236
11463
  }
@@ -11656,7 +11883,7 @@ function parseLineIndex(lineIndexAttr, diffStyle) {
11656
11883
  return diffStyle === "split" ? splitIndex : unifiedIndex;
11657
11884
  }
11658
11885
 
11659
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/templateRender.js
11886
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/templateRender.js
11660
11887
  import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
11661
11888
  function templateRender(children, __html) {
11662
11889
  if (typeof window === "undefined" && __html != null) return /* @__PURE__ */ jsxs2(Fragment2, { children: [/* @__PURE__ */ jsx4("template", {
@@ -11666,7 +11893,7 @@ function templateRender(children, __html) {
11666
11893
  return /* @__PURE__ */ jsx4(Fragment2, { children });
11667
11894
  }
11668
11895
 
11669
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/Virtualizer.js
11896
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/Virtualizer.js
11670
11897
  import { createContext as createContext3, useCallback as useCallback2, useContext as useContext3, useState as useState2 } from "react";
11671
11898
  import { jsx as jsx5 } from "react/jsx-runtime";
11672
11899
  var VirtualizerContext = createContext3(void 0);
@@ -11674,14 +11901,15 @@ function useVirtualizer() {
11674
11901
  return useContext3(VirtualizerContext);
11675
11902
  }
11676
11903
 
11677
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js
11678
- import { useCallback as useCallback3, useContext as useContext4, useEffect as useEffect2, useLayoutEffect, useMemo, useRef as useRef2 } from "react";
11904
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js
11905
+ import { useCallback as useCallback3, useContext as useContext4, useEffect as useEffect2, useLayoutEffect, useMemo, useRef as useRef2, useState as useState3 } from "react";
11679
11906
  var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect2 : useLayoutEffect;
11680
11907
  function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOptions, editStateKey, lineAnnotations, selectedLines, prerenderedHTML, metrics, hasGutterRenderUtility, hasCustomHeader, disableWorkerPool, edit, onEditChange: _onEditChange, onEditComplete: _onEditComplete }) {
11681
11908
  const simpleVirtualizer = useVirtualizer();
11682
11909
  const controlledSelection = selectedLines !== void 0;
11683
11910
  const poolManager = useContext4(WorkerPoolContext);
11684
11911
  const createEditor = useCreateEditor();
11912
+ const [asyncAttachError, setAsyncAttachError] = useState3();
11685
11913
  const handleOnEditChange = useStableCallback((event) => _onEditChange?.(event));
11686
11914
  const onEditChange = _onEditChange != null ? handleOnEditChange : void 0;
11687
11915
  const acceptedCache = useRef2(null);
@@ -11720,6 +11948,7 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11720
11948
  });
11721
11949
  const instanceRef = useRef2(null);
11722
11950
  const disposeEditorRef = useRef2(null);
11951
+ const pendingAttachRef = useRef2(null);
11723
11952
  const getEditor = useStableCallback(() => {
11724
11953
  if (createEditor == null) throw new Error("FileDiff: EditContext is not attached");
11725
11954
  return createEditor("file-diff", editorOptions ?? {}, editStateKey);
@@ -11743,7 +11972,6 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11743
11972
  onEditComplete,
11744
11973
  options
11745
11974
  }), !disableWorkerPool ? poolManager : void 0, true);
11746
- if (edit && disposeEditorRef.current == null) disposeEditorRef.current = applyEdit(instanceRef.current, getEditor);
11747
11975
  instanceRef.current.hydrate({
11748
11976
  fileDiff: effectiveFileDiff,
11749
11977
  fileContainer,
@@ -11752,6 +11980,7 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11752
11980
  });
11753
11981
  } else {
11754
11982
  if (instanceRef.current == null) throw new Error("useFileDiffInstance: A FileDiff instance should exist when unmounting");
11983
+ pendingAttachRef.current = null;
11755
11984
  instanceRef.current.cleanUp();
11756
11985
  instanceRef.current = null;
11757
11986
  disposeEditorRef.current = null;
@@ -11770,10 +11999,13 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11770
11999
  });
11771
12000
  const forceRender = newOptions !== void 0 && !areOptionsEqual(instance.options, newOptions);
11772
12001
  instance.setOptions(newOptions);
11773
- if (!edit && disposeEditorRef.current != null) {
11774
- const { current: disposeEditor } = disposeEditorRef;
11775
- disposeEditorRef.current = null;
11776
- disposeEditor();
12002
+ if (!edit) {
12003
+ pendingAttachRef.current = null;
12004
+ if (disposeEditorRef.current != null) {
12005
+ const { current: disposeEditor } = disposeEditorRef;
12006
+ disposeEditorRef.current = null;
12007
+ disposeEditor();
12008
+ }
11777
12009
  }
11778
12010
  const resolved = resolveAcceptedValues(effectiveFileDiff, lineAnnotations, acceptedCache);
11779
12011
  instance.render({
@@ -11782,15 +12014,46 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11782
12014
  lineAnnotations: resolved.lineAnnotations
11783
12015
  });
11784
12016
  if (selectedLines !== void 0) instance.setSelectedLines(selectedLines);
11785
- if (edit && disposeEditorRef.current == null) disposeEditorRef.current = applyEdit(instance, getEditor);
12017
+ if (!edit || disposeEditorRef.current != null) return;
12018
+ if (createEditor == null) throw new Error("FileDiff: EditContext is not attached");
12019
+ const attach = () => {
12020
+ if (instanceRef.current !== instance || disposeEditorRef.current != null || !instance.__canAttachEditor()) return;
12021
+ disposeEditorRef.current = applyEdit(instance, getEditor);
12022
+ };
12023
+ if (instance.__canAttachEditor()) {
12024
+ pendingAttachRef.current = null;
12025
+ attach();
12026
+ return;
12027
+ }
12028
+ const promise = instance.__prepareForEditing();
12029
+ if (promise == null) {
12030
+ pendingAttachRef.current = null;
12031
+ return;
12032
+ }
12033
+ if (pendingAttachRef.current?.promise === promise) return;
12034
+ const pending = { promise };
12035
+ pendingAttachRef.current = pending;
12036
+ promise.then(() => {
12037
+ if (pendingAttachRef.current !== pending) return;
12038
+ attach();
12039
+ pendingAttachRef.current = null;
12040
+ }).catch((error) => {
12041
+ if (pendingAttachRef.current === pending) {
12042
+ pendingAttachRef.current = null;
12043
+ setAsyncAttachError(error);
12044
+ }
12045
+ });
11786
12046
  });
12047
+ const getHoveredLine = useCallback3(() => {
12048
+ return instanceRef.current?.getHoveredLine();
12049
+ }, []);
12050
+ const getAnnotationSlotName2 = useCallback3((annotation) => instanceRef.current?.getAnnotationSlotName(annotation) ?? getLineAnnotationName(annotation), []);
12051
+ if (asyncAttachError != null) throw asyncAttachError;
11787
12052
  return {
11788
12053
  fileDiff: effectiveFileDiff,
11789
12054
  ref,
11790
- getHoveredLine: useCallback3(() => {
11791
- return instanceRef.current?.getHoveredLine();
11792
- }, []),
11793
- getAnnotationSlotName: useCallback3((annotation) => instanceRef.current?.getAnnotationSlotName(annotation) ?? getLineAnnotationName(annotation), [])
12055
+ getHoveredLine,
12056
+ getAnnotationSlotName: getAnnotationSlotName2
11794
12057
  };
11795
12058
  }
11796
12059
  function useEffectiveFileDiff({ acceptedCache, fileDiff, newFile, oldFile, parseDiffOptions }) {
@@ -11858,7 +12121,7 @@ function applyEdit(instance, getEditor) {
11858
12121
  }
11859
12122
  }
11860
12123
 
11861
- // node_modules/.pnpm/@pierre+diffs@1.4.2_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js
12124
+ // node_modules/.pnpm/@pierre+diffs@1.5.1_@shikijs+themes@4.4.3_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js
11862
12125
  import { jsx as jsx6 } from "react/jsx-runtime";
11863
12126
  function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false, edit = false, onEditChange, onEditComplete }) {
11864
12127
  const { fileDiff, ref, getHoveredLine, getAnnotationSlotName: getAnnotationSlotName2 } = useFileDiffInstance({
@@ -11898,7 +12161,7 @@ function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey,
11898
12161
  });
11899
12162
  }
11900
12163
 
11901
- // web/app/dist/server/assets/session-tool-renderer-QcAkYD-V.js
12164
+ // web/app/dist/server/assets/session-tool-renderer-TiFeeJEc.js
11902
12165
  var STATUS_TEXT = {
11903
12166
  queued: "Waiting to generate",
11904
12167
  generating: "Generating image",
@@ -12432,7 +12695,7 @@ function TodoList({ items, title = "To-dos", open, defaultOpen = true, onOpenCha
12432
12695
  const contentId = `${baseId}-content`;
12433
12696
  const viewportRef = useRef3(null);
12434
12697
  const previousComplete = useRef3(false);
12435
- const [internalOpen, setInternalOpen] = useState3(defaultOpen);
12698
+ const [internalOpen, setInternalOpen] = useState4(defaultOpen);
12436
12699
  const currentOpen = open ?? internalOpen;
12437
12700
  const completed = items.filter((item) => item.status === "completed").length;
12438
12701
  const allComplete = items.length > 0 && completed === items.length;
@@ -12614,7 +12877,7 @@ function ToolApproval({ tool, title = "Allow this tool to run?", description, pa
12614
12877
  const reduce = useReducedMotion() ?? false;
12615
12878
  const detailsId = `${useId()}-details`;
12616
12879
  const previousStatus = useRef3(status);
12617
- const [internalOpen, setInternalOpen] = useState3(defaultOpen);
12880
+ const [internalOpen, setInternalOpen] = useState4(defaultOpen);
12618
12881
  const currentOpen = open ?? internalOpen;
12619
12882
  const setOpen = useCallback4((next) => {
12620
12883
  if (open === void 0) setInternalOpen(next);
@@ -13089,9 +13352,9 @@ function QuestionPrompt({ questions, questionIndex = 1, totalQuestions, onPrevio
13089
13352
  const clampedIndex = Math.max(1, Math.min(questionIndex, resolvedTotal));
13090
13353
  const activeQuestion = questions[clampedIndex - 1];
13091
13354
  const customEnabled = activeQuestion?.allowCustom ?? false;
13092
- const [selectedIds, setSelectedIds] = useState3(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).selectedIds);
13093
- const [customText, setCustomText] = useState3(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).customText);
13094
- const [textValue, setTextValue] = useState3(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).textValue);
13355
+ const [selectedIds, setSelectedIds] = useState4(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).selectedIds);
13356
+ const [customText, setCustomText] = useState4(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).customText);
13357
+ const [textValue, setTextValue] = useState4(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).textValue);
13095
13358
  const showNav = resolvedTotal > 1 && (!!onPreviousQuestion || !!onNextQuestion);
13096
13359
  const canGoPrev = clampedIndex > 1;
13097
13360
  const canGoNext = clampedIndex < resolvedTotal;
@@ -13262,20 +13525,20 @@ function formatAnswer(answer) {
13262
13525
  return ids || "Answered";
13263
13526
  }
13264
13527
  function QuestionTool({ part }) {
13265
- const [localIndex, setLocalIndex] = useState3(part.input?.questionIndex ?? 1);
13528
+ const [localIndex, setLocalIndex] = useState4(part.input?.questionIndex ?? 1);
13266
13529
  const questions = part.input?.questions ?? [];
13267
13530
  const totalQuestions = part.input?.totalQuestions ?? questions.length;
13268
13531
  const isControlled = typeof part.input?.questionIndex === "number";
13269
13532
  const questionIndex = isControlled ? part.input?.questionIndex ?? 1 : questions.length > 0 ? localIndex : part.input?.questionIndex ?? 1;
13270
13533
  const clampedIndex = Math.max(1, Math.min(questionIndex, totalQuestions));
13271
13534
  const question = questions[clampedIndex - 1];
13272
- const [localAnswers, setLocalAnswers] = useState3({});
13273
- const [prevQuestionIndex, setPrevQuestionIndex] = useState3(part.input?.questionIndex);
13535
+ const [localAnswers, setLocalAnswers] = useState4({});
13536
+ const [prevQuestionIndex, setPrevQuestionIndex] = useState4(part.input?.questionIndex);
13274
13537
  if (part.input?.questionIndex !== prevQuestionIndex) {
13275
13538
  setPrevQuestionIndex(part.input?.questionIndex);
13276
13539
  if (typeof part.input?.questionIndex === "number") setLocalIndex(part.input.questionIndex);
13277
13540
  }
13278
- const [prevToolCallId, setPrevToolCallId] = useState3(part.toolCallId);
13541
+ const [prevToolCallId, setPrevToolCallId] = useState4(part.toolCallId);
13279
13542
  if (part.toolCallId !== prevToolCallId) {
13280
13543
  setPrevToolCallId(part.toolCallId);
13281
13544
  setLocalAnswers({});
@@ -14004,11 +14267,11 @@ function getPlanFileName(plan) {
14004
14267
  var PlanTool = memo(function PlanTool2({ part, chatStatus }) {
14005
14268
  const { isPending } = getToolStatus(part, chatStatus);
14006
14269
  const plan = part.input?.plan;
14007
- const [isExpanded, setIsExpanded] = useState3(false);
14008
- const [isApproved, setIsApproved] = useState3(false);
14009
- const [isActing, setIsActing] = useState3(null);
14010
- const [isRefining, setIsRefining] = useState3(false);
14011
- const [refineText, setRefineText] = useState3("");
14270
+ const [isExpanded, setIsExpanded] = useState4(false);
14271
+ const [isApproved, setIsApproved] = useState4(false);
14272
+ const [isActing, setIsActing] = useState4(null);
14273
+ const [isRefining, setIsRefining] = useState4(false);
14274
+ const [refineText, setRefineText] = useState4("");
14012
14275
  if (!plan) return null;
14013
14276
  const fileName = getPlanFileName(plan);
14014
14277
  const summary = plan.summary?.trim() ?? "";
@@ -14293,7 +14556,7 @@ var TodoTool = memo(function TodoTool2({ part }) {
14293
14556
  });
14294
14557
  }, areToolPropsEqual);
14295
14558
  function useElapsedTime(startedAt, isPending) {
14296
- const [elapsedMs, setElapsedMs] = useState3(0);
14559
+ const [elapsedMs, setElapsedMs] = useState4(0);
14297
14560
  useEffect3(() => {
14298
14561
  if (isPending && startedAt) {
14299
14562
  setElapsedMs(Date.now() - startedAt);
@@ -14701,8 +14964,8 @@ function formatStreamCounts(fileCount, searchCount) {
14701
14964
  var ToolGroup = memo(function ToolGroup2({ part, nestedTools = EMPTY_NESTED_TOOLS, chatStatus, completeLabel, shimmerLabel, interruptedLabel, maxVisibleTools = 5, defaultOpen, showElapsed = true }) {
14702
14965
  const { isPending, isInterrupted } = getToolStatus(part, chatStatus);
14703
14966
  const description = part.input?.description || "";
14704
- const [expanded, setExpanded] = useState3(defaultOpen ?? false);
14705
- const [visibleCount, setVisibleCount] = useState3(0);
14967
+ const [expanded, setExpanded] = useState4(defaultOpen ?? false);
14968
+ const [visibleCount, setVisibleCount] = useState4(0);
14706
14969
  const startedAt = part.callProviderMetadata?.custom?.startedAt ?? part.startedAt;
14707
14970
  const hasNestedTools = nestedTools.length > 0;
14708
14971
  const streamKey = part.toolCallId ?? part.id ?? "";