@preventive/triage 1.0.0-alpha.44 → 1.0.0-alpha.45

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 (183) hide show
  1. package/common/bundle-sources.js +20 -1
  2. package/common/default-scan-models.ts +1 -1
  3. package/common/dependency-reviews.d.ts +0 -5
  4. package/common/dependency-reviews.js +0 -17
  5. package/common/managed/agent-tasks.ts +292 -0
  6. package/common/managed/github-agents.ts +92 -0
  7. package/common/managed/github-logins.ts +49 -0
  8. package/common/managed/roles.ts +7 -0
  9. package/common/managed/routes.js +88 -7
  10. package/common/managed/team-app.d.ts +5 -2
  11. package/common/managed/team-app.js +2 -2
  12. package/common/server-info.ts +3 -0
  13. package/common/workspace-app.js +6 -3
  14. package/out/brotli-fallback.js +3 -3
  15. package/out/chunk-2XUEZHIP.js +18 -18
  16. package/out/chunk-2ZDZWLFY.js +1 -0
  17. package/out/chunk-3PS4KWD2.js +10 -0
  18. package/out/chunk-5DHL5NG3.js +2 -0
  19. package/out/chunk-6HNXNIQY.js +52 -0
  20. package/out/chunk-7C7DWL7I.js +1 -0
  21. package/out/chunk-AFLZH7WG.js +1 -0
  22. package/out/chunk-BC2UCLFJ.js +1 -0
  23. package/out/chunk-C4Z6ZBXV.js +6 -6
  24. package/out/chunk-GDPCLSOS.js +2 -0
  25. package/out/chunk-GO7FT4OD.js +1 -0
  26. package/out/chunk-HMAJDVXN.js +1 -0
  27. package/out/chunk-I2MDGSQX.js +3 -0
  28. package/out/chunk-IYPY47MC.js +1 -0
  29. package/out/chunk-IZ7POWI3.js +18 -0
  30. package/out/chunk-JCIIBLKR.js +1 -1
  31. package/out/chunk-NPW52BM2.js +17 -0
  32. package/out/chunk-NRPC74AM.js +1 -1
  33. package/out/chunk-NV7ES4EW.js +1 -0
  34. package/out/chunk-OKRLLE5I.js +17 -0
  35. package/out/chunk-OOJM4CTU.js +1 -1
  36. package/out/chunk-PNHBZGDD.js +1 -1
  37. package/out/chunk-PTGDYLNS.js +36 -0
  38. package/out/chunk-PXK7EU4V.js +1 -0
  39. package/out/chunk-Q6MVYGYV.js +3 -0
  40. package/out/chunk-QB4CBOX2.js +1 -0
  41. package/out/chunk-QRD6GIG5.js +229 -0
  42. package/out/chunk-R3NZFXVR.js +1 -0
  43. package/out/chunk-R5O6FAW4.js +1 -1
  44. package/out/chunk-SXV2T5C4.js +80 -0
  45. package/out/chunk-TUII34K2.js +1 -1
  46. package/out/chunk-VFWMQ3LG.js +2 -0
  47. package/out/chunk-VH4XMZIW.js +2 -0
  48. package/out/chunk-WFYLMF6Z.js +10 -0
  49. package/out/chunk-WI7Z5A2T.js +6 -0
  50. package/out/chunk-WQ74ZBZF.js +7 -0
  51. package/out/chunk-XVBEOGOS.js +3 -0
  52. package/out/client-managed-import.js +3 -3
  53. package/out/client-managed.js +31 -35
  54. package/out/client-sync.js +11 -11
  55. package/out/compare.js +35 -0
  56. package/out/dialogs.js +51 -0
  57. package/out/github-issue-authorized.html +1 -1
  58. package/out/github-issue-authorized.js +1 -1
  59. package/out/graph.js +17 -17
  60. package/out/index.html +30 -34
  61. package/out/prism.js +14 -14
  62. package/out/scan.js +2 -0
  63. package/out/terminal.js +294 -293
  64. package/out/view.css +1 -1
  65. package/out/view.js +16 -107
  66. package/package.json +51 -6
  67. package/risk/actions/findings.js +156 -0
  68. package/risk/actions/resolve.js +219 -0
  69. package/risk/actions/scripts/commands.js +182 -0
  70. package/risk/actions/scripts/grade.js +113 -0
  71. package/risk/actions/scripts/packages.js +123 -0
  72. package/risk/actions/scripts/shell.js +165 -0
  73. package/risk/actions/uses.js +76 -0
  74. package/risk/actions/workflow.js +110 -0
  75. package/risk/files/hosts.js +6 -6
  76. package/risk/files/readability.js +23 -17
  77. package/risk/files/runs-code.js +18 -6
  78. package/risk/files/script.js +7 -3
  79. package/risk/files/stamps.js +8 -7
  80. package/risk/index.d.ts +68 -1
  81. package/risk/index.js +6 -2
  82. package/risk/npm/assess.js +1 -1
  83. package/risk/npm/compare.js +34 -10
  84. package/risk/npm/files.js +413 -2
  85. package/risk/npm/tarball.js +56 -73
  86. package/server-managed/agent-merges.ts +198 -0
  87. package/server-managed/app-agents.ts +30 -0
  88. package/server-managed/avatar-store.ts +1 -0
  89. package/server-managed/commit-coauthors.ts +83 -0
  90. package/server-managed/commit-lockfiles.ts +62 -0
  91. package/server-managed/db-methods.ts +29 -10
  92. package/server-managed/db-neon.ts +30 -2
  93. package/server-managed/db-schema.ts +9 -2
  94. package/server-managed/db.ts +7 -0
  95. package/server-managed/dependabot-access.ts +60 -0
  96. package/server-managed/dependabot-alerts.ts +185 -0
  97. package/server-managed/dependency-review-comments.ts +97 -0
  98. package/server-managed/dependency-reviews.ts +65 -15
  99. package/server-managed/github-accounts.ts +33 -0
  100. package/server-managed/github-actions.ts +71 -0
  101. package/server-managed/github-app.ts +23 -9
  102. package/server-managed/github-errors.ts +2 -0
  103. package/server-managed/github-link-oauth.ts +69 -0
  104. package/server-managed/github-links.ts +204 -0
  105. package/server-managed/github-oauth.ts +5 -2
  106. package/server-managed/github-users.ts +30 -0
  107. package/server-managed/http.ts +1122 -52
  108. package/server-managed/index.ts +6 -2
  109. package/server-managed/locked-packages.ts +37 -16
  110. package/server-managed/lockfile-scope.ts +49 -0
  111. package/server-managed/npm-delta-worker.js +23 -0
  112. package/server-managed/npm-delta.ts +173 -0
  113. package/server-managed/npm-insights.ts +20 -11
  114. package/server-managed/npm-kept.ts +51 -4
  115. package/server-managed/npm-loads.ts +20 -13
  116. package/server-managed/npm-packages.ts +24 -64
  117. package/server-managed/pull-comment-reviews.ts +161 -0
  118. package/server-managed/pull-dependencies.ts +280 -0
  119. package/server-managed/pull-dependency-reviews.ts +318 -0
  120. package/server-managed/pull-reviews.ts +205 -0
  121. package/server-managed/release-commits.ts +84 -0
  122. package/server-managed/repository-actions.ts +209 -0
  123. package/server-managed/repository-agents.ts +220 -0
  124. package/server-managed/repository-browser.ts +54 -13
  125. package/server-managed/repository-changes.ts +284 -0
  126. package/server-managed/repository-code.ts +52 -0
  127. package/server-managed/repository-dependency-reviews.ts +135 -0
  128. package/server-managed/repository-history.ts +445 -0
  129. package/server-managed/repository-issues.ts +181 -0
  130. package/server-managed/repository-pulse.ts +432 -0
  131. package/server-managed/repository-risk-read.ts +165 -0
  132. package/server-managed/repository-risk.ts +113 -105
  133. package/server-managed/reviewed-dependencies.ts +149 -0
  134. package/server-managed/session.ts +9 -5
  135. package/server-managed/sql.ts +1 -1
  136. package/server-managed/storage-stores.ts +5 -0
  137. package/server-managed/team-app.ts +19 -3
  138. package/server-managed/workspace-shares.ts +4 -1
  139. package/server.ts +11 -0
  140. package/out/chunk-2ABLKCOY.js +0 -46
  141. package/out/chunk-2KBF5TZ7.js +0 -2
  142. package/out/chunk-35VE6CDH.js +0 -2
  143. package/out/chunk-3BZ7JERB.js +0 -1
  144. package/out/chunk-4XCDFGDP.js +0 -10
  145. package/out/chunk-5LSXOLUS.js +0 -1
  146. package/out/chunk-5RCM2J63.js +0 -1
  147. package/out/chunk-7B6HB4D7.js +0 -1
  148. package/out/chunk-AJ4GTATZ.js +0 -3
  149. package/out/chunk-CH4UN6WK.js +0 -225
  150. package/out/chunk-CMQA4DM6.js +0 -1
  151. package/out/chunk-CVVJAXVY.js +0 -2
  152. package/out/chunk-DIJJNTRH.js +0 -10
  153. package/out/chunk-EDKLBQQN.js +0 -17
  154. package/out/chunk-F47DXCEV.js +0 -33
  155. package/out/chunk-FK3DZEKL.js +0 -1
  156. package/out/chunk-G6AJWENO.js +0 -1
  157. package/out/chunk-GJ4IUCNS.js +0 -1
  158. package/out/chunk-GNXOKIGP.js +0 -80
  159. package/out/chunk-GZ4MS3TE.js +0 -13
  160. package/out/chunk-GZWM7UQM.js +0 -2
  161. package/out/chunk-IU3CCINR.js +0 -3
  162. package/out/chunk-K3X5EJBQ.js +0 -2
  163. package/out/chunk-KEX2ATEW.js +0 -2
  164. package/out/chunk-KYCNJVB7.js +0 -1
  165. package/out/chunk-LPCTJYNA.js +0 -7
  166. package/out/chunk-O4RJY5TP.js +0 -2
  167. package/out/chunk-OD4LPN3H.js +0 -1
  168. package/out/chunk-QWDWTBM7.js +0 -1
  169. package/out/chunk-QYWKC557.js +0 -1
  170. package/out/chunk-R75XOKUP.js +0 -1
  171. package/out/chunk-SWTLADW5.js +0 -1
  172. package/out/chunk-T7OKH4VW.js +0 -1
  173. package/out/chunk-TZ5KB2Y5.js +0 -10
  174. package/out/chunk-UNTRGE26.js +0 -2
  175. package/out/chunk-UTR2LVME.js +0 -2
  176. package/out/chunk-UYAXVRVL.js +0 -1
  177. package/out/chunk-V3ME6FI5.js +0 -2
  178. package/out/chunk-V5O7M2YT.js +0 -1
  179. package/out/chunk-VIHGO77Y.js +0 -1
  180. package/out/chunk-W4J3MGLB.js +0 -1
  181. package/out/chunk-WGG7KQUH.js +0 -1
  182. package/out/chunk-XYFXXB2G.js +0 -10
  183. package/out/chunk-ZESLQCTF.js +0 -6
package/out/view.js CHANGED
@@ -1,110 +1,19 @@
1
- import{a as xt,b as Le,c as Od,d as wr}from"./chunk-QWDWTBM7.js";import{a as Nd}from"./chunk-KEX2ATEW.js";import{$ as Oi,$a as tt,$b as jc,$c as k,A as yl,Aa as Ni,Ab as Gt,Ac as ld,B as _l,Ba as nc,Bb as Ec,Bc as Oe,C as wl,Ca as rc,Cb as Tc,Cc as cd,D as kl,Da as sc,Db as Rc,E as $l,Ea as rr,Eb as Lc,F as xl,Fa as oc,Fb as Ki,G as Sl,Ga as Vt,Gb as Gi,H as Cl,Ha as sr,Hb as Mc,I as El,Ia as ac,Ib as Pc,Ic as dd,J as Tl,Ja as de,Jb as Ac,Jc as Be,K as Di,Ka as D,Kb as Ic,Kc as it,L as me,La as yt,Lb as Fc,Lc as Xi,M as Rl,Ma as zi,Mb as Wt,Mc as yr,N as Ll,Na as or,Nb as cr,Nc as nt,O as Ml,Oa as lc,Ob as Dc,Oc as ud,P as Pl,Pa as cc,Pb as Oc,Pc as pd,Q as Al,Qa as dc,Qb as Wi,Qc as hd,R as Je,Ra as uc,Rb as Yi,Rc as md,S as Il,Sa as Kt,Sb as Bc,Sc as fd,T as Fl,Ta as _t,Tb as Nc,Tc as gd,U as bt,Ua as pc,Ub as dr,Uc as bd,V as Dl,Va as wt,Vb as zc,Vc as vd,W as vt,Wa as qi,Wb as ur,Wc as yd,X as Ol,Xa as ar,Xb as pr,Xc as Jt,Y as Bl,Ya as hc,Yb as qc,Yc as _r,Z as Nl,Za as mc,Zb as Hc,Zc as _d,_ as zl,_a as Hi,_b as Uc,_c as wd,a as el,aa as ql,ab as fc,ac as Vc,b as tl,ba as Hl,bb as gc,bc as Yt,c as il,ca as Ul,cb as bc,cc as hr,cd as kd,d as nl,da as qt,dc as Kc,dd as $d,e as rl,ea as Ht,ec as Gc,ed as xd,f as nr,fa as jl,fc as Wc,fd as Sd,g as Ii,ga as Vl,gb as vc,gc as mr,gd as Cd,h as l,ha as Kl,hb as yc,hc as fr,hd as Ed,i as H,ia as Gl,ic as Yc,id as Td,j as ll,ja as Bi,jc as Xc,jd as Rd,k as cl,ka as Wl,kc as gr,kd as Ld,l as dl,la as Yl,lc as br,ld as Md,m as ul,ma as Qe,mc as Jc,md as Pd,n as he,na as Xl,nc as kt,nd as Ad,o as Fi,oa as Jl,ob as lr,oc as Qc,p as pl,pa as Ze,pb as Ui,pc as Zc,pd as Qt,qa as Ql,qb as _c,qc as ed,qd as Id,ra as Zl,rb as xe,rc as td,rd as Ji,sa as Ut,sb as wc,sc as id,sd as Fd,t as hl,ta as De,tb as ji,tc as nd,td as $t,u as ml,ua as et,ub as Vi,uc as Xt,ud as Dd,v as fl,va as ec,vb as kc,vc as rd,vd as fe,w as gl,wa as tc,wb as $c,wc as sd,wd as Bd,x as ke,xa as $e,xb as xc,xc as od,xd as St,y as bl,ya as jt,yb as Sc,yc as vr,z as vl,za as ic,zb as Cc,zc as ad}from"./chunk-CH4UN6WK.js";import{a as kr,b as $r,f as Ct,g as Zt,j as xr,k as ei,l as Sr}from"./chunk-GZWM7UQM.js";import"./chunk-JCIIBLKR.js";import{a as Ti}from"./chunk-2KBF5TZ7.js";import{b as Pa}from"./chunk-K3X5EJBQ.js";import{a as Ea,b as R,c as Ta,d as We,g as q,h as Y,i as La}from"./chunk-CVVJAXVY.js";import{B as gt,D as sl,K as ol,O as al,c as Wa,d as we,e as Xe,f as Ya,j as Ai,k as Xa,n as Ja,r as Qa,u as Za}from"./chunk-VIHGO77Y.js";import{u as Ka,z as Ga}from"./chunk-EDKLBQQN.js";import{d as pa,p as ba,q as va}from"./chunk-SWTLADW5.js";import{H as Ei,K as Ma,b as Xn,c as Jn,d as j,k as _a,l as Qn,m as Ke,p as wa,q as Ca}from"./chunk-2ABLKCOY.js";import{a as Si,d as Zn,g as Ci,h as ka,j as K,k as Re,l as $a,m as xa,o as Sa}from"./chunk-ZESLQCTF.js";import{f as ya}from"./chunk-UYAXVRVL.js";import"./chunk-NRPC74AM.js";import"./chunk-LPCTJYNA.js";import{f as J}from"./chunk-W4J3MGLB.js";import"./chunk-GJ4IUCNS.js";import"./chunk-PNHBZGDD.js";import{$ as E,A as Li,C as G,D as ft,G as zt,H as Ye,J as Mi,O as Fe,P as Oa,R as Ba,S as Na,V as za,W as qa,Y as Ha,a as I,aa as oe,b as _e,c as mt,da as Ua,e as Aa,ea as ja,f as tr,fa as Pi,g as Ri,ga as Va,o as ir,p as Ia,r as Fa,z as Da}from"./chunk-F47DXCEV.js";import"./chunk-R5O6FAW4.js";import{b as Ra,d as ht}from"./chunk-CMQA4DM6.js";import{g as ga}from"./chunk-AJ4GTATZ.js";import"./chunk-V3ME6FI5.js";import"./chunk-R75XOKUP.js";import{a as er,d as Ge}from"./chunk-OD4LPN3H.js";import"./chunk-4XCDFGDP.js";import"./chunk-3BZ7JERB.js";import{a as ce}from"./chunk-TZ5KB2Y5.js";import"./chunk-XYFXXB2G.js";import{a as X}from"./chunk-DIJJNTRH.js";import{a as $i,g as xi,h as ma,j as Wn,l as fa,n as Yn}from"./chunk-QYWKC557.js";import{B as ki,I as ca,J as da,L as ua,a as _i,b as ta,e as ia,f as na,g as ra,j as sa,k as oa,l as aa,m as wi,p as la,v as Nt}from"./chunk-GNXOKIGP.js";import"./chunk-C4Z6ZBXV.js";import{a as M,b as pt,c as a,d as ye,e as Xo,g as m,i as Jo,j as U}from"./chunk-2XUEZHIP.js";import{b as ha}from"./chunk-TUII34K2.js";import{c as Qo,e as Zo,f as ea,k as bi,p as vi,t as yi}from"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";var zd={attach:{title:"Synced triage on report attach",intro:"have triage from your workspace that disagrees with your local view on",trailingNote:"Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.",importedSideLabel:"Apply from chain",applyButton:"Apply"},chain:{title:"Triage conflict from peer update",intro:"were changed by a peer (or by another tab) in a way that disagrees with your local triage on",trailingNote:`Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep for each \u2014 a "keep current" pick re-publishes your local value to the chain on your next save.`,importedSideLabel:"Apply from chain",applyButton:"Apply"}};function qd(){Tl(async(i,e,t)=>{let n=hl(i);try{return await Ol(i,n,zd[t]??zd.attach)}catch{let r=i.length;return alert(`${t==="attach"?"A report attach":"A workspace sync"} had ${r} triage disagreement${r===1?"":"s"} with your local view. Kept your local values because another dialog is open. ${t==="attach"?"Detach and re-attach the report to pick again.":"Your local values will re-publish to the chain on the next change."}`),null}})}var Cr=class extends q{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=""}_finish(e){this._value="",super._finish(e)}_onCancel=()=>this._finish(null);_onInput=e=>{this._value=e.target.value};_onSubmit=()=>{let e=this._value??"";e&&this._finish(e)};_onKeydown=e=>{e.key==="Enter"&&(e.preventDefault(),this._onSubmit())};render(){let e=(this._value??"").length>0,t=this.retry?"That password didn't match. Try again, or cancel to leave the workspace unsynced for now.":"This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.";return a`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${t}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!e}" @click="${this._onSubmit}">${this.retry?"Retry":"Authenticate"}</button></footer></dialog>`}};customElements.define("sync-auth-dialog",Cr);function Hd({retry:i=!1}={}){return Y("sync-auth-dialog",{retry:!!i})}function Ud(){El(async({retry:i})=>{try{return await Hd({retry:i})}catch(e){return console.warn("Sync auth dialog failed to open:",e),null}})}var Qi="https://triage.space/",qh=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function Hh(){for(let i of qh)if(location.hostname===i.hostname&&location.pathname.startsWith(i.pathPrefix))return i;return null}var Uh=["deepview.triage","deepview.triage.pending"],jh="deepview.repoUrls";function Vh(){try{for(let i of Uh)if(localStorage.getItem(i))return!0}catch{return!0}try{let i=localStorage.getItem(jh);if(i){let e=JSON.parse(i);if(e&&typeof e=="object"&&Object.keys(e).length>0)return!0}}catch{return!0}return!1}async function Kh(){if(Vh())return!0;let i=[];try{i=await gt()}catch{return!0}if(i.length>0)return!0;try{if(he().length>0)return!0}catch{return!0}try{return await ol()}catch{return!0}}var Er=class extends U{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let e=this.querySelector("dialog");e&&e.showModal();let t=this.querySelector("button.om-stay");t&&t.focus()}_finish(e){if(this._settled)return;this._settled=!0;let t=this.querySelector("dialog");t&&t.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:e}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let e=()=>a`<a class="om-link" href="${Qi}" target="_blank" rel="noopener noreferrer">${Qi}</a>`;return a`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${e()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${e()}.</p>${this.supportsSync?a`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${e()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:a`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${e()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define("origin-migration-dialog",Er);function Gh(i){return new Promise(e=>{let t=document.createElement("origin-migration-dialog");t.supportsSync=i.supportsSync,t.addEventListener("resolve",n=>{t.remove(),e(!!n.detail)}),document.body.append(t)})}async function jd(){let i=Hh();return i?await Kh()?await Gh(i)?(location.assign(Qi),!0):!1:(location.replace(Qi),!0):!1}var Tr=class extends q{static styles=[...q.styles,M(Fl)];static properties={encoded:{type:String},_stage:{state:!0},_password:{state:!0},_name:{state:!0},_decoded:{state:!0},_existingById:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.encoded="",this._stage="password",this._password="",this._name="",this._decoded=null,this._existingById=null,this._busy=!1,this._error="",this._settled=!1}focusInitial(){this._focusActiveInput()}updated(e){e.has("_stage")&&this._focusActiveInput()}_focusActiveInput(){if(this._stage==="password")this.renderRoot.querySelector('input[type="password"]')?.focus();else if(this._stage==="name"){let e=this.renderRoot.querySelector('input[data-role="name"]');e&&(e.focus(),e.select())}}_finish(e){this._settled||(this._decoded=null,this._password="",this.encoded="",super._finish(e))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=e=>{this._password=e.target.value,this._error=""};_onNameInput=e=>{this._name=e.target.value};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let e=await wl({encoded:this.encoded,password:this._password});if(this._settled)return;let t=he().find(n=>n.id===e.id)??null;this._decoded=e,this._existingById=t,this._name=e.name,this._password="",this._stage="name"}catch(e){if(this._settled)return;this._error=e?.message??String(e)}finally{this._busy=!1}}};_onAttach=()=>{if(!this._decoded)return;let e=Fi(this._name);if(!e)return;let t=he().find(n=>n.id===this._decoded.id)??null;if(t){this._existingById=t;return}this._nameCollision(e)||this._finish({id:this._decoded.id,name:e,privateKeyBase64:this._decoded.privateKeyBase64})};_nameCollision(e){if(!e||!this._decoded)return null;for(let t of he())if(t.id!==this._decoded.id&&Fi(t.name)===e)return t;return null}_onKeydown=e=>{e.key==="Enter"&&(e.preventDefault(),this._stage==="password"?this._onUnlock():this._stage==="name"&&this._onAttach())};_passwordStage(){return a`<p class="nwd-note ui-hint">Someone shared a workspace with you. Enter the password they sent separately to attach it to this browser.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?a`<p class="wsl-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer>`}_alreadyAttachedStage(){let e=this._existingById;return a`<p class="nwd-note">This workspace is already attached as <strong>"${e?.name??""}"</strong>. Open it from the sidebar.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onCancel}">Close</button></footer>`}_nameStage(){if(this._existingById)return this._alreadyAttachedStage();let e=Fi(this._name),t=this._nameCollision(e),n=!!e&&!t;return a`<p class="nwd-note ui-hint">Pick a name for the workspace on this device. The shared identity is preserved either way — only the visible label changes.</p><label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> ${t?a`<p class="wsl-error" role="alert">A workspace named "${e}" already exists on this device. Pick a different name.</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!n}" @click="${this._onAttach}">Attach</button></footer>`}render(){let e=this._stage==="password"?"Attach shared workspace":this._existingById?"Workspace already attached":"Name the workspace";return a`<dialog @close="${this._onClose}"><header><h3>${e}</h3></header>${this._stage==="password"?this._passwordStage():this._nameStage()}</dialog>`}};customElements.define("workspace-unlock-link-dialog",Tr);function Vd({encoded:i}={}){return La("workspace-unlock-link-dialog",{encoded:i??""},e=>{e.encoded=""})}var ee=null,Zi=!1,ti=null;function Wh(i){if(!i)return"Could not unlock. Try again.";switch(i.name??""){case"NotAllowedError":case"AbortError":return"";case"SecurityError":return"The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.";case"InvalidStateError":return"The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.";case"NotSupportedError":return"This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.";case"NetworkError":return"A network error prevented the passkey from completing. Check your connection and try again.";case"UnknownError":return"The authenticator returned an unknown error. Try again, or use a different passkey.";default:{let t=i.message??String(i);return t.length>200?t.slice(0,197)+"\u2026":t}}}function Yh(){if(ee)return ee;ee=document.createElement("div"),ee.id="lock-overlay",ee.setAttribute("role","dialog"),ee.setAttribute("aria-modal","true"),ee.setAttribute("aria-label","Unlock DeepView"),ee.innerHTML=`
2
- <div class="lock-overlay-card">
3
- <div class="lock-overlay-icon" aria-hidden="true">
4
- <svg viewBox="0 0 32 32" width="40" height="40" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="15" width="18" height="12" rx="1.5"/><path d="M11 15v-4a5 5 0 0 1 10 0v4"/></svg>
5
- </div>
6
- <h2 class="lock-overlay-title">DeepView is locked</h2>
7
- <p class="lock-overlay-body">
8
- Your triage data and reports are encrypted with a passkey on
9
- this device. Unlock to continue.
10
- </p>
11
- <p class="lock-overlay-error" hidden></p>
12
- <button type="button" class="lock-overlay-button primary">Unlock with passkey</button>
13
- <p class="lock-overlay-footer">
14
- Lost your passkey?
15
- <a href="#" class="lock-overlay-wipe">Wipe local data and start over</a>
16
- </p>
17
- </div>
18
- `;let i=ee.querySelector("button"),e=ee.querySelector(".lock-overlay-error");return i.addEventListener("click",async()=>{if(!(Zi||!Rr())){Zi=!0,e.hidden=!0,e.textContent="",i.disabled=!0,i.textContent="Waiting\u2026",ti=new AbortController;try{await Xa({signal:ti.signal})}catch(n){let r=Wh(n);e.textContent=r,e.hidden=!r}finally{Zi=!1,ti=null,i.disabled=!1,i.textContent="Unlock with passkey"}}}),ee.querySelector(".lock-overlay-wipe").addEventListener("click",async n=>{if(n.preventDefault(),!(Zi||!Rr())&&confirm(`Wipe ALL local DeepView data and start over?
1
+ import"./chunk-R3NZFXVR.js";import{a as e,b as t,e as n,f as r,g as i,i as a}from"./chunk-XVBEOGOS.js";import{$b as o,Ab as s,Ac as c,B as l,Bb as u,Bc as d,C as f,Cb as p,Cc as m,Da as h,Dc as g,Ea as ee,Eb as _,Ec as te,F as ne,Fa as re,Fb as ie,Fc as ae,G as oe,Ga as v,Gb as se,Gc as ce,Ha as le,Hb as y,He as ue,I as de,Ib as fe,Ic as pe,Ie as me,J as b,Jb as he,Jc as ge,Je as _e,Kb as ve,Kc as ye,Ke as be,L as xe,Lb as x,Le as Se,Mb as Ce,Me as we,N as Te,Na as S,Nb as Ee,Ne as De,O as Oe,Ob as ke,Oe as Ae,P as je,Pa as Me,Pb as C,Pe as w,Q as Ne,Qa as T,Qb as Pe,Qe as Fe,R as E,Ra as Ie,Rb as Le,Re,Sa as ze,Sb as Be,T as Ve,Tb as He,Ua as Ue,Ub as We,Ue as Ge,Va as Ke,Vb as qe,Ve as Je,Wb as Ye,Wc as Xe,We as Ze,Xb as Qe,Xe as $e,Yb as et,Ye as tt,Zb as nt,_b as rt,ac as D,b as it,c as O,cb as at,d as ot,db as st,e as ct,eb as lt,ec as ut,fb as dt,fc as ft,fe as pt,g as mt,ga as ht,gb as gt,gc as _t,ge as vt,h as yt,ha as bt,hb as xt,hc as k,he as St,ia as Ct,ib as wt,ic as Tt,id as Et,j as Dt,ja as Ot,jc as kt,jd as At,je as jt,k as Mt,ka as Nt,kc as Pt,kd as Ft,ke as It,l as Lt,la as Rt,lc as zt,ld as Bt,le as A,ma as Vt,mc as Ht,md as Ut,me as Wt,n as Gt,ne as Kt,o as qt,oa as Jt,oe as Yt,p as Xt,pb as Zt,pe as j,q as Qt,qe as $t,r as en,ra as tn,rb as nn,rd as rn,re as an,s as on,sd as sn,se as cn,tb as ln,te as un,u as dn,uc as fn,v as M,vb as pn,vc as mn,w as N,wb as hn,wd as gn,we as _n,x as vn,xb as yn,xd as bn,xe as xn,yb as Sn,ye as Cn,zb as wn}from"./chunk-QRD6GIG5.js";import"./chunk-VH4XMZIW.js";import"./chunk-JCIIBLKR.js";import{d as Tn}from"./chunk-NV7ES4EW.js";import{H as En,N as Dn,O as On,P as kn,R as An,S as jn,X as Mn,da as Nn,f as Pn,fa as Fn,l as P,la as In,qa as Ln}from"./chunk-6HNXNIQY.js";import{g as Rn,h as zn}from"./chunk-WI7Z5A2T.js";import"./chunk-NRPC74AM.js";import"./chunk-WQ74ZBZF.js";import{f as F}from"./chunk-7C7DWL7I.js";import"./chunk-PNHBZGDD.js";import"./chunk-VFWMQ3LG.js";import{E as Bn,F as Vn,H as Hn,N as Un,Q as Wn,R as Gn,U as Kn,V as qn,a as Jn,da as Yn,e as Xn,fa as I,ga as L,ha as R,ja as Zn,la as Qn,m as $n,n as er,na as tr,p as nr,x as rr,y as ir}from"./chunk-PTGDYLNS.js";import{g as ar}from"./chunk-I2MDGSQX.js";import"./chunk-3PS4KWD2.js";import"./chunk-IYPY47MC.js";import{c as or,d as sr}from"./chunk-OKRLLE5I.js";import{a as cr,g as lr,h as ur,n as dr,o as fr,q as pr}from"./chunk-BC2UCLFJ.js";import{B as mr,I as hr,l as gr}from"./chunk-SXV2T5C4.js";import{d as _r,i as vr,k as yr,l as br,q as xr,w as Sr}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import"./chunk-TUII34K2.js";import{a as z,b as Cr,c as B,g as V,i as wr,j as H}from"./chunk-2XUEZHIP.js";import"./chunk-OOJM4CTU.js";var Tr={attach:{title:`Synced triage on report attach`,intro:`have triage from your workspace that disagrees with your local view on`,trailingNote:`Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.`,importedSideLabel:`Apply from chain`,applyButton:`Apply`},chain:{title:`Triage conflict from peer update`,intro:`were changed by a peer (or by another tab) in a way that disagrees with your local triage on`,trailingNote:`Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep for each — a "keep current" pick re-publishes your local value to the chain on your next save.`,importedSideLabel:`Apply from chain`,applyButton:`Apply`}};function Er(){wt(async(e,t,n)=>{let r=Te(e);try{return await at(e,r,Tr[n]??Tr.attach)}catch{let t=e.length;return alert(`${n===`attach`?`A report attach`:`A workspace sync`} had ${t} triage disagreement${t===1?``:`s`} with your local view. Kept your local values because another dialog is open. ${n===`attach`?`Detach and re-attach the report to pick again.`:`Your local values will re-publish to the chain on the next change.`}`),null}})}var Dr=class extends Ue{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=``}_finish(e){this._value=``,super._finish(e)}_onCancel=()=>this._finish(null);_onInput=e=>{this._value=e.target.value};_onSubmit=()=>{let e=this._value??``;e&&this._finish(e)};_onKeydown=e=>{e.key===`Enter`&&(e.preventDefault(),this._onSubmit())};render(){let e=(this._value??``).length>0,t=this.retry?`That password didn't match. Try again, or cancel to leave the workspace unsynced for now.`:`This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.`;return B`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${t}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!e}" @click="${this._onSubmit}">${this.retry?`Retry`:`Authenticate`}</button></footer></dialog>`}};customElements.define(`sync-auth-dialog`,Dr);function Or({retry:e=!1}={}){return Ke(`sync-auth-dialog`,{retry:!!e})}function kr(){xt(async({retry:e})=>{try{return await Or({retry:e})}catch(e){return console.warn(`Sync auth dialog failed to open:`,e),null}})}var Ar=`https://triage.space/`,jr=[{hostname:`deepaudit.dev`,pathPrefix:`/`,supportsSync:!0},{hostname:`chalker.github.io`,pathPrefix:`/deepview/`,supportsSync:!1}];function Mr(){for(let e of jr)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var Nr=[`deepview.triage`,`deepview.triage.pending`],Pr=`deepview.repoUrls`;function Fr(){try{for(let e of Nr)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(Pr);if(e){let t=JSON.parse(e);if(t&&typeof t==`object`&&Object.keys(t).length>0)return!0}}catch{return!0}return!1}async function Ir(){if(Fr())return!0;let e=[];try{e=await vn()}catch{return!0}if(e.length>0)return!0;try{if(b().length>0)return!0}catch{return!0}try{return await l()}catch{return!0}}var Lr=class extends H{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let e=this.querySelector(`dialog`);e&&e.showModal();let t=this.querySelector(`button.om-stay`);t&&t.focus()}_finish(e){if(this._settled)return;this._settled=!0;let t=this.querySelector(`dialog`);t&&t.close(),this.dispatchEvent(new CustomEvent(`resolve`,{detail:e}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let e=()=>B`<a class="om-link" href="${Ar}" target="_blank" rel="noopener noreferrer">${Ar}</a>`;return B`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${e()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${e()}.</p>${this.supportsSync?B`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${e()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:B`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${e()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define(`origin-migration-dialog`,Lr);function Rr(e){return new Promise(t=>{let n=document.createElement(`origin-migration-dialog`);n.supportsSync=e.supportsSync,n.addEventListener(`resolve`,e=>{n.remove(),t(!!e.detail)}),document.body.append(n)})}async function zr(){let e=Mr();return e?await Ir()?await Rr(e)?(location.assign(Ar),!0):!1:(location.replace(Ar),!0):!1}var U=null,Br=!1,Vr=null;function Hr(e){if(!e)return`Could not unlock. Try again.`;switch(e.name??``){case`NotAllowedError`:case`AbortError`:return``;case`SecurityError`:return`The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.`;case`InvalidStateError`:return`The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.`;case`NotSupportedError`:return`This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.`;case`NetworkError`:return`A network error prevented the passkey from completing. Check your connection and try again.`;case`UnknownError`:return`The authenticator returned an unknown error. Try again, or use a different passkey.`;default:{let t=e.message??String(e);return t.length>200?t.slice(0,197)+`…`:t}}}function Ur(){if(U)return U;U=document.createElement(`div`),U.id=`lock-overlay`,U.setAttribute(`role`,`dialog`),U.setAttribute(`aria-modal`,`true`),U.setAttribute(`aria-label`,`Unlock DeepView`),wr(B`<div class="lock-overlay-card"><div class="lock-overlay-icon" aria-hidden="true"><svg viewBox="0 0 32 32" width="40" height="40" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="15" width="18" height="12" rx="1.5"/><path d="M11 15v-4a5 5 0 0 1 10 0v4"/></svg></div><h2 class="lock-overlay-title">DeepView is locked</h2><p class="lock-overlay-body">Your triage data and reports are encrypted with a passkey on this device. Unlock to continue.</p><p class="lock-overlay-error" hidden></p><button type="button" class="lock-overlay-button primary">Unlock with passkey</button><p class="lock-overlay-footer">Lost your passkey? <a href="#" class="lock-overlay-wipe">Wipe local data and start over</a></p></div>`,U);let e=U.querySelector(`button`),t=U.querySelector(`.lock-overlay-error`);return e.addEventListener(`click`,async()=>{if(!Br&&Wr()){Br=!0,t.hidden=!0,t.textContent=``,e.disabled=!0,e.textContent=`Waiting…`,Vr=new AbortController;try{await yt({signal:Vr.signal})}catch(e){let n=Hr(e);t.textContent=n,t.hidden=!n}finally{Br=!1,Vr=null,e.disabled=!1,e.textContent=`Unlock with passkey`}}}),U.querySelector(`.lock-overlay-wipe`).addEventListener(`click`,async e=>{if(e.preventDefault(),!Br&&Wr()&&confirm(`Wipe ALL local DeepView data and start over?
19
2
 
20
- This deletes your encrypted triage, all reports, and the passkey registration on this device. The data CANNOT be recovered after this \u2014 there is no backup.
3
+ This deletes your encrypted triage, all reports, and the passkey registration on this device. The data CANNOT be recovered after this — there is no backup.
21
4
 
22
- Use this only if you have lost access to your passkey and have no other way to unlock.`)&&confirm("Really wipe everything? This cannot be undone.")){try{await Ja()}catch(r){alert(`Wipe failed: ${r?.message??r}. Try again or clear localStorage manually via DevTools.`);return}location.reload()}}),document.body.append(ee),ee}function Rr(){return H()||!Ya()?!1:we()&&!Xe()}async function Lr(){if(await St(),Rr()){let i=Yh();i.hidden=!1;let e=i.querySelector("button");e&&e.focus()}else if(ee&&(ee.hidden=!0,ti))try{ti.abort()}catch{}}Ai(Lr);document.addEventListener("managed-client-mode-change",Lr);Lr();var Mr=class extends q{static styles=[...q.styles,M(bt),M(Nd)];static properties={initial:{attribute:!1},finding:{attribute:!1},_value:{state:!0}};constructor(){super(),this.initial="",this.finding=null,this._value=""}beforeOpen(){this._value=this.initial??""}focusInitial(){let e=this.renderRoot.querySelector("textarea");if(!e)return;e.focus();let t=e.value.length;try{e.setSelectionRange(t,t)}catch{}}_onInput=e=>{this._value=e.target.value};_onSave=()=>{let e=(this._value??"").trim(),t=(this.initial??"").trim();if(e===t){this._finish(null);return}this._finish(e)};_onClear=()=>this._finish("");_onCancel=()=>this._finish(null);_onKeydown=e=>{e.key==="Enter"&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this._onSave())};render(){let e=this.finding??{},t=e.file?e.line?`${e.file}:${e.line}`:e.file:"",n=(this.initial??"").length>0;return a`<dialog @close="${this._onClose}"><header><h3>${n?"Edit comment":"Add comment"}</h3><div class="finding">${vt(wi(e,l.severityMode))} ${t?a`<span class="loc" data-tooltip-truncated data-tooltip="${t}">${t}</span>`:m}</div>${e.description?a`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:m}</header><textarea rows="6" placeholder="Write your notes here. Markdown is not rendered. Ctrl/⌘+Enter to save, Esc to cancel." .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"></textarea><footer class="nwd-actions">${n?a`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:m} <span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onSave}">Save</button></footer></dialog>`}};customElements.define("comment-dialog",Mr);function Kd({initial:i="",finding:e=null}={}){return Y("comment-dialog",{initial:i,finding:e})}var Gd=`dialog{width:min(96vw,1400px);max-width:1400px;height:min(88dvh,1000px);max-height:92dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;gap:1rem;padding:.7rem 1rem;border-bottom:1px solid var(--border);flex:0 0 auto;& h3{margin:0;min-width:0;flex:1;overflow-wrap:anywhere;font:.85rem ui-monospace,monospace}& button{border:0;background:transparent;color:var(--muted);font-size:1.4rem;padding:0 .3rem;&:hover{color:var(--text)}}}.source-scroll{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.source-status{padding:1rem;color:var(--muted)}.source-lines{display:flex;min-width:100%;width:max-content;font:.8rem/1.6 ui-monospace,monospace;& aside{position:sticky;left:0;align-self:stretch;flex:0 0 auto;padding:.75rem 0;background:var(--surface);color:var(--muted);border-right:1px solid var(--border);text-align:right;user-select:none;& div{padding:0 .75rem}.cited{background:rgb(from var(--accent) r g b / .18);color:var(--accent);font-weight:700}}& pre{padding:.75rem 1rem;margin:0;tab-size:4}& pre,code{font:inherit;white-space:pre}}
23
- `;var Pr=class extends q{static styles=[...q.styles,M(Gd),M(kt)];static properties={reportId:{attribute:!1},file:{attribute:!1},line:{attribute:!1},_path:{state:!0},_content:{state:!0},_highlighted:{state:!0},_loading:{state:!0}};constructor(){super(),this.reportId="",this.file="",this.line="",this._path="",this._content=null,this._highlighted=null,this._loading=!0}beforeOpen(){this._load()}async _load(){try{let{data:e,error:t}=await $d(this.reportId).then(o=>({data:o}),o=>({error:o}));if(this._settled||!this.isConnected)return;let n=kd(this.reportId),r=t?n?.error===t:n?.data===e||e===null&&!!n?.error;if(!n||!r||t?.name==="AbortError"||n.controller?.signal.aborted){this._finish(null);return}if(this._sourceSignal=n.controller?.signal,this._sourceSignal?.addEventListener("abort",this._onClose,{once:!0}),this._path=e?.paths.get(this.file)??this.file,this._content=e?.sources.get(this._path)??null,this._loading=!1,await this.updateComplete,this._settled||!this.isConnected)return;Hi(this.renderRoot.querySelector(".source-scroll"),this.renderRoot.querySelectorAll(".cited"));let s=Si(this._path,e?.formats?.get(this._path),this._content);if(s&&this._content!==null){let o=await yt(this._content,s);!this._settled&&this.isConnected&&(this._highlighted=o)}}catch(e){e.name==="AbortError"?this._finish(null):this._loading=!1}}disconnectedCallback(){this._sourceSignal?.removeEventListener("abort",this._onClose),this._content=null,this._highlighted=null,super.disconnectedCallback()}_onKeydown=e=>{e.key==="Escape"&&e.stopPropagation()};render(){let e=Fe(this.line);return a`<dialog aria-labelledby="source-title" @close="${this._onClose}" @keydown="${this._onKeydown}" @click="${this._onBackdrop}"><header><h3 id="source-title" class="mono">${this._path||this.file}</h3><button type="button" aria-label="Close source viewer" @click="${this._onClose}">×</button></header><div class="source-scroll" tabindex="0" aria-label="Full source code" aria-busy="${String(this._loading)}">${this._content===null?a`<p class="source-status" role="status">${this._loading?"Loading source\u2026":"Source unavailable"}</p>`:a`<div class="source-lines"><aside aria-hidden="true">${this._content.split(`
24
- `).map((t,n)=>a`<div class="${e&&n+1>=e.start&&n+1<=e.end?"cited":""}">${n+1}</div>`)}</aside><pre><code>${typeof this._highlighted=="string"?X(this._highlighted):this._content}</code></pre></div>`}</div></dialog>`}};customElements.define("finding-source-dialog",Pr);function Wd({reportId:i,file:e,line:t}){return Y("finding-source-dialog",{reportId:i,file:e,line:t})}var Ar=class extends q{static styles=[...q.styles,M(Bl)];static properties={bundleName:{type:String},encrypted:{type:Boolean}};constructor(){super(),this.bundleName="",this.encrypted=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(e){this._settled||super._finish({confirmed:!!e})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_securityNote(){return this.encrypted?a`<p class="lwd-note">The bundle is saved <strong>unencrypted</strong> — even though your vault keeps its stored copy encrypted — and the file contains <strong>all of the bundle's related sources</strong>. Anyone with access to the downloaded file can read every bundled source, so store or share it with care.</p>`:a`<p class="lwd-note">The downloaded file is <strong>unencrypted</strong> and contains <strong>all of the bundle's related sources</strong>. Anyone with access to it can read every bundled source, so store or share it with care.</p>`}render(){return a`<dialog @close="${this._onClose}"><header><h3>Download bundle</h3></header><p class="lwd-body">Download <strong>"${this.bundleName}"</strong> to disk?</p>${this._securityNote()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onConfirm}">Download</button></footer></dialog>`}};customElements.define("download-bundle-dialog",Ar);function Yd({name:i,encrypted:e}={}){return Y("download-bundle-dialog",{bundleName:i??"",encrypted:!!e})}var Xd=a`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>`,Jd=a`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="1.8" y="5" width="20.4" height="14" rx="2"/><path d="M5.6 15.6V8.4l3.1 3.6 3.1-3.6v7.2"/><path d="M16.9 8.4v7.2m-2.6-2.9 2.6 2.9 2.6-2.9"/></svg>`,Qd=a`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M6 9V2h12v7"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>`;function Jh(i,e){let t=Aa.find(n=>n.value===i)?.label??i;return tr(i)?.includes("partial")?e==="exclude"?`${t} (full only)`:e==="only"?`${t} (partial only)`:t:t}function Qh(i){return sa.filter(e=>i.has(e)).map(e=>ia[e]??e).join(", ")}function Ir(i=l){let e=[];if(i.filterSeverities.size>0&&e.push({key:"severity",label:"Severity",value:Qh(i.filterSeverities),clear:{filterSeverities:new Set}}),i.filterColors.size>0&&e.push({key:"marks",label:"Marks",value:[...i.filterColors].map(t=>ra[t]??t).join(", "),clear:{filterColors:new Set}}),i.filterSources.size===1&&e.push({key:"source",label:"Source",value:i.filterSources.has("own")?"Sources only":"Dependencies only",clear:{filterSources:new Set}}),i.filterAnalyzer&&e.push({key:"analyzer",label:"Analyzer",value:i.filterAnalyzer===zl?"(none)":i.filterAnalyzer,clear:{filterAnalyzer:""}}),i.filterModel&&e.push({key:"model",label:"Model",value:i.filterModel===ql?"(none)":i.filterModel,clear:{filterModel:""}}),i.filterRepo&&e.push({key:"repo",label:"Repository",value:i.filterRepo===Oi?"(no repo)":i.filterRepo,clear:{filterRepo:""}}),tr(i.filterRevalidate)&&e.push({key:"revalidate",label:"Revalidation",value:Jh(i.filterRevalidate,i.filterPartial),clear:{filterRevalidate:"",filterPartial:""}}),!i.filterRevalidate&&(i.filterConfMin>0||i.filterConfMax<10)){let t;i.filterConfMin>0&&i.filterConfMax<10?t=`${i.filterConfMin}\u2013${i.filterConfMax}`:i.filterConfMin>0?t=`\u2265 ${i.filterConfMin}`:t=`\u2264 ${i.filterConfMax}`,e.push({key:"confidence",label:"Confidence",value:t,clear:{filterConfMin:0,filterConfMax:10}})}i.filterInclude&&e.push({key:"search",label:i.filterIncludeNegate?"Excluding":"Search",value:`"${i.filterInclude}"`,clear:{filterInclude:"",filterIncludeNegate:!1}});for(let[t,n]of[["filterComment","comment"],["filterFix","fix"],["filterFlagged","flag"]]){let r=i[t];r&&e.push({key:`annotation:${n}`,label:"Annotation",value:`${r==="with"?"With":"Without"} ${n}`,clear:{[t]:""}})}return!l.currentWorkspace&&i.filterDuplicates&&e.push({key:"duplicates",label:"Duplicates",value:i.filterDuplicates==="with"?"Only rows linked to other reports":"Exclude rows linked to other reports",clear:{filterDuplicates:""}}),i.filterCrossContext&&e.push({key:"cross-context",label:"Context",value:i.filterCrossContext==="with"?"Only rows across multiple repos or packages":"Exclude rows across multiple repos or packages",clear:{filterCrossContext:""}}),i.filterAppStacked&&e.push({key:"app-stacked",label:"App stack",value:i.filterAppStacked==="with"?"Only rows with multiple App findings":"Exclude rows with multiple App findings",clear:{filterAppStacked:""}}),i.filterSecurity&&e.push({key:"security",label:"Security",value:i.filterSecurity==="with"?"Only security-related rows":"Exclude security-related rows",clear:{filterSecurity:""}}),e}function Fr(){return Vt().filter(i=>Ni(i).commonTriage===l.shownTriage)}function Dr(){return l.shownTriage?na[l.shownTriage]??l.shownTriage:null}function en(i,e=Ul()){let t=Fr(),n=t.length;qt(e);let r;try{r=Bi(t).length}finally{Ht()}return{included:r,total:n,excluded:n-r,fields:e,filters:Ir(e),bucketLabel:Dr(),focusedOnly:i==="print"&&l.viewMode==="focus"}}var Zd=`dialog{max-width:515px;width:min(94vw,515px)}.ecd-count{margin:0;font-size:1.02rem;color:var(--text);& strong{color:var(--accent);font-weight:700}}.ecd-excluded{margin:.25rem 0 0;color:var(--muted);font-size:.82rem}.ecd-filters{margin:.9rem 0 0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.3rem .7rem;font-size:.82rem}.ecd-filters dt{color:var(--muted);font-weight:600;white-space:nowrap}.ecd-filters dd{display:flex;align-items:baseline;gap:.5rem;color:var(--text);overflow-wrap:anywhere}.ecd-filter-value{min-width:0}.ecd-filter-drop{margin-left:auto;flex:none;padding:0 .2rem;border:0;border-radius:var(--ui-radius, 4px);background:none;color:var(--muted);font:inherit;font-size:1rem;line-height:1;&:hover{color:var(--critical, #f87171)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.ecd-filters-label{margin:.9rem 0 0;font-size:.76rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.ecd-filters-label+.ecd-filters{margin-top:.35rem}.ecd-samples{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;font-size:.82rem;color:var(--text)}.ecd-samples input{margin-top:.15rem;accent-color:var(--accent)}.ecd-samples-hint{display:block;margin-top:.2rem;color:var(--muted);font-size:.76rem}
25
- `;var em=[{id:"download",label:"Markdown",icon:Jd},{id:"print",label:"Print",icon:Qd}],Or=class extends q{static styles=[...q.styles,M(Zd),M(Dd)];static properties={mode:{type:String},included:{type:Number},excluded:{type:Number},total:{type:Number},filters:{attribute:!1},fields:{attribute:!1},bucketLabel:{type:String},focusedOnly:{type:Boolean},oneSamplePerGroup:{type:Boolean}};constructor(){super(),this.mode="download",this.included=0,this.excluded=0,this.total=0,this.filters=[],this.fields=null,this._relaxed=!1,this.bucketLabel=null,this.focusedOnly=!1,this.oneSamplePerGroup=!1}get _focusedOnly(){return this.mode==="print"&&this.focusedOnly}_selectTab(e){this.mode!==e&&(this.mode=e)}focusInitial(){let e=this.included===0?'button[data-role="cancel"]':"button.primary";this.renderRoot.querySelector(e)?.focus()}_finish(e){this._settled||super._finish({confirmed:e==="confirm",view:e==="view",fields:this._relaxed?this.fields:null,mode:this.mode,oneSamplePerGroup:this.oneSamplePerGroup})}_onClose=()=>this._finish("cancel");_onCancel=()=>this._finish("cancel");_onView=()=>this._finish("view");_onConfirm=()=>this._finish("confirm");async _onDropFilter(e){let t=this.filters.findIndex(o=>o.key===e);if(t===-1)return;let n=en(this.mode,{...this.fields,...this.filters[t].clear});this._relaxed=!0,this.fields=n.fields,this.filters=n.filters,this.included=n.included,this.excluded=n.excluded,this.total=n.total,await this.updateComplete;let r=[...this.renderRoot.querySelectorAll("button[data-drop]")];(r[Math.min(t,r.length-1)]??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector('button[data-role="cancel"]'))?.focus()}_countSection(){if(this.total===0)return a`<p class="ecd-count">No findings to ${this.mode==="print"?"print":"download"}.</p>`;if(this._focusedOnly&&this.included>0)return a`<p class="ecd-count">Only the <strong>focused</strong> finding will be printed.</p><p class="ecd-excluded">Focus mode prints just the finding you're viewing. Switch to the list or grouped view to print all ${this.included} matching ${this.included===1?"finding":"findings"}.</p>`;let t=this.excluded===0&&this.filters.length===0?a`All <strong>${this.included}</strong> ${this.included===1?"finding":"findings"} included.`:a`<strong>${this.included}</strong> of ${this.total} ${this.total===1?"finding":"findings"} included.`;return a`<p class="ecd-count">${t}</p>${this.excluded>0?a`<p class="ecd-excluded">${this.excluded} filtered out and ${this.mode==="print"?"won't be printed":"won't be downloaded"}.</p>`:m}`}_filtersSection(){return this.filters.length===0?a`<p class="ecd-filters-label">No filters active — the full ${this.bucketLabel?`${this.bucketLabel.toLowerCase()} `:""}set is included.</p>`:a`<p class="ecd-filters-label">Active filters</p><dl class="ecd-filters">${this.filters.map(e=>a`<dt>${e.label}</dt><dd><span class="ecd-filter-value">${e.value}</span> <button type="button" class="ecd-filter-drop" data-drop="${e.key}" aria-label="${`Drop the ${e.label.toLowerCase()} filter (${e.value}) from this export`}" @click="${()=>this._onDropFilter(e.key)}">×</button></dd>`)}</dl>`}render(){let e=this.mode==="print",t=this._focusedOnly?"You're in focus mode \u2014 printing outputs just the finding you're focused on.":e?"Prints only the findings matching your current filters \u2014 the same set shown on screen. Use the toolbar to change the selection first.":"Downloads a Markdown file of the findings matching your current filters \u2014 the same set shown on screen. Use the toolbar to change the selection first.";return a`<dialog @close="${this._onClose}"><header>${Dl({tabs:em,current:this.mode,prefix:"ecd",select:n=>this._selectTab(n)})}</header><div role="tabpanel" id="${`ecd-panel-${this.mode}`}" aria-labelledby="${`ecd-tab-${this.mode}`}"><p class="nwd-intro">${t}</p>${this._countSection()} ${this.bucketLabel?a`<p class="nwd-note">Scoped to the <strong>${this.bucketLabel}</strong> list — live findings are not included.</p>`:m} ${this._filtersSection()} <label class="ecd-samples"><input type="checkbox" .checked="${this.oneSamplePerGroup}" @change="${n=>{this.oneSamplePerGroup=n.target.checked}}"> <span>One sample per group<span class="ecd-samples-hint">Include only the currently selected sample from each group.</span></span></label></div><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> ${e?m:a`<button type="button" data-role="view" ?disabled="${this.included===0}" @click="${this._onView}">View</button>`} <button type="button" class="primary" ?disabled="${this.included===0}" @click="${this._onConfirm}">${e?"Print":"Download"}</button></footer></dialog>`}};customElements.define("export-confirm-dialog",Or);function eu(i="download"){let e=en(i),t=i==="print"?e.focusedOnly:en("print").focusedOnly;return new Promise(n=>{let r=document.createElement("export-confirm-dialog");Object.assign(r,{mode:i,included:e.included,excluded:e.excluded,total:e.total,filters:e.filters,fields:e.fields,bucketLabel:e.bucketLabel,focusedOnly:t});let s=o=>{r.remove(),n(o)};r.addEventListener("resolve",o=>s({confirmed:!!o.detail?.confirmed,view:!!o.detail?.view,fields:o.detail?.fields??null,mode:o.detail?.mode??i,oneSamplePerGroup:!!o.detail?.oneSamplePerGroup})),r.addEventListener("modal-conflict",()=>s({confirmed:!1,view:!1,fields:null,mode:i})),document.body.append(r)})}var tm=160,im=320,nm=/^ {0,3}#{1,6}(?: |$)/u,rm=/^ {0,3}(?:=+|-+) *$/u,tn=/^\|?[^|\n]+(?:\|[^|\n]+)+\|?$/u,tu=/^\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?$/u;function iu(i,e=i.join(`
26
- `),{target:t=tm,max:n=im}={}){let r=i.length;if(r===0)return[];let s=ta(e),o=0,c=0,d=()=>{for(;o<s.length&&s[o][1]<=c-1;)o++;return o<s.length&&c-1>=s[o][0]},u=g=>i[g].trim()==="",p=g=>tn.test(i[g]),h=g=>!d()&&!(tu.test(i[g])&&p(g-1))&&!(rm.test(i[g])&&!u(g-1)),f=g=>u(g-1)||nm.test(i[g]),b=[],v=0;for(let g=1;g<r;g++){c+=i[g-1].length+1;let y=g-v;y<t||!h(g)||(y>=n||f(g))&&(b.push([v,g]),v=g)}return b.push([v,r]),b}function nu(i,e){if(e<2||!tn.test(i[e])||!tn.test(i[e-1]))return null;let t=e-1;for(;t>0&&tn.test(i[t-1]);)t--;for(let n=t+1;n<e;n++)if(tu.test(i[n]))return[n-1,n+1];return null}function ru(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}var su=`dialog{max-width:none;max-height:none;width:calc(100vw - 4rem);height:calc(100vh - 4rem);margin:2rem auto;position:relative;padding:12px}dialog[open]{display:flex;flex-direction:column}dialog::backdrop{backdrop-filter:none}header{display:flex;align-items:center;gap:.45rem;margin-bottom:.6rem;padding-right:3rem;user-select:none}header h3{margin:0}.evd-close{position:absolute;top:6px;right:6px;z-index:1;width:22px;height:22px;display:grid;place-items:center;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);font:500 16px/1 ui-monospace,monospace;cursor:default;&:hover{color:var(--accent);background:var(--surface-active)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.evd-code{flex:1 1 auto;min-height:0;margin:0;overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;line-height:1.55;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:6px;height:6px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.evd-lines{--evd-gutter: calc(var(--evd-lineno-width, 3ch) + 1.4rem);padding:.5rem 0;background-image:linear-gradient(to right,rgb(from var(--text) r g b / .03) 0 calc(var(--evd-gutter) - 1px),var(--border) calc(var(--evd-gutter) - 1px) var(--evd-gutter),transparent var(--evd-gutter))}.evd-chunk{display:grid;grid-template-columns:var(--evd-gutter) minmax(0,1fr);align-items:start;content-visibility:auto;contain-intrinsic-size:auto calc(var(--evd-chunk-lines, 1) * 1.55em)}.evd-chunk.evd-pending{display:block;padding:0 .75rem 0 calc(var(--evd-gutter) + .6rem);white-space:pre-wrap;overflow-wrap:anywhere}.evd-lineno{padding:0 .55rem 0 .4rem;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;user-select:none}.evd-line{padding:0 .75rem 0 .6rem;font:inherit;background:none;white-space:pre-wrap;overflow-wrap:anywhere}.evd-meta{color:var(--muted);font-size:.74rem;font-variant-numeric:tabular-nums}.evd-copy{margin-left:auto;flex-shrink:0;height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font:inherit;font-size:.72rem;font-weight:500;letter-spacing:.02em;cursor:default;&:hover{color:var(--accent);background:var(--surface-active)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}&.evd-done{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}&.evd-failed{color:var(--critical, #f87171);background:color-mix(in srgb,var(--critical, #f87171) 14%,transparent)}}
27
- `;var om=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`;function am(i,e,t,n=null){let r="";for(let s=e;s<t;s++){let o=n===null?ru(i[s]):n[s-e];r+=`<span class="evd-lineno" aria-hidden="true">${s+1}</span><code class="evd-line">${o}
28
- </code>`}return r}var Br=class extends q{static styles=[...q.styles,M(kt),M(su)];static properties={markdown:{attribute:!1},_copied:{state:!0}};_lines=[];_kb="0.0";_chunks=[];_copiedTimer=null;constructor(){super(),this.markdown="",this._copied=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}willUpdate(e){if(!e.has("markdown"))return;let t=this.markdown.split(`
29
- `),n=t.length>1&&t.at(-1)===""?t.length-1:t.length;this._lines=t.slice(0,n),this._kb=(new TextEncoder().encode(this.markdown).length/1024).toFixed(1),this._chunks=iu(this._lines,this.markdown).map(([r,s])=>({start:r,end:s,asked:!1}))}render(){let e=this._lines.length,t=this._copied==="done"?"Copied":this._copied==="failed"?"Copy failed":"Copy",n=this._copied==="failed"?"Select the text and copy it by hand":m;return a`<dialog @close="${this._onClose}"><button type="button" class="evd-close" data-role="cancel" aria-label="Close" @click="${this._onClose}">×</button><header><h3>Report markdown</h3><span class="evd-meta">· ${e} ${e===1?"line":"lines"} · ${this._kb} KB</span> <button type="button" class="evd-copy ${this._copied==="done"?"evd-done":this._copied==="failed"?"evd-failed":""}" data-role="copy" data-tooltip="${n}" @click="${this._onCopy}">${om}${t}</button></header><div class="evd-code" tabindex="0"><div class="evd-lines" style="--evd-lineno-width: ${String(e).length}ch">${this._chunks.map((r,s)=>a`<div class="evd-chunk evd-pending" data-chunk="${s}" style="--evd-chunk-lines: ${r.end-r.start}"></div>`)}</div></div></dialog>`}updated(){if(this.isConnected)for(let e of this.renderRoot.querySelectorAll(".evd-chunk:not([data-watched])")){e.dataset.watched="";let t=Number(e.dataset.chunk),n=this._chunks[t];e.textContent=`${this._lines.slice(n.start,n.end).join(`
30
- `)}
31
- `,xt(e,r=>{r&&(Le(e),this._paint(e,t))})}}disconnectedCallback(){for(let e of this.renderRoot.querySelectorAll(".evd-chunk[data-watched]"))Le(e);clearTimeout(this._copiedTimer),super.disconnectedCallback()}_onCopy=async()=>{let e="done";try{await navigator.clipboard.writeText(this.markdown)}catch{e="failed"}this.isConnected&&(this._copied=e,clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied="",this._copiedTimer=null},1500))};async _paint(e,t){let n=this._chunks[t];if(!n||n.asked)return;n.asked=!0;let r=nu(this._lines,n.start),s=[...r?this._lines.slice(r[0],r[1]):[],...this._lines.slice(n.start,n.end)].join(`
32
- `),o=await yt(s,"markdown");if(!this.isConnected)return;let c=o===null?null:zi(o).slice(r?r[1]-r[0]:0);e.innerHTML=am(this._lines,n.start,n.end,c?.length===n.end-n.start?c:null),e.classList.remove("evd-pending")}};customElements.define("export-view-dialog",Br);function ou(i){return new Promise(e=>{let t=document.createElement("export-view-dialog");t.markdown=i;let n=()=>{t.remove(),e()};t.addEventListener("resolve",n),t.addEventListener("modal-conflict",n),document.body.append(t)})}var au=`dialog{max-width:560px;width:min(94vw,560px)}header h3{margin:0 0 .4rem}.finding{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.input-row{display:flex;align-items:stretch;gap:.4rem}input{flex:1;min-width:0;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted);font-family:inherit}}.open{display:inline-flex;align-items:center;padding:0 .7rem;border:1px solid var(--accent);border-radius:var(--ui-radius, 6px);color:var(--accent);text-decoration:none;font-size:.8rem;font-weight:600;white-space:nowrap;&:hover{background:rgb(from var(--accent) r g b / .1)}}.hint{margin:.45rem 0 0;color:var(--muted);font-size:.74rem}
33
- `;var Nr=class extends q{static styles=[...q.styles,M(bt),M(au)];static properties={initial:{attribute:!1},finding:{attribute:!1},canApplyToGroup:{attribute:!1},_value:{state:!0}};constructor(){super(),this.initial="",this.finding=null,this.canApplyToGroup=!1,this._value=""}beforeOpen(){this._value=this.initial??""}focusInitial(){let e=this.renderRoot.querySelector('input[type="url"]');if(e){e.focus();try{e.select()}catch{}}}_onInput=e=>{this._value=e.target.value};get _trimmed(){return(this._value??"").trim()}_onSave=()=>{let e=(this.initial??"").trim();if(this._trimmed===e){this._finish(null);return}this._finish({value:this._trimmed,scope:"finding"})};_onApplyToGroup=()=>{this._trimmed&&this._finish({value:this._trimmed,scope:"group"})};_onClear=()=>this._finish({value:"",scope:"finding"});_onCancel=()=>this._finish(null);_onKeydown=e=>{e.key==="Enter"&&(e.preventDefault(),this._onSave())};render(){let e=this.finding??{},t=e.file?e.line?`${e.file}:${e.line}`:e.file:"",n=(this.initial??"").length>0,r=this._trimmed,s=ki(r);return a`<dialog @close="${this._onClose}"><header><h3>${n?"Edit fix link":"Add fix link"}</h3><div class="finding">${vt(wi(e,l.severityMode))} ${t?a`<span class="loc" data-tooltip-truncated data-tooltip="${t}">${t}</span>`:m}</div>${e.description?a`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:m}</header><div class="input-row"><input type="url" inputmode="url" autocomplete="off" spellcheck="false" placeholder="https://github.com/owner/repo/pull/123" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"> ${s?a`<a class="open" href="${r}" target="_blank" rel="noopener noreferrer">Open ↗</a>`:m}</div><p class="hint">PR URL, issue link, commit, or any free-form reference. Enter to save, Esc to cancel.</p><footer class="nwd-actions">${n?a`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:m} <span class="nwd-spacer"></span> ${this.canApplyToGroup?a`<button type="button" class="quiet" ?disabled="${!r}" @click="${this._onApplyToGroup}">Apply to whole group</button> <span class="nwd-spacer"></span>`:m} <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onSave}">Save</button></footer></dialog>`}};customElements.define("fix-link-dialog",Nr);function lu({initial:i="",finding:e=null,canApplyToGroup:t=!1}={}){return Y("fix-link-dialog",{initial:i,finding:e,canApplyToGroup:t})}var cu=`dialog{width:min(94vw,880px);max-width:880px}.conflicts-list{list-style:none;display:flex;flex-direction:column;gap:.6rem;max-height:65vh;overflow-y:auto;overscroll-behavior:contain}.conflict-card{padding:.6rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px)}.finding-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;color:var(--muted);font-size:.72rem}.location,code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow-wrap:anywhere}.location{flex:1}h4{margin:.4rem 0 .55rem;font-size:.88rem;font-weight:600;overflow-wrap:anywhere}dt{margin-top:.5rem;color:var(--muted);font-size:.72rem}.variant{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,15rem);gap:.65rem;padding:.4rem 0;font-size:.8rem;+&{border-top:1px solid var(--border)}}.value{white-space:pre-wrap;overflow-wrap:anywhere}.reports{display:flex;flex-wrap:wrap;place-content:start flex-end;gap:.3rem}.report-button{display:inline-flex;align-items:center;gap:.4rem;max-width:100%;min-height:22px;padding:0 .4rem 0 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;background:var(--bg);color:var(--text);font:inherit;font-size:.72rem;cursor:default;text-align:left;>span:last-child{min-width:0;overflow-wrap:anywhere}&:hover{border-color:var(--accent)}}
34
- `;var dm={revalidate:"Outcome",revalidateVerdict:"Explanation",revalidateRecommendation:"Recommendation"},zr=class extends q{static styles=[...q.styles,M(bt),M($t),M(cu)];static properties={conflicts:{attribute:!1}};constructor(){super(),this.conflicts=[]}render(){return a`<dialog aria-labelledby="revalidation-conflicts-title" @close="${this._onClose}"><header><h3 id="revalidation-conflicts-title">Revalidation conflicts</h3><p class="nwd-intro">Reports disagree about ${this.conflicts.length} finding${this.conflicts.length===1?"":"s"}. App view is unavailable until the conflicting reports are separated or updated.</p></header><ul class="conflicts-list">${this.conflicts.map(({finding:e,copies:t})=>a`<li class="conflict-card"><div class="finding-meta">${vt(e.severity)} ${e.file?a`<span class="location">${e.file}${Fe(e.line)?`:${Oa(Fe(e.line))}`:""}</span>`:m} <code>${Ha(e.id)??e.id}</code></div><h4>${Nt(e)}</h4><dl>${Yl(t).map(({field:n,variants:r})=>a`<dt>${dm[n]??n}</dt>${r.map(({value:s,reports:o})=>a`<dd class="variant"><div class="value">${s||a`<em>Empty</em>`}</div><div class="reports">${o.map(c=>c?a`<button type="button" class="report-button" aria-label="${`Open ${Jn(c)} at this finding`}" @click="${()=>this._finish({id:e.id,reportName:c})}">${X(Xn[Il(c)]??Xn.default)}<span>${Jn(c)}</span></button>`:a`<span>Loaded report</span>`)}</div></dd>`)}`)}</dl></li>`)}</ul><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}};customElements.define("revalidation-conflicts-dialog",zr);function du(i){return Y("revalidation-conflicts-dialog",{conflicts:[...i.values()]})}var uu=2;function pu(i,e){l.focusSplit=e,i.closest(".focus-main")?.style.setProperty("--focus-split",String(e)),i.setAttribute("aria-valuenow",String(Math.round(e)))}function hu(){try{localStorage.setItem(tl,String(l.focusSplit))}catch{}}function mu(i,e){pu(i,nr(e)),hu()}function fu(i,e){mu(i,l.focusSplit+e)}function gu(i){mu(i,rl)}function bu(i,e){let t=i.closest(".focus-main");if(!t)return;e.preventDefault(),i.classList.add("dragging");try{i.setPointerCapture(e.pointerId)}catch{}let n=s=>{let o=t.getBoundingClientRect();o.width!==0&&pu(i,nr((s.clientX-o.left)/o.width*100))},r=()=>{i.removeEventListener("pointermove",n),i.removeEventListener("pointerup",r),i.removeEventListener("pointercancel",r),i.classList.remove("dragging"),hu()};i.addEventListener("pointermove",n),i.addEventListener("pointerup",r),i.addEventListener("pointercancel",r)}function um(i,e){return Wl(Bi(i)).map(t=>e?[$e(t)]:tc(t))}var pm={annotation(i){let e=et(i),t=ec(i);return!e&&!t?null:{triage:e?.triage,color:e?.color,comment:e?.comment,fix:e?.fix,flagged:e?.flagged===!0,ignored:t}},location:i=>Mi(i,jt(i)),evidence:(i,e,t)=>Ba(i,e,jt(e),t),commit:i=>za(i.repo?.github,i.commitHash),report:i=>i._reportName??null};function hm(i,e){let t=new Set(i.map(s=>s.repo??null)),n=t.size===1?[...t][0]:null;if(n)return n;let r=new Set;for(let s of e)for(let o of s)o.repo?.github&&!Li(o.file)&&r.add(o.repo.github);return r.size===1?[...r][0]:r.size===0&&!l.currentWorkspace&&l.repoUrl?l.repoUrl:null}function qr(i){return i.replace(/\.(?:json|md|codex)$/iu,"")}function vu(){return l.currentWorkspace?he().find(i=>i.id===l.currentWorkspace)??null:null}function mm(i,e){if(e)return e.name;let t=i.map(r=>r.fileName);return t.length===1?qr(t[0]):zt(t).replace(/[-_. ]+$/u,"")||`${t.length} reports`}function Hr({oneSamplePerGroup:i=!1}={}){let e=l.reports,t=jl(),n=Fr(),r=um(n,i),s=vu(),o=e.flatMap(u=>u.groups??[]),c=o.some(u=>u.some(aa)),d=o.some(u=>u.some(Fa));return ca({title:mm(e,s),workspace:s?.name??null,reports:e.map(u=>({name:u.fileName,source:u.source})),repo:hm(e,r),generatedAt:new Date,view:{bucket:Dr(),severityMode:c?l.severityMode:null,revalidation:d?l.showRevalidation:null,revalidationDetail:d&&l.showRevalidation!==!1?Ql():null},filters:Ir(t),counts:{included:r.length,total:n.length},groups:r},pm)}function fm(){let i=vu(),e=l.reports.map(n=>n.fileName),t="";return i?t=i.name:e.length===1?t=qr(e[0]):e.length>1&&(t=qr(zt(e))),t=t.replaceAll(/[\\/:*?"<>|\p{Cc}]/gu,"-").trim(),`${t||"deepview-report"}.md`}function yu(i){if(l.reports.length===0)return;let e=new Blob([Hr(i)],{type:"text/markdown;charset=utf-8"});We(e,fm())}function nn(i){return!H()||!me.active||!l.currentManagedTeam?null:me.navigate(Yn({view:i,teamId:l.currentManagedTeam,reportId:l.currentManagedReport},l.managedTeams))}var Wr=!1;ll(()=>{if(Wr)return;Wr=!0;let i=2;function e(){--i===0&&gm()}requestAnimationFrame(e),setTimeout(e,350)});function gm(){Wr=!1,l.findingIndexTick++,l.currentView==="bundles"&&l.selectedBundle?k():l.currentView==="packages"?k():l.currentView==="repositories"?k():l.currentView==="links"?k():(l.currentView==="findings"||l.currentView==="files")&&(fe().catch(()=>{}),k())}var Ur=!1;cl(()=>{l.currentView!=="findings"&&l.currentView!=="files"&&!Qe()||Ur||(Ur=!0,queueMicrotask(()=>{Ur=!1,!(l.currentView!=="findings"&&l.currentView!=="files"&&!Qe())&&(l.bundleHashTick++,k())}))});ml(()=>{l.linksTick++,k()});function _u(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?vd():_d()}function ln(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?yd():wd()}function ii(){let i=document.querySelector(".bundle-source-code-wrap"),e=i?.scrollTop??0,t=i?.scrollLeft??0;k();let n=document.querySelector(".bundle-source-code-wrap");n&&(n.scrollTop=e,n.scrollLeft=t)}function rt(i){let t=document.querySelector(i)?.scrollTop??0;k();let n=document.querySelector(i);n&&(n.scrollTop=t)}function Me(){l.viewMode==="table"?rt(".findings-table-list"):k()}var jr=0;function wu(){jr||(jr=requestAnimationFrame(()=>{jr=0,k()}))}function B(i,e){for(let t of i.composedPath())if(t?.matches?.(e))return t;return null}function on(i,e){queueMicrotask(()=>{let t=document.querySelector(`.bundle-source-lineno-row[data-line="${i}"]`);t&&t.scrollIntoView(e)})}function Cu(i){i.classList.add("copied"),setTimeout(()=>i.classList.remove("copied"),1e3)}function rn(i,e){try{navigator.clipboard.writeText(e).then(()=>(Cu(i),null)).catch(()=>{})}catch{}}function Eu(i){let e=hr(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile);l.bundleCodeHistory=Kc(e,i),l.bundleSourceFile=i}function Vr(i=!1){queueMicrotask(()=>{let e=document.querySelector(".bundle-source-code-wrap");e&&(e.scrollTop=0,e.scrollLeft=0),i&&e?.querySelector(".bundle-source-code")?.focus({preventScroll:!0})})}window.addEventListener("hashchange",()=>{if(!H()||ya()||l.currentView!=="bundles"||l.bundleDetailsTab!=="code")return;let i=fa(new URL(location.href));if(i?.bundleTab!=="code"||i.file==null||i.file!==Tc(l)?.file)return;let e=l.bundleSourceFile,t=i.endLine??i.line;l.bundleSourceTargetLine=i.line&&t<=ka(Ci(l.bundleDetails).get(e)??"")?{bundle:l.bundleDetails?.integrity??null,path:e,line:i.line,...i.endLine?{end:i.endLine}:{}}:null,k(),l.bundleSourceTargetLine&&on(i.line,{block:"center"})});function Tu(i){let e=i.target.closest("[data-bundle-source-line]");if(e){let o=Number(e.dataset.bundleSourceLine),c=l.bundleDetails?.integrity??null,d=l.bundleSourceFile,u=l.bundleSourceTargetLine,p=u?.bundle===c&&u.path===d?u:null;if(i.shiftKey&&p){let h=p.anchor??p.line;l.bundleSourceTargetLine={bundle:c,path:d,line:Math.min(h,o),end:Math.max(h,o),anchor:h}}else p?.line===o&&!(p.end>o)?l.bundleSourceTargetLine=null:l.bundleSourceTargetLine={bundle:c,path:d,line:o};return ii(),!0}let t=i.target.closest("[data-bundle-source-wrap]");if(t){let o=Oc(t);l.bundleSourceWrap=!l.bundleSourceWrap;try{localStorage.setItem(nl,String(l.bundleSourceWrap))}catch{}return k(),queueMicrotask(o),!0}if(i.target.closest("[data-bundle-source-pretty]"))return Yt(),k(),Vr(),!0;let n=i.target.closest("[data-bundle-code-history]");if(n){let o=hr(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile),c=Gc(o,n.dataset.bundleCodeHistory==="back"?-1:1),d=c.files[c.at];return c.at===o.at||!Ci(l.bundleDetails).has(d)||(l.bundleCodeHistory=c,l.bundleSourceFile=d,l.bundleSourceFindingIdx=null,l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery="",rt(".bundle-code-rail-body"),Jt(),Vr()),!0}let r=i.target.closest("[data-bundle-source-link]");if(r){let o=r.dataset.bundleSourceLink,c=r.closest(".focus-pane-code");if(c){let d=ni(i),u=gc(d,c.dataset.focusCodeIntegrity,c.dataset.focusCodeFile,o);return u&&(Qr(d,u),queueMicrotask(()=>c.querySelector(".focus-code-source")?.focus({preventScroll:!0}))),!0}return Ci(l.bundleDetails).has(o)&&(l.currentView==="bundles"&&l.bundleDetailsTab==="search"&&(_t("code",{preserveSource:!0}),l.selectedBundle&&Be(l.selectedBundle,"code",{push:!0})),Eu(o),l.bundleSourceFindingIdx=null,l.bundleDetailsTab==="code"&&(l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery=""),rt(".bundle-code-rail-body"),Jt(),Vr(!0)),!0}if(i.target.classList?.contains("bundle-source-overlay")||i.target.closest('[data-action="bundle-source-close"]'))return l.bundleSourceFile&&(_t(l.bundleDetailsTab),k()),!0;if(i.target.closest('[data-action="bundle-source-panel-close"]'))return l.bundleSourceFindingIdx!=null&&(l.bundleSourceFindingIdx=null,ii()),!0;let s=i.target.closest("[data-bundle-source-finding]");if(s){let o=parseInt(s.dataset.bundleSourceFinding,10);return Number.isFinite(o)&&(l.bundleSourceFindingIdx=l.bundleSourceFindingIdx===o?null:o,ii()),!0}return!1}function ku(i){let e=ni(i);if(!e)return null;let t=$e(e);return qa(t,ic(t))}R.addEventListener("click",i=>{if(B(i,"[data-finding-history]")){let w=ni(i),C=w&&$e(w);Rl(C)&&Ad(C);return}let e=B(i,"[data-code-nav-file]");if(e){Qr(ni(i),{integrity:e.dataset.codeNavIntegrity,file:e.dataset.codeNavFile,range:Fe(e.dataset.codeNavLine)});return}let t=B(i,"[data-code-history]");if(t){vm(t.dataset.codeHistory==="forward"?1:-1);return}let n=B(i,"[data-code-preview]");if(n){let w=n.dataset.codePreview,C=new Set(l.codePreviews);C.delete(w)||C.add(w),l.codePreviews=C,k();return}let r=B(i,"[data-finding-code-report]");if(r&&H()){Wd({reportId:r.dataset.findingCodeReport,file:r.dataset.findingCodeFile,line:r.dataset.findingCodeLine});return}let s=B(i,"[data-finding-code-bundle]");if(s){let w=s.dataset.findingCodeBundle,C=s.dataset.findingCodeFile,P=s.dataset.findingCodeLine,L=P?parseInt(P,10):null;l.bundleSourceFile=C||null,l.bundleCodeHistory=null,l.bundleSourceFindingIdx=null,(l.bundleDetailsTab==="code"||l.bundleDetailsTab==="search")&&(l.bundleDetailsTab="overview");let V=()=>{Number.isFinite(L)&&on(L,{block:"start",behavior:"instant"})};if(l.selectedBundle===w&&l.bundleDetails?.integrity===w){k(),qi().then(()=>(l.selectedBundle===w&&l.bundleSourceFile===C&&V(),null));return}l.selectedBundle=w,l.selectedBundleWorkspace=null,l.bundleDetails=null,k(),(async()=>(await wt(w),V()))();return}let o=i.target.closest("[data-package-expand]");if(o){let w=o.dataset.packageExpand;l.expandedPackages.has(w)?l.expandedPackages.delete(w):l.expandedPackages.add(w),k();return}let c=i.target.closest("[data-package-row-issues]");if(c){let w=c.dataset.packageRowIssues,C=c.dataset.packageRowIssuesVersion;l.selectedPackage=w,l.selectedPackageVersion=C||null,l.packageDetailsTab="issues",l.packageSlideTriage=null,l.packageSlideTransient=!0,k();return}let d=i.target.closest("[data-repository-row-issues]");if(d){let w=d.dataset.repositoryRowIssues;l.selectedRepository=w,l.repositoryDetailsTab="issues",l.repositorySlideTriage=null,l.repositorySlideTransient=!0,k();return}let u=i.target.closest("[data-select-package]");if(u){let w=u.dataset.selectPackage,C=u.dataset.selectPackageVersion??"",P=C===""?null:C;if(l.selectedPackage===w&&l.selectedPackageVersion===P)return;l.selectedPackage=w,l.selectedPackageVersion=P,l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient=!1,k();return}if(i.target.closest("[data-deselect-package]")){l.selectedPackage=null,l.selectedPackageVersion=null,k();return}let p=i.target.closest("[data-package-tab]");if(p){let w=p.dataset.packageTab;(w==="overview"||w==="issues")&&l.packageDetailsTab!==w&&(l.packageDetailsTab=w,k());return}if(i.target.closest('[data-action="package-slide-back"]')){l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient&&(l.selectedPackage=null,l.selectedPackageVersion=null,l.packageSlideTransient=!1),k();return}let h=B(i,"[data-links-report][data-links-finding]");if(h){i.preventDefault();let{linksReport:w,linksFinding:C,managedReport:P}=h.dataset;w&&C&&(async()=>{let L=await wr(C,w,P);L.ok||alert(L.reason)})().catch(L=>console.warn("links: reveal in report failed:",L));return}let f=i.target.closest("[data-package-report]");if(f){let w=f.dataset.packageReport;w&&it(w);return}let b=i.target.closest("[data-select-repository]");if(b){let w=b.dataset.selectRepository;if(l.selectedRepository===w)return;l.selectedRepository=w,l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient=!1,k();return}if(i.target.closest("[data-deselect-repository]")){l.selectedRepository=null,k();return}let v=i.target.closest("[data-repository-tab]");if(v){let w=v.dataset.repositoryTab;(w==="overview"||w==="issues")&&l.repositoryDetailsTab!==w&&(l.repositoryDetailsTab=w,k());return}if(i.target.closest('[data-action="repository-slide-back"]')){l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient&&(l.selectedRepository=null,l.repositorySlideTransient=!1),k();return}let g=i.target.closest("[data-bundle-tab]");if(g){let w=g.dataset.bundleTab;if($i.has(w)||w==="review"&&l.bundleDetails?.npm){if(w===l.bundleDetailsTab){l.selectedBundle&&Be(l.selectedBundle,w);return}l.bundleDetailsTab==="graph"&&w!=="graph"&&(oe(),document.body.classList.remove("report-fullscreen")),Rc(l,w,C=>Xc(C)?.oldVersion??null),_t(w),l.selectedBundle&&Be(l.selectedBundle,w,{push:!0}),k(),w==="code"&&qi().then(()=>(l.bundleDetailsTab==="code"&&Jt(),null))}return}if(i.target.closest("[data-bundle-retry-sources]")){l.bundleDetails&&delete l.bundleDetails.sourceError,k();return}let y=i.target.closest("[data-bundle-download]");if(y){let w=y.dataset.bundleDownload,C=(l.bundles??[]).find(P=>P.integrity===w);if(!C)return;(async()=>{let{confirmed:P}=await Yd({name:C.name,encrypted:we()});if(P)try{let L=await al(w);We(new Blob([L],{type:"application/octet-stream"}),C.name)}catch(L){alert(`Failed to download bundle: ${L.message}`)}})();return}let x=i.target.closest("[data-bundle-export-sbom]");if(x){let w=x.dataset.bundleExportSbom,C=l.bundleDetails,P=(l.bundles??[]).find(L=>L.integrity===l.selectedBundle);if(!P||!C||C.integrity!==P.integrity)return;try{let L=w==="cyclonedx",V=L?pd(C,P):hd(C,P),le=`${ud(P.name)}.${L?"cdx":"spdx"}.json`;We(new Blob([V],{type:"application/json"}),le)}catch(L){alert(`Failed to export ${w==="cyclonedx"?"CycloneDX":"SPDX"}: ${L.message}`)}return}if(B(i,"[data-bundle-search-context]")){l.bundleSearchContext=!l.bundleSearchContext,rt(".bundle-search-results");return}if(i.target.closest("[data-advisories-consent]")){gd(),k();return}if(i.target.closest("[data-advisories-retry]")){bd(l.bundleDetails,k).catch(()=>{}),k();return}let $=i.target.closest("[data-bundle-issue-report]");if($){let w=$.dataset.bundleIssueReport;w&&it(w);return}if(Tu(i))return;let S=i.target.closest("[data-bundle-code-issue-step]");if(S){let w=S.closest("[data-bundle-code-issue-order]"),C=null;try{C=JSON.parse(w?.dataset.bundleCodeIssueOrder??"null")}catch{}if(Array.isArray(C)&&C.length>0){let P=S.dataset.bundleCodeIssueStep==="-1"?-1:1,L=C.findIndex(le=>le.idx===l.bundleSourceFindingIdx),V=L===-1?P>0?C[0]:C.at(-1):C[(L+P+C.length)%C.length];l.bundleSourceFindingIdx=V.idx,ii(),V.line>0&&on(V.line,{block:"center",behavior:"smooth"})}return}let T=B(i,"[data-bundle-view-source]");if(T){let w=T.dataset.bundleViewSource;if(!w)return;let C=T.dataset.bundleViewFindingIdx,P=C===void 0?null:parseInt(C,10),L=T.dataset.bundleViewLine,V=L?parseInt(L,10):null;Number.isFinite(V)&&(l.bundleSourcePretty=!1);let le=l.bundleSourceFile!==w;if(Eu(w),Number.isFinite(P)?l.bundleSourceFindingIdx=P:le&&(l.bundleSourceFindingIdx=null),l.bundleSourceTargetLine=Number.isFinite(V)?{bundle:l.bundleDetails?.integrity??null,path:w,line:V}:null,T.closest(".bundle-code-rail")?rt(".bundle-code-rail-body"):T.closest(".bundle-search-results")?rt(".bundle-search-results"):T.closest(".bundles-slide-body")?rt(".bundles-slide-body"):k(),Number.isFinite(V)){let ve=T.dataset.bundleViewScrollBlock||"center";qi().then(()=>(l.bundleSourceFile===w&&on(V,{block:ve,behavior:"smooth"}),null))}return}let F=i.target.closest('[data-action="workspace-reports"], [data-action="workspace-bundles"]');if(F){let w=F.dataset.action.slice(10);l.currentView!==`workspace-${w}`&&Xi(l.currentManagedTeam??l.currentWorkspace,w);return}if(i.target.closest('[data-action="workspace-findings"]')){if(l.currentView==="findings")return;if(l.currentView==="files"){if(nn("findings"))return;l.currentView="findings",l.filesSelectedFile=null,document.body.classList.remove("report-fullscreen"),k()}else H()?yr(l.managedTeams.find(w=>w.id===l.currentManagedTeam)):nt(l.currentWorkspace);return}let O=i.target.closest("[data-workspace-report]");if(O){H()?yr(l.managedTeams.find(w=>w.id===l.currentManagedTeam),O.dataset.workspaceReport):it(O.dataset.workspaceReport,void 0,{workspaceId:l.currentWorkspace});return}let A=i.target.closest("[data-workspace-bundle]");if(A){if(H())me.navigate(Yn({view:"bundles",teamId:l.currentManagedTeam,bundleId:A.dataset.workspaceBundle,bundleTab:"overview"},l.managedTeams));else{let w=A.dataset.workspaceBundle;Kt(w,"overview",{workspaceId:l.currentWorkspace}),Be(w,"overview"),k(),fe(),wt(w)}return}if(i.target.closest('[data-action="toggle-files"]')){if(nn(l.currentView==="files"?"findings":"files"))return;if(l.currentView==="workspace-reports"||l.currentView==="workspace-bundles"){l.currentView="files",nt(l.currentWorkspace);return}l.currentView==="files"?l.currentView="findings":(l.viewMode==="graph"&&oe(),l.currentView="files"),document.body.classList.remove("report-fullscreen"),k();return}let Z=B(i,"[data-g2-pkg]");if(Z){let w=Z.dataset.g2Pkg;E.solo=E.solo===w?null:w,E.solo&&(E.selected=null),_u(),ln(),E.graphState?.requestDraw?.();return}let ne=B(i,"[data-g2-select]");if(ne){E.selected=ne.dataset.g2Select,_u(),E.graphState?.requestDraw?.();return}let re=B(i,"[data-g2-top-pkgs]");if(re){E.topPkgsTab=re.dataset.g2TopPkgs,ln();return}let Un=B(i,"[data-g2-jump-findings]");if(Un){if(l.currentView==="bundles"){l.bundleDetailsTab==="graph"&&oe(),_t("issues"),l.selectedBundle&&Be(l.selectedBundle,"issues",{push:!0}),k();return}if(Hl(),l.filterConfMin=0,l.filterInclude=Un.dataset.g2JumpFindings,l.currentView="findings",l.viewMode==="graph"&&(l.viewMode="table"),oe(),nn("findings"))return;k();return}let se=B(i,"[data-g2-jump-file]");if(se){let w=se.dataset.g2JumpFile;oe();let C=()=>requestAnimationFrame(()=>{let L=document.querySelector(`#${Va(w)}`);L&&L.scrollIntoView({behavior:"smooth",block:"start"})}),P=nn("files");if(P){P.then(L=>L?C():void 0);return}l.currentView="files",k(),C();return}if(B(i,"#g2-path-filter-clear")){E.pathFilter="";let w=document.querySelector("graph-layout")?.shadowRoot?.querySelector("#g2-path-filter");w&&(w.value=""),E.graphState?.requestDraw?.();return}if(B(i,"#g2-fullscreen")){document.body.classList.toggle("report-fullscreen");return}if(B(i,"[data-g2-show-all]")){E.showAll=!E.showAll,E.layoutCache=null,E.selected=null,oe(),k();return}if(B(i,"[data-g2-packages-view]")){E.bundleLayout==="flow"?E.flowPackagesView=!E.flowPackagesView:E.bundleLayout==="dependencies"?(E.dependencyPackagesView=!E.dependencyPackagesView,E.solo=null):E.packagesView=!E.packagesView,E.layoutCache=null,E.selected=null,E.focusedPkg=null,oe(),k();return}if(B(i,"[data-g2-bundle-issues]")){E.bundleIssues=!E.bundleIssues,oe({keepViewport:!0}),k();return}let Ot=B(i,"[data-g2-layout]");if(Ot){let w=Ot.dataset.g2Layout;if(!["graph","layers","matrix","dependencies","flow"].includes(w)||E.bundleLayout===w&&!E.focusedPkg)return;E.bundleLayout=w,w==="dependencies"&&(E.dependencyPackagesView=!1),E.layoutCache=null,E.selected=null,E.solo=null,E.focusedPkg=null,oe(),k();return}let mi=B(i,".graph2-triage-selector [data-triage-show]");if(mi){let w=mi.dataset.triageShow;l.shownTriage=l.shownTriage===w?null:w,E.layoutCache=null,E.selected=null,oe(),k();return}let fi=B(i,"[data-g2-focus-pkg]");if(fi){E.focusedPkg=fi.dataset.g2FocusPkg,E.layoutCache=null,oe(),k();return}if(B(i,"#g2-back-to-full")){E.focusedPkg=null,E.layoutCache=null,(E.packagesView||E.bundleLayout==="layers")&&(E.selected=null),oe(),k();return}let ut=B(i,".tab");if(ut&&B(i,".tabs")){let C=B(i,"[data-gid]").dataset.gid,P=ut.dataset.tid;l.activeTabByGroup.set(C,P),Me();return}let Ve=B(i,"[data-triage-action]");if(Ve){let w=Ve.closest(".triage-menu"),C=w?.dataset.gid;if(!C)return;let P=de(C);if(!P)return;let L=Ve.dataset.triageAction;if(!["inprogress","fixed","invalid","deleted","ignored","restore"].includes(L))return;let{targets:V,clearing:le}=sc(P,L);if(V.length===0)return;Ru(V,le?"untriaged":L);try{w.hidePopover()}catch{}ke(),Me();return}if(B(i,".mark-comment")){let C=B(i,"[data-gid]").dataset.gid,P=de(C);if(!P)return;let L=$e(P);if(!Zl(L))return;if(H()){import("./chunk-O4RJY5TP.js").then(({openManagedCommentsDialog:ve})=>ve(L,Me)).catch(()=>Oe("Could not open comments. Please retry."));return}let V=mt(L),le=et(L)?.comment??"";Kd({initial:le,finding:L}).then(ve=>(ve===null||!De(L)||(J(l.triage,V,{comment:ve||void 0}),ke(),Me()),null)).catch(()=>{});return}let gi=B(i,".mark-copy");if(gi){let w=ku(i);if(w===null)return;rn(gi,w);return}let Uo=B(i,".mark-link");if(Uo){let w=B(i,"[data-gid]"),C=w?de(w.dataset.gid):null;if(!C)return;let P=bc($e(C));if(!P)return;rn(Uo,P);return}let Vn=B(i,"[data-copy-report]");if(Vn){rn(Vn,Vn.dataset.copyReport);return}let Kn=B(i,"[data-copy-path]");if(Kn){rn(Kn,Kn.dataset.copyPath);return}let jo=B(i,".mark-issue");if(jo&&H()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam){let w=B(i,"[data-gid]"),C=w?de(w.dataset.gid):null,P=C?$e(C):null;if(P?._managedReportId&&P.id){i.preventDefault();let L=new URL(jo.dataset.issueForm);Pd({teamId:l.currentManagedTeam,session:{...l.managedSession},context:{reportId:P._managedReportId,findingId:P.id,repository:L.pathname.split("/").slice(1,3).join("/")},formUrl:L.href,title:L.searchParams.get("title")??"",body:L.searchParams.get("body")??"",finding:P,draftOptions:{sourceUrl:Mi(P,jt(P)),evidence:Na(P),showRevalidation:Ia()},renderBody:kc}).catch(()=>Oe("Could not open issue creation. Please retry."));return}}let Vo=B(i,".mark-claude");if(Vo){let w=ku(i);if(w===null)return;let C=`claude://code/new?q=${encodeURIComponent(`Confirm and fix:
5
+ Use this only if you have lost access to your passkey and have no other way to unlock.`)&&confirm(`Really wipe everything? This cannot be undone.`)){try{await Dt()}catch(e){alert(`Wipe failed: ${e?.message??e}. Try again or clear localStorage manually via DevTools.`);return}location.reload()}}),document.body.append(U),U}function Wr(){return N()||!ct()?!1:O()&&!ot()}async function Gr(){if(await Kt(),Wr()){let e=Ur();e.hidden=!1;let t=e.querySelector(`button`);t&&t.focus()}else if(U&&(U.hidden=!0,Vr))try{Vr.abort()}catch{}}mt(Gr),document.addEventListener(`managed-client-mode-change`,Gr),Gr();var Kr=2;function qr(e,t){M.focusSplit=t,e.closest(`.focus-main`)?.style.setProperty(`--focus-split`,String(t)),e.setAttribute(`aria-valuenow`,String(Math.round(t)))}function Jr(){try{localStorage.setItem(qt,String(M.focusSplit))}catch{}}function Yr(e,t){qr(e,on(t)),Jr()}function Xr(e,t){Yr(e,M.focusSplit+t)}function Zr(e){Yr(e,en)}function Qr(e,t){let n=e.closest(`.focus-main`);if(!n)return;t.preventDefault(),e.classList.add(`dragging`);try{e.setPointerCapture(t.pointerId)}catch{}let r=t=>{let r=n.getBoundingClientRect();r.width!==0&&qr(e,on((t.clientX-r.left)/r.width*100))},i=()=>{e.removeEventListener(`pointermove`,r),e.removeEventListener(`pointerup`,i),e.removeEventListener(`pointercancel`,i),e.classList.remove(`dragging`),Jr()};e.addEventListener(`pointermove`,r),e.addEventListener(`pointerup`,i),e.addEventListener(`pointercancel`,i)}function $r(e,t){return p(u(e)).map(e=>t?[C(e)]:ke(e))}var ei={annotation(e){let t=Ce(e),n=Ee(e);return!t&&!n?null:{triage:t?.triage,color:t?.color,comment:t?.comment,fix:t?.fix,flagged:t?.flagged===!0,ignored:n}},location:e=>Hn(e,Pe(e)),evidence:(e,t,n)=>Wn(e,t,Pe(t),n),commit:e=>Kn(e.repo?.github,e.commitHash),report:e=>e._reportName??null};function ti(e,t){let n=new Set(e.map(e=>e.repo??null)),r=n.size===1?[...n][0]:null;if(r)return r;let i=new Set;for(let e of t)for(let t of e)t.repo?.github&&!ir(t.file)&&i.add(t.repo.github);return i.size===1?[...i][0]:i.size===0&&!M.currentWorkspace&&M.repoUrl?M.repoUrl:null}function ni(e){return e.replace(/\.(?:json|md|codex)$/iu,``)}function ri(){return M.currentWorkspace?b().find(e=>e.id===M.currentWorkspace)??null:null}function ii(e,t){if(t)return t.name;let n=e.map(e=>e.fileName);return n.length===1?ni(n[0]):Bn(n).replace(/[-_. ]+$/u,``)||`${n.length} reports`}function ai({oneSamplePerGroup:e=!1}={}){let t=M.reports,a=yn(),o=r(),s=$r(o,e),c=ri(),l=t.flatMap(e=>e.groups??[]),u=l.some(e=>e.some(gr)),d=l.some(e=>e.some(nr));return hr({title:ii(t,c),workspace:c?.name??null,reports:t.map(e=>({name:e.fileName,source:e.source})),repo:ti(t,s),generatedAt:new Date,view:{bucket:i(),severityMode:u?M.severityMode:null,revalidation:d?M.showRevalidation:null,revalidationDetail:d&&M.showRevalidation!==!1?fe():null},filters:n(a),counts:{included:s.length,total:o.length},groups:s},ei)}function oi(){let e=ri(),t=M.reports.map(e=>e.fileName),n=``;return e?n=e.name:t.length===1?n=ni(t[0]):t.length>1&&(n=ni(Bn(t))),n=n.replaceAll(/[\\/:*?"<>|\p{Cc}]/gu,`-`).trim(),`${n||`deepview-report`}.md`}function si(e){if(M.reports.length===0)return;let t=new Blob([ai(e)],{type:`text/markdown;charset=utf-8`});ze(t,oi())}function ci(e){return!N()||!bt.active||!M.currentManagedTeam?null:bt.navigate(pr({view:e,teamId:M.currentManagedTeam,reportId:M.currentManagedReport},M.managedTeams))}var li=!1;ne(()=>{if(li)return;li=!0;let e=2;function t(){--e===0&&ui()}requestAnimationFrame(t),setTimeout(t,350)});function ui(){li=!1,M.findingIndexTick++,M.currentView===`bundles`&&M.selectedBundle||M.currentView===`packages`||M.currentView===`repositories`||M.currentView===`links`?w():(M.currentView===`findings`||M.currentView===`files`)&&(A().catch(()=>{}),w())}var di=!1;oe(()=>{M.currentView!==`findings`&&M.currentView!==`files`&&!_()||di||(di=!0,queueMicrotask(()=>{di=!1,(M.currentView===`findings`||M.currentView===`files`||_())&&(M.bundleHashTick++,w())}))}),Oe(()=>{M.linksTick++,w()});function fi(){M.currentView===`bundles`&&M.bundleDetailsTab===`graph`?_e():De()}function pi(){M.currentView===`bundles`&&M.bundleDetailsTab===`graph`?be():Ae()}function mi(){let e=document.querySelector(`.bundle-source-code-wrap`),t=e?.scrollTop??0,n=e?.scrollLeft??0;w();let r=document.querySelector(`.bundle-source-code-wrap`);r&&(r.scrollTop=t,r.scrollLeft=n)}function W(e){let t=document.querySelector(e)?.scrollTop??0;w();let n=document.querySelector(e);n&&(n.scrollTop=t)}function G(){M.viewMode===`table`?W(`.findings-table-list`):w()}var hi=0;function gi(){hi||=requestAnimationFrame(()=>{hi=0,w()})}function K(e,t){for(let n of e.composedPath())if(n?.matches?.(t))return n;return null}function _i(e,t){queueMicrotask(()=>{let n=document.querySelector(`.bundle-source-lineno-row[data-line="${e}"]`);n&&n.scrollIntoView(t)})}function vi(e){e.classList.add(`copied`),setTimeout(()=>e.classList.remove(`copied`),1e3)}function yi(e,t){try{navigator.clipboard.writeText(t).then(()=>(vi(e),null)).catch(()=>{})}catch{}}function bi(e){let t=At(M.bundleCodeHistory,M.bundleDetails?.integrity??null,M.bundleSourceFile);M.bundleCodeHistory=Ft(t,e),M.bundleSourceFile=e}function xi(e=!1){queueMicrotask(()=>{let t=document.querySelector(`.bundle-source-code-wrap`);t&&(t.scrollTop=0,t.scrollLeft=0),e&&t?.querySelector(`.bundle-source-code`)?.focus({preventScroll:!0})})}window.addEventListener(`hashchange`,()=>{if(!N()||Pn()||M.currentView!==`bundles`||M.bundleDetailsTab!==`code`)return;let e=fr(new URL(location.href));if(e?.bundleTab!==`code`||e.file==null||e.file!==ge(M)?.file)return;let t=M.bundleSourceFile,n=e.endLine??e.line;M.bundleSourceTargetLine=e.line&&n<=zn(Rn(M.bundleDetails).get(t)??``)?{bundle:M.bundleDetails?.integrity??null,path:t,line:e.line,...e.endLine?{end:e.endLine}:{}}:null,w(),M.bundleSourceTargetLine&&_i(e.line,{block:`center`})});function Si(e){let t=e.target.closest(`[data-bundle-source-line]`);if(t){let n=Number(t.dataset.bundleSourceLine),r=M.bundleDetails?.integrity??null,i=M.bundleSourceFile,a=M.bundleSourceTargetLine,o=a?.bundle===r&&a.path===i?a:null;if(e.shiftKey&&o){let e=o.anchor??o.line;M.bundleSourceTargetLine={bundle:r,path:i,line:Math.min(e,n),end:Math.max(e,n),anchor:e}}else o?.line===n&&!(o.end>n)?M.bundleSourceTargetLine=null:M.bundleSourceTargetLine={bundle:r,path:i,line:n};return mi(),!0}let n=e.target.closest(`[data-bundle-source-wrap]`);if(n){let e=Xe(n);M.bundleSourceWrap=!M.bundleSourceWrap;try{localStorage.setItem(Qt,String(M.bundleSourceWrap))}catch{}return w(),queueMicrotask(e),!0}if(e.target.closest(`[data-bundle-source-pretty]`))return Et(),w(),xi(),!0;if(e.target.closest(`[data-bundle-source-lockfile]`))return Ut(),w(),!0;let r=e.target.closest(`[data-bundle-code-history]`);if(r){let e=At(M.bundleCodeHistory,M.bundleDetails?.integrity??null,M.bundleSourceFile),t=Bt(e,r.dataset.bundleCodeHistory===`back`?-1:1),n=t.files[t.at];return t.at===e.at||!Rn(M.bundleDetails).has(n)||(M.bundleCodeHistory=t,M.bundleSourceFile=n,M.bundleSourceFindingIdx=null,M.bundleCodeSearchMode=`files`,M.bundleCodeSearchQuery=``,W(`.bundle-code-rail-body`),Se(),xi()),!0}let i=e.target.closest(`[data-bundle-source-link]`);if(i){let t=i.dataset.bundleSourceLink,n=i.closest(`.focus-pane-code`);if(n){let r=Ri(e),i=kt(r,n.dataset.focusCodeIntegrity,n.dataset.focusCodeFile,t);return i&&(zi(r,i),queueMicrotask(()=>n.querySelector(`.focus-code-source`)?.focus({preventScroll:!0}))),!0}return Rn(M.bundleDetails).has(t)&&(M.currentView===`bundles`&&M.bundleDetailsTab===`search`&&(Je(`code`,{preserveSource:!0}),M.selectedBundle&&j(M.selectedBundle,`code`,{push:!0})),bi(t),M.bundleSourceFindingIdx=null,M.bundleDetailsTab===`code`&&(M.bundleCodeSearchMode=`files`,M.bundleCodeSearchQuery=``),W(`.bundle-code-rail-body`),Se(),xi(!0)),!0}if(e.target.classList?.contains(`bundle-source-overlay`)||e.target.closest(`[data-action="bundle-source-close"]`))return M.bundleSourceFile&&(Je(M.bundleDetailsTab),w()),!0;if(e.target.closest(`[data-action="bundle-source-panel-close"]`))return M.bundleSourceFindingIdx!=null&&(M.bundleSourceFindingIdx=null,mi()),!0;let a=e.target.closest(`[data-bundle-source-finding]`);if(a){let e=parseInt(a.dataset.bundleSourceFinding,10);return Number.isFinite(e)&&(M.bundleSourceFindingIdx=M.bundleSourceFindingIdx===e?null:e,mi()),!0}return!1}function Ci(e){let t=Ri(e);if(!t)return null;let n=C(t);return qn(n,Le(n))}T.addEventListener(`click`,e=>{if(K(e,`[data-finding-history]`)){let t=Ri(e),n=t&&C(t);Ct(n)&&ee(n);return}let t=K(e,`[data-code-nav-file]`);if(t){zi(Ri(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Un(t.dataset.codeNavLine)});return}let n=K(e,`[data-code-history]`);if(n){Vi(n.dataset.codeHistory===`forward`?1:-1);return}let r=K(e,`[data-code-preview]`);if(r){let e=r.dataset.codePreview,t=new Set(M.codePreviews);t.delete(e)||t.add(e),M.codePreviews=t,w();return}let i=K(e,`[data-finding-code-report]`);if(i&&N()){An({reportId:i.dataset.findingCodeReport,file:i.dataset.findingCodeFile,line:i.dataset.findingCodeLine});return}let a=K(e,`[data-finding-code-bundle]`);if(a){let e=a.dataset.findingCodeBundle,t=a.dataset.findingCodeFile,n=a.dataset.findingCodeLine,r=n?parseInt(n,10):null;M.bundleSourceFile=t||null,M.bundleCodeHistory=null,M.bundleSourceFindingIdx=null,(M.bundleDetailsTab===`code`||M.bundleDetailsTab===`search`)&&(M.bundleDetailsTab=`overview`);let i=()=>{Number.isFinite(r)&&_i(r,{block:`start`,behavior:`instant`})};if(M.selectedBundle===e&&M.bundleDetails?.integrity===e){w(),tt().then(()=>(M.selectedBundle===e&&M.bundleSourceFile===t&&i(),null));return}M.selectedBundle=e,M.selectedBundleWorkspace=null,M.bundleDetails=null,w(),(async()=>(await $e(e),i()))();return}let s=e.target.closest(`[data-package-expand]`);if(s){let e=s.dataset.packageExpand;M.expandedPackages.has(e)?M.expandedPackages.delete(e):M.expandedPackages.add(e),w();return}let c=e.target.closest(`[data-package-row-issues]`);if(c){let e=c.dataset.packageRowIssues,t=c.dataset.packageRowIssuesVersion;M.selectedPackage=e,M.selectedPackageVersion=t||null,M.packageDetailsTab=`issues`,M.packageSlideTriage=null,M.packageSlideTransient=!0,w();return}let l=e.target.closest(`[data-repository-row-issues]`);if(l){let e=l.dataset.repositoryRowIssues;M.selectedRepository=e,M.repositoryDetailsTab=`issues`,M.repositorySlideTriage=null,M.repositorySlideTransient=!0,w();return}let u=e.target.closest(`[data-select-package]`);if(u){let e=u.dataset.selectPackage,t=u.dataset.selectPackageVersion??``,n=t===``?null:t;if(M.selectedPackage===e&&M.selectedPackageVersion===n)return;M.selectedPackage=e,M.selectedPackageVersion=n,M.packageDetailsTab=`overview`,M.packageSlideTriage=null,M.packageSlideTransient=!1,w();return}if(e.target.closest(`[data-deselect-package]`)){M.selectedPackage=null,M.selectedPackageVersion=null,w();return}let d=e.target.closest(`[data-package-tab]`);if(d){let e=d.dataset.packageTab;(e===`overview`||e===`issues`)&&M.packageDetailsTab!==e&&(M.packageDetailsTab=e,w());return}if(e.target.closest(`[data-action="package-slide-back"]`)){M.packageDetailsTab=`overview`,M.packageSlideTriage=null,M.packageSlideTransient&&(M.selectedPackage=null,M.selectedPackageVersion=null,M.packageSlideTransient=!1),w();return}let p=K(e,`[data-links-report][data-links-finding]`);if(p){e.preventDefault();let{linksReport:t,linksFinding:n,managedReport:r}=p.dataset;t&&n&&(async()=>{let e=await It(n,t,r);e.ok||alert(e.reason)})().catch(e=>console.warn(`links: reveal in report failed:`,e));return}let g=e.target.closest(`[data-package-report]`);if(g){let e=g.dataset.packageReport;e&&$t(e);return}let _=e.target.closest(`[data-select-repository]`);if(_){let e=_.dataset.selectRepository;if(M.selectedRepository===e)return;M.selectedRepository=e,M.repositoryDetailsTab=`overview`,M.repositorySlideTriage=null,M.repositorySlideTransient=!1,w();return}if(e.target.closest(`[data-deselect-repository]`)){M.selectedRepository=null,w();return}let te=e.target.closest(`[data-repository-tab]`);if(te){let e=te.dataset.repositoryTab;(e===`overview`||e===`issues`)&&M.repositoryDetailsTab!==e&&(M.repositoryDetailsTab=e,w());return}if(e.target.closest(`[data-action="repository-slide-back"]`)){M.repositoryDetailsTab=`overview`,M.repositorySlideTriage=null,M.repositorySlideTransient&&(M.selectedRepository=null,M.repositorySlideTransient=!1),w();return}let ne=e.target.closest(`[data-bundle-tab]`);if(ne){let e=ne.dataset.bundleTab;if(cr.has(e)||e===`review`&&M.bundleDetails?.npm||dr.has(e)&&M.bundleDetails?.repository){if(e===M.bundleDetailsTab){M.selectedBundle&&j(M.selectedBundle,e);return}M.bundleDetailsTab===`graph`&&e!==`graph`&&(L(),document.body.classList.remove(`report-fullscreen`)),ye(M,e,e=>rn(e)?.oldVersion??null),Je(e),M.selectedBundle&&j(M.selectedBundle,e,{push:!0}),w(),e===`code`&&tt().then(()=>(M.bundleDetailsTab===`code`&&Se(),null))}return}if(e.target.closest(`[data-bundle-retry-sources]`)){M.bundleDetails&&delete M.bundleDetails.sourceError,w();return}let re=e.target.closest(`[data-bundle-download]`);if(re){let e=re.dataset.bundleDownload,t=(M.bundles??[]).find(t=>t.integrity===e);if(!t)return;(async()=>{let{confirmed:n}=await Dn({name:t.name,encrypted:O()});if(n)try{let n=await f(e);ze(new Blob([n],{type:`application/octet-stream`}),t.name)}catch(e){alert(`Failed to download bundle: ${e.message}`)}})();return}let ie=e.target.closest(`[data-bundle-export-sbom]`);if(ie){let e=ie.dataset.bundleExportSbom,t=M.bundleDetails,n=(M.bundles??[]).find(e=>e.integrity===M.selectedBundle);if(!n||!t||t.integrity!==n.integrity)return;try{let r=e===`cyclonedx`,i=r?xn(t,n):Cn(t,n),a=`${_n(n.name)}.${r?`cdx`:`spdx`}.json`;ze(new Blob([i],{type:`application/json`}),a)}catch(t){alert(`Failed to export ${e===`cyclonedx`?`CycloneDX`:`SPDX`}: ${t.message}`)}return}if(K(e,`[data-bundle-search-context]`)){M.bundleSearchContext=!M.bundleSearchContext,W(`.bundle-search-results`);return}if(e.target.closest(`[data-advisories-consent]`)){ue(),w();return}if(e.target.closest(`[data-advisories-retry]`)){me(M.bundleDetails,w).catch(()=>{}),w();return}let ae=e.target.closest(`[data-bundle-issue-report]`);if(ae){let e=ae.dataset.bundleIssueReport;e&&$t(e);return}if(Si(e))return;let oe=e.target.closest(`[data-bundle-code-issue-step]`);if(oe){let e=oe.closest(`[data-bundle-code-issue-order]`),t=null;try{t=JSON.parse(e?.dataset.bundleCodeIssueOrder??`null`)}catch{}if(Array.isArray(t)&&t.length>0){let e=oe.dataset.bundleCodeIssueStep===`-1`?-1:1,n=t.findIndex(e=>e.idx===M.bundleSourceFindingIdx),r=n===-1?e>0?t[0]:t.at(-1):t[(n+e+t.length)%t.length];M.bundleSourceFindingIdx=r.idx,mi(),r.line>0&&_i(r.line,{block:`center`,behavior:`smooth`})}return}let v=K(e,`[data-bundle-view-source]`);if(v){let e=v.dataset.bundleViewSource;if(!e)return;let t=v.dataset.bundleViewFindingIdx,n=t===void 0?null:parseInt(t,10),r=v.dataset.bundleViewLine,i=r?parseInt(r,10):null;Number.isFinite(i)&&(M.bundleSourcePretty=!1,M.bundleSourceLockfile=!1);let a=M.bundleSourceFile!==e;if(bi(e),Number.isFinite(n)?M.bundleSourceFindingIdx=n:a&&(M.bundleSourceFindingIdx=null),M.bundleSourceTargetLine=Number.isFinite(i)?{bundle:M.bundleDetails?.integrity??null,path:e,line:i}:null,v.closest(`.bundle-code-rail`)?W(`.bundle-code-rail-body`):v.closest(`.bundle-search-results`)?W(`.bundle-search-results`):v.closest(`.bundles-slide-body`)?W(`.bundles-slide-body`):w(),Number.isFinite(i)){let t=v.dataset.bundleViewScrollBlock||`center`;tt().then(()=>(M.bundleSourceFile===e&&_i(i,{block:t,behavior:`smooth`}),null))}return}let se=e.target.closest(`[data-action="workspace-reports"], [data-action="workspace-bundles"], [data-action="workspace-repositories"], [data-action="workspace-dependencies"]`);if(se){let e=se.dataset.action.slice(10);M.currentView!==`workspace-${e}`&&an(M.currentManagedTeam??M.currentWorkspace,e);return}if(e.target.closest(`[data-action="workspace-findings"]`)){if(M.currentView===`findings`)return;if(M.currentView===`files`){if(ci(`findings`))return;M.currentView=`findings`,M.filesSelectedFile=null,document.body.classList.remove(`report-fullscreen`),w()}else N()?cn(M.managedTeams.find(e=>e.id===M.currentManagedTeam)):un(M.currentWorkspace);return}let ce=e.target.closest(`[data-workspace-report]`);if(ce){N()?cn(M.managedTeams.find(e=>e.id===M.currentManagedTeam),ce.dataset.workspaceReport):$t(ce.dataset.workspaceReport,void 0,{workspaceId:M.currentWorkspace});return}let le=e.target.closest(`[data-workspace-repository]`);if(le){let{workspaceRepository:e,repositoryName:t,repositoryPath:n}=le.dataset;document.dispatchEvent(new CustomEvent(`managed-repository-code-open`,{detail:{repoId:Number(e),repo:t,path:n}}));return}let y=e.target.closest(`[data-workspace-bundle]`);if(y){if(N())bt.navigate(pr({view:`bundles`,teamId:M.currentManagedTeam,bundleId:y.dataset.workspaceBundle,bundleTab:`overview`},M.managedTeams));else{let e=y.dataset.workspaceBundle;Ge(e,`overview`,{workspaceId:M.currentWorkspace}),j(e,`overview`),w(),A(),$e(e)}return}if(e.target.closest(`[data-action="toggle-files"]`)){if(ci(M.currentView===`files`?`findings`:`files`))return;M.currentView===`files`?M.currentView=`findings`:(M.viewMode===`graph`&&L(),M.currentView=`files`),document.body.classList.remove(`report-fullscreen`),w();return}let de=K(e,`[data-g2-pkg]`);if(de){let e=de.dataset.g2Pkg;I.solo=I.solo===e?null:e,I.solo&&(I.selected=null),fi(),pi(),I.graphState?.requestDraw?.();return}let fe=K(e,`[data-g2-select]`);if(fe){I.selected=fe.dataset.g2Select,fi(),I.graphState?.requestDraw?.();return}let pe=K(e,`[data-g2-top-pkgs]`);if(pe){I.topPkgsTab=pe.dataset.g2TopPkgs,pi();return}let b=K(e,`[data-g2-jump-findings]`);if(b){if(M.currentView===`bundles`){M.bundleDetailsTab===`graph`&&L(),Je(`issues`),M.selectedBundle&&j(M.selectedBundle,`issues`,{push:!0}),w();return}if(ln(),M.filterConfMin=0,M.filterInclude=b.dataset.g2JumpFindings,M.currentView=`findings`,M.viewMode===`graph`&&(M.viewMode=`table`),L(),ci(`findings`))return;w();return}let ge=K(e,`[data-g2-jump-file]`);if(ge){let e=ge.dataset.g2JumpFile;L();let t=()=>requestAnimationFrame(()=>{let t=document.querySelector(`#${tr(e)}`);t&&t.scrollIntoView({behavior:`smooth`,block:`start`})}),n=ci(`files`);if(n){n.then(e=>e?t():void 0);return}M.currentView=`files`,w(),t();return}if(K(e,`#g2-path-filter-clear`)){I.pathFilter=``;let e=document.querySelector(`graph-layout`)?.shadowRoot?.querySelector(`#g2-path-filter`);e&&(e.value=``),I.graphState?.requestDraw?.();return}if(K(e,`#g2-fullscreen`)){document.body.classList.toggle(`report-fullscreen`);return}if(K(e,`[data-g2-show-all]`)){I.showAll=!I.showAll,I.layoutCache=null,I.selected=null,L(),w();return}if(K(e,`[data-g2-packages-view]`)){I.bundleLayout===`flow`?I.flowPackagesView=!I.flowPackagesView:I.bundleLayout===`dependencies`?(I.dependencyPackagesView=!I.dependencyPackagesView,I.solo=null):I.packagesView=!I.packagesView,I.layoutCache=null,I.selected=null,I.focusedPkg=null,L(),w();return}if(K(e,`[data-g2-bundle-issues]`)){I.bundleIssues=!I.bundleIssues,L({keepViewport:!0}),w();return}let _e=K(e,`[data-g2-layout]`);if(_e){let e=_e.dataset.g2Layout;if(![`graph`,`layers`,`matrix`,`dependencies`,`flow`].includes(e)||I.bundleLayout===e&&!I.focusedPkg)return;I.bundleLayout=e,e===`dependencies`&&(I.dependencyPackagesView=!1),I.layoutCache=null,I.selected=null,I.solo=null,I.focusedPkg=null,L(),w();return}let ve=K(e,`.graph2-triage-selector [data-triage-show]`);if(ve){let e=ve.dataset.triageShow;M.shownTriage=M.shownTriage===e?null:e,I.layoutCache=null,I.selected=null,L(),w();return}let be=K(e,`[data-g2-focus-pkg]`);if(be){I.focusedPkg=be.dataset.g2FocusPkg,I.layoutCache=null,L(),w();return}if(K(e,`#g2-back-to-full`)){I.focusedPkg=null,I.layoutCache=null,(I.packagesView||I.bundleLayout===`layers`)&&(I.selected=null),L(),w();return}let xe=K(e,`.tab`);if(xe&&K(e,`.tabs`)){let t=K(e,`[data-gid]`).dataset.gid,n=xe.dataset.tid;M.activeTabByGroup.set(t,n),G();return}let we=K(e,`[data-triage-action]`);if(we){let e=we.closest(`.triage-menu`),t=e?.dataset.gid;if(!t)return;let n=o(t);if(!n)return;let r=we.dataset.triageAction;if(![`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`,`restore`].includes(r))return;let{targets:i,clearing:a}=qe(n,r);if(i.length===0)return;Di(i,a?`untriaged`:r);try{e.hidePopover()}catch{}E(),G();return}if(K(e,`.mark-comment`)){let t=K(e,`[data-gid]`).dataset.gid,n=o(t);if(!n)return;let r=C(n);if(!he(r))return;if(N()){Mn(r,G).catch(()=>pt(`Could not open comments. Please retry.`));return}let i=Jn(r),a=Ce(r)?.comment??``;En({initial:a,finding:r}).then(e=>(e===null||!x(r)||(F(M.triage,i,{comment:e||void 0}),E(),G()),null)).catch(()=>{});return}let Te=K(e,`.mark-copy`);if(Te){let t=Ci(e);if(t===null)return;yi(Te,t);return}let S=K(e,`.mark-link`);if(S){let t=K(e,`[data-gid]`),n=t?o(t.dataset.gid):null;if(!n)return;let r=Pt(C(n));if(!r)return;yi(S,r);return}let Ee=K(e,`[data-copy-report]`);if(Ee){yi(Ee,Ee.dataset.copyReport);return}let De=K(e,`[data-copy-path]`);if(De){yi(De,De.dataset.copyPath);return}let Oe=K(e,`.mark-issue`);if(Oe&&N()&&M.managedSession&&!M.managedSession.publicShare&&M.currentManagedTeam){let t=K(e,`[data-gid]`),n=t?o(t.dataset.gid):null,r=n?C(n):null;if(r?._managedReportId&&r.id){e.preventDefault();let t=new URL(Oe.dataset.issueForm);h({teamId:M.currentManagedTeam,session:{...M.managedSession},context:{reportId:r._managedReportId,findingId:r.id,repository:t.pathname.split(`/`).slice(1,3).join(`/`)},formUrl:t.href,title:t.searchParams.get(`title`)??``,body:t.searchParams.get(`body`)??``,finding:r,draftOptions:{sourceUrl:Hn(r,Pe(r)),evidence:Gn(r),showRevalidation:er()},renderBody:m,render:w}).catch(()=>pt(`Could not open issue creation. Please retry.`));return}}let ke=K(e,`.mark-claude`);if(ke){let t=Ci(e);if(t===null)return;let n=`claude://code/new?q=${encodeURIComponent(`Confirm and fix:
35
6
 
36
- ${w}`)}`;try{window.location.href=C,Cu(Vo)}catch{}return}if(B(i,".mark-fix")){let C=B(i,"[data-gid]")?.dataset.gid,P=C?de(C):null;if(!P)return;let L=$e(P);if(!De(L))return;let V=ac(P),le=et(L)?.fix??"";lu({initial:le,finding:L,canApplyToGroup:nc(V,le)}).then(ve=>{if(ve===null||!De(L))return null;let Wo=ve.scope==="group"?V.filter(Bt=>De(Bt)&&(Bt===L||rc(Bt,le))):[L],Yo=!1;for(let Bt of Wo)J(l.triage,mt(Bt),{fix:ve.value||void 0})&&(Yo=!0);return Yo&&(Wo.length>1&&l.activeTabByGroup.set(C,mt(L)),Me(),queueMicrotask(ke)),null}).catch(()=>{});return}let Ko=B(i,"[data-flag-toggle]");if(Ko){let w=Ko.dataset.flagToggle,C=B(i,"[data-gid]")?.dataset.gid,P=(C?de(C):null)?.find(V=>mt(V)===w);if(!P||!De(P))return;let L=et(P)?.flagged;J(l.triage,w,{flagged:L!==!0}),ke(),Me();return}let Gn=i.target.closest("[data-triage-show]");if(Gn&&!Gn.closest(".graph2-triage-selector")){let w=Gn.dataset.triageShow;l.shownTriage=l.shownTriage===w?null:w,k();return}if(i.target.closest("[data-table-deselect]")){l.tableSelectedGid=null,Me();return}let Go=i.target.closest("[data-tree-select]");if(Go){let w=Go.dataset.treeSelect;l.filesSelectedFile=l.filesSelectedFile===w?null:w,k();return}i.target.closest("[data-tree-deselect]")&&(l.filesSelectedFile=null,k())});var $u=document.querySelector("#bundle-source-overlay-slot");$u&&$u.addEventListener("click",Tu);function cn(i){let e=i?de(i):null;e&&oc(e)&&queueMicrotask(ke)}R.addEventListener("row-select",i=>{let e=i.detail?.gid;if(!e)return;let t=l.tableSelectedGid!==e;l.tableSelectedGid=t?e:null,t&&cn(e),Me()});var dn="application/x-deepview-kanban-gid";function Ru(i,e){for(let t of i)De(t)&&pa(l.triage,t,e,Da())}function Yr(){for(let i of R.querySelectorAll(".kanban-card.dragging"))i.classList.remove("dragging");for(let i of R.querySelectorAll(".kanban-column.drag-over"))i.classList.remove("drag-over")}R.addEventListener("dragstart",i=>{let e=i.target.closest?.(".kanban-card[data-kanban-source]");if(!e||!i.dataTransfer)return;let t=e.dataset.gid;if(!t)return;let n=de(t);if(!n||rr(n).length===0){i.preventDefault();return}i.dataTransfer.setData(dn,t),i.dataTransfer.setData("text/plain",t),i.dataTransfer.effectAllowed="move",e.classList.add("dragging")});R.addEventListener("dragend",Yr);R.addEventListener("dragover",i=>{if(!i.dataTransfer?.types.includes(dn))return;let e=i.target.closest?.(".kanban-column[data-kanban-target]");if(e&&(i.preventDefault(),i.dataTransfer.dropEffect="move",!e.classList.contains("drag-over"))){for(let t of R.querySelectorAll(".kanban-column.drag-over"))t!==e&&t.classList.remove("drag-over");e.classList.add("drag-over")}});R.addEventListener("dragleave",i=>{let e=i.target.closest?.(".kanban-column[data-kanban-target]");e&&(e.contains(i.relatedTarget)||e.classList.remove("drag-over"))});R.addEventListener("drop",i=>{if(!i.dataTransfer?.types.includes(dn))return;let e=i.target.closest?.(".kanban-column[data-kanban-target]");if(!e){Yr();return}i.preventDefault();let t=i.dataTransfer.getData(dn),n=e.dataset.kanbanTarget;if(Yr(),!t||!n)return;let r=de(t);if(!r||(Ni(r).commonTriage??"untriaged")===n)return;let o=rr(r);o.length!==0&&(Ru(o,n),k(),queueMicrotask(ke))});var Kr=!1;function st(i){return i?R.querySelector(`.kanban-card[data-gid="${CSS.escape(i)}"]`):null}function sn(i){let e=i??R.querySelector(".kanban-card");if(!e)return;let t=e.getBoundingClientRect();t.width<=0||t.height<=0||(document.documentElement.style.setProperty("--kanban-clip-card-w",`${Math.floor(t.width)}px`),document.documentElement.style.setProperty("--kanban-clip-card-h",`${Math.floor(t.height)}px`),document.documentElement.style.setProperty("--kanban-return-card-bg",getComputedStyle(e).backgroundColor))}function bm(){let i=R.querySelector(".kanban-detail-side [data-kanban-select].active");i&&i.scrollIntoView({block:"nearest",behavior:"instant"})}function Gr(i){l.kanbanPopoverGid=i,l.focusCodeStack=[],l.focusCodeAt=0}function xu(){bm(),tt()}function ot(i){let e=l.kanbanPopoverGid;if(e===i)return;let t=e===null&&i!==null,n=e!==null&&i===null;if(!document.startViewTransition||!t&&!n){cn(i),Gr(i),k(),xu();return}if(Kr)return;cn(i),Kr=!0;let r=t?"kanban-opening":"kanban-closing";document.documentElement.classList.add(r);let s=u=>{u&&(u.style.viewTransitionName=""),document.documentElement.classList.remove(r),Kr=!1};if(t){let u=st(i);u?(sn(u),u.style.viewTransitionName="kanban-detail-modal",u.getBoundingClientRect()):sn(),Gr(i);let p=_r(()=>{k(),xu(),u&&(u.style.viewTransitionName="")}),h=setTimeout(()=>s(u),600);(async()=>{try{await p.finished}catch{}clearTimeout(h),s(u)})();return}sn(),Gr(i);let o=null,c=_r(()=>{k(),o=st(e),o&&(sn(o),o.style.viewTransitionName="kanban-detail-modal")}),d=setTimeout(()=>s(o??st(e)),600);(async()=>{try{await c.finished}catch{}clearTimeout(d),s(o??st(e))})()}function Lu(i){let e=st(l.kanbanPopoverGid),t=e?.closest(".kanban-column");if(!t)return;let n=[...t.querySelectorAll(".kanban-card[data-kanban-source]")],r=n.indexOf(e);if(r<0)return;let s=Math.min(Math.max(r+i,0),n.length-1);if(s===r)return;let o=n[s].dataset.gid;if(!o)return;ot(o);let c=st(o);c&&(c.focus({preventScroll:!0}),c.scrollIntoView({block:"nearest",behavior:"instant"}))}var an=null;function Xr(){Xl(),l.focusCodeStack=[],l.focusCodeAt=0,k(),an?.isConnected&&an.focus({preventScroll:!0}),an=null}R.addEventListener("click",i=>{let e=B(i,"[data-links-preview]");if(e){i.preventDefault(),an=e;let o=e.dataset.previewRow,c=Jl(e.dataset.linksPreview,e.dataset.previewReport,o===void 0?void 0:Number(o),e.dataset.previewManagedReport);k(),R.querySelector(".kanban-detail-close")?.focus({preventScroll:!0}),c.then(()=>{k(),tt();let d=Qe()?.group?.[0]._bundleHashes;if(Array.isArray(d))for(let u of d)pc(u).catch(()=>{});return null});return}if(i.target.closest?.(".kanban-detail-close")){if(Qe()){Xr();return}ot(null);return}if(i.target.closest?.("[data-kanban-detail-fullscreen]")){l.kanbanDetailFullscreen=!l.kanbanDetailFullscreen;try{localStorage.setItem(il,String(l.kanbanDetailFullscreen))}catch{}k(),tt();return}let t=i.target.closest?.("[data-kanban-expand]");if(t){let o=t.dataset.kanbanExpand,c=l.kanbanExpandedColumn===o?null:o;l.kanbanExpandedColumn=c,c&&l.kanbanPopoverGid&&st(l.kanbanPopoverGid)?.closest(".kanban-column")?.dataset.kanbanTarget!==c&&(l.kanbanPopoverGid=null),k();return}let n=i.target.closest?.("[data-kanban-nav]");if(n){Lu(n.dataset.kanbanNav==="next"?1:-1);return}let r=i.target.closest?.("[data-kanban-select]");if(r){if(window.getSelection?.()?.toString())return;let o=r.dataset.gid;o&&ot(o);return}if(i.target.closest?.(".kanban-action:not(.kanban-fix-note)"))return;let s=i.target.closest?.(".kanban-card[data-kanban-source]");if(s){if(window.getSelection?.()?.toString())return;let o=s.dataset.gid;if(!o)return;ot(l.kanbanPopoverGid===o?null:o);return}if(!B(i,".kanban-detail-modal, .kanban-detail-side")){if(Qe()){Xr();return}l.kanbanPopoverGid&&ot(null)}});R.addEventListener("change",i=>{let e=i.target.closest?.("[data-kanban-column]");if(!e)return;let t=e.selectedOptions[0]?.dataset.gid;t&&ot(t)});document.addEventListener("keydown",i=>{if(i.key==="Escape"){if(Qe()){!i.defaultPrevented&&!Iu(i)&&!document.querySelector(":popover-open:not(#styled-tooltip)")&&Xr();return}if(l.kanbanPopoverGid){ot(null);return}l.viewMode!=="kanban"||l.kanbanExpandedColumn===null||(l.kanbanExpandedColumn=null,k())}});function ni(i){let t=B(i,"[data-gid]")?.dataset?.gid;return t?de(t):null}function Qr(i,e){if(!e.integrity||!e.file)return;let t=fc(i);if(!t)return;let n=hc(t,e);n&&(l.focusCodeStack=n.stack,l.focusCodeAt=n.at,k()),e.range||Mu(),tt()}function Mu(){for(let i of R.querySelectorAll(".focus-code-body"))i.scrollTop=0,i.scrollLeft=0}R.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;let e=B(i,"[data-code-nav-file]");e&&(i.preventDefault(),Qr(ni(i),{integrity:e.dataset.codeNavIntegrity,file:e.dataset.codeNavFile,range:Fe(e.dataset.codeNavLine)}))});function vm(i){let e=mc(l.focusCodeStack,l.focusCodeAt,i);e!==l.focusCodeAt&&(l.focusCodeAt=e,k(),l.focusCodeStack[e]?.range||Mu(),tt())}function Pu(i){if(!i||l.focusGid===i)return;cn(i),l.focusGid=i,l.focusCodeStack=[],l.focusCodeAt=0,k();let e=R.querySelector(".focus-side-card.active");e&&e.scrollIntoView({block:"nearest",behavior:"instant"}),tt()}function Au(i){let e=[...R.querySelectorAll(".focus-side-card[data-focus-select]")];if(e.length===0)return;let t=e.findIndex(s=>s.classList.contains("active")),n=t<0?i>0?0:e.length-1:Math.min(Math.max(t+i,0),e.length-1);if(n===t)return;let r=e[n].dataset.gid;r&&Pu(r)}R.addEventListener("click",i=>{let e=i.target.closest?.("[data-focus-nav]");if(e){Au(e.dataset.focusNav==="next"?1:-1);return}let t=i.target.closest?.(".focus-side-card[data-focus-select]");if(!t||window.getSelection?.()?.toString())return;let n=t.dataset.gid;n&&Pu(n)});R.addEventListener("pointerdown",i=>{if(i.button!==0)return;let e=i.target.closest?.("[data-focus-splitter]");e&&bu(e,i)});R.addEventListener("dblclick",i=>{let e=i.target.closest?.("[data-focus-splitter]");e&&gu(e)});function Iu(i){if(document.querySelector("dialog[open]"))return!0;for(let e of i.composedPath()){if(!e||e.nodeType!==1)continue;let t=e.tagName;if(t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||t==="DIALOG"&&e.open||e.isContentEditable)return!0}return!1}document.addEventListener("keydown",i=>{if(l.currentView!=="findings")return;let e=l.viewMode==="focus",t=l.viewMode==="kanban"&&l.kanbanPopoverGid!==null;if(!e&&!t||i.metaKey||i.ctrlKey||i.altKey||i.shiftKey||Iu(i))return;let n=0;if(i.key==="ArrowRight")n=1;else if(i.key==="ArrowLeft")n=-1;else return;i.preventDefault();let r=i.target?.closest?.("[data-focus-splitter]");if(r){fu(r,n*uu);return}e?Au(n):Lu(n)});R.addEventListener("mark-color",i=>{let e=B(i,"[data-gid]");if(!e)return;let t=e.dataset.gid,n=de(t);if(!n)return;let r=$e(n);if(!De(r))return;let s=mt(r),o=i.detail?.color;if(!o)return;et(r)?.color===o?J(l.triage,s,{color:void 0}):J(l.triage,s,{color:o}),ke(),Me()});var at=null,Jr=null,Et=null,un=!1;function Fu(){if(at!==null)return;if(l.reports.length===0){Et=null,un=!1;return}at=l.viewMode,Jr=document.title;let i=!1;l.viewMode==="table"&&(l.viewMode="list",i=!0),Et&&(qt(Et),i=!0),i&&k();for(let n of R.querySelectorAll("finding-card"))n.toggleAttribute("print-one-sample",un),n.ensureRendered({sync:!0});let e=l.reports.map(n=>n.fileName),t="";e.length===1?t=e[0]:e.length>1&&(t=zt(e)),t=t.replace(/\.json$/u,""),t&&(document.title=t)}function Du(){if(at===null)return;for(let e of R.querySelectorAll("finding-card"))e.removeAttribute("print-one-sample");un=!1;let i=!1;l.viewMode!==at&&(l.viewMode=at,i=!0),Et&&(Ht(),Et=null,i=!0),i&&k(),document.title=Jr,at=null,Jr=null}window.addEventListener("beforeprint",Fu);window.addEventListener("afterprint",Du);async function ym(i,{oneSamplePerGroup:e=!1}={}){if(at===null){Et=i,un=e;try{Fu(),await Promise.all([...R.querySelectorAll("finding-card")].map(t=>t.ensureRendered())),window.print()}catch(t){throw Du(),t}}}function Su(i,e){if(!i)return e();qt(i);try{return e()}finally{Ht()}}document.addEventListener("download-requested",async()=>{if(l.reports.length===0)return;let{confirmed:i,view:e,fields:t,mode:n,oneSamplePerGroup:r}=await eu("download");if(e){await ou(Su(t,()=>Hr({oneSamplePerGroup:r})));return}if(i){if(n==="print"){await ym(t,{oneSamplePerGroup:r});return}Su(t,()=>yu({oneSamplePerGroup:r}))}});R.addEventListener("analyzer-change",i=>{l.filterAnalyzer=i.detail.analyzer,l.filterModel=i.detail.model,k()});R.addEventListener("repo-change",i=>{l.filterRepo=i.detail.value,k()});R.addEventListener("revalidate-change",i=>{l.filterRevalidate=i.detail.value,k()});R.addEventListener("partial-change",i=>{l.filterPartial=i.detail.value,k()});R.addEventListener("revalidation-change",i=>{l.showRevalidation=i.detail.on,!i.detail.on&&l.reports.some(t=>(t.groups??[]).some(n=>n.some(r=>!r.isApp&&(r.isUpstream||Li(r.file)))))?Oe("App mode off is not recommended; it can conflate triage for issues in dependencies.",{kind:"warning"}):i.detail.on&&cd(),ir(l.showRevalidation,l.upstreamOnly),Gl(sr(),{resetSort:!1}),k()});R.addEventListener("revalidation-conflicts-open",()=>{(async()=>{let i=await du(l.revalidateConflicts);if(!i)return;let e=await wr(i.id,i.reportName);e.ok||alert(e.reason)})().catch(i=>console.warn("revalidation: open conflicting finding failed:",i))});R.addEventListener("revalidation-detail-change",i=>{l.revalidationDetailed=i.detail.on===!0,k()});R.addEventListener("upstream-only-change",i=>{if(l.upstreamOnly=i.detail.on===!0,ir(l.showRevalidation,l.upstreamOnly),!l.upstreamOnly){let e=sr();Vl(e,Kl(e))==="confirmed"&&(l.filterRevalidate="confirmed",l.filterPartial="")}k()});R.addEventListener("bundle-search-mode-change",i=>{let e=i.detail?.mode;if(["files","code","issues","largest"].includes(e)){if(l.bundleCodeSearchMode=e,k(),e==="files")Jt();else if(e==="largest"){let t=document.querySelector(".bundle-code-rail-body");t&&(t.scrollTop=0)}}});R.addEventListener("bundle-graph-reason-change",i=>{let e=i.detail?.reason;e!==null&&typeof e!="string"||(E.bundleReason=e,E.layoutCache=null,E.selected=null,E.solo=null,E.focusedPkg=null,oe(),k())});R.addEventListener("bundle-search-regex-toggle",()=>{l.bundleSearchRegex=!l.bundleSearchRegex,k()});R.addEventListener("bundle-search-case-toggle",()=>{l.bundleSearchCase=!l.bundleSearchCase,k()});R.addEventListener("bundle-swap",i=>{let e=i.detail?.integrity;if(!e||!(l.bundles??[]).some(s=>s.integrity===e))return;let t=l.bundles.find(s=>s.integrity===e),n=lc(i.detail.bundles??[]),r=()=>{setTimeout(()=>cc(n))};if(t.managedId){let s=i.detail.target===void 0?l.selectedBundle:i.detail.target,o=l.bundles.find(d=>d.integrity===s),c=o?.managedId?{compareId:o.managedId,...ma(i.detail.mode)}:null;me.navigate(Ec(l.managedTeams,t,l.currentManagedTeam,"compare",c,l.bundles)).finally(r);return}Kt(e,"compare"),Be(e,"compare"),k(),fe(),wt(e).finally(r)});R.addEventListener("bundle-compare-change",i=>{let{base:e,target:t,mode:n}=i.detail??{};!H()||!e||e!==l.selectedBundle||l.bundleDetailsTab!=="compare"||(l.bundleCompare=t?{bundle:e,target:t,mode:xi(n)}:null,Be(e,"compare"))});R.addEventListener("sort-change",i=>{let{kind:e,value:t}=i.detail;if(e==="findings")l.sortBy=t;else if(e==="packages")l.packagesSortBy=t;else if(e==="repositories")l.repositoriesSortBy=t;else return;k()});R.addEventListener("range-change",i=>{i.target.id==="conf-range"&&(l.filterConfMin=i.detail.low,l.filterConfMax=i.detail.high,k())});R.addEventListener("input",i=>{let e=i.composedPath()[0],t=e?.id,n=e?.value;t==="g2-path-filter"&&(E.pathFilter=n,E.graphState?.requestDraw?.())});R.addEventListener("search-input",i=>{if(!i.detail)return;let{kind:e,value:t}=i.detail;if(e==="findings"){l.filterInclude=t,t||(l.filterIncludeNegate=!1),wu();return}else if(e==="files")l.filesSearch=t;else if(e==="packages")l.packagesSearchQuery=t;else if(e==="repositories")l.repositoriesSearchQuery=t;else if(e==="bundle-code")l.bundleCodeSearchQuery=t;else if(e==="bundle-search"){l.bundleSearchQuery=t,wu();return}else return;k()});R.addEventListener("search-negate-toggle",()=>{l.filterIncludeNegate=!l.filterIncludeNegate,k()});R.addEventListener("severity-toggle",i=>{let e=i.detail.severity;if(i.detail.kind==="graph"){E.selectedSeverities.has(e)?E.selectedSeverities.delete(e):E.selectedSeverities.add(e),i.composedPath()[0].selected=[...E.selectedSeverities],E.graphState?.requestDraw?.(),ln();return}l.filterSeverities.has(e)?l.filterSeverities.delete(e):l.filterSeverities.add(e),k()});R.addEventListener("color-toggle",i=>{let e=i.detail.color;if(i.detail.kind==="graph"){E.selectedColors.has(e)?E.selectedColors.delete(e):E.selectedColors.add(e),i.composedPath()[0].selected=[...E.selectedColors],E.graphState?.requestDraw?.(),ln();return}l.filterColors.has(e)?l.filterColors.delete(e):l.filterColors.add(e),k()});R.addEventListener("source-toggle",i=>{let e=i.detail.source,t=l.filterSources.has(e);l.filterSources.clear(),t||l.filterSources.add(e),k()});R.addEventListener("annotation-filter-toggle",i=>{let e=i.detail?.key,t=n=>n===""?"with":n==="with"?"without":"";if(e==="comment")l.filterComment=t(l.filterComment);else if(e==="fix")l.filterFix=t(l.filterFix);else if(e==="flag")l.filterFlagged=t(l.filterFlagged);else if(e==="duplicates"&&!l.currentWorkspace)l.filterDuplicates=t(l.filterDuplicates);else if(e==="cross-context")l.filterCrossContext=t(l.filterCrossContext);else if(e==="app-stacked")l.filterAppStacked=t(l.filterAppStacked);else if(e==="security")l.filterSecurity=t(l.filterSecurity);else return;k()});R.addEventListener("slide-triage-toggle",i=>{let{kind:e,value:t}=i.detail;if(e==="package")l.packageSlideTriage=l.packageSlideTriage===t?null:t;else if(e==="repository")l.repositorySlideTriage=l.repositorySlideTriage===t?null:t;else return;k()});R.addEventListener("view-mode-change",i=>{if(i.detail.kind==="files"){l.filesViewMode=i.detail.mode,k();return}l.viewMode=i.detail.mode,l.viewMode!=="kanban"&&(l.kanbanPopoverGid=null),l.viewMode!=="focus"&&(l.focusGid=null),k()});R.addEventListener("severity-mode-change",i=>{let e=i.detail?.mode;if(!(e!=="corrected"&&e!=="original")){l.severityMode=e;try{localStorage.setItem(el,e)}catch{}k()}});R.addEventListener("repo-edit-start",()=>{H()||(l.repoEditing=!0,k())});R.addEventListener("repo-input",i=>{H()||(l.repoUrl=i.detail.url,Ii(l.currentFile,l.repoUrl))});R.addEventListener("repo-commit",i=>{H()||(l.repoUrl=i.detail.url,Ii(l.currentFile,l.repoUrl),l.repoEditing=!1,k())});R.addEventListener("repo-cancel",i=>{H()||(l.repoUrl=i.detail.url,Ii(l.currentFile,l.repoUrl),l.repoEditing=!1,k())});document.addEventListener("keydown",i=>{if(i.key==="Escape"){if(l.bundleSourceFindingIdx!=null){l.bundleSourceFindingIdx=null,ii();return}if(l.bundleSourceFile){if(l.currentView==="bundles"&&l.bundleDetailsTab==="code")return;_t(l.bundleDetailsTab),k()}}});function W(i,e){for(let[t,n]of Object.entries(e))i.hasAttribute(t)||i.setAttribute(t,n)}var Pe=Math.PI*2;function _m(i){return()=>{i=i+1831565813|0;let e=i;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}function Ou(i,e,t,n){let r=Math.cos(e),s=Math.sin(e);return Math.min(r>0?(t-i.x)/r:r<0?-i.x/r:1/0,s>0?(n-i.y)/s:s<0?-i.y/s:1/0)}function wm(i){return Math.abs(i.reduce((e,t,n)=>{let r=i[(n+1)%i.length];return e+t.x*r.y-r.x*t.y},0))/2}function Zr(i){return i.slice(1).reduce((e,t,n)=>e+Math.hypot(t.x-i[n].x,t.y-i[n].y),0)}function km(i,e,t,n){let r=i.map(u=>u.x),s=i.map(u=>u.y),o={x:(Math.min(...r)+Math.max(...r))/2,y:(Math.min(...s)+Math.max(...s))/2},c=Math.max(...i.map(u=>Math.hypot(u.x-o.x,u.y-o.y))),d=Math.atan2(o.y-e.y,o.x-e.x);return{center:o,distance:Math.hypot(o.x-e.x,o.y-e.y),dx:Math.cos(d)*(80+n()*200)+(n()-.5)*90,dy:t-o.y+c+40,rotation:(n()-.5)*160,delay:n()*120}}function Bu(i,e,t=7){let n=_m(t),r={x:i*1820/1920,y:e*90/1080},s=Math.hypot(i,e),o=(_,$)=>_<1e-8?0:_>$-1e-8?$:_,c=_=>({x:o(_.x,i),y:o(_.y,e)}),d=Array.from({length:20},(_,$)=>(($+(n()-.5)*.35)*Pe/20+Pe)%Pe);for(let[_,$]of[[0,0],[i,0],[i,e],[0,e]])d.push((Math.atan2($-r.y,_-r.x)+Pe)%Pe);d.sort((_,$)=>_-$);let p=[.045,.29,.58].map(_=>_*Math.min(i,e)).map(_=>d.map($=>{let S=Math.min(_*(.92+n()*.16),Ou(r,$,i,e));return c({x:r.x+Math.cos($)*S,y:r.y+Math.sin($)*S})}));p.push(d.map(_=>{let $=Ou(r,_,i,e);return c({x:r.x+Math.cos(_)*$,y:r.y+Math.sin(_)*$})}));let h=p.map((_,$)=>_.map((S,T)=>{let F=_[(T+1)%_.length],O={x:(S.x+F.x)/2,y:(S.y+F.y)/2},A=Math.hypot(F.x-S.x,F.y-S.y),z=S.x===F.x&&(S.x===0||S.x===i)||S.y===F.y&&(S.y===0||S.y===e),Z=$===p.length-1||z?0:(n()-.5)*A*.08,ne=Math.atan2(O.y-r.y,O.x-r.x);return[S,c({x:O.x+Math.cos(ne)*Z,y:O.y+Math.sin(ne)*Z}),F]})),f=p.slice(1).map((_,$)=>_.map((S,T)=>{let F=p[$][T],O=Math.hypot(S.x-F.x,S.y-F.y),A={x:(F.x+S.x)/2,y:(F.y+S.y)/2},z=(d[T]-d[(T+d.length-1)%d.length]+Pe)%Pe,Z=(d[(T+1)%d.length]-d[T]+Pe)%Pe,ne=Math.min(z,Z)*Math.hypot(A.x-r.x,A.y-r.y),re=(n()-.5)*Math.min(O*.12,ne*.14);return[F,c({x:A.x-Math.sin(d[T])*re,y:A.y+Math.cos(d[T])*re}),S]})),b=[],v=_=>{wm(_)>.01&&b.push({points:_,...km(_,r,e,n)})};v(h[0].flatMap(_=>_.slice(0,-1)));for(let _=0;_<p.length-1;_++)for(let $=0;$<d.length;$++){let S=($+1)%d.length;v([...f[_][$],...h[_+1][$].slice(1),...f[_][S].toReversed().slice(1),...h[_][$].toReversed().slice(1)])}let g=Math.max(...b.map(_=>_.distance));for(let _ of b)_.delay+=_.distance/g*400;let y=[],x=(_,$,S,T)=>{let F=Zr(_);F>.1&&y.push({points:_,length:F,delay:$,duration:S,width:T})};for(let _=0;_<d.length;_++){let $=[r,p[0][_],...f.flatMap(S=>S[_].slice(1))];x($,0,200+Zr($)/s*1e3,1.1)}for(let _ of h.slice(0,-1))for(let $ of _){let S=Math.hypot($[0].x-r.x,$[0].y-r.y);x($,S/s*1e3,220+Zr($)/s*400,.7)}for(let _ of p[1]){let $=Math.atan2(_.y-r.y,_.x-r.x)+(n()-.5)*1.4,S=Math.min(i,e)*(.07+n()*.12),T=[_];for(let F=1;F<=3;F++)T.push(c({x:_.x+Math.cos($+(n()-.5)*.3)*S*F/3,y:_.y+Math.sin($+(n()-.5)*.3)*S*F/3}));x(T,Math.hypot(_.x-r.x,_.y-r.y)/s*1e3+80,220,.5)}return{width:i,height:e,impact:r,pieces:b,cracks:y}}var Nu=`.screen-crack{position:fixed;inset:0;z-index:2147483646;overflow:hidden;pointer-events:none;user-select:none}.screen-crack-svg{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.screen-crack-glass{position:absolute;inset:0;backdrop-filter:blur(9px) brightness(1.06) saturate(.85);background:linear-gradient(135deg,#dcebff0f,#dcebff00 55%);mask-mode:luminance;opacity:0}.screen-crack-shard{transform-box:fill-box;transform-origin:center}.screen-crack-outline{opacity:0}.screen-crack-flash{position:absolute;width:18vmin;height:18vmin;border-radius:50%;background:radial-gradient(circle,rgb(255 255 255 / .85),rgb(200 230 255 / .15) 55%,transparent 75%);transform:translate(-50%,-50%);opacity:0}@media print{.screen-crack{display:none}}
37
- `;var xm="http://www.w3.org/2000/svg",es=1.5,Sm=0;function ge(i,e={}){let t=document.createElementNS(xm,i);for(let[n,r]of Object.entries(e))t.setAttribute(n,String(r));return t}function Cm(i){let e=document.createElement("div");e.className="screen-crack",e.setAttribute("aria-hidden","true");let t=document.createElement("style");t.textContent=Nu;let n=ge("svg",{viewBox:`0 0 ${i.width} ${i.height}`,preserveAspectRatio:"none"});n.classList.add("screen-crack-svg");let r=ge("defs"),s=`screen-crack-mask-${++Sm}`,o=ge("mask",{id:s,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse",x:0,y:0,width:i.width,height:i.height});o.append(ge("rect",{width:i.width,height:i.height,fill:"black"})),r.append(o);let c=ge("g"),d=ge("g"),u=i.pieces.map(b=>{let v=b.points.map(_=>`${_.x},${_.y}`).join(" "),g=ge("g"),y=ge("g");g.classList.add("screen-crack-shard"),y.classList.add("screen-crack-shard"),g.append(ge("polygon",{points:v,fill:"white"}));let x=ge("polygon",{points:v,fill:"none",stroke:"rgb(240 248 255 / .8)","stroke-width":1.1,"stroke-linejoin":"round"});return x.classList.add("screen-crack-outline"),y.append(x),o.append(g),d.append(y),{masked:g,outlined:y,outline:x,piece:b}});n.append(r,c,d);let p=document.createElement("div");p.className="screen-crack-glass";let h=`${document.URL.split("#")[0]}#${s}`;p.style.maskImage=`url("${h}")`,p.style.webkitMaskImage=`url("${h}")`;let f=document.createElement("div");return f.className="screen-crack-flash",f.style.left=`${i.impact.x}px`,f.style.top=`${i.impact.y}px`,e.append(t,p,n,f),{overlay:e,glass:p,cracks:c,shards:u,flash:f}}function Em(i,e,t){for(let n of e.cracks){let r=n.points.map((s,o)=>`${o===0?"M":"L"}${s.x} ${s.y}`).join(" ");for(let s of[!0,!1]){let o=ge("path",{d:r,fill:"none",stroke:s?"rgb(0 0 0 / .55)":"rgb(232 244 255 / .95)","stroke-width":n.width+(s?.8:0),"stroke-linecap":"round","stroke-linejoin":"round"});s&&o.setAttribute("transform","translate(.5 .7)"),o.style.strokeDasharray=`${n.length} ${n.length}`,o.style.strokeDashoffset=String(n.length),i.append(o),t(o,[{strokeDashoffset:String(n.length)},{strokeDashoffset:"0"}],{duration:n.duration*es,delay:n.delay*es,easing:"cubic-bezier(.2,.7,.2,1)"})}}}function zu(i){let e=window.innerHeight,t=window.innerWidth;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||!t||!e||!Element.prototype.animate)return i(),Promise.resolve();let n=Bu(t,e),{overlay:r,glass:s,cracks:o,shards:c,flash:d}=Cm(n);document.body.append(r);let u=document.timeline.currentTime,p=[],h=(T,F,O)=>{let A=T.animate(F,{fill:"both",...O});return A.playbackRate=2,A.startTime=u,p.push(A),A},f=!1,b=!1,v=()=>{b||(b=!0,i())},g=()=>{if(!f){f=!0,window.removeEventListener("resize",g),window.removeEventListener("beforeprint",g),document.removeEventListener("visibilitychange",y),r.remove();for(let T of p)T.cancel();v()}},y=()=>{document.hidden&&g()};window.addEventListener("resize",g,{once:!0}),window.addEventListener("beforeprint",g,{once:!0}),document.addEventListener("visibilitychange",y),Em(o,n,h),h(d,[{opacity:0,transform:"translate(-50%, -50%) scale(0)"},{opacity:.85,transform:"translate(-50%, -50%) scale(.8)",offset:.08},{opacity:0,transform:"translate(-50%, -50%) scale(2.4)"}],{duration:600,easing:"ease-out"}),h(o,[{transform:"translate(0, 0)"},{transform:"translate(-3px, 2px)"},{transform:"translate(3px, -2px)"},{transform:"translate(-2px, -2px)"},{transform:"translate(2px, 2px)"},{transform:"translate(0, 0)"}],{duration:450});let x=Math.max(...n.cracks.map(T=>T.delay+T.duration))*es,_=500,$=Math.max(_,x*.8);h(s,[{opacity:0},{opacity:1}],{duration:_,easing:"ease-out"}),h(d,[{visibility:"visible"},{visibility:"visible"}],{duration:1,delay:$-1}).finished.then(v,()=>{}),h(o,[{opacity:1},{opacity:0}],{duration:450,delay:$,easing:"ease-out"});for(let{masked:T,outlined:F,outline:O,piece:A}of c){let z=$+A.delay,Z=[{transform:"translate(0, 0) rotate(0deg)"},{transform:`translate(${A.dx}px, ${A.dy}px) rotate(${A.rotation}deg)`}];for(let ne of[T,F])h(ne,Z,{duration:1700,delay:z,easing:"cubic-bezier(.32,0,.82,.94)"});h(O,[{opacity:0},{opacity:1}],{duration:250,delay:z})}return Promise.all(p.map(T=>T.finished)).then(g,g)}var qu=`:host{position:absolute;top:.5rem;right:.5rem;z-index:1000;width:30px;height:30px;background:var(--theme-toggle-bg, transparent);color:var(--muted);border:var(--theme-toggle-border, 0);border-radius:var(--ui-radius, 6px);font-size:1rem;line-height:1;font-family:inherit;display:flex;align-items:center;justify-content:center;transition:color .12s,background .12s;cursor:default;user-select:none}:host(:hover){color:var(--text);background:var(--theme-toggle-hover-bg, rgb(from var(--text) r g b / .06))}:host(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media print{:host{display:none!important}}@media(display-mode:window-controls-overlay){:host{-webkit-app-region:no-drag;app-region:no-drag}}
38
- `;var is="deepview.theme",hn=Object.freeze(["dark","light","green","pink","paper"]),ts=Object.freeze(["dark","green","pink","paper","light"]),Rm={dark:{base:"#1a1a1b",dim:"#0a0a0a"},light:{base:"#f6f6fa",dim:"#646464"},green:{base:"#0a140a",dim:"#050a05",sidebar:"#0f1e0f"},pink:{base:"#ffe4ee",dim:"#a3727f",sidebar:"#ffe0f0"},paper:{base:"#ffffff",dim:"#666666"}},ns=window.matchMedia?.("(display-mode: window-controls-overlay)"),Hu=window.matchMedia?.("(display-mode: standalone)"),Uu=window.navigator?.windowControlsOverlay,Lm={light:"\u2600",dark:"\u263E",green:"\u{1F576}\uFE0F",pink:"\u273F",paper:"\u{1F4C4}"},rs="deepview-theme-changed",be="dark",cs=!1,Mm=0,ss=!1,pn=!1,os=0;function Pm(){return ss?ts[(ts.indexOf(be)+1)%ts.length]:be==="light"?"dark":"light"}function as(){window.dispatchEvent(new CustomEvent(rs,{detail:{theme:be}}))}function Am(){try{let i=localStorage.getItem(is);return hn.includes(i)?i:"dark"}catch{return"dark"}}function mn(){let i=document.querySelector('meta[name="theme-color"]');if(!i)return;let{base:e,dim:t,sidebar:n}=Rm[be],r=Uu?.visible??ns?.matches??!1,s=(Hu?.matches||ns?.matches)&&!r;i.setAttribute("content",cs?t:s&&n?n:e)}function Tt(i){hn.includes(i)||(i="dark"),be=i;for(let e of hn)e!=="dark"&&document.body.classList.remove(`theme-${e}`);i!=="dark"&&document.body.classList.add(`theme-${i}`);try{i==="dark"?localStorage.removeItem(is):localStorage.setItem(is,i)}catch{}mn(),as()}Tt(Am());ns?.addEventListener("change",mn);Hu?.addEventListener("change",mn);Uu?.addEventListener("geometrychange",mn);window.addEventListener("beforeprint",()=>{cs=!0,Tt(be)});window.addEventListener("afterprint",()=>{cs=!1,Tt(be)});function ju(i){if(!hn.includes(i))throw new TypeError("unknown theme");os++,Tt(i)}function Vu(){return be}var ls=class extends U{static properties={_theme:{state:!0}};static styles=M(qu);constructor(){super(),this._theme=be}connectedCallback(){super.connectedCallback(),W(this,{role:"button",tabindex:"0","aria-label":"toggle theme"}),this.addEventListener("click",this._toggle),this.addEventListener("keydown",this._onKeydown),window.addEventListener(rs,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(rs,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=be,this.setAttribute("aria-disabled",String(pn))};_toggle=()=>{if(!pn){if(!ss&&++Mm>=8&&be==="dark"){ss=!0,pn=!0,as();let e=os,t=()=>{os===e&&Tt("green")},n=()=>{pn=!1,as()};try{zu(t).catch(t).finally(n)}catch{t(),n()}return}Tt(Pm())}};_onKeydown=e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),e.repeat||this._toggle())};render(){return a`${Lm[this._theme]}`}};customElements.define("theme-toggle",ls);var Ku=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}.row.row-pending{min-height:3rem}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(.link-target) .row{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .row{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host(:first-of-type) .row{border-top-left-radius:var(--ui-radius, 6px);border-top-right-radius:var(--ui-radius, 6px)}:host(:last-of-type) .row{border-bottom-left-radius:var(--ui-radius, 6px);border-bottom-right-radius:var(--ui-radius, 6px)}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit;text-decoration:none;cursor:default}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;min-width:0;margin-left:auto;user-select:none}}.gh-ref-btn{display:inline-flex;align-items:center;position:relative;flex-shrink:0;padding:0 .15rem;color:var(--muted);cursor:default;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}:host(.link-target) .row{animation:none;box-shadow:none!important}.row{break-inside:avoid}.marks{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre{color:#555!important}a,.line-num,.line-num a{color:inherit}}
39
- `;var fn=`:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}.line-num a:hover{color:var(--accent)}
40
- `;var gn=`.tab-level-separator{align-self:center;padding-inline:.125rem;color:var(--muted);font-size:.75rem;line-height:1}.tab{--tab-severity: var(--bg);position:relative;display:inline-flex;align-items:center;gap:.35rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding-block:calc(.35rem - .1em);padding-inline:.5rem;min-width:0;font-family:inherit;font-size:.75rem;line-height:1.3;color:var(--text);background:var(--tab-severity);background-image:linear-gradient(135deg,var(--tab-marker, transparent) 50%,var(--tab-marker-shadow, transparent) 50%,transparent 60%);background-size:12px 12px;background-repeat:no-repeat;background-origin:border-box;&.tab-with-confidence{padding-right:1rem;min-width:3.25rem}&.tab-with-analyzer{padding-right:calc(.5rem + 20px)}&.tab-severity-critical{--tab-severity: var(--critical);color:#fff}&.tab-severity-high{--tab-severity: var(--high);color:#fff}&.tab-severity-medium{--tab-severity: var(--medium);color:#000}&.tab-severity-low{--tab-severity: var(--low);color:var(--badge-low-text)}&.tab-severity-high_bug{--tab-severity: var(--high-bug);color:#fff}&.tab-severity-bug{--tab-severity: var(--bug);color:#fff}&.tab-severity-informational{--tab-severity: var(--info);color:#fff}&.tab-mark-red{--tab-marker: var(--marker-red)}&.tab-mark-blue{--tab-marker: var(--marker-blue)}&.tab-mark-green{--tab-marker: var(--marker-green)}&.tab-mark-gray{--tab-marker: var(--marker-gray)}&:is(.tab-mark-red,.tab-mark-blue,.tab-mark-green,.tab-mark-gray){--tab-marker-shadow: rgb(0 0 0 / .3)}&:hover{border-color:var(--muted)}&.active{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.active:before{content:"";position:absolute;z-index:1;top:-1px;left:-1px;width:12px;height:12px;border-top-left-radius:inherit;background:var(--tab-marker, transparent);clip-path:polygon(0 0,100% 0,0 100%);pointer-events:none}&.tab-with-analyzer:is(:hover,.active):after{content:"";position:absolute;inset:-1px;border:1px solid var(--muted);border-radius:inherit;pointer-events:none}&.tab-with-analyzer.active:after{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-inprogress .tab-label:after{content:" \\25d0";opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-label{display:flex;align-items:center;gap:.35rem;text-align:left}.tab-conf{position:absolute;right:.25rem;bottom:.15rem;font-size:.6rem;line-height:1;color:inherit}.tab-analyzer{position:absolute;inset:-1px -1px -1px auto;width:20px;display:flex;overflow:hidden;border-radius:var(--ui-radius, 0 4px 4px 0);box-shadow:0 0 2px #0003}.tab-analyzer .report-logo{flex:1;border:0}.tab-analyzer svg{display:block}.tab-conf-max{display:none}.tab-severity{display:inline-flex}.badge{padding:0;background:none;color:inherit}.tab-indicators{display:inline-flex;align-items:center;gap:.25rem}.tab-indicators:empty{display:none}.tab-marks{display:inline-flex;align-items:center;gap:.15rem;color:inherit}.tab-marks svg{display:block}.tab-marks :is(.bubble,.wrench,.flag-cloth){fill:currentcolor;fill-opacity:.15}.badge-corr-mark{color:inherit}}
41
- `;var bn=`.report-button{display:inline-flex;align-items:center;max-width:16rem;padding:0;overflow:hidden;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);color:var(--muted);font:inherit;font-size:.7rem;text-decoration:none;cursor:default;transition:border-color .12s,color .12s;&:hover{border-color:var(--accent);color:var(--accent)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.report-button-label{min-width:0;padding:.1rem .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
42
- `;var vn=`a{cursor:default}.finding-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.25rem 1rem;min-width:0;max-width:100%}.finding-action-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem;max-width:100%}.finding-actions .report-chip{flex:0 1 auto;width:max-content;min-width:0;max-width:100%;min-height:1.4rem}.finding-actions .report-chip-label{white-space:normal;overflow-wrap:anywhere;text-align:left}
43
- `;var Nm=["is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","selected"],ds=class extends D{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=[M($t),M(bn),M(fn),M(Ku),M(vn),M(gn)];_near=!1;_watching=!1;constructor(){super(),this.group=null,this.selected=!1}render(){if(!this.group)return a``;if(this.dataset.gid=Ze(this.group),!this._near)return this.classList.toggle("selected",this.selected),a`<div class="row row-pending" aria-busy="true"></div>`;let e=new Set(Sc(this.group));this.selected&&e.add("selected");for(let t of Nm)this.classList.toggle(t,e.has(t));return a`<div class="row">${Cc(this.group)}</div>`}connectedCallback(){super.connectedCallback(),ht(this.renderRoot),this.addEventListener("click",this._onClick),this._watching=!0,xt(this,e=>this._onNear(e))}disconnectedCallback(){this.removeEventListener("click",this._onClick),this._watching&&(Le(this),this._watching=!1),super.disconnectedCallback()}_onNear(e){e?(this._watching&&(Le(this),this._watching=!1),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:e=!1}={}){return this._near||this._onNear(!0),e&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}_onClick=e=>{e.composedPath().some(n=>n?.matches?.("a, button, label"))||this.dataset.gid&&this.dispatchEvent(new CustomEvent("row-select",{detail:{gid:this.dataset.gid},bubbles:!0,composed:!0}))}};customElements.define("finding-row",ds);var Gu=`:host{display:block;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;box-shadow:var(--shadow-glass);margin-bottom:1rem;max-width:1200px}@media not print{finding-row{content-visibility:auto;contain-intrinsic-size:auto 3.2rem}}
44
- `;var us=class extends U{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=M(Gu);constructor(){super(),this.items=[],this.selectedGid=null}render(){return a`${ce(this.items??[],e=>Ze(e),e=>a`<finding-row .group="${e}" ?selected="${Ze(e)===this.selectedGid}"></finding-row>`)}`}};customElements.define("finding-table",us);var Wu=`:host{display:block}:host(.hidden){display:none}:host([lazy]:not(.content-ready)){visibility:hidden}.card{padding:.5rem .75rem;padding-bottom:var(--finding-card-pad-bottom, .5rem);border-bottom:1px solid var(--border);font-size:.875rem;display:var(--finding-card-display, block);flex-direction:column;flex:1}:host(:last-child) .card{border-bottom:none}.card.card-pending{min-height:8rem}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host(.has-conflict[popup][context="kanban-detail"]) .card{outline:none}:host(.link-target) .card{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .card{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host([in-group]) .line-row{display:none}@media not print{:host([in-group]) .line-row+*{margin-top:0}:host([in-group]) .line-row+:is(.conf-reason,.revalidate-verdict,.severity-reason){padding-top:0;border-top:0}}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.tab-body>:not(.finding-left){min-width:0;overflow-wrap:break-word}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-wrap;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.section,.evidence,.recommendation{grid-column:2;margin-top:.55rem;font-size:.92em}.section-label{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-weight:600;font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;&:before{content:"";flex:none;width:2px;height:.58rem;margin-left:calc((2px + .3rem)*-1);border-radius:1px;background:currentcolor;opacity:.75;-webkit-print-color-adjust:exact;print-color-adjust:exact}}.code-preview-btn{display:inline-flex;align-items:center;margin-left:.35rem;padding:0 .15rem;border:0;background:transparent;color:var(--muted);vertical-align:-2px;&.open{color:var(--accent)}}.gh-ref-btn{display:inline-flex;align-items:center;margin-left:.25rem;padding:0 .15rem;color:var(--muted);vertical-align:-2px}:is(.code-preview-btn,.gh-ref-btn){position:relative;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.code-preview-tip{position:absolute;z-index:20;top:100%;left:0;margin-top:.3rem;width:max-content;max-width:min(100%,46rem);visibility:hidden;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .35));background:var(--bg);border-radius:var(--ui-radius, 4px);.code-preview{margin:0}}:is(.line-row,.evidence-list li):has(.code-preview-btn:is(:hover,:focus-visible))>.code-preview-tip{visibility:visible}.code-preview{margin:.3rem 0 .1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);backdrop-filter:var(--glass-blur);max-height:calc(10lh + .7rem);overflow:auto;display:flex;align-items:flex-start;white-space:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;line-height:1.5}.code-preview-pending{display:block;padding:.35rem .5rem;color:var(--muted);font-style:italic}.code-preview-gutter{flex:none;padding:.35rem .45rem .35rem .5rem;border-right:1px solid var(--border);color:var(--muted);text-align:right;user-select:none;position:sticky;left:0;z-index:1;background-color:var(--bg);background-image:linear-gradient(rgb(from var(--text) r g b / .03),rgb(from var(--text) r g b / .03)),linear-gradient(var(--surface),var(--surface));.code-preview-lineno{width:var(--lineno-width, 3ch);opacity:.7}.cited{opacity:1;color:var(--accent);font-weight:600}}.code-preview-source{margin:0;padding:.35rem .6rem;white-space:pre;color:var(--text);font:inherit;& code{font:inherit}}summary.section-label{cursor:default;list-style:none;&::-webkit-details-marker{display:none}&:after{content:"";flex:none;width:.3rem;height:.3rem;margin-left:.05rem;border-right:1.5px solid currentcolor;border-bottom:1.5px solid currentcolor;transform:translateY(-1px) rotate(-45deg);transition:transform .12s;opacity:.8}}details[open]>summary.section-label:after{transform:translateY(-2px) rotate(45deg)}.evidence-count{font-weight:500;opacity:.8}.section-body{white-space:pre-wrap;line-height:1.55;color:rgb(from var(--text) r g b / .82);margin-top:.1rem}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.recommendation .section-label,.recommendation .section-body{color:var(--green)}.conf-reason,.revalidate-verdict{grid-column:2;white-space:pre-wrap;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.revalidate-stamp{display:inline-block;margin-top:.1rem;font-size:.55rem;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.03em;padding:.14rem .3rem;border-radius:3px;background:transparent;color:var(--muted);border:1px solid var(--border);white-space:nowrap;&.confirmed{color:var(--critical);border-color:rgb(from var(--critical) r g b / .55)}&.partial{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .55)}&.unknown{color:var(--warning);border-color:rgb(from var(--warning) r g b / .55)}}.evidence-list{margin:.25rem 0 0;padding-left:1.6rem;display:flex;flex-direction:column;gap:.15rem;>li{position:relative}& li::marker{color:var(--muted);font-size:.9em}>li.current:before{content:"";position:absolute;left:-1.5rem;top:.58em;width:.35rem;height:.35rem;border-radius:50%;background:var(--accent)}>li.current::marker{color:var(--accent)}& li:has(.evidence-note):not(:last-child){margin-bottom:.3rem}}.evidence-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;overflow-wrap:anywhere;color:var(--accent);text-decoration:none;&:is(a,[role=link]):hover{text-decoration:underline}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}:is(.line-num a,.evidence-ref,.gh-ref-btn){cursor:default}span.evidence-ref:not([role]){color:var(--muted)}.evidence-note{white-space:pre-wrap;line-height:1.5;color:rgb(from var(--text) r g b / .78);margin-top:.1rem}.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a{color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.code-block:not(.token){white-space:normal;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.45rem .6rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;line-height:1.5;color:var(--text)}& code{font:inherit}}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding-right:var(--finding-line-end-inset, 0);position:relative}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 999px);color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;position:var(--finding-marks-position, static);bottom:0;background:var(--finding-marks-bg, transparent);padding-bottom:var(--finding-marks-pad-bottom, 0);padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;padding-top:var(--finding-left-inset, 0);position:var(--finding-left-position, relative);top:var(--finding-mark-sticky-top, 0);.value-label:last-child{margin-bottom:0}}:host(:not([popup])) .finding-left{padding-top:calc(var(--finding-left-inset, 0px) + 2px)}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.severity-reason{margin-top:.4rem;padding-top:.35rem;border-top:1px dashed var(--border);font-size:.82em;font-style:italic;color:var(--muted)}.severity-reason-label{font-style:normal;font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.04em;margin-right:.35rem}.duplicates-block .file-icon{flex-shrink:0}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:not(:disabled):hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-inprogress.active{background:rgb(from var(--warning, #d97706) r g b / .12);border-color:var(--warning, #d97706);color:var(--warning, #d97706)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:var(--finding-marks-margin-top, .65rem);padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-flag,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-link,:host([context="focus"]) .mark-issue,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}.finding-top-marks{position:absolute;top:calc(var(--finding-left-inset, 0px) - var(--finding-mark-inset, .5rem));left:calc(.75rem - var(--finding-mark-inset, .5rem));display:grid;grid-template-columns:24px 12px;column-gap:31px;&.color-red{color:var(--marker-red)}&.color-blue{color:var(--marker-blue)}&.color-green{color:var(--marker-green)}&.color-gray{color:var(--marker-gray)}}.finding-color-mark{grid-column:1;display:block;width:24px;height:12px;border-radius:var(--ui-radius, 0 0 6px 6px);background:currentcolor;box-shadow:inset 0 0 0 1px rgb(from var(--text) r g b / .15)}.finding-bookmark-mark{grid-column:2;display:block;width:12px;height:12px;background:var(--bookmark-color);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%)}:host(:not([popup])) :is(.finding-color-mark,.finding-bookmark-mark){height:10px}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.comment-block:has(.managed-comment){white-space:normal}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.fix-block:has(managed-fix-link){display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--muted) r g b / .04);word-break:normal;.fix-label{flex:none;font-size:.75rem;font-weight:500}& managed-fix-link{flex:1;min-width:0}}.duplicates-block{display:flex;align-items:baseline;flex-wrap:wrap;gap:.1rem .4rem;margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--muted);background:rgb(from var(--muted) r g b / .1);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text);.duplicates-label{color:var(--muted);font-weight:600}& a.duplicate-ref{display:inline-flex;align-items:center;gap:.25rem;color:var(--accent);text-decoration:none}& a.duplicate-ref .duplicate-ref-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;text-decoration:underline dotted;text-underline-offset:2px}& a.duplicate-ref:hover .duplicate-ref-id{text-decoration:underline solid}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit;text-decoration:none}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:var(--finding-print-break, avoid);box-decoration-break:clone;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-link,.mark-issue,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.link-target) .card{animation:none;box-shadow:none!important}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important;break-inside:var(--finding-print-break, avoid)}:host(.multi-case) .tab-body{break-inside:auto}:host(.multi-case) .tab-body+.tab-body{break-inside:avoid}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([print-one-sample]) .tab-body:not(.active),:host([print-one-sample]) .print-case-label,:host([print-one-sample]) .card:before{display:none!important}:host([print-one-sample]) .tab-body.active{margin-top:0;padding-top:0;border-top:0;break-inside:var(--finding-print-break, avoid)}.finding-body{display:flex;flex-direction:column;>*{flex-shrink:0}}.line-row,.desc-title,.conf-reason,.severity-reason{break-inside:avoid}.section-label{break-after:avoid}.desc,.section-body{orphans:2;widows:2}.section,.recommendation,.evidence{break-inside:avoid}.evidence{order:99}.evidence>summary{break-after:avoid}.evidence-list>li{break-inside:avoid}:host([in-group].multi-case:not([print-one-sample])) .tab-body .line-row{display:flex}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+*{margin-top:0}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+.conf-reason{padding-top:0;border-top:0}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;break-after:avoid;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies,.revalidate-stamp{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre,.severity-reason{color:#555!important}a,.line-num,.line-num a,.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a,.evidence-ref{color:inherit}details:not([open])>:not(summary){display:block}details::details-content{content-visibility:visible}summary.section-label{cursor:default;&:after{display:none}}.code-preview-btn,.gh-ref-btn{display:none}.inline-code{border:0;background:transparent}.code-block:not(.token){background:transparent;border-color:#bbb;.code-block-lang{color:#555;border-bottom-color:#bbb}& pre{white-space:pre-wrap;overflow:visible}.token{color:#333!important}.token.comment,.token.prolog,.token.cdata{color:#666!important}}}
45
- `;var Hm=["finding","is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","multi-case"],ps=class extends D{static properties={group:{attribute:!1},inGroup:{type:Boolean,attribute:"in-group",reflect:!0},context:{type:String,reflect:!0},lazy:{type:Boolean}};static styles=[M($t),M(bn),M(fn),M(Wu),M(vn),M(gn),M(kt),M(Ti)];_near=!1;_watched=null;constructor(){super(),this.group=null,this.inGroup=!1,this.context=null,this.lazy=!1}render(){if(!this.group)return a``;if(this.dataset.gid=Ze(this.group),this.lazy&&!this._near)return this.classList.add("finding"),a`<div class="card card-pending" aria-busy="true"></div>`;let e=new Set($c(this.group));for(let t of Hm)this.classList.toggle(t,e.has(t));return a`<div class="card">${xc(this.group,{context:this.context})}</div>`}updated(){this.classList.toggle("content-ready",!!this.group&&(!this.lazy||this._near));for(let e of this.renderRoot.querySelectorAll(".code-preview")){let t=e.dataset.revealedTo;if(t!==void 0&&Math.round(e.scrollTop)!==Number(t))continue;let n=e.querySelectorAll(".code-preview-lineno.cited");n.length!==0&&(Hi(e,n),e.dataset.revealedTo=String(Math.round(e.scrollTop)))}}connectedCallback(){if(super.connectedCallback(),ht(this.renderRoot),this.lazy){this._watched=this.closest(".flat-group")??this,xt(this._watched,e=>this._onNear(e));return}this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this._watched&&(Le(this._watched),this._watched=null),super.disconnectedCallback()}_onNear(e){e?(this._watched&&(Le(this._watched),this._watched=null),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:e=!1}={}){return this.lazy&&!this._near&&this._onNear(!0),e&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}};customElements.define("finding-card",ps);var Yu=`:host{display:inline-flex;gap:4px;align-items:center;flex-shrink:0}button{width:14px;height:14px;user-select:none;padding:0;background:transparent;border:1.5px solid currentcolor;border-radius:var(--ui-radius, 50%);opacity:.55;transition:opacity .12s,transform .12s}button:not(:disabled):hover{opacity:1;transform:scale(1.12)}button:disabled{opacity:.25}button.active{background:currentcolor;opacity:1;box-shadow:0 0 0 2px var(--surface),0 0 0 3px currentcolor}.color-red{color:var(--marker-red)}.color-blue{color:var(--marker-blue)}.color-green{color:var(--marker-green)}.color-gray{color:var(--marker-gray)}
46
- `;var jm=["red","blue","green","gray"],hs=class extends U{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=M(Yu);constructor(){super(),this.selected=null,this.disabled=!1}render(){return a`${jm.map(e=>a`<button type="button" class="${`color-${e}${this.selected===e?" active":""}`}" data-color="${e}" aria-label="${`mark ${e}`}" ?disabled="${this.disabled}" @click="${this._onClick}"></button>`)}`}_onClick=e=>{if(this.disabled)return;let t=e.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent("mark-color",{detail:{color:t},bubbles:!0,composed:!0}))}};customElements.define("color-marker",hs);var ms=class extends D{static properties={rangeDisabled:{type:Boolean,attribute:"range-disabled"},revalidateOptions:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.rangeDisabled=!1,this.revalidateOptions=[],this.hasPartial=!1}render(){let e=l.filterConfMin,t=l.filterConfMax,n=this.revalidateOptions??[],r=this.rangeDisabled,s=n.length>0&&!!l.filterRevalidate,o=r?"No confidence range: some findings on screen carry no confidence score":m;return a`<span class="${I({"conf-range-label":!0,replaced:s,disabled:r})}" data-tooltip="${o}">Confidence</span> <span class="${I({"conf-range":!0,replaced:s,disabled:r})}" ?inert="${r||s}"><range-slider id="conf-range" min="0" max="10" step="1" low="${e}" high="${t}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${e}" .high="${t}"></conf-range-mirror></span>${n.length>0?a`<revalidate-filter class="${I({replaces:s})}" .options="${n}" ?has-partial="${this.hasPartial}"></revalidate-filter>`:m}`}};customElements.define("conf-filter",ms);var Xu={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026",largest:"Filter largest files\u2026"},Ju={files:"Filter files",code:"Search code",issues:"Search issues",largest:"Largest files"},Vm=a`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,Km={files:ji,code:Vi,issues:a`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`,largest:a`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="M2.5 4h11M2.5 8h7.5M2.5 12h4"/></svg>`},fs=class extends D{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let e=l.bundleCodeSearchQuery,t=l.bundleCodeSearchMode,n=this.modes.includes(t)?t:"files",r=Xu[n]??Xu.files;return a`${Vm} <input type="text" class="bundle-code-search-input" placeholder="${r}" aria-label="${r}" .value="${j(e)}" @input="${this._onInput}"> ${e?a`<button type="button" class="bundle-code-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:m} ${this.modes.length>0?a`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(s=>a`<button type="button" class="${I({"bundle-code-search-mode":!0,active:n===s})}" role="tab" aria-selected="${String(n===s)}" data-tooltip="${Ju[s]??s}" aria-label="${Ju[s]??s}" @click="${()=>this._selectMode(s)}">${Km[s]??m}</button>`)}</span>`:m}`}_onInput=e=>{this._dispatchInput(e.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(e){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-code",value:e},bubbles:!0,composed:!0}))}_selectMode(e){this.dispatchEvent(new CustomEvent("bundle-search-mode-change",{detail:{mode:e},bubbles:!0,composed:!0}))}};customElements.define("bundle-code-search",fs);var Rt=320,gs=class extends HTMLElement{constructor(){super(),this._drag=null,this.addEventListener("pointerdown",e=>this._startDrag(e)),this.addEventListener("pointermove",e=>{this._drag?.id===e.pointerId&&(Rt=this._apply(this._drag.width+e.clientX-this._drag.x))});for(let e of["pointerup","pointercancel","lostpointercapture"])this.addEventListener(e,t=>{this._drag?.id===t.pointerId&&this._endDrag()});this.addEventListener("keydown",e=>this._onKeyDown(e)),this.addEventListener("dblclick",()=>{Rt=320,this._apply(Rt)})}connectedCallback(){this._view=this.closest(".bundle-code-view"),this._view&&(this._observer=new ResizeObserver(()=>this._apply(Rt)),this._observer.observe(this._view),this._apply(Rt))}disconnectedCallback(){this._observer?.disconnect(),this._endDrag(),this._view=null}_bounds(){let e=this._view.getBoundingClientRect().width;return{min:Math.min(180,e*.4),max:e*.6}}_apply(e){if(!this._view)return e;let{min:t,max:n}=this._bounds();if(n===0)return e;let r=Math.max(t,Math.min(n,e));return this._view.style.setProperty("--bundle-code-rail-width",`${r}px`),this.setAttribute("aria-valuemin",String(Math.round(t))),this.setAttribute("aria-valuemax",String(Math.round(n))),this.setAttribute("aria-valuenow",String(Math.round(r))),this.setAttribute("aria-valuetext",`${Math.round(r)} pixels`),r}_startDrag(e){if(e.button!==0||!e.isPrimary||this._drag||!this._view)return;e.preventDefault();let t=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width;this._drag={id:e.pointerId,x:e.clientX,width:t},this.setPointerCapture(e.pointerId),this.classList.add("dragging")}_endDrag(){if(!this._drag)return;let{id:e}=this._drag;this._drag=null,this.classList.remove("dragging"),this.hasPointerCapture(e)&&this.releasePointerCapture(e)}_onKeyDown(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||!this._view)return;let t=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width,{min:n,max:r}=this._bounds(),s={ArrowLeft:t-16,ArrowRight:t+16,Home:n,End:r}[e.key];s!==void 0&&(e.preventDefault(),e.stopPropagation(),Rt=this._apply(s))}};customElements.define("bundle-code-splitter",gs);var bs=class extends HTMLElement{connectedCallback(){this._schedule=()=>{this._frame||(this._frame=requestAnimationFrame(()=>this._update()))},this._resize=new ResizeObserver(this._schedule),this._resize.observe(this),this._mutation=new MutationObserver(this._schedule),this._mutation.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["hidden"]}),this._mode=matchMedia("(display-mode: window-controls-overlay)"),this._mode.addEventListener("change",this._schedule),navigator.windowControlsOverlay?.addEventListener("geometrychange",this._schedule),this._schedule()}disconnectedCallback(){cancelAnimationFrame(this._frame),this._frame=0,this._resize.disconnect(),this._mutation.disconnect(),this._mode.removeEventListener("change",this._schedule),navigator.windowControlsOverlay?.removeEventListener("geometrychange",this._schedule)}_update(){this._frame=0,this.classList.remove("boxed");let e=this.querySelector(".bundles-slide-bar");if(!e)return;this._resize.observe(e);let t=this.querySelector(".bundles-slide-tabs");t&&this._resize.observe(t);let n=parseFloat(getComputedStyle(this,"::before").height)||0;if(!n)return;let r=this.getBoundingClientRect(),s=e.getBoundingClientRect();this.classList.toggle("boxed",s.top>r.top+1||s.height>n+1)}};customElements.define("bundle-slide-header",bs);var Gm=a`<svg class="bundle-search-icon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,vs=class extends D{createRenderRoot(){return this}render(){let e=l.bundleSearchQuery,t=l.bundleSearchRegex,n=l.bundleSearchCase,r=t?"Search by regular expression\u2026":"Search all source\u2026";return a`${Gm} <input type="text" class="bundle-search-input" placeholder="${r}" aria-label="${r}" spellcheck="false" autocapitalize="off" autocomplete="off" .value="${j(e)}" @input="${this._onInput}"> ${e?a`<button type="button" class="bundle-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:m} <span class="bundle-search-mods"><button type="button" class="${I({"bundle-search-mod":!0,active:n})}" data-tooltip="${n?"Case-sensitive on \u2014 click to ignore case":"Match case"}" aria-label="Match case" aria-pressed="${String(n)}" @click="${this._onToggleCase}">Aa</button> <button type="button" class="${I({"bundle-search-mod":!0,active:t})}" data-tooltip="${t?"Regular expression on \u2014 click for plain text":"Match by regular expression"}" aria-label="Match by regular expression" aria-pressed="${String(t)}" @click="${this._onToggleRegex}">.*</button></span>`}_onInput=e=>{this._dispatchInput(e.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(e){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-search",value:e},bubbles:!0,composed:!0}))}_onToggleRegex=()=>{this.dispatchEvent(new CustomEvent("bundle-search-regex-toggle",{bubbles:!0,composed:!0}))};_onToggleCase=()=>{this.dispatchEvent(new CustomEvent("bundle-search-case-toggle",{bubbles:!0,composed:!0}))}};customElements.define("bundle-search",vs);function Se(i,e,t){let n=e[t];return n||console.warn(`<${i}>: unknown kind ${JSON.stringify(t)}; expected one of ${Object.keys(e).map(r=>JSON.stringify(r)).join(", ")}.`),n}var Wm={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},ys=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let e=Se("entity-search",Wm,this.kind);return e?a`<input type="search" class="packages-search" placeholder="${`${e.label}\u2026`}" aria-label="${e.label}" .value="${j(l[e.stateKey])}" @input="${this._onInput}">`:m}_onInput=e=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-search",ys);var Ym=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],Xm={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},_s=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let e=Se("entity-sort",Xm,this.kind);return e?a`<select class="packages-sort" aria-label="${e.aria}" .value="${j(l[e.stateKey])}" @change="${this._onChange}">${Ym.map(([t,n])=>a`<option value="${t}" ?selected="${l[e.stateKey]===t}">${n}</option>`)}</select>`:m}_onChange=e=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-sort",_s);var ws=class extends D{static properties={showFile:{type:Boolean,attribute:"show-file"},showConfidence:{type:Boolean,attribute:"show-confidence"},showPriority:{type:Boolean,attribute:"show-priority"}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let e=(t,n)=>a`<option value="${t}" ?selected="${l.sortBy===t}">${n}</option>`;return a`<select class="sort-select" aria-label="Sort findings" .value="${j(l.sortBy)}" @change="${this._onChange}">${e("severity","Severity \u2193")} ${this.showFile?e("file","File \u2191"):m} ${this.showConfidence?a`${e("confidence-desc","Confidence \u2193")}${e("confidence-asc","Confidence \u2191")}`:m} ${this.showPriority?a`${e("priority-desc","Priority \u2193")}${e("priority-asc","Priority \u2191")}`:m}</select>`}_onChange=e=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:"findings",value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define("findings-sort",ws);var Qu=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:var(--ui-radius, 99px);background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}
47
- `;var ks=class extends U{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=M(Qu);constructor(){super(),this.min=0,this.max=100,this.step=1,this.low=0,this.high=100}willUpdate(){this.low<this.min&&(this.low=this.min),this.high>this.max&&(this.high=this.max),this.low>this.high&&(this.low=this.high)}render(){let e=this.max-this.min||1,t=(this.low-this.min)/e*100,n=(this.high-this.min)/e*100;return a`<div class="track-wrap" style="${`--low:${t}%;--high:${n}%`}"><div class="track"></div><input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"> <input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"></div>`}firstUpdated(){this._inputs=[...this.renderRoot.querySelectorAll('input[type="range"]')],this._inputs[0].value=this.low,this._inputs[1].value=this.high}updated(e){if(!this._inputs||!(e.has("low")||e.has("high")))return;let t=this._inputs.map(o=>Number(o.value)),n=t[0]>t[1],r=n?1:0,s=n?0:1;this.low!==t[r]&&(this._inputs[r].value=this.low),this.high!==t[s]&&(this._inputs[s].value=this.high)}_onInput=()=>{let e=Number(this._inputs[0].value),t=Number(this._inputs[1].value);this.low=Math.min(e,t),this.high=Math.max(e,t),this._emit("range-input")};_onChange=()=>{this._emit("range-change")};_emit(e){this.dispatchEvent(new CustomEvent(e,{detail:{low:this.low,high:this.high},bubbles:!0,composed:!0}))}};customElements.define("range-slider",ks);var $s=class extends U{static properties={low:{type:Number},high:{type:Number},for:{type:String}};createRenderRoot(){return this}constructor(){super(),this.low=0,this.high=10,this.for="conf-range",this._dragging=!1,this._liveLow=0,this._liveHigh=10}connectedCallback(){super.connectedCallback(),document.addEventListener("range-input",this._onRangeInput),document.addEventListener("range-change",this._onRangeChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("range-input",this._onRangeInput),document.removeEventListener("range-change",this._onRangeChange)}willUpdate(e){this._dragging&&(e.has("low")&&this.low!==this._liveLow&&(this.low=this._liveLow),e.has("high")&&this.high!==this._liveHigh&&(this.high=this._liveHigh))}_onRangeInput=e=>{e.target?.id===this.for&&(this._dragging=!0,this._liveLow=e.detail.low,this._liveHigh=e.detail.high,this.low=e.detail.low,this.high=e.detail.high)};_onRangeChange=e=>{e.target?.id===this.for&&(this._dragging=!1)};render(){return a`<span>${this.low}</span><span class="dash">–</span><span>${this.high}</span>`}};customElements.define("conf-range-mirror",$s);var Zu=`dialog{max-width:560px;width:min(94vw,560px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .9rem;color:var(--muted);font-size:.82rem}hr{border:0;border-top:1px solid var(--border);margin:.9rem 0}.section h4{margin:0 0 .25rem;font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.section p{margin:0 0 .55rem;color:var(--muted);font-size:.78rem}.section button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}&:disabled{opacity:.5}}input[type=file]{display:block;color:var(--text);font:inherit;font-size:.78rem;margin-bottom:.5rem}.error{margin:.5rem 0;padding:.4rem .6rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 5px);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text);font-size:.78rem}.summary{margin:.5rem 0;font-size:.82rem;& strong{color:var(--text)}.meta{margin-left:.4rem;color:var(--muted);font-size:.74rem}}.mode{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem;margin:.55rem 0 .7rem;display:flex;flex-direction:column;gap:.35rem}.mode legend{padding:0 .35rem;font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.mode label{display:flex;align-items:flex-start;gap:.5rem;font-size:.82rem;& em{color:var(--muted);font-style:normal;font-size:.74rem}}.status{margin:.8rem 0 0;padding:.4rem .6rem;border-radius:5px;font-size:.78rem;&.status-ok{border:1px solid var(--accent);background:rgb(from var(--accent) r g b / .08);color:var(--text)}&.status-err{border:1px solid var(--critical, #f87171);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text)}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}}
48
- `;var xs=class extends q{static styles=[...q.styles,M(Zu)];static properties={parsed:{state:!0},parseError:{state:!0},mode:{state:!0},busy:{state:!0},status:{state:!0}};constructor(){super(),this.parsed=null,this.parseError=null,this.mode="prefer-current",this.busy=!1,this.status=null}focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}async _onDownload(){this.busy=!0,this.status=null;try{let{blob:e,filename:t}=await vl();We(e,t),this.status={kind:"ok",text:`Downloaded ${t}`}}catch(e){this.status={kind:"err",text:`Export failed: ${e.message}`}}finally{this.busy=!1}}async _onFile(e){let t=e.target.files?.[0];if(this.parsed=null,this.parseError=null,this.status=null,!!t)try{this.parsed=await yl(t)}catch(n){this.parseError=n.message}}_onMode(e){this.mode=e.target.value}async _onApply(){if(!(!this.parsed||this.busy||Ut())){this.busy=!0,this.status=null;try{let e=await _l(this.parsed,this.mode);k(),this.status=e.repoUrlError?{kind:"err",text:`Applied ${e.triageEntries} triage entries (${this.mode}), but saving repo URLs failed: ${e.repoUrlError.message}`}:{kind:"ok",text:`Applied ${e.triageEntries} triage entries and ${e.repoUrls} repo URLs (${this.mode}).`},this.parsed=null;let t=this.renderRoot.querySelector('input[type="file"]');t&&(t.value="")}catch(e){this.status={kind:"err",text:`Import failed: ${e.message}`}}finally{this.busy=!1}}}render(){return a`<dialog @close="${this._onClose}"><header><h3>Triage backup</h3><p>Bundles every triage entry (markers, triage states, comments, fixes, per-report ignores) and all saved repo URLs into a single gzipped JSON file.</p></header><section class="section"><h4>Export</h4><p>Download the current triage + repo-URL set as a portable backup.</p><button type="button" class="primary" @click="${this._onDownload}" ?disabled="${this.busy}">${this.busy?"Working\u2026":"Download backup"}</button></section>${Ut()?m:this._importTemplate()} ${this.status?a`<div class="${`status status-${this.status.kind}`}">${this.status.text}</div>`:m}<footer class="actions"><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}_importTemplate(){let e=this.parsed;return a`<hr><section class="section"><h4>Import</h4><p>Pick a previously-exported backup. Nothing is applied until you click Apply.</p><input type="file" accept=".gz,application/gzip" @change="${this._onFile}" ?disabled="${this.busy}"> ${this.parseError?a`<div class="error">Failed to parse: ${this.parseError}</div>`:m} ${e?a`<div class="summary">Found <strong>${Object.keys(e.triage).length}</strong> triage entries and <strong>${Object.keys(e.repoUrls).length}</strong> repo URLs. ${e.exportedAt?a`<span class="meta">Exported ${e.exportedAt}.</span>`:m}</div><fieldset class="mode"><legend>Merge mode</legend><label><input type="radio" name="te-mode" value="prefer-current" .checked="${this.mode==="prefer-current"}" @change="${this._onMode}"> <span>Merge — keep current on conflict <em>(safest, only fills gaps)</em></span></label> <label><input type="radio" name="te-mode" value="prefer-imported" .checked="${this.mode==="prefer-imported"}" @change="${this._onMode}"> <span>Merge — prefer imported on conflict <em>(overwrites where both have a value)</em></span></label> <label><input type="radio" name="te-mode" value="replace" .checked="${this.mode==="replace"}" @change="${this._onMode}"> <span>Replace all <em>(drops every current persisted entry first — destructive)</em></span></label></fieldset><button type="button" class="primary" @click="${this._onApply}" ?disabled="${this.busy}">${this.busy?"Applying\u2026":"Apply import"}</button>`:m}</section>`}};customElements.define("triage-export-dialog",xs);function ep(){return Y("triage-export-dialog")}var tp=`:host{display:inline-flex;vertical-align:middle;position:relative}.chip{display:inline-flex;align-items:center;gap:.375rem;cursor:default;user-select:none;position:relative;min-height:24px;box-sizing:border-box;padding:.125rem .375rem .125rem .5rem;background:var(--surface);border:var(--header-tag-border, 1px solid var(--border));border-radius:var(--ui-radius, 999px);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:500}.chip svg{color:var(--muted);flex-shrink:0}.chip.empty:hover{border-color:var(--accent)}.chip.empty .label{color:var(--muted);font-style:italic}.chip.readonly{padding-right:.5rem}.chip.copied:after{content:"Copied";position:absolute;inset:0;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border-radius:var(--ui-radius, 999px);color:var(--text);font-weight:400;white-space:nowrap;pointer-events:none}.edit-btn{width:18px;height:18px;display:grid;place-items:center;padding:0;margin-left:.125rem;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted)}.edit-btn:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}@media(display-mode:window-controls-overlay){.edit-btn,input{-webkit-app-region:no-drag;app-region:no-drag}}.chip[inert]{visibility:hidden;min-width:19rem}input{position:absolute;inset:0;box-sizing:border-box;padding:0 .55rem;background:var(--surface);border:1px solid var(--accent);border-radius:var(--ui-radius, 999px);color:var(--text);font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:400;outline:none}@media print{.chip{color:#000!important;border:0!important}.chip svg{color:#000!important}.edit-btn,input{display:none!important}}
49
- `;var Ss=a`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,ip=a`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,Cs=class extends U{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=M(tp);constructor(){super(),this.url="",this.editable=!1,this.editing=!1,this._copied=!1,this._opener=""}render(){if(this.editable&&this.editing){let e=!!this.url,t=e?Ye(this.url):"Set repo";return a`<span class="${e?"chip":"chip empty"}" aria-hidden="true" inert>${Ss} <span class="label">${t}</span> <button type="button" class="edit-btn">${ip}</button> </span><input type="text" .value="${j(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let e=!!this.url,t=e?Ye(this.url):"Set repo",n=e?this._copied?"chip copied":"chip":"chip empty";return a`<span class="${n}" @click="${e?null:this._onEdit}">${Ss} ${e?this._slugLabel(t):a`<span class="label">${t}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${ip}</button></span>`}if(this.url){let e=this._copied?"chip readonly copied":"chip readonly";return a`<span class="${e}">${Ss} ${this._slugLabel(Ye(this.url))}</span>`}return m}_slugLabel(e){return a`<span class="label" @click="${this._onCopyLabel}">${e}</span>`}updated(e){if(e.has("editing")&&this.editing){let t=this.renderRoot.querySelector("input");t&&(t.focus(),t.select())}}_onEdit=e=>{e&&e.stopPropagation(),this._emit("repo-edit-start")};_onCopyLabel=e=>{e&&e.stopPropagation();let t=Ye(this.url);if(t)try{navigator.clipboard.writeText(t).then(()=>(this._copied=!0,setTimeout(()=>{this._copied=!1},1e3),null)).catch(()=>{})}catch{}};_onFocus=e=>{this._opener=e.target.value};_onInput=e=>{this.url=e.target.value,this._emit("repo-input",{url:this.url})};_onKeydown=e=>{e.key==="Enter"?(e.preventDefault(),this._emit("repo-commit",{url:this.url})):e.key==="Escape"&&(e.preventDefault(),this.url=this._opener,this._emit("repo-cancel",{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit("repo-commit",{url:this.url})};_emit(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}};customElements.define("repo-chip",Cs);var ef=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,tf=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,nf=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`,rf=X(bi.replace('width="14" height="14"','width="12" height="12"')),sf=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round"><path d="M5 1.2 1.3 3.1v5.7L5 10.7l3.7-1.9V3.1Z M1.3 3.1 5 5l3.7-1.9 M5 5v5.7"/><path d="M11 5.2 7.3 7.1v5.7l3.7 1.9 3.7-1.9V7.1Z M7.3 7.1 11 9l3.7-1.9 M11 9v5.7"/></g></svg>`,of=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="1.5" width="10" height="3.6" rx=".8"/><rect x="2.2" y="5.3" width="10" height="3.6" rx=".8"/><rect x="1" y="9.1" width="10" height="3.6" rx=".8"/></g></svg>`,af=a`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M8 1.5 13 3.5v4c0 3-2.1 5.5-5 7-2.9-1.5-5-4-5-7v-4Z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,lf=[{key:"comment",glyph:ef,label:"commented",stateKey:"filterComment",hasKey:"hasComment"},{key:"fix",glyph:tf,label:"fixed",stateKey:"filterFix",hasKey:"hasFix"},{key:"flag",glyph:nf,label:"flagged",stateKey:"filterFlagged",hasKey:"hasFlagged"},{key:"duplicates",glyph:rf,label:"rows with duplicates in other reports",stateKey:"filterDuplicates",hasKey:"hasDuplicates"},{key:"cross-context",glyph:sf,label:"rows across multiple repos or packages",stateKey:"filterCrossContext",hasKey:"hasCrossContext"},{key:"app-stacked",glyph:of,label:"stacked App rows",stateKey:"filterAppStacked",hasKey:"hasAppStacked"},{key:"security",glyph:af,label:"security-related rows",stateKey:"filterSecurity",hasKey:"hasSecurityContrast"}],np=new Set(["duplicates","cross-context","app-stacked","security"]),Es=class extends D{static properties={group:{type:String},hasComment:{attribute:!1},hasFix:{attribute:!1},hasFlagged:{attribute:!1},hasDuplicates:{attribute:!1},hasCrossContext:{attribute:!1},hasAppStacked:{attribute:!1},hasSecurityContrast:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.group="marks",this.hasComment=!1,this.hasFix=!1,this.hasFlagged=!1,this.hasDuplicates=!1,this.hasCrossContext=!1,this.hasAppStacked=!1,this.hasSecurityContrast=!1}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":this.group==="context"?"Finding row filters":"Annotation filter"})}render(){let e=lf.filter(n=>this.group==="context"===np.has(n.key)).filter(n=>n.key==="security"?this.hasSecurityContrast:n.key==="duplicates"?!l.currentWorkspace&&(this.hasDuplicates||l[n.stateKey]):this[n.hasKey]||l[n.stateKey]);if(e.length===0)return m;let t=n=>{let r=l[n.stateKey],s=np.has(n.key)?n.label:`${n.label} findings`,o=r==="with"?`Showing only ${s} \u2014 click to exclude them`:r==="without"?`Excluding ${s} \u2014 click to clear`:`Show only ${s}`;return a`<button type="button" class="${I({"annotation-chip":!0,"sel-with":r==="with","sel-without":r==="without"})}" aria-label="${o}" aria-pressed="${String(r!=="")}" @click="${()=>this._toggle(n.key)}">${n.glyph}</button>`};return a`${e.map(t)}`}_toggle(e){this.dispatchEvent(new CustomEvent("annotation-filter-toggle",{detail:{key:e},bubbles:!0,composed:!0}))}};customElements.define("annotation-filter",Es);var cf=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],Ts=class extends D{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Filter by severity"})}render(){let e=this.kind==="graph"?new Set(this.selected):l.filterSeverities,t=cf.filter(([n])=>(this.counts[n]??0)||e.has(n));return t.length===0?m:a`${t.map(([n,r])=>{let s=this.counts[n]??0,o=e.has(n);return a`<button type="button" class="${I({"sev-chip":!0,[n]:!0,active:o})}" aria-pressed="${String(o)}" @click="${()=>this._toggle(n)}"><span class="sd"></span><span class="name">${r}</span><span class="n">${s}</span></button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent("severity-toggle",{detail:{severity:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("severity-chips",Ts);var df=[["corrected","Corrected","Show corrected severities (application-specific re-ratings)"],["original","Original",m]],Rs=class extends D{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Severity display mode"})}render(){let e=l.severityMode;return a`<span class="severity-mode-label">Severity</span><span class="severity-mode-chips">${df.map(([t,n,r])=>{let s=e===t;return a`<button type="button" class="${I({"severity-mode-chip":!0,active:s})}" aria-pressed="${String(s)}" data-tooltip="${r}" @click="${()=>this._select(t)}">${n}</button>`})}</span>`}_select(e){e!==l.severityMode&&this.dispatchEvent(new CustomEvent("severity-mode-change",{detail:{mode:e},bubbles:!0,composed:!0}))}};customElements.define("severity-mode-switch",Rs);var uf=a`<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.8 14.4 5 8 8.2 1.6 5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><path d="M2.6 8 8 10.7 13.4 8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.6 11 8 13.7 13.4 11" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`,rp="Show underlying code findings",pf=a`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5.5v2h10v-2M8 7.5v3"/><rect x="1" y="1.5" width="4" height="4" rx=".6"/><rect x="11" y="1.5" width="4" height="4" rx=".6"/><rect x="6" y="10.5" width="4" height="4" rx=".6"/></svg>`,sp="Show only upstream dependency findings",Ls=class extends D{static properties={canDrop:{type:Boolean,attribute:"can-drop"},canDetail:{type:Boolean,attribute:"can-detail"},canUpstream:{type:Boolean,attribute:"can-upstream"},upstreamDisabled:{type:Boolean,attribute:"upstream-disabled"}};createRenderRoot(){return this}constructor(){super(),this.canDrop=!1,this.canDetail=!1,this.canUpstream=!1,this.upstreamDisabled=!1}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Revalidation layer"})}render(){let e=l.revalidateConflicts.size,t=e>0?a`<button type="button" class="revalidation-toggle revalidation-conflicts" aria-haspopup="dialog" aria-label="${`View ${e} revalidation conflict${e===1?"":"s"}`}" @click="${this._openConflicts}">${e} ${e===1?"conflict":"conflicts"}</button>`:m,n=l.showRevalidation!==!1,r=n&&l.revalidationDetailed===!0,s=l.upstreamOnly===!0,o=s&&!this.upstreamDisabled;return a`${t}${e===0&&this.canDrop?a`<mode-switch class="revalidation-toggle" label="App" borderless .checked="${n}" accessible-label="App view — hide the issues the revalidation pass ruled out" .disabled="${s}" @click="${this._toggle}"></mode-switch>`:m}${e===0&&this.canDrop&&this.canDetail?a`<button type="button" class="${I({"revalidation-detail":!0,on:r})}" aria-pressed="${String(r)}" aria-label="${rp}" data-tooltip="${rp}" ?disabled="${!n||s}" @click="${this._toggleDetail}">${uf}</button>`:m}${this.canUpstream?a`<button type="button" class="${I({"revalidation-upstream":!0,on:o})}" aria-pressed="${String(o)}" aria-label="${sp}" data-tooltip="${sp}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${pf}</button>`:m}`}_toggle=()=>{this.dispatchEvent(new CustomEvent("revalidation-change",{detail:{on:l.showRevalidation===!1},bubbles:!0,composed:!0}))};_openConflicts=()=>{this.dispatchEvent(new CustomEvent("revalidation-conflicts-open",{bubbles:!0,composed:!0}))};_toggleDetail=()=>{this.dispatchEvent(new CustomEvent("revalidation-detail-change",{detail:{on:l.revalidationDetailed!==!0},bubbles:!0,composed:!0}))};_toggleUpstream=()=>{this.upstreamDisabled||this.dispatchEvent(new CustomEvent("upstream-only-change",{detail:{on:l.upstreamOnly!==!0},bubbles:!0,composed:!0}))}};customElements.define("revalidation-switch",Ls);var hf=a`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,Ms=class extends D{createRenderRoot(){return this}render(){let e=l.currentView==="bundles"&&l.selectedBundle,t=!l.currentFile&&!e;return a`<button type="button" class="danger" ?disabled="${t}">${hf}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",Ms);var mf=a`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,ff=a`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,gf={packages:{title:"Show packages",icon:mf,view:"packages"},repositories:{title:"Show repositories",icon:ff,view:"repositories"}},Ps=class extends D{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind="",this.count=0}render(){if(this.count===0)return m;let e=Se("sidebar-view-button",gf,this.kind);if(!e)return m;let t=l.currentView===e.view;return a`<button type="button" class="${I({"sidebar-view-btn":!0,active:t})}" aria-label="${e.title}">${e.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",Ps);var bf=["invalid","deleted"],vf={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},As=class extends D{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=""}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Triage view"})}render(){let e=Se("slide-triage-tabs",vf,this.kind);if(!e)return m;let t=l[e.stateKey],n=bf.filter(r=>(this.counts[r]??0)>0||t===r);return n.length===0?m:a`${n.map(r=>{let s=t===r,o=this.counts[r]??0;return a`<button type="button" class="${I({"triage-state-btn":!0,[`triage-state-${r}`]:!0,active:s})}" aria-pressed="${String(s)}" @click="${()=>this._toggle(r)}">${r.charAt(0).toUpperCase()+r.slice(1)} (${o})</button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent("slide-triage-toggle",{detail:{kind:this.kind,value:e},bubbles:!0,composed:!0}))}};customElements.define("slide-triage-tabs",As);var yf=[["own","Sources"],["modules","Deps"]],Is=class extends D{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Source filter"})}render(){return a`${yf.map(([e,t])=>{let n=l.filterSources.has(e);return a`<button type="button" class="${I({"source-chip":!0,active:n})}" aria-pressed="${String(n)}" @click="${()=>this._toggle(e)}">${t}</button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent("source-toggle",{detail:{source:e},bubbles:!0,composed:!0}))}};customElements.define("source-filter",Is);var _f=a`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,wf=a`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h10v4"/></svg>`,kf={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},Fs=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let e=Se("toolbar-search",kf,this.kind);if(!e)return m;let t=l[e.stateKey];return a`${_f} <input type="text" aria-label="${e.placeholder}" placeholder="${e.placeholder}" .value="${j(t)}" @input="${this._onInput}"> ${this.kind==="findings"&&t?this._negateToggle():m}`}_negateToggle(){let e=l.filterIncludeNegate;return a`<button type="button" class="${I({"search-negate-btn":!0,active:e})}" data-tooltip="${e?"Negation on \u2014 click to undo":"Negate: show non-matching findings"}" aria-label="Negate search" aria-pressed="${String(e)}" @click="${this._onToggleNegate}">${wf}</button>`}_onInput=e=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))};_onToggleNegate=()=>{this.dispatchEvent(new CustomEvent("search-negate-toggle",{bubbles:!0,composed:!0}))}};customElements.define("toolbar-search",Fs);var Ds=class extends D{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){let e=[{value:"",label:"All repositories",special:!0,reset:!0},...this.options.map(t=>({value:t??Oi,label:t==null?"(no repo)":Ye(t),special:t==null}))];return a`<repository-selector variant="filter" label="Filter by repository" .options="${e}" .value="${l.filterRepo}" @repository-change="${t=>this.dispatchEvent(new CustomEvent("repo-change",{detail:{value:t.detail.value},bubbles:!0,composed:!0}))}"></repository-selector>`}};customElements.define("repo-filter",Ds);var op={"":{cls:"included",label:"+ Partial",title:"Confirmed, partial and revalidation rows \u2014 click for full confirmations only"},exclude:{cls:"excluded",label:"\u2212 Partial",title:"Full confirmations only \u2014 click to show the partial ones only"},only:{cls:"only",label:"only Partial",title:"Partial confirmations only \u2014 click to show all of them again"}},Os=class extends D{static properties={options:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.options=[],this.hasPartial=!1}render(){return a`<select class="sort-select" aria-label="Filter by revalidation outcome" .value="${j(l.filterRevalidate)}" @change="${this._onChange}"><option value="" hidden ?selected="${l.filterRevalidate===""}"></option><option value="">Confidence</option>${this.options.map(e=>a`<option value="${e.value}" ?selected="${l.filterRevalidate===e.value}">${e.label}</option>`)}</select> ${this.hasPartial&&l.filterRevalidate==="confirmed"?this._partialChip():m}`}_partialChip(){let e=op[l.filterPartial]??op[""];return a`<button type="button" class="${I({"partial-cycle":!0,[e.cls]:!0})}" data-tooltip="${e.title}" @click="${this._onPartial}">${e.label}</button>`}_onPartial=()=>{let e=Ri.indexOf(l.filterPartial),t=Ri[(e+1)%Ri.length];this.dispatchEvent(new CustomEvent("partial-change",{detail:{value:t},bubbles:!0,composed:!0}))};_onChange=e=>{let{value:t}=e.target;t||(e.target.selectedIndex=0),this.dispatchEvent(new CustomEvent("revalidate-change",{detail:{value:t},bubbles:!0,composed:!0}))}};customElements.define("revalidate-filter",Os);var ap=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],Bs=class extends D{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Filter by mark color"})}render(){let e=this.kind==="graph"?new Set(this.selected):l.filterColors;return ap.some(([n])=>(this.counts[n]??0)||e.has(n))?a`${ap.map(([n,r,s])=>{let o=this.counts[n]??0,c=e.has(n);return a`<button type="button" class="${c?"active":""}" aria-label="${`${s} (${o})`}" aria-pressed="${String(c)}" @click="${()=>this._toggle(n)}"><span class="${`td ${r}`}"></span><span class="count">${o}</span></button>`})}`:m}_toggle(e){this.dispatchEvent(new CustomEvent("color-toggle",{detail:{color:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("triage-filter",Bs);var $f=["inprogress","fixed","invalid","deleted","ignored"],Ns={graph:"graph2-triage-selector",packages:"packages-triage-selector"},xf={inprogress:"In progress"},Sf=i=>xf[i]??i.charAt(0).toUpperCase()+i.slice(1),zs=class extends D{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=""}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"Triage view"})}render(){let e=this.states??$f,t=e.reduce((s,o)=>s+(this.counts[o]??0),0),n=this.variant?Ns[this.variant]:null;this.variant&&n===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(Ns).map(s=>JSON.stringify(s)).join(", ")} or "".`);for(let s of Object.values(Ns))this.classList.toggle(s,s===n);let r=t===0&&!l.shownTriage;return this.classList.toggle("is-empty",r),r?m:a`${e.map(s=>{let o=this.counts[s]??0,c=l.shownTriage===s;if(o===0&&!c)return m;let d=Sf(s);return a`<button type="button" class="${I({"triage-state-btn":!0,[`triage-state-${s}`]:!0,active:c})}" data-triage-show="${s}" aria-pressed="${String(c)}"><span>${d}</span><span class="n">${o}</span></button>`})}`}};customElements.define("triage-selector",zs);var Cf={table:a`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:a`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:a`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:a`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:a`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:a`${X(ea)}`},Ef={table:"Table view (compact rows, click a row to expand)",list:"List view (flat, one card per finding)",grouped:"List view, grouped by file",focus:"Focus view (one finding centered + a queue of next findings)",kanban:"Kanban board, columns grouped by triage status",graph:"Graph view (canvas with imports / exports)"},qs=["kanban","focus","table","list","grouped","graph"],Hs=class extends D{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=qs.join(","),this.kind="findings"}connectedCallback(){super.connectedCallback(),W(this,{role:"group","aria-label":"View mode"})}render(){let e=this.kind==="files"?l.filesViewMode:l.viewMode,t=this.modes.split(",").map(r=>r.trim()).filter(r=>qs.includes(r)),n=t.length>0?t:qs;return a`${n.map(r=>a`<button type="button" class="${I({"view-mode-btn":!0,active:e===r})}" aria-label="${Ef[r]}" aria-pressed="${String(e===r)}" @click="${()=>this._select(r,e)}">${Cf[r]}</button>`)}`}_select(e,t){e!==t&&this.dispatchEvent(new CustomEvent("view-mode-change",{detail:{mode:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("view-mode-buttons",Hs);var lp=i=>{let e=i.lastIndexOf(".");return e>0?i.slice(e).toLowerCase():""};function cp(i,e=""){let t=i.map(s=>s.split("/")),n=[];for(;;){let s=n.length,o=new Set;for(let c of t)c.length>s+1&&n.every((d,u)=>c[u]===d)&&o.add(c[s]);if(o.size!==1)break;n.push(o.values().next().value)}let r=t.map(s=>{let o=0;for(;o<n.length&&s.length>o+1;)o++;let c=e+s.slice(0,o).map(d=>`${d}/`).join("");return s.length>o+1?`${c}${s[o]}/`:`${c}*`});if(new Set(r).size>1){let s=new Map;r.forEach((c,d)=>{if(!c.endsWith("*"))return;let u=s.get(c)??new Set;u.add(lp(t[d].at(-1))),s.set(c,u)});let o=c=>{let d=s.get(c);return d?.size===1&&!d.has("")?`${c}${[...d][0]}`:c};return new Map(i.map((c,d)=>[c,o(r[d])]))}return new Map(i.map((s,o)=>{let c=lp(t[o].at(-1));return[s,c?`*${c}`:"No extension"]}))}var mp=6,dp=14,yn=2,up=24,ri=4,Tf=1.5,_n=new Map,wn=new Map,pp="treemap",hp=!1;function Rf(i){let e=/^#?([0-9a-f]{6})$/iu.exec(i);if(!e)return"#fff";let t=parseInt(e[1],16),n=t>>16&255,r=t>>8&255,s=t&255;return(.2126*n+.7152*r+.0722*s)/255>.6?"#1a1a1a":"#fff"}function Lf(i,e,t,n){let r=t*t,s=n*n;return Math.max(s*i/r,r/(s*e))}function fp(i,e){let t=[],n=i.filter(h=>h.value>0),{x:r,y:s,w:o,h:c}=e;if(n.length===0||o<=0||c<=0)return t;let d=0;for(let h of n)d+=h.value;let u=o*c/d,p=0;for(;p<n.length&&o>.5&&c>.5;){let h=Math.min(o,c),f=p,b=0,v=0,g=1/0,y=1/0;for(;f<n.length;){let _=n[f].value*u,$=_>v?_:v,S=_<g?_:g,T=Lf($,S,b+_,h);if(f===p||T<=y)y=T,b+=_,v=$,g=S,f++;else break}let x=b/h;if(o>=c){let _=s;for(let $=p;$<f;$++){let S=$===f-1?s+c-_:n[$].value*u/x;t.push({node:n[$],x:r,y:_,w:x,h:S}),_+=S}r+=x,o-=x}else{let _=r;for(let $=p;$<f;$++){let S=$===f-1?r+o-_:n[$].value*u/x;t.push({node:n[$],x:_,y:s,w:S,h:x}),_+=S}s+=x,c-=x}p=f}return t}function gp(i){for(;i.children&&i.children.size===1;){let e=i.children.values().next().value;if(e.isFile)break;i.name=`${i.name}/${e.name}`,i.children=e.children}if(i.children)for(let e of i.children.values())gp(e)}function bp(i,e,t,n){if(i.path=i.name?e?`${e}/${i.name}`:i.name:e,i.parent=t,i.isFile)return i.count=1,i.value;n.set(i.path,i);let r=0,s=0,o,c;for(let d of i.children.values())r+=bp(d,i.path,i,n),s+=d.count,c===void 0?c=d.pkg:c!==d.pkg&&(c=null),o===void 0?o=d.group:o!==d.group&&(o=null);return i.value=r,i.count=s,i.pkg=c??null,i.group=o??null,r}function Mf(i,e,t,n){let r=new Set(i).size===1?cp(e,t):new Map,s=new Map;return e.forEach((o,c)=>{r.has(o)&&s.set(r.get(o),(s.get(r.get(o))??0)+Math.max(n[c]??0,0))}),{groups:r,ranks:new Map([...s].toSorted((o,c)=>c[1]-o[1]||o[0].localeCompare(c[0])).map(([o],c)=>[o,c]))}}function vp(i,e,t,n,r,s,o){if(n<ri||r<ri)return;if(i.isFile){o.push({kind:"file",node:i,x:e,y:t,w:n,h:r});return}if(!(s<mp&&n>=up&&r>=up&&i.children.size>0)){o.push({kind:"agg",node:i,x:e,y:t,w:n,h:r});return}o.push({kind:"dir",node:i,x:e,y:t,w:n,h:r});let d=r>=dp+ri+yn?dp:0,u=e+yn,p=t+d,h=n-yn*2,f=r-d-yn;if(h<ri||f<ri)return;let b=[...i.children.values()].toSorted((v,g)=>g.value-v.value);for(let v of fp(b,{x:u,y:p,w:h,h:f}))vp(v.node,v.x,v.y,v.w,v.h,s+1,o)}function Us(i,e){let t=i/(e||1)*100;return t>=10?t.toFixed(0):t.toFixed(t>=1?1:2)}function yp(i,e){if(e<=0||i.isFile||!i.children||i.children.size===0)return 0;let t=1;for(let n of i.children.values()){if(t>=e)break;let r=1+yp(n,e-1);r>t&&(t=r)}return t}function Pf(i,e,t,n,r,s){let o=Math.min(s-r,Math.PI*2-1e-4),c=r+o,d=o>Math.PI?1:0,u=Math.cos(r),p=Math.sin(r),h=Math.cos(c),f=Math.sin(c),b=v=>v.toFixed(2);return`M${b(i+n*u)} ${b(e+n*p)}A${b(n)} ${b(n)} 0 ${d} 1 ${b(i+n*h)} ${b(e+n*f)}L${b(i+t*h)} ${b(e+t*f)}A${b(t)} ${b(t)} 0 ${d} 0 ${b(i+t*u)} ${b(e+t*p)}Z`}function Af(i,e){let t=Math.max(4,Math.floor(e/6.4));return i.length>t?`${i.slice(0,t-1)}\u2026`:i}var js=class extends U{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0},_focus:{state:!0},_mode:{state:!0},_reason:{state:!0},_codeOnly:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._focus=[],this._mode=pp,this._reason="",this._codeOnly=hp,this._hasResources=!1,this._reasons=new Map,this._dirByPath=new Map,this._status="loading",this._meta={total:0,prefix:""},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null}willUpdate(e){e.has("details")&&(this._reason=wn.get(this.details?.integrity)??""),(e.has("details")||e.has("_reason")||e.has("_codeOnly"))&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(".bundle-treemap-plot"),this._tooltip=this.querySelector(".bundle-treemap-tooltip"),!(!this._plot||typeof ResizeObserver>"u")&&(this._ro=new ResizeObserver(e=>{let t=e[0]?.contentRect;if(!t)return;let n=Math.floor(t.width),r=Math.floor(t.height);(n!==this._w||r!==this._h)&&(this._w=n,this._h=r)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&(this._ro.disconnect(),this._ro=null)}_onPointerMove(e){let t=e.target.closest(".bundle-treemap-node");if(!t||!this._tooltip){this._hideTooltip();return}if(t!==this._ttCell){this._ttCell=t;let n=t.dataset;Jo(a`<div class="bundle-treemap-tt-path">${n.ttPath}</div>${n.ttPkg?a`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${`background:${n.ttColor}`}"></span> <span class="bundle-treemap-tt-pkg">${n.ttPkg}</span></div>`:""}<div class="bundle-treemap-tt-meta">${n.ttMeta}</div>`,this._tooltip)}this._positionTooltip(e.clientX,e.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(e,t){let n=this._tooltip;if(!n||!this._plot)return;n.classList.add("show");let r=this._plot.getBoundingClientRect(),s=e-r.left,o=t-r.top,c=12,d=s+c;d+n.offsetWidth>r.width-4&&(d=s-n.offsetWidth-c),d<4&&(d=4);let u=o+c;u+n.offsetHeight>r.height-4&&(u=o-n.offsetHeight-c),u<4&&(u=4),n.style.left=`${d}px`,n.style.top=`${u}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove("show")}_rebuild(){if(this._root=null,this._focus=[],this._dirByPath=new Map,this._reasons=new Map,this._hasResources=!1,this._meta={total:0,prefix:""},this._hideTooltip(),!this.details){this._status="loading";return}let e=$a(this.details),t=[...e.keys()].filter(y=>e.get(y)!==null);if(t.length===0){this._status="empty";return}this._reasons=Ca(this.details,t),this._reasons.has(this._reason)||(this._reason="",wn.delete(this.details.integrity));let n=this._reasons.get(this._reason),r=Sa(this.details),s=xa(this.details);this._hasResources=t.some(y=>s.get(y)==="resource"&&e.get(y)>0);let o=this._codeOnly&&this._hasResources,{prefix:c,stripped:d}=ft(t),u=t.map(y=>er(y,{packageDir:r?.get(y)})),{groups:p,ranks:h}=Mf(u,d,c,t.map(y=>e.get(y))),f={name:"",children:new Map,value:0,isFile:!1},b=0;for(let y=0;y<t.length;y++){if(n&&!n.has(t[y])||o&&s.get(t[y])==="resource")continue;let x=e.get(t[y]);if(x<=0)continue;let _=d[y].split("/"),$=f,S=!1;for(let O=0;O<_.length-1;O++){let A=$.children.get(_[O]);if(A&&A.isFile){S=!0;break}A||(A={name:_[O],children:new Map,value:0,isFile:!1},$.children.set(_[O],A)),$=A}if(S)continue;let T=_.at(-1),F=$.children.get(T);F&&!F.isFile||(F||(F={name:T,isFile:!0,value:0,origPath:t[y],pkg:u[y],group:p.get(d[y])??null,resource:s.get(t[y])==="resource"},$.children.set(T,F)),F.value+=x,b+=x)}if(b===0){this._status="empty";return}for(let y of f.children.values())gp(y);let v=new Map;bp(f,"",null,v),this._groupRanks=h,this._root=f,this._dirByPath=v,this._meta={total:b,prefix:c},this._status="ok";let g=this.details?.integrity?_n.get(this.details.integrity):null;if(g){let y=v.get(g);y?this._focus=this._chainTo(y):_n.delete(this.details.integrity)}}get _focusNode(){return this._focus.length>0?this._focus.at(-1):this._root}_chainTo(e){let t=[];for(let n=e;n&&n!==this._root;n=n.parent)t.push(n);return t.reverse(),t}_rememberFocus(){let e=this.details?.integrity;if(!e)return;let t=this._focus.at(-1)?.path;t?_n.set(e,t):_n.delete(e)}_drillInto(e){!e||e.isFile||!e.children||e.children.size===0||(this._focus=this._chainTo(e),this._rememberFocus(),this._hideTooltip())}_focusTo(e){let t=e<0?[]:this._focus.slice(0,e+1);t.length!==this._focus.length&&(this._focus=t,this._rememberFocus(),this._hideTooltip())}_toggleMode(){this._mode=this._mode==="sunburst"?"treemap":"sunburst",pp=this._mode,this._hideTooltip()}_toggleCode(){this._codeOnly=!this._codeOnly,hp=this._codeOnly}_changeReason(e){this._reason=e.detail.value.replace(/^reason:/u,"");let t=this.details?.integrity;t&&(this._reason?wn.set(t,this._reason):wn.delete(t))}_onPlotClick(e){let t=e.target.closest("[data-treemap-into]");if(!t)return;let n=this._dirByPath.get(t.dataset.treemapInto);n&&this._drillInto(n)}_renderCrumbs(){let e=this._focus,t=e.length===0,n=e.slice(0,-1),r=t?null:e.at(-1);return a`<nav class="bundle-treemap-crumbs" aria-label="Treemap location"><span class="bundle-treemap-crumbs-lead"><button type="button" class="${I({"bundle-treemap-crumb-home":!0,"at-root":t})}" @click="${()=>this._focusTo(-1)}">Source ${this._mode==="sunburst"?"sunburst":"treemap"}</button> ${n.map((s,o)=>a`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><button type="button" class="bundle-treemap-crumb" @click="${()=>this._focusTo(o)}" data-tooltip-truncated data-tooltip="${s.path}">${s.name}</button>`)} </span>${r?a`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><span class="bundle-treemap-crumb-current" aria-current="location" data-tooltip-truncated data-tooltip="${r.path}">${r.name}</span>`:""}</nav>`}_paint(e){if(this._groupRanks?.size>0)return e.group==null?{color:ja(),label:null,named:!1}:{color:Ua(this._groupRanks.get(e.group)??0),label:e.group,named:!0};let t=e.pkg??er(e.path);return{color:Pi(t),label:Ge(t),named:e.pkg!=null}}_cell(e){let t=Us(e.node.value,this._meta.total),n={left:`${e.x}px`,top:`${e.y}px`,width:`${e.w}px`,height:`${e.h}px`},r=`${e.node.count} ${e.node.count===1?"file":"files"}`;if(e.kind==="dir")return a`<div class="bundle-treemap-node bundle-treemap-dir" style="${_e(n)}" data-treemap-into="${e.node.path}" data-tt-path="${`${e.node.path}/`}" data-tt-meta="${`${G(e.node.value)} \xB7 ${r} \xB7 ${t}%`}"><span class="bundle-treemap-dirname">${e.node.name}</span></div>`;let{color:s,label:o}=this._paint(e.node),c=_e({...n,background:s,color:Rf(s)}),d=o??m;return e.kind==="agg"?a`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${c}" data-treemap-into="${e.node.path}" data-tt-path="${`${e.node.path}/`}" data-tt-pkg="${d}" data-tt-color="${s}" data-tt-meta="${`${G(e.node.value)} \xB7 ${r} \xB7 ${t}%`}"><span class="bundle-treemap-label">${e.node.name}/</span></div>`:a`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${c}" data-bundle-view-source="${e.node.resource?m:e.node.origPath}" data-tt-path="${e.node.path}" data-tt-pkg="${d}" data-tt-color="${s}" data-tt-meta="${`${G(e.node.value)} \xB7 ${t}% of bundle`}"><span class="bundle-treemap-label">${e.node.name}</span></div>`}_arc(e,t,n){let r=Us(e.value,n),{color:s,label:o,named:c}=this._paint(e),d=o??m;if(e.isFile)return ye`<path
50
- class="bundle-treemap-node bundle-treemap-arc"
51
- d=${t}
52
- fill=${s}
53
- data-bundle-view-source=${e.resource?m:e.origPath}
54
- data-tt-path=${e.path}
55
- data-tt-pkg=${d}
56
- data-tt-color=${s}
57
- data-tt-meta=${`${G(e.value)} \xB7 ${r}% of bundle`}
58
- ></path>`;let u=`${e.count} ${e.count===1?"file":"files"}`;return ye`<path
59
- class="bundle-treemap-node bundle-treemap-arc"
60
- d=${t}
61
- fill=${s}
62
- data-treemap-into=${e.path}
63
- data-tt-path=${`${e.path}/`}
64
- data-tt-pkg=${c?d:m}
65
- data-tt-color=${c?s:m}
66
- data-tt-meta=${`${G(e.value)} \xB7 ${u} \xB7 ${r}%`}
67
- ></path>`}_renderSunburst(e){let t=this._w,n=this._h,r=t/2,s=n/2,o=Math.min(t,n)/2-6;if(o<30)return m;let c=yp(e,mp),d=Math.min(Math.max(o*.18,26),o*.45),u=(o-d)/c,p=this._meta.total||1,h=[],f=(x,_,$,S)=>{let T=[...x.children.values()].toSorted((A,z)=>z.value-A.value),F=$-_,O=_;for(let A of T){let z=F*(A.value/x.value),Z=d+(S-1)*u,ne=Z+u;z*ne>=Tf&&(h.push(this._arc(A,Pf(r,s,Z,ne,O,O+z),p)),!A.isFile&&S<c&&A.children.size>0&&f(A,O,O+z,S+1)),O+=z}};f(e,-Math.PI/2,Math.PI*1.5,1);let b=this._focus.length>0,v=Math.max(d-4,10),g=b?ye`<circle
68
- class="bundle-treemap-node bundle-treemap-center"
69
- cx=${r} cy=${s} r=${v}
70
- data-treemap-into=${e.parent.path}
71
- data-tt-path=${`${e.path}/`}
72
- data-tt-meta=${`${G(e.value)} \xB7 ${e.count} ${e.count===1?"file":"files"} \xB7 ${Us(e.value,p)}%`}
73
- ></circle>`:ye`<circle class="bundle-treemap-center" cx=${r} cy=${s} r=${v}></circle>`,y=ye`<text class="bundle-treemap-center-label" x=${r} y=${s} text-anchor="middle">
74
- ${b?ye`<tspan x=${r} dy="-0.3em">${Af(e.name,v*2-12)}</tspan><tspan class="bundle-treemap-center-sub" x=${r} dy="1.5em">${G(e.value)}</tspan>`:ye`<tspan x=${r} dy="0.35em">${G(e.value)}</tspan>`}
75
- </text>`;return a`<svg class="bundle-treemap-sunburst" width="${t}" height="${n}" viewBox="${`0 0 ${t} ${n}`}">${h}${g}${y}</svg>`}render(){let e=this._focusNode,t=this._mode==="sunburst",n=this._status==="ok"&&e&&e.children&&this._w>0&&this._h>0,r=[];if(n&&!t){let d=[...e.children.values()].toSorted((u,p)=>p.value-u.value);for(let u of fp(d,{x:0,y:0,w:this._w,h:this._h}))vp(u.node,u.x,u.y,u.w,u.h,1,r)}let{prefix:s}=this._meta,o=e?e.count:0,c=e?e.value:0;return a`<header class="bundle-treemap-head">${this._renderCrumbs()} <span class="bundle-treemap-head-right"><span class="bundle-treemap-sub">${o} ${o===1?"file":"files"} · ${G(c)}${s?a`· <span class="mono">${s}</span>`:""}</span> ${this._reasons.size>0?a`<bundle-scope-selector compact="compact" .reasons="${[...this._reasons.keys()].map(d=>({id:`reason:${d}`,label:d}))}" .value="${this._reason?`reason:${this._reason}`:""}" label="Filter files" @scope-change="${this._changeReason}"></bundle-scope-selector>`:m} ${this._hasResources?a`<mode-switch compact="compact" label="Code" .checked="${this._codeOnly}" accessible-label="Show code only, without resources" @click="${this._toggleCode}"></mode-switch>`:m}<mode-switch compact="compact" label="Sunburst" .checked="${t}" accessible-label="Toggle sunburst view" @click="${this._toggleMode}"></mode-switch></span></header><div class="bundle-treemap-plot" @click="${this._onPlotClick}" @pointermove="${this._onPointerMove}" @pointerleave="${this._onPointerLeave}">${this._status==="loading"?a`<div class="bundle-treemap-empty">Loading…</div>`:this._status==="empty"?a`<div class="bundle-treemap-empty">${this._codeOnly&&this._hasResources?"No code here, only resources.":"This bundle doesn't carry any source content."}</div>`:t?n?this._renderSunburst(e):m:r.map(d=>this._cell(d))}<div class="bundle-treemap-tooltip"></div></div>`}};customElements.define("bundle-treemap",js);function Vs(i){return i===0?"\xB10":`${i>0?"+":"\u2212"}${Math.abs(i).toLocaleString()}`}function Ks(i){return i===0?"\xB10 B":`${i>0?"+":"\u2212"}${G(Math.abs(i))}`}function Lt(i){return i>0?"up":i<0?"down":""}function If(i,e){if(!e)return"";let t=i/e*100;return`${t>0?"+":t<0?"\u2212":"\xB1"}${Math.abs(t).toFixed(1)}%`}function _p(i){let e=i.totals,t=i.versionUpdates?.totals??{baseDeps:0,otherDeps:0},n=t.baseDeps>0||t.otherDeps>0,r=t.otherDeps-t.baseDeps,s=If(e.byteDelta,e.baseBytes);return a`<div class="bundle-compare-stats">${n?a`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Deps</span> <span class="bundle-compare-metric-value">${t.baseDeps.toLocaleString()} → ${t.otherDeps.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Lt(r)}`}">${Vs(r)}</span></div>`:m}<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Size</span> <span class="bundle-compare-metric-value">${G(e.baseBytes)} → ${G(e.otherBytes)}</span> <span class="${`bundle-compare-metric-delta ${Lt(e.byteDelta)}`}">${Ks(e.byteDelta)}${s?a`${" "}<span class="bundle-compare-pct">(${s})</span>`:m}</span></div>${e.baseLines>0||e.otherLines>0?a`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">LoC</span> <span class="bundle-compare-metric-value">${e.baseLines.toLocaleString()} → ${e.otherLines.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Lt(e.otherLines-e.baseLines)}`}">${Vs(e.otherLines-e.baseLines)}</span></div>`:m}<div class="bundle-compare-files"><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Files</span> <span class="bundle-compare-metric-value">${e.baseFiles.toLocaleString()} → ${e.otherFiles.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Lt(e.fileDelta)}`}">${Vs(e.fileDelta)}</span></div><div class="bundle-compare-chips">${e.onlyBaseFiles>0?a`<span class="bundle-compare-chip removed">−${e.onlyBaseFiles.toLocaleString()} removed</span>`:m} ${e.onlyOtherFiles>0?a`<span class="bundle-compare-chip added">+${e.onlyOtherFiles.toLocaleString()} added</span>`:m} ${e.changedFiles>0?a`<span class="bundle-compare-chip changed">${e.changedFiles.toLocaleString()} changed${e.renamedFiles>0?` (${e.renamedFiles.toLocaleString()} renamed)`:""}</span>`:m} <span class="bundle-compare-chip unchanged">${e.unchangedFiles.toLocaleString()} unchanged</span> ${i.resolutions?.totalChanges>0?a`<span class="bundle-compare-chip changed">${i.resolutions.totalChanges.toLocaleString()} repointed ${i.resolutions.totalChanges===1?"resolution":"resolutions"}</span>`:m}</div></div></div>`}var Ff=24;function Ne(i,e=t=>t.id){return i.map(t=>({id:e(t),integrity:e(t),kind:t.format,format:t.format,detail:t.detail,...t.date&&{date:t.date},...t.dateWarning&&{dateWarning:t.dateWarning},filename:t.name,displayLabel:t.displayLabel,size:"\u2014",summary:null}))}function Df(i){if(!i)return m;let e=({name:n="",detail:r=""}={})=>n.length+Math.min(r.length,Ff)*.87+1,t=(i.choices??[]).reduce((n,r)=>Math.max(n,e(r)),Math.max(`Choose a ${i.noun??"bundle"}\u2026`.length,e(i.widest)));return`--compare-select-chars: ${Math.ceil(t)}`}function kn({source:i,label:e="Compare",from:t,to:n,clear:r,swap:s,extras:o=m,comparison:c=null,disabled:d=!1,openLine:u}){let p=i?.noun??"bundle",h=`${p[0].toUpperCase()}${p.slice(1)}`,f=(b,v)=>a`<bundle-selector .bundles="${b.options}" .value="${b.value}" .noun="${p}" .versions="${!!i}" label="${b.label??v}" placeholder="${b.placeholder??`Choose a ${p}\u2026`}" ?disabled="${d}" @bundle-change="${g=>{g.stopPropagation(),b.pick(g.detail.value)}}"></bundle-selector>`;return a`<div class="${i?"bundle-compare-picker is-versions":"bundle-compare-picker"}" style="${Df(i)}" @compare-open-line="${b=>u?.(b.detail)}"><div class="bundle-compare-select-wrap"><span class="bundle-compare-select-hint">${e}</span> ${f(t,`${h} to compare with`)} ${r?a`<button type="button" class="bundle-compare-clear" aria-label="${r.label??"Clear comparison"}" ?disabled="${d}" @click="${r.run}">×</button>`:m}</div><span class="bundle-compare-arrow" aria-hidden="true">→</span><div class="bundle-compare-select-wrap">${f(n,`${h} to compare`)} ${s?a`<button type="button" class="bundle-compare-swap" ?disabled="${d}" @click="${s}" aria-label="${`Swap the two ${p}s`}"><span class="bundle-compare-swap-icon" aria-hidden="true">↔</span>Swap</button>`:m}</div>${o}${c?i?.badges?.(c.base,c.other,c.files)??m:m}</div>`}function $n(i,e=m){return a`<div class="bundle-compare-summary">${_p(i)}${e}</div>`}function xn(i,e=m){return a`<header class="bundle-compare-head">${i}${e}</header>`}var Of=4,Bf=5e3,Nf=5*6e4,zf=i=>!(i>=400&&i<500&&i!==429),qf=i=>i?.integrity==="(empty)",ze=new Map;function $p(){for(let[i,e]of ze){if(ze.size<=Of)break;e.state.status!=="loading"&&ze.delete(i)}}function wp(i){i.notify?.();for(let e of i.waiting.splice(0))e()}var Ws=null,Ys=(i,e)=>!!(i.managedId&&e.managedId)||!!(e.npm&&(i.npm||qf(i)));function Hf(i,e,t){return i.managedId&&e.managedId?Ld(i.managedId,e.managedId,{scope:t}):Ys(i,e)?Md(e.npm.name,e.npm.version,i.npm?.version??"(empty)",{otherName:i.npm?.name??e.npm.name}):import("./chunk-7B6HB4D7.js").then(n=>(Ws=n,n.prepareComparison(i,e,t)))}async function Uf(i,e,t,n,r){let s;try{s={status:"ready",diff:await Hf(t,n,r)}}catch(o){if(o?.name==="AbortError"){ze.get(i)===e&&ze.delete(i),wp(e);return}if(s={status:"error",message:o?.message??String(o)},zf(o?.status)){let c=Math.min(Bf*2**e.failures,Nf);Object.assign(e,{retryAt:Date.now()+c,failures:e.failures+1}),setTimeout(()=>{e.notify?.()},c)?.unref?.()}}s.status==="ready"&&(e.failures=0),e.state=s,wp(e),$p()}var Gs=new WeakMap,jf=0,kp=i=>(Gs.has(i)||Gs.set(i,++jf),Gs.get(i));function xp(i,e,t,n=!1){let r=Ys(i,e)?`${i.integrity}\0${e.integrity}\0${t??""}`:`${kp(i)}\0${kp(e)}\0${t??""}\0here`,s=ze.get(r);return ze.delete(r),(!s||n&&s.state.status==="error"||s.retryAt!==void 0&&Date.now()>=s.retryAt)&&(s={state:{status:"loading"},notify:s?.notify??null,waiting:[],failures:s?.failures??0},Ws&&!Ys(i,e)?s.state={status:"ready",diff:Ws.prepareComparison(i,e,t??"")}:Uf(r,s,i,e,t??"")),ze.set(r,s),$p(),s}function Sp(i,e,t,n){let r=xp(i,e,t);return r.notify=n,r.state}function Cp(i,e,t=null){return new Promise((n,r)=>{let s=(o=!1)=>{let c=xp(i,e,t,o),{state:d}=c;d.status==="loading"?c.waiting.push(()=>s()):d.status==="ready"?n(d.diff):r(new Error(d.message))};s(!0)})}function Sn(i,e){let{head:t,from:n,to:r,tail:s}=Zt(i,e);return a`${t}{<span class="bundle-compare-rename-from">${n}</span> → <span class="bundle-compare-rename-to">${r}</span>}${s}`}function Cn({from:i,to:e}){return a`<span class="bundle-compare-rename-from">${i}</span> → <span class="bundle-compare-rename-to">${e}</span>`}function En(i){let e=new Map;if(!i)return e;for(let t of i.onlyBase)e.set(t.path,{kind:"removed",basePath:t.basePath,baseBytes:t.bytes,otherBytes:null});for(let t of i.onlyOther)e.set(t.path,{kind:"added",baseBytes:null,otherBytes:t.bytes});for(let t of i.changed){let n={...t.meta?{meta:t.meta}:{}};e.set(t.path,t.renamedFrom==null?{kind:"changed",basePath:t.basePath,baseBytes:t.baseBytes,otherBytes:t.otherBytes,...t.modified===!1?{modified:!1}:{},...n}:{kind:"renamed",basePath:t.basePath,renamedFrom:t.renamedFrom,modified:t.modified,baseBytes:t.baseBytes,otherBytes:t.otherBytes,...n})}return e}function ae(i,e,t,{kind:n,basePath:r=t}){let s=n==="added"?"":K(i).get(r),o=n==="removed"?"":K(e).get(t);return n==="repointed"&&(s=o=o??s),{before:s,after:o}}function Xs(i,e,t,n=[]){let r=En(t);if(!t)return r;for(let s of n){if(!r.has(s.parent)){let c=Re(K(e).get(s.parent)??K(i).get(s.parent));r.set(s.parent,{kind:"repointed",baseBytes:c,otherBytes:c})}let o=r.get(s.parent);o.repointed=[...o.repointed??[],s]}return r}function Ep(i,e,t){return[...Xs(i,e,t.files,t.resolutions?.changed)].map(([n,r])=>({path:n,...r,...ae(i,e,n,r)}))}function Tp(i,{maxBytes:e,maxLines:t}){let n=0,r=0;for(let{before:s,after:o}of i)for(let c of[s,o])if(n+=Re(c)??0,n>=e||(typeof c=="string"&&c!==""&&(r+=(c.match(/\n/gu)?.length??0)+ +!c.endsWith(`
76
- `)),r>=t))return!1;return!0}function Q(i){if(i==="")return[];let e=i.split(`
77
- `);return e.at(-1)===""&&e.pop(),e}var Rp=i=>i===""||i.endsWith(`
78
- `),Lp=i=>i.replace(/[ \t\n\v\f\r]+$/u,"").replaceAll(/[ \t\n\v\f\r]+/gu," ");function Ce(i,e,t=!1){let n=Ga(i,e,{format:"unified",context:0,whitespace:t?"change":"none"});return n?(Ka(n)[0]?.blocks??[]).map(({a0:r,a1:s,b0:o,b1:c})=>({a0:r,a1:s,b0:o,b1:c})):[]}function Mp(i,e,t,n=!1){if(!Array.isArray(t))return!1;let r=Q(i),s=Q(e),o=n?(u,p)=>Lp(u)===Lp(p):(u,p)=>u===p,c=0,d=0;for(let u of[...t,{a0:r.length,a1:r.length,b0:s.length,b1:s.length,last:!0}]){let{a0:p,a1:h,b0:f,b1:b}=u??{};if(![p,h,f,b].every(Number.isInteger)||p<c||f<d||h<p||b<f||h>r.length||b>s.length||!u.last&&h===p&&b===f||p-c!==f-d||u.last&&p>c&&!n&&Rp(i)!==Rp(e))return!1;for(;c<p;c++,d++)if(!o(r[c],s[d]))return!1;c=h,d=b}return!0}var Vf=3,qe=20,Kf=4;function Rn(i,e,{ignoreWhitespace:t=!1,changes:n=null,marks:r=null}={}){let s=Q(i),o=Q(e),c=n?.blocks??Ce(i,e,t),d={a:i!==""&&!i.endsWith(`
79
- `),b:e!==""&&!e.endsWith(`
80
- `)};return{a:s,b:o,blocks:c,...Js(c,r),noEol:d,words:new Map}}function Js(i,e){let t=new Set((e??[]).map(({a0:c,a1:d,b0:u,b1:p})=>`${c},${d},${u},${p}`)),n=new Set,r=0,s=0,o=0;return i.forEach(({a0:c,a1:d,b0:u,b1:p},h)=>{t.has(`${c},${d},${u},${p}`)&&d-c===p-u?(n.add(h),o+=p-u):(r+=p-u,s+=d-c)}),{additions:r,deletions:s,renamed:o,marked:n}}var Gf=2e6,Wf=2e4,Tn=i=>{let e=+(i!==""&&!i.endsWith(`
81
- `));for(let t=i.indexOf(`
82
- `);t!==-1;t=i.indexOf(`
83
- `,t+1))e++;return e};function Pp(i,e){if(typeof i!="string"||typeof e!="string")return null;if(i===e)return{additions:0,deletions:0};if(i==="")return{additions:Tn(e),deletions:0};if(e==="")return{additions:0,deletions:Tn(i)};if(i.length+e.length>Gf||Tn(i)+Tn(e)>Wf)return null;let t=0,n=0;for(let{a0:r,a1:s,b0:o,b1:c}of Ce(i,e))t+=c-o,n+=s-r;return{additions:t,deletions:n}}var Qs=(i,e,t=Ce(i,e,!0))=>!Mp(i,e,t);function Ap(i,e){let t=Ce(i,e,!0);return{hides:Qs(i,e,t),mixed:Ct(i,e,t)}}var Yf=new Set(["module","commonjs","module-typescript","commonjs-typescript","json","solidity","php","shell","rust","java","kotlin","gradle","objc","objcpp","swift","c","cpp","c-header","cpp-header","xml","cmake","pbxproj"]),Xf=/\.(?:[cm]?js|jsx|[cm]?ts|tsx|json5?|jsonc|css|scss|less|html?|xhtml|xml|svg|c|h|cc|cpp|cxx|hh|hpp|hxx|java|kts?|go|rs|cs|swift|php|sh|bash|zsh)$/u,Jf=new Set(["#!/usr/bin/env node","#! /usr/bin/env node","#!/usr/bin/node","#!/usr/local/bin/node","#!/usr/bin/env nodejs","#!/usr/bin/env deno","#!/usr/bin/env bun","#!/bin/sh","#! /bin/sh","#!/bin/sh -e","#!/usr/bin/env sh","#!/bin/bash","#! /bin/bash","#!/bin/bash -e","#!/usr/bin/env bash","#!/bin/zsh","#!/usr/bin/env zsh","#!/bin/dash"]);function Zs(i,e="",t=void 0){return typeof t=="string"?Yf.has(t):Xf.test(i.toLowerCase())||typeof e=="string"&&Jf.has(e.split(`
84
- `,1)[0])}function Mt(i,e=new Map,{context:t=Vf,split:n=!1}={}){let{a:r,blocks:s}=i,o=[],c=0,d=0;for(let u=0;u<=s.length;u++){let p=s[u],h=(p?p.a0:r.length)-c,f=u===0,b=u===s.length,v=e.get(u),g=f?0:t+(v?.top??0),y=b?0:t+(v?.bottom??0);if(v?.all||h-g-y<Kf)for(let _=0;_<h;_++)o.push({kind:"ctx",a:c+_,b:d+_});else{for(let _=0;_<g;_++)o.push({kind:"ctx",a:c+_,b:d+_});o.push({kind:"fold",run:u,a:c+g,b:d+g,count:h-g-y,up:!b,down:!f});for(let _=h-y;_<h;_++)o.push({kind:"ctx",a:c+_,b:d+_})}if(!p)break;let x=to(i,u);if(n)for(let[_,$,S]of x)o.push({kind:"change",change:u,left:_,right:$,paired:S});else{let _=new Map,$=new Map;for(let[S,T,F]of x)F&&(_.set(S,T),$.set(T,S));for(let S=p.a0;S<p.a1;S++)o.push({kind:"del",a:S,change:u,pair:_.get(S)??null});for(let S=p.b0;S<p.b1;S++)o.push({kind:"add",b:S,change:u,pair:$.get(S)??null})}c=p.a1,d=p.b1}return o}function Qf(i,e){return eo(i.a,i.b,e)}function eo(i,e,t){let n=$r(i.slice(t.a0,t.a1),e.slice(t.b0,t.b1)).map(([c,d])=>[t.a0+c,t.b0+d]),r=[],s=t.a0,o=t.b0;for(let[c,d]of[...n,[t.a1,t.b1]]){for(;s<c||o<d;)r.push([s<c?s++:null,o<d?o++:null,!1]);c<t.a1&&(r.push([c,d,!0]),s=c+1,o=d+1)}return r}function to(i,e){return i.aligned??=new Map,i.aligned.has(e)||i.aligned.set(e,Qf(i,i.blocks[e])),i.aligned.get(e)}function Ip(i,e,t='<mark class="diff-word">',n="</mark>"){if(!e||e.length===0)return i;let r=!1,s="",o=0,c=0,d=()=>{for(;c<e.length&&o>=e[c][1];)r&&(s+=n,r=!1),c++};for(let u=0;u<i.length;){if(d(),i[u]==="<"){let f=i.indexOf(">",u),b=f===-1?i.slice(u):i.slice(u,f+1);s+=r?n+b+t:b,u+=b.length;continue}!r&&c<e.length&&o>=e[c][0]&&(s+=t,r=!0);let p=i[u]==="&"?i.indexOf(";",u):-1,h=p===-1||p-u>10?i[u]:i.slice(u,p+1);s+=h,u+=h.length,o++}return d(),r?s+n:s}function Fp(i,e){if(!e||e.length===0)return[{text:i,marked:!1}];let t=[],n=0;for(let[r,s]of e)r>n&&t.push({text:i.slice(n,r),marked:!1}),s>r&&t.push({text:i.slice(r,s),marked:!0}),n=s;return n<i.length&&t.push({text:i.slice(n),marked:!1}),t}var io=100,Ln=20;function si(i,e,t=Ln,n=0,r=i.length){let s=[];for(let o=n;o<Math.min(r,i.length)&&s.length<t;o++){let c=e.ranges(i[o]);c.length>0&&s.push({line:o,text:i[o],ranges:c})}return s}var Dp=(i,e,t,n)=>eo(i,e,n);function Zf(i,e,t,n,{split:r=!1,align:s=Dp}={}){return i===e?si(Q(e),t).map(o=>({...o,side:"b",sign:" "})):i===""?si(Q(e),t).map(o=>({...o,side:"b",sign:"+"})):e===""?si(Q(i),t).map(o=>({...o,side:"a",sign:"\u2212"})):Op(Q(i),Q(e),t,n,r,s)}function Op(i,e,t,n,r,s){let o=si(e,t);if(!n)return o.map(h=>({...h,side:"b",sign:null}));let c=(h,f)=>{let[b,v]=h==="a"?["a0","a1"]:["b0","b1"],g=n.length,y=0;for(;y<g;){let x=y+g>>1;n[x][v]<=f?y=x+1:g=x}return y<n.length&&n[y][b]<=f?n[y]:null},d=[];for(let{a0:h,a1:f}of n){if(d.length===Ln)break;d.push(...si(i,t,Ln-d.length,h,f))}let u=new Map;if(r){let h=new Set([...o.map(({line:f})=>c("b",f)),...d.map(({line:f})=>c("a",f))]);for(let f of h)f&&s(i,e,n,f).forEach(([b,v],g)=>{b!==null&&u.set(`a${b}`,g),v!==null&&u.set(`b${v}`,g)})}let p=h=>{let f=c(h.side,h.line);return f?r?[f.b0,0,u.get(`${h.side}${h.line}`),h.side==="a"?0:1]:h.side==="a"?[f.b0,0,0,h.line]:[h.line,1,0,0]:[h.line,1,0,0]};return[...o.map(h=>({...h,side:"b",sign:c("b",h.line)?"+":" "})),...d.map(h=>({...h,side:"a",sign:"\u2212"}))].toSorted((h,f)=>{let b=p(h),v=p(f);return b[0]-v[0]||b[1]-v[1]||b[2]-v[2]||b[3]-v[3]}).slice(0,Ln)}function Bp(i,e,t,{split:n=!1,align:r=Dp}={}){let s=[],o=0,c=d=>d!==""&&e.ranges(d).length>0;for(let{path:d,before:u,after:p}of i){if(typeof u!="string"||typeof p!="string"||!c(u)&&(u===p||!c(p)))continue;let h;if(u===p||u===""||p==="")h=Zf(u,p,e,null);else{let f=Q(u),b=Q(p),v=t(d,u,p);if(v?.length===0)continue;h=Op(f,b,e,v,n,r)}if(h.length!==0){if(s.length===io)return{files:s,hits:o,truncated:!0};s.push({path:d,hits:h}),o+=h.length}}return{files:s,hits:o,truncated:!1}}var eg=2,tg=2,ig=5e3,ng=5*6e4,rg=30,ro="The server's diff doesn't match this file as shown.",oi=(i,e)=>!!(i?.managedId&&e?.managedId)||!!i?.npm&&!!e?.npm&&i.npm.name===e.npm.name,so=i=>!(i>=400&&i<500&&i!==429),Ee=new Map;function zp(i,e,t){let{before:n,reason:r,reads:s,prettyHash:o,otherPrettyHash:c,ignoringWhitespace:d}=i??{},u=[i,d].map(h=>Array.isArray(h?.blocks)&&Array.isArray(h.marks)?{blocks:h.blocks,marks:h.marks}:null);if(!(i?.hash===e&&i.otherHash===t&&typeof n=="string"&&(r==null||typeof r=="string")&&Array.isArray(s)&&s.every(h=>typeof h=="string")&&u.every(Boolean)&&typeof o=="string"&&typeof c=="string"))return null;let p=u.map(h=>({status:"ready",before:n,...h,reason:r??null,reads:s}));return{status:"ready",before:n,reason:r??null,reads:s,copies:[o,c],settings:p}}var Pn=(i,e,t)=>i.fileHashes?.get(e)??_i(t),Mn=new Set;function oo(i){i&&(Mn.size===0&&setTimeout(()=>{let e=[...Mn];Mn.clear();for(let t of e)t()},rg),Mn.add(i))}function ao(i,e,t=0){let n=Math.min(ig*2**t,ng);return Object.assign(e,{until:Date.now()+n,tries:t+1}),setTimeout(()=>{i.notify?.()},n)?.unref?.(),e}function qp(){for(let[i,e]of Ee){if(Ee.size<=eg)break;e.ended&&Ee.delete(i)}}async function sg(i,e,t,n,r){let s=null;try{let o=async({path:c,otherPath:d,hash:u,otherHash:p,status:h,message:f,...b})=>{if(typeof c!="string"||typeof d!="string")return;let v=`${c}\0${d}`,g=e.diffs.get(v);if((g?.status??"loading")!=="loading")return;let[y,x]=[K(t).get(c),K(n).get(d)],_=f===void 0?typeof y=="string"&&typeof x=="string"&&zp({...b,hash:u,otherHash:p},await Pn(t,c,y),await Pn(n,d,x)):!so(h)&&{status:"error",message:f,retry:!1};!_||e.diffs.get(v)!==g||(_.tries=e.diffs.get(v)?.tries,e.diffs.set(v,_),oo(e.notify))};await(t.npm?Ed(t.npm.name,t.npm.version,n.npm.version,o):Cd(t.managedId,n.managedId,o,{scope:r}))}catch(o){if(o?.name==="AbortError"){Ee.get(i)===e&&Ee.delete(i);return}s={status:"error",message:o?.message??String(o),retry:so(o?.status)}}Object.assign(e,{ended:!0,rest:s}),s?.retry&&ao(e,s,e.tries),oo(e.notify),qp()}var no=0,Np=[];async function og(i){no<tg?no++:await new Promise(e=>{Np.push(e)});try{return await i()}finally{let e=Np.shift();e?e():no--}}async function ag(i,e,t,n,r,s,o,c,d){let u;try{let[p,h]=await Promise.all([Pn(n,r,s),Pn(o,c,d)]),f={path:r,hash:p,otherPath:c,otherHash:h},b=await og(()=>n.npm?Sd(n.npm.name,n.npm.version,o.npm.version,f):xd(n.managedId,o.managedId,f));u=zp(b,p,h)??{status:"error",message:ro,retry:!0},u.tries=t.tries}catch(p){if(p?.name==="AbortError"){i.diffs.get(e)===t&&i.diffs.delete(e);return}u={status:"error",message:p?.message??String(p),retry:so(p?.status)}}i.diffs.get(e)===t&&(u.status==="error"&&u.retry&&ao(i,u,t.tries),i.diffs.set(e,u),oo(i.notify))}function Hp(i,e,t,n,r,s,o,c,d,u=!1,p=""){let h=`${i.integrity}\0${n.integrity}\0${p}`,f=Ee.get(h);if(Ee.delete(h),(!f||f.rest?.until!==void 0&&Date.now()>=f.rest.until)&&(f={diffs:f?.diffs??new Map,notify:null,ended:!1,rest:null,tries:f?.rest?.tries},sg(h,f,i,n,p)),Ee.set(h,f),qp(),f.notify=c,t!==K(i).get(e)||s!==K(n).get(r))return{status:"error",message:ro,retry:!1};let b=`${e}\0${r}`,v=f.diffs.get(b);if(!v&&!f.ended&&!u)return{status:"loading"};if(!v&&f.rest)return f.rest;if(v?.status==="ready"){if(v.copies[0]===d?.[0]&&v.copies[1]===d?.[1])return v.tries=0,v.settings[Number(o)];v=ao(f,{status:"error",message:ro,retry:!0},v.tries),f.diffs.set(b,v)}if(v&&!(v.status==="error"&&v.until!==void 0&&Date.now()>=v.until))return v;let g={status:"loading",tries:v?.tries};return f.diffs.set(b,g),ag(f,b,g,i,e,t,n,r,s),g}function Up(){for(let[i,e]of Ee)if(e.rest?.retry)Ee.delete(i);else for(let[t,n]of e.diffs)n.status==="error"&&n.retry&&e.diffs.delete(t)}var lg=2,cg=5e3,dg=5*6e4,ug=new Set(["ts","mts","cts"]),pg=i=>!(i>=400&&i<500&&i!==429),Vp=(i,e)=>`${i??""}\0${e??""}`,Te=new Map,lo=new Map;function Kp(){for(let[i,e]of Te){if(Te.size<=lg)break;e.ended&&Te.delete(i)}}async function jp(i,e,t){if(e===null)return t===null;let n=typeof e=="string"?K(i).get(e):void 0;return typeof n=="string"&&t===await(i.fileHashes?.get(e)??_i(n))}async function hg(i,e,t,n,r){let s=!1,o=new Set;try{let c=async({path:d,hash:u,otherPath:p,otherHash:h})=>{d===void 0||p===void 0||(d??p)===null||await jp(t,d,u)&&await jp(n,p,h)&&o.add(Vp(d,p))};await(t.npm?Rd(t.npm.name,t.npm.version,n.npm.version,c):Td(t.managedId,n.managedId,c,{scope:r}))}catch(c){if(c?.name==="AbortError"){Te.get(i)===e&&Te.delete(i);return}s=pg(c?.status)}if(Object.assign(e,{files:o,ended:!0}),s){let c=lo.get(i)??0;lo.set(i,c+1),setTimeout(()=>{Te.get(i)===e&&(Te.delete(i),e.notify?.())},Math.min(cg*2**c,dg))?.unref?.()}else lo.delete(i);e.notify?.(),Kp()}function co(i,e,t,{kind:n,basePath:r=t},{before:s,after:o},c,d=""){if(n==="repointed"||!oi(i,e))return!1;let u=[n==="added"?null:r,n==="removed"?null:t];if(!u.every(f=>f===null||ug.has(Yi(f)))||u[0]!==null&&s!==K(i).get(r)||u[1]!==null&&o!==K(e).get(t))return!1;let p=`${i.integrity}\0${e.integrity}\0${d}`,h=Te.get(p);return Te.delete(p),h||(h={files:new Set,notify:null,ended:!1},hg(p,h,i,e,d)),Te.set(p,h),Kp(),h.notify=c,h.files.has(Vp(...u))}function mg(i,e){let t=e===void 0?"The bundle records no format for it now":`The bundle loads it as ${e}`,n=i===void 0?"no format recorded before":e===void 0?`${i} before`:`as ${i} before`,[r,s]=[Zn.isResourceFormat(i),Zn.isResourceFormat(e)];return`${t}, ${n}${r===s?"":r?", carried as data before, run as code now":", run as code before, carried as data now"}`}function ai(i=[],e=!1){return i.map(({field:t,from:n,to:r})=>t==="format"?a`<span class="bundle-compare-code-meta">${e?"format":`${n??"none"} \u2192 ${r??"none"}`}</span>`:a`<span class="${`bundle-compare-code-meta${r?"":" is-dropped"}`}">${t==="executable"?r?"+x":"\u2212x":r?"new entry":"entry"}</span>`)}var Gp=(i=[])=>i.filter(({field:e,to:t})=>e==="format"||t).map(({field:e,from:t,to:n})=>({name:e==="format"?`${t??"none"} \u2192 ${n??"none"}`:e==="executable"?"+x":"new entry",severity:"high"}));function Wp(i=[]){return i.map(({field:e,from:t,to:n})=>e==="format"?`${mg(t,n)}.`:e==="executable"?n?"It is now executable.":"It is no longer executable.":n?"It is now an entry point of the bundle.":"It is no longer an entry point of the bundle.").join(" ")}var Fn=[{kind:"changed",label:"Modified",letter:"M"},{kind:"renamed",label:"Renamed",letter:"\u2192"},{kind:"added",label:"Added",letter:"A"},{kind:"removed",label:"Removed",letter:"D"},{kind:"repointed",label:"Repointed",letter:"R"}],An=Object.fromEntries(Fn.map(i=>[i.kind,i])),te=2e3,fg=1e5,gg=16*1024*1024,bg=24,In=3,vg=300,uo=30,Yp=[{mode:"files",label:"Filter files",placeholder:"Filter changed files",icon:ji},{mode:"code",label:"Search code",placeholder:"Search changed code",icon:Vi}],Xp=qe/2,Jp=65536,Qp=new WeakSet,yg={large:"A large diff, not shown yet: the lines it removed aren't searched.",printed:"Shown pretty-printed: its lines as published, unsigned, the lines it removed not searched.",numbered:"Shown pretty-printed: its lines numbered as published."},Zp={"+":{name:"add",label:"Added"},"\u2212":{name:"del",label:"Removed"}," ":{name:"ctx",label:"Unchanged"}},N={layout:"unified",ignoreWhitespace:!1,ignoreRenames:!1,ignoreTypes:!1},eh=()=>`${N.ignoreWhitespace}\0${N.ignoreRenames}`,hh="Hide renamed names",go="Hide type-only changes",mh="Hide whitespace changes",po=()=>`${!!l.bundleSourcePretty}\0${N.ignoreWhitespace}\0${N.ignoreRenames}\0${N.ignoreTypes}`,th=({pretty:i,spacesHidden:e,hiding:t,typesHidden:n})=>[i?.status==="ready"&&"Pretty-print",e&&mh,t&&hh,n&&go].filter(Boolean),ih={mixed:"Whitespace changes are shown: hiding them would hide blanks of more than one kind changing."},ho=(i,e)=>i?.kind==="stasis"?i.bundle?.formats?.get(e):void 0,bo=i=>/\.[cm]?js$/iu.test(i),_g=(i,{ignoreRenames:e}=N)=>e&&bo(i),nh=(i,e,t)=>Nc(i,e,t).category==="minified",rh="A license file",sh=new WeakMap;function wg(i){let e=sh.get(i);if(e)return e;e=new Map;let t=(r,s,o)=>{r&&e.set(r,[...e.get(r)??[],{label:s,note:o}])};if(i?.kind==="stasis")for(let r of i.bundle?.entries??[])t(r,"entry","An entry point of the bundle");let n=i?.npm?.manifest;if(n){let r=new Set(K(i).keys());for(let o of["main","module","types"])typeof n[o]=="string"&&t(mr(n[o],r),o,`package.json "${o}": ${n[o]}`);for(let[o,c]of Object.entries(n.bin??{}))typeof c=="string"&&t(mr(c,r),"bin",`package.json "bin" ${o}: ${c}`);let s=Map.groupBy(typeof n.license=="string"?Yc(n.license,[...r]).filter(o=>o.file):[],o=>o.file);for(let o of r)fr.test(o)&&t(o,"license",s.has(o)?`License: ${s.get(o).map(c=>c.text).join(", ")}`:rh)}else for(let r of K(i).keys())fr.test(r.slice(r.lastIndexOf("/")+1))&&t(r,"license",rh);return sh.set(i,e),e}var kg=/(?:^|\/)package\.json$/u,oh=new WeakMap;function ah(i,e,t){let n=oh.get(i);return n||oh.set(i,n=new Map),n.has(e)||n.set(e,Wc(t,K(i).has(`${e.slice(0,-12)}binding.gyp`))),n.get(e)}var $g={unparsed:"the file couldn't be parsed",dynamic:"the file reads names by their spelling (eval or with)",jsx:"the file holds JSX","block-function":"the file declares a function in a block outside strict code",unverified:"the old side with the new names couldn't be checked to read as before"},lh=i=>`Renamed names are hidden, though the file reads ${i.map(e=>`.${e}`).join(", ")}, which a rename may change.`,_o=(i,e,t=N)=>`${i}\0${t.ignoreWhitespace}\0${_g(i,t)}\0${!!t.markRenames}\0${e}`,ch=new Map,mo=new Set,dh=new WeakMap;function Dn(i){let e=0;for(let t=i.indexOf(`
85
- `);t!==-1;t=i.indexOf(`
86
- `,t+1))e++;return e}var xg=i=>i.length*3<=Wi||i.length<=Wi&&ha(i)<=Wi,On=i=>i.printing?.applies?i.pretty??{status:"off"}:null,Sg=5,Cg=i=>i?i.length>Sg?`
87
- Affects files: ${i.length.toLocaleString()}`:`
88
- Affects files:
89
- ${i.join(`
90
- `)}`:"",wo=(i,e)=>a`<span class="bundle-compare-code-counts" aria-label="${`${i} added, ${e} removed lines`}"><span class="add">+${i.toLocaleString()}</span><span class="del">−${e.toLocaleString()}</span></span>`,lt=(i,e)=>i.length+e.length>gg||Dn(i)+Dn(e)>fg,uh=i=>i.kind==="repointed"||i.kind==="renamed"&&!i.modified&&!!i.repointed&&!i.meta,vo=i=>Array.isArray(i)?i.some(vo):i?.strings?i.strings.some(e=>e.trim()!=="")||i.values.some(vo):i!=null&&i!==m&&i!==!1&&i!=="",fo=new WeakMap;function fh(i,e){if(fo.has(i))return fo.get(i);let t=new Set;for(let n of e)for(let r=n.lastIndexOf("/");r>0&&!t.has(n.slice(0,r));r=n.lastIndexOf("/",r-1))t.add(n.slice(0,r));return fo.set(i,t),t}function ph(i){let e=K(i);return fh(e,e.keys())}function yo(i,e){for(let t of i.files.values())if(t===e)return!0;for(let t of i.dirs.values())if(yo(t,e))return!0;return!1}var Pt=class extends U{static properties={base:{attribute:!1},other:{attribute:!1},files:{attribute:!1},scope:{attribute:!1},resolutions:{attribute:!1},baseAlerts:{attribute:!1},otherAlerts:{attribute:!1},alertTags:{attribute:!1},newHosts:{attribute:!1},newHostTag:{attribute:!1},dependencies:{attribute:!1},openDependency:{attribute:!1},dependencyTags:{attribute:!1},extensions:{attribute:!1},baseName:{},otherName:{},path:{},seek:{attribute:!1},_query:{state:!0},_kinds:{state:!0},_mode:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.base=null,this.other=null,this.files=null,this.scope="",this.resolutions=[],this.baseAlerts=null,this.otherAlerts=null,this.alertTags=null,this.newHosts=null,this.newHostTag=null,this.extensions=null,this._treeLimit=300,this._treeRemaining=1/0,this.path=null,this._query="",this._kinds=new Set(Fn.map(e=>e.kind)),this._mode="files",this._blocks=new Map,this._found=null,this._rowless=new Map,this._rowlessCount=0,this._aligned=new WeakMap,this._sought=null,this._soughtRow=null,this._open=new Map,this._models=new Map,this._modelCap=bg,this._counted=new Map,this._countModels=new Map,this._drawnCounts=new Map,this._drawnTotals=new Map,this._spaced=new Map,this._shorter=new Map,this._expansions=new Map,this._limits=new Map,this._forced=new Set,this._shownPath=null}willUpdate(e){let t=`${this.base?.integrity}|${this.other?.integrity}`;if((t!==this._pair||e.has("files"))&&(this._pair=t,this._models.clear(),this._spaced.clear(),this._shorter.clear(),this._expansions.clear(),this._limits.clear(),this._forced.clear()),["files","resolutions","base","other"].some(n=>e.has(n))&&(this._entries=Xs(this.base,this.other,this.files,this.resolutions??[]),this._counted=new Map,this._countModels=new Map,this._drawnCounts=new Map,this._drawnTotals=new Map,this._treeLimit=this.extensions?.treePageSize??1/0,this._blocks.clear(),this._rowless.clear(),this._sought=this._soughtRow=null,this._soughtSettling=!1),e.has("seek")&&this.seek&&!Qp.has(this.seek)){Qp.add(this.seek);let{path:n,line:r,query:s}=this.seek,o=this._entries?.get(n),c=o?ae(this.base,this.other,n,o).after:null,d=typeof c=="string"?Q(c)[r]?.toLowerCase().indexOf(s.toLowerCase())??-1:-1;this._sought={path:n,side:"b",line:r,at:Math.max(d,0),query:s},this._soughtRow=null,this._soughtSettling=!1}}updated(){if(this._current!==this._shownPath){this._shownPath=this._current;let e=this.querySelector(".bundle-compare-diff");e&&(e.scrollTop=0),this.querySelector(".bundle-compare-code-tree .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})}this._scrollSought()}_scrollSought(){if(this._sought?.path===this._current&&!this._soughtSettling&&(this._sought=null),!this._soughtRow)return;let{path:e,index:t}=this._soughtRow;this._soughtRow=null;let r=[...this.querySelectorAll(".bundle-compare-diff-table")].find(o=>o.dataset.path===e)?.children[t];if(!r)return;let s=r.closest(".bundle-compare-diff");r.scrollIntoView({block:s&&r.offsetHeight>s.clientHeight/2?"start":"center"}),r.classList.remove("is-sought"),r.offsetWidth,r.classList.add("is-sought"),r.addEventListener("animationend",()=>r.classList.remove("is-sought"),{once:!0})}_shown(e){return this._kinds.has(e.kind)||!!e.modified&&this._kinds.has("changed")||!!e.repointed&&this._kinds.has("repointed")}_modules(){let e=this.base?.kind==="stasis"?this.base.bundle?.modules:null,t=this.other?.kind==="stasis"?this.other.bundle?.modules:null,n={root:this.files?.root,paths:this.files?.basePaths??new Map};return e||t?new Map([...[...e??[]].map(([r,s])=>[xr(n,r,Object.keys(s.files??{})),s]),...t??[]]):null}_baseDirs(){let e=this.files?.root?this.files.basePaths:null;return e?fh(e,e.values()):ph(this.base)}_format(e){let t=this._entries.get(e),n=Qn(this.base,t?.basePath??e),r=Qn(this.other,e);return[n,r].find(_a)??(t?.kind==="removed"?n:r)}_tree(){let e=[this._entries,`${[...this._kinds].join()}:${!!this.extensions?.fullPaths}`];if(this._treeKey?.[0]===e[0]&&this._treeKey[1]===e[1])return this._treeMemo;let t=[...this._entries.keys()],n=this._modules(),r=ei(this.files?.root,this.extensions?.fullPaths?"":Mc(ft(t).prefix,n,t)),{prefix:s}=r,o=t.filter(u=>this._shown(this._entries.get(u))),c=u=>s&&u.startsWith(s)?u.slice(s.length):u,d=Gi(o.map(c),o,n);return this._treeKey=e,this._treeMemo={prefix:s,root:r,tree:d,shown:o.length,allOrder:Wt(d)},this._treeMemo}_select(e){!e||e===this._current||this.extensions?.canSelect?.()===!1||this.dispatchEvent(new CustomEvent("compare-code-select",{detail:{path:e},bubbles:!0,composed:!0}))}_reveal(e,t){let n=(t&&e.startsWith(t)?e.slice(t.length):e).split("/");for(let r=1;r<n.length;r++)this._open.set(n.slice(0,r).join("/"),!0)}_railState(){let{prefix:e,root:t,tree:n,shown:r,allOrder:s}=this._tree(),o=Pc(n,this._mode==="files"?this._query:"",e,this.extensions?.fileFilter);return{prefix:e,root:t,tree:n,shown:r,filtered:o,order:o===n?s:o?Wt(o):[],allOrder:s}}_renderRail({prefix:e,root:t,tree:n,shown:r,filtered:s,order:o},c){this._countUntil=null,this._treeRemaining=this.extensions?.treePageSize?this._treeLimit:1/0,this._treeTruncated=!1;let d=this._mode==="code"?m:s?this._renderTree(s,c,0,!!this._query||r<=(this.extensions?.openAllMax??vg)):a`<div class="bundle-code-search-empty">No changed files match.</div>`,u=Object.fromEntries(Fn.map(({kind:h})=>[h,0]));for(let h of this._entries.values())h.kind!=="repointed"&&u[h.kind]++,h.modified&&u.changed++,h.repointed&&u.repointed++;let p=Yp.find(({mode:h})=>h===this._mode);return a`<aside class="bundle-code-rail"><div class="bundle-code-rail-head"><span class="bundle-code-rail-label">${this.extensions?.railLabel??"Changes"}</span> <span class="bundle-code-rail-count">${this._entries.size.toLocaleString()}</span> <span class="bundle-code-rail-actions"><button type="button" class="bundle-code-rail-action" aria-label="${this.extensions?.collapseLabel??"Collapse directories"}" data-tooltip="Collapse directories" ?disabled="${this._mode!=="files"||!!this._query&&!this.extensions?.collapseClearsSearch||n.dirs.size===0}" @click="${()=>this._collapseAll(n)}">${wc}</button></span></div>${t.from?a`<div class="bundle-code-rail-prefix mono" data-tooltip="${`Root moved: ${t.from} \u2192 ${t.to}`}">${Cn(t)}</div>`:e?a`<div class="bundle-code-rail-prefix mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>`:m}<div class="bundle-compare-code-filter"><label class="bundle-compare-code-search"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3.5 3.5"/></svg> <input type="search" placeholder="${this._mode==="files"?this.extensions?.searchPlaceholder??p.placeholder:p.placeholder}" aria-label="${this._mode==="files"?this.extensions?.searchLabel??p.placeholder:p.placeholder}" spellcheck="false" autocomplete="off" .value="${j(this._query)}" @input="${h=>{this._query=h.target.value,this._treeLimit=this.extensions?.treePageSize??1/0}}"> <span class="bundle-code-search-modes" role="tablist">${Yp.map(({mode:h,label:f,icon:b})=>a`<button type="button" class="${I({"bundle-code-search-mode":!0,active:h===this._mode})}" role="tab" aria-selected="${String(h===this._mode)}" aria-label="${f}" data-tooltip="${f}" @click="${()=>{this._mode=h}}">${b}</button>`)}</span></label> ${this.extensions?.filters??a`<div class="bundle-compare-code-kinds" role="group" aria-label="Show changes">${Fn.filter(({kind:h})=>u[h]>0).map(({kind:h,label:f})=>a`<button type="button" class="${`bundle-compare-code-kind ${h}`}" aria-pressed="${String(this._kinds.has(h))}" data-tooltip="${`${this._kinds.has(h)?"Hide":"Show"} ${f.toLowerCase()} files`}" @click="${()=>this._toggleKind(h)}">${f.toLowerCase()}</button>`)}</div>`}</div><div class="bundle-code-rail-body bundle-compare-code-tree">${this._mode==="code"?this._renderSearch(o,c,e):d} ${this._mode==="files"&&this._treeTruncated?a`<button type="button" class="bundle-compare-code-action" @click="${()=>{this._treeLimit+=this.extensions.treePageSize,this.requestUpdate()}}">Show more files</button>`:m}</div>${this.extensions?.footer?.(h=>{this._query="",this._select(h)})??m}</aside><bundle-code-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize file tree" data-tooltip="Drag to resize · double-click to reset"></bundle-code-splitter>`}_arrived=0;_renamesAlone=!0;_repaint=()=>{this._arrived++,this.isConnected&&this.requestUpdate()};disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this._countLater),clearTimeout(this._searchLater),this._countLater=this._searchLater=null}render(){let e=this._railState(),t=this._entries.has(this.path)?this.path:e.order[0]??null;t&&t!==this._current&&this._reveal(t,e.prefix),this._current=t,this._order=this.extensions?.filterContent===!1?e.allOrder:e.order;let n=t?a`${this._renderFile(t,this.extensions?.fullPaths?"":e.prefix)}${this.extensions?.fileActions?.(t,!1)??m}`:a`<div class="bundle-code-placeholder">No files differ in this comparison.</div>`;return a`<div class="bundle-code-view bundle-compare-code">${this._renderRail(e,t)}<div class="bundle-code-main">${n}</div></div>`}_toggleKind(e){let t=new Set(this._kinds);t.has(e)?t.delete(e):t.add(e),this._kinds=t}_collapseAll(e){this.extensions?.collapseClearsSearch&&(this._query=""),this._treeLimit=this.extensions?.treePageSize??1/0;let t=n=>{for(let r of n.dirs.values())this._open.set(r.path,!1),t(r)};t(e),this.requestUpdate()}_renderSearch(e,t,n){if(!this._query)return a`<div class="bundle-code-search-hint">Type to search the code of the changed files.</div>`;let{files:r,hits:s,truncated:o,unsigned:c}=this._searchResults(e);if(r.length===0)return a`<div class="bundle-code-search-empty">No matches.</div>`;let d=u=>n&&u.startsWith(n)?u.slice(n.length):u;return a`<div class="bundle-code-search-results bundle-compare-search"><div class="bundle-code-search-summary">${s.toLocaleString()} ${s===1?"hit":"hits"} in ${r.length.toLocaleString()} ${r.length===1?"file":"files"}${o?`, the first ${io}`:""}</div>${ce(r,u=>u.path,({path:u,hits:p})=>a`<div class="${I({"bundle-code-search-file":!0,current:u===t})}"><button type="button" class="${`bundle-code-search-file-name bundle-compare-code-name ${this._entries.get(u).kind}`}" data-tooltip-truncated data-tooltip="${u}" @click="${()=>this._select(u)}">${d(u)}</button> ${c.has(u)?a`<p class="bundle-compare-search-note">${yg[c.get(u)]}</p>`:m}<ul class="bundle-code-search-hits">${p.map(h=>a`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" aria-label="${`${Zp[h.sign]?.label??"Line"} ${h.line+1}${h.side==="a"?" of the old text":""}: ${h.text.trim().slice(0,80)}`}" @click="${()=>this._seek(u,h)}"><span class="bundle-code-search-hit-ln">${h.line+1}</span> <span class="${`bundle-compare-search-sign ${Zp[h.sign]?.name??""}`}" aria-hidden="true">${h.sign??""}</span> <span class="bundle-code-search-hit-text mono">${fd(h.text,h.ranges)}</span></button></li>`)}</ul></div>`)}</div>`}_searchResults(e){let t=eh(),n=`${this._query}\0${this._forced.size}\0${t}\0${N.layout}\0${!!l.bundleSourcePretty}\0${Uc()}\0${this._rowlessCount}\0${e.join("\0")}`;if(this._found?.key===n&&this._found.entries===this._entries)return this._found.result;let r=null,s=!0,o=new Map,c=(h,f,b)=>{if(o.get(h)==="printed")return null;let v=`${N.ignoreWhitespace}\0${h}`;if(this._blocks.has(v))return this._blocks.get(v);if(!this._forced.has(h)&&lt(f,b))return o.set(h,"large"),null;let g=performance.now();if(r??=g+uo,g>r)return s=!1,null;let y=N.ignoreWhitespace&&!this._unlisted(h,this._entries.get(h),{before:f,after:b}),x=Ce(f,b,y);return y&&Ct(f,b,x)&&(x=Ce(f,b)),this._blocks.set(v,x),x},d=e.flatMap(h=>{let f=this._entries.get(h);if(!this._searchable(f))return[];let b=ae(this.base,this.other,h,f),{before:v,after:g}=b;if(this._prettyShown(h,f,b)){if(!/\S/u.test(this._query))return[];let y=v!==""&&g!==""&&v!==g;if(y&&this._rowless.get(h)===t)return[];o.set(h,y?"printed":"numbered")}return[{path:h,...b}]}),u=(h,f,b,v)=>{let g=this._aligned.get(b);return g||this._aligned.set(b,g={a:h,b:f,blocks:b}),to(g,b.indexOf(v))},p={...Bp(d,md(this._query,!1,!1),c,{split:N.layout==="split",align:u}),unsigned:o};return s?this._found={key:n,entries:this._entries,result:p}:this._searchLater??=setTimeout(()=>{this._searchLater=null,this.requestUpdate()}),p}_searchable(e){return e.modified!==!1||uh(e)}_prettyShown(e,t,n){if(!l.bundleSourcePretty)return!1;let r=this._printing(e,t,n);return!!r?.applies&&r.copies.status!=="error"}_noteRowless(e,t){let n=t?eh():void 0;this._rowless.get(e)!==n&&(n===void 0?this._rowless.delete(e):this._rowless.set(e,n),this._rowlessCount++)}_seek(e,t){this._sought={path:e,side:t.side,line:t.line,at:t.ranges[0]?.[0]??0,query:this._query},e===this._current?this.requestUpdate():this._select(e,!1)}_soughtLine(e,t,n,r){let{side:s,line:o,at:c,query:d}=this._sought;if(n?.status!=="ready")return{side:s,line:o};let u=y=>y.replaceAll(/\s+/gu,""),p=Q(ae(this.base,this.other,e,t)[s==="a"?"before":"after"]??""),h=p.slice(0,o).reduce((y,x)=>y+u(x).length,0)+u(p[o]?.slice(0,c)??"").length,f=u(d).toLowerCase(),b=(y,x)=>{if(!f)return null;let _=0,$=0,S=0,T="";for(let F of y)for(let O=0;O<F.length;O+=Jp){T+=u(F.slice(O,O+Jp)).toLowerCase();for(let z=T.indexOf(f,_);z!==-1;z=T.indexOf(f,_),$++){if(x($,S+z))return{index:$,start:S+z};_=z+f.length}let A=Math.max(_,T.length-f.length+1);T=T.slice(A),S+=A,_=Math.max(0,_-A)}return null},v=b(p,(y,x)=>x>=h),g=(v&&b(r[s],y=>y===v.index)?.start)??h;for(let y=0;y<r[s].length;y++)if(g-=u(r[s][y]).length,g<0)return{side:s,line:y};return null}_seekRows(e,t,{side:n,line:r},s){let o=h=>n==="b"?(h.kind==="ctx"||h.kind==="add")&&h.b===r||h.kind==="change"&&h.right===r:(h.kind==="ctx"||h.kind==="del")&&h.a===r||h.kind==="change"&&h.left===r,c=this._expansions.get(e)??new Map,d=Mt(t,c,{split:s}),u=d.findIndex(o);if(u===-1){let h=d.find(f=>f.kind==="fold"&&r>=f[n]&&r<f[n]+f.count);if(h){let f=c.get(h.run)??{},b=r-h[n];c=new Map(c).set(h.run,h.down?{...f,top:(f.top??0)+b+1+Xp}:h.up?{...f,bottom:(f.bottom??0)+h.count-b+Xp}:{all:!0}),this._expansions.set(e,c),d=Mt(t,c,{split:s}),u=d.findIndex(o)}}let p=this._limits.get(e)??te;return u>=p&&this._limits.set(e,Math.ceil((u+1)/te)*te),{rows:d,index:u}}_takeTreeRow(e=!1){return this._treeRemaining-- >0?!0:(this._treeTruncated=!0,e)}_renderTree(e,t,n,r){let s=[...e.dirs.entries()].toSorted(Fc),o=[...e.files.entries()].toSorted(([u],[p])=>u.localeCompare(p)),c=s.flatMap(([u,p])=>{let h=Ac(u,p,n),f=p.package,b=f?.ecosystem==="cargo"||f?.ecosystem==="composer"||f?.ecosystem==="soldeer",v=this._query?!0:this._open.get(p.path)??(r||n===0||yo(p,t)),g=this._baseDirs().has(p.sourcePath)?ph(this.other).has(p.sourcePath)?null:"removed":"added";if(!this._takeTreeRow(yo(p,t)))return[];let y=a`<li class="bundle-code-tree-dir"><details .open="${j(v)}" @toggle="${x=>{let _=x.currentTarget.open;this._open.get(p.path)!==_&&(this._open.set(p.path,_),this.extensions?.treePageSize&&this.requestUpdate())}}"><summary aria-label="${this.extensions?.directoryLabel?.(h.node)??m}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${f?wa(f.ecosystem):m} <span class="${I({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!f,"bundle-code-tree-package-vendored":b,"bundle-compare-code-name":!0,removed:g==="removed"})}" data-tooltip-truncated data-tooltip="${h.node.sourcePath}">${f?a`<span class="bundle-code-tree-package-name">${f.name}</span>${f.version?a`<span class="bundle-code-tree-package-version">${b?"- ":"@"}${f.version}</span>`:m}`:h.names.map((x,_)=>a`${_>0?a`<span class="bundle-code-tree-separator">/</span>`:m}${x}`)} </span>${f?.variant?a`<span class="bundle-code-tree-variant">variant ${f.variant}</span>`:m} <span class="bundle-compare-code-dir-count" data-tooltip="${`${p.fileCount} changed ${p.fileCount===1?"file":"files"}`}">${this.extensions?.directorySummary?.(h.node)??p.fileCount}</span> ${g?a`<span class="${`bundle-compare-code-letter ${g}`}" data-tooltip="${`${f?"Package":"Directory"} ${g}`}">${An[g].letter}</span>`:m}</summary>${v||!this.extensions?.treePageSize?this._renderTree(h.node,t,n+1,r):m}</details></li>`;return[{key:p.path,content:y}]}),d=o.flatMap(([u,p])=>{if(!this._takeTreeRow(p===t))return[];let{kind:h,repointed:f,renamedFrom:b,modified:v}=this._entries.get(p),g=f?`${f.length} repointed ${f.length===1?"import":"imports"}`:"",y=a`<li class="bundle-code-tree-file"><button type="button" class="${I({"bundle-code-tree-link":!0,current:p===t})}" aria-label="${this.extensions?.fileLabel?.(p)??m}" aria-current="${p===t?"true":m}" @click="${()=>this._select(p)}">${this.extensions?.filePrefix?.(p)??m}${Ke(p,this._format(p))}<span class="${`bundle-code-tree-name bundle-compare-code-name ${h}`}" data-tooltip-truncated data-tooltip="${p}">${u}</span> ${this.extensions?.fileSuffix?.(p)??m} ${b?a`<span class="bundle-compare-code-oldname" data-tooltip-truncated data-tooltip="${`Renamed from ${b}`}">← ${Zt(b,p,{extension:!1}).from}</span>`:m} ${this._fileTags(p,this._entries.get(p),!0)} ${this._treeCounts(p,this._entries.get(p))} ${f&&h!=="repointed"?a`<span class="bundle-compare-code-letter repointed" data-tooltip="${g}">R</span>`:m} <span class="${I({"bundle-compare-code-letter":!0,[h]:!0,pure:h==="renamed"&&!v})}" data-tooltip="${h==="repointed"?g:b?`Renamed${v?" and modified":""} from ${b}`:An[h].label}">${An[h].letter}</span></button></li>`;return[{key:p,content:y}]});return a`<ul class="${I({"bundle-code-tree":!0,root:n===0})}" aria-label="${n===0?this.extensions?.treeLabel??"Changed files":m}" @keydown="${n===0?Ic:m}">${ce(c,u=>u.key,u=>u.content)}${ce(d,u=>u.key,u=>u.content)}</ul>`}_treeCounts(e,t){if(t.kind==="repointed")return m;let n=this._lineCounts(e,t),r;if(n===null&&this._counted.has(e)?{published:n,shown:r}=this._largeCounts(e,t):r=n&&this._shownCounts(e,t),!(n||r)||r===void 0)return m;let{additions:s,deletions:o}=r??n,c=!n||n.additions>0||n.deletions>0,d=t.kind==="renamed",u=r?.renamed>0?`
91
- \u2248${r.renamed.toLocaleString()} lines differing in renamed names alone, marked`:"",p=n?`
92
- As published: +${n.additions.toLocaleString()} \u2212${n.deletions.toLocaleString()}`:"",h=r?`${r.aside.join(", ")}${u}${p}`:null;if(s===0&&o===0){if((d||t.modified===!1)&&!c)return a`<span class="bundle-compare-code-line-counts unchanged" aria-label="No line changes">=</span>`;if(r&&c)return a`<span class="bundle-compare-code-line-counts unchanged" aria-label="${`No line changes with ${r.aside.join(", ")}`}" data-tooltip="${`No line changes with ${h}`}">≈</span>`}let f=r&&(!n||s!==n.additions||o!==n.deletions);return a`<span class="bundle-compare-code-line-counts" aria-label="${`${s} added, ${o} removed lines`}" data-tooltip="${f?`With ${h}`:m}"><span class="${I({add:!0,empty:d&&s===0})}">+${s.toLocaleString()}</span> <span class="${I({del:!0,empty:t.kind==="added"||d&&o===0})}">−${o.toLocaleString()}</span></span>`}_countingState(e,t){return this._fileState(e,t,!0)}_shownCounts(e,t){if(!(l.bundleSourcePretty||N.ignoreWhitespace||N.ignoreRenames||N.ignoreTypes))return null;let n=`${po()}\0${this._arrived}\0${this._forced.size}`,r=this._drawnCounts.get(e);if(r?.settings===n)return r.counts;let s=performance.now();if(this._countUntil??=s+uo,s>this._countUntil){this._countLater??=setTimeout(()=>{this._countLater=null,this.requestUpdate()});return}let o=this._countingState(e,t),{model:c}=o,d=th(o),u=c&&d.length>0?{additions:c.additions,deletions:c.deletions,renamed:c.renamed,aside:d}:null;return this._drawnCounts.set(e,{settings:n,counts:u}),u}_lineCounts(e,t){if(this._counted.has(e))return this._counted.get(e);let n=performance.now();if(this._countUntil??=n+uo,n>this._countUntil)return this._countLater??=setTimeout(()=>{this._countLater=null,this.requestUpdate()}),null;let{before:r,after:s}=ae(this.base,this.other,e,t),o=Pp(r,s);return this._counted.set(e,o),o}_noteDrawn(e,t){let{model:n}=t;return n&&this._drawnTotals.set(e,{settings:po(),counts:{additions:n.additions,deletions:n.deletions,renamed:n.renamed,aside:th(t)}}),t}_largeCounts(e,t){let n=this._drawnTotals.get(e);if(n?.settings===po())return n.counts.aside.length===0?{published:n.counts,shown:null}:{published:null,shown:n.counts};let r=N.ignoreTypes?ae(this.base,this.other,e,t):null;return{published:null,shown:typeof r?.before=="string"&&typeof r.after=="string"&&co(this.base,this.other,e,t,r,this._repaint,this.scope)?{additions:0,deletions:0,renamed:0,aside:[go]}:null}}_model(e,t,n,r={},s=N.ignoreWhitespace){let o=r.changes?.blocks??r.marks??null,c=this._models.get(e);return this._models.delete(e),c?.before===t&&c.after===n&&c.given===o||(c={model:Rn(t,n,{...r,ignoreWhitespace:s}),before:t,after:n,given:o}),this._models.set(e,c),this._models.size>this._modelCap&&this._models.delete(this._models.keys().next().value),c.model}_counts(e,t,n,r,s){let o=r.changes?.blocks??r.marks??null,c=this._countModels.get(e);if(c?.before===t&&c.after===n&&c.given===o)return c.model;let d=r.changes?.blocks??Ce(t,n,s),u={blocks:d,...Js(d,r.marks)};return this._countModels.set(e,{model:u,before:t,after:n,given:o}),u}_fileState(e,t,n=!1){let r=ae(this.base,this.other,e,t),s=typeof r.before=="string"&&typeof r.after=="string",o=s&&co(this.base,this.other,e,t,r,this._repaint,this.scope);if(o&&N.ignoreTypes){let re={a:[],b:[],blocks:[],additions:0,deletions:0,renamed:0,marked:new Set,noEol:{a:!1,b:!1},words:new Map};return n?{pretty:null,hiding:!1,model:re,spacesHidden:!1,typesHidden:!0}:this._noteDrawn(e,{...r,textual:s,large:!1,printing:null,pretty:null,key:null,generated:!1,renamed:!1,warned:[],hiding:!1,changes:null,model:re,whitespace:null,spacesHidden:!1,types:o,typesHidden:!0})}let c=s&&(!n||l.bundleSourcePretty)?this._printing(e,t,r):null,d=l.bundleSourcePretty&&c?.applies?c.copies:null,{before:u,after:p}=d?.status==="ready"?d:r,h=s&&bo(e)&&bo(t.basePath??e)&&["ready","loading","error"].includes(d?.status)&&this._generated(e,t,r),f=h&&d.status==="ready";!n&&s&&this._sought?.path===e&&!this._forced.has(e)&&lt(u,p)&&this._forced.add(e);let b=s&&!this._forced.has(e)&&lt(u,p),{basePath:v=e}=t,g=re=>{let se=f&&!b?Hp(this.base,v,r.before,this.other,e,r.after,re,this._repaint,d.hashes,!n&&this._renamesAlone,this.scope):null,Dt=se?.status==="ready",je=Dt&&N.ignoreRenames,Ot=Dt&&!je,mi=je&&se.reason===null?se.reads:[],fi=Dt&&se.reason===null?se.marks.length>0||N.ignoreRenames&&se.before!==u:N.ignoreRenames&&h,ut=_o(e,d?.status==="ready",{...N,ignoreWhitespace:re,ignoreRenames:je,markRenames:Ot}),Ve=je?se.before:u,jn=je?{changes:{blocks:se.blocks}}:Ot?{marks:se.marks}:{},gi=s&&!b&&(!se||Dt||!N.ignoreRenames)?n?this._counts(ut,Ve,p,jn,re):this._model(ut,Ve,p,jn,re):null;return{key:ut,changes:se,warned:mi,renamed:fi,hiding:je,shown:Ve,model:gi,ignoreWhitespace:re}},y=this._unlisted(e,t,r),x=g(N.ignoreWhitespace&&!y),_=N.ignoreWhitespace&&!y&&!!x.model&&(x.model.mixed??=Ct(x.shown,p,x.model.blocks));_&&(x=g(!1));let{key:$,changes:S,warned:T,renamed:F,hiding:O,shown:A,model:z}=x;if(n)return{pretty:d,hiding:O,model:z,spacesHidden:x.ignoreWhitespace};d?.status==="ready"&&z?this._noteRowless(e,z.blocks.length===0):z&&(this._blocks.set(`${N.ignoreWhitespace}\0${e}`,z.blocks),this._aligned.set(z.blocks,z));let Z=z&&!y&&!N.ignoreWhitespace?this._whitespaceHidden(`${e}\0${d?.status==="ready"}\0${O}`,A,p):null,ne=z===null||y?null:_?"mixed":N.ignoreWhitespace?Qs(A,p,z.blocks)?"hideable":null:Z.hides&&!Z.mixed?"hideable":null;return this._sought?.path===e&&(this._soughtSettling=d?.status==="loading"||N.ignoreRenames&&(S?.status==="loading"||S?.status==="error")),this._noteDrawn(e,{before:A,after:p,textual:s,large:b,printing:c,pretty:d,key:$,generated:h,renamed:F,warned:T,hiding:O,changes:S,model:z,whitespace:ne,spacesHidden:x.ignoreWhitespace,types:o})}_unlisted(e,{basePath:t=e},{before:n,after:r}){return!Zs(e,r,ho(this.other,e))||!Zs(t,n,ho(this.base,t))}_whitespaceHidden(e,t,n){let r=this._spaced.get(e);return r?.before===t&&r.after===n||(r={before:t,after:n,hidden:Ap(t,n)}),this._spaced.delete(e),this._spaced.set(e,r),this._spaced.size>this._modelCap&&this._spaced.delete(this._spaced.keys().next().value),r.hidden}_generated(e,{kind:t,basePath:n=e},{before:r,after:s}){return t!=="repointed"&&oi(this.base,this.other)&&nh(this.base,n,r)&&nh(this.other,e,s)}_printing(e,t,n){let{kind:r,basePath:s=e,modified:o}=t,{before:c,after:d}=n;if(r==="repointed"||o===!1||typeof c!="string"||typeof d!="string"||c===d||!oi(this.base,this.other))return null;let u=[["base",this.base,s,c],["other",this.other,e,d]];if(!u.every(([,,v,g])=>g===""||Yi(v)!==null&&xg(g)))return null;let p=u.some(([,v,g,y])=>y!==""&&jc(v,v,g,y)),h=u.map(([v,,g,y])=>y===""?{status:"ready",text:y}:Vc(this.base,this.other,v,g,y,this._repaint)),f=h.find(v=>v.status==="error")??h.find(v=>v.status==="loading")??{status:"ready",before:h[0].text,after:h[1].text,hashes:h.map(v=>v.hash)},b=!p&&c!==""&&d!==""&&f.status==="ready"&&this._smaller(e,n,f);return{copies:f,minified:p,smaller:b,applies:p||b}}_smaller(e,{before:t,after:n},r){let s=this._shorter.get(e);if(s?.before===t&&s.after===n&&s.printed===r.before&&s.printedAfter===r.after)return s.smaller;let o=(d,u)=>Ce(d,u).reduce((p,{a0:h,a1:f,b0:b,b1:v})=>p+f-h+v-b,0),c=!lt(t,n)&&!lt(r.before,r.after)&&o(r.before,r.after)<o(t,n);return this._shorter.set(e,{before:t,after:n,printed:r.before,printedAfter:r.after,smaller:c}),c}_fileMessage(e,{kind:t,modified:n,meta:r},{before:s,after:o,textual:c,large:d,model:u,pretty:p,hiding:h,warned:f=[],changes:b,whitespace:v,typesHidden:g=!1}){let y=A=>G(A??0),x=Wp(r),_=`${t==="renamed"?x?"Renamed, its contents the same.":"Renamed without changes.":"The contents are the same."}${x?` ${x}`:""}`;if(c&&n===!1)return a`<div class="bundle-compare-code-message"><p>${_}</p></div>`;if(!c){if(t==="changed"&&n===!1)return a`<div class="bundle-compare-code-message">Binary file, its bytes the same · ${y(Re(o))}. ${x}</div>`;let A=t==="added"?y(Re(o)):t==="removed"?y(Re(s)):`${y(Re(s))} \u2192 ${y(Re(o))}`;return a`<div class="bundle-compare-code-message">Binary file ${t} · ${A}. A text diff is not available.${x?` ${x}`:""}</div>`}if(d)return a`<div class="bundle-compare-code-message"><p>This diff is large (${(Dn(s)+Dn(o)).toLocaleString()} lines across both sides) and may take a few seconds to compute.</p><button type="button" class="bundle-compare-code-action" @click="${()=>{this._forced.add(e),this.requestUpdate()}}">Show diff</button></div>`;if(g)return a`<div class="bundle-compare-code-message"><p>Only types changed in this file.${x?` ${x}`:""}</p><button type="button" class="bundle-compare-code-action" @click="${()=>this._setTypes(!1)}">Show type-only changes</button></div>`;if(b?.status==="loading"&&N.ignoreRenames)return a`<div class="bundle-compare-code-message" aria-busy="true">Hiding renamed names…</div>`;if(b?.status==="error"&&N.ignoreRenames)return a`<div class="bundle-compare-code-message"><p>Couldn't hide renamed names: ${b.message}</p><button type="button" class="bundle-compare-code-action" @click="${()=>this._setRenames(!1)}">Show renamed names</button></div>`;if(u.blocks.length>0)return null;let $=p?.status==="ready"&&p.before===p.after,S=!$&&N.ignoreWhitespace&&v==="hideable",T=!$&&h,F=[S&&"whitespace",T&&"renamed names"].filter(Boolean),O=$?"No actual code changes in this file.":F.length>0?`Only ${F.join(" and ")} changed in this file.`:null;return a`<div class="bundle-compare-code-message"><p>${O?`${O}${x?` ${x}`:""}`:_}</p>${f.length>0?a`<p>${lh(f)}</p>`:m} ${$?a`<button type="button" class="bundle-compare-code-action" @click="${()=>{Yt(),this.requestUpdate()}}">Show as published</button>`:m} ${S?a`<button type="button" class="bundle-compare-code-action" @click="${()=>this._setWhitespace(!1)}">Show whitespace changes</button>`:m} ${T?a`<button type="button" class="bundle-compare-code-action" @click="${()=>this._setRenames(!1)}">Show renamed names</button>`:m}</div>`}_fileName(e,t,n){let r=s=>n&&s.startsWith(n)?s.slice(n.length):s;return a`<span class="${I({"bundle-compare-code-pill":!0,[t.kind]:!0,pure:t.kind==="renamed"&&!t.modified})}">${An[t.kind].label}</span> ${Ke(e,this._format(e))} <span class="bundle-code-main-path mono" data-tooltip-truncated data-tooltip="${t.renamedFrom?`${t.renamedFrom} \u2192 ${e}`:e}">${t.renamedFrom?Sn(r(t.renamedFrom),r(e)):r(e)}</span> ${this._fileTags(e,t)}${this._githubLink(e,t)}`}_fileTags(e,t,n=!1){if(!n)return a`${this._entryTags(e,t)}${this._alertTags(e,t)}${this._runsTags(e,t)}${this._newHostTags(e,t)}${this._flagTags(e,t)}${this._readability(e,t)}${this._installTags(e,t)}${ai(t.meta)}`;let r=[this._alertTags(e,t),this._runsTags(e,t),this._newHostTags(e,t),this._flagTags(e,t,!1),this._treeTag(e,t),this._installTags(e,t,!0),ai(t.meta,!0)];return vo(r)?r:this._flagTags(e,t)}_githubLink(e,{kind:t,basePath:n=e}){let r=t==="removed"?cr(this.base,n):cr(this.other,e);return r?Dc(r):m}_alertTags(e,{kind:t,basePath:n=e}){let r=t==="removed"?this.baseAlerts?.get(n):this.otherAlerts?.get(e);return r?.length>0&&this.alertTags?this.alertTags(r):m}_newHostTags(e,{kind:t}){let n=t==="removed"?null:this.newHosts?.get(e);return n&&this.newHostTag?this.newHostTag(n):m}_runsTags(e,t){return[[Qc,Zc],[ed,td]].map(([n,r])=>{let{was:s,now:o}=this._reads(e,t,n);return t.kind==="removed"?r(s):r(o,s)})}_entryTags(e,{kind:t,basePath:n=e}){let r=wg(t==="removed"?this.base:this.other).get(t==="removed"?n:e)??[];return[...Map.groupBy(r,({label:o})=>o)].map(([o,c])=>a`<span class="${`bundle-compare-code-entry${o==="license"?" is-license":""}`}" data-tooltip="${c.map(({note:d})=>d).join(" \xB7 ")}">${o}</span>`)}_installTags(e,t,n=!1){if(!kg.test(e))return m;let{kind:r,basePath:s=e}=t,{before:o,after:c}=ae(this.base,this.other,e,t),d=new Map(r==="added"||o===void 0?[]:ah(this.base,s,o)),u=new Map(r==="removed"||c===void 0?[]:ah(this.other,e,c)),p=[...r==="removed"?d:u].map(([h,f])=>{let b=r==="removed"?f:d.get(h),v=b===void 0?", new":b===f?"":`, was: ${b}`;return a`<span class="bundle-compare-code-install" data-tooltip="${`${f}${v}`}">${h}</span>`});if(!n&&r!=="removed")for(let[h,f]of d)u.has(h)||p.push(a`<span class="bundle-compare-code-install is-dropped" data-tooltip="${`No longer run on install: ${f}`}">${h}</span>`);return p}_reads(e,t,n=Bc){let{kind:r,basePath:s=e}=t,{before:o,after:c}=ae(this.base,this.other,e,t);return{was:r==="added"?null:o===void 0?void 0:n(this.base,s,o),now:r==="removed"||c===void 0?null:n(this.other,e,c)}}_readability(e,t){let{was:n,now:r}=this._reads(e,t),s=c=>a`${dr(c)}${zc(c)}`,o=!n||!r||Ei(n)===Ei(r)&&n.kind===r.kind?s(r??n):a`<span class="bundle-compare-code-readability">${s(n)}<span aria-hidden="true">→</span>${s(r)}</span>`;return a`${ur(r??n)}${o}`}_flagTags(e,t,n=!0){return t.kind==="removed"?pr(this.base,t.basePath??e,t.baseBytes,n):pr(this.other,e,t.otherBytes,n)}_treeTag(e,t){let{was:n,now:r}=this._reads(e,t),s=r??n;if(!s)return m;let o=s.category!=="map"&&Ma.get(Ei(s)).mark;return a`${ur(s,["warn"])}${o?dr(s,!0):m}`}_fileFigures({kind:e,baseBytes:t,otherBytes:n},r){let s=o=>G(o??0);return a`${r?.blocks.length>(r?.marked?.size??0)?wo(r.additions,r.deletions):m} ${r?.renamed>0?a`<span class="bundle-compare-code-renamed" aria-label="${`${r.renamed} lines differing in renamed names alone`}" data-tooltip="Lines differing in renamed names alone, marked">≈${r.renamed}</span>`:m} <span class="bundle-code-main-stats">${e==="added"?s(n):e==="removed"?s(t):`${s(t)} \u2192 ${s(n)}`}</span>`}_highlighted(e,t,n,r=""){if(!n)return null;let s=Si(t,ho(e,t),n);if(!s)return null;let o=`${e.integrity}\0${t}${r?`\0${r}`:""}`,c=ch.get(o);return c?.text===n?c.lines:(mo.has(o)||(mo.add(o),(async()=>{let d=await yt(n,s),u=typeof d=="string"?zi(d):null;ch.set(o,{text:n,lines:u?.length===n.split(`
93
- `).length?u:null}),mo.delete(o),this.isConnected&&this.requestUpdate()})()),null)}_renderFile(e,t){let n=this._entries.get(e),{kind:r}=n,s=this._fileState(e,n),{after:o,before:c,textual:d,model:u}=s,p=uh(n),h=d&&(!p||u?.blocks.length>0),f=this._order.indexOf(e),b=t&&e.startsWith(t)?e.slice(t.length):e,v=r==="repointed"&&c===void 0?a`<div class="bundle-compare-code-message">Neither bundle carries this importer's source.</div>`:p&&u?.blocks.length===0?this._renderSource(e,o,n.repointed,s):this._fileMessage(e,n,s)??this._renderDiff(e,n,s);return a`<header class="bundle-code-main-bar bundle-compare-code-bar"><span class="bundle-code-file-nav"><button type="button" class="focus-code-nav-btn" aria-label="Previous file" data-tooltip="Previous file" ?disabled="${f<=0}" @click="${()=>this._select(this._order[f-1])}">${_c}</button> <button type="button" class="focus-code-nav-btn" aria-label="Next file" data-tooltip="Next file" ?disabled="${f===-1?this._order.length===0:f>=this._order.length-1}" @click="${()=>this._select(this._order[f+1])}">${xe}</button> </span>${this._fileName(e,n,t)} <button type="button" class="bundle-code-copy-path" data-copy-path="${e}" aria-label="Copy file path">${Ui}</button> <span class="bundle-code-main-spacer"></span> ${this._fileFigures(n,u)} ${this._toggles(h,On(s),s.renamed,s.whitespace==="hideable",s.types)}</header><div class="bundle-compare-diff" tabindex="0" aria-label="${`Changes in ${b}`}">${this._dependencyChanges(e)} ${n.repointed?this._renderRepointed(e,n.repointed,[o,c].find(g=>typeof g=="string"&&g!=="")??null,d&&!h):m} ${v}</div>`}_toggles(e,t=null,n=!1,r=!1,s=!1){return a`${e?this._hides(n,r,s):m} ${t?a`<button type="button" class="${I({"bundle-compare-code-toggle":!0,"is-loading":t.status==="loading","is-error":t.status==="error"})}" aria-pressed="${String(!!l.bundleSourcePretty)}" aria-busy="${t.status==="loading"?"true":m}" aria-label="Pretty-print" data-tooltip="${`${Hc(t)}${Cg(t.affects)}`}" @click="${()=>{Yt(),this.requestUpdate()}}">${qc}</button>`:m} ${e?a`<span class="bundles-overview-sort bundle-compare-code-layout" role="group" aria-label="Diff layout">${[["unified","Unified"],["split","Split"]].map(([o,c])=>a`<button type="button" aria-pressed="${String(N.layout===o)}" @click="${()=>{N.layout=o,this.requestUpdate()}}">${c}</button>`)}</span>`:m}`}_importLines(e,t){let n=new Map;for(let{specifier:r}of e){if(n.has(r))continue;let s=["'",'"',"`"].map(o=>`${o}${r}${o}`);n.set(r,t.flatMap((o,c)=>s.some(d=>o.includes(d))?[c]:[]))}return n}_textSide(e){return K(this.other).has(e)?this.other:this.base}_dependencyChanges(e){if(e!=="package.json"||!this.dependencies)return m;let{added:t,changed:n,removed:r}=this.dependencies,s=[...t.map(u=>["added",u]),...n.map(u=>["changed",u]),...r.map(u=>["removed",u])];if(s.length===0)return m;let o=[[t,"new"],[n,"updated"],[r,"removed"]].filter(([u])=>u.length>0).map(([u,p])=>`${u.length} ${p}`),c=Map.groupBy(s.flatMap(([,u])=>u.flags??[]),({label:u})=>u),d=this.openDependency;return a`<section class="bundle-compare-code-deps" aria-label="Dependency changes"><h4>Dependencies <span>${o.join(" \xB7 ")}</span>${[...c].map(([u,p])=>a`<span class="bundle-compare-code-deps-flagged">${p.length} ${u}</span>`)}</h4><ul>${s.map(([u,p])=>{let h=u==="changed"?a`<span class="bundle-compare-code-dep-range">${p.from} → <b>${p.to}</b></span>`:a`<span class="bundle-compare-code-dep-range">${p.range}</span>`,f=a`<span class="bundle-compare-code-dep-name">${p.name}</span>${p.kind?a`<span class="npm-dependency-kind">${p.kind}</span>`:m}${h}${this.dependencyTags?.(p,u)??m}`,b=`${{added:"New",changed:"Updated",removed:"Removed"}[u]}: ${p.name}`;return a`<li>${d&&p.opens?a`<button type="button" class="${`bundle-compare-code-dep is-${u}`}" aria-label="${b}" @click="${()=>d(p)}">${f}</button>`:a`<span class="${`bundle-compare-code-dep is-${u}`}" aria-label="${b}">${f}</span>`}</li>`})}</ul></section>`}_renderRepointed(e,t,n,r){let s=n?n.split(`
94
- `):[],o=n?this._highlighted(this._textSide(e),e,n):null,c=this._importLines(t,s),d=u=>u||"(empty target)";return a`<section class="bundle-compare-code-repointed" aria-label="Repointed imports"><h4>Repointed ${t.length===1?"import":"imports"} <b>${t.length}</b></h4><ul>${t.map(u=>{let p=c.get(u.specifier),h=`${u.conditions}${u.platform===null?"":` \xB7 Platform: ${u.platform}`}`;return a`<li><div class="bundle-compare-code-repointed-spec"><code data-tooltip-truncated data-tooltip="${u.specifier}">${u.specifier}</code> <span data-tooltip-truncated data-tooltip="${h}">${h}</span></div><div class="bundle-compare-code-repointed-targets"><span class="before"><span>Before</span><code data-tooltip-truncated data-tooltip="${d(u.baseTarget)}">${d(u.baseTarget)}</code></span> <span aria-hidden="true">→</span> <span class="after"><span>After</span><code data-tooltip-truncated data-tooltip="${d(u.otherTarget)}">${d(u.otherTarget)}</code></span></div>${p.slice(0,In).map(f=>this._importLine(f,s[f],o?.[f],u.specifier,r))} ${p.length>In?a`<span class="bundle-compare-code-repointed-more">and ${p.length-In} more ${p.length-In===1?"line":"lines"}</span>`:m}</li>`})}</ul></section>`}_importLine(e,t,n,r,s){let o=t.length>240?Math.max(0,t.indexOf(r)-80):0;return a`<button type="button" class="bundle-compare-code-repointed-line bundle-compare-diff-table" ?disabled="${!s}" aria-label="${`Go to line ${e+1}`}" @click="${()=>this._goToLine(e+1)}"><span class="diff-num">${e+1}</span> <code>${t.length<=240&&typeof n=="string"?X(ar(n,!0)):Ki(`${o>0?"\u2026":""}${t.slice(o,o+240)}${t.length>o+240?"\u2026":""}`,!0)}</code></button>`}_goToLine(e){let t=`${this._current}\0source`;e>(this._limits.get(t)??te)&&(this._limits.set(t,Math.ceil(e/te)*te),this.requestUpdate()),this.updateComplete.then(()=>this.querySelector(`.bundle-compare-diff [data-line="${e}"]`)?.scrollIntoView({block:"center"}))}_renderSource(e,t,n,{key:r,pretty:s}){let o=this._model(r,t,t),c={model:o,b:this._highlighted(this._textSide(e),e,t,s?.status==="ready"?"pretty":"")},d=new Set([...this._importLines(n,o.b).values()].flat()),u=`${e}\0source`,p=this._sought?.path===e&&this._sought.key!==r?this._soughtLine(e,this._entries.get(e),s,o):null;this._sought?.path===e&&(this._sought.key=r),p&&p.line<o.b.length&&(p.line>=(this._limits.get(u)??te)&&this._limits.set(u,Math.ceil((p.line+1)/te)*te),this._soughtRow={path:e,index:p.line});let h=this._limits.get(u)??te,f=o.b.length>h?o.b.slice(0,h):o.b;return a`<div class="bundle-compare-diff-table single" data-path="${e}" style="${_e({"--diff-num-width":`${String(o.b.length).length+1}ch`})}" role="table" aria-label="Source">${ce(f,(b,v)=>v,(b,v)=>a`<div class="${I({"diff-row":!0,ctx:!0,"is-import":d.has(v)})}" role="row" data-line="${v+1}"><span class="diff-num">${v+1}</span>${this._codeCell(c,"b",v,null)}</div>`)}</div>${o.b.length>f.length?a`<div class="bundle-compare-code-more"><button type="button" class="bundle-compare-code-action" @click="${()=>{this._limits.set(u,h+te),this.requestUpdate()}}">Show ${Math.min(te,o.b.length-f.length).toLocaleString()} more lines</button> <span>${(o.b.length-f.length).toLocaleString()} not shown</span></div>`:m}`}_hides(e,t,n){let r=[e&&["Renames",hh,N.ignoreRenames,()=>this._setRenames(!N.ignoreRenames)],t&&["Whitespace",mh,N.ignoreWhitespace,()=>this._setWhitespace(!N.ignoreWhitespace)],n&&["Type-only",go,N.ignoreTypes,()=>this._setTypes(!N.ignoreTypes)]].filter(Boolean);return r.length===0?m:a`<span class="bundle-compare-code-hide" role="group" aria-label="Hide"><span class="bundle-compare-code-hide-label" aria-hidden="true">Hide:</span>${r.map(([s,o,c,d])=>a`<mode-switch compact="compact" borderless .checked="${c}" accessible-label="${o}" label="${s}" @click="${d}"></mode-switch>`)}</span>`}_setWhitespace(e){N.ignoreWhitespace=e,this.requestUpdate()}_setTypes(e){N.ignoreTypes=e,this.requestUpdate()}_setRenames(e){N.ignoreRenames=e,e&&Up(),this.requestUpdate()}_renderDiff(e,t,{after:n,before:r,key:s,model:o,pretty:c,changes:d,hiding:u,warned:p=[],whitespace:h=null}){let{kind:f,basePath:b=e}=t,v=N.layout==="split",g=this._sought?.path===e&&this._sought.key!==s?this._soughtLine(e,t,c,o):null;this._sought?.path===e&&(this._sought.key=s);let y=g?this._seekRows(s,o,g,v):null;y?.index>=0&&(this._soughtRow={path:e,index:y.index+(v?1:0)});let x=this._expansions.get(s)??new Map,_=y?.rows??Mt(o,x,{split:v}),$=this._limits.get(s)??te,S=_.length>$?_.slice(0,$):_,T={model:o,a:f==="added"?null:this._highlighted(this.base,b,r,u?`renamed\0${this.other.integrity}\0${e}`:c?.status==="ready"?"pretty":""),b:f==="removed"?null:this._highlighted(this.other,e,n,c?.status==="ready"?"pretty":""),expand:(O,A)=>{let z=new Map(x);z.set(O,A==="all"?{all:!0}:{...z.get(O),[A]:(z.get(O)?.[A]??0)+qe}),this._expansions.set(s,z),this.requestUpdate()}},F=String(Math.max(o.a.length,o.b.length,1)).length;return a`${N.ignoreRenames&&d?.reason?a`<p class="bundle-compare-code-note">Renamed names are shown: ${$g[d.reason]??d.reason}.</p>`:m} ${ih[h]?a`<p class="bundle-compare-code-note">${ih[h]}</p>`:m} ${p.length>0?a`<p class="bundle-compare-code-note">${lh(p)} <button type="button" @click="${()=>this._setRenames(!1)}">Show them marked</button></p>`:m}<div class="${I({"bundle-compare-diff-table":!0,split:v,unified:!v})}" data-path="${e}" style="${_e({"--diff-num-width":`${F+1}ch`})}" role="table" aria-label="Diff">${v?a`<div class="diff-row diff-split-head" role="row"><span class="diff-half">Before<strong data-tooltip-truncated data-tooltip="${this.baseName}">${this.baseName}</strong></span> <span class="diff-half">After<strong data-tooltip-truncated data-tooltip="${this.otherName}">${this.otherName}</strong></span></div>`:m} ${ce(S,O=>this._rowKey(O),O=>v?this._splitRow(O,T):this._unifiedRow(O,T))}</div>${_.length>S.length?a`<div class="bundle-compare-code-more"><button type="button" class="bundle-compare-code-action" @click="${()=>{this._limits.set(s,$+te),this.requestUpdate()}}">Show ${Math.min(te,_.length-S.length).toLocaleString()} more rows</button> <span>${(_.length-S.length).toLocaleString()} not shown</span></div>`:m}`}_rowKey(e){return e.kind==="fold"?`f${e.run}:${e.a}`:e.kind==="change"?`c${e.left??""}:${e.right??""}`:`${e.kind}${e.a??""}:${e.b??""}`}_words(e,t,n){if(t==null||n==null)return null;let r=`${t}:${n}`;return e.words.has(r)||e.words.set(r,kr(e.a[t],e.b[n])),e.words.get(r)}_code(e,t,n,r){let s=r&&!(e.endsWith("\r")&&n?.at(-1)?.[1]===e.length);if(typeof t=="string")return X(ar(Ip(t,n),s));if(n){let o=Fp(e,n);return o.map((c,d)=>{let u=Ki(c.text,s&&d===o.length-1);return c.marked?a`<mark class="diff-word">${u}</mark>`:u})}return Ki(e,s)}_cell(e,t,n,r,s){return n==null?a`<span class="diff-num"></span><span class="diff-sign"></span><span class="diff-code diff-empty"></span>`:a`<span class="diff-num">${n+1}</span><span class="diff-sign">${r}</span>${this._codeCell(e,t,n,s)}`}_noEol(e,t,n){return n!=null&&e.noEol[t]&&n===e[t].length-1}_fold(e,t){let n=e.count<=qe;return a`<div class="diff-row diff-fold" role="row"><span class="diff-fold-actions">${!n&&e.down?a`<button type="button" aria-label="${`Show ${qe} more lines below`}" data-tooltip="${`Show ${qe} more lines`}" @click="${()=>t.expand(e.run,"top")}"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3v9m-4-4 4 4 4-4"/></svg></button>`:m} ${!n&&e.up?a`<button type="button" aria-label="${`Show ${qe} more lines above`}" data-tooltip="${`Show ${qe} more lines`}" @click="${()=>t.expand(e.run,"bottom")}"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 13V4M4 8l4-4 4 4"/></svg></button>`:m} <button type="button" aria-label="${`Show all ${e.count} unchanged lines`}" data-tooltip="Show all" @click="${()=>t.expand(e.run,"all")}"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4 6 4-4 4 4M4 10l4 4 4-4"/></svg></button> </span><span class="diff-fold-label">${e.count.toLocaleString()} unchanged ${e.count===1?"line":"lines"} · ${e.b+1}–${e.b+e.count}</span></div>`}_unifiedRow(e,t){let{model:n}=t;if(e.kind==="fold")return this._fold(e,t);if(e.kind==="ctx")return a`<div class="diff-row ctx" role="row"><span class="diff-num">${e.a+1}</span>${this._cell(t,"b",e.b," ",null)}</div>`;let r=e.kind==="del",s=r?this._words(n,e.a,e.pair)?.a:this._words(n,e.pair,e.b)?.b,o=n.marked?.has(e.change);return a`<div class="${`diff-row ${e.kind}${o?" renamed":""}`}" role="row" data-tooltip="${o?"Renamed names alone":m}">${r?a`<span class="diff-num">${e.a+1}</span><span class="diff-num"></span><span class="diff-sign">−</span>${this._codeCell(t,"a",e.a,s)}`:a`<span class="diff-num"></span><span class="diff-num">${e.b+1}</span><span class="diff-sign">+</span>${this._codeCell(t,"b",e.b,s)}`}</div>`}_codeCell(e,t,n,r){let s=e.model[t],o=e[t]?.[n],c=s[n],d=this._noEol(e.model,t,n),u=dh.get(s);u||dh.set(s,u=new Map);let p=u.get(n);return(!p||p.markup!==o||p.ranges!==r||p.noEol!==d)&&u.set(n,p={markup:o,ranges:r,noEol:d,drawn:this._code(c,o,r,!d)}),a`<span class="${I({"diff-code":!0,"diff-long":c.length>Lc})}">${p.drawn}${d?a`<span class="diff-no-eol" data-tooltip="No newline at end of file" aria-label="No newline at end of file">⊘</span>`:m}</span>`}_splitRow(e,t){let{model:n}=t;if(e.kind==="fold")return this._fold(e,t);if(e.kind==="ctx")return a`<div class="diff-row ctx" role="row"><span class="diff-half">${this._cell(t,"a",e.a," ",null)}</span> <span class="diff-half">${this._cell(t,"b",e.b," ",null)}</span></div>`;let r=e.paired?this._words(n,e.left,e.right):null,s=n.marked?.has(e.change);return a`<div class="${`diff-row change${s?" renamed":""}`}" role="row" data-tooltip="${s?"Renamed names alone":m}"><span class="${I({"diff-half":!0,del:e.left!==null,blank:e.left===null})}">${this._cell(t,"a",e.left,"\u2212",r?.a)}</span> <span class="${I({"diff-half":!0,add:e.right!==null,blank:e.right===null})}">${this._cell(t,"b",e.right,"+",r?.b)}</span></div>`}};customElements.define("bundle-compare-code",Pt);var bh=Symbol.for(""),Eg=i=>{if(i?.r===bh)return i?._$litStatic$};var ko=(i,...e)=>({_$litStatic$:e.reduce((t,n,r)=>t+(s=>{if(s._$litStatic$!==void 0)return s._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${s}. Use 'unsafeStatic' to pass non-literal values, but
95
- take care to ensure page security.`)})(n)+i[r+1],i[0]),r:bh}),gh=new Map,$o=i=>(e,...t)=>{let n=t.length,r,s,o=[],c=[],d,u=0,p=!1;for(;u<n;){for(d=e[u];u<n&&(s=t[u],(r=Eg(s))!==void 0);)d+=r+e[++u],p=!0;u!==n&&c.push(s),o.push(d),u++}if(u===n&&o.push(e[n]),p){let h=o.join("$$lit$$");(e=gh.get(h))===void 0&&(o.raw=o,gh.set(h,e=o)),t=c}return i(e,...t)},vh=$o(a),Fx=$o(ye),Dx=$o(Xo);var So=25e3,li=40,Tg=i=>[...i].toSorted(([e],[t])=>e.localeCompare(t));function yh(i,e,t,{resolutions:n=[],max:r=So}={}){let s=new Map,o=En(t);if(o.size*2>=r)return{rows:1/0,models:s};let c=new Set(n.map(u=>u.parent).filter(u=>!o.has(u))),d=n.length*2+c.size;for(let[u,p]of Tg(o)){d++;let{before:h,after:f}=ae(i,e,u,p);if(p.modified===!1)d++;else if(typeof h=="string"&&typeof f=="string"){if(lt(h,f))return{rows:1/0,models:s};let b=Rn(h,f);s.set(u,b),d+=Math.max(Mt(b).length,1)}else d++;if(d>=r)break}return{rows:d,models:s}}var xo=class extends Pt{static properties={...Pt.properties,models:{attribute:!1}};constructor(){super(),this.models=null,this._modelCap=1/0,this._fileLimit=li}_renamesAlone=!1;willUpdate(e){if(super.willUpdate(e),e.has("models"))for(let[t,n]of this.models??[]){let r=this._entries.get(t);if(!r)continue;let{before:s,after:o}=ae(this.base,this.other,t,r);this._models.set(_o(t,!1,{ignoreWhitespace:!1,ignoreRenames:!1}),{model:n,before:s,after:o,given:null})}e.has("files")&&(this._fileLimit=li,this._current=this._picked=null),(e.has("path")||e.has("files"))&&this.path&&this.path!==this._current&&(this._goTo=this.path),e.has("files")&&(this._toTop=!0)}updated(){let e=this._goTo&&this._section(this._goTo);if(e)this._picked=this._goTo,e.scrollIntoView({block:"start"});else if(this._toTop){let t=this.querySelector(".bundle-compare-diff");t&&(t.scrollTop=0)}this._goTo=null,this._toTop=!1,this._current!==this._shownPath&&(this._shownPath=this._current,this.querySelector(".bundle-compare-code-tree .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})),this._scrollSought()}_select(e,t=!0){!e||this.extensions?.canSelect?.()===!1||(this._current=this._picked=e,this.requestUpdate(),t&&this.updateComplete.then(()=>this._section(e)?.scrollIntoView({block:"start"})),this.dispatchEvent(new CustomEvent("compare-code-select",{detail:{path:e},bubbles:!0,composed:!0})))}_more(){this._fileLimit+=li,this.requestUpdate()}_searchable(e){return e.modified!==!1&&e.kind!=="repointed"}_countingState(e,t){return this._states?.get(e)??super._countingState(e,t)}_section(e){return[...this.querySelectorAll(".bundle-compare-all-file")].find(t=>t.dataset.path===e)??null}_spy(){this._spying||this.extensions?.canSelect?.()===!1||(this._spying=requestAnimationFrame(()=>{this._spying=0;let e=this.querySelector(".bundle-compare-diff");if(!e||this.extensions?.canSelect?.()===!1)return;this._fileLimit<this._order.length&&e.scrollTop+2*e.clientHeight>=e.scrollHeight&&this._more();let{top:t,bottom:n}=e.getBoundingClientRect(),r=this._picked&&this._section(this._picked)?.getBoundingClientRect();if(r&&r.bottom>t&&r.top<n)return;this._picked=null;let s=null;for(let c of e.querySelectorAll(":scope > .bundle-compare-all-file")){if(c.getBoundingClientRect().top>t+4)break;s=c}let o=s?.dataset.path??this._order[0]??null;o!==this._current&&(this._current=o,this.requestUpdate(),this.dispatchEvent(new CustomEvent("compare-code-select",{detail:{path:o},bubbles:!0,composed:!0})))}))}_fileBody(e,t,n){let r=t.repointed?this._renderRepointed(e,t.repointed,[n.after,n.before].find(o=>typeof o=="string"&&o!=="")??null,!1):m,s=t.kind==="repointed"||t.kind==="renamed"&&!t.modified&&!!t.repointed&&!t.meta&&!(n.model?.blocks.length>0);return a`${this._dependencyChanges(e)}${r}${s?m:this._fileMessage(e,t,n)??this._renderDiff(e,t,n)}`}_fileContent(e,t,n,r){return a`<header class="bundle-code-main-bar bundle-compare-all-file-head">${this._fileName(e,t,r)} <span class="bundle-code-main-spacer"></span> ${this._fileFigures(t,n.model)}</header>${this._fileBody(e,t,n)}`}_layout(e,t){return a`<div class="bundle-code-view bundle-compare-code">${this._renderRail(e,this._current)}<div class="bundle-code-main">${t}</div></div>`}render(){let e=this._railState(),t=this.extensions?.fullPaths?"":e.prefix,n=this.extensions?.filterContent===!1?e.allOrder:e.order;this._order=n,this._goTo&&n.includes(this._goTo)&&(this._current=this._goTo),n.includes(this._current)||(this._current=n[0]??null),this._current&&(this._goTo||this._current!==this._shownPath)&&this._reveal(this._current,e.prefix);let r=n.indexOf(this._current);r>=this._fileLimit&&(this._fileLimit=Math.ceil((r+1)/li)*li);let s=n.map(g=>[g,this._entries.get(g)]),o=s.map(([g,y])=>({path:g,entry:y,file:this._fileState(g,y)})),c=o.reduce((g,{file:y})=>g+(y.model?.additions??0),0),d=o.reduce((g,{file:y})=>g+(y.model?.deletions??0),0);this._states=new Map(o.map(({path:g,file:y})=>[g,y]));let u=o.filter(({file:g})=>On(g)),p=u.map(({file:g})=>On(g)),h=p.filter(g=>g.status==="error"),f=h.length>0?{...h[0],failed:h.length,of:p.length}:p.find(g=>g.status==="loading")??p[0]??null,b=f&&{...f,affects:u.map(({path:g})=>g)},v=o.some(({file:g})=>g.model?.blocks.length>0||g.whitespace||g.hiding||g.types);return this._layout(e,a`<header class="bundle-code-main-bar bundle-compare-code-bar"><span class="bundle-compare-all-title">${s.length.toLocaleString()} ${s.length===1?"file":"files"} changed</span> ${c+d>0?wo(c,d):m} <span class="bundle-code-main-spacer"></span> ${this._toggles(v,b,o.some(({file:g})=>g.renamed),o.some(({file:g})=>g.whitespace==="hideable"),o.some(({file:g})=>g.types))}</header><div class="bundle-compare-diff" tabindex="0" aria-label="Every change" @scroll="${()=>this._spy()}">${s.length===0?a`<div class="bundle-code-placeholder">${this._entries.size===0?"No files differ in this comparison.":"No changed files match."}</div>`:ce(o.slice(0,this._fileLimit),({path:g})=>g,({path:g,entry:y,file:x})=>a`<section class="bundle-compare-all-file" aria-label="${g}" data-path="${g}">${this.extensions?.fileActions?a`<div class="bundle-compare-file-content">${this._fileContent(g,y,x,t)}</div>${this.extensions.fileActions(g,!0)}`:this._fileContent(g,y,x,t)}</section>`)} ${o.length>this._fileLimit?a`<button type="button" class="bundle-compare-code-action bundle-compare-all-more" @click="${()=>this._more()}">Show more files (${(o.length-this._fileLimit).toLocaleString()} remaining)</button>`:m}</div>`)}};customElements.define("bundle-compare-all",xo);function Bn({base:i,other:e,diff:t,source:n,path:r,seek:s,baseName:o,otherName:c,select:d,extensions:u=null,mode:p}){let h=p?null:t.combined??=yh(i,e,t.files,{resolutions:t.resolutions?.changed??[]});p??=h.rows<So?"diff":"code";let f=p==="diff"?ko`bundle-compare-all`:ko`bundle-compare-code`;return vh`<${f} .base=${i} .other=${e} .files=${t.files} .scope=${t.scope??""} .resolutions=${t.resolutions?.changed??[]}
96
- .baseAlerts=${n?.files?.alerts?.(i)??null} .otherAlerts=${n?.files?.alerts?.(e)??null} .alertTags=${n?.files?.alertTags??null}
97
- .newHosts=${n?.files?.newHosts?.(i,e)??null} .newHostTag=${n?.files?.newHostTag??null}
98
- .dependencies=${n?.dependencies?.(i,e)??null} .openDependency=${n?.openDependency??null} .dependencyTags=${n?.dependencyTags??null}
99
- .models=${h?.models??null} .path=${r} .seek=${s} .extensions=${u} baseName=${o} otherName=${c}
100
- @compare-code-select=${b=>{b.stopPropagation(),d(b.detail.path)}}></${f}>`}var Rg=400,_h=24,Nn=["removed","added","changed"],ue=null;function He(i){return i.join(", ")}var Co=class extends U{static properties={details:{attribute:!1},integrity:{attribute:!1},request:{attribute:!1},source:{attribute:!1},review:{attribute:!1},_targetIntegrity:{state:!0},_otherDetails:{state:!0},_status:{state:!0},_scope:{state:!0},_fileSort:{state:!0},_pkgSort:{state:!0},_openSections:{state:!0},_mode:{state:!0},_codePath:{state:!0},_codeSeek:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this.integrity=null,this.request=null,this.source=null,this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._fileSort={removed:"name",added:"name",changed:"name"},this._pkgSort={removed:"size",added:"size",changed:"size"},this._openSections=new Set,this._mode="overview",this._codePath=null,this._codeSeek=null,this._repaint=()=>this.requestUpdate(),this._fitBody=null,this._fitObserver=null}connectedCallback(){super.connectedCallback(),this._fitBody&&this._fitObserver?.observe(this._fitBody)}disconnectedCallback(){super.disconnectedCallback(),this._fitObserver?.disconnect()}willUpdate(e){e.has("source")&&this.source&&!e.get("source")&&(this._openSections=new Set([...this._openSections,"files"])),(e.has("_otherDetails")||e.has("details"))&&this._status==="ready"&&!Sr(this.details,this._otherDetails).some(t=>t.id===this._scope)&&(this._scope=""),e.has("integrity")&&this._rebase(),(e.has("request")||e.has("integrity"))&&this.integrity&&this.request?.bundle===this.integrity?(this.request.target!==this._targetIntegrity&&this._choose(this.request.target),this._mode=xi(this.request.mode)):e.has("request")&&!e.has("integrity")&&e.get("request")?.bundle===this.integrity&&(this._targetIntegrity&&this._choose(null),this._mode="overview")}updated(){let e=this.querySelector(".bundle-compare-body");e!==this._fitBody&&typeof ResizeObserver=="function"&&(this._fitObserver??=new ResizeObserver(()=>this._fitLists()),this._fitObserver.disconnect(),e&&this._fitObserver.observe(e),this._fitBody=e),this._fitLists()}_fitLists(){let e=this._fitBody;if(!e)return;let t=getComputedStyle(e),n=e.getBoundingClientRect().top+e.clientTop+parseFloat(t.paddingTop)-e.scrollTop,r=f=>{let b=f.getBoundingClientRect();return b.top-n+f.parentElement.getBoundingClientRect().bottom-b.bottom},s=e.querySelector(".bundle-compare-rows--fill");if(s){let f=r(s),b=s.closest(".bundle-compare-section");for(let v=b;v;v=v.nextElementSibling){let g=v.matches("details[open]")&&v.querySelector(":scope > summary"),y=v===b?0:g?g.getBoundingClientRect().bottom+parseFloat(getComputedStyle(g).marginBottom)-v.getBoundingClientRect().top:v.getBoundingClientRect().height;f+=y+parseFloat(getComputedStyle(v).marginBottom)}e.style.setProperty("--compare-fill-around",`${f}px`)}let o=[...e.querySelectorAll(".bundle-compare-rows--scroll:not(.bundle-compare-rows--fill)")];if(o.length===0)return;let c=e.lastElementChild,d=new Map(o.filter(f=>c.contains(f)).map(f=>[f,f.parentElement.getBoundingClientRect().top])),u=Math.max(...d.values()),p=e.clientHeight-parseFloat(t.paddingTop)-parseFloat(t.paddingBottom),h=parseFloat(getComputedStyle(c).marginBottom);for(let f of o)d.get(f)>=u-1?f.style.setProperty("--compare-rest",`${p-r(f)-h}px`):f.style.removeProperty("--compare-rest")}_rebase(){let e=this._baseKey;if(ue&&e&&e!==ue.base&&(ue=null),ue&&e===ue.base){let{target:t}=ue;if(this._scope=ue.scope,this._mode=ue.mode,this._codePath=ue.codePath,ue=null,!t){this._targetIntegrity=null,this._otherDetails=null,this._status="idle";return}this._targetIntegrity=t;let n=this.source?null:dc(t,r=>!!(r.json||r.bundle));n?(this._otherDetails=n,this._status="ready"):(this._otherDetails=null,this._status="loading",this._loadOther(t));return}this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._codePath=null}get _baseKey(){return this.source?this.source.base:this.integrity}_swap(){let e=this._targetIntegrity;e&&e!==this._baseKey&&this._reopen(e,this._baseKey)}_pickBase(e){!e||e===this._baseKey||(e===this._targetIntegrity?this._swap():this._reopen(e,this._targetIntegrity))}_reopen(e,t){if(this.source){ue={base:e,target:t,scope:this._scope,mode:this._mode,codePath:this._codePath},this.source.open(e,t,this._mode);return}if(!Gt(l.bundles??[],this.integrity).some(s=>s.integrity===e))return;ue={base:e,target:t,scope:this._scope,mode:this._mode,codePath:this._codePath};let n=s=>s&&!s.error&&(s.json||s.bundle)&&[e,t].includes(s.integrity),r=[this._otherDetails,this._baseReady?this.details:null].filter(n);this.dispatchEvent(new CustomEvent("bundle-swap",{bubbles:!0,composed:!0,detail:{integrity:e,target:t,bundles:r,mode:this._mode}}))}_nameFor(e){return this.source?this.source.name(e):(l.bundles??[]).find(n=>n.integrity===e)?.name??`${e.slice(0,15)}\u2026`}_pick(e){this._choose(e),this._notify()}_notify(){this.dispatchEvent(new CustomEvent("bundle-compare-change",{bubbles:!0,composed:!0,detail:{base:this.integrity,target:this._targetIntegrity,mode:this._mode}}))}_choose(e){let t=e||null;if(this._targetIntegrity=t,this._otherDetails=null,this._codePath=null,!t){this._status="idle",this._scope="";return}this._status="loading",this._loadOther(t)}async _loadOther(e){if(this.source){let r;try{r=await this.source.load(e)}catch(s){if(s.name==="AbortError")return;r={error:s.message}}if(this._targetIntegrity!==e)return;this._otherDetails=r,this._status="ready";return}let t=Gt(l.bundles??[],this.integrity).find(r=>r.integrity===e);if(!t){this._status="idle",this._targetIntegrity=null,this._notify();return}let n;try{n=await uc(e,t)}catch(r){if(r.name==="AbortError")return;throw r}this._targetIntegrity===e&&(this._otherDetails=n,this._status="ready")}get _baseReady(){return!!(this.details&&this.details.integrity===this.integrity&&(this.details.json||this.details.bundle))}_openFile(e){this._codePath=e,this._mode="code",this._notify()}_openLine({path:e,line:t,query:n}){this._codeSeek={path:e,line:t-1,query:n},this._openFile(e)}_fileRow(e,t,n,r=e,s=!1,o=void 0,c=e,d=void 0){let u=this.source?.files;return a`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" @click="${()=>this._openFile(e)}">${u?u.icon(e,[[this._otherDetails,c],[this.details,e]]):m}<span class="bundle-compare-row-path mono" data-tooltip-truncated data-tooltip="${r}">${t}</span>${u&&s?u.tag(this.details,e,d):m}${ai(o)}${n}</button></li>`}_group(e,t,n,r,s,o=m,{fill:c=!1,lanes:d=Nn,style:u={}}={}){return t.length===0?m:a`<section class="${`bundle-compare-group bundle-compare-${n}`}" style="${_e({"--compare-lane":String(d.indexOf(n)+1),...u})}"><header class="bundle-compare-group-head"><span class="bundle-compare-dot" aria-hidden="true"></span> <span class="bundle-compare-group-title" data-tooltip-truncated data-tooltip="${e}">${e}</span> <span class="bundle-compare-group-count">${t.length}</span> ${o}</header><ul class="${c?"bundle-compare-rows bundle-compare-rows--scroll bundle-compare-rows--fill":"bundle-compare-rows bundle-compare-rows--scroll"}">${ce(t,r,s)}</ul></section>`}_sizeCells(e){let t=r=>r==null?"\u2014":G(r),n=r=>`${r.toLocaleString()} LoC`;return e.delta===void 0?a`<span class="bundle-compare-row-size" data-tooltip="${e.lines>0?n(e.lines):m}">${t(e.bytes)}</span>`:a`<span class="${`bundle-compare-row-delta ${e.delta===null?"":Lt(e.delta)}`}" data-tooltip="${`${t(e.baseBytes)} \u2192 ${t(e.otherBytes)}${e.baseLines>0||e.otherLines>0?` \xB7 ${e.baseLines.toLocaleString()} \u2192 ${n(e.otherLines)}`:""}`}">${e.delta===null?"\u2014":Ks(e.delta)}</span>`}_sortActions(e,t,n,r=!1,s=this[e][t]){return a`<span class="bundles-overview-sort" role="group" aria-label="${`${t} ${n} order`}">${[["name","Name"],["size","Size"],...r?[["flags","Flags"]]:[]].map(([o,c])=>a`<button type="button" aria-pressed="${String(s===o)}" @click="${()=>{this[e]={...this[e],[t]:o}}}">${c}</button>`)}</span>`}_fileGroup(e,t,n,r,s){let o=this.source?.files,c=n!=="removed",d=g=>n==="added"?null:{details:this._otherDetails,path:g.basePath??g.path},u=g=>[...c&&o?.flags?o.flags(this.details,g.path,d(g)):[],...Gp(g.meta)],p=t.some(g=>u(g).length>0),h=this._fileSort[n]==="flags"&&!p?"name":this._fileSort[n],f=g=>n==="changed"?Math.abs(g.delta):g.bytes,b=h==="flags"?ad(t,u,g=>g.path):t.toSorted((g,y)=>(h==="size"?f(y)-f(g):0)||g.path.localeCompare(y.path)),v=g=>g.renamedFrom==null?this._fileRow(g.path,r(g.path),this._sizeCells(g),g.path,c,g.meta,g.basePath??g.path,d(g)):this._fileRow(g.path,Sn(r(g.renamedFrom),r(g.path)),this._sizeCells(g),`${g.renamedFrom} \u2192 ${g.path}`,c,g.meta,g.basePath??g.path,d(g));return this._group(e,b,n,g=>g.path,v,this._sortActions("_fileSort",n,"file",p,h),{lanes:s})}_pkgGroup(e,t,n,r){let s=this._pkgSort[n],o=u=>{let p=n==="changed"?u.delta:u.bytes;return p==null?-1:Math.abs(p)},c=t.toSorted((u,p)=>(s==="size"?o(p)-o(u):0)||Ge(u.pkg).localeCompare(Ge(p.pkg))),d=n==="changed"?0:Math.min(_h,Math.max(0,...t.map(u=>He(u.versions).length)));return this._group(e,c,n,u=>u.pkg,u=>a`<li><div class="bundle-compare-row"><span class="bundle-compare-pkg-dot" style="${_e({background:Pi(u.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${Ge(u.pkg)}">${Ge(u.pkg)}</span> ${n==="changed"?this._versionCell(u):d>0?a`<span class="bundle-compare-dep-ver" data-tooltip-truncated data-tooltip="${He(u.versions)}">${He(u.versions)}</span>`:m} ${this._sizeCells(n==="changed"?u:{bytes:u.bytes})}</div></li>`,this._sortActions("_pkgSort",n,"package"),{fill:!0,lanes:r,style:d>0?{"--compare-version-width":`${d}ch`}:{}})}_versionCell(e){let t=e.otherVersions,n=e.baseVersions;if(n.join()===t.join())return n.length>0?a`<span class="bundle-compare-dep-ver">${He(n)}</span>`:m;let r=e.direction??"changed",s=r==="up"?"\u2191":r==="down"?"\u2193":"\xB1";return a`<span class="bundle-compare-ver" aria-label="${`${r==="up"?"Upgraded":r==="down"?"Downgraded":"Changed"}: ${He(n)||"none"} to ${He(t)||"none"}`}"><span class="bundle-compare-ver-from">${He(n)||"\u2014"}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="${`bundle-compare-ver-to ${r}`}">${He(t)||"\u2014"}</span> <span class="${`bundle-compare-ver-dir ${r}`}" aria-hidden="true">${s}</span></span>`}_depGroup(e,t,n,r){let s=n==="changed"?0:Math.min(_h,Math.max(0,...t.map(d=>d.range.length))),o=d=>a`<span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${d.name}">${d.name}</span> ${this.source?.dependencyTags?.(d,n)??m}${d.kind?a`<span class="npm-dependency-kind">${d.kind}</span>`:m} ${n==="changed"?a`<span class="bundle-compare-ver" aria-label="${`Changed: ${d.from} to ${d.to}`}"><span class="bundle-compare-ver-from">${d.from}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="bundle-compare-ver-to changed">${d.to}</span></span>`:a`<span class="bundle-compare-dep-ver" data-tooltip-truncated data-tooltip="${d.range}">${d.range}</span>`}`,c=this.source?.openDependency;return this._group(e,t,n,d=>d.key,d=>a`<li>${c&&d.opens?a`<button type="button" class="bundle-compare-row bundle-compare-row-link" @click="${()=>c(d)}">${o(d)}</button>`:a`<div class="bundle-compare-row">${o(d)}</div>`}</li>`,m,{fill:!0,lanes:r,style:s>0?{"--compare-version-width":`${s}ch`}:{}})}_renderDependencies(e,t,n,r){return r.length===0?m:a`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Dependencies</h3>${this._cols(r,a`${this._depGroup(`Removed \xB7 only in ${t}`,e.removed,"removed",r)} ${this._depGroup(`Added \xB7 only in ${n}`,e.added,"added",r)} ${this._depGroup("Changed",e.changed,"changed",r)}`,"dependencies")}</section>`}_renderPackages(e,t,n,r=Nn){return e.removed.length===0&&e.added.length===0&&e.changed.length===0?m:a`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Packages</h3>${this._cols(r,a`${this._pkgGroup(`Removed \xB7 only in ${t}`,e.removed,"removed",r)} ${this._pkgGroup(`Added \xB7 only in ${n}`,e.added,"added",r)} ${this._pkgGroup("Changed",e.changed,"changed",r)}`,"packages")}</section>`}_cols(e,t,n){let r=e.map(s=>s==="changed"?"minmax(0, 5fr)":"minmax(0, 4fr)").join(" ");return a`<div class="bundle-compare-cols" data-lanes="${e.length}" data-section="${n}" style="${_e({"--compare-lanes":r})}">${t}</div>`}_collapsible(e,t,n,r,s=""){let o=this._openSections.has(e);return a`<details class="bundle-compare-section bundle-compare-collapsible" .open="${j(o)}" @toggle="${c=>this._setSection(e,c.currentTarget.open)}"><summary class="bundle-compare-section-head" @click="${c=>{c.preventDefault(),this._setSection(e,!o)}}">${t} <span class="bundle-compare-section-count">${n.toLocaleString()}</span>${s?a`<span class="bundle-compare-section-note" data-tooltip-truncated data-tooltip="${s}">${s}</span>`:m}</summary>${o?r():m}</details>`}_setSection(e,t){if(t===this._openSections.has(e))return;let n=new Set(this._openSections);t?n.add(e):n.delete(e),this._openSections=n}_renderResolutions(e){if(e.totalChanges===0)return m;let t=e.changed,n=t.slice(0,Rg),r=t.length-n.length,s=(d,u="")=>a`<td class="${u}"><code data-tooltip-truncated data-tooltip="${d}">${d}</code></td>`,o=d=>`${d.conditions}${d.platform===null?"":` \xB7 Platform: ${d.platform}`}`,c=n.some(d=>o(d)!=="*");return this._collapsible("resolutions","Import resolutions",t.length,()=>a`<section class="bundle-compare-group bundle-compare-changed bundle-compare-resolutions"><header class="bundle-compare-group-head"><span class="bundle-compare-dot" aria-hidden="true"></span> <span class="bundle-compare-group-title">Repointed</span> <span class="bundle-compare-group-count">${t.length}</span></header><table class="${c?"":"bundle-compare-resolutions--no-context"}"><thead><tr><th>File</th><th>Import</th><th>Before</th><th>After</th>${c?a`<th>Conditions</th>`:m}</tr></thead><tbody>${ce(n,d=>d.key,d=>{let u=o(d);return a`<tr><td><button type="button" class="bundle-compare-resolution-parent" data-tooltip-truncated data-tooltip="${d.parent}" @click="${()=>this._openFile(d.parent)}">${d.parent}</button></td>${s(d.specifier)} ${s(d.baseTarget||"(empty target)","bundle-compare-resolution-before")} ${s(d.otherTarget||"(empty target)","bundle-compare-resolution-after")} ${c?a`<td class="bundle-compare-resolution-context"><span data-tooltip-truncated data-tooltip="${u}">${u}</span></td>`:m}</tr>`})}</tbody></table>${r>0?a`<div class="bundle-compare-more">and ${r.toLocaleString()} more…</div>`:m}</section>`)}_comparison(){return Sp(this._otherDetails,this.details,this._scope,this._repaint)}_renderSummary(e){return $n(e,a`<div class="bundle-compare-modes" role="tablist" aria-label="Comparison view">${[["overview","Overview"],["code","Code"]].map(([t,n])=>a`<button type="button" role="tab" aria-selected="${String(this._mode===t)}" @click="${()=>{this._mode=t,this._notify()}}">${n}</button>`)}</div>`)}_renderPicker(e,t,n,r){return kn({source:this.source,from:{options:e,value:this._targetIntegrity,pick:s=>this._pick(s)},to:{options:this._baseOptions(),value:this._baseKey,placeholder:this._nameFor(this.integrity),pick:s=>this._pickBase(s)},clear:t?{run:()=>this._pick(null)}:null,swap:t&&this.source?.canSwap?.(this._targetIntegrity)!==!1?()=>this._swap():null,extras:n,comparison:r,openLine:s=>this._openLine(s)})}_baseOptions(){if(this.source)return Ne(this.source.choices??[]);let e=(l.bundles??[]).find(n=>n.integrity===this.integrity),t=Gt(l.bundles??[],this.integrity);return this._bundleOptions(e?[e,...t]:t)}_otherOptions(){return this.source?Ne(this.source.options):this._bundleOptions(Gt(l.bundles??[],this.integrity))}_bundleOptions(e){let t=new Map;for(let n of e)t.set(n.name,(t.get(n.name)??0)+1);return e.map(n=>({id:n.integrity,integrity:n.integrity,kind:n.kind??(n.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis"),summary:n.summary,size:typeof n.size=="number"?G(n.size):"\u2014",filename:t.get(n.name)>1?`${n.name} \xB7 ${n.integrity.slice(7,13)}\u2026`:n.name}))}render(){let e=this._otherOptions(),t=!!this._targetIntegrity&&(!!this.source||e.some(b=>b.integrity===this._targetIntegrity)),n=this._baseReady?Sr(this.details,t?this._otherDetails:null):[],r=n.length>0?a`<bundle-scope-selector .reasons="${n}" .value="${this._scope}" label="Compare scope" @scope-change="${b=>{this._scope=b.detail.value}}"></bundle-scope-selector>`:m,s=this.source?.noun??"bundle",o=t&&this._status==="ready"&&this._otherDetails&&(this._otherDetails.json||this._otherDetails.bundle)&&!this._otherDetails.error,c=this._baseReady&&o?this._comparison():null,d=c?.status==="ready"?c.diff:null,u=d?{base:this._otherDetails,other:this.details,files:d.files}:null,p=e.length>0||this.source?this._renderPicker(e,t,r,u):r,h=d?this._mode:"overview",f;return this._baseReady?this.source&&!t&&(this.source.pending||this.source.error||e.length===0)?f=a`<div class="${`bundle-compare-empty${this.source.error?" is-error":""}`}">${this.source.pending?`Loading ${s}s\u2026`:this.source.error??a`No other ${s}s to compare <strong>${this._nameFor(this.integrity)}</strong> with.`}</div>`:e.length===0&&!this.source?f=a`<div class="bundle-compare-empty">No other bundles to compare with. Drop a second <code>.map</code> or <code>.stasis.code.br</code> bundle to diff against this one.</div>`:t?this._status==="loading"||!this._otherDetails?f=a`<div class="bundle-compare-empty">Comparing…</div>`:this._otherDetails.error?f=a`<div class="bundle-compare-empty is-error">Couldn't read the selected ${s}: ${this._otherDetails.error}</div>`:!this._otherDetails.json&&!this._otherDetails.bundle?f=a`<div class="bundle-compare-empty is-error">The selected ${s} couldn't be parsed.</div>`:c?.status==="error"?f=a`<div class="bundle-compare-empty is-error">Couldn't compare the ${s}s: ${c.message}</div>`:d?h!=="code"&&(f=this._renderDiff(d)):f=a`<div class="bundle-compare-empty">Comparing…</div>`:f=a`<div class="bundle-compare-empty">Pick a ${s} above to compare <strong>${this._nameFor(this.integrity)}</strong> against.</div>`:f=a`<div class="bundle-compare-empty">Loading bundle…</div>`,a`<div class="bundle-compare">${xn(p,d?this._renderSummary(d):m)} ${h==="code"?Bn({base:this._otherDetails,other:this.details,diff:d,source:this.source,path:this._codePath,seek:this._codeSeek,baseName:this._nameFor(this._targetIntegrity),otherName:this._nameFor(this.integrity),select:b=>{this._codePath=b}}):a`<div class="bundle-compare-body">${f}</div>`}</div>`}_renderDiff(e){let t=this._nameFor(this._targetIntegrity),n=this._nameFor(this.integrity),r=[...e.files.onlyBase.map(y=>y.path),...e.files.onlyOther.map(y=>y.path),...e.files.changed.flatMap(y=>y.renamedFrom==null?[y.path]:[y.path,y.renamedFrom])],s=ei(e.files.root,ft(r).prefix),{prefix:o}=s,c=y=>o&&y.startsWith(o)?y.slice(o.length):y,d=e.files.onlyBase.length+e.files.onlyOther.length+e.files.changed.length,u={removed:e.files.onlyBase,added:e.files.onlyOther,changed:e.files.changed},p=!e.totals.identical,h=this.source?.dependencies?.(this._otherDetails,this.details)??null,f=Nn.filter(y=>(h??e.packageRows)[y].length>0),b=p?Nn.filter(y=>u[y].length>0):[],v=b.every(y=>f.includes(y))?f:b,g=p?this.source?.files?.warning(this.details,[...u.added,...u.changed].map(y=>y.path)):m;return a`${h?this._renderDependencies(h,t,n,f):this._renderPackages(e.packageRows,t,n,f)} ${g??m} ${e.totals.identical?e.resolutions.totalChanges>0?a`<div class="bundle-compare-caption">File contents are unchanged; import resolutions differ.</div>`:a`<div class="bundle-compare-identical">These two bundles carry identical files (${e.totals.unchangedFiles.toLocaleString()} ${e.totals.unchangedFiles===1?"file":"files"})${s.from?a`, moved <span class="mono">${Cn(s)}</span>`:""}.</div>`:this._collapsible("files","Files",d,()=>this._cols(v,a`${this._fileGroup(`Removed \xB7 only in ${t}`,u.removed,"removed",c,v)} ${this._fileGroup(`Added \xB7 only in ${n}`,u.added,"added",c,v)} ${this._fileGroup("Changed",u.changed,"changed",c,v)}`,"files"),s.from?`${s.from} \u2192 ${s.to}`:o)} ${this._renderResolutions(e.resolutions)}`}};customElements.define("bundle-compare",Co);var Eo=class extends Nl{static properties={reviewTitle:{type:String}};render(){return a`<dialog aria-labelledby="discard-review-title" @close="${this._onClose}"><header><h3 id="discard-review-title">Discard unpublished review?</h3></header><p class="lwd-body"><strong>${this.reviewTitle}</strong></p><p class="lwd-note">This permanently deletes this review and all its file verdicts and notes. This cannot be undone.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Discard review</button></footer></dialog>`}};customElements.define("discard-review-dialog",Eo);function zn(i){return Y("discard-review-dialog",i)}var At={...id,"accept-with-nits":"Accept with nits"},Lg=i=>i.revokedAt===null?i.publishedAt===null?"Draft":"Published":"Revoked",Mg={accept:"\u2713","accept-with-nits":"\xB7","request-changes":"!",reject:"\xD7"},To=i=>a`<span class="${`npm-review-verdict-icon ${i??"unchecked"}`}" aria-hidden="true">${Mg[i]??""}</span>`,It=i=>a`<span class="npm-review-verdict">${To(i)}${At[i]??"Not reviewed"}</span>`,di=i=>a`<span class="${`npm-review-badge ${i.revokedAt===null?i.publishedAt===null?"":"published":"revoked"}`}">${Lg(i)}</span>`,Ro=i=>a`<time datetime="${new Date(i).toISOString()}">${new Date(i).toLocaleString()}</time>`,Lo=(i,e)=>a`<div class="npm-review-progress" role="progressbar" aria-label="Files checked" aria-valuemin="0" aria-valuemax="${e||1}" aria-valuenow="${i}"><span style="${`width:${e?i/e*100:0}%`}"></span></div>`;function wh(i=[],e=[]){let t=new Set(e);return new Map(i.filter(n=>n.status&&!t.has(n.file)).map(n=>[n.file,{status:n.status,notes:+!!n.comment.trim()}]))}function ct(i){let e=od(i);if(e.length===0)return m;let t=e.filter(n=>n.bullet);return a`${e.filter(n=>!n.bullet).map(n=>a`<p class="npm-review-note">${n.text}</p>`)} ${t.length>0?a`<ul class="npm-review-note npm-review-note-list">${t.map(n=>a`<li>${n.text}</li>`)}</ul>`:m}`}var ci=null,pe=(i,e)=>["ecosystem","package","version","integrity","basePackage","baseVersion","baseIntegrity"].every(t=>i[t]===e[t]);function ui(i,e=!1){ci={review:i,continueReview:e}}function kh(i){if(!ci||!pe(ci.review,i))return null;let e=ci;return ci=null,e}function Ae(i){let e=`${i.package} ${i.version}`;return i.basePackage?i.basePackage===i.package?`${i.package} ${i.baseVersion} -> ${i.version}`:`${i.basePackage} ${i.baseVersion} -> ${e}`:e}var ie=i=>i._blocked||i._loading,$h=i=>i._shownReview?.publishedAt!=null,Pg=i=>i.coverage==="full"?"Full":"Partial",Po=i=>i._error?a`<p class="npm-review-error" role="alert">${i._error}</p>`:m,xh=i=>i._saveBlocked?a`<div class="npm-review-saving" role="status">Saving changes…</div>`:m,Mo=i=>[i._continuation?.review,...i._reviews].filter(Boolean).toSorted((e,t)=>+(e.publishedAt!==null)-+(t.publishedAt!==null)||(t.publishedAt??t.time)-(e.publishedAt??e.time)),Sh=i=>`npm-review-button npm-review-primary npm-review-finalize ${i._allowedVerdicts[0]}`,Ch=(i,e,t,n,r=Object.keys(At),s=!1)=>a`<div class="npm-review-verdict-options" role="group" aria-label="Verdict">${Object.entries(s?{"":"Not checked",...At}:At).map(([o,c])=>a`<label class="${`npm-review-verdict-choice ${o||"unchecked"}`}"><input type="radio" name="${i}" aria-label="${c}" value="${o}" .checked="${j(e===o)}" ?disabled="${n||o!==""&&!r.includes(o)}" @change="${()=>t(o)}">${c}</label>`)}</div>`;function Ag(i){let e=$h(i),t=i._shownReview,n=i._summary,r=i._canEdit?{label:"Finalize review",run:()=>i._beginPublish(),disabled:!n.checkedFiles}:!e||!i._writable?null:i._activeReview||i._ownPublished.length===0?{label:"Resume your review",run:()=>i._resume()}:t.user===i.session?.id?{label:"Revise review",run:()=>i._change({action:"continue",reviewId:t.id,revision:t.revision})}:null;return a`<div class="npm-review-summary-actions">${e||i._draftStarted?di(t??{publishedAt:null,revokedAt:null}):m}<div class="npm-review-progress-block"><span>${i._unsaved&&(i._saveBlocked||i._error)?a`<button type="button" class="npm-review-button npm-review-text-button" @click="${()=>i._openPanel("unsaved")}">Unsaved changes</button>`:a`<strong>${n.checkedFiles} of ${n.totalFiles}</strong> files checked`}</span> ${Lo(n.checkedFiles,n.totalFiles)}</div>${r?a`<button type="button" class="${i._canEdit?Sh(i):"npm-review-button"}" ?disabled="${ie(i)||r.disabled}" @click="${r.run}">${r.label} ${xe}</button>`:m}</div>`}function Ig(i){let e=i.source??ld(i.entry),t=!!(i._target&&i._target!=="(empty)"),n=Ne(e.options,s=>`${i.entry.npm.name}@${s.id}`);t&&!n.some(s=>s.id===i._target)&&n.push(...Ne([{id:i._target,name:i._target,format:"npm"}]));let r=Ne(e.choices);return r.some(s=>s.id===i.entry.npm.version)||r.push(...Ne([{id:i.entry.npm.version,name:i.entry.npm.version,format:"npm"}])),xn(kn({source:e,label:"Review",disabled:ie(i),from:{options:n,value:t?i._target:null,label:"Review base",pick:s=>{i._navigate(s)}},to:{options:r,value:i.entry.npm.version,label:"Version to review",pick:s=>{i._navigateTo({view:"npm",packageName:i.entry.npm.name,packageSpec:s,bundleTab:"review",...i._location(i._target)})}},clear:t?{label:"Clear review base",run:()=>{i._navigate("(empty)")}}:null,openLine:s=>i._openLine(s),comparison:{base:i._base,other:i.details,files:i._diff.files}}),$n(i._diff))}function Fg(i){return a`<div class="npm-review-toolbar"><nav class="npm-review-toolbar-group" aria-label="Review breadcrumbs"><button type="button" class="npm-review-button npm-review-text-button" ?disabled="${ie(i)}" @click="${()=>{i._navigateTo({view:"reviews"})}}">My reviews</button> ${xe}<button type="button" class="npm-review-button npm-review-text-button npm-review-package" aria-haspopup="dialog" ?disabled="${i._blocked}" @click="${()=>i._openPanel("reviews")}"><span>${i.entry.npm.name}@${i.entry.npm.version}</span><span class="npm-review-count">${Mo(i).length}</span></button></nav>${Ag(i)}</div>`}function Dg(i,e=i._file,t=!1){let n=i._editorState(e),r=i._shownReview?.entries.find(c=>c.file===e),s=i._nonTextFiles.includes(e),o=!s&&["accept-with-nits","request-changes","reject"].includes(n.status);return a`<section class="${`npm-review-decision${t?" npm-review-inline-decision":""}`}" aria-label="File decision">${i._canEdit?a`${Ch(`file:${e}`,s?"":n.status,c=>{i._setFileStatus(e,c)},ie(i)||s,void 0,!0)} ${s?a`<p class="npm-review-help">Non-text file. Verdicts are not supported yet; this file remains unchecked.</p>`:m} ${o?a`<textarea aria-label="File note" rows="2" maxlength="20000" placeholder="Add a note (optional)…" .value="${j(n.comment)}" ?disabled="${ie(i)}" @input="${c=>i._editFile(e,{comment:c.target.value})}" @blur="${()=>{i._saveFile(e)}}"></textarea>`:m}`:a`${t?m:a`<header><strong>File review</strong><span class="npm-review-muted">${$h(i)?"Frozen":"Read only"}</span></header>`} ${r?.status&&!s?a`${It(r.status)}${ct(r.comment)}`:a`<p class="npm-review-muted">This file was not reviewed.</p>`} ${i._writable?m:a`<p class="npm-review-help">Triage access is required to add a review.</p>`}`}</section>`}function Eh(i,e,t,n,r,s){return a`<fieldset class="npm-review-team-options"><legend>${e}</legend>${t.map(o=>a`<mode-switch label="${o.name}" .checked="${n.has(o.id)}" .disabled="${ie(i)}" @click="${()=>{if(ie(i))return;let c=new Set(n);c.has(o.id)?c.delete(o.id):c.add(o.id),r(c)}}"></mode-switch>`)}${s}</fieldset>`}function Og(i,e){let t=i._allowedVerdicts,n=Xt(e.entries,i._files,i._nonTextFiles),r=e.entries.filter(s=>s.status&&s.comment.trim()&&!i._nonTextFiles.includes(s.file));return a`<form class="npm-review-publish-form" @submit="${s=>{s.preventDefault(),i._publish()}}"><div class="npm-review-dialog-body"><section class="npm-review-coverage"><div><strong>${Pg(n)} review</strong><span>${n.checkedFiles} of ${n.totalFiles} files checked</span></div>${Lo(n.checkedFiles,n.totalFiles)}<p>${n.totalFiles>n.checkedFiles?a`${n.totalFiles-n.checkedFiles} files not checked. <button type="button" class="npm-review-button npm-review-text-button" @click="${()=>{i._unchecked=!0,i._closePanel()}}">View files</button>`:"Every file has a verdict."}</p>${i._needsPackageJson?a`<p class="npm-review-error">Review ${i._files.includes("package.json")?a`<button type="button" class="npm-review-button npm-review-text-button" @click="${()=>{i._closePanel(),i._selectFile("package.json")}}">package.json</button>`:"package.json"} before publishing a partial review.</p>`:m}</section>${r.length>0?a`<section aria-label="File notes"><strong>File notes</strong><ul class="npm-review-publish-notes" tabindex="0" aria-label="Saved file notes">${r.map(s=>a`<li><span class="dependency-review-entry-file">${Ke(s.file)}<span>${s.file}</span></span> ${ct(s.comment)}</li>`)}</ul></section>`:m}<div><strong>Final verdict</strong>${Ch("final-verdict",i._finalStatus,s=>{i._finalStatus=s},ie(i),t)}</div>${i._securityLimit==="reject"?a`<p class="npm-review-help">Malware detected. Only Reject is available.</p>`:i._securityLimit==="request-changes"?a`<p class="npm-review-help">Critical vulnerabilities detected.</p>`:m} <label>Final note <span class="npm-review-muted">· optional</span><textarea aria-label="Final comment" rows="3" maxlength="20000" .value="${j(i._finalComment)}" placeholder="Summarize your findings or explain what remains…" ?disabled="${ie(i)}" @input="${s=>{i._finalComment=s.target.value}}"></textarea></label> ${i._unchangedContinuation?a`<p class="npm-review-help">Change a verdict or note to publish a new review.</p>`:m} ${Eh(i,"Publish to teams",i._teams,i._selectedTeams,s=>{i._selectedTeams=s},i._selectedTeams.size>0?m:a`<p class="npm-review-error">${i._teams.length===0?"No teams you belong to have dependency review enabled.":"Select at least one team to publish."}</p>`)} ${Po(i)}</div><footer class="npm-review-dialog-footer"><p>Publishing freezes your verdicts and notes.<br>You can continue in a new review to make changes.</p><button type="submit" class="${Sh(i)}" ?disabled="${ie(i)||!i._canPublish}">Publish to ${i._selectedTeams.size} ${i._selectedTeams.size===1?"team":"teams"} ${xe}</button></footer></form>`}function Bg(i,e){let t=e===i._shownReview,n=e.publishedAt!==null,r=n?e:pe(e,i._context)?Xt(e.entries,i._files,i._nonTextFiles):{checkedFiles:e.entries.filter(p=>p.status).length,totalFiles:null},s=[i._continuation?.review,...i._reviews].some(p=>p?.publishedAt===null&&p.user===i.session?.id&&pe(p,e)),o=e.user===i.session?.id,c=i._teams.filter(p=>!e.teams.some(h=>h.id===p.id)),d=i._additionalTeams.get(e.id)??new Set(c.length===1?c.map(p=>p.id):[]),u=c.filter(p=>d.has(p.id)).map(p=>p.id);return a`<section class="npm-review-entry" aria-current="${String(t)}"><div class="npm-review-history-heading"><strong>${e.userLogin}</strong>${t?a`<span class="npm-review-current">Current</span>`:m}${di(e)}</div><p class="npm-review-help">${e.basePackage?`${e.basePackage===e.package?e.baseVersion:`${e.basePackage}@${e.baseVersion}`} \u2192 ${e.version}`:"All package files"}</p><div class="npm-review-entry-result">${n?It(e.status):m}<span class="dependency-review-coverage"> ${n?a`${r.coverage==="full"?"Full":a`<span class="dependency-review-partial">Partial</span>`} ·`:m}${r.checkedFiles}${r.totalFiles===null?m:`/${r.totalFiles}`} files checked</span></div><p class="npm-review-help">${e.teams.length>0?`${e.teams.map(p=>p.name).join(", ")} \xB7 `:""}${Ro(e.publishedAt??e.time)}</p>${ct(e.comment)}<div class="npm-review-entry-actions"><button type="button" class="npm-review-button" ?disabled="${ie(i)}" @click="${()=>{i._openReview(e)}}">Open ${xe}</button> ${n&&o&&!s&&i._writable?a`<button type="button" class="npm-review-button" aria-label="Revise in a new draft" ?disabled="${ie(i)}" @click="${()=>{i._openReview(e,!0)}}">Revise</button>`:m} ${n&&o&&i._writable&&e.revokedAt===null?a`<button type="button" class="npm-review-button npm-review-danger" ?disabled="${ie(i)}" @click="${()=>i._change({action:"revoke",reviewId:e.id,revision:e.revision})}">Revoke</button>`:m}<review-audit-copy .review="${e}"></review-audit-copy>${!n&&o&&i._writable?a`<button type="button" class="dependency-review-discard" aria-label="Discard review" ?disabled="${ie(i)}" @click="${()=>{i._discard(e)}}">${X(yi)}</button>`:m}</div>${n&&o&&i._writable&&e.revokedAt===null&&c.length>0?a`<details class="npm-review-share"><summary>Publish to more teams</summary>${Eh(i,"Teams",c,d,p=>{i._additionalTeams=new Map(i._additionalTeams).set(e.id,p)},a`<button type="button" class="npm-review-button" ?disabled="${ie(i)||u.length===0}" @click="${()=>i._change({action:"publish",reviewId:e.id,revision:e.revision,teamIds:u})}">Publish to more teams</button>`)}</details>`:m} ${e.revokedAt===null?m:a`<p class="npm-review-help">Revoked ${Ro(e.revokedAt)}. Content and team links remain frozen.</p>`}</section>`}function Ng(i){if(!i._panel)return m;let e={publish:"Publish review",reviews:"Reviews",unsaved:"Unsaved changes"};return a`<dialog class="npm-review-dialog" aria-label="${e[i._panel]}" @cancel="${t=>{t.preventDefault(),i._closePanel()}}"><button type="button" class="detail-action npm-review-close" aria-label="Close panel" ?disabled="${i._blocked}" @click="${()=>i._closePanel()}">×</button><header class="npm-review-dialog-head"><h2>${e[i._panel]}</h2><p>${i._panel==="reviews"?`${i.entry.npm.name}@${i.entry.npm.version}`:Ae(i._context)}</p></header>${i._panel==="publish"?Og(i,i._activeReview):a`<div class="${`npm-review-dialog-body${i._panel==="reviews"?" npm-review-entries":""}`}">${i._panel==="unsaved"?a`${i._dirtyFiles.map(t=>a`<button type="button" class="npm-review-button" @click="${()=>{i._closePanel(),i._selectFile(t)}}">${t} ${xe}</button>`)}`:Mo(i).map(t=>Bg(i,t))} ${i._panel==="reviews"&&Mo(i).length===0?a`<p class="npm-review-muted">No reviews yet.</p>`:m}${Po(i)}</div>`} ${xh(i)}</dialog>`}function zg(i){let e=i._shownReview?.entries,t=i._files,n=i._nonTextFiles;if(i._treeProgress?.entries!==e||i._treeProgress?.files!==t||i._treeProgress?.nonTextFiles!==n){let c=wh(e,n),d=new Map,u=0;for(let p of i._files){let h=p.split("/"),f=+!!c.get(p)?.status;u+=f;for(let b=1;b<h.length;b++){let v=h.slice(0,b).join("/"),g=d.get(v)??{total:0,checked:0};g.total++,g.checked+=f,d.set(v,g)}}i._treeProgress={entries:e,files:t,nonTextFiles:n,states:c,directories:d,checked:u}}let{states:r,directories:s,checked:o}=i._treeProgress;return{railLabel:"Files",treeLabel:"Review files",collapseLabel:"Collapse folders",searchLabel:"Find a file",searchPlaceholder:"Find a file\u2026",treePageSize:300,filterContent:!1,fullPaths:!0,collapseClearsSearch:!0,canSelect:()=>!i._blocked&&!i._panel,fileFilter:i._unchecked?c=>!r.get(c)?.status:null,fileLabel:c=>`${c}, ${At[r.get(c)?.status]??"Not reviewed"}`,filePrefix:c=>To(r.get(c)?.status),fileSuffix:c=>r.get(c)?.notes?a`<span class="npm-review-note-dot" aria-label="Has notes">•</span>`:m,directoryLabel:c=>{let d=s.get(c.sourcePath);return`${c.sourcePath}, ${d?.checked??0} of ${d?.total??0} checked`},directorySummary:c=>{let d=s.get(c.sourcePath);return`${d?.checked??0}/${d?.total??0}`},filters:a`<div class="npm-review-filters" aria-label="Filter review files"><button type="button" class="npm-review-button" aria-pressed="${String(!i._unchecked)}" @click="${()=>{i._unchecked=!1}}">All ${i._files.length}</button> <button type="button" class="npm-review-button" aria-pressed="${String(!!i._unchecked)}" @click="${()=>{i._unchecked=!0}}">Unchecked ${i._files.length-o}</button></div>`,fileActions:(c,d)=>Dg(i,c,d)}}function Th(i){return i._base?a`${Ig(i)}${Fg(i)}${i._panel?m:Po(i)} ${Bn({base:i._base,other:i.details,diff:i._diff,source:i.source,path:i._path,seek:i._seek,baseName:i._base.npm?`${i._base.npm.name}@${i._base.npm.version}`:"Empty package",otherName:`${i.entry.npm.name}@${i.entry.npm.version}`,select:e=>i._selectFile(e),extensions:zg(i),mode:i._mode})} <span class="npm-review-announcement" role="status">${i._notice??""}</span>${i._panel?m:xh(i)}${Ng(i)}`:a`<div class="npm-review-empty" role="${i._baseError?"alert":"status"}">${i._baseError??"Loading comparison\u2026"} ${i._baseError?a`<button type="button" class="npm-review-button" @click="${()=>{i._baseKey=null,i._loadBase(i._target,i.request?.resume)}}">Retry</button>`:m}</div>`}var qg={maxLines:5e4,maxBytes:2*1024*1024},Hg={integrity:"(empty)",kind:"sourcemap",json:{version:3,sources:[],sourcesContent:[]},fileSizes:new Map},Rh=(i,e)=>({ecosystem:"npm",package:i.npm.name,version:i.npm.version,integrity:i.integrity,basePackage:e?.npm?.name??null,baseVersion:e?.npm?.version??null,baseIntegrity:e?.npm?e.integrity:null}),pi=(i,e)=>`${i}@${e??"latest"}`,Ao=class extends U{static properties={entry:{attribute:!1},details:{attribute:!1},request:{attribute:!1},session:{attribute:!1},source:{attribute:!1},_teams:{state:!0},_selectedTeams:{state:!0},_additionalTeams:{state:!0},_reviews:{state:!0},_loading:{state:!0},_error:{state:!0},_saving:{state:!0},_saveBlocked:{state:!0},_file:{state:!0},_seek:{state:!0},_finalStatus:{state:!0},_finalComment:{state:!0},_base:{state:!0},_baseError:{state:!0},_panel:{state:!0},_path:{state:!0},_selectedReview:{state:!0},_unchecked:{state:!0},_notice:{state:!0},_continuation:{state:!0}};createRenderRoot(){return this}constructor(){super(),this._teams=[],this._reviews=[],this._files=[],this._nonTextFiles=[],this._selectedTeams=new Set,this._additionalTeams=new Map,this._editors=new Map,this._file=null,this._path=null,this._loading=!1,this._saving=!1,this._error=null,this._context=null,this._key=null,this._controller=new AbortController,this._mode="code",this._panel=null,this._selectedReview=null,this._unchecked=!1,this._pendingSaves=[],this._saveBlocked=!1}disconnectedCallback(){super.disconnectedCallback(),this._controller.abort(),this._cancelSaves(),this._dismissLoading?.(),this._key=null,this._baseKey=null}updated(){let e=this.querySelector("dialog");e&&!e.open&&e.showModal(),this._rememberBase()}_rememberBase(){l.bundleDetailsTab!=="review"||l.selectedBundle!==this.entry?.integrity||!this._context||!this._activeReview&&this._ownPublished.length===0&&!this._unsaved||(l.npmReview={bundle:this.entry.integrity,...this._context.basePackage?{reviewPackage:this._context.basePackage,reviewSpec:this._context.baseVersion}:{},started:!0,user:this.session?.id})}get _writable(){return["triage","manage","admin"].includes(this.session?.role)&&!this.session?.viewer}get _activeReview(){return this._reviews.find(e=>e.user===this.session?.id&&e.publishedAt===null&&pe(e,this._context))??(this._continuation&&this._continuation.review.user===this.session?.id?this._continuation.review:null)}get _ownPublished(){return this._reviews.filter(e=>e.user===this.session?.id&&e.publishedAt!==null&&pe(e,this._context)).toSorted((e,t)=>t.publishedAt-e.publishedAt)}get _shownReview(){return this._selectedReview?this._reviews.find(e=>e.id===this._selectedReview):this._activeReview??this._ownPublished[0]??null}get _canEdit(){return this._writable&&!this._selectedReview&&(this._activeReview!==null||this._ownPublished.length===0)}_isDirty(e,t){return!this._nonTextFiles.includes(e)&&(t.comment!==(t.edit?.comment??"")||t.status!==(t.edit?.status??""))}get _dirtyFiles(){return[...this._editors].filter(([e,t])=>this._isDirty(e,t)).map(([e])=>e)}get _blocked(){return this._saving||this._saveBlocked}get _unsaved(){return this._pendingSaves.length>0||this._dirtyFiles.length>0}get _draftStarted(){return this._canEdit&&(this._unsaved||this._activeReview&&!this._continuation||this._continuation&&this._publishRevision!=null&&!this._unchangedContinuation)}get _summary(){return Xt(this._shownReview?.entries??[],this._files,this._nonTextFiles)}get _securityLimit(){return this.source?.reviewVerdictLimit?.(this.entry,this._base)??"accept"}get _allowedVerdicts(){let e=new Map((this._shownReview?.entries??[]).map(t=>[t.file,t]));if(this._canEdit)for(let[t,n]of this._editors)e.set(t,{file:t,status:n.status||null});return rd([...e.values()].filter(t=>!this._nonTextFiles.includes(t.file)),this._securityLimit)}get _needsPackageJson(){return sd(this._activeReview?.entries??[],this._files,this._nonTextFiles)}get _unchangedContinuation(){let e=this._continuation?.source;return!!(e&&this._finalStatus===e.status&&this._finalComment===e.comment)}get _canPublish(){return this._canEdit&&this._panel==="publish"&&this._activeReview?.revision===this._publishRevision&&this._summary.checkedFiles>0&&!this._needsPackageJson&&!this._unchangedContinuation&&this._selectedTeams.size>0&&!this._unsaved&&this._allowedVerdicts.includes(this._finalStatus)}_location(e){let t=e&&e!=="(empty)"?gr(e):null;return t?{reviewPackage:t.name,reviewSpec:t.spec}:{}}_navigate(e){return this._navigateTo(br(this.entry,"review",this._location(e)))}async _navigateTo(e){if(this._blocked||this._loading)return;let t=this._key,n=this._navigation={};this._unsaved&&!await this._saveAll()||t===this._key&&n===this._navigation&&!this._unsaved&&await me?.navigate(e)}async _loadBase(e,t=!1){let n=JSON.stringify([this.entry.integrity,e,this.session?.id,this.session?.role]);if(this._baseKey!==n){this._baseKey=n,this._base=null,this._baseError=null,this._controller.abort(),this._cancelSaves(),this._key=null,this._controller=new AbortController;try{let r=t?await Fd(Rh(this.entry,null),this._controller.signal):null;if(this._baseKey!==n)return;r&&(e=r.basePackage?pi(r.basePackage,r.baseVersion):"(empty)");let s=e==="(empty)"?null:gr(e),o=s?(await Jc(s.name,s.spec??"latest")).details:Hg;if(this._baseKey!==n)return;let c=await Cp(o,this.details);if(this._baseKey!==n)return;t&&(r&&ui(r),this._target=e,this.request={bundle:this.entry.integrity,...this._location(e)},this._baseKey=JSON.stringify([this.entry.integrity,e,this.session?.id,this.session?.role])),this._base=o,this._ensureContext(o,c)}catch(r){this._baseKey===n&&(this._baseError=r.message)}}}_ensureContext(e,t){let n=Rh(this.entry,e),r=JSON.stringify([this.session?.id,this.session?.role,n]);if(r===this._key)return;this._controller.abort(),this._cancelSaves(),this._controller=new AbortController,this._context=n,this._diff=t;let s=Ep(e,this.details,this._diff);this._files=Wt(Gi(s.map(c=>c.path)));let o=new Set(s.filter(c=>!nd(c.before,c.after)).map(c=>c.path));if(this._nonTextFiles=this._files.filter(c=>o.has(c)),this._mode=Tp(s,qg)?"diff":"code",this._key=r,this._teams=[],this._reviews=[],this._selectedTeams=new Set,this._additionalTeams=new Map,this._selectedReview=null,this._continuation=null,this._editors.clear(),this._path=this._files[0]??null,this._panel=null,this._notice="",this._resetEditor(this._path),this._saving=!1,this._refresh(!0),l.bundleDetailsTab==="review"&&l.selectedBundle===this.entry.integrity){let c=this._location(e.npm?pi(e.npm.name,e.npm.version):"(empty)");l.npmReview={bundle:this.entry.integrity,...c},this._baseKey=JSON.stringify([this.entry.integrity,e.npm?pi(e.npm.name,e.npm.version):"(empty)",this.session?.id,this.session?.role]),me?.replaceRoute(br(this.entry,"review",c))}}async _refresh(e=!1){let t=this._key;for(;t===this._key&&this._pendingSaves.length>0;)if((await Promise.all(this._pendingSaves.map(r=>r.promise))).some(r=>!r))return;if(t!==this._key)return;this._dismissLoading?.();let n=this._dismissLoading=Oe("Loading reviews\u2026",{duration:0});this._loading=!0,this._error=null;try{let{reviews:r,teams:s}=await Qt({...this._context,allBases:!0},null,null,this._controller.signal);if(t===this._key){let o=this._unsaved;this._reviews=r,this._teams=s,r.some(u=>u.user===this.session?.id&&u.publishedAt===null&&pe(u,this._context))&&(this._continuation=null),this._rememberBase();let c=kh(this._context),d=c&&r.find(u=>u.id===c.review.id);d?.publishedAt!=null&&(c.continueReview?this._continue(d.id,d.revision):this._selectedReview=d.id),this._selectedTeams=new Set(s.filter(u=>e?s.length===1:this._selectedTeams.has(u.id)).map(u=>u.id)),o||(this._editors.clear(),this._resetEditor(this._file))}}catch(r){t===this._key&&r.name!=="AbortError"&&(this._error=r.message)}finally{n(),t===this._key&&(this._loading=!1)}}_resetEditor(e=null){this._publishRevision=null,this._file=e,this._editorState(e)}_editorState(e){let t=this._canEdit?this._editors.get(e):null;if(!t){let n=this._shownReview?.entries.find(r=>r.file===e&&r.status)??null;t={edit:n,revision:this._activeReview?.revision??null,comment:this._nonTextFiles.includes(e)?"":n?.comment??"",status:this._nonTextFiles.includes(e)?"":n?.status??""},this._canEdit&&this._editors.set(e,t)}return{...t,dirty:this._isDirty(e,t)}}_editFile(e,t){!this._canEdit||this._blocked||(this._resetEditor(e),Object.assign(this._editors.get(e),t),this.requestUpdate())}_setFileStatus(e,t){if(!(this._blocked||this._nonTextFiles.includes(e)))return this._editFile(e,{status:t,...t?{}:{comment:""}}),this._saveFile(e)}_selectFile(e){this._blocked||!this._files.includes(e)||(this._path=e,this._resetEditor(e))}_openLine({path:e,line:t,query:n}){this._blocked||!this._files.includes(e)||(this._seek={path:e,line:t-1,query:n},this._selectFile(e))}_openPanel(e){this._panel=e}async _openReview(e,t=!1){if(this._blocked||this._loading)return;if(pe(e,this._context)){t?this._continue(e.id,e.revision):e.publishedAt===null?this._resume():this._showPublished(e);return}let n=this._key;this._unsaved&&!await this._saveAll()||n!==this._key||(ui(e,t),await this._navigate(e.basePackage?pi(e.basePackage,e.baseVersion):"(empty)"))}_closePanel(){this._blocked||(this.querySelector("dialog")?.close(),this._panel=null)}_showPublished(e){this._selectedReview=e.id,this._panel=null,this._file=this._path}_resume(){this._selectedReview=null,this._panel=null,this._resetEditor(this._path)}async _discard(e){if(this._blocked||this._loading||!this._writable||e.user!==this.session.id||e.publishedAt!==null)return;let t=e===this._activeReview,n=this._key,r=this._controller.signal;this._saving=!0,this._error=null;try{let{confirmed:s}=await zn({reviewTitle:Ae(e),signal:r});if(!s||r.aborted||n!==this._key||(await Promise.all(this._pendingSaves.map(c=>c.promise)),r.aborted||n!==this._key||!this._writable)||(e=t?this._activeReview:this._reviews.find(c=>c.id===e.id),!e||e.user!==this.session.id||e.publishedAt!==null))return;let o=e===this._continuation?.review;if(o||await Ji(e.id,e.revision,this.session.csrfToken,r),r.aborted||n!==this._key)return;o||(this._reviews=this._reviews.filter(c=>c.id!==e.id)),pe(e,this._context)&&(this._continuation=null,this._selectedReview=null,this._editors.clear(),this._resetEditor(this._path),this._finalStatus=null,this._finalComment="",this._panel=null,this._ownPublished.length===0&&l.npmReview?.bundle===this.entry.integrity&&delete l.npmReview.started),this._notice="Draft discarded."}catch(s){n===this._key&&s.name!=="AbortError"&&(this._error=s.message)}finally{n===this._key&&(this._saving=!1)}}_continue(e,t){let n=this._reviews.find(r=>r.id===e&&r.revision===t&&r.user===this.session?.id&&r.publishedAt!==null&&pe(r,this._context));return!n||this._activeReview?null:(this._continuation={source:n,review:{...n,publishedAt:null,revokedAt:null,status:null,teams:[]}},this._selectedTeams=new Set(this._teams.length===1?this._teams.map(r=>r.id):[]),this._selectedReview=null,this._panel=null,this._editors.clear(),this._resetEditor(this._path),this._notice="A new draft will be saved when you make a change.",this._activeReview)}async _persistContinuation(e){let t=this._continuation,n=this._key,{review:r}=await Qt(this._context,{action:"continue",reviewId:t.source.id,revision:t.source.revision},this.session.csrfToken,this._controller.signal);return n!==this._key||this._continuation!==t||e&&this._pendingSaves[0]!==e?null:(this._acceptSave(r,{revision:t.source.revision}),r)}_cancelSaves(){for(let e of this._pendingSaves)clearTimeout(e.timer),e.resolve(null);this._pendingSaves=[],this._saveBlocked=!1}_queueSave(e){let t=this._pendingSaves.findLast(r=>r.change.file===e.file);if(t&&t.change.comment===e.comment&&t.change.status===e.status)return t.promise;let n={change:e,slow:!1};return n.promise=new Promise(r=>{n.resolve=r}),n.timer=setTimeout(()=>{n.slow=!0,this._saveBlocked=!0},3e3),this._pendingSaves.push(n),this.requestUpdate(),this._pendingSaves.length===1&&this._flushSaves(),n.promise}_acceptSave(e,t){this._reviews=[...this._reviews.filter(n=>n.id!==e.id),e],this._continuation=null;for(let[n,r]of this._editors)r.revision===t.revision&&(r.revision=e.revision,r.edit=e.entries.find(s=>s.file===n&&s.status)??null);for(let{change:n}of this._pendingSaves.slice(1))n.revision===t.revision&&(n.revision=e.revision,n.reviewId=e.id,n.entryId=e.entries.find(r=>r.file===n.file)?.id??null);this._canEdit&&this._resetEditor(this._file),this._notice="Saved privately.",this._rememberBase()}async _flushSaves(){for(;this._pendingSaves.length>0;){let e=this._pendingSaves[0];this._error=null;try{if(this._continuation){let n=await this._persistContinuation(e);if(!n||this._pendingSaves[0]!==e)return;Object.assign(e.change,{reviewId:n.id,revision:n.revision,entryId:n.entries.find(r=>r.file===e.change.file)?.id??null})}let{review:t}=await Qt(this._context,e.change,this.session.csrfToken,this._controller.signal);if(this._pendingSaves[0]!==e)return;this._acceptSave(t,e.change),clearTimeout(e.timer),this._pendingSaves.shift(),e.resolve(t),this._saveBlocked=this._pendingSaves.some(n=>n.slow),this.requestUpdate()}catch(t){if(this._pendingSaves[0]!==e)return;this._cancelSaves(),t.name!=="AbortError"&&(this._error=t.message),this.requestUpdate();return}}}async _change(e){if(this._blocked||this._pendingSaves.length>0||this._loading||!this._writable)return null;if(e.action==="continue")return this._continue(e.reviewId,e.revision);let t=this._key;this._saving=!0,this._error=null;try{if(e.action==="publish"&&e.finalStatus&&this._continuation){let o=await this._persistContinuation();if(!o)return null;e={...e,reviewId:o.id,revision:o.revision}}let n=this._reviews.find(o=>o.id===e.reviewId)??this._context,r=Object.fromEntries(Object.keys(this._context).map(o=>[o,n[o]])),{review:s}=await Qt(r,e,this.session.csrfToken,this._controller.signal);return t!==this._key?null:(this._reviews=[...this._reviews.filter(o=>o.id!==s.id),s],e.action==="publish"&&e.finalStatus&&pe(s,this._context)&&(this._selectedReview=s.id,this._panel=null,this._editors.clear(),this._notice="Published. Verdicts and notes are now frozen."),this._rememberBase(),s)}catch(n){return t===this._key&&n.name!=="AbortError"&&(this._error=n.message),null}finally{t===this._key&&(this._saving=!1)}}_saveFile(e){if(!this._canEdit||this._saving||this._loading)return null;let t=this._editorState(e),n=this._pendingSaves.some(s=>s.change.file===e),r=this._activeReview;return!t.dirty&&!n?r:!t.status&&!t.comment.trim()&&!t.edit?.id&&!n?(this._editors.delete(e),e===this._file&&this._resetEditor(e),r):this._queueSave({action:"save",reviewId:r?.id??null,revision:t.revision,entryId:t.edit?.id??null,file:e,comment:t.comment,status:this._nonTextFiles.includes(e)?null:t.status||null})}async _saveAll(){let e=this._key;for(;e===this._key&&this._canEdit;){if(this._pendingSaves.length>0){if((await Promise.all(this._pendingSaves.map(n=>n.promise))).some(n=>!n))return!1;continue}let t=this._dirtyFiles;if(t.length===0)return!0;if(!await this._saveFile(t[0]))return!1}return!1}async _beginPublish(){if(!this._canEdit||this._saving||this._loading||this._finalizing||!this._summary.checkedFiles)return;let e=this._key;this._finalizing=!0;try{if(this._unsaved&&!await this._saveAll()||e!==this._key||!this._canEdit||this._unsaved||!this._summary.checkedFiles)return;let t=this._activeReview;if(!t)return;let n=this._allowedVerdicts,r=this._continuation?.source.status;this._finalStatus=n.includes(r)?r:n[0],this._finalComment=t.comment??"",this._publishRevision=t.revision,this._panel="publish"}finally{this._finalizing=!1}}_publish(){if(this._canPublish)return this._change({action:"publish",reviewId:this._activeReview.id,revision:this._publishRevision,teamIds:[...this._selectedTeams],finalStatus:this._finalStatus,finalComment:this._finalComment})}render(){if(!this.entry?.npm||!this.details)return m;let e=this.request?.bundle===this.entry.integrity?this.request:{};return this._target=e.reviewPackage?pi(e.reviewPackage,e.reviewSpec):"(empty)",this._loadBase(this._target,e.resume),Th(this)}};customElements.define("npm-review",Ao);var Ug=i=>({view:"npm",packageName:i.package,packageSpec:i.version,bundleTab:"review",...i.basePackage===null?{}:{reviewPackage:i.basePackage,reviewSpec:i.baseVersion}}),jg=i=>{let e=new Date(i);return a`<time datetime="${e.toISOString()}" data-tooltip="${e.toLocaleString()}">${e.toLocaleDateString(void 0,{month:"short",day:"numeric",...e.getFullYear()===new Date().getFullYear()?{}:{year:"numeric"}})} <span>${e.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}</span></time>`},Io=class extends U{static properties={session:{attribute:!1},_reviews:{state:!0},_loading:{state:!0},_error:{state:!0},_next:{state:!0},_discarding:{state:!0},_expanded:{state:!0}};constructor(){super(),this._reviews=[],this._next=null,this._expanded=new Set,this._controller=new AbortController}createRenderRoot(){return this}disconnectedCallback(){super.disconnectedCallback(),this._controller.abort(),this._dismissLoading?.(),this._key=null}_canDiscard(e){return e.publishedAt===null&&e.user===this.session?.id&&["triage","manage","admin"].includes(this.session?.role)}async _discard(e){if(!this._canDiscard(e)||this._discarding||this._loading)return;let t=this._key,n=this._controller.signal;this._discarding=e.id,this._error=null;try{let{confirmed:r}=await zn({reviewTitle:Ae(e),signal:n});if(!r||n.aborted||t!==this._key||!this._canDiscard(e)||(await Ji(e.id,e.revision,this.session.csrfToken,n),t!==this._key||n.aborted))return;this._reviews=this._reviews.filter(s=>s.id!==e.id)}catch(r){t===this._key&&r.name!=="AbortError"&&(this._error=r.message)}finally{t===this._key&&(this._discarding=null)}}async _load(e=!1){let t=this._key;this._dismissLoading?.();let n=this._dismissLoading=Oe("Loading reviews\u2026",{duration:0});this._loading=!0,this._error=null;try{let{reviews:r,next:s}=await Id(e?this._next:null,this._controller.signal);if(t!==this._key)return;this._reviews=[...new Map([...e?this._reviews:[],...r].map(o=>[o.id,o])).values()],this._next=s}catch(r){t===this._key&&r.name!=="AbortError"&&(this._error=r.message)}finally{n(),t===this._key&&(this._loading=!1)}}_toggleDetails(e){let t=new Set(this._expanded);t.has(e)?t.delete(e):t.add(e),this._expanded=t}_details(e){let t=e.entries.filter(n=>n.status);return a`<section id="${`review-details-${e.id}`}" class="dependency-review-details" aria-label="${`Details for ${Ae(e)}`}">${e.comment?a`<div class="dependency-review-final-note" role="note" aria-label="Final note">${ct(e.comment)}</div>`:m} ${t.length>0?a`<ul class="dependency-review-entries">${t.map(n=>a`<li><span class="dependency-review-entry-file">${Ke(n.file)}<span>${n.file}</span></span> ${It(n.status)}<div>${ct(n.comment)}</div></li>`)}</ul>`:a`<p class="npm-review-muted">No file reviews yet.</p>`}</section>`}_row(e){let t=Ug(e),n=this._expanded.has(e.id),r=e.publishedAt!==null,s=new Set(e.entries.filter(d=>d.status).map(d=>d.file)).size,o=e.entries.filter(d=>d.status&&d.comment.trim()).length+ +!!e.comment.trim(),c=d=>{d.button===0&&!d.metaKey&&!d.ctrlKey&&!d.shiftKey&&!d.altKey&&me?.active&&(d.preventDefault(),ui(e),me.navigate(t))};return a`<li class="${`dependency-review-row${n?" is-expanded":""}${e.revokedAt===null?"":" is-revoked"}`}"><div class="dependency-review-row-main"><button type="button" class="dependency-review-expand" aria-expanded="${n}" aria-controls="${`review-details-${e.id}`}" aria-label="${`${n?"Hide":"Show"} details for ${Ae(e)}`}" @click="${()=>this._toggleDetails(e.id)}">${xe}</button><div class="dependency-review-identity"><a class="dependency-review-title" href="${Wn(t)}" @click="${c}">${e.basePackage!==null&&e.basePackage!==e.package?a`<span>${e.basePackage} ${e.baseVersion} →</span>`:m} <strong>${e.package}</strong> <span>${e.basePackage===e.package?`${e.baseVersion} \u2192 `:""}${e.version}</span></a><div class="dependency-review-meta">${jg(e.publishedAt??e.time)} ${r&&e.teams.length>0?a`<span class="dependency-review-teams">${e.teams.map(d=>d.name).join(", ")}</span>`:m} ${r&&o>0?a`<span class="dependency-review-note-count">${o} ${o===1?"note":"notes"}</span>`:m} ${e.revokedAt===null?m:di(e)}</div></div><div class="dependency-review-result">${r?It(e.status):a`<span class="dependency-review-checked">${s} ${s===1?"file":"files"} checked</span>`} <span class="dependency-review-coverage">${r?a`${e.coverage==="full"?"Full":a`<span class="dependency-review-partial">Partial</span>`} · ${e.checkedFiles}/${e.totalFiles} files checked`:o?`${o} ${o===1?"note":"notes"}`:"No notes"}</span></div><div class="dependency-review-row-actions"><review-audit-copy .review="${e}"></review-audit-copy>${this._canDiscard(e)?a`<button type="button" class="dependency-review-discard" aria-label="Discard review" ?disabled="${this._loading||!!this._discarding}" @click="${()=>this._discard(e)}">${X(yi)}</button>`:m} <a class="dependency-review-open" href="${Wn(t)}" @click="${c}" aria-label="${`${r?"Open":"Continue"} review for ${Ae(e)}`}"><span aria-hidden="true">→</span></a></div></div>${n?this._details(e):m}</li>`}render(){let e=JSON.stringify([this.session?.id,this.session?.role]);return e!==this._key&&(this._controller.abort(),this._controller=new AbortController,this._key=e,this._reviews=[],this._next=null,this._discarding=null,this._expanded=new Set,this._load()),a`<section class="dependency-review-list"><header><h1>My reviews</h1></header><p>Your private work and the reviews you’ve shared with teams.</p>${this._error?a`<p role="alert">${this._error}</p>`:m} ${!this._loading&&!this._error&&this._reviews.length===0?a`<p>No reviews yet. Open a package’s Review tab to begin.</p>`:m} ${[["Drafts",!1],["Published reviews",!0]].map(([t,n])=>{let r=this._reviews.filter(s=>s.publishedAt!==null===n);return a`<section class="dependency-review-section"><h2>${t}<span class="npm-review-count">${r.length}</span></h2><ol>${r.map(s=>this._row(s))}</ol>${r.length===0&&!this._loading?a`<p class="npm-review-muted">${n?"No published reviews yet.":"No drafts."}</p>`:m}</section>`})} ${this._next?a`<button type="button" class="npm-review-button" ?disabled="${this._loading||!!this._discarding}" @click="${()=>this._load(!0)}">Load more</button>`:m}</section>`}};customElements.define("dependency-review-list",Io);var Fo=class extends U{static properties={review:{attribute:!1},_copied:{state:!0},_error:{state:!0}};createRenderRoot(){return this}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this._timer)}async _copy(){let e=vr(this.review);if(e!==null){this._error=!1;try{await navigator.clipboard.writeText(e),this._copied=!0,clearTimeout(this._timer),this._timer=setTimeout(()=>{this._copied=!1},2e3)}catch{this._error=!0}}}render(){return!this.review||vr(this.review)===null?m:a`<button type="button" class="${`bundle-code-copy-path${this._copied?" copied":""}`}" aria-label="Copy audit Markdown" @click="${()=>this._copy()}">${Ui}</button> ${this._error?a`<span role="alert">Could not copy to the clipboard.</span>`:m}`}};customElements.define("review-audit-copy",Fo);var Do=class extends D{createRenderRoot(){return this}render(){return l.reports.length>0&&l.currentView==="findings"&&l.viewMode!=="graph"&&l.viewMode!=="kanban"?a`<button type="button" class="toolbar-export-btn" aria-label="Download or print report" @click="${this._onClick}">${Xd}</button>`:m}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",Do);var Ue=class extends D{static styles=pt`.preview{position:fixed;inset:auto;margin:0;padding:14px;box-sizing:border-box;width:min(24rem,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--bg);color:var(--text);box-shadow:0 8px 28px #00000040;font:13px/1.45 system-ui,sans-serif;text-align:left;white-space:normal;overflow-wrap:anywhere;letter-spacing:normal;cursor:default}.preview.wide{width:min(36rem,calc(100vw - 24px))}@media print{.preview{display:none}}`;constructor(){super(),this.showTimer=null,this.hideTimer=null}connectedCallback(){super.connectedCallback(),ht(this.renderRoot)}disconnectedCallback(){this._hidePreview(),super.disconnectedCallback()}updated(){let e=this.renderRoot.querySelector(".preview");e?e.matches(":popover-open")&&this._positionPreview():this._hidePreview()}_schedulePreview(){clearTimeout(this.hideTimer),clearTimeout(this.showTimer),this.renderRoot.querySelector(".preview")&&(this.showTimer=setTimeout(()=>{if(!this.isConnected)return;let e=this.renderRoot.querySelector(".preview");e&&(Ra(),e.showPopover(),this._positionPreview(),document.addEventListener("keydown",this._previewKeyDown,!0),window.addEventListener("scroll",this._previewScroll,!0),window.addEventListener("resize",this._hidePreview))},150))}_keepPreview(){clearTimeout(this.hideTimer)}_leavePreview(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>{this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)||this._hidePreview()},150)}_hidePreview=()=>{clearTimeout(this.showTimer),clearTimeout(this.hideTimer);let e=this.renderRoot?.querySelector(".preview");e?.matches(":popover-open")&&e.hidePopover(),document.removeEventListener("keydown",this._previewKeyDown,!0),window.removeEventListener("scroll",this._previewScroll,!0),window.removeEventListener("resize",this._hidePreview)};_previewKeyDown=e=>{e.key==="Escape"&&(e.preventDefault(),e.stopPropagation(),this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)&&this.renderRoot.querySelector("[aria-details]").focus({preventScroll:!0}),this._hidePreview())};_previewScroll=e=>{e.composedPath().includes(this.renderRoot.querySelector(".preview"))||this._hidePreview()};_positionPreview(){let e=this.renderRoot.querySelector(".preview"),t=this.renderRoot.querySelector("[aria-details]").getBoundingClientRect(),{width:n,height:r}=e.getBoundingClientRect(),s=8,o=12,c=Math.max(o,Math.min(t.left,window.innerWidth-n-o)),d=t.bottom+s+r<=window.innerHeight-o?t.bottom+s:Math.max(o,t.top-s-r);e.style.left=`${c}px`,e.style.top=`${d}px`}};var Oo={open:"Open",draft:"Draft",closed:"Closed",merged:"Merged",completed:"Completed",not_planned:"Not planned",duplicate:"Duplicate",unknown:"Closed"},Vg=a`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3" r="1.75"/><circle cx="4" cy="13" r="1.75"/><circle cx="12" cy="13" r="1.75"/><path d="M4 4.75v6.5M12 11.25V5a2 2 0 0 0-2-2H8m2-2L8 3l2 2"/></svg>`,Kg=a`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,Gg=a`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m5 8 2 2 4-4"/></svg>`,Wg=a`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m3.5 12.5 9-9"/></svg>`,Yg={completed:Gg,not_planned:Wg},Bo=class extends Ue{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[Ue.styles,pt`:host{display:inline;word-break:normal}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere;cursor:default}.status{display:inline-flex;align-items:center;gap:.3em;vertical-align:text-bottom;margin-right:.35em;font-weight:600;white-space:nowrap}svg{flex:none}.open{color:light-dark(#1a7f37,#3fb950)}.draft,.not_planned,.duplicate,.unknown,.unavailable{color:var(--muted)}.closed{color:light-dark(#d1242f,#f85149)}.merged,.completed{color:light-dark(#8250df,#a371f7)}:host(:not([compact])){display:block}:host(:not([compact])) .fix-link{display:flex;align-items:center;gap:.55rem;min-width:0}.link-icon{flex:none;line-height:1}.link-icon svg{display:block}.link-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500;line-height:1.5}.link-icon.unavailable+.link-title{color:var(--accent)}.ref{min-width:0;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.74rem}.link-status{flex:none;padding:.15rem .4rem;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:.7rem;font-weight:500;line-height:1.3}:host([compact]){display:inline-flex}:host([compact]) .fix-link{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host([compact]) .fix-link svg{width:14px;height:14px}:host([compact]) .status{margin:0;font-size:1rem;line-height:1}.preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.preview-ref{display:inline-flex;align-items:center;gap:.4rem;min-width:0;color:var(--muted);font-size:12px;line-height:1.4}.preview-ref span{min-width:0}.preview-description{margin-top:8px;white-space:pre-wrap}.preview-title{margin-top:8px;font-size:15px;font-weight:600;line-height:1.4}.preview .preview-header .status{flex:none;margin:0;font-size:12px;line-height:1.4}@media print{:host(:not([compact])) .fix-link{display:block}.link-title,.ref{white-space:normal;overflow:visible;text-overflow:clip;max-width:none}.link-icon{display:inline-block;vertical-align:middle;margin-right:.55rem}.ref,.link-status{margin-left:.55rem}.preview{display:none}}`];constructor(){super(),this.url="",this.compact=!1,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this.unsubscribe=Al(()=>this.requestUpdate()),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,super.disconnectedCallback()}updated(e){e.has("url")||e.has("compact")?this._hidePreview():super.updated(e)}render(){if(!ki(this.url))return a`${this.url}`;let e=Ll(this.url),t=!e&&Ml(this.url),n=e||t,r=Pl.read(this.url);if(!r&&!n){let p=`Open fix link: ${this.url}`;return a`<a class="${this.compact?"fix-link":""}" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" data-tooltip="${this.compact?p:m}" aria-label="${p}">${this.compact?a`<slot></slot>`:this.url}</a>`}let s=r?t&&r.status==="closed"?r.stateReason??"unknown":r.status:"unavailable",o=e?Vg:t?Yg[s]??Kg:null,c=n?`${n.repo}#${n.number}`:"",d=(r?.title.length??0)>40||(r?.description??"").split(/[\r\n]/u).some(p=>p.length>100),u=r?`${Oo[s]} ${e?"pull request":"issue"}: ${r.title} (${c})`:n?`Open ${e?"pull request":"issue"}: ${c}`:`Open fix link: ${this.url}`;return a`<a class="fix-link" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${u}" aria-details="${this.compact&&n?"fix-preview":m}" data-tooltip="${this.compact&&!n?u:m}" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}">${this.compact?o?a`<span class="${`status ${s}`}">${o}</span>`:a`<slot></slot>`:a`${o?a`<span class="${`link-icon ${s}`}">${o}</span>`:m} <span class="link-title">${r?.title??(c||this.url)}</span> ${r?a`<span class="ref">${c}</span><span class="${`link-status ${s}`}">${Oo[s]}</span>`:m}`} </a>${this.compact&&n?a`<a class="${d?"preview wide":"preview"}" id="fix-preview" popover="manual" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${`Open ${e?"pull request":"issue"} ${c} on GitHub`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${p=>{p.stopPropagation(),this._hidePreview()}}"><div class="preview-header"><span class="preview-ref">${X(vi)}<span>${c}</span></span> <span class="${`status ${s}`}">${o}${r?Oo[s]:e?"Pull request":"Issue"}</span></div>${r?a`<div class="preview-title">${r.title}</div>`:m} ${r?.description?a`<div class="preview-description">${r.description}</div>`:m}</a>`:m}`}};customElements.define("managed-fix-link",Bo);var No=class extends Ue{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[Ue.styles,M(Ti),pt`:host{display:inline-flex}:host([hidden]){display:none!important}button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:default}.preview-trigger{display:inline-flex;align-items:center;justify-content:center;line-height:0}.preview-trigger:hover{color:var(--accent)}.managed-comment+.managed-comment{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.comment-body{white-space:pre-wrap}.comment-body a{color:var(--accent);text-decoration:none}.comment-body a:hover{text-decoration:underline}.preview-footer{display:flex;justify-content:flex-end;margin-top:8px}.edit-hint{color:var(--muted);font-size:12px}.edit-hint:hover{color:var(--accent)}`];constructor(){super(),this.finding=null,this.comment="",this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this._subscribe(),document.addEventListener("managed-comments-reset",this._resetComments),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,document.removeEventListener("managed-comments-reset",this._resetComments),super.disconnectedCallback()}updated(e){this.hidden=!this.renderRoot.querySelector(".preview"),e.has("finding")&&(this._hidePreview(),this._subscribe()),super.updated(e)}_subscribe(){this.unsubscribe?.(),this.unsubscribe=this.finding?.id?vc(this.finding.id,()=>this.requestUpdate()):null}_resetComments=()=>{this._hidePreview(),this.requestUpdate()};_previewClick(e){if(e.target.closest("a, button")){this._hidePreview();return}window.getSelection?.()?.toString()||(e.stopPropagation(),this.renderRoot.querySelector(".preview-trigger").click())}render(){let e=H(),t=e?yc(this.finding):[];if(!(e?t.length>0:!!this.comment))return m;let s=(e?t.map(o=>o.body):[this.comment]).some(o=>o.split(/[\r\n]/u).some(c=>c.length>100));return a`<button type="button" class="preview-trigger mark-comment" aria-label="${e?"View comments":"Edit comment"}" aria-details="comment-preview" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}"><slot></slot></button><div class="${s?"preview wide":"preview"}" id="comment-preview" popover="manual" role="region" aria-label="${e?"Comments":"Comment"}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${this._previewClick}">${e?t.map(o=>Pa(o,lr(o.body))):a`<div class="comment-body">${lr(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define("comment-preview",No);function Ph(i){if(va(i))throw new Error("This is a links file, not a report. Wrap report rows in a groups or findings object to compare them.");let e=i;try{let c=JSON.parse(i);Array.isArray(c)&&(e=JSON.stringify({groups:c}))}catch{}let{data:t,reason:n}=ua(e);if(!t)throw new Error(n);let r=[],s=new Map,o=0;for(let c of da(t)){let d=new Set;for(let u of Array.isArray(c)?c:[c])if(!(!u||typeof u!="object"||Array.isArray(u))){if(typeof u.id!="string"||!u.id){o++;continue}d.add(u.id),s.has(u.id)||s.set(u.id,[]),s.get(u.id).push(u)}r.push([...d].toSorted())}return{rows:r,byId:s,missingIds:o}}function Xg(i){let e=new Set;for(let t of i){let n=[...new Set(t)].toSorted();for(let r=0;r<n.length;r++)for(let s=r+1;s<n.length;s++)e.add(JSON.stringify([n[r],n[s]]))}return e}function Lh(i){let e=new Map,t=r=>{let s=r;for(;e.get(s)!==s;)e.set(s,e.get(e.get(s))),s=e.get(s);return s};for(let r of i){let[s,o]=JSON.parse(r);for(let c of[s,o])e.has(c)||e.set(c,c);e.set(t(s),t(o))}let n=new Map;for(let r of[...e.keys()].toSorted()){let s=t(r);n.has(s)||n.set(s,[]),n.get(s).push(r)}return[...n.values()].toSorted((r,s)=>r[0].localeCompare(s[0]))}function Ie(i,e,t){let n=(i.byId.get(e)??[]).map(r=>t==="verdict"?la(r)||null:t==="severity"?oa(r)??null:t==="originalSeverity"?r.severity??null:t==="confidence"&&Number.isFinite(r.confidence)?r.confidence:null);return[...new Set(n)].toSorted((r,s)=>String(r).localeCompare(String(s),void 0,{numeric:!0}))}var Mh=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]),qn=(i,e)=>[...i].filter(t=>!e.has(t)).toSorted();function Ah(i,e){let t=new Set(i.byId.keys()),n=new Set(e.byId.keys()),r=[...t].filter(v=>n.has(v)).toSorted(),s=new Set(r),o=v=>Xg(v.rows.map(g=>g.filter(y=>s.has(y)))),c=o(i),d=o(e),u={confirmed:[],refuted:[],otherVerdicts:[],confidence:[],severity:[]};for(let v of r)for(let g of["verdict","confidence","severity"]){let y=Ie(i,v,g),x=Ie(e,v,g),_={id:v,before:y,after:x};if(g==="severity"&&(_.originalBefore=Ie(i,v,"originalSeverity"),_.originalAfter=Ie(e,v,"originalSeverity")),Mh(y,x)&&(g!=="severity"||Mh(_.originalBefore,_.originalAfter)))continue;if(g!=="verdict"){u[g].push(_);continue}let $=x.length===1&&x[0]==="confirmed"?"confirmed":x.length===1&&x[0]==="refuted"?"refuted":"otherVerdicts";u[$].push(_)}let p=Lh(qn(d,c)),h=Lh(qn(c,d)),f=qn(n,t),b=qn(t,n);return{before:i,after:e,added:f,removed:b,shared:r,joined:p,split:h,...u,unchanged:f.length===0&&b.length===0&&p.length===0&&h.length===0&&Object.values(u).every(v=>v.length===0)}}var Ih=`dialog{width:min(94vw,1180px);max-width:1180px;height:min(88dvh,960px);max-height:92dvh;margin-block:auto;padding:0;overflow:hidden;background:var(--theme-bar)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.3rem}header h3{margin-bottom:.25rem;font-size:1.1rem}header p,.muted,.note,.empty{color:var(--muted);font-size:.78rem;line-height:1.5}button,select,input{font:inherit;font-size:.8rem}button,select,.file-button,.search{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.45rem .65rem}button:not(:disabled):hover,.file-button:hover{background:var(--surface-active)}button:disabled{opacity:.45}button:focus-visible,select:focus-visible,.search:focus-visible,.file-button:focus-within{outline:2px solid var(--accent);outline-offset:2px}.pickers{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:start;gap:1rem;padding:0 1.3rem 1rem;border-bottom:1px solid var(--border)}.picker{min-width:0}.picker>label{display:block;font-size:.72rem;font-weight:600;margin-bottom:.4rem;color:var(--muted)}.picker select{width:100%;text-overflow:ellipsis}.file-picker{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-top:.55rem}.file-button{position:relative;display:inline-block;font-size:.74rem;padding:.3rem .5rem;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;width:100%}.swap{align-self:start;margin-top:1.5rem;font-size:1rem}.results{overflow:auto;min-height:0;padding:1.1rem 1.3rem 1.4rem}.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem}.summary>div{display:flex;flex-direction:column;gap:.35rem;padding:.8rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 7px)}.summary span{font-size:.72rem;color:var(--muted)}.summary strong{font-size:1.15rem;font-variant-numeric:tabular-nums}.positive h4{color:var(--green)}.negative h4,.verdict-confirmed h4,.summary .verdict-confirmed strong{color:var(--critical)}.verdict-refuted h4,.summary .verdict-refuted strong{color:var(--muted)}.change-counts{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.7rem}.change-counts span{font-size:.7rem;padding:.3rem .5rem;border-radius:5px;background:var(--bg);color:var(--muted)}.results-head{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-block:1rem}.results-head p{flex:1;font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}.search{width:min(100%,17rem)}.section-title{margin:1.2rem 0 .5rem;font-size:.87rem}.note{margin:-.15rem 0 .6rem}.columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.change-section{border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden;margin-bottom:.6rem}.change-section h4{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.78rem;font-weight:600;padding:.65rem .8rem;background:var(--bg)}.count{font-variant-numeric:tabular-nums;font-size:.7rem}ul{list-style:none}li{border-top:1px solid var(--border);padding:.7rem .8rem}.change-row{display:flex;justify-content:space-between;align-items:start;gap:.8rem}.finding{display:flex;flex-direction:column;gap:.2rem;min-width:0;overflow-wrap:anywhere}.finding strong{font-size:.77rem;font-weight:500;line-height:1.4}.finding code,.finding small{color:var(--muted);font-size:.66rem;line-height:1.4}.change-value{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.3rem;max-width:48%;flex-shrink:0;font-size:.73rem;text-align:end;overflow-wrap:anywhere}.from{color:var(--muted)}.change-value small{width:100%;color:var(--muted);font-size:.67rem}.group-members{display:flex;flex-direction:column;gap:.55rem}.group-shape{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.7rem;font:.66rem/1.5 monospace;overflow-wrap:anywhere}.group-shape>span{min-width:0}.empty{padding:.7rem .8rem}.more{margin:.5rem .8rem .7rem;font-size:.72rem}.placeholder{padding:4rem 1rem;text-align:center;color:var(--muted);font-size:.85rem}.identical{color:var(--green);font-size:.82rem;padding-block:.5rem}.error,.warning{font-size:.75rem;line-height:1.5;margin-top:.5rem;overflow-wrap:anywhere}.error{color:var(--critical)}.warning{color:var(--yellow)}dialog>.error{padding:0 1.3rem .6rem}@media(width<=650px){.pickers{gap:.5rem;padding-inline:.8rem}.columns{grid-template-columns:minmax(0,1fr);gap:0}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.summary>div{padding:.6rem}.results-head p{flex-basis:100%}.search{width:100%}header,.results{padding-inline:.8rem}.change-row{flex-wrap:wrap}.change-value{max-width:100%}}
101
- `;var zo=()=>({key:"",name:"",report:null,error:"",loading:!1}),dt=(i,e)=>i.map(t=>t===null?"Not supplied":e==="confidence"?`${t}/10`:String(t).replaceAll("_"," ")).join(" / "),qo=50,Ho=class extends q{static styles=[...q.styles,M(Ih)];static properties={_names:{state:!0},_sides:{state:!0},_catalogError:{state:!0},_catalogLoading:{state:!0},_diff:{state:!0},_query:{state:!0},_limits:{state:!0}};constructor(){super(),this._names=[],this._sides=[zo(),zo()],this._tokens=[0,0],this._catalogError="",this._catalogLoading=!0,this._diff=null,this._query="",this._limits={}}beforeOpen(){this._loadCatalog()}focusInitial(){this.renderRoot.querySelector("select")?.focus()}async _loadCatalog(){try{let e=await gt();if(this._settled)return;this._names=e.filter(r=>dl(r)!==ba);let t=this._names.includes(l.currentFile)?l.currentFile:this._names[0];t&&!this._tokens[0]&&this._select(0,t);let n=this._names.find(r=>r!==t);n&&!this._tokens[1]&&this._select(1,n)}catch(e){this._settled||(this._catalogError=`Couldn't list saved reports: ${e.message}`)}finally{this._settled||(this._catalogLoading=!1)}}_setSide(e,t){this._sides=this._sides.map((s,o)=>o===e?t:s),this._limits={};let[n,r]=this._sides.map(s=>s.report);this._diff=n&&r?Ah(n,r):null}async _select(e,t,n){let r=++this._tokens[e],s={...zo(),key:n?"":t,name:t,loading:!!t};if(this._setSide(e,s),!!t)try{let o=n?await n.text():await sl(t);if(this._settled||this._tokens[e]!==r)return;this._setSide(e,{...s,loading:!1,report:Ph(o)})}catch(o){!this._settled&&this._tokens[e]===r&&this._setSide(e,{...s,loading:!1,error:`Couldn't read ${t}: ${o.message}`})}}_file(e,t){let n=t.target.files?.[0];t.target.value="",n&&this._select(e,n.name,n)}_swap(){this._sides.some(e=>e.loading)||(this._tokens=this._tokens.map(e=>e+1),this._sides=this._sides.toReversed(),this._setSide(0,this._sides[0]))}_picker(e){let t=this._sides[e],n=e===0?"Before":"After";return a`<section class="picker"><label for="${`report-${e}`}">${n}</label> <select id="${`report-${e}`}" @change="${r=>this._select(e,r.target.value)}"><option value="" .selected="${!t.key}">${t.name&&!t.key?t.name:"Choose a saved report\u2026"}</option>${this._names.map(r=>a`<option value="${r}" .selected="${t.key===r}">${r}</option>`)}</select><div class="file-picker"><label class="file-button">Open file…<input type="file" accept=".json,.md,.markdown" aria-label="${`Open ${n.toLowerCase()} report file`}" @change="${r=>this._file(e,r)}"></label> <span class="muted">${t.loading?"Reading report\u2026":t.report?`${t.report.byId.size.toLocaleString()} unique findings`:"JSON or Markdown"}</span></div>${t.error?a`<p class="error" role="alert">${t.error}</p>`:m} ${t.report?.missingIds?a`<p class="warning">${t.report.missingIds} findings without an id excluded.</p>`:m}</section>`}_finding(e){let t=this._diff.after.byId.get(e)?.[0]??this._diff.before.byId.get(e)?.[0];return a`<span class="finding"><strong>${Nt(t)||e}</strong><code>${e}</code>${t.file?a`<small>${t.file}</small>`:m}</span>`}_matches(e){let t=this._query.trim().toLowerCase();if(!t)return!0;let n=[...this._diff.before.byId.get(e)??[],...this._diff.after.byId.get(e)??[]];return[e,...n.flatMap(r=>[Nt(r),r.file])].filter(Boolean).some(r=>r.toLowerCase().includes(t))}_section(e,t,n,r,s=""){let o=n.filter(d=>(Array.isArray(d)?d:[d.id??d]).some(u=>this._matches(u))),c=this._limits[e]??qo;return a`<section class="${`change-section ${s}`}" aria-label="${t}"><h4>${t}<span class="count">${this._query.trim()?`${o.length} / `:""}${n.length}</span></h4>${o.length>0?a`<ul>${o.slice(0,c).map(r)}</ul>`:a`<p class="empty">${n.length>0?"No matching findings.":"No changes."}</p>`} ${o.length>c?a`<button class="more" @click="${()=>{this._limits={...this._limits,[e]:c+qo}}}">Show ${Math.min(qo,o.length-c)} more (${o.length-c} remaining)</button>`:m}</section>`}_changeRow(e,t){let n=t==="severity"&&JSON.stringify(e.originalBefore)!==JSON.stringify(e.originalAfter);return a`<li class="change-row">${this._finding(e.id)}<span class="change-value"> <span class="from">${dt(e.before,t)}</span><span aria-label="to">→</span><span>${dt(e.after,t)}</span> ${n?a`<small>Original: ${dt(e.originalBefore)} → ${dt(e.originalAfter)}</small>`:m}</span></li>`}_presenceRow(e,t){let n=dt(Ie(t,e,"verdict"));return a`<li class="change-row">${this._finding(e)}<span class="change-value"> <span>${dt(Ie(t,e,"severity"))}</span><span>${dt(Ie(t,e,"confidence"),"confidence")}</span> ${n==="Not supplied"?m:a`<small>${n}</small>`}</span></li>`}_groupRow(e){let t=new Set(e),n=r=>r.rows.map(s=>s.filter(o=>t.has(o))).filter(s=>s.length).map(s=>s.join(", ")).filter((s,o,c)=>c.indexOf(s)===o).join(" | ");return a`<li class="group-row"><div class="group-members">${e.map(r=>this._finding(r))}</div><div class="group-shape"><span class="from">${n(this._diff.before)}</span><span aria-label="to">→</span><span>${n(this._diff.after)}</span></div></li>`}_verdictCount(e,t){return[...e.byId.keys()].filter(n=>Ie(e,n,"verdict").includes(t)).length}_results(){let e=this._diff;return e?a`<div class="summary" aria-label="Comparison summary"><div><span>Unique findings</span><strong>${e.before.byId.size} → ${e.after.byId.size}</strong></div><div><span>In common</span><strong>${e.shared.length}</strong></div><div class="verdict-confirmed"><span>Confirmed</span><strong>${this._verdictCount(e.before,"confirmed")} → ${this._verdictCount(e.after,"confirmed")}</strong></div><div class="verdict-refuted"><span>Refuted</span><strong>${this._verdictCount(e.before,"refuted")} → ${this._verdictCount(e.after,"refuted")}</strong></div></div><div class="change-counts" aria-label="Change counts"><span>${e.added.length} added</span><span>${e.removed.length} removed</span> <span>${e.joined.length} joined</span><span>${e.split.length} split</span> <span>${e.confidence.length} confidence</span><span>${e.severity.length} severity</span></div><div class="results-head"><p>Changes from <strong>${this._sides[0].name}</strong> to <strong>${this._sides[1].name}</strong>.</p><input class="search" type="search" aria-label="Filter comparison findings" placeholder="Filter by id, title or file…" .value="${this._query}" @input="${t=>{this._query=t.target.value,this._limits={}}}"></div>${e.shared.length===0&&(e.before.missingIds||e.after.missingIds)?a`<p class="warning" role="status">No shared ids to compare. Findings without ids cannot be matched.</p>`:e.unchanged?a`<p class="identical" role="status">No differences in finding ids, grouping, verdicts, confidence or severity.</p>`:m}<h3 class="section-title">Findings</h3><div class="columns">${this._section("added","Added",e.added,t=>this._presenceRow(t,e.after),"positive")} ${this._section("removed","Removed",e.removed,t=>this._presenceRow(t,e.before),"negative")}</div><h3 class="section-title">Revalidation</h3><p class="note">Changed verdicts for shared ids, grouped by the after report’s verdict.</p><div class="columns">${this._section("confirmed","Confirmed",e.confirmed,t=>this._changeRow(t,"verdict"),"verdict-confirmed")} ${this._section("refuted","Refuted",e.refuted,t=>this._changeRow(t,"verdict"),"verdict-refuted")}</div>${e.otherVerdicts.length>0?this._section("other","Other verdict changes",e.otherVerdicts,t=>this._changeRow(t,"verdict")):m}<h3 class="section-title">Grouping</h3><p class="note">Only shared ids. Each cluster connects changed pairs; added or removed findings do not count as regrouping.</p><div class="columns">${this._section("joined","Joined",e.joined,t=>this._groupRow(t),"positive")} ${this._section("split","Split",e.split,t=>this._groupRow(t),"negative")}</div><h3 class="section-title">Ratings</h3><p class="note">Shared ids only. Severity includes report corrections; changes to original severity are also shown.</p><div class="columns">${this._section("confidence","Confidence changes",e.confidence,t=>this._changeRow(t,"confidence"))} ${this._section("severity","Severity changes",e.severity,t=>this._changeRow(t,"severity"))}</div>`:a`<p class="placeholder" role="status">${this._sides.some(t=>t.loading)||this._catalogLoading?"Loading reports\u2026":"Choose two saved reports or open two files to compare."}</p>`}render(){return a`<dialog aria-labelledby="compare-title" @close="${this._onClose}"><header><div><h3 id="compare-title">Compare reports</h3><p>Compare findings, grouping and ratings between two reports.</p></div><button aria-label="Close report comparison" @click="${this._onClose}">Close</button></header><div class="pickers">${this._picker(0)}<button class="swap" aria-label="Swap before and after reports" ?disabled="${this._sides.some(e=>e.loading)}" @click="${this._swap}">⇄</button>${this._picker(1)}</div>${this._catalogError?a`<p class="error" role="alert">${this._catalogError} You can still open files directly.</p>`:m}<div class="results">${this._results()}</div></dialog>`}};customElements.define("report-compare-dialog",Ho);function Fh(){if(H())throw new Error("Report comparison is available in local/E2E mode.");return Y("report-compare-dialog")}function hi(i){let e=new Map;for(let[t,n]of l.triage)n[i]&&e.set(t,n[i]);return e}var Qg={get markers(){return hi("color")},get triageState(){return hi("triage")},get comments(){return hi("comment")},get fixes(){return hi("fix")},get flags(){return hi("flagged")},get(i){let e=l.triage.get(i),t={};return e?.color&&(t.color=e.color),e?.triage&&(t.triage=e.triage),e?.comment&&(t.comment=e.comment),e?.fix&&(t.fix=e.fix),e?.flagged!==void 0&&(t.flagged=e.flagged),t},async set(i,{color:e,triage:t,comment:n,fix:r,flagged:s}={}){if(Ut())throw new Error("DeepView.triage.set: triage is read-only on this page");let o=!1;if(e!==void 0&&(e===null||e===""?J(l.triage,i,{color:void 0})&&(o=!0):l.triage.get(i)?.color!==e&&(J(l.triage,i,{color:e}),o=!0)),t!==void 0)if(t===null||t===""||t===!1)J(l.triage,i,{triage:void 0})&&(o=!0);else if(t==="inprogress"||t==="fixed"||t==="invalid"||t==="deleted"||t==="ignored")l.triage.get(i)?.triage!==t&&(J(l.triage,i,{triage:t}),o=!0);else throw new TypeError(`DeepView.triage.set: unknown triage value ${JSON.stringify(t)} (expected 'inprogress' | 'fixed' | 'invalid' | 'deleted' | 'ignored' | null)`);if(n!==void 0){let c=n?String(n):"";c?l.triage.get(i)?.comment!==c&&(J(l.triage,i,{comment:c}),o=!0):J(l.triage,i,{comment:void 0})&&(o=!0)}if(r!==void 0){let c=r?String(r):"";c?l.triage.get(i)?.fix!==c&&(J(l.triage,i,{fix:c}),o=!0):J(l.triage,i,{fix:void 0})&&(o=!0)}if(s!==void 0){let c=s===null||s===""?void 0:!!s;l.triage.get(i)?.flagged!==c&&(J(l.triage,i,{flagged:c}),o=!0)}return o&&(await ke(),k()),o}};window.DeepView={get reports(){return l.reports.slice()},get groups(){return Vt()},get findings(){return Vt().flat()},get currentFile(){return l.currentFile},get currentWorkspace(){return l.currentWorkspace},triage:Qg,forceManagedMode:Bd,setTheme:ju,get theme(){return Vu()},triageSync:Di,refresh(){k()},export(){return ep()},compareReports(){return Fh()}};var Zg={default:Je.default,"claude-security":Je["claude-security"],"codex-security":Je["codex-security"],deepsec:Je.deepsec,piolium:Je.piolium,"markdown-generic":Je["markdown-generic"],bundle:Qo,workspace:Zo,links:bi,github:vi};for(let i of document.querySelectorAll(".drop-supported-icon[data-icon]")){let e=Zg[i.dataset.icon];e&&(i.innerHTML=e)}Cl(k);gl(k);Sl(k);Di.onStatusChange(k);$l(async(i,e)=>{l.currentWorkspace===i?await nt(i):l.currentFile&&l.currentFile===e?await it(e):await fe()});xl(async()=>{await fe(),l.currentView==="bundles"&&k()});qd();Ud();async function Bh(){let i=kl();if(!i)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let e;try{e=await Vd({encoded:i})}catch(n){return alert(`Couldn't open the share-link unlock prompt: ${n.message}`),!1}if(!e)return!1;let t=await pl({id:e.id,name:e.name,privateKey:e.privateKeyBase64});if(t.status==="already-attached")return alert(`This workspace is already attached as "${t.workspace.name}".`),!1;if(t.status==="name-collision"){let n=t.existing?.name;return alert(n?`A workspace named "${n}" already exists. Open the share link again and pick a different name.`:"The shared workspace name is empty or invalid. Ask the sender to re-share with a real name."),!1}return t.workspace?.id?await nt(t.workspace.id):await fe(),!0}async function Nh(){let i=ga();if(!i)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let e=await Od(i);return e.ok?!0:(alert(e.reason),!1)}var Ft=!1;async function zh(){if(await St(),!Ft&&!(!H()&&we()&&!Xe())){Ft=!0;try{await eb()}finally{Ea.hidden=!1}}}async function eb(){let i=or(),e=()=>i===or()&&!H();if(H()){await fe();return}if(await Za(),!e()||(ul(),await Promise.all([fe(),fl().catch(s=>console.warn("initial linked findings:",s))]),!e())||await Bh()||!e()||await Nh()||!e())return;let r=Qa(dd);if(r)if(r.startsWith("wbs:")||r.startsWith("wrs:"))await Xi(r.slice(4),r.startsWith("wrs:")?"reports":"bundles");else if(r.startsWith("ws:")){let s=r.slice(3);he().some(o=>o.id===s)&&await nt(s)}else if(r.startsWith("b:")){let s=r.slice(2),o=s.indexOf(" "),c=o>=0?s.slice(0,o):s,d=o>=0?s.slice(o+1):"",u=$i.has(d)?d:"overview";if((l.bundles??[]).some(p=>p.integrity===c)){let p=he().filter(h=>h.bundles.includes(c));Kt(c,u,{workspaceId:p.length===1?p[0].id:null}),k(),wt(c),await fe()}}else{let s=await gt();if(!e())return;let o=bl(r);o&&s.includes(o.name)&&await it(o.name,void 0,{workspaceId:o.workspaceId})}}var Hn=!1,Dh=!1;document.addEventListener("managed-client-mode-change",()=>{Hn=!H()&&we()});function Oh(i){Dh||(Dh=!0,queueMicrotask(()=>{alert(i+" This tab will reload to refresh its state. Any unsaved edits in this tab will be lost."),location.reload()}))}Ai(async()=>{if(await St(),H()){k();return}let i=Hn,e=we();if(Hn=e,k(),!Ft&&Xe()){zh().catch(t=>console.warn("continueBoot:",t));return}if(Ft&&e&&!Xe()){Oh("Encryption was just enabled in another tab.");return}Ft&&i&&!e&&!Wa()&&Oh("Encryption was disabled in another tab.")});window.addEventListener("hashchange",()=>{!Ft||H()||(async()=>{await Bh()||await Nh()})().catch(i=>console.warn("deep-link hashchange:",i))});(async()=>{if(!await jd()){await St(),Hn=!H()&&we();try{let i=window.matchMedia?.("(display-mode: window-controls-overlay)"),e=()=>{let r=!1;try{r=localStorage.getItem("deepview.sidebarCollapsed")==="1"}catch{}Ta.classList.toggle("collapsed",r&&!i?.matches)};e(),i?.addEventListener("change",e);let t=i?.matches;if(window.matchMedia?.("(display-mode: standalone)").matches||t){let r=document.querySelector('meta[name="viewport"]');r&&r.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"),window.addEventListener("wheel",s=>{(s.ctrlKey||s.metaKey)&&s.preventDefault()},{passive:!1}),window.addEventListener("keydown",s=>{(s.ctrlKey||s.metaKey)&&(s.key==="="||s.key==="+"||s.key==="-"||s.key==="0")&&s.preventDefault()})}}catch{}!H()&&we()&&!Xe()||await zh()}})();
102
- /*! Bundled license information:
103
-
104
- lit-html/static.js:
105
- (**
106
- * @license
107
- * Copyright 2020 Google LLC
108
- * SPDX-License-Identifier: BSD-3-Clause
109
- *)
110
- */
7
+ ${t}`)}`;try{window.location.href=n,vi(ke)}catch{}return}if(K(e,`.mark-fix`)){let t=K(e,`[data-gid]`)?.dataset.gid,n=t?o(t):null;if(!n)return;let r=C(n);if(!x(r))return;let i=rt(n),a=Ce(r)?.fix??``;jn({initial:a,finding:r,canApplyToGroup:He(i,a)}).then(e=>{if(e===null||!x(r))return null;let n=e.scope===`group`?i.filter(e=>x(e)&&(e===r||We(e,a))):[r],o=!1;for(let t of n)F(M.triage,Jn(t),{fix:e.value||void 0})&&(o=!0);return o&&(n.length>1&&M.activeTabByGroup.set(t,Jn(r)),G(),queueMicrotask(E)),null}).catch(()=>{});return}let Ae=K(e,`[data-flag-toggle]`);if(Ae){let t=Ae.dataset.flagToggle,n=K(e,`[data-gid]`)?.dataset.gid,r=(n?o(n):null)?.find(e=>Jn(e)===t);if(!r||!x(r))return;let i=Ce(r)?.flagged;F(M.triage,t,{flagged:i!==!0}),E(),G();return}let je=e.target.closest(`[data-triage-show]`);if(je&&!je.closest(`.graph2-triage-selector`)){let e=je.dataset.triageShow;M.shownTriage=M.shownTriage===e?null:e,w();return}if(e.target.closest(`[data-table-deselect]`)){M.tableSelectedGid=null,G();return}let Me=e.target.closest(`[data-tree-select]`);if(Me){let e=Me.dataset.treeSelect;M.filesSelectedFile=M.filesSelectedFile===e?null:e,w();return}e.target.closest(`[data-tree-deselect]`)&&(M.filesSelectedFile=null,w())});var wi=document.querySelector(`#bundle-source-overlay-slot`);wi&&wi.addEventListener(`click`,Si);function Ti(e){let t=e?o(e):null;t&&Qe(t)&&queueMicrotask(E)}T.addEventListener(`row-select`,e=>{let t=e.detail?.gid;if(!t)return;let n=M.tableSelectedGid!==t;M.tableSelectedGid=n?t:null,n&&Ti(t),G()});var Ei=`application/x-deepview-kanban-gid`;function Di(e,t){for(let n of e)x(n)&&Tn(M.triage,n,t,rr())}function Oi(){for(let e of T.querySelectorAll(`.kanban-card.dragging`))e.classList.remove(`dragging`);for(let e of T.querySelectorAll(`.kanban-column.drag-over`))e.classList.remove(`drag-over`)}T.addEventListener(`dragstart`,e=>{let t=e.target.closest?.(`.kanban-card[data-kanban-source]`);if(!t||!e.dataTransfer)return;let n=t.dataset.gid;if(!n)return;let r=o(n);if(!r||Ye(r).length===0){e.preventDefault();return}e.dataTransfer.setData(Ei,n),e.dataTransfer.setData(`text/plain`,n),e.dataTransfer.effectAllowed=`move`,t.classList.add(`dragging`)}),T.addEventListener(`dragend`,Oi),T.addEventListener(`dragover`,e=>{if(!e.dataTransfer?.types.includes(Ei))return;let t=e.target.closest?.(`.kanban-column[data-kanban-target]`);if(t&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,!t.classList.contains(`drag-over`))){for(let e of T.querySelectorAll(`.kanban-column.drag-over`))e!==t&&e.classList.remove(`drag-over`);t.classList.add(`drag-over`)}}),T.addEventListener(`dragleave`,e=>{let t=e.target.closest?.(`.kanban-column[data-kanban-target]`);t&&(t.contains(e.relatedTarget)||t.classList.remove(`drag-over`))}),T.addEventListener(`drop`,e=>{if(!e.dataTransfer?.types.includes(Ei))return;let t=e.target.closest?.(`.kanban-column[data-kanban-target]`);if(!t){Oi();return}e.preventDefault();let n=e.dataTransfer.getData(Ei),r=t.dataset.kanbanTarget;if(Oi(),!n||!r)return;let i=o(n);if(!i||(Be(i).commonTriage??`untriaged`)===r)return;let a=Ye(i);a.length!==0&&(Di(a,r),w(),queueMicrotask(E))});var ki=!1,Ai=[`theme-w95`,`theme-paper`];function ji(){return!!document.startViewTransition&&!Ai.some(e=>document.body.classList.contains(e))}function q(e){return e?T.querySelector(`.kanban-card[data-gid="${CSS.escape(e)}"]`):null}function Mi(e){let t=e??T.querySelector(`.kanban-card`);if(!t)return;let n=t.getBoundingClientRect();n.width<=0||n.height<=0||(document.documentElement.style.setProperty(`--kanban-clip-card-w`,`${Math.floor(n.width)}px`),document.documentElement.style.setProperty(`--kanban-clip-card-h`,`${Math.floor(n.height)}px`),document.documentElement.style.setProperty(`--kanban-return-card-bg`,getComputedStyle(t).backgroundColor))}function Ni(e){M.kanbanPopoverGid=e,M.focusCodeStack=[],M.focusCodeAt=0}function Pi(){k()}function J(e){let t=M.kanbanPopoverGid;if(t===e)return;let n=t===null&&e!==null,r=t!==null&&e===null;if(!ji()||!n&&!r){Ti(e),Ni(e),w(),Pi();return}if(ki)return;Ti(e),ki=!0;let i=n?`kanban-opening`:`kanban-closing`;document.documentElement.classList.add(i);let a=e=>{e&&(e.style.viewTransitionName=``),document.documentElement.classList.remove(i),ki=!1};if(n){let t=q(e);t?(Mi(t),t.style.viewTransitionName=`kanban-detail-modal`,t.getBoundingClientRect()):Mi(),Ni(e);let n=we(()=>{w(),Pi(),t&&(t.style.viewTransitionName=``)}),r=setTimeout(()=>a(t),600);(async()=>{try{await n.finished}catch{}clearTimeout(r),a(t)})();return}Mi(),Ni(e);let o=null,s=we(()=>{w(),o=q(t),o&&(Mi(o),o.style.viewTransitionName=`kanban-detail-modal`)}),c=setTimeout(()=>a(o??q(t)),600);(async()=>{try{await s.finished}catch{}clearTimeout(c),a(o??q(t))})()}function Fi(e){let t=q(M.kanbanPopoverGid),n=t?.closest(`.kanban-column`);if(!n)return;let r=[...n.querySelectorAll(`.kanban-card[data-kanban-source]`)],i=r.indexOf(t);if(i<0)return;let a=Math.min(Math.max(i+e,0),r.length-1);if(a===i)return;let o=r[a].dataset.gid;if(!o)return;J(o);let s=q(o);s&&(s.focus({preventScroll:!0}),s.scrollIntoView({block:`nearest`,behavior:`instant`}))}var Ii=null;function Li(){ie(),M.focusCodeStack=[],M.focusCodeAt=0,w(),Ii?.isConnected&&Ii.focus({preventScroll:!0}),Ii=null}T.addEventListener(`click`,e=>{let t=K(e,`[data-links-preview]`);if(t){e.preventDefault(),Ii=t;let n=t.dataset.previewRow,r=se(t.dataset.linksPreview,t.dataset.previewReport,n===void 0?void 0:Number(n),t.dataset.previewManagedReport);w(),T.querySelector(`.kanban-detail-close`)?.focus({preventScroll:!0}),r.then(()=>{w(),k();let e=_()?.group?.[0]._bundleHashes;if(Array.isArray(e))for(let t of e)Ze(t).catch(()=>{});return null});return}if(e.target.closest?.(`.kanban-detail-close`)){if(_()){Li();return}J(null);return}if(e.target.closest?.(`[data-kanban-detail-fullscreen]`)){M.kanbanDetailFullscreen=!M.kanbanDetailFullscreen;try{localStorage.setItem(Xt,String(M.kanbanDetailFullscreen))}catch{}w(),k();return}let n=e.target.closest?.(`[data-kanban-expand]`);if(n){let e=n.dataset.kanbanExpand,t=M.kanbanExpandedColumn===e?null:e;M.kanbanExpandedColumn=t,t&&M.kanbanPopoverGid&&q(M.kanbanPopoverGid)?.closest(`.kanban-column`)?.dataset.kanbanTarget!==t&&(M.kanbanPopoverGid=null),w();return}let r=e.target.closest?.(`[data-kanban-nav]`);if(r){Fi(r.dataset.kanbanNav===`next`?1:-1);return}let i=e.target.closest?.(`[data-kanban-select]`);if(i){if(window.getSelection?.()?.toString())return;let e=i.dataset.gid;e&&J(e);return}if(e.target.closest?.(`.kanban-action:not(.kanban-fix-note)`))return;let a=e.target.closest?.(`.kanban-card[data-kanban-source]`);if(a){if(window.getSelection?.()?.toString())return;let e=a.dataset.gid;if(!e)return;J(M.kanbanPopoverGid===e?null:e);return}if(!K(e,`.kanban-detail-modal, .kanban-detail-side`)){if(_()){Li();return}M.kanbanPopoverGid&&J(null)}}),T.addEventListener(`change`,e=>{let t=e.target.closest?.(`[data-kanban-column]`);if(!t)return;let n=t.selectedOptions[0]?.dataset.gid;n&&J(n)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(_()){!e.defaultPrevented&&!Wi(e)&&!document.querySelector(`:popover-open:not(#styled-tooltip)`)&&Li();return}if(M.kanbanPopoverGid){J(null);return}M.viewMode!==`kanban`||M.kanbanExpandedColumn===null||(M.kanbanExpandedColumn=null,w())}});function Ri(e){let t=K(e,`[data-gid]`)?.dataset?.gid;return t?o(t):null}function zi(e,t){if(!t.integrity||!t.file)return;let n=Tt(e);if(!n)return;let r=ut(n,t);r&&(M.focusCodeStack=r.stack,M.focusCodeAt=r.at,w()),t.range||Bi(),k()}function Bi(){for(let e of T.querySelectorAll(`.focus-code-body`))e.scrollTop=0,e.scrollLeft=0}T.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=K(e,`[data-code-nav-file]`);t&&(e.preventDefault(),zi(Ri(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Un(t.dataset.codeNavLine)}))});function Vi(e){let t=ft(M.focusCodeStack,M.focusCodeAt,e);t!==M.focusCodeAt&&(M.focusCodeAt=t,w(),M.focusCodeStack[t]?.range||Bi(),k())}function Hi(e){if(!e||M.focusGid===e)return;Ti(e),M.focusGid=e,M.focusCodeStack=[],M.focusCodeAt=0,w();let t=T.querySelector(`.focus-side-card.active`);t&&t.scrollIntoView({block:`nearest`,behavior:`instant`}),k()}function Ui(e){let t=[...T.querySelectorAll(`.focus-side-card[data-focus-select]`)];if(t.length===0)return;let n=t.findIndex(e=>e.classList.contains(`active`)),r=n<0?e>0?0:t.length-1:Math.min(Math.max(n+e,0),t.length-1);if(r===n)return;let i=t[r].dataset.gid;i&&Hi(i)}T.addEventListener(`click`,e=>{let t=e.target.closest?.(`[data-focus-nav]`);if(t){Ui(t.dataset.focusNav===`next`?1:-1);return}let n=e.target.closest?.(`.focus-side-card[data-focus-select]`);if(!n||window.getSelection?.()?.toString())return;let r=n.dataset.gid;r&&Hi(r)}),T.addEventListener(`pointerdown`,e=>{if(e.button!==0)return;let t=e.target.closest?.(`[data-focus-splitter]`);t&&Qr(t,e)}),T.addEventListener(`dblclick`,e=>{let t=e.target.closest?.(`[data-focus-splitter]`);t&&Zr(t)});function Wi(e){if(document.querySelector(`dialog[open]`))return!0;for(let t of e.composedPath()){if(!t||t.nodeType!==1)continue;let e=t.tagName;if(e===`INPUT`||e===`TEXTAREA`||e===`SELECT`||e===`DIALOG`&&t.open||t.isContentEditable)return!0}return!1}document.addEventListener(`keydown`,e=>{if(M.currentView!==`findings`)return;let t=M.viewMode===`focus`,n=M.viewMode===`kanban`&&M.kanbanPopoverGid!==null;if(!t&&!n||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||Wi(e))return;let r=0;if(e.key===`ArrowRight`)r=1;else if(e.key===`ArrowLeft`)r=-1;else return;e.preventDefault();let i=e.target?.closest?.(`[data-focus-splitter]`);if(i){Xr(i,r*Kr);return}t?Ui(r):Fi(r)}),T.addEventListener(`mark-color`,e=>{let t=K(e,`[data-gid]`);if(!t)return;let n=t.dataset.gid,r=o(n);if(!r)return;let i=C(r);if(!x(i))return;let a=Jn(i),s=e.detail?.color;s&&(Ce(i)?.color===s?F(M.triage,a,{color:void 0}):F(M.triage,a,{color:s}),E(),G())});var Y=null,Gi=null,Ki=null,qi=!1;function Ji(){if(Y!==null)return;if(M.reports.length===0){Ki=null,qi=!1;return}Y=M.viewMode,Gi=document.title;let e=!1;M.viewMode===`table`&&(M.viewMode=`list`,e=!0),Ki&&(pn(Ki),e=!0),e&&w();for(let e of T.querySelectorAll(`finding-card`))e.toggleAttribute(`print-one-sample`,qi),e.ensureRendered({sync:!0});let t=M.reports.map(e=>e.fileName),n=``;t.length===1?n=t[0]:t.length>1&&(n=Bn(t)),n=n.replace(/\.json$/u,``),n&&(document.title=n)}function Yi(){if(Y===null)return;for(let e of T.querySelectorAll(`finding-card`))e.removeAttribute(`print-one-sample`);qi=!1;let e=!1;M.viewMode!==Y&&(M.viewMode=Y,e=!0),Ki&&(hn(),Ki=null,e=!0),e&&w(),document.title=Gi,Y=null,Gi=null}window.addEventListener(`beforeprint`,Ji),window.addEventListener(`afterprint`,Yi);async function Xi(e,{oneSamplePerGroup:t=!1}={}){if(Y===null){Ki=e,qi=t;try{Ji(),await Promise.all([...T.querySelectorAll(`finding-card`)].map(e=>e.ensureRendered())),window.print()}catch(e){throw Yi(),e}}}function Zi(e,t){if(!e)return t();pn(e);try{return t()}finally{hn()}}document.addEventListener(`download-requested`,async()=>{if(M.reports.length===0)return;let{confirmed:e,view:t,fields:n,mode:r,oneSamplePerGroup:i}=await On(`download`);if(t){await kn(Zi(n,()=>ai({oneSamplePerGroup:i})));return}if(e){if(r===`print`){await Xi(n,{oneSamplePerGroup:i});return}Zi(n,()=>si({oneSamplePerGroup:i}))}}),T.addEventListener(`analyzer-change`,e=>{M.filterAnalyzer=e.detail.analyzer,M.filterModel=e.detail.model,w()}),T.addEventListener(`repo-change`,e=>{M.filterRepo=e.detail.value,w()}),T.addEventListener(`revalidate-change`,e=>{M.filterRevalidate=e.detail.value,w()}),T.addEventListener(`partial-change`,e=>{M.filterPartial=e.detail.value,w()}),T.addEventListener(`revalidation-change`,e=>{M.showRevalidation=e.detail.on,!e.detail.on&&M.reports.some(e=>(e.groups??[]).some(e=>e.some(e=>!e.isApp&&(e.isUpstream||ir(e.file)))))?pt(`App mode off is not recommended; it can conflate triage for issues in dependencies.`,{kind:`warning`}):e.detail.on&&vt(),$n(M.showRevalidation,M.upstreamOnly),s(nt(),{resetSort:!1}),w()}),T.addEventListener(`revalidation-conflicts-open`,()=>{(async()=>{let e=await Fn(M.revalidateConflicts);if(!e)return;let t=await It(e.id,e.reportName);t.ok||alert(t.reason)})().catch(e=>console.warn(`revalidation: open conflicting finding failed:`,e))}),T.addEventListener(`revalidation-detail-change`,e=>{M.revalidationDetailed=e.detail.on===!0,w()}),T.addEventListener(`upstream-only-change`,e=>{if(M.upstreamOnly=e.detail.on===!0,$n(M.showRevalidation,M.upstreamOnly),!M.upstreamOnly){let e=nt();Sn(e,wn(e))===`confirmed`&&(M.filterRevalidate=`confirmed`,M.filterPartial=``)}w()}),T.addEventListener(`bundle-search-mode-change`,e=>{let t=e.detail?.mode;if([`files`,`code`,`issues`,`largest`].includes(t)){if(M.bundleCodeSearchMode=t,w(),t===`files`)Se();else if(t===`largest`){let e=document.querySelector(`.bundle-code-rail-body`);e&&(e.scrollTop=0)}}}),T.addEventListener(`bundle-graph-reason-change`,e=>{let t=e.detail?.reason;t!==null&&typeof t!=`string`||(I.bundleReason=t,I.layoutCache=null,I.selected=null,I.solo=null,I.focusedPkg=null,L(),w())}),T.addEventListener(`bundle-search-regex-toggle`,()=>{M.bundleSearchRegex=!M.bundleSearchRegex,w()}),T.addEventListener(`bundle-search-case-toggle`,()=>{M.bundleSearchCase=!M.bundleSearchCase,w()}),T.addEventListener(`bundle-swap`,e=>{let t=e.detail?.integrity;if(!t||!(M.bundles??[]).some(e=>e.integrity===t))return;let n=M.bundles.find(e=>e.integrity===t),r=Fe(e.detail.bundles??[]),i=()=>{setTimeout(()=>Re(r))};if(n.managedId){let t=e.detail.target===void 0?M.selectedBundle:e.detail.target,r=M.bundles.find(e=>e.integrity===t),a=r?.managedId?{compareId:r.managedId,...ur(e.detail.mode)}:null;bt.navigate(pe(M.managedTeams,n,M.currentManagedTeam,`compare`,a,M.bundles)).finally(i);return}Ge(t,`compare`),j(t,`compare`),w(),A(),$e(t).finally(i)}),T.addEventListener(`bundle-compare-change`,e=>{let{base:t,target:n,mode:r}=e.detail??{};!N()||!t||t!==M.selectedBundle||M.bundleDetailsTab!==`compare`||(M.bundleCompare=n?{bundle:t,target:n,mode:lr(r)}:null,j(t,`compare`))}),T.addEventListener(`sort-change`,e=>{let{kind:t,value:n}=e.detail;if(t===`findings`)M.sortBy=n;else if(t===`packages`)M.packagesSortBy=n;else if(t===`repositories`)M.repositoriesSortBy=n;else return;w()}),T.addEventListener(`range-change`,e=>{e.target.id===`conf-range`&&(M.filterConfMin=e.detail.low,M.filterConfMax=e.detail.high,w())}),T.addEventListener(`input`,e=>{let t=e.composedPath()[0],n=t?.id,r=t?.value;n===`g2-path-filter`&&(I.pathFilter=r,I.graphState?.requestDraw?.())}),T.addEventListener(`search-input`,e=>{if(!e.detail)return;let{kind:t,value:n}=e.detail;if(t===`findings`){M.filterInclude=n,n||(M.filterIncludeNegate=!1),gi();return}if(t===`files`)M.filesSearch=n;else if(t===`packages`)M.packagesSearchQuery=n;else if(t===`repositories`)M.repositoriesSearchQuery=n;else if(t===`bundle-code`)M.bundleCodeSearchQuery=n;else if(t===`bundle-search`){M.bundleSearchQuery=n,gi();return}else return;w()}),T.addEventListener(`search-negate-toggle`,()=>{M.filterIncludeNegate=!M.filterIncludeNegate,w()}),T.addEventListener(`severity-toggle`,e=>{let t=e.detail.severity;if(e.detail.kind===`graph`){I.selectedSeverities.has(t)?I.selectedSeverities.delete(t):I.selectedSeverities.add(t),e.composedPath()[0].selected=[...I.selectedSeverities],I.graphState?.requestDraw?.(),pi();return}M.filterSeverities.has(t)?M.filterSeverities.delete(t):M.filterSeverities.add(t),w()}),T.addEventListener(`color-toggle`,e=>{let t=e.detail.color;if(e.detail.kind===`graph`){I.selectedColors.has(t)?I.selectedColors.delete(t):I.selectedColors.add(t),e.composedPath()[0].selected=[...I.selectedColors],I.graphState?.requestDraw?.(),pi();return}M.filterColors.has(t)?M.filterColors.delete(t):M.filterColors.add(t),w()}),T.addEventListener(`source-toggle`,e=>{let t=e.detail.source,n=M.filterSources.has(t);M.filterSources.clear(),n||M.filterSources.add(t),w()}),T.addEventListener(`annotation-filter-toggle`,e=>{let t=e.detail?.key,n=e=>e===``?`with`:e===`with`?`without`:``;if(t===`comment`)M.filterComment=n(M.filterComment);else if(t===`fix`)M.filterFix=n(M.filterFix);else if(t===`flag`)M.filterFlagged=n(M.filterFlagged);else if(t===`duplicates`&&!M.currentWorkspace)M.filterDuplicates=n(M.filterDuplicates);else if(t===`cross-context`)M.filterCrossContext=n(M.filterCrossContext);else if(t===`app-stacked`)M.filterAppStacked=n(M.filterAppStacked);else if(t===`security`)M.filterSecurity=n(M.filterSecurity);else return;w()}),T.addEventListener(`slide-triage-toggle`,e=>{let{kind:t,value:n}=e.detail;if(t===`package`)M.packageSlideTriage=M.packageSlideTriage===n?null:n;else if(t===`repository`)M.repositorySlideTriage=M.repositorySlideTriage===n?null:n;else return;w()}),T.addEventListener(`view-mode-change`,e=>{if(e.detail.kind===`files`){M.filesViewMode=e.detail.mode,w();return}M.viewMode=e.detail.mode,M.viewMode!==`kanban`&&(M.kanbanPopoverGid=null),M.viewMode!==`focus`&&(M.focusGid=null),w()}),T.addEventListener(`severity-mode-change`,e=>{let t=e.detail?.mode;if(t===`corrected`||t===`original`){M.severityMode=t;try{localStorage.setItem(Gt,t)}catch{}w()}}),T.addEventListener(`repo-edit-start`,()=>{N()||(M.repoEditing=!0,w())}),T.addEventListener(`repo-input`,e=>{N()||(M.repoUrl=e.detail.url,dn(M.currentFile,M.repoUrl))}),T.addEventListener(`repo-commit`,e=>{N()||(M.repoUrl=e.detail.url,dn(M.currentFile,M.repoUrl),M.repoEditing=!1,w())}),T.addEventListener(`repo-cancel`,e=>{N()||(M.repoUrl=e.detail.url,dn(M.currentFile,M.repoUrl),M.repoEditing=!1,w())}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(M.bundleSourceFindingIdx!=null){M.bundleSourceFindingIdx=null,mi();return}if(M.bundleSourceFile){if(M.currentView===`bundles`&&M.bundleDetailsTab===`code`)return;Je(M.bundleDetailsTab),w()}}});function X(e,t){for(let[n,r]of Object.entries(t))e.hasAttribute(n)||e.setAttribute(n,r)}var Z=Math.PI*2;function Qi(e){return()=>{e=e+1831565813|0;let t=e;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function $i(e,t,n,r){let i=Math.cos(t),a=Math.sin(t);return Math.min(i>0?(n-e.x)/i:i<0?-e.x/i:1/0,a>0?(r-e.y)/a:a<0?-e.y/a:1/0)}function ea(e){return Math.abs(e.reduce((t,n,r)=>{let i=e[(r+1)%e.length];return t+n.x*i.y-i.x*n.y},0))/2}function ta(e){return e.slice(1).reduce((t,n,r)=>t+Math.hypot(n.x-e[r].x,n.y-e[r].y),0)}function na(e,t,n,r){let i=e.map(e=>e.x),a=e.map(e=>e.y),o={x:(Math.min(...i)+Math.max(...i))/2,y:(Math.min(...a)+Math.max(...a))/2},s=Math.max(...e.map(e=>Math.hypot(e.x-o.x,e.y-o.y))),c=Math.atan2(o.y-t.y,o.x-t.x);return{center:o,distance:Math.hypot(o.x-t.x,o.y-t.y),dx:Math.cos(c)*(80+r()*200)+(r()-.5)*90,dy:n-o.y+s+40,rotation:(r()-.5)*160,delay:r()*120}}function ra(e,t,n=7){let r=Qi(n),i={x:e*1820/1920,y:t*90/1080},a=Math.hypot(e,t),o=(e,t)=>e<1e-8?0:e>t-1e-8?t:e,s=n=>({x:o(n.x,e),y:o(n.y,t)}),c=Array.from({length:20},(e,t)=>((t+(r()-.5)*.35)*Z/20+Z)%Z);for(let[n,r]of[[0,0],[e,0],[e,t],[0,t]])c.push((Math.atan2(r-i.y,n-i.x)+Z)%Z);c.sort((e,t)=>e-t);let l=[.045,.29,.58].map(n=>n*Math.min(e,t)).map(n=>c.map(a=>{let o=Math.min(n*(.92+r()*.16),$i(i,a,e,t));return s({x:i.x+Math.cos(a)*o,y:i.y+Math.sin(a)*o})}));l.push(c.map(n=>{let r=$i(i,n,e,t);return s({x:i.x+Math.cos(n)*r,y:i.y+Math.sin(n)*r})}));let u=l.map((n,a)=>n.map((o,c)=>{let u=n[(c+1)%n.length],d={x:(o.x+u.x)/2,y:(o.y+u.y)/2},f=Math.hypot(u.x-o.x,u.y-o.y),p=o.x===u.x&&(o.x===0||o.x===e)||o.y===u.y&&(o.y===0||o.y===t),m=a===l.length-1||p?0:(r()-.5)*f*.08,h=Math.atan2(d.y-i.y,d.x-i.x);return[o,s({x:d.x+Math.cos(h)*m,y:d.y+Math.sin(h)*m}),u]})),d=l.slice(1).map((e,t)=>e.map((e,n)=>{let a=l[t][n],o=Math.hypot(e.x-a.x,e.y-a.y),u={x:(a.x+e.x)/2,y:(a.y+e.y)/2},d=(c[n]-c[(n+c.length-1)%c.length]+Z)%Z,f=(c[(n+1)%c.length]-c[n]+Z)%Z,p=Math.min(d,f)*Math.hypot(u.x-i.x,u.y-i.y),m=(r()-.5)*Math.min(o*.12,p*.14);return[a,s({x:u.x-Math.sin(c[n])*m,y:u.y+Math.cos(c[n])*m}),e]})),f=[],p=e=>{ea(e)>.01&&f.push({points:e,...na(e,i,t,r)})};p(u[0].flatMap(e=>e.slice(0,-1)));for(let e=0;e<l.length-1;e++)for(let t=0;t<c.length;t++){let n=(t+1)%c.length;p([...d[e][t],...u[e+1][t].slice(1),...d[e][n].toReversed().slice(1),...u[e][t].toReversed().slice(1)])}let m=Math.max(...f.map(e=>e.distance));for(let e of f)e.delay+=e.distance/m*400;let h=[],g=(e,t,n,r)=>{let i=ta(e);i>.1&&h.push({points:e,length:i,delay:t,duration:n,width:r})};for(let e=0;e<c.length;e++){let t=[i,l[0][e],...d.flatMap(t=>t[e].slice(1))];g(t,0,200+ta(t)/a*1e3,1.1)}for(let e of u.slice(0,-1))for(let t of e)g(t,Math.hypot(t[0].x-i.x,t[0].y-i.y)/a*1e3,220+ta(t)/a*400,.7);for(let n of l[1]){let o=Math.atan2(n.y-i.y,n.x-i.x)+(r()-.5)*1.4,c=Math.min(e,t)*(.07+r()*.12),l=[n];for(let e=1;e<=3;e++)l.push(s({x:n.x+Math.cos(o+(r()-.5)*.3)*c*e/3,y:n.y+Math.sin(o+(r()-.5)*.3)*c*e/3}));g(l,Math.hypot(n.x-i.x,n.y-i.y)/a*1e3+80,220,.5)}return{width:e,height:t,impact:i,pieces:f,cracks:h}}var ia=`.screen-crack{position:fixed;inset:0;z-index:2147483646;overflow:hidden;pointer-events:none;user-select:none}.screen-crack-svg{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.screen-crack-glass{position:absolute;inset:0;backdrop-filter:blur(9px) brightness(1.06) saturate(.85);background:linear-gradient(135deg,#dcebff0f,#dcebff00 55%);mask-mode:luminance;opacity:0}.screen-crack-shard{transform-box:fill-box;transform-origin:center}.screen-crack-outline{opacity:0}.screen-crack-flash{position:absolute;width:18vmin;height:18vmin;border-radius:50%;background:radial-gradient(circle,rgb(255 255 255 / .85),rgb(200 230 255 / .15) 55%,transparent 75%);transform:translate(-50%,-50%);opacity:0}@media print{.screen-crack{display:none}}
8
+ `,aa=`http://www.w3.org/2000/svg`,oa=null;function sa(){oa||(oa=new CSSStyleSheet,oa.replaceSync(ia),document.adoptedStyleSheets=[...document.adoptedStyleSheets,oa])}var ca=1.5,la=0;function Q(e,t={}){let n=document.createElementNS(aa,e);for(let[e,r]of Object.entries(t))n.setAttribute(e,String(r));return n}function ua(e){let t=document.createElement(`div`);t.className=`screen-crack`,t.setAttribute(`aria-hidden`,`true`),sa();let n=Q(`svg`,{viewBox:`0 0 ${e.width} ${e.height}`,preserveAspectRatio:`none`});n.classList.add(`screen-crack-svg`);let r=Q(`defs`),i=`screen-crack-mask-${++la}`,a=Q(`mask`,{id:i,maskUnits:`userSpaceOnUse`,maskContentUnits:`userSpaceOnUse`,x:0,y:0,width:e.width,height:e.height});a.append(Q(`rect`,{width:e.width,height:e.height,fill:`black`})),r.append(a);let o=Q(`g`),s=Q(`g`),c=e.pieces.map(e=>{let t=e.points.map(e=>`${e.x},${e.y}`).join(` `),n=Q(`g`),r=Q(`g`);n.classList.add(`screen-crack-shard`),r.classList.add(`screen-crack-shard`),n.append(Q(`polygon`,{points:t,fill:`white`}));let i=Q(`polygon`,{points:t,fill:`none`,stroke:`rgb(240 248 255 / .8)`,"stroke-width":1.1,"stroke-linejoin":`round`});return i.classList.add(`screen-crack-outline`),r.append(i),a.append(n),s.append(r),{masked:n,outlined:r,outline:i,piece:e}});n.append(r,o,s);let l=document.createElement(`div`);l.className=`screen-crack-glass`;let u=`${document.URL.split(`#`)[0]}#${i}`;l.style.maskImage=`url("${u}")`,l.style.webkitMaskImage=`url("${u}")`;let d=document.createElement(`div`);return d.className=`screen-crack-flash`,d.style.left=`${e.impact.x}px`,d.style.top=`${e.impact.y}px`,t.append(l,n,d),{overlay:t,glass:l,cracks:o,shards:c,flash:d}}function da(e,t,n){for(let r of t.cracks){let t=r.points.map((e,t)=>`${t===0?`M`:`L`}${e.x} ${e.y}`).join(` `);for(let i of[!0,!1]){let a=Q(`path`,{d:t,fill:`none`,stroke:i?`rgb(0 0 0 / .55)`:`rgb(232 244 255 / .95)`,"stroke-width":r.width+(i?.8:0),"stroke-linecap":`round`,"stroke-linejoin":`round`});i&&a.setAttribute(`transform`,`translate(.5 .7)`),a.style.strokeDasharray=`${r.length} ${r.length}`,a.style.strokeDashoffset=String(r.length),e.append(a),n(a,[{strokeDashoffset:String(r.length)},{strokeDashoffset:`0`}],{duration:r.duration*ca,delay:r.delay*ca,easing:`cubic-bezier(.2,.7,.2,1)`})}}}function fa(e){let t=window.innerHeight,n=window.innerWidth;if(window.matchMedia(`(prefers-reduced-motion: reduce)`).matches||!n||!t||!Element.prototype.animate)return e(),Promise.resolve();let r=ra(n,t),{overlay:i,glass:a,cracks:o,shards:s,flash:c}=ua(r);document.body.append(i);let l=document.timeline.currentTime,u=[],d=(e,t,n)=>{let r=e.animate(t,{fill:`both`,...n});return r.playbackRate=2,r.startTime=l,u.push(r),r},f=!1,p=!1,m=()=>{p||(p=!0,e())},h=()=>{if(!f){f=!0,window.removeEventListener(`resize`,h),window.removeEventListener(`beforeprint`,h),document.removeEventListener(`visibilitychange`,g),i.remove();for(let e of u)e.cancel();m()}},g=()=>{document.hidden&&h()};window.addEventListener(`resize`,h,{once:!0}),window.addEventListener(`beforeprint`,h,{once:!0}),document.addEventListener(`visibilitychange`,g),da(o,r,d),d(c,[{opacity:0,transform:`translate(-50%, -50%) scale(0)`},{opacity:.85,transform:`translate(-50%, -50%) scale(.8)`,offset:.08},{opacity:0,transform:`translate(-50%, -50%) scale(2.4)`}],{duration:600,easing:`ease-out`}),d(o,[{transform:`translate(0, 0)`},{transform:`translate(-3px, 2px)`},{transform:`translate(3px, -2px)`},{transform:`translate(-2px, -2px)`},{transform:`translate(2px, 2px)`},{transform:`translate(0, 0)`}],{duration:450});let ee=Math.max(...r.cracks.map(e=>e.delay+e.duration))*ca,_=Math.max(500,ee*.8);d(a,[{opacity:0},{opacity:1}],{duration:500,easing:`ease-out`}),d(c,[{visibility:`visible`},{visibility:`visible`}],{duration:1,delay:_-1}).finished.then(m,()=>{}),d(o,[{opacity:1},{opacity:0}],{duration:450,delay:_,easing:`ease-out`});for(let{masked:e,outlined:t,outline:n,piece:r}of s){let i=_+r.delay,a=[{transform:`translate(0, 0) rotate(0deg)`},{transform:`translate(${r.dx}px, ${r.dy}px) rotate(${r.rotation}deg)`}];for(let n of[e,t])d(n,a,{duration:1700,delay:i,easing:`cubic-bezier(.32,0,.82,.94)`});d(n,[{opacity:0},{opacity:1}],{duration:250,delay:i})}return Promise.all(u.map(e=>e.finished)).then(h,h)}var pa=`:host{position:absolute;top:.5rem;right:.5rem;z-index:1000;width:30px;height:30px;background:var(--theme-toggle-bg, transparent);color:var(--muted);border:var(--theme-toggle-border, 0);border-radius:var(--ui-radius, 6px);font-size:1rem;line-height:1;font-family:inherit;display:flex;align-items:center;justify-content:center;transition:color .12s,background .12s;cursor:default;user-select:none}:host(:hover){color:var(--text);background:var(--theme-toggle-hover-bg, rgb(from var(--text) r g b / .06))}:host(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media print{:host{display:none!important}}@media(display-mode:window-controls-overlay){:host{-webkit-app-region:no-drag;app-region:no-drag}}
9
+ `,ma=`deepview.theme`,ha=Object.freeze([`dark`,`light`,`green`,`pink`,`w95`,`paper`]),ga=Object.freeze([`dark`,`green`,`pink`,`w95`,`paper`,`light`]),_a=3,va={dark:{base:`#1a1a1b`,dim:`#0a0a0a`},light:{base:`#f6f6fa`,dim:`#646464`},green:{base:`#0a140a`,dim:`#050a05`,sidebar:`#0f1e0f`},pink:{base:`#ffe4ee`,dim:`#a3727f`,sidebar:`#ffe0f0`},w95:{base:`#000080`,dim:`#000033`},paper:{base:`#ffffff`,dim:`#666666`}},ya=window.matchMedia?.(`(display-mode: window-controls-overlay)`),ba=window.matchMedia?.(`(display-mode: standalone)`),xa=window.navigator?.windowControlsOverlay,Sa={light:`☀`,dark:`☾`,green:`🕶️`,pink:`✿`,w95:`⊞`,paper:`📄`},Ca=`deepview-theme-changed`,$=`dark`,wa=!1,Ta=0,Ea=!1,Da=!1,Oa=0,ka=0,Aa=!1;function ja(){if(!Ea)return $===`light`?`dark`:`light`;let e=Aa?ga:ga.filter(e=>e!==`w95`),t=e.includes($)?$:`pink`;return e[(e.indexOf(t)+1)%e.length]}function Ma(){window.dispatchEvent(new CustomEvent(Ca,{detail:{theme:$}}))}function Na(){try{let e=localStorage.getItem(ma);return ha.includes(e)?e:`dark`}catch{return`dark`}}function Pa(){let e=document.querySelector(`meta[name="theme-color"]`);if(!e)return;let{base:t,dim:n,sidebar:r}=va[$],i=xa?.visible??ya?.matches??!1,a=(ba?.matches||ya?.matches)&&!i;e.setAttribute(`content`,wa?n:a&&r?r:t)}function Fa(e){ha.includes(e)||(e=`dark`),$=e;for(let e of ha)e!==`dark`&&document.body.classList.remove(`theme-${e}`);e!==`dark`&&document.body.classList.add(`theme-${e}`);try{e===`dark`?localStorage.removeItem(ma):localStorage.setItem(ma,e)}catch{}Pa(),Ma()}Fa(Na()),ya?.addEventListener(`change`,Pa),ba?.addEventListener(`change`,Pa),xa?.addEventListener(`geometrychange`,Pa),window.addEventListener(`beforeprint`,()=>{wa=!0,Fa($)}),window.addEventListener(`afterprint`,()=>{wa=!1,Fa($)});function Ia(e){if(!ha.includes(e))throw TypeError(`unknown theme`);Oa++,Fa(e)}function La(){return $}var Ra=class extends H{static properties={_theme:{state:!0}};static styles=z(pa);constructor(){super(),this._theme=$}connectedCallback(){super.connectedCallback(),X(this,{role:`button`,tabindex:`0`,"aria-label":`toggle theme`}),this.addEventListener(`click`,this._toggle),this.addEventListener(`keydown`,this._onKeydown),window.addEventListener(Ca,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(Ca,this._onThemeChanged),this.removeEventListener(`click`,this._toggle),this.removeEventListener(`keydown`,this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=$,this.setAttribute(`aria-disabled`,String(Da))};_toggle=()=>{if(Da)return;if(!Ea&&++Ta>=8&&$===`dark`){Ea=!0,Da=!0,Ma();let e=Oa,t=()=>{Oa===e&&Fa(`green`)},n=()=>{Da=!1,Ma()};try{fa(t).catch(t).finally(n)}catch{t(),n()}return}let e=ja();$===`green`&&e===`pink`&&++ka>=_a&&(Aa=!0),Fa(e)};_onKeydown=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.repeat||this._toggle())};render(){return B`${Sa[this._theme]}`}};customElements.define(`theme-toggle`,Ra);var za=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}.row.row-pending{min-height:3rem}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(.link-target) .row{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .row{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host(:first-of-type) .row{border-top-left-radius:var(--ui-radius, 6px);border-top-right-radius:var(--ui-radius, 6px)}:host(:last-of-type) .row{border-bottom-left-radius:var(--ui-radius, 6px);border-bottom-right-radius:var(--ui-radius, 6px)}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit;text-decoration:none;cursor:default}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;min-width:0;margin-left:auto;user-select:none}}.gh-ref-btn{display:inline-flex;align-items:center;position:relative;flex-shrink:0;padding:0 .15rem;color:var(--muted);cursor:default;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}:host(.link-target) .row{animation:none;box-shadow:none!important}.row{break-inside:avoid}.marks{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre{color:#555!important}a,.line-num,.line-num a{color:inherit}}
10
+ `,Ba=`:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}.line-num a:hover{color:var(--accent)}:host-context(body.theme-w95){& *,*:before,*:after{letter-spacing:0!important;text-transform:none!important}.badge{border-radius:0;text-transform:capitalize!important}.mark-action-group{gap:0;overflow:visible;border:0;border-radius:0;background:none}:is(.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude,.mark-triage-menu){height:23px;padding:0 6px;border:0;border-radius:0;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised);&:not(:last-child){border-right:0}&:not(:disabled):hover{background:var(--w95-face);color:#000;border-color:transparent}&:not(:disabled):active{box-shadow:var(--w95-pressed)}&:disabled{color:var(--w95-shadow);opacity:1}}.mark-triage-menu .mark-triage-label{font-weight:400}.triage-menu[popover]{border:1px solid #000;border-radius:0;box-shadow:none;background:var(--w95-face)}.triage-menu-item:not(:disabled):hover{background:var(--w95-title);color:#fff}.triage-menu-item.active:before{color:inherit}}
11
+ `,Va=`.tab-level-separator{align-self:center;padding-inline:.125rem;color:var(--muted);font-size:.75rem;line-height:1}.tab{--tab-severity: var(--bg);position:relative;display:inline-flex;align-items:center;gap:.35rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding-block:calc(.35rem - .1em);padding-inline:.5rem;min-width:0;font-family:inherit;font-size:.75rem;line-height:1.3;color:var(--text);background:var(--tab-severity);background-image:linear-gradient(135deg,var(--tab-marker, transparent) 50%,var(--tab-marker-shadow, transparent) 50%,transparent 60%);background-size:12px 12px;background-repeat:no-repeat;background-origin:border-box;&.tab-with-confidence{padding-right:1rem;min-width:3.25rem}&.tab-with-analyzer{padding-right:calc(.5rem + 20px)}&.tab-severity-critical{--tab-severity: var(--critical);color:#fff}&.tab-severity-high{--tab-severity: var(--high);color:#fff}&.tab-severity-medium{--tab-severity: var(--medium);color:#000}&.tab-severity-low{--tab-severity: var(--low);color:var(--badge-low-text)}&.tab-severity-high_bug{--tab-severity: var(--high-bug);color:#fff}&.tab-severity-bug{--tab-severity: var(--bug);color:#fff}&.tab-severity-informational{--tab-severity: var(--info);color:#fff}&.tab-mark-red{--tab-marker: var(--marker-red)}&.tab-mark-blue{--tab-marker: var(--marker-blue)}&.tab-mark-green{--tab-marker: var(--marker-green)}&.tab-mark-gray{--tab-marker: var(--marker-gray)}&:is(.tab-mark-red,.tab-mark-blue,.tab-mark-green,.tab-mark-gray){--tab-marker-shadow: rgb(0 0 0 / .3)}&:hover{border-color:var(--muted)}&.active{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.active:before{content:"";position:absolute;z-index:1;top:-1px;left:-1px;width:12px;height:12px;border-top-left-radius:inherit;background:var(--tab-marker, transparent);clip-path:polygon(0 0,100% 0,0 100%);pointer-events:none}&.tab-with-analyzer:is(:hover,.active):after{content:"";position:absolute;inset:-1px;border:1px solid var(--muted);border-radius:inherit;pointer-events:none}&.tab-with-analyzer.active:after{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-inprogress .tab-label:after{content:" \\25d0";opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-label{display:flex;align-items:center;gap:.35rem;text-align:left}.tab-conf{position:absolute;right:.25rem;bottom:.15rem;font-size:.6rem;line-height:1;color:inherit}.tab-analyzer{position:absolute;inset:-1px -1px -1px auto;width:20px;display:flex;overflow:hidden;border-radius:var(--ui-radius, 0 4px 4px 0);box-shadow:0 0 2px #0003}.tab-analyzer .report-logo{flex:1;border:0}.tab-analyzer svg{display:block}.tab-conf-max{display:none}.tab-severity{display:inline-flex}.badge{padding:0;background:none;color:inherit}.tab-indicators{display:inline-flex;align-items:center;gap:.25rem}.tab-indicators:empty{display:none}.tab-marks{display:inline-flex;align-items:center;gap:.15rem;color:inherit}.tab-marks svg{display:block}.tab-marks :is(.bubble,.wrench,.flag-cloth){fill:currentcolor;fill-opacity:.15}.badge-corr-mark{color:inherit}}
12
+ `,Ha=`.report-button{display:inline-flex;align-items:center;max-width:16rem;padding:0;overflow:hidden;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);color:var(--muted);font:inherit;font-size:.7rem;text-decoration:none;cursor:default;transition:border-color .12s,color .12s;&:hover{border-color:var(--accent);color:var(--accent)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.report-button-label{min-width:0;padding:.1rem .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
13
+ `,Ua=`a{cursor:default}.finding-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.25rem 1rem;min-width:0;max-width:100%}.finding-action-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem;max-width:100%}.finding-actions .report-chip{flex:0 1 auto;width:max-content;min-width:0;max-width:100%;min-height:1.4rem}.finding-actions .report-chip-label{white-space:normal;overflow-wrap:anywhere;text-align:left}
14
+ `,Wa=[`is-critical`,`mark-red`,`mark-blue`,`mark-green`,`mark-gray`,`has-conflict`,`triage-inprogress`,`triage-fixed`,`triage-invalid`,`triage-deleted`,`triage-ignored`,`selected`],Ga=class extends D{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=[z(St),z(Ha),z(Ba),z(za),z(Ua),z(Va)];_near=!1;_watching=!1;constructor(){super(),this.group=null,this.selected=!1}render(){if(!this.group)return B``;if(this.dataset.gid=y(this.group),!this._near)return this.classList.toggle(`selected`,this.selected),B`<div class="row row-pending" aria-busy="true"></div>`;let e=new Set(ae(this.group));this.selected&&e.add(`selected`);for(let t of Wa)this.classList.toggle(t,e.has(t));return B`<div class="row">${ce(this.group)}</div>`}connectedCallback(){super.connectedCallback(),Qn(this.renderRoot),this.addEventListener(`click`,this._onClick),this._watching=!0,gn(this,e=>this._onNear(e))}disconnectedCallback(){this.removeEventListener(`click`,this._onClick),this._watching&&=(bn(this),!1),super.disconnectedCallback()}_onNear(e){e?(this._watching&&=(bn(this),!1),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:e=!1}={}){return this._near||this._onNear(!0),e&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}_onClick=e=>{e.composedPath().some(e=>e?.matches?.(`a, button, label`))||this.dataset.gid&&this.dispatchEvent(new CustomEvent(`row-select`,{detail:{gid:this.dataset.gid},bubbles:!0,composed:!0}))}};customElements.define(`finding-row`,Ga);var Ka=`:host{display:block;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;box-shadow:var(--shadow-glass);margin-bottom:1rem;max-width:1200px}@media not print{finding-row{content-visibility:auto;contain-intrinsic-size:auto 3.2rem}}
15
+ `,qa=class extends H{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=z(Ka);constructor(){super(),this.items=[],this.selectedGid=null}render(){return B`${sr(this.items??[],e=>y(e),e=>B`<finding-row .group="${e}" ?selected="${y(e)===this.selectedGid}"></finding-row>`)}`}};customElements.define(`finding-table`,qa);var Ja=`:host{display:block}:host(.hidden){display:none}:host([lazy]:not(.content-ready)){visibility:hidden}.card{padding:.5rem .75rem;padding-bottom:var(--finding-card-pad-bottom, .5rem);border-bottom:1px solid var(--border);font-size:.875rem;display:var(--finding-card-display, block);flex-direction:column;flex:1}:host(:last-child) .card{border-bottom:none}.card.card-pending{min-height:8rem}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host(.has-conflict[popup][context="kanban-detail"]) .card{outline:none}:host(.link-target) .card{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .card{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host([in-group]) .line-row{display:none}@media not print{:host([in-group]) .line-row+*{margin-top:0}:host([in-group]) .line-row+:is(.conf-reason,.revalidate-verdict,.severity-reason){padding-top:0;border-top:0}}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.tab-body>:not(.finding-left){min-width:0;overflow-wrap:break-word}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-wrap;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.section,.evidence,.recommendation{grid-column:2;margin-top:.55rem;font-size:.92em}.section-label{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-weight:600;font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;&:before{content:"";flex:none;width:2px;height:.58rem;margin-left:calc((2px + .3rem)*-1);border-radius:1px;background:currentcolor;opacity:.75;-webkit-print-color-adjust:exact;print-color-adjust:exact}}.code-preview-btn{display:inline-flex;align-items:center;margin-left:.35rem;padding:0 .15rem;border:0;background:transparent;color:var(--muted);vertical-align:-2px;&.open{color:var(--accent)}}.gh-ref-btn{display:inline-flex;align-items:center;margin-left:.25rem;padding:0 .15rem;color:var(--muted);vertical-align:-2px}:is(.code-preview-btn,.gh-ref-btn){position:relative;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.code-preview-tip{position:absolute;z-index:20;top:100%;left:0;margin-top:.3rem;width:max-content;max-width:min(100%,46rem);visibility:hidden;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .35));background:var(--bg);border-radius:var(--ui-radius, 4px);.code-preview{margin:0}}:is(.line-row,.evidence-list li):has(.code-preview-btn:is(:hover,:focus-visible))>.code-preview-tip{visibility:visible}.code-preview{margin:.3rem 0 .1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);backdrop-filter:var(--glass-blur);max-height:calc(10lh + .7rem);overflow:auto;display:flex;align-items:flex-start;white-space:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;line-height:1.5}.code-preview-pending{display:block;padding:.35rem .5rem;color:var(--muted);font-style:italic}.code-preview-gutter{flex:none;padding:.35rem .45rem .35rem .5rem;border-right:1px solid var(--border);color:var(--muted);text-align:right;user-select:none;position:sticky;left:0;z-index:1;background-color:var(--bg);background-image:linear-gradient(rgb(from var(--text) r g b / .03),rgb(from var(--text) r g b / .03)),linear-gradient(var(--surface),var(--surface));.code-preview-lineno{width:var(--lineno-width, 3ch);opacity:.7}.cited{opacity:1;color:var(--accent);font-weight:600}}.code-preview-source{margin:0;padding:.35rem .6rem;white-space:pre;color:var(--text);font:inherit;& code{font:inherit}}summary.section-label{cursor:default;list-style:none;&::-webkit-details-marker{display:none}&:after{content:"";flex:none;width:.3rem;height:.3rem;margin-left:.05rem;border-right:1.5px solid currentcolor;border-bottom:1.5px solid currentcolor;transform:translateY(-1px) rotate(-45deg);transition:transform .12s;opacity:.8}}details[open]>summary.section-label:after{transform:translateY(-2px) rotate(45deg)}.evidence-count{font-weight:500;opacity:.8}.section-body{white-space:pre-wrap;line-height:1.55;color:rgb(from var(--text) r g b / .82);margin-top:.1rem}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.md-list li.md-task{list-style:none;position:relative}.md-task>input{position:absolute;inset-inline-start:-1.2em;top:calc((1lh - .9em)/2);width:.9em;height:.9em;margin:0;font:inherit}.md-heading{font-weight:600}.md-heading:is([aria-level="1"],[aria-level="2"]){font-size:1.15em}.md-heading:not(:first-child){margin-top:.75lh}.md-heading+*{margin-top:.25lh}.md-rule{margin:.75lh 0;border:0;border-top:1px solid var(--border)}.recommendation .section-label,.recommendation .section-body{color:var(--green)}.conf-reason,.revalidate-verdict{grid-column:2;white-space:pre-wrap;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.revalidate-stamp{display:inline-block;margin-top:.1rem;font-size:.55rem;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.03em;padding:.14rem .3rem;border-radius:3px;background:transparent;color:var(--muted);border:1px solid var(--border);white-space:nowrap;&.confirmed{color:var(--critical);border-color:rgb(from var(--critical) r g b / .55)}&.partial{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .55)}&.unknown{color:var(--warning);border-color:rgb(from var(--warning) r g b / .55)}}.evidence-list{margin:.25rem 0 0;padding-left:1.6rem;display:flex;flex-direction:column;gap:.15rem;>li{position:relative}& li::marker{color:var(--muted);font-size:.9em}>li.current:before{content:"";position:absolute;left:-1.5rem;top:.58em;width:.35rem;height:.35rem;border-radius:50%;background:var(--accent)}>li.current::marker{color:var(--accent)}& li:has(.evidence-note):not(:last-child){margin-bottom:.3rem}}.evidence-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;overflow-wrap:anywhere;color:var(--accent);text-decoration:none;&:is(a,[role=link]):hover{text-decoration:underline}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}:is(.line-num a,.evidence-ref,.gh-ref-btn){cursor:default}span.evidence-ref:not([role]){color:var(--muted)}.evidence-note{white-space:pre-wrap;line-height:1.5;color:rgb(from var(--text) r g b / .78);margin-top:.1rem}.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a{color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.code-block:not(.token){white-space:normal;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.45rem .6rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;line-height:1.5;color:var(--text)}& code{font:inherit}}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding-right:var(--finding-line-end-inset, 0);position:relative}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 999px);color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;position:var(--finding-marks-position, static);bottom:0;background:var(--finding-marks-bg, transparent);padding-bottom:var(--finding-marks-pad-bottom, 0);padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;padding-top:var(--finding-left-inset, 0);position:var(--finding-left-position, relative);top:var(--finding-mark-sticky-top, 0);.value-label:last-child{margin-bottom:0}}:host(:not([popup])) .finding-left{padding-top:calc(var(--finding-left-inset, 0px) + 2px)}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.severity-reason{margin-top:.4rem;padding-top:.35rem;border-top:1px dashed var(--border);font-size:.82em;font-style:italic;color:var(--muted)}.severity-reason-label{font-style:normal;font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.04em;margin-right:.35rem}.duplicates-block .file-icon{flex-shrink:0}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:not(:disabled):hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-inprogress.active{background:rgb(from var(--warning, #d97706) r g b / .12);border-color:var(--warning, #d97706);color:var(--warning, #d97706)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:var(--finding-marks-margin-top, .65rem);padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-flag,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-link,:host([context="focus"]) .mark-issue,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}.finding-top-marks{position:absolute;top:calc(var(--finding-left-inset, 0px) - var(--finding-mark-inset, .5rem));left:calc(.75rem - var(--finding-mark-inset, .5rem));display:grid;grid-template-columns:24px 12px;column-gap:31px;&.color-red{color:var(--marker-red)}&.color-blue{color:var(--marker-blue)}&.color-green{color:var(--marker-green)}&.color-gray{color:var(--marker-gray)}}.finding-color-mark{grid-column:1;display:block;width:24px;height:12px;border-radius:var(--ui-radius, 0 0 6px 6px);background:currentcolor;box-shadow:inset 0 0 0 1px rgb(from var(--text) r g b / .15)}.finding-bookmark-mark{grid-column:2;display:block;width:12px;height:12px;background:var(--bookmark-color);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%)}:host(:not([popup])) :is(.finding-color-mark,.finding-bookmark-mark){height:10px}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.comment-block:has(.managed-comment){white-space:normal}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.fix-block:has(managed-fix-link){display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--muted) r g b / .04);word-break:normal;.fix-label{flex:none;font-size:.75rem;font-weight:500}& managed-fix-link{flex:1;min-width:0}}.duplicates-block{display:flex;align-items:baseline;flex-wrap:wrap;gap:.1rem .4rem;margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--muted);background:rgb(from var(--muted) r g b / .1);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text);.duplicates-label{color:var(--muted);font-weight:600}& a.duplicate-ref{display:inline-flex;align-items:center;gap:.25rem;color:var(--accent);text-decoration:none}& a.duplicate-ref .duplicate-ref-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;text-decoration:underline dotted;text-underline-offset:2px}& a.duplicate-ref:hover .duplicate-ref-id{text-decoration:underline solid}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit;text-decoration:none}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:var(--finding-print-break, avoid);box-decoration-break:clone;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-link,.mark-issue,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.link-target) .card{animation:none;box-shadow:none!important}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important;break-inside:var(--finding-print-break, avoid)}:host(.multi-case) .tab-body{break-inside:auto}:host(.multi-case) .tab-body+.tab-body{break-inside:avoid}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([print-one-sample]) .tab-body:not(.active),:host([print-one-sample]) .print-case-label,:host([print-one-sample]) .card:before{display:none!important}:host([print-one-sample]) .tab-body.active{margin-top:0;padding-top:0;border-top:0;break-inside:var(--finding-print-break, avoid)}.finding-body{display:flex;flex-direction:column;>*{flex-shrink:0}}.line-row,.desc-title,.conf-reason,.severity-reason{break-inside:avoid}.section-label{break-after:avoid}.desc,.section-body{orphans:2;widows:2}.section,.recommendation,.evidence{break-inside:avoid}.evidence{order:99}.evidence>summary{break-after:avoid}.evidence-list>li{break-inside:avoid}:host([in-group].multi-case:not([print-one-sample])) .tab-body .line-row{display:flex}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+*{margin-top:0}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+.conf-reason{padding-top:0;border-top:0}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;break-after:avoid;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies,.revalidate-stamp{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre,.severity-reason{color:#555!important}a,.line-num,.line-num a,.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a,.evidence-ref{color:inherit}details:not([open])>:not(summary){display:block}details::details-content{content-visibility:visible}summary.section-label{cursor:default;&:after{display:none}}.code-preview-btn,.gh-ref-btn{display:none}.inline-code{border:0;background:transparent}.code-block:not(.token){background:transparent;border-color:#bbb;.code-block-lang{color:#555;border-bottom-color:#bbb}& pre{white-space:pre-wrap;overflow:visible}.token{color:#333!important}.token.comment,.token.prolog,.token.cdata{color:#666!important}}}:host-context(body.theme-w95){&:host([context="focus"]) .triage-menu-item{min-height:23px;padding:0 8px;border:0;border-radius:0;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised);font-size:11px;font-weight:400;&.active{border-color:transparent;background:var(--w95-dither);color:#000;box-shadow:var(--w95-pressed)}&:not(:disabled):hover{background:var(--w95-face)}}:is(.code-preview-btn,.gh-ref-btn,.finding-code-btn){border:0;border-radius:0;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised)}.code-block:not(.token){padding:2px;border:0;border-radius:0;background:#fff;box-shadow:var(--w95-sunken);.code-block-lang{padding:1px 6px;border-bottom:0;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised);font-size:11px;font-weight:400}}}:host-context(body.theme-w95) *{overscroll-behavior:none}
16
+ `,Ya=[`finding`,`is-critical`,`mark-red`,`mark-blue`,`mark-green`,`mark-gray`,`has-conflict`,`triage-inprogress`,`triage-fixed`,`triage-invalid`,`triage-deleted`,`triage-ignored`,`multi-case`],Xa=class extends D{static properties={group:{attribute:!1},inGroup:{type:Boolean,attribute:`in-group`,reflect:!0},context:{type:String,reflect:!0},lazy:{type:Boolean}};static styles=[z(St),z(Ha),z(Ba),z(Ja),z(Ua),z(Va),z(e),z(a)];_near=!1;_watched=null;constructor(){super(),this.group=null,this.inGroup=!1,this.context=null,this.lazy=!1}render(){if(!this.group)return B``;if(this.dataset.gid=y(this.group),this.lazy&&!this._near)return this.classList.add(`finding`),B`<div class="card card-pending" aria-busy="true"></div>`;let e=new Set(g(this.group));for(let t of Ya)this.classList.toggle(t,e.has(t));return B`<div class="card">${te(this.group,{context:this.context})}</div>`}updated(){this.classList.toggle(`content-ready`,!!this.group&&(!this.lazy||this._near));for(let e of this.renderRoot.querySelectorAll(`.code-preview`)){let t=e.dataset.revealedTo;if(t!==void 0&&Math.round(e.scrollTop)!==Number(t))continue;let n=e.querySelectorAll(`.code-preview-lineno.cited`);n.length!==0&&(_t(e,n),e.dataset.revealedTo=String(Math.round(e.scrollTop)))}}connectedCallback(){if(super.connectedCallback(),Qn(this.renderRoot),this.lazy){this._watched=this.closest(`.flat-group`)??this,gn(this._watched,e=>this._onNear(e));return}this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this._watched&&=(bn(this._watched),null),super.disconnectedCallback()}_onNear(e){e?(this._watched&&=(bn(this._watched),null),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:e=!1}={}){return this.lazy&&!this._near&&this._onNear(!0),e&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}};customElements.define(`finding-card`,Xa);var Za=48,Qa=4;function $a(e,t){let n=new Float64Array(e+1);for(let r=0;r<e;r++)n[r+1]=n[r]+t(r);return n}function eo(e,t){let n=0,r=e.length-2;for(;n<r;){let i=n+r>>1;e[i+1]>t?r=i:n=i+1}return Math.max(0,n)}function to(e,t,n){let r=e.length-1;return r===0?{from:0,to:0}:{from:eo(e,t-n),to:Math.min(r,eo(e,t+2*n)+1)}}function no(e,t,n,r){return e[t]<n?e[t]:e[t+1]>n+r?Math.min(e[t],e[t+1]-r):n}var ro=class extends H{static properties={items:{attribute:!1},activeKey:{attribute:!1},keyOf:{attribute:!1},renderItem:{attribute:!1}};constructor(){super(),this.items=[],this.activeKey=null,this.keyOf=e=>e,this.renderItem=()=>V,this._heights=new Map,this._total=0,this._keys=new WeakMap,this._version=0,this._tops=null,this._range={from:0,to:0},this._hold=null,this._goal=null,this._carried=null,this._reveal=!1,this._passes=0,this.addEventListener(`scroll`,()=>{!this.isUpdatePending&&!this._covers()&&this.requestUpdate()},{passive:!0})}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this._resizes=new ResizeObserver(()=>{!this.isUpdatePending&&(this._reveal||!this._covers())&&this.requestUpdate()}),this._resizes.observe(this),this._themes=new AbortController,globalThis.addEventListener(`deepview-theme-changed`,()=>this._forgetHeights(),{signal:this._themes.signal})}disconnectedCallback(){super.disconnectedCallback(),this._resizes?.disconnect(),this._themes?.abort()}_forgetHeights(){this._carried??=this._holdOf(this.items,this.scrollTop),this._heights.clear(),this._total=0,this._version++,this.requestUpdate()}_keysOf(e){let t=this._keys.get(e);return t||this._keys.set(e,t=e.map(e=>this.keyOf(e))),t}_topsOf(e){let t=this._tops;if(t?.list===e&&t.version===this._version)return t.tops;let n=this._keysOf(e),r=this._heights.size>0?this._total/this._heights.size:Za,i=$a(e.length,e=>this._heights.get(n[e])??r);return this._tops={list:e,version:this._version,tops:i},i}_viewHeight(){let e=getComputedStyle(this);return Math.max(0,this.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom))}_covers(){let e=this._topsOf(this.items),{from:t,to:n}=this._range,r=this.scrollTop;return eo(e,r)>=t&&(n>=this.items.length||eo(e,r+this._viewHeight())<n)}_holdOf(e,t){if(e.length===0)return null;let n=this._topsOf(e),r=eo(n,t);return{key:this._keysOf(e)[r],index:r,offset:n[r]-t}}_heldTop(e){let t=this._hold;if(!t)return null;let n=this._keysOf(this.items),r=n[t.index]===t.key?t.index:n.indexOf(t.key);return r<0?null:e[r]-t.offset}willUpdate(e){e.has(`activeKey`)&&(this._reveal=!0);let t=this.scrollTop,n=this._viewHeight();if(this._hold=this._carried??this._holdOf(e.get(`items`)??this.items,t),this._carried=null,this._goal=null,this._reveal&&n>0){this._reveal=!1;let e=this._keysOf(this.items).indexOf(this.activeKey);e>=0&&(this._goal={index:e,from:t})}let r=this._topsOf(this.items),i=this._goal?no(r,this._goal.index,t,n):this._heldTop(r)??t;this._range=to(r,i,n)}render(){let{from:e,to:t}=this._range;return B`<div class="kanban-rail-spacer" aria-hidden="true"></div>${sr(this.items.slice(e,t),this.keyOf,this.renderItem)}<div class="kanban-rail-spacer" aria-hidden="true"></div>`}updated(){if(this.clientHeight===0)return;let e=this._viewHeight(),{from:t,to:n}=this._range,r=[...this.children],i=this._keysOf(this.items),a=r[1].getBoundingClientRect().top;for(let e=t;e<n;e++){let n=r[e-t+2].getBoundingClientRect().top,o=this._heights.get(i[e]);o!==n-a&&(this._total+=n-a-(o??0),this._heights.set(i[e],n-a),this._version++),a=n}let o=this._topsOf(this.items);r[0].style.height=`${o[t]}px`,r.at(-1).style.height=`${o[this.items.length]-o[n]}px`;let s=this._goal?no(o,this._goal.index,this._goal.from,e):this._heldTop(o);s!==null&&Math.abs(this.scrollTop-s)>=1&&(this.scrollTop=s),this._covers()||++this._passes>=Qa?this._passes=0:this.requestUpdate()}};customElements.define(`kanban-rail`,ro);var io=`:host{display:inline-flex;gap:4px;align-items:center;flex-shrink:0}button{width:14px;height:14px;user-select:none;padding:0;background:transparent;border:1.5px solid currentcolor;border-radius:var(--ui-radius, 50%);opacity:.55;transition:opacity .12s,transform .12s}button:not(:disabled):hover{opacity:1;transform:scale(1.12)}button:disabled{opacity:.25}button.active{background:currentcolor;opacity:1;box-shadow:0 0 0 2px var(--surface),0 0 0 3px currentcolor}.color-red{color:var(--marker-red)}.color-blue{color:var(--marker-blue)}.color-green{color:var(--marker-green)}.color-gray{color:var(--marker-gray)}
17
+ `,ao=[`red`,`blue`,`green`,`gray`],oo=class extends H{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=z(io);constructor(){super(),this.selected=null,this.disabled=!1}render(){return B`${ao.map(e=>B`<button type="button" class="${`color-${e}${this.selected===e?` active`:``}`}" data-color="${e}" aria-label="${`mark ${e}`}" ?disabled="${this.disabled}" @click="${this._onClick}"></button>`)}`}_onClick=e=>{if(this.disabled)return;let t=e.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent(`mark-color`,{detail:{color:t},bubbles:!0,composed:!0}))}};customElements.define(`color-marker`,oo);var so=class extends D{static properties={rangeDisabled:{type:Boolean,attribute:`range-disabled`},revalidateOptions:{attribute:!1},hasPartial:{type:Boolean,attribute:`has-partial`}};createRenderRoot(){return this}constructor(){super(),this.rangeDisabled=!1,this.revalidateOptions=[],this.hasPartial=!1}render(){let e=M.filterConfMin,t=M.filterConfMax,n=this.revalidateOptions??[],r=this.rangeDisabled,i=n.length>0&&!!M.filterRevalidate,a=r?`No confidence range: some findings on screen carry no confidence score`:V;return B`<span class="${R({"conf-range-label":!0,replaced:i,disabled:r})}" data-tooltip="${a}">Confidence</span> <span class="${R({"conf-range":!0,replaced:i,disabled:r})}" ?inert="${r||i}"><range-slider id="conf-range" min="0" max="10" step="1" low="${e}" high="${t}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${e}" .high="${t}"></conf-range-mirror></span>${n.length>0?B`<revalidate-filter class="${R({replaces:i})}" .options="${n}" ?has-partial="${this.hasPartial}"></revalidate-filter>`:V}`}};customElements.define(`conf-filter`,so);var co={files:`Filter files…`,code:`Search code…`,issues:`Search issues…`,largest:`Filter largest files…`},lo={files:`Filter files`,code:`Search code`,issues:`Search issues`,largest:`Largest files`},uo=B`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,fo={files:c,code:d,issues:B`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`,largest:B`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="M2.5 4h11M2.5 8h7.5M2.5 12h4"/></svg>`},po=class extends D{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let e=M.bundleCodeSearchQuery,t=M.bundleCodeSearchMode,n=this.modes.includes(t)?t:`files`,r=co[n]??co.files;return B`${uo} <input type="text" class="bundle-code-search-input" placeholder="${r}" aria-label="${r}" .value="${P(e)}" @input="${this._onInput}"> ${e?B`<button type="button" class="bundle-code-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:V} ${this.modes.length>0?B`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(e=>B`<button type="button" class="${R({"bundle-code-search-mode":!0,active:n===e})}" role="tab" aria-selected="${String(n===e)}" data-tooltip="${lo[e]??e}" aria-label="${lo[e]??e}" @click="${()=>this._selectMode(e)}">${fo[e]??V}</button>`)}</span>`:V}`}_onInput=e=>{this._dispatchInput(e.target.value)};_onClear=()=>{this._dispatchInput(``)};_dispatchInput(e){this.dispatchEvent(new CustomEvent(`search-input`,{detail:{kind:`bundle-code`,value:e},bubbles:!0,composed:!0}))}_selectMode(e){this.dispatchEvent(new CustomEvent(`bundle-search-mode-change`,{detail:{mode:e},bubbles:!0,composed:!0}))}};customElements.define(`bundle-code-search`,po);var mo=class extends HTMLElement{connectedCallback(){this._schedule=()=>{this._frame||=requestAnimationFrame(()=>this._update())},this._resize=new ResizeObserver(this._schedule),this._resize.observe(this),this._mutation=new MutationObserver(this._schedule),this._mutation.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:[`hidden`]}),this._mode=matchMedia(`(display-mode: window-controls-overlay)`),this._mode.addEventListener(`change`,this._schedule),navigator.windowControlsOverlay?.addEventListener(`geometrychange`,this._schedule),this._schedule()}disconnectedCallback(){cancelAnimationFrame(this._frame),this._frame=0,this._resize.disconnect(),this._mutation.disconnect(),this._mode.removeEventListener(`change`,this._schedule),navigator.windowControlsOverlay?.removeEventListener(`geometrychange`,this._schedule)}_update(){this._frame=0,this.classList.remove(`boxed`);let e=this.querySelector(`.bundles-slide-bar`);if(!e)return;this._resize.observe(e);let t=this.querySelector(`.bundles-slide-tabs`);t&&this._resize.observe(t);let n=parseFloat(getComputedStyle(this,`::before`).height)||0;if(!n)return;let r=this.getBoundingClientRect(),i=e.getBoundingClientRect();this.classList.toggle(`boxed`,i.top>r.top+1||i.height>n+1)}};customElements.define(`bundle-slide-header`,mo);var ho=B`<svg class="bundle-search-icon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,go=class extends D{createRenderRoot(){return this}render(){let e=M.bundleSearchQuery,t=M.bundleSearchRegex,n=M.bundleSearchCase,r=t?`Search by regular expression…`:`Search all source…`;return B`${ho} <input type="text" class="bundle-search-input" placeholder="${r}" aria-label="${r}" spellcheck="false" autocapitalize="off" autocomplete="off" .value="${P(e)}" @input="${this._onInput}"> ${e?B`<button type="button" class="bundle-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:V} <span class="bundle-search-mods"><button type="button" class="${R({"bundle-search-mod":!0,active:n})}" data-tooltip="${n?`Case-sensitive on — click to ignore case`:`Match case`}" aria-label="Match case" aria-pressed="${String(n)}" @click="${this._onToggleCase}">Aa</button> <button type="button" class="${R({"bundle-search-mod":!0,active:t})}" data-tooltip="${t?`Regular expression on — click for plain text`:`Match by regular expression`}" aria-label="Match by regular expression" aria-pressed="${String(t)}" @click="${this._onToggleRegex}">.*</button></span>`}_onInput=e=>{this._dispatchInput(e.target.value)};_onClear=()=>{this._dispatchInput(``)};_dispatchInput(e){this.dispatchEvent(new CustomEvent(`search-input`,{detail:{kind:`bundle-search`,value:e},bubbles:!0,composed:!0}))}_onToggleRegex=()=>{this.dispatchEvent(new CustomEvent(`bundle-search-regex-toggle`,{bubbles:!0,composed:!0}))};_onToggleCase=()=>{this.dispatchEvent(new CustomEvent(`bundle-search-case-toggle`,{bubbles:!0,composed:!0}))}};customElements.define(`bundle-search`,go);function _o(e,t,n){let r=t[n];return r||console.warn(`<${e}>: unknown kind ${JSON.stringify(n)}; expected one of ${Object.keys(t).map(e=>JSON.stringify(e)).join(`, `)}.`),r}var vo={packages:{stateKey:`packagesSearchQuery`,label:`Filter packages`},repositories:{stateKey:`repositoriesSearchQuery`,label:`Filter repositories`}},yo=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=``}render(){let e=_o(`entity-search`,vo,this.kind);return e?B`<input type="search" class="packages-search" placeholder="${`${e.label}\u2026`}" aria-label="${e.label}" .value="${P(M[e.stateKey])}" @input="${this._onInput}">`:V}_onInput=e=>{this.dispatchEvent(new CustomEvent(`search-input`,{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define(`entity-search`,yo);var bo=[[`findings-desc`,`Findings ↓`],[`files-desc`,`Files ↓`],[`reports-desc`,`Reports ↓`],[`name-asc`,`Name A→Z`]],xo={packages:{stateKey:`packagesSortBy`,aria:`Sort packages`},repositories:{stateKey:`repositoriesSortBy`,aria:`Sort repositories`}},So=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=``}render(){let e=_o(`entity-sort`,xo,this.kind);return e?B`<select class="packages-sort" aria-label="${e.aria}" .value="${P(M[e.stateKey])}" @change="${this._onChange}">${bo.map(([t,n])=>B`<option value="${t}" ?selected="${M[e.stateKey]===t}">${n}</option>`)}</select>`:V}_onChange=e=>{this.dispatchEvent(new CustomEvent(`sort-change`,{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define(`entity-sort`,So);var Co=class extends D{static properties={showFile:{type:Boolean,attribute:`show-file`},showConfidence:{type:Boolean,attribute:`show-confidence`},showPriority:{type:Boolean,attribute:`show-priority`}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let e=(e,t)=>B`<option value="${e}" ?selected="${M.sortBy===e}">${t}</option>`;return B`<select class="sort-select" aria-label="Sort findings" .value="${P(M.sortBy)}" @change="${this._onChange}">${e(`severity`,`Severity ↓`)} ${this.showFile?e(`file`,`File ↑`):V} ${this.showConfidence?B`${e(`confidence-desc`,`Confidence ↓`)}${e(`confidence-asc`,`Confidence ↑`)}`:V} ${this.showPriority?B`${e(`priority-desc`,`Priority ↓`)}${e(`priority-asc`,`Priority ↑`)}`:V}</select>`}_onChange=e=>{this.dispatchEvent(new CustomEvent(`sort-change`,{detail:{kind:`findings`,value:e.target.value},bubbles:!0,composed:!0}))}};customElements.define(`findings-sort`,Co);var wo=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:var(--ui-radius, 99px);background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}:host-context(body.theme-w95){height:22px;--rs-thumb-size: 22px;.track{height:4px;box-shadow:var(--w95-sunken);background:linear-gradient(to right,#fff 0,#fff var(--low, 0%),var(--w95-title) var(--low, 0%),var(--w95-title) var(--high, 100%),#fff var(--high, 100%))}& input[type=range]::-webkit-slider-thumb{width:11px;height:21px;border-radius:0;background:var(--w95-face);box-shadow:var(--w95-raised)}& input[type=range]::-moz-range-thumb{width:11px;height:21px;border-radius:0;background:var(--w95-face);box-shadow:var(--w95-raised)}}
18
+ `,To=class extends H{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=z(wo);constructor(){super(),this.min=0,this.max=100,this.step=1,this.low=0,this.high=100}willUpdate(){this.low<this.min&&(this.low=this.min),this.high>this.max&&(this.high=this.max),this.low>this.high&&(this.low=this.high)}render(){let e=this.max-this.min||1,t=(this.low-this.min)/e*100,n=(this.high-this.min)/e*100;return B`<div class="track-wrap" style="${or({"--low":`${t}%`,"--high":`${n}%`})}"><div class="track"></div><input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"> <input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"></div>`}firstUpdated(){this._inputs=[...this.renderRoot.querySelectorAll(`input[type="range"]`)],this._inputs[0].value=this.low,this._inputs[1].value=this.high}updated(e){if(!this._inputs||!(e.has(`low`)||e.has(`high`)))return;let t=this._inputs.map(e=>Number(e.value)),n=t[0]>t[1],r=+!!n,i=+!n;this.low!==t[r]&&(this._inputs[r].value=this.low),this.high!==t[i]&&(this._inputs[i].value=this.high)}_onInput=()=>{let e=Number(this._inputs[0].value),t=Number(this._inputs[1].value);this.low=Math.min(e,t),this.high=Math.max(e,t),this._emit(`range-input`)};_onChange=()=>{this._emit(`range-change`)};_emit(e){this.dispatchEvent(new CustomEvent(e,{detail:{low:this.low,high:this.high},bubbles:!0,composed:!0}))}};customElements.define(`range-slider`,To);var Eo=class extends H{static properties={low:{type:Number},high:{type:Number},for:{type:String}};createRenderRoot(){return this}constructor(){super(),this.low=0,this.high=10,this.for=`conf-range`,this._dragging=!1,this._liveLow=0,this._liveHigh=10}connectedCallback(){super.connectedCallback(),document.addEventListener(`range-input`,this._onRangeInput),document.addEventListener(`range-change`,this._onRangeChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`range-input`,this._onRangeInput),document.removeEventListener(`range-change`,this._onRangeChange)}willUpdate(e){this._dragging&&(e.has(`low`)&&this.low!==this._liveLow&&(this.low=this._liveLow),e.has(`high`)&&this.high!==this._liveHigh&&(this.high=this._liveHigh))}_onRangeInput=e=>{e.target?.id===this.for&&(this._dragging=!0,this._liveLow=e.detail.low,this._liveHigh=e.detail.high,this.low=e.detail.low,this.high=e.detail.high)};_onRangeChange=e=>{e.target?.id===this.for&&(this._dragging=!1)};render(){return B`<span>${this.low}</span><span class="dash">–</span><span>${this.high}</span>`}};customElements.define(`conf-range-mirror`,Eo);var Do=`:host{display:inline-flex;vertical-align:middle;position:relative}.chip{display:inline-flex;align-items:center;gap:.375rem;cursor:default;user-select:none;position:relative;min-height:24px;box-sizing:border-box;padding:.125rem .375rem .125rem .5rem;background:var(--surface);border:var(--header-tag-border, 1px solid var(--border));border-radius:var(--ui-radius, 999px);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:500}.chip svg{color:var(--muted);flex-shrink:0}.chip.empty:hover{border-color:var(--accent)}.chip.empty .label{color:var(--muted);font-style:italic}.chip.readonly{padding-right:.5rem}.chip.copied:after{content:"Copied";position:absolute;inset:0;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border-radius:var(--ui-radius, 999px);color:var(--text);font-weight:400;white-space:nowrap;pointer-events:none}.edit-btn{width:18px;height:18px;display:grid;place-items:center;padding:0;margin-left:.125rem;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted)}.edit-btn:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}@media(display-mode:window-controls-overlay){.edit-btn,input{-webkit-app-region:no-drag;app-region:no-drag}}.chip[inert]{visibility:hidden;min-width:19rem}input{position:absolute;inset:0;box-sizing:border-box;padding:0 .55rem;background:var(--surface);border:1px solid var(--accent);border-radius:var(--ui-radius, 999px);color:var(--text);font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:400;outline:none}@media print{.chip{color:#000!important;border:0!important}.chip svg{color:#000!important}.edit-btn,input{display:none!important}}:host-context(body.theme-w95) .chip{min-height:23px;border:0;background:var(--w95-face);box-shadow:var(--w95-raised);color:#000;font-family:inherit;font-size:11px;font-weight:400;&.empty:hover{border-color:transparent}}
19
+ `,Oo=B`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,ko=B`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,Ao=class extends H{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=z(Do);constructor(){super(),this.url=``,this.editable=!1,this.editing=!1,this._copied=!1,this._opener=``}render(){if(this.editable&&this.editing){let e=!!this.url,t=e?Vn(this.url):`Set repo`;return B`<span class="${e?`chip`:`chip empty`}" aria-hidden="true" inert>${Oo} <span class="label">${t}</span> <button type="button" class="edit-btn">${ko}</button> </span><input type="text" .value="${P(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let e=!!this.url,t=e?Vn(this.url):`Set repo`,n=e?this._copied?`chip copied`:`chip`:`chip empty`;return B`<span class="${n}" @click="${e?null:this._onEdit}">${Oo} ${e?this._slugLabel(t):B`<span class="label">${t}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${ko}</button></span>`}if(this.url){let e=this._copied?`chip readonly copied`:`chip readonly`;return B`<span class="${e}">${Oo} ${this._slugLabel(Vn(this.url))}</span>`}return V}_slugLabel(e){return B`<span class="label" @click="${this._onCopyLabel}">${e}</span>`}updated(e){if(e.has(`editing`)&&this.editing){let e=this.renderRoot.querySelector(`input`);e&&(e.focus(),e.select())}}_onEdit=e=>{e&&e.stopPropagation(),this._emit(`repo-edit-start`)};_onCopyLabel=e=>{e&&e.stopPropagation();let t=Vn(this.url);if(t)try{navigator.clipboard.writeText(t).then(()=>(this._copied=!0,setTimeout(()=>{this._copied=!1},1e3),null)).catch(()=>{})}catch{}};_onFocus=e=>{this._opener=e.target.value};_onInput=e=>{this.url=e.target.value,this._emit(`repo-input`,{url:this.url})};_onKeydown=e=>{e.key===`Enter`?(e.preventDefault(),this._emit(`repo-commit`,{url:this.url})):e.key===`Escape`&&(e.preventDefault(),this.url=this._opener,this._emit(`repo-cancel`,{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit(`repo-commit`,{url:this.url})};_emit(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}};customElements.define(`repo-chip`,Ao);var jo=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Mo=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,No=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`,Po=_r(xr.replace(`width="14" height="14"`,`width="12" height="12"`)),Fo=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round"><path d="M5 1.2 1.3 3.1v5.7L5 10.7l3.7-1.9V3.1Z M1.3 3.1 5 5l3.7-1.9 M5 5v5.7"/><path d="M11 5.2 7.3 7.1v5.7l3.7 1.9 3.7-1.9V7.1Z M7.3 7.1 11 9l3.7-1.9 M11 9v5.7"/></g></svg>`,Io=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="1.5" width="10" height="3.6" rx=".8"/><rect x="2.2" y="5.3" width="10" height="3.6" rx=".8"/><rect x="1" y="9.1" width="10" height="3.6" rx=".8"/></g></svg>`,Lo=B`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M8 1.5 13 3.5v4c0 3-2.1 5.5-5 7-2.9-1.5-5-4-5-7v-4Z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Ro=[{key:`comment`,glyph:jo,label:`commented`,stateKey:`filterComment`,hasKey:`hasComment`},{key:`fix`,glyph:Mo,label:`fixed`,stateKey:`filterFix`,hasKey:`hasFix`},{key:`flag`,glyph:No,label:`flagged`,stateKey:`filterFlagged`,hasKey:`hasFlagged`},{key:`duplicates`,glyph:Po,label:`rows with duplicates in other reports`,stateKey:`filterDuplicates`,hasKey:`hasDuplicates`},{key:`cross-context`,glyph:Fo,label:`rows across multiple repos or packages`,stateKey:`filterCrossContext`,hasKey:`hasCrossContext`},{key:`app-stacked`,glyph:Io,label:`stacked App rows`,stateKey:`filterAppStacked`,hasKey:`hasAppStacked`},{key:`security`,glyph:Lo,label:`security-related rows`,stateKey:`filterSecurity`,hasKey:`hasSecurityContrast`}],zo=new Set([`duplicates`,`cross-context`,`app-stacked`,`security`]),Bo=class extends D{static properties={group:{type:String},hasComment:{attribute:!1},hasFix:{attribute:!1},hasFlagged:{attribute:!1},hasDuplicates:{attribute:!1},hasCrossContext:{attribute:!1},hasAppStacked:{attribute:!1},hasSecurityContrast:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.group=`marks`,this.hasComment=!1,this.hasFix=!1,this.hasFlagged=!1,this.hasDuplicates=!1,this.hasCrossContext=!1,this.hasAppStacked=!1,this.hasSecurityContrast=!1}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":this.group===`context`?`Finding row filters`:`Annotation filter`})}render(){let e=Ro.filter(e=>this.group===`context`===zo.has(e.key)).filter(e=>e.key===`security`?this.hasSecurityContrast:e.key===`duplicates`?!M.currentWorkspace&&(this.hasDuplicates||M[e.stateKey]):this[e.hasKey]||M[e.stateKey]);return e.length===0?V:B`${e.map(e=>{let t=M[e.stateKey],n=zo.has(e.key)?e.label:`${e.label} findings`,r=t===`with`?`Showing only ${n} \u2014 click to exclude them`:t===`without`?`Excluding ${n} \u2014 click to clear`:`Show only ${n}`;return B`<button type="button" class="${R({"annotation-chip":!0,"sel-with":t===`with`,"sel-without":t===`without`})}" aria-label="${r}" aria-pressed="${String(t!==``)}" @click="${()=>this._toggle(e.key)}">${e.glyph}</button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent(`annotation-filter-toggle`,{detail:{key:e},bubbles:!0,composed:!0}))}};customElements.define(`annotation-filter`,Bo);var Vo=[[`critical`,`Critical`],[`high`,`High`],[`medium`,`Medium`],[`low`,`Low`],[`high_bug`,`High bug`],[`bug`,`Bug`],[`informational`,`Info`]],Ho=class extends D{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind=`findings`}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Filter by severity`})}render(){let e=this.kind===`graph`?new Set(this.selected):M.filterSeverities,t=Vo.filter(([t])=>(this.counts[t]??0)||e.has(t));return t.length===0?V:B`${t.map(([t,n])=>{let r=this.counts[t]??0,i=e.has(t);return B`<button type="button" class="${R({"sev-chip":!0,[t]:!0,active:i})}" aria-pressed="${String(i)}" @click="${()=>this._toggle(t)}"><span class="sd"></span><span class="name">${n}</span><span class="n">${r}</span></button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent(`severity-toggle`,{detail:{severity:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define(`severity-chips`,Ho);var Uo=[[`corrected`,`Corrected`,`Show corrected severities (application-specific re-ratings)`],[`original`,`Original`,V]],Wo=class extends D{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Severity display mode`})}render(){let e=M.severityMode;return B`<span class="severity-mode-label">Severity</span><span class="severity-mode-chips">${Uo.map(([t,n,r])=>{let i=e===t;return B`<button type="button" class="${R({"severity-mode-chip":!0,active:i})}" aria-pressed="${String(i)}" data-tooltip="${r}" @click="${()=>this._select(t)}">${n}</button>`})}</span>`}_select(e){e!==M.severityMode&&this.dispatchEvent(new CustomEvent(`severity-mode-change`,{detail:{mode:e},bubbles:!0,composed:!0}))}};customElements.define(`severity-mode-switch`,Wo);var Go=B`<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.8 14.4 5 8 8.2 1.6 5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><path d="M2.6 8 8 10.7 13.4 8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.6 11 8 13.7 13.4 11" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`,Ko=`Show underlying code findings`,qo=B`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5.5v2h10v-2M8 7.5v3"/><rect x="1" y="1.5" width="4" height="4" rx=".6"/><rect x="11" y="1.5" width="4" height="4" rx=".6"/><rect x="6" y="10.5" width="4" height="4" rx=".6"/></svg>`,Jo=`Show only upstream dependency findings`,Yo=class extends D{static properties={canDrop:{type:Boolean,attribute:`can-drop`},canDetail:{type:Boolean,attribute:`can-detail`},canUpstream:{type:Boolean,attribute:`can-upstream`},upstreamDisabled:{type:Boolean,attribute:`upstream-disabled`}};createRenderRoot(){return this}constructor(){super(),this.canDrop=!1,this.canDetail=!1,this.canUpstream=!1,this.upstreamDisabled=!1}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Revalidation layer`})}render(){let e=M.revalidateConflicts.size,t=e>0?B`<button type="button" class="revalidation-toggle revalidation-conflicts" aria-haspopup="dialog" aria-label="${`View ${e} revalidation conflict${e===1?``:`s`}`}" @click="${this._openConflicts}">${e} ${e===1?`conflict`:`conflicts`}</button>`:V,n=M.showRevalidation!==!1,r=n&&M.revalidationDetailed===!0,i=M.upstreamOnly===!0,a=i&&!this.upstreamDisabled;return B`${t}${e===0&&this.canDrop?B`<mode-switch class="revalidation-toggle" label="App" borderless .checked="${n}" accessible-label="App view — hide the issues the revalidation pass ruled out" .disabled="${i}" @click="${this._toggle}"></mode-switch>`:V}${e===0&&this.canDrop&&this.canDetail?B`<button type="button" class="${R({"revalidation-detail":!0,on:r})}" aria-pressed="${String(r)}" aria-label="${Ko}" data-tooltip="${Ko}" ?disabled="${!n||i}" @click="${this._toggleDetail}">${Go}</button>`:V}${this.canUpstream?B`<button type="button" class="${R({"revalidation-upstream":!0,on:a})}" aria-pressed="${String(a)}" aria-label="${Jo}" data-tooltip="${Jo}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${qo}</button>`:V}`}_toggle=()=>{this.dispatchEvent(new CustomEvent(`revalidation-change`,{detail:{on:M.showRevalidation===!1},bubbles:!0,composed:!0}))};_openConflicts=()=>{this.dispatchEvent(new CustomEvent(`revalidation-conflicts-open`,{bubbles:!0,composed:!0}))};_toggleDetail=()=>{this.dispatchEvent(new CustomEvent(`revalidation-detail-change`,{detail:{on:M.revalidationDetailed!==!0},bubbles:!0,composed:!0}))};_toggleUpstream=()=>{this.upstreamDisabled||this.dispatchEvent(new CustomEvent(`upstream-only-change`,{detail:{on:M.upstreamOnly!==!0},bubbles:!0,composed:!0}))}};customElements.define(`revalidation-switch`,Yo);var Xo=B`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,Zo=class extends D{createRenderRoot(){return this}render(){let e=M.currentView===`bundles`&&M.selectedBundle,t=!M.currentFile&&!e;return B`<button type="button" class="danger" ?disabled="${t}">${Xo}<span>Delete current</span></button>`}};customElements.define(`sidebar-delete-current`,Zo);var Qo=B`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,$o=B`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,es={packages:{title:`Show packages`,icon:Qo,view:`packages`},repositories:{title:`Show repositories`,icon:$o,view:`repositories`}},ts=class extends D{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind=``,this.count=0}render(){if(this.count===0)return V;let e=_o(`sidebar-view-button`,es,this.kind);if(!e)return V;let t=M.currentView===e.view;return B`<button type="button" class="${R({"sidebar-view-btn":!0,active:t})}" aria-label="${e.title}">${e.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define(`sidebar-view-button`,ts);var ns=[`invalid`,`deleted`],rs={package:{stateKey:`packageSlideTriage`},repository:{stateKey:`repositorySlideTriage`}},is=class extends D{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=``}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Triage view`})}render(){let e=_o(`slide-triage-tabs`,rs,this.kind);if(!e)return V;let t=M[e.stateKey],n=ns.filter(e=>(this.counts[e]??0)>0||t===e);return n.length===0?V:B`${n.map(e=>{let n=t===e,r=this.counts[e]??0;return B`<button type="button" class="${R({"triage-state-btn":!0,[`triage-state-${e}`]:!0,active:n})}" aria-pressed="${String(n)}" @click="${()=>this._toggle(e)}">${e.charAt(0).toUpperCase()+e.slice(1)} (${r})</button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent(`slide-triage-toggle`,{detail:{kind:this.kind,value:e},bubbles:!0,composed:!0}))}};customElements.define(`slide-triage-tabs`,is);var as=[[`own`,`Sources`],[`modules`,`Deps`]],os=class extends D{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Source filter`})}render(){return B`${as.map(([e,t])=>{let n=M.filterSources.has(e);return B`<button type="button" class="${R({"source-chip":!0,active:n})}" aria-pressed="${String(n)}" @click="${()=>this._toggle(e)}">${t}</button>`})}`}_toggle(e){this.dispatchEvent(new CustomEvent(`source-toggle`,{detail:{source:e},bubbles:!0,composed:!0}))}};customElements.define(`source-filter`,os);var ss=B`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,cs=B`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h10v4"/></svg>`,ls={findings:{stateKey:`filterInclude`,placeholder:`Search findings…`},files:{stateKey:`filesSearch`,placeholder:`Search files…`}},us=class extends D{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=``}render(){let e=_o(`toolbar-search`,ls,this.kind);if(!e)return V;let t=M[e.stateKey];return B`${ss} <input type="text" aria-label="${e.placeholder}" placeholder="${e.placeholder}" .value="${P(t)}" @input="${this._onInput}"> ${this.kind===`findings`&&t?this._negateToggle():V}`}_negateToggle(){let e=M.filterIncludeNegate;return B`<button type="button" class="${R({"search-negate-btn":!0,active:e})}" data-tooltip="${e?`Negation on — click to undo`:`Negate: show non-matching findings`}" aria-label="Negate search" aria-pressed="${String(e)}" @click="${this._onToggleNegate}">${cs}</button>`}_onInput=e=>{this.dispatchEvent(new CustomEvent(`search-input`,{detail:{kind:this.kind,value:e.target.value},bubbles:!0,composed:!0}))};_onToggleNegate=()=>{this.dispatchEvent(new CustomEvent(`search-negate-toggle`,{bubbles:!0,composed:!0}))}};customElements.define(`toolbar-search`,us);var ds=class extends D{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){let e=[{value:``,label:`All repositories`,special:!0,reset:!0},...this.options.map(e=>({value:e??nn,label:e==null?`(no repo)`:Vn(e),special:e==null}))];return B`<repository-selector variant="filter" label="Filter by repository" .options="${e}" .value="${M.filterRepo}" @repository-change="${e=>this.dispatchEvent(new CustomEvent(`repo-change`,{detail:{value:e.detail.value},bubbles:!0,composed:!0}))}"></repository-selector>`}};customElements.define(`repo-filter`,ds);var fs={"":{cls:`included`,label:`+ Partial`,title:`Confirmed, partial and revalidation rows — click for full confirmations only`},exclude:{cls:`excluded`,label:`− Partial`,title:`Full confirmations only — click to show the partial ones only`},only:{cls:`only`,label:`only Partial`,title:`Partial confirmations only — click to show all of them again`}},ps=class extends D{static properties={options:{attribute:!1},hasPartial:{type:Boolean,attribute:`has-partial`}};createRenderRoot(){return this}constructor(){super(),this.options=[],this.hasPartial=!1}render(){return B`<select class="sort-select" aria-label="Filter by revalidation outcome" .value="${P(M.filterRevalidate)}" @change="${this._onChange}"><option value="" hidden ?selected="${M.filterRevalidate===``}"></option><option value="">Confidence</option>${this.options.map(e=>B`<option value="${e.value}" ?selected="${M.filterRevalidate===e.value}">${e.label}</option>`)}</select> ${this.hasPartial&&M.filterRevalidate===`confirmed`?this._partialChip():V}`}_partialChip(){let e=fs[M.filterPartial]??fs[``];return B`<button type="button" class="${R({"partial-cycle":!0,[e.cls]:!0})}" data-tooltip="${e.title}" @click="${this._onPartial}">${e.label}</button>`}_onPartial=()=>{let e=Xn.indexOf(M.filterPartial),t=Xn[(e+1)%Xn.length];this.dispatchEvent(new CustomEvent(`partial-change`,{detail:{value:t},bubbles:!0,composed:!0}))};_onChange=e=>{let{value:t}=e.target;t||(e.target.selectedIndex=0),this.dispatchEvent(new CustomEvent(`revalidate-change`,{detail:{value:t},bubbles:!0,composed:!0}))}};customElements.define(`revalidate-filter`,ps);var ms=[[`none`,`none`,`unmarked`],[`red`,`r`,`red`],[`blue`,`b`,`blue`],[`green`,`g`,`green`],[`gray`,`x`,`gray`]],hs=class extends D{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind=`findings`}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Filter by mark color`})}render(){let e=this.kind===`graph`?new Set(this.selected):M.filterColors;return ms.some(([t])=>(this.counts[t]??0)||e.has(t))?B`${ms.map(([t,n,r])=>{let i=this.counts[t]??0,a=e.has(t);return B`<button type="button" class="${a?`active`:``}" aria-label="${`${r} (${i})`}" aria-pressed="${String(a)}" @click="${()=>this._toggle(t)}"><span class="${`td ${n}`}"></span><span class="count">${i}</span></button>`})}`:V}_toggle(e){this.dispatchEvent(new CustomEvent(`color-toggle`,{detail:{color:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define(`triage-filter`,hs);var gs=[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`],_s={graph:`graph2-triage-selector`,packages:`packages-triage-selector`},vs={inprogress:`In progress`},ys=e=>vs[e]??e.charAt(0).toUpperCase()+e.slice(1),bs=class extends D{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=``}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`Triage view`})}render(){let e=this.states??gs,t=e.reduce((e,t)=>e+(this.counts[t]??0),0),n=this.variant?_s[this.variant]:null;this.variant&&n===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(_s).map(e=>JSON.stringify(e)).join(`, `)} or "".`);for(let e of Object.values(_s))this.classList.toggle(e,e===n);let r=t===0&&!M.shownTriage;return this.classList.toggle(`is-empty`,r),r?V:B`${e.map(e=>{let t=this.counts[e]??0,n=M.shownTriage===e;if(t===0&&!n)return V;let r=ys(e);return B`<button type="button" class="${R({"triage-state-btn":!0,[`triage-state-${e}`]:!0,active:n})}" data-triage-show="${e}" aria-pressed="${String(n)}"><span>${r}</span><span class="n">${t}</span></button>`})}`}};customElements.define(`triage-selector`,bs);var xs={table:B`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:B`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:B`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:B`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:B`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:B`${_r(br)}`},Ss={table:`Table view (compact rows, click a row to expand)`,list:`List view (flat, one card per finding)`,grouped:`List view, grouped by file`,focus:`Focus view (one finding centered + a queue of next findings)`,kanban:`Kanban board, columns grouped by triage status`,graph:`Graph view (canvas with imports / exports)`},Cs=[`kanban`,`focus`,`table`,`list`,`grouped`,`graph`],ws=class extends D{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=Cs.join(`,`),this.kind=`findings`}connectedCallback(){super.connectedCallback(),X(this,{role:`group`,"aria-label":`View mode`})}render(){let e=this.kind===`files`?M.filesViewMode:M.viewMode,t=this.modes.split(`,`).map(e=>e.trim()).filter(e=>Cs.includes(e)),n=t.length>0?t:Cs;return B`${n.map(t=>B`<button type="button" class="${R({"view-mode-btn":!0,active:e===t})}" aria-label="${Ss[t]}" aria-pressed="${String(e===t)}" @click="${()=>this._select(t,e)}">${xs[t]}</button>`)}`}_select(e,t){e!==t&&this.dispatchEvent(new CustomEvent(`view-mode-change`,{detail:{mode:e,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define(`view-mode-buttons`,ws);var Ts=`/api/oauth/github/link`,Es={"github-account-own":`That is the account you sign in with. On GitHub, pick or add the other account to link.`,"github-account-registered":`That GitHub account has signed in here before, so it is a user of its own and cannot be linked.`,"github-account-linked":`That GitHub account is already linked to another user.`,"github-authorization-declined":`Linking was cancelled on GitHub.`,"invalid-oauth-state":`The link request expired or was started from another session. Try again.`},Ds=e=>new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}),Os=class extends H{static properties={session:{attribute:!1},linkError:{attribute:!1},_profile:{state:!0},_pending:{state:!0},_busy:{state:!0},_error:{state:!0},_avatarRevision:{state:!0}};constructor(){super(),this._profile=null,this._avatarRevision=0,this._controller=new AbortController}createRenderRoot(){return this}disconnectedCallback(){super.disconnectedCallback(),this._controller.abort(),this._key=null}get _readOnly(){return!!this.session?.viewer||tn()!==null}async _load(){let e=this._key;this._busy=!0,this._error=null;try{let t=await re({signal:this._controller.signal});e===this._key&&(this._profile=t)}catch(t){e===this._key&&t.name!==`AbortError`&&(this._error=t.message)}finally{e===this._key&&(this._busy=!1)}}async _change(e,t=null){if(this._busy||this._readOnly)return;let n=this._key;this._busy=!0,this._error=null;try{let r=await e(this.session.csrfToken,{signal:this._controller.signal});if(n!==this._key)return;let i=r.avatarAccount!==this._profile?.avatarAccount;i&&this._avatarRevision++,this._profile=r,Jt(this.session.id,r,i,t),document.dispatchEvent(new CustomEvent(`managed-profile-change`,{detail:{userId:this.session.id,name:r.name,avatarChanged:i}}))}catch(e){n===this._key&&e.name!==`AbortError`&&(this._error=e.message)}finally{n===this._key&&(this._busy=!1,this._pending=null)}}_choose(e,t){return this._busy||this._readOnly?Promise.resolve():(this._pending={[`${e}Account`]:t},this._change((n,r)=>v({[e]:t},n,r)))}_unlink(e){return this._change((t,n)=>le(e.id,t,n),{login:e.login,githubId:e.githubId})}_avatar(e,{own:t=!1,initial:n,large:r=!1}={}){let i=`/api/avatar/${encodeURIComponent(e)}${t?`?own`:this._avatarRevision?`?v=${this._avatarRevision}`:``}`;return B`<span class="${`managed-profile-avatar${r?` is-large`:``}`}" aria-hidden="true"><span>${(n[0]??`?`).toUpperCase()}</span> ${tn()?V:B`<img alt="" src="${i}" @error="${e=>e.currentTarget.classList.add(`broken`)}">`}</span>`}_account({id:e,githubId:t,login:n,name:r,linkedAt:i},a){let o=e===null,s=this._busy||this._readOnly;return B`<tr><td><span class="managed-profile-account">${this._avatar(o?this.session.id:e,{own:o,initial:n})} <span><a href="${`https://github.com/${encodeURIComponent(n)}`}" target="_blank" rel="noreferrer">@${n}</a> <span class="managed-profile-muted">${o?`Sign-in account`:i===null?`Linked`:`Linked ${Ds(i)}`}</span></span></span></td><td><label class="managed-profile-choice"><input type="radio" name="managed-profile-name" .checked="${P(a.nameAccount===e)}" ?disabled="${s}" aria-label="${`Use @${n}'s name`}" @change="${()=>this._choose(`name`,e)}"> ${r?B`<span>${r}</span>`:B`<span class="managed-profile-muted">No name</span>`}</label></td><td><label class="managed-profile-choice"><input type="radio" name="managed-profile-avatar" .checked="${P(a.avatarAccount===e)}" ?disabled="${s}" aria-label="${`Use @${n}'s avatar`}" @change="${()=>this._choose(`avatar`,e)}"><span class="managed-profile-muted">Avatar</span></label></td><td>${o?V:B`<button type="button" class="npm-review-button" ?disabled="${s}" aria-label="${`Unlink @${n}`}" @click="${()=>this._unlink({id:e,githubId:t,login:n})}">Unlink</button>`}</td></tr>`}render(){let e=JSON.stringify([this.session?.id,this.session?.role]);e!==this._key&&(this._controller.abort(),this._controller=new AbortController,this._key=e,this._profile=null,this._load());let t=this._profile,n=t?.login??this.session?.login??``,r=t?t.name:this.session?.name??null,i=this.linkError?Es[this.linkError]??`Could not link the account (${this.linkError}).`:null;return B`<section class="managed-profile"><header class="managed-profile-card">${this._avatar(this.session?.id??``,{initial:n,large:!0})}<div><h1>${r||`@${n}`}</h1>${r?B`<p class="managed-profile-muted">@${n}</p>`:V}</div></header>${i?B`<p class="managed-profile-error" role="alert">${i}</p>`:V} ${this._error?B`<p class="managed-profile-error" role="alert">${this._error}</p>`:V}<section class="managed-profile-section" aria-labelledby="managed-profile-accounts"><h2 id="managed-profile-accounts">GitHub accounts</h2><p class="managed-profile-muted">You sign in as @${n}. Your name and avatar can come from any of your accounts. A linked account cannot sign in or register here.</p>${t?B`<table class="managed-profile-accounts"><thead><tr><th scope="col">Account</th><th scope="col">Name</th><th scope="col">Avatar</th><th scope="col"><span class="sr-only">Actions</span></th></tr></thead><tbody>${[{id:null,login:t.login,name:t.githubName,linkedAt:null},...t.accounts].map(e=>this._account(e,{...t,...this._pending}))}</tbody></table>`:V} ${this._readOnly?B`<p class="managed-profile-muted">${this.session?.viewer?`Viewing as another user is read only.`:`The preview changes nothing.`}</p>`:B`<a class="npm-review-button npm-review-primary" href="${Ts}">Link GitHub account</a><p class="managed-profile-muted">GitHub asks which account to link: pick or add the other account there.</p>`}</section></section>`}};customElements.define(`managed-profile`,Os);var ks=class extends D{createRenderRoot(){return this}render(){return M.reports.length>0&&M.currentView===`findings`&&M.viewMode!==`graph`&&M.viewMode!==`kanban`?B`<button type="button" class="toolbar-export-btn" aria-label="Download or print report" @click="${this._onClick}">${t}</button>`:V}_onClick=()=>{this.dispatchEvent(new CustomEvent(`download-requested`,{bubbles:!0,composed:!0}))}};customElements.define(`download-button`,ks);var As=class extends D{static styles=Cr`.preview{position:fixed;inset:auto;margin:0;padding:14px;box-sizing:border-box;width:min(24rem,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--bg);color:var(--text);box-shadow:0 8px 28px #00000040;font:13px/1.45 system-ui,sans-serif;text-align:left;white-space:normal;overflow-wrap:anywhere;letter-spacing:normal;cursor:default}.preview.wide{width:min(36rem,calc(100vw - 24px))}@media print{.preview{display:none}}:host-context(body.theme-w95) *{overscroll-behavior:none}`;constructor(){super(),this.showTimer=null,this.hideTimer=null}connectedCallback(){super.connectedCallback(),Qn(this.renderRoot)}disconnectedCallback(){this._hidePreview(),super.disconnectedCallback()}updated(){let e=this.renderRoot.querySelector(`.preview`);e?e.matches(`:popover-open`)&&this._positionPreview():this._hidePreview()}_schedulePreview(){clearTimeout(this.hideTimer),clearTimeout(this.showTimer),this.renderRoot.querySelector(`.preview`)&&(this.showTimer=setTimeout(()=>{if(!this.isConnected)return;let e=this.renderRoot.querySelector(`.preview`);e&&(Zn(),e.showPopover(),this._positionPreview(),document.addEventListener(`keydown`,this._previewKeyDown,!0),window.addEventListener(`scroll`,this._previewScroll,!0),window.addEventListener(`resize`,this._hidePreview))},150))}_keepPreview(){clearTimeout(this.hideTimer)}_leavePreview(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>{this.renderRoot.querySelector(`.preview`)?.contains(this.renderRoot.activeElement)||this._hidePreview()},150)}_hidePreview=()=>{clearTimeout(this.showTimer),clearTimeout(this.hideTimer);let e=this.renderRoot?.querySelector(`.preview`);e?.matches(`:popover-open`)&&e.hidePopover(),document.removeEventListener(`keydown`,this._previewKeyDown,!0),window.removeEventListener(`scroll`,this._previewScroll,!0),window.removeEventListener(`resize`,this._hidePreview)};_previewKeyDown=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),this.renderRoot.querySelector(`.preview`)?.contains(this.renderRoot.activeElement)&&this.renderRoot.querySelector(`[aria-details]`).focus({preventScroll:!0}),this._hidePreview())};_previewScroll=e=>{e.composedPath().includes(this.renderRoot.querySelector(`.preview`))||this._hidePreview()};_positionPreview(){let e=this.renderRoot.querySelector(`.preview`),t=this.renderRoot.querySelector(`[aria-details]`).getBoundingClientRect(),{width:n,height:r}=e.getBoundingClientRect(),i=Math.max(12,Math.min(t.left,window.innerWidth-n-12)),a=t.bottom+8+r<=window.innerHeight-12?t.bottom+8:Math.max(12,t.top-8-r);e.style.left=`${i}px`,e.style.top=`${a}px`}},js={open:`Open`,draft:`Draft`,closed:`Closed`,merged:`Merged`,completed:`Completed`,not_planned:`Not planned`,duplicate:`Duplicate`,unknown:`Closed`},Ms=B`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3" r="1.75"/><circle cx="4" cy="13" r="1.75"/><circle cx="12" cy="13" r="1.75"/><path d="M4 4.75v6.5M12 11.25V5a2 2 0 0 0-2-2H8m2-2L8 3l2 2"/></svg>`,Ns=B`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,Ps={completed:B`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m5 8 2 2 4-4"/></svg>`,not_planned:B`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m3.5 12.5 9-9"/></svg>`},Fs=class extends As{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[As.styles,Cr`:host{display:inline;word-break:normal}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere;cursor:default}.status{display:inline-flex;align-items:center;gap:.3em;vertical-align:text-bottom;margin-right:.35em;font-weight:600;white-space:nowrap}svg{flex:none}.open{color:light-dark(#1a7f37,#3fb950)}.draft,.not_planned,.duplicate,.unknown,.unavailable{color:var(--muted)}.closed{color:light-dark(#d1242f,#f85149)}.merged,.completed{color:light-dark(#8250df,#a371f7)}:host(:not([compact])){display:block}:host(:not([compact])) .fix-link{display:flex;align-items:center;gap:.55rem;min-width:0}.link-icon{flex:none;line-height:1}.link-icon svg{display:block}.link-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500;line-height:1.5}.link-icon.unavailable+.link-title{color:var(--accent)}.ref{min-width:0;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.74rem}.link-status{flex:none;padding:.15rem .4rem;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:.7rem;font-weight:500;line-height:1.3}:host([compact]){display:inline-flex}:host([compact]) .fix-link{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host([compact]) .fix-link svg{width:14px;height:14px}:host([compact]) .status{margin:0;font-size:1rem;line-height:1}.preview{width:min(28.8rem,calc(100vw - 24px))}.preview.wide{width:min(43.2rem,calc(100vw - 24px))}:host-context(body.theme-w95) .preview{background:var(--w95-tooltip)}.preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.preview-ref{display:inline-flex;align-items:center;gap:.4rem;min-width:0;color:var(--muted);font-size:12px;line-height:1.4}.preview-ref span{min-width:0}.preview-description{margin-top:8px;white-space:pre-wrap}.preview-title{margin-top:8px;font-size:15px;font-weight:600;line-height:1.4}.preview .preview-header .status{flex:none;margin:0;font-size:12px;line-height:1.4}@media print{:host(:not([compact])) .fix-link{display:block}.link-title,.ref{white-space:normal;overflow:visible;text-overflow:clip;max-width:none}.link-icon{display:inline-block;vertical-align:middle;margin-right:.55rem}.ref,.link-status{margin-left:.55rem}.preview{display:none}}`];constructor(){super(),this.url=``,this.compact=!1,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this.unsubscribe=Vt(()=>this.requestUpdate()),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,super.disconnectedCallback()}updated(e){e.has(`url`)||e.has(`compact`)?this._hidePreview():super.updated(e)}render(){if(!mr(this.url))return B`${this.url}`;let e=Ot(this.url),t=!e&&Nt(this.url),n=e||t,r=Rt.read(this.url);if(!r&&!n){let e=`Open fix link: ${this.url}`;return B`<a class="${this.compact?`fix-link`:``}" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" data-tooltip="${this.compact?e:V}" aria-label="${e}">${this.compact?B`<slot></slot>`:this.url}</a>`}let i=r?t&&r.status===`closed`?r.stateReason??`unknown`:r.status:`unavailable`,a=e?Ms:t?Ps[i]??Ns:null,o=n?`${n.repo}#${n.number}`:``,s=(r?.title.length??0)>40||(r?.description??``).split(/[\r\n]/u).some(e=>e.length>100),c=r?`${js[i]} ${e?`pull request`:`issue`}: ${r.title} (${o})`:n?`Open ${e?`pull request`:`issue`}: ${o}`:`Open fix link: ${this.url}`;return B`<a class="fix-link" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${c}" aria-details="${this.compact&&n?`fix-preview`:V}" data-tooltip="${this.compact&&!n?c:V}" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}">${this.compact?a?B`<span class="${`status ${i}`}">${a}</span>`:B`<slot></slot>`:B`${a?B`<span class="${`link-icon ${i}`}">${a}</span>`:V} <span class="link-title">${r?.title??(o||this.url)}</span> ${r?B`<span class="ref">${o}</span><span class="${`link-status ${i}`}">${js[i]}</span>`:V}`} </a>${this.compact&&n?B`<a class="${s?`preview wide`:`preview`}" id="fix-preview" popover="manual" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${`Open ${e?`pull request`:`issue`} ${o} on GitHub`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${e=>{e.stopPropagation(),this._hidePreview()}}"><div class="preview-header"><span class="preview-ref">${_r(Sr)}<span>${o}</span></span> <span class="${`status ${i}`}">${a}${r?js[i]:e?`Pull request`:`Issue`}</span></div>${r?B`<div class="preview-title">${r.title}</div>`:V} ${r?.description?B`<div class="preview-description">${r.description}</div>`:V}</a>`:V}`}};customElements.define(`managed-fix-link`,Fs);var Is=class extends As{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[As.styles,z(a),Cr`:host{display:inline-flex}:host([hidden]){display:none!important}button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:default}.preview-trigger{display:inline-flex;align-items:center;justify-content:center;line-height:0}.preview-trigger:hover{color:var(--accent)}.managed-comment+.managed-comment{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.comment-body{white-space:pre-wrap}.comment-body a{color:var(--accent);text-decoration:none}.comment-body a:hover{text-decoration:underline}.preview-footer{display:flex;justify-content:flex-end;margin-top:8px}.edit-hint{color:var(--muted);font-size:12px}.edit-hint:hover{color:var(--accent)}`];constructor(){super(),this.finding=null,this.comment=``,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this._subscribe(),document.addEventListener(`managed-comments-reset`,this._resetComments),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,document.removeEventListener(`managed-comments-reset`,this._resetComments),super.disconnectedCallback()}updated(e){this.hidden=!this.renderRoot.querySelector(`.preview`),e.has(`finding`)&&(this._hidePreview(),this._subscribe()),super.updated(e)}_subscribe(){this.unsubscribe?.(),this.unsubscribe=this.finding?.id?zt(this.finding.id,()=>this.requestUpdate()):null}_resetComments=()=>{this._hidePreview(),this.requestUpdate()};_previewClick(e){if(e.target.closest(`a, button`)){this._hidePreview();return}window.getSelection?.()?.toString()||(e.stopPropagation(),this.renderRoot.querySelector(`.preview-trigger`).click())}render(){let e=N(),t=e?Ht(this.finding):[];if(!(e?t.length>0:this.comment))return V;let n=(e?t.map(e=>e.body):[this.comment]).some(e=>e.split(/[\r\n]/u).some(e=>e.length>100));return B`<button type="button" class="preview-trigger mark-comment" aria-label="${e?`View comments`:`Edit comment`}" aria-details="comment-preview" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}"><slot></slot></button><div class="${n?`preview wide`:`preview`}" id="comment-preview" popover="manual" role="region" aria-label="${e?`Comments`:`Comment`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${this._previewClick}">${e?t.map(e=>fn(e,mn(e.body))):B`<div class="comment-body">${mn(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define(`comment-preview`,Is);function Ls(e){let t=new Map;for(let[n,r]of M.triage)r[e]&&t.set(n,r[e]);return t}window.DeepView={get reports(){return M.reports.slice()},get groups(){return et()},get findings(){return et().flat()},get currentFile(){return M.currentFile},get currentWorkspace(){return M.currentWorkspace},triage:{get markers(){return Ls(`color`)},get triageState(){return Ls(`triage`)},get comments(){return Ls(`comment`)},get fixes(){return Ls(`fix`)},get flags(){return Ls(`flagged`)},get(e){let t=M.triage.get(e),n={};return t?.color&&(n.color=t.color),t?.triage&&(n.triage=t.triage),t?.comment&&(n.comment=t.comment),t?.fix&&(n.fix=t.fix),t?.flagged!==void 0&&(n.flagged=t.flagged),n},async set(e,{color:t,triage:n,comment:r,fix:i,flagged:a}={}){if(ve())throw Error(`DeepView.triage.set: triage is read-only on this page`);let o=!1;if(t!==void 0&&(t===null||t===``?F(M.triage,e,{color:void 0})&&(o=!0):M.triage.get(e)?.color!==t&&(F(M.triage,e,{color:t}),o=!0)),n!==void 0){if(n===null||n===``||n===!1)F(M.triage,e,{triage:void 0})&&(o=!0);else if(n===`inprogress`||n===`fixed`||n===`invalid`||n===`deleted`||n===`ignored`)M.triage.get(e)?.triage!==n&&(F(M.triage,e,{triage:n}),o=!0);else throw TypeError(`DeepView.triage.set: unknown triage value ${JSON.stringify(n)} (expected 'inprogress' | 'fixed' | 'invalid' | 'deleted' | 'ignored' | null)`)}if(r!==void 0){let t=r?String(r):``;t?M.triage.get(e)?.comment!==t&&(F(M.triage,e,{comment:t}),o=!0):F(M.triage,e,{comment:void 0})&&(o=!0)}if(i!==void 0){let t=i?String(i):``;t?M.triage.get(e)?.fix!==t&&(F(M.triage,e,{fix:t}),o=!0):F(M.triage,e,{fix:void 0})&&(o=!0)}if(a!==void 0){let t=a===null||a===``?void 0:!!a;M.triage.get(e)?.flagged!==t&&(F(M.triage,e,{flagged:t}),o=!0)}return o&&(await E(),w()),o}},forceManagedMode:Wt,setTheme:Ia,get theme(){return La()},triageSync:Zt,refresh(){w()},export(){return In()},compareReports(){return Nn()}};var Rs={default:S.default,"claude-security":S[`claude-security`],"codex-security":S[`codex-security`],deepsec:S.deepsec,piolium:S.piolium,"markdown-generic":S[`markdown-generic`],bundle:vr,workspace:yr,links:xr,github:Sr};for(let e of document.querySelectorAll(`.drop-supported-icon[data-icon]`)){let t=Rs[e.dataset.icon];t&&(e.innerHTML=Yn(t))}gt(w),Ne(w),dt(w),Zt.onStatusChange(w),st(async(e,t)=>{M.currentWorkspace===e?await un(e):M.currentFile&&M.currentFile===t?await $t(t):await A()}),lt(async()=>{await A(),M.currentView===`bundles`&&w()}),Er(),kr();async function zs(){let e=ht();if(!e)return!1;try{history.replaceState(null,``,location.pathname)}catch{}let t;try{t=await Ln({encoded:e})}catch(e){return alert(`Couldn't open the share-link unlock prompt: ${e.message}`),!1}if(!t)return!1;let n=await xe({id:t.id,name:t.name,privateKey:t.privateKeyBase64});if(n.status===`already-attached`)return alert(`This workspace is already attached as "${n.workspace.name}".`),!1;if(n.status===`name-collision`){let e=n.existing?.name;return alert(e?`A workspace named "${e}" already exists. Open the share link again and pick a different name.`:`The shared workspace name is empty or invalid. Ask the sender to re-share with a real name.`),!1}return n.workspace?.id?await un(n.workspace.id):await A(),!0}async function Bs(){let e=ar();if(!e)return!1;try{history.replaceState(null,``,location.pathname)}catch{}let t=await jt(e);return t.ok?!0:(alert(t.reason),!1)}var Vs=!1;async function Hs(){if(await Kt(),!Vs&&(N()||!O()||ot())){Vs=!0;try{await Us()}finally{Me.hidden=!1}}}async function Us(){let e=sn(),t=()=>e===sn()&&!N();if(N()){await A();return}if(await Lt(),!t()||(de(),await Promise.all([A(),je().catch(e=>console.warn(`initial linked findings:`,e))]),!t())||await zs()||!t()||await Bs()||!t())return;let n=Mt(Yt);if(n){if(n.startsWith(`wbs:`)||n.startsWith(`wrs:`))await an(n.slice(4),n.startsWith(`wrs:`)?`reports`:`bundles`);else if(n.startsWith(`ws:`)){let e=n.slice(3);b().some(t=>t.id===e)&&await un(e)}else if(n.startsWith(`b:`)){let e=n.slice(2),t=e.indexOf(` `),r=t>=0?e.slice(0,t):e,i=t>=0?e.slice(t+1):``,a=cr.has(i)?i:`overview`;if((M.bundles??[]).some(e=>e.integrity===r)){let e=b().filter(e=>e.bundles.includes(r));Ge(r,a,{workspaceId:e.length===1?e[0].id:null}),w(),$e(r),await A()}}else{let e=await vn();if(!t())return;let r=Ve(n);r&&e.includes(r.name)&&await $t(r.name,void 0,{workspaceId:r.workspaceId})}}}var Ws=!1,Gs=!1;document.addEventListener(`managed-client-mode-change`,()=>{Ws=!N()&&O()});function Ks(e){Gs||(Gs=!0,queueMicrotask(()=>{alert(e+` This tab will reload to refresh its state. Any unsaved edits in this tab will be lost.`),location.reload()}))}mt(async()=>{if(await Kt(),N()){w();return}let e=Ws,t=O();if(Ws=t,w(),!Vs&&ot()){Hs().catch(e=>console.warn(`continueBoot:`,e));return}if(Vs&&t&&!ot()){Ks(`Encryption was just enabled in another tab.`);return}Vs&&e&&!t&&!it()&&Ks(`Encryption was disabled in another tab.`)}),window.addEventListener(`hashchange`,()=>{!Vs||N()||(async()=>{await zs()||await Bs()})().catch(e=>console.warn(`deep-link hashchange:`,e))}),(async()=>{if(!await zr()){await Kt(),Ws=!N()&&O();try{let e=window.matchMedia?.(`(display-mode: window-controls-overlay)`),t=()=>{let t=!1;try{t=localStorage.getItem(`deepview.sidebarCollapsed`)===`1`}catch{}Ie.classList.toggle(`collapsed`,t&&!e?.matches)};t(),e?.addEventListener(`change`,t);let n=e?.matches;if(window.matchMedia?.(`(display-mode: standalone)`).matches||n){let e=document.querySelector(`meta[name="viewport"]`);e&&e.setAttribute(`content`,`width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no`),window.addEventListener(`wheel`,e=>{(e.ctrlKey||e.metaKey)&&e.preventDefault()},{passive:!1}),window.addEventListener(`keydown`,e=>{(e.ctrlKey||e.metaKey)&&(e.key===`=`||e.key===`+`||e.key===`-`||e.key===`0`)&&e.preventDefault()})}}catch{}!N()&&O()&&!ot()||await Hs()}})();