@qredence/fleet 0.7.0 → 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 (118) hide show
  1. package/CHANGELOG.md +12 -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-Qd6JlHzz.js → artifacts-panel-DVY0-7X0.js} +1 -1
  5. package/dist/web/client/assets/{badge-BjFxrtmB.js → badge-9wr3qUp1.js} +7 -7
  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-CPlJp2cO.js → chat-command-palette-CXS5eTiy.js} +1 -1
  9. package/dist/web/client/assets/{chunk-YOKDWASO-C8deEx7Z.js → chunk-YOKDWASO-Dego39cu.js} +4 -4
  10. package/dist/web/client/assets/{citations-BhyqbxcZ.js → citations-C7USoVdz.js} +1 -1
  11. package/dist/web/client/assets/{command-Bo31U-UD.js → command-s2yLD3tA.js} +1 -1
  12. package/dist/web/client/assets/{create-project-dialog-SDyXTpl-.js → create-project-dialog-C99_Lyjg.js} +1 -1
  13. package/dist/web/client/assets/{dialog-DLIPvl1s.js → dialog-DuCD5hRq.js} +1 -1
  14. package/dist/web/client/assets/{dist-CZDnnosQ.js → dist-QgsZ1U9l.js} +1 -1
  15. package/dist/web/client/assets/{ease-DKi-MOH5.js → ease-2gsl7ABx.js} +1 -1
  16. package/dist/web/client/assets/{fork-picker-dialog-BDleMADF.js → fork-picker-dialog--dV6TE-9.js} +1 -1
  17. package/dist/web/client/assets/globals-BXtzVIWE.css +2 -0
  18. package/dist/web/client/assets/{highlighted-body-KPVGNVTW-CZcNaoxi.js → highlighted-body-KPVGNVTW-CSgDVUQp.js} +1 -1
  19. package/dist/web/client/assets/index-C2EkVtv5.js +13 -0
  20. package/dist/web/client/assets/{input-Ce8yLnXY.js → input-DECT4vz2.js} +1 -1
  21. package/dist/web/client/assets/{input-group-BZLQiZOA.js → input-group-CZlz1ygA.js} +1 -1
  22. package/dist/web/client/assets/{ipython-tool-CuSGRhXl.js → ipython-tool-Bs6ESZe1.js} +1 -1
  23. package/dist/web/client/assets/{layout-constants-Bl6XCvhY.js → layout-constants-C4hoW3YP.js} +1 -1
  24. package/dist/web/client/assets/{markdown-C-Y9gskI.js → markdown-B2tpfUKu.js} +2 -2
  25. package/dist/web/client/assets/{markdown-code-BqFVdovL.js → markdown-code-B5YUmtLX.js} +1 -1
  26. package/dist/web/client/assets/mermaid-HWGCJPDP-BpEVCu9T.js +1 -0
  27. package/dist/web/client/assets/{message-queue-CiptKSb6.js → message-queue-BD2sIUTH.js} +1 -1
  28. package/dist/web/client/assets/{model-selector-list-BHQ-Q8b9.js → model-selector-list-zPZRE3JY.js} +1 -1
  29. package/dist/web/client/assets/{notify-BC0a76VJ.js → notify-mVA6z9Ly.js} +1 -1
  30. package/dist/web/client/assets/{openui-renderer-CH9K7_8t.js → openui-renderer-ByP8yQph.js} +1 -1
  31. package/dist/web/client/assets/{preload-helper-Czpn1I53.js → preload-helper-BZ1Pz5am.js} +1 -1
  32. package/dist/web/client/assets/{prompt-input-IwZOepG7.js → prompt-input-Bnl0HyL6.js} +1 -1
  33. package/dist/web/client/assets/{prompt-suggestions-BRFWFm5y.js → prompt-suggestions-DcgETXtw.js} +1 -1
  34. package/dist/web/client/assets/{provider-label-DNZOLldn.js → provider-label-COVNyoZo.js} +1 -1
  35. package/dist/web/client/assets/{repl-panel-UQN9UFG7.js → repl-panel-BoDNpJOe.js} +1 -1
  36. package/dist/web/client/assets/{resources-panel-kp_UjnpX.js → resources-panel-DD6iWOF3.js} +1 -1
  37. package/dist/web/client/assets/{right-panel-registry-BJG8ubHt.js → right-panel-registry-CIfLdAfS.js} +2 -2
  38. package/dist/web/client/assets/{routes-BXFQmjL9.js → routes-DO93P3Xm.js} +5 -5
  39. package/dist/web/client/assets/{select-COK0Kaq2.js → select-Dp15z1lf.js} +1 -1
  40. package/dist/web/client/assets/{session-reasoning-panel-DrTWp8d4.js → session-reasoning-panel-WMedZp__.js} +1 -1
  41. package/dist/web/client/assets/session-tool-renderer-BFC3-Md4.js +170 -0
  42. package/dist/web/client/assets/{session-tree-panel-deGRKAhX.js → session-tree-panel-CnHOsPzz.js} +1 -1
  43. package/dist/web/client/assets/{settings-dialog-BU1Tw0CQ.js → settings-dialog-BN138nzK.js} +1 -1
  44. package/dist/web/client/assets/{skeleton-D5Y9nBfp.js → skeleton-DNAr5ULI.js} +1 -1
  45. package/dist/web/client/assets/{skeleton-loaders-DOKGa7CW.js → skeleton-loaders-B28mF4tJ.js} +1 -1
  46. package/dist/web/client/assets/{spinner-C3sPnLdu.js → spinner-CSBXk3Lo.js} +1 -1
  47. package/dist/web/client/assets/{subagent-chat-panel-DQEnhU2t.js → subagent-chat-panel-DYKOKRPp.js} +1 -1
  48. package/dist/web/client/assets/subagent-transcript-BCUhqVvi.js +1 -0
  49. package/dist/web/client/assets/{subagent-utils-DTV2RcFl.js → subagent-utils-CM2qX9BG.js} +2 -2
  50. package/dist/web/client/assets/{subagents-panel-B-X7WPUU.js → subagents-panel-CTvtU0Sh.js} +1 -1
  51. package/dist/web/client/assets/{surface-context-DWplCCcO.js → surface-context-VvasJf_6.js} +1 -1
  52. package/dist/web/client/assets/{surfaces-BULKVm-B.js → surfaces-m1vs5aMP.js} +1 -1
  53. package/dist/web/client/assets/{switch-DQETDDJT.js → switch-eqXIzePo.js} +1 -1
  54. package/dist/web/client/assets/{toast-BFeqSeaR.js → toast-DRDVljMF.js} +1 -1
  55. package/dist/web/client/assets/{tool-result-C5Ixe-AJ.js → tool-result-DWUV8hEz.js} +2 -2
  56. package/dist/web/client/assets/{tool-timeline-B4ci1oJg.js → tool-timeline-4k2iSEky.js} +1 -1
  57. package/dist/web/client/assets/{use-reduced-motion-BgG7f9xw.js → use-reduced-motion-BzGFRmoG.js} +1 -1
  58. package/dist/web/client/assets/utils-CFDGLzf6.js +1 -0
  59. package/dist/web/client/assets/{workspace-panel-DDjQuELx.js → workspace-panel-BNeGABPi.js} +1 -1
  60. package/dist/web/client/assets/{workspace-path-nav-DmxBrMV6.js → workspace-path-nav-umvkE4ut.js} +2 -2
  61. package/dist/web/client/bundle-budget.json +5 -5
  62. package/dist/web/server/{_tanstack-start-manifest_v-vL58CVrY-7SDCWIHD.js → _tanstack-start-manifest_v-DTCFS0PG-ARV2V4FW.js} +27 -27
  63. package/dist/web/server/{artifacts-panel-CozDO7ak-5T4W7RME.js → artifacts-panel-Ct2R_4wM-DAPQMI57.js} +14 -14
  64. package/dist/web/server/{chat-command-palette-CLE-L0qp-ZZNKVTSS.js → chat-command-palette-ETZzg35Q-TAV74IAW.js} +9 -9
  65. package/dist/web/server/{chunk-5AYK2KDO.js → chunk-777VIBCH.js} +176 -176
  66. package/dist/web/server/{chunk-7VFULIHV.js → chunk-AAPVQJAD.js} +2 -2
  67. package/dist/web/server/{chunk-D7GSWBRI.js → chunk-BNB7T7P6.js} +2 -2
  68. package/dist/web/server/{chunk-E4YWFQX5.js → chunk-FFGFTGLQ.js} +415 -383
  69. package/dist/web/server/{chunk-EUWNVEIC.js → chunk-FL3FOWSC.js} +118 -108
  70. package/dist/web/server/{chunk-QCDSLD3L.js → chunk-GS5F6X7H.js} +628 -327
  71. package/dist/web/server/{chunk-B7YWDA2F.js → chunk-INRE3X52.js} +2 -2
  72. package/dist/web/server/{chunk-GRGV5FVO.js → chunk-JOCVZVZ3.js} +5 -5
  73. package/dist/web/server/{chunk-NHV77NOI.js → chunk-JU7PCOE7.js} +4 -4
  74. package/dist/web/server/{chunk-RVDWGK6U.js → chunk-KVW6XTN3.js} +14 -9
  75. package/dist/web/server/{chunk-NB3TVOGB.js → chunk-LECHJX4M.js} +483 -481
  76. package/dist/web/server/{chunk-RYU7I34A.js → chunk-M6K66QBV.js} +6 -6
  77. package/dist/web/server/{chunk-SLRV7YNY.js → chunk-R7KUUFDW.js} +4 -4
  78. package/dist/web/server/chunk-SHNODG3C.js +18343 -0
  79. package/dist/web/server/{chunk-PXSOI3XF.js → chunk-SQXJ5TUB.js} +2 -2
  80. package/dist/web/server/{chunk-B5Y7XOIJ.js → chunk-TMQ3MT3D.js} +78 -17
  81. package/dist/web/server/{chunk-B4EBMF5J.js → chunk-UWZYLMEH.js} +2 -2
  82. package/dist/web/server/{chunk-YIJ7D7G5.js → chunk-VTEYQNJE.js} +7 -7
  83. package/dist/web/server/{chunk-F5DJQ3PQ.js → chunk-WPSI5TBE.js} +1528 -2185
  84. package/dist/web/server/{chunk-ABYOWAMD.js → chunk-X76RBZ37.js} +2 -2
  85. package/dist/web/server/{chunk-54UEKLGD.js → chunk-XMAAYUOT.js} +14 -14
  86. package/dist/web/server/{create-project-dialog-CReZdM5g-2V7C5J67.js → create-project-dialog-CqBmLTlA-X6HI6AYR.js} +10 -10
  87. package/dist/web/server/{dist-DVCLWOYT.js → dist-3UIQ7SZN.js} +2 -2
  88. package/dist/web/server/{dist-4A22NBTB.js → dist-ZPEDRNZ4.js} +2 -2
  89. package/dist/web/server/{empty-plugin-adapters-Cqtvkauv-ILKI7W7V.js → empty-plugin-adapters-DOl-E2pL-RKRSN75W.js} +1 -1
  90. package/dist/web/server/{fork-picker-dialog-CXcLEaor-6SVM5RJO.js → fork-picker-dialog-PYNd9ozc-EA7BRLRR.js} +7 -7
  91. package/dist/web/server/{markdown-CShfYRVO-OKGCYPQK.js → markdown-CShfYRVO-22N5LNAN.js} +2 -2
  92. package/dist/web/server/{markdown-code-BDV_2b2T-VZGAECQB.js → markdown-code-BDV_2b2T-KUPHX52W.js} +2 -2
  93. package/dist/web/server/{message-queue-Q_Q6hbqc-AOV2PSCX.js → message-queue-DmSFAI5Y-XDZHJ2Z6.js} +7 -7
  94. package/dist/web/server/{model-selector-list-BOKU5_Z3-III72ZT2.js → model-selector-list-C-Y3p5UM-HTSWVVHP.js} +9 -9
  95. package/dist/web/server/{openui-renderer-VuQOQeAP-XBOR3XGN.js → openui-renderer-C4B1EJxC-QDYQF5LD.js} +11 -11
  96. package/dist/web/server/{prompt-suggestions-EqAaAx6L-723M64XJ.js → prompt-suggestions-EqAaAx6L-B4KCWNZX.js} +1 -1
  97. package/dist/web/server/{repl-panel-DOyUyuQR-IMYO4FKX.js → repl-panel-DOyUyuQR-LRBDRMHW.js} +3 -3
  98. package/dist/web/server/{resources-panel-Cnz-X1bx-TT5KVROR.js → resources-panel-Bo-TmRON-O47AKGEQ.js} +8 -8
  99. package/dist/web/server/{router-C437aaqv-72HBLLJI.js → router-DtS2wXhd-I2SZV7YF.js} +6 -6
  100. package/dist/web/server/{routes-BkVN3m9i-PYNMNLQ5.js → routes-DuSYlASY-U7C32ONE.js} +6 -6
  101. package/dist/web/server/server.js +2410 -1672
  102. package/dist/web/server/{session-reasoning-panel-2_TR5nKM-KA5OY7ZV.js → session-reasoning-panel-BFcZs1pZ-KNHSU5GX.js} +8 -8
  103. package/dist/web/server/{session-tool-renderer-BFEWy2Pk-JTSYUPO5.js → session-tool-renderer-TiFeeJEc-YUZPEEZ4.js} +10 -10
  104. package/dist/web/server/{session-tree-panel-3y9LVA0A-4V4TJX62.js → session-tree-panel-CjsqVYLY-DGZBGY2E.js} +7 -7
  105. package/dist/web/server/{settings-dialog-DgZ8Z5e4-6T5AS2EB.js → settings-dialog-Bj5LrAE8-6BQRLUJT.js} +11 -11
  106. package/dist/web/server/{start-QK6aG02q-EMREW2SB.js → start-cCC--AXu-BBMIT6OU.js} +1 -1
  107. package/dist/web/server/{subagent-chat-panel-B0pmAxCp-DKXNAOUU.js → subagent-chat-panel-DAS4Ne-1-TWIUXSQC.js} +13 -13
  108. package/dist/web/server/{subagents-panel-FUUT0t1i-5ZKJ2QAJ.js → subagents-panel-C3CdUcqw-DFTJTPHA.js} +13 -13
  109. package/dist/web/server/{tool-timeline-C4dgQITK-CFWANSDL.js → tool-timeline-C4dgQITK-IWCLQLWG.js} +3 -3
  110. package/dist/web/server/{workspace-panel-BbI1N4f8-WYOEVH4G.js → workspace-panel-DNs0Ye2U-VFB6X5PK.js} +8 -8
  111. package/package.json +5 -5
  112. package/dist/web/client/assets/globals-DZbMyHfg.css +0 -2
  113. package/dist/web/client/assets/index-D3HpiAnD.js +0 -12
  114. package/dist/web/client/assets/mermaid-HWGCJPDP-CVNXPao6.js +0 -1
  115. package/dist/web/client/assets/session-tool-renderer-mOZdkbiU.js +0 -1389
  116. package/dist/web/client/assets/subagent-transcript-CCpg3uL6.js +0 -1
  117. package/dist/web/client/assets/utils-Dpy9ZFOr.js +0 -1
  118. package/dist/web/server/chunk-XJHYJLGU.js +0 -38412
