@preventive/triage 1.0.0-alpha.37 → 1.0.0-alpha.38

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 (175) hide show
  1. package/README.md +16 -0
  2. package/common/bundle-compare-diff.d.ts +3 -0
  3. package/common/bundle-compare-diff.js +522 -0
  4. package/common/bundle-compare-inputs.d.ts +2 -0
  5. package/common/bundle-compare-inputs.js +65 -0
  6. package/common/bundle-metadata.d.ts +6 -2
  7. package/common/bundle-metadata.js +63 -20
  8. package/common/bundle-pkg-of.d.ts +1 -0
  9. package/common/bundle-pkg-of.js +90 -0
  10. package/common/bundle-source-links.js +7 -0
  11. package/common/bundle-sourcemap.d.ts +10 -0
  12. package/common/bundle-sourcemap.js +100 -0
  13. package/common/bundle-sources.d.ts +3 -1
  14. package/common/bundle-sources.js +47 -19
  15. package/common/code-language.js +16 -2
  16. package/common/default-scan-models.ts +2 -1
  17. package/common/dependency-reviews.d.ts +23 -0
  18. package/common/dependency-reviews.js +81 -0
  19. package/common/finding-duplicates.js +58 -0
  20. package/common/finding-filters.js +274 -0
  21. package/common/github-pr.ts +1 -1
  22. package/common/gzip.js +59 -0
  23. package/common/line-diff.d.ts +8 -0
  24. package/common/line-diff.js +56 -0
  25. package/common/linked-workspace-groups.js +63 -0
  26. package/common/managed/npm-packages.d.ts +5 -0
  27. package/common/managed/npm-packages.js +34 -0
  28. package/common/managed/permissions.ts +1 -5
  29. package/common/managed/routes.js +123 -12
  30. package/common/managed/team-app.d.ts +2 -0
  31. package/common/managed/team-app.js +31 -0
  32. package/common/managed/triage.ts +1 -1
  33. package/common/managed/upload-seal.ts +126 -0
  34. package/common/pretty-print.d.ts +5 -0
  35. package/common/pretty-print.js +24 -0
  36. package/common/revalidation-conflicts.js +48 -0
  37. package/common/revalidation-input-groups.js +56 -0
  38. package/common/workspace-app.js +23 -0
  39. package/common/workspace-groups.js +176 -0
  40. package/out/brotli-fallback.js +3 -3
  41. package/out/chunk-2KBF5TZ7.js +2 -0
  42. package/out/chunk-2XUEZHIP.js +28 -0
  43. package/out/chunk-35VE6CDH.js +2 -0
  44. package/out/chunk-3BZ7JERB.js +1 -0
  45. package/out/chunk-4XCDFGDP.js +10 -0
  46. package/out/chunk-5FKRIJGF.js +1 -0
  47. package/out/chunk-6Z5XLSPJ.js +1 -0
  48. package/out/chunk-ABW5FVSN.js +1 -0
  49. package/out/chunk-BJKRVROW.js +1 -0
  50. package/out/chunk-BYUEDJOM.js +7 -0
  51. package/out/chunk-C4Z6ZBXV.js +10 -0
  52. package/out/chunk-CMQA4DM6.js +1 -0
  53. package/out/chunk-CVVJAXVY.js +2 -0
  54. package/out/chunk-DCQX2J3C.js +223 -0
  55. package/out/chunk-DIJJNTRH.js +10 -0
  56. package/out/chunk-F4OMDNEY.js +1 -0
  57. package/out/chunk-FU4MTW7F.js +1 -0
  58. package/out/chunk-GJ4IUCNS.js +1 -0
  59. package/out/chunk-GMFXFEUA.js +2 -0
  60. package/out/chunk-GNXOKIGP.js +80 -0
  61. package/out/chunk-GZ4MS3TE.js +13 -0
  62. package/out/chunk-HIV7SVI7.js +1 -0
  63. package/out/chunk-IU3CCINR.js +3 -0
  64. package/out/chunk-JAKWIZWL.js +2 -0
  65. package/out/chunk-K3X5EJBQ.js +2 -0
  66. package/out/chunk-KEX2ATEW.js +2 -0
  67. package/out/chunk-KYCNJVB7.js +1 -0
  68. package/out/chunk-NRPC74AM.js +1 -0
  69. package/out/chunk-OJ5DGP5E.js +33 -0
  70. package/out/chunk-OOJM4CTU.js +1 -0
  71. package/out/chunk-PNHBZGDD.js +1 -0
  72. package/out/chunk-R5O6FAW4.js +2 -0
  73. package/out/chunk-RFZQQXSG.js +17 -0
  74. package/out/chunk-SD2WJAXN.js +48 -0
  75. package/out/chunk-TUII34K2.js +1 -0
  76. package/out/chunk-TZ5KB2Y5.js +10 -0
  77. package/out/chunk-UNTRGE26.js +2 -0
  78. package/out/chunk-UYAXVRVL.js +1 -0
  79. package/out/chunk-V3ME6FI5.js +2 -0
  80. package/out/chunk-V5O7M2YT.js +1 -0
  81. package/out/chunk-VIHGO77Y.js +1 -0
  82. package/out/chunk-W4J3MGLB.js +1 -0
  83. package/out/chunk-WGG7KQUH.js +1 -0
  84. package/out/chunk-XYFXXB2G.js +10 -0
  85. package/out/chunk-YVZH5SHP.js +1 -0
  86. package/out/chunk-ZPD5R5RP.js +3 -0
  87. package/out/client-managed-import.js +3 -87
  88. package/out/client-managed.js +26 -338
  89. package/out/client-sync.js +8 -14
  90. package/out/graph.js +17 -30
  91. package/out/index.html +34 -0
  92. package/out/prism.js +6 -2
  93. package/out/terminal.js +241 -257
  94. package/out/view.css +1 -1
  95. package/out/view.js +76 -520
  96. package/package.json +88 -7
  97. package/risk/files/characters.js +196 -0
  98. package/risk/files/hosts.js +205 -0
  99. package/risk/files/readability.js +164 -0
  100. package/risk/files/runs-code.js +329 -0
  101. package/risk/files/script.js +112 -0
  102. package/risk/files/stamps.js +46 -0
  103. package/risk/index.d.ts +142 -0
  104. package/risk/index.js +7 -0
  105. package/risk/npm/assess.js +219 -0
  106. package/risk/npm/combined.js +65 -0
  107. package/risk/npm/compare.js +222 -0
  108. package/risk/npm/dependencies.js +153 -0
  109. package/risk/npm/diff.js +43 -0
  110. package/risk/npm/downloads.js +84 -0
  111. package/risk/npm/files.js +34 -0
  112. package/risk/npm/held.js +60 -0
  113. package/risk/npm/install-scripts.js +33 -0
  114. package/risk/npm/malware.js +36 -0
  115. package/risk/npm/manifest.js +65 -0
  116. package/risk/npm/new-dependency.js +30 -0
  117. package/risk/npm/old-version.js +108 -0
  118. package/risk/npm/registry.js +282 -0
  119. package/risk/npm/release.js +85 -0
  120. package/risk/npm/specs.js +124 -0
  121. package/risk/npm/tarball.js +113 -0
  122. package/server-e2e/http.ts +7 -7
  123. package/server-e2e/npm-proxy.ts +1 -1
  124. package/server-e2e/objstore/fetch-mint-guard.ts +2 -2
  125. package/server-e2e/objstore/handlers.ts +1 -1
  126. package/server-e2e/objstore/tokens.ts +1 -1
  127. package/server-e2e/sign.ts +1 -1
  128. package/server-managed/bundle-advisories.ts +68 -11
  129. package/server-managed/bundle-cache.ts +37 -4
  130. package/server-managed/bundle-commits.ts +140 -0
  131. package/server-managed/bundle-summary-cache.ts +24 -10
  132. package/server-managed/config.ts +4 -0
  133. package/server-managed/db-methods.ts +98 -11
  134. package/server-managed/db-neon.ts +39 -4
  135. package/server-managed/db-schema.ts +14 -2
  136. package/server-managed/db-table-names.ts +1 -1
  137. package/server-managed/db.ts +7 -3
  138. package/server-managed/dependency-reviews.ts +248 -0
  139. package/server-managed/github-issue-oauth.ts +5 -6
  140. package/server-managed/github-metadata.ts +115 -0
  141. package/server-managed/github-oauth.ts +38 -2
  142. package/server-managed/http-response.ts +26 -0
  143. package/server-managed/http.ts +943 -52
  144. package/server-managed/index.ts +11 -5
  145. package/server-managed/kept.ts +28 -0
  146. package/server-managed/locked-packages.ts +85 -0
  147. package/server-managed/lru.ts +30 -0
  148. package/server-managed/npm-insights.ts +440 -0
  149. package/server-managed/npm-kept.ts +65 -0
  150. package/server-managed/npm-loads.ts +167 -0
  151. package/server-managed/npm-manifest.ts +115 -0
  152. package/server-managed/npm-packages.ts +378 -0
  153. package/server-managed/npm-provenance.ts +123 -0
  154. package/server-managed/npm-risk.ts +177 -0
  155. package/server-managed/pretty-print.ts +352 -0
  156. package/server-managed/public-workspace.ts +78 -7
  157. package/server-managed/rename-diff-worker.js +26 -0
  158. package/server-managed/rename-diff.ts +270 -0
  159. package/server-managed/report-sources.ts +13 -2
  160. package/server-managed/repository-browser.ts +19 -5
  161. package/server-managed/repository-risk.ts +413 -0
  162. package/server-managed/session.ts +16 -2
  163. package/server-managed/sql.ts +5 -2
  164. package/server-managed/storage-encryption.ts +5 -3
  165. package/server-managed/storage-payload.ts +4 -0
  166. package/server-managed/storage-stores.ts +2 -0
  167. package/server-managed/storage.ts +6 -3
  168. package/server-managed/team-app.ts +94 -0
  169. package/server-managed/team-feed.ts +1 -1
  170. package/server-managed/team-npm-scopes.ts +77 -0
  171. package/server-managed/type-only-worker.js +19 -0
  172. package/server-managed/type-only.ts +103 -0
  173. package/server-managed/uploads.ts +25 -4
  174. package/server-managed/upstream-cache.ts +147 -5
  175. package/server-managed/view-as.ts +58 -0
@@ -0,0 +1,223 @@
1
+ import{b as Sv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as uv,e as Al,f as pv,g as N,h as re,i as El}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Xt,D as fe,E as Cn,F as Hp,G as Up,H as Jo,I as a$,J as Je,K as Vp,L as l$,M as Zr,N as jp,O as _n,P as Gp,Q as Kp,R as qp,S as Yp,T as Xp,U as Jp,a as ql,b as r$,d as ft,e as Yo,f as tr,g as Yl,h as xi,i as Np,j as kt,k as Si,l as Bp,m as Dp,n as Pp,o as o$,p as s$,q as Yt,r as ve,s as Me,t as nr,u as Ci,v as i$,w as zp,x as Wp,y as Xo,z as Xl}from"./chunk-VIHGO77Y.js";import{m as Qv,o as e$,q as t$,w as n$,x as Lp,y as Op}from"./chunk-RFZQQXSG.js";import{a as Mw,b as ct,c as Te,e as lp,f as Iw,g as gl,h as Aw,i as Ew,j as dp,k as Fw,l as bl,m as yl,n as wl,o as vl,p as ke,q as qn,r as Cl,s as fi,t as Nw}from"./chunk-F4OMDNEY.js";import{$ as vv,A as xn,B as Qw,C as gp,D as Ot,E as ev,F as Xn,G as Tl,H as tv,I as gi,J as nv,K as hi,L as hp,M as Vo,N as ov,O as sv,P as iv,Q as Ml,R as av,S as Il,T as lv,U as cv,V as dv,X as hv,Y as bv,Z as yv,_ as wv,a as zw,aa as Fl,b as Pe,ba as yi,c as oe,ca as jo,d as Hw,da as Go,ea as Nt,f as Uw,fa as $v,ga as bp,h as Vw,ha as yp,i as jw,ia as Ll,ja as Ol,k as mi,ka as qr,l as Gw,la as wp,m as Ho,ma as kv,n as kn,na as xv,p as Kw,q as _l,r as qw,s as mp,t as Yw,u as Xw,v as Lt,w as Jw,x as Rl,y as we,z as Zw}from"./chunk-SD2WJAXN.js";import{a as Bw,b as Dw,c as Yn,d as fp,e as Pw,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as Cv,h as _v,i as vp,j as wi,k as Bl,l as Jn,m as Ko,n as $p,o as kp,q as Dl,r as xp,s as pt,t as Sp,w as Rv}from"./chunk-BYUEDJOM.js";import{a as qe,b as Wr,c as Hr,d as Kn,e as fl,f as ae,g as ml,h as tt}from"./chunk-W4J3MGLB.js";import{b as cp,c as ci,d as hl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as Hl,C as Ul,D as Qn,E as Ov,F as Jr,H as nt,I as Mp,J as Vl,K as Nv,L as er,M as Bv,N as Dv,O as ki,P as Pv,Q as zv,R as Wv,S as Hv,T as Uv,U as Vv,V as jv,X as Gv,Y as jl,Z as Gl,_ as Kv,a as q,aa as Bt,b as le,ba as qv,c as j,ca as Yv,d as Tv,fa as Sn,ga as Ip,h as Cp,ha as Ap,i as _p,ia as Ep,j as Rp,ja as Kl,k as Mv,ka as Fp,l as Iv,m as Av,ma as Xv,n as Pl,o as vi,oa as Jv,p as Tp,pa as Zv,q as Yr,s as zl,t as Ev,u as $i,v as Xr,w as Fv,x as Lv,y as Wl,z as qo}from"./chunk-OJ5DGP5E.js";import{a as Nl}from"./chunk-R5O6FAW4.js";import{a as fv,b as mv,d as bi,e as gv}from"./chunk-CMQA4DM6.js";import{b as pl,c as dt,d as Sl,e as jr,f as pp,g as pi}from"./chunk-ZPD5R5RP.js";import{a as he,e as Kr,g as rv,h as Uo}from"./chunk-YVZH5SHP.js";import{a as Gr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Ww}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as up,c as Vr,d as $l,e as Lw,g as kl,h as Wo,i as di,j as Ye,k as xl,l as ui,m as Ow,n as Xe}from"./chunk-HIV7SVI7.js";import{A as Sw,B as Do,C as Po,D as De,E as Ft,G as Cw,H as Gn,J as yn,K as _w,L as ap,M as Rw,N as Tw,O as $t,a as Dr,f as ww,h as Pr,i as _e,j as et,k as ai,l as Bo,m as de,n as vw,o as $w,p as Be,q as jn,r as cl,t as zr,u as li,v as qt,w as kw,x as dl,y as xw,z as ul}from"./chunk-GNXOKIGP.js";import{a as mw,b as ip,c as gw}from"./chunk-C4Z6ZBXV.js";import{a as D,b as sp,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as zo,b as wn,c as Ur}from"./chunk-TUII34K2.js";import{a as hw,c as Lo,d as Oo,e as No,j as il,k as bw,l as Vn,m as yw,p as Kt,q as al,r as ll}from"./chunk-V5O7M2YT.js";var tf=new WeakMap,p$=Symbol("iteration key");function IM(e){tf.set(e,new Map)}function AM(e,{target:t,key:n,type:r}){r==="iterate"&&(n=p$);let o=tf.get(t),s=o.get(n);s||(s=new Set,o.set(n,s)),s.has(e)||(s.add(e),e.cleaners.push(s))}function EM({target:e,key:t,type:n}){let r=tf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{Zp(o,r,i)}):Zp(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":p$;Zp(o,r,s)}return o}function Zp(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function f$(e){e.cleaners&&e.cleaners.forEach(FM,e),e.cleaners=[]}function FM(e){e.delete(this)}var Zo=[],Qp=!1;function LM(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Zo.indexOf(e)===-1){f$(e);try{return Zo.push(e),Reflect.apply(t,n,r)}finally{Zo.pop()}}}function Dt(e){let t=Zo[Zo.length-1];t&&(m$(t,e),AM(t,e))}function rr(e){EM(e).forEach(OM,e)}function OM(e){m$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function m$(e,t){if(e.debugger&&!Qp)try{Qp=!0,e.debugger(t)}finally{Qp=!1}}function g$(){return Zo.length>0}var c$=Symbol("is reaction");function h$(e,t={}){let n=e[c$]?e:function r(){return LM(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[c$]=!0,t.lazy||n(),n}function nf(e){e.unobserved||(e.unobserved=!0,f$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,Ql=new WeakMap,NM=Object.prototype.hasOwnProperty;function Zl(e){let t=Ql.get(e);return g$()&&typeof e=="object"&&e!==null?t||ec(e):t||e}function ef(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Zl(o[1]):o=Zl(o)),{done:r,value:o}},e}var d$={has(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"get"}),Zl(n.get.apply(t,arguments))},add(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||rr({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=He.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),s=r.get.call(n,e),i=r.set.apply(n,arguments);return o?t!==s&&rr({target:n,key:e,value:t,oldValue:s,type:"set"}):rr({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,s=n.delete.apply(t,arguments);return r&&rr({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=He.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return n&&rr({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=He.get(this),r=Reflect.getPrototypeOf(this);Dt({target:n,type:"iterate"});let o=(s,...i)=>e(Zl(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return ef(n,!1)},entries(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return ef(n,!0)},[Symbol.iterator](){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return ef(n,e instanceof Map)},get size(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Jl={get(e,t,n){return e=NM.call(d$,t)?d$:e,Reflect.get(e,t,n)}},u$=typeof window=="object"?window:Function("return this")(),b$=new Map([[Map,Jl],[Set,Jl],[WeakMap,Jl],[WeakSet,Jl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function BM({constructor:e}){return!(typeof e=="function"&&e.name in u$&&u$[e.name]===e)||b$.has(e)}function DM(e){return b$.get(e.constructor)}var y$=Object.prototype.hasOwnProperty,PM=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function zM(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&PM.has(t))return r;Dt({target:e,key:t,receiver:n,type:"get"});let o=Ql.get(r);if(g$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return ec(r)}return o||r}function WM(e,t){let n=Reflect.has(e,t);return Dt({target:e,key:t,type:"has"}),n}function HM(e){return Dt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function UM(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=y$.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==He.get(r)||(o?n!==s&&rr({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):rr({target:e,key:t,value:n,receiver:r,type:"add"})),i}function VM(e,t){let n=y$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var jM={get:zM,has:WM,ownKeys:HM,set:UM,deleteProperty:VM};function ec(e={}){return He.has(e)||!BM(e)?e:Ql.get(e)||GM(e)}function GM(e){let t=DM(e)||jM,n=new Proxy(e,t);return Ql.set(e,n),He.set(n,e),IM(e),n}var rt=ec;function Rn(e){let t=!0,n=h$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw nf(n),r}return()=>nf(n)}var v$="deepview.viewMode",$$="deepview.severityMode",Ri="deepview.repoUrls",k$="deepview.focusSplit",x$="deepview.kanbanDetailFullscreen",S$="deepview.bundleSourceWrap",KM=new Set(["corrected","original"]),of=50,tc=20,nc=80;try{localStorage.removeItem(v$)}catch{}function qM(){try{let e=localStorage.getItem($$);return e!==null&&KM.has(e)?e:null}catch{return null}}function YM(){try{let e=localStorage.getItem(x$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function XM(){try{let e=localStorage.getItem(S$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function C$(e){if(!Number.isFinite(e))return of;let t=Math.round(e*10)/10;return Math.min(Math.max(t,tc),nc)}function JM(){try{let e=localStorage.getItem(k$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?C$(t):null}catch{return null}}function rc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function oc(){return rc(ve(Ri))}function Ze(e){return e?oc()[e]??"":""}var rf=new Set;function _$(e){return rf.add(e),()=>{rf.delete(e)}}function R$(e){for(let t of rf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function Qr(e,t){if(_()||!e)return;let n=oc();t?n[e]=t:delete n[e],Me(Ri,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Xo(Ri,r=>{let o=rc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),R$(e)}async function T$(e,t){await Xo(Ri,n=>{let r=rc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),lf()}async function sc(e){if(!e||typeof e!="object")return[];let t=[];if(await Xo(Ri,n=>{let r=rc(n);t=[];for(let[o,s]of Object.entries(e))!o||typeof s!="string"||!s||r[o]||(r[o]=s,t.push(o));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;lf();for(let n of t)R$(n);return t}async function sf(e,t){return!e||!t?!1:(await sc({[e]:t})).length>0}var _i=pt(),w$=Ko(_i?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,c=rt({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,workspaceContentFileCount:0,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleSourceTargetLine:null,bundleSourceWrap:XM()??!0,bundleSourcePretty:!1,bundleCodeFileRequest:null,npmLookup:{input:"",pending:!1,error:null},bundleCompare:null,bundleOverviewFilesSort:"name",bundleOverviewPackagesSort:"size",bundleCodeHistory:null,bundleCodeSearchMode:"files",bundleCodeSearchQuery:"",bundleSearchQuery:"",bundleSearchRegex:!1,bundleSearchCase:!1,bundleSearchContext:!0,filterSeverities:new Set,filterColors:new Set,filterSources:new Set,filterAnalyzer:"",filterModel:"",filterRepo:"",filterRevalidate:"",filterPartial:"",showRevalidation:!0,revalidationDetailed:!1,upstreamOnly:!1,revalidateConflicts:new Map,codePreviews:new Set,filterConfMin:0,filterConfMax:10,filterInclude:"",filterIncludeNegate:!1,filterComment:"",filterFix:"",filterFlagged:"",filterDuplicates:"",filterCrossContext:"",filterAppStacked:"",filterSecurity:"",repoUrl:"",repoEditing:!1,sortBy:"severity",viewMode:"kanban",severityMode:qM()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:YM()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:JM()??of,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:$p(_i?.mode??"e2e",w$),serverModeConfig:_i?.mode??null,serverModeSelection:w$,deepviewScanServer:null,githubNewIssueLabels:_i?.githubNewIssueLabels??"",localMode:!1,managed:_i?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function _(){return c.serverMode==="managed"&&!c.localMode}function Tn(e){c.localMode=!!e}function ic(e,t=globalThis.location?.pathname??""){let n=Ko(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=$p(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Tn(!1)}function af(){return Jn(c.serverModeConfig)?(c.serverModeSelection=c.serverMode==="managed"?"e2e":"managed",c.serverMode=c.serverModeSelection,Tn(!1),!0):c.serverMode!=="managed"?!1:(Tn(!c.localMode),!0)}function Jt(){return c.serverMode==="standalone"&&c.localMode?"local":c.serverMode!=="managed"?c.serverMode:c.localMode?"local":"managed"}function lf(){_()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Yt(()=>{lf()});var Qo=null;function M$(){Qo=null}function Ti(){return _()&&Qo?.teamId===c.currentManagedTeam&&Qo?.userId===c.managedSession?.id&&Qo?.role===c.managedSession?.role?Qo:null}function I$(e,t){let n=new Map,r=new Map,o=[],s=[];fi(t.links??[],r);for(let i of t){let a=i.data;if(a.source==="links"&&Array.isArray(a.links)){o.push({id:i.id,name:i.filename,groups:a.links,skipped:0}),fi(a.links,r);continue}let l=yn(a)??[],p=pl([{groups:[l.flat().filter(d=>d&&typeof d=="object")],tree:a.tree}]);for(let[d,f]of l.entries()){let m=(Array.isArray(f)?f:[f]).filter(b=>b&&typeof b=="object").map(b=>{let y={...b,_managedReportId:i.id,_reportName:i.filename,_repoFallback:i.repo.github,_repoDirectory:i.repo.directory,_source:b.source??a.source??null,_bundleHashes:a.bundleHashes??[],_depsDirectory:p};return Po(y,a),y._analyzer=y._source??y.type??null,"isApp"in y||(y.isApp=jn(y,y._source)),y}),h={report:i.filename,managedReportId:i.id,index:d,members:m};s.push(h);for(let b of m)n.has(b.id)||n.set(b.id,[]),n.get(b.id).push(h)}}Qo={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:o,rows:s,byId:n,duplicates:r},c.linksTick++,c.findingIndexTick++}function ac(e){let t=Ti();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function A$(e){for(let t of ac([e])){let n=qt(t.members.find(r=>r.id===e));if(n)return n}return""}var ZM="solidity-bundle",QM="0.0.0";function or(e){if(e?.name!==ZM)return!1;let t=e.version;return!t||t===QM}function F$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!or(t))return n;let r=e?.file;if(!r)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!o)return null;let s=o[1],i=s.indexOf("_");i>0&&(s=s.slice(0,i));let a=s.lastIndexOf("@");return a<=0?null:s.slice(a+1)||null}function lc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function cc(e,t,n,r){e.reports.add(n);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(n);return o.add(n),e.keys.has(t)||(e.keys.add(t),e.findings.push(r),e.files.has(r.file)||e.files.set(r.file,[]),e.files.get(r.file).push(r)),s}function dc(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>r(a)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(n);if(!s)return;let i=s.findIndex(a=>r(a)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(n)}function uc(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function L$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=lc(),e.byVersion.set(t,s)),cc(s,r,o,n)}function O$(e,t,n,r,o,s){let i=e.byVersion.get(t);if(!i)return;let a=i._keyReports.get(n);if(a&&(a.delete(o),a.size===0&&dc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}uc(i)}function cf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=E$(e,"-"),[o,s=""]=E$(t,"-"),i=n.split("."),a=o.split("."),l=Math.max(i.length,a.length);for(let p=0;p<l;p++){let d=i[p]??"0",f=a[p]??"0",m=/^\d+$/u.test(d),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(d);if(b!==0)return b}else{let b=f.localeCompare(d);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function E$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var eo=new Map,es=new Map,ts=new Map,to=new Map,pc=new Map;function eI(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;if(!e?.file)return null;let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e.file))!==null;)if(r[1]!==".pnpm")return r[1];return null}function tI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function nI(e,t){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:typeof t=="string"&&t?t:null}var Ii=new Set,df=new Set,Mi=null,uf=!1;function rI(e){return df.add(e),()=>df.delete(e)}function pf(){for(let e of df)try{e()}catch{}}function ff(e){return eo.get(e)?.list??[]}function mf(){let e=0;for(let t of eo.values())e+=t.list.length;return e}function Zt(){return es}function no(){return ts}function Ai(e,t){let n=eo.get(e);if(!n)return[];let r=n.reports.get(sr(t));return r?[...r]:[]}function gf(e,t){let n=es.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function hf(e,t){let n=ts.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function ro(e){return _()?[...new Set(ac([e]).map(t=>t.report))]:[...to.get(e)?.reports.keys()??[]]}function bf(e){if(_())return A$(e);for(let{title:t}of to.get(e)?.reports.values()??[])if(t)return t;return""}function Qt(e){if(_())return ac(e);let t=new Set;for(let n of e)for(let r of to.get(n)?.reports.values()??[])for(let o of r.rows)t.add(o);return[...t]}function sr(e){let t=e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`;return JSON.stringify([t,ct(e)])}function fc(e,t,n){let r=pc.get(e);r||(r={hash:[],pkg:[],repo:[],id:[]},pc.set(e,r)),r[t].push(n)}function oI(e,t,n){let r=to.get(e.id);r||to.set(e.id,r={reports:new Map});let o=r.reports.get(t);return o?(o.rows.add(n),!1):(r.reports.set(t,{title:qt(e),rows:new Set([n])}),fc(t,"id",e.id),!0)}function sI(e,t,n){let r=eo.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},eo.set(e.fileHash,r));let o=r.reports.get(t);o||(o=new Set,r.reports.set(t,o));let s=!o.has(n);return o.add(n),s&&fc(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function iI(e,t,n){let r=eI(e);if(!r)return!1;let o=F$(e),s=es.get(r);if(s||(s={...lc(),repos:new Set,byVersion:new Map,_repoReports:new Map},es.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}L$(s,o,e,t,n);let i=cc(s,t,n,e);return fc(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function aI(e,t,n,r){if(tI(e))return!1;let o=nI(e,r);if(!o)return!1;let s=ts.get(o);s||(s=lc(),ts.set(o,s));let i=cc(s,t,n,e);return i&&fc(n,"repo",{repo:o,key:t,file:e.file}),i}function yf(e){let t=pc.get(e);if(pc.delete(e),Ii.delete(e),!t)return!1;let n=!1;for(let{hash:o,key:s}of t.hash){let i=eo.get(o);if(!i)continue;let a=i.reports.get(s);if(a){if(a.delete(e)&&(n=!0),a.size===0){i.reports.delete(s),i.keys.delete(s);let l=i.list.findIndex(p=>sr(p)===s);l>=0&&i.list.splice(l,1)}i.keys.size===0&&eo.delete(o)}}let r=new Set;for(let{pkg:o,key:s,file:i,version:a}of t.pkg){let l=es.get(o);if(!l)continue;let p=l._keyReports.get(s);if(p){if(p.delete(e)&&(n=!0),p.size===0&&dc(l,s,i,sr),O$(l,a,s,i,e,sr),!r.has(o)){r.add(o);for(let d of[...l._repoReports.keys()]){let f=l._repoReports.get(d);f?.delete(e)&&f.size===0&&(l._repoReports.delete(d),l.repos.delete(d),n=!0)}}l._keyReports.size===0?es.delete(o):uc(l)}}for(let{repo:o,key:s,file:i}of t.repo){let a=ts.get(o);if(!a)continue;let l=a._keyReports.get(s);l&&(l.delete(e)&&(n=!0),l.size===0&&dc(a,s,i,sr),a._keyReports.size===0?ts.delete(o):uc(a))}for(let o of t.id){let s=to.get(o);s&&(s.reports.delete(e)&&(n=!0),s.reports.size===0&&to.delete(o))}return n}async function lI(e){if(Ii.has(e))return!1;Ii.add(e);try{let t=await fe(e),n=await $t(t);if(!n)return!1;let{data:r,findings:o}=n;if(o.length===0)return!1;Mw(o,r),Gn(yn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=De(r)??"";if(!s)try{s=Ze(e)}catch{}let i=!1;for(let a of o){let l=sr(a);a.fileHash&&sI(a,l,e)&&(i=!0),a.file&&iI(a,l,e)&&(i=!0),a.file&&aI(a,l,e,s)&&(i=!0)}for(let[a,l]of yn(r).entries()){let p=(Array.isArray(l)?l:[l]).filter(f=>f?.id);if(p.length===0)continue;let d={report:e,index:a,members:p.map(f=>{let m=f.source??r.source??null;return{id:f.id,title:qt(f),source:m,revalidate:Be(f),isApp:f.isApp??jn(f,m),isSecurity:f.isSecurity,...f.file?{file:f.file,_depsDirectory:f._depsDirectory}:{}}})};for(let f of p)oI(f,e,d)&&(i=!0)}return Ii.has(e)?i:(yf(e),uf=!0,!1)}catch{return Ii.delete(e),!1}}function xt(){return _()?Promise.resolve():Mi||(Mi=(async()=>{try{do{uf=!1;let e=await ce();for(let t of e)await lI(t)&&pf()}while(uf)}finally{Mi=null}})(),Mi)}mt(e=>{yf(e)&&pf()});_$(e=>{yf(e)&&pf(),xt().catch(()=>{})});var Ei=new Map,ns=new Map,mc=new Map,wf=new Set;function cI(e){return wf.add(e),()=>wf.delete(e)}function N$(){for(let e of wf)try{e()}catch{}}function Fi(e,t){if(!e||!t)return!1;let n=!ns.has(e);ns.set(e,t),mc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ei.get(o);s||(s=new Map,Ei.set(o,s)),s.set(e,r)}return n&&N$(),n}function vf(e){let t=ns.get(e);if(ns.delete(e),mc.delete(e),!!t){for(let n of t.values()){let r=Ei.get(n);r&&(r.delete(e),r.size===0&&Ei.delete(n))}N$()}}function $f(e,t){let n=ns.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=dI(e,n).get(B$(t));if(!r)return null;let o=t.startsWith("/")?t:`/${t}`,s=null;for(let i of r)if(i.endsWith(o)){if(s!==null)return null;s=i}return s}function B$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function dI(e,t){let n=mc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=B$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return mc.set(e,n),n}function oo(e){if(!e)return[];let t=Ei.get(e);if(!t)return[];let n=[];for(let[r,o]of t)n.push({integrity:r,file:o});return n}function kf(e){return ns.has(e)}var D$="deepview.fileCounts",xf=4,uI=new Set([3,xf]),Oi=null;function hc(){if(Oi)return Oi;let e;try{e=JSON.parse(ve(D$)||"{}")}catch{e={}}return uI.has(e?.__v)?e.__v=xf:e={__v:xf},Oi=e,Oi}function Sf(){Me(D$,JSON.stringify(Oi)).catch(e=>console.warn("counts persist:",e))}function P$(e){if(e==="__v")return;let t=hc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Ni(e){return P$(e)?.count}function Ie(e){return P$(e)?.source}function Ue(e,t,n){let r=hc();r[e]={count:t,source:n??null},Sf()}function os(e){let t=hc();delete t[e],Sf()}function Ve(e){let t=qn(e);return t?{count:Cl(t.groups),source:ke,recognized:!0}:Rw(e)}var Li=null,rs=null,gc=null;function pI(e,t){for(let{names:n,onUpdate:r}of gc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Cf(e,t){if(Li){t&&gc.push({names:new Set(e),onUpdate:t});for(let n of e)rs.add(n);return Li}return rs=new Set(e),gc=t?[{names:new Set(e),onUpdate:t}]:[],Li=(async()=>{await Promise.resolve();try{let n=hc();for(;rs.size>0;){let r=rs.values().next().value;if(rs.delete(r),n[r]===void 0)try{let o=await fe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=Ve(o);n[r]=i?{count:s,source:i}:{count:s},Sf(),pI(r,s)}catch{}}}finally{Li=null,rs=null,gc=null}})(),Li}var fI=`deepview/workspace-id/v1
2
+ `;async function Bi(e){let t=Uint8Array.fromBase64(e),n=zo(fI),r=new Uint8Array(n.length+t.length);r.set(n,0),r.set(t,n.length);let o=new Uint8Array(await crypto.subtle.digest("SHA-256",r)),i=Array.from(o.subarray(0,16),p=>p.toString(16).padStart(2,"0")).join("").split("");i[12]="8";let a=parseInt(i[16],16)&3|8;i[16]=a.toString(16);let l=i.join("");return`${l.slice(0,8)}-${l.slice(8,12)}-${l.slice(12,16)}-${l.slice(16,20)}-${l.slice(20,32)}`}function Di(e){let t=new Set;function n(o){return t.add(o),()=>t.delete(o)}function r(o){for(let s of t)try{s(o)}catch(i){console.warn(`workspace ${e} listener failed:`,i)}}return{on:n,fire:r}}var z$=Di("create"),W$=Di("delete"),H$=Di("privateKey"),U$=Di("report-membership"),V$=Di("bundle-membership"),mI=z$.on,Pi=W$.on,_f=H$.on,zi=U$.on,Rf=V$.on,bc=z$.fire,Tf=W$.fire,Mf=H$.fire,yc=U$.fire,wc=V$.fire;var Af="deepview.workspaces",gI=1;function Wi(){try{let e=ve(Af);if(!e)return[];let t=JSON.parse(e);return t&&typeof t=="object"&&Array.isArray(t.workspaces)?t.workspaces:Array.isArray(t)?t:[]}catch{return[]}}async function hI(e){await Me(Af,JSON.stringify({version:gI,workspaces:e}))}var bI=Af;function is(e){return navigator.locks.request(bI,async()=>{await Ci();let t=Wi(),n=await e(t);if(n!==!1)return await hI(t),n})}function Hi(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var Pt=Wi().map(Hi);function Ef(){Pt=Wi().map(Hi)}function Ff(e){Pt=Pt.filter(t=>t.id!==e.id),Pt.push(Hi(e))}function yI(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=Pt.find(o=>o.id===e.id);if(r){r[t]=n;return}Pt.push(Hi(e))}function wI(e){Pt=Pt.filter(t=>t.id!==e)}function Y(){let e=Wi();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var vI=200;function ss(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,vI)||null}async function Lf(e){let t=ss(e);if(!t)return null;let n=new Uint8Array(32);crypto.getRandomValues(n);let r=n.toBase64(),o={id:await Bi(r),name:t,privateKey:r,reports:[],bundles:[],createdAt:Date.now()};return await is(i=>i.some(a=>a.id===o.id)?!1:(i.push(o),o))?(Ff(o),o):null}async function Of(e){await is(n=>{let r=n.findIndex(o=>o.id===e);return r<0?!1:(n.splice(r,1),!0)})&&(Tf(e),wI(e))}async function Nf(e,t){let n=ss(t);return!(!n||!await is(o=>{let s=o.find(i=>i.id===e);return!s||s.name===n?!1:(s.name=n,s)}))}async function j$(e){let t=await is(o=>{let s=o.findIndex(d=>d.id===e.id),i=s>=0?o[s]:null,a=ss(e.name)??i?.name??"Workspace",l=e.preserveBundles?Array.isArray(i?.bundles)?i.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],p={id:e.id,name:a,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(l)],createdAt:e.createdAt??Date.now()};return s>=0?o[s]=p:o.push(p),{previous:i,next:p}}),{next:n}=t,r=Pt.find(o=>o.id===n.id)??null;return r==null?bc(n.id):(r.privateKey!==n.privateKey&&Mf(n.id),vc(r.reports,n.reports)||yc(n.id),vc(r.bundles,n.bundles)||wc(n.id)),Ff(n),n}async function $I({id:e,name:t,privateKey:n,createdAt:r}){let o=null;return await is(s=>{let i=ss(t);if(!i)return o={status:"name-collision",existing:null},!1;let a=s.find(d=>d.id===e)??null;if(a)return o={status:"already-attached",workspace:a},!1;let l=s.find(d=>ss(d.name)===i)??null;if(l)return o={status:"name-collision",existing:l},!1;let p={id:e,name:i,privateKey:n,reports:[],bundles:[],createdAt:r??Date.now()};s.push(p),o={status:"attached",workspace:p}}),o?.status==="attached"&&(bc(o.workspace.id),Ff(o.workspace)),o}function vc(e,t){let n=new Set(e),r=new Set(t);if(n.size!==r.size)return!1;for(let o of n)if(!r.has(o))return!1;return!0}async function If({identifier:e,workspaceId:t,field:n,fire:r,additive:o=!1,from:s=void 0}){let i=await is(p=>{if((p.find(b=>Array.isArray(b[n])&&b[n].includes(e))?.id??null)===(t??null))return!1;let f=null;if(t!=null&&(f=p.find(b=>b.id===t)??null,!f))return!1;let m=new Set;if(!o)for(let b of p)s!==void 0&&b.id!==s||(Array.isArray(b[n])||(b[n]=[]),b[n].includes(e)&&(b[n]=b[n].filter(y=>y!==e),m.add(b.id)));if(f&&(Array.isArray(f[n])||(f[n]=[]),f[n].includes(e)||(f[n].push(e),m.add(f.id))),m.size===0)return!1;let h=new Map;for(let b of m){let y=p.find(w=>w.id===b);y&&h.set(b,y)}return{affected:m,snapshot:h}});if(!i)return;let{affected:a,snapshot:l}=i;for(let p of a){r(p);let d=l.get(p);d&&yI(d,n)}}function G$(e,t){return{move:(n,r)=>If({identifier:n,workspaceId:r,field:e,fire:t}),add:(n,r)=>If({identifier:n,workspaceId:r,field:e,fire:t,additive:!0}),remove:(n,r)=>If({identifier:n,field:e,fire:t,from:r})}}var Bf=G$("reports",yc),Df=G$("bundles",wc),Ui=Bf.move,so=Bf.add,Vi=Bf.remove,Pf=Df.move,io=Df.add,zf=Df.remove;function kI(){let e=Wi().map(Hi),t=Pt,n=new Map(t.map(o=>[o.id,o])),r=new Map(e.map(o=>[o.id,o]));for(let o of n.keys())r.has(o)||Tf(o);for(let[o,s]of r){let i=n.get(o);if(!i){bc(o);continue}i.privateKey!==s.privateKey&&Mf(o),vc(i.reports,s.reports)||yc(o),vc(i.bundles,s.bundles)||wc(o)}Pt=e}Yt(()=>{kI()});async function xI(e){if(!e)return null;let t=Y(),r=(await Promise.all(t.map(o=>dt("workspace",o.id)))).indexOf(e);return r===-1?null:t[r]}async function SI(e){if(!e)return null;let t=await ce(),r=(await Promise.all(t.map(o=>dt("report",o)))).indexOf(e);return r===-1?null:t[r]}async function CI(e,t){let n;try{n=await fe(e)}catch{return!1}return n==null?!1:(await $t(n))?.findings.some(o=>o.id===t)??!1}async function _I(e,{skip:t=[]}={}){if(!e)return null;let n=new Set(t),r=(await ce()).filter(o=>!n.has(o));for(let o of r)if(await CI(o,e))return o;return null}function ji(e){return e?Y().filter(t=>t.reports.includes(e)):[]}function Wf(e){if(!e)return"";for(let t of e.split(`
3
+ `))if(t.trim())return t.trim();return""}function RI(e){let t=new Set(e.map(r=>r.id)),n=new Map;for(let r of c.reports)for(let o of r.groups)for(let s of o){let i=s.id??String(s._id);if(!(!t.has(i)||n.has(i))&&(n.set(i,{severity:s.severity,file:s.file,line:s.line,description:Wf(s.description)}),n.size===t.size))return n}return n}var ir=new Map,Vf=new Map,$c=new Map,Hf=new Set,Gi=null,Ki=null,Uf=0,qi=!1,zt=!1;function jf(){return _()||zt}function Yi(e){return Hf.add(e),()=>Hf.delete(e)}function as(){for(let e of Hf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Gf(){let e=new Map;for(let t of ir.values())t&&fi(t.groups,e);Vf=e}function Kf(){if(_())return Ti()?.links??[];let e=[];for(let[t,n]of ir)n&&e.push({name:t,groups:n.groups,skipped:n.skipped});return e.toSorted((t,n)=>t.name.localeCompare(n.name))}function qf(){return _()?!!Ti()?.duplicates.size:Vf.size>0}function gt(e){if(_())return[...Ti()?.duplicates.get(e)??[]];let t=Vf.get(e);return t?[...t]:[]}async function K$(e){if(ir.has(e))return!1;let t=$c.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if(($c.get(e)??0)!==t)return qi=!0,!1;let r=/^\s*\[/u.test(n)?qn(n):null;if(ir.set(e,r),r&&Ie(e)!==ke)Ue(e,Cl(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function q$(){return _()?Promise.resolve():Ki||(Ki=(async()=>{try{let e,t;do{t=Uf,e=await ce(),zt&&e.some(o=>!ir.has(o))&&(zt=!1,as());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>K$(o)))).some(Boolean)&&(Gf(),as())}while(t!==Uf);return e}catch(e){throw zt&&(zt=!1,as()),e}finally{Ki=null}})(),Ki)}function Xi(){return _()?Promise.resolve():Gi||(Gi=(async()=>{try{do{qi=!1;let e=await q$(),t=!1;for(let o of e)await K$(o)&&(t=!0);let n=!qi&&e.every(o=>ir.has(o)),r=zt!==n;zt=n,t&&Gf(),(t||r)&&as()}while(qi)}catch(e){throw zt&&(zt=!1,as()),e}finally{Gi=null}})(),Gi)}mt(e=>{let t=zt;zt=!1,Uf++,$c.set(e,($c.get(e)??0)+1),qi=!0;let n=ir.get(e)!=null;ir.delete(e),n&&Gf(),(n||t)&&as()});var Yf=()=>{};function Xf(e){Yf=typeof e=="function"?e:()=>{}}var X$=()=>{};function Jf(e){X$=typeof e=="function"?e:()=>{}}var J$=()=>{};function TI(e){J$=typeof e=="function"?e:()=>{}}var ar="deepview.triage",Mn="deepview.triage.pending",en=/^\d+$/u;async function MI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function II(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var AI="deepview.triage.save",Y$=0;function kc(){return!_()&&lp(c.triage,c.reports)}function Zf(){kc();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=fl(n);r&&(e[t]=r)}return e}function xe(){if(_())return X$(),Promise.resolve();let e=++Y$,t=Zf(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(Mn,r)}catch{}return navigator.locks.request(r$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=zo(r),a=await MI(i);s=xi(),o=(s?await o$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),Yf();return}await navigator.locks.request(AI,()=>{try{if(e!==Y$)return;if(r!=null&&xi()!==s){queueMicrotask(()=>{xe()});return}if(n)localStorage.removeItem(ar),localStorage.removeItem(Mn);else{localStorage.setItem(ar,o);try{localStorage.removeItem(Mn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),Yf()})}async function xc(){let e=localStorage.getItem(Mn);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(ar);if(!t)return null;let n=Uint8Array.fromBase64(t);if(ql(n)){if(!xi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await s$(n)}let r=await II(n);return JSON.parse(Ur(r))}function Z$(e,{replace:t=!1}={}){let n=c.triage;if(t){let r=null,o=localStorage.getItem(Mn);if(o)try{r=JSON.parse(o)}catch{}let s=i=>r!=null&&i in r;for(let i of[...n.keys()]){if(en.test(i))continue;let a=e?.[i],l=!e||!(i in e);!(s(i)&&r[i]?.color)&&(l||!a?.color)&&ae(n,i,{color:void 0}),!(s(i)&&(r[i]?.triage||r[i]?.deleted))&&!qe(a)&&ae(n,i,{triage:void 0}),!(s(i)&&r[i]?.comment)&&(l||typeof a?.comment!="string"||!a.comment)&&ae(n,i,{comment:void 0}),!(s(i)&&r[i]?.fix)&&(l||typeof a?.fix!="string"||!a.fix)&&ae(n,i,{fix:void 0}),!(s(i)&&r[i]?.flagged!==void 0)&&(l||a?.flagged===void 0)&&ae(n,i,{flagged:void 0})}for(let i of[...n.keys()]){if(en.test(i))continue;let a=n.get(i)?.ignoredReports;if(!a||a.length===0)continue;let l=e?.[i],p=!Wr(l);for(let d of[...a]){if(s(i)&&Array.isArray(r[i]?.ignoredReports)&&r[i].ignoredReports.includes(d))continue;if(p){tt(n,i,d,!1);continue}let f=l?.ignoredReports;(!Array.isArray(f)||!f.includes(d))&&tt(n,i,d,!1)}}}if(e)for(let[r,o]of Object.entries(e)){let s=qe(o),i={};if(o&&o.color&&(i.color=o.color),s&&(i.triage=s),o&&typeof o.comment=="string"&&o.comment&&(i.comment=o.comment),o&&typeof o.fix=="string"&&o.fix&&(i.fix=o.fix),o&&typeof o.flagged=="boolean"&&(i.flagged=o.flagged),Object.keys(i).length>0&&ae(n,r,i),Wr(o)&&o&&Array.isArray(o.ignoredReports))for(let a of o.ignoredReports)typeof a=="string"&&tt(n,r,a,!0,Kn(o,a))}}async function ls(){if(_())return!1;if(![...c.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await Iw(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!_())return lp(c.triage,n)}async function EI(){if(!_())try{let e=await xc();if(_())return;Z$(e),await ls()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function Ji(){if(!_())try{let e=await xc();if(_())return;Z$(e,{replace:!0}),await ls()&&await xe(),J$()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==ar&&e.key!==Mn||Ji()});var FI;function ao(){return _()?Promise.resolve():FI??=EI()}kt(()=>{Ji()});kt(()=>{_()||xi()&&localStorage.getItem(Mn)&&xe()});async function Qf({seal:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}async function em({open:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(!ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}function Sc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function Q$(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var ek="deepview.lastFile",Zi=null;function tm(){return Zi||(Zi=LI(),Zi.catch(()=>{Zi=null})),Zi}async function LI(){try{await ao()}catch{}let e=await ce(),t=new Set(e),n=new Set(e),r=new Set;for(let o of e){if(!o.toLowerCase().endsWith(".deepseek"))continue;let s=o.slice(0,-9)+".md";if(t.has(s))continue;let i;try{i=await fe(o),await Xt(s,i),await Jo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=Ni(o);if(os(o),a===void 0){let{count:f,source:m}=Ve(i);Ue(s,f,m)}else{let{source:f}=Ve(i);Ue(s,a,f)}let l=Ze(o);l&&(Qr(o,""),Qr(s,l));let p=!1;for(let[f,m]of[...c.triage])m.ignoredReports?.includes(o)&&(tt(c.triage,f,o,!1),tt(c.triage,f,s,!0,Kn(m,o)),p=!0);p&&await xe();let d=Q$(ve(ek));if(d?.name===o)try{await Me(ek,Sc(s,d.workspaceId))}catch{}}for(let o of Y())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!r.has(s)&&n.has(s))continue;let i=s.slice(0,-9)+".md";await Vi(s,o.id),await so(i,o.id)}}function nm(){return{...tk,hydrateKey:i$,localContentSyncStatus:Rv,readTriageBlob:async()=>(await gl(await xc(),e=>Xl("report",e,()=>Hp(e)))).entries,reportSyncHash:e=>Xl("report",e,async()=>Cv(await Cn(e)))}}var tk={hasStoredBundleBytes:l$,listBundles:Je,listFiles:ce,onBundleMutated:a$,onFileMutated:mt,readBundle:_n,readFile:Hp,withStoredItem:Xl,isEncryptionEnabled:ft,isUnlocked:Yo,onVaultStateChange:kt,unlockEncryption:Si};function rm(e=tk){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,l=!1,p=e.onVaultStateChange(()=>{a=!0}),d=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:d(m=>{m===i&&(l=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(l)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){p(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(s=>({value:s,label:s})):(await e.listBundles()).map(s=>({value:s.integrity,label:s.name,secondary:s.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let s=n();try{s.check();let i=await r(o);return s.check(),i}finally{s.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let s=e.onVaultStateChange(()=>o()),i=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let l=n(a,o,s);try{l.check();let{result:p}=await e.withStoredItem(o,s,async()=>{l.check();let d=(await r(o)).find(h=>h.value===s);if(l.check(),!d)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(s):await e.readBundle(s);l.check();let m=new File([f],d.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{l.unsubscribe()}});return p}finally{l.unsubscribe()}}}}function nk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function cs(){if(!nk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function om(){let e={supported:nk(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var Cc="deepview.scan.access",sm=new Set;function rk(){for(let e of sm)e()}function ds(){return ve(Cc)!=null}function im(e){try{let t=JSON.parse(ve(Cc)),n=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(n)||typeof t.token!="string"?null:{...t,provider:n}}catch{return null}}async function am({server:e,deepview:t,provider:n,token:r}){await Me(Cc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),rk()}async function lm(){await nr(Cc),rk()}function cm(e){sm.add(e);let t=Yt(e);return()=>{sm.delete(e),t()}}var dm=1;function OI(){let e=Zf(),t=oc();return{version:dm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function NI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function BI(){let e=OI();return{blob:new Blob([await ci(JSON.stringify(e))]),filename:NI()}}async function DI(e){let t;try{t=await hl(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==dm)throw new Error(`Unsupported backup version: ${n.version} (expected ${dm})`);if(!n.triage||typeof n.triage!="object")throw new Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return n}async function PI(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=c.triage;if(t==="replace")for(let a of[...r.keys()])en.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(en.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ae(r,a,{color:l.color});let p=qe(l);if(p&&(!o||!qe(r.get(a)))&&ae(r,a,{triage:p}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ae(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ae(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ae(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wr(r.get(a)))for(let d of l.ignoredReports)typeof d=="string"&&tt(r,a,d,!0,Kn(l,d))}await ls(),await xe();let s=0,i=null;try{await T$(e.repoUrls,t),s=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),i=a}return{triageEntries:Object.keys(n).length,repoUrls:s,repoUrlError:i}}function zI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function um(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(zI(s))continue;throw new Error(`Failed to read ${n}: ${s.message}`,{cause:s})}if(r==null)continue;let o=await $t(r);if(o)for(let s of o.findings)s.id&&t.add(s.id)}return t}function WI(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function _c(e){let t=WI();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await um(e),r=new Set;for(let d of t)n.has(d)&&r.add(d);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await ce(),s=new Set(e),i=o.filter(d=>!s.has(d)),a=await um(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Rc(){let e=new Set(c.triage.keys()),t=[];for(let[i,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:i,report:l});let n=await ce(),r=new Set(n),o=await um(n),s=!1;for(let i of e){if(en.test(i)||o.has(i))continue;let a=c.triage.get(i);!a||!(a.color||qe(a)||a.comment||a.fix||a.flagged!==void 0)||ae(c.triage,i,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(s=!0)}for(let{id:i,report:a}of t)en.test(i)||o.has(i)&&r.has(a)||Hr(c.triage,i,a)&&tt(c.triage,i,a,!1)&&(s=!0);s&&await xe()}var HI=1;async function UI(e){let t=new Set,n=await $t(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function pm(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function VI(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Je(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let s=n.get(o);if(!s)continue;let i;try{i=await _n(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:s,data:i.toBase64()})}return r}function jI(e){let t=Ze(e);return t?{github:t}:null}async function ok(e){let t=[];for(let n of e.reports??[]){let r;try{r=await fe(n)}catch(s){console.warn(`Workspace export: skipping ${n}: ${s?.message??s}`),(s instanceof DOMException&&s.name==="NotFoundError"||typeof s?.message=="string"&&s.message.startsWith("File not found:"))&&await Ui(n,null);continue}let o=jI(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function GI(e,{includeBundleBytes:t=!1}={}){let n=await ok(e),r=new Set;for(let p of n)for(let d of await UI(p.content))r.add(d);let o=new Set(e.reports??[]),s={};for(let[p,d]of c.triage){if(!r.has(p))continue;let f=(d.ignoredReports??[]).filter(h=>o.has(h)),m=fl({...d,ignoredReports:f});m&&(s[p]=m)}let i={};for(let p of n)p.repo?.github&&(i[p.name]=p.repo.github);let a=(e.bundles??[]).filter(p=>typeof p=="string"&&p.length>0),l={version:HI,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:i,triage:s};if(t){let p=await VI(a);p.length>0&&(l.bundleBlobs=p)}return l}async function sk(e,{includeBundleBytes:t=!1}={}){let n=await GI(e,{includeBundleBytes:t});return{blob:new Blob([await ci(JSON.stringify(n))]),filename:`${pm(e.name)}.deepview-workspace.json.gz`}}async function KI(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await sk(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await Fw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${pm(e.name)}.deepview-workspace.enc`}}async function fm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await KI(e,t,{includeBundleBytes:n}):await sk(e,{includeBundleBytes:n})}async function qI(e){return{reports:await ok(e)}}async function mm(e){let t=await qI(e);return{blob:new Blob([await ci(JSON.stringify(t))]),filename:`${pm(e.name)}.deepview-reports.json.gz`}}function YI(e){return qe(e)??null}async function XI(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await $t(n.content);if(r)for(let o of r.findings)!o.id||t.has(o.id)||t.set(o.id,{severity:o.severity,file:o.file,line:o.line,description:Wf(o.description)})}return t}async function JI(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let a=r.get(s)?.color,l=typeof i.color=="string"?i.color:void 0;l&&a&&a!==l?o.push({id:s,property:"color",local:a,imported:l}):l&&l!==a&&ae(r,s,{color:l});let p=r.get(s)?.comment??"",d=typeof i.comment=="string"?i.comment:"";d&&p&&p!==d?o.push({id:s,property:"comment",local:p,imported:d}):d&&d!==p&&ae(r,s,{comment:d});let f=r.get(s)?.fix??"",m=typeof i.fix=="string"?i.fix:"";m&&f&&f!==m?o.push({id:s,property:"fix",local:f,imported:m}):m&&m!==f&&ae(r,s,{fix:m});let h=YI(i),b=qe(r.get(s))??null;h&&b&&b!==h?o.push({id:s,property:"triage",local:b,imported:h}):h&&!b&&ae(r,s,{triage:h,...h==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(s)?.flagged,w=typeof i.flagged=="boolean"?i.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:s,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ae(r,s,{flagged:w});let v=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(Wr(r.get(s)))for(let x of v)typeof x=="string"&&tt(r,s,x,!0,Kn(i,x))}if(o.length>0&&t){let s=await t(o,n??new Map);s&&ZI(o,s)}await xe()}function ZI(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&QI(n.id,n.property)===n.local&&(n.property==="color"?ae(c.triage,n.id,{color:n.imported}):n.property==="comment"?ae(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ae(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ae(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ae(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function QI(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return qe(c.triage.get(e))??null;if(t==="comment")return c.triage.get(e)?.comment??"";if(t==="fix")return c.triage.get(e)?.fix??"";if(t==="flagged"){let n=c.triage.get(e)?.flagged;return n===!0?"flagged":n===!1?"not flagged":""}}async function eA(e){if(Array.isArray(e))for(let t of e){let n;try{n=Uint8Array.fromBase64(t.data)}catch(r){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${r?.message??r}`);continue}try{let r=await Zr(t.name,n);r?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${r?.integrity})`)}catch(r){console.warn(`Workspace import: failed to save bundle ${t.name}: ${r?.message??r}`)}}}async function gm(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await Xt(f.name,f.content);let{count:m,source:h}=Ve(f.content);Ue(f.name,m,h??Ie(f.name)),n.push(f.name)}catch(m){console.warn(`Workspace import: failed to save ${f.name}: ${m.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await eA(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await XI(e.reports):new Map,s=await gl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await JI(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await j$({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:i?a:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),p=new Set(n),d=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!p.has(f)||typeof m!="string"||!m||(d[f]=m);if(Object.keys(d).length>0)try{await sc(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function tA(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>bl?`reports count (${e.reports.length}) exceeds cap (${bl})`:null:"reports field must be an array"}function ik(e){return tA(e)===null}async function hm(e){if(dp(e))return{kind:"encrypted"};let t;try{t=await hl(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return ik(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function bm({id:e,name:t,privateKeyBase64:n,password:r}){if(typeof e!="string"||!e)throw new TypeError("encodeShareLink: id required");if(typeof t!="string"||!t)throw new TypeError("encodeShareLink: name required");if(typeof n!="string"||!n)throw new TypeError("encodeShareLink: privateKey required");if(typeof r!="string"||!r)throw new TypeError("encodeShareLink: password required");let s=await Bi(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await Aw(zo(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function nA({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let n;try{n=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let r=await Ew(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await rA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function rA(e){let t=JSON.parse(Ur(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Bi(t.k),name:t.n,privateKeyBase64:t.k}}function ym(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function oA(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let n=t.replace(/^#/u,"");if(!n)return null;for(let r of n.split("&")){let o=r.indexOf("=");if(o<0||r.slice(0,o)!=="share")continue;return r.slice(o+1)||null}return null}var km="deepview.workspaceApp",ak=2,wm=new Set,vm=new Set,$m=0,xm=0,Sm=0,Mc=new Map,Ic=Promise.resolve(),lk=null;function ps(e=ve(km)){try{let t=JSON.parse(e);if(t?.version===ak&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:ak,revision:"",links:"[]",entries:{}}}function us(){for(let e of wm)e()}function ck(e){let t=Ic.then(()=>Xo(km,n=>e(ps(n))));return Ic=t.catch(n=>console.warn("workspace App cache:",n)),t}function Tc(e){return JSON.stringify(e.reports.toSorted())}function dk(){return JSON.stringify(Kf().map(({name:e,groups:t})=>({name:e,groups:t})))}function Cm(e){return jf()&&e.links===dk()}function uk(e,t){return e.workspaceRevisions?.[t]??""}function pk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Mc.get(t?.id)??0)&&n.workspaceRevision===uk(e,t?.id)}function fk(e,t,n){return n.reportEpoch===Sm&&n.reportRevision===(e.reportRevision??e.revision)&&pk(e,t,n)}function _m(e,t){return fk(ps(),e,t)}function mk(e,t){if($m||vm.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Tc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Rm(e){return mk(e,ps())?.appMode??null}function lo(e){let t=ps(),n=mk(e,t);return!n||!Cm(t)?null:n}async function Qi(e,t=null){let n;do n=Ic,await n;while(n!==Ic);let r=ps(),o=r.reportRevision??r.revision;return t&&(!fk(r,e,t)||!Cm(r))?null:{epoch:xm,revision:r.revision,reportEpoch:Sm,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Mc.get(e?.id)??0,workspaceRevision:uk(r,e?.id)}}async function Tm(e,t,n){let r=!1;return await ck(o=>{if(n.epoch!==xm||n.revision!==o.revision||!pk(o,e,n)||!Cm(o))return;let s=Y().find(i=>i.id===e.id);if(!(!s||Tc(s)!==Tc(e)))return o.entries[e.id]={...t,reports:Tc(e)},r=!0,JSON.stringify(o)}),r&&us(),r}function Ac(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)xm++,t===void 0&&Sm++,$m++;else for(let n of e)Mc.set(n,(Mc.get(n)??0)+1),vm.add(n);return us(),ck(n=>{if(n.reportRevision??=n.revision,e===null)n.revision=crypto.randomUUID(),t===void 0&&(n.reportRevision=n.revision),n.entries={};else{n.workspaceRevisions??={};for(let r of e)n.workspaceRevisions[r]=crypto.randomUUID(),delete n.entries[r]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)$m--;else for(let n of e)vm.delete(n);us()})}function Mm(e){return wm.add(e),()=>wm.delete(e)}Yt(()=>{let e=ve(km);e!==lk&&(lk=e,us())});zi(e=>{Ac([e]).catch(()=>{})});Pi(e=>{Ac([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);Ac(t).catch(()=>{})});Yi(()=>{if(!jf()){us();return}let e=dk();ps().links===e?us():Ac(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Ec="deepviewManagedLoginFinding";function Im(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Fc(e,t){return e?.bundleTab!=="code"||t?.bundleTab!=="code"||e.view!==t.view?!1:e.view==="npm"?e.packageName===t.packageName&&(e.packageSpec??null)===(t.packageSpec??null):e.view==="bundles"&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function sA(e){let t=e.location.hash,n=Pw(t),r=!1,o=null,s=0,i=null,a=null,l=!1,p=null,d=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let S=ui($),C=S?.view==="home"?pi($.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function b(){try{let $=e.sessionStorage?.getItem(Ec);if(e.sessionStorage?.removeItem(Ec),!$)return null;let S=new URL($,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function y(){if(!r||!pi(e.location.hash)||p===e.location.href||e.history.state?.[St]&&e.history.state[St]!==o)return;let $=p=e.location.href,S=h(new URL($));v(S??{view:"home"},{replace:!0}).finally(()=>{p===$&&(p=null)})}function w($){m()||($=$n($,n),e.history.replaceState(r?{[St]:o}:null,"",$),a=$)}async function v($,{replace:S=!1,pop:C=!1}={}){if(!r||!i||m())return!1;$??={view:"home"};let R=Ye($);if(R===null)return!1;let L=++s,A=d={route:$,findingRoute:null,codeRoute:null},E=()=>r&&L===s&&!m(),M=!1;try{M=await i($,E)}catch(I){console.warn("managed: navigation failed:",I)}return E()?M?(typeof M=="object"&&(R=Ye(M)??R),Im(A.findingRoute,typeof M=="object"?M:$)&&(R=Ye(A.findingRoute)),Fc(A.codeRoute,typeof M=="object"?M:$)&&(R=Ye(A.codeRoute)),d=null,C||S?w(R):$n(R,n)!==a&&(R=$n(R,n),e.history.pushState({[St]:o},"",R),a=R),!0):(await i({view:"home"},E),E()&&(d=null,w("/")),!1):!1}function x($){if(m())return;if(!r){$.state?.[St]&&w("/");return}if((!$.state?.[St]||$.state[St]===o)&&pi(e.location.hash)){y();return}if(!$.state?.[St]){let C=h(new URL(e.location.href)),R=a==null?null:ui(new URL(a,e.location.href));if(C?.file!=null&&C.file===R?.file&&Fc(C,R)){w(Ye(C));return}}let S=$.state?.[St]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function k($){if(!r||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let S=$.composedPath().find(L=>L.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let C=new URL(S.href);if(C.origin!==e.location.origin)return;let R=h(C);if(R?.finding)return $.preventDefault(),v(R)}return{get active(){return r},rememberFinding(){let $=h(new URL(e.location.href));if(!$?.finding)return;let S=$.view==="home"?`/#${jr($.finding)}`:Ye($);try{e.sessionStorage?.setItem(Ec,S)}catch{}},start($,{onCancel:S=null}={}){if(r)return;r=!0,i=$,f=S,o=typeof e.history.state?.[St]=="string"?e.history.state[St]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",y),e.addEventListener("click",k),e.launchQueue?.setConsumer(({targetURL:L})=>{if(!r||!L)return;let A=new URL(L);if(A.origin!==e.location.origin)return;let E=h(A);E&&v(E)}),l=!0);let C=b(),R=h(new URL(e.location.href))??{view:"home"};return C&&R.view==="home"&&!R.finding&&(R=C),v(R,{replace:!0})},navigate:v,replaceFindingRoute($){if(!r||$?.view!=="findings"||m())return;let S=Ye($);if(S!=null){if(d){(d.route.view==="home"&&d.route.finding||Im($,{...d.route,view:"findings"}))&&(d.findingRoute=$);return}Im($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceCodeRoute($){if(!r||m()||!["bundles","npm"].includes($?.view)||$.bundleTab!=="code")return;let S=Ye($);if(S!=null){if(d){Fc($,d.route)&&(d.codeRoute=$);return}Fc($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceRoute($){if(!r||!$||m())return;let S=Ye($);S!=null&&!d&&w(S)},pushRoute($){if(!r||!$||m())return;let S=Ye($);if(S==null)return;let C=d!==null;++s,d=null,S=$n(S,n),S!==a&&(e.history.pushState({[St]:o},"",S),a=S),C&&f?.()},reset({force:$=!1}={}){if(++s,d=null,r||$){try{e.sessionStorage?.removeItem(Ec)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:sA(window);function ea(e){return _()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function gk(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function iA(e){let[t,n,r]=e.split("/");return r===void 0&&t!==void 0&&n!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&n.length<=100&&n!=="."&&n!==".."&&/^[a-zA-Z\d._-]+$/u.test(n)}function hk(e,t){if(typeof e!="string"||e.length>2048)return null;let n;try{n=new URL(e)}catch{return null}if(n.href!==e||n.origin!=="https://github.com"||n.username||n.password)return null;let r=t.exec(n.pathname);if(!r)return null;let o=`${r[1]}/${r[2]}`,s=Number(r[3]);return!iA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Am(e){return hk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Em(e){return hk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Fm(e){let t=Am(e);if(t)return{...t,kind:"pull"};let n=Em(e);return n?{...n,kind:"issue"}:null}function Lm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Lc(e){return _()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Lc(e)?.autoFix??""}function ta(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Em(s?.url)?{url:s.url,autoFix:Am(s.autoFix)?s.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===i?.url&&a?.autoFix===i?.autoFix||(i?c.managedIssues.set(o,i):c.managedIssues.delete(o),r=!0)}return r}function aA(e){let t=e?.teams?.find(n=>n.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(n=>!n.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(n=>[n.id,n.cacheKey,n.visible!==!1]).toSorted()]):null}var Oc=class{constructor({context:t,fetchWorkspace:n,changed:r=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=n,this.changed=r,this.now=o,this.entries=new Map,this.required=new Set,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.required.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||t?.teams!==this.context?.teams){let n=aA(t);(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||n!==this.scope)&&this.reset(),this.context=t,this.scope=n}return this.scope===null?null:this.context}schedule(){!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0))}read(t,{refreshIfMissing:n=!1}={}){let o=this.syncContext()?.teamId&&Fm(t);if(!o)return null;let s=Lm(o),i=this.entries.get(s)??null;return n&&!i&&(this.run?this.required.add(s):this.expires=0),this.expires<=this.now()&&this.schedule(),i}async flush(){let t=this.syncContext();if(!t?.teamId||this.run||this.expires>this.now())return;let n=this.run=new AbortController,r;try{r=await this.fetchWorkspace(t.teamId,n.signal,t.reportId)}catch{r=null}if(this.syncContext(),this.run!==n||n.signal.aborted)return;this.entries.clear();for(let s of Array.isArray(r)?r:[]){let i=Fm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?gk(s.stateReason):null;this.entries.set(Lm(i),{title:s.title,description:typeof s.description=="string"?s.description:null,status:s.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(s=>!this.entries.has(s));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}};var Nc=new Set,Om=new Oc({context:()=>{let e=c.managedSession;return _()&&e?.id&&c.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:c.currentManagedTeam,reportId:c.managedTeams.find(t=>t.id===c.currentManagedTeam)?.reports.find(t=>t.id===c.currentManagedReport&&t.visible===!1)?.id??null,teams:c.managedTeams}:null},fetchWorkspace:bk,changed:()=>{for(let e of Nc)e()}});function K4(e){return Nc.add(e),()=>Nc.delete(e)}function Nm(){Om.reset();for(let e of Nc)e()}function fs(e){c.currentManagedTeam===e&&Nm()}function Bm(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:c.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&fs(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Om.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Om.read(o)}var na=null,nn=null;function Dm(){return nn?.getPreviewRole()??null}function yk(){nn?.setPreviewRole(null)}function wk(){nn?.resetManagedAppState()}function vk(e){nn?.setManagedAppSession(e)}function $k(e){return nn?.setManagedReportCatalog(e)??new Set}function Bc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function kk(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function xk(e,t=c.currentManagedTeam){return(await P()).fetchReportSources(e,t)}function P(){return na||(na=(async()=>{let e="./client-managed.js";try{return nn=await import(e),nn}catch(t){throw na=null,t}})(),na)}async function Sk(e){return(await P()).probeSession(e)}async function Ck(e){return(await P()).probeTeams(e)}async function Pm(e){return(await P()).fetchManagedBundleCatalog(e)}async function _k(e,t,n){return(await P()).fetchNpmPackage(e,t,n)}async function Rk(e,t){return(await P()).fetchNpmVersions(e,t)}async function Tk(e,t){return(await P()).fetchNpmStats(e,t)}async function Mk(e,t){return(await P()).fetchNpmAdvisories(e,t)}async function Ik(e,t,n){return(await P()).fetchNpmTags(e,t,n)}async function Ak(e,t,n,r){return(await P()).fetchNpmRisk(e,t,n,r)}async function Ek(e,t,n){return(await P()).fetchNpmSocket(e,t,n)}async function Fk(e,t,n){return(await P()).fetchNpmProvenance(e,t,n)}async function Lk(e,t,n,r){return(await P()).fetchPrettyBundleFile(e,t,n,r)}async function Ok(e,t,n,r){return(await P()).fetchPrettyNpmFiles(e,t,n,r)}async function Nk(e,t,n,r,o){return(await P()).fetchPrettyNpmFile(e,t,n,r,o)}async function Bk(e,t,n,r){return(await P()).fetchPrettyBundleChanges(e,t,n,r)}async function Dk(e,t,n,r,o){return(await P()).fetchPrettyNpmChanges(e,t,n,r,o)}async function ez(e,t,n,r){return(await P()).fetchBundleRenameDiff(e,t,n,r)}async function tz(e,t,n,r,o){return(await P()).fetchNpmRenameDiff(e,t,n,r,o)}async function nz(e,t,n,r){return(await P()).fetchBundleRenameDiffs(e,t,n,r)}async function rz(e,t,n,r,o){return(await P()).fetchNpmRenameDiffs(e,t,n,r,o)}async function oz(e,t,n,r){return(await P()).fetchBundleTypeOnly(e,t,n,r)}async function sz(e,t,n,r,o){return(await P()).fetchNpmTypeOnly(e,t,n,r,o)}async function Pk(e){return(await P()).openManagedShareDialog(e,"",c.managedSession)}async function iz(e){let t=()=>c.managedSession?.id===e.session.id&&c.managedSession?.csrfToken===e.session.csrfToken&&c.currentManagedTeam===e.teamId,[n,{render:r}]=await Promise.all([P(),import("./chunk-FU4MTW7F.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=c.managedIssues.get(s),a=ta([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});fs(e.teamId),a&&r()}}):null}async function az(e){if(!ea(e))return null;let t=c.reports,n=c.managedSession,r=c.currentManagedTeam,o=()=>ea(e)&&c.managedSession===n&&c.currentManagedTeam===r&&c.reports===t,s=await P();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function zk(e,t){return(await P()).fetchTeamAnnotations(e,t)}async function zm(e,t=c.currentManagedTeam,n){return(await P()).fetchReportTriage(e,t,n)}async function bk(e,t,n){return(await P()).fetchFixes(e,t,n)}async function Wk(e,t=c.currentManagedTeam,n){return(await P()).fetchReportComments(e,t,n)}async function Hk(e,t,n,r=c.currentManagedTeam){return(await P()).saveReportComment(e,t,n,r)}async function Uk(e,t,n,r,o=c.currentManagedTeam){return(await P()).deleteReportComment(e,t,n,r,o)}async function Vk(e,t,n,r=c.currentManagedTeam){return(await P()).pushReportTriage(e,t,n,r)}async function jk(e){return e&&te?.rememberFinding(),(await P()).login(e)}async function Gk(e){return(await P()).logout(e)}async function Kk(e){return(await P()).stopViewing(e)}async function Dc(e,t){return(await P()).fetchBundleMetadata(e,t)}async function qk(e,t){return(await P()).fetchBundleContents(e,t)}async function Wm(e,t){return(await P()).fetchTeamReports(e,t)}async function Yk(e,t){return(await P()).watchTeamFeed(e,t)}async function Xk(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await P()).fetchBundleAdvisories(e,t,n,r,o)}async function lz(...e){return(await P()).dependencyReviews(...e)}async function cz(...e){return(await P()).myDependencyReviews(...e)}async function dz(...e){return(await P()).discardDependencyReview(...e)}async function uz(...e){return(await P()).latestDependencyReview(...e)}var ye={...zw,[ke]:bw},lA=new Set(Object.keys(Pr)),ms={...Pr,default:"DeepView"};function Pc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(Pe,t)?t:null}function Ae(e){return Hm(e,Ie(e))}function Hm(e,t){if(t===ke)return ke;if(t!==void 0)return lA.has(t)?t:"default";let n=e.toLowerCase();return n.endsWith(".generic-md")?"markdown-generic":n.endsWith(".codex")?"codex-security":n.endsWith(".md")?"claude-security":"default"}function zc(e){return Ie(e)===ke}var rn=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;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:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
4
+ `;var Um=class extends N{static styles=[...N.styles,D(rn)];static properties={_password:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this._password="",this._busy=!1,this._error="",this._settled=!1,this._tryPassword=null}_finish(t){this._settled||(this._password="",this._tryPassword=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await this._tryPassword(this._password);if(this._settled)return;this._finish(t)}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onUnlock())};render(){return u`<dialog @close="${this._onClose}"><header><h3>Unlock encrypted workspace</h3></header><p class="nwd-note ui-hint">This workspace bundle is password-protected. Enter the password the sender shared with you separately to decrypt and import it.</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-bundle-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<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></dialog>`}};customElements.define("workspace-unlock-bundle-dialog",Um);function Wc({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return El("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var Hc=`.conflict-sev{display:inline-block;padding:1px .4rem;border-radius:3px;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;flex-shrink:0;&.sev-critical{background:var(--critical)}&.sev-high{background:var(--high)}&.sev-medium,&.sev-moderate{background:var(--medium)}&.sev-low{background:var(--low)}&.sev-high_bug{background:var(--high-bug)}&.sev-bug{background:var(--bug)}&.sev-informational,&.sev-info{background:var(--info)}&.sev-unrated{background:var(--low);color:var(--badge-low-text)}}
5
+ `;var Jk=`dialog{max-width:720px;width:min(94vw,720px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .75rem;color:var(--muted);font-size:.82rem}.bulk{display:flex;gap:.4rem;margin-bottom:.7rem;padding-bottom:.7rem;border-bottom:1px solid var(--border)}.bulk button,.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)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}}.list{list-style:none;margin:0;padding:0;max-height:60vh;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;display:flex;flex-direction:column;gap:.5rem}.card{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem .6rem;background:rgb(from var(--text) r g b / .02)}.card-head{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}.id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;color:var(--muted);padding:1px .3rem;background:rgb(from var(--text) r g b / .05);border-radius:var(--ui-radius, 3px)}.desc{font-size:.78rem;color:var(--muted);margin-bottom:.55rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rows{display:flex;flex-direction:column;gap:.35rem}.row{display:grid;grid-template-columns:5rem 1fr 1fr;align-items:stretch;gap:.4rem}.row-label{color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;align-self:center}.choice{position:relative;display:flex;flex-direction:column;gap:.15rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);min-width:0;&:has(input:checked){border-color:var(--accent);background:rgb(from var(--accent) r g b / .07)}&:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:1px}}.choice input[type=radio]{position:absolute;opacity:0;pointer-events:none}.choice-label{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.choice:has(input:checked) .choice-label{color:var(--accent)}.choice-value{font-size:.82rem;min-width:0}.flag-badge{font-size:.82rem;color:var(--muted)}.flag-badge.on{color:var(--accent);font-weight:600}.color{display:inline-flex;align-items:center;gap:.35rem}.color-dot{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .2);flex-shrink:0;&.marker-red{background:var(--marker-red)}&.marker-blue{background:var(--marker-blue)}&.marker-green{background:var(--marker-green)}&.marker-gray{background:var(--marker-gray)}}.color-name{text-transform:capitalize}.comment-text,.fix-text{cursor:text;user-select:text;-webkit-user-select:text}.comment-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;& em{color:var(--muted);font-style:italic}}.fix-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}
6
+ `;function Zk({tabs:e,current:t,prefix:n,select:r,disabled:o=!1}){return u`<div class="dlg-tabs" role="tablist" @keydown="${i=>{if(i.key!=="ArrowLeft"&&i.key!=="ArrowRight")return;i.preventDefault();let a=e.findIndex(f=>f.id===t),l=i.key==="ArrowRight"?1:-1,p=e[(a+l+e.length)%e.length];if(!p||p.id===t)return;let d=i.currentTarget;r(p.id),requestAnimationFrame(()=>d.querySelector(`#${n}-tab-${p.id}`)?.focus())}}">${e.map(i=>u`<button type="button" role="tab" class="dlg-tab" id="${`${n}-tab-${i.id}`}" aria-controls="${`${n}-panel-${i.id}`}" aria-selected="${String(t===i.id)}" tabindex="${t===i.id?0:-1}" ?disabled="${o&&t!==i.id}" @click="${()=>r(i.id)}">${i.icon??g}${i.label}</button>`)}</div>`}function Uc(e){if(!e)return g;let t=e.replaceAll("_"," ");return u`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function pA(e){return`bundle-${e.slice(7,19)}\u2026`}function lr(e){return e.kind==="bundle"?e.label??pA(e.identifier):e.identifier}function Qk(e){return e.kind==="bundle"?"bundle":zc(e.identifier)?"links file":"report"}function Vc(e){let t=e.length,n=t===1,r=new Set(e.map(Qk)),o="items";if(r.size===1){let s=[...r][0];o=n?s:`${s}s`}return{count:t,singular:n,kindLabel:o}}function jc(e){return u`<ul class="lwd-list">${e.map(t=>{let n=Qk(t);return u`<li>${lr(t)}${n==="report"?g:u`<span class="lwd-kind-tag">${n}</span>`}</li>`})}</ul>`}function Gc(e){return e.length===0?g:u`<ul class="lwd-list" role="alert">${e.map(t=>u`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}function fA(e){return e?u`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:u`<em>none</em>`}function mA(e){return u`<span class="comment-text">${e||u`<em>empty</em>`}</span>`}function gA(e){return e?Do(e)?u`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:u`<span class="fix-text">${e}</span>`:u`<span class="comment-text"><em>empty</em></span>`}function hA(e){return e?u`<span class="${`triage triage-${e}`}">${e}</span>`:u`<em>none</em>`}function bA(e){return e?u`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:u`<em>none</em>`}function e0(e,t){return e==="color"?fA(t):e==="comment"?mA(t):e==="fix"?gA(t):e==="triage"?hA(t):e==="flagged"?bA(t):u`${String(t)}`}function yA(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return u`<div class="card-head">${Uc(e?.severity)} ${n?u`<span class="loc" data-tooltip-truncated data-tooltip="${n}">${n}</span>`:g} <code class="id" data-tooltip="${t}">${t.slice(0,8)}…</code></div>${e?.description?u`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:g}`}var n0={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},t0={color:0,comment:1,fix:2,triage:3,flagged:4},wA={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},Vm=class extends N{static styles=[...N.styles,D(Hc),D(Jk)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...n0},this._settled=!1}focusInitial(){}_blockEscClose=t=>t.preventDefault();_onClick=t=>{let n=t.target.closest("[data-bulk]");if(!n)return;let r=n.dataset.bulk;for(let o of this.renderRoot.querySelectorAll(`input[type="radio"][value="${r}"]`))o.checked=!0};_onSubmit=t=>{t.preventDefault();let n={};for(let r of this.conflicts){let o=`${r.id}:${r.property}`,s=this.renderRoot.querySelector(`input[name="conflict-${CSS.escape(o)}"]:checked`);s&&(n[o]=s.value)}this._finish(n)};render(){let t=this.labels,n=new Map;for(let d of this.conflicts)n.has(d.id)||n.set(d.id,[]),n.get(d.id).push(d);for(let d of n.values())d.sort((f,m)=>(t0[f.property]??99)-(t0[m.property]??99));let r=this.conflicts.filter(d=>d.property==="color").length,o=this.conflicts.filter(d=>d.property==="comment").length,s=this.conflicts.filter(d=>d.property==="fix").length,i=this.conflicts.filter(d=>d.property==="triage").length,a=this.conflicts.filter(d=>d.property==="flagged").length,l=[r?`${r} color${r===1?"":"s"}`:"",o?`${o} comment${o===1?"":"s"}`:"",s?`${s} fix${s===1?"":"es"}`:"",i?`${i} triage state${i===1?"":"s"}`:"",a?`${a} flag${a===1?"":"s"}`:""].filter(Boolean).join(", "),p=`${n.size} finding${n.size===1?"":"s"}`;return u`<dialog @click="${this._onClick}" @cancel="${this._blockEscClose}" @close="${this._onClose}"><header><h3>${t.title}</h3><p>${p} ${t.intro} ${l}.${t.trailingNote?` ${t.trailingNote}`:""}</p><div class="bulk"><button type="button" data-bulk="local">Keep all current</button> <button type="button" data-bulk="imported">${t.importedSideLabel} (all)</button></div></header><form @submit="${this._onSubmit}"><ul class="list">${[...n.entries()].map(([d,f])=>u`<li class="card" data-id="${d}">${yA(this.findingLookup.get(d),d)}<div class="rows">${f.map(m=>{let h=`${m.id}:${m.property}`,b=`conflict-${h}`;return u`<div class="row" data-key="${h}"><span class="row-label">${wA[m.property]??m.property}</span> <label class="choice"><input type="radio" name="${b}" value="local" required> <span class="choice-label">Keep current</span> <span class="choice-value">${e0(m.property,m.local)}</span></label> <label class="choice"><input type="radio" name="${b}" value="imported" required> <span class="choice-label">${t.importedSideLabel}</span> <span class="choice-value">${e0(m.property,m.imported)}</span></label></div>`})}</div></li>`)}</ul><footer class="actions"><button type="submit" class="primary">${t.applyButton}</button></footer></form></dialog>`}};customElements.define("triage-conflict-dialog",Vm);function Kc(e,t,n={}){return new Promise((r,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...n0,...n},s.addEventListener("resolve",i=>{s.remove(),r(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(Al(i.detail?.cause))}),document.body.append(s)})}var ot=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
7
+ `;var Ee=class extends N{static styles=[...N.styles,D(ot)];firstUpdated(){if(this.signal?.aborted){this._onCancel();return}this.signal?.addEventListener("abort",this._onCancel,{once:!0}),super.firstUpdated()}disconnectedCallback(){this.signal?.removeEventListener("abort",this._onCancel),super.disconnectedCallback()}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}confirmationResult(t){return{confirmed:t&&!this.signal?.aborted}}_finish(t){this._settled||super._finish(this.confirmationResult(!!t))}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0)};var jm=class extends Ee{static properties={matched:{type:Number},available:{type:Number}};constructor(){super(),this.matched=0,this.available=0}confirmationResult(t){return{confirmed:t&&this.matched>0&&!this.signal?.aborted}}render(){return u`<dialog aria-labelledby="import-title" @close="${this._onClose}"><header><h3 id="import-title">Import local triage</h3></header><p class="lwd-body"><strong>${this.matched}</strong> of <strong>${this.available}</strong> local triage ${this.available===1?"entry":"entries"} can be imported.</p><p class="lwd-note">${this.matched>0?"Import saved triage and comments for these findings? Conflicting values will prompt for resolution.":this.available>0?"None match findings in managed reports.":"There is no saved local triage to import."}</p>${this.available>this.matched?u`<p class="lwd-empty">Unmatched entries stay in this browser.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">${this.matched>0?"Cancel":"Close"}</button> ${this.matched>0?u`<button type="button" class="primary" @click="${this._onConfirm}">Import triage</button>`:g}</footer></dialog>`}};customElements.define("local-triage-import-dialog",jm);function r0(e){return re("local-triage-import-dialog",e)}var o0=`dialog{width:min(42rem,90vw)}.content-import-groups{max-height:55vh;overflow:auto}fieldset{margin:.7rem 0;padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px)}legend{padding:0 .35rem;font-size:.85rem;font-weight:600}.content-import-item{display:flex;gap:.65rem;align-items:flex-start;padding:.65rem 0}.content-import-item+.content-import-item{border-top:1px solid var(--border)}.content-import-item input{margin:.15rem 0 0;accent-color:var(--accent)}.content-import-item.unavailable{opacity:.55;cursor:default}.content-import-label{display:grid;gap:.25rem;min-width:0;overflow-wrap:anywhere;font-size:.82rem}.content-import-status{display:flex;flex-wrap:wrap;gap:.4rem;color:var(--muted);font-size:.74rem}.content-import-present{border:1px solid var(--border);border-radius:3px;padding:0 .3rem}input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{opacity:.5}
8
+ `;var Gm=class extends Ee{static styles=[...Ee.styles,D(o0)];static properties={plan:{attribute:!1},selected:{state:!0}};constructor(){super(),this.plan={kind:"report",items:[],groups:[]},this.selected=new Set}beforeOpen(){this.selected=new Set(this.plan.items.filter(t=>t.synced&&!t.present&&!t.error).map(t=>t.value))}toggle(t,n){if(t.present||t.error)return;let r=new Set(this.selected);n?r.add(t.value):r.delete(t.value),this.selected=r}confirmationResult(t){let n=this.plan.items.filter(o=>this.selected.has(o.value)&&!o.present&&!o.error).map(o=>o.value),r=t&&n.length>0&&!this.signal?.aborted;return{confirmed:r,selected:r?n:[]}}render(){let t=this.plan.kind==="bundle"?"bundles":"reports";return u`<dialog aria-labelledby="content-import-title" @close="${this._onClose}"><header><h3 id="content-import-title">Import ${t}</h3></header><p class="lwd-body">Choose files to upload. Cloud-synced files are selected by default.</p><p class="lwd-note">Workspaces are shown for organization only. Teams and triage are not imported. Repository locations follow each file’s embedded metadata; files without it stay unattached.</p><div class="content-import-groups">${this.plan.groups.map(n=>u`<fieldset><legend>${n.name}</legend>${n.items.map(({item:r,synced:o,cached:s})=>u`<label class="${`content-import-item${r.present||r.error?" unavailable":""}`}"><input type="checkbox" .checked="${this.selected.has(r.value)}" ?disabled="${r.present||!!r.error}" @change="${i=>this.toggle(r,i.target.checked)}"> <span class="content-import-label"><strong>${r.name}</strong> <span class="content-import-status">${o?"Cloud synced":"Not synced"}${s?" \xB7 last known status":""} ${r.present?u`<span class="content-import-present">Already present</span>`:g}</span> ${r.error?u`<span>${r.error}</span>`:g}</span></label>`)}</fieldset>`)} ${this.plan.items.length===0?u`<p class="lwd-empty">No local ${t} available.</p>`:g}</div><footer class="nwd-actions"><span class="lwd-empty" role="status">${this.selected.size} selected</span><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${this.selected.size===0}" @click="${this._onConfirm}">Import ${t}</button></footer></dialog>`}};customElements.define("local-content-import-dialog",Gm);function s0(e){return re("local-content-import-dialog",e)}var i0=`dialog{width:min(94vw,68rem);max-width:68rem;max-height:calc(100dvh - 7rem);display:flex;flex-direction:column}dialog:not([open]){display:none}.comparison-results{overflow:auto;min-height:0}.difference-counts{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:.8rem 0;font-size:.8rem}.difference-counts span{border-inline-start:3px solid var(--difference);padding-inline-start:.5rem}.managed-only{--difference: var(--marker-blue, #559adf)}.local-only{--difference: var(--marker-green, #53a96a)}.mismatch{--difference: var(--high, #d69d37)}.finding{margin:.8rem 0 1.3rem}h4{font-size:.9rem;font-weight:600;overflow-wrap:anywhere}.location,.finding-id{margin-top:.3rem;color:var(--muted);font-size:.75rem;overflow-wrap:anywhere}.table-scroll{margin-top:.6rem;overflow-x:auto}table{width:100%;min-width:32rem;border-collapse:collapse;table-layout:fixed;font-size:.8rem}th,td{padding:.6rem .7rem;text-align:left;vertical-align:top;border:1px solid var(--border);overflow-wrap:anywhere}thead th{color:var(--muted);font-weight:500}th:first-child{width:8rem}tbody th{font-weight:500}td{white-space:pre-wrap}.difference-kind{display:block;margin-top:.3rem;color:var(--difference);font-size:.72rem}.highlight{background:rgb(from var(--difference) r g b / .08)}.unset{color:var(--muted);font-style:normal}.comment+.comment{margin-top:.6rem}.comment.changed{border-inline-start:3px solid var(--difference);padding-inline-start:.5rem}.skipped{color:var(--high, #d69d37);margin:.75rem 0;font-size:.8rem}.skipped ul{padding:.6rem 0 .6rem 1.2rem;overflow-wrap:anywhere}.empty{margin:1rem 0;color:var(--muted);font-size:.85rem}
9
+ `;var xA={triage:"Triage state",color:"Color",fix:"Fix",flagged:"Flag",comment:"Comments",ignoredReports:"Per-report ignores"},a0={"managed-only":"Only managed","local-only":"Only local",mismatch:"Different"},SA={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"};function l0(e,t){return t===void 0||Array.isArray(t)&&t.length===0?u`<em class="unset">Not set</em>`:e==="comment"?t.map(n=>u`<div class="${`comment${n.different?" changed":""}`}">${n.text}</div>`):e==="ignoredReports"?u`${t.join(`
10
+ `)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?SA[t]??t:t}var Km=class extends Ee{static styles=[...Ee.styles,D(i0)];static properties={comparison:{attribute:!1}};constructor(){super(),this.comparison={matched:0,localFindings:0,findings:[],skipped:[]}}render(){let{matched:t,localFindings:n,findings:r,skipped:o}=this.comparison,s={"managed-only":0,"local-only":0,mismatch:0};for(let i of r)for(let a of i.differences)s[a.kind]++;return u`<dialog aria-labelledby="compare-triage-title" @close="${this._onClose}"><header><h3 id="compare-triage-title">Compare triage</h3><p class="lwd-body">${t} shared ${t===1?"finding":"findings"} compared · ${r.length} with differences</p><p class="lwd-note">Local reports and managed reports are matched by finding ID. This comparison does not change either side. Comments are compared by text; per-report ignores only exist locally.</p>${r.length>0?u`<div class="difference-counts">Field differences: ${Object.entries(a0).map(([i,a])=>u`<span class="${i}">${a}: ${s[i]}</span>`)}</div>`:g}</header><div class="comparison-results">${o.length>0?u`<details class="skipped"><summary>${o.length} local ${o.length===1?"report could":"reports could"} not be read; comparison is incomplete.</summary><ul>${o.map(i=>u`<li>${i.name}: ${i.reason}</li>`)}</ul></details>`:g} ${r.map(({id:i,finding:a,differences:l})=>u`<section class="finding"><h4>${a.title||a.description?.split(`
11
+ `)[0]||i}</h4>${a.file?u`<p class="location">${a.file}${a.line?`:${a.line}`:""}</p>`:g}<p class="finding-id"><code>${i}</code> · ${a.reports.join(", ")}</p><div class="table-scroll"><table><thead><tr><th scope="col">Field</th><th scope="col">Local</th><th scope="col">Managed</th></tr></thead><tbody>${l.map(p=>u`<tr class="${p.kind}"><th scope="row">${xA[p.property]}<span class="difference-kind">${a0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${l0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${l0(p.property,p.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?u`<p class="empty">${t>0?"No triage differences in the shared findings.":n===0?"No findings were found in the readable local reports.":"No findings are present in both local and managed reports."}</p>`:g}</div><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" data-role="cancel" @click="${this._onCancel}">Close</button></footer></dialog>`}};customElements.define("triage-comparison-dialog",Km);var c0=e=>re("triage-comparison-dialog",e);var CA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:so,addBundleToWorkspace:io,onReportMembershipChanged:zi,onBundleMembershipChanged:Rf,onWorkspaceDeleted:Pi,onWorkspacePrivateKeyChanged:_f,analyzeContent:Ve,setCount:Ue,gunzipBytes:cp,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Zr,saveFileBytes:Up,onFileMutated:mt,async saveTriage(){return await ls(),xe()},getSecureItem:ve,setSecureItem:Me,removeSecureItem:nr,onSecureStorageHydrated:Yt};function d0(e){e.installSyncHost(CA),Xf(()=>e.triageSync.notify())}var X=null,co=null;function m0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var g0=!1;function Xc(e){g0=!!e}function Yc(){if(g0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function ra(){return co||(Yc()&&!X?Promise.resolve(null):(co=(async()=>{let e="./client-sync.js";try{let t=await import(e);return d0(t),X=t,_A(),t}catch(t){throw co=null,t}})(),co))}var h0=[];function oa(e){X?e(X):h0.push(e)}function _A(){let e=h0.splice(0);for(let t of e)try{t(X)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function uo(e,t){let n={cancelled:!1,unsub:null};return oa(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function qm(e,t){return X?X.isInRemote(e,t):!1}function b0(e,t){return X?X.isBundleInRemote(e,t):!1}var RA="deepview.objstore-presence.";function y0(e){try{let t=localStorage.getItem(RA+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function gs(e,t){if(X&&X.isInRemote(e,t))return!0;let n=y0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function Ym(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=y0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function Xm(e){return X?X.remoteCount(e):0}function w0(e){return X?X.differingReports(e):[]}function mW(e){return uo(e,(t,n)=>t.onAutoDownloaded(n))}function gW(e){return uo(e,(t,n)=>t.onBundleAutoDownloaded(n))}function hW(e){return uo(e,(t,n)=>t.onChange(n))}var u0=null,p0=null,f0=null,qc=[];function bW(e){if(X){X.setRedraw(e);return}u0=e,oa(t=>{u0===e&&t.setRedraw(e)})}function yW(e){if(X){X.setAuthenticationResolver(e);return}p0=e,oa(t=>{p0===e&&t.setAuthenticationResolver(e)})}function wW(e){if(X){X.setHydrationConflictResolver(e);return}f0=e,oa(t=>{f0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(Yc()||!m0()&&!X)return;let n=await ra();if(!(!n||Yc()))return n[e](...t)}function v0(...e){return on("downloadFileFromRemote",e)}function $0(...e){return on("fetchBundleFromRemote",e)}function Jc(...e){return on("putFile",e)}function k0(...e){return on("holdLocalChangeChecks",e)}function x0(...e){return on("putBundleToRemote",e)}function Zc(...e){return on("deleteFromRemote",e)}function Qc(...e){return on("deleteBundleFromRemote",e)}function sa(...e){return on("openWorkspace",e)}async function Jm(...e){return(X??(co?await co:null))?.closeWorkspace(...e)}function S0(...e){return on("recheckRemoteStorage",e)}function C0(...e){return on("resolveReportDifference",e)}function In(e,t){if(X)return X.triageSync[e](...t);oa(n=>{n.triageSync[e](...t)})}var G={get status(){return X?X.triageSync.status:"off"},get openSessions(){return X?X.triageSync.openSessions:[]},get persistenceDegraded(){return X?X.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return X?X.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return Yc()?Promise.resolve(null):ra().then(t=>{t.triageSync.setEnabled(!0);let n=qc;qc=[];for(let r of n)try{t.openWorkspace(r)}catch(o){console.warn(`client-sync: openWorkspace(${r}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(X){qc=X.openWorkspaceIds();for(let t of qc)try{X.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}X.triageSync.setEnabled(!1);return}In("setEnabled",[e])},isEnabled(){return X?X.triageSync.isEnabled():m0()},openSession(e){In("openSession",[e])},closeSession(e){In("closeSession",[e])},refreshSession(e){In("refreshSession",[e])},dismissError(e){In("dismissError",[e])},setForcedOff(e){In("setForcedOff",[e])},setProtocolLocked(e){In("setProtocolLocked",[e])},setServerUrl(e){In("setServerUrl",[e])},getServerUrl(){return X?X.triageSync.getServerUrl():null},notify(){In("notify",[])},onStatusChange(e){return uo(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return uo(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return uo(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return uo(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}};function ed(){let e=new Set;if(c.currentWorkspace||!qf())return e;let t=c.currentFile??c.reports[0]?.fileName;if(!t)return e;let n=new Set;for(let r of c.reports)if(r.fileName===t)for(let o of r.groups)for(let s of o)s.id!=null&&n.add(String(s.id));for(let r of n)gt(r).some(o=>!n.has(o)&&ro(o).some(s=>s!==t))&&e.add(r);return e}var hs="\0",Qm="",bs="";function ia(e){return cl(e.model)||null}function eg(e){let t=cr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===hs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ia(e),r=t.filterModel===bs?null:t.filterModel;if(n!==r)return!1}return!0}function tg(e){let t=typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:null;return e.isApp&&!(e._source??e.source)&&t?t:typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:t}function T0(e){let t=new Set;for(let n of e)for(let r of n)t.add(tg(r));return t}function td(){c.filterSeverities=new Set,c.filterColors=new Set,c.filterSources=new Set,c.filterAnalyzer="",c.filterModel="",c.filterRepo="",c.filterConfMin=0,c.filterConfMax=10,c.filterInclude="",c.filterIncludeNegate=!1,c.filterComment="",c.filterFix="",c.filterFlagged="",c.filterDuplicates="",c.filterCrossContext="",c.filterAppStacked="",c.filterSecurity="",c.filterRevalidate="",c.filterPartial="",c.sortBy="severity"}var TA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function MW(){let e={};for(let t of TA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var ng=null;function IW(e){ng=e}function AW(){ng=null}function cr(){return ng??c}function M0(e){return Yr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function I0(e){let t=Cp("confirmed","");return e.some(n=>t.includes(M0(n)))}function MA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Av(n,t,Iv(e,Ct,Yr),Yr)?"confirmed":""}function IA(e,t=Ct){return Mv(e,t)}function AA(e,{tabs:t=Ct,kindOf:n=Yr,severityMode:r=c.severityMode}={}){return Pl(e,{tabs:t,kindOf:n,severityMode:r})}function nd(e){return c.showRevalidation===!1||c.upstreamOnly||po()?!1:AA(e)}function aa(e,{resetSort:t=!0}={}){c.filterConfMin=IA(e),c.filterConfMax=10,c.filterRevalidate=MA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=rg(e)?"priority-desc":"severity")}function rg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(A0(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&Xr(o))})}function A0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Xr)?0:void 0}function E0(e){let t=cr();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Zn(e.file)||!n&&!Zn(e.file))return!1}if(t.filterRevalidate){let n=Cp(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(M0(e)))return!1}if(!t.filterRevalidate){let n=Fv(e)?0:_p(e);if(n===void 0){if(t.filterConfMin>0)return!1}else if(n<t.filterConfMin||t.filterConfMax<10&&n>t.filterConfMax)return!1}return!0}function EA(e){if(!E0(e))return!1;let t=cr(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(de(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=ge(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!eg(e))return!1;if(t.filterRepo){let r=tg(e),o=t.filterRepo===Qm?null:t.filterRepo;if(r!==o)return!1}if(n){let r=ge(e),o=Ov(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(s=>s.length>=6&&e.id?.toLowerCase().includes(s));return t.filterIncludeNegate?!o:o}return!0}function FA(e){let t=cr();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(ge(o)));if(t.filterComment){let r=n(o=>!!o?.comment);if(t.filterComment==="with"?!r:r)return!1}if(t.filterFix){let r=e.some(o=>!!(ge(o)?.fix||tn(o)));if(t.filterFix==="with"?!r:r)return!1}if(t.filterFlagged){let r=n(o=>o?.flagged===!0);if(t.filterFlagged==="with"?!r:r)return!1}return!0}function LA(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function F0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function og(e){if(F0())return!1;let t=Ct(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=tg(o);s&&n.add(s);let i=LA(o);i&&r.add(i)}return n.size>1||r.size>1}function sg(e){if(!F0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function Zm(e){return e.some(t=>t.isSecurity===!0)}function L0(e){return e.some(Zm)&&e.some(t=>!Zm(t))}function O0(e){return e.filter(t=>t.some(E0)).map(Ct)}function rd(e){let t=!c.currentWorkspace&&cr().filterDuplicates,n=t?ed():null,r=cr().filterCrossContext,o=cr().filterAppStacked,s=cr().filterSecurity;return e.filter(i=>i.some(EA)&&FA(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===og(i))&&(!o||o==="with"===sg(i))&&(!s||s==="with"===Zm(i)))}function _0(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let s=r[e]??n,i=o[e]??n;return(t==="desc"?i-s:s-i)||r.file.localeCompare(o.file)}}function N0(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,s=r.confidence===void 0&&r.critical===!0,i=n.confidence??(o?10:t),a=r.confidence??(s?10:t);return(e==="desc"?a-i:i-a)||(o===s?0:o?-1:1)||n.file.localeCompare(r.file)}}var R0=N0("desc"),OA={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||R0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":R0,"confidence-asc":N0("asc"),"priority-desc":_0("priority","desc"),"priority-asc":_0("priority","asc")};function B0(e){let t=OA[c.sortBy];if(!t)return[...e];if(c.sortBy==="priority-desc"||c.sortBy==="priority-asc"){let n=c.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:A0(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||An(o.g).file.localeCompare(An(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function D0(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function P0(e,t,n){let r=D0(t);if(!e._revalidationCopies){let o=D0(e);if(Object.keys(o).length===0&&Object.keys(r).length===0)return[];e._revalidationCopies=Object.keys(o).length>0?[{reportName:e._reportName??"",fields:o}]:[]}return Object.keys(r).length>0&&e._revalidationCopies.push({reportName:n,fields:r}),e._revalidationCopies}function OW(e){let t=new Map,n=new Set($w);for(let{reportName:r,fields:o}of e)for(let[s,i]of Object.entries(o)){if(i==null)continue;let a=s==="revalidate"?Be(o)||String(i).trim().toLowerCase():String(i).trim();if(s==="revalidate"&&!a||s==="revalidate"&&!n.has(a))continue;t.has(s)||t.set(s,new Map);let l=t.get(s);l.has(a)||l.set(a,new Set),l.get(a).add(r)}return[...t].filter(([,r])=>r.size>1).map(([r,o])=>({field:r,variants:[...o].map(([s,i])=>({value:s,reports:[...i]}))}))}var NA=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function z0(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||NA.has(r)||o==null)continue;if(r==="revalidate"){let i=Be(t);if(!i)continue;let a=Be(e);a?a!==i&&(n=!0):e[r]=o;continue}let s=e[r];if(s==null){e[r]=o;continue}r.startsWith("revalidate")&&String(s).trim()!==String(o).trim()&&(n=!0)}return n}function ig(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:ai(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:ai(t),reason:t.correctedSeverityReason});let o=P0(e,t,n);(z0(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function la(e,t=null){let n=t??e.filter(d=>d.isApp),r=e.filter(d=>!d.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(d=>d.isApp))return[e];if(r.some(d=>typeof d.id!="string"||!d.id))return[e];let o=new Set(r.map(d=>d.id)),s=new Map,i=new Set;for(let d of n){let f=d.revalidateInputs===void 0?[]:d.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(d,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(d=>[d,d])),l=d=>{let f=d;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(d)!==f;){let m=a.get(d);a.set(d,f),d=m}return f};for(let d of s.values()){if(d.length===0)continue;let f=l(d[0]);for(let m of d)a.set(l(m),f)}let p=new Map;for(let d of e){let f=s.get(d),m=f?f.length>0?l(f[0]):d:l(d.id);p.has(m)||p.set(m,[]),p.get(m).push(d)}return p.size===1?[e]:[...p.values()]}function od(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let s=[],i=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let v of w.groups){for(let $ of v)$.id&&["refuted","unreachable"].includes(Be($))&&i.add($.id);let x=n?v.filter($=>$.isUpstream&&Be($)!=="revalidation").map(W0):t?r?v.filter($=>!["refuted","unreachable"].includes(Be($))):v:v.filter($=>Be($)!=="revalidation").map(W0),k=x.length===v.length&&x.every(($,S)=>$===v[S])?v:x;k.length>0&&s.push({group:k,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:k.some($=>$.isApp)})}}let a=s.map((y,w)=>w),l=s.map(y=>y.hasApp),p=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let v=a[y];a[y]=w,y=v}return w},d=(y,w)=>{y=p(y),w=p(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<s.length;y++)for(let w of s[y].group)w.id&&(f.has(w.id)||f.set(w.id,[]),f.get(w.id).push({index:y,app:w.isApp}));for(let y of f.values()){let w=new Map,v=y.find(x=>x.app);for(let{index:x}of y){v&&d(v.index,x);let k=s[x].reportIndex;w.has(k)?d(w.get(k),x):w.set(k,x)}}for(let y of f.values()){let w=null;for(let{index:v}of y)l[p(v)]||(w===null?w=v:d(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:x}of f.get(v)??[])w===null?w=x:d(w,x)}let m=new Map;for(let y=0;y<s.length;y++){let w=p(y);m.has(w)||m.set(w,[]),m.get(w).push(s[y])}let h=new Map,b=[];for(let y of m.values()){let w=y[0].group,v=w.map(R=>R.id).filter(Boolean);if(y.length===1&&new Set(v).size===v.length&&o.length===0){let R=e.length>1&&w.find(L=>L.isApp);if(R){let L=[...w];L.workspaceKey=R.id??String(R._id),b.push(...ag(y,L,t,n))}else b.push(...ag(y,w,t,n));continue}let x=new Map,k=new Map,$=[];for(let{group:R,reportName:L}of y)for(let A of R)if(A.id&&k.has(A.id))ig(k.get(A.id),A,L,x);else{let E={...A,_reportName:A._reportName??L};A.id&&k.set(A.id,E),$.push(E)}let S=new Set;for(let R of o)for(let L of R)k.has(L)&&S.add(L);for(let{group:R}of y)if(R.length>1)for(let L of R)L.id&&S.add(L.id);let C=[...S].map(R=>k.get(R));for(let R of $)S.has(R.id)||C.push(R);if(e.length>1){let R=C.find(L=>L.isApp);R&&(C.workspaceKey=R.id??String(R._id))}b.push(...ag(y,C,t,n));for(let[R,L]of x){let A=h.get(R);h.set(R,A?{finding:A.finding,copies:[...A.copies,...L.copies]}:L)}}return Object.defineProperty(b,"ruledOutIds",{value:i,configurable:!0}),{groups:b,conflicts:h}}function ag(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(d=>d.sourceGroup),i=la(s);if(i.length===1)return[t];let a=[],l=new Set;for(let d of i){let f=new Set(d.filter(h=>!h.isApp&&h.id).map(h=>h.id)),m=t.filter(h=>f.has(h.id));if(m.length>0){a.push(m);for(let h of m)l.add(h.id)}}let p=new Set(t.map(d=>d.id).filter(Boolean));return l.size===p.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return la(t,o)}function W0(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}var fo=null,lg=0;function ys(){return c.currentView==="links"&&fo?.owner===c.currentLinks?fo:null}function H0(){lg++,fo=null}async function qW(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++lg;fo={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===lg&&c.currentView==="links"&&c.currentLinks===o;try{if(_()){let h=Qt([e]).find(b=>b.report===t&&(!r||b.managedReportId===r)&&(n==null||b.index===Number(n)));if(!h)throw new Error("This finding is no longer in the report.");fo={owner:o,id:e,reportName:t,group:h.members.map(b=>({...b})),error:""},c.activeTabByGroup.set(h.members[0].id,e);return}let a=await $t(await fe(t));if(!i())return;let l=(yn(a?.data)??[]).map(h=>Array.isArray(h)?h:[h]),p=h=>h?.some(b=>String(b?.id)===e),d=p(l[n])?l[n]:l.find(p);if(!d)throw new Error("This finding is no longer in the report.");let{data:f}=a,m=d.filter(h=>h?.id).map(h=>{let b={...h,_reportName:t,_repoFallback:De(f)??Ze(t),_repoDirectory:Ft(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Po(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});await Promise.all([ao(),dt("report",t),...ji(t).map(h=>dt("workspace",h.id))]),i()&&(Gn([m],{linkedIds:gt,knownRows:h=>[...Qt(h),...c.reports.flatMap(b=>b.groups??[]).filter(b=>b.some(y=>h.includes(y.id))).map(b=>({members:b}))]}),fo.group=m,c.activeTabByGroup.set(m[0].id,e))}catch(a){i()&&(fo.error=a.message||"Unable to load this finding.")}}function sd(e,t,n,r=n){let o=e.map((f,m)=>m),s=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},i=e.map(n),a=new Map;for(let f=0;f<i.length;f++)for(let m of i[f])m.id&&(a.has(m.id)||a.set(m.id,[]),a.get(m.id).push(f));for(let[f,m]of a)for(let h of t(f))if(h!==f)for(let b of m)for(let y of a.get(h)??[]){let w=s(b),v=s(y);w!==v&&(o[v]=w)}let l=new Map;for(let f=0;f<e.length;f++){let m=s(f);l.has(m)||l.set(m,[]),l.get(m).push(f)}if(l.size===e.length)return e;let p=f=>f.id??String(f._id),d=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let m=new Map;for(let w of f)for(let v of r(e[w]))m.has(p(v))||m.set(p(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(p(v))||h.set(p(v),m.get(p(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??p(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(d,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),d}function ie(e){return e.workspaceKey??j(e[0])}function id(e){return Array.isArray(e)?e:[e]}function po(){return c.revalidationDetailed===!0}function BA(e){return e?._reportName??""}var U0=null,V0=!0;function DA(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==U0&&(U0=e,V0=zl(e)),V0)}function dr(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!DA()}function PA(){let e=c.managedSession;return _()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return dr(e)&&!PA()}function ge(e){if(!dr(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,qo())?{...t,triage:void 0}:t;if(!_())return n;let r=c.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
12
+
13
+ `)}}function zA(e){return dr(e)&&(Te(e,c.triage.get(j(e)),qo())==="ignored"||ct(e,qo())&&Hr(c.triage,j(e),BA(e)))}function ca(e,t=ge(e)){if(dr(e))return Te(e,t,qo())??(zA(e)?"ignored":void 0)}function Ct(e){return ys()?.group===e?e:e.linkedTabs?e.linkedTabs:po()?e:j0(e)}function j0(e){return e.length<=1||!e.some($i)?e:e.filter($i)}function ur(e){let t=Ct(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=$i(n)?1:0,s=$i(r)?1:0;if(o!==s)return s-o;let i=ge(n)?.color?1:0,a=ge(r)?.color?1:0;if(i!==a)return a-i;let l=_e[de(n,c.severityMode)]||0,p=_e[de(r,c.severityMode)]||0;if(l!==p)return p-l;let d=n.confidence??-1;return(r.confidence??-1)-d})}function An(e){return e.length===1?e[0]:ur(e)[0]}function G0(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function WA(e){let t=ge(e);return!!t?.comment||!!(t?.fix||tn(e))||t?.flagged===!0}function je(e){if(e.length===1)return e[0];let t=ur(e);if(t.length===1)return t[0];let n=c.activeTabByGroup.get(ie(e));if(n){let o=t.find(s=>j(s)===n);if(o)return o}let r=t;if(c.filterAnalyzer||c.filterModel){let o=t.filter(eg);o.length>0&&(r=o)}return r.find(WA)??r[0]}function K0(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:K0(e),directory:e?._repoDirectory??""}}function q0(e){for(let t of Zt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||K0(e)||null}function ws(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Fe(e){let t=ws(e),n=0,r=!1,o,s=!1,i=!1,a,l=!1,p=null,d=!1,f=!0;for(let w of t){let v=ge(w),x=ca(w,v),k=v?.color;k===void 0&&x===void 0||(n++,k!==void 0&&(s?k!==o&&(r=!0):(s=!0,o=k)),l?x!==a&&(i=!0):(l=!0,a=x),x?(p===null&&(p=x),x==="ignored"&&v?.triage!=="ignored"?f=!1:d=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&p!==null?p:null;return{hasConflict:m,commonColor:h,anyTriage:d,allTriaged:b,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function c6(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(_t);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>HA(o,r))}function HA(e,t){if(!_t(e))return!1;let n=(ge(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function d6(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:da(e,n),clearing:t==="restore"||cg(e,n)===t}}function da(e,t=Fe(e)){let n=ws(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[je(e)]:n;return r.every(_t)?r:r.filter(_t)}function cg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&ws(e)!==e||!t.hasConflict?t.commonTriage??null:ca(n??je(e))??null}function u6(e){let t=ws(e);if(t.length<2)return!1;let r=Fe(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>ge(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!_t(s))continue;let i=j(s),a=c.triage.get(i);ca(s,a)!==r&&(r==="ignored"&&ct(s,qo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var ht=null;function pr(){ht=null}function ad(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,s=_();(!ht||ht.reports.length!==r.length||ht.reports.some((a,l)=>a!==r[l])||ht.merges!==o||ht.mergeCount!==o.length||ht.securityLinksTick!==c.linksTick||ht.findingIndexTick!==c.findingIndexTick||ht.managed!==s)&&(Gn(r.flatMap(a=>a.groups??[]),{linkedIds:gt,knownRows:Qt}),ht={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick});let i=t?"upstream":e?n?"workspace-app":"app":"code";return ht[i]||(ht[i]=od(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ht[i]}function Y0(){return ad(c.showRevalidation!==!1).groups}function dg(){return ad(!0).groups}function X0(){return ad(!0,!1,!!c.currentWorkspace).conflicts}function fr(){let e=ad(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=po();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=sd(t,gt,j0,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return po()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(s=>!Xr(s));return o.length===r.length?[r]:o.length===0?[]:(o.workspaceKey=ie(r),[o])});return Object.defineProperty(n,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),n})()}function mo(){let e=fr();if(c.viewMode==="kanban")return e;let t=e.filter(n=>Fe(n).commonTriage===c.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function p6(e){if(c.showRevalidation||c.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(j)),n=new Map;for(let r of dg())for(let o of la(r))if(o.some(s=>t.has(j(s))))for(let s of o)n.set(j(s),s);return n.size===e.length&&e.every(r=>n.get(j(r))===r)?e:n.size>0?[...n.values()]:e}function f6(e){let t=ys()?.group;if(t&&ie(t)===e)return t;for(let n of fr())if(ie(n)===e)return n;return null}var ld=class extends Et{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Rn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Rn(r=>{if(!r){n(),this._dispose===n&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=n,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};var pg=Pr;function J0(e){return e==null?"(none)":pg[e]??e}function Z0(e){return e??"(no model)"}var ug=class extends ld{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,n=this.models.length>1;if(!t&&!n)return g;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===hs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===bs?null:c.filterModel,s=new Map,i=new Map;for(let f of this.groups){let m=new Set,h=new Set;for(let b of f){let y=b._analyzer??null,w=ia(b);(o===void 0||w===o)&&m.add(y),(r===void 0||y===r)&&h.add(w)}for(let b of m)s.set(b,(s.get(b)??0)+1);for(let b of h)i.set(b,(i.get(b)??0)+1)}let a=r===void 0?null:J0(r),l=o===void 0?null:Z0(o),p=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),d=a!=null||l!=null;return u`<button type="button" class="${q({"analyzer-btn":!0,active:d})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${p}`}"><span class="analyzer-btn-label">${p}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:hs,labelOf:J0,counts:s,current:c.filterAnalyzer}):g} ${t&&n?u`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:bs,labelOf:Z0,counts:i,current:c.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:l}){return u`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${n}</div><button type="button" aria-pressed="${String(l==="")}" class="${q({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(p=>{let d=p??s,f=a.get(p)??0,m=l===d;return u`<button type="button" aria-pressed="${String(m)}" class="${q({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,d)}"><span class="analyzer-menu-label">${i(p)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?c.filterAnalyzer:c.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:c.filterAnalyzer,model:t==="model"?o:c.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),n=this.querySelector(".analyzer-btn");if(!t||!n)return;let r=n.getBoundingClientRect(),o=t.offsetWidth||240,s=t.offsetHeight||200,i=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+i;l+s>window.innerHeight-4&&r.top>s+i&&(l=r.top-s-i),t.style.top=`${l}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",ug);var cd=["type","model","effort","exportsMode"],Q0=["security","correctness"],UA=["max","xhigh","high","medium","low","minimal"],VA=["list","isolate"];function fg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var jA={type:e=>e==="terminal"?Q0.length+2:fg(Q0,e),model:e=>e==null?1:0,effort:e=>fg(UA,e),exportsMode:e=>fg(VA,e)};function GA(e,t,n){for(let r of n){let o=jA[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function ex(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function KA(e,t){let n=t.filter(s=>s!=="exportsMode"),r=[],o=new Map;for(let s of e){if(s.exportsMode==null){r.push({...s});continue}let i=n.map(p=>s[p]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let l={...s};o.set(i,l),r.push(l)}return r}function tx(e,t=cd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?cl(m.model)??null:m[y]??null;let b=t.map(y=>h[y]??"").join("|");n.has(b)||n.set(b,h)}let r=[...n.values()].toSorted((m,h)=>GA(m,h,t));if(r.length===0)return[];let o={};for(let m of t)o[m]=new Set(r.map(h=>h[m])).size===1;let s=t.filter(m=>!o[m]),i=s.includes("exportsMode")?KA(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,l=["model","effort"].filter(m=>t.includes(m)&&o[m]),p=[...l,...t.filter(m=>!l.includes(m))],d=[],f=!1;for(let m of p)if(o[m]){let h=ex(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>ex(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function nx(e=!1,t=""){let n=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(r=>r.trim()).filter(r=>{let o=r.toLowerCase();return!r||n.has(o)?!1:(n.add(o),!0)})}var dd=null;function qA(){return dd||(dd=(async()=>await import("./prism.js"))(),dd)}var rx=1024*1024;function YA(e){return e.length<=rx&&wn(e)<=rx}var XA={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"};function ox(e){return typeof e!="string"?null:XA[e.toLowerCase()]??null}async function vs(e,t,n=null){if(!t||!YA(e))return null;try{return(await qA()).highlight(e,t,n)}catch{return null}}function B6(e){let t=[],n=[],r="",o=0;for(;o<e.length;){let s=e.indexOf("<",o),a=(s===-1?e.slice(o):e.slice(o,s)).split(`
14
+ `);r+=a[0];for(let d=1;d<a.length;d++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[d]}if(s===-1)break;let l=e.indexOf(">",s);if(l===-1){r+=e.slice(s);break}let p=e.slice(s,l+1);p.startsWith("</")?n.pop():n.push({open:p,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(p)?.[1]??"span"}>`}),r+=p,o=l+1}return t.push(r),t}var mg=new Map,gg=new Set,hg=!1;function JA(){hg||(hg=!0,queueMicrotask(()=>{hg=!1,c.codeBlockTick++,O()}))}function bg(e,t){let n=ox(t);if(!n||!e)return null;let r=`${n}\0${e}`;return mg.has(r)?mg.get(r):(gg.has(r)||(gg.add(r),(async()=>{let o=await vs(e,n);mg.set(r,o??null),gg.delete(r),JA()})()),null)}var ud=null,pd=null;function ZA(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function QA(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function eE(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let n=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;n&&n.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}var sx="./brotli-fallback.js",fd=Symbol("brotli worker unavailable"),sn=null,yg=!1,tE=0,$s=new Map;function nE(){return pd||(pd=(async()=>await import(sx))(),pd)}function wg(){yg=!0,sn&&(sn.terminate(),sn=null);let e=[...$s.values()];$s.clear();for(let t of e)t.resolve(fd)}function rE(e){let{id:t,bytes:n,error:r}=e.data??{},o=$s.get(t);o&&($s.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function oE(){if(sn)return sn;if(yg||typeof Worker>"u")return null;try{sn=new Worker(new URL(sx,import.meta.url),{type:"module"})}catch{return yg=!0,null}return sn.addEventListener("message",rE),sn.addEventListener("error",wg),sn.addEventListener("messageerror",wg),sn}function sE(e){let t=oE();return t?new Promise((n,r)=>{let o=++tE;$s.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{$s.delete(o),wg(),n(fd)}}):Promise.resolve(fd)}async function iE(){await eE();let e=ZA();return e?{kind:"native",format:e}:{kind:"fallback"}}function ix(){return ud||(ud=iE(),ud)}async function ax(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await ix();if(n(),r.kind==="native")return QA(r.format,e);let o=await sE(e);return n(),o!==fd?o:(await nE()).brotliDecompress(e)}ix().catch(()=>{});var lx=0,vg=new AbortController;function me(){return lx}function Le(){return vg.signal}function Oe(){return vg.abort(),vg=new AbortController,++lx}var aE=new Map,lE=new Map,ua=new Map,md=new WeakMap;async function $g(e){try{let t=await Gp(e);return t?hi(t,e):null}catch{return null}}var mr=null;function tH(e){let t=new Map(e.filter(n=>n&&!n.error).map(n=>[n.integrity,n]));return mr=t.size>0?{bundles:t}:null,mr}function nH(e){mr===e&&(mr=null)}function kg(e,t=()=>!0){let n=mr?.bundles.get(e);return!n||!t(n)?null:(mr.bundles.delete(e),mr.bundles.size===0&&(mr=null),n)}function go(e,t,{sources:n=!0}={}){if(!t.managedId&&_())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?aE:lE,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",s=c.bundleDetails;if(s?.integrity===e&&s.kind===o&&s.managedId===t.managedId&&!s.error&&(!n||!s.metadataOnly))return Promise.resolve(s);let i=kg(e,f=>f.kind===o&&f.managedId===t.managedId&&(!n||!f.metadataOnly));if(i)return Promise.resolve(i);let a=`${t.managedId??"local"}:${e}:${o}`,l=t.managedId&&n?Le():void 0,p=r.get(a);if(p&&p.signal===l)return p.job;let d=(async()=>{if(t.managedId)try{let h=n?hp(await qk(t.managedId,{signal:l}),{integrity:e,kind:o,size:t.size}):hi(await Dc(t.managedId),e);return h.managedId=t.managedId,h}catch(h){if(h.name==="AbortError")throw h;return{integrity:e,kind:o,size:t.size,managedId:t.managedId,error:h.message}}if(!n){let h=await $g(e);return h?.kind===o&&!h.stale?h:go(e,t)}let[f,m]=await Promise.all([cE(e,t),$g(e)]);if(!f.error){let h=m?.kind===f.kind&&!m.stale;h&&(f.fileHashes=m.fileHashes,f.fileSizes=m.fileSizes,f.lineCounts=m.lineCounts),h||nv(f).then(b=>Kp(e,b)).catch(()=>{})}return f})();return r.set(a,{job:d,signal:l}),d.finally(()=>{r.get(a)?.job===d&&r.delete(a)}).catch(()=>{}),d}function gr(e,t=c.currentView==="bundles"?c.bundleDetailsTab:"overview",{workspaceId:n=null}={}){let r=c.bundleDetails,o=c.bundleCodeFileRequest,s=o?.bundle===c.selectedBundle&&(!r||r.metadataOnly===!0&&!r.sourceError),i=c.currentView==="bundles"&&c.bundleDetailsTab==="code"&&t==="code"?c.bundleSourceFile??(s?o.path:null):null;Oe(),c.currentView="bundles",c.selectedBundle=e,c.selectedBundleWorkspace=n,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleCodeHistory=null,c.bundleCodeFileRequest=i?{bundle:e,path:i}:null,c.bundleCompare=null,c.bundleSourceFindingIdx=null,c.bundleCodeSearchQuery="",c.bundleCodeSearchMode="files",c.bundleSearchQuery="",c.bundleSearchRegex=!1,c.bundleSearchCase=!1,c.bundleSearchContext=!0,c.bundleDetailsTab=t??"overview",ee.showAll=!0,c.shownTriage=null}function rH(e,{preserveSource:t=!1}={}){Xn(c.bundleDetailsTab,c.bundleSourceFile)&&!Xn(e,t?c.bundleSourceFile:null)&&Oe(),c.bundleDetailsTab=e,c.bundleCodeFileRequest=null,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function cE(e,t){try{let n=await _n(e);if(_())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r)return hp(Ur(n),{integrity:e,kind:o,size:n.byteLength});let s=Ur(await ax(n,()=>!_())),i=Yw.parse(s);return{integrity:e,kind:o,size:n.byteLength,bundle:i}}catch(s){if(s.name==="AbortError")throw s;return{integrity:e,kind:o,size:n.byteLength,error:s.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function dE(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Fi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Tl(e);if(Fi(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,O()}catch{}})()}}function uE(e){if(kf(e))return Promise.resolve();if(ua.has(e))return ua.get(e);let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await $g(e);if(!(!r?.json&&!r?.bundle))try{let o=await Tl(r);Fi(e,o)}catch{}})();return ua.set(e,n),n.finally(()=>{ua.get(e)===n&&ua.delete(e)}).catch(()=>{}),n}async function xg(e,t=()=>!0){let n=new Set(e);if(n.size!==0){await new Promise(r=>{let o=()=>setTimeout(r,0);typeof requestAnimationFrame=="function"?requestAnimationFrame(o):o()});for(let r of n){if(!t())return;await uE(r)}}}async function gd(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await go(e,t,{sources:Xn(c.bundleDetailsTab,c.bundleSourceFile)})}catch(r){if(r.name==="AbortError")return;throw r}c.selectedBundle!==e||t.managedId&&!c.bundles.includes(t)||(c.bundleDetails=n,O(),dE(n),t.managedId||xt().catch(()=>{}))}function Sg(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Le():void 0,n=md.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=go(e.integrity,r).then(s=>(t?.throwIfAborted(),c.bundleDetails!==e?s:s.error&&e.managedId?(e.sourceError=s.error,O(),null):(s.error||(s.fileHashes=e.fileHashes,s.fileSizes=e.fileSizes,s.lineCounts=e.lineCounts,s.codeStats=e.codeStats,e.edges&&(s.edges=e.edges)),c.bundleDetails=s,O(),s))).catch(s=>{if(s.name==="AbortError")return null;throw s});return md.set(e,{job:o,signal:t}),o.finally(()=>{md.get(e)?.job===o&&md.delete(e)}).catch(()=>{}),o}var hd=new WeakMap,cx=new WeakMap;function ks(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function dx(e){let t=new Map;for(let n of e.keys()){let r=ks(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function pE(e,t,n,r){let o=ks(n);if(o===null)return null;let s=typeof r=="string"?ks(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=cx.get(e);for(a||(a=new Map,cx.set(e,a));;){if(i.endsWith("node_modules/"))return null;let l=`${i}package.json`;if(t.has(l)){if(!a.has(l)){let d=e.get(t.get(l)),f=null;try{f=typeof d=="string"?JSON.parse(d.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(l)}}if(l===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let p=i.slice(0,-1);i=p.slice(0,p.lastIndexOf("/")+1)}}function fE(e,t){if(!e)return null;if(Object.hasOwn(e,t)&&!t.includes("*"))return{value:e[t],wildcard:null};let n=null;for(let r of Object.keys(e)){let o=r.indexOf("*");if(!r.startsWith("#")||o===-1||r.indexOf("*",o+1)!==-1)continue;let s=r.slice(0,o),i=r.slice(o+1);t.length<=s.length+i.length||!t.startsWith(s)||!t.endsWith(i)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:i})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function px(e,t,n=0){return n>16?[null]:typeof e=="string"?[t===null?e:e.replaceAll("*",t)]:e&&typeof e=="object"?Object.values(e).flatMap(r=>px(r,t,n+1)):[null]}function mE(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=ks(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&ks(s+f)===a&&l.add(f);let p=!1,d=null;for(let f of l){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||p&&m!==d)return null;p=!0,d=m}return p?d:i?r.get(a)??null:null}function gE(e,t,n,r,o,s){let i=fE(e?.imports,t);if(!i)return null;let a=px(i.value,i.wildcard),l=null;for(let p of a){let d=mE(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function Cg(e,t=Lt(e)){let n=new Map;if(e?.kind==="stasis")for(let r of e.bundle?.imports?.values()??[])for(let[o,s]of r){if(!t.has(o))continue;n.has(o)||n.set(o,new Map);let i=n.get(o);for(let[a,l]of s){let p=typeof l=="string"&&t.has(l)?l:null;i.set(a,i.has(a)&&i.get(a)!==p?null:p)}}else if(e?.kind==="sourcemap")for(let[r,o]of Xw(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function bd(e,t,n=null,r=e,o=null){let s=hd.get(e);s||(s=dx(e),hd.set(e,s));let i=hd.get(r);i||(i=dx(r),hd.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?pE(r,i,t,o?.get(t)):null;return d=>{if(typeof d!="string"||/\p{Cc}/u.test(d))return null;if(a?.has(d)){let h=a.get(d);return typeof h=="string"&&e.has(h)?h:null}if(d.startsWith("#"))return gE(p,d,e,s,a,l);if(!d.startsWith("./")&&!d.startsWith("../"))return null;let f=d.slice(d.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get(ks(l+d))??null}}var ux=new WeakMap;function _g(e,t){let n=Lt(e),r=ux.get(n);return r||(r={imports:Cg(e,n),packageDirs:Ot(e)},ux.set(n,r)),bd(n,t,r.imports,we(e),r.packageDirs)}var mx=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u2800\u3000\p{Cf}\p{Cs}\p{Co}\p{Cn}\p{Default_Ignorable_Code_Point}]/u,yd=new RegExp(mx.source,"gu"),hE=new Map(`
15
+ 0000 NUL NULL
16
+ 0001 SOH START OF HEADING
17
+ 0002 STX START OF TEXT
18
+ 0003 ETX END OF TEXT
19
+ 0004 EOT END OF TRANSMISSION
20
+ 0005 ENQ ENQUIRY
21
+ 0006 ACK ACKNOWLEDGE
22
+ 0007 BEL BELL
23
+ 0008 BS BACKSPACE
24
+ 000B VT LINE TABULATION
25
+ 000C FF FORM FEED
26
+ 000D CR CARRIAGE RETURN
27
+ 000E SO SHIFT OUT
28
+ 000F SI SHIFT IN
29
+ 0010 DLE DATA LINK ESCAPE
30
+ 0011 DC1 DEVICE CONTROL ONE
31
+ 0012 DC2 DEVICE CONTROL TWO
32
+ 0013 DC3 DEVICE CONTROL THREE
33
+ 0014 DC4 DEVICE CONTROL FOUR
34
+ 0015 NAK NEGATIVE ACKNOWLEDGE
35
+ 0016 SYN SYNCHRONOUS IDLE
36
+ 0017 ETB END OF TRANSMISSION BLOCK
37
+ 0018 CAN CANCEL
38
+ 0019 EM END OF MEDIUM
39
+ 001A SUB SUBSTITUTE
40
+ 001B ESC ESCAPE
41
+ 001C FS FILE SEPARATOR
42
+ 001D GS GROUP SEPARATOR
43
+ 001E RS RECORD SEPARATOR
44
+ 001F US UNIT SEPARATOR
45
+ 007F DEL DELETE
46
+ 0080 PAD PADDING CHARACTER
47
+ 0081 HOP HIGH OCTET PRESET
48
+ 0082 BPH BREAK PERMITTED HERE
49
+ 0083 NBH NO BREAK HERE
50
+ 0084 IND INDEX
51
+ 0085 NEL NEXT LINE
52
+ 0086 SSA START OF SELECTED AREA
53
+ 0087 ESA END OF SELECTED AREA
54
+ 0088 HTS CHARACTER TABULATION SET
55
+ 0089 HTJ CHARACTER TABULATION WITH JUSTIFICATION
56
+ 008A VTS LINE TABULATION SET
57
+ 008B PLD PARTIAL LINE FORWARD
58
+ 008C PLU PARTIAL LINE BACKWARD
59
+ 008D RI REVERSE LINE FEED
60
+ 008E SS2 SINGLE SHIFT TWO
61
+ 008F SS3 SINGLE SHIFT THREE
62
+ 0090 DCS DEVICE CONTROL STRING
63
+ 0091 PU1 PRIVATE USE ONE
64
+ 0092 PU2 PRIVATE USE TWO
65
+ 0093 STS SET TRANSMIT STATE
66
+ 0094 CCH CANCEL CHARACTER
67
+ 0095 MW MESSAGE WAITING
68
+ 0096 SPA START OF GUARDED AREA
69
+ 0097 EPA END OF GUARDED AREA
70
+ 0098 SOS START OF STRING
71
+ 0099 SGC SINGLE GRAPHIC CHARACTER INTRODUCER
72
+ 009A SCI SINGLE CHARACTER INTRODUCER
73
+ 009B CSI CONTROL SEQUENCE INTRODUCER
74
+ 009C ST STRING TERMINATOR
75
+ 009D OSC OPERATING SYSTEM COMMAND
76
+ 009E PM PRIVACY MESSAGE
77
+ 009F APC APPLICATION PROGRAM COMMAND
78
+ 00A0 NBSP NO-BREAK SPACE
79
+ 00AD SHY SOFT HYPHEN
80
+ 034F CGJ COMBINING GRAPHEME JOINER
81
+ 061C ALM ARABIC LETTER MARK
82
+ 115F HCF HANGUL CHOSEONG FILLER
83
+ 1160 HJF HANGUL JUNGSEONG FILLER
84
+ 1680 OSM OGHAM SPACE MARK
85
+ 17B4 KIVAQ KHMER VOWEL INHERENT AQ
86
+ 17B5 KIVAA KHMER VOWEL INHERENT AA
87
+ 180E MVS MONGOLIAN VOWEL SEPARATOR
88
+ 2000 NQSP EN QUAD
89
+ 2001 MQSP EM QUAD
90
+ 2002 ENSP EN SPACE
91
+ 2003 EMSP EM SPACE
92
+ 2004 3/MSP THREE-PER-EM SPACE
93
+ 2005 4/MSP FOUR-PER-EM SPACE
94
+ 2006 6/MSP SIX-PER-EM SPACE
95
+ 2007 FSP FIGURE SPACE
96
+ 2008 PSP PUNCTUATION SPACE
97
+ 2009 THSP THIN SPACE
98
+ 200A HSP HAIR SPACE
99
+ 200B ZWSP ZERO WIDTH SPACE
100
+ 200C ZWNJ ZERO WIDTH NON-JOINER
101
+ 200D ZWJ ZERO WIDTH JOINER
102
+ 200E LRM LEFT-TO-RIGHT MARK
103
+ 200F RLM RIGHT-TO-LEFT MARK
104
+ 2028 LS LINE SEPARATOR
105
+ 2029 PS PARAGRAPH SEPARATOR
106
+ 202A LRE LEFT-TO-RIGHT EMBEDDING
107
+ 202B RLE RIGHT-TO-LEFT EMBEDDING
108
+ 202C PDF POP DIRECTIONAL FORMATTING
109
+ 202D LRO LEFT-TO-RIGHT OVERRIDE
110
+ 202E RLO RIGHT-TO-LEFT OVERRIDE
111
+ 202F NNBSP NARROW NO-BREAK SPACE
112
+ 205F MMSP MEDIUM MATHEMATICAL SPACE
113
+ 2060 WJ WORD JOINER
114
+ 2061 FA FUNCTION APPLICATION
115
+ 2062 IT INVISIBLE TIMES
116
+ 2063 IS INVISIBLE SEPARATOR
117
+ 2064 IP INVISIBLE PLUS
118
+ 2066 LRI LEFT-TO-RIGHT ISOLATE
119
+ 2067 RLI RIGHT-TO-LEFT ISOLATE
120
+ 2068 FSI FIRST STRONG ISOLATE
121
+ 2069 PDI POP DIRECTIONAL ISOLATE
122
+ 2800 BLANK BRAILLE PATTERN BLANK
123
+ 3000 IDSP IDEOGRAPHIC SPACE
124
+ 3164 HF HANGUL FILLER
125
+ FEFF BOM ZERO WIDTH NO-BREAK SPACE
126
+ FFA0 HWHF HALFWIDTH HANGUL FILLER
127
+ E0001 LANG LANGUAGE TAG
128
+ E0020 SP TAG SPACE
129
+ E007F CANCEL CANCEL TAG
130
+ `.trim().split(`
131
+ `).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),pa=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function gx(e){let t=hE.get(e);if(t)return{label:t.label,title:`${pa(e)} ${t.name}`};if(e>917536&&e<917631){let r=String.fromCodePoint(e-917504);return{label:r,title:`${pa(e)} TAG ${r}`}}let n=e>=65024&&e<=65039?e-65024+1:e>=917760&&e<=917999?e-917760+17:0;return n?{label:`VS${n}`,title:`${pa(e)} VARIATION SELECTOR-${n}`}:{label:pa(e),title:`${pa(e)} ${vE(e)}`}}var bE=/\p{Cf}/u,yE=/\p{Default_Ignorable_Code_Point}/u,wE=/\p{Cn}/u;function vE(e){if(e>=55296&&e<57344)return"lone surrogate";if((e&65534)===65534||e>=64976&&e<=65007)return"noncharacter";if(e>=57344&&e<=63743||e>=983040)return"private use character";let t=String.fromCodePoint(e);return bE.test(t)?"format character":yE.test(t)&&!wE.test(t)?"invisible character":"unassigned code point"}function hx(e,t){let n=[];yd.lastIndex=0;for(let r=yd.exec(e);r;r=yd.exec(e)){let o=r[0].codePointAt(0),s=hv(e,r.index,o,t);s===-1?n.push([r.index,o]):yd.lastIndex=s}return n}function xs(e){return mx.test(e)}var $E=e=>{let{label:t,title:n}=gx(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function bx(e,t=!1){if(!xs(e))return[e];let n=[],r=0;for(let[o,s]of hx(e,t))o>r&&n.push(e.slice(r,o)),n.push($E(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var fx=e=>e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;");function wd(e,t=!1){if(!xs(e))return e;let n="",r=[];for(let a=0;a<e.length;){let l=e.indexOf("<",a),p=l===-1?e.length:l;if(p>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,p)),l===-1)break;let d=e.indexOf(">",l);a=d===-1?e.length:d+1}let o="",s=0,i=0;for(let[a,l]of hx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=gx(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${fx(f)}">${fx(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function vd(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}var kE=[];function Rg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!vd(e[0],n))return{stack:kE,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function uH({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(vd(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function pH(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function yx(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),s=r.top-n+e.scrollTop,i=o.bottom-n+e.scrollTop,a=s+(i-s)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,s-r.height)),behavior:"instant"})}var fa=new Map,Mg=new Map,xE=new Set,wx=new WeakMap,Tg=new Set;function vx(e,t,n,r,o,s=Mg,i=xE){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let l=mi(t,r,n);if(!l){s.set(a,null);return}i.add(a),(async()=>{let p=await vs(n,l,o);s.set(a,typeof p=="string"?wd(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function SE(e){let t=fa.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){fa.set(e,{sources:null,loading:!0,error:null});try{let r=await go(e,n),o=Lt(r);fa.set(e,{sources:o,packageFiles:we(r),packageDirs:Ot(r),imports:Cg(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){fa.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(O),queueMicrotask($x)}}function $x(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&yx(e[0].closest(".focus-code-body"),e)}function ma(e){if(_()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Bc(e._managedReportId);if(n?.data===null||n?.error)return null;let r={integrity:n?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let s of o){let i=ga(r,s?.file);if(i)return{...r,file:i,line:s.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:oo(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function ga(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return $f(e.integrity,t);let n=Bc(e.reportId);if(!n||n.data===void 0&&!n.error)return t;let r=n.data;return r?.paths.get(t)??(r?.sources.has(t)?t:null)}function kx(e,t,n){if(!_())return null;let r=Bc(e);if(!r||r.data===void 0&&!r.error)return n&&!Tg.has(e)&&(Tg.add(e),xk(e).catch(()=>{}).finally(()=>{Tg.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask($x)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let s=o.sources.get(t);if(typeof s!="string")return null;let i=wx.get(o);return i||(i={cache:new Map,pending:new Set},wx.set(o,i)),vx(o.integrity,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.sources,o.packageDirs),i.cache,i.pending),{content:s,highlighted:i.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function ho(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return kx(r,t,n);if(_())return null;let o=fa.get(e);if(!o)return n?(SE(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(t);if(typeof s!="string")return null;vx(e,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Mg.has(i)?Mg.get(i):void 0,loading:!1}}function xx(e){let t=ma(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:ki(t.reportId?t.line:e.line)}:null}function CE(e){return e?xx(je(e)):null}function $d(e){let t=CE(e);return t?{base:t,...Rg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Sx(e){let t=xx(e);return t?Rg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function TH(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=ho(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function Cx(e){let t=e&&je(e),n=ma(t);if(n?.reportId&&!n.integrity)return kx(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,s=ho(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function kd(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=j(e);if(!Vr(r))return null;if(_()){let i=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=Ye(Xe({view:"findings",teamId:c.currentManagedTeam,reportId:i,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",s=c.currentWorkspace||Ss(o);return pp({id:r,report:c.currentWorkspace?null:Sl("report",o),workspace:Sl("workspace",s??"")})}function Ss(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=ji(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function NH(e){for(let t of[fr(),Y0()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function _E(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Bt());let n=Fe(e).commonTriage;if(c.viewMode==="kanban"){let i=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==i&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(i=>i.isUpstream)&&(c.upstreamOnly=!1),vi(c.showRevalidation,c.upstreamOnly);let r=e.find(i=>j(i)===t);if(Xr(r)||nd(mo())&&!I0(e)||!ur(e).some(i=>j(i)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,vi(c.showRevalidation,c.upstreamOnly);let i=fr().find(a=>a.some(l=>j(l)===t));if(i)return _E(i,t)}else c.revalidationDetailed=!0;if(rd([e]).length===0){let i=c.sortBy;td(),c.sortBy=i}let s=ie(e);return e.length>1&&c.activeTabByGroup.set(s,t),c.viewMode==="table"?c.tableSelectedGid=s:c.viewMode==="focus"?c.focusGid=s:c.viewMode==="kanban"&&(c.kanbanPopoverGid=s),s}function _x(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Rx(e,t){if(e.createdAt==null&&t.createdAt!=null)return-1;if(e.createdAt!=null&&t.createdAt==null)return 1;let n=(e.createdAt??0)-(t.createdAt??0);return n!==0?n:e.id===t.id?0:e.id<t.id?-1:1}var ha=new Map;function UH(e,t){ha.has(e)||ha.set(e,new Set);let n=ha.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&ha.delete(e)}}function Ig(e,t){c.managedComments.set(e,t);for(let n of ha.get(e)??[])n()}function Tx(e){return _()?c.managedComments?.get(e?.id)??[]:[]}function Mx(){return _()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function RE(e){return Mx()&&_x(e,c.managedSession)}function Ag(e){let t=c.reports,n=c.managedSession?.id;return()=>_()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function xd(e,{signal:t,readAnnotations:n}={}){let r=Ag(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(p=>p.map(d=>d.id)))),s=new Map([...o].map(l=>[l,c.managedComments.get(l)])),i=n?(await n(e))?.comments:await Wk(e,c.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of i)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,p]of a)c.managedComments.get(l)===s.get(l)&&Ig(l,p);return!0}async function VH(e,t,n=null){let r=e?._managedReportId,o=Ag(r);if(!o()||!Mx())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await Hk(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==s.comment.id);a.push(s.comment),a.sort(Rx),Ig(e.id,a)}return s}async function jH(e,t){let n=e?._managedReportId,r=Ag(n);if(!r()||!RE(t))return 403;let o=await Uk(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];Ig(e.id,s.filter(i=>i.id!==t.id))}return o}function Sd(e){return Kv(e,{managed:_()}).map(t=>typeof t=="string"?t:t.self?u`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:u`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Cd=u`<svg viewBox="0 0 16 16" width="11" height="11" 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>`,Cs=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,_s=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Ix=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3.5h12M2 8h9a2.5 2.5 0 0 1 0 5H8.5M10 11.5 8.5 13l1.5 1.5M2 13h3.5"/></svg>`,Ax=u`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg>`,ZH=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5Z"/></svg>`,QH=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 4.5L2 8l3.5 3.5"/><path d="M10.5 4.5L14 8l-3.5 3.5"/></svg>`;function st(e){return e==="informational"?"info":e.replaceAll("_"," ")}function Eg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=Bo(e),i=t==="tab"?null:vw(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([k,$])=>`${k||"(this report)"}: ${st($.severity)}`).join("; ")}`:null,l=i?u`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return u`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let p=de(e,"original"),d=ai(e),f=e.correctedSeverityReason,m=(_e[d]??0)>(_e[p]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${st(p)}`:`Original severity \u2014 corrected ${h} to ${st(d)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${st(r)}; ${y?`corrected ${h} from ${st(p)}`:`original, corrected to ${st(d)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return u`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${v}">${o}<span class="${`badge-corr-mark ${h}`}" aria-hidden="true">${b}</span></span>`;let x=y?p:d;return u`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${v}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${h}`}" aria-hidden="true">${b}</span>${y?u`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${x}${y?" struck":""}`}">${st(x)}</span></span>${l}</span>`}var Ex=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ya(e){Ex.lastIndex=0;let t=[],n=0,r;for(;(r=Ex.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Uv(r[0]);t.push(s?u`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(u`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(u`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(u`<span class="inline-quote">${r[0]}</span>`);n=r.index+r[0].length}return n===0?e:(n<e.length&&t.push(e.slice(n)),t)}function TE({lang:e,code:t}){c.codeBlockTick;let n=bg(t,e);return u`<div class="code-block" data-lang="${e||g}">${e?u`<div class="code-block-lang">${e}</div>`:g}<pre><code>${n?W(n):t}</code></pre></div>`}function ME(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?u`<div class="para">${ya(e)}</div>`:ya(e):n.map(r=>u`<div class="para">${ya(r)}</div>`)}function IE({ordered:e,start:t,items:n}){let r=n.map(o=>u`<li>${it(o)}</li>`);return e?u`<ol class="md-list" start="${t>1?t:g}">${r}</ol>`:u`<ul class="md-list">${r}</ul>`}function it(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?Dv(e):[e],r=n.length>1,o=i=>t?ME(i,{wrap:r}):ya(i),s=i=>{let a=Bv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):TE(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):IE(i))}function AE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function EE(e){let t=Ae(e);return ms[t]??t}function FE(e,t){c.linksTick,c.findingIndexTick;let n=j(e),r=Vr(n)?gt(n).filter(o=>!t.has(o)):[];return r.length===0?g:u`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Gl(o),i=ro(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Qt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${EE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${_()?kd({id:o},{teamOnly:!0}):`#${jr({id:o})}`}" data-links-preview="${a?o:g}" data-preview-report="${a?.report??g}" data-preview-row="${a?.index??g}" data-preview-managed-report="${a?.managedReportId??g}" data-tooltip="${`${s}${l}`}">${AE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${jl(o)??s}</span></a>`})}</div>`}function LE(e){let t=Ev(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function OE(e){let t=Tp()?zr(e.revalidateVerdict,e):"";return t?u`<div class="revalidate-verdict">${it(er(t))}</div>`:g}function ba(e,t,n="section",{collapsible:r=!1}={}){let o=t?u`<div class="section-body">${it(er(t))}</div>`:g;return!r||!t?u`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:u`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function NE(e,t,n){let r=e?.integrity&&t?.file?ga(e,t.file):null;return r?u`<span class="evidence-ref" role="link" tabindex="0" data-code-nav-integrity="${e.integrity}" data-code-nav-file="${r}" data-code-nav-line="${t?.line??""}">${n}</span>`:u`<span class="evidence-ref">${n}</span>`}function BE(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=En(e),o=ma(e),s=t==="focus"&&o!==null,i=s?Sx(e):null;return u`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,l)=>{let p=ul(a),d=Wv(a,e,r,l),f=Sw(a),m=Ox(e,`ev${l}`,o,a?.file,a?.line),h=Fg(d),b=s&&vd(i,{integrity:o.integrity,file:ga(o,a?.file),range:ki(a?.line)});return u`<li class="${q({current:b})}">${s?NE(o,a,p):d?u`<a class="evidence-ref" href="${d}" target="_blank" rel="noopener">${p}</a>`:u`<span class="evidence-ref">${p}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?u`<div class="evidence-note">${it(er(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function Lx(e,t){let n=ul(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function DE(e,t){if(!t)return g;let n=t.slice(0,7),r=jv(e,t);return r?u`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:u`<span data-tooltip="${t}">${n}</span>`}var Rd=u`<svg viewBox="0 0 16 16" width="11" height="11" 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>`,Ts=u`<svg viewBox="0 0 16 16" width="11" height="11" 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>`,PE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,zE=u`<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"><path d="M4.4 4.6 1.3 8l3.1 3.4"/><path d="m11.6 4.6 3.1 3.4-3.1 3.4"/><path d="M9.8 2.6 6.2 13.4"/></g></svg>`,WE=W(Kt);function Fg(e){let t=Nv(e);return t?u`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${WE}</a>`:g}function HE(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var Rs={key:null,host:null};function _d(e,t){if(Rs.key===e)return;let n=Rs.host,r=e===null?null:t?.getRootNode?.()?.host??null;Rs={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Fx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=zv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=bg(r,i<0?"":n.slice(i+1)),l=s+o.length-1;return u`<div class="code-preview" style="${le({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((p,d)=>{let f=s+d,m=!!t&&f>=t.start&&f<=t.end;return u`<div class="${q({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?W(a):r}</code></pre></div>`}function Ox(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let s=ga(n,r);if(!s)return null;let i=ki(o),a=HE(e,t,r,i),l=c.codePreviews.has(a);c.focusCodeTick;let p=u`<button type="button" class="${q({"code-preview-btn":!0,open:l})}" data-code-preview="${a}" aria-expanded="${String(l)}" aria-label="${l?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}" @focus="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}">${zE}</button>`;if(l){let m=ho(n.integrity,s,{reportId:n.reportId}),h=!m||m.loading?u`<div class="code-preview code-preview-pending">${m?"Loading source\u2026":"Source unavailable"}</div>`:Fx(m.content,i,s);return{mark:p,tip:g,body:h}}if(Rs.key!==a)return{mark:p,tip:g,body:g};let d=ho(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Fx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var UE=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${hw}"/></svg>`,VE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="8" cy="8" r="1.7" fill="currentColor"/></svg>`,Td=u`<svg viewBox="0 0 16 16" width="11" height="11" 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>`;function jE(e,t=!1){let n=ge(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return u`<button type="button" class="${q({"mark-flag":!0,flagged:n})}" data-flag-toggle="${j(e)}" ?disabled="${!_t(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Td}${t?u`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function GE(e){let t=qt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function KE(e){let t=Vl(e,En(e)),n=ul(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=Hv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
132
+
133
+ `)}function qE(e){if(!c.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(_()&&!e._managedReportId)return g;let n=Pe[Ae(t)]??Pe.default,r=u`${W(n)}<span class="report-chip-label report-button-label">${oe(t)}</span>`;if(_()){let o=kd(e,{reportId:e._managedReportId});if(o)return u`<a class="report-chip report-button comment-self-ref" href="${$n(o)}">${r}</a>`}return u`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${j(e)}" data-managed-report="${_()?e._managedReportId:g}">${r}</button>`}function Nx(e,t,n,r,o=null){let s=o==="table"?g:qE(r),i=ge(r),a=!dr(r),l=!_t(r),p=i?.color??null,d=i?.comment??"",f=i?.fix??"",m=_()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=_()?"Comments":d?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=u`<button type="button" ?disabled="${a}" class="${q({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!_()?m:g}" aria-label="${m}">${Rd}${b?u`<span class="mark-btn-label">${y}</span>`:g}</button>`,x=u`<button type="button" ?disabled="${l}" class="${q({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Ts}${b?u`<span class="mark-btn-label">${w}</span>`:g}</button>`,k=jE(r,b),$=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Cd}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=kd(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${PE}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=_()?De({repo:{github:r.repo?.github||r._repoFallback}}):q0(r),R=Gv(C,{title:GE(r),body:KE(r),labels:nx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=_()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${VE}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Lc(r)?g:R?L?u`<button type="button" class="mark-issue" data-issue-form="${R}" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</button>`:u`<a class="mark-issue" href="${R}" target="_blank" rel="noopener" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</a>`:g,M=u`<button type="button" class="mark-claude" data-tooltip="${b?g:"Open in Claude Code (claude://) with a confirm-and-fix prompt"}" aria-label="Open finding in Claude Code">${UE}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=ws(e)!==e,K=e.linkedTabs?"change triage state for linked findings":U?"change triage state for App and own-source findings":n.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return u`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${x}${k}</span><span class="mark-action-group">${$}${S}${E}${M}</span>${I}${XE(e,K,o,n,r)}</div></div>`}function YE(e){if(e.newState!=="open")return;let t=e.currentTarget,r=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!r)return;let o=r.getBoundingClientRect(),s=t.offsetWidth||110,i=t.offsetHeight||100,a=4,l=o.right-s;l<4&&(l=4),l+s>window.innerWidth-4&&(l=window.innerWidth-s-4);let p=o.bottom+a;p+i>window.innerHeight-4&&o.top>i+a&&(p=o.top-i-a),t.style.top=`${p}px`,t.style.left=`${l}px`}function XE(e,t,n,r,o){let s=ie(e),i=!_t(o)||da(e,r).length===0,a=i?null:cg(e,r,o),l={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},p={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},d=!!c.shownTriage,f=d?l[c.shownTriage]:null,m=["inprogress","fixed","invalid","deleted","ignored"],b=d&&!(n==="focus")?[{key:"restore",label:"Restore"},...m.filter(v=>v!==c.shownTriage).map(v=>({key:v,label:p[v]}))]:m.map(v=>({key:v,label:p[v]})),y=["mark-triage-menu"];d&&y.push("with-label",`triage-state-${c.shownTriage}`);let w=`triage-menu-${s.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return u`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${i}">${f?u`<span class="mark-triage-label">${f}</span>`:g} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${w}" class="triage-menu" data-gid="${s}" role="menu" @beforetoggle="${YE}">${b.map(v=>u`<button type="button" class="${q({"triage-menu-item":!0,[`triage-menu-${v.key}`]:!0,active:a===v.key})}" data-triage-action="${v.key}" ?disabled="${i}" role="menuitem">${v.label}</button>`)}</div></div>`}function JE(e,t){let n=!!e?.comment,r=!!(e?.fix||tn(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:u`<span class="tab-marks">${n?u`<span class="has-comment" role="img" aria-label="Has a comment">${Rd}</span>`:g}${r?u`<span class="has-fix" role="img" aria-label="Has a fix link">${Ts}</span>`:g}${o?u`<span class="flagged" role="img" aria-label="Flagged">${Td}</span>`:g}</span>`}function Bx(e,t,n){let{app:r,source:o}=G0(e),s=i=>ZE(i,j(i)===t,n);return u`<div class="tabs">${r.map(s)} ${r.length>0&&o.length>0?u`<span class="tab-level-separator" aria-hidden="true">•</span>`:g} ${o.map(s)}</div>`}function ZE(e,t,n){let r=j(e),o=ge(e),s=o?.color,i=ca(e,o),a=["tab",`tab-severity-${de(e,c.severityMode)}`];t&&a.push("active"),s&&a.push(`tab-mark-${s}`),i==="ignored"&&!n.allIgnored?a.push("tab-ignored"):i&&i!=="ignored"&&n.commonTriage===null&&a.push(`tab-${i}`);let l=Pc(e),p=l?Pe[l]:null,d=!p&&e.confidence!=null;p?a.push("tab-with-analyzer"):d&&a.push("tab-with-confidence");let f=p?u`<span class="tab-analyzer" role="img" aria-label="${ms[l]}">${W(p)}</span>`:d?u`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return u`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${s?`${s} color label`:g}"><span class="tab-label"><span class="tab-severity">${Eg(e,{variant:"tab"})}</span><span class="tab-indicators">${JE(o,e)}</span></span>${f}</button>`}function QE(e){if(c.viewMode==="table"||c.viewMode==="focus"){let t=e.confidence*10;return u`<div class="${`conf-ring ${de(e,c.severityMode)}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="stroke-dasharray: ${t} 100"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return u`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var eF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function tF(e){if(or(e))return g;let t=e?.name;if(typeof t!="string"||!eF.test(t))return g;let n=e?.version,r=typeof n=="string"&&n.length>0,o=r?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`:`https://www.npmjs.com/package/${t}`,s=r?`${t}@${n}`:t;return u`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${s}</a></span>`}function nF(e,t,n,r,o,s){let i=j(e),a=ge(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Lc(e),m=Vl(e,En(e)),h=Lx(e,m),b=li(e),y=ma(e),w=Ox(e,"loc",y,e.file,e.line),v=Fg(m),x=u`<span class="line-num">${b?u`${h}, ${b}`:h}${w?.mark??g}${v}</span>`,k=Jr(e),$=String(e.discoveredIn??"").trim(),S=$===String(e.file??"").trim()?"":$,C=o==="focus"?tF(e.package?.npm):g,R=g;if(o!=="focus"&&_()&&w)R=u`<button type="button" class="finding-code-btn" data-finding-code-report="${y.reportId}" data-finding-code-file="${e.file}" data-finding-code-line="${e.line??""}" aria-label="${`Open full source for ${e.file}`}">Code</button>`;else if(o!=="focus"&&!_()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){c.bundleHashTick;let K=new Set(e._bundleHashes),Q=oo(e.fileHash).find(({integrity:ze})=>K.has(ze));Q&&(R=u`<button type="button" class="finding-code-btn" data-finding-code-bundle="${Q.integrity}" data-finding-code-file="${Q.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${Q.file} in bundle source viewer`}">Code</button>`)}let{title:L,body:A}=kw(e),E=xw(A),M=E.findIndex(K=>K.label!==null),I=M===-1?E:E.slice(0,M),U=M===-1?[]:E.slice(M);return u`<div class="${q({"tab-body":!0,active:t})}" data-tid="${i}">${r>1?u`<div class="print-case-label">${n+1} of ${r}</div>`:g}<div class="finding-left">${a?.color||a?.flagged===!0?u`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?u`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:g} ${a?.flagged===!0?u`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:g}</div>`:g} ${Eg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:QE(e)} ${LE(e)} ${R}</div><div class="finding-body"><div class="line-row">${x} ${w?.tip??g} ${C} ${S?u`<span class="line-num discovered-in">(found analyzing ${S})</span>`:g} ${k?u`<span class="run-meta">${k}</span>`:g}</div>${w?.body??g} ${L?u`<div class="desc-title">${ya(L)}</div>`:g} ${I.map(K=>u`<div class="desc">${it(er(K.body))}</div>`)} ${BE(e,o)} ${U.map(K=>K.label===null?u`<div class="desc">${it(er(K.body))}</div>`:ba(K.label,K.body))} ${e.impact?ba("Impact",zr(e.impact,e)):g} ${e.reproduction?ba("Reproduction",zr(e.reproduction,e),"section",{collapsible:!0}):g} ${e.recommendation?ba("Recommendation",zr(e.recommendation,e),"recommendation",{collapsible:!0}):g} ${e.confidenceReason?u`<div class="conf-reason">${it(zr(e.confidenceReason,e))}</div>`:g} ${OE(e)} ${e.revalidateRecommendation&&Tp()?ba("Revalidation recommendation",zr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Bo(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${FE(e,s)} ${_()?Tx(e).map(K=>u`<div class="comment-block">${Sv(K,Sd(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Sd(l)}</div>`:g} ${f?u`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${p?u`<div class="fix-block"><span class="fix-label">Fix:</span> ${Do(p)?u`<managed-fix-link .url="${p}"></managed-fix-link>`:p}</div>`:g} ${d&&d!==p?u`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${d}"></managed-fix-link></div>`:g}</div></div>`}function kU(e){let t=["finding",...rF(e)];return ur(e).length>1&&t.push("multi-case"),t}function xU(e,t={}){let{context:n=null}=t,r=Fe(e),o=ur(e),s=new Set(o.map(j)),i=je(e),a=j(i),l=i.commitHash?u`<div class="commit-ref">introduced in ${DE(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>nF(d,j(d)===a,f,o.length,n,s))} ${p?u`<div class="marks-commit-row">${l}</div>`:g}<div class="marks"><div class="marks-left">${p?g:l} ${o.length>1?Bx(o,a,r):g}</div>${Nx(e,o,r,i,n)}</div>`}function rF(e){let t=Fe(e),n=e.some(o=>o.critical||de(o,c.severityMode)==="critical"),r=[];return n&&r.push("is-critical"),t.hasConflict?r.push("has-conflict"):t.commonColor&&r.push(`mark-${t.commonColor}`),c.shownTriage&&r.push(`triage-${c.shownTriage}`),r}function SU(e){let t=Fe(e),n=ur(e),r=je(e),o=j(r),s=r,i=qt(s),a=Jr(s),l=li(s),p=l?`, ${l}`:"",d=Vl(s,En(s));return u`<div class="row-score">${Eg(s,{variant:"compact"})} ${s.confidence===void 0?g:u`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${a?u`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${Lx(s,d)}${p}</span> ${Fg(d)}<div class="marks">${Nx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${Bx(n,o,t)}</div>`:g}</div>`}function Dx(e){if(!e)return g;let t=oo(e)[0];return t?u`<button type="button" class="tree-code-btn" data-finding-code-bundle="${t.integrity}" data-finding-code-file="${t.file}" data-tooltip="${`Open ${t.file} in bundle source viewer`}">Code</button>`:g}function Px(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let d of n)for(let f of e[d].imports??[]){let m=r.get(f)??[];m.push(d),r.set(f,m)}let o=c.filesSearch.trim().toLowerCase(),s=o?n.filter(d=>d.toLowerCase().includes(o)):n,i=d=>e[d]?u`<a href="${`#${Ip(d)}`}"><span class="name">${d}</span></a>`:u`<span class="name">${d}</span>`,a=d=>{let f=t.get(d);if(!f)return null;let m=et.filter(h=>(f[h]??0)>0);return m.length===0?null:u`<span class="tree-count-chips">${m.map(h=>u`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},l=d=>{let f=t.get(d);return f?et.reduce((m,h)=>m+(f[h]??0),0):0},p=u`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let d=c.filesSelectedFile&&e[c.filesSelectedFile]&&s.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return u`<div class="${d?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${p}<div class="${d?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=l(h),y=h===d,w=Ul(e[h].size);return u`<div class="${`tree-table-row${y?" selected":""}${b===0?" clean":""}`}" data-tree-select="${h}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${h}">${h}</span> ${a(h)??u`<span class="tree-table-clean-marker">—</span>`} ${w?u`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${d?u`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${oF(e[d],d,r.get(d)??[],i)}</div></aside>`:g}</div></div>`}return u`<div class="tree-view">${p} ${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(d=>{let f=e[d],m=r.get(d)??[],h=Ul(f.size);return u`<section class="tree-file" id="${Ip(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${Dx(f.fileHash)}</div>${zx(f,m,i)}</section>`})}</div>`}function zx(e,t,n){return u`${e.fileHash||e.treeHash?u`<div class="tree-hashes hashes">${e.fileHash?u`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?u`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?u`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?u`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?u`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>u`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function oF(e,t,n,r){let o=Ul(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${Dx(e.fileHash)}</div>${zx(e,n,r)}`}var wa=null,Wx=null;function Ms(){return Wx}function sF(){return wa||(wa=(async()=>{let e="./graph.js";try{let t=await import(e);return Wx=t,t}catch(t){throw wa=null,t}})(),wa)}async function Lg(e,t,n,r,o){try{let s=await sF(),i=s.buildGraphFromPrep(t);J(u`<graph-layout .graph="${i}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),s.attachGraph2Interaction(e,i,r,o),a}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}var va=null,hr=null;function Hx(){hr=null}function iF(){return va||(va=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw va=null,t}})(),va)}function aF(e){let t=we(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Qn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function Ux(e,t){let n=t?.integrity??"";(!hr||hr.integrity!==n||(t?.managedId||hr.managedId)&&hr.details!==t)&&(hr={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:lF(t,n)});try{let r=await hr.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){hr=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function lF(e,t){return(await iF()).createTerminalElement(aF(e),t)}function Is(e,t){let n=e.find(r=>r.integrity===t);return e.filter(r=>r.integrity!==t&&(n?.managedId?r.managedId&&n.repoId!=null&&r.repoId===n.repoId:!r.managedId))}function br(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,commitInfo:e.commitInfo??null,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function yr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function wr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(l=>l.id===n&&l.bundles?.some(p=>p.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(l=>l.managedId&&l.managedId===o?.compareId)];return Xe({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(l=>({id:l.managedId,slug:l.slug})))}function Md(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Rl(Lt(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let o=e.bundleSourceTargetLine;return o?.bundle!==e.selectedBundle||o.path!==e.bundleSourceFile?{file:r}:{file:r,line:o.line,...o.end>o.line?{endLine:o.end}:{}}}function Og(e,t=e.bundleDetailsTab){let n=e.bundleCompare;if(t!=="compare"||!n?.target||n.bundle!==e.selectedBundle)return null;if(e.bundles?.find(o=>o.integrity===e.selectedBundle)?.npm)return{compareSpec:n.target,...Wo(n.mode)};let r=Is(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Wo(n.mode)}:null}function vr(e,t=e.bundleDetailsTab){let n=e.bundles?.find(s=>s.integrity===e.selectedBundle)?.npm,r=e.npmReview?.bundle===e.selectedBundle?e.npmReview:null,o=e.bundleCompare?.bundle===e.selectedBundle?e.bundleCompare:null;if(n&&t==="review"&&e.bundleDetailsTab==="compare"&&o?.target&&!(r?.started&&r.user===e.managedSession?.id))return{reviewPackage:n.name,reviewSpec:o.target};if(n&&t==="compare"&&e.bundleDetailsTab==="review"&&r?.reviewPackage===n.name)return{compareSpec:r.reviewSpec,...Wo(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Md(e,t)??Og(e,t)}function WU(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=vr(e,t);if(t==="review"){let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id;e.npmReview={...a?e.npmReview:{bundle:e.selectedBundle,...o},resume:!0}}if(t!=="compare")return;let s=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,i=o?.compareSpec??s?.reviewSpec??n(r);i&&(e.bundleDetailsTab==="review"||!o?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:i,mode:o?.compareMode??"overview"})}function As(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,br(t)])).values()]}var Ng=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var $a=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),$a(r,t);return!0},Id=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},Vx=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),uF(t)}};function cF(e){this._$AN!==void 0?(Id(this),this._$AM=e,Vx(this)):this._$AM=e}function dF(e,t=!1,n=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let s=n;s<r.length;s++)$a(r[s],!1),Id(r[s]);else r!=null&&($a(r,!1),Id(r));else $a(this,e)}var uF=e=>{e.type==mw.CHILD&&(e._$AP??=dF,e._$AQ??=cF)},Ad=class extends gw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),Vx(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&($a(this,t),Id(this))}setValue(t){if(Ww(this._$Ct))this._$Ct._$AI(t,this);else{let n=[...this._$Ct._$AH];n[this._$Ci]=t,this._$Ct._$AI(n,this,0)}}disconnected(){}reconnected(){}};var Bg=new WeakMap,jx=ip(class extends Ad{render(e){return g}update(e,[t]){let n=t!==this.G;return n&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),g}rt(e){if(this.G!==void 0)if(this.isConnected||(e=void 0),typeof this.G=="function"){let t=this.ht??globalThis,n=Bg.get(t);n===void 0&&(n=new WeakMap,Bg.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G=="function"?Bg.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Ed=2**20,Gx=Math.floor(2**25/15);function pF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Ed,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Fd(e,t=!1){return e.length<=Ed&&!xs(e)?e:bx(e,t).flatMap(n=>typeof n=="string"?pF(n):[n])}var fF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,Kx=200;function mF(e){let t=[...e];return t.length>Kx?`${t.slice(0,Kx-1).join("").trimEnd()}\u2026`:e}var Ld=e=>e.split("/").map(encodeURIComponent).join("/"),Dg=(e,t)=>`https://github.com/${Ld(e)}/releases/tag/${Ld(t)}`;function qx(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Es(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?qx(e,t):[],s=t&&e?.sha===t&&typeof e.details?.subject=="string"?e.details:null;if(!(!s&&o.length===0))return JSON.stringify({tags:o,...s?{title:mF(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Od(e,t="",n=null){let r=[],o=De(e);if(o){let i=[Ft(e.repo),Ft({directory:t})].filter(Boolean).join("/"),a=Gr(e.repo?.commit),l=i.split("/").map(encodeURIComponent).join("/"),p=`https://github.com/${o}`,d=De({repo:{github:n?.github}}),f=d?qx(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${p}/tree/${a??"HEAD"}${l?`/${l}`:""}`:p,...a?{commit:{hash:a,text:a.slice(0,7),href:`${p}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Dg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&fF.test(s.name)){let i=typeof s.version=="string"?s.version.trim():"";r.push({label:"npm",text:s.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${s.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return r}var gF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,Yx=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,zg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,Pg=e=>JSON.stringify(e).replaceAll(gF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=Yx(e,64);return t===e?Pg(e):`${Pg(t)}...`}var Nd=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}};var Wt=class extends Nd{};function se(e,t,n){if(!e)throw new Wt(typeof n=="function"?n():n,t.line)}function $r(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var w8=2**20;var hF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,bF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,yF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,wF=[31,28,31,30,31,30,31,31,30,31,30,31];function Wg(e){let t=hF.exec(e);if(t===null)return;let[n,r,o,s,i,a]=[Number(t[1]),Number(t[2]),Number(t[3]),Number(t[5]),Number(t[6]),Number(t[7])],l=n%4===0&&n%100!==0||n%400===0;if(r<1||r>12||o<1||o>(r===2&&l?29:wF[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let p=[];(t[4]==="t"||t[9]==="z")&&p.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&p.push("the year 0000 is not supported"),a===60&&p.push("a leap second is not supported");let d=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:s,minute:i,second:a,fraction:t[8]?.slice(1)??"",offset:d,unsupported:p}}var Bd=class{constructor(t){if(typeof t!="string"||Wg(t)?.unsupported.length!==0)throw new TypeError("expected an RFC 3339 offset date-time");this.text=t,Object.freeze(this)}toString(){return this.text}toJSON(){return this.text}toDate(){let{year:t,month:n,day:r,hour:o,minute:s,second:i,fraction:a,offset:l}=Wg(this.text),p=new Date(0);return p.setUTCFullYear(t,n-1,r),p.setUTCHours(o,s-l,i,Number(a.padEnd(3,"0").slice(0,3))),p}};function Jx(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=Wg(e);if(n?.unsupported.length===0)return new Bd(e);let r=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw se(!r,t,'a date-time with a space in place of "T" is not supported'),se(!bF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!yF.test(e),t,()=>`a date-time or a time without seconds is not supported: ${$e(e)}`),se(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${$e(e)}`),new Wt(`${$e(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var vF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,$F=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,kF=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,Zx=2n**63n,Qx=BigInt(Number.MAX_SAFE_INTEGER),xF={__proto__:null,x:16,o:21,b:63};function tS(e,t){let n=vF.test(e);if(!n&&!$F.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:xF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-Zx&&i<Zx,t,()=>`integer out of range ${$e(e)}`),i>=-Qx&&i<=Qx?Number(i):i}var eS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function nS(e){if(typeof e!="string"||!kF.test(e))return;if(e in eS)return eS[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var Dd=class{constructor(t){let n=nS(t);if(n==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=n,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function rS(e,t){let n=nS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new Dd(e)}var iS=64;function kr(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function bo(e){if(e.pos>=e.text.length)return"the end of the text";let t=/^[^\n]*/u.exec(e.text.slice(e.pos,e.pos+64+1))[0].replace(/\r$/u,"");return t===""?"the end of the line":$e(t)}var aS="a carriage return must be followed by a line feed";function lS(e,t,n){throw new Wt(t==="\r"?aS:`${zg(t)} is not allowed in ${n}`,e.line)}var zd=e=>e.pos>=e.text.length||e.text[e.pos]===`
134
+ `||e.text.startsWith(`\r
135
+ `,e.pos),SF=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function cS(e){e.text[e.pos]==="#"&&($r(e,SF),zd(e)||lS(e,e.text[e.pos],"a comment"))}function Pd(e){if(e.text[e.pos]===`
136
+ `)e.pos+=1;else if(e.text.startsWith(`\r
137
+ `,e.pos))e.pos+=2;else return!1;return e.line++,!0}function Hg(e){do kr(e),cS(e);while(Pd(e))}var oS={__proto__:null,b:"\b",t:" ",n:`
138
+ `,f:"\f",r:"\r",'"':'"',"\\":"\\"},CF={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},_F=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function dS(e){let t=e.text[e.pos];if(t in oS)return oS[e.text[e.pos++]];let n=$r(e,_F);se(n!==null,e,()=>`unsupported escape ${$e(`\\${t??""}`)}`);let r=Number.parseInt(n[1]??n[2],16);return se(r<=1114111&&(r<55296||r>57343),e,()=>`\\${n[0]} is not a Unicode scalar value`),String.fromCodePoint(r)}var RF=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function TF(e){let t=$r(e,RF);return t===null?dS(e):(e.line+=t[0].split(`
139
+ `).length-1,"")}var uS=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,MF={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function pS(e,t){let n=uS(e,t),r=MF[n?t.repeat(3):t];e.pos+=n?3:1,n&&Pd(e);let o="";for(;;){if(o+=$r(e,CF[t])[0],n&&Pd(e)){o+=`
140
+ `;continue}se(!zd(e),e,"unterminated string");let s=$r(e,r);if(s!==null)return o+s[0].slice(3);let i=e.text[e.pos++];i===t?o+=i:i==="\\"?o+=n?TF(e):dS(e):lS(e,i,"a string")}}var IF=/[\w-]+/uy;function sS(e){let t=e.text[e.pos];if(t==='"'||t==="'")return se(!uS(e,t),e,"a multi-line string cannot be a key"),pS(e,t);let n=$r(e,IF);return se(n!==null,e,()=>`expected a key, found ${bo(e)}`),n[0]}function fS(e){let t=[sS(e)];for(;;){if(kr(e),e.text[e.pos]!==".")return t;e.pos++,kr(e),t.push(sS(e)),se(t.length<=iS,e,"a key with too many parts")}}var AF=/[\w+.:-]+/uy;function EF(e){let t=$r(e,AF);se(t!==null,e,()=>`expected a value, found ${bo(e)}`);let n=t[0];if(n==="true")return!0;if(n==="false")return!1;let r=tS(n,e)??rS(n,e)??Jx(n,e);return se(r!==void 0,e,()=>`expected a value, found ${$e(n)}`),r}function FF(e,t,n,r){se(t[n]===void 0,e,()=>`duplicate key ${$e(n)}`),t[n]=r}function mS(e,t){let n=fS(e);return se(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${bo(e)}`),e.pos++,kr(e),{header:!1,keys:n,value:gS(e,t)}}function LF(e,t){e.pos++;let n=[];for(Hg(e);e.text[e.pos]!=="]"&&(n.push(gS(e,t+1)),Hg(e),e.text[e.pos]!=="]");Hg(e))se(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${bo(e)}`),e.pos++;return e.pos++,n}var Fs=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,OF=new WeakSet;function Vg(e,t,n,r,o,s){let i=t;for(let a of r.slice(0,-1)){a in i||n.add(i[a]=Object.create(null));let l=i[a];se(n.has(l),e,()=>s(a,l)),i=l}FF(e,i,r.at(-1),o)}var NF=e=>Array.isArray(e)?"an array":Fs(e)?"an inline table":"a value",BF=(e,t)=>`${$e(e)} is ${NF(t)}, which a dotted key cannot add to`;function Ug(e){kr(e),se(!zd(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function DF(e,t){e.pos++;let n=Object.create(null);OF.add(n);let r=new Set;if(Ug(e),e.text[e.pos]==="}")e.pos++;else do{Ug(e),se(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:s}=mS(e,t+1);Vg(e,n,r,o,s,BF),Ug(e);let i=e.text[e.pos];se(i===","||i==="}",e,()=>`expected "," or "}" on the inline table's line, found ${bo(e)}`)}while(e.text[e.pos++]===",");return n}function gS(e,t){se(t<=iS,e,"nested too deep");let n=e.text[e.pos];return n==='"'||n==="'"?pS(e,n):n==="["?LF(e,t):n==="{"?DF(e,t):EF(e)}function PF(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,kr(e);let n=fS(e),r=t?"]]":"]";return se(e.text.startsWith(r,e.pos),e,()=>`expected "${r}", found ${bo(e)}`),e.pos+=r.length,{header:!0,keys:n,array:t}}function hS(e){kr(e);let t=e.text[e.pos];if(t==="[")return PF(e);if(!(t==="#"||t==="\r"||zd(e)))return mS(e,0)}function bS(e){if(kr(e),cS(e),!(Pd(e)||e.pos===e.text.length))throw se(e.text[e.pos]!=="\r",e,aS),new Wt(`expected the end of the line, found ${bo(e)}`,e.line)}function Wd(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Fs(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}var yS=e=>$e(e.join("."));function zF(e,t,n){let r=e.root;for(let o of n){o in r||e.implicit.add(r[o]=Object.create(null));let s=e.arrays.has(r[o])?r[o].at(-1):r[o];se(Fs(s)&&!e.fixed.has(s),t,()=>`${$e(o)} is ${Wd(e,s)}, which a header cannot add to`),r=s}return r}function WF(e,t,n,r){e.pending.clear();let o=zF(e,t,n.slice(0,-1)),s=n.at(-1);if(r){s in o||e.arrays.add(o[s]=[]),se(e.arrays.has(o[s]),t,()=>`${yS(n)} is ${Wd(e,o[s])}, not an array of tables`),o[s].push(e.current=Object.create(null));return}s in o?se(e.implicit.delete(o[s]),t,()=>`${yS(n)} is ${Wd(e,o[s])} already`):o[s]=Object.create(null),e.current=o[s]}function HF(e,t,n){return!Fs(n)||e.fixed.has(n)?`${$e(t)} is ${Wd(e,n)}, which a dotted key cannot add to`:e.implicit.has(n)?`a dotted key through ${$e(t)}, a table a header made on its way, is not supported`:`${$e(t)} is a table declared elsewhere, which a dotted key cannot add to`}function UF(e,t,n,r){Vg(t,e.current,e.pending,n,r,(o,s)=>HF(e,o,s)),Fs(r)&&e.fixed.add(r)}var VF={__proto__:null,"\uFEFF":"a byte order mark is not read","\uFFFD":"U+FFFD is not supported: a decoder puts it where bytes are not UTF-8"};function jF(e){if(typeof e!="string")throw new TypeError("expected a string");let t=/\p{Cs}|^\uFEFF|\uFFFD/u.exec(e);if(t===null)return;let n=e.slice(0,t.index).split(`
141
+ `).length-1;throw new Wt(VF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function jg(e){jF(e);let t=Object.create(null),n={text:e,pos:0,line:0},r={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;n.pos<e.length;){let o=hS(n);o?.header===!0?WF(r,n,o.keys,o.array):o!==void 0&&UF(r,n,o.keys,o.value),bS(n)}return t}function GF(e){if(typeof e!="string")return null;let t=/^(?:github:|(?:git\+)?(?:(?:https?|ssh|git):\/\/(?:[\w.~%!$&'()*+,;=:-]*@)?(?:www\.)?github\.com(?::\d+)?\/|ssh:\/\/(?:[\w.~%!$&'()*+,;=-]*@)?(?:www\.)?github\.com:|(?:[^@/:]+@)?(?:www\.)?github\.com:))?([\w.-]+)\/([\w.-]+?)(?:\.git)?\/?$/iu.exec(e.trim().replace(/#.*$/su,"")),n=t&&`${t[1]}/${t[2]}`;return n&&mp("github",n)?n:null}function KF(e,t){if(typeof e!="string")return;let n=/^https?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)\/tree\/[^/#?]+\/([^#?]+)/iu.exec(e.trim());if(!(!n||n[1].toLowerCase()!==t.toLowerCase()))try{return decodeURIComponent(n[2])}catch{return}}var qF=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function YF(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return mp("directory",n)?{directory:n}:{}}function wS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=GF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=KF(e.homepage,r),o!==void 0&&qF(o)&&(o=void 0)),{github:r,...YF(o)}}function Gg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?jg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function XF(e){let t=typeof e=="string"?e:e?.url;if(typeof t!="string")return null;let n=t.trim().replace(/#.*$/su,"").replace(/^github:/iu,"").replace(/^git\+/iu,"").replace(/^(?:ssh|git):\/\/(?:git@)?github\.com\//iu,"https://github.com/").replace(/^git@github\.com:/iu,"https://github.com/");return/^(?:https?:\/\/)?(?:www\.)?github\.com\//iu.test(n)?De({repo:{github:n}}):null}function Hd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?Gg(t?.files,"composer.json"):r==="cargo"?Gg(t?.files,"Cargo.toml")?.package:Gg(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=De(t),l=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?wS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>XF(f)).find(Boolean)},p=typeof l?.directory=="string"?l.directory:void 0,d=a?Gr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:l?.github??null,...p===void 0?{}:{directory:p},...d?{commit:d}:{},fileCount:n}}var vS=new WeakMap;function $S(e,t){let n=vS.get(e);if(n||vS.set(e,n=new Map),!n.has(t)){let r=`${t}/`,o=0,s=0;for(let[i,a]of e)i.startsWith(r)&&(o+=wn(a),s+=tv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Ud=new Set(["cargo","composer","soldeer"]);function Vd(e,t,n){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let r=Object.entries(t.files??{}).filter(([o,s])=>typeof s=="string"&&(!n||n.has(`${e}/${o}`)));return r.length>0&&r.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function kS(e,t=e,n=null){let r={path:"",files:new Map,dirs:new Map};for(let s=0;s<e.length;s++){let i=e[s].split("/"),a=r,l=t[s].split("/");for(let[p,d]of i.slice(0,-1).entries())a.dirs.has(d)||a.dirs.set(d,{path:i.slice(0,p+1).join("/"),sourcePath:l.slice(0,-(i.length-p-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(d);a.files.set(i.at(-1),t[s])}SS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Hd(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function xS(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),o=r?r.index+(r[0].startsWith("/")?1:0):e.length,s=n?new Set(n):null;for(let[i,a]of t??[]){let l=Vd(i,a,s);if(!Ud.has(l)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let p=(l==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),d=p?p.index+(p[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,d)}return e.slice(0,o)}function SS(e,t,n){for(let s of e.dirs.values())SS(s,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((s,i)=>s+i.fileCount,0);let r=t?.get(e.sourcePath),o=Vd(e.sourcePath,r,n);if(Ud.has(o)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(s=>e.files.has(s))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(s=>s.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let s=new Map;for(let[i,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(l=>l.package?.ecosystem==="composer")){e.boundary=!0;for(let[l,p]of a.dirs)s.set(`${i}/${l}`,p)}else Ud.has(a.package?.ecosystem)&&(e.boundary=!0),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs)if(a.boundary=!0,i.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(l=>!l.startsWith(".")&&!l.startsWith("@")))for(let[l,p]of a.dirs)p.boundary=!0,p.package??={name:`${i}/${l}`},s.set(`${i}/${l}`,p);else!i.startsWith(".")&&!i.startsWith("@")&&(a.package??={name:i}),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let l=a.dirs.get("node_modules");if(!l||l.files.size>0||l.dirs.size!==1)continue;let p=l.dirs.values().next().value;if(!p.package)continue;let d=`${p.package.name.replace("/","+")}@`;if(!i.startsWith(d))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(d.length));if(!f)continue;p.package={...p.package,version:f[1]},e.dirs.set(i,p);let m=yo(i,p);s.has(m)||s.set(m,[]),s.get(m).push(p)}for(let i of s.values())if(!(i.length<2)){i.sort((a,l)=>a.path.localeCompare(l.path));for(let[a,l]of i.entries())l.package.variant=a+1}}return e}function yo(e,t){let n=t.package;return n?`${n.name}${n.version?`${Ud.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function CS(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,l=null)=>{let p=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=l?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),d=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${yo(f,m)}`,h?i:null);b&&d.set(f,b)}return p.size>0||d.size>0?{...i,files:p,dirs:d}:null};return o||r?s(e,""):e}function Kg(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has("src")){let s=t.dirs.get("src"),i=new Map(t.files);for(let[a,l]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,l);return{names:r,node:{...t,sourcePath:s.sourcePath,files:i,dirs:s.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,n-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&r.length<3;){let[s,i]=t.dirs.entries().next().value;if(i.boundary||[...r,s].join("/").length>o)break;r.push(s),t=i}return{names:r,node:t}}function _S(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,n=e.target.closest("summary, .bundle-code-tree-link");if(!n||!t.contains(n)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(l=>{let p=l.parentElement;return l.tagName==="SUMMARY"&&(p=p.parentElement),!p.closest("details:not([open])")}),s=o.indexOf(n),i=n.tagName==="SUMMARY"?n.parentElement:null,a=n;e.key==="ArrowDown"&&(a=o[Math.min(s+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(s-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&i&&(i.open?a=o[s+1]??n:n.click()),e.key==="ArrowLeft"&&(i?.open?n.click():a=(i??n).parentElement.closest("details")?.querySelector("summary")??n),a?.focus()}function JF([e,t],[n,r]){return yo(e,t).localeCompare(yo(n,r))||t.path.localeCompare(r.path)}function ZF(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(JF))ZF(Kg(r,o,t).node,t+1,n);for(let[,r]of[...e.files.entries()].toSorted(([o],[s])=>o.localeCompare(s)))n.push(r);return n}function qg(e,t,n,r,o){let s=[t,n].filter(Boolean).join("/"),i=Gr(r);return{href:`https://github.com/${e}/blob/${i??"HEAD"}/${s.split("/").map(encodeURIComponent).join("/")}`,github:e,path:s,commit:i,package:typeof o?.name=="string"&&o.name?{name:o.name,version:o.version,ecosystem:o.ecosystem}:null}}function RS(e,t,n=null){if(typeof t!="string")return null;let r=e?.npm?.manifest;if(r){let f=Gr(r.gitHead);return r.github?.github&&f?qg(r.github.github,Ft({directory:r.github.directory??""}),t,f,null):null}if(e?.kind!=="stasis")return null;let o=e.bundle,s=null;for(let[f,m]of o?.modules??[]){let h=f==="."?t:t.startsWith(`${f}/`)?t.slice(f.length+1):null;if(h!==null&&Object.hasOwn(m.files,h)){s={dir:f,info:m,rel:h};break}}if(!s)return null;let{dir:i,info:a,rel:l}=s,p=i==="."?void 0:Vd(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(p===void 0){let f=De(o),m=De({repo:{github:n?.github}}),h=f??m;if(!h)return null;let b=typeof o.repo?.directory=="string"?Ft(o.repo):m?.toLowerCase()===h.toLowerCase()?Ft({directory:n.directory}):"";return qg(h,b,t,f?o.repo?.commit:void 0,null)}let d=Hd({name:a.name,ecosystem:p},a,0);return d.github?qg(d.github,d.directory??"",l,d.commit,d):null}function TS(e,t=null){return u`<a class="bundle-code-github-link" href="${e.href}" target="_blank" rel="noopener noreferrer" aria-label="Open on GitHub" data-tooltip="${e.path}" data-tooltip-repo="${e.github}" data-tooltip-commit="${e.commit??g}" data-tooltip-commit-info="${Es(t,e.commit,e.github)??g}" data-tooltip-package="${e.package?.name??g}" data-tooltip-ecosystem="${e.package?.ecosystem??g}" data-tooltip-version="${e.package?.version??g}">${W(Kt)}${e.package?u`<span hidden data-tooltip-package-icon>${_l(e.package.ecosystem)}</span>`:g}</a>`}var AS=".bundle-code-main, .bundle-source-modal, .bundle-search-side",jd=new Map,Xg=new WeakMap,Yg=null;function Jg(e){if(!e){queueMicrotask(MS);return}if(MS(),jd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&Jg(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{Xg.get(e)?.width!==ES(e)&&IS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>IS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),jd.set(e,()=>{n.disconnect(),r.disconnect()})}function MS(){for(let[e,t]of jd)e.isConnected||(t(),jd.delete(e))}function ES(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function IS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=ES(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=Xg.get(e)?.rows??new Map,i=null;for(let m of n.children)if((!i||(s.get(m)??1)<s.get(i))&&(i=m),!s.has(m))break;let a=i?parseFloat(getComputedStyle(i).height)/(s.get(i)??1):parseFloat(getComputedStyle(t).lineHeight),{rows:l,toggles:p}=QF(t,r,o,a),d=new Map;for(let[m,h]of l){let b=n.children[m];if(!b)continue;let y=`"${"\\A ".repeat(h-1)} "`;b.style.getPropertyValue("--wrap-breaks")!==y&&b.style.setProperty("--wrap-breaks",y),d.set(b,h)}for(let m of s.keys())d.has(m)||m.style.removeProperty("--wrap-breaks");Xg.set(e,{rows:d,width:r});let f=e.closest(AS)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function QF(e,t,n,r){let o=getComputedStyle(e);Yg??=document.createElement("canvas").getContext("2d"),Yg.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*Yg.measureText("0").width),i=[],a=null,l=null,p=0,d=0,f=()=>{p>s&&l&&i.push({line:d,first:a,last:l}),d++,p=0,a=l=null},m=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let x=m.nextNode();x;x=m.nextNode()){let k=x.data;for(let $=0;$<k.length;){let S=k.indexOf(`
142
+ `,$),C=S===-1?k.length:S;if(C>$){a??={node:x,from:$,to:$+(k.codePointAt($)>65535?2:1)};let R=C;for(;R>$&&(k[R-1]===" "||k[R-1]===" ");)R--;R>$&&(l={node:x,from:R-(R-2>=$&&k.codePointAt(R-2)>65535?2:1),to:R}),p+=C-$}if(S===-1)break;f(),$=S+1}}f();let h=new Map,b=document.createRange(),y=({node:x,from:k,to:$})=>(b.setStart(x,k),b.setEnd(x,$),b.getBoundingClientRect()),w=e.getBoundingClientRect().left+e.clientLeft+parseFloat(o.paddingLeft),v=!1;for(let{line:x,first:k,last:$}of i){let S=!!k.node.parentElement.closest(".bundle-source-long-line");if(n||S){let C=Math.round((y($).top-y(k).top)/r)+1;C>1&&h.set(x,C),C>1&&!S&&(v=!0)}else!v&&y($).right-w>t+.5&&(v=!0)}return{rows:h,toggles:v}}function dV(e){let t=e.closest(AS)?.querySelector(".bundle-source-code-wrap"),n=t?.querySelectorAll(".bundle-source-lineno-row");if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,o=n.length-1,s=0;for(;s<o;){let l=s+o>>1;n[l].getBoundingClientRect().bottom<=r?s=l+1:o=l}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var eL=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),tL=4*1024*1024;function nL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return eL.has(t)?t:null}function FS(e,t,n=()=>Fl(e,t)){return nL(e)!==null&&wn(t)<=tL&&n().category==="minified"}var LS=e=>e.bundle??e.json??e,OS=new WeakMap;function Zg(e,t){let n=OS.get(LS(e));if(n||OS.set(LS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,xv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Ls=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,rL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Ls(n),exfiltration:Ls(r),hosts:Ls(o),readability:t&&{...t,controls:Ls(t.controls,Number)}});function oL(e){switch(e.id){case"held-runs-code":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Ls(t.found),...t.added?{added:Ls(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var NS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(oL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,rL(n)])),dependencies:e.dependencies}),Gd=e=>e?.npm?e.risk?.()?.files??null:null,sL={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?Gd(e)?.get(t)??sL:Zg(e,t)}var Qg=({names:e,loop:t})=>[e>=wv&&`${e.toLocaleString("en")}${e===vv?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function DS(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:eh(e,t,n)}var BS=new WeakMap;function eh(e,t,n){let r=BS.get(e);r||BS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Fl(t,n);return r.set(t,{text:n,read:s}),s}function iL(e,t){let n=$v(e,t),r=n.slice(0,6).map(([o,s])=>`U+${o.toString(16).toUpperCase().padStart(4,"0")} \xD7${s.toLocaleString("en")}`);return`${Nt.get(t).name}: ${r.join(", ")}${n.length>6?`, and ${n.length-6} more`:""}`}var PS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${yv} characters, the longest ${t.toLocaleString("en")}`;function aL(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>PS(e);switch(n){case"binary":return"Not UTF-8 text, or holding a NUL: there is no text to read";case"map":return"A source map";case"inline-map":return`Inline source map, ${he(o)}${r>0?`; minified: ${s()}`:""}`;case"minified":return`Minified: ${r>0?s():`its lines of code ${t.toLocaleString("en")} characters long on average, strings and comments aside, with few spaces`}`;default:return g}}function zS(e,t=!1){if(!e)return g;let n=yi(e),{tag:r,short:o,mark:s}=Nt.get(n);return u`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${aL({...e,category:n})}">${t?o??r:r}</span>`}function CV(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||yi(e)===t?g:zS({...e,category:t})}function WS(e,t=null){let n=e?jo(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(Go(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${PS(e)}${e.category==="long"?", among readable ones":""}`:iL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${Go(e,o)}`}" data-tooltip="${r(o)}">${Nt.get(o).tag}</span>`)}function HS(e){if(!e)return g;let t=yi(e);return t==="ascii"||t==="map"?WS(e):lL(e)}var lL=e=>e?u`${WS(e)}${zS(e)}`:g;function US(e,t,n,r=!0){let{stamps:o,readability:s}=Fn(e,t),i=r&&o.some(({name:l})=>l==="Large"),a=s?.obfuscation;return!i&&!a?g:u`${i?u`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${he(n)}, 256 KiB or more`}">Large</span>`:g}${a?u`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${Qg(a)}`}">Obfuscated</span>`:g}`}var qS=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 2.5c-1.4 0-2 .6-2 2v1.6c0 .9-.5 1.6-1.5 1.9 1 .3 1.5 1 1.5 1.9v1.6c0 1.4.6 2 2 2M10.5 2.5c1.4 0 2 .6 2 2v1.6c0 .9.5 1.6 1.5 1.9-1 .3-1.5 1-1.5 1.9v1.6c0 1.4-.6 2-2 2"/></svg>`,YS=e=>e?.status==="loading"?"Pretty-printing\u2026":e?.status==="error"?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:""}: ${e.message}`:"Pretty-print",cL=8,dL=4,uL=2,pL=30,fL=2,ka="The server's copy is of another file than the one open.",mL="The server didn't pretty-print this file.",Ns=e=>!(e>=400&&e<500&&e!==429),gL=5e3,hL=5*6e4,th=new Map;function XS(e,t,n,r){if(!t?.retry){th.delete(e);return}let o=th.get(e)??0;th.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(gL*2**o,hL))?.unref?.()}var at=new Map,Bs=0,OV=()=>Bs,Os=new Map,bL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,VS=new WeakMap;function JS(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=VS.get(e);return o||VS.set(e,o=new Map),o.has(n)||o.set(n,FS(n,r,()=>eh(e,n,r))),o.get(n)}var nh=!1,qd=new Set,ZS=new Set;function yL(e,t){at.delete(e),at.set(e,t),nh||(nh=!0,ZS=qd,qd=new Set,setTimeout(()=>{nh=!1})),qd.add(e),QS()}function QS(){for(let[e,t]of at){if(at.size<=cL)break;qd.has(e)||ZS.has(e)||t.status==="loading"||(at.delete(e),Os.delete(e))}}var rh=0,jS=[];async function wL(e){rh<fL?rh++:await new Promise(t=>{jS.push(t)});try{return await e()}finally{let t=jS.shift();t?t():rh--}}async function vL(e,t,n,r,o,s){let i;try{let p=s??await Dr(o),{text:d,source:f}=await wL(()=>n.npm?Nk(n.npm.name,n.npm.version,r,p):Lk(n.managedId,r,p));i=f===p&&typeof d=="string"?{status:"ready",text:d,hash:await Dr(d)}:{status:"error",message:ka,retry:!0}}catch(p){if(p?.name==="AbortError"){at.get(e)===t&&(at.delete(e),Os.delete(e));return}i={status:"error",message:p?.message??String(p),retry:Ns(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Bs++;let a=Os.get(e),l=i.status==="error"&&i.retry;l||Os.delete(e),XS(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Os.get(e)),a?.(),QS()}function e1(){for(let[e,t]of an){if(an.size<=dL)break;t.rest&&an.delete(e)}}function GS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function $L(e,t,n,{npm:r}){let o=we(n),s;try{await Ok(r.name,r.version,async({path:i,source:a,text:l,status:p,message:d})=>{let f=o.get(i),h=typeof l=="string"&&typeof f=="string"&&a===await Dr(f)?{status:"ready",text:l,hash:await Dr(l)}:typeof l=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:d,retry:Ns(p)};t.copies.set(i,h),Bs++,GS(t,i)}),s={status:"error",message:mL,retry:!1}}catch(i){if(i?.name==="AbortError"){an.get(e)===t&&an.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}t.rest=s,Bs++;for(let i of[...t.notifiers.keys()])GS(t,i);e1()}function kL(e,t,n,r,o){let s=e.integrity,i=an.get(s);if(an.delete(s),i||(i={copies:new Map,notifiers:new Map,rest:null},$L(s,i,e,t)),an.set(s,i),e1(),r!==we(e).get(n))return{status:"error",message:ka,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function t1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?kL(e,t,n,r,o):n1(e,n,r,o,t):null}function n1(e,t,n,r,o=e){let s=bL(e,t),i=at.get(s),a=i??{status:"loading"};return yL(s,a),(a.status==="loading"||a.retry)&&Os.set(s,r),i||vL(s,a,o,t,n,e.fileHashes?.get(t)),a}var Kd=new Set;function KS(e){e&&(Kd.size===0&&setTimeout(()=>{let t=[...Kd];Kd.clear();for(let n of t)n()},pL),Kd.add(e))}function r1(){for(let[e,t]of Rt){if(Rt.size<=uL)break;t.ended&&Rt.delete(e)}}async function xL(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:l,source:p,text:d,status:f,message:m})=>{if(typeof d!="string"&&Ns(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&we(h).get(l),y=typeof d=="string"&&typeof b=="string"&&p===(h.fileHashes?.get(l)??await Dr(b));t.copies.set(`${a}\0${l}`,y?{status:"ready",text:d,hash:await Dr(d)}:typeof d=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:m,retry:Ns(f)}),Bs++,KS(t.notify)};await(n.npm?Dk(n.npm.name,n.npm.version,r.npm.version,i):Bk(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){Rt.get(e)===t&&Rt.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Bs++,XS(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),KS(t.notify),r1()}function NV(e,t,n,r,o,s){let i=`${e.integrity}\0${t.integrity}`,a=Rt.get(i);Rt.delete(i),a||(a={copies:new Map,notify:null,ended:!1,rest:null},xL(i,a,e,t)),Rt.set(i,a),r1();let l=n==="base"?e:t;return o!==we(l).get(r)?{status:"error",message:ka,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?n1(l,r,o,s):{status:"loading"}))}function BV(){if(c.bundleSourcePretty=!c.bundleSourcePretty,!c.bundleSourcePretty)return;let e=t=>t.status==="error"&&t.retry;for(let[t,n]of at)e(n)&&at.delete(t);for(let[t,n]of an)n.rest&&(e(n.rest)||[...n.copies.values()].some(e))&&an.delete(t);for(let[t,n]of Rt)n.ended&&(n.rest?e(n.rest):[...n.copies.values()].some(e))&&Rt.delete(t)}function oh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function PV(e,t){if(e.files[e.at]===t)return e;let n=[...e.files.slice(0,e.at+1),t];return{...e,files:n,at:n.length-1}}function zV(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}function Ln({title:e,count:t,extra:n=g,tools:r=g,body:o,list:s=!1,className:i=""}){return u`<section class="${`bundles-overview-col ${i}`}"><header class="bundles-overview-col-head"><span class="bundles-overview-col-title">${e} <span class="bundles-overview-col-count">${t}</span>${n}</span>${r}</header><div class="${`bundles-overview-col-body${s?" bundles-overview-col-body--list":""}`}">${o}</div></section>`}var sh=1024,o1=1024*sh,s1=["tiny","small","medium","large","gigantic"],SL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*sh,128*sh,o1,8*o1]};function CL(e,t){let n=SL[e].findIndex(r=>t<r);return s1[n===-1?s1.length-1:n]}function Yd(e,t,n){return u`<span class="${`npm-sized is-${CL(e,t)}`}">${n}</span>`}var _L=["preinstall","install","postinstall"];function i1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),_L.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function xa(e,t=[]){return i1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function GV(e,t=!1){let n=null;try{n=typeof e=="string"?JSON.parse(e):null}catch{}let r=n&&typeof n=="object"&&n.scripts&&typeof n.scripts=="object"?n.scripts:{};return i1(r,t)}var Xd=(e,t)=>new Date(Date.parse(e)+t*864e5);function ih(e){let t=[];if(!e?.days)return t;for(let n=e.days.length-1;n>=6;n-=7){let r=0;for(let o=n-6;o<=n;o++)r+=e.days[o];t.push({from:Xd(e.start,n-6),to:Xd(e.start,n),total:r})}return t.toReversed()}function ah(e){let t=[];if(!e?.days)return t;let n=Date.parse(e.start),r=null;e.days.forEach((s,i)=>{let a=new Date(n+i*864e5);a.getUTCDate()===1&&(r={from:a,to:a,total:0},t.push(r)),r&&(r.total+=s,r.to=a)});let o=t.at(-1);return o&&new Date(o.to.getTime()+864e5).getUTCDate()!==1&&t.pop(),t}var RL=[[10,55e7],[20,405e6],[50,285e6],[100,225e6],[200,165e6],[500,95e6],[1e3,5e7],[2e3,2e7],[5e3,4e6],[1e4,85e4],[2e4,155e3],[5e4,18e3],[1e5,2e3],[1/0,0]];function lh(e){let t=ih(e).slice(-6);if(t.length===0)return null;let n=Math.max(...t.map(r=>r.total));return RL.find(([,r])=>n>=r)[0]}var ch=e=>e<=200?"is-solid":e<=5e3?"is-top":e<=2e4?"is-mid":e<=1e5?"is-low":"is-unpopular";var dh=e=>e>2e4;var uh=14*864e5,ph=(e,{minimumReleaseAge:t=uh,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,JV=90*864e5;var wo=72,Qe={top:6,right:0,bottom:18,left:40},TL=24,ML=4,Sa=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),a1=new Intl.NumberFormat("en"),Zd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,IL=Zd({month:"short",day:"numeric"}),Ps=Zd({month:"short",day:"numeric",year:"numeric"}),fh=Zd({month:"short",year:"numeric"}),l1=Zd({month:"long",year:"numeric"}),hh=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,AL=(e,t)=>{let n=t&&dh(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":ch(e)}`}" data-tooltip="${n?t:g}">${hh(e)}</dd>`},Ds={week:{label:"Weekly",of:e=>ih(e).slice(-52),name:e=>`${IL(e.from)} \u2013 ${Ps(e.to)}`},month:{label:"Monthly",of:ah,name:e=>l1(e.from)}},mh=(e,t)=>`${a1.format(e)} downloads, ${t}`;function c1(e){let t=ah(e).at(-1);return t?bh(t):null}var bh=({total:e,from:t})=>({total:e,month:l1(t)});function EL(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(n=>n*t).find(n=>n>=e)}var gh=class extends Et{static properties={downloads:{attribute:!1},status:{},known:{attribute:!1},_width:{state:!0},_at:{state:!0},_unit:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.downloads=null,this.status="loading",this.known=null,this._width=0,this._at=null,this._unit="week",this._resize=new ResizeObserver(([t])=>{this._width=Math.floor(t.contentRect.width)})}connectedCallback(){super.connectedCallback(),this._resize.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resize.disconnect()}_key(t){let n=this._periods.length-1,r={ArrowLeft:-1,ArrowRight:1,Home:-n-1,End:n+1};t.key in r&&(t.preventDefault(),this._at=Math.min(n,Math.max(0,(this._at??n)+r[t.key])))}willUpdate(t){let n=Ds[this._unit],{downloads:r}=this;if((t.has("downloads")||t.has("_unit"))&&(this._periods=n.of(r)),t.has("downloads")){this._latest=r==null?null:Object.fromEntries(Object.entries(Ds).map(([i,{of:a,name:l}])=>{let p=a(r).at(-1);return[i,{total:p?.total??0,tooltip:p&&mh(p.total,l(p))}]})),this._tier=lh(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:mh(s,`${Ps(Xd(r.start,r.days.length-o.length))} \u2013 ${Ps(Date.parse(r.end))}`)}}(t.has("downloads")||t.has("_unit")||t.has("_width"))&&(this._shape=this._shapeOf(n))}_shapeOf(t){let n=this._periods,r=this._width;if(n.length===0||r<=Qe.left+Qe.right)return null;let o=r-Qe.left-Qe.right,s=wo-Qe.bottom,i=EL(Math.max(...n.map(v=>v.total))),a=v=>s-v/i*(s-Qe.top),l=v=>v.toFixed(1),p=this._unit==="month",d=o/(p?n.length:Math.max(n.length-1,1)),f=p?v=>Qe.left+(v+.5)*d:v=>Qe.left+(n.length>1?v*d:o/2),m=n.length-1,h=v=>Math.min(m,Math.max(0,(p?Math.floor:Math.round)((v-Qe.left)/d))),b=fh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(TL,d*.7)/2;w={bars:n.map(({total:x},k)=>{let[$,S,C]=[f(k)-v,f(k)+v,a(x)],R=Math.min(ML,v,s-C);return`M${l($)},${s}V${l(C+R)}Q${l($)},${l(C)} ${l($+R)},${l(C)}H${l(S-R)}Q${l(S)},${l(C)} ${l(S)},${l(C+R)}V${s}Z`})}}else{let v=n.map((x,k)=>`${k===0?"M":"L"}${l(f(k))},${l(a(x.total))}`).join("");w={line:v,area:`${v}L${l(f(m))},${s}L${l(f(0))},${s}Z`}}return{x:f,y:a,bottom:s,indexAt:h,first:b,last:fh(y.to),...w,ticks:[[0,Sa.format(0)],[i,Sa.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${fh(y.to)}; the latest ${this._unit}: ${mh(y.total,t.name(y))}.`}}_stat(t,n,r){return u`<div class="npm-stat"><dt class="sr-only">${t}</dt><dd data-tooltip="${n?.tooltip||g}">${this._figure(n,r)}</dd></div>`}_figure(t,n){return u`${t?Sa.format(t.total):this.status==="loading"?"\u2026":"\u2014"}<span class="npm-stat-per">/${n}</span>`}_latestStat(){let t=this._latest?.[this._unit];return u`<div class="npm-stat"><dt class="sr-only">${Ds[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${t?.tooltip||g}">${Object.keys(Ds).map(n=>u`<span class="${n===this._unit?"":"is-held"}" aria-hidden="${n===this._unit?g:"true"}">${this._figure(this._latest?.[n],n)}</span>`)}</dd></div>`}_controls(t){return u`<div class="npm-downloads-controls"><span class="bundles-overview-sort" role="group" aria-label="Downloads by">${Object.entries(Ds).map(([n,{label:r}])=>u`<button type="button" aria-pressed="${String(this._unit===n)}" @click="${()=>{this._unit=n,this._at=null}}">${r}</button>`)} </span><span class="npm-downloads-readout" aria-live="polite">${t?u`<strong>${a1.format(t.total)}</strong> <span>${Ds[this._unit].name(t)}</span>`:g}</span></div>`}render(){let t=this.downloads!=null||this.status!=="ready",n=this._at===null?null:this._periods[this._at]??null;return u`<div class="npm-downloads-head"><dl class="npm-stats">${this._latestStat()} ${this._stat("Downloads, last 12 months",this._year,"year")} ${this._tier?u`<div class="npm-stat"><dt class="sr-only">Popularity</dt>${AL(this._tier,this.known)}</div>`:g}</dl>${t?this._controls(n):g}</div>${t?this._plot(n):g}`}_plot(t){let n=this._shape;if(!n)return u`<div class="npm-downloads-plot" style="height: ${wo}px"></div>`;let r=this._width;return u`<div class="npm-downloads-plot" style="height: ${wo}px" tabindex="0" role="img" aria-label="${n.label}" @pointermove="${o=>{this._at=n.indexAt(o.offsetX)}}" @pointerleave="${()=>{this._at=null}}" @keydown="${o=>this._key(o)}" @blur="${()=>{this._at=null}}"><svg width="${r}" height="${wo}" viewBox="0 0 ${r} ${wo}" aria-hidden="true">${n.ticks.map(([o,s])=>Un`<line class="npm-downloads-grid" x1=${Qe.left} x2=${r-Qe.right} y1=${n.y(o)} y2=${n.y(o)}></line>
143
+ <text class="npm-downloads-tick" x=${Qe.left-6} y=${n.y(o)} dy="0.32em" text-anchor="end">${s}</text>`)} ${n.bars?n.bars.map((o,s)=>Un`<path class=${`npm-downloads-bar${s===this._at?" is-at":""}`} d=${o}></path>`):Un`<path class="npm-downloads-area" d=${n.area}></path><path class="npm-downloads-line" d=${n.line}></path>`}<text class="npm-downloads-tick" x="${Qe.left}" y="${wo-4}">${n.first}</text><text class="npm-downloads-tick" x="${r-Qe.right}" y="${wo-4}" text-anchor="end">${n.last}</text>${t&&!n.bars?Un`<line class="npm-downloads-crosshair" x1=${n.x(this._at)} x2=${n.x(this._at)} y1=${Qe.top} y2=${n.bottom}></line>
144
+ <circle class="npm-downloads-dot" cx=${n.x(this._at)} cy=${n.y(t.total)} r="4"></circle>`:g}</svg></div>`}};customElements.get("npm-downloads-chart")||customElements.define("npm-downloads-chart",gh);function yh(e,t){let n=wh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var wh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ca=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function d1(e,t){let n=t.filter(o=>Ca.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let l=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return l!==void 0&&s!==""&&(l.startsWith(s)||s.startsWith(l))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(o=>({text:o,file:/^[\w.+-]+$/u.test(o)&&!/^(?:OR|AND|WITH)$/u.test(o)?r(o):null}))}var On=e=>e?.replace(/\.git$/u,""),vh=new Map([["github",{label:"GitHub",domain:"github.com",protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o,s]=e.split("/",5);return(!o||o==="tree")&&n&&On(r)?[n,On(r),o?s:t.slice(1)]:null}}],["bitbucket",{label:"Bitbucket",domain:"bitbucket.org",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="get"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}],["gitlab",{label:"GitLab",domain:"gitlab.com",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let n=e.slice(1),r=n.lastIndexOf("/");return n.includes("/-/")||n.includes("/archive.tar.gz")?null:n.slice(0,Math.max(r,0))&&On(n.slice(r+1))?[n.slice(0,r),On(n.slice(r+1)),t.slice(1)]:null}}],["gist",{label:"Gist",domain:"gist.github.com",protocols:["git:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="raw"&&(n||r)?[r?n:null,On(r||n),t.slice(1)]:null}}],["sourcehut",{label:"SourceHut",domain:"git.sr.ht",protocols:["git+ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="archive"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}]]),FL=new Map([...vh.values()].map(e=>[e.domain,e])),LL=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...vh.keys()].map(e=>`${e}:`)]);function OL(e){let t=e.indexOf("#"),n=e.indexOf("/"),r=o=>o>-1&&!(t>-1&&o>t);return n>0&&!e.startsWith(".")&&(t>-1?e[t-1]!=="/":!e.endsWith("/"))&&![/\s/u.exec(e)?.index??-1,e.indexOf("@"),e.indexOf(":"),e.indexOf("/",n+1)].some(r)}var Qd=e=>{try{return new URL(e)}catch{return null}};function NL(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=LL.has(e.slice(0,n+1))||t>-1&&t<n?e:t>-1?`git+ssh://${e}`:e.indexOf("//")===n+1?e:`${e.slice(0,n+1)}//${e.slice(n+1)}`;if(Qd(r))return Qd(r);let o=i=>{let a=r.indexOf("#");return r.lastIndexOf(i,a>-1?a:1/0)},s=o(":")>o("@")?`${r.slice(0,o(":"))}/${r.slice(o(":")+1)}`:r;return s.lastIndexOf(":",s.indexOf("#")>-1?s.indexOf("#"):1/0)===-1&&!s.includes("//")&&(s=`git+ssh://${s}`),Qd(s)}function BL(e){if(!e)return null;let t=NL(OL(e)?`github:${e}`:e);if(!t)return null;let n=vh.get(t.protocol.slice(0,-1)),r=n??FL.get(t.hostname.replace(/^www\./u,"")),o=n?[t.pathname.replace(/^\/?[^@]*@|^\//u,""),t.hash.slice(1)]:r?.protocols.includes(t.protocol)&&r.repo(t);try{return o?(o.forEach(s=>s&&decodeURIComponent(s)),r):null}catch{return null}}function DL(e){let t=String(e??"").trim();if(/^(?:[.]|~\/|\/|[a-z]:|file:)/iu.test(t))return"path";if(/^npm:/iu.test(t)||!/[/:]|[.](?:tgz|tar\.gz|tar)$/iu.test(t))return"registry";let n=BL(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let r=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith("git+ssh:")&&r&&!/:\d+(?:\/|$)/u.test(r[1]))return"git";let o=Qd(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(o)?"git":/^https?:$/u.test(o)?"URL":null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?"path":"registry"}function zs(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var u1=e=>DL(e)==="registry";var PL=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function Ws(e){let t=[];for(let[n,r]of PL)for(let[o,s]of Object.entries(e?.[n]??{})){let i=zs(s)?.name??o;t.push({name:o,range:s,kind:r,opens:$l(i)&&u1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function $h(e,t){let n=l=>new Map(Ws(l).map(p=>[`${p.kind??""}\0${p.name}`,p])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[l,{name:p,kind:d,range:f,opens:m}]of o){let h=r.get(l);h?h.range!==f&&i.push({key:l,name:p,kind:d,from:f,to:h.range,opens:h.opens}):a.push({key:l,name:p,kind:d,range:f,opens:m})}for(let[l,{name:p,kind:d,range:f,opens:m}]of r)o.has(l)||s.push({key:l,name:p,kind:d,range:f,opens:m});return{removed:a,added:s,changed:i}}var eu=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>u`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function ln(e,t=null){let n=Nn("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>Ak(e.name,e.version,t),NS);return n.status==="ready"?n:null}var zL=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function w1(e){let t=String(e??"").trim(),n=zL.exec(t),r,o=null;if(n)try{[r,o]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let s=t.indexOf("@",1);[r,o]=s===-1?[t,null]:[t.slice(0,s),t.slice(s+1)]}return!$l(r)||o!==null&&!Lw(o)?null:{name:r,spec:o}}function WL(e,t){let n=new Set(t),r=[];for(let o of[e?.main,e?.module,"index.js"]){if(typeof o!="string")continue;let s=yh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function HL(e){return{integrity:e.integrity,kind:"sourcemap",name:`${e.name}@${e.version}`,size:e.tarballSize,npm:{name:e.name,version:e.version,private:e.private===!0,published:typeof e.published=="string"?e.published:null,manifest:e.manifest??{}}}}function UL(e,t){let n=Array.isArray(t.files)?t.files:[],r=n.map(([o])=>o);return{integrity:e.integrity,kind:"sourcemap",size:e.size,npm:e.npm,json:{version:3,sources:r,sourcesContent:n.map(([,,o])=>typeof o=="string"?o:null)},fileSizes:new Map(n.map(([o,s])=>[o,s])),npmBinaries:new Map(n.filter(([,,o,s])=>typeof o!="string"&&typeof s=="string").map(([o,s,,i])=>[o,{size:s,digest:i}])),npmEntries:WL(e.npm.manifest,r),risk:()=>ln(e.npm)}}function Ra(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:xl.has(t)?t:"overview",...n}:null}var VL=3,p1=new Map,Bn=new Map,jL=1e4,GL=5*6e4,f1=null;function tu(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==f1&&(p1.clear(),Bn.clear(),f1=e),p1}function m1(e,t){let n=tu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>VL;)n.delete(n.keys().next().value)}async function v1(e,t,n){let r=tu().get(`${e}@${t}`);if(r)return m1(r.entry,r.details),r;let o=await _k(e,t,n),s=HL(o),i=UL(s,o);return s.npm.private||m1(s,i),KL(o),{entry:s,details:i}}function KL({name:e,version:t,known:n}){if(!n||typeof n!="object")return;let r={stats:e,advisories:e,tags:`${e}@${t}`,socket:`${e}@${t}`,provenance:`${e}@${t}`};for(let[o,s]of Object.entries(r)){let i=`${o}\0${s}`;n[o]&&Bn.get(i)?.status!=="ready"&&Bn.set(i,{status:"known",data:n[o]})}}function Nn(e,t,n,r){tu();let o=`${e}\0${t}`,s=Bn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return Bn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return Bn.set(o,i),n().then(a=>({status:"ready",...r(a)}),()=>{let a=i.failures+1,l=Math.min(jL*2**(a-1),GL);return{status:"error",failures:a,wait:l,retryAt:Date.now()+l}}).then(a=>(Bn.get(o)!==i||(Bn.set(o,a),a.status==="error"&&setTimeout(()=>{Bn.get(o)===a&&O()},a.wait).unref?.(),qL()),null)).catch(()=>{}),i}var kh=!1;function qL(){kh||(kh=!0,queueMicrotask(()=>{kh=!1,O()}))}function nu(e){return Nn("versions",e,()=>Rk(e),t=>({versions:t.versions??[],distTags:t.distTags??{},times:t.times??{},created:typeof t.created=="string"?t.created:null,private:t.private===!0,teamScoped:t.teamScoped===!0}))}function YL(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function $1(e,t,n=Date.now()){let r=YL(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(s=>{let i=e.times?.[s];return{id:s,detail:r.get(s)?.join(", ")??"",...i&&{date:i.slice(0,10)},...i&&k1(e,i,n)&&{age:Rh(i,n)}}})}function k1(e,t,n=Date.now()){return e.status==="ready"&&ph(t,{minimumReleaseAge:e.teamScoped?0:uh,now:n})}var xh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function g1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?xh.format(-n,"day"):n<730?xh.format(-Math.floor(n/30.44),"month"):xh.format(-Math.floor(n/365.25),"year");return`${Ps(Date.parse(e))} \xB7 ${r}`}var Sh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Rh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Sh.format(-n,"minute"):n<1440?Sh.format(-Math.floor(n/60),"hour"):Sh.format(-Math.floor(n/1440),"day")}var Th=e=>Ps(Date.parse(e)),x1=e=>`Published on ${Th(e)}`;function S1(e){let{name:t,version:n}=e.npm,r=nu(t),o=$1(r,n).map(({id:s,detail:i,date:a,age:l})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...l&&{dateWarning:l}}));return{noun:"version",base:n,widest:{name:`${t}@10.90.90`,detail:"latest"},pending:r.status==="loading",error:r.status==="error"?`Couldn't list the versions of ${t}.`:null,options:o.filter(s=>s.id!==n),choices:o,name:s=>s===e.integrity||s===n?e.name:`${t}@${s}`,load:async s=>(await v1(t,s)).details,dependencies:QL,openDependency:tO,open:(s,i,a)=>xr(t,s,"compare",i?{compareSpec:i,...Wo(a)}:{})}}function xr(e=null,t=null,n="overview",r={}){!_()||!te?.active||te.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function Ch(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function C1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return Ch({input:c.npmLookup?.input??"",pending:!1,error:null}),n(),{view:"npm"};let i=`${r}${o==null?"":`@${o}`}`,a=c.currentView==="bundles"&&c.bundleDetails?.npm,l=a&&c.bundles?.[0]?.npm?.name===r&&c.bundles[0].npm.version===o?c.bundles[0]:null,p=l?c.bundleDetails:null;if(!l){let f=o!=null&&tu().has(`${r}@${o}`);!a&&!f&&(Ch({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await v1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(_a=null,Ch({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!_())return!1}_a?.name===r&&_a.spec===o&&(R1([i,...Mh().filter(f=>f!==i)]),_a=null),Bt();let d=c.bundleCompare?.bundle===l.integrity?c.bundleCompare:null;return s==="review"&&(c.npmReview={bundle:l.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),c.bundles=[l],gr(l.integrity,s),s==="code"&&e.file!=null&&(c.bundleCodeFileRequest={bundle:l.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?c.bundleCompare={bundle:l.integrity,target:e.compareSpec,mode:kl(e.compareMode)}:d&&(c.bundleCompare=d),c.bundleDetails=p,c.npmLookup={input:l.name,pending:!1,error:null},c.currentManagedTeam=null,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),Ra(l,c.bundleDetailsTab,vr(c))}var XL=10,_1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,_a=null;function Mh(){try{let e=JSON.parse(localStorage.getItem(_1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&w1(t)):[]}catch{return[]}}function R1(e){try{localStorage.setItem(_1(),JSON.stringify(e.slice(0,XL)))}catch{}}function JL(e){R1(Mh().filter(t=>t!==e)),O()}function T1(e){let t=w1(e);if(!t){c.npmLookup={input:e??"",pending:!1,error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},O();return}_a=t,xr(t.name,t.spec)}function ZL(e){e.preventDefault(),T1(e.currentTarget.querySelector('input[name="package"]')?.value)}function M1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Mh();return u`<section class="npm-lookup" aria-labelledby="npm-lookup-title"><header class="npm-lookup-head"><span class="npm-lookup-icon" aria-hidden="true">${W(Oo)}</span><h1 id="npm-lookup-title">npm packages</h1></header><p class="npm-lookup-intro">Open a published version to read its files, as its tarball has them. ${t?g:"You can open public packages, and private ones in npm scopes your teams list."}</p><form class="npm-lookup-form" @submit="${ZL}"><input name="package" type="text" aria-label="Package" autocomplete="off" spellcheck="false" maxlength="500" placeholder="lodash, @scope/name@1.2.3 or an npmjs.com link" .value="${e.input??""}" ?disabled="${e.pending}"> <button type="submit" ?disabled="${e.pending}">Open</button></form><div class="npm-lookup-message"><p class="npm-lookup-status" role="status">${e.pending?`Opening ${e.input}\u2026`:g}</p>${e.error?u`<p class="npm-lookup-error" role="alert">${e.error}</p>`:g}</div>${n.length>0?u`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(r=>u`<li><button type="button" class="npm-lookup-recent-open" ?disabled="${e.pending}" @click="${()=>T1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>JL(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function QL(e,t){let n=$h(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ln(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(l=>({flags:[],...a?.find(({key:p})=>p===l.key),...l}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var I1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},A1=({kind:e,name:t})=>`${e??""}\0${t}`,eO=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,h1=e=>eO.exec(zs(e)?.spec??e.trim())?.[1]??null,b1=e=>zs(e)?.name??null;function tO({opens:e,from:t,to:n}){if(!e)return;let r=n&&h1(n),o=t&&h1(t);!o||!r||o===r||b1(t)!==b1(n)?xr(e):xr(e,r,"compare",{compareSpec:o})}function E1(e){let t=Ws(e.npm.manifest);if(t.length===0)return g;let n=I1(e.npm);return Ln({title:"Dependencies",count:t.length,list:!0,body:u`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,l=n.get(A1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${eu(l)}</span> ${i?u`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return u`<li>${a?u`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>xr(a)}">${p}</button>`:u`<div class="bundles-source-row npm-dependency-row is-resource">${p}</div>`}</li>`})}</ul>`})}var nO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function rO(e){let t=I1(e),n=Map.groupBy(Ws(e.manifest).flatMap(r=>(t.get(A1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return nO.filter(([r])=>n.has(r)).map(([r,o,s])=>u`<span class="npm-extension is-warn npm-dependency-check" data-tooltip="${`${s(e.version)}: ${n.get(r).map(({name:i,range:a})=>`${i} ${a}`).join(", ")}`}"><span>${o}</span><span class="npm-extension-count">${n.get(r).length}</span></span>`)}function oO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Ik(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:u`<span class="bundle-origin-tags">${o.tags.map(s=>u`<a class="bundle-origin-link bundle-tag-link" href="${Dg(t,s)}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${s}</span></a>`)}</span>`}function Hs(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?u`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function y1(e,t,n){let r=e.knownAccounts?.includes(t);return u`<a class="${`bundle-origin-link npm-account ${r?"is-known":"is-unknown"}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(t)}`}" data-tooltip="${r?"Publishes one of npm's most downloaded packages":"Unknown publisher"}" target="_blank" rel="noopener noreferrer"><span>${n}</span></a>`}var sO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Ih=e=>e.replace(sO,"$1");function Ah(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,l=a?Od({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=nu(e.npm.name),d=e.npm.published??p.times?.[e.npm.version];return u`<dl class="bundles-detail-meta npm-facts">${e.npm.private?u`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?u`<dt>Deprecated</dt><dd class="npm-deprecated">${Ih(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${d1(i.license,[...s??[]]).map(({text:f,file:m})=>Hs(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${y1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:u`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?u`<dt>Publisher</dt><dd class="bundle-origin-row">${y1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?u`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${d?u`<dt>Published</dt><dd>${k1(p,d)?u`<span class="npm-recent">${g1(d)}</span>`:g1(d)}</dd>`:g} ${l?u`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${l.href}" target="_blank" rel="noopener noreferrer">${W(Kt)}<span>${l.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${l.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${l.commit.href}" data-tooltip="${l.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${W(al)}<span>${l.commit.text}</span></a> ${oO(e,a)}`:u`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:g} ${r===g?g:u`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${i.homepage&&/^https?:\/\//iu.test(i.homepage)?u`<dt>Homepage</dt><dd><a class="bundle-origin-link" href="${i.homepage}" target="_blank" rel="noopener noreferrer"><span>${i.homepage}</span></a></dd>`:g}<dt>Integrity</dt><dd class="mono bundle-integrity" data-tooltip-truncated data-tooltip="${e.integrity}">${e.integrity}</dd>${t?u`<dt>Prefix</dt><dd class="mono">${t}</dd>`:g}</dl>`}var iO=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Hs(r,t,n):n});function F1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(d=>typeof r[d]=="string").map(d=>({label:`${d[0].toUpperCase()}${d.slice(1)}`,path:r[d],file:yh(r[d],t)??wh(r[d])})),s=o.find(d=>d.label==="Main"),i=o.find(d=>d.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),l=xa(r,t),p=Ws(r).length;return u`${o.map(({label:d,path:f,file:m})=>u`<dt>${d}</dt><dd class="mono"><span class="npm-entry-point">${kn(m,Ho(n,m))}${Hs(m,t,f)}</span></dd>`)} ${r.type?u`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?u`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?u`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([d,f])=>`${d} ${f}`).join(", ")}</dd>`:g} ${l.length>0||r.hasInstallScript?u`<dt>Install scripts</dt><dd class="npm-install-scripts">${l.length===0?"Yes":l.map(([d,f])=>u`<div class="npm-install-script"><span class="npm-install-script-name">${d}</span><code>${iO(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Yd("dependencies",p,p===0?"None":p)}${rO(e.npm)}</dd>`}var _h=class extends Et{static properties={name:{},version:{},tab:{},list:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.name="",this.version="",this.tab="overview",this.list=null}render(){let t=this.list?.status==="ready"?this.list:{versions:[],distTags:{}},n=$1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return u`<bundle-selector .options="${n}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${n.length<=1}" aria-busy="${this.list?.status==="loading"?"true":g}" @bundle-change="${r=>{r.detail.value!==this.version&&xr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",_h);var L1=u`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" aria-hidden="true" viewBox="0 75 405 400"><path fill="currentColor" d="m62 447.6 65.8-68.2c2.2-.9 22.7 12 28.2 14.1C295.4 446.8 399.2 263.6 285.1 172 184.3 91.1 41.1 191.5 82 315.6c3.9 12 10.8 21.7 15.4 33.2l-47.1 47C-32 294.9 7.4 142.3 126.3 91.3 241.3 42 374.4 112 398 234.5c29.4 152.7-116.5 274.9-262.7 223.6-15.9-5.6-17-10.6-34.9-10.6H62Z"/><path fill="#e02129" d="M190.1 181.8c128.8-15 141.2 170.8 26 182.6-126.4 12.9-137.9-169.5-26-182.6M209 236c-7.4 5.6-10.8-5.4-13-7.7-9.6-10.3-19.4-.8-14 1.7s9.5-.3 10.1 5.6-9 9.9-7.9 16.4c13.2-5.9 25.9-6.4 39.1 0 3.2-7.1-7.9-12.1-7.8-14.8.1-9.4 11.6-6.2 12.6-7.2 4.3-4.3-8.9-11.7-17.1-.6-1.3 1.8-1.4 6.3-1.9 6.6zm-7.6 14.3c-10.1-1.5-19.3 10-25 11.8s-23.2 1.5-14.9 16.3c3.9.8 5.1-13.1 13.3-9.4 1.9 13.1-2.8 8.7-9 12.2-10 5.7-8.1 20.2-1.3 12.8 2.7-3 1.5-9.6 10.3-7.7 1.3 15.9-.8 8.4-7.9 11.7-11.5 5.3-9 20.2-1.7 14.8s0-10.8 8.6-9.3c1 .2 5.8 10.8 12.4 14.5 13.7 7.9 35 5.5 44.8-7.6s1.6-6.5 1.8-6.7c4-3.1 11.3 4.6 11 9.2l5.5-1.5c2.2-3.1-1.6-8.2-3.9-10.3-7.6-6.8-13.5.9-11-14.8 9-2.6 8.4 8.7 9.4 9.4 6 4.2 8.4-7.8 1.5-13.2-7.4-5.8-13.2 3.6-10.9-13.4 7.4-1.3 8.3 3.2 9.4 9.4 8.3 1.4 6.9-7.2 3.1-11.8-4.5-5.5-10.5-2.6-15.7-4.7-1.3-.5-25.1-18.8-25.1-9.4v52.5c-1.5.6-4.7-1.4-4.7-2.3z"/><ellipse cx="206.6" cy="270" fill="#e02129" rx="74.6" ry="66.5"/><path fill="#fff" d="M200.6 250v55.5s.4 1 .5 1.1c1.1 1.8 3.7 1.8 4.9 0 .1-.2.5-1.1.5-1.3v-55.4a34 34 0 0 1 17.2 5.8c3.1 2.2 5.6 5.1 7.7 8.3 3.8.1 7.6-.5 11.3.8 5.2 1.8 9.6 7.5 9.6 13.1 0 4.2-5.8 5.3-7.3 1.5-.7-1.8-.3-3.2-1.7-5-.8-1-3-2.7-4.3-2.7h-4.5c1.1 4.1.8 8.4.8 12.6.1.1 1.7-.1 2-.1 7.3 0 13.9 6 14.4 13.5.3 5.3-6.3 6-7.5 1.8-.6-2.1-.3-3.5-2-5.3-.8-.9-2.9-2.2-4.2-2.2h-3c.2 1 .2 2.2.1 3.2 0 2.1-.4 4.3-.9 6.4-.2.9-.5 1.8-.7 2.6 5.5-.7 10.5.7 14.1 5 1.7 2 3.4 5.6 3.6 8.3.5 5.4-6.6 6.7-7.8 1.2-.5-2.3-.7-3.8-2.7-5.4-3.1-2.5-7-1.2-10.7-1.4-1.9 3.2-4.5 6.1-7.5 8.4-14.4 10.8-36.9 7.2-46.2-8.4-.4-.2-2.4 0-2.9 0-3.2 0-6-.6-8.4 2.1-1.6 1.8-1.5 3.2-2.1 5.3-1.2 4.5-7.9 3.6-7.7-1.4.3-5.5 4.9-11.3 10.1-13 1.7-.5 5.7-1 7.4-.6.1 0 .1.1.1-.1 0-1.1-.7-2.8-.9-4.1-.4-2.7-.6-5.4-.4-8.1-2.8-.1-5.3.2-7.2 2.5-1.4 1.7-1.3 2.9-1.8 4.9-1.1 4.4-7.9 3.8-7.6-1.5.2-4.1 2.9-8.7 6.3-11 3-2.1 6.5-2.7 10.1-2.6v-5.8c.2-2.2.3-4.5.9-6.6h-4.5c-1.8 0-4.2 2.2-4.9 3.7-1.1 2.3-.4 6-4.1 6.3-3.4.3-4.5-2.3-4.1-5.2.9-6.1 5.1-11 11.3-12.2 3.1-.6 6.2 0 9.3-.4 2.2-3.1 4.8-6 7.9-8.3 4.9-3.5 10.9-5.1 16.8-5.8Z"/><path fill="#fff" d="M197.3 235.1c4.1-.7 8.3-.9 12.4 0 1.1-7.6 7-14.6 15.2-14 3.3.2 5.7 3.1 3.6 6.1-1.5 2-4.1 1-6.2 1.7s-3.7 2.5-4.5 4.4c-.3.7-1.2 3.8-.9 4.3 0 .1 1.3 1 1.6 1.2 3.4 3.1 6.2 7.4 6.6 12 0 .6-.1 1.2.1 1.8-.1.1-2.6-1.5-2.9-1.8-10.5-6-27.5-5.7-37.9.4-.2.1-2.3 1.6-2.4 1.5-.2-5.5 2.8-10.5 6.8-14 .3-.3 1.3-.9 1.5-1.1.1-.1.1-.2.1-.3 0-.5-.3-1.8-.5-2.3-.9-3.3-3-6-6.6-6.3h-2.2c-4.2-.4-4.5-6.5-.2-7.4 2.3-.5 5.2 0 7.3 1 5.2 2.2 8.5 7.4 9.1 12.9Z"/></svg>`;var aO=new Map([["registry",{label:"Source: npm registry",icon:Kw}],["repository",{label:"Source: GitHub repository",icon:W(Kt)}],["osv",{label:"Source: OSV",icon:L1}]]);function lO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function cO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var ru=u`<svg class="external-link-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function dO(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return u`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return u`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function uO(e,t){return u`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${lO(e)}</span> ${typeof t=="number"?u`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function pO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??cO(t)??(typeof e.id=="string"?e.id:null),r=aO.get(e.source);return!r&&!(n&&t)?g:u`<span class="bundle-advisory-reference">${r?u`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?u`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${ru}</a>`:g}</span>`}function fO(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?u`<span class="bundle-advisory-cwes">${t.map((n,r)=>u`${r===0?"":", "}${dO(n)}`)}</span>`:g}function ou(e,t=null){let n=typeof e.cvss?.vectorString=="string"?e.cvss.vectorString:"",r=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,o=Array.isArray(e.versions)?e.versions.filter(s=>typeof s=="string"):[];return u`<li class="bundle-advisory-row">${uO(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details=="string"&&e.details.trim()?u`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:u`<span class="bundle-advisory-title">${e.title}</span>`} ${pO(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?u`<span>${e.informational}</span>`:g} ${r?u`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?u`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${fO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Eh(e){if(typeof e!="string")throw new TypeError(`a text must be a string, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a text must be a well-formed string");return{proven:!1,reason:"unsupported",at:null}}var mO=e=>e.subarray(0,8e3).includes(0),O1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927;function N1(e){let t=!mO(e),n=new Map,r=(l,p)=>n.set(l,(n.get(l)??0)+p),o=0,s=0,i=0;for(let l=0;l<e.length;l++){let p=e[l];if(t&&p===13&&e[l+1]===10)continue;let d=o;o=(o<<7^s>>>25)+p>>>0,s=(s<<7^d>>>25)>>>0,!(++i<64&&p!==10)&&(r(O1(o,s),i),i=0,o=0,s=0)}i>0&&r(O1(o,s),i);let a=Uint32Array.from(n.keys()).sort();return{hashes:a,bytes:Float64Array.from(a,l=>n.get(l))}}function B1(e,t,n,r){if(e===null||t===null||t.length===0)return 0;let o=Math.abs(e.length-t.length),s=Math.max(e.length,t.length);if(s*(6e4-n)<o*6e4)return 0;let i=r(e),a=r(t),l=0;for(let p=0,d=0;p<i.hashes.length&&d<a.hashes.length;)i.hashes[p]<a.hashes[d]?p++:i.hashes[p]>a.hashes[d]?d++:l+=Math.min(i.bytes[p++],a.bytes[d++]);return Math.trunc(l*6e4/s)}function D1(e,t){let n=e.length;if(n!==t.length)return!1;let r=0;if(n>=32&&(e.byteOffset&3)===(t.byteOffset&3)){for(let a=4-(e.byteOffset&3)&3;r<a;r++)if(e[r]!==t[r])return!1;let o=n-r>>>2,s=new Int32Array(e.buffer,e.byteOffset+r,o),i=new Int32Array(t.buffer,t.byteOffset+r,o);for(let a=0;a<o;a++)if(s[a]!==i[a])return!1;r+=o*4}for(;r<n;r++)if(e[r]!==t[r])return!1;return!0}var bt=class extends Error{constructor(t,n,r){let o=r===void 0?"":` in the ${r} tree`;super(n===void 0?t:`${t}: ${JSON.stringify(n)}${o}`),this.name="CompareError",this.path=n,this.tree=r}};var gO=new Set(["file","contiguous-file"]),hO=new Set(["fifo","character-device","block-device"]),bO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function yO(e){if(!Number.isInteger(e)||e<0||e>4095)throw new RangeError(`a mode must be an integer from 0 to 0o7777, not ${e}`)}function wO(e,t,n,r){if(typeof e!="string")throw new TypeError(`an entry's name must be a string, not ${typeof e}`);if(!(e==="."&&t==="directory")){if(r?e==="":bO.test(e))throw new bt(r?"a name must not be empty":"a name must be a relative path with no empty, `.` or `..` segment",e,n);if(!e.isWellFormed())throw new bt("a name must be well-formed Unicode",e,n)}}function vO(e,t,n){if(typeof e!="string"||e==="")throw new bt("a link must name its target",t,n);if(!e.isWellFormed())throw new bt("a link target must be well-formed Unicode",t,n);return e}function $O(e){if(e===void 0)return new Uint8Array(0);if(e instanceof Uint8Array)return e;if(typeof e!="string")throw new TypeError(`a file's data must be a string or a Uint8Array, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a file's text must be well-formed Unicode");return e}var su=e=>typeof e=="string"?Qv(e):e;function kO(e,t,n){if(typeof e!="object"||e===null)throw new TypeError(`an entry must be an object, not ${e===null?"null":typeof e}`);let{name:r,type:o="file",mode:s,linkname:i,data:a}=e;if(wO(r,o,t,n),s!==void 0&&yO(s),gO.has(o))return{path:r,type:"file",mode:s??420,data:$O(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:vO(i,r,t)};if(o==="directory")return{path:r,type:o};throw hO.has(o)?new bt(`a ${o} is neither a file nor a link`,r,t):new TypeError(`${JSON.stringify(o)} is not an entry type`)}function Ta(e,t){return e.type!==t.type?!1:e.type==="symlink"?e.target===t.target:e.data===t.data?!0:typeof e.data=="string"&&typeof t.data=="string"?!1:D1(su(e.data),su(t.data))}function xO(e,t,n){let r=new Set([e.path]),o=t.get(e.target);for(;o?.type==="hardlink";){if(r.has(o.path))throw new bt("a hard link leads back to itself",e.path,n);r.add(o.path),o=t.get(o.target)}if(o===void 0||o.type==="directory")throw new bt("a hard link must name a file or a link in the tree",e.path,n);return{...o,path:e.path}}function Fh(e,t,n){let r=new Map;for(let s of e){let i=kO(s,t,n);if(!(i.type==="directory"&&i.path===".")){if(r.has(i.path))throw new bt("a name is given twice",i.path,t);r.set(i.path,i)}}let o=new Map;for(let[s,i]of r){for(let a=n?-1:s.lastIndexOf("/");a>0;a=s.lastIndexOf("/",a-1)){let l=r.get(s.slice(0,a));if(l!==void 0&&l.type!=="directory")throw new bt(`a path lies under a ${l.type==="symlink"?"link":"file"}`,s,t)}i.type==="hardlink"?o.set(s,xO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var SO=100,CO=4,P1=e=>e.slice(e.lastIndexOf("/")+1);function z1(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${t$(n)}`}function _O({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>z1(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=SO;for(let f of a.get(z1(t[l],i))??[])if(!(o.has(f)||!Ta(e[f],t[l]))&&((p===-1||n[f]===r[l])&&(p=f),n[f]===r[l]||--d===0))break;p!==-1&&s(l,p,6e4)}}var RO=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),TO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function U1(e){let t=e.split("/"),n=t.pop(),r=n.lastIndexOf(".");return r>0?{dirs:t,stem:n.slice(0,r),extension:n.slice(r)}:{dirs:t,stem:n,extension:""}}function W1(e){let{dirs:t,stem:n,extension:r}=U1(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,RO.get(r)??r])}function MO(e){let{dirs:t,stem:n,extension:r}=U1(e),o=[n,TO.get(r)??r],s=t.lastIndexOf("node_modules"),i=s===-1?0:s+(t[s+1]?.startsWith("@")?3:2),a=[JSON.stringify([...o,t])];for(let l=i;l<t.length;l++)a.push(JSON.stringify([...o,t.toSpliced(l,1,null)]));return a}function V1({pairs:e,used:t,scoreOf:n},{remaining:r,open:o},{s,d:i,score:a},l){let p=Math.max(l,a+Math.trunc((6e4-a)/2));return o.some(d=>d!==i&&!e.has(d)&&n(s,d,p)>=p)||r.some(d=>d!==s&&!t.has(d)&&n(d,i,p)>=p)}function IO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=Map.groupBy(t.remaining.filter(m=>o[m].type==="file"),m=>W1(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(W1(s[m].path))??[]).map(h=>({s:h,d:m,score:p(h,m,0)})));for(let m of f.sort((h,b)=>b.score-h.score))!i.has(m.d)&&!a.has(m.s)&&!(n&&V1(e,t,m,r))&&l(m.d,m.s,m.score)}function AO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=new Map,f=(y,w,v)=>new Map(w.filter(x=>y[x].type==="file").map(x=>{let k=MO(y[x].path);for(let $ of k)(d.get($)??d.set($,{sources:[],dests:[]}).get($))[v].push(x);return[x,k]})),m=f(s,t.open.filter(y=>!i.has(y)),"dests"),h=f(o,t.remaining.filter(y=>!a.has(y)),"sources"),b=(y,w)=>{let v=new Set(y.flatMap(x=>d.get(x)[w]));return v.size===1?[...v][0]:-1};for(let[y,w]of h){let v=b(w,"dests");if(v===-1||b(m.get(v),"sources")!==y)continue;let x={s:y,d:v,score:p(y,v,0)};n&&V1(e,t,x,r)||l(v,y,x.score)}}function EO(e,t,n){let r=Oh(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;IO(e,r,o,t),AO(e,r,o,t)}function H1(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function FO({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=H1(t,s),l=H1(e,o);for(let p of o){let d=a.get(e[p]);if(d===void 0||d===-1||l.get(e[p])===-1)continue;let f=r(p,d,i);f>=i&&n(d,p,f)}}var Lh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function LO(e,t){if(e.length<CO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)Lh(e[r],e[n])>0&&(n=r);Lh(e[n],t)>0&&(e[n]=t)}function OO({sourceNames:e,destNames:t,pairs:n,used:r,record:o,scoreOf:s},{remaining:i,open:a},l){let p=[];for(let d of a){let f=[];for(let m of i)LO(f,{score:s(m,d,l),nameScore:e[m]===t[d]?1:0,dst:d,src:m});p.push(...f)}for(let{dst:d,src:f,score:m}of p.sort(Lh)){if(m<l)break;!n.has(d)&&!r.has(f)&&o(d,f,m)}}var Oh=({sources:e,dests:t,pairs:n,used:r})=>({remaining:e.keys().filter(o=>!r.has(o)).toArray(),open:t.keys().filter(o=>!n.has(o)).toArray()});function Nh(e,t,{minimum:n,limit:r,byPath:o}){let s=new Map,i=new Set;if(e.length===0||t.length===0)return s;let a=new Map,l=new Map,p=h=>h.type==="file"?l.get(h)??l.set(h,su(h.data)).get(h):null,d=h=>a.get(h)??a.set(h,N1(h)).get(h),f={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(h=>P1(h.path)),destNames:t.map(h=>P1(h.path)),record(h,b,y){s.set(h,{source:b,score:y}),i.add(b)},bytes:p,scoreOf:(h,b,y)=>B1(p(e[h]),p(t[b]),y,d)};if(_O(f),o&&EO(f,n,r),n>=6e4)return s;FO(f,Oh(f),n+Math.trunc(.5*(6e4-n)));let m=Oh(f);return m.remaining.length*m.open.length<=r*r&&OO(f,m,n),s}function Ma(e){if(e===null)return"";let t=e.type==="symlink"?e.target:e.data;if(typeof t=="string")return t.includes("\0")?void 0:t;if(!t.includes(0))try{return e$(t)}catch{return}}var NO=new Set(["none","all","change","trailing"]);function Ia({horizon:e=1/0,whitespace:t="none",ignoreCase:n=!1}={}){if(e!==1/0&&!(Number.isSafeInteger(e)&&e>=0))throw new RangeError(`horizon must be a whole number or Infinity, not ${e}`);if(!NO.has(t))throw new RangeError(`whitespace must be 'none', 'all', 'change' or 'trailing', not ${t}`);if(typeof n!="boolean")throw new TypeError(`ignoreCase must be a boolean, not ${typeof n}`);return{horizon:e,whitespace:t,ignoreCase:n}}function j1(e,t,n){let r=Ma(e),o=Ma(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:Lp(r,o,n),i=(a,l)=>s.reduce((p,d)=>p+d[l]-d[a],0);return{binary:!1,blocks:s,insertions:i("b0","b1"),deletions:i("a0","a1")}}var BO=50,DO=1e3;function Bh(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return e.codePointAt(r)-t.codePointAt(r);return e.length-t.length}function PO(e){if(e===!1)return null;let t=e===!0?BO:e;if(typeof t!="number")throw new TypeError(`renames must be a boolean or a percentage, not ${typeof e}`);if(!(t>0&&t<=100))throw new RangeError(`renames must be a percentage above 0 and at most 100, not ${e}`);return Math.max(1,Math.trunc(6e4*t/100))}function zO({renamesByPath:e,renameLimit:t,renameGroup:n,paths:r,lines:o}){if(typeof e!="boolean")throw new TypeError(`renamesByPath must be a boolean, not ${typeof e}`);if(t!==1/0&&!(Number.isSafeInteger(t)&&t>=0))throw new RangeError(`renameLimit must be a whole number or Infinity, not ${t}`);if(n!==null&&typeof n!="function")throw new TypeError(`renameGroup must be a function, not ${typeof n}`);if(r!=="tree"&&r!=="keys")throw new RangeError(`paths must be 'tree' or 'keys', not ${r}`);if(typeof o!="boolean")throw new TypeError(`lines must be a boolean, not ${typeof o}`)}var WO=(e,t)=>Ta(e,t)&&(e.type!=="file"||e.mode===t.mode),Aa=(e,t,n,r=null)=>({status:e,old:t,new:n,similarity:r}),HO=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,G1=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null;function K1(e){if(e===null)return{proven:!0,inert:!1};let t=Ma(e);try{return t===void 0?{proven:!1}:Eh(t)}catch{return{proven:!1}}}function UO(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&HO.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=K1(e.new),r=K1(e.old);if(!r.proven||!n.proven||!!r.inert!=!!n.inert)return e;if(r.inert){let o=G1(e.old.path);if(o===null||o!==G1(e.new.path))return e}return{...e,typeOnly:!0}}function VO(e,t){let n=[],r=[],o=[];for(let[s,i]of e){let a=t.get(s);a===void 0?o.push(i):a.type!==i.type?r.push(Aa("type-changed",i,a)):WO(i,a)||r.push(Aa("modified",i,a))}for(let[s,i]of t)e.has(s)||n.push(i);return o.sort((s,i)=>Bh(s.path,i.path)),n.sort((s,i)=>Bh(s.path,i.path)),{changes:r,deleted:o,added:n}}function jO(e,t,{group:n,...r}){if(n===null)return Nh(e,t,r);let o=new Map,s=a=>Map.groupBy(a.keys(),l=>n(a[l].path)),i=s(e);for(let[a,l]of s(t)){let p=i.get(a);if(p!==void 0)for(let[d,{source:f,score:m}]of Nh(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function Dh(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=DO,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=PO(n);zO({renamesByPath:r,renameLimit:o,renameGroup:s,paths:i,lines:a});let m=Ia({horizon:l,whitespace:p,ignoreCase:d}),h=i==="keys",{changes:b,deleted:y,added:w}=VO(Fh(e,"old",h),Fh(t,"new",h)),v=f===null?new Map:jO(y,w,{minimum:f,limit:o,byPath:r,group:s});for(let[k,$]of w.entries()){let S=v.get(k);b.push(S===void 0?Aa("added",null,$):Aa("renamed",y[S.source],$,Math.trunc(S.score*100/6e4)))}let x=new Set(v.values().map(({source:k})=>k));for(let[k,$]of y.entries())x.has(k)||b.push(Aa("deleted",$,null));return b.sort((k,$)=>Bh((k.new??k.old).path,($.new??$.old).path)),(a?b.map(k=>({...k,...j1(k.old,k.new,m)})):b).map(UO)}var iu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function q1(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&iu(o,s,e-1)<iu(o,s,e+1)?e+1:e-1}function GO(e,t,n,{first:r,n:o,m:s,d:i,...a}){e.a.fill(1,0,r).fill(1,o),e.b.fill(1,0,r).fill(1,s);let l=o,p=s;for(let d=i;d>0;d--){let f=l-p,m=q1(f,d,a,t,n[d]),h=iu(t,n[d],m);for(let b=m>f?h:h+1;b<l;b++)e.a[b]=e.b[b-f]=1;l=h,p=l-m}for(let d=r;d<l;d++)e.a[d]=e.b[d]=1}function Y1(e,t,n){let r=0,o=t.length,s=e.length,i=2*(s+o);for(;r<s&&r<o&&e[r]===t[r];)r++;for(;s>r&&o>r&&e[s-1]===t[o-1];)s--,o--;let a={high:s-r,low:r-o},l=[r],p=[{lo:1,start:0}];for(let d=0;d<=a.high-a.low;d++){let f=p[d],m=Math.min(d,a.high),h=Math.max(-d,a.low+(a.low+d&1));p.push({lo:h,start:l.length});for(let b=h;b<=m;b+=2){let y=q1(b,d,a,l,f),w=iu(l,f,y),v=y>b?w:w+1,x=v;for(;v<s&&v-b<o&&e[v]===t[v-b];)v++;if(i+=2+v-x,l.push(v),v>=s&&v-b>=o)return GO(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var KO=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,qO=2e3,YO=800,lu=.6;function au(e,t){if(e.length>qO)return null;let n=e.match(KO)??[];return n.length>YO?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function X1({tokens:e,line:t},n){let r=[];for(let o=0,s=0;s<e.length;o+=e[s++].length){if(n[s])continue;let i=r.at(-1);i&&/^\s*$/u.test(t.slice(i[1],o))?i[1]=o+e[s].length:r.push([o,o+e[s].length])}return r}var J1=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Ph(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=Y1(e.words,t.words,n),o={a:X1(e,n.a),b:X1(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(J1(o.a,e.line),J1(o.b,t.line)):1,steps:r}}function XO(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=au(e,n),o=au(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Ph(r,o);return i<=lu?s:null}var Z1=200,JO=5e6,ZO=6,QO=60,eN=3;function tN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function nN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>au(m,n))),o=r.map(f=>f.map(tN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=eN,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>lu*h.length)return 1/0;return b/Math.max(1,h.length)},a=(f,m)=>r[0][f]===null||r[1][m]===null?1/0:Math.min(i(o[0][f],o[1][m],e[f]),i(o[1][m],o[0][f],t[m])),l=(f,m)=>{if(s+=QO,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Ph(r[0][f],r[1][m]);return s+=b,h<=lu?h:1/0},p=new Float64Array(e.length*t.length).fill(Number.NaN);return{share:(f,m)=>{let h=f*t.length+m;return Number.isNaN(p[h])&&(p[h]=e[f]===t[m]?0:l(f,m)),p[h]},floor:a,spent:()=>s}}function rN(e,t,{share:n,spent:r}){let o=Array.from({length:e+1},()=>new Float64Array(t+1)),s=(a,l)=>n(a,l)===1/0?-1/0:1e3-n(a,l)+o[a][l];for(let a=0;a<e;a++)for(let l=0;l<t;l++)if(o[a+1][l+1]=Math.max(o[a][l+1],o[a+1][l],s(a,l)),r()>JO)return null;let i=[];for(let a=e,l=t;a>0&&l>0;)o[a][l]===o[a][l-1]?l--:o[a][l]===o[a-1][l]?a--:i.push([--a,--l]);return i.toReversed()}function oN(e,t,{share:n,floor:r}){let o=[];for(let s=0,i=0;s<e&&i<t;s++){let a=null,l=1/0,p=Array.from({length:Math.min(t,i+ZO)-i},(d,f)=>[i+f,r(s,i+f)]);for(let[d,f]of p.toSorted((m,h)=>m[1]-h[1]||m[0]-h[0])){if(f>l)break;(n(s,d)<l||n(s,d)===l&&d<a)&&([a,l]=[d,n(s,d)])}a!==null&&(o.push([s,a]),i=a+1)}return o}function sN(e,t){if(e.length>Z1||t.length>Z1)return[];let n=nN(e,t);return rN(e.length,t.length,n)??oN(e.length,t.length,n)}function Q1(e,t,n,r){let{whitespace:o,ignoreCase:s}=Ia(r);try{return Op(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof n$)return!1;throw i}}var eC=/[ \t\n\v\f\r]/u,tC=e=>{let t=e.split(`
145
+ `);return t.at(-1)===""&&t.pop(),t};function iN(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&eC.test(e[n]);)o+=e[n++];for(;r<t.length&&eC.test(t[r]);)s+=t[r++];if(o!==s&&new Set(o+s).size>1)return!0;if(n>=e.length||r>=t.length)return!1}}function aN(e,t,n){try{if(!Q1(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=tC(e),o=tC(t),s=0,i=0;for(let a=0;a<=n.length;a++){let l=a<n.length?n[a].a0:r.length;for(;s<l;s++,i++)if(r[s]!==o[i]&&iN(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function lN(e,t,{extension:n=!0}={}){let r=e.split("/"),o=t.split("/"),s=0;for(;s<r.length-1&&s<o.length-1&&r[s]===o[s];)s++;let i=0;for(;i<r.length-s-1&&i<o.length-s-1&&r.at(-1-i)===o.at(-1-i);)i++;let a={head:s?`${r.slice(0,s).join("/")}/`:"",from:r.slice(s,r.length-i).join("/"),to:o.slice(s,o.length-i).join("/"),tail:i?`/${r.slice(-i).join("/")}`:""},l=a.from.lastIndexOf(".");return n&&!a.from.includes("/")&&!a.to.includes("/")&&l>0&&a.to.lastIndexOf(".")===l&&a.from.slice(0,l)===a.to.slice(0,l)?{...a,head:a.head+a.from.slice(0,l),from:a.from.slice(l),to:a.to.slice(l)}:a}function zh(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}var nC=(e,t)=>`${"../".repeat(e.base.split("/").length-1)}${t}`;function Wh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=zh(n,a);l===null||!t.has(l)||(r.set(a,l),o.add(l),l!==a&&s++)}for(let a of e)r.has(a)||!t.has(a)||o.has(a)||(r.set(a,a),o.add(a));let i=r.size;for(let a of e){if(r.has(a))continue;let l=zh(n,a)??nC(n,a);for(;t.has(l)||o.has(l);)l=`../${l}`;r.set(a,l),o.add(l)}return{paths:r,paired:i,moved:s}}function cN(e,t){let n=new Set(e),r=new Set(t),o=(a,l)=>{let p=new Map;for(let m of a)for(let h=m.indexOf("/");h!==-1;h=m.indexOf("/",h+1))l.has(m.slice(h+1))&&p.set(m.slice(0,h+1),(p.get(m.slice(0,h+1))??0)+1);let d=null,f=!1;for(let[m,h]of p)h>(p.get(d)??0)?[d,f]=[m,!1]:h===p.get(d)&&(f=!0);return f?null:d},s=Wh(n,r,null).paired,i=[[{base:"",other:o(r,n)},n],[{base:o(n,r),other:""},r]].filter(([a])=>a.base!==null&&a.other!==null).map(([a,l])=>({root:a,side:l,...Wh(n,r,a)})).filter(({side:a,paired:l,moved:p})=>l>s&&p*2>=a.size);return i.length===2&&i[0].paired===i[1].paired?null:i.toSorted((a,l)=>l.paired-a.paired)[0]?.root??null}function Hh(e,t){let n=[...e],r=new Set(t),o=cN(n,r);return{root:o,paths:Wh(n,r,o).paths}}function rC({root:e,paths:t},n,r){if(!e||n===".")return n;for(let s of r){let i=t.get(`${n}/${s}`);if(i?.endsWith(`/${s}`))return i.slice(0,-s.length-1)}let o=zh(e,`${n}/`);return o===null?nC(e,n):o.slice(0,-1)||"."}function dN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,rC(n,s,i.map(([a])=>a.slice(s.length+1)))]));return new Map([...[...e??[]].map(([s,i])=>[n.paths.get(s)??s,o.get(i)]),...t??[]])}function uN(e,t){if(!e)return{prefix:t,from:null,to:null};let n=t.startsWith(e.other)?t:"";return{prefix:n,from:`./${e.base}${n.slice(e.other.length)}`,to:`./${n||e.other}`}}function JG(...e){let t=new Set;for(let r of e){let o=we(r);for(let[s,i]of Object.entries(r?.bundle?.reason??{}))Array.isArray(i)&&i.some(a=>o.has(a))&&t.add(s)}let n=r=>e.some(o=>{if(o?.kind!=="stasis")return!1;let s=we(o),i=o?.bundle?.reason?.[r];return new Set(Array.isArray(i)?i.filter(a=>s.has(a)):[]).size<s.size});return[...t].some(n)?[...t].toSorted().map(r=>({id:`reason:${r}`,label:r})):[]}function pN(e,t=""){let n=we(e);if(!t||e?.kind!=="stasis")return n;let r=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(r)?r:[]);return new Map([...n].filter(([s])=>o.has(s)))}function Uh(e,t,n,r){return JSON.stringify([e,t,n,r])}function ZG(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?pN(e,t):null;for(let[s,i]of e.bundle.imports)for(let[a,l]of i)for(let[p,d]of l){let f=typeof d=="string"?[[null,d]]:d;for(let[m,h]of f){if(o&&!o.has(a)&&(r.has(a)||!o.has(h)))continue;let b=Uh(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function r7(e,t,n=new Map,r=new Map,o=null){let s=a=>{let l=n.get(a)??r.get(a);return l===void 0?[...new Set([a,bN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(Uh(p,a.specifier,a.conditions,a.platform))).find(Boolean);if(l&&!s(a.target).includes(l.target)){let{target:p,...d}=l;i.push({...d,baseTarget:r.get(a.target)??a.target,otherTarget:p})}}return i.sort((a,l)=>a.key.localeCompare(l.key)),{changed:i,totalChanges:i.length}}function Us(e){return Zw(e)??0}function oC(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data||e?.format==="digest"&&t?.format==="digest"&&e.digest===t.digest}function o7(e){if(e?.kind!=="stasis"||!e.bundle)return null;let{formats:t,executable:n,entries:r}=e.bundle;return o=>({format:t?.get(o),executable:n?.has(o)??!1,entry:r?.has(o)??!1})}function fN(e,t){return!e||!t?[]:["format","executable","entry"].filter(n=>e[n]!==t[n]).map(n=>({field:n,from:e[n],to:t[n]}))}function sC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function cu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function mN(e,t){return typeof e=="string"?`\0text\0${e.toWellFormed()}`:e?.format==="base64"?`\0base64\0${e.data}`:e?.format==="digest"?`\0digest\0${e.digest}`:`\0none\0${t}`}var gN=250;function hN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:mN(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:gN,lines:!1},a=Dh(s(e,n,"a"),s(t,r,"b"),i);return new Map(a.filter(({status:l})=>l==="renamed").map(l=>[l.old.path,l.new.path]))}function bN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function yN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function s7(e,t,n,r=Hh(e.keys(),t.keys()),o=[]){let{root:s,paths:i}=r,a=new Map([...i].map(([M,I])=>[I,M]));e=new Map([...e].map(([M,I])=>[i.get(M),I]));let l=M=>a.get(M)===M?{}:{basePath:a.get(M)},p=(M,I)=>{let U=fN(o[0]?.(M),o[1]?.(I));return U.length>0?{meta:U}:{}},d=[],f=[],m=[],h=0,b=0,y=0,w=0,v=0,x=0,k=new Map,$=M=>{let I=n(M),U=k.get(I);return U||(U=yN(),k.set(I,U)),U},S=new Set([...e.keys(),...t.keys()]);for(let M of S){let I=e.has(M),U=t.has(M),K=$(M);if(I&&U){let Q=e.get(M),ze=t.get(M),We=oC(Q,ze),Ke=p(a.get(M),M),Ce=Us(Q),yt=We?Ce:Us(ze);if(h+=Ce,b+=yt,K.baseBytes+=Ce,K.otherBytes+=yt,We&&!Ke.meta)x++;else{let Nr=yt-Ce;m.push({path:M,...l(M),baseBytes:Ce,otherBytes:yt,delta:Nr,...Ke,...We?{modified:!1}:{}}),v+=Nr,K.changedFiles++}}else if(I){let Q=Us(e.get(M));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:M,...l(M),bytes:Q})}else{let Q=Us(t.get(M));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:M,bytes:Q})}}let C=hN(d,f,e,t,n);if(C.size>0){let M=new Set(C.values());for(let[I,U]of C){let K=e.get(I),Q=t.get(U),ze=oC(K,Q),We=Us(K),Ke=ze?We:Us(Q);y-=We,w-=Ke,m.push({path:U,renamedFrom:I,basePath:a.get(I),baseBytes:We,otherBytes:Ke,delta:Ke-We,modified:!ze,...p(a.get(I),U)}),v+=Ke-We;let Ce=$(I);Ce.onlyBaseFiles--,Ce.onlyOtherFiles--,Ce.changedFiles++}d.splice(0,d.length,...d.filter(I=>!C.has(I.path))),f.splice(0,f.length,...f.filter(I=>!M.has(I.path)))}let R=[],L=[],A=[],E=[];for(let[M,I]of k){let U=I.baseBytes>0||I.onlyBaseFiles>0||I.changedFiles>0,K=I.otherBytes>0||I.onlyOtherFiles>0||I.changedFiles>0,Q=I.onlyBaseFiles+I.onlyOtherFiles+I.changedFiles;U&&!K?R.push({pkg:M,bytes:I.baseBytes}):K&&!U?L.push({pkg:M,bytes:I.otherBytes}):Q>0||I.baseBytes!==I.otherBytes?A.push({pkg:M,baseBytes:I.baseBytes,otherBytes:I.otherBytes,delta:I.otherBytes-I.baseBytes}):E.push({pkg:M,bytes:I.baseBytes})}return d.sort(cu("path")),f.sort(cu("path")),m.sort(sC("path")),R.sort(cu("pkg")),L.sort(cu("pkg")),A.sort(sC("pkg")),{totals:{baseFiles:e.size,baseBytes:h,otherFiles:t.size,otherBytes:b,onlyBaseFiles:d.length,onlyBaseBytes:y,onlyOtherFiles:f.length,onlyOtherBytes:w,changedFiles:m.length,renamedFiles:C.size,changedDelta:v,unchangedFiles:x,fileDelta:t.size-e.size,byteDelta:b-h,identical:d.length===0&&f.length===0&&m.length===0},files:{onlyBase:d,onlyOther:f,changed:m,root:s,basePaths:i},packages:{onlyBase:R,onlyOther:L,changed:A,unchanged:E}}}function i7(e,t,n){let r=new Map;for(let d of e.onlyBase)r.set(d.pkg,{base:d.bytes,other:null});for(let d of e.onlyOther)r.set(d.pkg,{base:null,other:d.bytes});for(let d of e.changed)r.set(d.pkg,{base:d.baseBytes,other:d.otherBytes});for(let d of e.unchanged??[])r.set(d.pkg,{base:d.bytes,other:d.bytes});let o=(d,f)=>[...d.get(f)??[]].toSorted(Ht),s=new Set([...e.onlyBase,...e.onlyOther,...e.changed].map(d=>d.pkg));for(let d of new Set([...t.keys(),...n.keys()]))Vh(o(t,d),o(n,d))||s.add(d);let i=[],a=[],l=[];for(let d of s){let f=r.get(d)??{base:null,other:null},m=o(n,d),h=o(t,d),b=f.base!==null||h.length>0,y=f.other!==null||m.length>0;b&&!y?l.push({pkg:d,bytes:f.base,versions:h}):y&&!b?i.push({pkg:d,bytes:f.other,versions:m}):a.push({pkg:d,baseBytes:f.base,otherBytes:f.other,delta:f.base!==null&&f.other!==null?f.other-f.base:null,baseVersions:h,otherVersions:m,direction:h.length>0&&m.length>0&&!Vh(h,m)?aC(h,m):null})}let p=(d,f)=>d.pkg.localeCompare(f.pkg);return{removed:l.toSorted(p),added:i.toSorted(p),changed:a.toSorted(p)}}function iC(e){let n=String(e).trim().split("+",1)[0],r=n.indexOf("-");return r===-1?{core:n,pre:""}:{core:n.slice(0,r),pre:n.slice(r+1)}}function Ht(e,t){if(e===t)return 0;let n=iC(e),r=iC(t),o=n.core.split("."),s=r.core.split(".");for(let l=0;l<Math.max(o.length,s.length);l++){let p=Number(o[l]??0),d=Number(s[l]??0);if(Number.isNaN(p)||Number.isNaN(d))return e<t?-1:1;if(p!==d)return p<d?-1:1}if(n.pre===r.pre)return 0;if(!n.pre)return 1;if(!r.pre)return-1;let i=n.pre.split("."),a=r.pre.split(".");for(let l=0;l<Math.max(i.length,a.length);l++){let p=i[l],d=a[l];if(p===void 0)return-1;if(d===void 0)return 1;if(p===d)continue;let f=/^\d+$/u.test(p),m=/^\d+$/u.test(d);return f&&m?Number(p)<Number(d)?-1:1:f!==m?f?-1:1:p<d?-1:1}return 0}function Vh(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function aC(e,t){let n=e.filter(l=>!t.includes(l)).toSorted(Ht),r=t.filter(l=>!e.includes(l)).toSorted(Ht),o=e.filter(l=>t.includes(l)).toSorted(Ht),[s,i]=n.length>0&&r.length>0?[n,r]:n.length>0?[n,o]:[o,r];if(s.length===0||i.length===0)return"changed";let a=(l,p)=>Ht(l.at(-1),p[0])<0;return a(s,i)?"up":a(i,s)?"down":"changed"}function a7(e,t){let n=[],r=[],o=[],s=new Set([...e.keys(),...t.keys()]);for(let a of s){let l=e.get(a),p=t.get(a);if(l&&p){let d=[...l].toSorted(Ht),f=[...p].toSorted(Ht);if(Vh(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:aC(d,f)})}else l?o.push({pkg:a,versions:[...l].toSorted(Ht)}):r.push({pkg:a,versions:[...p].toSorted(Ht)})}let i=(a,l)=>a.pkg.localeCompare(l.pkg);return n.sort(i),r.sort(i),o.sort(i),{updated:n,added:r,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}var lC=`.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)}.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)}.code-block:not(.token){white-space:normal;margin:.4rem 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:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
146
+ `;var cC=`.token.comment,.token.prolog,.token.cdata{color:var(--code-comment);font-style:italic}.token.punctuation{color:var(--muted)}.token.string,.token.attr-value,.token.char,.token.regex{color:var(--code-string)}.token.number,.token.boolean,.token.constant,.token.symbol{color:var(--code-number)}.token.keyword,.token.builtin,.token.important,.token.atrule{color:var(--code-keyword)}.token.function,.token.class-name,.token.tag{color:var(--code-function)}.token.operator,.token.entity,.token.url,.token.attr-name,.token.selector{color:var(--code-operator)}.token.variable,.token.property,.token.parameter{color:var(--code-variable)}.token.annotation{color:var(--code-function)}.token.deleted{color:var(--code-deleted)}.token.inserted{color:var(--code-inserted)}.token.italic{font-style:italic}.token.bold{font-weight:700}.code-control{padding:0 .3em;margin:0 .1em;border-radius:3px;font-size:.8em;line-height:0;font-style:normal;font-weight:400;color:var(--warning);background:rgb(from var(--warning) r g b / .14);box-shadow:inset 0 0 0 1px rgb(from var(--warning) r g b / .45);white-space:nowrap;user-select:none}
147
+ `;var du=`dialog{width:min(94vw,80rem);max-width:none;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;gap:1rem;flex-shrink:0;padding:.8rem 1rem;border-bottom:1px solid var(--border)}header h3{display:flex;align-items:baseline;gap:.6rem;flex:1;min-width:0;margin:0;overflow-wrap:anywhere}header h3>span:last-child{min-width:0}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.advisory-description{min-height:0;padding:1rem;overflow:auto;overscroll-behavior:contain;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.85rem;line-height:1.6}a{color:var(--accent)}button:focus-visible,.advisory-description:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
148
+ `;var jh=class extends N{static styles=[...N.styles,D(lC),D(cC),D(Hc),D(du)];static properties={heading:{attribute:!1},severity:{attribute:!1},_body:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=Rn(()=>{if(!this.isCurrent()){this._body=g,queueMicrotask(this._onClose);return}this._body=it(er(this.markdown))})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return u`<dialog aria-labelledby="advisory-title" @close="${this._onClose}"><header><h3 id="advisory-title">${Uc(this.severity==="unknown"?"unrated":this.severity)}<span>${this.heading}</span></h3><button type="button" aria-label="Close advisory details" @click="${this._onClose}">×</button></header><div class="advisory-description" tabindex="0">${this._body}</div></dialog>`}};customElements.define("advisory-details-dialog",jh);function uu(e){return re("advisory-details-dialog",e)}var dC=`.bundle-advisories-rows{list-style:none;margin:0;padding:0;min-width:0;display:flex;flex-direction:column}.bundle-advisory-row{display:flex;align-items:flex-start;gap:.65rem;padding:.25rem 0;line-height:1.35}.bundle-advisory-row+.bundle-advisory-row{border-top:1px solid color-mix(in oklch,var(--border) 65%,transparent)}.bundle-advisory-rail{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:.125rem;min-width:4.5rem;padding-top:.1rem}.bundle-advisory-severity{text-transform:uppercase;letter-spacing:.04em;font-size:.6rem;font-weight:700;padding:.15rem .4rem;border-radius:3px;color:#000;&.sev-critical{background:var(--critical);color:#fff}&.sev-high{background:var(--high)}&.sev-moderate{background:var(--medium)}&.sev-low{background:var(--low);color:var(--badge-low-text)}&.sev-info{background:var(--info);color:#fff}}.bundle-advisory-cvss-score{color:var(--muted);font-size:.62rem;letter-spacing:.02em}.bundle-advisory-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.bundle-advisory-header{display:flex;align-items:baseline;gap:.5rem}.bundle-advisory-title{flex:1;min-width:0;color:var(--text);font-size:.82rem;font-weight:500;overflow-wrap:anywhere}button.bundle-advisory-title{border:0;background:transparent;padding:0;font-family:inherit;line-height:inherit;text-align:left}button.bundle-advisory-title:hover{color:var(--accent)}button.bundle-advisory-title:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.bundle-advisory-reference{display:inline-flex;align-items:center;gap:.4rem;flex-shrink:0}.bundle-advisory-source{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--muted);user-select:none}.bundle-advisory-source>svg{width:14px;height:14px}.bundle-advisory-subrow{display:flex;align-items:baseline;gap:.75rem}.bundle-advisory-meta{flex:1;min-width:0;color:var(--muted);font-size:.7rem;display:flex;flex-wrap:wrap;gap:.65rem;align-items:baseline}.bundle-advisory-meta .mono{font-size:.68rem}.bundle-advisory-cwes{margin-left:1.25rem}.bundle-advisory-ghsa{flex-shrink:0;display:inline-flex;align-items:center;gap:.2rem;color:var(--muted);text-decoration:none;font-size:.7rem;font-family:var(--font-mono, ui-monospace, monospace);cursor:default;user-select:text}a.bundle-advisory-ghsa:hover{color:var(--accent, #60a5fa)}.bundle-advisory-ghsa .external-link-icon{flex-shrink:0;opacity:.75;user-select:none}a.bundle-advisory-ghsa:hover .external-link-icon{opacity:1}.bundle-advisory-cwe{color:var(--muted);text-decoration:none;user-select:text;cursor:default}.bundle-advisory-cwe:hover{color:var(--accent, #60a5fa)}.bundle-advisory-cvss-vector{flex-shrink:1;min-width:0;text-align:right;color:var(--muted);font-size:.65rem;font-family:var(--font-mono, ui-monospace, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
149
+ `;var uC=`dialog{width:min(94vw,56rem)}.compare-advisories{min-height:0;padding:.75rem 1rem 1rem;overflow:auto;overscroll-behavior:contain}.compare-advisories:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.compare-advisory-group+.compare-advisory-group{margin-top:.9rem}.compare-advisory-group h4{display:flex;align-items:baseline;gap:.4rem;margin:0 0 .25rem;padding:0 .55rem;color:var(--muted);font-size:.68rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.compare-advisory-count{font-variant-numeric:tabular-nums}.compare-advisory-group>.bundle-advisories-rows{padding:.1rem .55rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px)}.compare-advisory-group .bundle-advisory-rail{width:5rem;align-items:stretch;text-align:center}.compare-advisory-group.is-new{& h4{color:var(--critical)}>.bundle-advisories-rows{background:color-mix(in srgb,var(--critical) 6%,var(--bg));border-color:color-mix(in srgb,var(--critical) 55%,var(--border))}}.compare-advisory-group.is-fixed{.bundle-advisory-title{color:var(--muted);text-decoration:line-through}.bundle-advisory-severity{opacity:.55}}
150
+ `;var Gh=class extends N{static styles=[...N.styles,D(dC),D(du),D(uC)];static properties={heading:{attribute:!1},groups:{attribute:!1},_current:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=Rn(()=>{this._current=this.isCurrent(),this._current||queueMicrotask(this._onClose)})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return u`<dialog aria-labelledby="compare-advisories-title" @close="${this._onClose}"><header><h3 id="compare-advisories-title"><span>${this.heading}</span></h3><button type="button" aria-label="Close advisories" @click="${this._onClose}">×</button></header><div class="compare-advisories" tabindex="0">${this._current?this.groups.map(t=>u`<section class="${`compare-advisory-group is-${t.status}`}"><h4>${t.heading} <span class="compare-advisory-count">${t.rows.length}</span></h4><ul class="bundle-advisories-rows">${t.rows}</ul></section>`):g}</div></dialog>`}};customElements.define("npm-compare-advisories-dialog",Gh);function pC(e){return re("npm-compare-advisories-dialog",e)}var fC=(e,t)=>Fn(e,t).runsCode,pu=e=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${e.length>=bv?"+":""} more`:""}`,mC=(e,t=null)=>[...e].map(([n,r])=>`${qr.get(n).name??qr.get(n).tag} (${pu(r)}${t?.has(n)?", new":""})`).join(", "),Kh=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},qh=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t};function gC(e,t,n){return e?[...Map.groupBy(e,([r])=>qr.get(r).tag)].map(([r,o])=>{let{note:s,mark:i}=qr.get(o[0][0]),a=o.map(([f,m])=>[qr.get(f).name,pu(m)]),l=t===void 0?[]:o.filter(([f])=>!t?.has(f)).map(([f])=>qr.get(f).name),p=l.length===0?null:l.length===o.length?"New in this version":`New in this version: ${l.join(", ")}`,d=qh(n,n===void 0?void 0:Kh(o.map(([,f])=>f)));return u`<span data-bundle-view-source="${d.path}" data-bundle-view-line="${d.line}" class="${`npm-runs-code${i?` is-${i}`:""}`}" data-tooltip="${[`${s}: ${a.map(f=>f.join(", ")).join("; ")}`,p].filter(Boolean).join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">${s}</div><div class="compare-tip-rows is-files">${a.map(([f,m])=>u`<span class="compare-tip-path">${f}</span><span class="compare-tip-said">${m}</span>`)}</div>${p?u`<div class="compare-tip-notice">${p}</div>`:g}</div>`}">${r}</span>`}):g}var Yh=(e,t)=>Fn(e,t).exfiltration,hC=e=>[...yp].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),Xh=(e,t)=>[...e].map(([n,r])=>`${yp.get(n).name} (${pu(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),SN=new Map([["Exfiltration","Names a host that catches what is sent to it, as malicious packages send what they take to"],["Remote","Names a service malicious packages send what they take to, or fetch what they run from, though code may well use it"],["IP lookup","Looks up the machine's public address, as malicious packages do before sending what they take"]]);function bC(e,t,n){return e?Ll(e).map(([r,o])=>{let s=qh(n,n===void 0?void 0:Kh([...o.values()]));return u`<span data-bundle-view-source="${s.path}" data-bundle-view-line="${s.line}" class="${`npm-exfiltration is-${Ol(r,o,t)}`}" data-tooltip="${`${SN.get(r)}: ${Xh(o,t)}`}">${r}</span>`}):g}var Jh=e=>e.toLowerCase().replaceAll(" ","-");var yC=({id:e,aliases:t,cwe:n,title:r})=>[e,...t??[]].some(o=>(o??"").startsWith("MAL-"))||(n??[]).includes("CWE-506")||/\bmalware\b/iu.test(r??"");var Zh={accept:"Accept","accept-with-nits":"Accept with nits (non-blocking)","request-changes":"Request changes",reject:"Reject"};function tK(e,t){return[e,t].every(n=>n===void 0||typeof n=="string")&&[e,t].some(n=>typeof n=="string")}function vC(e,t,n=[]){let r=Object.keys(Zh),o=new Set(n??[]),s=e.filter(p=>n!==null&&!o.has(p.file)&&r.includes(p.status)),i=r.findLast(p=>s.some(d=>d.status===p))??"accept";if(t===null)return{coverage:null,checkedFiles:null,totalFiles:null,verdictLimit:i};let a=new Set(s.map(p=>p.file)),l=t.filter(p=>a.has(p)).length;return{coverage:l===t.length?"full":"partial",checkedFiles:l,totalFiles:t.length,verdictLimit:i}}function nK(e,t="accept"){let n=Object.keys(Zh);return n.slice(Math.max(n.indexOf(t),n.indexOf(vC(e,null).verdictLimit)))}function fu({npm:{version:e,manifest:t={}}}){return(t.description==="security holding package"||t.github?.github?.toLowerCase()==="npm/security-holder")&&(t.publisher==="npm"||/-security(?:\.\d+)?$/u.test(e))}function $C(e,t,n,r){if(!e)return"accept";let o=t?.versions?.indexOf(e.version)??-1,s=o<0?[]:t.advisories.filter(a=>a.affected.includes(o)),i=e.private?[]:n?.alerts??[];return r?.findings?.some(a=>a.id==="malware")||fu({npm:e})||i.some(a=>a.type==="malware")||s.some(a=>yC(a)||a.id?.startsWith("MAL-")||/^Malicious package\b/iu.test(a.title??""))?"reject":s.some(a=>a.severity==="critical")||i.some(a=>a.type==="criticalCVE")?"request-changes":"accept"}function rK(e,t,n=[]){return vC(e,t,n).coverage==="partial"&&(n===null||n.includes("package.json")||!e.some(r=>r.file==="package.json"&&Object.keys(Zh).includes(r.status)))}var kC=e=>e.replaceAll(/[\\`*_{}[\]<>]/gu,"\\$&").replaceAll(/\r\n?/gu,`
151
+ `).replaceAll(`
152
+ `,`
153
+ `);function CN(e){return e.replaceAll(/\r\n?/gu,`
154
+ `).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((t,n)=>({text:t.trim(),bullet:n>0})).filter(t=>t.text)}function wC(e,t=""){return CN(e).map(n=>`* ${t}${kC(n.text)}`)}function oK(e){if(e.publishedAt===null||e.revokedAt!==null||e.coverage!=="full"||!["accept","accept-with-nits"].includes(e.status))return null;let t=`${e.package} ${e.version} ${e.integrity}`,n=e.basePackage===null?t:e.basePackage===e.package?`${e.package} ${e.baseVersion} -> ${e.version} ${e.integrity}`:`${e.basePackage} ${e.baseVersion} -> ${t}`,r=[...e.entries.filter(o=>o.status).flatMap(o=>wC(o.comment,`In ${kC(o.file)}: `)),...wC(e.comment)];return`Audited:
155
+ \`\`\`
156
+ ${n}
157
+ \`\`\`${r.length>0?`
158
+
159
+ Notes:
160
+ ${r.join(`
161
+ `)}`:""}`}var La=["critical","high","moderate","low","unknown"],sb=e=>La.includes(e.severity)?e.severity:"unknown",_N=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function ib(e){return Nn("stats",e,()=>Tk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function ab(e){return Nn("advisories",e,()=>Mk(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function lb(e){let{name:t,version:n}=e.npm,r=(o,s)=>u`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${ru}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(hu(e),"socket.dev")}</span>`}var hu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Na(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Ek(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var TC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],RN=50,tb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",nb=e=>u`<svg class="npm-socket-gauge" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6" pathLength="100"></circle><circle class="npm-socket-gauge-fill" cx="8" cy="8" r="6" pathLength="100" stroke-dasharray="${`${e} 100`}"></circle></svg>`;function TN(e){let t=Na(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${TC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${tb(s,o)}`}" href="${hu(e)}" target="_blank" rel="noopener noreferrer">${nb(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var cb=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),mu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),MN=new Map,Qh=new WeakMap;function db(e){let t=e?Na({npm:e}):null;return t?(Qh.has(t)||Qh.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),Qh.get(t)):MN}var ub=(e=[])=>e.map(t=>{let n=cb.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${mu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${mu(t.type)}</span>`});function MC(e,t){return $C(e.npm,ab(e.npm.name),Na(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function IC(e,t){let n=fu(e),o=n&&t!==null&&[...t].every(Oa)?[]:Na(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return u`<div class="npm-alerts">${n?u`<p class="npm-alert" role="note"><strong>Taken down by npm.</strong> npm's security team removed this package's versions, as it does for malicious code, and serves this placeholder in their place${s?u`: ${Hs(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?IN(e,o,t):g}</div>`}function IN(e,t,n){return u`<div class="npm-alert npm-socket-alerts" role="note"><span class="npm-socket-alerts-head"><strong>Socket raises ${t.length===1?"an alert":`${t.length} alerts`} on this version</strong> <a class="npm-package-link" href="${hu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${ru}</a></span><ul>${t.map(r=>{let o=cb.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${mu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Hs(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function AC(e,t,n=g){let r=ib(e.npm.name),o=t_(ln(e.npm)?.findings.find(({id:s})=>s==="popularity"));return u`<div class="npm-figures"><npm-downloads-chart role="region" aria-label="Downloads" .downloads="${r.downloads}" .status="${r.status}" .known="${o}"></npm-downloads-chart><div class="npm-figures-actions">${lb(e)}${t}</div>${n}</div>`}var AN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" aria-hidden="true"><path d="m8 1.75 1.9 3.9 4.3.6-3.1 3 .75 4.25L8 11.5l-3.85 2 .75-4.25-3.1-3 4.3-.6Z"/></svg>`,EN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><circle cx="8" cy="8" r="1.25" fill="currentColor"/></svg>`,FN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3.5" r="1.5"/><circle cx="4" cy="12.5" r="1.5"/><circle cx="12" cy="12.5" r="1.5"/><path d="M4 5v6M12 11V6a2 2 0 0 0-2-2H7m1.5-1.5L7 4l1.5 1.5"/></svg>`,LN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><circle cx="4.5" cy="3.25" r="1.5"/><circle cx="11.5" cy="3.25" r="1.5"/><circle cx="8" cy="12.75" r="1.5"/><path d="M4.5 4.75v.75a2 2 0 0 0 2 2h3a2 2 0 0 0 2-2v-.75M8 7.5v3.75"/></svg>`;function pb(e){if(!e.npm.manifest.github?.github)return g;let t=ib(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,l,p)=>u`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Ld(n.repo)}/${p}`}" data-tooltip="${`${a.toLocaleString("en")} ${l}`}" target="_blank" rel="noopener noreferrer">${i}<span>${Sa.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return u`${r(AN,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(LN,n.forks,n.forks===1?"fork":"forks","forks")} ${r(EN,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(FN,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var EC=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Fk(e,t),o=>({provenance:o.provenance??null}));function fb(e){let t=EC(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function ON(e,t){return e?/^https:\/\/github\.com\/actions\/runner(?:\/github-hosted)?$/u.test(e)?"GitHub Actions":e.startsWith("https://github.com/actions/runner/")?"GitHub Actions, self-hosted runner":e.startsWith("https://gitlab.com/")||e.includes("/-/runners/")?t==="self-hosted"?"GitLab CI, self-hosted runner":"GitLab CI":new URL(e).host:null}var NN=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function mb(e){if(e.npm.private)return g;let t=EC(e.npm);if(!t)return u`<span class="npm-commit-missing">None</span>`;if(t.status==="loading")return u`<span class="npm-commit-missing">Checking…</span>`;if(t.status==="error")return u`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return u`<span class="npm-provenance-warning" data-tooltip="npm lists provenance for this version, but no statement naming its tarball could be read">Listed, but none for this tarball</span>`;let{manifest:n}=e.npm,{repository:r,commit:o,workflow:s,ref:i,builder:a,run:l,logIndex:p,runner:d}=t.provenance,f=($,S,C=g)=>u`<a class="bundle-origin-link" href="${$}" data-tooltip="${C}" target="_blank" rel="noopener noreferrer"><span>${S}</span></a>`,m=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,h=ON(a,d),b=h?.startsWith("GitLab CI"),y=m??r.replace(/^https:\/\//u,""),w=n.github?.github??(n.gitlab?`gitlab.com/${n.gitlab}`:null),v=w&&w.toLowerCase()!==y.toLowerCase(),x=s?.split("/").at(-1),k=[s?m&&o?f(`${r}/blob/${o}/${s.split("/").map(encodeURIComponent).join("/")}`,x,s===x?g:s):u`<span class="mono" data-tooltip="${s===x?g:s}">${x}</span>`:g,l?f(l,"Run"):g,p===null?g:f(`https://search.sigstore.dev/?logIndex=${p}`,"Transparency log")].filter($=>$!==g);return u`<span class="npm-provenance"><span class="npm-provenance-line">${h?u`<span class="${NN(h,d)&&!v?"npm-provenance-builder is-hosted":"npm-provenance-builder"}">${h}</span>`:g} <span class="npm-provenance-sep">from</span> ${o?f(m?`${r}/commit/${o}`:b?`${r}/-/commit/${o}`:r,`${y}@${o.slice(0,7)}`,`${r} at ${o}${i?` (${i})`:""}`):f(r,y)} ${v?u`<span class="npm-provenance-warning" data-tooltip="${`The package names ${w}`}">Not the repository it names</span>`:g}</span> ${k.length>0?u`<span class="npm-provenance-line is-how">${k.map(($,S)=>S===0?$:u`<span class="npm-provenance-sep" aria-hidden="true">·</span>${$}`)}</span>`:g}</span>`}function BN(e,t,n){let r=e.affected.map(o=>t[o]).filter(Boolean);return r.includes(n)?"affects":r.length>0&&r.every(o=>Ht(o,n)<0)?"fixed":"later"}function FC(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function LC(e,t){return ou({...e,title:e.title??e.id,severity:sb(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>uu({heading:n,severity:r,markdown:o,isCurrent:t}))}function OC(e){let{name:t,version:n}=e.npm,r=ab(t),o=FC(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>BN(m,r.versions,n)),l=_N.map(([m,h])=>({status:m,heading:h(n),advisories:i.filter((b,y)=>a[y]===m)})).filter(m=>m.advisories.length>0),p=a.filter(m=>m==="affects").length,d=s&&r.keptAt?u`<p class="npm-advisories-note">GitHub's repository advisories are as of ${r_(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?u`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?u`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?u`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:l.length===0?u`${d}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:u`${d}${l.map(m=>u`<section class="${`npm-advisory-group is-${m.status}`}"><h4 class="npm-advisory-group-head">${m.heading} <span class="bundles-overview-col-count">${m.advisories.length}</span></h4><ul class="bundle-advisories-rows">${m.advisories.map(h=>LC(h,o))}</ul></section>`)}`;return Ln({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?u`<span class="${`npm-advisories-active${p>0?" is-active":""}`}">${p} active</span>`:g})}var DN=[...Nt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),PN=[...Nt].filter(([,{mark:e}])=>e===null).map(([e])=>e),xC=[null,"notice","warn"];function NC(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=jo(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=Go(o,i);xC.indexOf(a)>xC.indexOf(n.get(i)??null)&&n.set(i,a)}s.some(i=>Nt.get(i).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var SC=new WeakMap;function Cr(e){let t=e.npm?Gd(e):e,n=SC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,DS(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=NC(s.values()),d=gi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Oa(b)))i.has(h)||m.files++,m.lines+=d.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:l,unreadable:p,sizes:f,extensions:new Map(r.map(h=>[h,wb(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:cB(r,f,d),content:m},SC.set(e,n)}return n}var gu={key:null,chip:null},BC=e=>`${e.npm.name}@${e.npm.version}`,DC=e=>gu.key===BC(e)?gu.chip:null;function PC(e){let t=DC(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{gu={key:null,chip:null},O()}}}function rb(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=DC(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{gu={key:BC(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function zC(e,t,n){let{name:r}=Nt.get(n),{byPath:o,counts:s,marks:i}=Cr(t),a=i.get(n);return rb(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&jo(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function WC({counts:e,marks:t,unreadable:n},r,o,s){let i=DN.filter(l=>e.has(l));if(i.length===0)return g;let a=i.some(l=>t.get(l)==="warn");return u`<div class="${`npm-readability-warning${a?" is-warn":""}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString("en")} of ${r.toLocaleString("en")} ${o}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${i.map(s)}</ul></div>`}function HC(e,t){return WC(Cr(t),t.json.sources.length,"files",n=>zC(e,t,n))}function gb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=Cr(e),i=n?t:void 0;return u`${gC(fC(e,t),void 0,i)}${bC(Yh(e,t),UC(r),i)}${US(e,t,s.get(t))}${HS(o.get(t))}`}var UC=e=>e===void 0||e?.details.npm&&!Gd(e.details)?void 0:e&&Yh(e.details,e.path);function hb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=UC(r),a=i===void 0?null:new Map(Ll(s).map(([l,p])=>[l,Ol(l,p,i)]));return[...n.map(l=>({name:mu(l.type),severity:cb.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var eb=new WeakMap;function zN(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!eb.has(n)){let r=new Map;for(let{host:o,places:s}of bb(n).get("new-hosts")?.hosts??[])for(let{path:i,line:a}of s)r.set(i,[...r.get(i)??[],{host:o,line:a}]);eb.set(n,r)}return eb.get(n)}function WN(e){if(!e?.length)return g;let t=e.map(({host:n,line:r})=>`${n} (line ${r})`).join(", ");return u`<span class="npm-new-host" data-tooltip="${`${e.length===1?"A host":"Hosts"} the version compared with named in none of its files: ${t}`}">${e.length===1?"New host":"New hosts"}</span>`}var VC={icon:(e,t)=>kn(e,t.map(([n,r])=>Ho(n,r)).find(Gw)),alerts:e=>db(e?.npm),alertTags:ub,newHosts:zN,newHostTag:WN,tag:(e,t,n)=>gb(e,t,!1,n),flags:(e,t,n)=>hb(e,t,[],n),warning(e,t){let{byPath:n}=Cr(e),r=NC(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return WC(r,t.length,t.length===1?"file added or changed":"files added or changed",i=>{let{name:a}=Nt.get(i),l=s.get(i);return u`<li><span class="${`npm-extension is-${l}`}"><span>${a}</span><span class="npm-extension-count">${o.get(i).toLocaleString("en")}</span></span></li>`})}},jC=(e,t)=>[VN(t.get("malware")),jN(t.get("deprecated")),qN(e,t.get("publisher")),YN(e,t.get("provenance-lost")),XN(e,t.get("held-install-scripts")),...QN(e,t),...JN(e,t),ZN(t.get("new-hosts")),eB(t.get("too-new"))],bb=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function GC(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=qC(n),o=bb(ln(t.npm,e.npm?.version??"(empty)")),s=[...jC(n,o),QC(n,r),...e_(n,r,o.get("malware")),oB(t.npm.name,o.get("popularity"))].filter(i=>i!==g);return s.length===0?g:u`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${s}</ul>`}function KC(e){let{npm:t}=e,n=qC([t]),r=ln(t),o=bb(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[...jC(s,o),QC([t],n),...e_([t],n,o.get("malware"))].filter(a=>a!==g);return i.length===0?g:u`<ul class="npm-extensions npm-overview-badges" aria-label="Version at a glance">${i}</ul>`}function HN(e){let t=e?.files??[],n=r=>[`${r.was.toLocaleString("en")} \u2192 ${r.now.toLocaleString("en")} characters`,...r.rebuilt?["its source map rebuilt with it"]:[],...e.major?["in a major release"]:[]];return e?.severity==="critical"||!e?ZC("npm-compare-unreadable","Now unreadable",t,n):Vs(`${yb[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var yb={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},UN=e=>[...bp.keys()].map(t=>{let n=e.get(`held-${Jh(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return Vs(`${yb[n?.severity]} npm-held-file npm-files-${Jh(t)}`,t,r,s=>Xh(s.found,o(s)),hC(r.map(s=>s.found)))});function qC(e){let t=ab(e.at(-1).name);return t.status==="loading"?null:e.map(({version:n})=>{let r=t.status==="ready"?t.versions.indexOf(n):-1;return r===-1?[]:t.advisories.filter(o=>o.affected.includes(r))})}var YC=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,XC=e=>La.find(t=>e.some(n=>sb(n)===t));function VN(e){if(!e)return g;let t=[...e.takenDown?["Taken down by npm"]:[],...(e.advisories??[]).map(({id:n,title:r})=>r?`${n}: ${r}`:n)];return u`<li><span class="npm-extension npm-malware" data-tooltip="${t.join(`
162
+ `)}">Malware</span></li>`}function jN(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Ih(e.message)}">Deprecated</span></li>`:g}var GN={critical:"is-from-known",high:"is-to-unknown"},KN={known:"is-known",maintainer:"is-maintainer"},CC={known:"one that publishes one of npm's most downloaded packages",maintainer:"one of the package's maintainers",new:"an unknown publisher, new to the package",unknown:"an unknown publisher"};function qN([e,t],n){if(!n)return g;let{was:r,now:o,wasKnown:s,nowKnown:i,severity:a,major:l}=n,p=n.wasStanding??(s?"known":"unknown"),d=n.nowStanding??(i?"known":"unknown"),f=(b,y)=>u`<span class="${`npm-compare-account ${KN[y]??"is-unknown"}`}">~${b}</span>`,m=GN[a]??"is-to-known",h=u`A different npm account published the open version,<br>${CC[d]},<br>after ${CC[p]}${l?u`<br>in a major release`:g}`;return u`<li><a class="${`npm-extension npm-compare-publisher ${m}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(o)}`}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Published by ~${r} (${e.version}), then ~${o} (${t.version})`}" .tooltipContent="${vo("Published by",[e,t],[f(r,p),f(o,d)],h)}"><span>Publisher</span><span class="npm-extension-count">${f(r,p)} → ${f(o,d)}</span></a></li>`}function YN([e,t],n){return n?u`<li><span class="npm-extension npm-compare-provenance" data-tooltip="${`npm lists provenance for ${e.version}, none for ${t.version}`}" .tooltipContent="${vo("npm provenance",[e,t],["Listed by npm",u`<span class="compare-tip-none">None</span>`],"The open version was published without the provenance the one compared with has")}">Provenance lost</span></li>`:g}function XN(e,t){if(!t)return g;let{scripts:n,flagged:r=[],was:o}=t,s=new Map(o??[]),i=o?e:e.slice(-1),a=o?[o,n]:[n],l=(d,f)=>d.length===0?u`<span class="compare-tip-none">None</span>`:ob(d.map(([m,h])=>[m,h,f.includes(m)])),p=n.map(([d])=>r.includes(d)?`${d} ${s.has(d)?"changed":"added"}`:d).join(", ");return u`<li><span class="npm-extension is-warn npm-compare-install" data-tooltip="${i.map(({version:d},f)=>`${d}: ${a[f].map(([m,h])=>`${m}: ${h}`).join("; ")||"none"}`).join(" \xB7 ")}" .tooltipContent="${vo("Install scripts",i,a.map((d,f)=>l(d,f===a.length-1?r:[])))}"><span>${n.length===1?"Install script":"Install scripts"}</span><span class="npm-extension-count">${p}</span></span></li>`}var JC=8;function JN(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${yb[t.get(o)?.severity]} npm-held-file ${s}`;return[Vs(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>mC(o.found,o.added),wp(n("held-runs-code").map(o=>o.found)),null,!1),...UN(t),ZC("npm-compare-large","Large new code",n("large-code"),o=>he(o.bytes)),HN(t.get("now-unreadable")),Vs(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${Qg(o.found)}${o.added?`, new since ${e[0].version}`:""}`)]}function ZN(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,JC).map(({path:l,line:p})=>`${l}, line ${p}`);return{path:s,at:i.length>a.length?[...a,`and ${(i.length-a.length).toLocaleString("en")} more files`]:a}}),[r]=t,o=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return Vs("is-warn npm-compare-hosts",n.length===1?"New host":"New hosts",n,s=>s.at,n.length===1?n[0].path:null,o&&(s=>s.currentTarget.dispatchEvent(new CustomEvent("compare-open-line",{detail:o,bubbles:!0,composed:!0}))))}function ZC(e,...t){return Vs(`npm-compare-file ${e}`,...t)}function Vs(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,JC),l=n.length>a.length?`and ${(n.length-a.length).toLocaleString("en")} more`:null,p=h=>[r(h)].flat(),d=`${t}: ${[...a.map(h=>`${h.path} (${p(h).join("; ")})`),...l?[l]:[]].join(", ")}`,f=u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${a.map(h=>u`<span class="compare-tip-path">${h.path}</span><span class="compare-tip-said">${p(h).length>1?u`<span class="compare-tip-lines">${p(h).map(b=>u`<span>${b}</span>`)}</span>`:r(h)}</span>`)}</div>${l?u`<div class="compare-tip-note">${l}</div>`:g}</div>`,m=u`${i?u`<span>${t}</span>`:u`<span class="sr-only">${t}</span>`}${o!==null||n.length>1?u`<span class="npm-extension-count">${o??n.length.toLocaleString("en")}</span>`:g}`;return s?u`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${d}" .tooltipContent="${f}" @click="${s}">${m}</button></li>`:u`<li><span class="${`npm-extension ${e}`}" data-tooltip="${d}" .tooltipContent="${f}">${m}</span></li>`}function QN(e,t){let{version:n}=e.at(-1),r=t.get("held-non-registry-deps")?.dependencies??[],o=t.get("held-unused-deps")?.dependencies??[],s=a=>a.some(l=>l.added)?`; new since ${e[0].version}: ${a.filter(l=>l.added).map(({name:l})=>l).join(", ")}`:"",i=[];if(r.length>0){let a=r.filter(l=>l.added).map(l=>`${l.name} was ${l.was??"none"}`);i.push(u`<li><span class="npm-extension is-warn npm-compare-registry" data-tooltip="${`From elsewhere than npm's registry: ${r.map(l=>`${l.name} ${l.now}`).join(", ")}${s(r)}`}" .tooltipContent="${vo("From elsewhere than npm's registry",[e.at(-1)],[ob(r.map(l=>[l.name,l.now,l.added]))],a.length>0?`New since ${e[0].version}: ${a.join(", ")}`:null)}"><span>Non-registry deps</span><span class="npm-extension-count">${r.length.toLocaleString("en")}</span></span></li>`)}if(o.length>0){let[a,l]=o.length===1?["it","its"]:["them","their"];i.push(u`<li><span class="npm-extension is-warn npm-compare-unimported" data-tooltip="${`Imported by nothing of ${n}: ${o.map(({name:p,range:d})=>`${p} ${d}`).join(", ")}${s(o)}`}" .tooltipContent="${vo(`Nothing imports ${a}`,[e.at(-1)],[ob(o.map(({name:p,range:d,kind:f,added:m})=>[f?`${p} (${f})`:p,d,m]))],`No code file of ${n} names ${a} as an import would, nor does an install script; npm installs ${a} all the same, running ${l} install scripts`)}"><span>Unused deps</span><span class="npm-extension-count">${o.length.toLocaleString("en")}</span></span></li>`)}return i}function eB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${x1(e.published)}">${Rh(e.published)}</span></li>`:g}function QC(e,t){if(!t)return g;let n=t.at(-1),r=e.length>1?t[0]:n;if(r.length===0&&n.length===0)return g;let o=n.length===0?"is-cleared":`sev-${XC(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=vo("Advisories affecting",e,t.map(d=>d.length===0?u`<span class="compare-tip-none">none</span>`:u`<span class="compare-tip-count">${d.length}</span><span class="compare-tip-severities">${La.map(f=>[f,d.filter(m=>sb(m)===f).length]).filter(([,f])=>f>0).map(([f,m])=>u`<span class="${`compare-tip-severity sev-${f}`}">${m} ${f}</span>`)}</span>`),e.length>1?`${s} new \xB7 ${i} fixed`:null),l=`Advisories affecting ${e.map(({version:d},f)=>`${d}: ${t[f].length}`).join(", ")}`,p=u`<span>Advisories</span><span class="npm-extension-count">${YC(r.length,n.length)}</span>`;return e.length>1?u`<li><button type="button" class="${`npm-extension npm-compare-advisories ${o}`}" aria-haspopup="dialog" data-tooltip="${l}" .tooltipContent="${a}" @click="${()=>tB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var ob=e=>u`<span class="compare-tip-lines">${e.map(([t,n,r])=>n==null?u`<span class="compare-tip-none">${t}: none</span>`:u`<span class="${r?"is-flagged":g}">${t}: <code>${n}</code></span>`)}</span>`,vo=(e,t,n,r=null)=>u`<div class="compare-tip"><div class="compare-tip-head">${e}</div><div class="compare-tip-rows">${t.map(({version:o},s)=>u`<span class="compare-tip-version">${o}</span><span class="compare-tip-said">${n[s]}</span>`)}</div>${r?u`<div class="compare-tip-note">${r}</div>`:g}</div>`;function tB([e,t],[n,r]){let o=FC(),s=[["new",`New in ${t.version}`,r.filter(i=>!n.includes(i))],["kept",`Still affecting ${t.version}`,r.filter(i=>n.includes(i))],["fixed",`Fixed in ${t.version}`,n.filter(i=>!r.includes(i))]].filter(([,,i])=>i.length>0).map(([i,a,l])=>({status:i,heading:a,rows:l.map(p=>LC(p,o))}));pC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function nB(e,t,n){if(e===null||e>=n)return!1;let r=XC(t);return r===void 0||La.indexOf(e<=25?"critical":"high")<La.indexOf(r)}function e_(e,t,n=null){let r=e.at(-1),o=e.map(s=>Na({npm:s})?.scores??null);return!o.at(-1)||n?[]:TC.flatMap(([s,i,a,l])=>{let p=o.map(m=>m?Math.round(m[s]*100):null),d=p.at(-1),f=e.length>1?p[0]:d;return d===null||d>=a?[]:s==="vulnerability"&&!(t&&nB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=RN?[]:[u`<li><a class="${`npm-extension npm-socket-score ${tb(d,l)}`}" href="${hu({npm:r})}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Socket's ${i.toLowerCase()} score: ${e.map(({version:m},h)=>`${p[h]??"none"} for ${m}`).join(", ")}`}" .tooltipContent="${vo(`Socket's ${i.toLowerCase()} score`,e,p.map(m=>m===null?u`<span class="compare-tip-none">none</span>`:u`<span class="${`compare-tip-score ${tb(m,l)}`}">${nb(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${nb(d)}<span>${i}</span><span class="npm-extension-count">${YC(f,d)}</span></a></li>`]})}var rB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function t_({known:e,scope:t,account:n}={}){return e?n?`Published with provenance in ${t}, the scope of ~${n}, an account that publishes one of npm's most downloaded packages`:t?`Published with provenance in ${t}, the scope of one of npm's most downloaded packages, which only its owner publishes in`:"Published by an account that publishes one of npm's most downloaded packages":null}function n_(e,t=null,n=!1){let{tier:r,level:o,severity:s}=e,i=t?.total.toLocaleString("en"),a=n?`npm-extension npm-popularity npm-downloads-tier ${rB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?t_(e):null,p=[t&&`${i} downloads/month, ${t.month}`,l].filter(Boolean).join(" \xB7 ");return u`<span class="${a}" data-tooltip="${p||g}" .tooltipContent="${t||l?u`${t?u`<div><strong>${i}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:g}${l?u`<div class="compare-tip-note">${l}</div>`:g}`:null}">${hh(r??1/0)}</span>`}function oB(e,t){let n=ib(e);return t?u`<li>${n_(t,n.status==="ready"&&n.downloads?c1(n.downloads):null,!0)}</li>`:g}var sB=u`<span class="npm-downloads-tier is-unpopular" data-tooltip="No downloads counted by npm, which counts a package's from the day after it was first published">unpopular</span>`,Ea=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Fa={minute:Ea("minute"),hour:Ea("hour"),day:Ea("day"),month:Ea("month"),year:Ea("year")};function r_(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Fa.minute.format(t):t<1440?Fa.hour.format(Math.floor(t/60)):n<60?Fa.day.format(n):n<730?Fa.month.format(Math.floor(n/30.44)):Fa.year.format(Math.floor(n/365.25))}function iB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=r_(Math.abs(n)),i=[`First published on ${Th(t)}`,`${s} ${n>=0?"before":"after"} ${o.version} was`],a=`npm had no package by its name when ${n>=0?r.version:"either version"} was published`;return u`<span class="npm-dependency-flag is-new" data-tooltip="${[...i,a].join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">New package</div>${i.map(l=>u`<div>${l}</div>`)}<div class="compare-tip-note">${a}</div></div>`}">${n>=0?`${s} old`:"published later"}</span>`}function o_(e,t){let n=eu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?bh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?sB:n_(e,r),e.compared?iB(e,e):g]}function aB(e,t){let{counts:n}=Cr(t),r=PN.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>zC(e,t,o))}</ul>`}function wb(e){let t=e.slice(e.lastIndexOf("/")+1),n=/\.d\.[cm]?ts$/iu.exec(t);if(n&&n.index>0)return n[0].toLowerCase();let r=t.lastIndexOf(".");return r>0?t.slice(r).toLowerCase():""}function _C(e,t,n=new Map){let r=new Map;for(let o of e){let s=wb(o),i=r.get(s)??{extension:s,files:0,bytes:0,lines:null};i.files++,i.bytes+=t.get(o)??0,n.has(o)&&(i.lines=(i.lines??0)+n.get(o)),r.set(s,i)}return[...r.values()].toSorted((o,s)=>s.files-o.files||o.extension.localeCompare(s.extension))}var lB=/^(?:package\.json|readme(?:\.md)?)$/iu,Oa=e=>lB.test(e)||Ca.test(e);function cB(e,t,n=new Map){let r=e.filter(Oa),o=new Set(e.filter(l=>!Oa(l)).map(wb)),{files:s,bytes:i,lines:a}=_C(r,t,n).reduce((l,p)=>({files:l.files+p.files,bytes:l.bytes+p.bytes,lines:p.lines===null?l.lines:(l.lines??0)+p.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:s,bytes:i,lines:a}:null,extensions:_C(e,t,n).filter(l=>o.has(l.extension))}}var RC=({bytes:e,lines:t})=>t===null?he(e):`${he(e)} \xB7 ${t.toLocaleString("en")} LoC`;function dB(e,t){let{types:n,extensions:r}=Cr(t);return!n.package&&n.extensions.length===0?g:u`<ul class="npm-extensions" aria-label="File types">${n.package?rb(e,{id:"package",label:"Package",keeps:Oa},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${RC(n.package)}`}):g} ${n.extensions.map(o=>rb(e,{id:`extension:${o.extension}`,label:o.extension||"No extension",keeps:s=>r.get(s)===o.extension},u`<span class="npm-extension-name">${o.extension||"no extension"}</span>`,o.files,{tooltip:RC(o)}))}</ul>`}function s_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",aB(e,n)],["types","File types",dB(e,n)],["socket","Socket",TN(e)]].filter(([,,o])=>o!==g);return r.length===0?g:u`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>u`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function i_(e,t){return e.size===0?g:Ln({title:"Binary files",count:e.size,list:!0,body:u`<ul class="bundles-sources-list">${[...e].map(n=>u`<li><div class="bundles-source-row is-resource">${kn(n,"binary")}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${t.has(n)?u`<span class="bundles-source-size">${he(t.get(n))}</span>`:g}</div></li>`)}</ul>`})}var bu=({severity:e})=>kv.indexOf(e),uB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function a_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>bu(o)-bu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(bu(r.flags[0])-bu(o.flags[0])||o.flags.length-r.flags.length||uB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function vb(e){return{...S1(e),files:VC,badges:GC,dependencyTags:o_,reviewVerdictLimit:MC}}var $b=class extends N{static styles=[...N.styles,D(ot)];static properties={reportName:{type:String},workspaceNames:{type:Array},existingNames:{type:Object},_choice:{state:!0},_newName:{state:!0}};constructor(){super(),this.reportName="",this.workspaceNames=[],this.existingNames=new Set,this._choice="replace",this._newName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_onClose=()=>this._finish({action:"cancel"});_onCancel=()=>this._finish({action:"cancel"});_onChoiceChange=t=>{this._choice=t.target.value};_onNewNameInput=t=>{this._newName=t.target.value};_onNewNameKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onConfirm())};_onConfirm=()=>{if(this._choice==="rename"){let t=(this._newName??"").trim();if(this._renameError(t)!==null)return;this._finish({action:"rename",newName:t});return}this._finish({action:"replace"})};_replaceHint(){let t=this.workspaceNames.length;if(t===0)return u`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let n=t===1?u`workspace <strong>"${this.workspaceNames[0]}"</strong>`:u`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return u`<span class="lwd-option-hint">The local file will be overwritten. When sync is online, the new bytes are also uploaded to ${n} so the cloud copy matches.</span>`}_renameError(t){return t?t===this.reportName?"Pick a name different from the original.":t.includes("\0")?"The new name cannot contain a NUL byte.":t.includes("/")||t.includes("\\")?'The new name cannot contain "/" or "\\".':this.existingNames.has(t)?`A file named "${t}" already exists \u2014 pick something else.`:null:"Enter a new name."}render(){let t=this._choice==="rename",n=(this._newName??"").trim(),r=t?this._renameError(n):null,o=r!==null,s=t?"Rename":"Replace",i=t?"primary":"danger",a=this.workspaceNames.length>0?u`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:g;return u`<dialog @close="${this._onClose}"><header><h3>Import conflict</h3></header><p class="lwd-body"><strong>"${this.reportName}"</strong> already exists with different content.</p><fieldset class="lwd-choice"><legend>What should happen?</legend><label class="lwd-option"><input type="radio" name="icd-choice" value="replace" ?checked="${this._choice==="replace"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Replace</span> ${this._replaceHint()}</span></label> <label class="lwd-option"><input type="radio" name="icd-choice" value="rename" ?checked="${this._choice==="rename"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Rename to</span> <input type="text" class="nwd-input lwd-rename-input" maxlength="200" .value="${this._newName}" ?disabled="${!t}" @input="${this._onNewNameInput}" @keydown="${this._onNewNameKeydown}" @focus="${()=>{this._choice="rename"}}"> ${a} ${r===null?g:u`<p class="lwd-rename-error">${r}</p>`}</span></label></fieldset><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="${i}" ?disabled="${o}" @click="${this._onConfirm}">${s}</button></footer></dialog>`}};customElements.define("import-conflict-dialog",$b);function l_({name:e,workspaceNames:t,existingNames:n}={}){let r=n instanceof Set?n:new Set(n??[]);return new Promise(o=>{let s=document.createElement("import-conflict-dialog");Object.assign(s,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:r,_newName:pB(e??"",r)}),s.addEventListener("resolve",i=>{s.remove(),o(i.detail)}),s.addEventListener("modal-conflict",()=>{s.remove(),o({action:"cancel"})}),document.body.append(s)})}function pB(e,t){if(typeof e!="string"||e.length===0)return"";let n=e.lastIndexOf("."),r=n>0?e.slice(0,n):e,o=n>0?e.slice(n):"",s=r.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let a=`${s}-${i}${o}`;if(!t.has(a))return a}return""}var cn=null,Ba=null,yu=0;function fB(){return cn||(cn=document.createElement("div"),cn.id="app-toast",cn.setAttribute("role","status"),cn.setAttribute("aria-live","polite"),document.body.append(cn),cn)}function Ge(e,{kind:t="info",duration:n=5200}={}){let r=fB(),o=++yu;clearTimeout(Ba),Ba=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{yu===o&&r.classList.add("visible")});let s=()=>{yu===o&&mB()};return n>0&&(Ba=setTimeout(s,n)),s}function mB(){yu++,cn&&(clearTimeout(Ba),Ba=null,cn.classList.remove("visible"))}function c_(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(i=>i.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(i=>n.has(i.id)))return!0;let o=new Set(r.reports.filter(i=>e.currentManagedReport!==null||i.visible!==!1).map(i=>i.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let s=new Set(e.managedReports.map(i=>i.id));return o.size!==s.size||[...o].some(i=>!s.has(i))}async function d_(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=yr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,p=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);p=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(p)l=As(t);else if(a)try{l=(await n()).map(br)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let d=l.find(f=>f.managedId===i);return d?(e.bundles=l,e.currentManagedTeam=p?.id??null,o(),s(wr(t,d,e.currentManagedTeam,e.bundleDetailsTab,vr(e),l)),!0):!1}async function u_({bundleId:e,teamId:t,bundleTab:n,file:r,line:o,endLine:s,compareId:i,compareMode:a},l,p,d){let f=l.find(k=>k.managedId===e);if(!f||!p()||!_())return!1;let m=kg(f.integrity,k=>k.managedId===e),h=c.bundleDetails?.managedId===e&&c.bundleDetails.integrity===f.integrity&&!c.bundleDetails.error?c.bundleDetails:null;try{c.bundles=l,Bt(),gr(f.integrity,n),n==="code"&&r!=null&&(c.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let k=n==="compare"&&i!=null?Is(l,f.integrity).find($=>$.managedId===i):null;k&&(c.bundleCompare={bundle:f.integrity,target:k.integrity,mode:kl(a)}),c.bundleDetails=m??h,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),d(),document.querySelector("#main-content")?.scrollTo({top:0})}catch(k){return p()&&k.name!=="AbortError"&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}),!1}let b=c.bundleDetails,y=()=>_()&&c.currentView==="bundles"&&c.selectedBundle===f.integrity&&c.bundles.some(k=>k.managedId===e&&k.integrity===f.integrity)&&c.bundleDetails===b,w=(k,$)=>(k?.name==="AbortError"||(p()?$&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}):y()&&(c.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:k.message},O())),!1),v=me(),x;for(;;){let k=Le();try{x=await Dc(e,{signal:k});break}catch($){if($?.name==="AbortError"&&k.aborted&&y())continue;return w($,!1)}}try{if(x.integrity!==f.integrity)throw new Error("the metadata is for another version of this bundle");if(y()){let k=hi(x,x.integrity),$=m?.integrity===k.integrity?Object.assign(m,{fileHashes:k.fileHashes,fileSizes:k.fileSizes,lineCounts:k.lineCounts,codeStats:k.codeStats},k.edges?{edges:k.edges}:{}):k;$.managedId=e,c.bundleDetails=$,O({animate:!1})}return p()&&v===me()&&c.bundleDetails?.managedId===e&&c.selectedBundle===f.integrity}catch(k){return w(k,!0)}}function gB(e){let t=1/0,n=Date.now()+5e3;for(let r of e)for(let o of r.bundles??[])["stasis","sourcemap"].includes(o.kind)&&o.summary==null&&(t=Math.min(t,Math.max(n,o.summaryRetryAt??0)));return t}function p_(e){let t=null,n=null,r=null;return async({generation:o,session:s,signal:i,reuse:a=!1,revision:l=null})=>{if(i.aborted)return null;let p=JSON.stringify([o,s?.id,s?.role,s?.csrfToken]);if(r!==p&&(t?.controller.abort(),t=null,n=null,r=p),n&&Date.now()<n.expiresAt&&(a||l!==null&&l===n.revision))return n.teams;if(!t||t.signal.aborted||l!==null&&t.revision!==l){t?.controller.abort(),n=null;let m=new AbortController,h=AbortSignal.any([i,m.signal]),b={controller:m,signal:h,promise:null,revision:l};t=b;let y=null;b.promise=e({fallback:null,signal:h,onRevision:w=>{y=w}}).then(w=>h.aborted||r!==p?null:(w!==null&&(n={teams:w,revision:y,expiresAt:gB(w)}),w)).finally(()=>{t===b&&(t=null)})}let d=t,f=()=>d.controller.abort();i.addEventListener("abort",f,{once:!0});try{let m=await d.promise;return i.aborted||d.signal.aborted?null:m}finally{i.removeEventListener("abort",f)}}}function kb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function f_(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(he(e.byteSize)),t&&[t.files,t.lines].every(r=>Number.isSafeInteger(r)&&r>=0)&&n.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),n.join(" \xB7 ")}function m_(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let s=(o.reports??[]).filter(a=>r(a.filename)||r(oe(a.filename??""))),i=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||s.length>0||i.length>0?[{team:o,reports:s,bundles:i}]:[]})}var wu=class{constructor(){this.expanded=new Map}sync(t,n=!1){let r=JSON.stringify([t.managedSession?.id,t.managedSession?.role,t.managedSession?.csrfToken]);r!==this.owner&&(this.expanded.clear(),this.focus="",this.owner=r);let o=t.managedTeams??[];for(let d of this.expanded.keys())o.some(f=>f.id===d)||this.expanded.delete(d);let s=yr(t),i=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=s?"bundles":"reports",l=o.find(d=>d.id===t.currentManagedTeam&&(s?d.bundles?.some(f=>f.id===s):d.reports?.some(f=>f.id===i))),p=JSON.stringify([a,s||i,l?.id]);if(!(!n&&p===this.focus)&&(this.focus=p,l)){let d=this.expanded.get(l.id)??new Set;d.add(a),this.expanded.set(l.id,d)}}toggle(t,n){let r=this.expanded.get(t)??new Set;r.has(n)?r.delete(n):r.add(n),this.expanded.set(t,r)}shown(t,n,r,o){return!r||o||this.expanded.get(t)?.has(n)===!0}};function g_(e){let t=String(e??"").split(/[\s\-_/.]+/u).filter(Boolean);if(t.length<2)return Array.from(t[0]??"").slice(0,2).join("");let n=t.slice(0,2).map(r=>Array.from(r)[0]).join("");return/^\p{Ll}/u.test(n)?n:n.toUpperCase()}var Dn=null,b_=()=>Promise.resolve(!0);function y_(e){b_=e}function $o(){Dn?.controller.abort(),Dn=null}function hB(e,t,n){let{promise:r,resolve:o}=Promise.withResolvers(),s=!1,i=d=>{clearTimeout(p),t.removeEventListener("abort",a),o(d)},a=()=>i(!1),l=()=>(!s&&!t.aborted&&(s=!0,clearTimeout(p),Promise.resolve().then(()=>n()&&e(t)).then(d=>i(!!d&&n()),()=>i(!1))),r),p=setTimeout(l,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:r,start:l}}function w_(e,t){return t.aborted?Promise.resolve(!1):new Promise(n=>{let r=s=>{t.removeEventListener("abort",o),n(s)},o=()=>r(!1);t.addEventListener("abort",o,{once:!0}),e.then(r,()=>r(!1))})}function _r({catalogOnly:e=!1,hydrate:t}={}){let n=c.managedSession,r=Le(),o=["findings","files","links"].includes(c.currentView),s=["workspace-reports","workspace-bundles"].includes(c.currentView),i=s||o&&(!e||Dn?.teamId===c.currentManagedTeam&&!Dn.signal.aborted)?c.currentManagedTeam:null;if(!_()||!n||n.role==="none"||n.publicShare&&!i)return $o(),t?Promise.resolve(!1):void 0;let a=c.managedTeams?.find(y=>y.id===i)?.reports.find(y=>y.id===c.currentManagedReport&&y.visible===!1)?.id??null,l=JSON.stringify([i,a,n.id,n.role,n.csrfToken,!!n.publicShare]);if(Dn?.key!==l||Dn.signal.aborted){$o();let y=new AbortController,w={key:l,controller:y,signal:y.signal,teamId:i,reportId:a,version:0,target:null};w.current=(v=w.signal)=>!v.aborted&&!w.signal.aborted&&Dn===w&&_()&&c.managedSession?.id===n.id&&c.managedSession?.role===n.role&&c.managedSession?.csrfToken===n.csrfToken&&!!c.managedSession?.publicShare==!!n.publicShare,Dn=w,bB(w)}let p=Dn;if(e||s||!i)return p.target?.ready;let d=rt(c.reports),f=p.target;if(f?.view===r&&f.reports===d&&!f.signal.aborted)return f.ready;f?.controller.abort();let m=new AbortController,h=AbortSignal.any([m.signal,p.signal,r]),b={controller:m,signal:h,view:r,reports:d,version:f?.reports===d?f.version:0};return p.target=b,b.current=()=>p.current()&&!h.aborted&&p.target===b&&c.currentManagedTeam===i&&rt(c.reports)===d,b.hydration=t?hB(async y=>{let w=p.version,v=await t(y);return v&&b.current()&&(b.version=w),v},h,b.current):null,b.ready=b.hydration?.promise,(p.version||p.finished)&&(b.hydration?b.hydration.start():b.version<p.version&&Sb(p,b,p.signal).then(y=>(!y&&b.current()&&($o(),_r()),y))),b.ready}function bB(e){let{signal:t,controller:n,current:r}=e;Yk(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await b_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,Sb(e,e.target,o)):!1,onClose:()=>{r()&&document.dispatchEvent(new Event("managed-feed-closed")),n.abort()}}).catch(o=>{r()&&console.warn("managed: team feed failed",o)}).finally(()=>{e.finished=!0,r()&&e.target?.hydration?.start()})}async function Sb(e,t,n){if(!e.current(n))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let a=new AbortController,l={controller:a,promise:null},p=AbortSignal.any([a.signal,t.signal]);t.refresh=l,l.promise=yB(e,t,p).catch(()=>!1).finally(()=>{t.refresh===l&&(t.refresh=null)})}let r=t.refresh,o=AbortSignal.any([n,t.signal,r.controller.signal]),s=()=>r.controller.abort();n.addEventListener("abort",s,{once:!0});let i;try{i=await w_(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?Sb(e,t,n):!0:!1:!0:!1}async function yB(e,t,n){if(t.hydration&&!await w_(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=h_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[xb(a.id,{signal:n,readAnnotations:o}),xd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var v_=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host([inert]) .brand-tag,:host([inert]) .sidebar-search,:host([inert]) .sidebar-actions,:host([inert]) #file-list,:host([inert]) #sidebar-toggle,:host([inert]) #sidebar-home,:host([inert]) #sidebar-rail,:host([inert]) #encryption-toggle,:host([inert]) #storage-status{visibility:hidden}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;flex-direction:column;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #storage-status,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}:host(.collapsed) #view-as-status,:host(.collapsed) #public-status,:host(.collapsed) .auth-login{display:none}:host(.collapsed) #auth-status[data-authed="1"]{padding:.2rem}:host(.collapsed[data-view-as]) #auth-status .user-avatar{box-shadow:0 0 0 1.5px var(--surface),0 0 0 3px var(--accent)}#sidebar-home,#sidebar-rail{display:none}:host(.collapsed) #sidebar-home{display:grid;margin:0 auto;padding:.3rem 0}:host(.collapsed) #sidebar-rail{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.35rem 0;list-style:none;overflow-y:auto;overscroll-behavior:none;scrollbar-width:none}.rail-item{width:26px;padding:.25rem 0 .2rem;display:grid;justify-items:center;gap:.15rem;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);font:inherit;font-size:.58rem;font-weight:600;line-height:1;white-space:nowrap;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.current{color:var(--accent);background:rgb(from var(--text) r g b / .1)}&:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}}:host([data-mode="managed"]:not([data-workspace-access])) .sidebar-search,:host([data-mode="managed"]:not([data-authenticated])) .sidebar-actions{display:none}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:var(--ui-radius, 4px);&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{padding:.08rem .25rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;font:inherit;font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em;&[role=button]{cursor:default}&[role=button]:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,.brand-tag,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}#encryption-toggle[hidden]{display:none!important}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--bg) r g b / .45);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}sidebar-view-button[hidden]{display:none!important}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:color-mix(in srgb,var(--muted),var(--text) 15%);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item:is(.workspace-item,.team-item){display:block;border-radius:var(--ui-radius, 0 5px 5px 0)}.workspace-heading{display:flex;align-items:stretch;gap:.15rem}.workspace-meta{display:flex;align-items:center;justify-content:space-between;gap:.35rem;padding:0 .3rem .2rem calc(2rem - 3px);color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;user-select:none}.workspace-findings{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-sections{display:inline-flex;flex-shrink:0;margin-left:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.workspace-sections button{padding:.06rem .25rem;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.64rem;line-height:1.4;font-variant-numeric:tabular-nums;+button{border-left:1px solid var(--border)}&:hover:not(:disabled){background:var(--surface-active);color:var(--text)}&[aria-expanded=true]{background:rgb(from var(--accent) r g b / .1);color:var(--accent)}&:disabled{background:var(--surface-active);color:var(--muted)}}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.file-item.team-item:focus-within .workspace-share{display:grid}@media(hover:none){.file-item.team-item .workspace-share{display:grid}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.team-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:var(--ui-radius, 3px);padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item.team-item .team-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item>.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;background:none;border:0;padding:.2rem .3rem .2rem 1.3rem;font-family:inherit;font-size:.78rem;text-align:left}.file-item.team-bundle-item .file-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item .file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}.file-item{list-style:none;position:relative}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:var(--ui-radius, 0 2px 2px 0);pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:var(--ui-radius, 0 5px 5px 0);font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item:is(.workspace-item,.team-item) button.file-name{flex:1;min-width:0;padding-left:calc(.55rem - 3px)}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.file-item.current button.file-name{background:rgb(from var(--accent) r g b / .09);border-color:rgb(from var(--accent) r g b / .16);.file-icon,.file-count{color:var(--text)}}.file-item.content-hidden button.file-name .file-label{color:var(--muted)}.file-item:is(.workspace-item,.team-item):hover{background:rgb(from var(--text) r g b / .04)}.file-item:is(.workspace-item,.team-item) button.file-name:hover{background:transparent}.file-item:is(.workspace-item,.team-item).current{background:rgb(from var(--accent) r g b / .09);border-radius:var(--ui-radius, 0 5px 5px 0);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .16)}.file-item:is(.workspace-item,.team-item).current button.file-name{background:transparent;border-color:transparent}:host-context(body.theme-paper) .file-item.current{background:transparent;box-shadow:none;& button.file-name{background:transparent;border-color:transparent}.file-name:after{content:"";position:absolute;inset:0;border:1px dashed var(--border);border-left:0;pointer-events:none}}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(prefers-reduced-motion:reduce){:host,*,*:before,*:after{transition:none!important}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:default;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:var(--ui-radius, 4px)}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 4px);padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current[hidden]{display:none!important}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-proxy-auth] .sync-dot{box-shadow:0 0 0 2px var(--accent)}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}#storage-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .55rem;background:rgb(from var(--medium) r g b / .12);border:1px solid rgb(from var(--medium) r g b / .3);border-radius:var(--ui-radius, 5px);color:light-dark(#b25b00,#f0a060);font-size:.72rem;font-family:inherit;cursor:default;text-align:left;-webkit-app-region:no-drag;app-region:no-drag;&:hover{background:rgb(from var(--medium) r g b / .18);border-color:rgb(from var(--medium) r g b / .5)}.storage-dot{width:7px;height:7px;border-radius:50%;background:var(--medium);flex-shrink:0}}#storage-status[hidden]{display:none}#view-as-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .3rem .3rem .55rem;background:rgb(from var(--accent) r g b / .12);border:1px solid rgb(from var(--accent) r g b / .35);border-radius:var(--ui-radius, 5px);color:var(--text);font-size:.72rem;user-select:none;-webkit-app-region:no-drag;app-region:no-drag;.view-as-label{flex:1;display:grid;gap:.05rem;min-width:0}.view-as-label>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-as-note{color:var(--muted);font-size:.66rem}.view-as-stop{flex-shrink:0;padding:.15rem .5rem;font:inherit;font-weight:500}}#view-as-status[hidden]{display:none}#auth-status[hidden],#manage-status[hidden]{display:none!important}#auth-status{display:inline-flex;align-items:center}#auth-status[data-authed="1"]{display:inline-flex;align-items:center;gap:.4rem;max-width:12rem;padding:.2rem .35rem;border-color:transparent;border-radius:var(--ui-radius, 5px)}#auth-status[data-authed="1"]:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#manage-status[hidden]{display:none}#manage-status{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;padding:.25rem;border-color:transparent;color:var(--muted)}#manage-status:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#public-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.2rem 0;color:var(--muted);font-size:.72rem;user-select:none}#public-status[hidden]{display:none}.auth-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font:inherit;font-size:.72rem;font-weight:400}.user-avatar{position:relative;flex-shrink:0;width:22px;height:22px;border-radius:50%;overflow:hidden;background:var(--accent);display:inline-grid;place-items:center;user-select:none}.user-avatar-lg{width:38px;height:38px}.user-avatar-fallback{font-size:.72rem;font-weight:600;line-height:1;color:var(--bg);text-transform:uppercase}.user-avatar-lg .user-avatar-fallback{font-size:1.05rem}.user-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.user-avatar img.broken{display:none}.user-menu[popover]{position:fixed;inset:auto;margin:0;min-width:11rem;flex-direction:column;gap:.1rem;background:var(--surface, var(--bg));border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.3rem;box-shadow:0 4px 14px #00000047}.user-menu[popover]:not(:popover-open){display:none}.user-menu[popover]:popover-open{display:flex}.user-card{display:flex;align-items:center;gap:.5rem;padding:.3rem .35rem .45rem;border-bottom:1px solid var(--border);margin-bottom:.2rem}.user-id{display:flex;flex-direction:column;min-width:0}.user-login{font-weight:600;font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-name{font-size:.74rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-row{display:block;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:.4rem .5rem;font:inherit;font-size:.82rem;color:var(--text)}.user-menu-row.logout-row{display:inline-flex;align-items:center;gap:.4rem;font-size:.76rem}.logout-row svg{flex:0 0 auto}.user-menu-row:hover{background:rgb(from var(--text) r g b / .08)}
163
+ `;var $_=`:is(.file-icon,.report-logo){&.brand-deepview{--brand-bg: #2563eb;--brand-fg: #fff}&.brand-claude{--brand-bg: #d97757;--brand-fg: #fff}&.brand-codex{--brand-bg: #fff;--brand-fg: #000}&.brand-vercel{--brand-bg: #000;--brand-fg: #fff}&.brand-markdown{--brand-bg: #374151;--brand-fg: #fff}&.brand-piolium{--brand-bg: #fbb829;--brand-fg: #1c1b19}.bg{fill:var(--brand-bg)}.fg{fill:var(--brand-fg)}}.file-icon:is(.brand-codex,.brand-vercel) .bg{stroke:var(--brand-fg);stroke-width:.5}.report-logo{display:grid;place-items:center;align-self:stretch;flex:0 0 20px;background:var(--brand-bg);border-right:1px solid var(--border)}
164
+ `;var Cb=class extends N{static styles=[...N.styles,D(rn)];static properties={_userName:{state:!0},_busy:{state:!0},_error:{state:!0},_phase:{state:!0},_success:{state:!0},_orphan:{state:!0},_orphanAck:{state:!0},_canCancel:{state:!0}};constructor(){super(),this._userName="",this._busy=!1,this._error="",this._phase="",this._success=!1,this._orphan=!1,this._orphanAck=!1,this._canCancel=!0,this._abortController=null}updated(t){if(t.has("_success")&&this._success){let n=this.renderRoot.querySelector("footer button.primary");n&&n.focus()}}beforeOpen(){typeof location<"u"&&(this._userName=location.hostname||"DeepView"),this._orphan=Yl(),this._vaultStateUnsub=kt(()=>{if(this._settled)return;let t=Yl();this._orphan&&!t&&ft()?(this._error="Encryption was just enabled in another tab. Close this dialog and reload to unlock.",this._busy=!1,this._canCancel=!0):this._orphan!==t&&(this._orphan=t)})}async focusInitial(){await this.updateComplete;let t=this._orphan?'input[data-role="orphan-ack"]':'input[data-role="name"]';this.renderRoot.querySelector(t)?.focus()}disconnectedCallback(){if(super.disconnectedCallback(),this._vaultStateUnsub){try{this._vaultStateUnsub()}catch{}this._vaultStateUnsub=null}}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onClose=()=>this._finish(this._success);_onCancel=()=>{this._busy&&!this._canCancel||this._finish(!1)};_onDialogCancel=t=>{if(this._busy&&!this._canCancel){t.preventDefault();return}this._finish(!1)};_onNameInput=t=>{this._userName=t.target.value};_onOrphanAckInput=t=>{this._orphanAck=t.target.checked};_onWipeOrphan=async()=>{if(!this._busy&&this._orphanAck){if(ft()){this._error="Encryption was just enabled in another tab. Reload this page to unlock.";return}this._busy=!0,this._canCancel=!1,this._error="",this._phase="Clearing previous vault state\u2026";try{await Pp({refuseIfEnabled:!0}),location.reload()}catch(t){this._error=`Could not clear previous vault state: ${t?.message??t}`,this._phase=""}finally{this._busy=!1,this._canCancel=!0}}};_onEnable=async()=>{if(!this._busy){if(!tr()){this._error="Passkeys are not supported in this browser.";return}this._busy=!0,this._canCancel=!0,this._error="",this._phase="Registering passkey\u2026",this._abortController=new AbortController;try{await Bp({userName:this._userName.trim()||"DeepView user",rpName:"DeepView",signal:this._abortController.signal,migrate:async({seal:n})=>{this._canCancel=!1,this._phase="Encrypting workspaces and metadata\u2026",await zp({seal:n}),this._phase="Encrypting triage data\u2026",await Qf({seal:n}),this._phase="Encrypting report files\u2026",await qp({seal:n}),this._phase="Encrypting bundles\u2026",await Xp({seal:n})}})&&(this._success=!0,this._phase="")}catch(t){t?.name==="AbortError"?this._error="":this._error=t?.message??String(t),this._phase=""}finally{this._busy=!1,this._canCancel=!0,this._abortController=null}}};_body(){if(this._orphan)return u`<p class="wsl-error">DeepView found an abandoned passkey setup on this device. The original passkey can no longer be accessed, so any local data still encrypted under it is <strong>unreadable</strong> and cannot be recovered.</p><p class="nwd-note ui-hint">To enable encryption, DeepView will <strong>permanently delete ALL local DeepView data on this device</strong> — including any plaintext workspaces or reports you may have added after the previous passkey was lost — and then register a fresh passkey. This is irreversible. There is no backup.</p><label class="wsl-ack"><input type="checkbox" data-role="orphan-ack" .checked="${this._orphanAck}" ?disabled="${this._busy}" @change="${this._onOrphanAckInput}"> <span>I understand all local DeepView data on this device will be deleted.</span></label> ${this._phase?u`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${this._busy||!this._orphanAck}" @click="${this._onWipeOrphan}">${this._busy?"Working\u2026":"Wipe and continue"}</button></footer>`;if(this._success)return u`<p class="nwd-note ui-hint"><strong>Encryption is on.</strong> Your triage data and report files are now sealed under your passkey. You'll be asked to unlock with the passkey on every fresh load.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${()=>this._finish(!0)}">Close</button></footer>`;let t=tr();return u`<p class="nwd-note ui-hint">Passkey encryption protects your local triage and report data with a hardware-backed key (TouchID, Windows Hello, security key). Without the passkey, the data on disk is unreadable — even to scripts running on this origin.</p><p class="wsl-error"><strong>If you lose access to this passkey, your data CANNOT be recovered.</strong> DeepView has no backup key, no recovery code, and no escrow. Make sure your passkey is backed up (iCloud Keychain / Google Password Manager sync, or a second registered device) before relying on encryption for important data.</p><p class="nwd-note ui-hint"><strong>Opt-in.</strong> You can disable encryption later from the lock icon in the sidebar header — the data is rewritten as plaintext and DeepView signals your authenticator to remove the passkey (where supported).</p>${t?g:u`<p class="wsl-error">Your browser doesn't expose the WebAuthn passkey API. Try Chrome, Safari, Edge, or Firefox in a recent version on a device with a platform authenticator.</p>`} <label class="wsl-field"><span>Passkey label</span> <input type="text" class="nwd-input" data-role="name" placeholder="DeepView" maxlength="200" .value="${this._userName}" @input="${this._onNameInput}"></label> ${this._phase?u`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t||this._busy}" @click="${this._onEnable}">${this._busy?"Working\u2026":"Enable encryption"}</button></footer>`}render(){return u`<dialog @close="${this._onClose}" @cancel="${this._onDialogCancel}"><header><h3>${this._success?"Encryption enabled":this._orphan?"Previous passkey setup detected":"Enable passkey encryption"}</h3></header>${this._body()}</dialog>`}};customElements.define("passkey-setup-dialog",Cb);function vu(){return re("passkey-setup-dialog")}var _b=class extends N{static styles=[...N.styles,D(rn)];static properties={_busy:{state:!0},_error:{state:!0}};constructor(){super(),this._busy=!1,this._error="",this._abortController=null}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onCancel=()=>this._finish(!1);_onUnlock=async()=>{if(!this._busy){this._busy=!0,this._error="",this._abortController=new AbortController;try{if(await Si({signal:this._abortController.signal})){this._finish(!0);return}this._error=""}catch(t){this._error=t?.message??String(t)}finally{this._busy=!1,this._abortController=null}}};render(){return u`<dialog @close="${this._onClose}"><header><h3>Unlock your data</h3></header><p class="nwd-note ui-hint">Your triage data and report files are encrypted with a passkey on this device. Unlock to load them.</p>${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">${this._busy?"Cancel":"Later"}</button> <button type="button" class="primary" ?disabled="${this._busy}" @click="${this._onUnlock}">${this._busy?"Waiting\u2026":"Unlock with passkey"}</button></footer></dialog>`}};customElements.define("passkey-unlock-dialog",_b);function $u(){return re("passkey-unlock-dialog")}var k_=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5.5a3 3 0 0 1 6 0V8"/></svg>`,$B=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5a3 3 0 0 1 6 -0.5"/></svg>`,Ne=null;async function Rb(){if(!Ne)return;if(await Tt(),_()){Ne.hidden=!0;return}if(!tr()){Ne.hidden=!0;return}let e=ft();Ne.hidden=!1;let t=Yo();Ne.classList.toggle("encrypted",e&&t),Ne.classList.toggle("locked-pending",e&&!t),e&&t?(Ne.dataset.tooltip="Encryption on \u2014 click to disable",Ne.setAttribute("aria-label","Disable encryption"),J(k_,Ne)):e?(Ne.dataset.tooltip="Encryption on, locked \u2014 click to unlock",Ne.setAttribute("aria-label","Unlock encrypted data"),J(k_,Ne)):(Ne.dataset.tooltip="Encryption off \u2014 click to enable",Ne.setAttribute("aria-label","Enable encryption"),J($B,Ne))}async function kB(){if(confirm(`Disable encryption?
165
+
166
+ Your local triage and report data will be rewritten as plaintext.
167
+
168
+ IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await Dp({migrate:async({open:t})=>{await Wp({open:t}),await em({open:t}),await Yp({open:t}),await Jp({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
169
+
170
+ To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
171
+ \u2022 macOS / iOS: Settings \u2192 Passwords
172
+ \u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
173
+ \u2022 Chrome: chrome://settings/passkeys
174
+ \u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function x_(){Rb()}function S_(e){if(!e||e===Ne)return;Ne=e;let t=!1;Ne.addEventListener("click",async()=>{if(await Tt(),!_()&&!t){t=!0;try{if(!ft()){await vu();return}if(!Yo()){await $u();return}await kB()}finally{t=!1}}}),kt(Rb),Rb()}var C_=`.spd-list{margin:0 0 .8rem 1.15rem;color:var(--muted);font-size:.82rem;line-height:1.5;& li{margin:.3rem 0}& strong{color:var(--text);font-weight:600}}.spd-denied{color:light-dark(#b25b00,#f0a060);font-size:.78rem}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}
175
+ `;function Mb(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}var Tb=class extends N{static styles=[...N.styles,D(C_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await cs()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?u`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return u`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return u`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return u`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Mb(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return u`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${n}<footer class="nwd-actions">${this._retryDenied?u`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:u`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",Tb);function __(){return new Promise(e=>{let t=document.createElement("storage-persist-dialog"),n=r=>{t.remove(),e(r)};t.addEventListener("resolve",r=>n(r.detail)),t.addEventListener("modal-conflict",()=>n(null)),document.body.append(t)})}var un=null,dn=null,Eb=!1,ku=!1,Ib=0;function Ab(){return Mb()==="webkit"}function R_(e){return e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(1)} MB`:e>=1e3?`${(e/1e3).toFixed(1)} kB`:`${e} B`}function T_(){if(!un)return;if(_()||!dn||dn.persisted!==!1||!Eb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${R_(dn.usage)} of ${R_(dn.quota)}.`;un.querySelector(".storage-label").textContent="Storage at risk",un.dataset.tooltip="Reports, bundles and triage are in best-effort storage \u2014 the browser may delete them all under disk pressure or after long inactivity. "+(Ab()?"Click for how to protect them (on Safari and iOS browsers this needs the app installed to the Home Screen or Dock).":"Click to request persistent storage \u2014 if the browser declines, instructions for enabling it follow.")+e}function I_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Ab()&&location.hostname==="localhost"?" Note: plain localhost can NEVER pass \u2014 Chromium keys site importance by registerable domain (IP literals excepted) and localhost has none; for local testing use 127.0.0.1 instead.":"";console.info(`storage: persistent-storage request not granted${n} \u2014 `+(Ab()?"Safari ties persistence to install state; add the app to the Home Screen / Dock.":"Chromium-based browsers never prompt and silently deny origins they don't consider important; installing the app, bookmarking it, allowing notifications, or regular use flips the heuristic (re-evaluated on every request). Firefox shows a prompt instead.")+r)}async function xu(){if(await Tt(),!un||_()){T_();return}let[e,t]=await Promise.all([om(),(async()=>{try{return(await ce()).length>0||await Vp()}catch{return!1}})()]);dn=e,Eb=t,T_()}function Fb(){!un||Ib||(Ib=setTimeout(()=>{Ib=0,xu()},1e3))}async function M_(){if(ku||(await xu(),_()||dn?.persisted!==!1||!Eb||ku))return;ku=!0;let e=await cs();I_(e,!1),await xu()}async function SB(){if(dn&&dn.persisted===!1){ku=!0;let e=await cs();I_(e,!0),e||await __()}await xu()}function A_(e){un=e,un&&(un.addEventListener("click",()=>{SB()}),mt((t,n)=>{Fb(),n==="save"&&M_()}),M_())}function Lb(e){let t=document.querySelector("#landing-workspaces");if(!t)return;let n=e.filter(r=>r.reports.length>0||r.bundles?.length>0).toSorted((r,o)=>o.reports.length-r.reports.length||r.name.localeCompare(o.name)).slice(0,5);J(n.length>0?u`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${Z(n,r=>r.id,r=>{let o=lo(r),s=r.reports.filter(i=>Ie(i)!==ke).length;return u`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${W(No)} <span class="landing-workspace-text"><span class="landing-workspace-name">${r.name}</span> <span class="landing-workspace-count">${o?.appMode?`${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"} \xB7 `:""}${s.toLocaleString()} report${s===1?"":"s"}</span></span></button>`})}</div></nav>`:g,t)}function Ob(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function Nb(e,t=()=>[]){let{groups:n,conflicts:r}=od(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=sd(n,t,Ob);return Pl(o,{tabs:Ob,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Ob(s).some(i=>i.isApp)).length}:{appMode:!1}}var Mt=null,Bb=0;Yi(()=>{Bb++});function E_(e,t,n,{complete:r,isCurrent:o}){Mt={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:o}}function F_(e){return!Mt||Mt.id!==e.id||!Mt.isCurrent()||Mt.membership!==JSON.stringify(e.reports.toSorted())||!_m(e,Mt.token)?null:(Mt.linksRevision!==Bb&&(Mt.metadata=Mt.complete?Nb(Mt.reports,gt):{appMode:!1},Mt.linksRevision=Bb),Mt.metadata)}async function L_(e,t,n,{complete:r,isCurrent:o,onReady:s}){if(!o()||(await Xi(),!o()))return;let i=await Qi(e,n);if(!i||!o())return;let a=r?Nb(t,gt):{appMode:!1};await Tm(e,a,i)&&o()&&await s(a)}var Rr=null;function Db(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),p=l?.querySelector(".managed-landing");if(!p)return;let d=t==="managed",f=t==="local",m=d&&(n?n.role!=="none"&&o:r);m?Rr?Rr.options=e:Rr={options:e,elapsed:!1,timer:setTimeout(()=>{Rr.elapsed=!0,Db(Rr.options)},1e3)}:(clearTimeout(Rr?.timer),Rr=null);let h=m&&!Rr.elapsed;l.dataset.serverMode=d?"managed":"local",l.setAttribute("aria-label",d?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=l.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!d||h){J(g,p);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(vn()&&!n){J(u`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,p);return}J(n==null?u`<section class="managed-login"><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" 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> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${i} mode</button></div></section>`:n.role==="none"?u`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:u`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${w.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${w.length>0?u`<nav class="managed-team-list" aria-label="Teams">${Z(w,v=>v.id,v=>u`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${W(No)}</span> <span class="managed-team-copy"><strong>${v.name}</strong> <span>${v.app?.appMode?`${v.app.appFindings.toLocaleString()} ${v.app.appFindings===1?"finding":"findings"} \xB7 `:""}${v.reports.length} ${v.reports.length===1?"report":"reports"} · Open findings</span> </span><svg class="managed-team-arrow" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button>`)}</nav>`:u`<p class="managed-landing-empty">No team reports are available yet.</p>`}<nav class="managed-content-links" aria-label="Content and activity">${[...y?[["manage-bundles","Bundles",Lo],["manage-scans","Scans",Vn],["manage-reports","Reports",yw]]:[],["npm","npm packages",Oo]].map(([v,x,k])=>u`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${W(k)}</span> <span>${x}</span></button>`)}</nav>${y?u`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${W(il)}</span><span>Manage</span></button></div>`:g}`,p)}var O_=`.dlg-tabs{display:flex;gap:.1rem;margin:0 0 .55rem;border-bottom:1px solid var(--border)}.dlg-tab{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:none;color:var(--muted);padding:.1rem .6rem .4rem;font:inherit;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;&:first-child{padding-left:0}&:hover:not(:disabled){color:var(--text)}&[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}&:disabled{opacity:.5}& svg{display:block}}
176
+ `;var _B=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],Pb=class extends N{static styles=[...N.styles,D(rn),D(O_)];static properties={workspace:{attribute:!1},_tab:{state:!0},_password:{state:!0},_confirm:{state:!0},_noPassword:{state:!0},_includeBundleBytes:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspace=null,this._tab="workspace",this._password="",this._confirm="",this._noPassword=!1,this._includeBundleBytes=!1,this._busy=!1,this._error="",this._settled=!1}_finish(t){this._settled||(this._password="",this._confirm="",this.workspace=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_reportCount(){return Array.isArray(this.workspace?.reports)?this.workspace.reports.length:0}_bundleCount(){return Array.isArray(this.workspace?.bundles)?this.workspace.bundles.length:0}_selectTab(t){this._busy||this._tab===t||(this._tab=t,this._error="",t!=="workspace"&&(this._password="",this._confirm=""))}_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_onNoPasswordToggle=t=>{this._noPassword=t.target.checked,this._error="",this._noPassword&&(this._password="",this._confirm="")};_onIncludeBundleBytesToggle=t=>{this._includeBundleBytes=t.target.checked,this._error=""};_canExport(){return this._busy?!1:this._tab==="raw"?this._reportCount()>0:this._noPassword?!0:(this._password??"").length>0&&this._password===this._confirm}_onExport=async()=>{if(!this._canExport())return;if(!this.workspace){this._error="No workspace selected.";return}let t=this._tab;this._busy=!0,this._error="";try{let{blob:n,filename:r}=t==="raw"?await mm(this.workspace):await fm(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;uv(n,r),this._finish({ok:!0,tab:t})}catch(n){if(this._settled)return;this._error=n?.message??String(n)}finally{this._busy=!1}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onExport())};_tabsTemplate(){return Zk({tabs:_B,current:this._tab,prefix:"wsl",disabled:this._busy,select:t=>this._selectTab(t)})}_workspacePanel(){let t=!this._password||!this._confirm||this._password===this._confirm,n=this._bundleCount();return u`<p class="nwd-note ui-hint">The export file carries this workspace's reports, triage state, comments, fixes, references to attached bundles (integrities only by default), and its private key. Encrypting the file with a password ensures only those with the password can attach the workspace after download.</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-export-pw" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm 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-export-pw-confirm" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-optout"><input type="checkbox" .checked="${this._noPassword}" @change="${this._onNoPasswordToggle}"> <span>Export without password (not recommended)</span></label> ${n>0?u`<label class="wsl-optout"><input type="checkbox" .checked="${this._includeBundleBytes}" @change="${this._onIncludeBundleBytesToggle}"> <span>Include bundle bytes (${n} bundle${n===1?"":"s"}; significantly larger file)</span></label>`:g} ${this._noPassword?u`<p class="wsl-error wsl-warning">Anyone who obtains this file can attach the workspace and read every report, triage decision, comment, and fix. Only opt out when you control where the file goes.</p>`:g} ${!this._noPassword&&!t?u`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}`}_rawPanel(){let t=this._reportCount(),n=this._bundleCount();return u`<div class="wsl-error wsl-warning"><p>This is the raw form of the reports.</p><p>It carries no triage data — no markers, triage states, comments, fixes, or per-report ignores${n>0?u`— and none of this workspace's ${n} attached bundle${n===1?"":"s"}`:g}.</p><p>This file is written unencrypted: anyone who obtains it can read every report in it.</p></div>${t===0?u`<p class="wsl-error" role="alert">This workspace has no reports to export.</p>`:g}`}_primaryLabel(){return this._busy?"Exporting\u2026":this._tab==="raw"?"Download reports":this._noPassword?"Export without password":"Export"}_primaryDanger(){return this._tab==="raw"||this._noPassword}_body(){return u`<div role="tabpanel" id="${`wsl-panel-${this._tab}`}" aria-labelledby="${`wsl-tab-${this._tab}`}">${this._tab==="raw"?this._rawPanel():this._workspacePanel()}</div>${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="${this._primaryDanger()?"primary danger":"primary"}" ?disabled="${!this._canExport()}" @click="${this._onExport}">${this._primaryLabel()}</button></footer>`}render(){return u`<dialog @close="${this._onClose}"><header>${this._tabsTemplate()}</header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",Pb);function N_({workspace:e}={}){return El("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}async function B_(e){await N_({workspace:e})}var P_="deepview.passkey.firstImportPrompted";function RB(){try{return localStorage.getItem(P_)==="1"}catch{return!1}}function D_(){try{localStorage.setItem(P_,"1")}catch{}}async function Su(){if(ft()||!tr()||RB())return;if(!confirm(`Encrypt your DeepView data with a passkey?
177
+
178
+ Your triage notes, workspaces, and report files are stored on this device. Encryption locks them under a passkey (TouchID, Windows Hello, security key) so scripts running here can't read them without the passkey.
179
+
180
+ You can change this anytime from the lock icon in the sidebar header.`)){D_();return}await vu(),ft()&&D_()}var zb=class extends N{static properties={_value:{state:!0}};constructor(){super(),this._value=""}_onInput=t=>{this._value=t.target.value};_onCreate=()=>{let t=(this._value??"").trim();t&&this._finish(t)};_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onCreate())};render(){let t=(this._value??"").trim().length>0;return u`<dialog @close="${this._onClose}"><header><h3>New workspace</h3></header><input type="text" class="nwd-input" placeholder="Workspace name" maxlength="200" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><p class="nwd-note ui-hint">Workspace triage is synchronized by default over an end-to-end encrypted channel. Triage on unattached reports stays local to this browser.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onCreate}">Create</button></footer></dialog>`}};customElements.define("new-workspace-dialog",zb);function z_(){return re("new-workspace-dialog")}var Wb=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceName:{type:String},reportCount:{type:Number},bundleCount:{type:Number},orphanedTriage:{type:Number},sharedTriage:{type:Number},_mode:{state:!0},_triage:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceName="",this.reportCount=0,this.bundleCount=0,this.orphanedTriage=0,this.sharedTriage=0,this._mode="detach",this._triage="keep",this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let n=this.reportCount>0?this._mode:"detach",r=n==="delete"&&this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,mode:n,triage:r})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onModeChange=t=>{this._mode=t.target.value};_onTriageChange=t=>{this._triage=t.target.value};_triageSection(){if(this._mode!=="delete"||this.reportCount===0)return"";let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?u`<p class="lwd-note">Local triage on ${this.reportCount===1?"this report":"these reports"} is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="lwd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){let t=this.reportCount,n=this.bundleCount,r=t>0,o=t===1?"report":"reports",s=t===1?"it":"them",i=t===1?"stays":"stay",a=t===1?"is removed":"are removed",l=n>0?u`<p class="lwd-note">${n===1?"One bundle is":`${n} bundles are`} also attached. ${n===1?"It":"They"} will become unfiled — the bundle bytes stay on this device either way (delete bundles manually from the Bundles list if you want them gone).</p>`:"",p=r?u`<fieldset class="lwd-choice"><legend>What should happen to the <strong>${t}</strong> attached ${o}?</legend><label class="lwd-option"><input type="radio" name="lwd-mode" value="detach" ?checked="${this._mode==="detach"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Move ${s} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${i} in this browser as unattached ${o}.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-mode" value="delete" ?checked="${this._mode==="delete"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Delete ${s} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${a} from this browser.</span></span></label></fieldset>`:n>0?u`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:u`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return u`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${p} ${l} ${this._triageSection()}<ul class="lwd-list"><li>Workspace synchronization data stays on the sync server — peers (and your other devices) keep their copy.</li></ul><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}">Leave</button></footer></dialog>`}};customElements.define("leave-workspace-dialog",Wb);function W_({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return re("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var Hb=class extends N{static styles=[...N.styles,D(rn)];static properties={workspaceId:{type:String},initialName:{type:String},privateKeyBase64:{type:String},_name:{state:!0},_password:{state:!0},_confirm:{state:!0},_url:{state:!0},_busy:{state:!0},_error:{state:!0},_copied:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.initialName="",this.privateKeyBase64="",this._name="",this._password="",this._confirm="",this._url="",this._busy=!1,this._error="",this._copied=!1,this._settled=!1}beforeOpen(){this._name=this.initialName}focusInitial(){this.renderRoot.querySelector('input[data-role="name"]')?.focus()}_finish(){this._settled||(this._copiedTimer&&(clearTimeout(this._copiedTimer),this._copiedTimer=null),this._password="",this._confirm="",this._url="",this.privateKeyBase64="",super._finish(null))}_onClose=()=>this._finish();_onCancel=()=>this._finish();_onNameInput=t=>{this._name=t.target.value};_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_canGenerate(){return(this._name??"").trim().length>0&&(this._password??"").length>0&&this._password===this._confirm&&!this._busy}_onGenerate=async()=>{if(this._canGenerate()){this._busy=!0,this._error="";try{let t=await bm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=ym(t),this._password="",this._confirm=""}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onCopy=async()=>{if(this._url){this._error="";try{if(await navigator.clipboard.writeText(this._url),this._settled)return;this._copied=!0,this._copiedTimer&&clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied=!1,this._copiedTimer=null},1500)}catch{if(this._settled)return;this._error="Copy failed \u2014 select the link and copy it manually."}}};_onKeydown=t=>{t.key==="Enter"&&!this._url&&(t.preventDefault(),this._onGenerate())};_body(){return this._url?u`<p class="nwd-note ui-hint">Anyone with the link <strong>and</strong> the password can attach this workspace. Share them through separate channels.</p><label class="wsl-field"><span>Share link</span> <textarea class="wsl-link" readonly="readonly" rows="3" @focus="${t=>t.target.select()}">${this._url}</textarea></label> ${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Close</button> <button type="button" class="primary" @click="${this._onCopy}">${this._copied?"Copied":"Copy link"}</button></footer>`:u`<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> <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-pw" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm 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-pw-confirm" maxlength="1024" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label><p class="nwd-note ui-hint">The link carries the workspace's identity (id, name, and private key) so the recipient joins the same sync chain. Triage, reports, and comments aren't in the link itself — they sync over once the recipient joins. The link decrypts with the password above; without it the link is useless.</p>${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${this._password&&this._confirm&&this._password!==this._confirm?u`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canGenerate()}" @click="${this._onGenerate}">${this._busy?"Generating\u2026":"Generate link"}</button></footer>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>${this._url?"Workspace share link":"Share workspace by link"}</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-share-link-dialog",Hb);function H_({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=n??"",s.addEventListener("resolve",()=>{s.remove(),r()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(Al(i.detail?.cause))}),document.body.append(s)})}var Ub=class extends Ee{static properties={reportName:{type:String},kindLabel:{type:String},orphanedTriage:{type:Number},sharedTriage:{type:Number},inRemote:{type:Boolean},_triage:{state:!0}};constructor(){super(),this.reportName="",this.kindLabel="report",this.orphanedTriage=0,this.sharedTriage=0,this.inRemote=!1,this._triage="keep"}confirmationResult(t){let n=this.orphanedTriage>0?this._triage:"keep";return{confirmed:t,triage:n}}_onTriageChange=t=>{this._triage=t.target.value};_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}_triageSection(){let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?u`<p class="lwd-note">Local triage on this report is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="drd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="drd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete ${this.kindLabel}</h3></header><p class="lwd-body">Delete <strong>"${this.reportName}"</strong>?</p>${this._remoteNotice()} ${this._triageSection()}<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}">Delete</button></footer></dialog>`}};customElements.define("delete-report-dialog",Ub);function U_({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return re("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var Vb=class extends Ee{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete bundle</h3></header><p class="lwd-body">Delete <strong>"${this.bundleName}"</strong>?</p>${this._remoteNotice()}<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}">Delete</button></footer></dialog>`}};customElements.define("delete-bundle-dialog",Vb);function V_({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var jb=class extends Ee{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach bundle</h3></header><p class="lwd-body">Detach <strong>"${this.bundleName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The bundle bytes stay on this device — drop it onto another workspace to attach it there.</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}">Detach</button></footer></dialog>`}};customElements.define("detach-bundle-dialog",jb);function j_({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var Gb=class extends Ee{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach report</h3></header><p class="lwd-body">Detach <strong>"${this.reportName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The report bytes stay on this device — drop it onto another workspace to attach it there.</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}">Detach</button></footer></dialog>`}};customElements.define("detach-report-dialog",Gb);function G_({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var Kb=class extends N{_onConfirm=()=>this._finish(!0);render(){return u`<dialog @close="${this._onClose}"><header><h3>Changes might not be saved</h3></header><p class="nwd-intro">Triage works in this tab, but this browser <strong>can't save its sync state right now</strong> — so changes that haven't reached the server could be lost if you reload the page.</p><p class="nwd-intro">This usually means the browser's storage is full, or another tab is running a newer version of the app (to avoid overwriting that newer version's data, this tab has paused saving).</p><p class="nwd-note ui-hint">Free up space if storage is full, and close or reload other tabs of this app to the same version. This notice clears on its own once saving works again.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("persistence-degraded-dialog",Kb);function K_(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog");t.exclusive=!0;let n=r=>{t.remove(),e({shown:r})};t.addEventListener("resolve",()=>n(!0)),t.addEventListener("modal-conflict",()=>n(!1)),document.body.append(t)})}var qb=class extends N{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return u`<dialog @close="${this._onClose}"><header><h3>Sign in to keep syncing</h3></header><p class="nwd-intro ui-hint">Triage can't reach the sync server — the connection is being redirected to an <strong>authentication proxy</strong> (for example Cloudflare Access). This usually means your access session has expired.</p><p class="nwd-note ui-hint">Reload the page to sign in again. Your triage is saved on this device, so reloading won't lose anything — or keep working offline and reload later.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onClose}">Not now</button> <button type="button" class="primary" @click="${this._onReload}">Reload page</button></footer></dialog>`}};customElements.define("proxy-auth-dialog",qb);function q_(){return new Promise(e=>{let t=document.createElement("proxy-auth-dialog");t.exclusive=!0;let n=(r,o)=>{t.remove(),e({shown:r,reload:o})};t.addEventListener("resolve",r=>n(!0,r.detail==="reload")),t.addEventListener("modal-conflict",()=>n(!1,!1)),document.body.append(t)})}var Ar=null,B=null,ey=null;function Cu(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}gv();function TB(){return Zt().size}function MB(){return no().size}var Pa=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,cy="application/x-deepview-report",ty="application/x-deepview-source-ws",za="application/x-deepview-bundle",_u=!1,Ru=!1,IB={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},Y_=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Tr="",Ut=!1,Wa=new Map,X_="",Ha=new wu;function AB(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",s=r?Ss(r):null,i=e.filter(l=>n?l.bundles.includes(n):l.id===s),a=JSON.stringify([o,n||r,i.map(l=>l.id)]);if(!(!t&&a===X_)){X_=a;for(let l of i){let p=Wa.get(l.id)??new Set;p.add(o),Wa.set(l.id,p)}}}function J_(e,t={}){let r=`file-item${cR(e,t.workspaceId??null)?" current":""}${t.indented?" indented":""}`,o=oe(e),s=Ni(e),i=ye[Ae(e)]??ye.default;return u`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${W(i)}<span class="file-label">${o}</span>${s===void 0?g:u`<span class="file-count">${s}</span>`}</button></li>`}function cR(e,t){return e===c.currentFile&&t===Ss(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function dR(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return u`<li class="${n}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var EB=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8h9"/></svg>`,FB=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2.5H3.5v11H8M10 5l3 3-3 3M13 8H6"/></svg>`;function LB(){return u`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span><span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" aria-label="Create a new workspace">${EB}</button></span></li>`}function OB(){let e=m_(c.managedTeams,Tr);return e.length===0?g:u`${dR("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Ha.shown(t.id,"reports",s,Ut),a=Ha.shown(t.id,"bundles",s,Ut),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${pR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ir(t)}}">${yR}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?u`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{Pk(t)}}">${wR}</button>`:g}</div>${s?u`<div class="workspace-meta"><span class="workspace-findings">${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"}</span> <span class="workspace-sections" role="group" aria-label="Team files"><button type="button" data-team-section="reports" aria-expanded="${String(i)}" ?disabled="${Ut}">${l.toLocaleString()} report${l===1?"":"s"}</button> ${r.length>0?u`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${Ut}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:g}</span></div>`:g}</li>${i?Z(n,p=>p.id,p=>DB(t,p)):g} ${a?Z(r,p=>p.id,p=>zB(t,p)):g}`})}`}function uR(e,t,n,r){return u`<li><button type="button" class="${n?"rail-item current":"rail-item"}" aria-label="${e}" aria-current="${n?"true":g}" data-tooltip="${e}" @click="${r}">${t}<span aria-hidden="true">${g_(e)}</span></button></li>`}function NB(){return Z(c.managedTeams??[],e=>e.id,e=>uR(e.name,yR,pR(e)||(e.reports??[]).some(t=>fR(e,t))||(e.bundles??[]).some(t=>mR(e,t)),()=>{Ir(e)}))}function BB(e){return Z(e,t=>t.id,t=>uR(t.name,bR,vR(t)||t.reports.some(n=>cR(n,t.id))||t.bundles.some(n=>hR(n,t.id)),()=>xR(t.id)))}function pR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function fR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function mR(e,t){return c.currentManagedTeam===e.id&&yr(c)===t.id}function DB(e,t){let n=oe(t.filename),r=fR(e,t);return u`<li class="${`file-item indented team-report-item${t.visible===!1?" content-hidden":""}${r?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${n} (hidden from teams)`:g}" data-tooltip="${n}" data-tooltip-repo="${kb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{PB(e,t)}}">${W(ye[Hm(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function PB(e,t){return Ir(e,t.id)}function zB(e,t){let n=mR(e,t);return u`<li class="${`file-item indented team-bundle-item${t.visible===!1?" content-hidden":""}${n?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${t.filename} (hidden from teams)`:g}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${kb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${f_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Es(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${gR}<span class="file-label">${t.filename}</span></button></li>`}function WB(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var gR=u`${W(Lo)}`;function hR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function Z_(e,t={}){let{integrity:n,name:r}=e,o=hR(n,t.workspaceId??null),i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return u`<li class="${i}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
181
+ ${n}`}">${gR}<span class="file-label">${r}</span></button></li>`}function HB(e,t){let n=e.slice(0,15);return u`<li class="file-item indented bundle-item bundle-missing" data-bundle-integrity="${e}" data-workspace-id="${t}" data-tooltip="Bundle bytes not on this device — drop the matching bundle to attach."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${n}…</em></span></span></li>`}function UB(e,t){return u`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${oe(e)}</em></span></span></li>`}var bR=u`${W(No)}`,yR=u`<svg class="team-icon" viewBox="0 0 16 16" width="13" height="13" fill="currentColor" aria-hidden="true"><path d="M5.5 8a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Zm0 1C3.2 9 1.75 10.2 1.75 11.6V13h7.5v-1.4C9.25 10.2 7.8 9 5.5 9Zm5.25-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.25 1c-.43 0-.83.05-1.2.15.86.62 1.45 1.5 1.45 2.45V13h3.25v-1.3C14.5 10.1 13.15 9 11 9Z"/></svg>`,VB=u`<svg 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="M8 2v8M5 7l3 3 3-3M3 13h10"/></svg>`,jB=u`<svg 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="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,wR=u`<svg 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="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;function vR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function GB(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${vR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${bR}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" aria-label="Share workspace by link">${wR}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${VB}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${jB}</button></div>${n?u`<div class="workspace-meta">${t?.appMode?u`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:g} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(s)}" ?disabled="${Ut}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?u`<button type="button" data-workspace-section="bundles" aria-expanded="${String(i)}" ?disabled="${Ut}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:g}</span></div>`:g}</li>`}function js(e){return Tr?oe(e).toLowerCase().includes(Tr):!0}var Yb=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Tt();let t=Jt();if(Db({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:So,teamsPending:Co,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:kR}),Mu(),_()){if(Ha.sync(c,e),!So&&!Co&&!Gs&&!pn&&_r({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Lb([]),!B)return;J(u`${OB()}`,ey);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(NB(),y),B.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),B.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),B.querySelector("#storage-status")?.setAttribute("hidden",""),fn();return}if(Ha.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await tm(),t!==Jt()){await H();return}xt().catch(()=>{}),Xi().catch(()=>{});let n=await ce();if(t!==Jt()){await H();return}let r=Y();AB(r,e),Lb(r);let[o]=await Promise.all([Je(),...r.map(y=>dt("workspace",y.id))]);if(t!==Jt()){await H();return}if(c.bundles=o,c.storedFiles=n,Fb(),!B)return;let s=new Set(n),i=new Set;for(let y of r)for(let w of y.reports)s.has(w)&&i.add(w);let a=new Map(o.map(y=>[y.integrity,y])),l=new Set;for(let y of r)for(let w of y.bundles)a.has(w)&&l.add(w);let p=new Map;for(let y of Y_)p.set(y,[]);for(let y of n){if(i.has(y)||!js(y))continue;let w=Ae(y);p.has(w)||p.set(w,[]),p.get(w).push(y)}let d=r.filter(y=>!Tr||y.name.toLowerCase().includes(Tr)||y.reports.some(w=>js(w))?!0:y.bundles.some(w=>{let v=a.get(w);return v&&js(v.name)})),f=o.filter(y=>!l.has(y.integrity)&&js(y.name));J(u`${LB()} ${Z(d,y=>y.id,y=>{let w=[],v=[];for(let M of y.reports)js(M)&&(s.has(M)?w.push(M):v.push(M));w.sort(Yb),v.sort(Yb);let x=[],k=[];for(let M of y.bundles){let I=a.get(M);I?(!Tr||js(I.name))&&x.push(I):Tr||k.push(M)}let $=F_(y)??lo(y),S=$?.appMode??Rm(y)===!0,C=Wa.get(y.id),R=!S||Ut||C?.has("reports")===!0,L=!S||Ut||C?.has("bundles")===!0,A=[...w,...v].filter(M=>Ie(M)!==ke).length,E=x.length+k.length;return u`${GB(y,{app:$,compact:S,reports:A,bundles:E,showReports:R,showBundles:L})} ${R?u`${w.map(M=>J_(M,{indented:!0,workspaceId:y.id}))}${v.map(M=>UB(M,y.id))}`:g} ${L?u`${x.map(M=>Z_(M,{workspaceId:y.id}))}${k.map(M=>HB(M,y.id))}`:g}`})} ${Y_.map(y=>{let w=(p.get(y)??[]).toSorted(Yb),v=y==="default";return w.length===0&&!(v&&_u)?null:u`${dR(IB[y]??y,{dropTarget:v})} ${w.map(x=>J_(x))}`})} ${f.length>0||Ru?WB():null} ${Z(f,y=>y.integrity,y=>Z_(y))}`,ey);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(BB(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=TB());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=MB()),fn(),Cf(n,$R)}var Xb=!1;function $R(){Xb||(Xb=!0,requestAnimationFrame(()=>{Xb=!1,H().catch(e=>console.warn("counts repaint:",e))}))}kt(()=>{H()});Mm($R);async function kR(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await s2():af()&&await Au()}function xR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Ks(e)}async function Q_(e){let t=e.target.closest("[data-team-section]");if(t){if(Ut||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Ha.toggle(f,t.dataset.teamSection),await H();return}let n=e.target.closest("[data-workspace-section]");if(n){if(Ut||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Wa.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Wa.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await kR();return}if(e.target.closest('[data-action="go-home"]')){await At();return}let r=e.target.closest("[data-managed-bundle]");if(r){te.navigate(Xe({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:c.currentView==="bundles"?c.bundleDetailsTab:"overview"},c.managedTeams));return}let o=e.target.closest(".file-item[data-bundle-integrity]");if(o){if(o.classList.contains("bundle-missing"))return;let f=o.dataset.bundleIntegrity,m=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===m)return;gr(f,void 0,{workspaceId:m}),ay(f,c.bundleDetailsTab),O(),H(),gd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,O(),H());return}if(e.target.closest('[data-action="new-workspace"]')){if(_())return;let f=await z_();f&&(await Su(),await Lf(f),H());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let f=i.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&H_({id:m.id,name:m.name,privateKeyBase64:m.privateKey}).catch(h=>alert(`Failed to open share dialog: ${h.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&B_(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),m=f?Y().find(x=>x.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await _c(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await W_({name:m.name,reportCount:h.length,bundleCount:m.bundles.length,triageImpact:b});if(!y)return;if(!Y().some(x=>x.id===m.id)){alert(`Workspace "${m.name}" was removed elsewhere; nothing to leave.`);return}try{await lR(m.id,w,{triage:v})}catch(x){alert(`Failed to leave workspace: ${x.message}`)}return}let p=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(p){let f=p.dataset.workspaceId;f&&xR(f);return}let d=e.target.closest(".file-item[data-file]");if(d){let f=d.dataset.file,m=c.currentView==="findings"||c.currentView==="links",h=d.dataset.workspaceId??null;f&&(f!==c.currentFile||h!==c.currentReportWorkspace||!m)&&Ua(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let x=c.selectedBundle,k=(c.bundles??[]).find(C=>C.integrity===x)?.name??x,$=Y().filter(C=>Array.isArray(C.bundles)&&C.bundles.includes(x)).filter(C=>Ym(C.id,x)).map(C=>C.id),{confirmed:S}=await V_({name:k,inRemote:$.length>0});if(!S)return;if(c.selectedBundle!==x){alert(`Active bundle changed during confirmation; aborting delete of "${k}".`);return}try{await aR({deleteFromRemoteWorkspaceIds:$})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await _c([f])}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let h=Y().filter(x=>Array.isArray(x.reports)&&x.reports.includes(f)).filter(x=>gs(x.id,f)).map(x=>x.id),b=h.length>0,y=zc(f)?"links file":"report",{confirmed:w,triage:v}=await U_({name:f,kindLabel:y,triageImpact:m,inRemote:b});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await sR({triage:v,deleteFromRemoteWorkspaceIds:h})}catch(x){alert(`Failed to delete ${y}: ${x.message}`)}return}if(e.target.closest("#sync-status")){G.status==="error"?G.dismissError():G.status==="off"?(!G.getServerUrl()&&Pa&&G.setServerUrl(Pa),G.setEnabled(!0)):G.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){B?.querySelector("#user-menu")?.hidePopover?.(),Ro("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){B?.querySelector("#user-menu")?.hidePopover?.(),Kk(c.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){B?.querySelector("#user-menu")?.hidePopover?.(),te.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){Gk(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Ar.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Ar.classList.contains("collapsed")?"1":"0")}catch{}}}var KB={placement:"right",gate:e=>{if(e.dataset.tooltipRepo||e.dataset.tooltipBundle)return!0;let t=e.querySelector(".file-label");return!t||(e.dataset.tooltip??"")!==t.textContent?!0:t.scrollWidth>t.clientWidth}};function qB(e){Ut=e.target.value.length>0,Tr=e.target.value.trim().toLowerCase(),H()}var YB={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function SR(){return G.getServerUrl()||Pa?Y().length>0:!1}function CR(){let e=B?.querySelector("#auth-status");if(!e)return;let t=B?.querySelector("#manage-status"),n=B?.querySelector("#user-menu"),r=c.managedSession;Ar?.toggleAttribute("data-authenticated",r!=null),Ar?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),XB(r);let o=B?.querySelector("#public-status");if(o&&(o.hidden=!r?.publicShare),e.hidden=r==null||r.publicShare===!0,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),J(g,e),n&&J(g,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),n&&J(g,n);return}let s=(r.login[0]??"?").toUpperCase(),i=typeof r.name=="string"&&/\s/u.test(r.name.trim())?r.name.trim():`@${r.login}`;if(e.dataset.authed="1",e.setAttribute("popovertarget","user-menu"),e.setAttribute("aria-label",`Account: ${r.login}`),J(u`${eR(s,r.id)}<span class="auth-login">${i}</span>`,e),t){let a=_()&&(r.role==="admin"||r.role==="manage");t.hidden=!a}n&&J(u`<div class="user-card">${eR(s,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?u`<span class="user-name">${r.name}</span>`:g}</span></div>${r.viewer?u`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:g} ${r.role==="none"?g:u`<button type="button" class="user-menu-row" data-action="my-reviews">My reviews</button>`} <button type="button" class="user-menu-row" data-action="toggle-client-mode">${Jn(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${FB}<span>Log out</span></button>`,n)}function XB(e){let t=B?.querySelector("#view-as-status");t&&(t.hidden=!e?.viewer,Ar?.toggleAttribute("data-view-as",e?.viewer!=null),J(e?.viewer?u`<span class="view-as-label"><span>Viewing as <strong>@${e.login}</strong></span> <span class="view-as-note">Read only · changes are not saved</span></span> <button type="button" class="view-as-stop" data-action="view-as-stop" aria-label="${`Stop viewing as ${e.login}`}">Stop</button>`:g,t))}document.addEventListener("managed-view-only",()=>{let e=c.managedSession;e?.viewer&&Ge(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:"error"})});function eR(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return u`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${Dm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${JB}">`}</span>`}function JB(e){e.currentTarget.classList.add("broken")}function _R(){let e=B?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||Jn(c.serverModeConfig);e.textContent=Jt(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Jt()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function ZB(){Ar&&(Ar.dataset.mode=Jt()),_()?(B?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),B?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.removeAttribute("hidden")):(B?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),B?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),B?.querySelector("#manage-status")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.setAttribute("hidden",""),B?.querySelector("#public-status")?.setAttribute("hidden",""),B?.querySelector("#view-as-status")?.setAttribute("hidden","")),x_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(_R(),ZB(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,G.setForcedOff(!0);let d=B?.querySelector("#auth-status");d&&(d.hidden=!0),B?.querySelector("#public-status")?.setAttribute("hidden","");return}if(_()){t.hidden=!0,G.setForcedOff(!0),CR();return}if(c.serverMode==="standalone"){t.hidden=!0;let d=B?.querySelector("#auth-status");d&&(d.hidden=!0);return}let n=B?.querySelector("#auth-status");n&&(n.hidden=!0);let r=SR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&ra().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&Pa&&G.isEnabled()&&G.setServerUrl(Pa),G.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let s=e??G.status;t.dataset.status=s;let i=G.persistenceDegraded;t.toggleAttribute("data-degraded",i);let a=G.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let l=i?"Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven\u2019t synced could be lost on reload.":a?"Can\u2019t reach the sync server \u2014 the connection is being redirected to a sign-in proxy (e.g. Cloudflare Access). Reload the page to sign in again.":"";l?t.dataset.tooltip=l:delete t.dataset.tooltip;let p=t.querySelector(".sync-label");p&&(p.textContent=YB[s]??"")}G.onStatusChange(fn);var Jb=!1,ny=!1;async function RR(){if(!G.persistenceDegraded||ny||Jb)return;Jb=!0;let{shown:e}=await K_();if(Jb=!1,e){ny=!0;return}G.persistenceDegraded&&setTimeout(RR,1500)}G.onPersistenceDegraded(e=>{fn(),e?RR():ny=!1});var Zb=!1,ry=!1;async function TR(){if(!G.proxyAuthRequired||ry||Zb)return;Zb=!0;let{shown:e,reload:t}=await q_();if(Zb=!1,!e){G.proxyAuthRequired&&setTimeout(TR,1500);return}ry=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?TR():ry=!1});function QB(e){if(e.target.closest("[data-workspace-section], [data-action]"))return;let t=e.target.closest(".file-item.workspace-item");if(!t)return;let n=t.querySelector(".file-label");if(!n||n.querySelector("input"))return;let r=t.dataset.workspaceId,o=Y().find(l=>l.id===r);if(!o)return;e.preventDefault();let s=document.createElement("input");s.type="text",s.value=o.name,s.className="workspace-rename-input",n.textContent="",n.append(s),s.focus(),s.select();let i=!1,a=async l=>{if(!i){i=!0;try{l&&await Nf(r,s.value)}catch(p){alert(`Failed to rename workspace: ${p.message}`)}finally{n.contains(s)&&(n.textContent=Y().find(p=>p.id===r)?.name??o.name),H()}}};s.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),a(!0)):l.key==="Escape"&&(l.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0)),s.addEventListener("click",l=>l.stopPropagation()),s.addEventListener("dblclick",l=>l.stopPropagation())}function Iu(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function MR(e){return e.dataTransfer.types.includes(cy)||e.dataTransfer.types.includes(za)}function e2(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let r=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(za,r),e.dataTransfer.setData(ty,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Ru=!0,H();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(cy,n.dataset.file),e.dataTransfer.setData(ty,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),_u=!0,H())}function t2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Iu(),(_u||Ru)&&(_u=!1,Ru=!1,H())}function n2(e){if(!MR(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=B.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,s=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=s?"none":"move",Iu(),!s)if(t){let i=t.dataset.workspaceId;for(let a of B.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(za)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function r2(e){B.contains(e.relatedTarget)||Iu()}async function o2(e){if(!MR(e))return;e.preventDefault(),e.stopPropagation(),Iu();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(ty)||null;if(e.dataTransfer.types.includes(za)){let i=e.dataTransfer.getData(za);if(!i)return;if(r&&r!==n&&Ym(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await j_({name:a,workspaceName:l?.name??""});if(!p)return;try{await Qc(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await io(i,n),r&&r!==n&&await zf(i,r),H();return}let o=e.dataTransfer.getData(cy);if(!o)return;if(r&&r!==n&&gs(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await G_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Zc(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await so(o,n),r&&r!==n&&await Vi(o,r),c.currentWorkspace&&(c.currentWorkspace===n||c.currentWorkspace===r)?await Ks(c.currentWorkspace):H()}var It=null,oy=null,Se=0,tR=0,Gs=null,So=!0,Co=!0,pn=!1,Da=null;async function Au({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Da?.remove(),Da=null;let n=++Se;if(Co=!0,pn=!1,wk(),Nm(),$o(),Tu(),Xc(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),iR({forgetLastView:e}),c.triage.clear(),_()){let r=_o();if(Dm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ci(),n!==Se||(await Ji(),n!==Se))return;Ef()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Mu(),_R(),fn(G.status),O(),await H()}async function oX(e){if(e!==void 0&&!Dw(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Bw.join(", ")}.`);if(await Tt(),e===void 0&&(It||_()))return;let t=Se,n=e===void 0?null:await P();t===Se&&(It??={serverMode:c.serverMode,serverModeConfig:c.serverModeConfig,serverModeSelection:c.serverModeSelection,localMode:c.localMode,managed:c.managed},n&&n.setPreviewRole(e),c.serverMode="managed",Tn(!1),c.managedSession=null,c.managedTeams=[],await Au({forgetLastView:!1}))}async function s2(){let e=It,t=oy;It=null,oy=null,yk(),Object.assign(c,e),await Au({forgetLastView:!1}),t&&ko(t)}function ko(e,{runtime:t=!0}={}){if(It){oy=e;return}Cu(!1);let n=pt()!=null,r=_(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),ic(e.mode),vn()&&e.managed&&Tn(!1);let s=o!==c.serverMode;c.managed=e.managed;let i=t&&c.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(c.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(c.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),Mu(),Xc(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Sp(e),r!==_()){Au({forgetLastView:!1,resetNavigation:n&&!vn()&&!Ko(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&SR()&&G.isEnabled()&&ra().then(a=>{if(!(!a||c.serverMode!=="e2e"))for(let l of a.triageSync.openSessions)a.openWorkspace(l.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),s&&H(),i&&O({animate:!1}),_()&&_o()}function _o(){if(Gs?.generation===Se)return Gs.promise;So=!0;let e={generation:Se,promise:null};return Gs=e,e.promise=i2().finally(()=>{Gs===e&&(Gs=null,H())}),e.promise}async function i2(){let e=Se,t=++tR,n=()=>e===Se&&t===tR&&_();try{let r=c.managedSession,o=await Sk({fallback:r});if(!n()||(c.managedSession=o,So=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Co=!0),H(),vk(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],$o(),Tu(),te.reset(),At({history:!1})):Object.hasOwn(di,c.currentView)&&Mr(c.currentView)&&O({animate:!1}),CR(),nR(),!await Eu(n)))return;document.querySelector("base")||(Da=document.createElement("base"),Da.href="/",document.head.prepend(Da)),te.active&&Object.hasOwn(di,c.currentView)&&!Mr(c.currentView)?await te.navigate({view:Mr("manage")?"manage":"home"},{replace:!0}):o&&await te.start(d2,{onCancel:c2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(So||Co)&&(So=!1,Co=!1,H())}}y_((e,t,n)=>Eu(e,{strict:!0,signal:t,revision:n}));var a2=p_(Ck),Qb=0;async function Eu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await a2({generation:s,session:i,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||s!==Se||!_())return!1;let p=c.managedTeams.find(h=>h.id===c.currentManagedTeam)?.name,d=$k(l);c.managedTeams=l;let f=a===null?Qb:++Qb;Co=!1;let m=yr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===Qb&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&yr(c)===m,y;try{y=await d_(c,l,{fetchCatalog:()=>Pm({signal:AbortSignal.any([n,Le()])}),isCurrent:b,render:()=>O({animate:!1}),replaceRoute:w=>te.replaceRoute(w)})}catch(w){return b()?(w.name!=="AbortError"&&Ge(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),H(),!1):e()}if(!b())return e();if(!y){xo=null;let w=At({history:!1}),v=me();return await w,v===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}}if(c_(c,l,d)){let h=l.find(x=>x.id===c.currentManagedTeam),y=h&&(c.currentManagedReport===null||h.reports.some(x=>x.id===c.currentManagedReport))?Xe({view:c.currentView==="links"?"findings":c.currentView,teamId:h.id,reportId:c.currentManagedReport},l):null;xo=null;let w=At({history:!1}),v=me();if(await w,t)return v===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&await te.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!pn&&["workspace-reports","workspace-bundles"].includes(c.currentView)&&!l.some(h=>h.id===c.currentManagedTeam)){let h=At({history:!1}),b=me();return await h,b===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}return!pn&&(c.currentWorkspace||c.bundleDetails?.npm||p!==l.find(h=>h.id===c.currentManagedTeam)?.name)&&O({animate:!1}),H(),!(a!==null&&!pn&&!await ly(n))}var l2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),xo=null;function Mr(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!l2.has(e)||t==="admin")}var sy=0;function c2(){++sy,pn=!1,Oe();let e=Se;Eu(()=>e===Se&&_(),{reuse:!0})}async function d2(e,t){let n=++sy;pn=!0;try{return await u2(e,t)}finally{n===sy&&(pn=!1,H())}}async function u2(e,t){let n=xo===me()?xo:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Eu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Mr("manage-bundles")||(r=await Pm(),!t()||!_()))||(e=Ow(e,c.managedTeams,r),!e))return!1;let o=n!==null&&xo===n&&c.currentManagedTeam===e.teamId&&c.currentManagedReport===e.reportId;if(!t()||!_()||e.view!=="home"&&(!c.managedSession||c.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:i}=await import("./chunk-5FKRIJGF.js");if(!t())return!1;let a=await i({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(l,p)=>Ir(l,p,{history:!1}),isCurrent:t});return t()?a.ok?(xo=me(),_r(),Xe({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ge(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return oR(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(br):As(c.managedTeams);if(!await u_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Og(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return C1(e,t,H);if(e.view==="reviews")return c.managedSession.publicShare?!1:(Bt(),c.currentView="reviews",c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1}),H(),e);if(e.view==="manage-deduplication"&&e.linkId)return Mr(e.view)&&await rR(e.linkId);if(Object.hasOwn(di,e.view))return Ro(e.view,{...e,history:!1});let s=c.managedTeams.find(i=>i.id===e.teamId);return!s||!o&&!await Ir(s,e.reportId,{history:!1})||!t()?!1:(c.currentView!==e.view&&Bt(),c.currentView=c.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),O({animate:!1}),xo=me(),_r(),H(),document.querySelector("#main-content")?.scrollTo({top:0}),Xe({...e,view:c.currentView==="links"?"findings":c.currentView},c.managedTeams))}document.addEventListener("managed-bundle-open",e=>{if(_()&&typeof e.detail?.id=="string"){let t=br(e.detail),n=c.managedTeams,r=n.find(o=>o.id===c.currentManagedTeam&&o.bundles?.some(s=>s.id===t.managedId))??n.find(o=>o.bundles?.some(s=>s.id===t.managedId));te.navigate(wr(n,t,r?.id,c.currentView==="bundles"?c.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{_o()});document.addEventListener("managed-feed-closed",()=>{So=!0,$o(),Tu(),At({history:!1}).then(()=>_o()),Ge("Workspace access changed. Refreshing your session.")});async function Ro(e,t={}){if(t.history!==!1&&_()&&(te.active||await _o(),te.active))return te.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{},...["link","dependencies"].includes(t.scanMode)?{scanMode:t.scanMode}:{},...t.linkId?{linkId:t.linkId}:{}});if(!Object.hasOwn(di,e)||!_()||!Mr(e))return!1;let n=Oe(),r=Se;try{let o=await P();e==="manage-import"&&Mr(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(`${e}: managed bundle load failed:`,o),!1}return r!==Se||n!==me()||!_()||!Mr(e)?!1:(c.currentView=e,c.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId,...t.scanMode==="dependencies"?{mode:"dependencies"}:{}}:null:null,c.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,O({animate:!1}),H(),_o(),document.querySelector("#main-content")?.scrollTo({top:0}),e==="manage-history"&&document.dispatchEvent(new CustomEvent("managed-history-filter",{detail:{actor:t.actor??""},bubbles:!0,composed:!0})),!0)}document.addEventListener("managed-notice",e=>Ge(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&Ro(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var p2;function Tt(){return p2??=f2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function f2(){let e=pt();if(e){ic(e.mode),c.managed=e.managed,Dl().then(o=>{if(o&&o!=="standalone")return ko(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Cu(!wi());let t=Dl(),n=await xp(t,wi()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?ko(n):ko(r,{runtime:!1});if(n&&n!=="standalone")return ko(n);n==="standalone"&&Bl(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Tn(n===null),Xc(!0),Cu(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Bl(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Tn(!1),fn(G.status),H()}if(i)return ko(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function m2(){let e=B?.querySelector("#user-menu"),t=B?.querySelector("#auth-status");!e||!t||e.addEventListener("beforetoggle",n=>{if(n.newState!=="open")return;let r=t.getBoundingClientRect();e.style.left=`${Math.round(r.left)}px`,e.style.bottom=`${Math.round(window.innerHeight-r.top+6)}px`,e.style.top="auto",e.style.right="auto"})}function g2(e){Ar=e,B=e.renderRoot,ey=B.querySelector("#file-list"),S_(B.querySelector("#encryption-toggle")),A_(B.querySelector("#storage-status")),B.addEventListener("click",Q_),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),Q_(t))}),B.addEventListener("dblclick",QB),B.addEventListener("dragstart",e2),B.addEventListener("dragend",t2),B.addEventListener("dragover",n2),B.addEventListener("dragleave",r2),B.addEventListener("drop",o2),bi(B,KB),B.querySelector("#sidebar-search-input")?.addEventListener("input",qB),m2(),fn(G.status),pt()||Cu(!wi()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return ko(kp(r,t))}),Tt(),c.serverMode==="managed"&&_o()}var iy=class extends Et{static styles=[D($_),D(v_)];render(){return u`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${Jt()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><button id="sidebar-home" class="rail-item" type="button" data-action="go-home" aria-label="Home" data-tooltip="Home"><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.5 7.5 8 3l5.5 4.5M4 6.5V13h3V9.5h2V13h3V6.5"/></svg></button><div class="sidebar-search"><svg class="sidebar-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> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><ul id="sidebar-rail"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div id="view-as-status" role="status" hidden></div><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <span id="public-status" hidden>Public access link · Read only</span> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${W(il)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){g2(this)}};customElements.define("app-sidebar",iy);async function IR(e){let t=await yl(e),n=await hm(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Wc({tryPassword:s=>wl(t,s)}),!r)return null}else r=vl(n.text);let o=await gm(r,{conflictResolver:async(s,i)=>{try{return await Kc(s,i,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=s.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(c.currentFile||c.currentWorkspace)&&O(),{kind:"workspace",workspace:o}}var dy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,n,r,o){t.push({kind:r,identifier:n.identifier,reason:o}),this._errors=[...this._errors,{label:lr(n),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{if(r.kind==="bundle"){let s=await $0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await io(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await v0(this.workspaceId,r.identifier);if(!o||!o.ok){this._fail(n,r,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:r.identifier})}catch(o){this._fail(n,r,r.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(r=>r.kind==="report"))try{c.currentWorkspace===this.workspaceId&&await Ks(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Download <strong>"${lr(this.items[0])}"</strong> from the workspace's remote inventory?`:u`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:jc(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",dy);function Fu({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Lu(e,t,n=()=>null){if(!e.currentWorkspace)return null;if(e.currentManagedTeam){let i=e.managedTeams.find(a=>a.id===e.currentManagedTeam);return i?{id:i.id,scope:"team",title:`Team: ${i.name}`,reports:(i.reports??[]).filter(a=>a.analyzer!=="links").map(a=>({...a,managedId:a.id,name:a.filename,hidden:a.visible===!1,available:!0})),bundles:(i.bundles??[]).map(a=>({...br(a),hidden:a.visible===!1,available:!0}))}:null}let r=t.find(i=>i.id===e.currentWorkspace);if(!r)return null;let o=new Map(e.bundles.map(i=>[i.integrity,i])),s=new Set(e.storedFiles??[]);return{id:r.id,scope:"workspace",title:`Workspace: ${r.name}`,reports:[...new Set(r.reports??[])].filter(i=>n(i)!=="links").map(i=>({name:i,available:s.has(i)})),bundles:[...new Set(r.bundles??[])].map(i=>{let a=o.get(i);return a?{...a,available:!0}:{integrity:i,name:`${i.slice(0,24)}\u2026`,available:!1}})}}function uy(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Va(e,t,n){if(!e)return g;let r=e[t].length;if(t==="bundles"&&r===0)return g;let o=n===`workspace-${t}`;return u`<button type="button" class="${`files-toggle-btn${o?" active":""}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(o)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function ja(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function py(e,t){if(!(e>1))return g;let n=t==="files";return u`<button type="button" class="${`files-toggle-btn${n?" active":""}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function AR(e,t,n=0){if(!e)return u`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let r=`workspace-${t}`,o=e[t];return u`<section class="workspace-content-view"><header class="page-head"><div class="page-title"><h1>${uy(e,r)}${Va(e,"reports",r)}${Va(e,"bundles",r)}${py(n,r)}</h1></div></header>${o.length>0?u`<ul class="workspace-content-list">${o.map(s=>{let i=[s.kind==="stasis"?"Stasis":s.kind==="sourcemap"?"Sourcemap":null,Number.isFinite(s.size)?he(s.size):null,Number.isFinite(s.summary?.files)?`${s.summary.files.toLocaleString()} files`:null,Number.isFinite(s.summary?.lines)?`${s.summary.lines.toLocaleString()} LoC`:null].filter(Boolean).join(" \xB7 "),a=s.repoFullName?`${s.repoFullName}${s.repoDirectory?`/${s.repoDirectory}`:""}`:null;return u`<li class="${s.hidden?"workspace-content-hidden":""}"><button type="button" class="workspace-content-row" data-workspace-report="${t==="reports"?s.managedId??s.name:g}" data-workspace-bundle="${t==="bundles"?s.managedId??s.integrity:g}" ?disabled="${!s.available}"><svg class="workspace-content-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="${t==="bundles"?"m12 3 9 5v8l-9 5-9-5V8zM3 8l9 5 9-5M12 13v8M7.5 5.5l9 5":"M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9zM14 3v6h6M8 13h8M8 17h5"}/"></path></svg> <span class="workspace-content-label"><span class="workspace-content-name">${s.name}${s.hidden?u`<span class="workspace-content-visibility">Hidden</span>`:g}</span> ${a?u`<span class="workspace-content-repo">${a}</span>`:g} </span><span class="workspace-content-stats">${s.available?i:"Not available locally"}</span> ${s.available?u`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:g}</button></li>`})}</ul>`:u`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}async function ER(e,{fetchReports:t,signal:n,isCurrent:r,render:o}){let s=e.currentView;if(!["workspace-reports","workspace-bundles"].includes(s)||!r()||n.aborted)return!0;let i=e.managedTeams.find(d=>d.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,l=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(d=>d.id===i.id)===i,p=await new Promise(d=>{let f=h=>{n.removeEventListener("abort",m),d(h)},m=()=>f(null);n.addEventListener("abort",m,{once:!0}),Promise.resolve().then(()=>n.aborted?null:t(i.id,{signal:n})).then(f,()=>f(null))});return l()?(e.workspaceContentFileCount=p?ja(p.map(d=>d.data)):0,o(),p!==null):!0}var To="deepview.lastFile";function ay(e,t="overview",{push:n=!1}={}){if(_()){let o=c.bundles.find(i=>i.integrity===e),s=o?.npm?Ra(o,t,vr(c,t)):wr(c.managedTeams,o,c.currentManagedTeam,t,vr(c,t),c.bundles);n?te.pushRoute(s):te.replaceRoute(s);return}let r=t&&t!=="overview"&&up.has(t)?` ${t}`:"";Me(To,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function h2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ga(e){return await h2(),e!==null&&ne(e)?!1:(O(),xg(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function Nu(){ee.selected=null,ee.focusedPkg=null,ee.layoutCache=null,ee.solo=null,ee.hidden.clear(),ee.pathFilter="",Bt()}function qs(e){for(let t of G.openSessions)t&&!e.has(t.workspaceId)&&(G.closeSession(t.workspaceId),Jm(t.workspaceId))}function fy(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function FR(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function my(e){let t=LR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function LR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Ou({name:e,content:t,existingNames:n}){if(!n.has(e))return await Xt(e,t),n.add(e),{name:e,content:t};let r;try{r=await fe(e)}catch(l){if(!FR(l))throw l;return await Xt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=Y().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>gs(l.id,e)),i=await l_({name:e,workspaceNames:s.map(l=>l.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await Xt(l,t),n.add(l),{name:l,content:t}}let a;if(s.length>0)try{a=await k0(e)}catch(l){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,l)}try{await Xt(e,t),s.length>0&&await y2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function b2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await sf(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function y2(e,t){let n;try{n=await Cn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await sa(r.id);let o=await Jc(r.id,e,n);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,o)}}async function gy(e){if(e=[...e],e.length===0||(await Tt(),_())||(await Su(),_()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=LR(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await IR(i);if(f?.kind==="reports")for(let m of f.reports){if(typeof m?.name!="string"||!m.name||typeof m?.content!="string")continue;let h=Ve(m.content);if(!h.recognized){s.push(m.name);continue}let b=await Ou({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await b2(b.name,m.repo),t={name:b.name,content:b.content})}try{let m=await ce();o.clear();for(let h of m)o.add(h)}catch(m){console.warn("Import: failed to refresh existingNames after workspace import:",m)}continue}if(my(i.name)){let f=new Uint8Array(await i.arrayBuffer()),{integrity:m}=await Zr(i.name,f);n=m,r.add(m);continue}let p=await i.text(),d=Uw(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Ou({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(_w(p,a)==="codex"){let f=Cw(p);for(let{displayName:m,data:h}of f){let b=m.replaceAll("/","__")+".codex",y=JSON.stringify(h),{count:w,source:v}=Ve(y),x=await Ou({name:b,content:y,existingNames:o});x&&(Ue(x.name,w,v),t={name:x.name,content:x.content})}}else{let f=Ve(p);if(!f.recognized)throw new Error("not a recognized DeepView, DeepSec, Piolium, Claude Security, Codex, or Markdown (generic) report, and not a links file");let m=await Ou({name:i.name,content:p,existingNames:o});if(!m)continue;Ue(m.name,f.count,f.source),t={name:m.name,content:m.content}}}catch(a){alert(`Failed to load ${i.name}: ${a.message}`)}if(s.length>0){let i=s.length;alert(`Skipped ${i} report${i===1?"":"s"} no parser recognised: ${s.join(", ")}`)}await H(),t?await Ua(t.name,t.content):n&&(gr(n),ay(n,c.bundleDetailsTab),O(),await H(),gd(n)),xg(r).catch(()=>{})}async function Ua(e,t,{workspaceId:n}={}){if(_())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Ss(e,n);let o=new Set(Y().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(qs(o),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=e,c.currentWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),c.repoUrl=Ze(e),c.repoEditing=!1,Nu(),Me(To,Sc(e,c.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await fe(e)}catch(i){if(ne(r))return;if(i&&i.message?.includes("vault locked")){if(await $u()&&!ne(r)){await Ua(e);return}ne(r)||(c.currentFile=null,await H());return}if(FR(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&gs(l.id,e));if(a)try{if(await sa(a.id),ne(r))return;let l=await Fu({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Ua(e);return}}catch(l){if(console.warn(`Re-download prompt for missing "${e}" failed:`,l),ne(r))return}ne(r)||(c.currentFile=null,await H());return}alert(`Failed to read ${e}: ${i.message}`),c.currentFile=null,await H();return}if(ne(r))return}let s=qn(t);if(s?(c.currentLinks={name:e,...s},c.currentView="links",O()):await Bu(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),sa(i);return await H(),!0}}function rR(e){return c.managedSession?.role!=="admin"?!1:Ir({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function ly(e=Le()){let t=Le();return ER(c,{fetchReports:Wm,signal:AbortSignal.any([e,t]),isCurrent:()=>_()&&Le()===t,render:()=>O({animate:!1})})}async function oR(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=_(),s=o?c.managedTeams.find(p=>p.id===e):Y().find(p=>p.id===e);if(!s)return!1;if(o&&n&&te.active)return te.navigate(Xe({view:r,teamId:e},c.managedTeams));let i=o?`managed-team:${e}`:e,a=c.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(c.currentView)?c.workspaceContentFileCount:ja(c.reports):0,l=Oe();if(qs(new Set),qa({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=As(c.managedTeams)),be.classList.add("active"),ut.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),O({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Me(To,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await ly();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return ap(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=ja(p),O({animate:!1})}return!ne(l)}async function Ir(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!_()||!e||!Array.isArray(e.reports))return!1;if(n&&te.active)return te.navigate(Xe({view:"findings",teamId:e.id,reportId:t},c.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Oe(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Le(),a;try{a=r?await(await P()).fetchManagedLinkWorkspace(t,{signal:i}):await Wm(e.id,{reportId:s?.id??null})}catch(m){return ne(o)||Ge(m.message||"Could not load link report."),!1}if(ne(o))return!1;if(kk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ge("Could not load all team reports. Please try again."),!1;let l=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),p=a.filter(m=>t===null||l||m.id===t),d=p.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));qs(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",be.replaceChildren(f),be.classList.add("active"),ut.classList.add("hidden"),c.currentView="findings",c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=t===null?null:a.find(m=>m.id===t).filename,c.currentWorkspace=t===null?`managed-team:${e.id}`:null,c.currentManagedTeam=e.id,c.currentManagedReport=t,I$(e.id,a),c.managedReports=p.map(m=>({id:m.id,filename:m.filename})),c.managedComments.clear(),c.managedIssues.clear(),c.managedReport=t===null?null:c.managedReports[0]??null,c.currentReportWorkspace=null,c.currentLinks=null,c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.repoUrl="",c.repoEditing=!1,Nu();for(let m of d)if(await Bu(m.filename,m.data,o,{renderView:!1,managedReportId:m.id,managedRepo:m.repo}),ne(o))return!1;if(d.length>0){let{createManagedAnnotationRead:m,hydrateManagedReportTriage:h}=await import("./chunk-BJKRVROW.js");if(ne(o))return!1;let b=async w=>{let v=m(c.currentManagedTeam,w);return(await Promise.all(d.flatMap(k=>[h(k.id,{renderView:!1,signal:w,readAnnotations:v}),xd(k.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!ne(o)},y=r?await b(Le()):await _r({hydrate:b});if(ne(o))return!1;if(!y)return await At({history:!1}),Ge("Could not load report annotations. Open the team or report again to retry."),!1}if(l){if(c.currentView="links",c.currentLinks={name:l.filename,groups:l.data.links,skipped:0,...r?{managedId:t}:{}},!await Ga(o))return!1}else if(d.length===0)Du();else if(aa(mo()),!await Ga(o))return!1;return _r(),await H(),!0}async function Ks(e){if(_())return;c.currentManagedTeam=null,c.currentManagedReport=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear();let t=Y().find(f=>f.id===e);if(!t)return;let n=Oe();qs(new Set([e])),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),dt("workspace",e),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=null,c.currentWorkspace=e,c.currentReportWorkspace=null,c.currentLinks=null,c.repoUrl="",c.repoEditing=!1,Nu(),Me(To,`ws:${e}`).catch(()=>{}),t.reports.length===0&&fy();let r=await Qi(t);if(ne(n))return;let o=!0,s=t.reports.map(f=>fe(f).catch(()=>null)),i=0;for(let f=0;f<t.reports.length;f++){let m=await s[f];if(ne(n))return;if(m===null){o=!1;continue}if(!qn(m)&&(await Bu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&fy(),o&&lo(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka());let a=c.reports.slice();E_(t,a,r,{complete:o,isCurrent:()=>!ne(n)&&c.currentWorkspace===e&&["findings","files"].includes(c.currentView)});let l=H().catch(f=>console.warn("workspace sidebar:",f));if(i>0){if(aa(mo()),!await Ga(n))return}else Du();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);L_(t,a,r,{complete:o,isCurrent:()=>!ne(n),onReady:async f=>{!f.appMode||c.currentWorkspace!==e||!["findings","files"].includes(c.currentView)||p.some((m,h)=>c[m]!==d[h])||(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka(),aa(mo()),await Ga(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),sa(e),await l}async function sR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;os(r),Qr(r,"");for(let o of t)try{let s=await Zc(o,r);if(ne(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await Jo(r),!ne(n)&&(await Ui(r,null),!ne(n))){if(e==="wipe"){try{await Rc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(qa(),await H())}}function qa({forgetLastView:e=!0}={}){Hx(),c.currentManagedTeam=null,c.currentManagedReport=null,c.currentFile=null,c.currentWorkspace=null,c.workspaceContentFileCount=0,c.currentReportWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.bundleDetails=null,c.bundleDetailsTab="overview",c.bundleSourceFile=null,c.bundleSourceFindingIdx=null,c.selectedPackage=null,c.selectedPackageVersion=null,c.packageDetailsTab="overview",c.packageSlideTriage=null,c.packageSlideTransient=!1,c.expandedPackages.clear(),c.selectedRepository=null,c.repositoryDetailsTab="overview",c.repositorySlideTriage=null,c.repositorySlideTransient=!1,c.filesSelectedFile=null,c.tableSelectedGid=null,c.kanbanPopoverGid=null,c.kanbanExpandedColumn=null,c.focusGid=null,c.activeTabByGroup.clear(),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.repoUrl="",c.repoEditing=!1,c.shownTriage=null,c.currentView="findings",Nu(),e&&nr(To),fy()}function iR(e){Oe(),qs(new Set),qa(e)}async function At({history:e=!0}={}){return e&&_()&&te.active?te.navigate({view:"home"}):(Oe(),qs(new Set),qa({forgetLastView:!_()}),await H(),!0)}async function aR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await Qc(o,n);if(ne(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await jp(n),ne(t)||(await Pf(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(To);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(To),vf(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function lR(e,t="detach",{triage:n="keep"}={}){let r=Y().find(a=>a.id===e);if(!r)return;Oe();let o=Array.isArray(r.reports)?[...r.reports]:[];if(G.closeSession(e),Jm(e),t==="delete"){for(let a of o){try{await Jo(a)}catch{}os(a),Qr(a,"")}if(n==="wipe")try{await Rc()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=c.currentWorkspace===e,i=t==="delete"&&c.currentFile!=null&&o.includes(c.currentFile);(s||i)&&qa(),await Of(e),await H()}async function Bu(e,t,n=null,{renderView:r=!0,managedReportId:o=null,managedRepo:s=null}={}){let i=()=>n!==null&&ne(n);try{if(await Promise.all([dt("report",e),dt("workspace",c.currentWorkspace||c.currentReportWorkspace)]),i()||(await ao(),i()))return;let{data:a,reason:l}=o===null?_()?Nw(t,e):ap(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(id);if(await Tw(f),i())return;let m=new Set(f.filter(Tv).map(k=>k.source??a.source??null)),h=s??a?.repo,b=De({repo:h}),y=b??(o==null?Ze(e):""),w=Ft(h),v=pl([{groups:d.map(id),tree:a.tree}]),x=[];for(let k of d){let $=id(k);if($.length===0)continue;let S=[];for(let C of $){let R={...C,_id:c.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Po(R,a),R._source=R.source??a.source??null,"isApp"in R||(R.isApp=jn(R,R._source)),R._sourcePass=m.has(R._source),R._analyzer=R._source??R.type??null,S.push(R)}x.push(S)}return Gn(x),c.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:x,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Wl(c.reports),Hl(c.reports)&&pr(),c.revalidateConflicts=X0(),Ka(),p&&(td(),aa(mo())),r&&await Ga(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Bu(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(c.filterSeverities=new Set(e)),t!==void 0&&(c.filterConfMin=t),O()};document.addEventListener("keydown",e=>{e.key==="Escape"&&document.body.classList.contains("report-fullscreen")&&document.body.classList.remove("report-fullscreen")});document.addEventListener("dragover",e=>e.preventDefault());document.addEventListener("drop",e=>{e.preventDefault(),!e.target.closest("#drop-zone")&&gy(e.dataTransfer.files)});ut.addEventListener("dragover",e=>{e.preventDefault(),_()||ut.classList.add("hover")});ut.addEventListener("dragleave",()=>ut.classList.remove("hover"));ut.addEventListener("drop",e=>{e.preventDefault(),ut.classList.remove("hover"),gy(e.dataTransfer.files)});var mn=null;function w2(){_()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&gy(e),mn.value=""}),document.body.append(mn)),mn.click())}ut.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){Ro(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){jk(c.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=c.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Ir(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Ks(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&w2()});function OR(e,t=fetch,n=""){let r=new URL(e);return(o,s={})=>{let i=new URL(o.replace(/^\/+/u,""),r);if(i.origin!==r.origin)throw new Error("Scan requests must use the configured server");let a=new Headers(s.headers);return n&&a.set("authorization",`Bearer ${n}`),t(i,{...s,headers:a,credentials:"omit",redirect:"error"})}}var Pu=class{constructor(t,n=()=>{},r=fetch){this.onChange=n,this.request=r,this.reset(t)}reset(t=this.server){this.server=t,this.apiKey="",this.provider=null,this._remoteModels=!1,this._disconnect()}_previewModels(){let t=fp(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,n){let r=OR(this.server,this.request,this.apiKey.trim()),o=t?`?${new URLSearchParams({provider:t})}`:"",s=await r(`api/models${o}`,{headers:{accept:"application/json"},cache:"no-store",signal:n});if(s.status===401)throw Object.assign(new Error("DeepView API key not recognized."),{status:401});if(!s.ok)throw new Error(`Scan server returned HTTP ${s.status}.`);let i=await s.json();if(i?.valid!==!0||typeof i.managed!="boolean")throw new Error("Invalid response from scan server.");return{managed:i.managed,catalogue:i.managed||t?Vw(i):null}}async _load(t){this._controller?.abort();let n=this._controller=new AbortController;this.loading=!0,this.error=null,this.catalogue=null;let r=this._fetch(t,n.signal);this.onChange();try{let o=await r;if(n.signal.aborted)return;if(this.connected=!0,this.managed=o.managed,this.catalogue=o.catalogue,!o.managed&&!t&&this.provider)return this._load(this.provider);if(o.catalogue){let s=o.catalogue;this._remoteModels=!0,this.loadModels=()=>Promise.resolve(s)}else this._remoteModels||this._previewModels();this.loading=!1,this.onChange()}catch(o){if(n.signal.aborted)return;(!t||o.status===401)&&this._disconnect(),this.loading=!1,this.error=o instanceof TypeError?"Couldn\u2019t reach the scan server. Check your connection and try again.":String(o?.message??o),this.onChange()}}};function NR(e){let t=e.trim();return/^sk-ant-[A-Za-z0-9_-]*$/u.test(t)?"anthropic":/^sk-or-v1-[A-Za-z0-9_-]*$/u.test(t)?"openrouter":/^sk-kimi-[A-Za-z0-9_-]*$/u.test(t)?"moonshot":/^sk-(?:proj|svcacct)-[A-Za-z0-9_-]*$/u.test(t)?"openai":null}function Er(e){if(e?.throwIfAborted(),_())throw new DOMException("Local scan closed","AbortError")}async function BR(e){Er(e);let t=await Je();return Er(e),lv(t,Y())}async function DR(e,t){Er(t);let n=await go(e.integrity,{name:e.filename},{sources:!1});return Er(t),cv(e,n)}async function PR(e){Er(e);let t=await ce(),n=[];for(let r of t){Er(e);let o=await fe(r);Er(e),n.push({name:r,content:o,fallbackRepo:Ze(r)})}return Er(e),dv(n,Y())}function zR({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?vp(o):vp(t)??(e==="127.0.0.1"?_v:null)}async function WR(e,t,n){let r=Ge(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function Ya(){return zR({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function Xa(e){return _()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!Ya()}async function zu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Tt(),r!==me()||e&&!Xa(e))return;if(_()){e&&await Ro("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Ya())return;let o=At(),s=me();await o,!(!Ya()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var hy=class extends Et{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Ya(),this._access=new Pu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>WR("Loading bundle\u2026",n,()=>DR(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=cm(()=>{this._savedAccess=ds()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await WR("Loading bundles\u2026",t.signal,()=>BR(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=ds();let t=im(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=ds();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await lm(),this._resetAccess()):await am({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=ds()}catch{Ge(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let n=NR(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=sp`:host{display:block}*{box-sizing:border-box}button{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .5rem;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);font:inherit;font-size:.8rem;cursor:default}button:hover:not(:disabled){color:var(--text);background:var(--surface)}button:disabled{opacity:.5}.access{min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);container:scan-access / inline-size}.access-heading{display:flex;align-items:center;justify-content:space-between;min-height:2.5rem;padding:.45rem .9rem;border-bottom:1px solid var(--border)}.access h2{margin:0;color:var(--text);font-size:.86rem;font-weight:600}.save-access{min-height:1.6rem;margin-left:auto;flex-shrink:0}.access-fields{display:grid;gap:.8rem;padding:.85rem .9rem}.connection-row,.provider-row{display:grid;align-items:end;gap:.65rem;margin:0}.connection-row{grid-template-columns:minmax(0,1fr) auto;width:min(42rem,100%)}.provider-row{grid-template-columns:max-content minmax(0,1fr);width:100%}.access label{display:grid;gap:.3rem;min-width:0;color:var(--muted);font-size:.72rem}input{min-width:0;width:100%;height:2rem;padding:.35rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.8rem}.provider-field{min-width:0;margin:0;padding:0;border:0}.provider-field legend{margin-bottom:.3rem;padding:0;color:var(--muted);font-size:.72rem}.provider-options{display:flex;width:fit-content;max-width:100%;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);overflow:hidden}.access .provider-choice{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;height:calc(2rem - 2px);padding:.3rem .6rem;color:var(--muted);font-size:.74rem;white-space:nowrap;user-select:none}.provider-choice+.provider-choice{border-left:1px solid var(--border)}.provider-choice:hover{color:var(--text);background:var(--surface)}.provider-choice:has(:checked){color:var(--text);background:var(--surface-active)}.provider-choice:has(:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.provider-choice input{position:absolute;inset:0;margin:0;width:100%;height:100%;opacity:0;cursor:default}.provider-icon{display:block;width:1rem;height:1rem;flex:0 0 1rem}.provider-icon svg{display:block;width:100%;height:100%}.provider-icon.anthropic{color:#d97757}.provider-icon.openai{color:#10a37f}.provider-icon.moonshot{color:#8068d9}.provider-icon.moonshot svg{transform:scale(.8)}.provider-icon.openrouter{color:var(--text)}.connect{justify-content:center;height:2rem;padding:.35rem .8rem;color:var(--text);background:var(--surface-active)}.connection-status{flex:1;min-width:0;margin:0 .7rem;line-height:1rem;color:var(--muted);font-size:.7rem}.connection-status.error{color:var(--critical, #e5534b)}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container scan-access (max-width: 38rem){.provider-row{grid-template-columns:minmax(0,1fr)}}@container scan-access (max-width: 28rem){.provider-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.provider-choice:nth-child(odd){border-left:0}.provider-choice:nth-child(n+3){border-top:1px solid var(--border)}}@container scan-access (max-width: 23rem){.access .provider-choice{gap:.25rem;padding-inline:.4rem;font-size:.7rem}}`;_accessPanel(){let t=this._access,n=t.catalogue?.models.length??0,r=t.error??(t.loading?t.connected?"Loading provider models\u2026":"Connecting\u2026":t.connected?t.catalogue?`Connected \xB7 ${n} ${n===1?"model":"models"}`:"Connected. Choose a provider.":"");return u`<section slot="access" class="access" aria-labelledby="scan-access-heading"><div class="access-heading"><h2 id="scan-access-heading">Access</h2><p class="${`connection-status ${t.error?"error":""}`}" role="${t.error?"alert":"status"}">${r}</p>${this._savedAccess||t.connected?u`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:g}</div><div class="access-fields"><form class="connection-row" @submit="${this._connect}"><label>DeepView API Key<input type="password" name="deepview-api-key" placeholder="Enter API key" autocomplete="off" spellcheck="false" .value="${t.apiKey}" @input="${o=>t.setKey(o.target.value)}"></label> <button type="submit" class="connect" ?disabled="${!t.apiKey.trim()||t.loading||t.connected&&!t.error}">${t.connected&&!t.error?"Connected":"Connect"}</button></form>${t.managed?g:u`<div class="provider-row"><fieldset class="provider-field"><legend>Provider</legend><div class="provider-options">${[["anthropic","Anthropic"],["openai","OpenAI"],["moonshot","Moonshot"],["openrouter","OpenRouter"]].map(([o,s])=>u`<label class="provider-choice"><input type="radio" name="scan-provider" value="${o}" .checked="${t.provider===o}" @change="${()=>this._setProvider(o)}"><span class="${`provider-icon ${o}`}" aria-hidden="true">${jw(o)}</span><span>${s}</span></label>`)}</div></fieldset><label>Token<input type="password" name="provider-token" placeholder="Enter provider token" autocomplete="off" spellcheck="false" .value="${this._providerToken}" @input="${o=>this._setProviderToken(o.target.value)}"></label></div>`}</div></section>`}render(){return u`${this._error?u`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:g}<deepview-scan-page .selection="${this.selection}" scope-label="Workspace" .source="${this._source}" .sourceLoading="${this._source==null&&!this._error}" .loadBundle="${this._loadBundle}" .loadModels="${this._access.loadModels}" .canRun="${this._access.ready}" .loadReportSources="${PR}"><button slot="navigation" type="button" @click="${()=>{At()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",hy);function Mu(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Vn}<span>Scan</span>`,t.addEventListener("click",()=>{zu()}),e.append(t));let n=Ya();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(s=>s.integrity===c.selectedBundle);r&&(r.hidden=!o||!Xa(o))}var HR="@preventive/triage";function by(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let i=n.indexOf("/");i>0&&(r=n.slice(0,i),o=n.slice(i+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function UR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function VR(e){let t=[];if(e?.kind!=="stasis"||!e.bundle?.modules)return t;let n=new Map;for(let[r,o]of e.bundle.modules){if(!o?.name||typeof o.version!="string"||!o.version)continue;let s=`${o.name}@${o.version}`,i=n.get(s);if(i!==void 0){r==="."&&(t[i].dir=".");continue}n.set(s,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function jR(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return!1;for(let[,t]of e.bundle.modules)if(t?.name&&typeof t.version=="string"&&t.version)return!0;return!1}function GR(e,t){let n=e.find(s=>s.dir===".")??null,r=n?e.filter(s=>s!==n):e;return{root:n?{name:n.name,version:n.version,purl:by(n.name,n.version)}:{name:UR(t?.name??"bundle"),version:null,purl:null},rest:r}}function KR(e){return e??globalThis.crypto.randomUUID()}function PJ(e,t,{now:n=new Date,uuid:r}={}){let o=VR(e),{root:s,rest:i}=GR(o,t),a={type:"application","bom-ref":s.purl??`application:${s.name}`,name:s.name};s.version&&(a.version=s.version),s.purl&&(a.purl=s.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${KR(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:HR}]},component:a},components:i.map(p=>{let d=by(p.name,p.version);return{type:"library","bom-ref":d,name:p.name,version:p.version,purl:d}})};return`${JSON.stringify(l,null,2)}
182
+ `}function v2(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function zJ(e,t,{now:n=new Date,uuid:r}={}){let o=VR(e),{root:s,rest:i}=GR(o,t),a=UR(t?.name??"bundle"),l=n.toISOString().replace(/\.\d{3}Z$/u,"Z"),p=(b,y,w,v)=>{let x={SPDXID:b,name:y,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return w&&(x.versionInfo=w),v&&(x.externalRefs=[v2(v)]),x},d="SPDXRef-Package-root",f=[p(d,s.name,s.version,s.purl)],m=[{spdxElementId:"SPDXRef-DOCUMENT",relationshipType:"DESCRIBES",relatedSpdxElement:d}];i.forEach((b,y)=>{let w=`SPDXRef-Package-${y+1}`;f.push(p(w,b.name,b.version,by(b.name,b.version))),m.push({spdxElementId:d,relationshipType:"DEPENDS_ON",relatedSpdxElement:w})});let h={spdxVersion:"SPDX-2.3",dataLicense:"CC0-1.0",SPDXID:"SPDXRef-DOCUMENT",name:a,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(a)}-${KR(r)}`,creationInfo:{created:l,creators:[`Tool: ${HR}`]},packages:f,relationships:m};return`${JSON.stringify(h,null,2)}
183
+ `}function $2(e,t){let n=t?"gu":"giu",r=t?"g":"gi";try{return{re:new RegExp(e,n)}}catch{try{return{re:new RegExp(e,r)}}catch(o){return{error:o.message}}}}function Wu(e,t,n){if(t){let s=$2(e,n);if(s.error)return{error:s.error};let{re:i}=s;return{ranges(a){i.lastIndex=0;let l=[],p;for(;(p=i.exec(a))!==null;){if(p[0].length===0){i.lastIndex++;continue}if(l.push([p.index,p.index+p[0].length]),l.length>=50)break}return l}}}let r=n?e:e.toLowerCase(),o=r.length;return{ranges(s){let i=n?s:s.toLowerCase(),a=[],l=0,p;for(;(p=i.indexOf(r,l))!==-1&&(a.push([p,p+o]),l=p+o,!(a.length>=50)););return a}}}function k2(e,t,n){let r=[],o=0,s=!1;for(let i of n){let a=e.get(i);if(typeof a!="string")continue;let l=a.split(`
184
+ `),p=[];for(let d=0;d<l.length;d++){let f=t.ranges(l[d]);if(f.length!==0&&(p.push({ln:d+1,ranges:f}),o++,o>=5e3)){s=!0;break}}if(p.length>0&&r.push({path:i,lines:l,hits:p}),s)break;if(r.length>=500){s=!0;break}}return{fileResults:r,totalHits:o,truncated:s}}function x2(e,t){let n=[],r=0;for(let{path:o,lines:s,hits:i}of e.fileResults){let a=[];for(let{ln:l}of i){let p=t.ranges(s[l-1]);p.length!==0&&(a.push({ln:l,ranges:p}),r++)}a.length>0&&n.push({path:o,lines:s,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}var lt={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function qR(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Wu(n,r,o);if(i.error)return{error:i.error};(lt.tag!==e||lt.useRegex!==r||lt.caseSensitive!==o)&&(lt.tag=e,lt.useRegex=r,lt.caseSensitive=o,lt.entries.length=0);let a=r||o?m=>m:m=>m.toLowerCase(),l=a(n),p=null,d=-1;for(let m=0;m<lt.entries.length;m++){let h=lt.entries[m],b=a(h.query);if(b===l)return lt.entries.splice(m,1),lt.entries.unshift(h),h.result;r||h.result.truncated||b.length<=d||!l.includes(b)||(p=h.result,d=b.length)}let f=p?x2(p,i):k2(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&&lt.entries.pop(),f}var S2=200,C2=28,_2=12;function R2(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>C2?n-_2:0;return yy(e,t,o,S2)}function YR(e,t){let n=R2(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${wy(n.text,n.ranges)}`}function yy(e,t,n,r){let o=e.slice(n,n+r);if(n===0)return{text:o,ranges:t,clipped:!1};let s=[];for(let[i,a]of t){let l=i-n,p=a-n;p<=0||l>=o.length||s.push([Math.max(0,l),Math.min(o.length,p)])}return{text:o,ranges:s,clipped:!0}}function wy(e,t){if(t.length===0)return e;let n=[],r=0;for(let[o,s]of t){let i=Math.max(r,Math.min(o,e.length)),a=Math.max(i,Math.min(s,e.length));a<=i||(i>r&&n.push(e.slice(r,i)),n.push(u`<mark class="bundle-search-mark">${e.slice(i,a)}</mark>`),r=a)}return r<e.length&&n.push(e.slice(r)),n}function T2(e,t){let n=new Map(e.map(s=>[s,[...t.get(s)].map(([i,a])=>{let l=t.get(s),p=t.get(i),d=l.size<p.size?l:p,f=0,m=0;for(let h of d.keys())if(l.has(h)&&p.has(h)&&f++,++m===32)break;return{to:i,score:a*2+f}}).toSorted((i,a)=>a.score-i.score||t.get(i.to).size-t.get(a.to).size||i.to.localeCompare(a.to))])),r=[],o=new Set;for(let s of e){let i=[s];for(;i.length>0;){let a=i.pop();if(!o.has(a)){o.add(a),r.push(a);for(let{to:l}of n.get(a).toReversed())o.has(l)||i.push(l)}}}return r}function XR(e,t,n){let r=e.toSorted(),o=new Set(r),s=new Map,i=new Map(r.map(v=>[v,new Map]));for(let v of r){s.set(v,new Map);for(let x of t.get(v)??[])v===x||!o.has(x)||(s.get(v).set(x,{to:x,count:1}),i.get(v).set(x,(i.get(v).get(x)??0)+1),i.get(x).set(v,(i.get(x).get(v)??0)+1))}let a=Jv(r,s),l=r.map((v,x)=>({col:x%n,row:Math.floor(x/n)})),p=l.map(({col:v,row:x})=>({col:x%2?n-v-1:v,row:x})),d=(v,x)=>Math.abs(v.col-x.col)+Math.abs(v.row-x.row),f=v=>r.reduce((x,k)=>x+[...i.get(k)].reduce(($,[S,C])=>$+C*d(v.get(k),v.get(S)),0),0),m=new Map(r.map((v,x)=>[v,l[x]])),h=f(m);for(let v of[a,T2(r,i)])for(let x of[l,p]){let k=new Map(v.map((S,C)=>[S,x[C]])),$=f(k);$<h&&(m=k,h=$)}let b=({col:v,row:x})=>`${v},${x}`,y=new Map([...m].map(([v,x])=>[b(x),v])),w=(v,x,k,$)=>{let S=0;for(let[C,R]of i.get(v))S+=R*d(x,C===k?$:m.get(C));return S};for(let v=0;v<8;v++){let x=!1;for(let k of r){let $=m.get(k),S=i.get(k),C=0,R=0,L=0;for(let[I,U]of S)C+=m.get(I).col*U,R+=m.get(I).row*U,L+=U;if(!L)continue;let A=new Set;for(let I of[$,{col:Math.round(C/L),row:Math.round(R/L)}])for(let U=-1;U<=1;U++)for(let K=-1;K<=1;K++){let Q=y.get(`${I.col+U},${I.row+K}`);Q!==void 0&&Q!==k&&A.add(Q)}let E=0,M=null;for(let I of A){let U=m.get(I),K=w(k,U,I,$)+w(I,$,k,U)-w(k,$,I,U)-w(I,U,k,$);K<E&&(E=K,M=I)}if(M!==null){let I=m.get(M);m.set(k,I),m.set(M,$),y.set(b(I),k),y.set(b($),M),x=!0}}if(!x)break}return r.map(v=>({id:v,...m.get(v)})).toSorted((v,x)=>v.row-x.row||v.col-x.col)}var gn=216,Fr=48,Hu=32,Pn=20,ky=24,M2=20,vy=10;function JR(e,t){let n=d=>d&&(d.collapsed||d.members.length===1),r=e.map((d,f)=>e.length>5&&n(d)&&n(e[f+1])),o=0,s=0;e.forEach((d,f)=>{r[f]?s+=d.width:o+=d.width+(f===e.length-1?0:Pn)});let i=Math.min(t,gn*5+Pn*4),a=s?Math.max(.3,Math.min(.9,(i-o)/s)):1,l=0;return{groups:e.map((d,f)=>{let m=d.width*(r[f]?a:1),h={...d,x:l,visibleWidth:m,stacked:!!(r[f]||r[f-1])};return l+=m+(r[f]||f===e.length-1?0:Pn),h}),width:l,height:Math.max(...e.map(d=>d.height))}}function ZR(e){let t=`M${e[0].join(",")}`;for(let n=1;n<e.length-1;n++){let[r,o]=e[n],[s,i]=e[n-1],[a,l]=e[n+1],p=Math.hypot(a-r,l-o),d=Math.hypot(r-s,o-i);if(!d||!p)continue;let f=Math.min(6,d/2,p/2);t+=` L${r-(r-s)/d*f},${o-(o-i)/d*f} Q${r},${o} ${r+(a-r)/p*f},${o+(l-o)/p*f}`}return`${t} L${e.at(-1).join(",")}`}var xy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function $y(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=xy(r),i=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let d=e.x+e.visibleWidth/2+s;return[[d,n?e.y-5:e.y+e.height],[d,i]]}let a=e.x+o.x+(n?0:gn),l=e.y+o.y+Fr/2+s/2,p=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),l],[p,l],[p,i]]}function QR(e,t){let n=(a,l)=>{let p=e.get(a[l]),d=p.packages.find(f=>f.id===a[`${l}Package`]);return p.members.length===1||p.collapsed?[p.x+p.visibleWidth/2,p.y+p.height/2]:d?[p.x+d.x+gn/2,p.y+d.y+Fr/2]:[p.x+p.width/2,p.y+p.height/2]},r=(a,l,p=d=>n(d,l))=>{let d=new Map,f=Map.groupBy(t,m=>{let h=e.get(m[a]);return h.collapsed?h:m[`${a}Package`]});for(let m of f.values())m.toSorted((b,y)=>{let[w,v]=p(b),[x,k]=p(y);return(b.bypassLane??w)-(y.bypassLane??x)||v-k||b[`${l}Package`].localeCompare(y[`${l}Package`])||b[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((b,y)=>d.set(b,{count:m.length,index:y}));for(let m of Map.groupBy(t,h=>h[a]).values())m.toSorted((b,y)=>{let[w,v]=n(b,a),[x,k]=n(y,a);return w-x||v-k||xy(d.get(b))-xy(d.get(y))}).forEach((b,y)=>{let w=y/Math.max(1,m.length-1);d.get(b).lane=a==="from"?1-w:w});return d},o=r("from","to"),s=r("to","from",a=>{let l=$y(e.get(a.from),a.fromPackage,!1,o.get(a));return[l.at(-1)[0],l[0][1]]}),i=t.map(a=>{let l=e.get(a.from),p=e.get(a.to),d=$y(l,a.fromPackage,!1,o.get(a)),f=$y(p,a.toPackage,!0,s.get(a));return{edge:a,end:f,start:d,rowBottom:l.rowBottom,x1:d.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(i,l=>l.rowBottom).values())for(let l of[!0,!1]){let p=a.filter(d=>d.x2<d.x1===l).toSorted((d,f)=>(l?1:-1)*(d.x1-f.x1||d.x2-f.x2));p.forEach((d,f)=>{d.bendY=d.rowBottom+9+12*f/Math.max(1,p.length-1)})}return i.map(({edge:a,end:l,start:p,x1:d,x2:f,bendY:m})=>{let h=[[d,m],[f,m]],{bypassLane:b,...y}=a;return b!==null&&h.push([f,l.at(-1)[1]]),{...y,path:ZR([...p,...h,...l.toReversed()])}})}function I2(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),o=Fr,s=gn;if(r===0&&Math.abs(t.x-e.x)===s+Pn){let b=e.y+o/2-n*6;return`M${e.x+(n>0?s:0)},${b} L${t.x+(n>0?-4:s+4)},${b}`}if(n===0&&Math.abs(t.y-e.y)===o+ky){let b=e.x+s/2+r*8;return`M${b},${e.y+(r>0?o:0)} L${b},${t.y+(r>0?-4:o+4)}`}let i=n||r,a=e.x+(i>0?s:0),l=e.y+o/2,p=a+i*(Pn/2-3),d=t.x+s/2+i*8,f=r>0||r===0&&n>0,m=t.y+(f?-10:o+10),h=t.y+(f?-4:o+4);return ZR([[a,l],[p,l],[p,m],[d,m],[d,h]])}function eT(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+vy*2,height:Fr};let s=t.length>1,i=Math.max(1,Math.floor((r-vy*2+Pn)/(gn+Pn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?vy:0,p=Math.ceil(t.length/a),d=s?M2:0,m=(s?XR(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(gn+Pn),y:l+d+y.row*(Fr+ky)})),h=new Map(m.map(y=>[y.id,y])),b=[];if(s)for(let y of t)for(let w of n.get(y)??[])y!==w&&h.has(w)&&b.push({from:y,to:w,path:I2(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*gn+(a-1)*Pn+l*2,height:p*Fr+(p-1)*ky+l*2+d}}function Sy(e,t={}){let n=t.ecosystem??(/(?:^|\/)node_modules\//u.test(e)?"npm":""),r=t.name||(e==="."?"App":e);return{id:e,name:r,ecosystem:n,version:t.version??"",own:e===".",root:!1,target:!1}}var tT=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function nT(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=Sy(t,n);return{packageKey:r.ecosystem?tT(r):r.name,packageGroup:Kr("",{packageDir:t})}}function rT(e,{packageKey:t,packageGroup:n,version:r,reason:o=""}){let s=new Map,i=new Map,a=new Map,l=Ot(e)??new Map,p=new Map([...l.keys()].map(k=>[k,k])),d=Vo(e).get(o),f=new Map([...p].filter(([k])=>!d||d.has(k)));for(let k of new Set([...f.keys()].map($=>l.get($))))a.set(k,Sy(k,e.bundle.modules.get(k)));let m=(k,$)=>{k!==$&&(i.has(k)||i.set(k,new Set),s.has($)||s.set($,new Set),i.get(k).add($),s.get($).add(k))};for(let[k,$]of Ml(e))if(f.has(k))for(let S of $){if(!f.has(S))continue;let C=l.get(k),R=l.get(S);if(Xv(k,S,R===".",C==="."))m(C,R);else if(C!==R){let L=a.get(R);L.excludedImporters??=new Set,L.excludedImporters.add(C)}}let{roots:h,appImports:b}=Il(e,f,k=>l.get(k),l,p);b.length>0&&!a.has(".")&&a.set(".",Sy("."));for(let k of b)m(".",k);for(let[k,$]of a){if(!($.own||$.ecosystem==="npm"&&($.name==="@babel/core"||$.name==="react-native"&&i.get(".")?.has(k))))continue;$.traceBoundary=!0;let C=s.get(k);for(let R of C??[])R!=="."&&(C.delete(R),i.get(R).delete(k))}for(let k of h){let $=a.get(k==="__own__"?".":k);$&&($.root=!0)}let y=[];for(let k of a.values()){let $=tT(k),S=n===void 0?k.ecosystem==="github"?$.toLowerCase()===t.toLowerCase():$===t:Kr("",{packageDir:k.id})===n,C=k.ecosystem==="github"&&k.version==="."?"0.0.0":k.version;!k.own&&S&&(r===void 0||C===r)&&(k.target=!0,y.push(k.id))}let w=new Set(y),v=[...y];for(let k=0;k<v.length;k++)for(let $ of s.get(v[k])??[])w.has($)||(w.add($),v.push($));let x=k=>new Map([...w].map($=>[$,new Set([...k.get($)??[]].filter(S=>w.has(S)))]));return{nodes:new Map([...a].filter(([k])=>w.has(k))),imports:x(i),importedBy:x(s),targets:y}}function oT(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=Zv(r,e.imports),i=o.map(()=>new Set),a=[];for(let[$,S]of e.imports){let C=s.get($);for(let R of S){let L=s.get(R);C!==L&&(i[C].add(L),a.push({from:C,to:L,fromPackage:$,toPackage:R}))}}let l=o.map(()=>0),p=o.map(()=>0);for(let $ of i)for(let S of $)p[S]++;let d=o.flatMap(($,S)=>p[S]===0?[S]:[]);for(let $=0;$<d.length;$++){let S=d[$];for(let C of i[S])l[C]=Math.max(l[C],l[S]+1),--p[C]===0&&d.push(C)}let f=i.some(($,S)=>[...$].some(C=>l[C]!==l[S]+1)),m=t-Hu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let C=$.length>10;return{...eT(S,$,e.imports,m,C&&!n.has(S)),collapsible:C}}),$=>l[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>JR($,m)),y=b.reduce(($,S)=>Math.max($,S.width+24),240),w=new Map,v=12;for(let{groups:$,width:S,height:C}of b){for(let R of $)w.set(R.id,{...R,x:R.x+(y-S)/2,y:v,rowBottom:v+C});v+=C+36}let x=0,k=QR(w,a.map($=>{let S=l[$.to]===l[$.from]+1?null:y+8+x++%4*10;return{...$,bypassLane:S}}));return{boxes:[...w.values()],componentOf:s,edges:k,width:y+(x?56:0),height:Math.max(0,v-24)}}function sT(e,t){if(t===null)return null;let n=new Set,r=new Set([t]);for(let o of[!1,!0]){let s=new Map,i=[t],a=new Set([t]);for(let l of e.edges){let p=o?l.to:l.from,d=o?l.from:l.to;s.has(p)||s.set(p,[]),s.get(p).push(d)}for(let l=0;l<i.length;l++)for(let p of s.get(i[l])??[])a.has(p)||(a.add(p),r.add(p),i.push(p));for(let l of e.edges)a.has(l.from)&&a.has(l.to)&&n.add(l)}return{groups:r,edges:n}}var iT=`dialog{width:min(94vw,var(--graph-dialog-width));max-width:80rem;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;justify-content:space-between;gap:1rem;flex-shrink:0;padding:.7rem .9rem;border-bottom:1px solid var(--border)}header h3{display:flex;flex-wrap:wrap;gap:.35rem .7rem;min-width:0;margin:0;font-size:.92rem;overflow-wrap:anywhere}.heading-version{color:var(--accent);font-family:var(--font-mono, monospace)}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.graph-caption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem;padding:.45rem .9rem;font-size:.68rem;color:var(--muted);flex-shrink:0;user-select:none}.graph-scroll{min-height:0;overflow:auto;overscroll-behavior:contain;background:var(--bg, var(--surface));padding:.4rem}.graph{position:relative;margin-inline:auto}.connections{position:absolute;inset:0;overflow:visible;pointer-events:none}.connections>path{fill:none;stroke:var(--connection-color, var(--muted));stroke-width:1.5;opacity:.65}.package-group{position:absolute;cursor:default}.package-group.stacked{background:var(--bg);border-radius:var(--ui-radius, 6px)}.stacked.collapsed{background:linear-gradient(var(--surface),var(--surface)),var(--bg)}.stacked.selected-cycle{background:color-mix(in srgb,var(--accent) 9%,var(--bg))}.stacked:hover,.stacked:focus-within{z-index:1;box-shadow:0 2px 8px #0005}.stacked.dimmed{opacity:1}.stacked.dimmed:after{content:"";position:absolute;inset:0;background:var(--surface);opacity:.8;border-radius:inherit;pointer-events:none}.package{position:absolute;width:var(--package-width);height:var(--package-height);display:flex;flex-direction:column;gap:4px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--package-color);border-radius:var(--ui-radius, 6px);font-size:.75rem;overflow:hidden}.package.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.name,.location,.version{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.package-main,.package-meta{display:flex;align-items:baseline;gap:.4rem;min-width:0}.name{flex:1;font-weight:600;line-height:17px}.version{max-width:45%;flex-shrink:0;font-family:var(--font-mono, monospace);font-size:.65rem}.badge{flex-shrink:0;font-size:.6rem;color:var(--muted);user-select:none}.selected-badge{color:var(--accent)}.location{flex:1;color:var(--muted);font-family:var(--font-mono, monospace);font-size:.61rem;line-height:14px}.cycle{border-radius:var(--ui-radius, 8px);outline:1px solid var(--border);background:color-mix(in srgb,var(--muted) 4%,transparent)}.cycle-label{position:absolute;top:7px;left:14px;color:var(--muted);font-size:.63rem;user-select:none}.cycle-toggle{display:flex;align-items:center;gap:.4rem;padding:0;border:0;background:transparent;font-family:inherit;line-height:16px}.cycle-toggle:hover{color:var(--text)}.cycle-chevron{font-size:.85rem}.cycle-summary{display:flex;gap:.4rem;text-align:left}.cycle-count{color:var(--muted)}.cycle-count:before{content:"\\b7 "}.collapsed .cycle-toggle{inset:0;width:100%;padding:5px 7px;border-radius:inherit;font-size:.75rem}.collapsed .cycle-summary{flex:1;flex-direction:column;gap:2px}.collapsed .cycle-count{font-size:.65rem}.collapsed .cycle-count:before{content:none}.selected-cycle{outline-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.cycle-connections>path{stroke:var(--connection-color);stroke-width:1.25;opacity:.8}.large-cycle .cycle-connections>path{stroke:var(--muted);opacity:.18}.cycle-connections>path.subdued{opacity:.04}.connections>path.traced{stroke:var(--connection-color);stroke-width:1.75;opacity:1}.package-subdued{opacity:.35}.dimmed,.connections>path.dimmed{opacity:.18}.note,.empty{padding:1rem;color:var(--muted);font-size:.78rem;line-height:1.5}.note{position:sticky;left:0;max-width:65rem;margin:auto}button:focus-visible,.graph-scroll:focus-visible,.package:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
185
+ `;var Cy=e=>Sn(e.own?"__own__":e.name),aT=()=>Math.floor(Math.min(document.documentElement.clientWidth*.94,80*Number.parseFloat(getComputedStyle(document.documentElement).fontSize))),_y=class extends N{static styles=[...N.styles,D(iT)];static properties={_active:{state:!0},_current:{state:!0},_hovered:{state:!0},_focused:{state:!0},layout:{state:!0}};constructor(){super(),this._active=null,this._hovered=null,this._focused=null}_expandedCycles=new Set;layoutForViewport(){let t=this.renderRoot?.activeElement;this._hovered=null,this._maxWidth=aT(),this.layout=oT(this.graph,{maxWidth:this._maxWidth,expandedCycles:this._expandedCycles}),t?.matches(".package, .cycle-toggle")&&this.updateComplete.then(()=>{this._current&&t.isConnected&&(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest"}))})}toggleCycle(t){this._expandedCycles.has(t)?this._expandedCycles.delete(t):this._expandedCycles.add(t),this._focused=null,this.layoutForViewport()}connectedCallback(){super.connectedCallback(),this.graph=rT(this.details,this),this.layoutForViewport(),this._dispose=Rn(()=>{this._current=this.isCurrent(),this._current||queueMicrotask(this._onClose)})}firstUpdated(){super.firstUpdated();let t=this.renderRoot.querySelector(".graph-scroll");t&&(this._resize=new ResizeObserver(()=>{if(aT()!==this._maxWidth){this.layoutForViewport();return}this.renderRoot.activeElement?.matches(".package, .cycle-toggle")||(t.scrollLeft=(this.layout.width-t.clientWidth)/2)}),this._resize.observe(t),this._resize.observe(document.documentElement))}disconnectedCallback(){this._dispose?.(),this._resize?.disconnect(),super.disconnectedCallback()}renderNode({id:t,x:n,y:r},o){let s=this.graph.nodes.get(t),i=[...this.graph.importedBy.get(t)].map(p=>this.graph.nodes.get(p)),a=`${s.version||"Source"}${s.ecosystem&&s.ecosystem!=="npm"?` \xB7 ${s.ecosystem}`:""}`,l=i.length>0?`Imported by ${i.map(p=>`${p.name}${p.version?`@${p.version}`:""}`).join(", ")}.`:s.root?"Bundle entry point or app source.":s.traceBoundary||s.excludedImporters?.size?"Dependency tracing stops here.":"No importer is recorded in this scope.";return u`<div class="${`package${s.target?" selected":""}${o&&!o.has(t)?" package-subdued":""}`}" tabindex="0" role="group" @pointerenter="${()=>{this._hovered=t}}" @pointerleave="${()=>{this._hovered=null}}" @focus="${()=>{this._focused=t}}" @blur="${()=>{this._focused=null}}" aria-label="${`${s.ecosystem?`${s.ecosystem}:`:""}${s.name}${s.version?`@${s.version}`:""}. ${l} Location: ${t}.`}" style="${le({left:`${n}px`,top:`${r}px`,"--package-color":Cy(s)})}"><div class="package-main"><span class="name" data-tooltip="${s.name}" data-tooltip-truncated>${s.name}</span> <span class="version" data-tooltip="${a}" data-tooltip-truncated>${a}</span></div><div class="package-meta"><span class="location" data-tooltip="${t}" data-tooltip-truncated>${s.own?"App source":t}</span> ${s.target?u`<span class="badge selected-badge">Selected</span>`:g} ${s.root?u`<span class="badge">${s.own?"App":"Entry point"}</span>`:g}</div></div>`}renderGraph(){let{boxes:t,edges:n,width:r,height:o}=this.layout,s=this._hovered??this._focused,i=s===null?this._active:this.layout.componentOf.get(s),a=sT(this.layout,i),l=s===null?null:new Set([s,...this.graph.imports.get(s),...this.graph.importedBy.get(s)]),p=new Set(n.map(f=>f.to)),d=t.filter(f=>!p.has(f.id)&&!f.members.some(m=>{let h=this.graph.nodes.get(m);return h.root||h.traceBoundary||[...h.excludedImporters??[]].some(b=>this.layout.componentOf.get(b)!==f.id)}));return u`<div class="graph-scroll" tabindex="0" aria-label="Package dependency chains. Arrows point from importer to dependency."><div class="graph" style="${le({width:`${r}px`,height:`${o}px`,"--package-width":`${gn}px`,"--package-height":`${Fr}px`})}"><svg class="connections" width="${r}" height="${o}" aria-hidden="true"><defs><marker id="dependency-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10z" fill="context-stroke"/></marker></defs>${n.map(f=>{let m=f.fromPackage===s||f.toPackage===s,h=a&&!a.edges.has(f)||s!==null&&(f.from===i||f.to===i)&&!m;return Un`<path d=${f.path} class=${h?"dimmed":m?"traced":""}
186
+ style=${le({"--connection-color":Cy(this.graph.nodes.get(f.fromPackage))})} marker-end="url(#dependency-arrow)"/>`})}</svg> ${t.map(f=>this.renderGroup(f,a,s,l))}</div>${d.length>0?u`<p class="note">Some chains have no recorded app or entry point. These packages are bundled, but their origin is not captured in this scope.</p>`:g}</div>`}renderGroup(t,n,r,o){let s=t.members.some(a=>this.graph.nodes.get(a).target),i=o&&t.members.some(a=>o.has(a));return u`<div class="${`package-group${t.stacked?" stacked":""}${t.members.length>1?" cycle":""}${t.members.length>8?" large-cycle":""}${t.collapsed?" collapsed":""}${t.collapsed&&s?" selected-cycle":""}${n&&!n.groups.has(t.id)?" dimmed":""}`}" style="${le({left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`})}" @pointerenter="${()=>{this._active=t.id}}" @pointerleave="${()=>{this._active=null}}">${t.collapsible?u`<button type="button" class="cycle-label cycle-toggle" aria-expanded="${!t.collapsed}" aria-controls="${`cycle-content-${t.id}`}" @click="${()=>this.toggleCycle(t.id)}"><span class="cycle-chevron" aria-hidden="true">${t.collapsed?"\u25B8":"\u25BE"}</span> <span class="cycle-summary"><span>Circular imports</span><span class="cycle-count">${t.members.length} packages</span></span> ${t.collapsed&&s?u`<span class="badge selected-badge">Selected</span>`:g}</button>`:t.members.length>1?u`<div class="cycle-label">Circular imports${t.members.length>8?` \xB7 ${t.members.length} packages`:""}</div>`:g}<div id="${`cycle-content-${t.id}`}" ?hidden="${t.collapsed}">${t.internalEdges.length>0?u`<svg class="connections cycle-connections" width="${t.width}" height="${t.height}" aria-hidden="true">${t.internalEdges.map(a=>Un`<path d=${a.path}
187
+ class=${i?a.from===r||a.to===r?"traced":"subdued":""}
188
+ style=${le({"--connection-color":Cy(this.graph.nodes.get(a.from))})} marker-end="url(#dependency-arrow)"/>`)}</svg>`:g} ${Z(t.packages,a=>a.id,a=>this.renderNode(a,i?o:null))}</div></div>`}render(){if(!this._current)return g;let{nodes:t,targets:n}=this.graph,r=this.packageGroup===void 0?this.packageKey:Uo(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+Hu)}px`})}" @close="${this._onClose}" @click="${this._onBackdrop}"><header><h3 id="why-title">${r}${this.version===void 0?g:u`<span class="heading-version">${this.version}</span>`}</h3><button type="button" aria-label="Close dependency chains" @click="${this._onClose}">×</button></header><div class="graph-caption"><span>${t.size} ${t.size===1?"package":"packages"}${n.length>1?` \xB7 ${n.length} installations${this.version===void 0?"":" of this version"}`:""}${this.reason?` \xB7 Scope: ${this.reason}`:""}</span> <span>↓ imports</span></div>${n.length>0?this.renderGraph():u`<p class="empty">Dependency metadata for this ${this.version===void 0?"package":"version"} is not available in this bundle scope.</p>`}</dialog>`}};customElements.define("why-dialog",_y);function Uu(e){return re("why-dialog",e)}var E2=new Map,lT=new Map,cT=[];function Mo(e){if(!e?.managedId)return E2;let t=c.managedSession,n=c.managedTeams&&rt(c.managedTeams),r=[t?.id,t?.role,t?.csrfToken,c.currentManagedTeam,n];return r.some((o,s)=>o!==cT[s])&&(cT=r,lT=new Map),lT}var Ry=new WeakMap;function Ja(e){return Ry.has(e)||Ry.set(e,{reasons:Vo(e),selected:""}),Ry.get(e)}function Io(e,t=Ja(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var dT="deepview.advisories.proxyConsent";function Ty(){try{return localStorage.getItem(dT)==="1"}catch{return!1}}function TZ(){try{localStorage.setItem(dT,"1")}catch{}}function F2(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(t.includes("node_modules")&&n?.name&&typeof n.version=="string"&&n.version)return!0;return!1}function uT(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(!(t==="."||typeof n?.name!="string"||!n.name||typeof n.version!="string"||!n.version)&&(n.ecosystem||/(?:^|\/)node_modules\//u.test(t)))return!0;return!1}function L2(e){if(e.bundle&&!uT(e))return!0;let t=Mo(e).get(Io(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function pT(e,t,n=!1){return!e||e.managedId&&!N2(e)||O2(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:my(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||uT(t):F2(t)}function O2(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function N2(e){let t=c.managedSession?.role;return["admin","manage"].includes(t)?!0:["view","triage"].includes(t)?c.managedTeams.some(n=>(c.currentManagedTeam==null||n.id===c.currentManagedTeam)&&n.permissions?.security===!0&&n.bundles?.some(r=>r.id===e.managedId)):!1}function B2(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var My=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function D2(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function P2(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(D2),My):new Map(Object.entries(e??{}));for(let[r,o]of n){let s=Array.isArray(o)?o.filter(i=>i&&typeof i.title=="string"&&typeof i.severity=="string"):[];s.length>0?n.set(r,t?s:s.map(i=>({...i,source:"registry"}))):n.delete(r)}return n}function fT(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function z2(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(B2(e))});if(!t.ok){let n=`HTTP ${t.status}`;try{let r=await t.json();typeof r?.error=="string"&&r.error&&(n=`${r.error} (HTTP ${t.status})`)}catch{}throw new Error(n)}return t.json()}function ju(e,t){return mT(e,t)}function W2(e,t){return mT(e,t,!0)}async function mT(e,t,n=!1){if(!e?.integrity||!e.managedId&&!Ty())return;let r=Mo(e),o=Io(e),s=r.get(o);if(n){if(!fT(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=Ja(e),l=e.managedId?new Map:ev(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await Xk(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[My(m),new Set(m.versions)])):new Map(Object.entries(f.packages).map(([m,h])=>[m,new Set(h)])),p=f.advisories,d=Array.isArray(f.skipped)?f.skipped:[]}else p=l.size>0?await z2(l):{};r.set(o,{state:"ok",byPackage:P2(p),query:l,skipped:d})}catch(p){let d=p?.message??"fetch-failed";r.set(o,n&&![401,403,404].includes(p?.status)?{...s,recheckingRepositories:!1,repositoryError:d}:{state:"error",reason:d,query:l})}t()}async function MZ(e,t){if(!e?.integrity)return;let n=Mo(e),r=Io(e);n.get(r)?.state==="error"&&(n.delete(r),await ju(e,t))}var H2={critical:0,high:1,moderate:2,low:3,info:4};function Vu(e){return H2[e]??999}function U2(){let e=typeof window>"u"?"":window.location.host;return u`<div class="bundle-advisories-consent"><div class="bundle-advisories-consent-card"><p class="bundle-advisories-consent-text">This bundle's dependency names and versions will be sent to the npm registry through a same-origin proxy (<span class="mono">${e}</span> → <span class="mono">registry.npmjs.org</span>) to look up published security advisories.</p><button type="button" class="bundle-advisories-consent-btn" data-advisories-consent>Confirm</button><p class="bundle-advisories-consent-note">This preference will be saved and reused for other bundles.</p></div></div>`}function gT(e,t=()=>{},n=null){let r=e?Ja(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=j2(e),i=!!e?.managedId&&!L2(e);return u`<div class="bundle-advisories-panel">${s!==g||o.length>0||i?u`<div class="bundle-advisories-toolbar">${s} ${o.length>0||i?u`<div class="bundle-advisories-scopes">${o.length>0?u`<bundle-scope-selector .reasons="${o}" .value="${r.selected?`reason:${r.selected}`:""}" label="Choose advisory scope" @scope-change="${a=>{let l=a.detail.value.replace(/^reason:/u,"");r.selected=r.reasons.has(l)?l:"";let p=ju(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?V2(e,t):g} ${i&&n?u`<button type="button" class="bundle-advisories-retry bundle-advisories-scan" @click="${n}">${W(Vn)}<span>Validate</span></button>`:g}</div>`:g}</div>`:g} ${K2(e)}</div>`}function V2(e,t){if(!e?.managedId)return g;let n=Mo(e).get(Io(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!fT(e,n)}" aria-busy="${String(r)}" @click="${()=>W2(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function j2(e){if(!e||!e.managedId&&!Ty())return g;let t=Mo(e).get(Io(e));if(t?.state!=="ok")return g;let n=t.query.size,r=t.byPackage.size;if(r===0)return g;let o=[...t.byPackage.values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundle-advisories-summary">${o} ${o===1?"advisory":"advisories"} across ${r} of ${n} ${n===1?"package":"packages"}</div>`}function G2(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?u`No packages could be audited.`:u`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${Ja(e).selected?"this scope":"this bundle"}.`}function K2(e){if(!e)return u`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return u`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!Ty())return U2();let t=Mo(e).get(Io(e));if(!t||t.state==="loading")return u`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state==="error")return u`<div class="bundle-advisories-empty is-error"><span>Failed to fetch advisories: ${t.reason}</span> <button type="button" class="bundle-advisories-retry" data-advisories-retry>Retry</button></div>`;let n=t.byPackage.size===0?u`<div class="bundle-advisories-empty"><span>${G2(e,t)}</span></div>`:g;if(t.byPackage.size===0&&t.skipped.length===0&&!t.repositoryError)return n;let r=[...t.byPackage.entries()].toSorted(([o,s],[i,a])=>{let l=Math.min(...s.map(d=>Vu(d.severity))),p=Math.min(...a.map(d=>Vu(d.severity)));return l!==p?l-p:o.localeCompare(i)});return u`${n}<div class="bundle-advisories">${t.repositoryError?u`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:g} ${t.skipped.length>0?u`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(o=>u`<li><span class="mono">${My(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>q2(e,o,s,t.query.get(o),()=>Mo(e).get(Io(e))?.byPackage===t.byPackage))}</ul></div>`}function q2(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=Vu(a.severity)-Vu(l.severity);return p!==0?p:(a.title??"").localeCompare(l.title??"")}),i=r?[...r].toSorted():[];return u`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${t}</span> ${i.length>0?u`<span class="bundle-advisories-section-versions">${i.map(a=>u`<button type="button" class="bundle-advisories-version" aria-haspopup="dialog" aria-label="${`Why is ${t}@${a} here?`}" @click="${()=>Uu({details:e,packageKey:t,version:a,reason:Ja(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>ou(a,({title:l,severity:p,details:d})=>uu({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var Yu=e=>_()?[]:ff(e),Y2=()=>_()?0:mf(),Za=null,Iy=new WeakMap;function X2(e){if(Iy.has(e))return Iy.get(e);let t=gp(e),n=Ml(e),r=[...t.keys()],{stripped:o}=Qn(r),s=new Map(r.map((l,p)=>[l,o[p]])),i={};for(let l of r){let p=s.get(l),d=n.get(l);i[p]={imports:d?[...d].map(f=>s.get(f)).filter(Boolean):[],size:t.get(l)}}let a={tree:i,origToStripped:s};return Iy.set(e,a),a}function CT(e,t=null){let n={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0};if(!e?.fileHashes)return n;let r=new Set;for(let[o,s]of e.fileHashes)if(!(t&&!t.has(o))&&!r.has(s)){r.add(s);for(let i of Yu(s)){let a=Te(i,c.triage.get(j(i)));a&&n[a]!==void 0&&n[a]++}}return n}function Js(e,t="graph"){if(!e||e.size===0)return new Map;let n=new Map;for(let[r,o]of e){let s=Yu(o);if(s.length===0)continue;let i=s.filter(a=>{let l=Te(a,c.triage.get(j(a)))??null;return t==="issues"?l!=="invalid"&&l!=="deleted":l===c.shownTriage});i.length!==0&&n.set(r,i)}return n}function _T(e){let t=X2(e),n=Vo(e,t.origToStripped.keys());ee.bundleReasonFor!==e.integrity&&(ee.bundleReasonFor=e.integrity,ee.dependencyPackagesView=!1,ee.bundleReason=null);let{tree:r,origToStripped:o,selected:s}=iv(t.tree,t.origToStripped,n,ee.bundleReason);ee.bundleReason=s;let i=Object.keys(r);if(i.length===0)return null;let a=null;if(e.fileHashes&&e.fileHashes.size>0){a=new Map;for(let[A,E]of e.fileHashes){let M=o.get(A);M!==void 0&&a.set(M,E)}}let l=Js(a),p=l.size>0||[...e.fileHashes??[]].some(([A,E])=>t.origToStripped.has(A)&&Yu(E).length>0),d=p&&ee.bundleIssues,f=new Map,m=new Map,h=new Map,b=new Map;for(let[A,E]of d?l:[]){let M={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},I=new Set,U=new Set,K=[];for(let Q of E){M[Q.severity]=(M[Q.severity]||0)+1,I.add(Q.severity);let ze=c.triage.get(j(Q))?.color??"none";U.add(ze),K.push({severity:Q.severity,color:ze})}f.set(A,M),m.set(A,I),h.set(A,U),b.set(A,K)}let y=["matrix","flow"].includes(ee.bundleLayout)||f.size===0?null:Kl(r,f),w=new Map;for(let[A,E]of o)w.set(E,A);let v=Ot(e),x=new Map(v?[...e.bundle.modules].map(([A,E])=>[A,{directory:A,version:typeof E.version=="string"?E.version:void 0}]):[]),k=A=>{let E=w.get(A)??A;return Kr(E,{packageDir:v?.get(E)})},$=i.filter(A=>k(A)==="__own__"),S=Il(e,o,k,v,t.origToStripped),C=new Set;for(let A of i)if(C.add(k(A)),C.size>=3)break;let R=C.size>=3,L=i;if(ee.focusedPkg){let A=i.filter(E=>k(E)===ee.focusedPkg);A.length>0?L=A:ee.focusedPkg=null}return ee.selected&&!Object.hasOwn(r,ee.selected)&&(ee.selected=null),{treeData:r,files:L,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:k,packageInfoOf:A=>x.get(v?.get(w.get(A)??A))},strippedToOrig:w,canPackagesView:R,hasIssues:p,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:ee.bundleLayout==="flow"?av(e,o,t.origToStripped,v):void 0,ownSourcePackages:ov(o,k,v),entryPackages:sv(e,o,k),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function RT(){if(!Za)return;let e=Ms();e&&e.refreshSidebar(Za,{isBundleContext:!0,findingsJump:!_()})}function TT(){if(!Za)return;let e=Ms();e&&e.refreshTopPkgs(Za)}function MT(e){Za=e}function J2(e,t,n){let r=new Map,o=new Map,s=0;for(let{path:a,size:l,pkgDir:p}of e){if(typeof l!="number"||l<=0)continue;let d=Kr(a,{packageDir:p});r.set(d,(r.get(d)??0)+l),o.has(d)||o.set(d,nT(n,p)),s+=l}if(s===0)return g;let i=[...r.entries()].toSorted((a,l)=>+(l[0]==="__own__")-+(a[0]==="__own__")||(t==="size"?l[1]-a[1]:0)||Uo(a[0]).localeCompare(Uo(l[0]))||a[0].localeCompare(l[0]));return u`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${Z(i,([a])=>a,([a,l])=>u`<span class="bundles-dist-seg" style="${le({flexGrow:l,background:Sn(a)})}" data-tooltip="${a==="__own__"?g:`${a}: ${he(l)}`}"></span>`)}</div><ul class="bundles-dist-list">${Z(i,([a])=>a,([a,l])=>{let p=(l/s*100).toFixed(1),d=Uo(a),f=Sn(a),m=o.get(a);return u`<li><span class="bundles-dist-dot" style="${le({background:f})}"></span> ${m?u`<button type="button" class="bundles-dist-pkg" aria-haspopup="dialog" aria-label="${`Show dependency chains for ${d}`}" @click="${()=>Z2(n,m)}" data-tooltip-truncated data-tooltip="${a}">${d}</button>`:u`<span class="bundles-dist-pkg" data-tooltip-truncated data-tooltip="${a==="__own__"?g:a}">${d}</span>`} <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${le({width:`${p}%`,background:f})}"></span> </span><span class="bundles-dist-size">${he(l)}</span> <span class="bundles-dist-percent">${p}%</span></li>`})}</ul></div>`}function Z2(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return Uu({details:e,...t,isCurrent:()=>c.currentView==="bundles"&&c.selectedBundle===e.integrity&&(c.bundleDetails&&rt(c.bundleDetails))===rt(e)&&c.currentWorkspace===r&&c.currentManagedTeam===n&&(c.managedSession&&rt(c.managedSession))===o})}function Oy(e,t,n,r,o,s,{bundleSize:i=null,unpackedSize:a=null,resources:l=null,details:p=null,leadColumn:d=null,trailColumns:f=g,summaryExtra:m=g,fileTag:h=null,fileIcon:b=null,fileFlags:y=null,overviewClass:w="",fileFilter:v=null,lines:x=null,sized:k=($,S,C)=>C}={}){let{prefix:$,stripped:S}=Qn(n),C=V=>o?.get(n[V]),R=new Set;for(let V=0;V<S.length;V++)R.add(Kr(n[V],{packageDir:C(V)}));let L=S.map((V,ue)=>ue).filter(V=>!v||v.keeps(n[V])),A=V=>y?.(n[V])??[],E=L.some(V=>A(V).length>0),M=c.bundleOverviewFilesSort==="flags"&&!E?"name":c.bundleOverviewFilesSort,I=M==="flags"?a_(L,A,V=>S[V]):L.toSorted((V,ue)=>(M==="size"?(r[ue]??-1)-(r[V]??-1):0)||S[V].localeCompare(S[ue])),U=n.map((V,ue)=>({path:V,size:r[ue],pkgDir:C(ue)})),K=c.bundleOverviewPackagesSort,Q=J2(U,K,p),ze=Q===g?u`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:Q,We={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Ke=0,Ce=new Map;if(c.bundleDetails?.fileHashes){let V=Js(c.bundleDetails.fileHashes,"issues");for(let ue of V.values())for(let wt of ue){We[wt.severity]!==void 0&&We[wt.severity]++,Ke++;for(let Fo of Ai(wt.fileHash,wt))Ce.set(Fo,(Ce.get(Fo)??0)+1)}}let yt=[...Ce.keys()].toSorted(),Nr=et.filter(V=>We[V]>0).map(V=>u`<span class="${`tree-count-chip ${V}`}">${We[V]} ${V.replaceAll("_"," ")}</span>`),tp=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],wt=r[V],Fo=u`${b?b(ue):g}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${ue}">${S[V]}</span> ${h?h(ue):g} ${wt==null?g:u`<span class="bundles-source-size">${he(wt)}</span>`}`;return u`<li>${l?.has(ue)?u`<div class="bundles-source-row is-resource">${Fo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Fo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,np=yt.length>0?u`<ul class="bundles-reports-list">${yt.map(V=>{let ue=ye[Ae(V)]??ye.default,wt=Ce.get(V)??0;return u`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${V}">${W(ue)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${V}">${oe(V)}</span> <span class="bundles-report-count">${wt} ${wt===1?"issue":"issues"}</span></button></li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`,Hn=n.length-(l?.size??0);return u`<div class="bundles-overview ${w}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e($)}<dl class="bundles-detail-meta is-build">${t}<dt>Sources</dt><dd>${x==null?k("files",Hn,Hn):u`${k("files",Hn,`${Hn} ${Hn===1?"file":"files"}`)} · ${k("lines",x,`${x.toLocaleString("en")} LoC`)}`}</dd>${i==null?g:u`<dt>Size</dt><dd>${he(i)}</dd>`} ${a==null?g:u`<dt>Unpacked</dt><dd>${k("unpacked",a,he(a))}</dd>`} ${l?.size?u`<dt>Resources</dt><dd>${l.size}</dd>`:g}</dl>${s??g}</div>${Ke>0?u`<div class="bundles-issue-summary tree-count-chips">${Nr}</div>`:g} ${m}</div><div class="bundles-overview-columns">${d??Ln({title:"Packages",count:R.size,body:ze,tools:u`<span class="bundles-overview-sort" role="group" aria-label="Package order">${[["name","Name"],["size","Size"]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(K===V)}" @click="${()=>{c.bundleOverviewPackagesSort=V,O()}}">${ue}</button>`)}</span>`})} ${Ln({title:"Files",count:v?`${I.length} of ${n.length}`:n.length,body:tp,list:!0,extra:v?u`<button type="button" class="bundles-overview-filter" aria-label="${`Show every file, not only ${v.label}`}" @click="${v.clear}">${v.label}<span aria-hidden="true">×</span></button>`:g,tools:u`<span class="bundles-overview-sort" role="group" aria-label="File order">${[["name","Name"],["size","Size"],...E?[["flags","Flags"]]:[]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(M===V)}" @click="${()=>{c.bundleOverviewFilesSort=V,O()}}">${ue}</button>`)}</span>`})} ${yt.length>0?Ln({title:"Reports",count:yt.length,body:np,list:!0}):g} ${f}</div></div>`}var Ay=new Map,Ey=new Set,IT=()=>u`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${c.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${Ix}</button>`;function Q2(e){let t=e?.status;return u`<button type="button" class="${q({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${c.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${YS(e)}">${qS}</button>`}function Dy(e,t,n,r,o,s){let i=JS(e,t,n,r),a=i?t1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?Q2(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function Gu(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function eD(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Ao(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var Fy={content:"",parts:""};function tD(e){if(Fy.content===e)return Fy.parts;let t=e;if(e.length>Ed||xs(e)){let n=o=>[Fd(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
189
+ `,o),i=s===-1?e.length:s+1;(s===-1?i:s)-o>Gx&&(t.push(...n(e.slice(r,o)),u`<span class="bundle-source-long-line">${n(e.slice(o,i))}</span>`),r=i),o=i}t.push(...n(e.slice(r)))}return Fy={content:e,parts:t},t}function nD(e,t,n,r,o=null,s=!1,i=!1){let a=e.split(`
190
+ `).length,l=c.bundleSourceTargetLine,p=!i&&l&&l.path===t&&l.bundle===(n?.integrity??null)?l.line:null,d=p==null?null:Math.max(l.end??p,p),f=String(a).length,m=mi(t,n?.kind==="stasis"?n.bundle?.formats?.get(t):void 0,e),h=`${n?.integrity??""}\0${t}${i?"\0pretty":""}`;m&&!Ay.has(h)&&!Ey.has(h)&&(Ey.add(h),(async()=>{let y=await vs(e,m,_g(n,t));Ay.set(h,typeof y=="string"?wd(y):null),Ey.delete(h),c.bundleSourceFile===t&&O()})());let b=Ay.get(h);return u`<div class="${q({"bundle-source-lines":!0,"is-wrapped":c.bundleSourceWrap})}" style="${le({"--lineno-width":`${f}ch`})}" ${jx(Jg)}><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:a},(y,w)=>{let v=w+1,x=r.get(v),k=x?Ao(x.map(S=>S.f)):null,$=x&&c.bundleSourceFindingIdx!=null&&x.some(S=>S.idx===c.bundleSourceFindingIdx);return u`<div class="${q({"bundle-source-lineno-row":!0,"is-match":o?.has(v)??!1,"is-target":p!=null&&v>=p&&v<=d})}" data-line="${v}">${x?u`<button type="button" class="${q({"bundle-source-dot":!0,[`sev-${k}`]:!0,active:$})}" data-bundle-source-finding="${x[0].idx}" data-tooltip="${`${x.length} ${x.length===1?"issue":"issues"} on line ${v}`}" aria-label="${`${x.length} issues on line ${v}`}"></button>`:u`<span class="bundle-source-dot-placeholder"></span>`} <span class="bundle-source-lineno-num" data-bundle-source-line="${s?v:g}">${v}</span></div>`})}</aside><pre class="bundle-source-code" tabindex="-1" aria-label="${t}"><code class="${m?`language-${m}`:""}">${typeof b=="string"?W(b):tD(e)}</code></pre></div>`}function rD(e){let t=c.bundleSourceFindingIdx;if(t==null)return g;let n=e[t];if(!n)return g;let r=n.fileHash?Ai(n.fileHash,n):[],o=Te(n,c.triage.get(j(n))),s=o==="fixed"?"Fixed":o==="inprogress"?"In progress":o==="ignored"?"Ignored":null,i=Jr(n),a=NT(n.line);return u`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${n.severity}`}">${n.severity.replaceAll("_"," ")}</span> ${s?u`<span class="${`bundle-source-panel-triage triage-${o}`}">${s}</span>`:g} <button type="button" class="bundle-source-panel-close" data-action="bundle-source-panel-close" aria-label="Close finding details">×</button></header><div class="bundle-source-panel-body">${a||i?u`<div class="bundle-source-panel-line-row">${a?u`<span class="bundle-source-panel-line">${a}</span>`:g} ${i?u`<span class="bundle-source-panel-meta" data-tooltip-truncated data-tooltip="${i}">${i}</span>`:g}</div>`:g}<div class="bundle-source-panel-desc">${it(dl(n),{paragraphs:!1})}</div>${r.length>0?u`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${r.map(l=>{let p=Pe[Ae(l)]??Pe.default;return u`<button type="button" class="report-chip bundle-source-panel-report" data-bundle-issue-report="${l}">${W(p)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${l}">${oe(l)}</span></button>`})}</div>`:g}</div></aside>`}function Py(e,t,n){let r=[],o=new Map;if(typeof n=="string"&&e?.fileHashes){let i=Js(e.fileHashes,"issues").get(t)??[];for(let a=0;a<i.length;a++){let l=i[a];r.push(l);let p=parseInt(l.line,10);Number.isFinite(p)&&p>0&&(o.has(p)||o.set(p,[]),o.get(p).push({f:l,idx:a}))}}return{fileFindings:r,lineFindings:o}}function AT(e,t=null,n=g){return u`<header class="bundle-source-bar"><div class="bundle-source-title mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>${t?.files.length>1?OT(t):g} ${IT()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function zy(e,t,n,r,o,s=null,i=!1,a=!1){return u`<div class="bundle-source-code-wrap">${typeof t=="string"?nD(t,e,n,o,s,i,a):u`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${rD(r)}`}function ET(){let e=c.bundleSourceFile;if(!e)return g;if(c.bundleDetailsTab==="code"||c.bundleDetailsTab==="search")return g;let t=c.bundleDetails,n=t?.sourceError||t?.error,r=!n&&(!t||t.metadataOnly===!0),o=Lt(t),{fileFindings:s,lineFindings:i}=Py(t,e,o.get(e)),a=c.bundles?.find(p=>p.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),l=r||n?null:Dy(t,a,e,o.get(e),s,i);return u`<div class="bundle-source-overlay"><div class="${q({"bundle-source-modal":!0,"with-panel":c.bundleSourceFindingIdx!=null})}">${AT(e,oh(c.bundleCodeHistory,t?.integrity??null,e),l?.toggle)}<div class="bundle-source-body" aria-busy="${String(r)}">${n?u`<div class="bundles-slide-placeholder is-error" role="status">Failed to load source: ${n}</div>`:r?u`<div class="bundles-slide-placeholder" role="status">Loading source…</div>`:zy(e,l.content,t,l.fileFindings,l.lineFindings,null,!1,l.pretty)}</div></div></div>`}var Xs=new Map,hT=null,Ly=null;function FT(e,t){let n=Lr(e??"",t).split("/");for(let r=1;r<n.length;r++)Xs.set(n.slice(0,r).join("/"),!0)}function oD(e,t){c.bundleCodeSearchMode="files",c.bundleCodeSearchQuery="",FT(e,t),O(),Gu()}function sD(e){let t=n=>{for(let r of n.dirs.values())Xs.set(r.path,!1),t(r)};t(e),O()}function iD(e,t){let n=0,r=null;if(!t||t.size===0)return{count:n,worst:r};let o=s=>{for(let i of s.files.values()){let a=t.get(i);if(!a||a.length===0)continue;n+=a.length;let l=Ao(a);(r===null||(_e[l]??0)>(_e[r]??0))&&(r=l)}for(let i of s.dirs.values())o(i)};return o(e),{count:n,worst:r}}function Ny(e,t,n=0,r=null,o=!1,s=null,i=null){let a=[...e.dirs.entries()].toSorted(([m,h],[b,y])=>yo(m,h).localeCompare(yo(b,y))||h.path.localeCompare(y.path)),l=[...e.files.entries()].toSorted(([m],[h])=>m.localeCompare(h)),p=m=>{if(!t)return!1;for(let h of m.files.values())if(h===t)return!0;for(let h of m.dirs.values())if(p(h))return!0;return!1},d=(m,h)=>o?!0:Xs.has(m)?Xs.get(m):n===0||p(h),f=m=>h=>{Xs.set(m,!h.currentTarget.parentElement.open)};return u`<ul class="${q({"bundle-code-tree":!0,root:n===0})}" aria-label="${n===0?"Source files":g}" @keydown="${n===0?_S:g}">${Z(a,([,m])=>m.path,([m,h])=>{let b=h.path,y=Kg(m,h,n),w=h.package,v=w?.ecosystem==="cargo"||w?.ecosystem==="composer"||w?.ecosystem==="soldeer",x=_l(w?.ecosystem),k=w?.variant?`${y.node.sourcePath}
191
+ Variant ${w.variant}`:y.node.sourcePath,$=h.packageInfo,S=!!$||!!w?.variant,C=$&&i?L=>{let{bytes:A,loc:E}=$S(i,h.sourcePath);Object.assign(L.dataset,{tooltipLoc:String(E),tooltipSize:he(A)})}:void 0,R=iD(h,r);return u`<li class="bundle-code-tree-dir"><details .open="${Hw(d(b,h))}"><summary @click="${f(b)}" .prepareTooltip="${C}" data-tooltip-package="${$?.name??g}" data-tooltip-ecosystem="${$?.ecosystem??g}" data-tooltip-version="${$?.version??g}" data-tooltip-files="${$?.fileCount??g}" data-tooltip-repo="${$?.github?$.github+($.directory?`/${$.directory}`:""):g}" data-tooltip-commit="${$?.commit??g}" data-tooltip="${S?k:g}" data-tooltip-placement="${S?"right-start":g}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${w?x:g} <span class="${q({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!w,"bundle-code-tree-package-vendored":v})}" data-tooltip-truncated data-tooltip="${S?g:k}">${w?u`<span class="bundle-code-tree-package-name">${w.name}</span>${w.version?u`<span class="bundle-code-tree-package-version">${v?"- ":"@"}${w.version}</span>`:g}`:y.names.map((L,A)=>u`${A>0?u`<span class="bundle-code-tree-separator">/</span>`:g}${L}`)} </span>${w?.variant?u`<span class="bundle-code-tree-variant">variant ${w.variant}</span>`:g} ${R.count>0?u`<span class="${`bundle-code-tree-count sev-${R.worst}`}" data-tooltip="${`${R.count} ${R.count===1?"issue":"issues"} inside`}">${R.count}</span>`:g}</summary>${Ny(y.node,t,n+1,r,o,s,i)}</details></li>`})} ${Z(l,([,m])=>m,([m,h])=>{let b=r?.get(h),y=b&&b.length>0?Ao(b):null,w=b?.length??0;return u`<li class="bundle-code-tree-file"><button type="button" class="${q({"bundle-code-tree-link":!0,current:h===t})}" data-bundle-view-source="${h}" aria-current="${h===t?"true":g}">${kn(h,s?.get(h))}<span class="bundle-code-tree-name" data-tooltip-truncated data-tooltip="${h}">${m}</span> ${w>0?u`<span class="${`bundle-code-tree-count sev-${y}`}" data-tooltip="${`${w} ${w===1?"issue":"issues"}`}">${w}</span>`:g}</button></li>`})}</ul>`}function Lr(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function aD(e,t,n,r,o="",s=null,i=null){if(!n)return Ny(e,t,0,r,!1,s,i);let a=CS(e,n,o);return a?Ny(a,t,0,r,!0,s,i):u`<div class="bundle-code-search-empty">No files match.</div>`}var bT=new WeakMap;function LT(e,t){let n=bT.get(t);return n||(n=rv([...t.keys()].toSorted(),Ot(e)),bT.set(t,n)),n}var yT=1e3,wT=new WeakMap;function lD(e,t,n,r,o=""){let s=gp(e),i=wT.get(t);i||(i=[...t.keys()].filter(d=>s.get(d)!=null).toSorted((d,f)=>s.get(f)-s.get(d)||d.localeCompare(f)),wT.set(t,i));let a=n.toLowerCase(),l=a?i.filter(d=>Lr(d,o).toLowerCase().includes(a)):i;if(l.length===0)return u`<div class="bundle-code-search-empty">No files match.</div>`;let p=l.length>yT?l.slice(0,yT):l;return u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${p.length<l.length?`${p.length.toLocaleString()} largest of ${l.length.toLocaleString()} files`:`${l.length.toLocaleString()} ${l.length===1?"file":"files"} by size`}</div><ul class="bundle-code-largest">${Z(p,d=>d,d=>u`<li><button type="button" class="${q({"bundle-code-largest-file":!0,current:d===r})}" data-bundle-view-source="${d}" aria-current="${d===r?"true":g}"><span class="bundle-code-largest-path" data-tooltip-truncated data-tooltip="${d}">${Lr(d,o)}</span><span class="bundle-code-largest-size">${he(s.get(d))}</span></button></li>`)}</ul></div>`}function cD(e,t,n,r,o=""){if(!n)return u`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let s=Wu(n,!1,!1),i=20,a=100,l=[],p=0;for(let d of LT(e,t)){let f=t.get(d);if(typeof f!="string")continue;let m=[],h=f.split(`
192
+ `);for(let b=0;b<h.length;b++){let y=s.ranges(h[b]);if(y.length!==0&&(m.push({ln:b+1,text:h[b],ranges:y}),p++,m.length>=i))break}if(m.length>0&&l.push({path:d,hits:m}),l.length>=a)break}return l.length===0?u`<div class="bundle-code-search-empty">No matches.</div>`:u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${p} ${p===1?"hit":"hits"} in ${l.length} ${l.length===1?"file":"files"}</div>${l.map(({path:d,hits:f})=>{let m=Lr(d,o);return u`<div class="${q({"bundle-code-search-file":!0,current:d===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${d}" data-tooltip-truncated data-tooltip="${d}">${m}</button><ul class="bundle-code-search-hits">${f.map(h=>u`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${d}" data-bundle-view-line="${h.ln}" data-bundle-view-scroll-block="start"><span class="bundle-code-search-hit-ln">${h.ln}</span> <span class="bundle-code-search-hit-text mono">${YR(h.text,h.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function dD(e,t,n,r=""){if(!e.fileHashes)return u`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=Js(e.fileHashes,"issues");if(o.size===0)return u`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let s=t.toLowerCase(),i=[];for(let[a,l]of o)for(let p=0;p<l.length;p++){let d=l[p],f=d.description??"";s&&!a.toLowerCase().includes(s)&&!d.severity.includes(s)&&!d.severity.replaceAll("_"," ").includes(s)&&!f.toLowerCase().includes(s)||i.push({file:a,finding:d,fileIdx:p})}return i.sort((a,l)=>{let p=_e[a.finding.severity]??0,d=_e[l.finding.severity]??0;return d!==p?d-p:a.file.localeCompare(l.file)}),i.length===0?u`<div class="bundle-code-search-empty">No matches.</div>`:u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${i.length} ${i.length===1?"issue":"issues"}</div><ul class="bundle-code-search-issues">${i.map(({file:a,finding:l,fileIdx:p})=>{let d=l.severity,f=Lr(a,r),m=a===n&&c.bundleSourceFindingIdx===p;return u`<li class="${q({"bundle-code-search-issue":!0,current:m})}"><button type="button" class="bundle-code-search-issue-link" data-bundle-view-source="${a}" data-bundle-view-finding-idx="${p}" data-bundle-view-line="${l.line??""}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${d}`}">${d.replaceAll("_"," ")}</span> <span class="bundle-code-search-issue-path mono" data-tooltip-truncated data-tooltip="${a}">${f}${l.line?`:${l.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${it(dl(l),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function uD(e,t){if(e.kind!=="stasis")return t;let n=Ot(e),r=new Map([...t].filter(([o])=>!/(?:^|\/)node_modules(?:\/|$)/u.test(o)&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(n?.get(o)??o)));return r.size>0?r:t}function vT(e,t,n){let r=null,o=-1,s=0;for(let[l,p]of n){if(typeof t.get(l)!="string")continue;let d=_e[Ao(p)]??0;(d>o||d===o&&p.length>s||d===o&&p.length===s&&(r===null||l.localeCompare(r)<0))&&(r=l,o=d,s=p.length)}if(r)return r;if(e.kind==="stasis"&&e.bundle){for(let l of e.bundle.entries)if(typeof t.get(l)=="string")return l}for(let l of e.npmEntries??[])if(typeof t.get(l)=="string")return l;let i=null,a=-1;for(let[l,p]of t)typeof p=="string"&&p.length>a&&(i=l,a=p.length);return i}function pD(e,t=null){let n=Lt(e);if(n.size===0)return u`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;hT!==c.selectedBundle&&(Xs.clear(),hT=c.selectedBundle,Ly=null);let o=Rl(n).paths,s=e.kind==="stasis"?e.bundle.modules:null,i=xS(Qn(o).prefix,s,o),a=o.map(S=>Lr(S,i)),l=kS(a,o,s),p=e.fileHashes?Js(e.fileHashes,"issues"):new Map,d=uD(e,n),f=e.kind==="stasis"?new Map([...p].filter(([S])=>d.has(S))):p,m=c.bundleSourceFile,h=c.bundleCodeFileRequest;if(h?.bundle===c.selectedBundle){c.bundleCodeFileRequest=null;let S=h.path==null?o[h.file-1]:n.has(h.path)?h.path:null;if(S){m=S,c.bundleSourceFile=S,Gu();let C=h.endLine??h.line;c.bundleSourceTargetLine=h.line&&C<=Jw(n.get(S))?{bundle:e.integrity,path:S,line:h.line,...C>h.line?{end:C}:{}}:null,c.bundleSourceTargetLine&&eD(h.line)}}if(zn&&(zn.bundle!==c.selectedBundle||m&&m!==zn.path)&&(zn=null),!m)m=vT(e,d,f),m&&(c.bundleSourceFile=m,zn={bundle:c.selectedBundle,path:m,hadIssues:f.size>0},Gu());else if(zn&&!zn.hadIssues&&f.size>0){zn.hadIssues=!0;let S=vT(e,d,f);S&&S!==m&&(m=S,c.bundleSourceFile=S,c.bundleSourceFindingIdx=null,zn.path=S,Gu())}m!==Ly&&(FT(m,i),Ly=m),m&&t?.managedId&&_()?te?.replaceCodeRoute(wr(c.managedTeams,t,c.currentManagedTeam,"code",Md(c))):m&&t?.npm&&_()&&te?.replaceCodeRoute(Ra(t,"code",Md(c)));let b=m?n.get(m):null,{fileFindings:y,lineFindings:w}=Py(e,m,b),x=p.size>0?["files","code","issues","largest"]:["files","code","largest"],k=x.includes(c.bundleCodeSearchMode)?c.bundleCodeSearchMode:"files",$=c.bundleCodeSearchQuery;return u`<div class="bundle-code-view"><aside class="bundle-code-rail"><div class="bundle-code-rail-head"><span class="bundle-code-rail-label">Files</span> <span class="bundle-code-rail-count">${o.length}</span> <span class="bundle-code-rail-actions"><button type="button" class="bundle-code-rail-action" aria-label="Reveal current file" data-tooltip="Reveal current file" ?disabled="${!m}" @click="${()=>oD(m,i)}"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="4.5"/><circle cx="8" cy="8" r="1.5"/><path d="M8 0v3m0 10v3M0 8h3m10 0h3"/></svg></button> <button type="button" class="bundle-code-rail-action" aria-label="Collapse directories" data-tooltip="Collapse directories" ?disabled="${k!=="files"||!!$||l.dirs.size===0}" @click="${()=>sD(l)}">${Ax}</button></span></div>${i?u`<div class="bundle-code-rail-prefix mono" data-tooltip-truncated data-tooltip="${i}">${i}</div>`:g}<bundle-code-search .modes="${x}"></bundle-code-search><div class="bundle-code-rail-body">${Ng(k,[["files",()=>aD(l,m,$,p,i,e.kind==="stasis"?e.bundle.formats:null,n)],["code",()=>cD(e,n,$,m,i)],["issues",()=>dD(e,$,m,i)],["largest",()=>lD(e,n,$,m,i)]])}</div></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><div class="${q({"bundle-code-main":!0,"with-panel":c.bundleSourceFindingIdx!=null})}">${m?fD(e,m,b,y,w,t):u`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`}</div></div>`}function OT(e){return u`<span class="bundle-code-file-nav"><button type="button" class="focus-code-nav-btn" data-bundle-code-history="back" aria-label="Back to the previously shown file" ?disabled="${e.at===0}">${Cs}</button> <button type="button" class="focus-code-nav-btn" data-bundle-code-history="forward" aria-label="Forward to the next shown file" ?disabled="${e.at>=e.files.length-1}">${_s}</button></span>`}function $T(e){let t=e.split(`
193
+ `).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${he(wn(e))}`}function fD(e,t,n,r,o,s=null){let i=oh(c.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:l,content:p,fileFindings:d,lineFindings:f}=Dy(e,s,t,n,r,o),m=d.map((b,y)=>({idx:y,line:parseInt(b.line,10)||0})).toSorted((b,y)=>b.line-y.line||b.idx-y.idx),h=RS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return u`<header class="bundle-code-main-bar">${OT(i)} ${kn(t,Ho(e,t))} <span class="bundle-code-main-path mono" data-tooltip-truncated data-tooltip="${t}">${t}</span> <button type="button" class="bundle-code-copy-path" data-copy-path="${t}" aria-label="Copy file path">${Cd}</button> ${h?TS(h,s?.commitInfo):g} <span class="bundle-code-main-spacer"></span> ${d.length>0?u`<span class="bundle-code-main-issues" data-bundle-code-issue-order="${JSON.stringify(m)}"><span class="${`bundle-code-tree-count sev-${Ao(d)}`}" data-tooltip="${`${d.length} ${d.length===1?"issue":"issues"} in this file`}">${d.length}</span> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="-1" aria-label="Previous issue">‹</button> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="1" aria-label="Next issue">›</button></span>`:g} ${IT()} ${l} ${typeof p=="string"?u`<span class="bundle-code-main-stats">${l===g?g:u`<span class="bundle-code-main-stats-room" aria-hidden="true">${$T(n)}</span>`}<span>${$T(p)}</span></span>`:g}</header><div class="bundle-code-main-body">${zy(t,p,e,d,f,null,!a&&!!(s?.managedId||s?.npm)&&_()&&!vn(),a)}</div>`}var mD=400;function gD(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function hD(e,t,n){let r=[];for(let o of e){let s=Math.max(1,o.ln-n),i=Math.min(t,o.ln+n),a=r.at(-1);a&&s<=a.end+1?a.end=Math.max(a.end,i):r.push({start:s,end:i})}return r}function bD(e,t,n){if(e.length<=n)return{text:e,ranges:t,clipped:!1};let r=t.length>0?t[0][0]:0,o=r>n-60?Math.max(0,r-60):0;return yy(e,t,o,n)}function yD(e,t,n){let r=bD(e,n??[],mD);return u`<div class="${q({"bundle-search-line":!0,"is-match":n!=null})}"><span class="bundle-search-lineno">${t}</span> <span class="bundle-search-code">${r.clipped?u`<span class="bundle-search-clip">…</span>`:g}${wy(r.text,r.ranges)}</span></div>`}function wD(e,t,n,r,o){let{start:s,end:i}=n,a=s;for(let d=s;d<=i;d++)if(r.has(d)){a=d;break}let l=String(i).length,p=[];for(let d=s;d<=i;d++)p.push(yD(t[d-1]??"",d,r.get(d)??null));return u`${o?u`<div class="bundle-search-gap" aria-hidden="true"></div>`:g} <button type="button" class="bundle-search-snippet" style="${le({"--bundle-search-lineno-w":`${l}ch`})}" data-bundle-view-source="${e}" data-bundle-view-line="${a}" data-bundle-view-scroll-block="center">${p}</button>`}function vD(e,t,n){let{path:r,lines:o,hits:s}=e,i=Lr(r,t),a=hD(s,o.length,n),l=new Map(s.map(f=>[f.ln,f.ranges])),p=s[0].ln,d=r===c.bundleSourceFile;return u`<section class="${q({"bundle-search-file":!0,current:d})}"><header class="bundle-search-file-head"><button type="button" class="bundle-search-file-name mono" data-bundle-view-source="${r}" data-bundle-view-line="${p}" data-bundle-view-scroll-block="center" data-tooltip-truncated data-tooltip="${r}">${i}</button> <span class="bundle-search-file-count">${s.length} ${s.length===1?"match":"matches"}</span></header><div class="bundle-search-snippets">${a.map((f,m)=>wD(r,o,f,l,m>0))}</div></section>`}function $D(e,t,n,r,o,s){if(!n)return u`<div class="bundle-search-results"><div class="bundle-search-hint">Search across every source in this bundle. Each match shows the surrounding lines for context — fewer matches get more context. Toggle <span class="bundle-search-hint-kbd">Aa</span> for case-sensitive and <span class="bundle-search-hint-kbd">.*</span> for regular-expression matching.</div></div>`;let i=qR(e.integrity??"",t,n,r,o,LT(e,t));if(i.error)return u`<div class="bundle-search-results"><div class="bundle-search-error"><span class="bundle-search-error-label">Invalid regular expression</span> <span class="bundle-search-error-msg mono">${i.error}</span></div></div>`;let{fileResults:a,totalHits:l,truncated:p}=i,d=[...t.keys()].toSorted(),{prefix:f}=Qn(d);if(a.length===0)return u`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let m=s?gD(l):0,h=a.length;return u`<div class="bundle-search-results"><div class="bundle-search-summary"><span>${l}${p?"+":""} ${l===1?"match":"matches"} in ${h}${p?"+":""} ${h===1?"file":"files"}</span> ${f?u`<span class="bundle-search-summary-prefix mono" data-tooltip-truncated data-tooltip="${f}">${f}</span>`:g} ${p?u`<span class="bundle-search-summary-more">results capped — refine to narrow</span>`:g}</div>${Z(a,b=>b.path,b=>vD(b,f,m))}</div>`}function kD(e,t,n,r){if(!t||typeof e!="string")return null;let o=Wu(t,n,r);if(o.error)return null;let s=new Set,i=e.split(`
194
+ `);for(let a=0;a<i.length;a++)o.ranges(i[a]).length>0&&s.add(a+1);return s}function xD(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=Py(e,o,s),l=Dy(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${AT(o,null,l.toggle)}<div class="bundle-source-body">${zy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function SD(e,t=null){let n=Lt(e);if(n.size===0)return u`<div class="bundle-search-view"><div class="bundle-code-empty">This bundle doesn't carry any source content.</div></div>`;let r=c.bundleSearchQuery,o=c.bundleSearchRegex,s=c.bundleSearchCase,i=null;if(c.bundleSourceFile){let l=kD(n.get(c.bundleSourceFile),r,o,s);l&&l.size===0?(c.bundleSourceFile=null,c.bundleSourceFindingIdx=null):i=l}let a=c.bundleSearchContext;return u`<div class="bundle-search-view"><div class="bundle-search-bar-row"><bundle-search></bundle-search><mode-switch data-bundle-search-context label="Context" .checked="${a}" accessible-label="Toggle context lines"></mode-switch></div><div class="bundle-search-main">${$D(e,n,r,o,s,a)} ${xD(e,n,i,t)}</div></div>`}var hn=(e,t,n)=>u`<button type="button" class="${q({"bundles-tab":!0,active:n===e})}" data-bundle-tab="${e}" aria-selected="${String(n===e)}" role="tab">${t}</button>`;function CD(e){let t=!!e.npm;t&&!xl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&pT(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||Is(c.bundles??[],c.selectedBundle).length>0,o=!_();c.bundleDetailsTab==="issues"&&!o&&(c.bundleDetailsTab="overview");let s=c.bundleDetailsTab,i=s==="overview",a=c.bundleDetails,l=!!(a&&a.integrity===e.integrity),p=l&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Xn(s));return s==="advisories"&&n&&p&&a.kind==="stasis"&&ju(a,O).catch(()=>{}),u`<div class="bundles-view bundles-slide-view"><bundle-slide-header class="bundles-slide-header"><header class="bundles-slide-bar">${_()&&e.managedId&&e.repoId==null?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}))}">Bundles</button> <span aria-hidden="true">></span></span>`:g} ${t?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>xr()}">npm</button> <span aria-hidden="true">></span></span>`:g} <span class="bundles-slide-icon" aria-hidden="true">${W(t?Oo:Lo)}</span><div class="bundles-slide-title">${t?u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.npm.name}">${e.npm.name}</div><npm-version-select .name="${e.npm.name}" .version="${e.npm.version}" .tab="${s}" .list="${nu(e.npm.name)}"></npm-version-select>`:u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div>`}</div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!Xa(e)}" @click="${()=>{zu(e)}}">${W(Vn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n?hn("advisories","Advisories",s):g} ${o?hn("issues","Issues",s):g} ${t?g:hn("terminal","Terminal",s)} ${hn("treemap","Treemap",s)} ${t?g:hn("graph","Graph",s)} ${hn("code","Code",s)} ${t?g:hn("search","Search",s)} ${r?hn("compare","Compare",s):g} ${t&&c.managedSession&&!c.managedSession.publicShare&&c.managedTeams?.some(d=>d.dependencyReview===!0)?hn("review","Review",s):g} ${hn("overview","Overview",s)}</div></header></bundle-slide-header><div class="${q({"bundles-slide-body":!0,"bundles-slide-body-overview":i})}">${i?FD(e,a):p?Ng(s,[["terminal",()=>u`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>u`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>u`<bundle-treemap .details="${a}"></bundle-treemap>`],["code",()=>pD(a,e)],["search",()=>SD(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${vb(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?vb(e):null}"></bundle-compare>`],["issues",()=>RD(a)],["advisories",()=>gT(a,O,Xa(e)?()=>{zu(e,{mode:"dependencies"})}:null)]]):l&&a.sourceError?u`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!a.metadataOnly?u`<div class="${q({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:u`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function _D(e,t={}){if(!e)return g;let n=[];if(e.fileHash&&(n=Ai(e.fileHash,e)),n.length===0&&t.bucketKey&&(t.kind==="package"?n=gf(t.bucketKey,e):t.kind==="repository"&&(n=hf(t.bucketKey,e))),n.length===0)return g;let r=n.slice(0,2),o=n.length-r.length;return u`<div class="bundle-issue-reports">${r.map(s=>{let i=Pe[Ae(s)]??Pe.default;return u`<button type="button" class="report-chip" data-bundle-issue-report="${s}">${W(i)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${s}">${oe(s)}</span></button>`})} ${o>0?u`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function NT(e){if(e==null||e==="")return"";let t=String(e),n=t.indexOf("-");if(n>0){let o=parseInt(t.slice(0,n),10),s=parseInt(t.slice(n+1),10);return Number.isFinite(o)&&Number.isFinite(s)&&s>o?`Lines ${o}-${s}`:Number.isFinite(o)?`Line ${o}`:""}let r=parseInt(t,10);return Number.isFinite(r)?`Line ${r}`:""}function Ys(e,t){return u`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?u`<p class="bundle-issues-empty-hint">${t}</p>`:g}</div>`}function RD(e){if(e.managedId)return Ys("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return Ys("Computing file hashes\u2026","Hashing this bundle's sources so findings from your reports can be matched against them.");if(e.fileHashes.size===0)return Ys("This bundle doesn't carry any source content.","Issues are matched by source-file hash, so a bundle without inline sources has nothing to match findings against.");let t=Js(e.fileHashes,"issues");if(t.size===0){let n=Y2();if(n===0)return Ys("No issues match this bundle's files.","Issues are analyzer findings matched to this bundle by source-file hash. No hash-carrying findings are indexed yet \u2014 hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.");let r=0;for(let o of e.fileHashes.values())r+=Yu(o).length;return r>0?Ys("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Ys("No issues match this bundle's files.",`None of the ${n.toLocaleString()} indexed ${n===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return Qa(t,{kind:"bundle"})}function Qa(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Qn(r),i=new Map(r.map((p,d)=>[p,s[d]])),a=[...e.entries()].toSorted(([p,d],[f,m])=>{let h=_e[Ao(d)]??0,b=_e[Ao(m)]??0;return b!==h?b-h:(i.get(p)??p).localeCompare(i.get(f)??f)}),l=[...e.values()].reduce((p,d)=>p+d.length,0);return u`<div class="bundle-issues"><div class="bundle-issues-summary">${l} ${l===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?u`<span class="mono">${o}</span>`:g}</div><ul class="bundle-issues-list">${Z(a,([p])=>p,([p,d])=>{let f=i.get(p)??p,m=[...d].toSorted((b,y)=>{let w=_e[b.severity]??0,v=_e[y.severity]??0;if(v!==w)return v-w;let x=parseInt(b.line,10)||0,k=parseInt(y.line,10)||0;return x-k}),h=t==="repository"&&n?`${/^https?:/iu.test(n)?n.replace(/\/$/u,""):`https://github.com/${n}`}/blob/HEAD/${p}`:null;return u`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?u`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${p}" data-tooltip-truncated data-tooltip="${p}">${f}</button>`:h?u`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${h}" target="_blank" rel="noopener" data-tooltip-truncated data-tooltip="${p}">${f}</a>`:u`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${p}">${f}</span>`} <span class="bundle-issues-file-count">${d.length} ${d.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${Z(m,b=>JSON.stringify([b.id??`${p}\0${b.line??""}\0${b.severity??""}\0${b.description??""}`,ct(b)]),b=>{let y=d.indexOf(b),w=b.severity,v=NT(b.line),x=Te(b,c.triage.get(j(b))),k=x==="fixed"||x==="invalid"||x==="deleted"?x.toUpperCase():x==="inprogress"?"In progress":x==="ignored"?"Ignored":null,$=u`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${w}`}">${w.replaceAll("_"," ")}</span> ${v?u`<span class="bundle-issues-finding-line">${v}</span>`:g} ${k?u`<span class="${`bundle-issues-finding-triage triage-${x}`}">${k}</span>`:g} <span class="bundle-issues-finding-spacer"></span> ${_D(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(dl(b),{paragraphs:!1})}</div>`;return u`<li class="bundle-issues-finding">${t==="bundle"?u`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${p}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${$}</button>`:u`<div class="bundle-issues-finding-link bundle-issues-finding-static">${$}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function BT(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?CD(n):u`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">Pick a bundle from the sidebar to open it.</p></div>`}var Ku=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8"/><path d="m4.5 7 3.5 3.5L11.5 7"/><path d="M2.5 13h11"/></svg>`,TD=u`<svg viewBox="0 0 24 24" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M0 0v24H8.222l2.089-2.373 2.09-2.374V13.2H18.978l2.51-2.488L24 8.223V0H12zm5.2 5.2h13.791L12.2 12c-3.735 3.74-6.838 6.8-6.896 6.8-.057 0-.104-3.06-.104-6.8zm8.4 8.8v10H24V14h-5.2z"/></svg>`,kT=Object.freeze({javascript:"#f1e05a",jsx:"#f1e05a",typescript:"#3178c6",tsx:"#3178c6",json:"#f1e05a",css:"#663399",markup:"#e34c26",yaml:"#cb171e",bash:"#89e051",markdown:"#083fa1",solidity:"#AA6746",php:"#4F5D95",rust:"#dea584",ruby:"#701516",java:"#b07219",cpp:"#f34b7d",c:"#555555",objectivec:"#438eff",python:"#3572A5",go:"#00ADD8",kotlin:"#A97BFF",swift:"#F05138",dart:"#00B4AB",sql:"#e38c00",lua:"#000080",csharp:"#178600",scala:"#DC322F",vue:"#41B883",svelte:"#FF3E00"}),xT=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function ST(e){if(kT[e])return kT[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return xT[(t>>>0)%xT.length]}function MD(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",fv(t))}function ID(e){delete e.currentTarget.dataset.tooltip,mv()}var DT=e=>e.codeStats??=qw(e.npm?new Map([...gi(e)].filter(([t])=>!Ca.test(t.slice(t.lastIndexOf("/")+1)))):gi(e),xn(e));function PT(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=DT(e),r=n.lines,o=n.languages.filter(a=>a.lines>0);if(r<=0||o.length===0)return g;let s=a=>{let l=a/r*100;return l<.1?"<0.1":l<1?l.toFixed(1):l.toFixed(0)},i=t?u`<ul class="bundles-languages-legend">${o.slice(0,4).map(({key:a,label:l,lines:p})=>u`<li><span class="bundles-languages-swatch" style="${le({background:ST(a)})}"></span>${l}<span class="bundles-languages-share">${s(p)}%</span></li>`)}</ul>`:g;return u`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${MD}" @pointerleave="${ID}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:ST(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function AD(e){try{await(await P()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function ED(e,t){let n=jR(t),r=PT(t);return u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${e.managedId?vn()?u`<button type="button" class="bundles-download-btn" @click="${()=>{AD(e)}}">${Ku}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${Ku}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${Ku}<span>Download bundle</span></button>`} ${n?u`<div class="bundles-export-pair"><button type="button" class="bundles-download-btn" data-bundle-export-sbom="cyclonedx" data-tooltip="Export a CycloneDX SBOM (.cdx.json)">CycloneDX</button> <button type="button" class="bundles-download-btn" data-bundle-export-sbom="spdx" data-tooltip="Export an SPDX SBOM (.spdx.json)">${TD}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function qu(e,t,{placeholder:n=g,overviewClass:r=""}={}){return u`<div class="bundles-overview ${r}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${n}</div>`}function By(e){let t=e.filter(n=>typeof n=="number");return t.length>0?t.reduce((n,r)=>n+r,0):null}function FD(e,t){if(e.npm)return LD(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,o=n?!t.error&&t.kind==="stasis"?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??"",commit:r}}:null,s=n?t.size:e.managedId?e.size:null,i=(l="",p=!1)=>u`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?u`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:u`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${Od(o,l,e.commitInfo).map(d=>u`<dt>${d.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${d.href}" target="_blank" rel="noopener noreferrer">${d.label==="GitHub"?W(Kt):g}<span>${d.text}</span></a> ${d.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${d.commit.href}" data-tooltip="${d.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Es(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(al)}<span>${d.commit.text}</span></a>`:g} ${d.commit?.tags?u`<span class="bundle-origin-tags">${d.commit.tags.map(f=>u`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${l?u`<dt>Prefix</dt><dd class="mono">${l}</dd>`:g} ${o?.entries?.size>0?u`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(d=>u`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${d}">${Lr(d,l)}</button></li>`)}</ul></dd>`:g} ${p&&Number.isSafeInteger(s)?u`<dt>Size</dt><dd>${he(s)}</dd>`:g}</dl>`,a=ED(e,t);if(!n)return qu(i("",!0),a);if(t.error)return qu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`});if(t.kind==="sourcemap"&&t.json){let l=t.json,p=xn(t),d=l.sources??[...p.keys()],f=t.sourceSizes??(p.size===d.length?d.map(h=>p.get(h)??null):d.map((h,b)=>typeof l.sourcesContent?.[b]=="string"?wn(l.sourcesContent[b]):null)),m=u`<dt>Version</dt><dd>${String(l.version??"?")}</dd>${l.file?u`<dt>Output</dt><dd class="mono">${l.file}</dd>`:g} ${l.sourceRoot?u`<dt>Source root</dt><dd class="mono">${l.sourceRoot}</dd>`:g} ${l.names||t.namesCount!=null?u`<dt>Names</dt><dd>${l.names?.length??t.namesCount}</dd>`:g}`;return Oy(i,m,d,f,null,a,{bundleSize:t.size,unpackedSize:By(f)})}if(t.kind==="stasis"&&t.bundle){let l=t.bundle,p=xn(t),d=Qw(t),f=[...d.keys()],m=new Set(f.filter(v=>d.get(v)==="resource")),h=new Set;for(let v of l.imports.keys()){let x=v.replace(/\s*\(with: .*\)\s*$/u,"");for(let k of x.split(", "))h.add(k)}let b=[...h].toSorted(),y=f.map(v=>p.get(v)),w=u`<dt>Version</dt><dd>${String(l.version)}</dd>${b.length>0?u`<dt>Resolution kinds</dt><dd>${b.join(", ")}</dd>`:g}`;return Oy(i,w,f,y,Ot(t),a,{bundleSize:t.size,unpackedSize:By(y),resources:m,details:t})}return qu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function LD(e,t){let n=`/api/npm/download?${new URLSearchParams({name:e.npm.name,version:e.npm.version})}`,r=u`<a class="bundles-download-btn" href="${n}">${Ku}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${lb(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return qu(Ah(e,{githubFigures:pb(e),provenance:mb(e),provenanceNamesBuilder:fb(e.npm)}),o,{overviewClass:"npm-overview"});let{sources:s}=t.json,i=xn(t),a=s.map(m=>i.get(m)??null),{paths:l,binaries:p,content:d}=Cr(t),f=db(e.npm);return Oy(m=>Ah(e,{prefix:m,githubFigures:pb(e),provenance:mb(e),provenanceNamesBuilder:fb(e.npm),files:l}),F1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:By(a),resources:p,leadColumn:u`${E1(e)}${OC(e)}`,trailColumns:i_(p,i),summaryExtra:u`${IC(e,l)}${HC(e,t)}${s_(e,PT(t,{legend:!0}),t)}${AC(e,r,KC(e))}`,overviewClass:"npm-overview",lines:DT(t).lines,sized:(m,h,b)=>Yd(m,d[m],b),fileTag:m=>u`${ub(f.get(m))}${gb(t,m,!0)}`,fileFlags:m=>hb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:PC(e)})}function zT(){xt().catch(()=>{});let e=Zt(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[m,h]of e){let b=[],y=[],w=new Map,v=new Set;for(let[x,k]of h.byVersion){let $=[],S=new Map;for(let C of k.findings){let R=Te(C,c.triage.get(j(C)))??null;R==="inprogress"?t.inprogress++:R==="fixed"?t.fixed++:R==="invalid"?t.invalid++:R==="deleted"?t.deleted++:R==="ignored"&&t.ignored++,R===c.shownTriage&&($.push(C),S.has(C.file)||S.set(C.file,[]),S.get(C.file).push(C))}if($.length!==0){b.push([x,{findings:$,files:S,reports:k.reports}]);for(let C of $)y.push(C),w.has(C.file)||w.set(C.file,[]),w.get(C.file).push(C);for(let C of k.reports)v.add(C)}}b.length!==0&&(b.sort(([x],[k])=>cf(x,k)),n.push([m,{findings:y,files:w,reports:v,versions:b}]))}let r=c.selectedPackage,o=r?n.find(([m])=>m===r)??null:null,s=null;if(o){let m=o[1].versions,h=c.selectedPackageVersion;s=m.find(([b])=>b===h)??null,!s&&m.length===1&&(s=m[0])}let i=s?s[1]:o?o[1]:null;if(o&&c.packageDetailsTab==="issues")return WD(o[0],i,s?s[0]:void 0);let a=c.packagesSearchQuery.trim().toLowerCase(),l=a?n.filter(([m])=>m.toLowerCase().includes(a)):n.slice();PD(l,c.packagesSortBy);let p=n.reduce((m,[,h])=>m+h.findings.length,0),d=new Set;for(let[,m]of n)for(let h of m.reports)d.add(h);let f=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?u`${n.length} ${n.length===1?"package":"packages"}`:u`${l.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${p>0?u`<span>${p} ${p===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${BD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:l.length===0?u`<p style="color:var(--muted)">No packages match "${c.packagesSearchQuery}".</p>`:u`<div class="${f}"><ul class="packages-list">${Z(OD(l),ND,m=>HD(m,r,c.selectedPackageVersion))}</ul>${o?u`<aside class="packages-details" id="packages-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-package aria-label="Close details">×</button></header><div class="packages-details-body">${jD(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function OD(e){let t=[];for(let[n,r]of e){let o=r.versions;if(o.length<=1){let[l,p]=o[0];t.push({kind:"single",pkg:n,version:l,bucket:p,totalVersions:1});continue}let[s,i]=o[0],a=c.expandedPackages.has(n);if(t.push({kind:"latest",pkg:n,version:s,bucket:i,totalVersions:o.length,expanded:a}),a)for(let l=1;l<o.length;l++){let[p,d]=o[l];t.push({kind:"other",pkg:n,version:p,bucket:d,totalVersions:o.length})}}return t}function ND(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function BD(e){return u`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${DD}"></triage-selector></div>`}var DD=["inprogress","fixed","invalid","deleted","ignored"];function PD(e,t){let n=t==="name-asc"?(r,o)=>r[0].localeCompare(o[0]):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||r[0].localeCompare(o[0]):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||r[0].localeCompare(o[0]):(r,o)=>o[1].findings.length-r[1].findings.length||r[0].localeCompare(o[0]);e.sort(n)}function zD(e,t){let n={live:0,invalid:0,deleted:0};if(!e)return n;let r=t===void 0?e.files.values():e.byVersion.get(t)?.files.values()??[].values();for(let o of r)for(let s of o){let i=Te(s,c.triage.get(j(s)))??null;i==="invalid"?n.invalid++:i==="deleted"?n.deleted++:n.live++}return n}function WD(e,t,n){let r=Zt().get(e),o=zD(r,n),s=c.packageSlideTriage??"live",i=r?WT(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),l=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,p=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,d=typeof n=="string"?` @ ${n}`:"";return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${`${e}${d}`}">${e}${d}</div><div class="bundles-slide-integrity">${a} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?u`<div class="bundle-issues-empty">${p}</div>`:Qa(i,{kind:"package",bucketKey:e})}</div></div>`}function HD(e,t,n){let{kind:r,pkg:o,version:s,bucket:i}=e,a={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let b of i.findings){let y=de(b,c.severityMode);a[y]!==void 0&&a[y]++}let l=et.filter(b=>a[b]>0),p=Sn(o),f={selected:o===t&&UD(e,n),"packages-row-latest":r==="latest","packages-row-other":r==="other"},m=s===null?"":s,h=s===null?`Open issues for ${o}`:`Open issues for ${o}@${s}`;return u`<li class="${q(f)}" data-select-package="${o}" data-select-package-version="${m}"><span class="packages-dot" style="${le({background:p})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name" data-tooltip-truncated data-tooltip="${s===null?o:`${o}@${s}`}">${o}${s===null?g:u`<span class="packages-version">@${s}</span>`} </span>${r==="latest"?VD(o,e.expanded,e.totalVersions-1):g}</div><span class="packages-row-meta">${i.findings.length} ${i.findings.length===1?"finding":"findings"} · ${i.files.size} ${i.files.size===1?"file":"files"} · ${i.reports.size} ${i.reports.size===1?"report":"reports"}</span></div>${l.length>0?u`<div class="packages-row-chips">${l.map(b=>u`<span class="${`tree-count-chip ${b}`}" data-tooltip="${b.replaceAll("_"," ")}">${a[b]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-package-row-issues="${o}" data-package-row-issues-version="${m}" aria-label="${h}">Issues →</button></li>`}function UD(e,t){return e.kind==="single"?!0:e.version===t}function VD(e,t,n){let r=t?"Hide":`+${n} ${n===1?"version":"versions"}`;return u`<button type="button" class="${q({"packages-row-expand":!0,expanded:t})}" data-package-expand="${e}" aria-expanded="${String(t)}" aria-label="${t?`Hide older versions of ${e}`:`Show older versions of ${e}`}" data-tooltip="${t?"Hide older versions":`Show older versions (${n})`}"><span class="packages-row-expand-chevron" aria-hidden="true"></span> <span class="packages-row-expand-label">${r}</span></button>`}function jD(e,t,n){let r=Zt().get(e),s=[...(r?WT(r,e,"live",n):new Map).values()].reduce((i,a)=>i+a.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-package-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${s>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${s}) →</button>`:g}</div>${GD(e,t,n)}`}function WT(e,t,n="live",r){let o=new Map,s=r===void 0?e.files:e.byVersion.get(r)?.files??new Map;for(let[i,a]of s){let l=a.filter(f=>{let m=Te(f,c.triage.get(j(f)))??null;return n==="invalid"?m==="invalid":n==="deleted"?m==="deleted":m!=="invalid"&&m!=="deleted"});if(l.length===0)continue;let p=HT(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function GD(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let f of t.findings){let m=de(f,c.severityMode);r[m]!==void 0&&r[m]++}let o=et.filter(f=>r[f]>0),s=[...t.files.entries()].toSorted(([f,m],[h,b])=>b.length!==m.length?b.length-m.length:f.localeCompare(h)),i=[...t.reports].toSorted((f,m)=>f.localeCompare(m)),l=Zt().get(e)?.repos,p=l&&l.size===1?[...l][0]:null,d=p?/^https?:/iu.test(p)?p:`https://github.com/${p}`:null;return u`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${n?u`<dt>Version</dt><dd class="mono">${n}</dd>`:g} ${d?u`<dt>Repository</dt><dd class="mono"><a href="${d}" target="_blank" rel="noopener">${p}</a></dd>`:g}<dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${o.length>0?u`<div class="packages-detail-chips">${o.map(f=>u`<span class="${`tree-count-chip ${f}`}">${r[f]} ${f.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${i.map(f=>{let m=ye[Ae(f)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${f}">${W(m)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${f}">${oe(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${s.map(([f,m])=>{let h=HT(e,f);return u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${f}">${h}</span> <span class="packages-detail-file-count">${m.length}</span></li>`})}</ul>`}function HT(e,t){for(let n of["node_modules","dependencies"]){let r=`${n}/${e}/`,o=t.indexOf(r);if(o>=0)return t.slice(o+r.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function UT(){xt().catch(()=>{});let e=no(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[d,f]of e){let m=[],h=new Map;for(let b of f.findings){let y=Te(b,c.triage.get(j(b)))??null;y==="inprogress"?t.inprogress++:y==="fixed"?t.fixed++:y==="invalid"?t.invalid++:y==="deleted"?t.deleted++:y==="ignored"&&t.ignored++,y===c.shownTriage&&(m.push(b),h.has(b.file)||h.set(b.file,[]),h.get(b.file).push(b))}m.length>0&&n.push([d,{findings:m,files:h,reports:f.reports}])}let r=c.selectedRepository,o=r?n.find(([d])=>d===r)??null:null;if(o&&c.repositoryDetailsTab==="issues")return JD(o[0],o[1]);let s=c.repositoriesSearchQuery.trim().toLowerCase(),i=s?n.filter(([d])=>d.toLowerCase().includes(s)||nt(d).toLowerCase().includes(s)):n.slice();YD(i,c.repositoriesSortBy);let a=n.reduce((d,[,f])=>d+f.findings.length,0),l=new Set;for(let[,d]of n)for(let f of d.reports)l.add(f);let p=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${i.length===n.length?u`${n.length} ${n.length===1?"repository":"repositories"}`:u`${i.length} of ${n.length} ${n.length===1?"repository":"repositories"}`}</span> ${a>0?u`<span>${a} ${a===1?"finding":"findings"} across ${l.size} ${l.size===1?"report":"reports"}</span>`:g}</div></div>${KD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:i.length===0?u`<p style="color:var(--muted)">No repositories match "${c.repositoriesSearchQuery}".</p>`:u`<div class="${p}"><ul class="packages-list">${Z(i,([d])=>d,([d,f])=>ZD(d,f,d===r))}</ul>${o?u`<aside class="packages-details" id="repositories-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-repository aria-label="Close details">×</button></header><div class="packages-details-body">${QD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function KD(e){return u`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${qD}"></triage-selector></div>`}var qD=["inprogress","fixed","invalid","deleted","ignored"];function YD(e,t){let n=t==="name-asc"?(r,o)=>nt(r[0]).localeCompare(nt(o[0])):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||nt(r[0]).localeCompare(nt(o[0])):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||nt(r[0]).localeCompare(nt(o[0])):(r,o)=>o[1].findings.length-r[1].findings.length||nt(r[0]).localeCompare(nt(o[0]));e.sort(n)}function XD(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let n of e.files.values())for(let r of n){let o=Te(r,c.triage.get(j(r)))??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function JD(e,t){let n=no().get(e),r=XD(n),o=c.repositorySlideTriage??"live",s=n?VT(n,o):new Map,i=[...s.values()].reduce((p,d)=>p+d.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,l=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${nt(e)}">${nt(e)}</div><div class="bundles-slide-integrity">${i} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${r}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?u`<div class="bundle-issues-empty">${l}</div>`:Qa(s,{kind:"repository",bucketKey:e})}</div></div>`}function ZD(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);r[l]!==void 0&&r[l]++}let o=et.filter(a=>r[a]>0),s=Sn(e),i=nt(e);return u`<li class="${n?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${le({background:s})}"></span><div class="packages-row-text"><span class="packages-name" data-tooltip-truncated data-tooltip="${i}">${i}</span> <span class="packages-row-meta">${t.findings.length} ${t.findings.length===1?"finding":"findings"} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</span></div>${o.length>0?u`<div class="packages-row-chips">${o.map(a=>u`<span class="${`tree-count-chip ${a}`}" data-tooltip="${a.replaceAll("_"," ")}">${r[a]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${i}`}">Issues →</button></li>`}function QD(e,t){let n=no().get(e),o=[...(n?VT(n):new Map).values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-repository-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${o>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:g}</div>${eP(e,t)}`}function VT(e,t="live"){let n=new Map;for(let[r,o]of e.files){let s=o.filter(i=>{let a=Te(i,c.triage.get(j(i)))??null;return t==="invalid"?a==="invalid":t==="deleted"?a==="deleted":a!=="invalid"&&a!=="deleted"});s.length>0&&n.set(r,s)}return n}function eP(e,t){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);n[l]!==void 0&&n[l]++}let r=et.filter(a=>n[a]>0),o=[...t.files.entries()].toSorted(([a,l],[p,d])=>d.length!==l.length?d.length-l.length:a.localeCompare(p)),s=[...t.reports].toSorted((a,l)=>a.localeCompare(l)),i=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return u`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${i}" target="_blank" rel="noopener">${nt(e)}</a></dd><dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${r.length>0?u`<div class="packages-detail-chips">${r.map(a=>u`<span class="${`tree-count-chip ${a}`}">${n[a]} ${a.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${s.map(a=>{let l=ye[Ae(a)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${a}">${W(l)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${a}">${oe(a)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([a,l])=>u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${a}">${a}</span> <span class="packages-detail-file-count">${l.length}</span></li>`)}</ul>`}function jT(e,t){let n=new Set(e),r=new Set,o=new Map,s=new Map(e.map((i,a)=>[i,a]));for(let i of t){let a=[...new Map(i.members.map(m=>[JSON.stringify([m.id,ct(m)]),m])).values()],l=a.filter(m=>n.has(m.id));if(l.length===0)continue;for(let m of l)r.add(m.id);let p=a.filter(m=>n.has(m.id)||m.isApp),d=JSON.stringify([a.map(m=>m.id).toSorted(),p.map(m=>[m.id,ct(m),m.title??"",m.source??null,m.revalidate??""]).toSorted(([m,h],[b,y])=>m.localeCompare(b)||Number(h)-Number(y))]),f=o.get(d);f||(f={key:d,members:p,reports:[],first:Math.min(...l.map(m=>s.get(m.id)))},o.set(d,f)),f.reports.some(m=>m.name===i.report&&m.managedReportId===i.managedReportId)||f.reports.push({name:i.report,...i.managedReportId?{managedReportId:i.managedReportId}:{},findingId:l[0].id,rowIndex:i.index})}return{rows:[...o.values()].toSorted((i,a)=>i.first-a.first),missing:e.filter(i=>!r.has(i))}}function Eo(e,t,n){return`${e} ${e===1?t:n}`}function tP(e,t){let n=Te(e,c.triage.get(e.id)),r=ct(e)?t.filter(({name:a})=>Hr(c.triage,e.id,a)):[],o=n??(r.length>0?"ignored":null);if(!o)return g;let s=n!=="ignored"&&o==="ignored"&&r.length<t.length,i=s?`Ignored in ${r.length}/${t.length} reports`:ww[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Wy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Gl(o),l=jl(o)??a;return u`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?u`<button type="button" class="links-finding-id mono" data-links-preview="${o}" data-preview-report="${i}" data-preview-row="${t[0].rowIndex??g}" data-preview-managed-report="${t[0].managedReportId??g}" data-tooltip="${a}" aria-haspopup="dialog">${l}</button>`:Vr(o)?u`<a class="links-finding-id mono" href="${`#${jr({id:o})}`}" data-tooltip="${a}">${l}</a>`:u`<span class="links-finding-id mono">${l}</span>`} ${s?u`<span class="links-finding-title">${s}</span>`:g} ${tP(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function GT(e){let t=!!c.currentLinks?.managedId;return u`<div class="links-finding-reports">${e.map(({name:n,findingId:r,managedReportId:o,rowIndex:s})=>u`<button type="button" class="links-finding-report report-button" data-links-report="${t?g:n}" data-links-finding="${r}" data-managed-report="${o??g}" data-links-preview="${t?r:g}" data-preview-report="${t?n:g}" data-preview-row="${t?s:g}" data-preview-managed-report="${t?o:g}">${W(Pe[Ae(n)]??Pe.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${oe(n)}">${oe(n)}</span></button>`)}</div>`}function nP(e,t){let n=e.reports.toSorted((r,o)=>oe(r.name).localeCompare(oe(o.name)));if(e.members.length===1){let r=e.members[0];return u`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${Wy(r,n,t.has(r.id),GT(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Eo(e.members.length,"finding","findings")} in row</span> ${GT(n)}</div><ul class="links-row-members">${e.members.map(r=>Wy(r,n,t.has(r.id)))}</ul></li>`}function rP(e,t){let{rows:n,missing:r}=jT(e,Qt(e)),o=new Set(e);return u`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${Eo(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>nP(s,o))}</ul>${r.length>0?u`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${r.map(s=>Wy({id:s,title:bf(s)}))}</ul></div>`:g}</li>`}function KT(e=g){let t=c.currentLinks;if(!t)return g;xt().catch(()=>{});let{name:n,groups:r,skipped:o}=t,s=new Set,i=new Set,a=0;for(let l of r)for(let p of l){if(s.has(p))continue;s.add(p);let d=ro(p);if(d.length!==0){a++;for(let f of d)i.add(f)}}return u`<div class="links-view">${t.managedId?u`<div class="meta-row"><button type="button" class="report-button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-deduplication"}}))}">‹ Deduplication</button></div>`:g}<header class="page-head"><div class="page-title"><h1>Links${e}</h1><div class="meta-row"><span class="links-file-name" data-tooltip-truncated data-tooltip="${n}">${W(ye[Ae(n)]??ye.default)}${oe(n)}</span> <span>${Eo(r.length,"link","links")}</span> <span>${Eo(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Eo(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Eo(s.size-a,"linked finding is","linked findings are")} not in any report you hold. Import the reports they came from and this page fills in.</p>`:g} ${o>0?u`<p class="links-note">${Eo(o,"entry","entries")} in this file could not be linked — an id the app can't follow (a session-local number, or something that isn't an id at all).</p>`:g} ${r.length===0?u`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:u`<ol class="links-list">${Z(r,(l,p)=>`${p}:${l.join(" ")}`,(l,p)=>rP(l,p))}</ol>`}</div>`}function Hy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function qT(){if(c.currentWorkspace){let e=Y().find(n=>n.id===c.currentWorkspace),t=c.reports.map(n=>n.fileName).filter(n=>typeof n=="string");return{mode:"workspace",workspaceId:c.currentWorkspace,fileNames:e?Hy(e.reports??[],c.storedFiles??[],t):t}}if(c.currentFile){let e=Y().find(t=>Array.isArray(t.reports)&&t.reports.includes(c.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[c.currentFile]}:null}return null}var Uy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{let o;if(r.kind==="bundle")o=await x0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await Jc(this.workspaceId,r.identifier,s)}if(o.ok)t.push({kind:r.kind,identifier:r.identifier});else{let s=o.reason??"unknown";n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}}catch(o){let s=o?.message??String(o);n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}this._uploading=!1,this._done=!0,n.length===0&&this._finish({uploaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Upload <strong>"${lr(this.items[0])}"</strong> to the workspace's remote inventory?`:u`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:jc(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${s}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Uy);function YT({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var XT=`.rec-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-uploaded,.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-updated{color:var(--high, #d57422)}.rec-status-differs{color:var(--warning, #d97706)}.rec-choice{flex:0 0 auto;display:flex;gap:.3rem;& button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 4px);padding:.1rem .45rem;font:inherit;font-size:.72rem;cursor:default;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&:disabled{opacity:.5;cursor:default}}}.rec-status-failed,.rec-status-check-failed{color:var(--warning, #d97706)}.rec-status-differs,.rec-status-failed,.rec-status-check-failed{background:rgb(from var(--warning, #d97706) r g b / .14)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
195
+ `;var JT={checking:{label:"checking\u2026",hint:"Checking the cloud copy\u2026"},good:{label:"available",hint:"The cloud copy is intact."},updated:{label:"local updated",hint:"Your copy was out of date. It was replaced with the cloud copy."},uploaded:{label:"cloud updated",hint:"Your copy was newer. It was uploaded to the cloud."},differs:{label:"differs",hint:"Your copy differs from the cloud copy, and nothing shows which one is newer. Choose which to keep."},reuploaded:{label:"re-uploaded",hint:"The cloud copy's data was missing. It was restored from your copy."},failed:{label:"failed",hint:"Couldn't bring this back in line. Re-check again to retry."},"check-failed":{label:"check failed",hint:"Couldn't download the cloud copy to check it, so its state is unknown. Re-check again to retry."},missing:{label:"missing",hint:"The cloud copy's data is gone, and there's no matching copy here to restore it from."}};function sP(e){let t={good:0,updated:0,uploaded:0,differs:0,reuploaded:0,failed:0,"check-failed":0,missing:0};for(let n of e)n.status in t&&(t[n.status]+=1);return t}var ZT=e=>e===1?"copy":"copies",Vy=class extends N{static styles=[...N.styles,D(Nl),D(ot),D(XT)];static properties={workspaceId:{type:String},cloudCount:{type:Number},localFileNames:{type:Array},localBundles:{type:Array},autoRun:{type:Boolean},_rows:{state:!0},_running:{state:!0},_ran:{state:!0},_error:{state:!0},_settled:{state:!0},_resolving:{state:!0},_bulk:{state:!0}};constructor(){super(),this.workspaceId="",this.cloudCount=0,this.localFileNames=[],this.localBundles=[],this.autoRun=!1,this._rows=[],this._running=!1,this._ran=!1,this._error=null,this._settled=!1,this._resolving=new Set,this._bulk=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="recheck"]')?.focus(),this.autoRun&&this._onRecheck()}_result(){return{items:this._rows,counts:this._counts()}}_onClose=()=>this._finish(this._ran?this._result():null);_onCancel=()=>this._finish(this._ran?this._result():null);_counts(){return sP(this._rows)}_onResolve=async(t,n)=>{if(this._resolving.has(t.resourceTag))return;this._resolving=new Set([...this._resolving,t.resourceTag]);let r;try{let s=await C0(this.workspaceId,t.identifier,n,t.compared);r=s?{status:s.status,detail:s.detail}:{status:"failed",detail:"sync is not available"}}catch(s){r={status:"failed",detail:s?.message??String(s)}}this._rows=this._rows.map(s=>s.resourceTag===t.resourceTag?{...s,...r}:s);let o=new Set(this._resolving);o.delete(t.resourceTag),this._resolving=o};_onUseCloudForAll=async()=>{if(!(this._bulk||this._running)){this._bulk=!0;try{for(let t of this._differingRows())await this._onResolve(t,"cloud")}finally{this._bulk=!1}}};_differingRows(){return this._rows.filter(t=>t.status==="differs")}_onRecheck=async()=>{if(!(this._running||this._bulk||this._resolving.size>0)){this._running=!0,this._error=null,this._rows=[];try{let{items:t}=await S0(this.workspaceId,{onList:n=>{this._rows=n},onItem:n=>{this._rows=this._rows.map(r=>r.resourceTag===n.resourceTag?n:r)}});this._rows=t}catch(t){this._error=t?.message??String(t)}finally{this._running=!1,this._ran=!0}}};_downloadableItems(){let t=new Set(this.localFileNames),n=new Set(this.localBundles),r=[];for(let o of this._rows)o.status!=="good"||!o.identifier||(o.kind==="report"&&!t.has(o.identifier)?r.push({kind:"report",identifier:o.identifier}):o.kind==="bundle"&&!n.has(o.identifier)&&r.push({kind:"bundle",identifier:o.identifier,label:o.label}));return r}_onDownload=async()=>{let t=this._downloadableItems();t.length!==0&&await Fu({workspaceId:this.workspaceId,items:t})};_statusHint(t){let n=JT[t.status]?.hint??"";return t.status==="good"&&this._heldLocally(t)&&(n="The cloud copy is intact and matches your copy."),t.detail?`${n}
196
+ ${t.detail}`:n}_heldLocally(t){return t.identifier?t.kind==="bundle"?this.localBundles.includes(t.identifier):this.localFileNames.includes(t.identifier):!1}_choice(t){if(t.status!=="differs")return g;let n=this._running||this._bulk||this._resolving.has(t.resourceTag);return u`<span class="rec-choice"><button type="button" data-role="keep-cloud" data-tooltip="Replace your copy with the cloud copy" @click="${()=>this._onResolve(t,"cloud")}" ?disabled="${n}">Use cloud copy</button> <button type="button" data-role="keep-local" data-tooltip="Upload your copy, replacing the cloud copy" @click="${()=>this._onResolve(t,"local")}" ?disabled="${n}">Upload mine</button></span>`}_rowsSection(){return this._rows.length===0?this._running?u`<p class="lwd-body">Fetching remote listing…</p>`:g:u`<ul class="rec-list">${this._rows.map(t=>u`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?u`<span class="lwd-kind-tag">bundle</span>`:g}</span> ${this._choice(t)} <span class="${`rec-status rec-status-${t.status}`}" data-tooltip="${this._statusHint(t)}">${JT[t.status]?.label??t.status}</span></li>`)}</ul>`}_summarySection(){if(!this._ran||this._rows.length===0)return g;let t=this._counts(),n=[];return t.good&&n.push(`${t.good} available`),t.updated&&n.push(`${t.updated} local ${ZT(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${ZT(t.uploaded)} updated from yours`),t.differs&&n.push(`${t.differs} ${t.differs===1?"differs":"differ"} \u2014 choose which copy to keep`),t.reuploaded&&n.push(`${t.reuploaded} re-uploaded`),t.failed&&n.push(`${t.failed} failed`),t["check-failed"]&&n.push(`${t["check-failed"]} check failed`),t.missing&&n.push(`${t.missing} missing`),n.length>0?u`<p class="rec-summary" role="status" aria-live="polite">${n.join(" \xB7 ")}</p>`:g}render(){let t=this.cloudCount===1?"":"s",n=this.cloudCount>0?u`the <strong>${this.cloudCount}</strong> remote`:"remote",r=this._ran?g:u`<p class="lwd-body">Re-check ${n} object${t} for this workspace. Each is re-fetched from the relay and compared with your copy. When one copy is provably newer, the other is updated to match; when it isn't clear, you choose which to keep. Any whose bytes are missing are re-uploaded from a matching local copy.</p>`,o=this._ran&&this._rows.length===0&&!this._error?u`<p class="lwd-empty">No remote objects to check.</p>`:g,s=this._ran?this._downloadableItems().length:0,i=this._differingRows().length>1||this._bulk;return u`<dialog @close="${this._onClose}"><button type="button" class="detail-action rec-close" data-role="close" aria-label="Close" @click="${this._onCancel}">×</button><header><h3>Re-check cloud storage</h3></header>${r} ${this._rowsSection()} ${o} ${this._summarySection()} ${this._error?u`<p class="rec-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${i?u`<button type="button" data-role="use-cloud-all" data-tooltip="Replace your copy of every report that differs with its cloud copy" @click="${this._onUseCloudForAll}" ?disabled="${this._running||this._bulk}">${this._bulk?"Using cloud copies\u2026":`Use cloud for all ${this._differingRows().length} conflicts`}</button>`:g} ${!i&&s>0?u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${s} not stored locally</button>`:g} ${i?g:u`<button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._ran?"Close":"Cancel"}</button>`} <button type="button" data-role="recheck" @click="${this._onRecheck}" ?disabled="${this._running||this._bulk||this._resolving.size>0}">${this._running?"Re-checking\u2026":this._ran?"Re-check again":"Re-check"}</button></footer></dialog>`}};customElements.define("objstore-recovery-dialog",Vy);function jy({workspaceId:e,cloudCount:t,localFileNames:n,localBundles:r,autoRun:o}={}){return re("objstore-recovery-dialog",{workspaceId:e??"",cloudCount:typeof t=="number"?t:0,localFileNames:Array.isArray(n)?[...n]:[],localBundles:Array.isArray(r)?[...r]:[],autoRun:o===!0})}var QT=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
197
+ `;var aP=10,Gy=class extends N{static styles=[...N.styles,D(Nl),D(ot),D(QT)];static properties={names:{type:Array}};constructor(){super(),this.names=[]}focusInitial(){this.renderRoot.querySelector('button[data-role="sync"]')?.focus()}_onSync=()=>this._finish(!0);_onDismiss=()=>this._finish(!1);_onClose=()=>this._finish(!1);_list(){if(this.names.length<2)return g;let t=this.names.slice(0,aP),n=this.names.length-t.length;return u`<ul class="lwd-list">${t.map(r=>u`<li><strong>${r}</strong></li>`)} ${n>0?u`<li>and ${n} more</li>`:g}</ul>`}render(){let t=this.names.length===1,n=t?u`Your copy of <strong>"${this.names[0]}"</strong> no longer matches its cloud copy, so other members may be seeing a different version.`:u`<strong>${this.names.length}</strong> reports no longer match their cloud copies, so other members may be seeing different versions.`;return u`<dialog @close="${this._onClose}"><button type="button" class="detail-action ssd-close" data-role="close" aria-label="Close" @click="${this._onDismiss}">×</button><header><h3>Reports out of sync</h3></header><p class="lwd-body">${n}</p>${this._list()}<p class="nwd-note ui-hint">Sync compares ${t?"it":"each one"} with the cloud. Where it's clear which copy is newer, the other is updated; otherwise you choose which to keep.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="dismiss" @click="${this._onDismiss}">Not now</button> <button type="button" class="primary" data-role="sync" @click="${this._onSync}">Sync</button></footer></dialog>`}};customElements.define("sync-suggest-dialog",Gy);function eM({names:e}={}){return new Promise(t=>{let n=document.createElement("sync-suggest-dialog");n.exclusive=!0,n.names=Array.isArray(e)?[...e]:[];let r=(o,s)=>{n.remove(),t({shown:o,sync:s})};n.addEventListener("resolve",o=>r(!0,o.detail===!0)),n.addEventListener("modal-conflict",()=>r(!1,!1)),document.body.append(n)})}var lP=1500;function tM({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>pv()}){let r=new Set,o=!1;function s(i,a,{onSync:l,retry:p}={}){!i||!Array.isArray(a)||a.length===0||o||r.has(i)||(o=!0,t(async()=>{let d;if(n())d={shown:!1,sync:!1};else try{d=await e([...a])}catch{d={shown:!1,sync:!1}}if(o=!1,!d.shown){typeof p=="function"&&t(p,lP);return}r.add(i),d.sync&&typeof l=="function"&&l()},0))}return{suggestSync:s,isClosedFor:i=>r.has(i)}}function nM(e,t,n=0){let{viewMode:r,focusGid:o,tableSelectedGid:s,kanbanPopoverGid:i}=t,a=r==="focus"?o:r==="table"?s:r==="kanban"?i:null,l=a?e.find(p=>ie(p)===a):null;return l||(r==="focus"?e[Math.min(n,e.length-1)]??null:null)}function rM(e,t){if(t.currentView!=="findings")return null;let n=Xe({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!n||!e)return n;let r={...n,finding:{id:j(je(e))}};return Ye(r)?r:n}var Xu=null;function ete(e){let t=Xu=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{Xu===t&&(Xu=null)}).catch(()=>{}),t}function oM(e){let t=null;return n=>{t!==null&&t!==n&&Xu?.skipTransition(),t=n,e()}}function Vt(){be.classList.add("active"),ut.classList.add("hidden")}function Zy(){let e=Ep(c.reports);if(!e)return null;let t=Object.keys(e),r=fr().filter(d=>Fe(d).commonTriage===c.shownTriage),o=Ap(r,c.severityMode),s=Kl(e,o),i=new Map,a=new Map,l=new Map;for(let d of r)for(let f of d){let m=de(f,c.severityMode);i.has(f.file)||i.set(f.file,new Set),i.get(f.file).add(m);let h=ge(f)?.color??"none";a.has(f.file)||a.set(f.file,new Set),a.get(f.file).add(h),l.has(f.file)||l.set(f.file,[]),l.get(f.file).push({severity:m,color:h})}let p;return ee.focusedPkg?(p=t.filter(d=>(qv(d)??"__own__")===ee.focusedPkg),ee.showAll||(p=p.filter(d=>Fp(d,o,s)))):p=ee.showAll?t:t.filter(d=>Fp(d,o,s)),{treeData:e,files:p,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:a,fileFindings:l,ownSourceFiles:Yv(p)}}function cP(){let e=Ms();if(!e)return;let t=Zy();if(!t)return;let n=c.currentView==="bundles";e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&_())})}function dP(){let e=Ms();if(!e)return;let t=Zy();t&&e.refreshTopPkgs(t)}function uP(e){return`${Pr[e]??e} findings`}function pP(e,t,n){return n?u`<repo-chip url="${n}"></repo-chip>`:_()?g:c.currentWorkspace?t?u`<repo-chip url="${t}"></repo-chip>`:g:e?u`<repo-chip url="${c.repoUrl}" editable ?editing="${c.repoEditing}" ?empty="${!c.repoUrl}"></repo-chip>`:t?u`<repo-chip url="${t}"></repo-chip>`:g}function cM(e,t,n,r,o){let s=e.length,i=new Set(c.reports.map(E=>E.source)),a=i.size===1?[...i][0]:null,l=c.currentWorkspace?Y().find(E=>E.id===c.currentWorkspace):null,p=c.currentWorkspace&&c.currentManagedTeam?c.managedTeams.find(E=>E.id===c.currentManagedTeam):null,d=Lu(c,l?[l]:[],Ie),f=p?`Team: ${p.name}`:l?`Workspace: ${l.name}`:a?uP(a):"Findings",m=a&&ye[a]?a:"default",h=W(ye[m]),b=u`<svg class="file-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><path d="M14 3v6h6"/></svg>`,y=g;if(d)y=Va(d,"reports",c.currentView);else if(t.length===1){let E=oe(t[0]);y=u`<button type="button" class="file-chip" data-copy-report="${E}">${h}<span>${E}</span></button>`}else t.length>1&&(y=u`<button type="button" class="file-chip" data-copy-report="${t.map(oe).join(`
198
+ `)}">${b}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(E=>E.groups.flat()),x=`${s} ${`finding${s===1?"":"s"}`}`,k=c.currentWorkspace?[]:tx(w,a?cd.filter(E=>E!=="type"):cd),$=g;if(s>0){let E={};for(let I of e){let U=de(An(I),c.severityMode);U&&(E[U]=(E[U]||0)+1)}let M=et.filter(I=>E[I]>0);M.length>0&&($=u`<span class="status-bar" aria-hidden="true">${M.map(I=>{let U=`${E[I]} ${I.replaceAll("_"," ")}`;return u`<span class="${`status-seg sev-${I}`}" style="${le({flexGrow:E[I]})}" data-tooltip="${U}"></span>`})}</span>`)}let S=new Set(c.reports.map(E=>E.repo??null)),C=S.size===1?[...S][0]:null,R=pP(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=py(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?uy(d,c.currentView):f}${y}${Va(d,"bundles",c.currentView)}${R}${A}${dM()}</h1><div class="meta-row"><span>${x}</span> ${$} ${k.length>0?u`${L}${k.map(E=>u`<span class="tag">${E}</span>`)}`:g}</div></div></header>`}var{suggestSync:fP}=tM({open:e=>eM({names:e})}),mP=new Set(["findings","files","links"]);function dM(){if(G.status!=="online")return g;if(!mP.has(c.currentView))return g;let e=qT();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=w0(t);if(o.length>0&&fP(t,o,{onSync:()=>Ky(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return sM({status:"differ",label:"differs",title:`Your copy of "${x}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>Ky(t,r,n)});let k=qm(t,x)?"cloud":"local";return sM({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>iM({workspaceId:t,items:[{kind:"report",identifier:x}]}):null})}let s=Y().find(x=>x.id===t),i=s&&Array.isArray(s.bundles)?s.bundles:[],a=Xm(t),l=n.filter(x=>!qm(t,x)),p=i.filter(x=>!b0(t,x)),d=[...l.map(x=>({kind:"report",identifier:x})),...p.map(x=>({kind:"bundle",identifier:x}))];if(a===0&&d.length===0)return g;let f=[a>0?`${a} in cloud`:null,d.length>0?`${d.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,d.length>0?`click "local" to upload ${d.length}`:null].filter(Boolean).join(" \u2014 "),m=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,h=o.length===0?g:u`<button type="button" class="sync-badge-chunk differ" data-tooltip="${m}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${x=>{x.stopPropagation(),Ky(t,r,n)}}">${pM()}<span>${o.length} differ</span></button>`,b=a===0?g:u`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${x=>{x.stopPropagation(),jy({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${fM()}<span>${a} cloud</span></button>`,y=d.length===0?g:u`<button type="button" class="sync-badge-chunk local" aria-label="${`${d.length} items not yet uploaded \u2014 open upload dialog`}" @click="${x=>{x.stopPropagation(),iM({workspaceId:t,items:d})}}">${uM()}<span>${d.length} local</span></button>`,w=u`<span class="sync-badge-divider" aria-hidden="true"></span>`,v=[b,h,y].filter(x=>x!==g);return u`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${v.map((x,k)=>k===0?x:u`${w}${x}`)}</div>`}function Ky(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?Hy(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return jy({workspaceId:e,cloudCount:Xm(e),localFileNames:o,localBundles:s,autoRun:!0})}function sM({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?fM():e==="differ"?pM():uM(),s=u`<span class="sync-badge-label">${t}</span>`;return typeof r!="function"?u`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${o}${s}</span>`:u`<button type="button" class="report-sync-badge report-sync-badge-clickable" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}" @click="${r}">${o}${s}</button>`}function uM(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="14" width="20" height="8" rx="2" ry="2"/><line x1="6" y1="18" x2="6.01" y2="18"/><line x1="10" y1="18" x2="10.01" y2="18"/><path d="M6 14V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v10"/></svg>`}function pM(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4v14"/><path d="M3 14l4 4 4-4"/><path d="M17 20V6"/><path d="M13 10l4-4 4 4"/></svg>`}function fM(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1-8.9A6 6 0 0 0 5.07 13.5 4 4 0 0 0 6 21h11.5z"/></svg>`}async function iM({workspaceId:e,items:t}){let n=t.filter(r=>r.kind==="bundle");if(n.length>0){let r=await Je(),o=new Map(r.map(s=>[s.integrity,s.name]));for(let s of n){let i=o.get(s.identifier);i&&(s.label=i)}}await YT({workspaceId:e,items:t})}function gP(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function hP(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function bP(e,t,n,r,o,s,i,a){let{showSource:l,showConfidence:p,showPriority:d,showGraphMode:f,showFileSort:m,kanbanMode:h,showRepo:b,hasComment:y,hasFix:w,hasFlagged:v,hasDuplicates:x,hasCrossContext:k,hasAppStacked:$,showSecurity:S,showSeverityMode:C,revalidateOptions:R,showPartial:L,canDropLayer:A,canDetailLayer:E,canUpstreamLens:M,confirmedLocked:I}=s;return u`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${f?"kanban,focus,table,list,grouped,graph":"kanban,focus,table,list,grouped"}"></view-mode-buttons><findings-sort ?show-file="${m}" ?show-confidence="${p}" ?show-priority="${d}"></findings-sort>${l?u`<source-filter></source-filter>`:g} ${!I&&(p||R.length>0)?u`<conf-filter ?range-disabled="${!p}" .revalidateOptions="${R}" ?has-partial="${L}"></conf-filter>`:g} ${y||w||v||c.filterComment||c.filterFix||c.filterFlagged?u`<annotation-filter .hasComment="${y}" .hasFix="${w}" .hasFlagged="${v}"></annotation-filter>`:g} ${h?g:u`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!c.currentWorkspace&&(x||c.filterDuplicates)||k||$||S||c.filterCrossContext||c.filterAppStacked?u`<annotation-filter group="context" .hasDuplicates="${x}" .hasCrossContext="${k}" .hasAppStacked="${$}" .hasSecurityContrast="${S}"></annotation-filter>`:g} ${A||c.revalidateConflicts.size>0?u`<revalidation-switch ?can-drop="${A}" ?can-detail="${E}" ?can-upstream="${M&&A}" .upstreamDisabled="${c.showRevalidation===!1&&A}"></revalidation-switch>`:g}</div></div><div class="toolbar-row sev-row">${C?u`<severity-mode-switch></severity-mode-switch>`:g} ${gP(r)} ${i.analyzers.length>1||i.models.length>1?u`<analyzer-select .analyzers="${i.analyzers}" .models="${i.models}" .groups="${i.groups}"></analyzer-select>`:g} ${b&&a.length>1?u`<repo-filter .options="${a}"></repo-filter>`:g} ${hP(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function qy(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var aM=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Zu=null,mM=0,Zs=null;function el(e,t=!1,n=null,r=!1,o=!1){return u`<finding-card data-gid="${ie(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var gM=u`<svg 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="M6 2H2v4M10 2h4v4M14 10v4h-4M6 14H2v-4"/></svg>`,hM=u`<svg 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="M6 2v4H2M10 2v4h4M10 14v-4h4M6 14v-4H2"/></svg>`,yP={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Jy(e,t={}){let{variant:n="kanban",active:r=!1,expandedTrackLast:o=!1}=t,s=Fe(e),i=je(e),a=qt(i)||"(untitled finding)",l=n==="kanban",p=n==="kanban-side",d=l&&c.currentWorkspace?Pc(i):null,f={"kanban-card":!0,"has-conflict":s.hasConflict,"focus-side-card":!l,"kanban-expanded-track-last":o,active:r};!s.hasConflict&&s.commonColor&&(f[`mark-${s.commonColor}`]=!0);let m=parseInt(i.line,10),h=Number.isFinite(m)?`:${m}`:"",b=de(i,c.severityMode),y=yP[b]??"?",w=Bo(i)&&c.severityMode!=="original",v=ge(i),x=v?.flagged===!0,k=v?.fix||tn(i),$=v?.comment??"",S=g;l&&k?S=Do(k)?u`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${k}">${Ts}</managed-fix-link>`:_t(i)?u`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${k}`}" aria-label="${`Edit fix link: ${k}`}">${Ts}</button>`:u`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${k}`}" aria-label="${`Fix: ${k}`}">${Ts}</span>`:l&&($||_()&&dr(i))&&(S=u`<comment-preview class="kanban-action" .finding="${i}" .comment="${$}">${Rd}</comment-preview>`);let C=u`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${st(b)} \u2014 corrected from ${st(i.severity)}`:g}" aria-label="${w?`Severity ${st(b)}, corrected from ${st(i.severity)}`:`Severity ${st(b)}`}">${y}${w?"*":""}</span> ${x?u`<span class="kanban-flag" aria-label="Flagged">${Td}</span>`:g} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${i.file}${h}</span> ${i.confidence===void 0||i.confidence===null?g:u`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${d?u`<span class="kanban-analyzer" role="img" data-tooltip="${ms[d]}" aria-label="${ms[d]}">${W(Pe[d])}</span>`:g}</div>`;return l?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-source draggable="${da(e,s).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Open details for ${a}`}">${C}</div>`:p?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Show details for ${a}`}">${C}</div>`:u`<div class="${q(f)}" data-gid="${ie(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Focus on ${a}`}">${C}</div>`}var Yy={content:"",parts:""};function wP(e){return Yy.content!==e&&(Yy={content:e,parts:Fd(e)}),Yy.parts}function vP(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
199
+ `).length,s=String(o).length;return u`<div class="focus-code-lines" style="${le({"--lineno-width":`${s}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(i,a)=>{let l=a+1,d={"focus-code-lineno":!0,"focus-code-line-active":!!n&&l>=n.start&&l<=n.end};return u`<div class="${q(d)}" data-focus-code-line="${l}">${l}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?W(r):wP(t)}</code></pre></div>`}function bM(e){return!e||!ea(je(e))?g:u`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${ie(e)}" aria-label="View issue history"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5"/></svg></button>`}function yM(e,t=g,n=!1){c.focusCodeTick;let r=Cx(e),o=$d(e),s=r?"focus-main with-code":"focus-main",i=le({"--focus-split":String(c.focusSplit)});return u`<div class="${s}" style="${i}" data-gid="${ie(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:bM(e)} ${el(e,!1,"focus",!1,n)}</div></div>${t} ${r?u`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${tc}" aria-valuemax="${nc}" aria-valuenow="${Math.round(c.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??g}" data-focus-code-integrity="${r.integrity??g}">${r.loading?u`<div class="focus-code-empty">Loading source…</div>`:u`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?u`<span class="focus-code-line">:${Pv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?u`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Cs}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${_s}</button></div>`:g}</header><div class="focus-code-body">${vP(r)}</div>`}</div>`:g}</div>`}function wM(e,t,n=[],r=null){if(!e&&!r)return g;let o=e?Fe(e):{},s=c.kanbanDetailFullscreen,i={"kanban-detail-modal":!0,fullscreen:s,"has-conflict":o.hasConflict},a=e?ie(e):null,l=t?.items??[],p=l.findIndex(f=>ie(f)===a),d=u`<div class="kanban-detail-actions">${bM(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${s?"true":"false"}" aria-label="${s?"Back to the readable width":"Fill the available space"}">${s?hM:gM}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return u`<div class="${q({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${q(i)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${s&&e?g:d}<div class="kanban-detail-body">${e?s?yM(e,d,!0):el(e,!1,"kanban-detail",!1,!0):u`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?g:u`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${n.map(f=>{let m=f.key===t.key,h=m?f.label:`${f.label} (${f.count})`;return u`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${m}" ?disabled="${f.count===0}">${h}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${p===0}" aria-label="Previous finding">${Cs}</button> <span class="count">${p<0?l.length:`${p+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${p===l.length-1}" aria-label="Next finding">${_s}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>Jy(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function $P(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?qy(e,aM):e;return r.length===0?g:(Zu=r,u`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?u`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${el(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);mM=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${yM(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${s}" aria-label="Previous finding">${Cs}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${i}" aria-label="Next finding">${_s}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>Jy(a,{variant:"focus",active:ie(a)===ie(o)}))}</div></aside></div>`}if(c.viewMode==="kanban"){let r=[{key:"untriaged",label:"Untriaged"},{key:"inprogress",label:"In progress"},{key:"fixed",label:"Fixed"},{key:"invalid",label:"Invalid"},{key:"deleted",label:"Deleted"},{key:"ignored",label:"Ignored"}],o=new Map(r.map(d=>[d.key,[]]));for(let d of e){let m=Fe(d).commonTriage??"untriaged",h=o.get(m);h&&h.push(d)}let s=r.some(d=>d.key===c.kanbanExpandedColumn)?c.kanbanExpandedColumn:null,i=s?r.filter(d=>d.key===s):r,a={"--kanban-cols":String(r.length)},l=t,p=l?r.find(d=>d.key===(Fe(l).commonTriage??"untriaged")):null;return u`<div class="kanban-board" style="${le(a)}">${Z(i,d=>d.key,d=>{let f=o.get(d.key),m=d.key===s;return u`<div class="${`kanban-column kanban-column-${d.key}${m?" expanded":""}`}" data-kanban-target="${d.key}"><div class="kanban-column-header"><span class="label">${d.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${d.key}" aria-pressed="${m}" aria-label="${m?"Show all columns":`Show only ${d.label}`}">${m?hM:gM}</button></div><div class="kanban-column-body">${f.length===0?u`<div class="kanban-empty">No ${d.label.toLowerCase()} findings.</div>`:Z(f,h=>ie(h),(h,b)=>Jy(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${wM(l,p&&{key:p.key,label:p.label,items:o.get(p.key)},r.map(d=>{let f=o.get(d.key);return{key:d.key,label:d.label,count:f.length,firstGid:f.length>0?ie(f[0]):""}}))}`}if(c.viewMode==="grouped"){let r=new Map;for(let s of e){let i=An(s).file;r.has(i)||r.set(i,[]),r.get(i).push(s)}let o=c.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return u`${Z(o,s=>s,s=>{let i=c.sortBy==="file"?qy(r.get(s),(l,p)=>parseInt(l.line,10)-parseInt(p.line,10)):r.get(s),a=An(i[0]);return u`<div class="file-group"><div class="file-header"><span>${Mp(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>el(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?qy(e,aM):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=Vv(o,En(o)),i=Jr(o),a=li(o),l=r.length>1;return u`<div class="${q({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${Mp(o,En(o))}</span> ${s===g?g:u`<span class="line-num">${s}</span>`} ${a?u`<span class="meta">${a}</span>`:g} ${i?u`<span class="run-meta">${i}</span>`:g}</div>${el(r,!0,null,!0)}</div>`})}`}function kP(){c.bundleSourceFile&&Sg().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(ET(),e)}var xP=oM(CP);function O(){xP(c.currentView)}function bn(e){let t=document.querySelector(`#${e}`);return(!t||!be.contains(t)||be.firstElementChild!==t)&&(be.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Du(){let e=Lu(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${cM([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Vt()}var SP={"manage-deduplication":{slot:"manage-deduplication-slot",tag:"managed-admin-deduplication",title:"DeepView \u2014 deduplication"},manage:{slot:"manage-slot",tag:"managed-admin-home",title:"DeepView \u2014 manage"},"admin-users":{slot:"admin-users-slot",tag:"managed-admin-users",title:"DeepView \u2014 users"},"manage-repos":{slot:"manage-repos-slot",tag:"managed-admin-repos",title:"DeepView \u2014 repositories"},"manage-repo-risk":{slot:"manage-repo-risk-slot",tag:"managed-admin-repo-risk",title:"DeepView \u2014 repository risk"},"manage-reports":{slot:"manage-reports-slot",tag:"managed-admin-reports",title:"DeepView \u2014 reports"},"manage-bundles":{slot:"manage-bundles-slot",tag:"managed-admin-bundles",title:"DeepView \u2014 bundles"},"manage-history":{slot:"manage-history-slot",tag:"managed-admin-history",title:"DeepView \u2014 history"},"manage-teams":{slot:"manage-teams-slot",tag:"managed-admin-teams",title:"DeepView \u2014 teams"},"manage-import":{slot:"manage-import-slot",tag:"managed-admin-import",title:"DeepView \u2014 import"},"manage-links":{slot:"manage-links-slot",tag:"managed-admin-links",title:"DeepView \u2014 links"},"manage-scans":{slot:"manage-scans-slot",tag:"managed-admin-scans",title:"DeepView \u2014 scans"}},lM=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Ju=null;function Ka(){let e=c.revalidateConflicts.size>0,t=!e&&zl(c.reports);return e?c.showRevalidation!==!1&&(Ju=c.showRevalidation,c.showRevalidation=!1):(Ju!==null&&(c.showRevalidation=Ju,Ju=null),!t&&c.showRevalidation===!1&&(c.showRevalidation=!0)),c.upstreamOnly&&(!t||c.showRevalidation===!1||!c.reports.some(n=>(n.groups??[]).some(r=>r.some(o=>o.isUpstream))))&&(c.upstreamOnly=!1),vi(c.showRevalidation,c.upstreamOnly),t}var Xy=null;function CP(){ys()||H0(),kP(),Wl(c.reports),kc()&&queueMicrotask(()=>{xe()}),Hl(c.reports)&&pr();let e=Ka(),t=c.reports.some(T=>(T.groups??[]).some(F=>F.some(z=>z.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let T=c.currentView.slice(10),F=Lu(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(AR(F,T,c.workspaceContentFileCount),z),document.title=F?`${F.title} \u2014 ${T}`:`DeepView \u2014 ${T}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Xn(c.bundleDetailsTab,c.bundleSourceFile)&&Sg().catch(()=>{});let T=bn("bundles-slot");T&&J(BT(c.bundles),T);let F=c.bundleDetails,z=c.selectedBundle&&F&&(F.json||F.bundle);if(z&&c.bundleDetailsTab==="graph"){let Re=document.querySelector("#bundle-graph-slot");if(Re){let vt=_T(c.bundleDetails);if(vt){MT(vt);let pw={hideAllFiles:!0,triageCounts:CT(c.bundleDetails,new Set(vt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:vt.canPackagesView,showBundleLayouts:!0,hasIssues:vt.hasIssues},ii=Xy,fw=Re.querySelector("graph-layout");!vt.issuesShown&&ii&&!ii.issuesShown&&fw&&ii.state===ee.graphState&&ii.details===F&&ii.reason===ee.bundleReason?fw.options=pw:(Xy=null,Lg(Re,vt,pw,RT,TT).then(MM=>(MM&&ee.graphState&&(Xy={state:ee.graphState,details:F,reason:ee.bundleReason,issuesShown:vt.issuesShown}),null)))}}}if(z&&!F.metadataOnly&&c.bundleDetailsTab==="terminal"){let Re=document.querySelector("#bundle-terminal-slot");Re&&Ux(Re,c.bundleDetails)}Vt();let pe=c.bundles.find(Re=>Re.integrity===c.selectedBundle)?.npm;document.title=pe?`DeepView \u2014 ${pe.name}@${pe.version}`:"DeepView \u2014 bundles";return}if(c.currentView==="reviews"){let T=bn("dependency-reviews-slot");T&&J(u`<dependency-review-list .session="${c.managedSession}"></dependency-review-list>`,T),Vt(),document.title="DeepView \u2014 my reviews";return}if(c.currentView==="npm"){let T=bn("npm-slot");T&&J(M1(),T),Vt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let T=bn("packages-slot");T&&J(zT(),T),Vt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let T=bn("repositories-slot");T&&J(UT(),T),Vt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let T=bn("links-slot"),F=ys();T&&J(u`${KT(dM())}${F?wM(F.group,null,[],F):g}`,T),Vt(),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let T=bn("scan-slot");if(T&&!T.firstElementChild){let F=document.createElement("local-scan-page");F.selection=c.scanSelection,T.append(F),F.updateComplete.then(()=>bi(F.renderRoot,{gate:z=>!Object.hasOwn(z.dataset,"tooltipTruncated")||z.scrollWidth>z.clientWidth}))}Vt(),document.title="DeepView \u2014 scans";return}let n=SP[c.currentView];if(n){let T=bn(n.slot);T?.classList.add("managed-page-slot");let F=T?.firstElementChild?.session;if((F?.id!==c.managedSession?.id||F?.role!==c.managedSession?.role)&&T?.replaceChildren(),T&&!T.firstElementChild){let z=document.createElement(n.tag),pe=Re=>bi(Re,{gate:vt=>!Object.hasOwn(vt.dataset,"tooltipTruncated")||vt.scrollWidth>vt.clientWidth});z.localImportSource=rm(),c.currentView==="manage-import"&&(z.localDeps=nm(),z.promptPassword=Wc,z.resolveConflicts=Kc,z.confirmTriageImport=r0,z.confirmContentImport=s0,z.showTriageComparison=c0),z.session=c.managedSession,z.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(z.selection=c.scanSelection),c.currentView==="manage-bundles"&&(z.createRepoId=c.bundleCreationRepoId,z.installTooltips=pe),T.append(z),(async()=>{await customElements.whenDefined(n.tag),await z.updateComplete,pe(z.renderRoot)})().catch(()=>{})}T?.firstElementChild&&(T.firstElementChild.session=c.managedSession,T.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&T?.firstElementChild&&(T.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&T?.firstElementChild&&(T.firstElementChild.createRepoId=c.bundleCreationRepoId),Vt(),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&Du();return}let r=fr(),o=c.viewMode==="kanban",s={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},i=[];for(let T of r){let F=Fe(T).commonTriage;F&&s[F]++,(o||F===c.shownTriage)&&i.push(T)}Object.defineProperty(i,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,p=!1,d=!1;for(let T of r)for(let F of T){Bo(F)&&(d=!0);let z=ge(F);tn(F)&&(l=!0),z&&(z.comment&&(a=!0),z.fix&&(l=!0),z.flagged===!0&&(p=!0))}let f=ed(),m=r.some(T=>T.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(og),b=i.some(sg);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=L0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,k=!1;for(let T of i)for(let F of T){let z=Yr(F);z&&w.add(z)}for(let T of dg()){let F=!1,z=!1;for(let pe of T){let Re=Be(pe);Re==="partial"&&(x=!0),!((Re==="unreachable"||Re==="refuted")&&(k=!0,c.currentWorkspace))&&(Re==="revalidation"?F=!0:z=!0)}F&&z&&(v=!0)}let S=[...new Set(c.reports.map(T=>T.type))].join(", "),C=c.reports.map(T=>T.fileName),R=i.map(Ct).filter(T=>T.length>0),L=R.length>0&&Rp(R),A=rg(r),E=r.some(T=>T.some(F=>Zn(F.file))),M=r.some(T=>T.some(F=>!Zn(F.file))),I=!1,U=!1,K;e:for(let T of r)for(let F of T)if(!U)U=!0,K=F.file;else if(F.file!==K){I=!0;break e}let Q=r.some(T=>T.some(F=>!F.repo?.github&&!Zn(F.file))),ze=new Set;for(let T of r)for(let F of T)!Zn(F.file)&&F.repo?.github&&ze.add(F.repo.github);let We=ze.size===1?[...ze][0]:null,Ke=new Set,Ce=new Set;for(let T of r)for(let F of T)Ke.add(F._analyzer??null),Ce.add(ia(F));let yt=Object.keys(pg),Nr=T=>{if(T==null)return 1/0;let F=yt.indexOf(T);return F===-1?yt.length:F},tp=[...Ke].toSorted((T,F)=>{let z=Nr(T),pe=Nr(F);return z!==pe?z-pe:String(T??"").localeCompare(String(F??""))}),np=[...Ce].toSorted(lM);if(c.filterAnalyzer){let T=c.filterAnalyzer===hs?null:c.filterAnalyzer;(!Ke.has(T)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let T=c.filterModel===bs?null:c.filterModel;(!Ce.has(T)||Ce.size<2)&&(c.filterModel="")}let Hn=Lv(w);c.filterRevalidate&&!Hn.some(T=>T.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=nd(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&po();ue||(c.filterPartial="");let wt=e&&(v||x||!c.currentWorkspace&&k),nw=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&M;!nw&&c.filterSources.size>0&&c.filterSources.clear(),L||(c.filterConfMin=0,c.filterConfMax=10,(c.sortBy==="confidence-desc"||c.sortBy==="confidence-asc")&&(c.sortBy="severity")),!A&&(c.sortBy==="priority-desc"||c.sortBy==="priority-asc")&&(c.sortBy="severity"),!I&&c.sortBy==="file"&&(c.sortBy="severity");let rp=O0(i),ti={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},ni={red:0,blue:0,green:0,gray:0,none:0};for(let T of rp){if(T.length===1){let pe=de(T[0],c.severityMode);ti[pe]=(ti[pe]||0)+1;let Re=ge(T[0])?.color??"none";ni[Re]=(ni[Re]||0)+1;continue}let F=new Set(T.map(pe=>de(pe,c.severityMode)));for(let pe of F)ti[pe]=(ti[pe]||0)+1;let z=new Set(T.map(pe=>ge(pe)?.color??"none"));for(let pe of z)ni[pe]=(ni[pe]||0)+1}let rw=T0(rp),SM=[...rw].toSorted(lM);if(c.filterRepo){let T=c.filterRepo===Qm?null:c.filterRepo;rw.has(T)||(c.filterRepo="")}let ri=B0(rd(i)),rl=Ep(c.reports),ow=rl?Object.keys(rl).length:0,op=ow>1;!op&&c.currentView==="files"&&(c.currentView="findings"),!op&&c.viewMode==="graph"&&(c.viewMode="kanban");let sw=cM(r,C,Q,We,ow);if(c.currentView==="files"){let T=Ap(r,c.severityMode),F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot");(!F||!z||!be.contains(F)||!be.contains(z))&&(be.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot")),F&&J(sw,F),z&&J(Px(rl,T),z),Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let CM=c.viewMode==="table"&&c.tableSelectedGid&&ri.some(T=>ie(T)===c.tableSelectedGid),oi=null;c.viewMode==="graph"&&rl&&(oi=Zy(),oi||(c.viewMode="kanban"));let ol=!!oi,Br="findings-content";CM&&(Br+=" with-details"),ol&&(Br+=" with-graph"),o&&(Br+=" with-kanban"),c.viewMode==="focus"&&(Br+=" with-focus");let iw=g,sl=g,aw=g,lw=nM(ri,c,mM);Zu=null,ol||(iw=bP(ri.length,i.length,s,ti,ni,{showSource:nw,showConfidence:L,showPriority:A,showGraphMode:op,showFileSort:I,kanbanMode:o,showRepo:!!c.currentWorkspace,hasComment:a,revalidateOptions:Hn,showPartial:ue,canDropLayer:e,canDetailLayer:wt,canUpstreamLens:t,confirmedLocked:V,hasFix:l,hasFlagged:p,hasDuplicates:m,hasCrossContext:h,hasAppStacked:b,showSecurity:y,showSeverityMode:d||c.severityMode==="original"},{analyzers:tp,models:np,groups:rp},SM),c.shownTriage&&i.length===0?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ri.length===0&&i.length>0&&!o?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(sl=r.length>0?u`<p style="color:var(--green)">All ${S} issues triaged.</p>`:u`<p style="color:var(--green)">No ${S} issues found.</p>`),aw=$P(ri,lw));let si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content"),_M=Gt&&Gt.querySelector(":scope > #findings-graph-slot"),RM=Gt&&Gt.querySelector(":scope > #findings-body-slot"),TM=Gt&&(_M?"graph":RM?"body":null)===(ol?"graph":"body");if(!si||!Gt||!be.contains(si)||!be.contains(Gt)||!TM){let T=ol?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';be.innerHTML=`<div id="header-slot"></div><div class="${Br}">${T}</div>`,si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content")}else Gt.className!==Br&&(Gt.className=Br);si&&J(sw,si);let cw=document.querySelector("#toolbar-slot");cw&&J(iw,cw);let dw=document.querySelector("#empty-state-slot");dw&&J(sl,dw);let uw=document.querySelector("#findings-body-slot");if(uw&&J(aw,uw),oi){let T=document.querySelector("#findings-graph-slot");if(T){let z={extraTopRow:u`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:s,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};Lg(T,oi,z,cP,dP)}}if(Zu){let T=be.querySelector(".finding-table-slot");T&&(Zs||(Zs=document.createElement("finding-table")),Zs.items=Zu,Zs.selectedGid=c.tableSelectedGid,Zs.parentNode!==T&&T.append(Zs))}Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,_()&&te?.replaceFindingRoute(rM(lw,c))}var AP=500,EP=14;function Qu(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=qe(e);return n&&(t.triage=n),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function tl(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function FP(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var LP=e=>new TextEncoder().encode(e).length,jt=new Map,ei=new Set,nl=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Or=new Map,Wn=null,Qs=Promise.resolve();function $M(){let e=new Set;for(let t of c.reports)for(let n of t.groups)for(let r of n)typeof r.id=="string"&&r.id&&e.add(r.id);return e}function Qy(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function kM(e){let t=new Set,n=!1;for(let r of c.reports)if(r._managedReportId===e){n=!0;for(let o of r.groups??[])for(let s of o)typeof s.id=="string"&&s.id&&t.add(s.id)}return n||c.reports.length===0?t:new Set($M())}function OP(e){let t=Qy();for(let n of c.reports)if(n._managedReportId!=null&&(n.groups??[]).some(r=>r.some(o=>o.id===e))){let r=t.find(o=>o.id===n._managedReportId);if(r)return r}return t[0]??null}function ew(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function NP(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function BP(e,t){let n=Or.get(e.key);n==null&&(n={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Or.set(e.key,n));for(let r of t)n.changes.has(r)||n.changes.set(r,e.changes.get(r))}async function DP(e,t,n){if(!ew())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=EP;for(;o<r.length&&a<200;){let f=r[o],m=LP(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&l+m>262144)break;i[f]=e.changes.get(f),l+=m,a++,o++}let p=await Vk(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!NP(p)){BP(e,r.slice(s));return}d||console.warn("managed: the server refused a triage batch",e.report.id,p,Object.keys(i)),!d&&p===403&&c.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=jt.get(f)?.fix??"",b=d?m?.fix??"":h;b!==h&&t.add(e.teamId),jt.set(f,{key:tl(m),fix:b})}}}function ep(){Wn!=null&&(clearTimeout(Wn),Wn=null);let e=[...Or.values()];if(Or.clear(),e.length===0)return;let t=new Set,n=new Set;for(let r of e)Qs=Qs.then(()=>DP(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Qs=Qs.finally(()=>{for(let r of t)fs(r);for(let r of n)xb(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function xM(){if(!(Qy().length===0||!ew()||ei.size===0)){for(let t of $M()){let n=Qu(c.triage.get(t)),r=tl(n);if((jt.get(t)?.key??"")===r)continue;if(!FP(t,n)){console.warn("managed: triage entry exceeds the server caps, kept local only",t),jt.set(t,{key:r,fix:jt.get(t)?.fix??""});continue}let o=OP(t);if(o==null||!ei.has(nl(o.id)))continue;let s=c.currentManagedTeam,i=nl(o.id,s),a=Or.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Or.set(i,a)),a.changes.set(t,n)}Or.size!==0&&(Wn!=null&&clearTimeout(Wn),Wn=setTimeout(ep,AP))}}var vM=!1;function nR(){vM||!ew()||(vM=!0,Jf(xM))}function Tu(){M$(),c.managedComments?.clear(),c.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Wn!=null&&(clearTimeout(Wn),Wn=null),Or.clear(),ei.clear(),jt.clear()}async function lne(e,{renderView:t=!0,signal:n,readAnnotations:r}={}){let o=c.reports,s=c.currentManagedTeam,i=c.managedSession?.role,a=c.managedSession?.id,l=()=>!n?.aborted&&c.serverMode==="managed"&&c.localMode!==!0&&c.managedSession!=null&&c.managedSession.id===a&&c.managedSession.role===i&&c.reports===o&&c.currentManagedTeam===s&&Qy().some(y=>y.id===e);if(!l()||(ei.delete(nl(e)),ep(),!await tw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await zm(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=kM(e),b=d&&ta(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){jt.delete(y);continue}let w=Qu(f[y]);jt.set(y,{key:tl(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;ml(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ei.add(nl(e)),d&&Bm(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return xM(),!0}function tw(e){return e?e.aborted?Promise.resolve(!1):new Promise(t=>{let n=o=>{e.removeEventListener("abort",r),t(o)},r=()=>n(!1);e.addEventListener("abort",r,{once:!0}),Qs.then(()=>n(!0),()=>n(!1))}):Qs.then(()=>!0)}async function xb(e,{signal:t,readAnnotations:n}={}){let r=c.reports,o=c.currentManagedTeam,s=c.managedSession?.role,i=c.managedSession?.id,a=()=>!t?.aborted&&c.serverMode==="managed"&&!c.localMode&&c.reports===r&&c.currentManagedTeam===o&&c.managedSession?.id===i&&c.managedSession?.role===s&&ei.has(nl(e,o));if(!a()||(ep(),!await tw(t)||!a()))return!1;let l=kM(e),p=new Map([...l].map(w=>[w,jt.get(w)])),d=new Map(c.managedIssues),f=n?await n(e):null,m=n?f?.entries:await zm(e,o,{signal:t});if(m==null||!a())return!1;let h=f&&ta(l,f.issues,d),b=!1,y=!1;for(let w of l){let v=p.get(w),x=Qu(c.triage.get(w));if(jt.get(w)!==v||tl(x)!==(v?.key??""))continue;let k=Qu(m[w]);(v?.fix??"")!==(k?.fix??"")&&(y=!0),jt.set(w,{key:tl(k),fix:k?.fix??""});let $=k?.triage==null||k.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;ml(c.triage,w,{...k,ignoredReports:$,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&fs(o),f&&Bm(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function h_(e,t){if(!e)return;let n=c.currentManagedReport;if(n!=null&&(c.managedReports.length!==1||c.managedReports[0].id!==n))return;let r;return async o=>(r??=(async()=>(ep(),!await tw(t)||t?.aborted?null:zk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{$$ as a,k$ as b,x$ as c,S$ as d,of as e,C$ as f,Qr as g,c as h,_ as i,rI as j,cI as k,Ie as l,Ef as m,Y as n,ss as o,$I as p,xI as q,SI as r,_I as s,RI as t,Yi as u,q$ as v,TI as w,xe as x,Q$ as y,BI as z,DI as A,PI as B,nA as C,oA as D,mW as E,gW as F,hW as G,bW as H,yW as I,wW as J,G as K,te as L,ea as M,Am as N,Em as O,Om as P,K4 as Q,ye as R,Ae as S,rn as T,Hc as U,Zk as V,Uc as W,Kc as X,ot as Y,Ee as Z,hs as _,Qm as $,bs as aa,td as ba,MW as ca,IW as da,AW as ea,cr as fa,MA as ga,IA as ha,aa as ia,rd as ja,B0 as ka,OW as la,ys as ma,H0 as na,qW as oa,ie as pa,po as qa,dr as ra,PA as sa,_t as ta,ge as ua,zA as va,ur as wa,je as xa,En as ya,q0 as za,Fe as Aa,c6 as Ba,HA as Ca,d6 as Da,da as Ea,u6 as Fa,fr as Ga,mo as Ha,p6 as Ia,f6 as Ja,ld as Ka,vs as La,B6 as Ma,me as Na,tH as Oa,nH as Pa,kg as Qa,go as Ra,gr as Sa,rH as Ta,uE as Ua,gd as Va,Sg as Wa,wd as Xa,uH as Ya,pH as Za,yx as _a,$x as $a,$d as ab,TH as bb,kd as cb,Ss as db,NH as eb,_E as fb,UH as gb,Tx as hb,Mx as ib,RE as jb,Ag as kb,xd as lb,VH as mb,jH as nb,Sd as ob,Cd as pb,Cs as qb,_s as rb,Ax as sb,ZH as tb,QH as ub,it as vb,kU as wb,xU as xb,rF as yb,SU as zb,Is as Ab,wr as Bb,Md as Cb,WU as Db,Gx as Eb,Fd as Fb,kS as Gb,xS as Hb,CS as Ib,Kg as Jb,_S as Kb,JF as Lb,ZF as Mb,RS as Nb,TS as Ob,dV as Pb,tL as Qb,nL as Rb,DS as Sb,eh as Tb,zS as Ub,CV as Vb,WS as Wb,US as Xb,qS as Yb,YS as Zb,OV as _b,JS as $b,NV as ac,BV as bc,oh as cc,PV as dc,zV as ec,GV as fc,yh as gc,Ca as hc,d1 as ic,ln as jc,w1 as kc,Ra as lc,v1 as mc,XO as nc,sN as oc,aN as pc,lN as qc,Hh as rc,rC as sc,dN as tc,uN as uc,JG as vc,pN as wc,ZG as xc,r7 as yc,o7 as zc,s7 as Ac,i7 as Bc,a7 as Cc,cC as Dc,fC as Ec,gC as Fc,Yh as Gc,bC as Hc,Zh as Ic,tK as Jc,vC as Kc,nK as Lc,rK as Mc,CN as Nc,oK as Oc,a_ as Pc,vb as Qc,Ge as Rc,mB as Sc,nR as Tc,Tu as Uc,lne as Vc,xb as Wc,h_ as Xc,To as Yc,ay as Zc,Ua as _c,oR as $c,Ir as ad,Ks as bd,UR as cd,PJ as dd,zJ as ed,Wu as fd,YR as gd,TZ as hd,MZ as id,RT as jd,TT as kd,Gu as ld,ete as md,cP as nd,dP as od,O as pd,Du as qd,Ka as rd,Bc as sd,xk as td,ez as ud,tz as vd,nz as wd,rz as xd,oz as yd,sz as zd,iz as Ad,az as Bd,Wm as Cd,lz as Dd,cz as Ed,dz as Fd,uz as Gd,$_ as Hd,O_ as Id,H as Jd,oX as Kd,Tt as Ld};
200
+ /*! Bundled license information:
201
+
202
+ lit-html/directives/map.js:
203
+ lit-html/directives/choose.js:
204
+ (**
205
+ * @license
206
+ * Copyright 2021 Google LLC
207
+ * SPDX-License-Identifier: BSD-3-Clause
208
+ *)
209
+
210
+ lit-html/async-directive.js:
211
+ (**
212
+ * @license
213
+ * Copyright 2017 Google LLC
214
+ * SPDX-License-Identifier: BSD-3-Clause
215
+ *)
216
+
217
+ lit-html/directives/ref.js:
218
+ (**
219
+ * @license
220
+ * Copyright 2020 Google LLC
221
+ * SPDX-License-Identifier: BSD-3-Clause
222
+ *)
223
+ */