@p4code/cli 0.0.29 → 0.0.31

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 (88) hide show
  1. package/README.md +103 -0
  2. package/dist/bin.mjs +24 -6
  3. package/dist/client/assets/DiffPanel-c5R2pEEQ.js +98 -0
  4. package/dist/client/assets/{FilePreviewPanel-CYqEF-Ly.js → FilePreviewPanel-B8LT3XHT.js} +5 -5
  5. package/dist/client/assets/PreviewPanel-ChSo7xBo.js +2 -0
  6. package/dist/client/assets/{angular-html-DNsrGRc9.js → angular-html-BZbe_Mji.js} +2 -2
  7. package/dist/client/assets/{angular-ts-C6-plvuT.js → angular-ts-D3SSQi1S.js} +2 -2
  8. package/dist/client/assets/{apl-VqfbyG85.js → apl-BCzWUaHQ.js} +2 -2
  9. package/dist/client/assets/arrow-right-NmVSwLfW.js +2 -0
  10. package/dist/client/assets/{astro-8YYimDdZ.js → astro-DWDqnl_n.js} +2 -2
  11. package/dist/client/assets/{blade-CzBZSrIV.js → blade-B5O25HA0.js} +2 -2
  12. package/dist/client/assets/{c-CNPMmwne.js → c-BrLS8wuY.js} +2 -2
  13. package/dist/client/assets/{cobol-86pJcKMz.js → cobol-BeimWZJh.js} +2 -2
  14. package/dist/client/assets/{coffee-CGkeiuBX.js → coffee-FQrwuys2.js} +2 -2
  15. package/dist/client/assets/{cpp-B8k9jaKZ.js → cpp-B_VwMS5x.js} +2 -2
  16. package/dist/client/assets/{crystal-Dx8rl20L.js → crystal-DyYdQZKh.js} +2 -2
  17. package/dist/client/assets/{css-2puI5lgX.js → css-DGGtrJmw.js} +2 -2
  18. package/dist/client/assets/{edge-D4FUIorq.js → edge-B3SL8XAB.js} +2 -2
  19. package/dist/client/assets/{elixir-BRtF9YiH.js → elixir-Chf8Jho9.js} +2 -2
  20. package/dist/client/assets/{elm-BNdqh0xn.js → elm-C4MgBGfc.js} +2 -2
  21. package/dist/client/assets/{erb-QiZUayOm.js → erb-BCnRa3V_.js} +2 -2
  22. package/dist/client/assets/{fileCommentAnnotations-_ckxu-Nq.js → fileCommentAnnotations-CtyKPn_Y.js} +2 -2
  23. package/dist/client/assets/{git-rebase-FjYcYaMh.js → git-rebase-BbVWgaoN.js} +2 -2
  24. package/dist/client/assets/{glimmer-js-D-mQJ6qV.js → glimmer-js-Bu5r_dYx.js} +2 -2
  25. package/dist/client/assets/{glimmer-ts-alq8R4io.js → glimmer-ts-BBLrNmp3.js} +2 -2
  26. package/dist/client/assets/{glsl-Dd1BHD7z.js → glsl-mCzoTlCJ.js} +2 -2
  27. package/dist/client/assets/{graphql-CcSmOucl.js → graphql-BRoY0SFM.js} +2 -2
  28. package/dist/client/assets/{hack-1D68uw0q.js → hack-CDJLMGM_.js} +2 -2
  29. package/dist/client/assets/{haml-CCJx-f9Y.js → haml-DZamMXcc.js} +2 -2
  30. package/dist/client/assets/{handlebars-BTmd7K38.js → handlebars-vTZ1bx2H.js} +2 -2
  31. package/dist/client/assets/{html-OwAg4yxZ.js → html-B38s_b65.js} +2 -2
  32. package/dist/client/assets/{html-derivative-CfSpQJVI.js → html-derivative-C7NvUimc.js} +2 -2
  33. package/dist/client/assets/{http-D-zv8Dkv.js → http-C0dDdni3.js} +2 -2
  34. package/dist/client/assets/{hurl-C_9QVrls.js → hurl-DPmKVIri.js} +2 -2
  35. package/dist/client/assets/index-D2WvC623.js +581 -0
  36. package/dist/client/assets/{java-CphFez3D.js → java-CaHgyjHb.js} +2 -2
  37. package/dist/client/assets/{javascript-CuhWhnHV.js → javascript-ERQLQ7zl.js} +2 -2
  38. package/dist/client/assets/{jinja-QC4NTfW8.js → jinja-4xDyaefd.js} +2 -2
  39. package/dist/client/assets/{jison-D2UaLeRw.js → jison-bNH1i2BZ.js} +2 -2
  40. package/dist/client/assets/{json-B_6EXKs9.js → json-BI0hKrWf.js} +2 -2
  41. package/dist/client/assets/{jsx-BKePIkG8.js → jsx-DYcImfO3.js} +2 -2
  42. package/dist/client/assets/{julia-DOXGRp4q.js → julia-CatQ_xGN.js} +2 -2
  43. package/dist/client/assets/{just-dysLm0XN.js → just-Cd9-TZ-0.js} +2 -2
  44. package/dist/client/assets/{latex-DKJgwkV8.js → latex-BHJ4IQ3V.js} +2 -2
  45. package/dist/client/assets/{liquid-B2BaWaG_.js → liquid-CGiwUqPE.js} +2 -2
  46. package/dist/client/assets/{lua-Dl0oNuDI.js → lua-IX3V49qo.js} +2 -2
  47. package/dist/client/assets/{marko-ZYdRdmRt.js → marko-DXW3Vjyg.js} +2 -2
  48. package/dist/client/assets/{mdc-BT4iz0CW.js → mdc-CAPBhPDc.js} +2 -2
  49. package/dist/client/assets/{nginx-BMG7_x1D.js → nginx-B2ZleHl9.js} +2 -2
  50. package/dist/client/assets/{nim-HSz65QwX.js → nim-CDzMs3Gd.js} +2 -2
  51. package/dist/client/assets/{perl-K3PESIyz.js → perl-HGJcg_RW.js} +2 -2
  52. package/dist/client/assets/{php-CbSsTKrV.js → php-DKNLCEUD.js} +2 -2
  53. package/dist/client/assets/{pug-DVfkpZFq.js → pug-B77XkwoR.js} +2 -2
  54. package/dist/client/assets/{qml-Bi7irMPq.js → qml-Cq97r3hg.js} +2 -2
  55. package/dist/client/assets/{r-C1yhio2_.js → r-9NXTWVwV.js} +2 -2
  56. package/dist/client/assets/{razor-CWmmhrPd.js → razor-B66A50Sk.js} +2 -2
  57. package/dist/client/assets/{regexp-BDALIP0p.js → regexp-DsN2JDjy.js} +2 -2
  58. package/dist/client/assets/{rst-DY6alFvJ.js → rst-BHB65PQY.js} +2 -2
  59. package/dist/client/assets/{ruby-DfGLHu1I.js → ruby-D4x-bXT5.js} +2 -2
  60. package/dist/client/assets/{sas-eNjd7tYS.js → sas-CcOo4Zs4.js} +2 -2
  61. package/dist/client/assets/{scss-CD6m7-Bl.js → scss-3izmxa4t.js} +2 -2
  62. package/dist/client/assets/{shellscript-CgJVKvdu.js → shellscript-B5cqHgy2.js} +2 -2
  63. package/dist/client/assets/{shellsession-DfhT55_a.js → shellsession-DwNRz__b.js} +2 -2
  64. package/dist/client/assets/{soy-BMxyGli1.js → soy-BQZEMDnB.js} +2 -2
  65. package/dist/client/assets/{sql-T1RdWILZ.js → sql-DF60DHbX.js} +2 -2
  66. package/dist/client/assets/{stata-CSHSc9y1.js → stata-Bjnp-ETf.js} +2 -2
  67. package/dist/client/assets/{surrealql-BNNNyZkj.js → surrealql-DoAfgxN5.js} +2 -2
  68. package/dist/client/assets/{svelte-C4LkhGOG.js → svelte-B-o9k5Ta.js} +2 -2
  69. package/dist/client/assets/{templ-Ar04ka0k.js → templ-GiZFqUc-.js} +2 -2
  70. package/dist/client/assets/{tex-CWmNB2Lj.js → tex-CvV7Lgzn.js} +2 -2
  71. package/dist/client/assets/textarea-C5pb3-sE.js +46 -0
  72. package/dist/client/assets/{ts-tags-D568Q_BZ.js → ts-tags-CtF59285.js} +2 -2
  73. package/dist/client/assets/{tsx-Bi2dY_9w.js → tsx-Bqb898Zc.js} +2 -2
  74. package/dist/client/assets/{twig-D5gCvoXn.js → twig-6O36FARd.js} +2 -2
  75. package/dist/client/assets/{typescript-DfzSrRla.js → typescript-Ok9JEm5g.js} +2 -2
  76. package/dist/client/assets/{vue-Cr3u1yii.js → vue-CC1bqK94.js} +2 -2
  77. package/dist/client/assets/{vue-html-B1KNQm8Q.js → vue-html-D_kX09ho.js} +2 -2
  78. package/dist/client/assets/{vue-vine-DUvg6lrb.js → vue-vine-BkkPcOCK.js} +2 -2
  79. package/dist/client/assets/{xml-Ba8gVYaX.js → xml-B1imOShW.js} +2 -2
  80. package/dist/client/assets/{xsl-DD6bwSDU.js → xsl-CRaiqObJ.js} +2 -2
  81. package/dist/client/assets/{yaml-DUYA-AHd.js → yaml-CrCwLKC_.js} +2 -2
  82. package/dist/client/index.html +8 -3
  83. package/package.json +6 -2
  84. package/dist/client/assets/DiffPanel-ISmUh6EE.js +0 -98
  85. package/dist/client/assets/PreviewPanel-CXM2ps-_.js +0 -2
  86. package/dist/client/assets/arrow-right-DursbRoR.js +0 -2
  87. package/dist/client/assets/index-D1nhcl1-.js +0 -581
  88. package/dist/client/assets/textarea-ChQXZeGG.js +0 -46