@@ -7,12 +7,12 @@ import {
7
7
  FileDiff,
8
8
  ToolResult,
9
9
  ToolResultOutput
10
- } from "./chunk-NHV77NOI.js";
10
+ } from "./chunk-JU7PCOE7.js";
11
11
  import {
12
12
  Collapsible$1,
13
13
  CollapsibleContent,
14
14
  CollapsibleTrigger
15
- } from "./chunk-D7GSWBRI.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-EUWNVEIC.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-BFEWy2Pk.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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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.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
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,
@@ -2033,9 +2038,11 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
2033
2038
  return !state.isWindowedHighlight || state.splitCount >= startingLine - splitHeight && state.splitCount < startingLine + totalLines;
2034
2039
  },
2035
2040
  emit(props, silent = false) {
2036
- if (!silent) if (diffStyle === "unified") state.incrementCounts(1, 0);
2037
- else if (diffStyle === "split") state.incrementCounts(0, 1);
2038
- else state.incrementCounts(1, 1);
2041
+ if (!silent) {
2042
+ if (diffStyle === "unified") state.incrementCounts(1, 0);
2043
+ else if (diffStyle === "split") state.incrementCounts(0, 1);
2044
+ else state.incrementCounts(1, 1);
2045
+ }
2039
2046
  return callback(props) ?? false;
2040
2047
  }
2041
2048
  };
@@ -2468,7 +2475,7 @@ function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, d
2468
2475
  };
2469
2476
  }
2470
2477
 
2471
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
2472
2479
  function cleanLastNewline(contents) {
2473
2480
  let end = contents.length;
2474
2481
  if (contents.charCodeAt(end - 1) === 10) {
@@ -3260,7 +3267,7 @@ function splitLines(text) {
3260
3267
  return result;
3261
3268
  }
3262
3269
 
3263
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3264
3271
  function createDiffSpanDecoration({ line, spanStart, spanLength }) {
3265
3272
  return {
3266
3273
  start: {
@@ -3289,7 +3296,7 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
3289
3296
  arr.push([isNeutral ? 0 : 1, item.value]);
3290
3297
  }
3291
3298
 
3292
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3293
3300
  var DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
3294
3301
  function renderDiffWithHighlighter(diff, highlighter2, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = 1 } = DEFAULT_PLAIN_TEXT_OPTIONS) {
3295
3302
  if (forcePlainText) {
@@ -3412,12 +3419,51 @@ function renderDiffWithHighlighter(diff, highlighter2, options, { forcePlainText
3412
3419
  baseThemeType
3413
3420
  };
3414
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
+ }
3415
3452
  function computeLineDiffDecorations({ deletionLine, additionLine, deletionLineIndex, additionLineIndex, deletionDecorations, additionDecorations, lineDiffType, maxLineDiffLength }) {
3416
3453
  if (deletionLine == null || additionLine == null || lineDiffType === "none") return;
3417
3454
  deletionLine = cleanLastNewline(deletionLine);
3418
3455
  additionLine = cleanLastNewline(additionLine);
3419
3456
  if (deletionLine.length > maxLineDiffLength || additionLine.length > maxLineDiffLength) return;
3420
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
+ }
3421
3467
  const deletionSpans = [];
3422
3468
  const additionSpans = [];
3423
3469
  const enableJoin = lineDiffType === "word-alt";
@@ -3540,12 +3586,12 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
3540
3586
  };
3541
3587
  }
3542
3588
 
3543
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3544
3590
  import { createContext as createContext2, useContext as useContext2, useEffect, useInsertionEffect as useInsertionEffect2, useState } from "react";
3545
3591
  import { jsx as jsx3 } from "react/jsx-runtime";
3546
3592
  var WorkerPoolContext = createContext2(void 0);
3547
3593
 
3548
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3549
3595
  function areObjectsEqual(objA, objB, omitKeys) {
3550
3596
  if (objA === objB || objA == null || objB == null) return objA === objB;
3551
3597
  const omitSet = new Set(omitKeys);
@@ -3560,7 +3606,7 @@ function areObjectsEqual(objA, objB, omitKeys) {
3560
3606
  return true;
3561
3607
  }
3562
3608
 
3563
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3564
3610
  function areOptionsEqual(optionsA, optionsB) {
3565
3611
  const themeA = optionsA?.theme ?? DEFAULT_THEMES;
3566
3612
  const themeB = optionsB?.theme ?? DEFAULT_THEMES;
@@ -3572,7 +3618,7 @@ function getParseDiffOptions(options) {
3572
3618
  if (options != null && "parseDiffOptions" in options) return options.parseDiffOptions;
3573
3619
  }
3574
3620
 
3575
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3576
3622
  var callbacks = /* @__PURE__ */ new Set();
3577
3623
  var frameId = null;
3578
3624
  function queueRender(callback) {
@@ -3597,24 +3643,24 @@ function render(time) {
3597
3643
  else frameId = null;
3598
3644
  }
3599
3645
 
3600
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3601
3647
  function areSelectionsEqual(selectionA, selectionB) {
3602
3648
  return selectionA?.start === selectionB?.start && selectionA?.end === selectionB?.end && selectionA?.side === selectionB?.side && selectionA?.endSide === selectionB?.endSide;
3603
3649
  }
3604
3650
 
3605
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3606
3652
  function isStyleNode(element) {
3607
3653
  if (typeof HTMLStyleElement !== "undefined" && element instanceof HTMLStyleElement) return true;
3608
3654
  const tagName = element.tagName ?? element.nodeName;
3609
3655
  return typeof tagName === "string" && tagName.toLowerCase() === "style";
3610
3656
  }
3611
3657
 
3612
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3613
3659
  function areFileTargetsEqual(fileA, fileB) {
3614
3660
  return fileA?.cacheKey != null || fileB?.cacheKey != null ? fileA?.cacheKey === fileB?.cacheKey : fileA?.contents === fileB?.contents && fileA?.name === fileB?.name && fileA?.lang === fileB?.lang;
3615
3661
  }
3616
3662
 
3617
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3618
3664
  var FILE_ANNOTATION_DOM_KEY = `-1,-1`;
3619
3665
  function includesFileAnnotations(annotations) {
3620
3666
  return annotations?.some((annotation) => annotation.lineNumber === 0) ?? false;
@@ -3627,12 +3673,12 @@ function shouldRenderFileAnnotations(renderRange) {
3627
3673
  return renderRange.startingLine === 0 && renderRange.totalLines > 0;
3628
3674
  }
3629
3675
 
3630
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3631
3677
  function areSelectionPointsEqual(a, b) {
3632
3678
  return a.lineNumber === b.lineNumber && a.side === b.side;
3633
3679
  }
3634
3680
 
3635
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3636
3682
  function createGutterUtilityElement() {
3637
3683
  return createHastElement({
3638
3684
  tagName: "button",
@@ -3647,7 +3693,7 @@ function createGutterUtilityElement() {
3647
3693
  });
3648
3694
  }
3649
3695
 
3650
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3651
3697
  function isGutterUtilityPath(path) {
3652
3698
  for (const element of path) {
3653
3699
  if (!(element instanceof HTMLElement)) continue;
@@ -3656,7 +3702,7 @@ function isGutterUtilityPath(path) {
3656
3702
  return false;
3657
3703
  }
3658
3704
 
3659
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
3660
3706
  var InteractionManager = class {
3661
3707
  mode;
3662
3708
  options;
@@ -4862,12 +4908,11 @@ function debugLogIfEnabled(debugLogType = "none", logIfType, ...args) {
4862
4908
  break;
4863
4909
  case "move":
4864
4910
  if (logIfType !== "move") return;
4865
- break;
4866
4911
  }
4867
4912
  console.log(...args);
4868
4913
  }
4869
4914
 
4870
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
4871
4916
  var ResizeManager = class ResizeManager2 {
4872
4917
  static resizeObserver;
4873
4918
  static managersByElement = /* @__PURE__ */ new Map();
@@ -5147,13 +5192,13 @@ function cleanupStaleAnnotationItem(item) {
5147
5192
  if (item.column2.container.isConnected) item.column2.container.style.removeProperty("--diffs-annotation-min-height");
5148
5193
  }
5149
5194
 
5150
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5151
5196
  function areRenderRangesEqual(renderRangeA, renderRangeB) {
5152
5197
  if (renderRangeA == null || renderRangeB == null) return renderRangeA === renderRangeB;
5153
5198
  return renderRangeA.startingLine === renderRangeB.startingLine && renderRangeA.totalLines === renderRangeB.totalLines && renderRangeA.bufferBefore === renderRangeB.bufferBefore && renderRangeA.bufferAfter === renderRangeB.bufferAfter;
5154
5199
  }
5155
5200
 
5156
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5157
5202
  function applyLineTextWithNewline(line, lineText) {
5158
5203
  if (line.endsWith("\r\n")) return lineText + "\r\n";
5159
5204
  if (line.endsWith("\r")) return lineText + "\r";
@@ -5161,7 +5206,7 @@ function applyLineTextWithNewline(line, lineText) {
5161
5206
  return lineText;
5162
5207
  }
5163
5208
 
5164
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5165
5210
  function createAnnotationElement(span) {
5166
5211
  return createHastElement({
5167
5212
  tagName: "div",
@@ -5177,7 +5222,7 @@ function createAnnotationElement(span) {
5177
5222
  });
5178
5223
  }
5179
5224
 
5180
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5181
5226
  function createContentColumn(children, rowCount) {
5182
5227
  return createHastElement({
5183
5228
  tagName: "div",
@@ -5189,7 +5234,7 @@ function createContentColumn(children, rowCount) {
5189
5234
  });
5190
5235
  }
5191
5236
 
5192
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5193
5238
  function getIconForType(type) {
5194
5239
  switch (type) {
5195
5240
  case "file":
@@ -5206,7 +5251,7 @@ function getIconForType(type) {
5206
5251
  }
5207
5252
  }
5208
5253
 
5209
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5210
5255
  function createFileHeaderElement({ fileOrDiff, mode, stickyHeader }) {
5211
5256
  const fileDiff = "type" in fileOrDiff ? fileOrDiff : void 0;
5212
5257
  const properties = {
@@ -5298,7 +5343,7 @@ function createMetadataElement(fileDiff) {
5298
5343
  });
5299
5344
  }
5300
5345
 
5301
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5302
5347
  function createPreElement(options) {
5303
5348
  return createHastElement({
5304
5349
  tagName: "pre",
@@ -5319,21 +5364,21 @@ function createPreWrapperProperties({ diffIndicators, disableBackground, disable
5319
5364
  };
5320
5365
  }
5321
5366
 
5322
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5323
5368
  function getHighlighterOptions(lang, { theme, preferredHighlighter = "shiki-js" }) {
5324
5369
  return {
5325
- langs: [lang ?? "text"],
5370
+ langs: Array.isArray(lang) ? lang : [lang ?? "text"],
5326
5371
  themes: getThemes(theme),
5327
5372
  preferredHighlighter
5328
5373
  };
5329
5374
  }
5330
5375
 
5331
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5332
5377
  function isDefaultRenderRange(renderRange) {
5333
5378
  return renderRange.startingLine === 0 && renderRange.totalLines === Infinity && renderRange.bufferBefore === 0 && renderRange.bufferAfter === 0;
5334
5379
  }
5335
5380
 
5336
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5337
5382
  var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height="0">
5338
5383
  <symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
5339
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"/>
@@ -5359,6 +5404,9 @@ var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height=
5359
5404
  <symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
5360
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"/>
5361
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>
5362
5410
  <symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
5363
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"/>
5364
5412
  </symbol>
@@ -5368,27 +5416,81 @@ var SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" height=
5368
5416
  <symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
5369
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"/>
5370
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>
5371
5425
  <symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
5372
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"/>
5373
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>
5374
5434
  <symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
5375
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"/>
5376
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>
5377
5452
  <symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
5378
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"/>
5379
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>
5380
5470
  <symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
5381
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"/>
5382
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>
5383
5479
  <symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
5384
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"/>
5385
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>
5386
5488
  <symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
5387
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"/>
5388
5490
  </symbol>
5389
5491
  </svg>`;
5390
5492
 
5391
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5392
5494
  function arePrePropertiesEqual(propsA, propsB) {
5393
5495
  if (propsA == null || propsB == null) return propsA === propsB;
5394
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;
@@ -5403,7 +5505,7 @@ function areCustomPropertiesEqual(customPropertiesA = EMPTY_CUSTOM_PROPERTIES, c
5403
5505
  return true;
5404
5506
  }
5405
5507
 
5406
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5407
5509
  function createAnnotationWrapperNode(slot) {
5408
5510
  const wrapper = document.createElement("div");
5409
5511
  wrapper.dataset.annotationSlot = "";
@@ -5412,7 +5514,7 @@ function createAnnotationWrapperNode(slot) {
5412
5514
  return wrapper;
5413
5515
  }
5414
5516
 
5415
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5416
5518
  function createGutterUtilityContentNode() {
5417
5519
  const gutterUtilityContent = document.createElement("div");
5418
5520
  gutterUtilityContent.slot = "gutter-utility-slot";
@@ -5425,14 +5527,14 @@ function createGutterUtilityContentNode() {
5425
5527
  return gutterUtilityContent;
5426
5528
  }
5427
5529
 
5428
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5429
5531
  function createUnsafeCSSStyleNode() {
5430
5532
  const node = document.createElement("style");
5431
5533
  node.setAttribute(UNSAFE_CSS_ATTRIBUTE, "");
5432
5534
  return node;
5433
5535
  }
5434
5536
 
5435
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5436
5538
  var measuredScrollbarGutter;
5437
5539
  function getMeasuredScrollbarGutter(shadowRoot) {
5438
5540
  if (measuredScrollbarGutter != null) return measuredScrollbarGutter;
@@ -5452,13 +5554,14 @@ function getMeasuredScrollbarGutter(shadowRoot) {
5452
5554
  return measuredScrollbarGutter;
5453
5555
  }
5454
5556
  function createMeasuredScrollbarGutterDeclaration(scrollbarGutter) {
5455
- return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${scrollbarGutter == null ? "var(--diffs-scrollbar-gutter-fallback)" : `${scrollbarGutter}px`};`;
5557
+ const value = scrollbarGutter == null ? "var(--diffs-scrollbar-gutter-fallback)" : `${scrollbarGutter}px`;
5558
+ return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${value};`;
5456
5559
  }
5457
5560
 
5458
- // node_modules/.pnpm/@pierre+diffs@1.4.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
5459
- 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';
5460
5563
 
5461
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5462
5565
  var LAYER_ORDER = `@layer base, theme, rendered, unsafe;`;
5463
5566
  var SCROLLBAR_GUTTER_DECLARATION_PATTERN = new RegExp(`${escapeRegExp(DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY)}\\s*:\\s*[^;]+;`);
5464
5567
  function wrapUnsafeCSS(unsafeCSS) {
@@ -5468,11 +5571,13 @@ function wrapUnsafeCSS(unsafeCSS) {
5468
5571
  }`;
5469
5572
  }
5470
5573
  function wrapThemeCSS(themeCSS, themeType = "system", scrollbarGutter) {
5574
+ const colorSchemeRule = themeType === "system" ? "" : `
5575
+ color-scheme: ${themeType};`;
5576
+ const scrollbarGutterVar = createMeasuredScrollbarGutterDeclaration(scrollbarGutter);
5471
5577
  return `${LAYER_ORDER}
5472
5578
  @layer rendered {
5473
- :host {${themeType === "system" ? "" : `
5474
- color-scheme: ${themeType};`}
5475
- ${createMeasuredScrollbarGutterDeclaration(scrollbarGutter)}
5579
+ :host {${colorSchemeRule}
5580
+ ${scrollbarGutterVar}
5476
5581
  ${themeCSS}
5477
5582
  }
5478
5583
  }`;
@@ -5485,14 +5590,14 @@ function escapeRegExp(value) {
5485
5590
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5486
5591
  }
5487
5592
 
5488
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5489
5594
  var lineAnnotationSources = /* @__PURE__ */ new WeakMap();
5490
5595
  function getLineAnnotationSource(annotation) {
5491
5596
  const source = lineAnnotationSources.get(annotation);
5492
5597
  return source == null ? annotation : source;
5493
5598
  }
5494
5599
 
5495
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5496
5601
  function adoptEditSessionAnnotations(annotations, getName, previousSession) {
5497
5602
  const slotNames = /* @__PURE__ */ new Map();
5498
5603
  for (const annotation of annotations) {
@@ -5524,12 +5629,12 @@ function resolveEditSessionSlotName(session, annotation, getName) {
5524
5629
  return name;
5525
5630
  }
5526
5631
 
5527
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5528
5633
  function shouldUseTokenTransformer(options) {
5529
5634
  return options?.useTokenTransformer === true || options?.onTokenClick != null || options?.onTokenEnter != null || options?.onTokenLeave != null;
5530
5635
  }
5531
5636
 
5532
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5533
5638
  function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize = false } = {}) {
5534
5639
  if (code == null) {
5535
5640
  code = document.createElement("code");
@@ -5544,7 +5649,7 @@ function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize = f
5544
5649
  return code;
5545
5650
  }
5546
5651
 
5547
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5548
5653
  function guardWebKitScrollDuringRebuild(pre, rebuild) {
5549
5654
  const height = pre?.offsetHeight ?? 0;
5550
5655
  if (pre == null || height === 0) {
@@ -5560,7 +5665,7 @@ function guardWebKitScrollDuringRebuild(pre, rebuild) {
5560
5665
  }
5561
5666
  }
5562
5667
 
5563
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5564
5669
  function upsertHostThemeStyle({ shadowRoot, currentNode, themeCSS }) {
5565
5670
  if (themeCSS.trim() === "") {
5566
5671
  currentNode?.remove();
@@ -5577,20 +5682,20 @@ function createHostThemeStyleNode() {
5577
5682
  return node;
5578
5683
  }
5579
5684
 
5580
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5581
5686
  var _isSafari = void 0;
5582
5687
  function isSafari() {
5583
5688
  return _isSafari ??= "safari" in window && "pushNotification" in window.safari || /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
5584
5689
  }
5585
5690
 
5586
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5587
5692
  function prerenderHTMLIfNecessary(element, html) {
5588
5693
  if (html == null) return;
5589
5694
  const shadowRoot = element.shadowRoot ?? element.attachShadow({ mode: "open" });
5590
5695
  if (shadowRoot.innerHTML === "") shadowRoot.innerHTML = html;
5591
5696
  }
5592
5697
 
5593
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5594
5699
  function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, totalLines, customProperties }) {
5595
5700
  if (customProperties != null) for (const key in customProperties) {
5596
5701
  const value = customProperties[key];
@@ -5610,7 +5715,6 @@ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, di
5610
5715
  break;
5611
5716
  case "none":
5612
5717
  pre.removeAttribute("data-indicators");
5613
- break;
5614
5718
  }
5615
5719
  if (disableLineNumbers) pre.setAttribute("data-disable-line-numbers", "");
5616
5720
  else pre.removeAttribute("data-disable-line-numbers");
@@ -5623,7 +5727,7 @@ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, di
5623
5727
  return pre;
5624
5728
  }
5625
5729
 
5626
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5627
5731
  if (typeof HTMLElement !== "undefined" && customElements.get("diffs-container") == null) {
5628
5732
  let sheet;
5629
5733
  class FileDiffContainer extends HTMLElement {
@@ -5638,13 +5742,14 @@ if (typeof HTMLElement !== "undefined" && customElements.get("diffs-container")
5638
5742
  shadowRoot.adoptedStyleSheets = [sheet];
5639
5743
  }
5640
5744
  connectedCallback() {
5641
- getMeasuredScrollbarGutter(this.shadowRoot ?? this.attachShadow({ mode: "open" }));
5745
+ const shadowRoot = this.shadowRoot ?? this.attachShadow({ mode: "open" });
5746
+ getMeasuredScrollbarGutter(shadowRoot);
5642
5747
  }
5643
5748
  }
5644
5749
  customElements.define(DIFFS_TAG_NAME, FileDiffContainer);
5645
5750
  }
5646
5751
 
5647
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5648
5753
  async function awaitWithTimeout(callback, timeout = 300) {
5649
5754
  let timeoutId;
5650
5755
  try {
@@ -5656,7 +5761,7 @@ async function awaitWithTimeout(callback, timeout = 300) {
5656
5761
  }
5657
5762
  }
5658
5763
 
5659
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5660
5765
  function computeEstimatedDiffHeights({ fileDiff, metrics, disableFileHeader, hunkSeparators, expandUnchanged, expandedHunks: configuredExpandedHunks, collapsedContextThreshold, canHydratePartialDiff }) {
5661
5766
  let splitHeight = getVirtualFileHeaderRegion(metrics, disableFileHeader);
5662
5767
  let unifiedHeight = splitHeight;
@@ -5757,7 +5862,7 @@ function getChangeNoNewlineMetadataLineCounts(hunk, content) {
5757
5862
  };
5758
5863
  }
5759
5864
 
5760
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5761
5866
  function getDiffFileInput({ oldFile, newFile }, context) {
5762
5867
  if (oldFile === void 0 && newFile === void 0) return;
5763
5868
  if (oldFile === void 0 || newFile === void 0) throw new Error(`${context}: Pass null for an intentionally missing oldFile or newFile side`);
@@ -5778,7 +5883,7 @@ function getDiffFileInput({ oldFile, newFile }, context) {
5778
5883
  };
5779
5884
  }
5780
5885
 
5781
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5782
5887
  function cloneHunks(hunks) {
5783
5888
  return hunks.map((hunk) => ({
5784
5889
  ...hunk,
@@ -5794,18 +5899,18 @@ function cloneFileDiffMetadata(fileDiff) {
5794
5899
  };
5795
5900
  }
5796
5901
 
5797
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5798
5903
  var CACHE_KEY_VERSION = 1;
5799
5904
  function composeCacheKey(scope, ...segments) {
5800
5905
  return `ck${CACHE_KEY_VERSION}:${JSON.stringify([scope, ...segments])}`;
5801
5906
  }
5802
5907
 
5803
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5804
5909
  function splitFileContents(contents) {
5805
5910
  return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
5806
5911
  }
5807
5912
 
5808
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5809
5914
  function hydratePartialDiff(type, fileDiff, files) {
5810
5915
  const targetFileDiff = type === "clone" ? cloneFileDiffMetadata(fileDiff) : fileDiff;
5811
5916
  if (!targetFileDiff.isPartial) throw new Error("hydratePartialDiff: fileDiff must be partial");
@@ -5938,7 +6043,7 @@ function getLoadedFileCacheKey(oldFile, newFile) {
5938
6043
  return oldFile?.cacheKey ?? newFile?.cacheKey;
5939
6044
  }
5940
6045
 
5941
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5942
6047
  var stringDetachEncoder = new TextEncoder();
5943
6048
  var stringDetachDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
5944
6049
  var SURROGATE_CODE_UNIT_PATTERN = /[\uD800-\uDFFF]/;
@@ -5956,24 +6061,72 @@ function detachString(value) {
5956
6061
  return stringDetachDecoder.decode(stringDetachBuffer.subarray(0, written));
5957
6062
  }
5958
6063
 
5959
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
5960
6116
  var MAX_ALIGNMENT_COMPARISONS = 4096;
5961
6117
  var MIN_IMPROVEMENT_PER_PAIR = 0.5;
5962
6118
  function realignChangeContentBySimilarity(diff) {
5963
- for (const hunk of diff.hunks) {
5964
- for (let index = 0; index < hunk.hunkContent.length; index++) {
5965
- const content = hunk.hunkContent[index];
5966
- if (content.type !== "change") continue;
5967
- const replacement = realignChangeBlock(diff, content);
5968
- if (replacement != null) {
5969
- hunk.hunkContent.splice(index, 1, ...replacement);
5970
- index += replacement.length - 1;
5971
- }
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;
5972
6126
  }
5973
- slideBlankBoundaryBlocksUp(hunk, diff);
5974
6127
  }
5975
6128
  }
5976
- function slideBlankBoundaryBlocksUp(hunk, diff) {
6129
+ function slideBlankBoundaryBlocksUp(hunk, diff, resolveSlide) {
5977
6130
  const { hunkContent } = hunk;
5978
6131
  for (let index = 1; index < hunkContent.length; index++) {
5979
6132
  const block = hunkContent[index];
@@ -5995,6 +6148,10 @@ function slideBlankBoundaryBlocksUp(hunk, diff) {
5995
6148
  while (slide < previous.lines && diff.additionLines[previous.additionLineIndex + previous.lines - 1 - slide] === unit) slide++;
5996
6149
  if (slide === 0) continue;
5997
6150
  if (index === 1 && slide === previous.lines) continue;
6151
+ if (resolveSlide != null) {
6152
+ slide = resolveSlide(block, slide);
6153
+ if (slide === 0) continue;
6154
+ }
5998
6155
  block.additionLineIndex -= slide;
5999
6156
  block.deletionLineIndex -= slide;
6000
6157
  const blockAdditionEnd = block.additionLineIndex + block.additions;
@@ -6076,7 +6233,8 @@ function lineSimilarity(a, b) {
6076
6233
  return (prefix + suffix) / maxLength;
6077
6234
  }
6078
6235
 
6079
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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\/.+?)$/;
6080
6238
  function processFile(fileDiffString, options) {
6081
6239
  try {
6082
6240
  return _processFile(fileDiffString, options);
@@ -6123,26 +6281,27 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6123
6281
  if (currentFile.deletionLines.length === 1 && oldFile?.contents === "") currentFile.deletionLines.length = 0;
6124
6282
  for (const line of lines) {
6125
6283
  if (line.startsWith("diff --git")) {
6126
- const filenameMatch2 = line.trim().match(ALTERNATE_FILE_NAMES_GIT);
6127
- const prevName = filenameMatch2?.[1] ?? filenameMatch2?.[2];
6128
- const name = filenameMatch2?.[3] ?? filenameMatch2?.[4];
6129
- if (prevName == null || name == null) {
6284
+ const filenameMatch2 = line.trim().match(GIT_DIFF_HEADER_FILENAMES);
6285
+ if (filenameMatch2 == null) {
6130
6286
  if (throwOnError) throw Error("parsePatchContent: invalid git diff header");
6131
6287
  else console.error("parsePatchContent: invalid git diff header", line);
6132
6288
  continue;
6133
6289
  }
6134
- currentFile.name = detachString(name.trim());
6135
- 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);
6136
6294
  continue;
6137
6295
  }
6138
- 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;
6139
6297
  if (filenameMatch != null) {
6140
- const [, type, fileName] = filenameMatch;
6298
+ const [, type, rawFileName] = filenameMatch;
6299
+ const fileName = decodeDiffFileName(rawFileName, isGitDiff);
6141
6300
  if (type === "---" && fileName !== "/dev/null") {
6142
- const detachedFileName = detachString(fileName.trim());
6301
+ const detachedFileName = detachString(fileName);
6143
6302
  currentFile.prevName = detachedFileName;
6144
6303
  currentFile.name = detachedFileName;
6145
- } else if (type === "+++" && fileName !== "/dev/null") currentFile.name = detachString(fileName.trim());
6304
+ } else if (type === "+++" && fileName !== "/dev/null") currentFile.name = detachString(fileName);
6146
6305
  } else if (isGitDiff) {
6147
6306
  if (line.startsWith("new mode ")) currentFile.mode = detachString(line.slice(8).trim());
6148
6307
  if (line.startsWith("old mode ")) currentFile.prevMode = detachString(line.slice(8).trim());
@@ -6154,16 +6313,18 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6154
6313
  currentFile.type = "deleted";
6155
6314
  currentFile.mode = detachString(line.slice(17).trim());
6156
6315
  }
6157
- if (line.startsWith("similarity index")) if (line.startsWith("similarity index 100%")) currentFile.type = "rename-pure";
6158
- else currentFile.type = "rename-changed";
6316
+ if (line.startsWith("similarity index")) {
6317
+ if (line.startsWith("similarity index 100%")) currentFile.type = "rename-pure";
6318
+ else currentFile.type = "rename-changed";
6319
+ }
6159
6320
  if (line.startsWith("index ")) {
6160
6321
  const [, prevObjectId, newObjectId, mode] = line.trim().match(INDEX_LINE_METADATA) ?? [];
6161
6322
  if (prevObjectId != null) currentFile.prevObjectId = detachString(prevObjectId);
6162
6323
  if (newObjectId != null) currentFile.newObjectId = detachString(newObjectId);
6163
6324
  if (mode != null) currentFile.mode = detachString(mode);
6164
6325
  }
6165
- if (line.startsWith("rename from ")) currentFile.prevName = detachString(line.slice(12).trim());
6166
- 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)));
6167
6328
  }
6168
6329
  }
6169
6330
  continue;
@@ -6317,15 +6478,21 @@ function _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREA
6317
6478
  currentFile.unifiedLineCount += collapsedAfter;
6318
6479
  }
6319
6480
  if (!isGitDiff) {
6320
- if (currentFile.prevName != null && currentFile.name !== currentFile.prevName) if (currentFile.hunks.length > 0) currentFile.type = "rename-changed";
6321
- else currentFile.type = "rename-pure";
6322
- else if ((oldFile == null || oldFile.contents === "") && newFile != null && newFile.contents !== "") currentFile.type = "new";
6481
+ if (currentFile.prevName != null && currentFile.name !== currentFile.prevName) {
6482
+ if (currentFile.hunks.length > 0) currentFile.type = "rename-changed";
6483
+ else currentFile.type = "rename-pure";
6484
+ } else if ((oldFile == null || oldFile.contents === "") && newFile != null && newFile.contents !== "") currentFile.type = "new";
6323
6485
  else if (oldFile != null && oldFile.contents !== "" && (newFile == null || newFile.contents === "")) currentFile.type = "deleted";
6324
6486
  }
6325
6487
  if (currentFile.type !== "rename-pure" && currentFile.type !== "rename-changed") currentFile.prevName = void 0;
6326
6488
  realignChangeContentBySimilarity(currentFile);
6327
6489
  return currentFile;
6328
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
+ }
6329
6496
  function splitFileContents2(contents) {
6330
6497
  const lines = splitWithNewlines(contents);
6331
6498
  for (let index = 0; index < lines.length; index++) lines[index] = detachString(lines[index]);
@@ -6462,13 +6629,14 @@ function createContentGroup(type, deletionLineIndex, additionLineIndex) {
6462
6629
  };
6463
6630
  }
6464
6631
 
6465
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
6466
6633
  var MISSING_FILE_NAME = "/dev/null";
6467
6634
  function parseDiffFromFile(oldFile, newFile, options, throwOnError = false) {
6468
6635
  if (oldFile === null && newFile === null) throw new Error("parseDiffFromFile: You must pass oldFile, newFile, or both");
6469
6636
  const resolvedOldFile = oldFile ?? createMissingFile();
6470
6637
  const resolvedNewFile = newFile ?? createMissingFile();
6471
- const fileData = processFile(createTwoFilesPatch(resolvedOldFile.name, resolvedNewFile.name, resolvedOldFile.contents, resolvedNewFile.contents, resolvedOldFile.header, resolvedNewFile.header, options), {
6638
+ const patch = createTwoFilesPatch(resolvedOldFile.name, resolvedNewFile.name, resolvedOldFile.contents, resolvedNewFile.contents, resolvedOldFile.header, resolvedNewFile.header, options);
6639
+ const fileData = processFile(patch, {
6472
6640
  cacheKey: (() => {
6473
6641
  const oldCacheKey = oldFile?.cacheKey;
6474
6642
  const newCacheKey = newFile?.cacheKey;
@@ -6497,7 +6665,7 @@ function createMissingFile() {
6497
6665
  };
6498
6666
  }
6499
6667
 
6500
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
6501
6669
  var ScrollSyncManager = class {
6502
6670
  isDeletionsScrolling = false;
6503
6671
  isAdditionsScrolling = false;
@@ -6556,7 +6724,7 @@ var ScrollSyncManager = class {
6556
6724
  };
6557
6725
  };
6558
6726
 
6559
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
6560
6728
  function recomputeDiffHunks(diff, parseDiffOptions) {
6561
6729
  const recomputed = parseDiffFromFile({
6562
6730
  name: diff.prevName ?? diff.name,
@@ -6784,7 +6952,7 @@ function recomputeDiffRenderLineCounts(diff) {
6784
6952
  diff.unifiedLineCount = unifiedTotal;
6785
6953
  }
6786
6954
 
6787
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
6788
6956
  var deletionLineSetCache = /* @__PURE__ */ new WeakMap();
6789
6957
  function normalizeEditorLines(lines) {
6790
6958
  if (lines.length > 1 && lines[lines.length - 1] === "") return lines.slice(0, -1);
@@ -6807,7 +6975,7 @@ function findDivergenceCore(deletionLines, additionLines) {
6807
6975
  additionEnd
6808
6976
  };
6809
6977
  }
6810
- function rebuildSessionHunks(diff, parseDiffOptions) {
6978
+ function rebuildSessionHunks(diff, parseDiffOptions, getPreviousAdditionLine) {
6811
6979
  const previousHunks = diff.hunks;
6812
6980
  const editorAdditionLines = diff.additionLines;
6813
6981
  const canonicalAdditionLines = normalizeEditorLines(editorAdditionLines);
@@ -6815,7 +6983,7 @@ function rebuildSessionHunks(diff, parseDiffOptions) {
6815
6983
  ...diff,
6816
6984
  additionLines: canonicalAdditionLines
6817
6985
  };
6818
- const plans = buildRegionPlans(previousHunks, parseCanonicalChangeBlocks(canonicalDiff, parseDiffOptions), diff.deletionLines.length);
6986
+ const plans = buildRegionPlans(previousHunks, parseSessionChangeBlocks(canonicalDiff, parseDiffOptions, getPreviousAdditionLine), diff.deletionLines.length);
6819
6987
  const nextHunks = buildRegionHunks(canonicalDiff, plans);
6820
6988
  diff.additionLines = canonicalAdditionLines;
6821
6989
  diff.hunks = nextHunks;
@@ -6826,8 +6994,10 @@ function rebuildSessionHunks(diff, parseDiffOptions) {
6826
6994
  return { regions: plans.map((plan) => plan.previousSpan) };
6827
6995
  }
6828
6996
  function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOptions, previousAdditionLines) {
6829
- 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);
6830
6999
  if (lines.length === 0) return;
7000
+ const getPreviousAdditionLine = (index) => changedLines.has(index) ? previousAdditionLines?.get(index) : diff.additionLines[index];
6831
7001
  const { hunks } = diff;
6832
7002
  let regionIndex;
6833
7003
  let hunkIndex = 0;
@@ -6839,7 +7009,7 @@ function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOpt
6839
7009
  }
6840
7010
  const hunk = hunks[hunkIndex];
6841
7011
  const start = hunk == null ? void 0 : getHunkAdditionStart(hunk);
6842
- 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);
6843
7013
  regionIndex = hunkIndex;
6844
7014
  }
6845
7015
  if (regionIndex == null) return;
@@ -6847,7 +7017,7 @@ function applySessionChangedLines(diff, changedAdditionLineIndexes, parseDiffOpt
6847
7017
  diff.editSessionDirty = true;
6848
7018
  return;
6849
7019
  }
6850
- return rebuildSessionHunks(diff, parseDiffOptions);
7020
+ return rebuildSessionHunks(diff, parseDiffOptions, getPreviousAdditionLine);
6851
7021
  }
6852
7022
  function canRetainCanonicalBlocks(diff, changedLines, regionIndex, previousAdditionLines, parseDiffOptions) {
6853
7023
  if (previousAdditionLines == null || parseDiffOptions?.ignoreWhitespace === true || parseDiffOptions?.stripTrailingCr === true) return false;
@@ -6959,7 +7129,7 @@ function finishEditSessionForDiff(diff, parseDiffOptions) {
6959
7129
  Object.assign(diff, diff.additionLines.length <= 1 && diff.additionLines.join("") === "" ? recomputeDiffHunks(diff, parseDiffOptions) : recomputeDiffHunksForEdit(diff, parseDiffOptions));
6960
7130
  return true;
6961
7131
  }
6962
- function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
7132
+ function parseSessionChangeBlocks(diff, parseDiffOptions, getPreviousAdditionLine) {
6963
7133
  if (findDivergenceCore(diff.deletionLines, diff.additionLines) == null) return [];
6964
7134
  const parsed = parseDiffFromFile({
6965
7135
  name: diff.prevName ?? diff.name,
@@ -6969,10 +7139,24 @@ function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
6969
7139
  contents: diff.additionLines.join(""),
6970
7140
  lang: diff.lang
6971
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
+ };
6972
7155
  const blocks = [];
6973
7156
  let coveredAdditions = 0;
6974
7157
  let coveredDeletions = 0;
6975
7158
  for (const hunk of parsed.hunks) {
7159
+ slideBlankBoundaryBlocksUp(hunk, parsed, resolveSlide);
6976
7160
  const contextLines = hunk.additionCount > 0 ? hunk.additionLineIndex - coveredAdditions : hunk.deletionLineIndex - coveredDeletions;
6977
7161
  coveredAdditions += contextLines;
6978
7162
  coveredDeletions += contextLines;
@@ -6992,6 +7176,11 @@ function parseCanonicalChangeBlocks(diff, parseDiffOptions) {
6992
7176
  }
6993
7177
  return blocks;
6994
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
+ }
6995
7184
  function buildRegionPlans(previousHunks, blocks, deletionLineCount) {
6996
7185
  const previousPlans = previousHunks.map((hunk, index) => {
6997
7186
  const deletionStart = getHunkDeletionStart(hunk);
@@ -7183,7 +7372,7 @@ function finalizeSessionHunks(diff) {
7183
7372
  for (let index = 0; index < diff.hunks.length; index++) syncHunkNoEOFCRFromFullFile(diff, index);
7184
7373
  }
7185
7374
 
7186
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7187
7376
  function createEmptyRowBuffer(size) {
7188
7377
  return createHastElement({
7189
7378
  tagName: "div",
@@ -7195,7 +7384,7 @@ function createEmptyRowBuffer(size) {
7195
7384
  });
7196
7385
  }
7197
7386
 
7198
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7199
7388
  function createNoNewlineElement(type) {
7200
7389
  return createHastElement({
7201
7390
  tagName: "div",
@@ -7211,7 +7400,7 @@ function createNoNewlineElement(type) {
7211
7400
  });
7212
7401
  }
7213
7402
 
7214
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7215
7404
  function createExpandButton(type) {
7216
7405
  return createHastElement({
7217
7406
  tagName: "div",
@@ -7238,17 +7427,19 @@ function createSeparator({ type, content, expandIndex, chunked = false, slotName
7238
7427
  }));
7239
7428
  if ((type === "line-info" || type === "line-info-basic") && content != null) {
7240
7429
  const contentChildren = [];
7241
- if (expandIndex != null) if (!chunked) {
7242
- contentChildren.push(createExpandButton(!isFirstHunk && !isLastHunk ? "both" : isFirstHunk ? "down" : "up"));
7243
- buttonCount++;
7244
- } else {
7245
- if (!isFirstHunk) {
7246
- contentChildren.push(createExpandButton("up"));
7247
- buttonCount++;
7248
- }
7249
- if (!isLastHunk) {
7250
- contentChildren.push(createExpandButton("down"));
7430
+ if (expandIndex != null) {
7431
+ if (!chunked) {
7432
+ contentChildren.push(createExpandButton(!isFirstHunk && !isLastHunk ? "both" : isFirstHunk ? "down" : "up"));
7251
7433
  buttonCount++;
7434
+ } else {
7435
+ if (!isFirstHunk) {
7436
+ contentChildren.push(createExpandButton("up"));
7437
+ buttonCount++;
7438
+ }
7439
+ if (!isLastHunk) {
7440
+ contentChildren.push(createExpandButton("down"));
7441
+ buttonCount++;
7442
+ }
7252
7443
  }
7253
7444
  }
7254
7445
  contentChildren.push(createHastElement({
@@ -7294,19 +7485,19 @@ function createSeparator({ type, content, expandIndex, chunked = false, slotName
7294
7485
  });
7295
7486
  }
7296
7487
 
7297
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7298
7489
  function getHunkSeparatorSlotName(type, hunkIndex) {
7299
7490
  return `hunk-separator-${type}-${hunkIndex}`;
7300
7491
  }
7301
7492
 
7302
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7303
7494
  function getTotalLineCountFromHunks(hunks) {
7304
7495
  const lastHunk = hunks.at(-1);
7305
7496
  if (lastHunk == null) return 0;
7306
7497
  return Math.max(getHunkSideEndBoundary(lastHunk.additionStart, lastHunk.additionCount), getHunkSideEndBoundary(lastHunk.deletionStart, lastHunk.deletionCount));
7307
7498
  }
7308
7499
 
7309
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
7310
7501
  var instanceId = -1;
7311
7502
  var DiffHunksRenderer = class {
7312
7503
  options;
@@ -7319,7 +7510,7 @@ var DiffHunksRenderer = class {
7319
7510
  expandedHunks = /* @__PURE__ */ new Map();
7320
7511
  deletionAnnotations = {};
7321
7512
  additionAnnotations = {};
7322
- computedLang = "text";
7513
+ computedLangs = ["text"];
7323
7514
  renderCache;
7324
7515
  pendingHighlightResult;
7325
7516
  pendingStructuralRows;
@@ -7332,6 +7523,7 @@ var DiffHunksRenderer = class {
7332
7523
  if (workerManager?.isWorkingPool() !== true) this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES) ? getHighlighterIfLoaded() : void 0;
7333
7524
  }
7334
7525
  cleanUp() {
7526
+ this.endEditSession();
7335
7527
  this.recycle();
7336
7528
  this.expandedHunks.clear();
7337
7529
  this.workerManager = void 0;
@@ -7340,11 +7532,14 @@ var DiffHunksRenderer = class {
7340
7532
  recycle() {
7341
7533
  this.highlighter = void 0;
7342
7534
  this.diff = void 0;
7343
- 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();
7344
7540
  this.additionAnnotations = {};
7345
7541
  this.deletionAnnotations = {};
7346
7542
  this.workerManager?.cleanUpTasks(this);
7347
- this.endEditSession();
7348
7543
  }
7349
7544
  /**
7350
7545
  * Enter edit-session mode: hunk updates preserve the current region
@@ -7356,10 +7551,12 @@ var DiffHunksRenderer = class {
7356
7551
  * empty additions document gets one row for the editor's caret.
7357
7552
  */
7358
7553
  beginEditSession(diff, externalDiff) {
7359
- const { editSessionActive: wasAlreadyActive, renderCache } = this;
7554
+ const { editSessionActive: wasAlreadyActive } = this;
7360
7555
  this.editSessionActive = true;
7361
7556
  if (!wasAlreadyActive) this.pendingHighlightResult = void 0;
7362
7557
  this.diff = diff;
7558
+ if (wasAlreadyActive && this.renderCache != null && this.renderCache.diff !== diff) this.clearRenderCache();
7559
+ const { renderCache } = this;
7363
7560
  if (!diff.isPartial && diff.additionLines.length === 0) {
7364
7561
  Object.assign(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7365
7562
  this.markEditSessionPass(diff);
@@ -7395,6 +7592,7 @@ var DiffHunksRenderer = class {
7395
7592
  endEditSession() {
7396
7593
  this.editSessionActive = false;
7397
7594
  this.pendingHighlightResult = void 0;
7595
+ if (this.diff == null) this.clearRenderCache();
7398
7596
  }
7399
7597
  /**
7400
7598
  * Ensures that the DOM is compatible with editor render updates
@@ -7558,18 +7756,21 @@ var DiffHunksRenderer = class {
7558
7756
  else hastLines[line] = row;
7559
7757
  }
7560
7758
  let regionsChanged = false;
7561
- if (changedAdditionLines.length > 0) if (this.editSessionActive) if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
7562
- this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7563
- regionsChanged = true;
7564
- } else if (shouldTopAlignAdditionRecompute(diff, diff.additionLines)) {
7565
- this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, this.options.parseDiffOptions));
7566
- regionsChanged = true;
7567
- } else {
7568
- const change = applySessionChangedLines(diff, changedAdditionLines, this.options.parseDiffOptions, previousAdditionLines);
7569
- this.applyExpansionRemap(change);
7570
- regionsChanged = change != null;
7759
+ if (changedAdditionLines.length > 0) {
7760
+ if (this.editSessionActive) {
7761
+ if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
7762
+ this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7763
+ regionsChanged = true;
7764
+ } else if (shouldTopAlignAdditionRecompute(diff, diff.additionLines)) {
7765
+ this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, this.options.parseDiffOptions));
7766
+ regionsChanged = true;
7767
+ } else {
7768
+ const change = applySessionChangedLines(diff, changedAdditionLines, this.options.parseDiffOptions, previousAdditionLines);
7769
+ this.applyExpansionRemap(change);
7770
+ regionsChanged = change != null;
7771
+ }
7772
+ } else Object.assign(diff, updateDiffHunks(diff, changedAdditionLines, this.options.parseDiffOptions));
7571
7773
  }
7572
- else Object.assign(diff, updateDiffHunks(diff, changedAdditionLines, this.options.parseDiffOptions));
7573
7774
  result.baseThemeType = themeType;
7574
7775
  renderCache.isDirty = true;
7575
7776
  return regionsChanged;
@@ -7580,31 +7781,31 @@ var DiffHunksRenderer = class {
7580
7781
  applyDocumentChange(textDocument) {
7581
7782
  const { pendingStructuralRows, renderCache } = this;
7582
7783
  this.pendingStructuralRows = void 0;
7583
- if (renderCache == null) return;
7584
- const { diff, result } = renderCache;
7585
- if (result == null) return;
7784
+ const diff = this.diff ?? renderCache?.diff;
7785
+ if (diff == null) return;
7786
+ const result = renderCache?.result;
7586
7787
  if (diff.isPartial) throw new Error("Could not apply document change for partial diff");
7587
7788
  const { additionLines: previousAdditionLines } = diff;
7588
7789
  diff.additionLines = getEditorDocumentLines(textDocument);
7589
- 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);
7590
7791
  if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
7591
7792
  this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
7592
- result.code.additionLines[0] = createPlainAdditionLineElement(0, textDocument.getLineText(0));
7593
- } 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);
7594
7795
  else Object.assign(diff, recomputeDiffHunksForEdit(diff, this.options.parseDiffOptions));
7595
- if (pendingStructuralRows != null) {
7796
+ if (pendingStructuralRows != null && result != null) {
7596
7797
  for (const [line, row] of pendingStructuralRows) if (line < result.code.additionLines.length) result.code.additionLines[line] = row;
7597
7798
  }
7598
- renderCache.isDirty = true;
7799
+ if (renderCache != null) renderCache.isDirty = true;
7599
7800
  }
7600
- applySessionDocumentChange(diff) {
7801
+ applySessionDocumentChange(diff, previousAdditionLines) {
7601
7802
  const { parseDiffOptions } = this.options;
7602
7803
  const rawLines = diff.additionLines;
7603
7804
  if (shouldTopAlignAdditionRecompute(diff, rawLines)) {
7604
7805
  this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, parseDiffOptions));
7605
7806
  return;
7606
7807
  }
7607
- this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions));
7808
+ this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions, (index) => previousAdditionLines[index]));
7608
7809
  }
7609
7810
  applyRecomputePreservingSessionType(diff, update) {
7610
7811
  const sessionType = this.editSessionActive ? diff.type : void 0;
@@ -7659,7 +7860,7 @@ var DiffHunksRenderer = class {
7659
7860
  };
7660
7861
  }
7661
7862
  async initializeHighlighter() {
7662
- this.highlighter = await getSharedHighlighter(getHighlighterOptions(this.computedLang, {
7863
+ this.highlighter = await getSharedHighlighter(getHighlighterOptions(this.computedLangs, {
7663
7864
  theme: this.getLocalHighlightTheme(),
7664
7865
  preferredHighlighter: this.workerManager?.getPreferredHighlighter() ?? this.options.preferredHighlighter
7665
7866
  }));
@@ -7683,7 +7884,7 @@ var DiffHunksRenderer = class {
7683
7884
  if (!this.editSessionActive && this.workerManager?.isWorkingPool() === true) {
7684
7885
  if (this.renderCache.result == null && !massiveDiff) this.workerManager.highlightDiffAST(this, this.diff);
7685
7886
  } else if (this.highlighter == null) {
7686
- this.computedLang = diff.lang ?? getFiletypeFromFileName(diff.name);
7887
+ this.computedLangs = getDiffLanguages(diff);
7687
7888
  this.initializeHighlighter();
7688
7889
  }
7689
7890
  }
@@ -7793,10 +7994,10 @@ var DiffHunksRenderer = class {
7793
7994
  }
7794
7995
  if (!forcePlainText && hasContent && (!this.renderCache.highlighted || forceHighlight)) this.workerManager.highlightDiffAST(this, diff);
7795
7996
  } else {
7796
- this.computedLang = diff.lang ?? getFiletypeFromFileName(diff.name);
7997
+ this.computedLangs = getDiffLanguages(diff);
7797
7998
  this.highlighter ??= getHighlighterIfLoaded();
7798
7999
  const hasThemes = this.highlighter != null && areThemesAttached(options.theme);
7799
- const hasLangs = this.highlighter != null && areLanguagesAttached(this.computedLang);
8000
+ const hasLangs = this.highlighter != null && areLanguagesAttached(this.computedLangs);
7800
8001
  const canHighlight = !forcePlainText && hasLangs;
7801
8002
  if (canRenderDiff && this.highlighter != null && hasThemes && (forceHighlight || forcePlainText || !this.renderCache.highlighted && canHighlight || this.renderCache.result == null)) {
7802
8003
  const { result, options: options2 } = this.renderDiffWithHighlighter(diff, this.highlighter, forcePlainText || !hasLangs);
@@ -7834,9 +8035,9 @@ var DiffHunksRenderer = class {
7834
8035
  }
7835
8036
  async asyncHighlight(diff) {
7836
8037
  const forcePlainText = isDiffMassive(diff, this.getTokenizeMaxLength());
7837
- this.computedLang = forcePlainText ? "text" : diff.lang ?? getFiletypeFromFileName(diff.name);
8038
+ this.computedLangs = forcePlainText ? ["text"] : getDiffLanguages(diff);
7838
8039
  const hasThemes = this.highlighter != null && areThemesAttached(this.getLocalHighlightTheme());
7839
- const hasLangs = forcePlainText || this.highlighter != null && areLanguagesAttached(this.computedLang);
8040
+ const hasLangs = forcePlainText || this.highlighter != null && areLanguagesAttached(this.computedLangs);
7840
8041
  if (this.highlighter == null || !hasThemes || !hasLangs) this.highlighter = await this.initializeHighlighter();
7841
8042
  return this.renderDiffWithHighlighter(diff, this.highlighter, forcePlainText);
7842
8043
  }
@@ -7947,7 +8148,6 @@ var DiffHunksRenderer = class {
7947
8148
  break;
7948
8149
  case "additions":
7949
8150
  context.additionsGutterAST.children.push(element);
7950
- break;
7951
8151
  }
7952
8152
  }
7953
8153
  };
@@ -8529,6 +8729,12 @@ function getEditorDocumentLines(textDocument) {
8529
8729
  for (let line = 0; line < textDocument.lineCount; line++) lines.push(textDocument.getLineText(line, true));
8530
8730
  return lines;
8531
8731
  }
8732
+ function getDiffLanguages(diff) {
8733
+ if (diff.lang != null) return [diff.lang];
8734
+ const deletionLang = getFiletypeFromFileName(diff.prevName ?? diff.name);
8735
+ const additionLang = getFiletypeFromFileName(diff.name);
8736
+ return deletionLang === additionLang ? [additionLang] : [deletionLang, additionLang];
8737
+ }
8532
8738
  function isDiffMassive(diff, tokenizeMaxLength) {
8533
8739
  return Math.max(diff.additionLines.length, diff.deletionLines.length) > tokenizeMaxLength;
8534
8740
  }
@@ -8536,17 +8742,17 @@ function canHydrateCollapsedContext(fileDiff, hasFileLoader) {
8536
8742
  return fileDiff.isPartial && hasFileLoader && (fileDiff.type === "change" || fileDiff.type === "rename-changed");
8537
8743
  }
8538
8744
 
8539
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
8540
8746
  function areDiffLineAnnotationsEqual(annotationA, annotationB) {
8541
8747
  return annotationA.lineNumber === annotationB.lineNumber && annotationA.side === annotationB.side && annotationA.metadata === annotationB.metadata;
8542
8748
  }
8543
8749
 
8544
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
8545
8751
  function areHunkDataEqual(hunkA, hunkB) {
8546
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;
8547
8753
  }
8548
8754
 
8549
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
8550
8756
  function getDiffHunksRendererOptions(options) {
8551
8757
  return {
8552
8758
  theme: options?.theme,
@@ -8575,7 +8781,7 @@ function getDiffHunksRendererOptions(options) {
8575
8781
  };
8576
8782
  }
8577
8783
 
8578
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
8579
8785
  function canHydrateDiff(fileDiff) {
8580
8786
  return fileDiff.isPartial && (fileDiff.type === "change" || fileDiff.type === "rename-changed" || fileDiff.type === "rename-pure");
8581
8787
  }
@@ -8714,17 +8920,18 @@ var FileDiff2 = class {
8714
8920
  }
8715
8921
  continue;
8716
8922
  }
8717
- for (const content of hunk.hunkContent) if (content.type === "context") if (lineNumber < currentLineNumber + content.lines) {
8718
- const difference = lineNumber - currentLineNumber;
8719
- targetSplitIndex = splitIndex + difference;
8720
- targetUnifiedIndex = unifiedIndex + difference;
8721
- break hunkIterator;
8923
+ for (const content of hunk.hunkContent) if (content.type === "context") {
8924
+ if (lineNumber < currentLineNumber + content.lines) {
8925
+ const difference = lineNumber - currentLineNumber;
8926
+ targetSplitIndex = splitIndex + difference;
8927
+ targetUnifiedIndex = unifiedIndex + difference;
8928
+ break hunkIterator;
8929
+ } else {
8930
+ currentLineNumber += content.lines;
8931
+ splitIndex += content.lines;
8932
+ unifiedIndex += content.lines;
8933
+ }
8722
8934
  } else {
8723
- currentLineNumber += content.lines;
8724
- splitIndex += content.lines;
8725
- unifiedIndex += content.lines;
8726
- }
8727
- else {
8728
8935
  const sideCount = side === "deletions" ? content.deletions : content.additions;
8729
8936
  if (lineNumber < currentLineNumber + sideCount) {
8730
8937
  const indexDifference = lineNumber - currentLineNumber;
@@ -9031,13 +9238,14 @@ var FileDiff2 = class {
9031
9238
  this.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9032
9239
  };
9033
9240
  expandHunk = (hunkIndex, direction, expansionLineCountOverride) => {
9034
- this.hunksRenderer.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9035
9241
  this.loadFilesIfNecessary();
9242
+ this.hunksRenderer.expandHunk(hunkIndex, direction, expansionLineCountOverride);
9036
9243
  this.rerender();
9037
9244
  };
9038
9245
  loadFilesIfNecessary() {
9039
9246
  const { fileDiff, options: { loadDiffFiles } } = this;
9040
- 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");
9041
9249
  const promise = this.loadFilesForDiff(fileDiff, loadDiffFiles);
9042
9250
  const pendingFiles = this.pendingFiles = {
9043
9251
  fileDiff,
@@ -9048,10 +9256,41 @@ var FileDiff2 = class {
9048
9256
  };
9049
9257
  pendingFiles.promise = promise.finally(clearPendingFiles);
9050
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
+ }
9051
9290
  async loadFilesForDiff(fileDiff, loadDiffFiles) {
9052
9291
  try {
9053
9292
  const files = await loadDiffFiles(fileDiff);
9054
- if (!this.enabled || this.fileDiff !== fileDiff) return;
9293
+ if (this.fileDiff !== fileDiff) return;
9055
9294
  await this.handleFilesLoaded(fileDiff, files);
9056
9295
  } catch (error) {
9057
9296
  if (this.options.disableErrorHandling === true) throw error;
@@ -9062,7 +9301,7 @@ var FileDiff2 = class {
9062
9301
  if (this.fileDiff !== expectedDiff || !expectedDiff.isPartial) return;
9063
9302
  hydratePartialDiff("merge", expectedDiff, files);
9064
9303
  this.setHydratedState(files);
9065
- if (this.startHydratedEditSession(expectedDiff)) {
9304
+ if (this.installHydratedSessionDiff(expectedDiff)) {
9066
9305
  this.rerender();
9067
9306
  return;
9068
9307
  }
@@ -9070,17 +9309,14 @@ var FileDiff2 = class {
9070
9309
  if (!this.enabled || this.fileDiff !== expectedDiff) return;
9071
9310
  this.rerender();
9072
9311
  }
9073
- startHydratedEditSession(expectedDiff) {
9074
- 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");
9075
9314
  if (this.fileDiff !== expectedDiff) return false;
9076
- const { editor } = this;
9077
9315
  if (this.editSession?.outgoingDiff != null) {
9078
9316
  this.installEditSession(expectedDiff);
9079
9317
  return true;
9080
9318
  }
9081
- if (editor == null || this.editSession != null) return false;
9082
- this.installEditSession(expectedDiff, editor.__getDocumentContents(getAdditionFile(expectedDiff)), editor.__getDocumentSessionState());
9083
- return true;
9319
+ return false;
9084
9320
  }
9085
9321
  updateExternalDiff(incomingExternalDiff, lineAnnotations) {
9086
9322
  if (areDiffTargetsEqual(this.fileDiff, incomingExternalDiff)) return false;
@@ -9090,8 +9326,7 @@ var FileDiff2 = class {
9090
9326
  if (incomingExternalDiff.isPartial) this.loadFilesIfNecessary();
9091
9327
  else this.installEditSession(incomingExternalDiff);
9092
9328
  if (this.editSession != null) this.editSession.outgoingDiff = outgoingDiff;
9093
- } else if (this.editor != null) if (incomingExternalDiff.isPartial) this.loadFilesIfNecessary();
9094
- else this.installEditSession(incomingExternalDiff, this.editor.__getDocumentContents(getAdditionFile(incomingExternalDiff)), this.editor.__getDocumentSessionState());
9329
+ }
9095
9330
  if (this.editSession?.annotations != null && lineAnnotations != null) {
9096
9331
  this.lineAnnotations = lineAnnotations;
9097
9332
  this.editSession.annotations = adoptEditSessionAnnotations(lineAnnotations, getLineAnnotationName, this.editSession.annotations);
@@ -9276,9 +9511,9 @@ var FileDiff2 = class {
9276
9511
  const sync = (highlighter3) => {
9277
9512
  if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getLatestDiff() !== fileDiff) return;
9278
9513
  const replacement = this.editSession?.outgoingDiff;
9279
- const externalDiff = this.fileDiff;
9514
+ const { fileDiff: externalDiff } = this;
9280
9515
  const externalDocument = replacement != null && externalDiff != null && replacement !== fileDiff;
9281
- const resetHistory = externalDocument ? shouldResetUndoState(replacement, externalDiff) : false;
9516
+ const resetHistory = externalDocument && replacement != null && externalDiff != null ? shouldResetUndoState(replacement, externalDiff) : false;
9282
9517
  editor.__syncRenderView({
9283
9518
  highlighter: highlighter3,
9284
9519
  fileContainer,
@@ -9375,6 +9610,7 @@ var FileDiff2 = class {
9375
9610
  __attachEditor(editor) {
9376
9611
  if (this.type !== "file-diff") throw new Error(`FileDiff.__attachEditor: cannot attach an editor to a "${this.type}" diff`);
9377
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");
9378
9614
  const detach = () => {
9379
9615
  this.editor = void 0;
9380
9616
  this.finishEditSession();
@@ -9518,6 +9754,11 @@ var FileDiff2 = class {
9518
9754
  this.rerender();
9519
9755
  this.interactionManager.setSelectionDirty();
9520
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
+ }
9521
9762
  updateRenderCache(dirtyLines, themeType, options = {}) {
9522
9763
  const editSessionDiff = this.editSession?.diff;
9523
9764
  if (editSessionDiff == null) throw new Error("FileDiff.updateRenderCache: requires an active edit session");
@@ -9658,6 +9899,10 @@ var FileDiff2 = class {
9658
9899
  this.placeHolder.dataset.placeholder = "";
9659
9900
  shadowRoot.appendChild(this.placeHolder);
9660
9901
  }
9902
+ return this.setPlaceholderHeight(height);
9903
+ }
9904
+ setPlaceholderHeight(height) {
9905
+ if (this.placeHolder == null) return false;
9661
9906
  this.placeHolder.style.setProperty("height", `${height}px`);
9662
9907
  return true;
9663
9908
  }
@@ -10509,7 +10754,7 @@ function getElementChildren(node) {
10509
10754
  return node.children ?? [];
10510
10755
  }
10511
10756
 
10512
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
10513
10758
  var VIRTUALIZED_FILE_DIFF_LAYOUT_CHECKPOINT_INTERVAL = 3e3;
10514
10759
  var NO_GHOST_TEXT_ROWS = /* @__PURE__ */ new Map();
10515
10760
  var instanceId3 = -1;
@@ -10551,7 +10796,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10551
10796
  this.resetLayoutCache({ includeEstimatedHeights: true });
10552
10797
  }
10553
10798
  setLineAnnotations(lineAnnotations) {
10554
- if (this.syncLineAnnotations(lineAnnotations)) this.resetLayoutCache({ includeEstimatedHeights: false });
10799
+ if (this.syncLineAnnotations(lineAnnotations)) this.forceRenderOverride = true;
10555
10800
  }
10556
10801
  syncLineAnnotations(lineAnnotations) {
10557
10802
  if (lineAnnotations == null || !this.isNewAnnotations(lineAnnotations) || lineAnnotations.length === 0 && this.getLatestAnnotations().length === 0) return false;
@@ -10560,7 +10805,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10560
10805
  }
10561
10806
  syncEditSessionAnnotationsFromEditor(lineAnnotations) {
10562
10807
  if (super.syncEditSessionAnnotationsFromEditor(lineAnnotations)) {
10563
- this.resetLayoutCache({ includeEstimatedHeights: false });
10808
+ this.forceRenderOverride = true;
10564
10809
  return true;
10565
10810
  }
10566
10811
  return false;
@@ -10653,8 +10898,8 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10653
10898
  }
10654
10899
  reconcileHeights() {
10655
10900
  let hasHeightChange = false;
10656
- const { options: { overflow = "scroll" }, cache: { ghostTextRowsByIndex }, metrics: { lineHeight } } = this;
10657
- const fileDiff = this.getRenderedDiff();
10901
+ const { options: { overflow = "scroll" }, metrics: { lineHeight } } = this;
10902
+ const fileDiff = this.placeHolder != null ? this.getLayoutDiff() : this.getRenderedDiff();
10658
10903
  if (this.fileContainer == null || fileDiff == null) {
10659
10904
  if (this.height !== 0) hasHeightChange = true;
10660
10905
  this.height = 0;
@@ -10662,18 +10907,21 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10662
10907
  }
10663
10908
  this.top = this.getVirtualizedTop();
10664
10909
  hasHeightChange = this.applyGhostTextRows(fileDiff, this.editor?.__getGhostTextRows() ?? NO_GHOST_TEXT_ROWS);
10665
- const lineAnnotations = this.getLatestAnnotations();
10666
- if (overflow === "scroll" && lineAnnotations.length === 0 && !this.isResizeDebuggingEnabled()) {
10667
- 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
+ }
10668
10917
  return hasHeightChange;
10669
10918
  }
10670
10919
  const diffStyle = this.getDiffStyle();
10671
10920
  const codeGroups = diffStyle === "split" ? [this.codeDeletions, this.codeAdditions] : [this.codeUnified];
10672
- const hasFileAnnotations = this.hasFileAnnotations(fileDiff);
10673
- if (this.renderRange != null && hasFileAnnotations && shouldRenderFileAnnotations(this.renderRange)) {
10921
+ if (this.renderRange != null && shouldRenderFileAnnotations(this.renderRange)) {
10674
10922
  const nextFileAnnotationHeight = measureFileAnnotationHeight(codeGroups) ?? 0;
10675
10923
  if (this.setFileAnnotationHeight(nextFileAnnotationHeight)) hasHeightChange = true;
10676
- } else if (!hasFileAnnotations && this.setFileAnnotationHeight(0)) hasHeightChange = true;
10924
+ }
10677
10925
  for (const codeGroup of codeGroups) {
10678
10926
  if (codeGroup == null) continue;
10679
10927
  const content = codeGroup.children[1];
@@ -10686,6 +10934,8 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10686
10934
  const lineIndex = parseLineIndex(lineIndexAttr, diffStyle);
10687
10935
  const ghostRows = ghostTextRowsByIndex.get(lineIndex) ?? 0;
10688
10936
  if (skipsGhostRows && ghostRows > 0) continue;
10937
+ const previousDelta = this.cache.heightDeltas.get(lineIndex) ?? 0;
10938
+ if (!measureAllRows && previousDelta === ghostRows * lineHeight) continue;
10689
10939
  let measuredHeight = line.getBoundingClientRect().height + ghostRows * lineHeight;
10690
10940
  let hasMetadata = false;
10691
10941
  if (line.nextElementSibling instanceof HTMLElement && ("lineAnnotation" in line.nextElementSibling.dataset || "noNewline" in line.nextElementSibling.dataset)) {
@@ -10693,7 +10943,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10693
10943
  measuredHeight += line.nextElementSibling.getBoundingClientRect().height;
10694
10944
  }
10695
10945
  const estimatedHeight = this.getEstimatedLineHeight(hasMetadata);
10696
- const previousDelta = this.cache.heightDeltas.get(lineIndex) ?? 0;
10697
10946
  const nextDelta = measuredHeight - estimatedHeight;
10698
10947
  if (nextDelta === previousDelta) continue;
10699
10948
  hasHeightChange = true;
@@ -10723,7 +10972,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10723
10972
  if (pendingHydratedDiff.expectedDiff === fileDiff) {
10724
10973
  Object.assign(fileDiff, pendingHydratedDiff.nextDiff);
10725
10974
  this.setHydratedState(pendingHydratedDiff.files);
10726
- this.startHydratedEditSession(fileDiff);
10975
+ this.installHydratedSessionDiff(fileDiff);
10727
10976
  this.forceRenderOverride = true;
10728
10977
  resetLayoutCache = true;
10729
10978
  resetEstimatedHeights = true;
@@ -10740,7 +10989,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10740
10989
  const diffChanged = this.updateExternalDiff(fileDiff, lineAnnotations);
10741
10990
  const { pendingRenderDiff, layoutDiffChanged, renderedDiffChanged, annotationsChanged } = this.updatePendingRender(fileDiff, lineAnnotations);
10742
10991
  if (!this.forceRenderOverride && (diffChanged || renderedDiffChanged || annotationsChanged)) this.forceRenderOverride = true;
10743
- if (reset?.resetDiffLayoutCache === true || layoutDiffChanged || annotationsChanged) resetLayoutCache = true;
10992
+ if (reset?.resetDiffLayoutCache === true || layoutDiffChanged) resetLayoutCache = true;
10744
10993
  if (layoutDiffChanged || reset?.resetDiffLayoutCache === true && reset.includeEstimatedDiffHeights) resetEstimatedHeights = true;
10745
10994
  if (reset?.metrics != null) {
10746
10995
  this.metrics = computeVirtualFileMetrics(reset.metrics);
@@ -10932,6 +11181,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10932
11181
  }
10933
11182
  expandHunk = (hunkIndex, direction, expansionLineCountOverride) => {
10934
11183
  if (this.fileDiff == null) return;
11184
+ this.loadFilesIfNecessary();
10935
11185
  if (this.isAdvancedMode()) {
10936
11186
  this.pendingExpansions ??= [];
10937
11187
  this.pendingExpansions.push({
@@ -10944,7 +11194,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10944
11194
  this.resetLayoutCache({ includeEstimatedHeights: true });
10945
11195
  this.computeApproximateSize();
10946
11196
  }
10947
- this.loadFilesIfNecessary();
10948
11197
  this.forceRenderOverride = true;
10949
11198
  this.virtualizer.instanceChanged(this, true);
10950
11199
  };
@@ -10953,7 +11202,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10953
11202
  if (this.isAdvancedMode()) {
10954
11203
  const nextDiff = hydratePartialDiff("clone", expectedDiff, files);
10955
11204
  await awaitWithTimeout(() => this.primeHighlightCache(nextDiff));
10956
- if (!this.enabled || this.fileDiff !== expectedDiff) return;
11205
+ if (this.fileDiff !== expectedDiff) return;
10957
11206
  this.pendingHydratedDiff = {
10958
11207
  expectedDiff,
10959
11208
  nextDiff,
@@ -10962,9 +11211,9 @@ var VirtualizedFileDiff = class extends FileDiff2 {
10962
11211
  } else {
10963
11212
  hydratePartialDiff("merge", expectedDiff, files);
10964
11213
  this.setHydratedState(files);
10965
- if (!this.startHydratedEditSession(expectedDiff)) {
11214
+ if (!this.installHydratedSessionDiff(expectedDiff)) {
10966
11215
  await awaitWithTimeout(() => this.primeHighlightCache(expectedDiff));
10967
- if (!this.enabled || this.fileDiff !== expectedDiff) return;
11216
+ if (this.fileDiff !== expectedDiff) return;
10968
11217
  }
10969
11218
  this.resetLayoutCache({ includeEstimatedHeights: true });
10970
11219
  this.computeApproximateSize();
@@ -11163,11 +11412,11 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11163
11412
  pendingRenderDiff: this.pendingRender.diff,
11164
11413
  layoutDiffChanged: false,
11165
11414
  renderedDiffChanged: false,
11166
- annotationsChanged: false
11415
+ annotationsChanged: this.syncLineAnnotations(lineAnnotations)
11167
11416
  };
11168
11417
  return this.updatePendingRender(nextFileDiff, lineAnnotations);
11169
11418
  })();
11170
- if (annotationsChanged || layoutDiffChanged) this.resetLayoutCache({ includeEstimatedHeights: layoutDiffChanged });
11419
+ if (layoutDiffChanged) this.resetLayoutCache({ includeEstimatedHeights: true });
11171
11420
  if (!isSetup) {
11172
11421
  this.computeApproximateSize(false, pendingRenderDiff);
11173
11422
  const virtualizer = this.getSimpleVirtualizer();
@@ -11181,7 +11430,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11181
11430
  this.isSetup = true;
11182
11431
  } else {
11183
11432
  this.top ??= this.getVirtualizedTop();
11184
- if (layoutDiffChanged) {
11433
+ if (this.layoutDirty && this.isSimpleMode()) {
11185
11434
  this.getSimpleVirtualizer()?.markDOMDirty();
11186
11435
  this.computeApproximateSize(false, pendingRenderDiff);
11187
11436
  }
@@ -11192,7 +11441,6 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11192
11441
  this.additionFile = newFile;
11193
11442
  }
11194
11443
  if (targetChanged) this.clearReusableHeader();
11195
- this.pendingRender = void 0;
11196
11444
  return this.renderPlaceholder(this.height);
11197
11445
  }
11198
11446
  const windowSpecs = this.virtualizer.getWindowSpecs();
@@ -11209,7 +11457,7 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11209
11457
  });
11210
11458
  }
11211
11459
  finalizeRender() {
11212
- 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");
11213
11461
  this.pendingRender = void 0;
11214
11462
  if (this.isSimpleMode()) this.getSimpleVirtualizer()?.requestHeightReconcile(this);
11215
11463
  }
@@ -11517,15 +11765,17 @@ var VirtualizedFileDiff = class extends FileDiff2 {
11517
11765
  return false;
11518
11766
  }
11519
11767
  });
11520
- if (firstVisibleHunk == null) if (measuredFileAnnotationVisible) {
11521
- firstVisibleHunk = 0;
11522
- centerHunk = 0;
11523
- } else return {
11524
- startingLine: 0,
11525
- totalLines: 0,
11526
- bufferBefore: 0,
11527
- bufferAfter: fileHeight - headerRegion - paddingBottom
11528
- };
11768
+ if (firstVisibleHunk == null) {
11769
+ if (measuredFileAnnotationVisible) {
11770
+ firstVisibleHunk = 0;
11771
+ centerHunk = 0;
11772
+ } else return {
11773
+ startingLine: 0,
11774
+ totalLines: 0,
11775
+ bufferBefore: 0,
11776
+ bufferAfter: fileHeight - headerRegion - paddingBottom
11777
+ };
11778
+ }
11529
11779
  centerHunk ??= firstVisibleHunk;
11530
11780
  const idealStartHunk = Math.round(centerHunk - totalHunks / 2);
11531
11781
  const maxStartHunk = Math.max(0, Math.ceil(lineCount / hunkLineCount) - totalHunks);
@@ -11633,7 +11883,7 @@ function parseLineIndex(lineIndexAttr, diffStyle) {
11633
11883
  return diffStyle === "split" ? splitIndex : unifiedIndex;
11634
11884
  }
11635
11885
 
11636
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
11637
11887
  import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
11638
11888
  function templateRender(children, __html) {
11639
11889
  if (typeof window === "undefined" && __html != null) return /* @__PURE__ */ jsxs2(Fragment2, { children: [/* @__PURE__ */ jsx4("template", {
@@ -11643,7 +11893,7 @@ function templateRender(children, __html) {
11643
11893
  return /* @__PURE__ */ jsx4(Fragment2, { children });
11644
11894
  }
11645
11895
 
11646
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
11647
11897
  import { createContext as createContext3, useCallback as useCallback2, useContext as useContext3, useState as useState2 } from "react";
11648
11898
  import { jsx as jsx5 } from "react/jsx-runtime";
11649
11899
  var VirtualizerContext = createContext3(void 0);
@@ -11651,14 +11901,15 @@ function useVirtualizer() {
11651
11901
  return useContext3(VirtualizerContext);
11652
11902
  }
11653
11903
 
11654
- // node_modules/.pnpm/@pierre+diffs@1.4.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
11655
- 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";
11656
11906
  var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect2 : useLayoutEffect;
11657
11907
  function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOptions, editStateKey, lineAnnotations, selectedLines, prerenderedHTML, metrics, hasGutterRenderUtility, hasCustomHeader, disableWorkerPool, edit, onEditChange: _onEditChange, onEditComplete: _onEditComplete }) {
11658
11908
  const simpleVirtualizer = useVirtualizer();
11659
11909
  const controlledSelection = selectedLines !== void 0;
11660
11910
  const poolManager = useContext4(WorkerPoolContext);
11661
11911
  const createEditor = useCreateEditor();
11912
+ const [asyncAttachError, setAsyncAttachError] = useState3();
11662
11913
  const handleOnEditChange = useStableCallback((event) => _onEditChange?.(event));
11663
11914
  const onEditChange = _onEditChange != null ? handleOnEditChange : void 0;
11664
11915
  const acceptedCache = useRef2(null);
@@ -11688,23 +11939,16 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11688
11939
  return decision;
11689
11940
  });
11690
11941
  const onEditComplete = _onEditComplete != null ? handleOnEditComplete : void 0;
11691
- const effectiveFileDiff = useMemo(() => {
11692
- if (fileDiff != null) return fileDiff;
11693
- const { current: accepted } = acceptedCache;
11694
- const filePair = accepted?.filePair;
11695
- if (accepted != null && filePair != null) {
11696
- if (isSameFilePair(oldFile, newFile, filePair.stale) || isSameFilePair(oldFile, newFile, filePair.installed)) return filePair.fileDiff;
11697
- accepted.filePair = null;
11698
- }
11699
- return parseDiffFromFile(oldFile ?? null, newFile ?? null, options?.parseDiffOptions);
11700
- }, [
11942
+ const effectiveFileDiff = useEffectiveFileDiff({
11943
+ acceptedCache,
11701
11944
  fileDiff,
11702
- oldFile,
11703
11945
  newFile,
11704
- options?.parseDiffOptions
11705
- ]);
11946
+ oldFile,
11947
+ parseDiffOptions: options?.parseDiffOptions
11948
+ });
11706
11949
  const instanceRef = useRef2(null);
11707
11950
  const disposeEditorRef = useRef2(null);
11951
+ const pendingAttachRef = useRef2(null);
11708
11952
  const getEditor = useStableCallback(() => {
11709
11953
  if (createEditor == null) throw new Error("FileDiff: EditContext is not attached");
11710
11954
  return createEditor("file-diff", editorOptions ?? {}, editStateKey);
@@ -11728,7 +11972,6 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11728
11972
  onEditComplete,
11729
11973
  options
11730
11974
  }), !disableWorkerPool ? poolManager : void 0, true);
11731
- if (edit && disposeEditorRef.current == null) disposeEditorRef.current = applyEdit(instanceRef.current, getEditor);
11732
11975
  instanceRef.current.hydrate({
11733
11976
  fileDiff: effectiveFileDiff,
11734
11977
  fileContainer,
@@ -11737,6 +11980,7 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11737
11980
  });
11738
11981
  } else {
11739
11982
  if (instanceRef.current == null) throw new Error("useFileDiffInstance: A FileDiff instance should exist when unmounting");
11983
+ pendingAttachRef.current = null;
11740
11984
  instanceRef.current.cleanUp();
11741
11985
  instanceRef.current = null;
11742
11986
  disposeEditorRef.current = null;
@@ -11755,10 +11999,13 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11755
11999
  });
11756
12000
  const forceRender = newOptions !== void 0 && !areOptionsEqual(instance.options, newOptions);
11757
12001
  instance.setOptions(newOptions);
11758
- if (!edit && disposeEditorRef.current != null) {
11759
- const { current: disposeEditor } = disposeEditorRef;
11760
- disposeEditorRef.current = null;
11761
- 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
+ }
11762
12009
  }
11763
12010
  const resolved = resolveAcceptedValues(effectiveFileDiff, lineAnnotations, acceptedCache);
11764
12011
  instance.render({
@@ -11767,17 +12014,66 @@ function useFileDiffInstance({ fileDiff, oldFile, newFile, options, editorOption
11767
12014
  lineAnnotations: resolved.lineAnnotations
11768
12015
  });
11769
12016
  if (selectedLines !== void 0) instance.setSelectedLines(selectedLines);
11770
- 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
+ });
11771
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;
11772
12052
  return {
11773
12053
  fileDiff: effectiveFileDiff,
11774
12054
  ref,
11775
- getHoveredLine: useCallback3(() => {
11776
- return instanceRef.current?.getHoveredLine();
11777
- }, []),
11778
- getAnnotationSlotName: useCallback3((annotation) => instanceRef.current?.getAnnotationSlotName(annotation) ?? getLineAnnotationName(annotation), [])
12055
+ getHoveredLine,
12056
+ getAnnotationSlotName: getAnnotationSlotName2
11779
12057
  };
11780
12058
  }
12059
+ function useEffectiveFileDiff({ acceptedCache, fileDiff, newFile, oldFile, parseDiffOptions }) {
12060
+ return useMemo(() => {
12061
+ if (fileDiff != null) return fileDiff;
12062
+ const { current: accepted } = acceptedCache;
12063
+ const filePair = accepted?.filePair;
12064
+ if (accepted != null && filePair != null) {
12065
+ if (isSameFilePair(oldFile, newFile, filePair.stale) || isSameFilePair(oldFile, newFile, filePair.installed)) return filePair.fileDiff;
12066
+ accepted.filePair = null;
12067
+ }
12068
+ return parseDiffFromFile(oldFile ?? null, newFile ?? null, parseDiffOptions);
12069
+ }, [
12070
+ acceptedCache,
12071
+ fileDiff,
12072
+ oldFile,
12073
+ newFile,
12074
+ parseDiffOptions
12075
+ ]);
12076
+ }
11781
12077
  function isSameFilePair(oldFile, newFile, filePair) {
11782
12078
  return areFileTargetsEqual(oldFile ?? void 0, filePair.oldFile ?? void 0) && areFileTargetsEqual(newFile ?? void 0, filePair.newFile ?? void 0);
11783
12079
  }
@@ -11789,11 +12085,15 @@ function resolveAcceptedValues(fileDiff, lineAnnotations, acceptedCache) {
11789
12085
  };
11790
12086
  const { fileDiff: acceptedDiff, annotations: acceptedAnnotations } = accepted;
11791
12087
  let resolvedFileDiff = fileDiff;
11792
- if (acceptedDiff != null) if (areDiffTargetsEqual(fileDiff, acceptedDiff.stale)) resolvedFileDiff = acceptedDiff.installed;
11793
- else accepted.fileDiff = null;
12088
+ if (acceptedDiff != null) {
12089
+ if (areDiffTargetsEqual(fileDiff, acceptedDiff.stale)) resolvedFileDiff = acceptedDiff.installed;
12090
+ else accepted.fileDiff = null;
12091
+ }
11794
12092
  let resolvedAnnotations = lineAnnotations;
11795
- if (acceptedAnnotations != null) if (lineAnnotations === acceptedAnnotations.stale) resolvedAnnotations = acceptedAnnotations.installed;
11796
- else accepted.annotations = null;
12093
+ if (acceptedAnnotations != null) {
12094
+ if (lineAnnotations === acceptedAnnotations.stale) resolvedAnnotations = acceptedAnnotations.installed;
12095
+ else accepted.annotations = null;
12096
+ }
11797
12097
  if (accepted.fileDiff == null && accepted.annotations == null && accepted.filePair == null) acceptedCache.current = null;
11798
12098
  return {
11799
12099
  fileDiff: resolvedFileDiff,
@@ -11821,7 +12121,7 @@ function applyEdit(instance, getEditor) {
11821
12121
  }
11822
12122
  }
11823
12123
 
11824
- // node_modules/.pnpm/@pierre+diffs@1.4.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
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
11825
12125
  import { jsx as jsx6 } from "react/jsx-runtime";
11826
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 }) {
11827
12127
  const { fileDiff, ref, getHoveredLine, getAnnotationSlotName: getAnnotationSlotName2 } = useFileDiffInstance({
@@ -11841,26 +12141,27 @@ function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey,
11841
12141
  onEditChange,
11842
12142
  onEditComplete
11843
12143
  });
12144
+ const children = renderDiffChildren({
12145
+ fileDiff,
12146
+ renderCustomHeader,
12147
+ renderHeaderPrefix,
12148
+ renderHeaderFilenameSuffix,
12149
+ renderHeaderMetadata,
12150
+ renderAnnotation,
12151
+ lineAnnotations,
12152
+ renderGutterUtility,
12153
+ getHoveredLine,
12154
+ getAnnotationSlotName: getAnnotationSlotName2
12155
+ });
11844
12156
  return /* @__PURE__ */ jsx6(DIFFS_TAG_NAME, {
11845
12157
  ref,
11846
12158
  className,
11847
12159
  style,
11848
- children: templateRender(renderDiffChildren({
11849
- fileDiff,
11850
- renderCustomHeader,
11851
- renderHeaderPrefix,
11852
- renderHeaderFilenameSuffix,
11853
- renderHeaderMetadata,
11854
- renderAnnotation,
11855
- lineAnnotations,
11856
- renderGutterUtility,
11857
- getHoveredLine,
11858
- getAnnotationSlotName: getAnnotationSlotName2
11859
- }), prerenderedHTML)
12160
+ children: templateRender(children, prerenderedHTML)
11860
12161
  });
11861
12162
  }
11862
12163
 
11863
- // web/app/dist/server/assets/session-tool-renderer-BFEWy2Pk.js
12164
+ // web/app/dist/server/assets/session-tool-renderer-TiFeeJEc.js
11864
12165
  var STATUS_TEXT = {
11865
12166
  queued: "Waiting to generate",
11866
12167
  generating: "Generating image",
@@ -12394,7 +12695,7 @@ function TodoList({ items, title = "To-dos", open, defaultOpen = true, onOpenCha
12394
12695
  const contentId = `${baseId}-content`;
12395
12696
  const viewportRef = useRef3(null);
12396
12697
  const previousComplete = useRef3(false);
12397
- const [internalOpen, setInternalOpen] = useState3(defaultOpen);
12698
+ const [internalOpen, setInternalOpen] = useState4(defaultOpen);
12398
12699
  const currentOpen = open ?? internalOpen;
12399
12700
  const completed = items.filter((item) => item.status === "completed").length;
12400
12701
  const allComplete = items.length > 0 && completed === items.length;
@@ -12576,7 +12877,7 @@ function ToolApproval({ tool, title = "Allow this tool to run?", description, pa
12576
12877
  const reduce = useReducedMotion() ?? false;
12577
12878
  const detailsId = `${useId()}-details`;
12578
12879
  const previousStatus = useRef3(status);
12579
- const [internalOpen, setInternalOpen] = useState3(defaultOpen);
12880
+ const [internalOpen, setInternalOpen] = useState4(defaultOpen);
12580
12881
  const currentOpen = open ?? internalOpen;
12581
12882
  const setOpen = useCallback4((next) => {
12582
12883
  if (open === void 0) setInternalOpen(next);
@@ -13051,9 +13352,9 @@ function QuestionPrompt({ questions, questionIndex = 1, totalQuestions, onPrevio
13051
13352
  const clampedIndex = Math.max(1, Math.min(questionIndex, resolvedTotal));
13052
13353
  const activeQuestion = questions[clampedIndex - 1];
13053
13354
  const customEnabled = activeQuestion?.allowCustom ?? false;
13054
- const [selectedIds, setSelectedIds] = useState3(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).selectedIds);
13055
- const [customText, setCustomText] = useState3(() => seedPromptState(initialAnswer, activeQuestion?.kind, customEnabled).customText);
13056
- 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);
13057
13358
  const showNav = resolvedTotal > 1 && (!!onPreviousQuestion || !!onNextQuestion);
13058
13359
  const canGoPrev = clampedIndex > 1;
13059
13360
  const canGoNext = clampedIndex < resolvedTotal;
@@ -13224,20 +13525,20 @@ function formatAnswer(answer) {
13224
13525
  return ids || "Answered";
13225
13526
  }
13226
13527
  function QuestionTool({ part }) {
13227
- const [localIndex, setLocalIndex] = useState3(part.input?.questionIndex ?? 1);
13528
+ const [localIndex, setLocalIndex] = useState4(part.input?.questionIndex ?? 1);
13228
13529
  const questions = part.input?.questions ?? [];
13229
13530
  const totalQuestions = part.input?.totalQuestions ?? questions.length;
13230
13531
  const isControlled = typeof part.input?.questionIndex === "number";
13231
13532
  const questionIndex = isControlled ? part.input?.questionIndex ?? 1 : questions.length > 0 ? localIndex : part.input?.questionIndex ?? 1;
13232
13533
  const clampedIndex = Math.max(1, Math.min(questionIndex, totalQuestions));
13233
13534
  const question = questions[clampedIndex - 1];
13234
- const [localAnswers, setLocalAnswers] = useState3({});
13235
- const [prevQuestionIndex, setPrevQuestionIndex] = useState3(part.input?.questionIndex);
13535
+ const [localAnswers, setLocalAnswers] = useState4({});
13536
+ const [prevQuestionIndex, setPrevQuestionIndex] = useState4(part.input?.questionIndex);
13236
13537
  if (part.input?.questionIndex !== prevQuestionIndex) {
13237
13538
  setPrevQuestionIndex(part.input?.questionIndex);
13238
13539
  if (typeof part.input?.questionIndex === "number") setLocalIndex(part.input.questionIndex);
13239
13540
  }
13240
- const [prevToolCallId, setPrevToolCallId] = useState3(part.toolCallId);
13541
+ const [prevToolCallId, setPrevToolCallId] = useState4(part.toolCallId);
13241
13542
  if (part.toolCallId !== prevToolCallId) {
13242
13543
  setPrevToolCallId(part.toolCallId);
13243
13544
  setLocalAnswers({});
@@ -13966,11 +14267,11 @@ function getPlanFileName(plan) {
13966
14267
  var PlanTool = memo(function PlanTool2({ part, chatStatus }) {
13967
14268
  const { isPending } = getToolStatus(part, chatStatus);
13968
14269
  const plan = part.input?.plan;
13969
- const [isExpanded, setIsExpanded] = useState3(false);
13970
- const [isApproved, setIsApproved] = useState3(false);
13971
- const [isActing, setIsActing] = useState3(null);
13972
- const [isRefining, setIsRefining] = useState3(false);
13973
- 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("");
13974
14275
  if (!plan) return null;
13975
14276
  const fileName = getPlanFileName(plan);
13976
14277
  const summary = plan.summary?.trim() ?? "";
@@ -14255,7 +14556,7 @@ var TodoTool = memo(function TodoTool2({ part }) {
14255
14556
  });
14256
14557
  }, areToolPropsEqual);
14257
14558
  function useElapsedTime(startedAt, isPending) {
14258
- const [elapsedMs, setElapsedMs] = useState3(0);
14559
+ const [elapsedMs, setElapsedMs] = useState4(0);
14259
14560
  useEffect3(() => {
14260
14561
  if (isPending && startedAt) {
14261
14562
  setElapsedMs(Date.now() - startedAt);
@@ -14663,8 +14964,8 @@ function formatStreamCounts(fileCount, searchCount) {
14663
14964
  var ToolGroup = memo(function ToolGroup2({ part, nestedTools = EMPTY_NESTED_TOOLS, chatStatus, completeLabel, shimmerLabel, interruptedLabel, maxVisibleTools = 5, defaultOpen, showElapsed = true }) {
14664
14965
  const { isPending, isInterrupted } = getToolStatus(part, chatStatus);
14665
14966
  const description = part.input?.description || "";
14666
- const [expanded, setExpanded] = useState3(defaultOpen ?? false);
14667
- const [visibleCount, setVisibleCount] = useState3(0);
14967
+ const [expanded, setExpanded] = useState4(defaultOpen ?? false);
14968
+ const [visibleCount, setVisibleCount] = useState4(0);
14668
14969
  const startedAt = part.callProviderMetadata?.custom?.startedAt ?? part.startedAt;
14669
14970
  const hasNestedTools = nestedTools.length > 0;
14670
14971
  const streamKey = part.toolCallId ?? part.id ?? "";