package/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # @p4code/cli
2
+
3
+ The P4Code server and CLI. Runs coding agents (Claude Code, Codex, OpenCode,
4
+ Cursor, Grok) against your local repositories and serves a web UI for driving
5
+ them, so you can start work from whichever machine you happen to be at.
6
+
7
+ Installs the `p4` binary.
8
+
9
+ > A fork of [t3code](https://github.com/pingdotgg/t3code) by T3 Tools Inc.,
10
+ > maintained for personal use. Not affiliated with or endorsed by T3 Tools Inc.
11
+
12
+ ## Requirements
13
+
14
+ **Node.js 24.13.1 or newer.** The server stores state through `node:sqlite`,
15
+ whose API only stabilised in Node 24 — on older releases it installs fine and
16
+ then fails at runtime.
17
+
18
+ You also need at least one agent CLI on your `PATH` (`claude`, `codex`,
19
+ `opencode`, `cursor-agent`), and `git`. `gh` is used for pull-request actions.
20
+
21
+ ## Install
22
+
23
+ ```bash
24
+ npm install -g @p4code/cli
25
+ ```
26
+
27
+ ## Quick start
28
+
29
+ From inside a git repository:
30
+
31
+ ```bash
32
+ p4
33
+ ```
34
+
35
+ That starts the server and opens the web UI. To run headless — no browser, and
36
+ it prints the pairing details you need to connect from elsewhere:
37
+
38
+ ```bash
39
+ p4 serve
40
+ ```
41
+
42
+ ## Reaching it from another machine
43
+
44
+ Bind to an interface your other devices can see, or let Tailscale terminate
45
+ HTTPS for you on the tailnet:
46
+
47
+ ```bash
48
+ p4 serve --host 0.0.0.0 --port 3773
49
+ p4 serve --tailscale-serve # HTTPS on your MagicDNS name
50
+ ```
51
+
52
+ Clients authenticate with a pairing token — the server prints one on a headless
53
+ start, and you can mint more:
54
+
55
+ ```bash
56
+ p4 auth pairing --help # one-time client pairing tokens
57
+ p4 auth session --help # bearer sessions: list, revoke
58
+ ```
59
+
60
+ ## Running it in the background
61
+
62
+ Install as a per-user service so it comes back on its own:
63
+
64
+ ```bash
65
+ p4 service install # macOS: launchd LaunchAgent · Linux: systemd user unit
66
+ p4 service status
67
+ p4 service update # re-point at the current build and restart
68
+ p4 service uninstall
69
+ ```
70
+
71
+ Deliberately per-user rather than system-wide: the server reads its state from
72
+ `~/.p4`, and the agent CLIs it spawns authenticate against your own home
73
+ directory and login keychain — none of which a root-owned service would see.
74
+
75
+ **On macOS that means it starts with your login session.** For a machine you
76
+ want reachable unattended, enable automatic login in _System Settings → Users &
77
+ Groups_. Linux does the equivalent with `loginctl enable-linger`, which
78
+ `service install` handles for you.
79
+
80
+ Logs land in `~/.p4/userdata/logs/boot-service.log`.
81
+
82
+ ## Commands
83
+
84
+ | Command | What it does |
85
+ | ----------------- | ----------------------------------- |
86
+ | `p4` / `p4 start` | Run the server and open the web UI |
87
+ | `p4 serve` | Run headless; print pairing details |
88
+ | `p4 service` | Manage the background service |
89
+ | `p4 auth` | Pairing tokens and bearer sessions |
90
+ | `p4 project` | Add, remove, rename projects |
91
+
92
+ `p4 --help` lists every flag; each subcommand takes `--help` too. Shell
93
+ completions are available via `p4 --completions <bash|zsh|fish|sh>`.
94
+
95
+ ## Configuration
96
+
97
+ State lives in `~/.p4` by default; override with `--base-dir` or `P4CODE_HOME`.
98
+ Useful flags: `--port`, `--host`, `--mode`, `--no-browser`, `--log-level`.
99
+
100
+ ## License
101
+
102
+ MIT. See [LICENSE](./LICENSE) — the upstream T3 Tools Inc. copyright is
103
+ retained, as the license requires.
package/dist/bin.mjs CHANGED
@@ -232,7 +232,7 @@ const make$67 = () => {
232
232
  const layer$62 = Layer.sync(NetService, make$67);
233
233
  //#endregion
234
234
  //#region package.json
235
- var version = "0.0.29";
235
+ var version = "0.0.31";
236
236
  //#endregion
237
237
  //#region ../../packages/contracts/src/baseSchemas.ts
238
238
  const TrimmedString = Schema$1.String.pipe(Schema$1.decodeTo(Schema$1.String, SchemaTransformation.transformOrFail({
@@ -3165,6 +3165,7 @@ Schema$1.Literals([
3165
3165
  ]);
3166
3166
  const DesktopUpdateChannelSchema = Schema$1.Literals(["latest", "nightly"]);
3167
3167
  const DesktopAppStageLabelSchema = Schema$1.Literals([
3168
+ "Latest",
3168
3169
  "Alpha",
3169
3170
  "Dev",
3170
3171
  "Nightly"
@@ -10628,7 +10629,7 @@ function formatIssuedPairingCredential(credential, options) {
10628
10629
  `Issued client pairing token ${credential.id}.`,
10629
10630
  `Token: ${credential.credential}`,
10630
10631
  ...pairUrl ? [`Pair URL: ${pairUrl}`] : [],
10631
- `Expires at: ${credential.expiresAt}`
10632
+ `Expires at: ${toIsoString(credential.expiresAt)}`
10632
10633
  ].join(newline) + newline;
10633
10634
  }
10634
10635
  function formatPairingCredentialList(credentials, options) {
@@ -19622,10 +19623,10 @@ AnalyticsService.layerTest;
19622
19623
  //#endregion
19623
19624
  //#region src/service/pinnedRuntime.ts
19624
19625
  /**
19625
- * A pinned runtime is an exact `p4@<version>` npm-installed into
19626
+ * A pinned runtime is an exact `@p4code/cli@<version>` npm-installed into
19626
19627
  * <baseDir>/runtime/versions/<version>. The boot service points its systemd
19627
19628
  * unit here, and server self-update installs the target version here before
19628
- * switching over — never `npx p4`, whose cache is ephemeral and whose
19629
+ * switching over — never `npx @p4code/cli`, whose cache is ephemeral and whose
19629
19630
  * registry fetch at boot would make startup depend on the network.
19630
19631
  */
19631
19632
  const PINNED_RUNTIME_DIR = "runtime";
@@ -19651,7 +19652,7 @@ var PinnedRuntimeInstallError = class extends Schema$1.TaggedErrorClass()("Pinne
19651
19652
  }
19652
19653
  };
19653
19654
  /**
19654
- * Installs `p4@<version>` into the pinned runtime directory unless a complete
19655
+ * Installs `@p4code/cli@<version>` into the pinned runtime directory unless a complete
19655
19656
  * install is already there, and returns its paths. The sentinel is written
19656
19657
  * only after npm exits 0; checking the entry file alone is not enough — npm
19657
19658
  * extracts files before running native builds (node-pty), so a killed
@@ -63797,11 +63798,28 @@ function codexContinuationIdentity(layout) {
63797
63798
  const decodeCodexSettings = Schema$1.decodeSync(CodexSettings);
63798
63799
  const DRIVER_KIND$3 = ProviderDriverKind.make("codex");
63799
63800
  const SNAPSHOT_REFRESH_INTERVAL$3 = Duration.minutes(5);
63801
+ /**
63802
+ * Codex's own installer puts a launcher in `~/.local/bin` pointing at a
63803
+ * versioned release under `~/.codex/packages/standalone/`. That layout matches
63804
+ * none of the package-manager patterns, so resolution used to fall through to
63805
+ * the npm default — which installs a *second* Codex that PATH never reaches.
63806
+ * The update then reports `unchanged` forever: the command succeeds, but
63807
+ * verification re-reads the standalone binary, which never moved.
63808
+ */
63809
+ function isCodexNativeCommandPath(commandPath) {
63810
+ const normalized = normalizeCommandPath(commandPath);
63811
+ return normalized.endsWith("/.local/bin/codex") || normalized.endsWith("/.local/bin/codex.exe") || normalized.includes("/.codex/packages/standalone/");
63812
+ }
63800
63813
  const UPDATE$3 = makePackageManagedProviderMaintenanceResolver({
63801
63814
  provider: DRIVER_KIND$3,
63802
63815
  npmPackageName: "@openai/codex",
63803
63816
  homebrewFormula: "codex",
63804
- nativeUpdate: null
63817
+ nativeUpdate: {
63818
+ executable: "codex",
63819
+ args: ["update"],
63820
+ lockKey: "codex-native",
63821
+ isCommandPath: isCodexNativeCommandPath
63822
+ }
63805
63823
  });
63806
63824
  /**
63807
63825
  * Stamp instance identity onto a `ServerProvider` snapshot produced by the
@@ -0,0 +1,98 @@
1
+ import{Ds as e,Ff as t,Fo as n,Go as r,H as i,Hr as a,It as o,Jr as s,Ko as c,Mi as l,Mo as u,Ms as d,Pf as f,Pr as p,R as m,Rr as h,Ss as g,Uf as _,Vr as v,Wo as y,Xr as b,Xt as x,Yr as S,an as ee,ao as C,ds as w,ec as T,en as E,g as D,gs as O,ip as k,lp as A,m as j,o as M,op as te,p as N,qo as P,qr as ne,to as F,u as re,w as ie}from"./textarea-C5pb3-sE.js";import{t as ae}from"./arrow-right-NmVSwLfW.js";import{a as oe,c as I,n as se,o as ce}from"./fileCommentAnnotations-CtyKPn_Y.js";import{A as le,Bn as ue,C as L,Cn as de,D as fe,Dn as pe,E as me,En as he,Fn as ge,Hn as _e,Ht as R,In as ve,Ir as ye,Jt as z,Kn as B,Ln as be,Lr as xe,M as Se,Nn as Ce,O as we,Pn as Te,Qt as V,R as H,Rn as Ee,Sr as De,T as U,Tn as Oe,Un as ke,Ut as W,Vn as Ae,Wt as je,Yn as Me,Yt as Ne,Zt as G,_r as Pe,_t as Fe,bt as Ie,gr as Le,gt as Re,h as ze,hr as Be,ht as Ve,j as He,k as Ue,mt as K,nn as We,tn as Ge,vt as Ke,w as qe,wn as Je,xr as Ye,xt as Xe,yr as Ze,yt as Qe,zn as $e,zr as et}from"./index-D2WvC623.js";var tt=P(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),nt=P(`pilcrow`,[[`path`,{d:`M13 4v16`,key:`8vvj80`}],[`path`,{d:`M17 4v16`,key:`7dpous`}],[`path`,{d:`M19 4H9.5a4.5 4.5 0 0 0 0 9H13`,key:`sh4n9v`}]]),rt=P(`rows-3`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M21 9H3`,key:`1338ky`}],[`path`,{d:`M21 15H3`,key:`9uk58r`}]]);function q(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function J(e){let t=window.devicePixelRatio??1;return Math.round(e*t)/t}var it=`theme.disableLineNumbers.overflow.themeType.disableFileHeader.disableVirtualizationBuffers.preferredHighlighter.useCSSClasses.useTokenTransformer.tokenizeMaxLineLength.tokenizeMaxLength.unsafeCSS.diffStyle.diffIndicators.disableBackground.expandUnchanged.collapsedContextThreshold.lineDiffType.maxLineDiffLength.expansionLineCount.lineHoverHighlight.enableTokenInteractionsOnWhitespace.enableGutterUtility.__debugPointerEvents.enableLineSelection.controlledSelection.disableErrorHandling`.split(`.`),at=[`theme`,`disableLineNumbers`,`overflow`,`themeType`,`disableFileHeader`,`disableVirtualizationBuffers`,`preferredHighlighter`,`useCSSClasses`,`useTokenTransformer`,`tokenizeMaxLineLength`,`tokenizeMaxLength`,`unsafeCSS`,`lineHoverHighlight`,`enableTokenInteractionsOnWhitespace`,`enableGutterUtility`,`__debugPointerEvents`,`enableLineSelection`,`controlledSelection`,`disableErrorHandling`],ot=[`renderCustomHeader`,`renderHeaderPrefix`,`renderHeaderMetadata`,`renderAnnotation`,`renderGutterUtility`,`onPostRender`,`onGutterUtilityClick`,`onLineClick`,`onLineNumberClick`,`onLineEnter`,`onLineLeave`,`onTokenClick`,`onTokenEnter`,`onTokenLeave`],st=[`onLineSelected`,`onLineSelectionStart`,`onLineSelectionChange`,`onLineSelectionEnd`],ct=Symbol(`CodeView.itemOptionsState`);function lt(e,t){Object.defineProperty(e,ct,{configurable:!1,enumerable:!1,value:t})}function ut(e){return e[ct]}function Y(e,t,n){Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get(){return n(this)}})}var dt=120,ft=`--diffs-overflow-override`,pt=12e6,mt=1e6,ht=2e6,X=pt-ht,gt=pt-mt,Z=(()=>{let{navigator:e}=globalThis,t=e.userAgent,n=/iP(?:hone|ad|od)/.test(t),r=e.platform===`MacIntel`&&e.maxTouchPoints>1;return(n||r)&&/AppleWebKit/.test(t)&&/Safari/.test(t)&&!/(CriOS|FxiOS|EdgiOS|OPiOS)/.test(t)})(),_t=class e{static __STOP=!1;static __lastScrollPosition=0;type=`advanced`;config={overscrollSize:200,intersectionObserverMargin:0,resizeDebugging:!1};items=[];idToItem=new Map;selectedLines=null;instanceToItem=new Map;layoutDirtyIndex;pendingLayoutReset;renderOptionsRevision=0;slotCoordinator;slotSnapshot;scrollListeners=new Set;scrollHeight=0;containerHeight=-1;scrollTop=0;scrollPageOffset=0;scrollDirty=!0;scrollInteractionFixTimer;pointerEventsDisabled=!1;codeOverflowFix=!1;height=0;heightDirty=!0;windowSpecs={top:0,bottom:0};renderState={scrollTop:-1,firstIndex:-1,lastIndex:-1,stickyHeight:0,stickyTop:-1,stickyBottom:-1};itemMetricsCache=z;fileOptionsPrototype;diffOptionsPrototype;pendingScrollTarget;pendingLayoutAnchor;shouldFixContainerFocus=!1;scrollAnimation;root;resizeObserver;container=document.createElement(`div`);stickyContainer=document.createElement(`div`);stickyOffset=document.createElement(`div`);elementPool=[];elementPoolVersion=0;elementPoolTracker=new WeakMap;pendingElementPool=[];options;workerManager;isContainerManaged;constructor(e={theme:V},t,n=!1){this.options=e,this.computeMetricsCache(e.itemMetrics),this.fileOptionsPrototype=this.createFileOptionsPrototype(),this.diffOptionsPrototype=this.createDiffOptionsPrototype(),this.workerManager=t,this.isContainerManaged=n,this.stickyOffset.style.contain=`layout size`,this.stickyContainer.style.position=`sticky`,this.stickyContainer.style.width=`100%`,this.stickyContainer.style.contain=`layout style inline-size`,this.stickyContainer.style.isolation=`isolate`,this.stickyContainer.style.display=`flex`,this.stickyContainer.style.flexDirection=`column`}getLayout(){return this.options.layout??Ne}computeMetricsCache(e){return this.itemMetricsCache={hunkLineCount:e?.hunkLineCount??z.hunkLineCount,lineHeight:e?.lineHeight??z.lineHeight,diffHeaderHeight:e?.diffHeaderHeight??z.diffHeaderHeight,hunkSeparatorHeight:e?.hunkSeparatorHeight,spacing:e?.spacing??z.spacing,paddingTop:e?.paddingTop,paddingBottom:e?.paddingBottom},this.itemMetricsCache}getSmoothScrollSettings(){return this.options.smoothScrollSettings??G}shouldDisablePointerEvents(){return this.options.pointerEventsOnScroll!==!0}shouldValidateItemHeights(){return Ge&&this.options.__devOnlyValidateItemHeights===!0}validateRenderedItemHeight(e){if(!this.shouldValidateItemHeights()||e.element==null)return;let t=e.instance.getAdvancedStickySpecs();if(t==null)return;let n=t.height,r=e.element.getBoundingClientRect().height;n!==r&&console.error(`CodeView: reconciled item height does not match DOM height`,{id:e.item.id,type:e.type,index:e.index,version:e.version,expectedHeight:n,actualHeight:r,delta:r-n,stickyTopOffset:t.topOffset,virtualizedHeight:e.instance.getVirtualizedHeight(),top:e.top,scrollTop:this.getScrollTop(),windowSpecs:{...this.windowSpecs},element:e.element,instance:e.instance})}validateStickyContainerHeight(){if(!this.shouldValidateItemHeights())return;let{firstIndex:e,lastIndex:t,stickyHeight:n,stickyTop:r,stickyBottom:i}=this.renderState;if(e===-1||t===-1)return;let a=this.stickyContainer.getBoundingClientRect().height;Math.abs(a-n)<1||console.error(`CodeView: sticky container height does not match computed layout`,{computedStickyHeight:n,actualStickyHeight:a,delta:a-n,stickyTop:r,stickyBottom:i,firstIndex:e,lastIndex:t,firstStickySpecs:this.items[e]?.instance.getAdvancedStickySpecs(),lastStickySpecs:this.items[t]?.instance.getAdvancedStickySpecs(),scrollTop:this.getScrollTop(),scrollPageOffset:this.scrollPageOffset,windowSpecs:{...this.windowSpecs},stickyContainer:this.stickyContainer})}clearScrollInteractionTimer(){this.scrollInteractionFixTimer!=null&&(clearTimeout(this.scrollInteractionFixTimer),this.scrollInteractionFixTimer=void 0)}suspendScrollInteractions(){this.clearScrollInteractionTimer(),this.shouldDisablePointerEvents()&&!this.pointerEventsDisabled&&(this.stickyContainer.style.pointerEvents=`none`,this.pointerEventsDisabled=!0),Z&&!this.codeOverflowFix&&(this.stickyContainer.style.setProperty(ft,`hidden`),this.codeOverflowFix=!0),this.scrollInteractionFixTimer=setTimeout(this.restoreScrollInteractions,dt)}restoreScrollInteractions=()=>{this.clearScrollInteractionTimer(),this.pointerEventsDisabled&&=(this.stickyContainer.style.removeProperty(`pointer-events`),!1),this.codeOverflowFix&&=(this.stickyContainer.style.setProperty(ft,`auto`),!1)};syncLayout(){let{gap:e,paddingBottom:t,paddingTop:n}=this.getLayout();this.stickyContainer.style.gap=`${e}px`,this.container?.style.setProperty(`margin-top`,`${n}px`),this.container?.style.setProperty(`margin-bottom`,`${t}px`)}setup(t){if(this.root!=null)throw Error(`CodeView.setup: already setup`);this.workerManager?.subscribeToThemeChanges(this),this.root=t,this.root.style.overflowAnchor=`none`,this.root.hasAttribute(`tabindex`)||(this.root.tabIndex=-1),this.container??=document.createElement(`div`),this.container.style.contain=`layout style`,this.syncLayout(),this.container.appendChild(this.stickyOffset),this.container.appendChild(this.stickyContainer),this.root.appendChild(this.container),this.scrollDirty=!0,this.heightDirty=!0,this.resizeObserver=new ResizeObserver(this.handleResize),this.resizeObserver.observe(this.stickyContainer),this.root.addEventListener(`scroll`,this.handleScroll,{passive:!0}),this.root.addEventListener(`wheel`,this.clearPendingScroll,{passive:!0}),this.root.addEventListener(`touchstart`,this.clearPendingScroll,{passive:!0}),this.root.addEventListener(`pointerdown`,this.clearPendingScroll,{passive:!0}),this.root.addEventListener(`keydown`,this.clearPendingScroll,{passive:!0}),this.resizeObserver.observe(this.root),this.render(!0),window.__INSTANCE=this,window.__TOGGLE=()=>{e.__STOP?(e.__STOP=!1,this.scrollTo({type:`position`,position:e.__lastScrollPosition,behavior:`instant`})):(e.__lastScrollPosition=this.getScrollTop(),e.__STOP=!0)}}reset(){this.restoreScrollInteractions(),this.cleanAllRenderedItems(),this.selectedLines=null,this.items.length=0,this.idToItem.clear(),this.instanceToItem.clear(),this.layoutDirtyIndex=void 0,this.pendingLayoutReset=void 0,this.stickyContainer.textContent=``,this.stickyOffset.style.height=``,this.container?.style.removeProperty(`height`),this.containerHeight=-1,this.windowSpecs={top:0,bottom:0},this.pendingLayoutAnchor=void 0,this.shouldFixContainerFocus=!1,this.height=0,this.scrollTop=0,this.scrollPageOffset=0,this.scrollHeight=0,this.scrollDirty=!0,this.heightDirty=!0,this.resetRenderState(),this.isContainerManaged||this.flushSlotCoordinator()}cleanUp(){this.reset(),this.clearElementPool(),this.restoreScrollInteractions(),this.workerManager?.unsubscribeToThemeChanges(this),this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.root?.removeEventListener(`scroll`,this.handleScroll),this.root?.removeEventListener(`wheel`,this.clearPendingScroll),this.root?.removeEventListener(`touchstart`,this.clearPendingScroll),this.root?.removeEventListener(`pointerdown`,this.clearPendingScroll),this.root?.removeEventListener(`keydown`,this.clearPendingScroll),this.root?.style.removeProperty(`overflow-anchor`),this.container?.remove(),this.stickyOffset.remove(),this.stickyContainer.remove(),this.stickyContainer.textContent=``,this.root=void 0,this.container=void 0}cleanAllRenderedItems(){if(this.renderState.firstIndex!==-1)for(let e=this.renderState.firstIndex;e<=this.renderState.lastIndex;e++){let t=this.items[e];if(t==null)throw Error(`CodeView.cleanAllRenderedItems: Item does not exist at index: ${e}`);this.releaseRenderedItem(t)}}primeScrollTarget(e){e.type!==`position`&&this.idToItem.get(e.id)?.instance.primeHighlightCache()}getElementPoolLimit(){let e=this.getHeight()+this.config.overscrollSize*2,{diffHeaderHeight:t}=this.itemMetricsCache;return Math.max(8,Math.ceil(e/Math.max(t,10))+1)*(this.isContainerManaged?2:1)}acquireElement(){this.promotePendingPooledElements();let e=this.elementPool.pop();for(;e!=null&&!this.isElementPoolGenerationCurrent(e);)e=this.elementPool.pop();return e??=document.createElement(We),this.markElementPoolGenerationCurrent(e),e}releaseRenderedItem(e){let{element:t}=e;t!=null&&this.renderedItemOwnsFocus(t)&&(this.shouldFixContainerFocus=!0),e.instance.cleanUp(!0),e.element=void 0,t!=null&&(t.remove(),this.cleanElement(t),this.queueElementForPool(t))}renderedItemOwnsFocus(e){let{activeElement:t}=document;return t===e||e.contains(t)||e.shadowRoot?.activeElement!=null}fixContainerFocus(){this.shouldFixContainerFocus&&(this.shouldFixContainerFocus=!1,this.root?.focus({preventScroll:!0}))}cleanElement(e){let{shadowRoot:t}=e;if(t!=null)for(let e of Array.from(t.children))St(e)||e.remove();this.isContainerManaged||e.replaceChildren()}queueElementForPool(e){let t=this.getElementPoolLimit();!this.isElementPoolGenerationCurrent(e)||this.getElementPoolSize()>=t||(this.isElementClean(e)?this.elementPool.push(e):this.pendingElementPool.push(e))}promotePendingPooledElements(){if(this.pendingElementPool.length===0)return;let{pendingElementPool:e}=this;this.pendingElementPool=[];let t=this.getElementPoolLimit();for(let n of e)this.isElementPoolGenerationCurrent(n)&&this.isElementClean(n)&&this.elementPool.length<t?this.elementPool.push(n):this.isElementPoolGenerationCurrent(n)&&this.getElementPoolSize()<t&&this.pendingElementPool.push(n)}isElementClean(e){return e.childNodes.length===0}getElementPoolSize(){return this.elementPool.length+this.pendingElementPool.length}clearElementPool(){this.elementPool.length=0,this.pendingElementPool.length=0}invalidateElementPool(){this.elementPoolVersion++,this.clearElementPool()}markElementPoolGenerationCurrent(e){this.elementPoolTracker.set(e,this.elementPoolVersion)}isElementPoolGenerationCurrent(e){return this.elementPoolTracker.get(e)===this.elementPoolVersion}resolveEffectiveScrollBehavior(e,t){return q()?`instant`:e.behavior===`smooth-auto`?Math.abs(t-this.getScrollTop())<=this.getHeight()*10?`smooth`:`instant`:e.behavior??`instant`}scrollTo(e){if(this.root==null)return;let t=this.normalizeScrollTarget(e);if(t==null)return;let n=this.resolveScrollTargetTop(t);n!=null&&(this.primeScrollTarget(t),this.resolveEffectiveScrollBehavior(t,n)===`smooth`?this.scrollAnimation??={position:this.getScrollTop(),velocity:0,lastTimestamp:performance.now()}:this.scrollAnimation=void 0,this.suspendScrollInteractions(),this.pendingLayoutAnchor=void 0,this.pendingScrollTarget=t,this.render())}setSelectedLines(e,t){this.applySelectedLines(e,t)}getSelectedLines(){return this.selectedLines}clearSelectedLines(e){this.applySelectedLines(null,e)}getItem(e){return this.idToItem.get(e)?.item}updateItem(e){let t=this.idToItem.get(e.id);return t==null?(console.error(`CodeView.updateItem: unknown item id "${e.id}"`),!1):this.syncItemRecord(t,e)?(this.markItemLayoutDirty(t),this.scrollDirty=!0,this.render(),this.syncSelection(),!0):!1}updateItemId(e,t){if(e===t)return!0;let n=this.idToItem.get(e);return n==null?(console.error(`CodeView.updateItemId: unknown item id "${e}"`),!1):this.idToItem.has(t)?(console.error(`CodeView.updateItemId: duplicate item id "${t}"`),!1):(this.idToItem.delete(e),n.item.id=t,this.idToItem.set(t,n),this.updateItemOptionsId(n.instance.options,t),this.selectedLines?.id===e&&(this.selectedLines={...this.selectedLines,id:t},this.options.onSelectedLinesChange?.(this.selectedLines)),this.renamePendingScrollTarget(e,t),this.renamePendingLayoutAnchor(e,t),this.render(),!0)}addItem(e){this.addItems([e]),this.syncSelection()}addItems(e){this.appendItemsInternal(e),this.syncSelection()}setItems(e){e.length===0?this.reset():this.items.length===0?this.appendItemsInternal(e):this.tryAppendItems(e)||this.reconcileItems(e),this.syncSelection()}appendItemsInternal(e,t=!0){if(e.length===0)return;let n=this.getLayout(),r=this.items.length===0?0:this.scrollHeight+n.gap,i=r;for(let t=0;t<e.length;t++){let i=e[t];if(i==null)throw Error(`CodeView.appendItemsInternal: missing input item`);if(this.idToItem.has(i.id))throw Error(`CodeView.addItem: duplicate id "${i.id}"`);let a=this.createItem(i,this.items.length,r);this.items.push(a),this.idToItem.set(a.item.id,a),this.instanceToItem.set(a.instance,a),a.height=vt(a),r+=a.height+n.gap}this.scrollHeight=r-n.gap,this.scrollDirty=!0,t&&(this.canSkipRenderForAppend(i)?this.syncContainerHeight():this.render())}canSkipRenderForAppend(e){return this.container!=null&&this.renderState.firstIndex!==-1&&this.pendingScrollTarget==null&&this.scrollAnimation==null&&this.layoutDirtyIndex==null&&e>this.windowSpecs.bottom}onThemeChange(){this.invalidateElementPool()}setOptions(e){if(e==null)return;this.capturePendingLayoutAnchor();let{options:t}=this,n=this.getLayout(),{itemMetricsCache:r}=this;yt(t,e)&&this.invalidateElementPool(),this.options=e;let i=this.computeMetricsCache(e.itemMetrics),a=!Ie(r,i),o=!Ie(n,this.getLayout());o&&this.syncLayout();let s=a||bt(t,e);if(s){let n=this.pendingLayoutReset;this.pendingLayoutReset={metrics:a?i:n?.metrics,resetFileLayoutCache:!0,resetDiffLayoutCache:!0,includeEstimatedDiffHeights:n?.includeEstimatedDiffHeights===!0||a||xt(t,e)}}(o||s)&&(this.markLayoutDirtyFromIndex(0),this.scrollDirty=!0),Qe(t,e)||this.renderOptionsRevision++,!this.isContainerManaged&&this.items.length>0&&this.render()}capturePendingLayoutAnchor(){this.root==null||this.items.length===0||this.pendingScrollTarget!=null||(this.pendingLayoutAnchor=this.getScrollAnchor(this.getScrollTop()))}render(t=!1){e.__STOP||(t?(Fe(this.computeRenderRangeAndEmit),this.computeRenderRangeAndEmit()):Ke(this.computeRenderRangeAndEmit))}instanceChanged(e,t){let n=this.instanceToItem.get(e);if(n==null)throw Error(`CodeView.instanceChanged: An instance has changed that is not registered`);t&&this.markItemLayoutDirty(n),this.render()}getWindowSpecs(){return this.windowSpecs}getContainerElement(){return this.root}getRenderedItems(){let{firstIndex:e,lastIndex:t}=this.renderState;if(e===-1||t===-1||t<e)return[];let n=[];for(let r=e;r<=t;r++){let e=this.items[r];e?.element!=null&&(e.type===`diff`?n.push({id:e.item.id,type:`diff`,item:e.item,version:e.version,element:e.element,instance:e.instance}):n.push({id:e.item.id,type:`file`,item:e.item,version:e.version,element:e.element,instance:e.instance}))}return n}setSlotCoordinator(e){return e===this.slotCoordinator?!1:(this.slotCoordinator=e,this.slotSnapshot=void 0,!0)}getSlotSnapshot(e){return Ot(this.getRenderedItems(),e)}subscribeToScroll(e){return this.scrollListeners.add(e),()=>{this.scrollListeners.delete(e)}}getLocalTopForInstance(e){let t=this.instanceToItem.get(e);if(t==null)throw Error(`CodeView.getLocalTopForInstance: unknown virtualized instance`);return t.top}getTopForItem(e){let t=this.idToItem.get(e);if(t!=null)return t.top+this.getLayout().paddingTop}createItem(e,t,n){let{itemMetricsCache:r}=this;if(e.type===`diff`){let i=new H(this.createDiffOptions(e.id),this,r,this.workerManager,this.isContainerManaged);return{type:`diff`,item:e,version:e.version,index:t,top:n,height:0,element:void 0,renderedOptionsRevision:this.renderOptionsRevision,instance:i}}let i=new ce(this.createFileOptions(e.id),this,r,this.workerManager,this.isContainerManaged);return{type:`file`,item:e,version:e.version,index:t,top:n,height:0,element:void 0,renderedOptionsRevision:this.renderOptionsRevision,instance:i}}applySelectedLines(e,t){let{selectedLines:n}=this;e==null&&n==null||e!=null&&n?.id===e.id&&Re(n.range,e.range)||(n!=null&&n.id!==e?.id&&this.idToItem.get(n.id)?.instance.setSelectedLines(null,{notify:!1}),this.selectedLines=e,this.idToItem.get(e?.id??``)?.instance.setSelectedLines(e?.range??null,t))}syncSelection(){if(this.selectedLines==null)return;let e=this.idToItem.get(this.selectedLines.id);if(e==null){this.selectedLines=null;return}e.instance.setSelectedLines(this.selectedLines.range,{notify:!1})}renamePendingScrollTarget(e,t){let{pendingScrollTarget:n}=this;n==null||n.type===`position`||n.id!==e||(this.pendingScrollTarget={...n,id:t})}renamePendingLayoutAnchor(e,t){this.pendingLayoutAnchor?.id===e&&(this.pendingLayoutAnchor.id=t)}createFileOptionsPrototype(){let e={};for(let t of at)Y(e,t,()=>this.options[t]);Y(e,`stickyHeader`,()=>this.options.stickyHeaders),Y(e,`collapsed`,e=>this.getItemOptions(ut(e),`file`)?.item.collapsed===!0);for(let t of ot)this.defineItemSharedCallback(e,`file`,t);for(let t of st)this.defineItemSelectionCallback(e,`file`,t);return e}createDiffOptionsPrototype(){let e={};for(let t of it)Y(e,t,()=>this.options[t]);Y(e,`stickyHeader`,()=>this.options.stickyHeaders),Y(e,`hunkSeparators`,()=>this.options.hunkSeparators),Y(e,`collapsed`,e=>this.getItemOptions(ut(e),`diff`)?.item.collapsed===!0);for(let t of ot)this.defineItemSharedCallback(e,`diff`,t);for(let t of st)this.defineItemSelectionCallback(e,`diff`,t);return e}createFileOptions(e){let t=Object.create(this.fileOptionsPrototype);return lt(t,{id:e}),t}createDiffOptions(e){let t=Object.create(this.diffOptionsPrototype);return lt(t,{id:e}),t}updateItemOptionsId(e,t){ut(e).id=t}getItemOptions(e,t){let n=this.idToItem.get(e.id);if(!(n==null||n.type!==t))return n}defineItemSharedCallback(e,t,n){Y(e,n,e=>{if(this.options[n]==null)return;let r=ut(e),i=r.callbackCache??={},a=i[n];return a??(a=((...e)=>{let i=this.getItemOptions(r,t);if(i==null)return;let a=this.options[n];return a?.(...e,i)}),i[n]=a),a})}defineItemSelectionCallback(e,t,n){Y(e,n,e=>{if(this.options.enableLineSelection!==!0)return;let r=ut(e),i=r.callbackCache??={},a=i[n];return a??(a=(e=>{let i=this.getItemOptions(r,t);if(i==null)return;let a=e==null?null:{id:i.item.id,range:e};this.options.controlledSelection!==!0&&(e!=null||this.selectedLines?.id===i.item.id)&&this.applySelectedLines(a,{notify:!1}),this.options.onSelectedLinesChange?.(a);let o=this.options[n];return o?.(e,i)}),i[n]=a),a})}markLayoutDirtyFromIndex(e){this.layoutDirtyIndex=Math.min(this.layoutDirtyIndex??e,e)}markItemLayoutDirty(e){if(this.items[e.index]!==e)throw Error(`CodeView.markItemLayoutDirty: unknown item id "${e.item.id}"`);this.markLayoutDirtyFromIndex(e.index)}tryAppendItems(e){if(e.length<=this.items.length)return!1;for(let t=0;t<this.items.length;t++){let n=this.items[t];if(n==null)throw Error(`CodeView.tryAppendItems: missing existing item`);let r=e[t];if(r==null||n.item.id!==r.id||n.type!==r.type)return!1}for(let t=0;t<this.items.length;t++){let n=this.items[t];if(n==null)throw Error(`CodeView.tryAppendItems: missing existing item`);let r=e[t];if(r==null)throw Error(`CodeView.tryAppendItems: append candidate missing prefix item`);this.syncItemRecord(n,r)&&this.markLayoutDirtyFromIndex(t)}return this.appendItemsInternal(e.slice(this.items.length),!1),this.scrollDirty=!0,this.render(),!0}reconcileItems(e){let{items:t,idToItem:n}=this,r=new Set(t),i=[],a=new Map,o=new Map,s;for(let c=0;c<e.length;c++){let l=e[c];if(l==null)throw Error(`CodeView.reconcileItems: missing input item`);if(a.has(l.id))throw Error(`CodeView.setItems: duplicate id "${l.id}"`);let u=n.get(l.id),d=u!=null&&u.type===l.type?u:this.createItem(l,c,0);d.index=c,u!=null&&u.type===l.type?(r.delete(u),this.syncItemRecord(d,l)&&(s=Math.min(s??c,c))):s=Math.min(s??c,c),t[c]!==d&&(s=Math.min(s??c,c)),i.push(d),a.set(l.id,d),o.set(d.instance,d)}for(let e=0;e<t.length;e++){let n=t[e];if(n==null||!r.has(n))continue;this.releaseRenderedItem(n);let a=Math.max(i.length-1,0);s=Math.min(s??a,a)}s!=null&&(this.items=i,this.idToItem=a,this.instanceToItem=o,this.renderState.firstIndex>=i.length?this.resetRenderState():this.renderState.lastIndex>=i.length&&(this.renderState.lastIndex=i.length-1),this.markLayoutDirtyFromIndex(s),this.scrollDirty=!0,this.render())}syncItemRecord(e,t){if(e.type!==t.type)throw Error(`CodeView.syncItemRecord: type mismatch for id "${t.id}"`);return e.version===t.version?!1:(e.item=t,e.version=t.version,e.renderedOptionsRevision=-1,!0)}getMaxScrollTopForHeight(e){let{paddingBottom:t,paddingTop:n}=this.getLayout();return Math.max(n+e+t-this.getHeight(),0)}getMaxScrollTop(){return this.getMaxScrollTopForHeight(this.getScrollHeight())}shouldRebaseScroll(){return this.getMaxScrollTop()>gt}getPagedScrollHeight(){return this.shouldRebaseScroll()?Math.min(this.getScrollHeight(),pt):this.getScrollHeight()}getMaxPagedScrollTop(){return this.getMaxScrollTopForHeight(this.getPagedScrollHeight())}clampPagedScrollTop(e){let t=this.getMaxPagedScrollTop();return Math.max(0,Math.min(e,t))}clampScrollTop(e){let t=this.getMaxScrollTop();return Math.max(0,Math.min(e,t))}getMaxScrollPageOffset(){return Math.max(this.getMaxScrollTop()-this.getMaxPagedScrollTop(),0)}clampScrollPageOffset(e){let t=this.getMaxScrollPageOffset();return Math.max(0,Math.min(e,t))}resolveScrollPageWindow(e,t){let n=J(this.clampPagedScrollTop(t)),r=this.clampScrollPageOffset(e-n);return n=J(this.clampPagedScrollTop(e-r)),r=this.clampScrollPageOffset(e-n),{pagedScrollTop:n,scrollPageOffset:r}}resolvePagedScrollPosition(e){if(!this.shouldRebaseScroll())return{pagedScrollTop:this.clampPagedScrollTop(e),scrollPageOffset:0};let t=this.clampScrollPageOffset(this.scrollPageOffset),n=e-t,r=this.getMaxPagedScrollTop(),i=this.getMaxScrollPageOffset(),a=n>gt&&t<i,o=n<mt&&t>0;return n<0||n>r||a||o?this.resolveScrollPageWindow(e,o?Math.min(X,r):ht):{pagedScrollTop:J(this.clampPagedScrollTop(n)),scrollPageOffset:t}}needsScrollPageUpdate(e){let t=J(this.clampScrollTop(e)),{scrollPageOffset:n}=this.resolvePagedScrollPosition(t);return n!==this.scrollPageOffset}getPagedLayoutTop(e){return this.shouldRebaseScroll()?Math.max(e-this.scrollPageOffset,0):e}getStickyHeaderOffset(){return this.options.stickyHeaders===!0&&this.options.disableFileHeader!==!0?this.itemMetricsCache.diffHeaderHeight:0}getScrollTargetRect(e){let t=this.idToItem.get(e.id);if(t==null){console.warn(`CodeView.scrollTo: unknown item id "${e.id}"`);return}if(e.type===`item`)return{top:t.top,height:t.height};if(e.type===`range`){let n=this.getRangeScrollPosition(t,e);if(n==null){console.warn(`CodeView.scrollTo: unable to resolve range ${Ct(e.range)} for item "${e.id}"`);return}return{top:t.top+n.top,height:n.height}}let n=this.getLineScrollPosition(t,e);if(n==null){console.warn(`CodeView.scrollTo: unable to resolve line ${e.lineNumber} for item "${e.id}"`);return}return{top:t.top+n.top,height:n.height}}normalizeScrollTarget(e){if(e.type===`position`||e.align!==`nearest`)return e;let t=this.getScrollTargetRect(e);if(t==null)return;let n=e.offset??0,r=this.getLayout().paddingTop+t.top,i=r+t.height,a=this.getScrollTop(),o=a+(e.type===`line`||e.type===`range`?this.getStickyHeaderOffset():0),s=a+this.getHeight();if(!(r-n<=o&&i+n>=s)){if(r-n<o)return{...e,align:`start`};if(i+n>s)return{...e,align:`end`}}}resolveScrollTargetTop(e){if(e.type===`position`){let t=this.clampScrollTop(e.position);return t===e.position?this.clampScrollTop(e.position-this.getStickyHeaderOffset()):t}let t=this.idToItem.get(e.id);if(t==null){console.warn(`CodeView.scrollTo: unknown item id "${e.id}"`);return}if(e.type===`item`)return this.clampScrollTop(this.resolveAlignedScrollPosition(t.top,t.height,e.align,e.offset));if(e.type===`range`){let n=this.getRangeScrollPosition(t,e);if(n==null){console.warn(`CodeView.scrollTo: unable to resolve range ${Ct(e.range)} for item "${e.id}"`);return}return this.clampScrollTop(this.resolveAlignedScrollPosition(t.top+n.top,n.height,e.align,e.offset,this.getStickyHeaderOffset()))}let n=this.getLineScrollPosition(t,e);if(n==null){console.warn(`CodeView.scrollTo: unable to resolve line ${e.lineNumber} for item "${e.id}"`);return}return this.clampScrollTop(this.resolveAlignedScrollPosition(t.top+n.top,n.height,e.align,e.offset,this.getStickyHeaderOffset()))}resolveAlignedScrollPosition(e,t,n,r=0,i=0){e+=this.getLayout().paddingTop;let a=this.getHeight();return n===`center`&&t+r<a?e-(a-t)/2+r:n===`end`?e-(a-t)+r:e-i-r}getLineScrollPosition(e,t){return e.type===`diff`?e.instance.getLinePosition(t.lineNumber,t.side):e.instance.getLinePosition(t.lineNumber)}getRangeScrollPosition(e,t){let{range:n}=t,r=this.getLineScrollPosition(e,{type:`line`,id:t.id,lineNumber:n.start,side:n.side}),i=this.getLineScrollPosition(e,{type:`line`,id:t.id,lineNumber:n.end,side:n.endSide??n.side});if(r==null||i==null)return;let a=r.top,o=a+r.height,s=i.top,c=s+i.height,l=Math.min(a,s);return{top:l,height:Math.max(o,c)-l}}computeTargetScrollTopForFrame(e,t){if(this.pendingScrollTarget==null)return e;let n=this.resolveScrollTargetTop(this.pendingScrollTarget);if(n==null)return e;let{scrollAnimation:r}=this;return r==null?n:this.computeSpringStep(r,n,t).position}computeSpringStep(e,t,n){let r=Math.max(0,n-e.lastTimestamp),{omega:i}=this.getSmoothScrollSettings(),a=Math.exp(-i*r),o=e.position-t,s=e.velocity+i*o;return{position:t+(o+s*r)*a,velocity:(s*(1-i*r)-i*o)*a}}advanceScrollAnimation(e,t){if(this.pendingScrollTarget==null)return;let n=this.resolveScrollTargetTop(this.pendingScrollTarget);if(n==null){this.pendingScrollTarget=void 0,this.scrollAnimation=void 0;return}let r=this.scrollAnimation;if(r==null)return n;r.position+=t;let{position:i,velocity:a}=this.computeSpringStep(r,n,e);r.lastTimestamp=e,r.position=i,r.velocity=a;let{positionEpsilon:o,velocityEpsilon:s}=this.getSmoothScrollSettings();return Math.abs(n-i)<=o&&Math.abs(a)<=s?(r.position=n,r.velocity=0,this.scrollAnimation=void 0,n):r.position}computeRenderRangeAndEmit=(t=performance.now())=>{if(e.__STOP||this.container==null)return;let n=this.getHeight(),r=this.getScrollTop(),i=r,a=this.pendingLayoutAnchor!=null,o=this.getScrollAnchor(i);if(this.layoutDirtyIndex!=null&&(this.recomputeLayout(this.layoutDirtyIndex,this.pendingLayoutReset),this.layoutDirtyIndex=void 0,this.pendingLayoutReset=void 0,a=!0),a&&o!=null){let e=this.resolveAnchoredScrollTop(o);if(e!=null){let t=e-i;i=e,this.scrollAnimation!=null&&(this.scrollAnimation.position+=t)}}a&&(i=this.clampScrollTop(i),this.syncContainerHeight());let s=this.computeTargetScrollTopForFrame(i,t),c=!a&&(this.renderState.scrollTop===-1||Math.abs(s-this.renderState.scrollTop)>n+this.config.overscrollSize*2);c&&(o=void 0),this.windowSpecs=Ve({scrollTop:s,height:n,scrollHeight:this.getScrollHeight(),fitPerfectly:c,fitPerfectlyOverscroll:this.getFitPerfectlyOverscroll(),overscrollSize:this.config.overscrollSize});let l=r;(this.pendingScrollTarget!=null&&s!==l||this.needsScrollPageUpdate(s))&&(this.applyScrollFix(s,l,this.windowSpecs),l=s);let{top:u,bottom:d}=this.windowSpecs,{firstIndex:f,lastIndex:p}=this.renderState;if(f>=0)for(let e=f;e<=p;e++){let t=this.items[e];if(t==null)throw Error(`CodeView.computeRenderRangeAndEmit: No item at index: ${e}`);t.top>u-t.height&&t.top<=d||this.releaseRenderedItem(t)}let m,h=new Set,g=this.findFirstVisibleIndex(u),_=this.findLastVisibleIndex(d);for(let e=g;e<=_;e++){let t=this.items[e];if(t==null)throw Error(`CodeView.computeRenderRangeAndEmit: missing item`);let{instance:n}=t;t.element==null?(t.element=this.acquireElement(),Et(this.stickyContainer,t.element,m),n.virtualizedSetup(),Tt(t,t.element)&&(t.renderedOptionsRevision=this.renderOptionsRevision,h.add(t)),m=t.element):(Et(this.stickyContainer,t.element,m),Tt(t,void 0,t.renderedOptionsRevision!==this.renderOptionsRevision)&&(t.renderedOptionsRevision=this.renderOptionsRevision,h.add(t)),m=t.element)}this.renderState.firstIndex=g<=_?g:-1,this.renderState.lastIndex=_,this.flushSlotCoordinator(),this.reconcileRenderedItems(h),this.syncContainerHeight(),this.updateStickyPositioning();let v=o==null?void 0:this.resolveAnchoredScrollTop(o);o===this.pendingLayoutAnchor&&(this.pendingLayoutAnchor=void 0);let y=v==null?0:v-i,b=s,x=!1;if(this.pendingScrollTarget!=null){let e=this.advanceScrollAnimation(t,y);e==null?b=i:(b=e,x=!0)}else b=v??s;b!==l&&(this.applyScrollFix(b,l,this.windowSpecs),l=b),x&&this.pendingScrollTarget!=null&&this.isPendingTargetSettled(this.pendingScrollTarget)&&(this.pendingScrollTarget=void 0,this.scrollAnimation=void 0),this.renderState.scrollTop=J(l),this.flushManagers(h),this.validateStickyContainerHeight(),this.fixContainerFocus(),(c||this.scrollAnimation!=null)&&this.render()};flushManagers(e){for(let t of e)t.instance.flushManagers()}syncContainerHeight(){let e=this.getPagedScrollHeight();this.container==null||this.containerHeight===e||(this.container.style.height=`${e}px`,this.containerHeight=e)}getStickyBounds(e){let{firstIndex:t,lastIndex:n}=e==null?this.renderState:{firstIndex:this.findFirstVisibleIndex(e.top),lastIndex:this.findLastVisibleIndex(e.bottom)};if(t===-1||n===-1||t>n)return;let r=this.items[t]?.instance.getAdvancedStickySpecs(e),i=this.items[n]?.instance.getAdvancedStickySpecs(e);if(!(r==null||i==null))return{stickyTop:this.getPagedLayoutTop(Math.max(r.topOffset,0)),stickyBottom:this.getPagedLayoutTop(i.topOffset+i.height)}}applyStickyPositioning({stickyTop:e,stickyBottom:t}){let n=this.getHeight(),{itemMetricsCache:r}=this,i=t-e;this.renderState.stickyHeight=i,this.renderState.stickyTop=e,this.renderState.stickyBottom=t,this.stickyOffset.style.height=`${e}px`;let a=(Math.random()*r.lineHeight>>0)*-1,o=-Math.max(i+a,0)+n;this.stickyContainer.style.top=`${o}px`,this.stickyContainer.style.bottom=`${o+r.diffHeaderHeight}px`}syncPagedScrollScaffolding(e){this.syncContainerHeight();let t=this.getStickyBounds(e);t!=null&&this.applyStickyPositioning(t)}reconcileRenderedItems(e){let{firstIndex:t,lastIndex:n}=this.renderState;if(t===-1)return;let r=-1,i=!1;for(let a=t;a<this.items.length&&!(!i&&a>n);a++){let t=this.items[a];if(t==null)throw Error(`CodeView.reconcileRenderedItems: Invalid item`);r===-1?r=t.top:t.top!==r&&(t.top=r,t.instance.syncVirtualizedTop(),i=!0),(e==null?a<=n:e.has(t))&&(t.instance.reconcileHeights()&&(i=!0,t.height=t.instance.getVirtualizedHeight()),this.validateRenderedItemHeight(t)),r+=t.instance.getVirtualizedHeight(),a<this.items.length-1&&(r+=this.getLayout().gap)}i&&r!=null&&(this.scrollDirty=!0,this.scrollHeight=r)}updateStickyPositioning(){let e=this.getStickyBounds();if(e==null)return;let{stickyTop:t,stickyBottom:n}=e;n-t===this.renderState.stickyHeight&&t===this.renderState.stickyTop&&n===this.renderState.stickyBottom||this.applyStickyPositioning(e)}handleScroll=()=>{e.__STOP||(this.suspendScrollInteractions(),this.scrollDirty=!0,this.notifyScroll(),this.render())};clearPendingScroll=()=>{this.pendingScrollTarget=void 0,this.pendingLayoutAnchor=void 0,this.scrollAnimation=void 0};handleResize=e=>{for(let t of e)if(t.target===this.stickyContainer){if(t.borderBoxSize[0].blockSize!==this.renderState.stickyHeight){let e=this.getScrollTop(),t=this.getScrollAnchor(e);this.reconcileRenderedItems(),this.updateStickyPositioning();let n=t==null?void 0:this.resolveAnchoredScrollTop(t);if(n!=null){let t=n-e;this.applyScrollFix(n,e,this.windowSpecs),this.scrollAnimation!=null&&(this.scrollAnimation.position+=t)}this.pendingScrollTarget!=null&&this.isPendingTargetSettled(this.pendingScrollTarget)&&(this.pendingScrollTarget=void 0,this.scrollAnimation=void 0)}}else this.scrollDirty=!0,this.heightDirty=!0,this.render()};getScrollAnchorViewportTop(e,t){return e<t?t+this.getStickyHeaderOffset():t}getScrollAnchor(e){if(this.pendingLayoutAnchor!=null)return this.pendingLayoutAnchor;let{firstIndex:t,lastIndex:n,stickyTop:r,stickyBottom:i}=this.renderState;if(t===-1||n===-1)return;let a=this.getHeight();if(!(r===-1||i===-1))for(let r=t;r<=n;r++){let t=this.items[r];if(t==null)continue;let n=this.getLayout().paddingTop+t.top;if(n+t.height<=e)continue;if(n>=e+a)break;if(n>=e)return{type:`item`,id:t.item.id,viewportOffset:n-e};let i=this.getScrollAnchorViewportTop(n,e)-n,o=t.instance.getNumericScrollAnchor(i);if(o!=null){let r=n+o.top;return{type:`line`,id:t.item.id,lineNumber:o.lineNumber,side:o.side,viewportOffset:r-e}}}}resolveAnchoredScrollTop(e){let t=this.idToItem.get(e.id);if(t==null)return;let{paddingTop:n}=this.getLayout();if(e.type===`item`){let r=n+t.top;return this.clampScrollTop(r-e.viewportOffset)}let r=t.type===`diff`?t.instance.getLinePosition(e.lineNumber,e.side):t.instance.getLinePosition(e.lineNumber);if(r==null)return;let i=n+t.top+r.top;return this.clampScrollTop(i-e.viewportOffset)}applyScrollFix(e,t,n){if(this.root==null)return;let r=J(this.clampScrollTop(e)),i=J(t),{scrollPageOffset:a}=this,o=J(this.clampPagedScrollTop(i-a)),{pagedScrollTop:s,scrollPageOffset:c}=this.resolvePagedScrollPosition(r),l=s,u=a!==c;r===this.renderState.scrollTop&&r===i&&l===o&&!u||(this.suspendScrollInteractions(),(l!==o||u)&&(this.scrollPageOffset=c,this.syncPagedScrollScaffolding(n)),l!==o&&this.root.scrollTo({top:l,behavior:`instant`}),this.renderState.scrollTop=r,this.scrollTop=r,this.scrollDirty=!1)}isPendingTargetSettled(e){let t=this.resolveScrollTargetTop(e);return t==null?!0:J(this.getScrollTop())===J(t)}getScrollTop(){if(!this.scrollDirty)return this.scrollTop;this.scrollDirty=!1;let e=this.root?.scrollTop??0;return this.scrollTop=this.clampScrollTop(e+this.scrollPageOffset),this.scrollTop}getHeight(){return this.heightDirty?(this.heightDirty=!1,this.height=this.root?.getBoundingClientRect().height??0,this.height):this.height}getScrollHeight(){return this.scrollHeight}flushSlotCoordinator(){if(this.slotCoordinator==null)return;let{onSnapshotChange:e}=this.slotCoordinator,t=Ot(this.getRenderedItems(),this.slotCoordinator);kt(this.slotSnapshot,t)||(this.slotSnapshot=t,e(t))}notifyScroll(){if(this.scrollListeners.size===0)return;let e=this.getScrollTop();for(let t of this.scrollListeners)t(e,this)}findFirstVisibleIndex(e){let t=0,n=this.items.length-1,r=this.items.length;for(;t<=n;){let i=t+n>>1,a=this.items[i];if(a==null)throw Error(`CodeView.findFirstVisibleIndex: invalid item index`);a.top+a.height>e?(r=i,n=i-1):t=i+1}return r}findLastVisibleIndex(e){let t=0,n=this.items.length-1,r=-1;for(;t<=n;){let i=t+n>>1,a=this.items[i];if(a==null)throw Error(`CodeView.findLastVisibleIndex: invalid item index`);a.top<=e?(r=i,t=i+1):n=i-1}return r}recomputeLayout(e=0,t){if(this.items.length===0){this.scrollHeight=0;return}let n=this.getLayout(),r=0;if(e>0){let t=this.items[e-1];if(t==null)throw Error(`CodeView.recomputeLayout: invalid dirty index`);r=t.top+t.height+n.gap}for(let i=e;i<this.items.length;i++){let e=this.items[i];if(e==null)throw Error(`CodeView.recomputeLayout: invalid item index`);e.top=r,e.type===`diff`?e.height=e.instance.prepareCodeViewItem(e.item.fileDiff,r,t,e.item.annotations??[]):e.height=e.instance.prepareCodeViewItem(e.item.file,r,t,e.item.annotations??[]),r+=e.height,i<this.items.length-1&&(r+=n.gap)}r!==this.scrollHeight&&(this.scrollDirty=!0),this.scrollHeight=r}resetRenderState(){this.renderState.scrollTop=-1,this.renderState.firstIndex=-1,this.renderState.lastIndex=-1,this.renderState.stickyHeight=0,this.renderState.stickyTop=-1,this.renderState.stickyBottom=-1}getFitPerfectlyOverscroll(){return this.getLayout().gap+this.itemMetricsCache.diffHeaderHeight}};function vt(e){return e.instance.cleanUp(!0),e.type===`diff`?e.instance.prepareCodeViewItem(e.item.fileDiff,e.top,void 0,e.item.annotations??[]):e.instance.prepareCodeViewItem(e.item.file,e.top,void 0,e.item.annotations??[])}function yt(e,t){return!R(e.theme??V,t.theme??V)||(e.themeType??`system`)!==(t.themeType??`system`)||e.unsafeCSS!==t.unsafeCSS}function bt(e,t){return(e.overflow??`scroll`)!==(t.overflow??`scroll`)||(e.disableLineNumbers??!1)!==(t.disableLineNumbers??!1)||(e.disableFileHeader??!1)!==(t.disableFileHeader??!1)||e.unsafeCSS!==t.unsafeCSS||(e.diffStyle??`split`)!==(t.diffStyle??`split`)||(e.diffIndicators??`bars`)!==(t.diffIndicators??`bars`)||(e.hunkSeparators??`line-info`)!==(t.hunkSeparators??`line-info`)||(e.expandUnchanged??!1)!==(t.expandUnchanged??!1)||(e.collapsedContextThreshold??1)!==(t.collapsedContextThreshold??1)}function xt(e,t){return(e.disableFileHeader??!1)!==(t.disableFileHeader??!1)||(e.hunkSeparators??`line-info`)!==(t.hunkSeparators??`line-info`)||(e.expandUnchanged??!1)!==(t.expandUnchanged??!1)||(e.collapsedContextThreshold??1)!==(t.collapsedContextThreshold??1)}function St(e){return e instanceof SVGElement?!0:K(e)&&(e.hasAttribute(`data-core-css`)||e.hasAttribute(`data-theme-css`)||e.hasAttribute(`data-unsafe-css`))}function Ct(e){let t=wt(e.start,e.side),n=wt(e.end,e.endSide??e.side);return t===n?t:`${t}-${n}`}function wt(e,t){return t==null?`${e}`:`${t===`deletions`?`D`:`A`}${e}`}function Tt(e,t,n=!1){return e.type===`diff`?e.instance.render({deferManagers:!0,fileContainer:t,fileDiff:e.item.fileDiff,forceRender:n,lineAnnotations:e.item.annotations??[]}):e.instance.render({deferManagers:!0,fileContainer:t,file:e.item.file,forceRender:n,lineAnnotations:e.item.annotations??[]})}function Et(e,t,n){if(n==null){e.firstChild!==t&&e.prepend(t);return}n.nextSibling!==t&&n.after(t)}function Dt(e){return(e.annotations?.length??0)>0}function Ot(e,{hasHeaderRenderers:t,hasAnnotationRenderer:n,hasGutterRenderer:r}){if(e.length===0)return;if(t||r)return e;if(!n)return;let i=[];for(let t of e)Dt(t.item)&&i.push(t);return i.length>0?i:void 0}function kt(e,t){if(e==null||t==null)return e===t;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r==null||i==null||r.id!==i.id||r.type!==i.type||r.element!==i.element||r.version!==i.version)return!1}return!0}function At(e,t){if(e==null||t==null)return e===t;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r==null||i==null||r.id!==i.id||r.type!==i.type||r.element!==i.element||r.version!==i.version)return!1}return!0}var Q=A(te(),1),$=_(),jt=A(k(),1),Mt=typeof window>`u`?Q.useEffect:Q.useLayoutEffect;function Nt(e){return{instance:void 0,items:void 0,controlled:e,managedOptions:void 0,disableFlushSync:!1,slotCoordinator:void 0}}function Pt(e,t){let{className:n,containerRef:r,disableWorkerPool:i=!1,initialItems:a,items:o,onScroll:s,onSelectedLinesChange:c,options:l,renderAnnotation:u,renderCustomHeader:d,renderGutterUtility:f,renderHeaderMetadata:p,renderHeaderPrefix:m,selectedLines:h,style:g}=e,_=o!==void 0,v=(0,Q.useContext)(Xe),y=(0,Q.useRef)(Nt(_)),b=d!=null,x=u!=null,S=f!=null,ee=b||m!=null||p!=null,C=ee||x||S,w=W(e=>{c?.(e)}),T=h!==void 0,E=(0,Q.useMemo)(()=>Bt({options:l,hasCustomHeader:b,hasGutterRenderer:S,onSelectedLinesChange:c==null?void 0:w,controlledSelection:T}),[l,b,S,c,w,T]),[D]=(0,Q.useState)(()=>zt()),[,O]=(0,Q.useState)({}),k=W(e=>{y.current.instance!=null&&(e==null||e!==y.current.instance.getContainerElement())&&(y.current.instance.cleanUp(),D.publish(void 0),y.current=Nt(_)),e!=null&&e!==y.current.instance?.getContainerElement()&&(y.current.instance=new _t(E,i?void 0:v,!0),y.current.instance.setup(e)),typeof r==`function`?r(e):r!=null&&(r.current=e)}),A=W(e=>{y.current.disableFlushSync?D.publish(e):(0,jt.flushSync)(()=>{D.publish(e)})}),j=(0,Q.useMemo)(()=>{if(!(!ee&&!x&&!S))return{hasHeaderRenderers:ee,hasAnnotationRenderer:x,hasGutterRenderer:S,onSnapshotChange:A}},[A,x,S,ee]);return Mt(()=>s==null?void 0:y.current.instance?.subscribeToScroll(s)),Mt(()=>{let{instance:e,controlled:t,items:n,managedOptions:r,slotCoordinator:i}=y.current;if(e!=null)try{y.current.disableFlushSync=!0;let s=!1;if(Qe(E,r)||(y.current.managedOptions=E,e.setOptions(E),s=!0),t!==_){console.error(`CodeView: cannot switch between controlled and uncontrolled modes. Remount with a new key instead.`);return}if(_)o!==n&&(Lt(n,o)?y.current.items=o:It(n,o)?(y.current.items=o,e.addItems(o.slice(n.length))):(y.current.items=o,e.setItems(o),s=!0));else if(n==null){let t=a??[];y.current.items=t,t.length>0&&(e.setItems(t),s=!0)}h!==void 0&&e.setSelectedLines(h,{notify:!1});let c=e.setSlotCoordinator(j),l=!1;j!==i&&((j==null||i==null)&&(l=!0),y.current.slotCoordinator=j),(s||c)&&e.render(!0),c&&j==null&&D.publish(void 0),l&&O({})}finally{y.current.disableFlushSync=!1}}),(0,Q.useImperativeHandle)(t,()=>({addItems(e){let{controlled:t,instance:n}=y.current;Rt(t,`addItems`),n==null?console.error(`CodeView.addItems: no valid instance to append items with`,e):n.addItems(e)},getItem(e){let{instance:t}=y.current;if(t==null){console.error(`CodeView.getItem: no valid instance exists`,e);return}else return t.getItem(e)},updateItem(e){let{controlled:t,instance:n}=y.current;return Rt(t,`updateItem`),n==null?(console.error(`CodeView.updateItem: no valid instance to update item with`,e),!1):n.updateItem(e)},updateItemId(e,t){let{controlled:n,instance:r}=y.current;return Rt(n,`updateItemId`),r==null?(console.error(`CodeView.updateItemId: no valid instance to update item id with`,e,t),!1):r.updateItemId(e,t)},scrollTo(e){let{instance:t}=y.current;t==null?console.error(`CodeView.scrollTo: no valid instance to scroll with`,e):t.scrollTo(e)},setSelectedLines(e){let{instance:t}=y.current;t==null?console.error(`CodeView.setSelectedLines: no valid instance to update selection with`,e):(t.setSelectedLines(e,{notify:!1}),w(e))},getSelectedLines(){let{instance:e}=y.current;return e==null?(console.error(`CodeView.getSelectedLines: no valid instance exists`),null):e.getSelectedLines()},clearSelectedLines(){let{instance:e}=y.current;e==null?console.error(`CodeView.clearSelectedLines: no valid instance to update selection with`):(e.clearSelectedLines({notify:!1}),w(null))},getInstance(){return y.current.instance}}),[w]),(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{ref:k,className:n,style:g}),C&&(0,$.jsx)(Vt,{managedContentStore:D,renderCustomHeader:d,renderHeaderPrefix:m,renderHeaderMetadata:p,renderAnnotation:u,renderGutterUtility:f})]})}var Ft=(0,Q.forwardRef)(Pt);function It(e,t){if(e==null||t.length<=e.length)return!1;if(e.length===0)return!0;for(let n=0;n<e.length;n++)if(t[n]!==e[n])return!1;return!0}function Lt(e,t){if(e==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Rt(e,t){if(e)throw Error(`CodeView.${t} cannot be used when CodeView is controlled. Use initialItems for imperative item updates.`)}function zt(){let e,t=new Set;return{getSnapshot(){return e},publish(n){if(!At(e,n)){e=n;for(let e of t)e()}},subscribe(e){return t.add(e),()=>{t.delete(e)}}}}function Bt({options:e,hasCustomHeader:t,hasGutterRenderer:n,onSelectedLinesChange:r,controlledSelection:i}){return!t&&!n&&r==null&&!i?e:(e={...e,controlledSelection:i,onSelectedLinesChange:r},t&&(e.renderCustomHeader=Ut),n&&(e.renderGutterUtility=Ut),e)}var Vt=(0,Q.memo)(function({managedContentStore:e,renderCustomHeader:t,renderHeaderPrefix:n,renderHeaderMetadata:r,renderAnnotation:i,renderGutterUtility:a}){let o=W(t=>e.subscribe(t)),s=W(()=>e.getSnapshot());return(0,Q.useSyncExternalStore)(o,s,s)?.map(e=>(0,jt.createPortal)(Ht({renderedItem:e,renderCustomHeader:t,renderHeaderPrefix:n,renderHeaderMetadata:r,renderAnnotation:i,renderGutterUtility:a}),e.element,e.id))});function Ht({renderedItem:e,renderCustomHeader:t,renderHeaderPrefix:n,renderHeaderMetadata:r,renderAnnotation:i,renderGutterUtility:a}){if(e.type===`diff`){let{item:o,instance:s}=e;return je({fileDiff:o.fileDiff,renderCustomHeader:t==null?void 0:()=>t(o),renderHeaderPrefix:n==null?void 0:()=>n(o),renderHeaderMetadata:r==null?void 0:()=>r(o),renderAnnotation:i==null?void 0:e=>i(e,o),lineAnnotations:o.annotations,renderGutterUtility:a==null?void 0:e=>a(e,o),getHoveredLine:s.getHoveredLine})}else{let{item:o,instance:s}=e;return I({file:o.file,renderCustomHeader:t==null?void 0:()=>t(o),renderHeaderPrefix:n==null?void 0:()=>n(o),renderHeaderMetadata:r==null?void 0:()=>r(o),renderAnnotation:i==null?void 0:e=>i(e,o),lineAnnotations:o.annotations,renderGutterUtility:a==null?void 0:e=>a(e,o),getHoveredLine:s.getHoveredLine})}}function Ut(){}function Wt({threadRef:e,filePath:t,activeCwd:n,openInEditor:r}){if(e){M.getState().openFile(e,t);return}r(n?L(t,n):t)}var Gt=f();function Kt(e,t){let n=(0,Gt.c)(4),r=qe(e,t),i;return n[0]!==r.data||n[1]!==r.error||n[2]!==r.isPending?(i={data:r.data,error:r.error,isPending:r.isPending},n[0]=r.data,n[1]=r.error,n[2]=r.isPending,n[3]=i):i=n[3],i}function qt(e,t){return e.length>0&&e.every(e=>t.has(e))}function Jt(e,t){return qt(e,t)?new Set:new Set(e)}function Yt(e){return o(`flex items-center justify-between gap-2 px-4`,et&&e!==`sheet`&&e!==`embedded`?`drag-region h-[52px] border-b border-border wco:h-[env(titlebar-area-height)] wco:pr-[calc(100vw-env(titlebar-area-width)-env(titlebar-area-x)+1em)]`:`surface-subheader`)}function Xt(e){let t=(0,Gt.c)(10),n=et&&e.mode!==`sheet`&&e.mode!==`embedded`,r=e.mode===`inline`?`w-[42vw] min-w-[360px] max-w-[560px] shrink-0 border-l border-border`:`w-full`,i;t[0]===r?i=t[1]:(i=o(`flex h-full min-w-0 flex-col bg-background`,r),t[0]=r,t[1]=i);let a;t[2]!==e.header||t[3]!==e.mode||t[4]!==n?(a=n?(0,$.jsx)(`div`,{className:Yt(e.mode),children:e.header}):(0,$.jsx)(`div`,{className:Yt(e.mode),"data-surface-subheader":!0,children:e.header}),t[2]=e.header,t[3]=e.mode,t[4]=n,t[5]=a):a=t[5];let s;return t[6]!==e.children||t[7]!==i||t[8]!==a?(s=(0,$.jsxs)(`div`,{className:i,children:[a,e.children]}),t[6]=e.children,t[7]=i,t[8]=a,t[9]=s):s=t[9],s}function Zt(e){let t=(0,Gt.c)(7),n;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,$.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/50 px-3 py-2`,children:[(0,$.jsx)(B,{className:`h-4 w-32 rounded-full`}),(0,$.jsx)(B,{className:`ml-auto h-4 w-20 rounded-full`})]}),t[0]=n):n=t[0];let r;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(B,{className:`h-3 w-full rounded-full`}),(0,$.jsx)(B,{className:`h-3 w-full rounded-full`}),(0,$.jsx)(B,{className:`h-3 w-10/12 rounded-full`}),(0,$.jsx)(B,{className:`h-3 w-11/12 rounded-full`}),(0,$.jsx)(B,{className:`h-3 w-9/12 rounded-full`})]}),t[1]=r):r=t[1];let i;t[2]===e.label?i=t[3]:(i=(0,$.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 px-3 py-4`,children:[r,(0,$.jsx)(`span`,{className:`sr-only`,children:e.label})]}),t[2]=e.label,t[3]=i);let a;return t[4]!==e.label||t[5]!==i?(a=(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col p-2`,children:(0,$.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border border-border/60 bg-card/25`,role:`status`,"aria-live":`polite`,"aria-label":e.label,children:[n,i]})}),t[4]=e.label,t[5]=i,t[6]=a):a=t[6],a}var Qt=[];function $t(e){return(e.endSide??e.side)===`deletions`?`deletions`:`additions`}function en(e,t,n){let r=$t(t),i=e.findIndex(e=>e.side===r&&e.lineNumber===t.end);return i<0?[...e,{side:r,lineNumber:t.end,metadata:{entries:[n]}}]:e.map((e,t)=>t===i?{...e,metadata:{entries:[...e.metadata.entries,n]}}:e)}function tn(e){let t=(0,Gt.c)(50),{files:n,sectionId:r,sectionTitle:i,composerDraftTarget:a,options:o,viewerRef:s,className:c,renderHeaderPrefix:l}=e,u=x(sn),d=x(on),f;t[0]===a?f=t[1]:(f=e=>e.getComposerDraft(a)?.reviewComments??Qt,t[0]=a,t[1]=f);let p=x(f),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(null),v;t[2]===n?v=t[3]:(v=new Map(n.map(an)),t[2]=n,t[3]=v);let y=v,b;if(t[4]!==g||t[5]!==n||t[6]!==p||t[7]!==r){let e;t[9]!==g||t[10]!==p||t[11]!==r?(e=e=>{let{fileDiff:t,filePath:n,fileKey:i,collapsed:a}=e,o=p.filter(e=>e.sectionId===r&&e.filePath===n&&(e.fenceLanguage??`diff`)===`diff`).reduce((e,n)=>{let r=ee(t,n);return r?en(e,r,{id:n.id,kind:`comment`,range:r,rangeLabel:n.rangeLabel,text:n.text}):e},[]),s=g?.fileKey===i?[...o,g.annotation]:o;return{id:i,type:`diff`,fileDiff:t,annotations:s,collapsed:a,version:fe(`${a?`1`:`0`}:${s.flatMap(nn).join(`:`)}`)}},t[9]=g,t[10]=p,t[11]=r,t[12]=e):e=t[12],b=n.map(e),t[4]=g,t[5]=n,t[6]=p,t[7]=r,t[8]=b}else b=t[8];let S=b,C;t[13]!==a||t[14]!==g?.annotation||t[15]!==d?(C=e=>{h(null),g?.annotation.metadata.entries.some(t=>t.id===e)?_(null):d(a,e)},t[13]=a,t[14]=g?.annotation,t[15]=d,t[16]=C):C=t[16];let w=C,T;t[17]!==u||t[18]!==a||t[19]!==g||t[20]!==y||t[21]!==r||t[22]!==i?(T=(e,t)=>{let n=g?.annotation.metadata.entries.find(t=>t.id===e),o=g?y.get(g.fileKey):void 0;if(!n||!o)return;let s=E({id:n.id,sectionId:r,sectionTitle:i,filePath:o.filePath,fileDiff:o.fileDiff,range:n.range,text:t});s&&u(a,s),h(null),_(null)},t[17]=u,t[18]=a,t[19]=g,t[20]=y,t[21]=r,t[22]=i,t[23]=T):T=t[23];let D=T,O;t[24]!==y||t[25]!==r||t[26]!==i?(O=(e,t)=>{if(!e)return;let n=t.item;if(n.type!==`diff`)return;let a=y.get(n.id);if(!a)return;let o=se(),s=E({id:o,sectionId:r,sectionTitle:i,filePath:a.filePath,fileDiff:a.fileDiff,range:e,text:``});s&&_({fileKey:n.id,annotation:{side:$t(e),lineNumber:e.end,metadata:{entries:[{id:o,kind:`draft`,range:e,rangeLabel:s.rangeLabel,text:``}]}}})},t[24]=y,t[25]=r,t[26]=i,t[27]=O):O=t[27];let k=O,A=g!==null,j;t[28]===s?j=t[29]:(j=s?{ref:s}:{},t[28]=s,t[29]=j);let M;t[30]===c?M=t[31]:(M=c?{className:c}:{},t[30]=c,t[31]=M);let te=!A,N=!A,P;t[32]!==k||t[33]!==o||t[34]!==N||t[35]!==te?(P={...o,enableGutterUtility:te,enableLineSelection:N,onLineSelectionEnd:k},t[32]=k,t[33]=o,t[34]=N,t[35]=te,t[36]=P):P=t[36];let ne;t[37]===l?ne=t[38]:(ne=e=>e.type===`diff`?l(e.fileDiff,e.id,e.collapsed===!0):null,t[37]=l,t[38]=ne);let F;t[39]!==w||t[40]!==D?(F=e=>(0,$.jsx)(`div`,{className:`py-1`,children:e.metadata.entries.map(e=>(0,$.jsx)(oe,{kind:e.kind,rangeLabel:e.rangeLabel,text:e.text,onCancel:()=>w(e.id),onComment:t=>D(e.id,t),onDelete:()=>w(e.id)},e.id))}),t[39]=w,t[40]=D,t[41]=F):F=t[41];let re;return t[42]!==S||t[43]!==m||t[44]!==P||t[45]!==ne||t[46]!==F||t[47]!==j||t[48]!==M?(re=(0,$.jsx)(Ft,{...j,...M,items:S,selectedLines:m,onSelectedLinesChange:h,options:P,renderHeaderPrefix:ne,renderAnnotation:F}),t[42]=S,t[43]=m,t[44]=P,t[45]=ne,t[46]=F,t[47]=j,t[48]=M,t[49]=re):re=t[49],re}function nn(e){return e.metadata.entries.map(rn)}function rn(e){return`${e.id}:${e.rangeLabel}:${e.text}`}function an(e){return[e.fileKey,e]}function on(e){return e.removeReviewComment}function sn(e){return e.addReviewComment}var cn=function(e){return e.disabled=`data-disabled`,e.orientation=`data-orientation`,e.multiple=`data-multiple`,e}({}),ln={multiple(e){return e?{[cn.multiple]:``}:null}},un=Q.forwardRef(function(e,t){let{defaultValue:r,disabled:i=!1,loopFocus:a=!0,onValueChange:o,orientation:s=`horizontal`,multiple:c=!1,value:d,className:f,render:p,style:m,...h}=e,g=l(!0),_=Q.useMemo(()=>d!==void 0||r!==void 0,[d,r]),v=(g?.disabled??!1)||i,[y,b]=C({controlled:d,default:d===void 0?r??n:void 0,name:`ToggleGroup`,state:`value`}),x=F((e,t,n)=>{let r;c?(r=y.slice(),t?r.push(e):r.splice(y.indexOf(e),1)):r=t?[e]:[],o?.(r,n),!n.isCanceled&&b(r)}),S={disabled:v,multiple:c,orientation:s},ee=Q.useMemo(()=>({disabled:v,orientation:s,setGroupValue:x,value:y,isValueInitialized:_}),[v,s,x,y,_]),w={role:`group`},T=u(`div`,e,{enabled:!!g,state:S,ref:t,props:[w,h],stateAttributesMapping:ln});return(0,$.jsx)(pe.Provider,{value:ee,children:g?T:(0,$.jsx)(Ce,{render:p,className:f,style:m,state:S,refs:[t],props:[w,h],stateAttributesMapping:ln,loopFocus:a,enableHomeAndEndKeys:!0,orientation:s})})}),dn=Q.createContext({size:`default`,variant:`default`});function fn(e){let t=(0,Gt.c)(24),n,r,i,a,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],s=t[5],c=t[6]):({className:r,variant:a,size:s,orientation:c,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=s,t[6]=c);let l=a===void 0?`default`:a,u=s===void 0?`default`:s,d=c===void 0?`horizontal`:c,f;t[7]!==u||t[8]!==l?(f={size:u,variant:l},t[7]=u,t[8]=l,t[9]=f):f=t[9];let p=f,m=d===`horizontal`?`*:pointer-coarse:after:min-w-auto`:`*:pointer-coarse:after:min-h-auto`,h=l==="default"?`gap-0.5`:d===`horizontal`?`*:not-first:not-data-[slot=separator]:before:-start-[0.5px] *:not-last:not-data-[slot=separator]:before:-end-[0.5px] *:not-first:rounded-s-none *:not-last:rounded-e-none *:not-first:border-s-0 *:not-last:border-e-0 *:not-first:before:rounded-s-none *:not-last:before:rounded-e-none`:`*:not-first:not-data-[slot=separator]:before:-top-[0.5px] *:not-last:not-data-[slot=separator]:before:-bottom-[0.5px] flex-col *:not-first:rounded-t-none *:not-last:rounded-b-none *:not-first:border-t-0 *:not-last:border-b-0 *:not-first:before:rounded-t-none *:not-last:before:rounded-b-none *:data-[slot=toggle]:not-last:before:hidden dark:*:last:before:hidden dark:*:first:before:block`,g;t[10]!==r||t[11]!==m||t[12]!==h?(g=o(`flex w-fit *:focus-visible:z-10 dark:*:[[data-slot=separator]:has(+[data-slot=toggle]:hover)]:before:bg-input/64 dark:*:[[data-slot=separator]:has(+[data-slot=toggle][data-pressed])]:before:bg-input dark:*:[[data-slot=toggle]:hover+[data-slot=separator]]:before:bg-input/64 dark:*:[[data-slot=toggle][data-pressed]+[data-slot=separator]]:before:bg-input`,m,h,r),t[10]=r,t[11]=m,t[12]=h,t[13]=g):g=t[13];let _;t[14]!==n||t[15]!==p?(_=(0,$.jsx)(dn,{value:p,children:n}),t[14]=n,t[15]=p,t[16]=_):_=t[16];let v;return t[17]!==d||t[18]!==i||t[19]!==u||t[20]!==g||t[21]!==_||t[22]!==l?(v=(0,$.jsx)(un,{className:g,"data-size":u,"data-slot":`toggle-group`,"data-variant":l,orientation:d,...i,children:_}),t[17]=d,t[18]=i,t[19]=u,t[20]=g,t[21]=_,t[22]=l,t[23]=v):v=t[23],v}function pn(e){let t=(0,Gt.c)(12),n,r,i,a,o;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5]):({className:r,children:n,variant:o,size:a,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o);let s=Q.use(dn),c=o??s.variant,l=a??s.size,u;return t[6]!==n||t[7]!==r||t[8]!==i||t[9]!==l||t[10]!==c?(u=(0,$.jsx)(he,{className:r,"data-size":l,"data-variant":c,size:l,variant:c,...i,children:n}),t[6]=n,t[7]=r,t[8]=i,t[9]=l,t[10]=c,t[11]=u):u=t[11],u}function mn(e){return{diffPreview:O(e,{label:`environment-data:review:diff-preview`,tag:T.reviewGetDiffPreview,staleTimeMs:5e3})}}var hn=mn(i);function gn(e){return e.remoteName&&e.name.startsWith(`${e.remoteName}/`)?e.name.slice(e.remoteName.length+1):e.name}function _n(e,t){let n=new Set(t),r=e.map(e=>{let r=t.filter(t=>n.has(t)&&gn(t)===e.name),i=r.find(e=>e.remoteName===`origin`)??r[0]??null;return i&&n.delete(i),{id:`local:${e.name}`,label:e.name,local:e,remote:i}}),i=t.filter(e=>n.has(e)).map(e=>({id:`remote:${e.name}`,label:e.name,local:null,remote:e}));return[...r,...i]}function vn(e,t){let n=t.trim().toLocaleLowerCase();return n.length===0?e:e.filter(e=>e.label.toLocaleLowerCase().includes(n)||e.local?.name.toLocaleLowerCase().includes(n)===!0||e.remote?.name.toLocaleLowerCase().includes(n)===!0)}var yn=`__automatic_base_ref__`,bn=new Set,xn=`
2
+ [data-diffs-header],
3
+ [data-diff],
4
+ [data-file],
5
+ [data-error-wrapper],
6
+ [data-virtualizer-buffer] {
7
+ --diffs-header-font-family: var(--font-sans) !important;
8
+ --diffs-font-family: var(--font-mono) !important;
9
+ --diffs-bg: color-mix(in srgb, var(--card) 90%, var(--background)) !important;
10
+ --diffs-light-bg: color-mix(in srgb, var(--card) 90%, var(--background)) !important;
11
+ --diffs-dark-bg: color-mix(in srgb, var(--card) 90%, var(--background)) !important;
12
+ --diffs-token-light-bg: transparent;
13
+ --diffs-token-dark-bg: transparent;
14
+
15
+ --diffs-bg-context-override: color-mix(in srgb, var(--background) 97%, var(--foreground));
16
+ --diffs-bg-hover-override: color-mix(in srgb, var(--background) 94%, var(--foreground));
17
+ --diffs-bg-separator-override: color-mix(in srgb, var(--background) 95%, var(--foreground));
18
+ --diffs-bg-buffer-override: color-mix(in srgb, var(--background) 90%, var(--foreground));
19
+
20
+ --diffs-bg-addition-override: color-mix(in srgb, var(--background) 92%, var(--success));
21
+ --diffs-bg-addition-number-override: color-mix(in srgb, var(--background) 88%, var(--success));
22
+ --diffs-bg-addition-hover-override: color-mix(in srgb, var(--background) 85%, var(--success));
23
+ --diffs-bg-addition-emphasis-override: color-mix(in srgb, var(--background) 80%, var(--success));
24
+
25
+ --diffs-bg-deletion-override: color-mix(in srgb, var(--background) 92%, var(--destructive));
26
+ --diffs-bg-deletion-number-override: color-mix(in srgb, var(--background) 88%, var(--destructive));
27
+ --diffs-bg-deletion-hover-override: color-mix(in srgb, var(--background) 85%, var(--destructive));
28
+ --diffs-bg-deletion-emphasis-override: color-mix(
29
+ in srgb,
30
+ var(--background) 80%,
31
+ var(--destructive)
32
+ );
33
+
34
+ background-color: var(--diffs-bg) !important;
35
+ }
36
+
37
+ [data-file-info] {
38
+ background-color: color-mix(in srgb, var(--card) 94%, var(--foreground)) !important;
39
+ border-block-color: var(--border) !important;
40
+ color: var(--foreground) !important;
41
+ }
42
+
43
+ [data-diffs-header] {
44
+ position: sticky !important;
45
+ top: 0;
46
+ z-index: 4;
47
+ background-color: color-mix(in srgb, var(--card) 94%, var(--foreground)) !important;
48
+ border-bottom: 1px solid var(--border) !important;
49
+ align-items: center !important;
50
+ font-family: var(--font-sans) !important;
51
+ font-size: 12px !important;
52
+ line-height: 1 !important;
53
+ min-height: 32px !important;
54
+ padding-block: 6px !important;
55
+ }
56
+
57
+ [data-diffs-header] [data-header-content] {
58
+ align-items: center !important;
59
+ line-height: 1 !important;
60
+ }
61
+
62
+ [data-diffs-header] [data-metadata] {
63
+ align-items: center !important;
64
+ line-height: 1 !important;
65
+ font-variant-numeric: tabular-nums;
66
+ }
67
+
68
+ [data-diffs-header] [data-additions-count],
69
+ [data-diffs-header] [data-deletions-count] {
70
+ font-family: var(--font-mono) !important;
71
+ font-size: 11px !important;
72
+ font-variant-numeric: tabular-nums;
73
+ line-height: 1 !important;
74
+ }
75
+
76
+ [data-diffs-header] [data-change-icon],
77
+ [data-diffs-header] [data-rename-icon] {
78
+ display: block;
79
+ flex-shrink: 0;
80
+ }
81
+
82
+ [data-title] {
83
+ cursor: pointer;
84
+ transition:
85
+ color 120ms ease,
86
+ text-decoration-color 120ms ease;
87
+ text-decoration: underline;
88
+ text-decoration-color: transparent;
89
+ text-underline-offset: 2px;
90
+ font-family: var(--font-sans) !important;
91
+ }
92
+
93
+ [data-title]:hover {
94
+ color: color-mix(in srgb, var(--foreground) 84%, var(--primary)) !important;
95
+ text-decoration-color: currentColor;
96
+ }
97
+ `;function Sn({mode:n=`inline`,composerDraftTarget:i,initialGitScope:l}){let{resolvedTheme:u}=_e(),f=Ze(),[_]=(0,Q.useState)(l),[x,ee]=(0,Q.useState)(`stacked`),[C,T]=(0,Q.useState)(f.wordWrap),[E,O]=(0,Q.useState)(f.diffIgnoreWhitespace),[k,A]=(0,Q.useState)(``),[M,te]=(0,Q.useState)(()=>({scopeKey:null,fileKeys:bn})),P=(0,Q.useRef)(null),F=t({strict:!1,select:e=>re(e)}),oe=F?.threadId??null,I=Pe(F),se=I?.projectId??null,ce=Le(I&&se?{environmentId:I.environmentId,projectId:se}:null),L=I?.worktreePath??ce?.workspaceRoot,fe=w(m.configValueAtom(I?.environmentId??null)),pe=ke(I?.environmentId??null,fe?.availableEditors??[]),he=ie(I!=null&&L!=null?Be.status({environmentId:I.environmentId,input:{cwd:L}}):null),R=Oe(e=>Je(e.byThreadKey,F,_===`unstaged`)),z=he.data?.isRepo??!0,{turnDiffSummaries:B,inferredCheckpointTurnCountByTurnId:Ce}=de(I),V=(0,Q.useMemo)(()=>[...B].toSorted((e,t)=>{let n=e.checkpointTurnCount??Ce[e.turnId]??0,r=t.checkpointTurnCount??Ce[t.turnId]??0;return n===r?t.completedAt.localeCompare(e.completedAt):r-n}),[Ce,B]);(0,Q.useEffect)(()=>{!F||R.kind!==`turn`||Oe.getState().reconcileTurnSelection(F,V.map(e=>e.turnId))},[R,V,F]);let H=R.kind===`turn`?R.turnId:null,U=R.kind===`unstaged`?`unstaged`:`branch`,W=R.kind===`branch`?R.baseRef:null,je=R.kind===`turn`?R.filePath:null,Ne=R.kind===`turn`?R.revealRequestId:0,G=H===null?void 0:V.find(e=>e.turnId===H)??V[0],Fe=G&&(G.checkpointTurnCount??Ce[G.turnId]),Ie=V[0],Re=H===null?U===`unstaged`?`Working tree`:`Branch changes`:G?.turnId===Ie?.turnId?`Latest turn`:`Turn ${Fe??`?`}`,Ve=G?`turn:${G.turnId}`:U,K=F?`${F.environmentId}:${F.threadId}:${Ve}`:null,We=M.scopeKey===K?M.fileKeys:bn,Ge=G?`Turn ${Fe??`?`}`:U===`unstaged`?`Working tree`:`Branch changes`,Ke=(0,Q.useMemo)(()=>typeof Fe==`number`?{fromTurnCount:Math.max(0,Fe-1),toTurnCount:Fe}:null,[Fe]),qe=Kt({environmentId:I?.environmentId??null,threadId:oe,fromTurnCount:Ke?.fromTurnCount??null,toTurnCount:Ke?.toTurnCount??null,ignoreWhitespace:E,cacheScope:G?`turn:${G.turnId}`:null},{enabled:z&&G!==void 0}),Xe=ie(H===null&&I&&L?hn.diffPreview({environmentId:I.environmentId,input:{cwd:L,...W?{baseRef:W}:{},ignoreWhitespace:E}}):null),Qe=H===null&&Xe.error?.includes(`configured workspace root`)===!0&&fe?.cwd!==void 0&&fe.cwd!==L,et=ie(Qe&&I&&fe?hn.diffPreview({environmentId:I.environmentId,input:{cwd:fe.cwd,...W?{baseRef:W}:{},ignoreWhitespace:E}}):null),q=Qe?et:Xe,J=q.data?.sources.find(e=>e.kind===(U===`unstaged`?`working-tree`:`branch-range`)),it=ie(H===null&&U===`branch`&&I&&q.data?.cwd?Be.listRefs({environmentId:I.environmentId,input:{cwd:q.data.cwd,includeMatchingRemoteRefs:!0,refKind:`local`,...k.trim().length>0?{query:k.trim()}:{},limit:100}}):null),at=ie(H===null&&U===`branch`&&I&&q.data?.cwd?Be.listRefs({environmentId:I.environmentId,input:{cwd:q.data.cwd,includeMatchingRemoteRefs:!0,refKind:`remote`,...k.trim().length>0?{query:k.trim()}:{},limit:100}}):null),ot=_n(it.data?.refs.filter(e=>e.name!==J?.headRef)??[],at.data?.refs??[]),st=vn(ot,k),ct=e=>W&&W===e.remote?.name?W:e.local?.name??e.remote?.name??e.id,lt=[yn,...ot.map(ct)],ut=[...k.trim().length===0?[yn]:[],...st.map(ct)],Y=J?.diff,dt=G?qe.data?.diff:Y,ft=!G&&J?.truncated===!0,pt=G?qe.isPending:q.isPending,mt=G?qe.error:q.error,ht=typeof dt==`string`&&dt.trim().length===0,X=(0,Q.useMemo)(()=>le(dt,`diff-panel:${u}`,{compactPartialHunkOffsets:H===null}),[u,dt,H]),gt=(0,Q.useMemo)(()=>!X||X.kind!==`files`?[]:X.files.toSorted((e,t)=>Se(e).localeCompare(Se(t),void 0,{numeric:!0,sensitivity:`base`})),[X]),Z=(0,Q.useMemo)(()=>gt.map(e=>{let t=me(e);return{fileDiff:e,filePath:Se(e),fileKey:t,collapsed:We.has(t)}}),[We,gt]),_t=(0,Q.useMemo)(()=>Z.map(e=>e.fileKey),[Z]),vt=qt(_t,We),yt=(0,Q.useMemo)(()=>Ue(gt),[gt]);(0,Q.useEffect)(()=>{if(!je)return;let e=Z.find(e=>e.filePath===je);e&&P.current?.scrollTo({type:`item`,id:e.fileKey,align:`start`})},[Z,je,Ne]);let bt=(0,Q.useCallback)(t=>{Wt({threadRef:F,filePath:t,activeCwd:L,openInEditor:t=>{(async()=>{let n=await pe(t);n._tag===`Failure`&&!g(n)&&console.warn(`Failed to open diff file in editor.`,{operation:`open-diff-file`,...F?{environmentId:F.environmentId,threadId:F.threadId}:{},...d(e(n))})})()}})},[L,pe,F]),xt=(0,Q.useCallback)(e=>{te(t=>{let n=new Set(t.scopeKey===K?t.fileKeys:[]);return n.has(e)?n.delete(e):n.add(e),{scopeKey:K,fileKeys:n}})},[K]),St=(0,Q.useCallback)(()=>{te(e=>{let t=e.scopeKey===K?e.fileKeys:bn;return{scopeKey:K,fileKeys:Jt(_t,t)}})},[K,_t]),Ct=e=>{F&&Oe.getState().selectTurn(F,e)},wt=e=>{F&&Oe.getState().selectGitScope(F,e)},Tt=e=>{F&&Oe.getState().selectBranchBaseRef(F,e)};return(0,$.jsx)(Xt,{mode:n,header:(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3 [-webkit-app-region:no-drag]`,children:[(0,$.jsxs)(h,{children:[(0,$.jsxs)(b,{className:`inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted/70 px-2 text-xs font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring`,"aria-label":`Diff scope: ${Re}`,children:[(0,$.jsx)(`span`,{className:`truncate`,children:Re}),(0,$.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`})]}),(0,$.jsxs)(a,{align:`start`,className:`w-60`,children:[(0,$.jsx)(v,{className:H===null&&U===`unstaged`?`bg-foreground/[0.08]`:void 0,onClick:()=>wt(`unstaged`),children:(0,$.jsx)(`span`,{children:`Working tree`})}),(0,$.jsx)(v,{className:H===null&&U===`branch`?`bg-foreground/[0.08]`:void 0,onClick:()=>wt(`branch`),children:(0,$.jsx)(`span`,{children:`Branch changes`})}),(0,$.jsx)(v,{className:H!==null&&G?.turnId===Ie?.turnId?`bg-foreground/[0.08]`:void 0,onClick:()=>{Ie&&Ct(Ie.turnId)},children:(0,$.jsx)(`span`,{children:`Latest turn`})}),(0,$.jsxs)(ne,{children:[(0,$.jsx)(S,{children:`Turn`}),(0,$.jsx)(s,{className:`w-64`,children:V.map(e=>{let t=e.checkpointTurnCount??Ce[e.turnId]??`?`;return(0,$.jsxs)(v,{className:e.turnId===G?.turnId?`bg-foreground/[0.08]`:void 0,onClick:()=>Ct(e.turnId),children:[(0,$.jsxs)(`span`,{children:[`Turn `,t]}),(0,$.jsx)(`span`,{className:`ml-auto text-xs tabular-nums text-muted-foreground`,children:Me(e.completedAt,f.timestampFormat)})]},e.turnId)})})]})]})]}),H===null&&U===`branch`&&J?.baseRef&&(0,$.jsxs)(`div`,{className:`flex min-w-0 max-w-full items-center gap-2 overflow-hidden text-xs text-muted-foreground`,title:`${J.headRef??`HEAD`} → ${J.baseRef}`,"aria-label":`Comparing ${J.headRef??`HEAD`} against ${J.baseRef}`,children:[(0,$.jsx)(`span`,{className:`min-w-0 max-w-48 truncate`,children:J.headRef??`HEAD`}),(0,$.jsx)(ae,{className:`size-3.5 shrink-0 opacity-70`}),(0,$.jsxs)(ge,{items:lt,filteredItems:ut,value:W??yn,onOpenChange:e=>{e||A(``)},onValueChange:e=>{e&&Tt(e===yn?null:e)},children:[(0,$.jsxs)(Ae,{className:`inline-flex min-w-0 max-w-48 items-center gap-1 overflow-hidden rounded-md px-1.5 py-1 outline-none transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring`,"aria-label":`Change comparison target. Currently ${J.baseRef}`,children:[(0,$.jsx)(`span`,{className:`min-w-0 truncate`,children:J.baseRef}),(0,$.jsx)(r,{className:`size-3.5 shrink-0 opacity-70`})]}),(0,$.jsxs)(ue,{align:`start`,className:`w-72 min-w-0 max-w-[calc(100vw-1rem)] overflow-hidden [&>[data-slot=combobox-popup]]:min-w-0 [&>[data-slot=combobox-popup]]:overflow-hidden`,children:[(0,$.jsx)(`div`,{className:`min-w-0 shrink-0 px-3 pt-2.5`,children:(0,$.jsxs)(`div`,{className:`relative -translate-y-px border-b border-border/70 pb-1.5 transition-colors focus-within:border-ring`,children:[(0,$.jsx)(De,{"aria-hidden":`true`,className:`pointer-events-none absolute top-1.5 left-0 size-4 shrink-0 text-muted-foreground/55`}),(0,$.jsx)(be,{className:`[&_input]:h-6.5 [&_input]:ps-5 [&_input]:font-sans [&_input]:leading-6.5`,inputClassName:`rounded-none bg-transparent text-sm`,placeholder:`Search refs...`,showTrigger:!1,size:`sm`,unstyled:!0,value:k,onChange:e=>A(e.target.value)})]})}),(0,$.jsxs)(`div`,{className:`grid shrink-0 grid-cols-[1rem_minmax(0,1fr)] items-center gap-2 border-b border-border/70 ps-3 pe-6.5 pt-2 pb-1.5 font-medium text-[10px] text-muted-foreground uppercase tracking-wide`,children:[(0,$.jsx)(`span`,{"aria-hidden":`true`}),(0,$.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(0,1fr)_2rem] items-center`,children:[(0,$.jsx)(`span`,{children:`Branch`}),(0,$.jsx)(`span`,{className:`text-right`,children:`Remote`})]})]}),(0,$.jsx)(ve,{children:`No matching refs.`}),(0,$.jsxs)($e,{className:`max-h-64 min-w-0 overflow-x-hidden`,children:[(0,$.jsx)(Ee,{className:`h-8 w-full min-w-0 grid-cols-[1rem_minmax(0,1fr)] py-0`,contentClassName:`w-full min-w-0 overflow-hidden`,value:yn,children:(0,$.jsx)(`span`,{className:`block min-w-0 truncate`,children:`Automatic`})}),ot.map(e=>{let t=ct(e),n=e.local!==null&&e.remote!==null,r=e.remote?.name===t;return(0,$.jsx)(Ee,{className:`h-8 w-full min-w-0 grid-cols-[1rem_minmax(0,1fr)] py-0`,contentClassName:`w-full min-w-0 overflow-hidden`,value:t,children:(0,$.jsxs)(`div`,{className:`grid w-full min-w-0 grid-cols-[minmax(0,1fr)_2rem] items-center overflow-hidden`,children:[(0,$.jsx)(`span`,{className:`block min-w-0 truncate pe-2`,children:e.label}),n?(0,$.jsx)(`div`,{className:`flex justify-end`,onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:(0,$.jsx)(Te,{"aria-label":`Use remote version of ${e.label}`,checked:r,className:`[--thumb-size:--spacing(3)]`,onCheckedChange:t=>{let n=t?e.remote?.name:e.local?.name;n&&Tt(n)}})}):e.remote?(0,$.jsx)(`span`,{className:`flex justify-end text-muted-foreground`,title:`Remote only`,children:(0,$.jsx)(c,{"aria-hidden":`true`,className:`size-3`})}):null]})},e.id)})]})]})]})]})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 [-webkit-app-region:no-drag]`,children:[Z.length>0&&(0,$.jsx)(ze,{additions:yt.additions,deletions:yt.deletions,className:`mr-1 text-[11px]`,layout:`inline`}),Z.length>0&&(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{render:(0,$.jsx)(p,{type:`button`,size:`icon-xs`,variant:`outline`,"aria-label":vt?`Expand all files`:`Collapse all files`,onClick:St}),children:vt?(0,$.jsx)(ye,{className:`size-3`}):(0,$.jsx)(xe,{className:`size-3`})}),(0,$.jsx)(j,{side:`top`,children:vt?`Expand all files`:`Collapse all files`})]}),(0,$.jsxs)(fn,{className:`shrink-0`,variant:`outline`,size:`xs`,value:[x],onValueChange:e=>{let t=e[0];(t===`stacked`||t===`split`)&&ee(t)},children:[(0,$.jsx)(pn,{"aria-label":`Stacked diff view`,value:`stacked`,children:(0,$.jsx)(rt,{className:`size-3`})}),(0,$.jsx)(pn,{"aria-label":`Split diff view`,value:`split`,children:(0,$.jsx)(tt,{className:`size-3`})})]}),(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{render:(0,$.jsx)(pn,{"aria-label":C?`Disable diff line wrapping`:`Enable diff line wrapping`,variant:`outline`,size:`xs`,pressed:C,onPressedChange:e=>{T(!!e)}}),children:(0,$.jsx)(Ye,{className:`size-3`})}),(0,$.jsx)(j,{side:`top`,children:C?`Disable line wrapping`:`Enable line wrapping`})]}),(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{render:(0,$.jsx)(pn,{"aria-label":E?`Show whitespace changes`:`Hide whitespace changes`,variant:`outline`,size:`xs`,pressed:E,onPressedChange:e=>{O(!!e)}}),children:(0,$.jsx)(nt,{className:`size-3`})}),(0,$.jsx)(j,{side:`top`,children:E?`Show whitespace changes`:`Hide whitespace changes`})]})]})]}),children:I?z?H!==null&&V.length===0?(0,$.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`No completed turns yet.`}):(0,$.jsx)($.Fragment,{children:(0,$.jsxs)(`div`,{className:`diff-panel-viewport flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[ft&&(0,$.jsx)(`p`,{className:`shrink-0 border-b border-border/70 bg-muted/40 px-3 py-1.5 text-[11px] text-muted-foreground`,children:`This diff was truncated because it exceeded the preview limit. The changes shown are incomplete.`}),mt&&!X&&(0,$.jsx)(`div`,{className:`px-3`,children:(0,$.jsx)(`p`,{className:`mb-2 text-[11px] text-red-500/80`,children:mt})}),X?X.kind===`files`?(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,onClickCapture:e=>{let t=(e.nativeEvent.composedPath?.()??[]).find(e=>e instanceof HTMLElement&&e.hasAttribute(`data-title`))?.textContent?.trim();t&&bt(t)},children:(0,$.jsx)(tn,{viewerRef:P,className:`diff-render-surface h-full min-h-0 overflow-auto`,files:Z,sectionId:Ve,sectionTitle:Ge,composerDraftTarget:i,renderHeaderPrefix:(e,t,n)=>{let i=Se(e);return(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{render:(0,$.jsx)(`button`,{type:`button`,className:o(`inline-flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm border-0 bg-transparent p-0 transition-colors hover:bg-foreground/10 focus-visible:outline-hidden`,we(e)),"aria-label":n?`Expand ${i}`:`Collapse ${i}`,"aria-expanded":!n,onClick:e=>{e.stopPropagation(),xt(t)}}),children:n?(0,$.jsx)(y,{className:`size-4`}):(0,$.jsx)(r,{className:`size-4`})}),(0,$.jsx)(j,{side:`top`,children:n?`Expand diff`:`Collapse diff`})]})},options:{diffStyle:x===`split`?`split`:`unified`,lineDiffType:`none`,overflow:C?`wrap`:`scroll`,theme:He(u),themeType:u,unsafeCSS:xn,stickyHeaders:!0,itemMetrics:{diffHeaderHeight:33},layout:{paddingTop:0,paddingBottom:8,gap:8}}},K??Ve)}):(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-2`,children:(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground/75`,children:X.reason}),(0,$.jsx)(`pre`,{className:o(`max-h-[72vh] rounded-md border border-border/70 bg-background/70 p-3 font-mono text-[11px] leading-relaxed text-muted-foreground/90`,C?`overflow-auto whitespace-pre-wrap wrap-break-word`:`overflow-auto`),children:X.text})]})}):pt?(0,$.jsx)(Zt,{label:G?`Loading checkpoint diff...`:U===`unstaged`?`Loading working tree diff...`:`Loading branch diff...`}):(0,$.jsx)(`div`,{className:`flex h-full items-center justify-center px-3 py-2 text-xs text-muted-foreground/70`,children:(0,$.jsx)(`p`,{children:ht?`No net changes in this selection.`:`No patch available for this selection.`})})]})}):(0,$.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`Turn diffs are unavailable because this project is not a git repository.`}):(0,$.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`Select a thread to inspect turn diffs.`})})}export{U as DiffWorkerPoolProvider,Sn as default};
98
+ //# sourceMappingURL=DiffPanel-c5R2pEEQ.js.map