@preventive/triage 1.0.0-alpha.34 → 1.0.0-alpha.35
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.
- package/out/client-managed.js +1 -1
- package/out/terminal.js +320 -212
- package/out/view.js +18 -18
- package/package.json +1 -1
package/out/view.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var Fz=Object.defineProperty;var $=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var uu=(e,t)=>{for(var n in t)Fz(e,n,{get:t[n],enumerable:!0})};var Ih,Lh,Rw,VE,pu,N,Qe,KE,Tw,Mw=$(()=>{Ih=globalThis,Lh=Ih.ShadowRoot&&(Ih.ShadyCSS===void 0||Ih.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Rw=Symbol(),VE=new WeakMap,pu=class{constructor(t,n,r){if(this._$cssResult$=!0,r!==Rw)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=n}get styleSheet(){let t=this.o,n=this.t;if(Lh&&t===void 0){let r=n!==void 0&&n.length===1;r&&(t=VE.get(n)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&VE.set(n,t))}return t}toString(){return this.cssText}},N=e=>new pu(typeof e=="string"?e:e+"",void 0,Rw),Qe=(e,...t)=>{let n=e.length===1?e[0]:t.reduce((r,o,i)=>r+(s=>{if(s._$cssResult$===!0)return s.cssText;if(typeof s=="number")return s;throw Error("Value passed to 'css' function must be a 'css' function result: "+s+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(o)+e[i+1],e[0]);return new pu(n,e,Rw)},KE=(e,t)=>{if(Lh)e.adoptedStyleSheets=t.map(n=>n instanceof CSSStyleSheet?n:n.styleSheet);else for(let n of t){let r=document.createElement("style"),o=Ih.litNonce;o!==void 0&&r.setAttribute("nonce",o),r.textContent=n.cssText,e.appendChild(r)}},Tw=Lh?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let n="";for(let r of t.cssRules)n+=r.cssText;return N(n)})(e):e});var Bz,Oz,Pz,Nz,Dz,zz,Fh,GE,Uz,jz,fu,Aw,YE,qE,ki,Bh=$(()=>{Mw();Mw();({is:Bz,defineProperty:Oz,getOwnPropertyDescriptor:Pz,getOwnPropertyNames:Nz,getOwnPropertySymbols:Dz,getPrototypeOf:zz}=Object),Fh=globalThis,GE=Fh.trustedTypes,Uz=GE?GE.emptyScript:"",jz=Fh.reactiveElementPolyfillSupport,fu=(e,t)=>e,Aw={toAttribute(e,t){switch(t){case Boolean:e=e?Uz:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},YE=(e,t)=>!Bz(e,t),qE={attribute:!0,type:String,converter:Aw,reflect:!1,useDefault:!1,hasChanged:YE};Symbol.metadata??=Symbol("metadata"),Fh.litPropertyMetadata??=new WeakMap;ki=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,n=qE){if(n.state&&(n.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((n=Object.create(n)).wrapped=!0),this.elementProperties.set(t,n),!n.noAccessor){let r=Symbol(),o=this.getPropertyDescriptor(t,r,n);o!==void 0&&Oz(this.prototype,t,o)}}static getPropertyDescriptor(t,n,r){let{get:o,set:i}=Pz(this.prototype,t)??{get(){return this[n]},set(s){this[n]=s}};return{get:o,set(s){let a=o?.call(this);i?.call(this,s),this.requestUpdate(t,a,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??qE}static _$Ei(){if(this.hasOwnProperty(fu("elementProperties")))return;let t=zz(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(fu("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(fu("properties"))){let n=this.properties,r=[...Nz(n),...Dz(n)];for(let o of r)this.createProperty(o,n[o])}let t=this[Symbol.metadata];if(t!==null){let n=litPropertyMetadata.get(t);if(n!==void 0)for(let[r,o]of n)this.elementProperties.set(r,o)}this._$Eh=new Map;for(let[n,r]of this.elementProperties){let o=this._$Eu(n,r);o!==void 0&&this._$Eh.set(o,n)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let n=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let o of r)n.unshift(Tw(o))}else t!==void 0&&n.push(Tw(t));return n}static _$Eu(t,n){let r=n.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,n=this.constructor.elementProperties;for(let r of n.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return KE(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,n,r){this._$AK(t,r)}_$ET(t,n){let r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){let i=(r.converter?.toAttribute!==void 0?r.converter:Aw).toAttribute(n,r.type);this._$Em=t,i==null?this.removeAttribute(o):this.setAttribute(o,i),this._$Em=null}}_$AK(t,n){let r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let i=r.getPropertyOptions(o),s=typeof i.converter=="function"?{fromAttribute:i.converter}:i.converter?.fromAttribute!==void 0?i.converter:Aw;this._$Em=o;let a=s.fromAttribute(n,i.type);this[o]=a??this._$Ej?.get(o)??a,this._$Em=null}}requestUpdate(t,n,r,o=!1,i){if(t!==void 0){let s=this.constructor;if(o===!1&&(i=this[t]),r??=s.getPropertyOptions(t),!((r.hasChanged??YE)(i,n)||r.useDefault&&r.reflect&&i===this._$Ej?.get(t)&&!this.hasAttribute(s._$Eu(t,r))))return;this.C(t,n,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,n,{useDefault:r,reflect:o,wrapped:i},s){r&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,s??n??this[t]),i!==!0||s!==void 0)||(this._$AL.has(t)||(this.hasUpdated||r||(n=void 0),this._$AL.set(t,n)),o===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(n){Promise.reject(n)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[o,i]of this._$Ep)this[o]=i;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[o,i]of r){let{wrapped:s}=i,a=this[o];s!==!0||this._$AL.has(o)||a===void 0||this.C(o,void 0,i,a)}}let t=!1,n=this._$AL;try{t=this.shouldUpdate(n),t?(this.willUpdate(n),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(n)):this._$EM()}catch(r){throw t=!1,this._$EM(),r}t&&this._$AE(n)}willUpdate(t){}_$AE(t){this._$EO?.forEach(n=>n.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(n=>this._$ET(n,this[n])),this._$EM()}updated(t){}firstUpdated(t){}};ki.elementStyles=[],ki.shadowRootOptions={mode:"open"},ki[fu("elementProperties")]=new Map,ki[fu("finalized")]=new Map,jz?.({ReactiveElement:ki}),(Fh.reactiveElementVersions??=[]).push("2.1.2")});function i6(e,t){if(!Ow(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return XE!==void 0?XE.createHTML(t):t}function _a(e,t,n=e,r){if(t===Tt)return t;let o=r!==void 0?n._$Co?.[r]:n._$Cl,i=gu(t)?void 0:t._$litDirective$;return o?.constructor!==i&&(o?._$AO?.(!1),i===void 0?o=void 0:(o=new i(e),o._$AT(e,n,r)),r!==void 0?(n._$Co??=[])[r]=o:n._$Cl=o),o!==void 0&&(t=_a(e,o._$AS(e,t.values),o,r)),t}var Lw,JE,Oh,XE,Fw,xi,Bw,Hz,Sa,mu,gu,Ow,r6,Iw,hu,ZE,QE,xa,e6,t6,o6,Pw,p,zt,Ere,Tt,b,n6,$a,s6,bu,Ph,ec,Ca,Nh,Dh,zh,Uh,a6,Wz,xe,Yr=$(()=>{Lw=globalThis,JE=e=>e,Oh=Lw.trustedTypes,XE=Oh?Oh.createPolicy("lit-html",{createHTML:e=>e}):void 0,Fw="$lit$",xi=`lit$${Math.random().toFixed(9).slice(2)}$`,Bw="?"+xi,Hz=`<${Bw}>`,Sa=document,mu=()=>Sa.createComment(""),gu=e=>e===null||typeof e!="object"&&typeof e!="function",Ow=Array.isArray,r6=e=>Ow(e)||typeof e?.[Symbol.iterator]=="function",Iw=`[
|
|
2
2
|
\f\r]`,hu=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,ZE=/-->/g,QE=/>/g,xa=RegExp(`>|${Iw}(?:([^\\s"'>=/]+)(${Iw}*=${Iw}*(?:[^
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),e6=/'/g,t6=/"/g,o6=/^(?:script|style|textarea|title)$/i,Pw=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),p=Pw(1),zt=Pw(2),Ere=Pw(3),Tt=Symbol.for("lit-noChange"),b=Symbol.for("lit-nothing"),n6=new WeakMap,$a=Sa.createTreeWalker(Sa,129);s6=(e,t)=>{let n=e.length-1,r=[],o,i=t===2?"<svg>":t===3?"<math>":"",s=hu;for(let a=0;a<n;a++){let l=e[a],d,u,f=-1,h=0;for(;h<l.length&&(s.lastIndex=h,u=s.exec(l),u!==null);)h=s.lastIndex,s===hu?u[1]==="!--"?s=ZE:u[1]!==void 0?s=QE:u[2]!==void 0?(o6.test(u[2])&&(o=RegExp("</"+u[2],"g")),s=xa):u[3]!==void 0&&(s=xa):s===xa?u[0]===">"?(s=o??hu,f=-1):u[1]===void 0?f=-2:(f=s.lastIndex-u[2].length,d=u[1],s=u[3]===void 0?xa:u[3]==='"'?t6:e6):s===t6||s===e6?s=xa:s===ZE||s===QE?s=hu:(s=xa,o=void 0);let m=s===xa&&e[a+1].startsWith("/>")?" ":"";i+=s===hu?l+Hz:f>=0?(r.push(d),l.slice(0,f)+Fw+l.slice(f)+xi+m):l+xi+(f===-2?a:m)}return[i6(e,i+(e[n]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},bu=class e{constructor({strings:t,_$litType$:n},r){let o;this.parts=[];let i=0,s=0,a=t.length-1,l=this.parts,[d,u]=s6(t,n);if(this.el=e.createElement(d,r),$a.currentNode=this.el.content,n===2||n===3){let f=this.el.content.firstChild;f.replaceWith(...f.childNodes)}for(;(o=$a.nextNode())!==null&&l.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let f of o.getAttributeNames())if(f.endsWith(Fw)){let h=u[s++],m=o.getAttribute(f).split(xi),g=/([.?@])?(.*)/.exec(h);l.push({type:1,index:i,name:g[2],strings:m,ctor:g[1]==="."?Nh:g[1]==="?"?Dh:g[1]==="@"?zh:Ca}),o.removeAttribute(f)}else f.startsWith(xi)&&(l.push({type:6,index:i}),o.removeAttribute(f));if(o6.test(o.tagName)){let f=o.textContent.split(xi),h=f.length-1;if(h>0){o.textContent=Oh?Oh.emptyScript:"";for(let m=0;m<h;m++)o.append(f[m],mu()),$a.nextNode(),l.push({type:2,index:++i});o.append(f[h],mu())}}}else if(o.nodeType===8)if(o.data===Bw)l.push({type:2,index:i});else{let f=-1;for(;(f=o.data.indexOf(xi,f+1))!==-1;)l.push({type:7,index:i}),f+=xi.length-1}i++}}static createElement(t,n){let r=Sa.createElement("template");return r.innerHTML=t,r}};Ph=class{constructor(t,n){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:n},parts:r}=this._$AD,o=(t?.creationScope??Sa).importNode(n,!0);$a.currentNode=o;let i=$a.nextNode(),s=0,a=0,l=r[0];for(;l!==void 0;){if(s===l.index){let d;l.type===2?d=new ec(i,i.nextSibling,this,t):l.type===1?d=new l.ctor(i,l.name,l.strings,this,t):l.type===6&&(d=new Uh(i,this,t)),this._$AV.push(d),l=r[++a]}s!==l?.index&&(i=$a.nextNode(),s++)}return $a.currentNode=Sa,o}p(t){let n=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,n),n+=r.strings.length-2):r._$AI(t[n])),n++}},ec=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,n,r,o){this.type=2,this._$AH=b,this._$AN=void 0,this._$AA=t,this._$AB=n,this._$AM=r,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,n=this._$AM;return n!==void 0&&t?.nodeType===11&&(t=n.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,n=this){t=_a(this,t,n),gu(t)?t===b||t==null||t===""?(this._$AH!==b&&this._$AR(),this._$AH=b):t!==this._$AH&&t!==Tt&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):r6(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==b&&gu(this._$AH)?this._$AA.nextSibling.data=t:this.T(Sa.createTextNode(t)),this._$AH=t}$(t){let{values:n,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=bu.createElement(i6(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===o)this._$AH.p(n);else{let i=new Ph(o,this),s=i.u(this.options);i.p(n),this.T(s),this._$AH=i}}_$AC(t){let n=n6.get(t.strings);return n===void 0&&n6.set(t.strings,n=new bu(t)),n}k(t){Ow(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,o=0;for(let i of t)o===n.length?n.push(r=new e(this.O(mu()),this.O(mu()),this,this.options)):r=n[o],r._$AI(i),o++;o<n.length&&(this._$AR(r&&r._$AB.nextSibling,o),n.length=o)}_$AR(t=this._$AA.nextSibling,n){for(this._$AP?.(!1,!0,n);t!==this._$AB;){let r=JE(t).nextSibling;JE(t).remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},Ca=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,n,r,o,i){this.type=1,this._$AH=b,this._$AN=void 0,this.element=t,this.name=n,this._$AM=o,this.options=i,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=b}_$AI(t,n=this,r,o){let i=this.strings,s=!1;if(i===void 0)t=_a(this,t,n,0),s=!gu(t)||t!==this._$AH&&t!==Tt,s&&(this._$AH=t);else{let a=t,l,d;for(t=i[0],l=0;l<i.length-1;l++)d=_a(this,a[r+l],n,l),d===Tt&&(d=this._$AH[l]),s||=!gu(d)||d!==this._$AH[l],d===b?t=b:t!==b&&(t+=(d??"")+i[l+1]),this._$AH[l]=d}s&&!o&&this.j(t)}j(t){t===b?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},Nh=class extends Ca{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===b?void 0:t}},Dh=class extends Ca{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==b)}},zh=class extends Ca{constructor(t,n,r,o,i){super(t,n,r,o,i),this.type=5}_$AI(t,n=this){if((t=_a(this,t,n,0)??b)===Tt)return;let r=this._$AH,o=t===b&&r!==b||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,i=t!==b&&(r===b||o);o&&this.element.removeEventListener(this.name,this,r),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},Uh=class{constructor(t,n,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){_a(this,t)}},a6={M:Fw,P:xi,A:Bw,C:1,L:s6,R:Ph,D:r6,V:_a,I:ec,H:Ca,N:Dh,U:zh,B:Nh,F:Uh},Wz=Lw.litHtmlPolyfillSupport;Wz?.(bu,ec),(Lw.litHtmlVersions??=[]).push("3.3.3");xe=(e,t,n)=>{let r=n?.renderBefore??t,o=r._$litPart$;if(o===void 0){let i=n?.renderBefore??null;r._$litPart$=o=new ec(t.insertBefore(mu(),i),i,void 0,n??{})}return o._$AI(e),o}});var Nw,fe,Vz,l6=$(()=>{Bh();Bh();Yr();Yr();Nw=globalThis,fe=class extends ki{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let n=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=xe(n,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Tt}};fe._$litElement$=!0,fe.finalized=!0,Nw.litElementHydrateSupport?.({LitElement:fe});Vz=Nw.litElementPolyfillSupport;Vz?.({LitElement:fe});(Nw.litElementVersions??=[]).push("4.2.2")});var c6=$(()=>{});var P=$(()=>{Bh();Yr();l6();c6()});var An,Er,Un,Ea=$(()=>{An={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Er=e=>(...t)=>({_$litDirective$:e,values:t}),Un=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,n,r){this._$Ct=t,this._$AM=n,this._$Ci=r}_$AS(t,n){return this.update(t,n)}update(t,n){return this.render(...n)}}});var Y,d6=$(()=>{Yr();Ea();Y=Er(class extends Un{constructor(e){if(super(e),e.type!==An.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(r=>r!=="")));for(let r in t)t[r]&&!this.nt?.has(r)&&this.st.add(r);return this.render(t)}let n=e.element.classList;for(let r of this.st)r in t||(n.remove(r),this.st.delete(r));for(let r in t){let o=!!t[r];o===this.st.has(r)||this.nt?.has(r)||(o?(n.add(r),this.st.add(r)):(n.remove(r),this.st.delete(r)))}return Tt}})});var ht=$(()=>{d6()});var Kz,u6,f6,p6,tc,es,Gz,nc,h6,jh,Hh=$(()=>{Yr();({I:Kz}=a6),u6=e=>e,f6=e=>e.strings===void 0,p6=()=>document.createComment(""),tc=(e,t,n)=>{let r=e._$AA.parentNode,o=t===void 0?e._$AB:t._$AA;if(n===void 0){let i=r.insertBefore(p6(),o),s=r.insertBefore(p6(),o);n=new Kz(i,s,e,e.options)}else{let i=n._$AB.nextSibling,s=n._$AM,a=s!==e;if(a){let l;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(l=e._$AU)!==s._$AU&&n._$AP(l)}if(i!==o||a){let l=n._$AA;for(;l!==i;){let d=u6(l).nextSibling;u6(r).insertBefore(l,o),l=d}}}return n},es=(e,t,n=e)=>(e._$AI(t,n),e),Gz={},nc=(e,t=Gz)=>e._$AH=t,h6=e=>e._$AH,jh=e=>{e._$AR(),e._$AA.remove()}});var m6,ve,g6=$(()=>{Yr();Ea();Hh();m6=(e,t,n)=>{let r=new Map;for(let o=t;o<=n;o++)r.set(e[o],o);return r},ve=Er(class extends Un{constructor(e){if(super(e),e.type!==An.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,n){let r;n===void 0?n=t:t!==void 0&&(r=t);let o=[],i=[],s=0;for(let a of e)o[s]=r?r(a,s):s,i[s]=n(a,s),s++;return{values:i,keys:o}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,r]){let o=h6(e),{values:i,keys:s}=this.dt(t,n,r);if(!Array.isArray(o))return this.ut=s,i;let a=this.ut??=[],l=[],d,u,f=0,h=o.length-1,m=0,g=i.length-1;for(;f<=h&&m<=g;)if(o[f]===null)f++;else if(o[h]===null)h--;else if(a[f]===s[m])l[m]=es(o[f],i[m]),f++,m++;else if(a[h]===s[g])l[g]=es(o[h],i[g]),h--,g--;else if(a[f]===s[g])l[g]=es(o[f],i[g]),tc(e,l[g+1],o[f]),f++,g--;else if(a[h]===s[m])l[m]=es(o[h],i[m]),tc(e,o[f],o[h]),h--,m++;else if(d===void 0&&(d=m6(s,m,g),u=m6(a,f,h)),d.has(a[f]))if(d.has(a[h])){let y=u.get(s[m]),w=y!==void 0?o[y]:null;if(w===null){let x=tc(e,o[f]);es(x,i[m]),l[m]=x}else l[m]=es(w,i[m]),tc(e,o[f],w),o[y]=null;m++}else jh(o[h]),h--;else jh(o[f]),f++;for(;m<=g;){let y=tc(e,l[g+1]);es(y,i[m]),l[m++]=y}for(;f<=h;){let y=o[f++];y!==null&&jh(y)}return this.ut=s,nc(e,l),Tt}})});var un=$(()=>{g6()});var b6,qz,Oe,y6=$(()=>{Yr();Ea();b6="important",qz=" !"+b6,Oe=Er(class extends Un{constructor(e){if(super(e),e.type!==An.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return r==null?t:t+`${n=n.includes("-")?n:n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`},"")}update(e,[t]){let{style:n}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let r of this.ft)t[r]==null&&(this.ft.delete(r),r.includes("-")?n.removeProperty(r):n[r]=null);for(let r in t){let o=t[r];if(o!=null){this.ft.add(r);let i=typeof o=="string"&&o.endsWith(qz);r.includes("-")||i?n.setProperty(r,i?o.slice(0,-11):o,i?b6:""):n[r]=o}}return Tt}})});var So=$(()=>{y6()});function Yz(e){jw.set(e,new Map)}function Jz(e,{target:t,key:n,type:r}){r==="iterate"&&(n=x6);let o=jw.get(t),i=o.get(n);i||(i=new Set,o.set(n,i)),i.has(e)||(i.add(e),e.cleaners.push(i))}function Xz({target:e,key:t,type:n}){let r=jw.get(e),o=new Set;if(n==="clear"?r.forEach((i,s)=>{Dw(o,r,s)}):Dw(o,r,t),n==="add"||n==="delete"||n==="clear"){let i=Array.isArray(e)?"length":x6;Dw(o,r,i)}return o}function Dw(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function $6(e){e.cleaners&&e.cleaners.forEach(Zz,e),e.cleaners=[]}function Zz(e){e.delete(this)}function Qz(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(rc.indexOf(e)===-1){$6(e);try{return rc.push(e),Reflect.apply(t,n,r)}finally{rc.pop()}}}function Jr(e){let t=rc[rc.length-1];t&&(S6(t,e),Jz(t,e))}function ts(e){Xz(e).forEach(eU,e)}function eU(e){S6(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function S6(e,t){if(e.debugger&&!zw)try{zw=!0,e.debugger(t)}finally{zw=!1}}function _6(){return rc.length>0}function C6(e,t={}){let n=e[v6]?e:function r(){return Qz(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[v6]=!0,t.lazy||n(),n}function Hw(e){e.unobserved||(e.unobserved=!0,$6(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}function Vh(e){let t=Kh.get(e);return _6()&&typeof e=="object"&&e!==null?t||Gh(e):t||e}function Uw(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Vh(o[1]):o=Vh(o)),{done:r,value:o}},e}function nU({constructor:e}){return!(typeof e=="function"&&e.name in k6&&k6[e.name]===e)||E6.has(e)}function rU(e){return E6.get(e.constructor)}function iU(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&oU.has(t))return r;Jr({target:e,key:t,receiver:n,type:"get"});let o=Kh.get(r);if(_6()&&typeof r=="object"&&r!==null){if(o)return o;let i=Reflect.getOwnPropertyDescriptor(e,t);if(!i||!(i.writable===!1&&i.configurable===!1))return Gh(r)}return o||r}function sU(e,t){let n=Reflect.has(e,t);return Jr({target:e,key:t,type:"has"}),n}function aU(e){return Jr({target:e,type:"iterate"}),Reflect.ownKeys(e)}function lU(e,t,n,r){typeof n=="object"&&n!==null&&(n=pn.get(n)||n);let o=R6.call(e,t),i=e[t],s=Reflect.set(e,t,n,r);return e!==pn.get(r)||(o?n!==i&&ts({target:e,key:t,value:n,oldValue:i,receiver:r,type:"set"}):ts({target:e,key:t,value:n,receiver:r,type:"add"})),s}function cU(e,t){let n=R6.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&ts({target:e,key:t,oldValue:r,type:"delete"}),o}function Gh(e={}){return pn.has(e)||!nU(e)?e:Kh.get(e)||uU(e)}function uU(e){let t=rU(e)||dU,n=new Proxy(e,t);return Kh.set(e,n),pn.set(n,e),Yz(e),n}var jw,x6,rc,zw,v6,pn,Kh,tU,w6,Wh,k6,E6,R6,oU,dU,T6=$(()=>{jw=new WeakMap,x6=Symbol("iteration key");rc=[],zw=!1;v6=Symbol("is reaction");pn=new WeakMap,Kh=new WeakMap,tU=Object.prototype.hasOwnProperty;w6={has(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"get"}),Vh(n.get.apply(t,arguments))},add(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||ts({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=pn.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),i=r.get.call(n,e),s=r.set.apply(n,arguments);return o?t!==i&&ts({target:n,key:e,value:t,oldValue:i,type:"set"}):ts({target:n,key:e,value:t,type:"add"}),s},delete(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,i=n.delete.apply(t,arguments);return r&&ts({target:t,key:e,oldValue:o,type:"delete"}),i},clear(){let e=pn.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&&ts({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=pn.get(this),r=Reflect.getPrototypeOf(this);Jr({target:n,type:"iterate"});let o=(i,...s)=>e(Vh(i),...s);return r.forEach.call(n,o,...t)},keys(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return Uw(n,!1)},entries(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return Uw(n,!0)},[Symbol.iterator](){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return Uw(n,e instanceof Map)},get size(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Wh={get(e,t,n){return e=tU.call(w6,t)?w6:e,Reflect.get(e,t,n)}},k6=typeof window=="object"?window:Function("return this")(),E6=new Map([[Map,Wh],[Set,Wh],[WeakMap,Wh],[WeakSet,Wh],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);R6=Object.prototype.hasOwnProperty,oU=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));dU={get:iU,has:sU,ownKeys:aU,set:lU,deleteProperty:cU}});function Ra(e){let t=!0,n=C6(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw Hw(n),r}return()=>Hw(n)}var jn,$i=$(()=>{T6();jn=Gh});var M6=$(()=>{});var A6=$(()=>{M6()});var ce,nt=$(()=>{P();$i();P();un();A6();ce=class extends fe{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Ra(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Ra(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()()}}});function Si(e,t){let n=URL.createObjectURL(e),r=document.createElement("span");r.style.display="none",xe(p`<a href="${n}" download="${t}"></a>`,r),document.body.append(r),r.firstElementChild.click(),r.remove(),URL.revokeObjectURL(n)}function oc(e){return new Error("Another dialog is already open. Close it and try again.",{cause:e})}var mt,V,I6,nr=$(()=>{"use strict";P();mt=document.querySelector("#drop-zone"),V=document.querySelector("#report"),I6=document.querySelector("app-sidebar")});function Ww(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return pU.encode(e)}var pU,L6=$(()=>{pU=new TextEncoder});async function Vw(e){let t=typeof e=="string"?Ww(e):e,n=new Uint8Array(await crypto.subtle.digest("SHA-512",t));return`sha512-${btoa(String.fromCodePoint(...n))}`}async function fU(e){let t=Ww(JSON.stringify(e)),n=await crypto.subtle.digest("SHA-256",t),r=new Uint8Array(n,0,16);r[6]=r[6]&15|64,r[8]=r[8]&63|128;let o=Array.from(r,i=>i.toString(16).padStart(2,"0")).join("");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function Kw(e){if(typeof crypto?.subtle?.digest!="function")return null;let t=yu(e);try{return await fU(t)}catch{return null}}function yu(e){if(e._idBasis)return e._idBasis;let{severity:t,description:n}=e;return e.fileHash?{severity:t,description:n,fileHash:e.fileHash}:e.location?{severity:t,description:n,location:e.location}:{severity:t,description:n,file:e.file,line:e.line}}var vu=$(()=>{L6()});function qh(e,t,n=t){let r=/^ */u.exec(e)[0].length;if(r>3)return null;if(t&&n&&mU.test(e))return!0;let o=B6.exec(e);if(o&&!(o[2][0]==="`"&&o[3].includes("`")))return{fence:o[2]};let i=e.slice(r);for(let[l,d,u]of bU){let f=l.exec(i);if(f)return{html:d,close:typeof u=="function"?u(f):u}}if(!t&&yU.test(i))return{html:O6,close:null};let s=F6.test(e)?null:Ta.exec(e);if(s&&!(t&&n&&/^ *(?:\d*[02-9]|\d+\d)[.)]/u.test(s[0]))){let l=/ +$/u.exec(s[0])[0].length;return{item:l>4?s[0].length-l+1:s[0].length}}let a=F6.test(e)||t&&n?null:gU.exec(e);return a?{item:a[0].trimEnd().length+1}:hU.test(e)||null}function fn(e){return Yh(e).ranges}function vU(e,t){let n=e.replace(/^(?: {0,3}> ?)+/u,""),r=qh(n,t);for(;r?.item;)n=n.slice(r.item),r=qh(n,!1);return n.trim()!==""&&!r&&/^ */u.exec(n)[0].length<4}function Yh(e){let t=[],n=-1,r="",o=null,i=0,s=[],a=!1,l=!1,d=!1,u=0;for(let h of e.split(`
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),e6=/'/g,t6=/"/g,o6=/^(?:script|style|textarea|title)$/i,Pw=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),p=Pw(1),zt=Pw(2),Ere=Pw(3),Tt=Symbol.for("lit-noChange"),b=Symbol.for("lit-nothing"),n6=new WeakMap,$a=Sa.createTreeWalker(Sa,129);s6=(e,t)=>{let n=e.length-1,r=[],o,i=t===2?"<svg>":t===3?"<math>":"",s=hu;for(let a=0;a<n;a++){let l=e[a],d,u,f=-1,h=0;for(;h<l.length&&(s.lastIndex=h,u=s.exec(l),u!==null);)h=s.lastIndex,s===hu?u[1]==="!--"?s=ZE:u[1]!==void 0?s=QE:u[2]!==void 0?(o6.test(u[2])&&(o=RegExp("</"+u[2],"g")),s=xa):u[3]!==void 0&&(s=xa):s===xa?u[0]===">"?(s=o??hu,f=-1):u[1]===void 0?f=-2:(f=s.lastIndex-u[2].length,d=u[1],s=u[3]===void 0?xa:u[3]==='"'?t6:e6):s===t6||s===e6?s=xa:s===ZE||s===QE?s=hu:(s=xa,o=void 0);let m=s===xa&&e[a+1].startsWith("/>")?" ":"";i+=s===hu?l+Hz:f>=0?(r.push(d),l.slice(0,f)+Fw+l.slice(f)+xi+m):l+xi+(f===-2?a:m)}return[i6(e,i+(e[n]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},bu=class e{constructor({strings:t,_$litType$:n},r){let o;this.parts=[];let i=0,s=0,a=t.length-1,l=this.parts,[d,u]=s6(t,n);if(this.el=e.createElement(d,r),$a.currentNode=this.el.content,n===2||n===3){let f=this.el.content.firstChild;f.replaceWith(...f.childNodes)}for(;(o=$a.nextNode())!==null&&l.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let f of o.getAttributeNames())if(f.endsWith(Fw)){let h=u[s++],m=o.getAttribute(f).split(xi),g=/([.?@])?(.*)/.exec(h);l.push({type:1,index:i,name:g[2],strings:m,ctor:g[1]==="."?Nh:g[1]==="?"?Dh:g[1]==="@"?zh:Ca}),o.removeAttribute(f)}else f.startsWith(xi)&&(l.push({type:6,index:i}),o.removeAttribute(f));if(o6.test(o.tagName)){let f=o.textContent.split(xi),h=f.length-1;if(h>0){o.textContent=Oh?Oh.emptyScript:"";for(let m=0;m<h;m++)o.append(f[m],mu()),$a.nextNode(),l.push({type:2,index:++i});o.append(f[h],mu())}}}else if(o.nodeType===8)if(o.data===Bw)l.push({type:2,index:i});else{let f=-1;for(;(f=o.data.indexOf(xi,f+1))!==-1;)l.push({type:7,index:i}),f+=xi.length-1}i++}}static createElement(t,n){let r=Sa.createElement("template");return r.innerHTML=t,r}};Ph=class{constructor(t,n){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:n},parts:r}=this._$AD,o=(t?.creationScope??Sa).importNode(n,!0);$a.currentNode=o;let i=$a.nextNode(),s=0,a=0,l=r[0];for(;l!==void 0;){if(s===l.index){let d;l.type===2?d=new ec(i,i.nextSibling,this,t):l.type===1?d=new l.ctor(i,l.name,l.strings,this,t):l.type===6&&(d=new Uh(i,this,t)),this._$AV.push(d),l=r[++a]}s!==l?.index&&(i=$a.nextNode(),s++)}return $a.currentNode=Sa,o}p(t){let n=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,n),n+=r.strings.length-2):r._$AI(t[n])),n++}},ec=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,n,r,o){this.type=2,this._$AH=b,this._$AN=void 0,this._$AA=t,this._$AB=n,this._$AM=r,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,n=this._$AM;return n!==void 0&&t?.nodeType===11&&(t=n.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,n=this){t=_a(this,t,n),gu(t)?t===b||t==null||t===""?(this._$AH!==b&&this._$AR(),this._$AH=b):t!==this._$AH&&t!==Tt&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):r6(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==b&&gu(this._$AH)?this._$AA.nextSibling.data=t:this.T(Sa.createTextNode(t)),this._$AH=t}$(t){let{values:n,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=bu.createElement(i6(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===o)this._$AH.p(n);else{let i=new Ph(o,this),s=i.u(this.options);i.p(n),this.T(s),this._$AH=i}}_$AC(t){let n=n6.get(t.strings);return n===void 0&&n6.set(t.strings,n=new bu(t)),n}k(t){Ow(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,o=0;for(let i of t)o===n.length?n.push(r=new e(this.O(mu()),this.O(mu()),this,this.options)):r=n[o],r._$AI(i),o++;o<n.length&&(this._$AR(r&&r._$AB.nextSibling,o),n.length=o)}_$AR(t=this._$AA.nextSibling,n){for(this._$AP?.(!1,!0,n);t!==this._$AB;){let r=JE(t).nextSibling;JE(t).remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},Ca=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,n,r,o,i){this.type=1,this._$AH=b,this._$AN=void 0,this.element=t,this.name=n,this._$AM=o,this.options=i,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=b}_$AI(t,n=this,r,o){let i=this.strings,s=!1;if(i===void 0)t=_a(this,t,n,0),s=!gu(t)||t!==this._$AH&&t!==Tt,s&&(this._$AH=t);else{let a=t,l,d;for(t=i[0],l=0;l<i.length-1;l++)d=_a(this,a[r+l],n,l),d===Tt&&(d=this._$AH[l]),s||=!gu(d)||d!==this._$AH[l],d===b?t=b:t!==b&&(t+=(d??"")+i[l+1]),this._$AH[l]=d}s&&!o&&this.j(t)}j(t){t===b?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},Nh=class extends Ca{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===b?void 0:t}},Dh=class extends Ca{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==b)}},zh=class extends Ca{constructor(t,n,r,o,i){super(t,n,r,o,i),this.type=5}_$AI(t,n=this){if((t=_a(this,t,n,0)??b)===Tt)return;let r=this._$AH,o=t===b&&r!==b||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,i=t!==b&&(r===b||o);o&&this.element.removeEventListener(this.name,this,r),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},Uh=class{constructor(t,n,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){_a(this,t)}},a6={M:Fw,P:xi,A:Bw,C:1,L:s6,R:Ph,D:r6,V:_a,I:ec,H:Ca,N:Dh,U:zh,B:Nh,F:Uh},Wz=Lw.litHtmlPolyfillSupport;Wz?.(bu,ec),(Lw.litHtmlVersions??=[]).push("3.3.3");xe=(e,t,n)=>{let r=n?.renderBefore??t,o=r._$litPart$;if(o===void 0){let i=n?.renderBefore??null;r._$litPart$=o=new ec(t.insertBefore(mu(),i),i,void 0,n??{})}return o._$AI(e),o}});var Nw,he,Vz,l6=$(()=>{Bh();Bh();Yr();Yr();Nw=globalThis,he=class extends ki{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let n=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=xe(n,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Tt}};he._$litElement$=!0,he.finalized=!0,Nw.litElementHydrateSupport?.({LitElement:he});Vz=Nw.litElementPolyfillSupport;Vz?.({LitElement:he});(Nw.litElementVersions??=[]).push("4.2.2")});var c6=$(()=>{});var P=$(()=>{Bh();Yr();l6();c6()});var An,Er,Un,Ea=$(()=>{An={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Er=e=>(...t)=>({_$litDirective$:e,values:t}),Un=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,n,r){this._$Ct=t,this._$AM=n,this._$Ci=r}_$AS(t,n){return this.update(t,n)}update(t,n){return this.render(...n)}}});var Y,d6=$(()=>{Yr();Ea();Y=Er(class extends Un{constructor(e){if(super(e),e.type!==An.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(r=>r!=="")));for(let r in t)t[r]&&!this.nt?.has(r)&&this.st.add(r);return this.render(t)}let n=e.element.classList;for(let r of this.st)r in t||(n.remove(r),this.st.delete(r));for(let r in t){let o=!!t[r];o===this.st.has(r)||this.nt?.has(r)||(o?(n.add(r),this.st.add(r)):(n.remove(r),this.st.delete(r)))}return Tt}})});var ht=$(()=>{d6()});var Kz,u6,f6,p6,tc,es,Gz,nc,h6,jh,Hh=$(()=>{Yr();({I:Kz}=a6),u6=e=>e,f6=e=>e.strings===void 0,p6=()=>document.createComment(""),tc=(e,t,n)=>{let r=e._$AA.parentNode,o=t===void 0?e._$AB:t._$AA;if(n===void 0){let i=r.insertBefore(p6(),o),s=r.insertBefore(p6(),o);n=new Kz(i,s,e,e.options)}else{let i=n._$AB.nextSibling,s=n._$AM,a=s!==e;if(a){let l;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(l=e._$AU)!==s._$AU&&n._$AP(l)}if(i!==o||a){let l=n._$AA;for(;l!==i;){let d=u6(l).nextSibling;u6(r).insertBefore(l,o),l=d}}}return n},es=(e,t,n=e)=>(e._$AI(t,n),e),Gz={},nc=(e,t=Gz)=>e._$AH=t,h6=e=>e._$AH,jh=e=>{e._$AR(),e._$AA.remove()}});var m6,ve,g6=$(()=>{Yr();Ea();Hh();m6=(e,t,n)=>{let r=new Map;for(let o=t;o<=n;o++)r.set(e[o],o);return r},ve=Er(class extends Un{constructor(e){if(super(e),e.type!==An.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,n){let r;n===void 0?n=t:t!==void 0&&(r=t);let o=[],i=[],s=0;for(let a of e)o[s]=r?r(a,s):s,i[s]=n(a,s),s++;return{values:i,keys:o}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,r]){let o=h6(e),{values:i,keys:s}=this.dt(t,n,r);if(!Array.isArray(o))return this.ut=s,i;let a=this.ut??=[],l=[],d,u,f=0,h=o.length-1,m=0,g=i.length-1;for(;f<=h&&m<=g;)if(o[f]===null)f++;else if(o[h]===null)h--;else if(a[f]===s[m])l[m]=es(o[f],i[m]),f++,m++;else if(a[h]===s[g])l[g]=es(o[h],i[g]),h--,g--;else if(a[f]===s[g])l[g]=es(o[f],i[g]),tc(e,l[g+1],o[f]),f++,g--;else if(a[h]===s[m])l[m]=es(o[h],i[m]),tc(e,o[f],o[h]),h--,m++;else if(d===void 0&&(d=m6(s,m,g),u=m6(a,f,h)),d.has(a[f]))if(d.has(a[h])){let y=u.get(s[m]),w=y!==void 0?o[y]:null;if(w===null){let x=tc(e,o[f]);es(x,i[m]),l[m]=x}else l[m]=es(w,i[m]),tc(e,o[f],w),o[y]=null;m++}else jh(o[h]),h--;else jh(o[f]),f++;for(;m<=g;){let y=tc(e,l[g+1]);es(y,i[m]),l[m++]=y}for(;f<=h;){let y=o[f++];y!==null&&jh(y)}return this.ut=s,nc(e,l),Tt}})});var un=$(()=>{g6()});var b6,qz,Oe,y6=$(()=>{Yr();Ea();b6="important",qz=" !"+b6,Oe=Er(class extends Un{constructor(e){if(super(e),e.type!==An.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return r==null?t:t+`${n=n.includes("-")?n:n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`},"")}update(e,[t]){let{style:n}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let r of this.ft)t[r]==null&&(this.ft.delete(r),r.includes("-")?n.removeProperty(r):n[r]=null);for(let r in t){let o=t[r];if(o!=null){this.ft.add(r);let i=typeof o=="string"&&o.endsWith(qz);r.includes("-")||i?n.setProperty(r,i?o.slice(0,-11):o,i?b6:""):n[r]=o}}return Tt}})});var So=$(()=>{y6()});function Yz(e){jw.set(e,new Map)}function Jz(e,{target:t,key:n,type:r}){r==="iterate"&&(n=x6);let o=jw.get(t),i=o.get(n);i||(i=new Set,o.set(n,i)),i.has(e)||(i.add(e),e.cleaners.push(i))}function Xz({target:e,key:t,type:n}){let r=jw.get(e),o=new Set;if(n==="clear"?r.forEach((i,s)=>{Dw(o,r,s)}):Dw(o,r,t),n==="add"||n==="delete"||n==="clear"){let i=Array.isArray(e)?"length":x6;Dw(o,r,i)}return o}function Dw(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function $6(e){e.cleaners&&e.cleaners.forEach(Zz,e),e.cleaners=[]}function Zz(e){e.delete(this)}function Qz(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(rc.indexOf(e)===-1){$6(e);try{return rc.push(e),Reflect.apply(t,n,r)}finally{rc.pop()}}}function Jr(e){let t=rc[rc.length-1];t&&(S6(t,e),Jz(t,e))}function ts(e){Xz(e).forEach(eU,e)}function eU(e){S6(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function S6(e,t){if(e.debugger&&!zw)try{zw=!0,e.debugger(t)}finally{zw=!1}}function _6(){return rc.length>0}function C6(e,t={}){let n=e[v6]?e:function r(){return Qz(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[v6]=!0,t.lazy||n(),n}function Hw(e){e.unobserved||(e.unobserved=!0,$6(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}function Vh(e){let t=Kh.get(e);return _6()&&typeof e=="object"&&e!==null?t||Gh(e):t||e}function Uw(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Vh(o[1]):o=Vh(o)),{done:r,value:o}},e}function nU({constructor:e}){return!(typeof e=="function"&&e.name in k6&&k6[e.name]===e)||E6.has(e)}function rU(e){return E6.get(e.constructor)}function iU(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&oU.has(t))return r;Jr({target:e,key:t,receiver:n,type:"get"});let o=Kh.get(r);if(_6()&&typeof r=="object"&&r!==null){if(o)return o;let i=Reflect.getOwnPropertyDescriptor(e,t);if(!i||!(i.writable===!1&&i.configurable===!1))return Gh(r)}return o||r}function sU(e,t){let n=Reflect.has(e,t);return Jr({target:e,key:t,type:"has"}),n}function aU(e){return Jr({target:e,type:"iterate"}),Reflect.ownKeys(e)}function lU(e,t,n,r){typeof n=="object"&&n!==null&&(n=pn.get(n)||n);let o=R6.call(e,t),i=e[t],s=Reflect.set(e,t,n,r);return e!==pn.get(r)||(o?n!==i&&ts({target:e,key:t,value:n,oldValue:i,receiver:r,type:"set"}):ts({target:e,key:t,value:n,receiver:r,type:"add"})),s}function cU(e,t){let n=R6.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&ts({target:e,key:t,oldValue:r,type:"delete"}),o}function Gh(e={}){return pn.has(e)||!nU(e)?e:Kh.get(e)||uU(e)}function uU(e){let t=rU(e)||dU,n=new Proxy(e,t);return Kh.set(e,n),pn.set(n,e),Yz(e),n}var jw,x6,rc,zw,v6,pn,Kh,tU,w6,Wh,k6,E6,R6,oU,dU,T6=$(()=>{jw=new WeakMap,x6=Symbol("iteration key");rc=[],zw=!1;v6=Symbol("is reaction");pn=new WeakMap,Kh=new WeakMap,tU=Object.prototype.hasOwnProperty;w6={has(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"get"}),Vh(n.get.apply(t,arguments))},add(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||ts({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=pn.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),i=r.get.call(n,e),s=r.set.apply(n,arguments);return o?t!==i&&ts({target:n,key:e,value:t,oldValue:i,type:"set"}):ts({target:n,key:e,value:t,type:"add"}),s},delete(e){let t=pn.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,i=n.delete.apply(t,arguments);return r&&ts({target:t,key:e,oldValue:o,type:"delete"}),i},clear(){let e=pn.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&&ts({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=pn.get(this),r=Reflect.getPrototypeOf(this);Jr({target:n,type:"iterate"});let o=(i,...s)=>e(Vh(i),...s);return r.forEach.call(n,o,...t)},keys(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return Uw(n,!1)},entries(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return Uw(n,!0)},[Symbol.iterator](){let e=pn.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return Uw(n,e instanceof Map)},get size(){let e=pn.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Wh={get(e,t,n){return e=tU.call(w6,t)?w6:e,Reflect.get(e,t,n)}},k6=typeof window=="object"?window:Function("return this")(),E6=new Map([[Map,Wh],[Set,Wh],[WeakMap,Wh],[WeakSet,Wh],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);R6=Object.prototype.hasOwnProperty,oU=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));dU={get:iU,has:sU,ownKeys:aU,set:lU,deleteProperty:cU}});function Ra(e){let t=!0,n=C6(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw Hw(n),r}return()=>Hw(n)}var jn,$i=$(()=>{T6();jn=Gh});var M6=$(()=>{});var A6=$(()=>{M6()});var ce,nt=$(()=>{P();$i();P();un();A6();ce=class extends he{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Ra(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Ra(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()()}}});function Si(e,t){let n=URL.createObjectURL(e),r=document.createElement("span");r.style.display="none",xe(p`<a href="${n}" download="${t}"></a>`,r),document.body.append(r),r.firstElementChild.click(),r.remove(),URL.revokeObjectURL(n)}function oc(e){return new Error("Another dialog is already open. Close it and try again.",{cause:e})}var mt,V,I6,nr=$(()=>{"use strict";P();mt=document.querySelector("#drop-zone"),V=document.querySelector("#report"),I6=document.querySelector("app-sidebar")});function Ww(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return pU.encode(e)}var pU,L6=$(()=>{pU=new TextEncoder});async function Vw(e){let t=typeof e=="string"?Ww(e):e,n=new Uint8Array(await crypto.subtle.digest("SHA-512",t));return`sha512-${btoa(String.fromCodePoint(...n))}`}async function fU(e){let t=Ww(JSON.stringify(e)),n=await crypto.subtle.digest("SHA-256",t),r=new Uint8Array(n,0,16);r[6]=r[6]&15|64,r[8]=r[8]&63|128;let o=Array.from(r,i=>i.toString(16).padStart(2,"0")).join("");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function Kw(e){if(typeof crypto?.subtle?.digest!="function")return null;let t=yu(e);try{return await fU(t)}catch{return null}}function yu(e){if(e._idBasis)return e._idBasis;let{severity:t,description:n}=e;return e.fileHash?{severity:t,description:n,fileHash:e.fileHash}:e.location?{severity:t,description:n,location:e.location}:{severity:t,description:n,file:e.file,line:e.line}}var vu=$(()=>{L6()});function qh(e,t,n=t){let r=/^ */u.exec(e)[0].length;if(r>3)return null;if(t&&n&&mU.test(e))return!0;let o=B6.exec(e);if(o&&!(o[2][0]==="`"&&o[3].includes("`")))return{fence:o[2]};let i=e.slice(r);for(let[l,d,u]of bU){let f=l.exec(i);if(f)return{html:d,close:typeof u=="function"?u(f):u}}if(!t&&yU.test(i))return{html:O6,close:null};let s=F6.test(e)?null:Ta.exec(e);if(s&&!(t&&n&&/^ *(?:\d*[02-9]|\d+\d)[.)]/u.test(s[0]))){let l=/ +$/u.exec(s[0])[0].length;return{item:l>4?s[0].length-l+1:s[0].length}}let a=F6.test(e)||t&&n?null:gU.exec(e);return a?{item:a[0].trimEnd().length+1}:hU.test(e)||null}function fn(e){return Yh(e).ranges}function vU(e,t){let n=e.replace(/^(?: {0,3}> ?)+/u,""),r=qh(n,t);for(;r?.item;)n=n.slice(r.item),r=qh(n,!1);return n.trim()!==""&&!r&&/^ */u.exec(n)[0].length<4}function Yh(e){let t=[],n=-1,r="",o=null,i=0,s=[],a=!1,l=!1,d=!1,u=0;for(let h of e.split(`
|
|
4
4
|
`)){let m=u;u+=h.length+1;let g=/^ */u.exec(h)[0].length;if(n!==-1||o){let S=i>0&&h.trim()!==""&&g<i,C=!S&&(o?o.ends.test(h):g<=i+3&&P6(r,h));if((S||C)&&(n!==-1&&t.push([n,S?m-1:m+h.length]),n=-1,o=null),!S)continue}if(!h.trim()){d&&s.pop(),d=!1,a=!1;continue}let y=s.length;for(;y>0&&g<s[y-1];)y--;let w=y>0?s[y-1]:0,x=h.slice(w),v=qh(x,a,y===s.length&&!l);if(a&&!v)continue;for(s.length=y;v?.item;)w+=v.item,x=x.slice(v.item),s.push(w),v=qh(x,!1);d=x.trim()==="",v?.fence?[n,r,i]=[m,v.fence,w]:v?.html&&([o,i]=[v.html.test(x)?null:{ends:v.html,close:v.close},w]);let k=a&&l;l=/^ {0,3}>/u.test(x),a=l?vU(x,k):!v&&!d&&/^ */u.exec(x)[0].length<4}n!==-1&&t.push([n,e.length]);let f=n===-1?o?.close:r;return{ranges:t,closer:f?" ".repeat(i)+f:null}}function P6(e,t){let n=B6.exec(t);return n!==null&&n[2][0]===e[0]&&n[2].length>=e.length&&!n[3].trim()}function Xr(e,t){let n=0,r=e.length;for(;n<r;){let o=n+r>>>1;e[o][1]<=t?n=o+1:r=o}return n<e.length&&t>=e[n][0]}var B6,hU,F6,mU,Ta,gU,O6,bU,yU,Gw=$(()=>{B6=/^( *)(`{3,}|~{3,})(.*)$/u,hU=/^ {0,3}(?:#{1,6}(?:[ \t]|$)|>|([-*_])(?:[ \t]*\1){2,}[ \t]*$)/u,F6=/^ {0,3}([-*_])(?:[ \t]*\1){2,}[ \t]*$/u,mU=/^ {0,3}(?:=+|-+)[ \t]*$/u,Ta=/^( *)(?:[-*+]|\d{1,9}[.)]) +(?=\S)/u,gU=/^ *(?:[-*+]|\d{1,9}[.)])[ \t]*$/u,O6=/^\s*$/u,bU=[[/^<(script|pre|textarea|style)(?:\s|>|$)/iu,/<\/(?:script|pre|textarea|style)>/iu,e=>`</${e[1].toLowerCase()}>`],[/^<!--/u,/-->/u,"-->"],[/^<\?/u,/\?>/u,"?>"],[/^<![A-Za-z]/u,/>/u,"<!-- -->"],[/^<!\[CDATA\[/u,/\]\]>/u,"]]>"],[/^<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|search|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/iu,O6,null]],yU=/^(?:<[A-Za-z][\dA-Za-z-]*(?:\s+[:A-Z_a-z][\w.:-]*(?:\s*=\s*(?:[^\s"'<=>`]+|'[^']*'|"[^"]*"))?)*\s*\/?>|<\/[A-Za-z][\dA-Za-z-]*\s*>)\s*$/u});function Hn(e){return String(e??"").replaceAll(/\r\n?/gu,`
|
|
5
5
|
`)}function ic(e){return/^[0-9a-f]{7,64}$/iu.test(e)}function D6(e,t){let n=fn(e);return[...e.matchAll(t)].filter(r=>!Xr(n,r.index))}function sc(e,t){let n=D6(e,t);return[e.slice(0,n[0]?.index),...n.map((r,o)=>e.slice(r.index+r[0].length,n[o+1]?.index))]}function rs(e,t){let n=D6(e,t);return{head:e.slice(0,n[0]?.index),subs:n.map((r,o)=>({heading:r[1],body:e.slice(r.index+r[0].length+1,n[o+1]?.index)}))}}function os(e,t){return rs(e,t).subs}function Ma(e){let t=e.indexOf(`
|
|
6
6
|
`);return t===-1?{title:e.trim(),body:""}:{title:e.slice(0,t).trim(),body:e.slice(t+1)}}function ku(e){let t=e.split(`
|
|
@@ -99,8 +99,8 @@ ${r}`),a=zc(e,o,s).decrypt(i);if(a.length<2)throw new Error(`objstore plaintext
|
|
|
99
99
|
|
|
100
100
|
`))>=0;){let o=this.buf.slice(0,r);this.buf=this.buf.slice(r+2);let i="",s=[];for(let a of o.split(`
|
|
101
101
|
`))if(!a.startsWith(":")){if(a.startsWith("event:")){i=a.slice(6).trim();continue}if(a.startsWith("data:")){s.push(a.slice(5).replace(/^ /u,""));continue}}s.length!==0&&n.push({event:i,data:s.join(`
|
|
102
|
-
`)})}return n}},Bg=class e extends EventTarget{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=e.CONNECTING;OPEN=e.OPEN;CLOSING=e.CLOSING;CLOSED=e.CLOSED;readyState=e.CONNECTING;baseUrl;sessionId=null;cachedPassword=null;outbound=[];flushTimer=null;inFlightPost=null;activeReaders=new Set;fetchAbort=new AbortController;postSeq=0;lastDispatchedSeq=0;downstreamWatchdog=null;constructor(t){super(),this.baseUrl=Ak(t),this.scheduleFlush(!0)}send(t){if(this.readyState===e.CLOSED)throw new Error("sse-transport: send on closed transport");let n;try{n=JSON.parse(t)}catch(r){throw new Error(`sse-transport: send received non-JSON payload: ${r.message}`,{cause:r})}if(n.type==="authenticate"&&typeof n.password=="string"){this.cachedPassword=n.password,this.scheduleFlush();return}this.outbound.push(n),this.scheduleFlush()}close(){this.shutdown()}scheduleFlush(t=!1){if(this.readyState===e.CLOSED)return;if(this.flushTimer!=null)if(t)clearTimeout(this.flushTimer),this.flushTimer=null;else return;let n=t?0:mV;this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush()},n)}armDownstreamWatchdog(){this.readyState!==e.CLOSED&&(this.downstreamWatchdog!=null&&clearTimeout(this.downstreamWatchdog),this.downstreamWatchdog=setTimeout(()=>{this.downstreamWatchdog=null,this.readyState!==e.CLOSED&&(console.warn("sse-transport: no downstream activity within the liveness window; reconnecting"),this.shutdown())},bV),this.downstreamWatchdog.unref?.())}async flush(){if(this.readyState===e.CLOSED)return;if(this.inFlightPost){let s=new Promise(a=>{setTimeout(a,gV)});await Promise.race([this.inFlightPost.catch(()=>{}),s])}if(this.readyState===e.CLOSED)return;let t=this.outbound;this.outbound=[];let n={};this.sessionId!=null&&(n.id=this.sessionId),this.cachedPassword!=null&&(n.password=this.cachedPassword),t.length>0&&(n.frames=t);let r=this.baseUrl,o=++this.postSeq;this.armDownstreamWatchdog();let i=(async()=>{let s;try{s=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n),credentials:"same-origin",signal:this.fetchAbort.signal})}catch(l){this.readyState!==e.CLOSED&&console.warn("sse-transport: POST failed:",l),this.shutdown();return}if(!s.ok){this.readyState!==e.CLOSED&&console.warn(`sse-transport: POST ${s.status} ${s.statusText}; closing`),this.shutdown();return}let a=s.body;if(!a){this.shutdown();return}this.consumeStream(a,o)})();this.inFlightPost=i,i.finally(()=>{this.inFlightPost===i&&(this.inFlightPost=null)})}async consumeStream(t,n){let r=t.getReader();this.activeReaders.add(r);let o=new Mk,i=new TextDecoder,s=!1;try{for(;;){let{value:a,done:l}=await r.read();if(l){s=!0;break}if(this.readyState===e.CLOSED)return;n===this.postSeq&&this.armDownstreamWatchdog();let d=o.parse(i.decode(a,{stream:!0}));for(let u of d)this.dispatchOrderedEvent(u,n)}if(this.readyState!==e.CLOSED){let a=i.decode();if(a.length>0)for(let l of o.parse(a))this.dispatchOrderedEvent(l,n)}s&&this.readyState!==e.CLOSED&&n===this.postSeq&&(console.warn("sse-transport: live downstream closed without a close frame; reconnecting"),this.shutdown())}catch(a){this.readyState!==e.CLOSED&&n===this.postSeq&&(console.warn("sse-transport: stream read failed:",a),this.shutdown())}finally{this.activeReaders.delete(r);try{r.releaseLock()}catch{}}}dispatchOrderedEvent(t,n){if(this.readyState!==e.CLOSED){if(n<this.lastDispatchedSeq){this.shutdown();return}this.lastDispatchedSeq=n,this.dispatchEvent_(t)}}dispatchEvent_(t){if(t.event==="session"){if(this.readyState===e.CLOSED)return;this.sessionId=t.data,this.readyState===e.CONNECTING&&(this.readyState=e.OPEN,this.dispatchEvent(new Event("open")));return}if(t.event==="close"){let n,r;try{let o=JSON.parse(t.data);typeof o.code=="number"&&(n=o.code),typeof o.reason=="string"&&(r=o.reason)}catch{}this.shutdown(n,r);return}if(t.event===""||t.event==="message"){if(this.readyState!==e.OPEN)return;this.dispatchEvent(new MessageEvent("message",{data:t.data}))}}shutdown(t,n){if(this.readyState===e.CLOSED)return;this.readyState=e.CLOSING,this.flushTimer!=null&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.downstreamWatchdog!=null&&(clearTimeout(this.downstreamWatchdog),this.downstreamWatchdog=null);try{this.fetchAbort.abort()}catch{}for(let o of this.activeReaders)try{o.cancel().catch(()=>{})}catch{}this.activeReaders.clear(),this.readyState=e.CLOSED;let r=new Event("close");t!=null&&(r.code=t),n!=null&&(r.reason=n),this.dispatchEvent(r)}}});function Pg(e){let t=e.serverUrl,n=e.pingIntervalMs??15e3,r=e.pongTimeoutMs??5e3,o=null,i=!1,s=null,a=0,l=!1,d=!1,u=null,f=Ip,h=null,m=null,g=null,y=null,w=!1,x=null,v=new Set;function k(){u&&(clearTimeout(u),u=null)}function S(){h&&(clearTimeout(h),h=null)}function C(){k(),!l&&(d||a!==0&&t&&(u=setTimeout(()=>{u=null,Ie()},Math.round(f*(.5+Math.random()*.5))),f=Math.min(f*2,yV)))}function _(){E(),!(n<=0)&&(i||(m=setInterval(()=>{!o||o.readyState!==o.OPEN||g||(Z({type:"ping"}),g=setTimeout(()=>{g=null,console.warn("socket-transport: heartbeat timeout; closing socket");try{o?.close()}catch{}},r))},n)))}function E(){m&&(clearInterval(m),m=null),g&&(clearTimeout(g),g=null)}function O(I){for(let M of v)try{M.onDisconnected(I)}catch(W){console.warn("socket-transport: consumer.onDisconnected threw:",W)}}function z(I){for(let M of v)try{M.onConnected(I)}catch(W){console.warn("socket-transport: consumer.onConnected threw:",W)}}function T(I){for(let M of v)try{M.onMessage(I)}catch(W){console.warn("socket-transport: consumer.onMessage threw:",W)}}function D(I){let M;try{let W=typeof I.data=="string"?I.data:new TextDecoder().decode(I.data);M=JSON.parse(W)}catch(W){console.warn("socket-transport: dropping malformed wire frame:",W);return}if(!(!M||typeof M!="object")){if(M.type==="pong"){g&&(clearTimeout(g),g=null);return}if(M.type==="challenge"){if(typeof M.nonce!="string")return;s!=null&&s!==M.nonce&&O(Ik),s=M.nonce,z(s);return}if(M.type==="authenticated"){K(!0),T(M);return}if(M.type==="unauthorized"&&M.kind==="auth-failed"){K(!1);return}T(M)}}function K(I){if(!x)return;let M=x;x=null,M(I)}function Z(I){if(!o||o.readyState!==o.OPEN)return!1;try{return o.send(JSON.stringify(I)),!0}catch(M){return console.warn("socket-transport: send failed:",M),!1}}function ae(I){return new Promise(M=>{x=M,Z({type:"authenticate",password:I})||(x=null,M(!1))})}function _e(){if(y)return y;if(!o||o.readyState!==o.OPEN)return Promise.resolve(!1);let I=o,M=(async()=>{await Promise.resolve();try{let W=N4();if(W!=null&&!w){w=!0;let U=await ae(W);if(o!==I)return!1;if(U)return!0;try{await Ap(null)}catch(J){console.warn("socket-transport: failed to clear cached auth password:",J)}}let R=!0;for(;;){if(o!==I||!o||o.readyState!==o.OPEN||!e.authResolver)return!1;let U;try{U=await e.authResolver({retry:!R})}catch(Se){return console.warn("socket-transport: authentication resolver threw:",Se),!1}if(o!==I||(R=!1,U==null||U===""))return!1;let J=await ae(U);if(o!==I)return!1;if(J){try{await Ap(U)}catch(Se){console.warn("socket-transport: failed to cache auth password:",Se)}return!0}}}finally{y=null}})();return y=M,M}function Ce(I){if(S(),!o)return;let M=o;o=null,s=null,w=!1,K(!1),E(),O(I);try{M.close()}catch{}}function Ie(){l||d||o||a!==0&&t&&Re(!1)}function Re(I){if(l||d||a===0||!t)return;let M;try{M=I?new Bg(t):new WebSocket(t)}catch(R){if(!I){console.warn("socket-transport: WebSocket constructor failed; trying SSE fallback:",R),Re(!0);return}console.warn("socket-transport: SSE constructor failed:",R),C();return}o=M,i=I,s=null,w=!1;let W=!1;M.addEventListener("open",()=>{o===M&&(W=!0,S(),h=setTimeout(()=>{h=null,o===M&&(f=Ip)},vV),h.unref?.(),_())}),M.addEventListener("message",R=>{o===M&&D(R)}),M.addEventListener("close",R=>{if(o!==M)return;if(S(),o=null,s=null,w=!1,K(!1),E(),!W&&!I&&!l&&a>0){if(typeof fetch>"u"){O("socket closed"),C();return}console.warn("socket-transport: WebSocket failed to open; falling back to SSE"),Re(!0);return}R?.code===1001&&(f=Ip),O("socket closed"),!l&&a>0&&C()}),M.addEventListener("error",()=>{})}function ne(){if(l)return{release(){}};a+=1,a===1&&!o&&Ie();let I=!1;return{release(){I||(I=!0,!l&&(a-=1,a===0&&(k(),f=Ip,Ce("released"))))}}}function Ue(I){I!==t&&(k(),f=Ip,t=I,o&&Ce("serverUrl changed"),a>0&&t&&Ie())}function je(I){v.add(I);let M=!1;return{remove(){M||(M=!0,v.delete(I))}}}function He(){l||(l=!0,k(),Ce("transport closed"),v.clear(),a=0)}function Vt(I){let{pingMs:M,pongMs:W}=I;typeof M=="number"&&M>=0&&(n=M),typeof W=="number"&&W>0&&(r=W),m&&_()}function dn(){w=!1}function L(I){I!==d&&(d=I,I?(k(),Ce("protocol-locked")):a>0&&t&&Ie())}return{acquire:ne,setServerUrl:Ue,addConsumer:je,send:Z,getNonce:()=>s,getSocket:()=>o,isSse:()=>o!=null&&i,runAuthFlow:_e,close:He,setProtocolLocked:L,setHeartbeatTimings:Vt,resetCachedReplayGuard:dn}}var Ip,yV,vV,Ik,Ng=$(()=>{"use strict";Tk();Og();Ip=1e3,yV=3e4,vV=3e4,Ik="session restarted"});function $V(e,t){if(!/^\/api\/objstore\/[\w-]+\/[\w-]+$/u.test(e))throw new TypeError(`objstore: urlPath rejected (unexpected shape): ${JSON.stringify(e)}`);let n=new URL(t).origin,r=new URL(e,n);if(r.origin!==n)throw new TypeError(`objstore: urlPath origin mismatch \u2014 expected ${n}, got ${r.origin}`);return r.href}function H4(e){let t=e.requestTimeoutMs??1e4,n=new URL(e.httpOrigin).origin,r=e.transport===void 0,o=e.transport??Pg(e.authResolver===void 0?{serverUrl:e.serverUrl}:{serverUrl:e.serverUrl,authResolver:e.authResolver}),i=!1,s=new Map,a=new Map,l=[],d=[];function u(L,I,M,W){let R=L.seenVersions.get(I);(!R||R.incarnation!==M||W>R.version)&&L.seenVersions.set(I,{incarnation:M,version:W})}function f(L){L.connectedPromise=new Promise((I,M)=>{L.resolveConnected=I,L.rejectConnected=M}),L.connectedPromise.catch(()=>{})}function h(L){L.listedPromise=new Promise((I,M)=>{L.resolveListed=I,L.rejectListed=M}),L.listedPromise.catch(()=>{})}function m(L,I){let M=new Map(L.inventory),W=L.inventorySeeded;L.inventorySeeded=!0,L.inventory.clear();for(let R of I){let U=L.inventory.get(R.resourceTag)??M.get(R.resourceTag),J=U?.incarnation===R.incarnation&&U.version>=R.version?U:{version:R.version,incarnation:R.incarnation,contentLength:R.contentLength};L.inventory.set(R.resourceTag,J),u(L,R.resourceTag,J.incarnation,J.version)}if(L.resolveListed(),!!W){for(let[R,U]of M){let J=L.inventory.get(R);if(J?.incarnation!==U.incarnation){J||L.seenVersions.delete(R);for(let Se of L.deletedHandlers)try{Se({resourceTag:R,version:U.version})}catch{}}}for(let[R,U]of L.inventory){let J=M.get(R);if(J?.version===U.version&&J.incarnation===U.incarnation)continue;let Se={resourceTag:R,version:U.version,incarnation:U.incarnation,contentLength:U.contentLength};for(let B of L.putHandlers)try{B(Se)}catch{}}}}function g(L){if(!Array.isArray(L))return[];let I=[];for(let M of L)Wc(M)&&I.push(Vc(M));return I}function y(L){let I;return new Promise((M,W)=>{I=setTimeout(()=>W(new Error(`objstore: inventory not seeded (no subscribe ack) after ${t}ms`)),t),L.listedPromise.then(M,W)}).finally(()=>clearTimeout(I))}function w(L){for(let I=0;I<l.length;I++)if(L(l[I]))return Promise.resolve(l.splice(I,1)[0]);return new Promise((I,M)=>{let W={predicate:L,resolve:()=>{},reject:U=>{clearTimeout(R);let J=d.indexOf(W);J>=0&&d.splice(J,1),M(U)}},R=setTimeout(()=>W.reject(new Error(`objstore: response timeout after ${t}ms`)),t);W.resolve=U=>{clearTimeout(R),I(U)},d.push(W)})}function x(L){if(!o.send(L))throw new Error("objstore: socket not open")}function v(L){for(let I of d.splice(0))try{I.reject(new Error(`objstore: ${L}`))}catch{}}function k(L){if(L.type==="workspace-subscribed"&&typeof L.workspaceTag=="string"){let I=s.get(L.workspaceTag);I&&Array.isArray(L.resources)&&m(I,g(L.resources));return}if(L.type==="objstore-put"&&typeof L.workspaceTag=="string"&&Wc(L)){let I=s.get(L.workspaceTag);if(!I)return;let M=Vc(L),W=I.inventory.get(M.resourceTag);if(W?.incarnation===M.incarnation&&W.version>M.version)return;u(I,M.resourceTag,M.incarnation,M.version),I.inventory.set(M.resourceTag,{version:M.version,incarnation:M.incarnation,contentLength:M.contentLength});let R={resourceTag:M.resourceTag,version:M.version,incarnation:M.incarnation,contentLength:M.contentLength};for(let U of I.putHandlers)try{U(R)}catch{}return}if(L.type==="objstore-deleted"&&typeof L.workspaceTag=="string"&&typeof L.resourceTag=="string"&&typeof L.version=="number"){let I=s.get(L.workspaceTag);if(!I)return;let M=L.resourceTag,W=L.version,R=L.incarnation;if(R!==void 0){if(typeof R!="string"||R.length===0)return;let J=I.inventory.get(M)??I.seenVersions.get(M);if(J&&(R!==J.incarnation||J.version>W))return}I.seenVersions.delete(M),I.inventory.delete(M);let U={resourceTag:M,version:W};for(let J of I.deletedHandlers)try{J(U)}catch{}return}if(!(L.type==="workspace-state"||L.type==="workspace-save-ack"||L.type==="workspace-save-error"||L.type==="workspace-subscribed"||L.type==="authenticated"||L.type==="server-info")){for(let I=0;I<d.length;I++)if(d[I].predicate(L)){let M=d[I];d.splice(I,1),M.resolve(L);return}if(l.push(L),l.length>Lk){let I=l.splice(0,l.length-Lk),M=[...new Set(I.map(W=>W.type??"<no-type>"))].slice(0,4);console.warn(`objstore: dropping ${I.length} unmatched frame(s) over MAX_QUEUE_SIZE=${Lk} (types: ${M.join(", ")})`)}}}function S(){for(let L of s.values())L.closed||L.connected||(L.connected=!0,L.resolveConnected())}function C(L){v(L);for(let I of s.values())I.closed||I.connected&&(I.connected=!1,f(I))}let _=o.addConsumer({onMessage:k,onConnected:S,onDisconnected:C}),E=L=>$V(L,n),O=(L,I)=>E(`/api/objstore/${L}/${I}`);async function z(L,I,M){let W=o.getNonce();if(!W)throw new Error("objstore: socket not open");let R=await I4(L.signingKey,M,W),U,J=!1;for(;x({type:"objstore-put-begin",...M,signature:R}),U=await w(B=>B.workspaceTag===L.workspaceTag&&B.resourceTag===I&&(B.type==="objstore-put-token"||B.type==="objstore-put-error"||B.type==="objstore-conflict"||B.type==="unauthorized"&&B.kind==="gated")),!(U.type!=="unauthorized"||J||(J=!0,!await o.runAuthFlow())););if(U.type==="unauthorized")return{kind:"unauthorized"};if(U.type==="objstore-put-error"){if(U.reason==="workspace-full")return{kind:"workspace-full"};throw new Error(`objstore: put-error reason='${String(U.reason)}'`)}if(U.type==="objstore-conflict")return{kind:"conflict",current:Wc(U.current)?Vc(U.current):null};if(typeof U.urlPath!="string"||typeof U.token!="string")throw new TypeError("objstore: malformed put-token (missing urlPath/token)");return{kind:"token",urlPath:U.urlPath,token:U.token}}async function T(L,I,M,W){let R=Date.now(),U=await O4(L.signingKey,M,R),J=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"put",ts:R,signature:U,prevVersion:M.prevVersion,prevIncarnation:M.prevIncarnation,expectedLength:M.expectedLength,contentHash:W})});if(J.status===401)return{kind:"unauthorized"};if(J.status===403)return{kind:"workspace-full"};if(J.status===409)return{kind:"conflict",current:await Fk(J)};if(!J.ok){let B="";try{B=await J.text()}catch{}throw new Error(`objstore: REST put-begin failed ${J.status} ${B.slice(0,200)}`)}let Se;try{Se=await J.json()}catch{throw new TypeError("objstore: put-mint JSON parse failed")}if(!Se||typeof Se!="object"||typeof Se.urlPath!="string"||typeof Se.token!="string")throw new TypeError("objstore: malformed put-mint (missing urlPath/token)");return{kind:"token",urlPath:Se.urlPath,token:Se.token}}async function D(L,I){let M=`objstore: ${Ik}`;for(let W=0;;W++)try{return await I()}catch(R){if(W<wV&&!L.closed&&R instanceof Error&&R.message===M)continue;throw R}}function K(L,I){return D(L,()=>Z(L,I))}async function Z(L,I){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let M=await Ho(I.bytes),W={workspaceTag:L.workspaceTag,resourceTag:I.resourceTag,prevVersion:I.prev?.version??null,prevIncarnation:I.prev?.incarnation??null,expectedLength:I.bytes.byteLength,contentHash:M},R;if(o.isSse()?(R=await T(L,I.resourceTag,W,M),R.kind==="unauthorized"&&(R=await z(L,I.resourceTag,W))):R=await z(L,I.resourceTag,W),R.kind==="unauthorized")return{ok:!1,reason:"unauthorized"};if(R.kind==="workspace-full")return{ok:!1,reason:"workspace-full"};if(R.kind==="conflict")return{ok:!1,reason:"conflict",current:R.current};let U=await globalThis.fetch(E(R.urlPath),{method:"PUT",headers:{authorization:`Bearer ${R.token}`,"content-type":"application/octet-stream"},body:I.bytes});if(!U.ok){if(U.status===409||U.status===410)return{ok:!1,reason:"conflict",current:U.status===409?await Fk(U):null};let B="";try{B=await U.text()}catch{}throw new Error(`objstore: REST PUT failed ${U.status} ${B.slice(0,200)}`)}let J;try{J=await U.json()}catch{throw new TypeError("objstore: PUT ack JSON parse failed")}if(!J||typeof J!="object"||!Lp(J.version)||typeof J.incarnation!="string"||typeof J.contentHash!="string"||!Lp(J.contentLength))throw new TypeError("objstore: PUT ack malformed (missing/invalid version/incarnation/contentHash/contentLength)");let Se=J;if(Se.contentHash!==M||Se.contentLength!==I.bytes.byteLength)throw new Error(`objstore: PUT ack mismatch \u2014 server returned contentHash=${Se.contentHash.slice(0,16)}\u2026 length=${Se.contentLength}, client signed ${M.slice(0,16)}\u2026 length=${I.bytes.byteLength}`);return{ok:!0,meta:Se}}async function ae(L,I){let M=o.getNonce();if(!M)throw new Error("objstore: socket not open");let W=await F4(L.signingKey,L.workspaceTag,I,M);x({type:"objstore-fetch",workspaceTag:L.workspaceTag,resourceTag:I,signature:W});let R=await w(U=>U.workspaceTag===L.workspaceTag&&U.resourceTag===I&&(U.type==="objstore-fetch-token"||U.type==="objstore-fetch-not-found"));if(R.type==="objstore-fetch-not-found")return{kind:"not-found"};if(typeof R.urlPath!="string"||typeof R.token!="string"||!Wc(R))throw new TypeError("objstore: malformed fetch-token (missing urlPath / token / metadata)");return{kind:"token",urlPath:R.urlPath,token:R.token,meta:Vc(R)}}async function _e(L,I){let M=Date.now(),W=await B4(L.signingKey,L.workspaceTag,I,M),R=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"fetch",ts:M,signature:W})});if(R.status===404)return{kind:"not-found"};if(R.status===401)return{kind:"unauthorized"};if(!R.ok){let J="";try{J=await R.text()}catch{}throw new Error(`objstore: REST fetch-mint failed ${R.status} ${J.slice(0,200)}`)}let U;try{U=await R.json()}catch{throw new TypeError("objstore: fetch-mint JSON parse failed")}if(!U||typeof U!="object"||typeof U.urlPath!="string"||typeof U.token!="string"||!Wc(U))throw new TypeError("objstore: malformed fetch-mint (missing urlPath / token / metadata)");return{kind:"token",urlPath:U.urlPath,token:U.token,meta:Vc(U)}}async function Ce(L,I){for(let M=0;M<j4;M++){let W=await D(L,()=>Ie(L,I));if(W.kind==="ok")return W.value;if(W.kind==="not-found")return null;if(M+1<j4){let R=Math.min(xV,kV*2**M);await new Promise(U=>{setTimeout(U,R)})}}return null}async function Ie(L,I){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let M;if(o.isSse()?(M=await _e(L,I),M.kind==="unauthorized"&&(M=await ae(L,I))):M=await ae(L,I),M.kind==="not-found")return{kind:"not-found"};if(M.kind==="unauthorized")throw new Error("objstore: fetch-mint unauthorized");let W=M.meta,R=await globalThis.fetch(E(M.urlPath),{method:"GET",headers:{authorization:`Bearer ${M.token}`}});if(!R.ok){if(R.status===404||R.status===503)return{kind:"retry"};let Se="";try{Se=await R.text()}catch{}throw new Error(`objstore: REST GET failed ${R.status} ${Se.slice(0,200)}`)}let U=new Uint8Array(await R.arrayBuffer()),J=await Ho(U);if(J!==W.contentHash)throw new Error(`objstore: contentHash mismatch \u2014 expected ${W.contentHash.slice(0,16)}\u2026, got ${J.slice(0,16)}\u2026`);return{kind:"ok",value:{bytes:U,meta:W}}}async function Re(L,I){let M=o.getNonce();if(!M)throw new Error("objstore: socket not open");let W=await L4(L.signingKey,I,M);x({type:"objstore-delete",...I,signature:W});let R=await w(U=>U.workspaceTag===L.workspaceTag&&U.resourceTag===I.resourceTag&&(U.type==="objstore-deleted-ack"||U.type==="objstore-delete-error"||U.type==="objstore-conflict"));if(R.type==="objstore-deleted-ack"){if(typeof R.deletedVersion!="number")throw new TypeError("objstore: malformed deleted-ack (deletedVersion not a number)");return{kind:"ok",deletedVersion:R.deletedVersion}}if(R.type==="objstore-conflict")return{kind:"conflict",current:Wc(R.current)?Vc(R.current):null};if(R.reason==="not-found")return{kind:"not-found"};throw new Error(`objstore: delete-error reason='${String(R.reason)}'`)}async function ne(L,I,M){let W=Date.now(),R=await P4(L.signingKey,M,W),U=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"delete",ts:W,signature:R,prevVersion:M.prevVersion,prevIncarnation:M.prevIncarnation})});if(U.status===401)return{kind:"unauthorized"};if(U.status===404)return{kind:"not-found"};if(U.status===409)return{kind:"conflict",current:await Fk(U)};if(!U.ok){let Se="";try{Se=await U.text()}catch{}throw new Error(`objstore: REST delete failed ${U.status} ${Se.slice(0,200)}`)}let J;try{J=await U.json()}catch{throw new TypeError("objstore: delete-ack JSON parse failed")}if(!J||typeof J!="object"||typeof J.deletedVersion!="number")throw new TypeError("objstore: malformed delete-ack (deletedVersion not a number)");return{kind:"ok",deletedVersion:J.deletedVersion}}function Ue(L,I,M){return D(L,()=>je(L,I,M))}async function je(L,I,M){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let W={workspaceTag:L.workspaceTag,resourceTag:I,prevVersion:M?.version??null,prevIncarnation:M?.incarnation??null},R;if(o.isSse()?(R=await ne(L,I,W),R.kind==="unauthorized"&&(R=await Re(L,W))):R=await Re(L,W),R.kind==="ok")return{ok:!0,deletedVersion:R.deletedVersion};if(R.kind==="conflict")return{ok:!1,reason:"conflict",current:R.current};if(R.kind==="not-found")return{ok:!1,reason:"not-found"};throw new Error("objstore: delete unauthorized")}function He(L,I,M,W){let R=L.seenVersions.get(I);if(R&&R.incarnation===M&&W<R.version)throw new Error(`objstore: version-rollback rejected \u2014 fetched v${W} for an incarnation we've already seen at v${R.version}`)}async function Vt(L,I){if(i)throw new Error("objstore: client closed");if(!I||typeof I.workspaceId!="string")throw new Error("objstore: openWorkspace requires a WorkspaceSubscription (triageSync.ensureSubscription) \u2014 the client must not open a session for a tag with no backing sync subscribe");let M=L.workspaceTag;if(I.workspaceTag!=null&&I.workspaceTag!==M)throw new Error("objstore: openWorkspace \u2014 WorkspaceSubscription is for a different workspace than these keys");if(s.has(M))throw new Error(`objstore: workspace ${M.slice(0,8)}\u2026 is already open on this client`);let W={workspaceTag:M,signingKey:L.signingKey,contentKey:new Uint8Array(L.contentKey),tagKey:new Uint8Array(L.tagKey),putHandlers:new Set,deletedHandlers:new Set,seenVersions:new Map,inventory:new Map,inventorySeeded:!1,connected:!1,closed:!1};f(W),h(W),s.set(M,W);let R=W;(async()=>{let X;try{X=await I.resources}catch{return}!R.closed&&!R.inventorySeeded&&m(R,g(X))})();let U=o.acquire();a.set(M,U),o.getNonce()&&(R.connected=!0,R.resolveConnected());let J=null;try{await new Promise((X,ue)=>{J=setTimeout(()=>{ue(new Error(`objstore: connect timeout after ${t}ms`))},t),R.connectedPromise.then(()=>X(),we=>ue(we))})}catch(X){J&&clearTimeout(J),s.delete(M),a.delete(M),R.closed=!0;try{R.contentKey.fill(0)}catch{}try{R.tagKey.fill(0)}catch{}throw U.release(),X}J&&clearTimeout(J);async function Se(X,ue,we){let Ke=await K(R,{resourceTag:X,bytes:ue,prev:we});return Ke.ok?(we==null&&R.seenVersions.delete(X),u(R,X,Ke.meta.incarnation,Ke.meta.version),R.inventory.set(X,{version:Ke.meta.version,incarnation:Ke.meta.incarnation,contentLength:Ke.meta.contentLength}),{ok:!0,meta:{version:Ke.meta.version,incarnation:Ke.meta.incarnation,contentLength:Ke.meta.contentLength}}):Ke.reason==="workspace-full"?{ok:!1,reason:"workspace-full"}:Ke.reason==="unauthorized"?{ok:!1,reason:"unauthorized"}:(Ke.current&&u(R,X,Ke.current.incarnation,Ke.current.version),{ok:!1,reason:"conflict",current:Ke.current})}async function B(X){let ue=await Es(R.tagKey,X.fileName),we=_k(R.contentKey,X.fileName,X.content,M,ue);return await Se(ue,we,X.prev)}async function Q(X){let ue=await Es(R.tagKey,X),we=await Ce(R,ue);if(!we)return null;He(R,ue,we.meta.incarnation,we.meta.version);let{fileName:Ke,content:ka}=Rg(R.contentKey,we.bytes,M,ue);if(Ke!==X)throw new Error(`objstore: fileName-binding mismatch \u2014 requested '${X}', payload encoded '${Ke}'`);return u(R,ue,we.meta.incarnation,we.meta.version),{content:ka,version:we.meta.version,incarnation:we.meta.incarnation}}async function oe(X){let ue=await Ce(R,X);if(!ue)return null;He(R,X,ue.meta.incarnation,ue.meta.version);let{fileName:we,content:Ke}=Rg(R.contentKey,ue.bytes,M,X);if(await Es(R.tagKey,we)===X)return u(R,X,ue.meta.incarnation,ue.meta.version),{kind:"report",fileName:we,content:Ke,version:ue.meta.version,incarnation:ue.meta.incarnation};if(await Rs(R.tagKey,we)===X){let{name:wi,content:Cr}=Ck(Ke);return u(R,X,ue.meta.incarnation,ue.meta.version),{kind:"bundle",integrity:we,name:wi,content:Cr,version:ue.meta.version,incarnation:ue.meta.incarnation}}throw new Error("objstore: fetchByTag \u2014 decrypted name does not derive back to the requested resourceTag under either the report or bundle tag scheme (relay or workspace member produced a non-round-trippable tag-name pair)")}async function re(X,ue){let we=await Ue(R,X,ue);return we.ok?(R.seenVersions.delete(X),R.inventory.delete(X),we):we.reason==="not-found"?{ok:!1,reason:"not-found"}:(we.current&&u(R,X,we.current.incarnation,we.current.version),{ok:!1,reason:"conflict",current:we.current})}async function st(X,ue){let we=await Es(R.tagKey,X);return await re(we,ue)}async function Dt(){if(await y(R),R.closed)throw new Error("objstore: session closed");return[...R.inventory.entries()].map(([X,ue])=>({resourceTag:X,version:ue.version,incarnation:ue.incarnation,contentLength:ue.contentLength}))}async function Tn(X){let ue=await Rs(R.tagKey,X.integrity),we=A4(X.name,X.content),Ke=_k(R.contentKey,X.integrity,we,M,ue);return await Se(ue,Ke,X.prev)}async function Ql(X){let ue=await Rs(R.tagKey,X),we=await Ce(R,ue);if(!we)return null;He(R,ue,we.meta.incarnation,we.meta.version);let{fileName:Ke,content:ka}=Rg(R.contentKey,we.bytes,M,ue);if(Ke!==X)throw new Error(`objstore: bundle-integrity binding mismatch \u2014 requested '${X}', payload encoded '${Ke}'`);let{name:du,content:wi}=Ck(ka);return u(R,ue,we.meta.incarnation,we.meta.version),{name:du,content:wi,version:we.meta.version,incarnation:we.meta.incarnation}}async function $o(X,ue){let we=await Rs(R.tagKey,X);return await re(we,ue)}return{put:B,fetch:Q,fetchByTag:oe,delete:st,list:Dt,putBundle:Tn,fetchBundle:Ql,deleteBundle:$o,onPut(X){return R.putHandlers.add(X),()=>{R.putHandlers.delete(X)}},onDeleted(X){return R.deletedHandlers.add(X),()=>{R.deletedHandlers.delete(X)}},close(){if(R.closed)return;R.closed=!0,s.delete(M);try{R.contentKey.fill(0)}catch{}try{R.tagKey.fill(0)}catch{}try{R.rejectConnected(new Error("objstore: session closed"))}catch{}try{R.rejectListed(new Error("objstore: session closed"))}catch{}let X=a.get(M);a.delete(M),X&&X.release()}}}function dn(){if(!i){i=!0;for(let L of s.values()){L.closed=!0;try{L.contentKey.fill(0)}catch{}try{L.tagKey.fill(0)}catch{}try{L.rejectConnected(new Error("objstore: client closed"))}catch{}try{L.rejectListed(new Error("objstore: client closed"))}catch{}}s.clear();for(let L of a.values())L.release();a.clear(),_.remove(),r&&o.close()}}return{openWorkspace:Vt,close:dn}}async function Fk(e){try{let t=await e.json();if(Lp(t.currentVersion)&&typeof t.currentIncarnation=="string")return{version:t.currentVersion,incarnation:t.currentIncarnation}}catch{}return null}function Lp(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function Wc(e){return!e||typeof e!="object"?!1:typeof e.resourceTag=="string"&&Lp(e.version)&&typeof e.incarnation=="string"&&typeof e.contentHash=="string"&&Lp(e.contentLength)&&typeof e.signature=="string"}function Vc(e){return{resourceTag:e.resourceTag,version:e.version,incarnation:e.incarnation,contentHash:e.contentHash,contentLength:e.contentLength,signature:e.signature}}var Lk,wV,j4,kV,xV,W4=$(()=>{"use strict";Ig();Tg();Ng();Tg();Lk=64,wV=5,j4=6,kV=25,xV=500});function Dg(){return SV}var V4,SV,Bk=$(()=>{"use strict";Ng();V4=null,SV=Pg({serverUrl:"",authResolver:e=>V4==null?Promise.resolve(null):V4(e)})});var K4,G4=$(()=>{"use strict";K4=new Set(["busy"])});function _V(e){return typeof e?.color=="string"?e.color:""}function CV(e){return Xe(e??void 0)??""}function EV(e){return typeof e?.comment=="string"?e.comment:""}function RV(e){return typeof e?.fix=="string"?e.fix:""}function TV(e){return e?.flagged===!0?"flagged":e?.flagged===!1?"not flagged":""}function q4(e,t,n,r){let o=[];for(let i of Object.keys(e)){let s=e[i],a=t[i],l=n[i],d=s??null,u=[{name:"color",norm:_V},{name:"triage",norm:CV},{name:"comment",norm:EV},{name:"fix",norm:RV},{name:"flagged",norm:TV}];for(let{name:f,norm:h}of u){let m=h(a),g=h(d),y=h(l);(g!==m||r?.has(i))&&y!==m&&g!==y&&o.push({id:i,property:f,local:g,imported:y})}}return o}function Ok(e,t){let n=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[];if(n.length!==r.length)return!1;if(n.length===0)return!0;let o=new Set(n);for(let i of r)if(!o.has(i))return!1;return!0}function Y4(e,t){let n=e.triage??(e.deleted?"deleted":""),r=t.triage??(t.deleted?"deleted":"");return e.color===t.color&&n===r&&(e.comment??"")===(t.comment??"")&&(e.fix??"")===(t.fix??"")&&e.flagged===t.flagged&&Ok(e.ignoredReports,t.ignoredReports)&&Ok(e.scopedIgnoredReports,t.scopedIgnoredReports)}function Pk(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n)if(!Y4(e[r]??{},t[r]??{}))return!1;return!0}function MV(e=[],t=[],n=[]){let r=new Set(e),o=new Set(t),i=new Set(n);for(let s of r)o.has(s)||i.delete(s);for(let s of o)r.has(s)||i.add(s);return[...i]}function J4(e,t,n,r){let o=Object.assign(Object.create(null),n);for(let i of new Set([...Object.keys(e),...Object.keys(t),...r??[]])){let s=r?.has(i),a=sr(e[i])??{},l=sr(t[i])??{},d={...sr(n[i])};for(let f of["color","comment","fix","flagged"])(a[f]!==l[f]||s)&&Object.assign(d,{[f]:l[f]});if(s||a.triage!==l.triage||!Ok(a.ignoredReports,l.ignoredReports)){let f=!s&&Wn(l)&&Wn(d),h=f?MV(a.ignoredReports,l.ignoredReports,d.ignoredReports):l.ignoredReports??[];(!f||a.triage!==l.triage)&&(l.triage===void 0?delete d.triage:d.triage=l.triage),h.length===0?delete d.ignoredReports:d.ignoredReports=h}d.scopedIgnoredReports=[...new Set([...l.scopedIgnoredReports??[],...d.scopedIgnoredReports??[]])];let u=sr(d);u?o[i]=u:delete o[i]}return o}function Fp(e,t){let n=Object.assign(Object.create(null),e);for(let[r,o]of Object.entries(t))o===null?delete n[r]:o!==void 0&&(n[r]=o);return n}function Kc(e,t){let n=Object.create(null),r=new Set([...Object.keys(e),...Object.keys(t)]);for(let o of r){let i=e[o]??{},s=t[o]??{};Y4(i,s)||(n[o]=t[o]??null)}return n}function X4(e){for(let t in e)return!1;return!0}var Z4=$(()=>{"use strict";eo()});function al(e,t){let n=Object.assign(Object.create(null),e),r=hr().state,o=t instanceof Set?t:new Set(t);for(let i of o){let s=sr(r.triage.get(i));s?n[i]=s:delete n[i]}return n}function Nk(e,t){let n=hr().state,r=[];for(let o of t){let i=e[o];if(!i||typeof i!="object")continue;let s=n.triage.get(o);if(i.color){let d=s?.color;d===void 0?ie(n.triage,o,{color:i.color}):d!==i.color&&r.push({id:o,property:"color",local:d,imported:i.color})}let a=Xe(i);if(a){let d=Xe(s);d===void 0?ie(n.triage,o,{triage:a}):d!==a&&r.push({id:o,property:"triage",local:d,imported:a})}if(i.comment){let d=s?.comment;d===void 0?ie(n.triage,o,{comment:i.comment}):d!==i.comment&&r.push({id:o,property:"comment",local:d,imported:i.comment})}if(i.fix){let d=s?.fix;d===void 0?ie(n.triage,o,{fix:i.fix}):d!==i.fix&&r.push({id:o,property:"fix",local:d,imported:i.fix})}if(typeof i.flagged=="boolean"){let d=s?.flagged;d===void 0?ie(n.triage,o,{flagged:i.flagged}):d!==i.flagged&&r.push({id:o,property:"flagged",local:d?"flagged":"not flagged",imported:i.flagged?"flagged":"not flagged"})}if(!(!Wn(i)||!Wn(s)||!Array.isArray(i.ignoredReports)))for(let d of i.ignoredReports)typeof d=="string"&&((s?.ignoredReports?.length??0)>0&&!s?.ignoredReports?.includes(d)||St(n.triage,o,d,!0,ir(i,d)))}return r}function Dk(e,t){let n=hr().state;for(let r of e){let o=`${r.id}:${r.property}`;t[o]==="imported"&&AV(r.id,r.property)===r.local&&(r.property==="color"?ie(n.triage,r.id,{color:r.imported}):r.property==="comment"?ie(n.triage,r.id,{comment:r.imported}):r.property==="fix"?ie(n.triage,r.id,{fix:r.imported}):r.property==="triage"?r.imported==="inprogress"||r.imported==="fixed"||r.imported==="invalid"||r.imported==="deleted"||r.imported==="ignored"?ie(n.triage,r.id,{triage:r.imported,...r.imported==="ignored"?{}:{ignoredReports:void 0}}):ie(n.triage,r.id,{triage:void 0}):r.property==="flagged"&&ie(n.triage,r.id,{flagged:r.imported==="flagged"?!0:r.imported==="not flagged"?!1:void 0}))}}function AV(e,t){let n=hr().state.triage.get(e);return t==="color"?n?.color??"":t==="triage"?Xe(n)??"":t==="comment"?n?.comment??"":t==="fix"?n?.fix??"":t==="flagged"?n?.flagged===!0?"flagged":n?.flagged===!1?"not flagged":"":""}function Q4(e,t){let n=hr().state,r=t instanceof Set?t:new Set(t);for(let o of r){let i=e[o],s=Wn(i)?i?.ignoredReports:void 0;yc(n.triage,o,{...i,ignoredReports:s})}}var eT=$(()=>{"use strict";Hc();eo()});function tT(){return Ug}function Bp(e){if(Ug!==e){Ug=e,console.warn(e?"triage-sync: can't persist the sessions blob \u2014 either it's an unrecognised future version (writes skipped to avoid clobbering a newer build's data) or the write itself failed (storage full / vault locked). Your in-memory triage state still works this session but will not persist across reload. Free up storage and/or clear localStorage[deepview.sync.sessions]; the badge clears on the next successful save.":"triage-sync: persistence recovered; persisted-sessions blob is now writable.");for(let t of zg)try{t(e)}catch(n){console.warn("persistenceDegraded listener:",n)}}}function nT(e){let t=n=>e(n);return zg.add(t),queueMicrotask(()=>{if(zg.has(t))try{t(Ug)}catch(n){console.warn("persistenceDegraded listener:",n)}}),()=>zg.delete(t)}function jg(){try{let e=hr().getSecureItem(Uk);if(!e)return{kind:"empty"};let t=JSON.parse(e);if(!t||typeof t!="object")return{kind:"empty"};let n=t;return n.version===zk&&n.sessions&&typeof n.sessions=="object"&&!Array.isArray(n.sessions)?{kind:"v1",map:n.sessions}:n.version===zk?{kind:"empty"}:"version"in n?{kind:"unknown-version"}:{kind:"legacy",map:n}}catch{return{kind:"empty"}}}function LV(){let e=jg();return e.kind==="v1"||e.kind==="legacy"?e.map:{}}async function FV(e){try{return await hr().setSecureItem(Uk,JSON.stringify({version:zk,sessions:e})),!0}catch(t){return console.warn("Triage sync: could not persist session state:",t),!1}}function jk(e,t){if(!t)return null;let r=LV()[e];return!r||r.serverUrl!==t?null:{baseRevision:typeof r.baseRevision=="string"?r.baseRevision:null,...r.hasBase===!0?{hasBase:!0}:{},baseState:r.baseState&&typeof r.baseState=="object"?Object.assign(Object.create(null),r.baseState):Object.create(null),savesSinceKeyframe:typeof r.savesSinceKeyframe=="number"?r.savesSinceKeyframe:0}}async function Hg(e){await navigator.locks.request(IV,async()=>{let t=jg();if(t.kind==="unknown-version"){Bp(!0);return}let n=t.kind==="v1"||t.kind==="legacy"?t.map:{};if(await e(n)===!1)return;let o=await FV(n);Bp(!o)})}function Hk(e=null){Hg(t=>{let n=Object.keys(t);if(n.length===0)return!1;let r=new Set(hr().listWorkspaces().map(i=>i.id)),o=!1;for(let i of n){let s=t[i];(!r.has(i)||e!=null&&s?.serverUrl!==e)&&(delete t[i],o=!0)}return o?void 0:!1}).catch(t=>{console.warn("Triage sync: prunePersistedSessions lock failed:",t)})}function Wg(e){return Hg(t=>{if(!(e in t))return!1;delete t[e]})}var Uk,IV,zk,Ug,zg,rT=$(()=>{"use strict";Hc();Uk="deepview.sync.sessions",IV=Uk,zk=1,Ug=!1,zg=new Set});function Wk(){return Kg}function Op(e){if(Kg!==e){Kg=e,e&&console.warn("triage-sync: the sync relay appears to sit behind an authentication proxy (e.g. Cloudflare Access) and this session is no longer authorised \u2014 reconnects are being redirected to the proxy login. Reload the page to sign in again.");for(let t of Vg)try{t(e)}catch(n){console.warn("proxyAuthRequired listener:",n)}}}function oT(e){let t=n=>e(n);return Vg.add(t),queueMicrotask(()=>{if(Vg.has(t))try{t(Kg)}catch(n){console.warn("proxyAuthRequired listener:",n)}}),()=>Vg.delete(t)}async function iT(e){if(typeof fetch>"u"||!e)return!1;let t;try{t=Ak(e)}catch{return!1}let n;try{n=await fetch(t,{method:"GET",redirect:"manual",credentials:"same-origin",cache:"no-store"})}catch{return!1}return n.type==="opaqueredirect"}var Kg,Vg,sT=$(()=>{"use strict";Og();Kg=!1,Vg=new Set});function Ts(){return Dp&&!Kk&&!!Or&&DV()}function DV(){try{return zp().length>0}catch{return!1}}function zV(e){let t=Uu(e);if(t!=null){Yk=t;for(let n of qk)try{n(t)}catch(r){console.warn("Triage sync: onServerInfo listener failed:",r)}}}function Qg(){if(!Ts())return"off";for(let t of Ae.values())if(t.error)return"error";let e=an.getSocket();if(!e||e.readyState!==WebSocket.OPEN)return"offline";for(let t of Ae.values())if(!t.subscribeAcked)return"connecting";return"online"}function Jt(){let e=Qg();if(e!==lT){lT=e,WV(e);for(let t of Gk)try{t(e)}catch(n){console.warn("Triage sync status listener:",n)}}}function Xk(e){return e==="offline"||e==="connecting"}function nx(){Jk+=1,cl!=null&&(clearTimeout(cl),cl=null)}function fT(e){nx(),cl=setTimeout(()=>{cl=null,HV()},e),cl.unref?.()}async function HV(){if(Gg||!Ts()||!Xk(Qg()))return;let e=Jk;Gg=!0;let t=!1;try{t=await iT(Or)}catch{t=!1}finally{Gg=!1}if(Jk===e){if(!Ts()||!Xk(Qg())){Op(!1);return}if(t){Op(!0);return}fT(jV)}}function WV(e){Xk(e)?cl==null&&!Gg&&!Wk()&&fT(UV):(nx(),Op(!1))}function Qk(e){for(let t of Ae.values())if(t.workspaceTag===e)return t;return null}function mr(e){return Ae.get(e.workspaceId)===e}function VV(e){e.busyRetryTimer==null&&(e.busyRetryTimer=setTimeout(()=>{e.busyRetryTimer=null,mr(e)&&(e.error||e.pending||!e.pendingSave||(e.pendingSave=!1,qn(e)))},NV),e.busyRetryTimer.unref?.())}function eb(e){e.busyRetryTimer!=null&&(clearTimeout(e.busyRetryTimer),e.busyRetryTimer=null)}function cT(e){if(e.appliedRevisions.clear(),eb(e),e.key){try{e.key.fill(0)}catch{}e.key=null}if(e.signingKey=null,e.verifyingKey=null,e.objstoreResourceWaiters.length>0){let t=e.objstoreResourceWaiters.splice(0);for(let n of t)try{n([])}catch{}}}function hT(e){let t=new Set,n=zp().find(o=>o.id===e);if(!n)return t;let r=new Set(n.reports??[]);for(let o of dT.reports)if(r.has(o.fileName))for(let i of o.groups)for(let s of i){let a=s.id??String(s._id);OV.test(a)||t.add(a)}return t}function rx(e){let t=hT(e.workspaceId),n=[];for(let o of t)e.ids.has(o)||n.push(o);let r=[];return n.length>0&&(r=Nk(e.baseState,n)),e.ids=t,{conflicts:r,hydrated:n.length>0}}function KV(){let e=jg();e.kind==="unknown-version"?Bp(!0):(e.kind==="v1"||e.kind==="legacy")&&Bp(!1),D4(),an.resetCachedReplayGuard()}function ox(e){if(!e||!Or)return;let t=Or,n=e.generation,r={serverUrl:t,baseRevision:e.baseRevision,savesSinceKeyframe:e.savesSinceKeyframe??0,baseState:e.baseState,...e.baseRevision===null&&e.hasBase?{hasBase:!0}:{}};Hg(o=>{if(!mr(e)||e.generation!==n||Or!==t)return!1;o[e.workspaceId]=r}).catch(o=>{console.warn("Triage sync: persistSession lock failed:",o)})}function ex(e){let t=zp().find(r=>r.id===e.workspaceId);if(!t){e.error="workspace no longer exists",Jt();return}let n=(e.keyDerivationGen??0)+1;e.keyDerivationGen=n,(async()=>{try{let[r,o]=await Promise.all([$4(t.privateKey),Eg(t.privateKey,e.workspaceId)]);if(Ae.get(e.workspaceId)!==e||e.keyDerivationGen!==n)return;if(e.key=r,e.signingKey=o.privateKey,e.verifyingKey=o.publicKey,e.workspaceTag=o.publicKeyB64,an.getSocket()?.readyState!==WebSocket.OPEN){ll();return}Yc(e),qn(e),Jt()}catch(r){console.warn("Triage sync: key derivation failed:",r),Ae.get(e.workspaceId)===e&&e.keyDerivationGen===n&&(e.error=`key derivation failed: ${r instanceof Error?r.message:String(r)}`,Jt())}})()}function qg(e){return an.send(e)}function GV(e,t){if(!an.isSse()){qg(t);return}let n=e.generation,r=e.pending,o=()=>mr(e)&&e.generation===n&&e.pending===r;qV(t,o).then(i=>(i&&o()&&qg(t),null)).catch(()=>{o()&&qg(t)})}async function qV(e,t){if(!Or)return!0;let n;try{n=U4(Or)}catch{return!0}let r;try{r=await globalThis.fetch(n,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e),signal:AbortSignal.timeout(3e4)})}catch{return!0}if(!t())return!1;let o=e.workspaceTag,i=e.base??null;if(r.status===401)return!0;if(r.ok){let s=null;try{s=await r.json()}catch{return!0}return t()?!s||typeof s.id!="string"?!0:(Np({type:"workspace-save-ack",workspaceTag:o,base:i,id:s.id},t),!1):!1}if(r.status===409){let s=null;try{s=await r.json()}catch{return!0}if(!t())return!1;let a=s&&Array.isArray(s.revisions)?s.revisions:[];return Np({type:"workspace-state",workspaceTag:o,revisions:a},t),Np({type:"workspace-save-error",workspaceTag:o,base:i,reason:"stale-base"},t),!1}return r.status===413?(Np({type:"workspace-save-error",workspaceTag:o,base:i,reason:"too-large"},t),!1):!0}function Yc(e,t=!1){if(!mr(e)||!Ts())return;let n=an.getSocket();if(!n||n.readyState!==WebSocket.OPEN||!t&&e.subscribed||!e.signingKey||!e.workspaceTag)return;let r=an.getNonce();if(r==null)return;let o=e.baseRevision,i=n,s=e.signingKey,a=e.workspaceTag,l=e.generation;(async()=>{try{let d=await C4(s,a,o,r);if(Ae.get(e.workspaceId)!==e||e.generation!==l||e.workspaceTag!==a||an.getSocket()!==i||an.getNonce()!==r)return;e.subscribed=!0,qg({type:"workspace-subscribe",workspaceTag:a,from:o,signature:d})}catch(d){console.warn("Triage sync: subscribe sign failed:",d)}})()}function qn(e){if(!mr(e)||!Ts()||e.error)return;if(e.pending||e.encrypting||e.receiving){e.pendingSave=!0;return}if(!e.key||!e.signingKey||!e.workspaceTag){e.pendingSave=!0;return}rx(e),e.localState=al(e.baseState,e.ids);let t=an.getSocket();if(!t||t.readyState!==WebSocket.OPEN)return;let n=(e.savesSinceKeyframe??0)>=Ii,r=n?Object.create(null):e.baseState,o=Kc(r,e.localState);if(X4(o)&&!n)return;let i=e.baseRevision,s=e.key,a=e.signingKey,l=e.workspaceTag,d=e.generation;e.encrypting=!0,(async()=>{try{let u=xk(l,i),{nonce:f,ciphertext:h}=await R4(s,o,u),m={publicKeyB64:l,base:i,keyframe:n,nonceB64:f,ciphertextB64:h},g=await _4(a,m),y=await kk(m);if(Ae.get(e.workspaceId)!==e||e.generation!==d||e.workspaceTag!==l)return;if(e.baseRevision!==i||e.receiving){e.pendingSave=!0;return}e.pending={base:i,id:y,changeset:o,keyframe:n},e.pendingSave=!1;let w={type:"workspace-save",workspaceTag:l,base:i,nonce:f,ciphertext:h,signature:g};n&&(w.keyframe=!0),GV(e,w),e.consecutiveFailures=0,e.error&&(e.error=null,Jt())}catch(u){console.warn("Triage sync: encrypt/sign failed:",u),mr(e)&&e.generation===d&&(e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.consecutiveFailures>=PV&&(e.error=`encrypt/sign failed: ${u instanceof Error?u.message:String(u)}`,Jt()))}finally{mr(e)&&e.generation===d&&(e.encrypting=!1,!e.error&&e.pendingSave&&!e.pending&&!e.receiving&&(e.pendingSave=!1,qn(e)))}})()}async function YV(e,t,n,r){for(let o of t){if(!o||typeof o!="object"||typeof o.id=="string"&&(o.id===e.baseRevision||e.appliedRevisions.has(o.id)||r.has(o.id)))continue;let i=e.baseRevision,s=o.keyframe===!0;if(!(i==null?o.base==null||s:o.base===i))return console.warn(`Triage sync: chain base mismatch (expected ${i}, got ${o.base})`),!1;if(typeof o.signature!="string"||typeof o.nonce!="string"||typeof o.ciphertext!="string"||typeof o.id!="string")return console.warn("Triage sync: revision missing signature/nonce/ciphertext/id; resyncing"),e.savesSinceKeyframe=Ii,!1;if(!e.workspaceTag||!e.verifyingKey||!e.key)return!1;let l=typeof o.base=="string"?o.base:null,d={publicKeyB64:e.workspaceTag,base:l,keyframe:s,nonceB64:o.nonce,ciphertextB64:o.ciphertext},u=await E4(e.verifyingKey,d,o.signature);if(!n())return!1;if(!u)return console.warn("Triage sync: revision signature did not verify; resyncing"),e.savesSinceKeyframe=Ii,!1;let f=await kk(d);if(!n())return!1;if(o.id!==f)return console.warn("Triage sync: revision id does not match content hash; resyncing"),e.savesSinceKeyframe=Ii,!1;let h;try{let g=xk(e.workspaceTag,l);h=await T4(e.key,o.nonce,o.ciphertext,g)}catch(g){return console.warn("Triage sync: decrypt failed; resyncing",g),e.savesSinceKeyframe=Ii,!1}if(!n())return!1;let m=s?Object.create(null):e.baseState;e.baseState=Fp(m,h??{}),e.baseRevision=o.id,e.appliedRevisions.add(o.id),e.pending?.id===o.id&&(e.pending=null),s?e.savesSinceKeyframe=0:e.savesSinceKeyframe=Math.min((e.savesSinceKeyframe??0)+1,Ii)}return!0}async function mT(e,t,n=[],r=null){if(!mr(e))return;let o=e.generation;e.localState=Fp(e.baseState,t),Zk++;try{Q4(e.localState,e.ids),r&&n.length>0&&(Dk(n.filter(({id:i})=>e.ids.has(i)),r),e.localState=al(e.baseState,e.ids)),ox(e),await Xg()}finally{Zk--}if(!(!mr(e)||e.generation!==o)){e.localState=al(e.baseState,e.ids),tx();for(let i of Ae.values())i!==e&&qn(i)}}function Yg(e){return rx(e),e.localState=al(e.baseState,e.ids),Kc(e.baseState,e.localState)}async function JV(e,t){let n=e.generation;if(e.pending&&t.base===e.pending.base&&typeof t.id=="string"&&t.id===e.pending.id){Yg(e);let r=e.localState,o=e.pending.keyframe?Object.create(null):e.baseState;if(e.baseState=Fp(o,e.pending.changeset),e.baseRevision=t.id,e.hasBase=!0,e.appliedRevisions.add(t.id),e.savesSinceKeyframe=e.pending.keyframe?0:Math.min((e.savesSinceKeyframe??0)+1,Ii),e.pending=null,e.staleResetAttempted=!1,await mT(e,Kc(e.baseState,r)),!mr(e)||e.generation!==n)return;(e.pendingSave||!Pk(e.localState,e.baseState))&&(e.pendingSave=!1,qn(e));return}if(e.pending){let r=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: ack mismatch (pending ${e.pending.base}/${e.pending.id.slice(0,8)}, ack ${t.base}/${r})`);return}if(t.id!==e.baseRevision){let r=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: late ack for base=${t.base} id=${r}\u2026; pending was already cleared`),e.pendingSave=!0,qn(e)}}async function XV(e,t){if(!Array.isArray(t)||!e.key)return;if(t.length===0){e.resyncAttempted&&(e.resyncAttempted=!1,e.pending||(e.pendingSave=!1,qn(e)));return}let n=e.generation,r=e.workspaceTag,o=()=>mr(e)&&e.generation===n&&e.workspaceTag===r;e.receiving=!0;try{Yg(e);let i=e.baseState,s=e.pending,a=e.baseRevision,l={...e,appliedRevisions:new Set},d=await YV(l,t,o,e.appliedRevisions);if(!o())return;if(l.baseRevision!==a){let f=s&&l.pending===null?Fp(s.keyframe?Object.create(null):i,s.changeset):i;Yg(e);let h=Kc(f,e.localState),g=a===null&&!(s&&l.pending===null)?new Set([...Object.keys(f),...e.hasBase?e.ids:[]]):void 0;if(g)for(let v of g)h[v]=e.localState[v]??null;let y=q4(h,f,l.baseState,g).filter(({id:v})=>e.ids.has(v)),w=null;if(y.length>0&&Zg){try{w=await Zg(y,l.baseState,"chain")??null}catch(v){console.warn("Triage sync: chain-conflict resolver failed:",v)}if(!o())return}Yg(e);let x=J4(f,e.localState,l.baseState,g);e.baseRevision=l.baseRevision,e.hasBase=!0;for(let v of l.appliedRevisions)e.appliedRevisions.add(v);if(e.baseState=l.baseState,e.savesSinceKeyframe=l.savesSinceKeyframe,e.pending&&(e.pendingSave=!0),e.pending=null,await mT(e,Kc(e.baseState,x),y,w),!o())return}else e.savesSinceKeyframe=l.savesSinceKeyframe;if(!d){if(e.pendingSave=!1,!e.resyncAttempted){e.resyncAttempted=!0,Yc(e,!0);return}console.warn("Triage sync: catch-up also broke continuity; full state push"),e.baseRevision=null,e.appliedRevisions.clear(),e.savesSinceKeyframe=Ii,e.pending=null,e.resyncAttempted=!1,e.pendingSave=!0,ox(e),tx();return}e.resyncAttempted=!1,e.staleResetAttempted=!1,Pk(e.localState,e.baseState)||(e.pendingSave=!0)}finally{o()&&(e.receiving=!1,e.pendingSave&&!e.pending&&!e.error&&(e.pendingSave=!1,qn(e)))}}async function ZV(e){if(e.type==="server-info"){zV(e);return}if(e.type==="authenticated"){for(let n of Ae.values())Yc(n),qn(n);return}if(e.type==="unauthorized"){if(e.kind==="gated"){if(typeof e.workspaceTag=="string"){let n=Qk(e.workspaceTag);n&&typeof e.resourceTag!="string"&&QV(n,e)}an.runAuthFlow().catch(n=>{console.warn("Triage sync: auth flow failed:",n)})}return}if(typeof e.workspaceTag!="string")return;let t=Qk(e.workspaceTag);if(t){if(e.type==="workspace-save-ack")await JV(t,e);else if(e.type==="workspace-state")await XV(t,e.revisions);else if(e.type==="workspace-save-error")tK(t,e);else if(e.type==="workspace-subscribed"){if(t.subscribeAcked=!0,Array.isArray(e.resources)){let n=e.resources,r=t.objstoreResourceWaiters.splice(0);for(let o of r)try{o(n)}catch{}}Jt()}}}function QV(e,t){e.pending&&(typeof t.base!="string"&&t.base!==null||t.base===e.pending.base&&(e.pending=null,e.pendingSave=!0))}function tK(e,t){if(!e.pending||typeof t.base!="string"&&t.base!==null||t.base!==e.pending.base)return;let n=t.reason,r=typeof n=="string"&&n.length>0&&n.length<=64&&eK.test(n)?n:"rejected";if(e.pending=null,K4.has(r)){e.pendingSave=!0,VV(e);return}if(r==="stale-base"&&!e.staleResetAttempted){e.staleResetAttempted=!0,console.warn("Triage sync: stale-base catch-up did not apply (server chain gone or rebuilt past our base); full state push"),e.baseRevision=null,e.appliedRevisions.clear(),e.savesSinceKeyframe=Ii,e.pendingSave=!1,e.resyncAttempted=!1,ox(e),tx(),qn(e);return}e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.error=`server rejected save: ${r}`,Jt()}function Np(e,t=()=>!0){let n=qc,r=typeof e.workspaceTag=="string"?Qk(e.workspaceTag):null;if(typeof e.workspaceTag=="string"&&!r)return;let o=r?.generation;Gc=Gc.then(()=>{if(!(!t()||qc!==n||r&&(!mr(r)||r.generation!==o)))return ZV(e)}).catch(i=>{console.warn("Triage sync handler error:",i)})}function nK(e){for(let t of Ae.values())t.pending=null,t.pendingSave=!1,Yc(t),qn(t);Jt()}function rK(e){qc++,Gc=Promise.resolve();for(let t of Ae.values())t.generation++,t.encrypting=!1,t.receiving=!1,t.pending=null,t.subscribed=!1,t.subscribeAcked=!1,t.resyncAttempted=!1,t.staleResetAttempted=!1,t.pendingSave=!0,eb(t);Jt()}function ll(){Ts()?Pp||(Pp=an.acquire()):Pp&&(Pp.release(),Pp=null)}function Vk(e){let t=e.error!=null;e.error=null,e.consecutiveFailures=0,t&&(!e.key||!e.signingKey)&&ex(e)}function Jg(e){e.generation++,e.receiving=!1,e.pending=null,e.pendingSave=!1,e.encrypting=!1,e.subscribed=!1,e.subscribeAcked=!1,e.resyncAttempted=!1,e.staleResetAttempted=!1,eb(e)}function gT(e){let t=e.generation,{conflicts:n,hydrated:r}=rx(e);(async()=>{if(n.length===0){r?await Xg():qn(e);return}let o=null;if(Zg)try{o=await Zg(n,e.baseState,"attach")}catch(i){console.warn("Triage sync: hydration conflict resolver failed:",i)}!mr(e)||e.generation!==t||(o&&Dk(n.filter(({id:i})=>e.ids.has(i)),o),await Xg())})().catch(o=>{console.warn("Triage sync: refreshAndPropagate failed:",o)})}var dT,zp,Xg,aT,uT,BV,pT,OV,tx,Zg,Or,Dp,Kk,an,Pp,Ii,PV,NV,Gk,qk,Yk,lT,UV,jV,cl,Gg,Jk,Zk,Ae,eK,Gc,qc,Jc,bT=$(()=>{"use strict";Hc();G4();Z4();eT();rT();Em();Tk();Ng();Bk();Og();sT();$k();BV="deepview.triageSyncUrl",pT="deepview.sync.userEnabled",OV=/^\d+$/u,tx=()=>{},Zg=null,Or="",Dp=!0,Kk=!1,an=Dg(),Pp=null,Ii=100,PV=5,NV=2e3;Gk=new Set,qk=new Set,Yk=null;lT="off";UV=6e3,jV=3e4,cl=null,Gg=!1,Jk=0;Zk=0,Ae=new Map;eK=/^[\w-]+$/u;Gc=Promise.resolve(),qc=0;an.addConsumer({onMessage:Np,onConnected:nK,onDisconnected:rK});Jc={setServerUrl(e){let t=(e??"").trim();if(t===Or)return;let n=Or;qc++,Gc=Promise.resolve(),Or=t,nx(),Op(!1),t&&Hk(t),n&&t&&n!==t&&Ap(null).catch(r=>{console.warn("Triage sync: failed to drop cached auth password on server change:",r)}),an.setServerUrl(t);for(let r of Ae.values()){Jg(r);let o=t?jk(r.workspaceId,t):null;r.baseRevision=o?.baseRevision??null,r.appliedRevisions.clear(),r.baseState=o?.baseState??Object.create(null),r.hasBase=o?.hasBase===!0||r.baseRevision!==null||Object.keys(r.baseState).length>0,r.savesSinceKeyframe=o?.savesSinceKeyframe??0,r.localState=al(r.baseState,r.ids),Vk(r)}ll(),Jt()},setEnabled(e){let t=!!e;if(t!==Dp){if(Dp=t,uT(pT,t?"1":"0").catch(n=>{console.warn("Triage sync: could not persist user-enabled:",n)}),Ts())for(let n of Ae.values())Vk(n);else{qc++,Gc=Promise.resolve();for(let n of Ae.values())Jg(n)}ll(),Jt()}},isEnabled(){return Dp},setForcedOff(e){let t=!!e;if(t!==Kk){if(Kk=t,Ts())for(let n of Ae.values())Vk(n);else{qc++,Gc=Promise.resolve();for(let n of Ae.values())Jg(n)}ll(),Jt()}},getServerUrl(){return Or},get connected(){return an.getSocket()?.readyState===WebSocket.OPEN},get status(){return Qg()},onStatusChange(e){return Gk.add(e),()=>Gk.delete(e)},onServerInfo(e){if(qk.add(e),Yk!=null)try{e(Yk)}catch{}return()=>qk.delete(e)},setProtocolLocked(e){an.setProtocolLocked(e)},notify(){if(!(Zk>0))for(let e of Ae.values())qn(e)},ensureSubscription(e){let t=Ae.has(e);Jc.openSession(e);let n=Ae.get(e);if(!n)return null;let r=new Promise(o=>{n.objstoreResourceWaiters.push(o)});return t&&Yc(n,!0),{workspaceId:e,workspaceTag:n.workspaceTag,resources:r}},openSession(e){if(!e||Ae.has(e)||!zp().find(s=>s.id===e))return;let n=hT(e),r=jk(e,Or),o=r?.baseState??Object.create(null);Nk(o,n);let i={workspaceId:e,workspaceTag:null,signingKey:null,verifyingKey:null,ids:n,baseRevision:r?.baseRevision??null,appliedRevisions:new Set,baseState:o,hasBase:r?.hasBase===!0||r?.baseRevision!=null||Object.keys(o).length>0,savesSinceKeyframe:r?.savesSinceKeyframe??0,localState:al(o,n),pending:null,pendingSave:!1,key:null,encrypting:!1,receiving:!1,generation:0,subscribed:!1,subscribeAcked:!1,resyncAttempted:!1,staleResetAttempted:!1,consecutiveFailures:0,error:null,busyRetryTimer:null,objstoreResourceWaiters:[]};Ae.set(e,i),ex(i),ll(),Jt()},closeSession(e){if(e==null){for(let t of Ae.values())cT(t);Ae.clear()}else{let t=Ae.get(e);t&&cT(t),Ae.delete(e)}Jt()},refreshSession(e){let t=Ae.get(e);if(!t){console.debug("triage-sync: refreshSession bail \u2014 no session for",e,"(caller must openSession first)");return}gT(t)},sessionInfo(e){let t=Ae.get(e);return t?{workspaceId:t.workspaceId,workspaceTag:t.workspaceTag,baseRevision:t.baseRevision,pending:t.pending&&{base:t.pending.base,keyframe:t.pending.keyframe},pendingSave:t.pendingSave,keyReady:t.key!==null,encrypting:t.encrypting,tracked:t.ids.size,savesSinceKeyframe:t.savesSinceKeyframe??0,error:t.error??null}:null},get openSessions(){return[...Ae.keys()].map(e=>this.sessionInfo(e)).filter(e=>e!==null)},dismissError(e){let t=e==null?[...Ae.keys()]:[e],n=!1;for(let r of t){let o=Ae.get(r);!o||!o.error||(o.error=null,o.consecutiveFailures=0,n=!0,!o.key||!o.signingKey?ex(o):an.getSocket()?.readyState===WebSocket.OPEN&&(Yc(o),qn(o)))}n&&Jt()},get persistenceDegraded(){return tT()},onPersistenceDegraded(e){return nT(e)},get proxyAuthRequired(){return Wk()},onProxyAuthRequired(e){return oT(e)}};Fg(e=>{dT=e.state,zp=e.listWorkspaces,Xg=e.saveTriage,aT=e.getSecureItem,uT=e.setSecureItem,e.onSecureStorageHydrated(KV);try{localStorage.removeItem(BV),aT(pT)==="0"&&(Dp=!1),ll()}catch{}e.onWorkspaceDeleted(t=>{let n=Ae.get(t);n&&eb(n);let r=Ae.delete(t);Wg(t).catch(o=>{console.warn("Triage sync: dropPersistedSession lock failed:",o)}),ll(),r&&Jt()}),e.onWorkspacePrivateKeyChanged(t=>{let n=Ae.get(t);if(!n){Wg(t).catch(r=>{console.warn("Triage sync: dropPersistedSession lock failed:",r)});return}n.signingKey=null,n.key=null,n.verifyingKey=null,n.workspaceTag=null,Jg(n),n.keyDerivationGen=(n.keyDerivationGen??0)+1,(async()=>{await Wg(t),Ae.delete(t),Jc.openSession(t),Jt()})().catch(r=>{console.warn("Triage sync: privateKey rotation IIFE failed:",r),Ae.delete(t),Jt()})}),e.onReportMembershipChanged(t=>{Jc.openSession(t);let n=Ae.get(t);n&&gT(n)}),Hk()})});function gx(e){return lK+e}function RT(e){try{let t=localStorage.getItem(gx(e));if(!t)return null;let n=JSON.parse(t);return!n||typeof n!="object"?null:{names:n.names&&typeof n.names=="object"?n.names:{},bundles:n.bundles&&typeof n.bundles=="object"?n.bundles:{},bundleNames:n.bundleNames&&typeof n.bundleNames=="object"?n.bundleNames:{},baselines:cK(n.baselines,n.localVersions)}}catch{return null}}function cK(e,t){let n={};if(t&&typeof t=="object")for(let[r,o]of Object.entries(t))Number.isSafeInteger(o)&&o>=0&&(n[r]={version:o,incarnation:null,synced:!0,hash:null});if(e&&typeof e=="object")for(let[r,o]of Object.entries(e))!o||typeof o!="object"||!Number.isSafeInteger(o.version)||o.version<0||o.incarnation!=null&&typeof o.incarnation!="string"||(n[r]={version:o.version,incarnation:o.incarnation??null,synced:o.synced===!0,hash:typeof o.hash=="string"?o.hash:null});return n}function Wo(e,t){try{let n={names:Object.fromEntries(t.remoteNameByTag),bundles:Object.fromEntries(t.remoteBundleByTag),bundleNames:Object.fromEntries(t.remoteBundleNameByIntegrity),baselines:Object.fromEntries(t.baselines),localVersions:Object.fromEntries([...t.baselines].filter(([,r])=>r.synced).map(([r,o])=>[r,o.version]))};localStorage.setItem(gx(e),JSON.stringify(n))}catch(n){console.warn(`objstore-presence: cache persist failed for ${e}:`,n)}}function yT(e){try{localStorage.removeItem(gx(e))}catch{}}function dK(e){return ix||(ix=H4({serverUrl:"",httpOrigin:e,transport:Dg()})),ix}function Pr(){for(let e of aK)try{e()}catch{}}function uK(e){return typeof e!="string"?"":e.length<=wT?e:e.slice(0,wT)}function pK(e){try{let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/",t.search="",t.hash="",t.origin}catch{return null}}function sx(e){if(gr.has(e))return;let t=Ms().find(i=>i.id===e);if(!t)return;let n=Jc.ensureSubscription(e);if(!n)return;let r={workspaceId:e,session:null,keys:null,remoteTags:new Set,fileTags:new Map,bundleTags:new Map,remoteNameByTag:new Map,remoteBundleByTag:new Map,remoteBundleNameByIntegrity:new Map,remoteMeta:new Map,baselines:new Map,localChanged:new Set,selfWrites:new Map,selfWriteNotices:new Map,tagLocks:new Map,inFlight:new Map,err:null,disposed:!1,ready:null};gr.set(e,r),r.ready=(async()=>{if(r.keys=await Sk(t.privateKey,t.id),r.disposed)return;let i=new Map;for(let d of t.reports??[]){let u=await Es(r.keys.tagKey,d);r.fileTags.set(d,u),i.set(u,d)}if(r.disposed)return;let s=new Map;for(let d of t.bundles??[]){let u=await Rs(r.keys.tagKey,d);r.bundleTags.set(d,u),s.set(u,d)}if(r.disposed)return;try{let d=await fx();if(r.disposed)return;for(let u of d)r.bundleTags.has(u.integrity)&&r.remoteBundleNameByIntegrity.set(u.integrity,u.name)}catch(d){console.warn(`objstore-presence: listBundles failed during ${e} open:`,d)}Pr();let a=Jc.getServerUrl();if(!a)return;let l=pK(a);if(l)try{let u=await dK(l).openWorkspace(r.keys,n);if(r.disposed){try{u.close()}catch{}return}r.session=u,o();let f=await u.list();if(r.disposed)return;for(let g of f)r.remoteTags.add(g.resourceTag),xT(r,g.resourceTag,g.version,g.incarnation);let h=RT(e),m=!1;if(h)for(let[g,y]of Object.entries(h.baselines))(r.remoteTags.has(g)||i.has(g))&&r.baselines.set(g,y);for(let g of r.remoteTags){let y=i.get(g);y!==void 0&&!r.remoteNameByTag.has(g)&&(r.remoteNameByTag.set(g,y),m=!0);let w=s.get(g);if(w!==void 0&&!r.remoteBundleByTag.has(g)&&(r.remoteBundleByTag.set(g,w),m=!0),h){let x=h.names[g];typeof x=="string"&&!r.remoteNameByTag.has(g)&&!r.remoteBundleByTag.has(g)&&(r.remoteNameByTag.set(g,x),r.fileTags.set(x,g),m=!0);let v=h.bundles[g];if(typeof v=="string"&&!r.remoteBundleByTag.has(g)&&!r.remoteNameByTag.has(g)){r.remoteBundleByTag.set(g,v),r.bundleTags.set(v,g);let k=h.bundleNames[v];typeof k=="string"&&!r.remoteBundleNameByIntegrity.has(v)&&r.remoteBundleNameByIntegrity.set(v,k),m=!0}}}(m||h)&&Wo(e,r),Pr(),dx(r);for(let g of r.remoteTags)Xc(r.baselines.get(g),r.remoteMeta.get(g))&&tb(r,g).catch(()=>{});gK(r).catch(()=>{})}catch(d){r.err=d}})();function o(){let i=r.session;i.onPut(({resourceTag:s,version:a,incarnation:l})=>{let d=r.remoteMeta.get(s),u=r.remoteTags.has(s)&&d!==void 0&&(d.incarnation!==l||a>d.version);if(r.remoteTags.add(s),xT(r,s,a,l),Pr(),u){tb(r,s).catch(()=>{});return}dx(r)}),i.onDeleted(({resourceTag:s})=>{r.remoteTags.delete(s),r.remoteMeta.delete(s);let a=r.remoteNameByTag.get(s);r.remoteNameByTag.delete(s);let l=Ms().find(h=>h.id===e),d=l?.reports??[],u=l?.bundles??[];a&&!d.includes(a)&&r.fileTags.delete(a);let f=r.remoteBundleByTag.get(s);r.remoteBundleByTag.delete(s),f&&(r.remoteBundleNameByIntegrity.delete(f),u.includes(f)||r.bundleTags.delete(f)),Wo(e,r),Pr()})}r.ready.catch(()=>{})}function kT(e){let t=gr.get(e);if(t){t.disposed=!0;try{t.session?.close()}catch{}if(t.keys){try{t.keys.contentKey.fill(0)}catch{}try{t.keys.tagKey.fill(0)}catch{}t.keys=null}gr.delete(e),Pr()}}async function fK(e,t){let n=gr.get(e);!n||n.fileTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.fileTags.set(t,await Es(n.keys.tagKey,t)),n.disposed||Pr()))}function TT(e,t,n,r){let o=gr.get(e),i=(t==="bundle"?o?.bundleTags:o?.fileTags)?.get(n);if(i!==void 0){let d=o.baselines.get(i),u=o.remoteMeta.get(i);return{synced:o.remoteTags.has(i)&&(t==="bundle"||!!u&&MT(d,u)&&d.hash===r&&!o.localChanged.has(i)),cached:!1}}let s=RT(e),a=Object.entries((t==="bundle"?s?.bundles:s?.names)??{}).find(([,d])=>d===n)?.[0],l=s?.baselines?.[a];return{synced:a!==void 0&&(t==="bundle"||l?.synced===!0&&l.hash===r),cached:!0}}async function hK(e,t){let n=gr.get(e);!n||n.bundleTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.bundleTags.set(t,await Rs(n.keys.tagKey,t)),n.disposed||Pr()))}function xT(e,t,n,r){let o=e.remoteMeta.get(t);o&&o.incarnation===r&&o.version>=n||e.remoteMeta.set(t,{version:n,incarnation:r})}function Xc(e,t){return!e||!t?!1:e.incarnation===null?t.version!==e.version:e.incarnation!==t.incarnation||t.version>e.version}function mK(e,t){let n=e.baselines.get(t);return!!n&&n.incarnation!==null}function MT(e,t){return!!e&&e.synced&&e.incarnation===t.incarnation&&e.version===t.version}function dl(e,t,n,r,o=null){let i=$T(e,t);e.baselines.set(t,{version:n.version,incarnation:n.incarnation,synced:r,hash:r?o:null}),e.localChanged.delete(t),!e.disposed&&$T(e,t)!==i&&Pr()}function AT(e,t){return!!e&&e.synced&&!!e.hash&&!!t&&e.hash!==t}function IT(e,t){return!!e&&!e.synced||AT(e,t)}function $T(e,t){if(!e.remoteTags.has(t))return!1;if(e.localChanged.has(t))return!0;let n=e.baselines.get(t);return!!n&&!n.synced}async function LT(e,t,n){e.selfWrites.set(t,(e.selfWrites.get(t)??0)+1);try{await CT(t,n),e.selfWriteNotices.set(t,(e.selfWriteNotices.get(t)??0)-1)}finally{let r=e.selfWrites.get(t)-1;if(r>0)e.selfWrites.set(t,r);else{e.selfWrites.delete(t);let o=e.selfWriteNotices.get(t)??0;e.selfWriteNotices.delete(t);let i=e.fileTags.get(t);o>0&&i!==void 0&&!e.disposed&&FT(e,i,t)}}}function FT(e,t,n){sK.setTimeout(()=>BT(e,t,n).catch(()=>{}),iK)}function BT(e,t,n){return bx(e,t,async()=>{if(ET.has(n))return;let r=e.baselines.get(t);if(e.disposed||!r?.synced||!r.hash)return;let o;try{o=await mx(n)}catch{return}let i=await Ho(o);if(e.disposed||e.baselines.get(t)!==r)return;let s=r.hash!==i;s!==e.localChanged.has(t)&&(s?e.localChanged.add(t):e.localChanged.delete(t),Pr())})}async function gK(e){let t=Ms().find(n=>n.id===e.workspaceId);for(let n of t?.reports??[]){if(e.disposed)return;let r=e.fileTags.get(n);if(!(r===void 0||!e.baselines.get(r)?.hash))try{await BT(e,r,n)}catch{}}}function bx(e,t,n){let r=(e.tagLocks.get(t)??Promise.resolve()).then(()=>n()),o=r.catch(()=>{}).finally(()=>{e.tagLocks.get(t)===o&&e.tagLocks.delete(t)});return e.tagLocks.set(t,o),r}function ST(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}async function yx(e,t){let n;try{n=await mx(e)}catch{return{same:null,hash:null}}let r=await Ho(n);if(ST(n,t))return{same:!0,hash:r};try{let[o,i]=await Promise.all([Up(n),Up(t)]);return{same:ST(o,i),hash:r}}catch{return{same:!1,hash:r}}}async function OT(e,t,n,r){let o;try{o=ut(await Up(n.content))}catch(s){throw new Error(`gunzip/decode of "${n.fileName}" failed (likely forged peer payload)`,{cause:s})}if(!r())return!1;let i=ux(o);if(!i.recognized)throw new Error(`cloud copy of "${n.fileName}" did not analyze as a recognized report \u2014 refusing to overwrite local copy`);if(await LT(e,n.fileName,n.content),e.disposed)return!1;px(n.fileName,i.count,i.source),dl(e,t,n,!0,await Ho(n.content)),Wo(e.workspaceId,e);for(let s of cx)try{s(e.workspaceId,n.fileName)}catch{}return!0}async function bK(e,t,n,r,{keepLocalChanges:o=!0}={}){let{same:i,hash:s}=await yx(n.fileName,n.content);return r()?i?(dl(e,t,n,!0,s),Wo(e.workspaceId,e),!1):o&&i===!1&&IT(e.baselines.get(t),s)?(dl(e,t,n,!1),Wo(e.workspaceId,e),!1):await OT(e,t,n,r):!1}async function dx(e){if(!e.session||e.disposed)return;let t=Ms().find(s=>s.id===e.workspaceId),n=new Set(t?.reports??[]),r=new Set(t?.bundles??[]),o=new Set;try{o=new Set(await hx())}catch(s){console.warn(`objstore-presence: listFiles failed during discovery for "${e.workspaceId}":`,s)}if(e.disposed||!e.session)return;let i=[];for(let s of e.remoteTags){let a=e.remoteNameByTag.get(s);if(a!==void 0&&n.has(a)&&o.has(a)&&mK(e,s))continue;if(e.remoteBundleByTag.has(s)){let d=e.remoteBundleByTag.get(s);if(e.remoteBundleNameByIntegrity.has(d)&&r.has(d))continue}let l=e.inFlight.get(s);if(!l){let d=e.remoteMeta.get(s),u=()=>e.disposed||!e.remoteTags.has(s)||e.remoteMeta.get(s)===d?null:dx(e).then(()=>null,()=>null);l=e.session.fetchByTag(s).then(async f=>(e.inFlight.delete(s),e.disposed?null:f?e.remoteTags.has(s)?f.kind==="bundle"?(e.remoteBundleByTag.set(s,f.integrity),e.bundleTags.set(f.integrity,s),f.name&&e.remoteBundleNameByIntegrity.set(f.integrity,f.name),await kK(e,s,f.integrity,f.name,f.content),null):(e.remoteNameByTag.set(s,f.fileName),e.fileTags.set(f.fileName,s),await yK(e,s,f),null):null:u()),()=>(e.inFlight.delete(s),u())),e.inFlight.set(s,l)}i.push(l)}i.length!==0&&(await Promise.all(i),!e.disposed&&(Wo(e.workspaceId,e),Pr()))}async function yK(e,t,n){e.disposed||!e.remoteTags.has(t)||await bx(e,t,async()=>{await vK(e,t,n),!e.disposed&&e.remoteTags.has(t)&&Xc(e.baselines.get(t),e.remoteMeta.get(t))&&tb(e,t).catch(()=>{})})}async function vK(e,t,n){let r=n.fileName,o=n.content;if(e.disposed||!e.remoteTags.has(t))return;let i=Ms().find(u=>u.id===e.workspaceId),s=!!(i&&Array.isArray(i.reports)&&i.reports.includes(r)),a;try{let u=await hx();if(e.disposed||!e.remoteTags.has(t))return;a=u.includes(r)}catch(u){console.warn(`auto-download: listFiles failed before saving "${r}":`,u);return}if(a){if(s){await wK(e,t,n);return}if(e.disposed||!e.remoteTags.has(t))return;try{await ax(r,e.workspaceId)}catch(u){console.warn(`auto-download: attaching local "${r}" to workspace "${e.workspaceId}" failed:`,u);return}if(e.disposed)return;if(!e.baselines.has(t)){let{same:u,hash:f}=await yx(r,o);if(e.disposed)return;u!==null&&(dl(e,t,n,u,f),Wo(e.workspaceId,e))}for(let u of cx)try{u(e.workspaceId,r)}catch{}return}let l;try{l=ut(await Up(o))}catch(u){console.warn(`auto-download: gunzip/decode of "${r}" failed (likely forged peer payload):`,u);return}if(e.disposed||!e.remoteTags.has(t))return;let d=ux(l);if(d.recognized){try{if(await LT(e,r,o),e.disposed||!e.remoteTags.has(t)||(px(r,d.count,d.source),dl(e,t,n,!0,await Ho(o)),!e.remoteTags.has(t)))return;await ax(r,e.workspaceId),Wo(e.workspaceId,e)}catch(u){console.warn(`auto-download: persisting "${r}" to workspace "${e.workspaceId}" failed:`,u);return}if(!e.disposed)for(let u of cx)try{u(e.workspaceId,r)}catch{}}}async function wK(e,t,n){let r=()=>!e.disposed&&e.remoteTags.has(t),{same:o,hash:i}=await yx(n.fileName,n.content);if(!r()||o===null)return;let s=e.baselines.get(t);if(o){(!MT(s,n)||s.hash!==i)&&(dl(e,t,n,!0,i),Wo(e.workspaceId,e));return}if(Xc(s,n)&&!IT(s,i)){try{await OT(e,t,n,r)}catch(a){console.warn(`auto-download: ${a.message}`,a)}return}if(!s||s.incarnation===null||Xc(s,n)){dl(e,t,n,!1),Wo(e.workspaceId,e);return}AT(s,i)&&!e.localChanged.has(t)&&(e.localChanged.add(t),Pr())}async function tb(e,t,n=0){e.disposed||!e.remoteTags.has(t)||await bx(e,t,async()=>{let r=()=>!e.disposed&&e.remoteTags.has(t);if(!r())return;let o=e.baselines.get(t);if(o?.synced&&!Xc(o,e.remoteMeta.get(t)))return;let i;try{i=await e.session.fetchByTag(t)}catch(s){console.warn(`replace-refetch: fetchByTag failed for tag in workspace "${e.workspaceId}":`,s);return}if(!(!i||!r())&&i.kind!=="bundle"){e.remoteNameByTag.set(t,i.fileName),e.fileTags.set(i.fileName,t);try{await bK(e,t,i,r)}catch(s){console.warn(`replace-refetch: ${s.message}`,s);return}n<2&&r()&&Xc(e.baselines.get(t),e.remoteMeta.get(t))&&tb(e,t,n+1).catch(()=>{})}})}async function kK(e,t,n,r,o){if(e.disposed||!e.remoteTags.has(t))return;let i;try{i=await fx()}catch(d){console.warn(`auto-download: listBundles failed before saving bundle "${n}":`,d);return}if(e.disposed||!e.remoteTags.has(t))return;if(i.some(d=>d.integrity===n)){try{await lx(n,e.workspaceId)}catch(u){console.warn("auto-download: attach pre-existing bundle failed:",u);return}if(e.disposed)return;let d=i.find(u=>u.integrity===n)?.name??"";for(let u of vT)try{u(e.workspaceId,n,d)}catch{}return}let s=await Km(o);if(e.disposed||!e.remoteTags.has(t))return;if(s!==n){console.warn(`auto-download: bundle integrity mismatch (claimed ${n}, got ${s}) \u2014 refusing to save`);return}let a=r&&r.length>0?r:`bundle-${n.slice(7,15)}`,l=uK(a);try{if(await _T(l,o),e.disposed||!e.remoteTags.has(t))return;await lx(n,e.workspaceId)}catch(d){console.warn(`auto-download: persisting bundle "${n}" to workspace "${e.workspaceId}" failed:`,d);return}if(!e.disposed)for(let d of vT)try{d(e.workspaceId,n,l)}catch{}}var Ms,ax,lx,ux,px,Up,fx,hx,oK,mx,_T,CT,gr,iK,sK,ET,aK,lK,ix,cx,vT,wT,PT=$(()=>{"use strict";Tg();W4();Ig();Bk();bT();Ut();X0();Hc();gr=new Map,iK=2e3,sK={setTimeout:(e,t)=>setTimeout(e,t)},ET=new Map,aK=new Set,lK="deepview.objstore-presence.";ix=null;cx=new Set,vT=new Set;wT=256;Fg(e=>{Ms=e.listWorkspaces,ax=e.addReportToWorkspace,lx=e.addBundleToWorkspace,ux=e.analyzeContent,px=e.setCount,Up=e.gunzipBytes,fx=e.listBundles,hx=e.listFiles,oK=e.readBundle,mx=e.readFileBytes,_T=e.saveBundle,CT=e.saveFileBytes,e.onFileMutated?.((t,n)=>{for(let r of gr.values()){let o=r.fileTags.get(t);if(o!==void 0){if(n==="delete"){r.localChanged.delete(o)&&Pr();continue}if(r.selfWrites.has(t)){r.selfWriteNotices.set(t,(r.selfWriteNotices.get(t)??0)+1);continue}ET.has(t)||FT(r,o,t)}}}),e.onReportMembershipChanged(t=>{gr.has(t)||sx(t);let n=gr.get(t);if(!n)return;let r=Ms().find(o=>o.id===t);if(r)for(let o of r.reports??[])n.fileTags.has(o)||fK(t,o).catch(()=>{})}),e.onBundleMembershipChanged(t=>{gr.has(t)||sx(t);let n=gr.get(t);if(!n)return;let r=Ms().find(o=>o.id===t);if(r)for(let o of r.bundles??[])n.bundleTags.has(o)||hK(t,o).catch(()=>{})}),e.onWorkspaceDeleted(t=>{kT(t),yT(t)}),e.onWorkspacePrivateKeyChanged(t=>{gr.has(t)&&(kT(t),yT(t),sx(t))})})});function vx(){return{...NT,hydrateKey:L0,localContentSyncStatus:TT,readTriageBlob:async()=>(await pm(await vg(),e=>tp("report",e,()=>Zm(e)))).entries,reportSyncHash:e=>tp("report",e,async()=>Ho(await io(e)))}}function wx(e=NT){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,i,s)=>{let a=!1,l=!1,d=e.onVaultStateChange(()=>{a=!0}),u=i==="report"?e.onFileMutated:e.onBundleMutated,f=s===void 0?null:u(h=>{h===s&&(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 ${i} changed. Select it again before importing.`)},unsubscribe(){d(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(i=>({value:i,label:i})):(await e.listBundles()).map(i=>({value:i.integrity,label:i.name,secondary:i.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 i=n();try{i.check();let s=await r(o);return i.check(),s}finally{i.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let i=e.onVaultStateChange(()=>o()),s=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{i(),s(),a()}},async importItem(o,i,s,{signal:a}={}){let l=n(a,o,i);try{l.check();let{result:d}=await e.withStoredItem(o,i,async()=>{l.check();let u=(await r(o)).find(m=>m.value===i);if(l.check(),!u)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(i):await e.readBundle(i);l.check();let h=new File([f],u.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let m=Promise.resolve(s(h));return m.catch(()=>{}),{result:m}}finally{l.unsubscribe()}});return d}finally{l.unsubscribe()}}}}var NT,DT=$(()=>{"use strict";Gn();xc();no();Ar();_s();PT();Ig();NT={hasStoredBundleBytes:d1,listBundles:vn,listFiles:Pe,onBundleMutated:a1,onFileMutated:Kn,readBundle:Fr,readFile:Zm,withStoredItem:tp,isEncryptionEnabled:De,isUnlocked:Vn,onVaultStateChange:At,unlockEncryption:Ha}});function zT(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function Zc(){if(!zT()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function kx(){let e={supported:zT(),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 UT=$(()=>{"use strict"});function jT(){for(let e of xx)e()}function Qc(){return lt(nb)!=null}function $x(e){try{let t=JSON.parse(lt(nb)),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 Sx({server:e,deepview:t,provider:n,token:r}){await It(nb,JSON.stringify({server:e,deepview:t,provider:n,token:r})),jT()}async function _x(){await us(nb),jT()}function Cx(e){xx.add(e);let t=Lo(e);return()=>{xx.delete(e),t()}}var nb,xx,HT=$(()=>{"use strict";no();nb="deepview.scan.access",xx=new Set});function xK(){let e=dk(),t=Fm();return{version:Ex,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function $K(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function Rx(){let e=xK();return{blob:new Blob([await Zu(JSON.stringify(e))]),filename:$K()}}async function Tx(e){let t;try{t=await Va(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!==Ex)throw new Error(`Unsupported backup version: ${n.version} (expected ${Ex})`);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 Mx(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()])Uo.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(Uo.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ie(r,a,{color:l.color});let d=Xe(l);if(d&&(!o||!Xe(r.get(a)))&&ie(r,a,{triage:d}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ie(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ie(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ie(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wn(r.get(a)))for(let u of l.ignoredReports)typeof u=="string"&&St(r,a,u,!0,ir(l,u))}await Nc(),await We();let i=0,s=null;try{await m3(e.repoUrls,t),i=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),s=a}return{triageEntries:Object.keys(n).length,repoUrls:i,repoUrlError:s}}var Ex,WT=$(()=>{"use strict";Ka();eo();cr();_s();Ex=1});function SK(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function Ax(e){let t=new Set;for(let n of e){let r;try{r=await ot(n)}catch(i){if(SK(i))continue;throw new Error(`Failed to read ${n}: ${i.message}`,{cause:i})}if(r==null)continue;let o=await gn(r);if(o)for(let i of o.findings)i.id&&t.add(i.id)}return t}function _K(){let e=new Set;for(let t of c.triage.keys())Uo.test(t)||e.add(t);return e}async function rb(e){let t=_K();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await Ax(e),r=new Set;for(let u of t)n.has(u)&&r.add(u);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await Pe(),i=new Set(e),s=o.filter(u=>!i.has(u)),a=await Ax(s),l=0,d=0;for(let u of r)a.has(u)?d++:l++;return{orphanedCount:l,sharedCount:d}}async function ob(){let e=new Set(c.triage.keys()),t=[];for(let[s,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:s,report:l});let n=await Pe(),r=new Set(n),o=await Ax(n),i=!1;for(let s of e){if(Uo.test(s)||o.has(s))continue;let a=c.triage.get(s);!a||!(a.color||Xe(a)||a.comment||a.fix||a.flagged!==void 0)||ie(c.triage,s,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(i=!0)}for(let{id:s,report:a}of t)Uo.test(s)||o.has(s)&&r.has(a)||Da(c.triage,s,a)&&St(c.triage,s,a,!1)&&(i=!0);i&&await We()}var VT=$(()=>{"use strict";cr();eo();_s();Gn();Le()});var KT=$(()=>{"use strict"});async function YT(e,t){let n=await crypto.subtle.importKey("raw",be(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:t,iterations:3e6},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function JT(e){return!(e instanceof Uint8Array)||e.length<qT?!1:e[0]===Ix}async function ib(e,t){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof t!="string"||!t)throw new TypeError("encryptWithPassword: password required");let n=new Uint8Array(As+e.length+16);n[0]=Ix,crypto.getRandomValues(n.subarray(1,1+Is)),crypto.getRandomValues(n.subarray(1+Is,As));let r=n.subarray(1,1+Is),o=n.subarray(1+Is,As),i=await YT(t,r),s=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:n.subarray(0,As)},i,e));return n.set(s,As),n}async function EK(e,t){if(typeof t!="string"||!t)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<qT)return{ok:!1,reason:"malformed"};if(e[0]!==Ix)return{ok:!1,reason:"malformed"};let n=e.subarray(1,1+Is),r=e.subarray(1+Is,As),o=e.subarray(As),i=await YT(t,n),s;try{s=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:r,additionalData:e.subarray(0,As)},i,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:s}}async function sb(e,t,n){if(!n||typeof n.malformedMsg!="string"||typeof n.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let r=await EK(e,t);if(r.ok)return r.plaintext;throw r.reason==="wrong-password"?new Error(n.wrongPasswordMsg):new Error(n.malformedMsg)}var Ix,Is,GT,qT,As,Lx=$(()=>{"use strict";Ut();KT();Ix=1,Is=16,GT=12,qT=1+Is+GT+16,As=1+Is+GT});function ZT(e,t){return sb(e,t,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var jp,XT,Hp=$(()=>{"use strict";Lx();jp=JT,XT=ib});async function TK(e){let t=new Set,n=await gn(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function Fx(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function MK(e){if(!Array.isArray(e)||e.length===0)return[];let t=await vn(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let i=n.get(o);if(!i)continue;let s;try{s=await Fr(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:i,data:s.toBase64()})}return r}function AK(e){let t=Fn(e);return t?{github:t}:null}async function QT(e){let t=[];for(let n of e.reports??[]){let r;try{r=await ot(n)}catch(i){console.warn(`Workspace export: skipping ${n}: ${i?.message??i}`),(i instanceof DOMException&&i.name==="NotFoundError"||typeof i?.message=="string"&&i.message.startsWith("File not found:"))&&await vp(n,null);continue}let o=AK(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function IK(e,{includeBundleBytes:t=!1}={}){let n=await QT(e),r=new Set;for(let d of n)for(let u of await TK(d.content))r.add(u);let o=new Set(e.reports??[]),i={};for(let[d,u]of c.triage){if(!r.has(d))continue;let f=(u.ignoredReports??[]).filter(m=>o.has(m)),h=sr({...u,ignoredReports:f});h&&(i[d]=h)}let s={};for(let d of n)d.repo?.github&&(s[d.name]=d.repo.github);let a=(e.bundles??[]).filter(d=>typeof d=="string"&&d.length>0),l={version:RK,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:s,triage:i};if(t){let d=await MK(a);d.length>0&&(l.bundleBlobs=d)}return l}async function eM(e,{includeBundleBytes:t=!1}={}){let n=await IK(e,{includeBundleBytes:t});return{blob:new Blob([await Zu(JSON.stringify(n))]),filename:`${Fx(e.name)}.deepview-workspace.json.gz`}}async function LK(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await eM(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),i=await XT(o,t);return{blob:new Blob([i],{type:"application/octet-stream"}),filename:`${Fx(e.name)}.deepview-workspace.enc`}}async function Bx(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await LK(e,t,{includeBundleBytes:n}):await eM(e,{includeBundleBytes:n})}async function FK(e){return{reports:await QT(e)}}async function Ox(e){let t=await FK(e);return{blob:new Blob([await Zu(JSON.stringify(t))]),filename:`${Fx(e.name)}.deepview-reports.json.gz`}}var RK,tM=$(()=>{"use strict";cr();eo();Gn();xs();Le();Ka();Hp();RK=1});function PK(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==BK)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>ed)return`reports count (${e.reports.length}) exceeds cap (${ed})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>nM)return`bundles count (${e.bundles.length}) exceeds cap (${nM})`;for(let t of e.bundles){if(typeof t!="string")return"bundles entries must be strings";if(t.length>ab)return`bundle integrity exceeds per-entry length cap (${ab})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>oM)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${oM})`;for(let t of e.bundleBlobs){if(!t||typeof t!="object"||Array.isArray(t))return"bundleBlobs entries must be objects";if(typeof t.integrity!="string"||t.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(t.integrity.length>ab)return`bundleBlobs.integrity exceeds per-entry length cap (${ab})`;if(typeof t.name!="string"||t.name.length===0)return"bundleBlobs.name must be a non-empty string";if(t.name.length>rM)return`bundleBlobs.name exceeds per-entry length cap (${rM})`;if(t.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof t.data!="string")return"bundleBlobs.data must be a base64 string";if(t.data.length>OK)return`bundleBlobs.data exceeds per-blob size cap (${iM} bytes raw)`}}return null}async function lb(e){return new Uint8Array(await e.arrayBuffer())}async function cb(e,t){if(jp(e)){if(typeof t!="string"||!t)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let r=await ZT(e,t);try{return td(await Va(r))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let n;try{n=await Va(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}return td(n)}function td(e){let t;try{t=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let n=PK(t);if(n===null)return t;let r=n.includes("exceeds cap");throw new Error(r?n:`not a deepview workspace export: ${n}`)}var BK,nM,ed,ab,iM,OK,rM,oM,sM=$(()=>{"use strict";Ka();Hp();BK=1,nM=1024,ed=1024,ab=200,iM=100*1024*1024,OK=Math.ceil(iM*4/3)+16,rM=512,oM=64});function NK(e){return Xe(e)??null}async function DK(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await gn(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:Y1(o.description)})}return t}async function zK(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[i,s]of Object.entries(e)){if(!s||typeof s!="object")continue;let a=r.get(i)?.color,l=typeof s.color=="string"?s.color:void 0;l&&a&&a!==l?o.push({id:i,property:"color",local:a,imported:l}):l&&l!==a&&ie(r,i,{color:l});let d=r.get(i)?.comment??"",u=typeof s.comment=="string"?s.comment:"";u&&d&&d!==u?o.push({id:i,property:"comment",local:d,imported:u}):u&&u!==d&&ie(r,i,{comment:u});let f=r.get(i)?.fix??"",h=typeof s.fix=="string"?s.fix:"";h&&f&&f!==h?o.push({id:i,property:"fix",local:f,imported:h}):h&&h!==f&&ie(r,i,{fix:h});let m=NK(s),g=Xe(r.get(i))??null;m&&g&&g!==m?o.push({id:i,property:"triage",local:g,imported:m}):m&&!g&&ie(r,i,{triage:m,...m==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(i)?.flagged,w=typeof s.flagged=="boolean"?s.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:i,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ie(r,i,{flagged:w});let x=Array.isArray(s.ignoredReports)?s.ignoredReports:[];if(Wn(r.get(i)))for(let v of x)typeof v=="string"&&St(r,i,v,!0,ir(s,v))}if(o.length>0&&t){let i=await t(o,n??new Map);i&&UK(o,i)}await We()}function UK(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&jK(n.id,n.property)===n.local&&(n.property==="color"?ie(c.triage,n.id,{color:n.imported}):n.property==="comment"?ie(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ie(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ie(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ie(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function jK(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return Xe(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 HK(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 ws(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 Px(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await pr(f.name,f.content);let{count:h,source:m}=kn(f.content);wn(f.name,h,m??Lt(f.name)),n.push(f.name)}catch(h){console.warn(`Workspace import: failed to save ${f.name}: ${h.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await HK(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await DK(e.reports):new Map,i=await pm(e.triage,f=>e.reports.find(h=>h.name===f)?.content);await zK(i.entries,t,o);let s=Array.isArray(e.bundles),a=s?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await Y3({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:s?a:void 0,preserveBundles:!s,createdAt:e.workspace.createdAt}),d=new Set(n),u=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,h]of Object.entries(e.repoUrls))!d.has(f)||typeof h!="string"||!h||(u[f]=h);if(Object.keys(u).length>0)try{await Bm(u)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}var Nx=$(()=>{"use strict";Ar();cr();Gn();xs();_s();Bc();X1();Le();eo();sM()});function WK(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>ed?`reports count (${e.reports.length}) exceeds cap (${ed})`:null:"reports field must be an array"}function aM(e){return WK(e)===null}async function Dx(e){if(jp(e))return{kind:"encrypted"};let t;try{t=await Va(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 aM(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}var lM=$(()=>{"use strict";Nx();Ka();Hp()});async function zx({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 i=await pp(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await ib(be(JSON.stringify(i)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function Ux({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 sb(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await VK(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function VK(e){let t=JSON.parse(ut(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 pp(t.k),name:t.n,privateKeyBase64:t.k}}function jx(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function Hx(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 cM=$(()=>{"use strict";Ut();Lx();T1()});function rd(e=lt(Gx)){try{let t=JSON.parse(e);if(t?.version===dM&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:dM,revision:"",links:"[]",entries:{}}}function nd(){for(let e of Wx)e()}function pM(e){let t=pb.then(()=>Sc(Gx,n=>e(rd(n))));return pb=t.catch(n=>console.warn("workspace App cache:",n)),t}function db(e){return JSON.stringify(e.reports.toSorted())}function fM(){return JSON.stringify(rk().map(({name:e,groups:t})=>({name:e,groups:t})))}function Jx(e){return tk()&&e.links===fM()}function hM(e,t){return e.workspaceRevisions?.[t]??""}function mM(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(ub.get(t?.id)??0)&&n.workspaceRevision===hM(e,t?.id)}function gM(e,t,n){return n.reportEpoch===Yx&&n.reportRevision===(e.reportRevision??e.revision)&&mM(e,t,n)}function Xx(e,t){return gM(rd(),e,t)}function bM(e,t){if(Kx||Vx.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==db(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Zx(e){return bM(e,rd())?.appMode??null}function ul(e){let t=rd(),n=bM(e,t);return!n||!Jx(t)?null:n}async function Wp(e,t=null){let n;do n=pb,await n;while(n!==pb);let r=rd(),o=r.reportRevision??r.revision;return t&&(!gM(r,e,t)||!Jx(r))?null:{epoch:qx,revision:r.revision,reportEpoch:Yx,reportRevision:o,workspaceId:e?.id,workspaceEpoch:ub.get(e?.id)??0,workspaceRevision:hM(r,e?.id)}}async function Qx(e,t,n){let r=!1;return await pM(o=>{if(n.epoch!==qx||n.revision!==o.revision||!mM(o,e,n)||!Jx(o))return;let i=de().find(s=>s.id===e.id);if(!(!i||db(i)!==db(e)))return o.entries[e.id]={...t,reports:db(e)},r=!0,JSON.stringify(o)}),r&&nd(),r}function fb(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)qx++,t===void 0&&Yx++,Kx++;else for(let n of e)ub.set(n,(ub.get(n)??0)+1),Vx.add(n);return nd(),pM(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)Kx--;else for(let n of e)Vx.delete(n);nd()})}function e$(e){return Wx.add(e),()=>Wx.delete(e)}var Gx,dM,Wx,Vx,Kx,qx,Yx,ub,pb,uM,yM=$(()=>{"use strict";no();xs();F1();Gn();ik();Gx="deepview.workspaceApp",dM=2,Wx=new Set,Vx=new Set,Kx=0,qx=0,Yx=0,ub=new Map,pb=Promise.resolve(),uM=null;Lo(()=>{let e=lt(Gx);e!==uM&&(uM=e,nd())});mp(e=>{fb([e]).catch(()=>{})});hp(e=>{fb([e]).catch(()=>{})});Kn(e=>{let t=de().filter(n=>n.reports.includes(e)).map(n=>n.id);fb(t).catch(()=>{})});ol(()=>{if(!tk()){nd();return}let e=fM();rd().links===e?nd():fb(null,e).catch(()=>{})})});var q=$(()=>{"use strict";N3();J0();U3();Bc();Cc();X3();X1();hs();ik();o4();DT();xc();UT();no();HT();cr();Em();Gn();WT();VT();_s();eo();Hp();tM();Nx();lM();cM();xs();yM()});function vM(e){e.installSyncHost(KK),ak(()=>e.triageSync.notify())}var KK,wM=$(()=>{"use strict";cr();Bc();xs();Gn();_s();no();KK={get state(){return c},listWorkspaces:de,addReportToWorkspace:nl,addBundleToWorkspace:rl,onReportMembershipChanged:mp,onBundleMembershipChanged:A1,onWorkspaceDeleted:hp,onWorkspacePrivateKeyChanged:M1,analyzeContent:kn,setCount:wn,gunzipBytes:ur,listBundles:vn,listFiles:Pe,readBundle:Fr,readFileBytes:io,saveBundle:ws,saveFileBytes:Qm,onFileMutated:Kn,async saveTriage(){return await Nc(),We()},getSecureItem:lt,setSecureItem:It,removeSecureItem:us,onSecureStorageHydrated:Lo}});function SM(){try{return lt("deepview.sync.userEnabled")!=="0"}catch{return!0}}function gb(e){_M=!!e}function mb(){if(_M||c.serverMode!=="e2e")return!0;try{return lr()?.mode==="managed"}catch{return!1}}function Vp(){return pl||(mb()&&!$e?Promise.resolve(null):(pl=(async()=>{let e="./client-sync.js";try{let t=await import(e);return vM(t),$e=t,GK(),t}catch(t){throw pl=null,t}})(),pl))}function Kp(e){$e?e($e):CM.push(e)}function GK(){let e=CM.splice(0);for(let t of e)try{t($e)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function fl(e,t){let n={cancelled:!1,unsub:null};return Kp(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function t$(e,t){return $e?$e.isInRemote(e,t):!1}function EM(e,t){return $e?$e.isBundleInRemote(e,t):!1}function RM(e){try{let t=localStorage.getItem(qK+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function od(e,t){if($e&&$e.isInRemote(e,t))return!0;let n=RM(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function n$(e,t){if($e&&$e.isBundleInRemote(e,t))return!0;let n=RM(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function r$(e){return $e?$e.remoteCount(e):0}function TM(e){return $e?$e.differingReports(e):[]}function MM(e){return fl(e,(t,n)=>t.onAutoDownloaded(n))}function AM(e){return fl(e,(t,n)=>t.onBundleAutoDownloaded(n))}function IM(e){return fl(e,(t,n)=>t.onChange(n))}function LM(e){if($e){$e.setRedraw(e);return}kM=e,Kp(t=>{kM===e&&t.setRedraw(e)})}function FM(e){if($e){$e.setAuthenticationResolver(e);return}xM=e,Kp(t=>{xM===e&&t.setAuthenticationResolver(e)})}function BM(e){if($e){$e.setHydrationConflictResolver(e);return}$M=e,Kp(t=>{$M===e&&t.setHydrationConflictResolver(e)})}async function Vo(e,t){if(mb()||!SM()&&!$e)return;let n=await Vp();if(!(!n||mb()))return n[e](...t)}function OM(...e){return Vo("downloadFileFromRemote",e)}function PM(...e){return Vo("fetchBundleFromRemote",e)}function bb(...e){return Vo("putFile",e)}function NM(...e){return Vo("holdLocalChangeChecks",e)}function DM(...e){return Vo("putBundleToRemote",e)}function yb(...e){return Vo("deleteFromRemote",e)}function vb(...e){return Vo("deleteBundleFromRemote",e)}function Gp(...e){return Vo("openWorkspace",e)}async function o$(...e){return($e??(pl?await pl:null))?.closeWorkspace(...e)}function zM(...e){return Vo("recheckRemoteStorage",e)}function UM(...e){return Vo("resolveReportDifference",e)}function Li(e,t){if($e)return $e.triageSync[e](...t);Kp(n=>{n.triageSync[e](...t)})}var $e,pl,_M,CM,qK,kM,xM,$M,hb,me,co=$(()=>{"use strict";q();wM();$e=null,pl=null;_M=!1;CM=[];qK="deepview.objstore-presence.";kM=null,xM=null,$M=null,hb=[];me={get status(){return $e?$e.triageSync.status:"off"},get openSessions(){return $e?$e.triageSync.openSessions:[]},get persistenceDegraded(){return $e?$e.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return $e?$e.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return mb()?Promise.resolve(null):Vp().then(t=>{t.triageSync.setEnabled(!0);let n=hb;hb=[];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($e){hb=$e.openWorkspaceIds();for(let t of hb)try{$e.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}$e.triageSync.setEnabled(!1);return}Li("setEnabled",[e])},isEnabled(){return $e?$e.triageSync.isEnabled():SM()},openSession(e){Li("openSession",[e])},closeSession(e){Li("closeSession",[e])},refreshSession(e){Li("refreshSession",[e])},dismissError(e){Li("dismissError",[e])},setForcedOff(e){Li("setForcedOff",[e])},setProtocolLocked(e){Li("setProtocolLocked",[e])},setServerUrl(e){Li("setServerUrl",[e])},getServerUrl(){return $e?$e.triageSync.getServerUrl():null},notify(){Li("notify",[])},onStatusChange(e){return fl(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return fl(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return fl(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return fl(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}}});function i$(e){if(!e?.startsWith("#public="))return null;let t=/^#public=([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]{43})$/u.exec(e);return t?{id:t[1],token:t[2]}:{id:"",token:""}}function Ko(){return HM}function hl(e,t=HM){return t?`${e}#public=${t.id}.${t.token}`:e}var jM,HM,ml=$(()=>{"use strict";jM=globalThis.location?.hash,HM=i$(jM);globalThis.addEventListener?.("hashchange",()=>{let e=globalThis.location?.hash;e?.startsWith("#public=")&&e!==jM&&globalThis.location.reload()})});function s$(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function YK(e){let t=e.location.hash,n=i$(t),r=!1,o=null,i=0,s=null,a=null,l=!1,d=null,u=null;function f(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h(k){let S=qu(k),C=S?.view==="home"?ps(k.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function m(){try{let k=e.sessionStorage?.getItem(wb);if(e.sessionStorage?.removeItem(wb),!k)return null;let S=new URL(k,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function g(){if(!r||!ps(e.location.hash)||d===e.location.href||e.history.state?.[Go]&&e.history.state[Go]!==o)return;let k=d=e.location.href,S=h(new URL(k));w(S??{view:"home"},{replace:!0}).finally(()=>{d===k&&(d=null)})}function y(k){f()||(k=hl(k,n),e.history.replaceState(r?{[Go]:o}:null,"",k),a=k)}async function w(k,{replace:S=!1,pop:C=!1}={}){if(!r||!s||f())return!1;k??={view:"home"};let _=dr(k);if(_===null)return!1;let E=++i,O=u={route:k,findingRoute:null},z=()=>r&&E===i&&!f(),T=!1;try{T=await s(k,z)}catch(D){console.warn("managed: navigation failed:",D)}return z()?T?(typeof T=="object"&&(_=dr(T)??_),s$(O.findingRoute,typeof T=="object"?T:k)&&(_=dr(O.findingRoute)),u=null,C||S?y(_):hl(_,n)!==a&&(_=hl(_,n),e.history.pushState({[Go]:o},"",_),a=_),!0):(await s({view:"home"},z),z()&&(u=null,y("/")),!1):!1}function x(k){if(f())return;if(!r){k.state?.[Go]&&y("/");return}if((!k.state?.[Go]||k.state[Go]===o)&&ps(e.location.hash)){g();return}let S=k.state?.[Go]===o?h(new URL(e.location.href)):null;w(S??{view:"home"},{pop:!0})}function v(k){if(!r||k.defaultPrevented||k.button!==0||k.metaKey||k.ctrlKey||k.shiftKey||k.altKey)return;let S=k.composedPath().find(E=>E.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 _=h(C);if(_?.finding)return k.preventDefault(),w(_)}return{get active(){return r},rememberFinding(){let k=h(new URL(e.location.href));if(!k?.finding)return;let S=k.view==="home"?`/#${Po(k.finding)}`:dr(k);try{e.sessionStorage?.setItem(wb,S)}catch{}},start(k){if(r)return;r=!0,s=k,o=typeof e.history.state?.[Go]=="string"?e.history.state[Go]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",g),e.addEventListener("click",v),e.launchQueue?.setConsumer(({targetURL:_})=>{if(!r||!_)return;let E=new URL(_);if(E.origin!==e.location.origin)return;let O=h(E);O&&w(O)}),l=!0);let S=m(),C=h(new URL(e.location.href))??{view:"home"};return S&&C.view==="home"&&!C.finding&&(C=S),w(C,{replace:!0})},navigate:w,replaceFindingRoute(k){if(!r||k?.view!=="findings"||f())return;let S=dr(k);if(S!=null){if(u){(u.route.view==="home"&&u.route.finding||s$(k,{...u.route,view:"findings"}))&&(u.findingRoute=k);return}s$(k,qu(new URL(e.location.href)))&&hl(S,n)!==a&&y(S)}},replaceRoute(k){if(!r||!k||f())return;let S=dr(k);S!=null&&y(S)},reset({force:k=!1}={}){if(++i,u=null,r||k){try{e.sessionStorage?.removeItem(wb)}catch{}r=!1,o=null,s=null,y("/")}}}}var Go,wb,Ve,id=$(()=>{"use strict";Ti();Cc();ml();Go="deepviewManagedNavigation",wb="deepviewManagedLoginFinding";Ve=typeof window>"u"?null:YK(window)});function WM(e){return typeof e=="string"&&qp.includes(e)}function sd(e,t){let n=qp.indexOf(e);return n!==-1&&n<=qp.indexOf(t)}var qp,Yp=$(()=>{"use strict";qp=["admin","manage","triage","view","none"]});function gl(e){return A()&&!c.managedSession?.publicShare&&sd(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}var kb=$(()=>{"use strict";q();Yp()});function VM(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function JK(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 KM(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]}`,i=Number(r[3]);return!JK(o)||!Number.isSafeInteger(i)||i<=0?null:{repo:o,number:i}}function Jp(e){return KM(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Xp(e){return KM(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function a$(e){let t=Jp(e);if(t)return{...t,kind:"pull"};let n=Xp(e);return n?{...n,kind:"issue"}:null}function l$(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}var xb=$(()=>{"use strict"});function $b(e){return A()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function qo(e){return $b(e)?.autoFix??""}function Zp(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let i=Object.hasOwn(t,o)?t[o]:null,s=Xp(i?.url)?{url:i.url,autoFix:Jp(i.autoFix)?i.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===s?.url&&a?.autoFix===s?.autoFix||(s?c.managedIssues.set(o,s):c.managedIssues.delete(o),r=!0)}return r}var bl=$(()=>{"use strict";q();xb()});function XK(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 Sb,GM=$(()=>{"use strict";xb();Sb=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=XK(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&&a$(t);if(!o)return null;let i=l$(o),s=this.entries.get(i)??null;return n&&!s&&(this.run?this.required.add(i):this.expires=0),this.expires<=this.now()&&this.schedule(),s}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 i of Array.isArray(r)?r:[]){let s=a$(i?.url);if(s&&typeof i.title=="string"&&["open","draft","closed","merged"].includes(i.status)){let a=s.kind==="issue"&&i.status==="closed"?VM(i.stateReason):null;this.entries.set(l$(s),{title:i.title,description:typeof i.description=="string"?i.description:null,status:i.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(i=>!this.entries.has(i));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}}});function qM(e){return _b.add(e),()=>_b.delete(e)}function c$(){Qp.reset();for(let e of _b)e()}function ad(e){c.currentManagedTeam===e&&c$()}function d$(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(i=>({id:i,issue:c.managedIssues.get(i)}));r.some(({id:i,issue:s})=>s?.url!==n.get(i)?.url)&&ad(e);for(let{id:i,issue:s}of r)s?.autoFix&&s.autoFix!==n.get(i)?.autoFix&&Qp.read(s.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:i})=>i?.url)?.issue.url;o&&Qp.read(o)}var _b,Qp,ef=$(()=>{"use strict";q();GM();xn();_b=new Set,Qp=new Sb({context:()=>{let e=c.managedSession;return A()&&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:YM,changed:()=>{for(let e of _b)e()}})});var tf,te,JM=$(()=>{Yr();Ea();tf=class extends Un{constructor(t){if(super(t),this.it=b,t.type!==An.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===b||t==null)return this._t=void 0,this.it=t;if(t===Tt)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let n=[t];return n.raw=n,this._t={_$litType$:this.constructor.resultType,strings:n,values:[]}}};tf.directiveName="unsafeHTML",tf.resultType=1;te=Er(tf)});var wt=$(()=>{JM()});var Cb,Yn,Ls,XM,ZM,Eb,ld,cd,dd,Rb,QM,br,Tb,eA,tA,jt=$(()=>{"use strict";Cb="m5.875 10.154 1.376-.772.023-.067-.023-.037h-.067l-.23-.015-.787-.02-.681-.03-.661-.035-.166-.035-.156-.205.016-.103.14-.094.2.018.442.03.665.046.481.028.714.075h.113l.016-.047-.039-.028-.03-.028-.687-.466-.744-.492-.39-.284-.21-.143-.106-.135-.046-.294.19-.21.258.017.065.018.26.2.557.43.726.535.106.089.042-.03.006-.022-.048-.08-.395-.713-.422-.726-.187-.301-.05-.18a1 1 0 0 1-.03-.213l.218-.296.12-.039.29.039.123.106.18.413.293.65.453.884.133.262.07.242.027.075h.046v-.043l.038-.497.069-.611.067-.787.023-.221.11-.266.218-.143.17.081.14.2-.02.13-.083.54-.163.846-.106.567h.062l.07-.07.287-.382.482-.602.213-.239.248-.264.159-.125h.301l.221.329-.099.34-.31.393-.256.333-.369.496-.23.397.021.032.055-.006.832-.177.45-.081.537-.092.243.113.026.115-.096.236-.573.141-.673.135-1.003.237-.012.01.014.017.452.042.193.01h.473l.88.066.23.153.138.186-.023.141-.354.181-.478-.113-1.116-.266-.383-.096h-.053v.032l.32.312.584.528.731.68.037.168-.094.133-.099-.014-.643-.484-.248-.218-.561-.472H9.08v.05l.129.189.684 1.027.035.315-.05.103-.177.062-.194-.036-.4-.561-.413-.632-.333-.567-.041.023-.197 2.116-.092.108-.212.082-.177-.135-.094-.218.094-.43.113-.561.092-.447.083-.554.05-.184-.004-.013-.04.006-.418.574-.636.858-.503.539-.12.048-.21-.108.02-.193.117-.172.696-.886.42-.549.27-.317-.001-.046h-.016l-1.85 1.201-.328.042-.142-.132.018-.218.067-.071.556-.383Z",Yn='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2 2 5v6l6 3 6-3V5L8 2Z"/><path d="M2 5l6 3 6-3"/><path d="M8 8v6"/></svg>',Ls='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="11" height="9" rx="1.2"/><path d="M6 4V3h4v1"/></svg>',XM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4.5 4.5 7 2-5 5z"/><circle cx="4.5" cy="4.5" r="2" fill="currentColor"/><circle cx="11.5" cy="6.5" r="2" fill="currentColor"/><circle cx="6.5" cy="11.5" r="2" fill="currentColor"/></svg>',ZM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="2.5" r="1.5" fill="currentColor"/><circle cx="3" cy="13" r="1.5" fill="currentColor"/><circle cx="8" cy="13" r="1.5" fill="currentColor"/><circle cx="13" cy="13" r="1.5" fill="currentColor"/><path d="M8 4v3M8 7H3m5 0h5M3 7v4M8 7v4M13 7v4"/></svg>',Eb='<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>',ld='<svg class="file-icon" 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="M6.67 8.67a3.33 3.33 0 0 0 5.03.36l2-2a3.33 3.33 0 0 0-4.71-4.71l-1.15 1.14"/><path d="M9.33 7.33a3.33 3.33 0 0 0-5.03-.36l-2 2a3.33 3.33 0 0 0 4.71 4.71l1.14-1.14"/></svg>',cd='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 1.5H2.5a1 1 0 0 0-1 1V5m9.5-3.5h2.5a1 1 0 0 1 1 1V5M1.5 11v2.5a1 1 0 0 0 1 1H5m6 0h2.5a1 1 0 0 0 1-1V11"/><circle cx="7.25" cy="7.25" r="2.75"/><path d="m9.25 9.25 2.25 2.25"/></svg>',dd='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 1.5H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V5.5L9 1.5ZM9 1.5v4h4M5.5 8h5m-5 3h3.5"/></svg>',Rb='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4.5 4.5-3 3.5 3 3.5m7-7 3 3.5-3 3.5M9.5 2l-3 12"/></svg>',QM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6.5 3.5 1.6 3.9L12 9l-3.9 1.6-1.6 3.9-1.6-3.9L1 9l3.9-1.6 1.6-3.9ZM12 1.5v4m-2-2h4"/></svg>',br='<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path fill="currentColor" 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-.27s1.36.09 2 .27c1.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.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>',Tb='<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M1 8h3.5m7 0H15"/><circle cx="8" cy="8" r="3.5"/></svg>',eA='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m10 2 4 4-8 8H2v-4l8-8Zm-1 1 4 4"/></svg>',tA='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4h12M6 4V2h4v2M4 4l.6 10h6.8L12 4M6.5 7v4m3-4v4"/></svg>'});var nA,ZK,nf,Ft,Mb=$(()=>{"use strict";jt();nA={default:{className:"brand-deepview",mark:'<path class="fg" d="M7.843 6.719c-1.605 0-2.926 1.292-3.477 1.947.466.58 1.872 2.024 3.496 2.024s2.907-1.292 3.486-2.005c-.627-.703-1.88-1.966-3.505-1.966m.019 3.857c-1.51 0-2.802-1.263-3.353-1.9.55-.617 1.814-1.852 3.334-1.852 1.51 0 2.698 1.12 3.335 1.852-.533.618-1.787 1.9-3.316 1.9m-.019-3.42c-.826 0-1.577.694-1.577 1.596 0 .789.599 1.577 1.577 1.577.893 0 1.587-.684 1.587-1.577-.01-.779-.627-1.596-1.587-1.596m0 3.069a1.476 1.476 0 0 1-1.482-1.473c0-.722.599-1.491 1.482-1.491.846 0 1.482.693 1.492 1.491 0 .808-.618 1.473-1.492 1.473m.01-2.727c-.637 0-1.264.532-1.264 1.244 0 .627.475 1.235 1.245 1.245.684 0 1.254-.522 1.254-1.244 0-.58-.475-1.236-1.235-1.245m-.02 2.403a1.167 1.167 0 0 1-1.149-1.159c0-.532.456-1.14 1.169-1.149.56 0 1.149.427 1.159 1.15 0 .636-.485 1.158-1.179 1.158m-.769-1.833c-.19.238-.275.494-.237.864l.74.057zm1.026-.294c-.295-.057-.665 0-.912.228l.323.607zm.133.047-.38.56.988.114c-.057-.275-.323-.579-.608-.674m-.124.741.456.912c.21-.209.352-.484.314-.836zm-1.225.504a.97.97 0 0 0 .57.617l.399-.551zm.713.664c.313.076.636.01.845-.161l-.295-.618zm-.637 1.55c0 .028-.028.066-.066.066h-.59c-.028 0-.066-.028-.066-.066s.029-.066.067-.066h.579c.048 0 .076.028.076.066m.712 0c0 .028-.028.066-.066.066h-.437c-.028 0-.066-.028-.066-.066s.028-.066.066-.066h.437c.038 0 .066.028.066.066m.666 0c0 .028-.029.066-.067.066h-.37c-.029 0-.067-.028-.067-.066s.029-.066.067-.066h.37c.038 0 .067.028.067.066m-1.672.351c0 .029-.029.067-.067.067h-.295c-.028 0-.066-.028-.066-.066 0-.029.029-.067.067-.067h.294c.038 0 .066.028.066.066m.694 0c0 .029-.028.067-.066.067h-.409c-.028 0-.066-.028-.066-.066 0-.029.028-.067.066-.067h.399c.038 0 .076.028.076.066m.732 0c0 .029-.029.067-.067.067h-.465c-.029 0-.067-.028-.067-.066 0-.029.029-.067.067-.067h.465c.038 0 .067.028.067.066m-1.093.371a.065.065 0 0 1-.067.066h-.627c-.028 0-.075-.028-.066-.066 0-.028.029-.066.067-.066h.627c.038 0 .066.028.066.066m.684 0a.065.065 0 0 1-.066.066h-.39c-.028 0-.076-.028-.066-.066 0-.028.028-.066.066-.066h.39c.038 0 .066.028.066.066M5.088 6.263c-.019-.105-.114-.19-.237-.19s-.257.104-.257.237.105.238.247.238c.105 0 .218-.076.238-.18h.864v.826l.095-.048V6.31c0-.028-.019-.057-.048-.057h-.902zm-.237.19c-.076 0-.143-.066-.143-.143s.066-.142.143-.142.142.066.142.143c.01.076-.066.142-.143.142m2.89-.323H6.38l.418-.475v-.332a.255.255 0 0 0 .218-.248c0-.123-.114-.256-.256-.256s-.266.114-.266.257c0 .123.095.228.209.247v.284l-.456.523v.893l.095-.047v-.742h1.396c.029 0 .067-.009.067-.057 0-.028-.019-.047-.067-.047m-1.13-1.054c0-.076.066-.152.152-.152s.152.066.152.151c0 .076-.066.152-.152.152s-.152-.066-.152-.152m-.836 5.264h-.874c-.019-.105-.114-.219-.247-.219s-.256.105-.256.257c0 .132.114.275.266.275.104 0 .218-.076.237-.19h.827v.608l-.257.285a.3.3 0 0 0-.095-.019c-.133 0-.256.105-.256.228 0 .133.104.238.237.238.124 0 .247-.105.247-.238a.23.23 0 0 0-.057-.152l.285-.304v-.712c0-.029-.019-.058-.057-.058m-1.121.219a.16.16 0 0 1-.152-.161c0-.077.066-.162.152-.162s.152.066.152.152-.066.171-.152.171m.713 1.14c-.076 0-.143-.066-.143-.143s.066-.133.143-.133.142.067.142.143c0 .066-.066.133-.143.133m5.472-1.377a.24.24 0 0 0-.237.208h-1.13c-.029 0-.038.02-.038.048v.712l-.323.39h-.029a.245.245 0 0 0-.247.247c0 .133.114.256.247.256s.247-.113.247-.256a.26.26 0 0 0-.123-.219l.313-.38v-.674h1.083c.019.105.114.2.238.2.133 0 .266-.105.266-.257 0-.133-.105-.276-.266-.276m-1.758 1.767a.15.15 0 0 1-.143-.152c0-.075.067-.142.143-.142s.152.066.152.143a.15.15 0 0 1-.152.151m1.758-1.33a.15.15 0 0 1-.143-.152.147.147 0 0 1 .294.001.15.15 0 0 1-.152.151M8.917 5.55h-.399a.075.075 0 0 1-.076-.076c0-.028.029-.066.067-.066h.418c.028 0 .066.028.066.066s-.038.076-.076.076m.742 0H9.22c-.038 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.437c.038 0 .066.028.066.066s-.028.076-.066.076m.883 0h-.598c-.029 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.598c.028 0 .066.028.066.066s-.028.076-.066.076m-1.282.4h-.741c-.038 0-.076-.029-.076-.067s.028-.076.066-.076h.75c.039 0 .067.038.067.076 0 .029-.028.067-.066.067m.797 0h-.503c-.038 0-.076-.029-.076-.067s.028-.066.066-.066h.513c.038 0 .067.028.067.066 0 .029-.029.067-.067.067m.476 0h-.19c-.039 0-.067-.029-.067-.067s.028-.066.066-.066h.2c.028 0 .066.028.066.066 0 .029-.028.067-.075.067m-1.682.398h-.332c-.039 0-.077-.028-.077-.066s.029-.066.067-.066h.342c.038 0 .076.028.076.066s-.028.066-.076.066m.789 0h-.494c-.038 0-.067-.028-.067-.066s.029-.066.067-.066h.494c.038 0 .066.028.066.066s-.028.066-.066.066m.893 0h-.599c-.038 0-.076-.028-.076-.066s.028-.066.066-.066h.618c.028 0 .066.028.066.066s-.028.066-.076.066m.418.305a.69.69 0 0 0-.674.712c0 .086.019.18.048.257l.085.066c-.028-.085-.057-.171-.057-.304 0-.285.228-.646.598-.646.295 0 .599.228.599.636a.58.58 0 0 1-.599.59.8.8 0 0 1-.237-.048l.123.114a.4.4 0 0 0 .114.01c.39 0 .684-.276.684-.666 0-.313-.266-.712-.684-.722m.353.552-.019-.01-.161.19-.143-.01-.057-.047-.019-.133.19-.2a.28.28 0 0 0-.361.077c-.076.095-.076.209-.038.351l-.247.304.171.152.266-.266c.142.038.285.019.38-.095a.31.31 0 0 0 .038-.313"/>'},"claude-security":{className:"brand-claude",mark:`<path class="fg" d="${Cb}"/>`},"codex-security":{className:"brand-codex",mark:'<path class="fg" d="M11.04 8.364a1.72 1.72 0 0 0-.152-1.432 1.8 1.8 0 0 0-1.925-.846 1.8 1.8 0 0 0-.778-.498 1.8 1.8 0 0 0-.927-.05 1.8 1.8 0 0 0-.827.414 1.77 1.77 0 0 0-.507.767 1.8 1.8 0 0 0-.683.297 1.75 1.75 0 0 0-.499.549 1.75 1.75 0 0 0 .22 2.07 1.72 1.72 0 0 0 .151 1.432 1.8 1.8 0 0 0 1.926.846 1.77 1.77 0 0 0 1.333.587c.78 0 1.47-.496 1.707-1.227a1.8 1.8 0 0 0 .684-.298 1.75 1.75 0 0 0 .499-.548 1.75 1.75 0 0 0-.222-2.063m-2.667 3.678a1.33 1.33 0 0 1-.851-.304l.042-.024 1.413-.804a.23.23 0 0 0 .116-.199V8.747l.597.34q.01.005.011.015v1.629a1.323 1.323 0 0 1-1.328 1.31m-2.857-1.203a1.3 1.3 0 0 1-.158-.879l.042.025 1.414.805a.23.23 0 0 0 .23 0l1.729-.982v.68a.02.02 0 0 1-.01.018l-1.431.814a1.34 1.34 0 0 1-1.816-.48m-.372-3.037a1.32 1.32 0 0 1 .7-.574v1.656a.22.22 0 0 0 .114.197l1.72.979-.598.34a.02.02 0 0 1-.021 0L5.63 9.587a1.304 1.304 0 0 1-.487-1.791zm4.907 1.125L8.327 7.94l.596-.34a.02.02 0 0 1 .02 0l1.43.814a1.3 1.3 0 0 1 .512.528 1.3 1.3 0 0 1-.118 1.4 1.33 1.33 0 0 1-.595.436V9.122a.23.23 0 0 0-.12-.195m.594-.881-.042-.025-1.411-.812a.23.23 0 0 0-.232 0l-1.727.983v-.68a.02.02 0 0 1 .008-.018l1.429-.813a1.34 1.34 0 0 1 1.425.061 1.3 1.3 0 0 1 .55 1.298zM6.908 9.252l-.597-.34a.02.02 0 0 1-.012-.016V7.271c0-.249.073-.493.209-.703s.329-.378.557-.483a1.35 1.35 0 0 1 1.415.18l-.042.023-1.413.804a.23.23 0 0 0-.116.2zm.324-.69.77-.438.77.438v.875l-.768.437-.77-.437z"/>'},deepsec:{className:"brand-vercel",mark:'<path class="fg" d="m8 5.97 3.5 6.062h-7Z"/>'},"markdown-generic":{className:"brand-markdown",mark:'<path class="fg" d="M4 7h1.2l1.2 1.5L7.6 7h1.2v4H7.6V8.8L6.4 10 5.2 8.8V11H4zm5.6 0h1.2v2.3H12l-1.8 1.8-1.8-1.8h1.2Z"/>'},piolium:{className:"brand-piolium",mark:'<path class="fg" d="M8 6.4 5.6 7.2v2.3c0 1.6 1 2.7 2.4 3.3 1.4-.6 2.4-1.7 2.4-3.3V7.2Z"/>'}},ZK={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"],"markdown-generic":["#374151","#fff"]},nf=Object.fromEntries(Object.entries(nA).map(([e,{className:t,mark:n}])=>{let[r,o]=ZK[e],i=e==="codex-security"||e==="deepsec"?` stroke="${o}" stroke-width=".5"`:"";return[e,`<svg class="file-icon ${t}" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path class="bg" fill="${r}"${i} d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/><g fill="${o}">${n}</g></svg>`]})),Ft=Object.fromEntries(Object.entries(nA).map(([e,{className:t,mark:n}])=>[e,`<span class="report-logo ${t}" aria-hidden="true"><svg viewBox="${e==="default"?"3.5 4 9 9":"4 5 8 8"}" width="14" height="14">${n}</svg></span>`]))});function Ne(e){let t=e.toLowerCase();if(t.endsWith(".generic-md")){let n=e.slice(0,-11);try{return decodeURIComponent(n)}catch{return n}}return t.endsWith(".codex")?e.slice(0,-6).replaceAll("__","/"):e}var u$=$(()=>{"use strict"});function eG(e){return e!=="default"&&Object.hasOwn(Ft,e)?e:null}function Ab(e){return eG(e._source??e.source)}function Bt(e){return p$(e,Lt(e))}function p$(e,t){if(t===vt)return vt;if(t!==void 0)return QK.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 Ib(e){return Lt(e)===vt}var Ze,QK,ud,uo=$(()=>{"use strict";q();Mb();Mb();Le();jt();u$();Ze={...nf,[vt]:ld},QK=new Set(Object.keys(nn)),ud={...nn,default:"DeepView"}});function rf(e=document){if(e.querySelector(":modal"))return!0;for(let t of e.querySelectorAll("*"))if(t.shadowRoot&&rf(t.shadowRoot))return!0;return!1}var f$=$(()=>{"use strict"});function yl(e){return typeof e=="string"&&/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(e)?e:null}var of=$(()=>{"use strict"});function tG(){return Nr||(Nr=document.createElement("div"),Nr.id="styled-tooltip",Nr.setAttribute("popover","manual"),document.body.append(Nr),Nr)}function nG(e){typeof e.showPopover=="function"&&(e.matches(":popover-open")&&e.hidePopover(),e.showPopover())}function h$(e,{placement:t="cursor"}={}){t=e.dataset.tooltipPlacement??t;let n=tG(),r=e.dataset.tooltip??"",o=e.dataset.tooltipRepo??"",i=yl(e.dataset.tooltipCommit),s=["stasis","sourcemap"].includes(e.dataset.tooltipBundle)?e.dataset.tooltipBundle:"",a=e.dataset.tooltipStats??"",l=e.dataset.tooltipBuilt==="true",d=e.dataset.tooltipPackage??"",u=e.dataset.tooltipEcosystem??"",f=e.dataset.tooltipVersion??"",h=e.dataset.tooltipFiles??"",m=JSON.stringify([r,o,i,s,a,l,d,u,f,h]);if(!r||Fs===e&&rA===m)return;if(n.textContent=r,d){let _=document.createElement("div");_.className="tooltip-package";let E=(e.querySelector("[data-tooltip-package-icon] svg")??e.querySelector("svg"))?.cloneNode(!0);E&&_.append(E);let O=document.createElement("span");O.className="tooltip-package-details";for(let z of[d,f,/^\d+$/u.test(h)?`${h} ${h==="1"?"file":"files"}`:""].filter(Boolean)){let T=document.createElement("span");T.textContent=z,O.append(T)}_.append(O),n.append(_)}if(o||i){let _=document.createElement("div");if(_.className="tooltip-repo",o){_.innerHTML=br;let E=document.createElement("span");E.textContent=o,_.append(E)}if(i){let E=document.createElement("span");E.className="tooltip-commit",E.innerHTML=Tb;let O=document.createElement("span");O.textContent=i.slice(0,7),E.append(O),_.append(E)}n.append(_)}if(s||a||l){let _=document.createElement("div");if(_.className="tooltip-bundle",s==="stasis"){let z=document.createElement("img");z.src="./stasis.svg",z.alt="",_.append(z)}else _.innerHTML=Yn;let E=document.createElement("span"),O=s==="stasis"?"Stasis":s==="sourcemap"?"Sourcemap":"";E.textContent=[O,l?"Built on server":"",a].filter(Boolean).join(" \xB7 "),_.append(E),n.append(_)}nG(n),n.style.left="0px",n.style.top="0px",n.style.transform="none",n.classList.add("visible");let g=aA,y=lA+oG;if(t==="right"||t==="right-start"){let _=e.getBoundingClientRect();g=_.right+iG,y=_.top+(t==="right"?_.height/2:0)}let w=window.innerWidth-n.offsetWidth-Lb,x=Math.max(Lb,Math.min(g,w));n.style.left=`${Math.round(x)}px`;let v=n.offsetHeight,k=t==="right"?y-v/2:y,S=window.innerHeight-v-Lb,C=Math.max(Lb,Math.min(k,S));n.style.top=`${Math.round(C)}px`,Fs=e,rA=m}function Bs(){clearTimeout(sf),sf=null,Nr&&(Nr.classList.remove("visible"),typeof Nr.hidePopover=="function"&&Nr.matches(":popover-open")&&Nr.hidePopover()),Fs=null}function cA(e,{gate:t,placement:n}={}){Object.hasOwn(e.dataset,"tooltipTruncated")&&e.scrollWidth<=e.clientWidth&&e.scrollHeight<=e.clientHeight||t&&!t(e)||(clearTimeout(sf),sf=setTimeout(()=>{h$(e,{placement:n})},rG))}function iA(e,t){for(let n of e.composedPath()){if(n===t)break;if(n.nodeType===1&&Object.hasOwn(n.dataset,"tooltip"))return n}return null}function Jn(e,t){!e||oA.has(e)||(oA.add(e),e.addEventListener("mouseover",n=>{let r=iA(n,e);if(!r){Bs();return}r!==Fs&&cA(r,t)}),e.addEventListener("mouseout",n=>{let r=iA(n,e),o=n.relatedTarget?.closest?.("[data-tooltip]")??null;r&&r===o||Bs()}))}function dA(){sA||(sA=!0,document.addEventListener("tooltip-root-connected",e=>{Jn(e.composedPath()[0]?.shadowRoot)}),document.body.addEventListener("mouseover",e=>{if(e.target.closest("[data-tooltip-managed]"))return;let t=e.target.closest("[data-tooltip]");!t||t===Fs||(Bs(),cA(t))}),document.body.addEventListener("mouseout",e=>{e.target.closest("[data-tooltip-managed]")||e.relatedTarget?.closest?.("[data-tooltip-managed]")||!Fs&&!sf||Fs&&Fs.contains(e.relatedTarget)||Bs()}))}var Nr,Fs,rA,sf,aA,lA,rG,oG,iG,Lb,oA,sA,Os=$(()=>{"use strict";jt();of();Fs=null,rA="",sf=null,aA=0,lA=0;document.addEventListener("mousemove",e=>{aA=e.clientX,lA=e.clientY},{passive:!0});rG=100,oG=14,iG=8,Lb=8;oA=new WeakSet;sA=!1});var pA,uA=$(()=>{pA=`a{cursor:default}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}button,summary,select,label,legend,header h3,.section-title,.ui-hint,.hint,.note,.lwd-note,.lwd-empty,.empty:not(.error,[role=alert]),.empty-discussion,.history-state[role=status],.history-summary{cursor:default;user-select:none;-webkit-user-select:none}input:not([type=checkbox],[type=radio]),textarea,[contenteditable],pre,code,.mono{cursor:text;user-select:text;-webkit-user-select:text}dialog{margin-top:5rem;margin-inline:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--surface);color:var(--text);padding:1.1rem 1.25rem 1rem;max-width:480px;width:min(94vw,480px);box-shadow:0 20px 60px #00000059;&::backdrop{background:rgb(from var(--theme-bar) r g b / .55);backdrop-filter:blur(2px)}}header h3{margin:0 0 .6rem;font-size:1rem;font-weight:600}.nwd-input{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:.88rem;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}.nwd-note{margin:.55rem 0 0;color:var(--muted);font-size:.74rem;line-height:1.45}.nwd-intro{margin:0 0 .8rem;color:var(--muted);font-size:.82rem;line-height:1.5}.nwd-actions{display:flex;align-items:center;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.nwd-spacer{flex:1}.nwd-actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent);&:hover:not(:disabled){color:var(--surface);filter:brightness(1.08)}}&.quiet{border-color:transparent;color:var(--muted);&:hover:not(:disabled){border-color:transparent}}&.danger{color:var(--critical, #f87171);border-color:var(--border);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--critical, #f87171)}}&:disabled{opacity:.5}}@media(display-mode:window-controls-overlay){dialog{-webkit-app-region:no-drag;app-region:no-drag}}
|
|
103
|
-
`});function ge(e,t={}){return new Promise(n=>{let r=document.createElement(e);Object.assign(r,t),r.addEventListener("resolve",o=>{r.remove(),n(o.detail)}),document.body.append(r)})}function Ps(e,t,n){return new Promise((r,o)=>{let i=document.createElement(e);Object.assign(i,t),i.exclusive=!0,i.addEventListener("resolve",s=>{i.remove(),r(s.detail)}),i.addEventListener("modal-conflict",s=>{n(i),i.remove(),o(oc(s.detail?.cause))}),document.body.append(i)})}var H,Ee=$(()=>{"use strict";P();nr();f$();Os();uA();H=class extends
|
|
102
|
+
`)})}return n}},Bg=class e extends EventTarget{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=e.CONNECTING;OPEN=e.OPEN;CLOSING=e.CLOSING;CLOSED=e.CLOSED;readyState=e.CONNECTING;baseUrl;sessionId=null;cachedPassword=null;outbound=[];flushTimer=null;inFlightPost=null;activeReaders=new Set;fetchAbort=new AbortController;postSeq=0;lastDispatchedSeq=0;downstreamWatchdog=null;constructor(t){super(),this.baseUrl=Ak(t),this.scheduleFlush(!0)}send(t){if(this.readyState===e.CLOSED)throw new Error("sse-transport: send on closed transport");let n;try{n=JSON.parse(t)}catch(r){throw new Error(`sse-transport: send received non-JSON payload: ${r.message}`,{cause:r})}if(n.type==="authenticate"&&typeof n.password=="string"){this.cachedPassword=n.password,this.scheduleFlush();return}this.outbound.push(n),this.scheduleFlush()}close(){this.shutdown()}scheduleFlush(t=!1){if(this.readyState===e.CLOSED)return;if(this.flushTimer!=null)if(t)clearTimeout(this.flushTimer),this.flushTimer=null;else return;let n=t?0:mV;this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush()},n)}armDownstreamWatchdog(){this.readyState!==e.CLOSED&&(this.downstreamWatchdog!=null&&clearTimeout(this.downstreamWatchdog),this.downstreamWatchdog=setTimeout(()=>{this.downstreamWatchdog=null,this.readyState!==e.CLOSED&&(console.warn("sse-transport: no downstream activity within the liveness window; reconnecting"),this.shutdown())},bV),this.downstreamWatchdog.unref?.())}async flush(){if(this.readyState===e.CLOSED)return;if(this.inFlightPost){let s=new Promise(a=>{setTimeout(a,gV)});await Promise.race([this.inFlightPost.catch(()=>{}),s])}if(this.readyState===e.CLOSED)return;let t=this.outbound;this.outbound=[];let n={};this.sessionId!=null&&(n.id=this.sessionId),this.cachedPassword!=null&&(n.password=this.cachedPassword),t.length>0&&(n.frames=t);let r=this.baseUrl,o=++this.postSeq;this.armDownstreamWatchdog();let i=(async()=>{let s;try{s=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n),credentials:"same-origin",signal:this.fetchAbort.signal})}catch(l){this.readyState!==e.CLOSED&&console.warn("sse-transport: POST failed:",l),this.shutdown();return}if(!s.ok){this.readyState!==e.CLOSED&&console.warn(`sse-transport: POST ${s.status} ${s.statusText}; closing`),this.shutdown();return}let a=s.body;if(!a){this.shutdown();return}this.consumeStream(a,o)})();this.inFlightPost=i,i.finally(()=>{this.inFlightPost===i&&(this.inFlightPost=null)})}async consumeStream(t,n){let r=t.getReader();this.activeReaders.add(r);let o=new Mk,i=new TextDecoder,s=!1;try{for(;;){let{value:a,done:l}=await r.read();if(l){s=!0;break}if(this.readyState===e.CLOSED)return;n===this.postSeq&&this.armDownstreamWatchdog();let d=o.parse(i.decode(a,{stream:!0}));for(let u of d)this.dispatchOrderedEvent(u,n)}if(this.readyState!==e.CLOSED){let a=i.decode();if(a.length>0)for(let l of o.parse(a))this.dispatchOrderedEvent(l,n)}s&&this.readyState!==e.CLOSED&&n===this.postSeq&&(console.warn("sse-transport: live downstream closed without a close frame; reconnecting"),this.shutdown())}catch(a){this.readyState!==e.CLOSED&&n===this.postSeq&&(console.warn("sse-transport: stream read failed:",a),this.shutdown())}finally{this.activeReaders.delete(r);try{r.releaseLock()}catch{}}}dispatchOrderedEvent(t,n){if(this.readyState!==e.CLOSED){if(n<this.lastDispatchedSeq){this.shutdown();return}this.lastDispatchedSeq=n,this.dispatchEvent_(t)}}dispatchEvent_(t){if(t.event==="session"){if(this.readyState===e.CLOSED)return;this.sessionId=t.data,this.readyState===e.CONNECTING&&(this.readyState=e.OPEN,this.dispatchEvent(new Event("open")));return}if(t.event==="close"){let n,r;try{let o=JSON.parse(t.data);typeof o.code=="number"&&(n=o.code),typeof o.reason=="string"&&(r=o.reason)}catch{}this.shutdown(n,r);return}if(t.event===""||t.event==="message"){if(this.readyState!==e.OPEN)return;this.dispatchEvent(new MessageEvent("message",{data:t.data}))}}shutdown(t,n){if(this.readyState===e.CLOSED)return;this.readyState=e.CLOSING,this.flushTimer!=null&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.downstreamWatchdog!=null&&(clearTimeout(this.downstreamWatchdog),this.downstreamWatchdog=null);try{this.fetchAbort.abort()}catch{}for(let o of this.activeReaders)try{o.cancel().catch(()=>{})}catch{}this.activeReaders.clear(),this.readyState=e.CLOSED;let r=new Event("close");t!=null&&(r.code=t),n!=null&&(r.reason=n),this.dispatchEvent(r)}}});function Pg(e){let t=e.serverUrl,n=e.pingIntervalMs??15e3,r=e.pongTimeoutMs??5e3,o=null,i=!1,s=null,a=0,l=!1,d=!1,u=null,f=Ip,h=null,m=null,g=null,y=null,w=!1,x=null,v=new Set;function k(){u&&(clearTimeout(u),u=null)}function S(){h&&(clearTimeout(h),h=null)}function C(){k(),!l&&(d||a!==0&&t&&(u=setTimeout(()=>{u=null,Ie()},Math.round(f*(.5+Math.random()*.5))),f=Math.min(f*2,yV)))}function _(){E(),!(n<=0)&&(i||(m=setInterval(()=>{!o||o.readyState!==o.OPEN||g||(Z({type:"ping"}),g=setTimeout(()=>{g=null,console.warn("socket-transport: heartbeat timeout; closing socket");try{o?.close()}catch{}},r))},n)))}function E(){m&&(clearInterval(m),m=null),g&&(clearTimeout(g),g=null)}function O(I){for(let M of v)try{M.onDisconnected(I)}catch(W){console.warn("socket-transport: consumer.onDisconnected threw:",W)}}function z(I){for(let M of v)try{M.onConnected(I)}catch(W){console.warn("socket-transport: consumer.onConnected threw:",W)}}function T(I){for(let M of v)try{M.onMessage(I)}catch(W){console.warn("socket-transport: consumer.onMessage threw:",W)}}function D(I){let M;try{let W=typeof I.data=="string"?I.data:new TextDecoder().decode(I.data);M=JSON.parse(W)}catch(W){console.warn("socket-transport: dropping malformed wire frame:",W);return}if(!(!M||typeof M!="object")){if(M.type==="pong"){g&&(clearTimeout(g),g=null);return}if(M.type==="challenge"){if(typeof M.nonce!="string")return;s!=null&&s!==M.nonce&&O(Ik),s=M.nonce,z(s);return}if(M.type==="authenticated"){K(!0),T(M);return}if(M.type==="unauthorized"&&M.kind==="auth-failed"){K(!1);return}T(M)}}function K(I){if(!x)return;let M=x;x=null,M(I)}function Z(I){if(!o||o.readyState!==o.OPEN)return!1;try{return o.send(JSON.stringify(I)),!0}catch(M){return console.warn("socket-transport: send failed:",M),!1}}function ae(I){return new Promise(M=>{x=M,Z({type:"authenticate",password:I})||(x=null,M(!1))})}function _e(){if(y)return y;if(!o||o.readyState!==o.OPEN)return Promise.resolve(!1);let I=o,M=(async()=>{await Promise.resolve();try{let W=N4();if(W!=null&&!w){w=!0;let U=await ae(W);if(o!==I)return!1;if(U)return!0;try{await Ap(null)}catch(J){console.warn("socket-transport: failed to clear cached auth password:",J)}}let R=!0;for(;;){if(o!==I||!o||o.readyState!==o.OPEN||!e.authResolver)return!1;let U;try{U=await e.authResolver({retry:!R})}catch(Se){return console.warn("socket-transport: authentication resolver threw:",Se),!1}if(o!==I||(R=!1,U==null||U===""))return!1;let J=await ae(U);if(o!==I)return!1;if(J){try{await Ap(U)}catch(Se){console.warn("socket-transport: failed to cache auth password:",Se)}return!0}}}finally{y=null}})();return y=M,M}function Ce(I){if(S(),!o)return;let M=o;o=null,s=null,w=!1,K(!1),E(),O(I);try{M.close()}catch{}}function Ie(){l||d||o||a!==0&&t&&Re(!1)}function Re(I){if(l||d||a===0||!t)return;let M;try{M=I?new Bg(t):new WebSocket(t)}catch(R){if(!I){console.warn("socket-transport: WebSocket constructor failed; trying SSE fallback:",R),Re(!0);return}console.warn("socket-transport: SSE constructor failed:",R),C();return}o=M,i=I,s=null,w=!1;let W=!1;M.addEventListener("open",()=>{o===M&&(W=!0,S(),h=setTimeout(()=>{h=null,o===M&&(f=Ip)},vV),h.unref?.(),_())}),M.addEventListener("message",R=>{o===M&&D(R)}),M.addEventListener("close",R=>{if(o!==M)return;if(S(),o=null,s=null,w=!1,K(!1),E(),!W&&!I&&!l&&a>0){if(typeof fetch>"u"){O("socket closed"),C();return}console.warn("socket-transport: WebSocket failed to open; falling back to SSE"),Re(!0);return}R?.code===1001&&(f=Ip),O("socket closed"),!l&&a>0&&C()}),M.addEventListener("error",()=>{})}function ne(){if(l)return{release(){}};a+=1,a===1&&!o&&Ie();let I=!1;return{release(){I||(I=!0,!l&&(a-=1,a===0&&(k(),f=Ip,Ce("released"))))}}}function Ue(I){I!==t&&(k(),f=Ip,t=I,o&&Ce("serverUrl changed"),a>0&&t&&Ie())}function je(I){v.add(I);let M=!1;return{remove(){M||(M=!0,v.delete(I))}}}function He(){l||(l=!0,k(),Ce("transport closed"),v.clear(),a=0)}function Vt(I){let{pingMs:M,pongMs:W}=I;typeof M=="number"&&M>=0&&(n=M),typeof W=="number"&&W>0&&(r=W),m&&_()}function dn(){w=!1}function L(I){I!==d&&(d=I,I?(k(),Ce("protocol-locked")):a>0&&t&&Ie())}return{acquire:ne,setServerUrl:Ue,addConsumer:je,send:Z,getNonce:()=>s,getSocket:()=>o,isSse:()=>o!=null&&i,runAuthFlow:_e,close:He,setProtocolLocked:L,setHeartbeatTimings:Vt,resetCachedReplayGuard:dn}}var Ip,yV,vV,Ik,Ng=$(()=>{"use strict";Tk();Og();Ip=1e3,yV=3e4,vV=3e4,Ik="session restarted"});function $V(e,t){if(!/^\/api\/objstore\/[\w-]+\/[\w-]+$/u.test(e))throw new TypeError(`objstore: urlPath rejected (unexpected shape): ${JSON.stringify(e)}`);let n=new URL(t).origin,r=new URL(e,n);if(r.origin!==n)throw new TypeError(`objstore: urlPath origin mismatch \u2014 expected ${n}, got ${r.origin}`);return r.href}function H4(e){let t=e.requestTimeoutMs??1e4,n=new URL(e.httpOrigin).origin,r=e.transport===void 0,o=e.transport??Pg(e.authResolver===void 0?{serverUrl:e.serverUrl}:{serverUrl:e.serverUrl,authResolver:e.authResolver}),i=!1,s=new Map,a=new Map,l=[],d=[];function u(L,I,M,W){let R=L.seenVersions.get(I);(!R||R.incarnation!==M||W>R.version)&&L.seenVersions.set(I,{incarnation:M,version:W})}function f(L){L.connectedPromise=new Promise((I,M)=>{L.resolveConnected=I,L.rejectConnected=M}),L.connectedPromise.catch(()=>{})}function h(L){L.listedPromise=new Promise((I,M)=>{L.resolveListed=I,L.rejectListed=M}),L.listedPromise.catch(()=>{})}function m(L,I){let M=new Map(L.inventory),W=L.inventorySeeded;L.inventorySeeded=!0,L.inventory.clear();for(let R of I){let U=L.inventory.get(R.resourceTag)??M.get(R.resourceTag),J=U?.incarnation===R.incarnation&&U.version>=R.version?U:{version:R.version,incarnation:R.incarnation,contentLength:R.contentLength};L.inventory.set(R.resourceTag,J),u(L,R.resourceTag,J.incarnation,J.version)}if(L.resolveListed(),!!W){for(let[R,U]of M){let J=L.inventory.get(R);if(J?.incarnation!==U.incarnation){J||L.seenVersions.delete(R);for(let Se of L.deletedHandlers)try{Se({resourceTag:R,version:U.version})}catch{}}}for(let[R,U]of L.inventory){let J=M.get(R);if(J?.version===U.version&&J.incarnation===U.incarnation)continue;let Se={resourceTag:R,version:U.version,incarnation:U.incarnation,contentLength:U.contentLength};for(let B of L.putHandlers)try{B(Se)}catch{}}}}function g(L){if(!Array.isArray(L))return[];let I=[];for(let M of L)Wc(M)&&I.push(Vc(M));return I}function y(L){let I;return new Promise((M,W)=>{I=setTimeout(()=>W(new Error(`objstore: inventory not seeded (no subscribe ack) after ${t}ms`)),t),L.listedPromise.then(M,W)}).finally(()=>clearTimeout(I))}function w(L){for(let I=0;I<l.length;I++)if(L(l[I]))return Promise.resolve(l.splice(I,1)[0]);return new Promise((I,M)=>{let W={predicate:L,resolve:()=>{},reject:U=>{clearTimeout(R);let J=d.indexOf(W);J>=0&&d.splice(J,1),M(U)}},R=setTimeout(()=>W.reject(new Error(`objstore: response timeout after ${t}ms`)),t);W.resolve=U=>{clearTimeout(R),I(U)},d.push(W)})}function x(L){if(!o.send(L))throw new Error("objstore: socket not open")}function v(L){for(let I of d.splice(0))try{I.reject(new Error(`objstore: ${L}`))}catch{}}function k(L){if(L.type==="workspace-subscribed"&&typeof L.workspaceTag=="string"){let I=s.get(L.workspaceTag);I&&Array.isArray(L.resources)&&m(I,g(L.resources));return}if(L.type==="objstore-put"&&typeof L.workspaceTag=="string"&&Wc(L)){let I=s.get(L.workspaceTag);if(!I)return;let M=Vc(L),W=I.inventory.get(M.resourceTag);if(W?.incarnation===M.incarnation&&W.version>M.version)return;u(I,M.resourceTag,M.incarnation,M.version),I.inventory.set(M.resourceTag,{version:M.version,incarnation:M.incarnation,contentLength:M.contentLength});let R={resourceTag:M.resourceTag,version:M.version,incarnation:M.incarnation,contentLength:M.contentLength};for(let U of I.putHandlers)try{U(R)}catch{}return}if(L.type==="objstore-deleted"&&typeof L.workspaceTag=="string"&&typeof L.resourceTag=="string"&&typeof L.version=="number"){let I=s.get(L.workspaceTag);if(!I)return;let M=L.resourceTag,W=L.version,R=L.incarnation;if(R!==void 0){if(typeof R!="string"||R.length===0)return;let J=I.inventory.get(M)??I.seenVersions.get(M);if(J&&(R!==J.incarnation||J.version>W))return}I.seenVersions.delete(M),I.inventory.delete(M);let U={resourceTag:M,version:W};for(let J of I.deletedHandlers)try{J(U)}catch{}return}if(!(L.type==="workspace-state"||L.type==="workspace-save-ack"||L.type==="workspace-save-error"||L.type==="workspace-subscribed"||L.type==="authenticated"||L.type==="server-info")){for(let I=0;I<d.length;I++)if(d[I].predicate(L)){let M=d[I];d.splice(I,1),M.resolve(L);return}if(l.push(L),l.length>Lk){let I=l.splice(0,l.length-Lk),M=[...new Set(I.map(W=>W.type??"<no-type>"))].slice(0,4);console.warn(`objstore: dropping ${I.length} unmatched frame(s) over MAX_QUEUE_SIZE=${Lk} (types: ${M.join(", ")})`)}}}function S(){for(let L of s.values())L.closed||L.connected||(L.connected=!0,L.resolveConnected())}function C(L){v(L);for(let I of s.values())I.closed||I.connected&&(I.connected=!1,f(I))}let _=o.addConsumer({onMessage:k,onConnected:S,onDisconnected:C}),E=L=>$V(L,n),O=(L,I)=>E(`/api/objstore/${L}/${I}`);async function z(L,I,M){let W=o.getNonce();if(!W)throw new Error("objstore: socket not open");let R=await I4(L.signingKey,M,W),U,J=!1;for(;x({type:"objstore-put-begin",...M,signature:R}),U=await w(B=>B.workspaceTag===L.workspaceTag&&B.resourceTag===I&&(B.type==="objstore-put-token"||B.type==="objstore-put-error"||B.type==="objstore-conflict"||B.type==="unauthorized"&&B.kind==="gated")),!(U.type!=="unauthorized"||J||(J=!0,!await o.runAuthFlow())););if(U.type==="unauthorized")return{kind:"unauthorized"};if(U.type==="objstore-put-error"){if(U.reason==="workspace-full")return{kind:"workspace-full"};throw new Error(`objstore: put-error reason='${String(U.reason)}'`)}if(U.type==="objstore-conflict")return{kind:"conflict",current:Wc(U.current)?Vc(U.current):null};if(typeof U.urlPath!="string"||typeof U.token!="string")throw new TypeError("objstore: malformed put-token (missing urlPath/token)");return{kind:"token",urlPath:U.urlPath,token:U.token}}async function T(L,I,M,W){let R=Date.now(),U=await O4(L.signingKey,M,R),J=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"put",ts:R,signature:U,prevVersion:M.prevVersion,prevIncarnation:M.prevIncarnation,expectedLength:M.expectedLength,contentHash:W})});if(J.status===401)return{kind:"unauthorized"};if(J.status===403)return{kind:"workspace-full"};if(J.status===409)return{kind:"conflict",current:await Fk(J)};if(!J.ok){let B="";try{B=await J.text()}catch{}throw new Error(`objstore: REST put-begin failed ${J.status} ${B.slice(0,200)}`)}let Se;try{Se=await J.json()}catch{throw new TypeError("objstore: put-mint JSON parse failed")}if(!Se||typeof Se!="object"||typeof Se.urlPath!="string"||typeof Se.token!="string")throw new TypeError("objstore: malformed put-mint (missing urlPath/token)");return{kind:"token",urlPath:Se.urlPath,token:Se.token}}async function D(L,I){let M=`objstore: ${Ik}`;for(let W=0;;W++)try{return await I()}catch(R){if(W<wV&&!L.closed&&R instanceof Error&&R.message===M)continue;throw R}}function K(L,I){return D(L,()=>Z(L,I))}async function Z(L,I){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let M=await Ho(I.bytes),W={workspaceTag:L.workspaceTag,resourceTag:I.resourceTag,prevVersion:I.prev?.version??null,prevIncarnation:I.prev?.incarnation??null,expectedLength:I.bytes.byteLength,contentHash:M},R;if(o.isSse()?(R=await T(L,I.resourceTag,W,M),R.kind==="unauthorized"&&(R=await z(L,I.resourceTag,W))):R=await z(L,I.resourceTag,W),R.kind==="unauthorized")return{ok:!1,reason:"unauthorized"};if(R.kind==="workspace-full")return{ok:!1,reason:"workspace-full"};if(R.kind==="conflict")return{ok:!1,reason:"conflict",current:R.current};let U=await globalThis.fetch(E(R.urlPath),{method:"PUT",headers:{authorization:`Bearer ${R.token}`,"content-type":"application/octet-stream"},body:I.bytes});if(!U.ok){if(U.status===409||U.status===410)return{ok:!1,reason:"conflict",current:U.status===409?await Fk(U):null};let B="";try{B=await U.text()}catch{}throw new Error(`objstore: REST PUT failed ${U.status} ${B.slice(0,200)}`)}let J;try{J=await U.json()}catch{throw new TypeError("objstore: PUT ack JSON parse failed")}if(!J||typeof J!="object"||!Lp(J.version)||typeof J.incarnation!="string"||typeof J.contentHash!="string"||!Lp(J.contentLength))throw new TypeError("objstore: PUT ack malformed (missing/invalid version/incarnation/contentHash/contentLength)");let Se=J;if(Se.contentHash!==M||Se.contentLength!==I.bytes.byteLength)throw new Error(`objstore: PUT ack mismatch \u2014 server returned contentHash=${Se.contentHash.slice(0,16)}\u2026 length=${Se.contentLength}, client signed ${M.slice(0,16)}\u2026 length=${I.bytes.byteLength}`);return{ok:!0,meta:Se}}async function ae(L,I){let M=o.getNonce();if(!M)throw new Error("objstore: socket not open");let W=await F4(L.signingKey,L.workspaceTag,I,M);x({type:"objstore-fetch",workspaceTag:L.workspaceTag,resourceTag:I,signature:W});let R=await w(U=>U.workspaceTag===L.workspaceTag&&U.resourceTag===I&&(U.type==="objstore-fetch-token"||U.type==="objstore-fetch-not-found"));if(R.type==="objstore-fetch-not-found")return{kind:"not-found"};if(typeof R.urlPath!="string"||typeof R.token!="string"||!Wc(R))throw new TypeError("objstore: malformed fetch-token (missing urlPath / token / metadata)");return{kind:"token",urlPath:R.urlPath,token:R.token,meta:Vc(R)}}async function _e(L,I){let M=Date.now(),W=await B4(L.signingKey,L.workspaceTag,I,M),R=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"fetch",ts:M,signature:W})});if(R.status===404)return{kind:"not-found"};if(R.status===401)return{kind:"unauthorized"};if(!R.ok){let J="";try{J=await R.text()}catch{}throw new Error(`objstore: REST fetch-mint failed ${R.status} ${J.slice(0,200)}`)}let U;try{U=await R.json()}catch{throw new TypeError("objstore: fetch-mint JSON parse failed")}if(!U||typeof U!="object"||typeof U.urlPath!="string"||typeof U.token!="string"||!Wc(U))throw new TypeError("objstore: malformed fetch-mint (missing urlPath / token / metadata)");return{kind:"token",urlPath:U.urlPath,token:U.token,meta:Vc(U)}}async function Ce(L,I){for(let M=0;M<j4;M++){let W=await D(L,()=>Ie(L,I));if(W.kind==="ok")return W.value;if(W.kind==="not-found")return null;if(M+1<j4){let R=Math.min(xV,kV*2**M);await new Promise(U=>{setTimeout(U,R)})}}return null}async function Ie(L,I){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let M;if(o.isSse()?(M=await _e(L,I),M.kind==="unauthorized"&&(M=await ae(L,I))):M=await ae(L,I),M.kind==="not-found")return{kind:"not-found"};if(M.kind==="unauthorized")throw new Error("objstore: fetch-mint unauthorized");let W=M.meta,R=await globalThis.fetch(E(M.urlPath),{method:"GET",headers:{authorization:`Bearer ${M.token}`}});if(!R.ok){if(R.status===404||R.status===503)return{kind:"retry"};let Se="";try{Se=await R.text()}catch{}throw new Error(`objstore: REST GET failed ${R.status} ${Se.slice(0,200)}`)}let U=new Uint8Array(await R.arrayBuffer()),J=await Ho(U);if(J!==W.contentHash)throw new Error(`objstore: contentHash mismatch \u2014 expected ${W.contentHash.slice(0,16)}\u2026, got ${J.slice(0,16)}\u2026`);return{kind:"ok",value:{bytes:U,meta:W}}}async function Re(L,I){let M=o.getNonce();if(!M)throw new Error("objstore: socket not open");let W=await L4(L.signingKey,I,M);x({type:"objstore-delete",...I,signature:W});let R=await w(U=>U.workspaceTag===L.workspaceTag&&U.resourceTag===I.resourceTag&&(U.type==="objstore-deleted-ack"||U.type==="objstore-delete-error"||U.type==="objstore-conflict"));if(R.type==="objstore-deleted-ack"){if(typeof R.deletedVersion!="number")throw new TypeError("objstore: malformed deleted-ack (deletedVersion not a number)");return{kind:"ok",deletedVersion:R.deletedVersion}}if(R.type==="objstore-conflict")return{kind:"conflict",current:Wc(R.current)?Vc(R.current):null};if(R.reason==="not-found")return{kind:"not-found"};throw new Error(`objstore: delete-error reason='${String(R.reason)}'`)}async function ne(L,I,M){let W=Date.now(),R=await P4(L.signingKey,M,W),U=await globalThis.fetch(O(L.workspaceTag,I),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({op:"delete",ts:W,signature:R,prevVersion:M.prevVersion,prevIncarnation:M.prevIncarnation})});if(U.status===401)return{kind:"unauthorized"};if(U.status===404)return{kind:"not-found"};if(U.status===409)return{kind:"conflict",current:await Fk(U)};if(!U.ok){let Se="";try{Se=await U.text()}catch{}throw new Error(`objstore: REST delete failed ${U.status} ${Se.slice(0,200)}`)}let J;try{J=await U.json()}catch{throw new TypeError("objstore: delete-ack JSON parse failed")}if(!J||typeof J!="object"||typeof J.deletedVersion!="number")throw new TypeError("objstore: malformed delete-ack (deletedVersion not a number)");return{kind:"ok",deletedVersion:J.deletedVersion}}function Ue(L,I,M){return D(L,()=>je(L,I,M))}async function je(L,I,M){if(await L.connectedPromise,L.closed)throw new Error("objstore: session closed");let W={workspaceTag:L.workspaceTag,resourceTag:I,prevVersion:M?.version??null,prevIncarnation:M?.incarnation??null},R;if(o.isSse()?(R=await ne(L,I,W),R.kind==="unauthorized"&&(R=await Re(L,W))):R=await Re(L,W),R.kind==="ok")return{ok:!0,deletedVersion:R.deletedVersion};if(R.kind==="conflict")return{ok:!1,reason:"conflict",current:R.current};if(R.kind==="not-found")return{ok:!1,reason:"not-found"};throw new Error("objstore: delete unauthorized")}function He(L,I,M,W){let R=L.seenVersions.get(I);if(R&&R.incarnation===M&&W<R.version)throw new Error(`objstore: version-rollback rejected \u2014 fetched v${W} for an incarnation we've already seen at v${R.version}`)}async function Vt(L,I){if(i)throw new Error("objstore: client closed");if(!I||typeof I.workspaceId!="string")throw new Error("objstore: openWorkspace requires a WorkspaceSubscription (triageSync.ensureSubscription) \u2014 the client must not open a session for a tag with no backing sync subscribe");let M=L.workspaceTag;if(I.workspaceTag!=null&&I.workspaceTag!==M)throw new Error("objstore: openWorkspace \u2014 WorkspaceSubscription is for a different workspace than these keys");if(s.has(M))throw new Error(`objstore: workspace ${M.slice(0,8)}\u2026 is already open on this client`);let W={workspaceTag:M,signingKey:L.signingKey,contentKey:new Uint8Array(L.contentKey),tagKey:new Uint8Array(L.tagKey),putHandlers:new Set,deletedHandlers:new Set,seenVersions:new Map,inventory:new Map,inventorySeeded:!1,connected:!1,closed:!1};f(W),h(W),s.set(M,W);let R=W;(async()=>{let X;try{X=await I.resources}catch{return}!R.closed&&!R.inventorySeeded&&m(R,g(X))})();let U=o.acquire();a.set(M,U),o.getNonce()&&(R.connected=!0,R.resolveConnected());let J=null;try{await new Promise((X,pe)=>{J=setTimeout(()=>{pe(new Error(`objstore: connect timeout after ${t}ms`))},t),R.connectedPromise.then(()=>X(),we=>pe(we))})}catch(X){J&&clearTimeout(J),s.delete(M),a.delete(M),R.closed=!0;try{R.contentKey.fill(0)}catch{}try{R.tagKey.fill(0)}catch{}throw U.release(),X}J&&clearTimeout(J);async function Se(X,pe,we){let Ke=await K(R,{resourceTag:X,bytes:pe,prev:we});return Ke.ok?(we==null&&R.seenVersions.delete(X),u(R,X,Ke.meta.incarnation,Ke.meta.version),R.inventory.set(X,{version:Ke.meta.version,incarnation:Ke.meta.incarnation,contentLength:Ke.meta.contentLength}),{ok:!0,meta:{version:Ke.meta.version,incarnation:Ke.meta.incarnation,contentLength:Ke.meta.contentLength}}):Ke.reason==="workspace-full"?{ok:!1,reason:"workspace-full"}:Ke.reason==="unauthorized"?{ok:!1,reason:"unauthorized"}:(Ke.current&&u(R,X,Ke.current.incarnation,Ke.current.version),{ok:!1,reason:"conflict",current:Ke.current})}async function B(X){let pe=await Es(R.tagKey,X.fileName),we=_k(R.contentKey,X.fileName,X.content,M,pe);return await Se(pe,we,X.prev)}async function Q(X){let pe=await Es(R.tagKey,X),we=await Ce(R,pe);if(!we)return null;He(R,pe,we.meta.incarnation,we.meta.version);let{fileName:Ke,content:ka}=Rg(R.contentKey,we.bytes,M,pe);if(Ke!==X)throw new Error(`objstore: fileName-binding mismatch \u2014 requested '${X}', payload encoded '${Ke}'`);return u(R,pe,we.meta.incarnation,we.meta.version),{content:ka,version:we.meta.version,incarnation:we.meta.incarnation}}async function oe(X){let pe=await Ce(R,X);if(!pe)return null;He(R,X,pe.meta.incarnation,pe.meta.version);let{fileName:we,content:Ke}=Rg(R.contentKey,pe.bytes,M,X);if(await Es(R.tagKey,we)===X)return u(R,X,pe.meta.incarnation,pe.meta.version),{kind:"report",fileName:we,content:Ke,version:pe.meta.version,incarnation:pe.meta.incarnation};if(await Rs(R.tagKey,we)===X){let{name:wi,content:Cr}=Ck(Ke);return u(R,X,pe.meta.incarnation,pe.meta.version),{kind:"bundle",integrity:we,name:wi,content:Cr,version:pe.meta.version,incarnation:pe.meta.incarnation}}throw new Error("objstore: fetchByTag \u2014 decrypted name does not derive back to the requested resourceTag under either the report or bundle tag scheme (relay or workspace member produced a non-round-trippable tag-name pair)")}async function re(X,pe){let we=await Ue(R,X,pe);return we.ok?(R.seenVersions.delete(X),R.inventory.delete(X),we):we.reason==="not-found"?{ok:!1,reason:"not-found"}:(we.current&&u(R,X,we.current.incarnation,we.current.version),{ok:!1,reason:"conflict",current:we.current})}async function st(X,pe){let we=await Es(R.tagKey,X);return await re(we,pe)}async function Dt(){if(await y(R),R.closed)throw new Error("objstore: session closed");return[...R.inventory.entries()].map(([X,pe])=>({resourceTag:X,version:pe.version,incarnation:pe.incarnation,contentLength:pe.contentLength}))}async function Tn(X){let pe=await Rs(R.tagKey,X.integrity),we=A4(X.name,X.content),Ke=_k(R.contentKey,X.integrity,we,M,pe);return await Se(pe,Ke,X.prev)}async function Ql(X){let pe=await Rs(R.tagKey,X),we=await Ce(R,pe);if(!we)return null;He(R,pe,we.meta.incarnation,we.meta.version);let{fileName:Ke,content:ka}=Rg(R.contentKey,we.bytes,M,pe);if(Ke!==X)throw new Error(`objstore: bundle-integrity binding mismatch \u2014 requested '${X}', payload encoded '${Ke}'`);let{name:du,content:wi}=Ck(ka);return u(R,pe,we.meta.incarnation,we.meta.version),{name:du,content:wi,version:we.meta.version,incarnation:we.meta.incarnation}}async function $o(X,pe){let we=await Rs(R.tagKey,X);return await re(we,pe)}return{put:B,fetch:Q,fetchByTag:oe,delete:st,list:Dt,putBundle:Tn,fetchBundle:Ql,deleteBundle:$o,onPut(X){return R.putHandlers.add(X),()=>{R.putHandlers.delete(X)}},onDeleted(X){return R.deletedHandlers.add(X),()=>{R.deletedHandlers.delete(X)}},close(){if(R.closed)return;R.closed=!0,s.delete(M);try{R.contentKey.fill(0)}catch{}try{R.tagKey.fill(0)}catch{}try{R.rejectConnected(new Error("objstore: session closed"))}catch{}try{R.rejectListed(new Error("objstore: session closed"))}catch{}let X=a.get(M);a.delete(M),X&&X.release()}}}function dn(){if(!i){i=!0;for(let L of s.values()){L.closed=!0;try{L.contentKey.fill(0)}catch{}try{L.tagKey.fill(0)}catch{}try{L.rejectConnected(new Error("objstore: client closed"))}catch{}try{L.rejectListed(new Error("objstore: client closed"))}catch{}}s.clear();for(let L of a.values())L.release();a.clear(),_.remove(),r&&o.close()}}return{openWorkspace:Vt,close:dn}}async function Fk(e){try{let t=await e.json();if(Lp(t.currentVersion)&&typeof t.currentIncarnation=="string")return{version:t.currentVersion,incarnation:t.currentIncarnation}}catch{}return null}function Lp(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function Wc(e){return!e||typeof e!="object"?!1:typeof e.resourceTag=="string"&&Lp(e.version)&&typeof e.incarnation=="string"&&typeof e.contentHash=="string"&&Lp(e.contentLength)&&typeof e.signature=="string"}function Vc(e){return{resourceTag:e.resourceTag,version:e.version,incarnation:e.incarnation,contentHash:e.contentHash,contentLength:e.contentLength,signature:e.signature}}var Lk,wV,j4,kV,xV,W4=$(()=>{"use strict";Ig();Tg();Ng();Tg();Lk=64,wV=5,j4=6,kV=25,xV=500});function Dg(){return SV}var V4,SV,Bk=$(()=>{"use strict";Ng();V4=null,SV=Pg({serverUrl:"",authResolver:e=>V4==null?Promise.resolve(null):V4(e)})});var K4,G4=$(()=>{"use strict";K4=new Set(["busy"])});function _V(e){return typeof e?.color=="string"?e.color:""}function CV(e){return Xe(e??void 0)??""}function EV(e){return typeof e?.comment=="string"?e.comment:""}function RV(e){return typeof e?.fix=="string"?e.fix:""}function TV(e){return e?.flagged===!0?"flagged":e?.flagged===!1?"not flagged":""}function q4(e,t,n,r){let o=[];for(let i of Object.keys(e)){let s=e[i],a=t[i],l=n[i],d=s??null,u=[{name:"color",norm:_V},{name:"triage",norm:CV},{name:"comment",norm:EV},{name:"fix",norm:RV},{name:"flagged",norm:TV}];for(let{name:f,norm:h}of u){let m=h(a),g=h(d),y=h(l);(g!==m||r?.has(i))&&y!==m&&g!==y&&o.push({id:i,property:f,local:g,imported:y})}}return o}function Ok(e,t){let n=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[];if(n.length!==r.length)return!1;if(n.length===0)return!0;let o=new Set(n);for(let i of r)if(!o.has(i))return!1;return!0}function Y4(e,t){let n=e.triage??(e.deleted?"deleted":""),r=t.triage??(t.deleted?"deleted":"");return e.color===t.color&&n===r&&(e.comment??"")===(t.comment??"")&&(e.fix??"")===(t.fix??"")&&e.flagged===t.flagged&&Ok(e.ignoredReports,t.ignoredReports)&&Ok(e.scopedIgnoredReports,t.scopedIgnoredReports)}function Pk(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n)if(!Y4(e[r]??{},t[r]??{}))return!1;return!0}function MV(e=[],t=[],n=[]){let r=new Set(e),o=new Set(t),i=new Set(n);for(let s of r)o.has(s)||i.delete(s);for(let s of o)r.has(s)||i.add(s);return[...i]}function J4(e,t,n,r){let o=Object.assign(Object.create(null),n);for(let i of new Set([...Object.keys(e),...Object.keys(t),...r??[]])){let s=r?.has(i),a=sr(e[i])??{},l=sr(t[i])??{},d={...sr(n[i])};for(let f of["color","comment","fix","flagged"])(a[f]!==l[f]||s)&&Object.assign(d,{[f]:l[f]});if(s||a.triage!==l.triage||!Ok(a.ignoredReports,l.ignoredReports)){let f=!s&&Wn(l)&&Wn(d),h=f?MV(a.ignoredReports,l.ignoredReports,d.ignoredReports):l.ignoredReports??[];(!f||a.triage!==l.triage)&&(l.triage===void 0?delete d.triage:d.triage=l.triage),h.length===0?delete d.ignoredReports:d.ignoredReports=h}d.scopedIgnoredReports=[...new Set([...l.scopedIgnoredReports??[],...d.scopedIgnoredReports??[]])];let u=sr(d);u?o[i]=u:delete o[i]}return o}function Fp(e,t){let n=Object.assign(Object.create(null),e);for(let[r,o]of Object.entries(t))o===null?delete n[r]:o!==void 0&&(n[r]=o);return n}function Kc(e,t){let n=Object.create(null),r=new Set([...Object.keys(e),...Object.keys(t)]);for(let o of r){let i=e[o]??{},s=t[o]??{};Y4(i,s)||(n[o]=t[o]??null)}return n}function X4(e){for(let t in e)return!1;return!0}var Z4=$(()=>{"use strict";eo()});function al(e,t){let n=Object.assign(Object.create(null),e),r=hr().state,o=t instanceof Set?t:new Set(t);for(let i of o){let s=sr(r.triage.get(i));s?n[i]=s:delete n[i]}return n}function Nk(e,t){let n=hr().state,r=[];for(let o of t){let i=e[o];if(!i||typeof i!="object")continue;let s=n.triage.get(o);if(i.color){let d=s?.color;d===void 0?ie(n.triage,o,{color:i.color}):d!==i.color&&r.push({id:o,property:"color",local:d,imported:i.color})}let a=Xe(i);if(a){let d=Xe(s);d===void 0?ie(n.triage,o,{triage:a}):d!==a&&r.push({id:o,property:"triage",local:d,imported:a})}if(i.comment){let d=s?.comment;d===void 0?ie(n.triage,o,{comment:i.comment}):d!==i.comment&&r.push({id:o,property:"comment",local:d,imported:i.comment})}if(i.fix){let d=s?.fix;d===void 0?ie(n.triage,o,{fix:i.fix}):d!==i.fix&&r.push({id:o,property:"fix",local:d,imported:i.fix})}if(typeof i.flagged=="boolean"){let d=s?.flagged;d===void 0?ie(n.triage,o,{flagged:i.flagged}):d!==i.flagged&&r.push({id:o,property:"flagged",local:d?"flagged":"not flagged",imported:i.flagged?"flagged":"not flagged"})}if(!(!Wn(i)||!Wn(s)||!Array.isArray(i.ignoredReports)))for(let d of i.ignoredReports)typeof d=="string"&&((s?.ignoredReports?.length??0)>0&&!s?.ignoredReports?.includes(d)||St(n.triage,o,d,!0,ir(i,d)))}return r}function Dk(e,t){let n=hr().state;for(let r of e){let o=`${r.id}:${r.property}`;t[o]==="imported"&&AV(r.id,r.property)===r.local&&(r.property==="color"?ie(n.triage,r.id,{color:r.imported}):r.property==="comment"?ie(n.triage,r.id,{comment:r.imported}):r.property==="fix"?ie(n.triage,r.id,{fix:r.imported}):r.property==="triage"?r.imported==="inprogress"||r.imported==="fixed"||r.imported==="invalid"||r.imported==="deleted"||r.imported==="ignored"?ie(n.triage,r.id,{triage:r.imported,...r.imported==="ignored"?{}:{ignoredReports:void 0}}):ie(n.triage,r.id,{triage:void 0}):r.property==="flagged"&&ie(n.triage,r.id,{flagged:r.imported==="flagged"?!0:r.imported==="not flagged"?!1:void 0}))}}function AV(e,t){let n=hr().state.triage.get(e);return t==="color"?n?.color??"":t==="triage"?Xe(n)??"":t==="comment"?n?.comment??"":t==="fix"?n?.fix??"":t==="flagged"?n?.flagged===!0?"flagged":n?.flagged===!1?"not flagged":"":""}function Q4(e,t){let n=hr().state,r=t instanceof Set?t:new Set(t);for(let o of r){let i=e[o],s=Wn(i)?i?.ignoredReports:void 0;yc(n.triage,o,{...i,ignoredReports:s})}}var eT=$(()=>{"use strict";Hc();eo()});function tT(){return Ug}function Bp(e){if(Ug!==e){Ug=e,console.warn(e?"triage-sync: can't persist the sessions blob \u2014 either it's an unrecognised future version (writes skipped to avoid clobbering a newer build's data) or the write itself failed (storage full / vault locked). Your in-memory triage state still works this session but will not persist across reload. Free up storage and/or clear localStorage[deepview.sync.sessions]; the badge clears on the next successful save.":"triage-sync: persistence recovered; persisted-sessions blob is now writable.");for(let t of zg)try{t(e)}catch(n){console.warn("persistenceDegraded listener:",n)}}}function nT(e){let t=n=>e(n);return zg.add(t),queueMicrotask(()=>{if(zg.has(t))try{t(Ug)}catch(n){console.warn("persistenceDegraded listener:",n)}}),()=>zg.delete(t)}function jg(){try{let e=hr().getSecureItem(Uk);if(!e)return{kind:"empty"};let t=JSON.parse(e);if(!t||typeof t!="object")return{kind:"empty"};let n=t;return n.version===zk&&n.sessions&&typeof n.sessions=="object"&&!Array.isArray(n.sessions)?{kind:"v1",map:n.sessions}:n.version===zk?{kind:"empty"}:"version"in n?{kind:"unknown-version"}:{kind:"legacy",map:n}}catch{return{kind:"empty"}}}function LV(){let e=jg();return e.kind==="v1"||e.kind==="legacy"?e.map:{}}async function FV(e){try{return await hr().setSecureItem(Uk,JSON.stringify({version:zk,sessions:e})),!0}catch(t){return console.warn("Triage sync: could not persist session state:",t),!1}}function jk(e,t){if(!t)return null;let r=LV()[e];return!r||r.serverUrl!==t?null:{baseRevision:typeof r.baseRevision=="string"?r.baseRevision:null,...r.hasBase===!0?{hasBase:!0}:{},baseState:r.baseState&&typeof r.baseState=="object"?Object.assign(Object.create(null),r.baseState):Object.create(null),savesSinceKeyframe:typeof r.savesSinceKeyframe=="number"?r.savesSinceKeyframe:0}}async function Hg(e){await navigator.locks.request(IV,async()=>{let t=jg();if(t.kind==="unknown-version"){Bp(!0);return}let n=t.kind==="v1"||t.kind==="legacy"?t.map:{};if(await e(n)===!1)return;let o=await FV(n);Bp(!o)})}function Hk(e=null){Hg(t=>{let n=Object.keys(t);if(n.length===0)return!1;let r=new Set(hr().listWorkspaces().map(i=>i.id)),o=!1;for(let i of n){let s=t[i];(!r.has(i)||e!=null&&s?.serverUrl!==e)&&(delete t[i],o=!0)}return o?void 0:!1}).catch(t=>{console.warn("Triage sync: prunePersistedSessions lock failed:",t)})}function Wg(e){return Hg(t=>{if(!(e in t))return!1;delete t[e]})}var Uk,IV,zk,Ug,zg,rT=$(()=>{"use strict";Hc();Uk="deepview.sync.sessions",IV=Uk,zk=1,Ug=!1,zg=new Set});function Wk(){return Kg}function Op(e){if(Kg!==e){Kg=e,e&&console.warn("triage-sync: the sync relay appears to sit behind an authentication proxy (e.g. Cloudflare Access) and this session is no longer authorised \u2014 reconnects are being redirected to the proxy login. Reload the page to sign in again.");for(let t of Vg)try{t(e)}catch(n){console.warn("proxyAuthRequired listener:",n)}}}function oT(e){let t=n=>e(n);return Vg.add(t),queueMicrotask(()=>{if(Vg.has(t))try{t(Kg)}catch(n){console.warn("proxyAuthRequired listener:",n)}}),()=>Vg.delete(t)}async function iT(e){if(typeof fetch>"u"||!e)return!1;let t;try{t=Ak(e)}catch{return!1}let n;try{n=await fetch(t,{method:"GET",redirect:"manual",credentials:"same-origin",cache:"no-store"})}catch{return!1}return n.type==="opaqueredirect"}var Kg,Vg,sT=$(()=>{"use strict";Og();Kg=!1,Vg=new Set});function Ts(){return Dp&&!Kk&&!!Or&&DV()}function DV(){try{return zp().length>0}catch{return!1}}function zV(e){let t=Uu(e);if(t!=null){Yk=t;for(let n of qk)try{n(t)}catch(r){console.warn("Triage sync: onServerInfo listener failed:",r)}}}function Qg(){if(!Ts())return"off";for(let t of Ae.values())if(t.error)return"error";let e=an.getSocket();if(!e||e.readyState!==WebSocket.OPEN)return"offline";for(let t of Ae.values())if(!t.subscribeAcked)return"connecting";return"online"}function Jt(){let e=Qg();if(e!==lT){lT=e,WV(e);for(let t of Gk)try{t(e)}catch(n){console.warn("Triage sync status listener:",n)}}}function Xk(e){return e==="offline"||e==="connecting"}function nx(){Jk+=1,cl!=null&&(clearTimeout(cl),cl=null)}function fT(e){nx(),cl=setTimeout(()=>{cl=null,HV()},e),cl.unref?.()}async function HV(){if(Gg||!Ts()||!Xk(Qg()))return;let e=Jk;Gg=!0;let t=!1;try{t=await iT(Or)}catch{t=!1}finally{Gg=!1}if(Jk===e){if(!Ts()||!Xk(Qg())){Op(!1);return}if(t){Op(!0);return}fT(jV)}}function WV(e){Xk(e)?cl==null&&!Gg&&!Wk()&&fT(UV):(nx(),Op(!1))}function Qk(e){for(let t of Ae.values())if(t.workspaceTag===e)return t;return null}function mr(e){return Ae.get(e.workspaceId)===e}function VV(e){e.busyRetryTimer==null&&(e.busyRetryTimer=setTimeout(()=>{e.busyRetryTimer=null,mr(e)&&(e.error||e.pending||!e.pendingSave||(e.pendingSave=!1,qn(e)))},NV),e.busyRetryTimer.unref?.())}function eb(e){e.busyRetryTimer!=null&&(clearTimeout(e.busyRetryTimer),e.busyRetryTimer=null)}function cT(e){if(e.appliedRevisions.clear(),eb(e),e.key){try{e.key.fill(0)}catch{}e.key=null}if(e.signingKey=null,e.verifyingKey=null,e.objstoreResourceWaiters.length>0){let t=e.objstoreResourceWaiters.splice(0);for(let n of t)try{n([])}catch{}}}function hT(e){let t=new Set,n=zp().find(o=>o.id===e);if(!n)return t;let r=new Set(n.reports??[]);for(let o of dT.reports)if(r.has(o.fileName))for(let i of o.groups)for(let s of i){let a=s.id??String(s._id);OV.test(a)||t.add(a)}return t}function rx(e){let t=hT(e.workspaceId),n=[];for(let o of t)e.ids.has(o)||n.push(o);let r=[];return n.length>0&&(r=Nk(e.baseState,n)),e.ids=t,{conflicts:r,hydrated:n.length>0}}function KV(){let e=jg();e.kind==="unknown-version"?Bp(!0):(e.kind==="v1"||e.kind==="legacy")&&Bp(!1),D4(),an.resetCachedReplayGuard()}function ox(e){if(!e||!Or)return;let t=Or,n=e.generation,r={serverUrl:t,baseRevision:e.baseRevision,savesSinceKeyframe:e.savesSinceKeyframe??0,baseState:e.baseState,...e.baseRevision===null&&e.hasBase?{hasBase:!0}:{}};Hg(o=>{if(!mr(e)||e.generation!==n||Or!==t)return!1;o[e.workspaceId]=r}).catch(o=>{console.warn("Triage sync: persistSession lock failed:",o)})}function ex(e){let t=zp().find(r=>r.id===e.workspaceId);if(!t){e.error="workspace no longer exists",Jt();return}let n=(e.keyDerivationGen??0)+1;e.keyDerivationGen=n,(async()=>{try{let[r,o]=await Promise.all([$4(t.privateKey),Eg(t.privateKey,e.workspaceId)]);if(Ae.get(e.workspaceId)!==e||e.keyDerivationGen!==n)return;if(e.key=r,e.signingKey=o.privateKey,e.verifyingKey=o.publicKey,e.workspaceTag=o.publicKeyB64,an.getSocket()?.readyState!==WebSocket.OPEN){ll();return}Yc(e),qn(e),Jt()}catch(r){console.warn("Triage sync: key derivation failed:",r),Ae.get(e.workspaceId)===e&&e.keyDerivationGen===n&&(e.error=`key derivation failed: ${r instanceof Error?r.message:String(r)}`,Jt())}})()}function qg(e){return an.send(e)}function GV(e,t){if(!an.isSse()){qg(t);return}let n=e.generation,r=e.pending,o=()=>mr(e)&&e.generation===n&&e.pending===r;qV(t,o).then(i=>(i&&o()&&qg(t),null)).catch(()=>{o()&&qg(t)})}async function qV(e,t){if(!Or)return!0;let n;try{n=U4(Or)}catch{return!0}let r;try{r=await globalThis.fetch(n,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e),signal:AbortSignal.timeout(3e4)})}catch{return!0}if(!t())return!1;let o=e.workspaceTag,i=e.base??null;if(r.status===401)return!0;if(r.ok){let s=null;try{s=await r.json()}catch{return!0}return t()?!s||typeof s.id!="string"?!0:(Np({type:"workspace-save-ack",workspaceTag:o,base:i,id:s.id},t),!1):!1}if(r.status===409){let s=null;try{s=await r.json()}catch{return!0}if(!t())return!1;let a=s&&Array.isArray(s.revisions)?s.revisions:[];return Np({type:"workspace-state",workspaceTag:o,revisions:a},t),Np({type:"workspace-save-error",workspaceTag:o,base:i,reason:"stale-base"},t),!1}return r.status===413?(Np({type:"workspace-save-error",workspaceTag:o,base:i,reason:"too-large"},t),!1):!0}function Yc(e,t=!1){if(!mr(e)||!Ts())return;let n=an.getSocket();if(!n||n.readyState!==WebSocket.OPEN||!t&&e.subscribed||!e.signingKey||!e.workspaceTag)return;let r=an.getNonce();if(r==null)return;let o=e.baseRevision,i=n,s=e.signingKey,a=e.workspaceTag,l=e.generation;(async()=>{try{let d=await C4(s,a,o,r);if(Ae.get(e.workspaceId)!==e||e.generation!==l||e.workspaceTag!==a||an.getSocket()!==i||an.getNonce()!==r)return;e.subscribed=!0,qg({type:"workspace-subscribe",workspaceTag:a,from:o,signature:d})}catch(d){console.warn("Triage sync: subscribe sign failed:",d)}})()}function qn(e){if(!mr(e)||!Ts()||e.error)return;if(e.pending||e.encrypting||e.receiving){e.pendingSave=!0;return}if(!e.key||!e.signingKey||!e.workspaceTag){e.pendingSave=!0;return}rx(e),e.localState=al(e.baseState,e.ids);let t=an.getSocket();if(!t||t.readyState!==WebSocket.OPEN)return;let n=(e.savesSinceKeyframe??0)>=Ii,r=n?Object.create(null):e.baseState,o=Kc(r,e.localState);if(X4(o)&&!n)return;let i=e.baseRevision,s=e.key,a=e.signingKey,l=e.workspaceTag,d=e.generation;e.encrypting=!0,(async()=>{try{let u=xk(l,i),{nonce:f,ciphertext:h}=await R4(s,o,u),m={publicKeyB64:l,base:i,keyframe:n,nonceB64:f,ciphertextB64:h},g=await _4(a,m),y=await kk(m);if(Ae.get(e.workspaceId)!==e||e.generation!==d||e.workspaceTag!==l)return;if(e.baseRevision!==i||e.receiving){e.pendingSave=!0;return}e.pending={base:i,id:y,changeset:o,keyframe:n},e.pendingSave=!1;let w={type:"workspace-save",workspaceTag:l,base:i,nonce:f,ciphertext:h,signature:g};n&&(w.keyframe=!0),GV(e,w),e.consecutiveFailures=0,e.error&&(e.error=null,Jt())}catch(u){console.warn("Triage sync: encrypt/sign failed:",u),mr(e)&&e.generation===d&&(e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.consecutiveFailures>=PV&&(e.error=`encrypt/sign failed: ${u instanceof Error?u.message:String(u)}`,Jt()))}finally{mr(e)&&e.generation===d&&(e.encrypting=!1,!e.error&&e.pendingSave&&!e.pending&&!e.receiving&&(e.pendingSave=!1,qn(e)))}})()}async function YV(e,t,n,r){for(let o of t){if(!o||typeof o!="object"||typeof o.id=="string"&&(o.id===e.baseRevision||e.appliedRevisions.has(o.id)||r.has(o.id)))continue;let i=e.baseRevision,s=o.keyframe===!0;if(!(i==null?o.base==null||s:o.base===i))return console.warn(`Triage sync: chain base mismatch (expected ${i}, got ${o.base})`),!1;if(typeof o.signature!="string"||typeof o.nonce!="string"||typeof o.ciphertext!="string"||typeof o.id!="string")return console.warn("Triage sync: revision missing signature/nonce/ciphertext/id; resyncing"),e.savesSinceKeyframe=Ii,!1;if(!e.workspaceTag||!e.verifyingKey||!e.key)return!1;let l=typeof o.base=="string"?o.base:null,d={publicKeyB64:e.workspaceTag,base:l,keyframe:s,nonceB64:o.nonce,ciphertextB64:o.ciphertext},u=await E4(e.verifyingKey,d,o.signature);if(!n())return!1;if(!u)return console.warn("Triage sync: revision signature did not verify; resyncing"),e.savesSinceKeyframe=Ii,!1;let f=await kk(d);if(!n())return!1;if(o.id!==f)return console.warn("Triage sync: revision id does not match content hash; resyncing"),e.savesSinceKeyframe=Ii,!1;let h;try{let g=xk(e.workspaceTag,l);h=await T4(e.key,o.nonce,o.ciphertext,g)}catch(g){return console.warn("Triage sync: decrypt failed; resyncing",g),e.savesSinceKeyframe=Ii,!1}if(!n())return!1;let m=s?Object.create(null):e.baseState;e.baseState=Fp(m,h??{}),e.baseRevision=o.id,e.appliedRevisions.add(o.id),e.pending?.id===o.id&&(e.pending=null),s?e.savesSinceKeyframe=0:e.savesSinceKeyframe=Math.min((e.savesSinceKeyframe??0)+1,Ii)}return!0}async function mT(e,t,n=[],r=null){if(!mr(e))return;let o=e.generation;e.localState=Fp(e.baseState,t),Zk++;try{Q4(e.localState,e.ids),r&&n.length>0&&(Dk(n.filter(({id:i})=>e.ids.has(i)),r),e.localState=al(e.baseState,e.ids)),ox(e),await Xg()}finally{Zk--}if(!(!mr(e)||e.generation!==o)){e.localState=al(e.baseState,e.ids),tx();for(let i of Ae.values())i!==e&&qn(i)}}function Yg(e){return rx(e),e.localState=al(e.baseState,e.ids),Kc(e.baseState,e.localState)}async function JV(e,t){let n=e.generation;if(e.pending&&t.base===e.pending.base&&typeof t.id=="string"&&t.id===e.pending.id){Yg(e);let r=e.localState,o=e.pending.keyframe?Object.create(null):e.baseState;if(e.baseState=Fp(o,e.pending.changeset),e.baseRevision=t.id,e.hasBase=!0,e.appliedRevisions.add(t.id),e.savesSinceKeyframe=e.pending.keyframe?0:Math.min((e.savesSinceKeyframe??0)+1,Ii),e.pending=null,e.staleResetAttempted=!1,await mT(e,Kc(e.baseState,r)),!mr(e)||e.generation!==n)return;(e.pendingSave||!Pk(e.localState,e.baseState))&&(e.pendingSave=!1,qn(e));return}if(e.pending){let r=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: ack mismatch (pending ${e.pending.base}/${e.pending.id.slice(0,8)}, ack ${t.base}/${r})`);return}if(t.id!==e.baseRevision){let r=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: late ack for base=${t.base} id=${r}\u2026; pending was already cleared`),e.pendingSave=!0,qn(e)}}async function XV(e,t){if(!Array.isArray(t)||!e.key)return;if(t.length===0){e.resyncAttempted&&(e.resyncAttempted=!1,e.pending||(e.pendingSave=!1,qn(e)));return}let n=e.generation,r=e.workspaceTag,o=()=>mr(e)&&e.generation===n&&e.workspaceTag===r;e.receiving=!0;try{Yg(e);let i=e.baseState,s=e.pending,a=e.baseRevision,l={...e,appliedRevisions:new Set},d=await YV(l,t,o,e.appliedRevisions);if(!o())return;if(l.baseRevision!==a){let f=s&&l.pending===null?Fp(s.keyframe?Object.create(null):i,s.changeset):i;Yg(e);let h=Kc(f,e.localState),g=a===null&&!(s&&l.pending===null)?new Set([...Object.keys(f),...e.hasBase?e.ids:[]]):void 0;if(g)for(let v of g)h[v]=e.localState[v]??null;let y=q4(h,f,l.baseState,g).filter(({id:v})=>e.ids.has(v)),w=null;if(y.length>0&&Zg){try{w=await Zg(y,l.baseState,"chain")??null}catch(v){console.warn("Triage sync: chain-conflict resolver failed:",v)}if(!o())return}Yg(e);let x=J4(f,e.localState,l.baseState,g);e.baseRevision=l.baseRevision,e.hasBase=!0;for(let v of l.appliedRevisions)e.appliedRevisions.add(v);if(e.baseState=l.baseState,e.savesSinceKeyframe=l.savesSinceKeyframe,e.pending&&(e.pendingSave=!0),e.pending=null,await mT(e,Kc(e.baseState,x),y,w),!o())return}else e.savesSinceKeyframe=l.savesSinceKeyframe;if(!d){if(e.pendingSave=!1,!e.resyncAttempted){e.resyncAttempted=!0,Yc(e,!0);return}console.warn("Triage sync: catch-up also broke continuity; full state push"),e.baseRevision=null,e.appliedRevisions.clear(),e.savesSinceKeyframe=Ii,e.pending=null,e.resyncAttempted=!1,e.pendingSave=!0,ox(e),tx();return}e.resyncAttempted=!1,e.staleResetAttempted=!1,Pk(e.localState,e.baseState)||(e.pendingSave=!0)}finally{o()&&(e.receiving=!1,e.pendingSave&&!e.pending&&!e.error&&(e.pendingSave=!1,qn(e)))}}async function ZV(e){if(e.type==="server-info"){zV(e);return}if(e.type==="authenticated"){for(let n of Ae.values())Yc(n),qn(n);return}if(e.type==="unauthorized"){if(e.kind==="gated"){if(typeof e.workspaceTag=="string"){let n=Qk(e.workspaceTag);n&&typeof e.resourceTag!="string"&&QV(n,e)}an.runAuthFlow().catch(n=>{console.warn("Triage sync: auth flow failed:",n)})}return}if(typeof e.workspaceTag!="string")return;let t=Qk(e.workspaceTag);if(t){if(e.type==="workspace-save-ack")await JV(t,e);else if(e.type==="workspace-state")await XV(t,e.revisions);else if(e.type==="workspace-save-error")tK(t,e);else if(e.type==="workspace-subscribed"){if(t.subscribeAcked=!0,Array.isArray(e.resources)){let n=e.resources,r=t.objstoreResourceWaiters.splice(0);for(let o of r)try{o(n)}catch{}}Jt()}}}function QV(e,t){e.pending&&(typeof t.base!="string"&&t.base!==null||t.base===e.pending.base&&(e.pending=null,e.pendingSave=!0))}function tK(e,t){if(!e.pending||typeof t.base!="string"&&t.base!==null||t.base!==e.pending.base)return;let n=t.reason,r=typeof n=="string"&&n.length>0&&n.length<=64&&eK.test(n)?n:"rejected";if(e.pending=null,K4.has(r)){e.pendingSave=!0,VV(e);return}if(r==="stale-base"&&!e.staleResetAttempted){e.staleResetAttempted=!0,console.warn("Triage sync: stale-base catch-up did not apply (server chain gone or rebuilt past our base); full state push"),e.baseRevision=null,e.appliedRevisions.clear(),e.savesSinceKeyframe=Ii,e.pendingSave=!1,e.resyncAttempted=!1,ox(e),tx(),qn(e);return}e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.error=`server rejected save: ${r}`,Jt()}function Np(e,t=()=>!0){let n=qc,r=typeof e.workspaceTag=="string"?Qk(e.workspaceTag):null;if(typeof e.workspaceTag=="string"&&!r)return;let o=r?.generation;Gc=Gc.then(()=>{if(!(!t()||qc!==n||r&&(!mr(r)||r.generation!==o)))return ZV(e)}).catch(i=>{console.warn("Triage sync handler error:",i)})}function nK(e){for(let t of Ae.values())t.pending=null,t.pendingSave=!1,Yc(t),qn(t);Jt()}function rK(e){qc++,Gc=Promise.resolve();for(let t of Ae.values())t.generation++,t.encrypting=!1,t.receiving=!1,t.pending=null,t.subscribed=!1,t.subscribeAcked=!1,t.resyncAttempted=!1,t.staleResetAttempted=!1,t.pendingSave=!0,eb(t);Jt()}function ll(){Ts()?Pp||(Pp=an.acquire()):Pp&&(Pp.release(),Pp=null)}function Vk(e){let t=e.error!=null;e.error=null,e.consecutiveFailures=0,t&&(!e.key||!e.signingKey)&&ex(e)}function Jg(e){e.generation++,e.receiving=!1,e.pending=null,e.pendingSave=!1,e.encrypting=!1,e.subscribed=!1,e.subscribeAcked=!1,e.resyncAttempted=!1,e.staleResetAttempted=!1,eb(e)}function gT(e){let t=e.generation,{conflicts:n,hydrated:r}=rx(e);(async()=>{if(n.length===0){r?await Xg():qn(e);return}let o=null;if(Zg)try{o=await Zg(n,e.baseState,"attach")}catch(i){console.warn("Triage sync: hydration conflict resolver failed:",i)}!mr(e)||e.generation!==t||(o&&Dk(n.filter(({id:i})=>e.ids.has(i)),o),await Xg())})().catch(o=>{console.warn("Triage sync: refreshAndPropagate failed:",o)})}var dT,zp,Xg,aT,uT,BV,pT,OV,tx,Zg,Or,Dp,Kk,an,Pp,Ii,PV,NV,Gk,qk,Yk,lT,UV,jV,cl,Gg,Jk,Zk,Ae,eK,Gc,qc,Jc,bT=$(()=>{"use strict";Hc();G4();Z4();eT();rT();Em();Tk();Ng();Bk();Og();sT();$k();BV="deepview.triageSyncUrl",pT="deepview.sync.userEnabled",OV=/^\d+$/u,tx=()=>{},Zg=null,Or="",Dp=!0,Kk=!1,an=Dg(),Pp=null,Ii=100,PV=5,NV=2e3;Gk=new Set,qk=new Set,Yk=null;lT="off";UV=6e3,jV=3e4,cl=null,Gg=!1,Jk=0;Zk=0,Ae=new Map;eK=/^[\w-]+$/u;Gc=Promise.resolve(),qc=0;an.addConsumer({onMessage:Np,onConnected:nK,onDisconnected:rK});Jc={setServerUrl(e){let t=(e??"").trim();if(t===Or)return;let n=Or;qc++,Gc=Promise.resolve(),Or=t,nx(),Op(!1),t&&Hk(t),n&&t&&n!==t&&Ap(null).catch(r=>{console.warn("Triage sync: failed to drop cached auth password on server change:",r)}),an.setServerUrl(t);for(let r of Ae.values()){Jg(r);let o=t?jk(r.workspaceId,t):null;r.baseRevision=o?.baseRevision??null,r.appliedRevisions.clear(),r.baseState=o?.baseState??Object.create(null),r.hasBase=o?.hasBase===!0||r.baseRevision!==null||Object.keys(r.baseState).length>0,r.savesSinceKeyframe=o?.savesSinceKeyframe??0,r.localState=al(r.baseState,r.ids),Vk(r)}ll(),Jt()},setEnabled(e){let t=!!e;if(t!==Dp){if(Dp=t,uT(pT,t?"1":"0").catch(n=>{console.warn("Triage sync: could not persist user-enabled:",n)}),Ts())for(let n of Ae.values())Vk(n);else{qc++,Gc=Promise.resolve();for(let n of Ae.values())Jg(n)}ll(),Jt()}},isEnabled(){return Dp},setForcedOff(e){let t=!!e;if(t!==Kk){if(Kk=t,Ts())for(let n of Ae.values())Vk(n);else{qc++,Gc=Promise.resolve();for(let n of Ae.values())Jg(n)}ll(),Jt()}},getServerUrl(){return Or},get connected(){return an.getSocket()?.readyState===WebSocket.OPEN},get status(){return Qg()},onStatusChange(e){return Gk.add(e),()=>Gk.delete(e)},onServerInfo(e){if(qk.add(e),Yk!=null)try{e(Yk)}catch{}return()=>qk.delete(e)},setProtocolLocked(e){an.setProtocolLocked(e)},notify(){if(!(Zk>0))for(let e of Ae.values())qn(e)},ensureSubscription(e){let t=Ae.has(e);Jc.openSession(e);let n=Ae.get(e);if(!n)return null;let r=new Promise(o=>{n.objstoreResourceWaiters.push(o)});return t&&Yc(n,!0),{workspaceId:e,workspaceTag:n.workspaceTag,resources:r}},openSession(e){if(!e||Ae.has(e)||!zp().find(s=>s.id===e))return;let n=hT(e),r=jk(e,Or),o=r?.baseState??Object.create(null);Nk(o,n);let i={workspaceId:e,workspaceTag:null,signingKey:null,verifyingKey:null,ids:n,baseRevision:r?.baseRevision??null,appliedRevisions:new Set,baseState:o,hasBase:r?.hasBase===!0||r?.baseRevision!=null||Object.keys(o).length>0,savesSinceKeyframe:r?.savesSinceKeyframe??0,localState:al(o,n),pending:null,pendingSave:!1,key:null,encrypting:!1,receiving:!1,generation:0,subscribed:!1,subscribeAcked:!1,resyncAttempted:!1,staleResetAttempted:!1,consecutiveFailures:0,error:null,busyRetryTimer:null,objstoreResourceWaiters:[]};Ae.set(e,i),ex(i),ll(),Jt()},closeSession(e){if(e==null){for(let t of Ae.values())cT(t);Ae.clear()}else{let t=Ae.get(e);t&&cT(t),Ae.delete(e)}Jt()},refreshSession(e){let t=Ae.get(e);if(!t){console.debug("triage-sync: refreshSession bail \u2014 no session for",e,"(caller must openSession first)");return}gT(t)},sessionInfo(e){let t=Ae.get(e);return t?{workspaceId:t.workspaceId,workspaceTag:t.workspaceTag,baseRevision:t.baseRevision,pending:t.pending&&{base:t.pending.base,keyframe:t.pending.keyframe},pendingSave:t.pendingSave,keyReady:t.key!==null,encrypting:t.encrypting,tracked:t.ids.size,savesSinceKeyframe:t.savesSinceKeyframe??0,error:t.error??null}:null},get openSessions(){return[...Ae.keys()].map(e=>this.sessionInfo(e)).filter(e=>e!==null)},dismissError(e){let t=e==null?[...Ae.keys()]:[e],n=!1;for(let r of t){let o=Ae.get(r);!o||!o.error||(o.error=null,o.consecutiveFailures=0,n=!0,!o.key||!o.signingKey?ex(o):an.getSocket()?.readyState===WebSocket.OPEN&&(Yc(o),qn(o)))}n&&Jt()},get persistenceDegraded(){return tT()},onPersistenceDegraded(e){return nT(e)},get proxyAuthRequired(){return Wk()},onProxyAuthRequired(e){return oT(e)}};Fg(e=>{dT=e.state,zp=e.listWorkspaces,Xg=e.saveTriage,aT=e.getSecureItem,uT=e.setSecureItem,e.onSecureStorageHydrated(KV);try{localStorage.removeItem(BV),aT(pT)==="0"&&(Dp=!1),ll()}catch{}e.onWorkspaceDeleted(t=>{let n=Ae.get(t);n&&eb(n);let r=Ae.delete(t);Wg(t).catch(o=>{console.warn("Triage sync: dropPersistedSession lock failed:",o)}),ll(),r&&Jt()}),e.onWorkspacePrivateKeyChanged(t=>{let n=Ae.get(t);if(!n){Wg(t).catch(r=>{console.warn("Triage sync: dropPersistedSession lock failed:",r)});return}n.signingKey=null,n.key=null,n.verifyingKey=null,n.workspaceTag=null,Jg(n),n.keyDerivationGen=(n.keyDerivationGen??0)+1,(async()=>{await Wg(t),Ae.delete(t),Jc.openSession(t),Jt()})().catch(r=>{console.warn("Triage sync: privateKey rotation IIFE failed:",r),Ae.delete(t),Jt()})}),e.onReportMembershipChanged(t=>{Jc.openSession(t);let n=Ae.get(t);n&&gT(n)}),Hk()})});function gx(e){return lK+e}function RT(e){try{let t=localStorage.getItem(gx(e));if(!t)return null;let n=JSON.parse(t);return!n||typeof n!="object"?null:{names:n.names&&typeof n.names=="object"?n.names:{},bundles:n.bundles&&typeof n.bundles=="object"?n.bundles:{},bundleNames:n.bundleNames&&typeof n.bundleNames=="object"?n.bundleNames:{},baselines:cK(n.baselines,n.localVersions)}}catch{return null}}function cK(e,t){let n={};if(t&&typeof t=="object")for(let[r,o]of Object.entries(t))Number.isSafeInteger(o)&&o>=0&&(n[r]={version:o,incarnation:null,synced:!0,hash:null});if(e&&typeof e=="object")for(let[r,o]of Object.entries(e))!o||typeof o!="object"||!Number.isSafeInteger(o.version)||o.version<0||o.incarnation!=null&&typeof o.incarnation!="string"||(n[r]={version:o.version,incarnation:o.incarnation??null,synced:o.synced===!0,hash:typeof o.hash=="string"?o.hash:null});return n}function Wo(e,t){try{let n={names:Object.fromEntries(t.remoteNameByTag),bundles:Object.fromEntries(t.remoteBundleByTag),bundleNames:Object.fromEntries(t.remoteBundleNameByIntegrity),baselines:Object.fromEntries(t.baselines),localVersions:Object.fromEntries([...t.baselines].filter(([,r])=>r.synced).map(([r,o])=>[r,o.version]))};localStorage.setItem(gx(e),JSON.stringify(n))}catch(n){console.warn(`objstore-presence: cache persist failed for ${e}:`,n)}}function yT(e){try{localStorage.removeItem(gx(e))}catch{}}function dK(e){return ix||(ix=H4({serverUrl:"",httpOrigin:e,transport:Dg()})),ix}function Pr(){for(let e of aK)try{e()}catch{}}function uK(e){return typeof e!="string"?"":e.length<=wT?e:e.slice(0,wT)}function pK(e){try{let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/",t.search="",t.hash="",t.origin}catch{return null}}function sx(e){if(gr.has(e))return;let t=Ms().find(i=>i.id===e);if(!t)return;let n=Jc.ensureSubscription(e);if(!n)return;let r={workspaceId:e,session:null,keys:null,remoteTags:new Set,fileTags:new Map,bundleTags:new Map,remoteNameByTag:new Map,remoteBundleByTag:new Map,remoteBundleNameByIntegrity:new Map,remoteMeta:new Map,baselines:new Map,localChanged:new Set,selfWrites:new Map,selfWriteNotices:new Map,tagLocks:new Map,inFlight:new Map,err:null,disposed:!1,ready:null};gr.set(e,r),r.ready=(async()=>{if(r.keys=await Sk(t.privateKey,t.id),r.disposed)return;let i=new Map;for(let d of t.reports??[]){let u=await Es(r.keys.tagKey,d);r.fileTags.set(d,u),i.set(u,d)}if(r.disposed)return;let s=new Map;for(let d of t.bundles??[]){let u=await Rs(r.keys.tagKey,d);r.bundleTags.set(d,u),s.set(u,d)}if(r.disposed)return;try{let d=await fx();if(r.disposed)return;for(let u of d)r.bundleTags.has(u.integrity)&&r.remoteBundleNameByIntegrity.set(u.integrity,u.name)}catch(d){console.warn(`objstore-presence: listBundles failed during ${e} open:`,d)}Pr();let a=Jc.getServerUrl();if(!a)return;let l=pK(a);if(l)try{let u=await dK(l).openWorkspace(r.keys,n);if(r.disposed){try{u.close()}catch{}return}r.session=u,o();let f=await u.list();if(r.disposed)return;for(let g of f)r.remoteTags.add(g.resourceTag),xT(r,g.resourceTag,g.version,g.incarnation);let h=RT(e),m=!1;if(h)for(let[g,y]of Object.entries(h.baselines))(r.remoteTags.has(g)||i.has(g))&&r.baselines.set(g,y);for(let g of r.remoteTags){let y=i.get(g);y!==void 0&&!r.remoteNameByTag.has(g)&&(r.remoteNameByTag.set(g,y),m=!0);let w=s.get(g);if(w!==void 0&&!r.remoteBundleByTag.has(g)&&(r.remoteBundleByTag.set(g,w),m=!0),h){let x=h.names[g];typeof x=="string"&&!r.remoteNameByTag.has(g)&&!r.remoteBundleByTag.has(g)&&(r.remoteNameByTag.set(g,x),r.fileTags.set(x,g),m=!0);let v=h.bundles[g];if(typeof v=="string"&&!r.remoteBundleByTag.has(g)&&!r.remoteNameByTag.has(g)){r.remoteBundleByTag.set(g,v),r.bundleTags.set(v,g);let k=h.bundleNames[v];typeof k=="string"&&!r.remoteBundleNameByIntegrity.has(v)&&r.remoteBundleNameByIntegrity.set(v,k),m=!0}}}(m||h)&&Wo(e,r),Pr(),dx(r);for(let g of r.remoteTags)Xc(r.baselines.get(g),r.remoteMeta.get(g))&&tb(r,g).catch(()=>{});gK(r).catch(()=>{})}catch(d){r.err=d}})();function o(){let i=r.session;i.onPut(({resourceTag:s,version:a,incarnation:l})=>{let d=r.remoteMeta.get(s),u=r.remoteTags.has(s)&&d!==void 0&&(d.incarnation!==l||a>d.version);if(r.remoteTags.add(s),xT(r,s,a,l),Pr(),u){tb(r,s).catch(()=>{});return}dx(r)}),i.onDeleted(({resourceTag:s})=>{r.remoteTags.delete(s),r.remoteMeta.delete(s);let a=r.remoteNameByTag.get(s);r.remoteNameByTag.delete(s);let l=Ms().find(h=>h.id===e),d=l?.reports??[],u=l?.bundles??[];a&&!d.includes(a)&&r.fileTags.delete(a);let f=r.remoteBundleByTag.get(s);r.remoteBundleByTag.delete(s),f&&(r.remoteBundleNameByIntegrity.delete(f),u.includes(f)||r.bundleTags.delete(f)),Wo(e,r),Pr()})}r.ready.catch(()=>{})}function kT(e){let t=gr.get(e);if(t){t.disposed=!0;try{t.session?.close()}catch{}if(t.keys){try{t.keys.contentKey.fill(0)}catch{}try{t.keys.tagKey.fill(0)}catch{}t.keys=null}gr.delete(e),Pr()}}async function fK(e,t){let n=gr.get(e);!n||n.fileTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.fileTags.set(t,await Es(n.keys.tagKey,t)),n.disposed||Pr()))}function TT(e,t,n,r){let o=gr.get(e),i=(t==="bundle"?o?.bundleTags:o?.fileTags)?.get(n);if(i!==void 0){let d=o.baselines.get(i),u=o.remoteMeta.get(i);return{synced:o.remoteTags.has(i)&&(t==="bundle"||!!u&&MT(d,u)&&d.hash===r&&!o.localChanged.has(i)),cached:!1}}let s=RT(e),a=Object.entries((t==="bundle"?s?.bundles:s?.names)??{}).find(([,d])=>d===n)?.[0],l=s?.baselines?.[a];return{synced:a!==void 0&&(t==="bundle"||l?.synced===!0&&l.hash===r),cached:!0}}async function hK(e,t){let n=gr.get(e);!n||n.bundleTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.bundleTags.set(t,await Rs(n.keys.tagKey,t)),n.disposed||Pr()))}function xT(e,t,n,r){let o=e.remoteMeta.get(t);o&&o.incarnation===r&&o.version>=n||e.remoteMeta.set(t,{version:n,incarnation:r})}function Xc(e,t){return!e||!t?!1:e.incarnation===null?t.version!==e.version:e.incarnation!==t.incarnation||t.version>e.version}function mK(e,t){let n=e.baselines.get(t);return!!n&&n.incarnation!==null}function MT(e,t){return!!e&&e.synced&&e.incarnation===t.incarnation&&e.version===t.version}function dl(e,t,n,r,o=null){let i=$T(e,t);e.baselines.set(t,{version:n.version,incarnation:n.incarnation,synced:r,hash:r?o:null}),e.localChanged.delete(t),!e.disposed&&$T(e,t)!==i&&Pr()}function AT(e,t){return!!e&&e.synced&&!!e.hash&&!!t&&e.hash!==t}function IT(e,t){return!!e&&!e.synced||AT(e,t)}function $T(e,t){if(!e.remoteTags.has(t))return!1;if(e.localChanged.has(t))return!0;let n=e.baselines.get(t);return!!n&&!n.synced}async function LT(e,t,n){e.selfWrites.set(t,(e.selfWrites.get(t)??0)+1);try{await CT(t,n),e.selfWriteNotices.set(t,(e.selfWriteNotices.get(t)??0)-1)}finally{let r=e.selfWrites.get(t)-1;if(r>0)e.selfWrites.set(t,r);else{e.selfWrites.delete(t);let o=e.selfWriteNotices.get(t)??0;e.selfWriteNotices.delete(t);let i=e.fileTags.get(t);o>0&&i!==void 0&&!e.disposed&&FT(e,i,t)}}}function FT(e,t,n){sK.setTimeout(()=>BT(e,t,n).catch(()=>{}),iK)}function BT(e,t,n){return bx(e,t,async()=>{if(ET.has(n))return;let r=e.baselines.get(t);if(e.disposed||!r?.synced||!r.hash)return;let o;try{o=await mx(n)}catch{return}let i=await Ho(o);if(e.disposed||e.baselines.get(t)!==r)return;let s=r.hash!==i;s!==e.localChanged.has(t)&&(s?e.localChanged.add(t):e.localChanged.delete(t),Pr())})}async function gK(e){let t=Ms().find(n=>n.id===e.workspaceId);for(let n of t?.reports??[]){if(e.disposed)return;let r=e.fileTags.get(n);if(!(r===void 0||!e.baselines.get(r)?.hash))try{await BT(e,r,n)}catch{}}}function bx(e,t,n){let r=(e.tagLocks.get(t)??Promise.resolve()).then(()=>n()),o=r.catch(()=>{}).finally(()=>{e.tagLocks.get(t)===o&&e.tagLocks.delete(t)});return e.tagLocks.set(t,o),r}function ST(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}async function yx(e,t){let n;try{n=await mx(e)}catch{return{same:null,hash:null}}let r=await Ho(n);if(ST(n,t))return{same:!0,hash:r};try{let[o,i]=await Promise.all([Up(n),Up(t)]);return{same:ST(o,i),hash:r}}catch{return{same:!1,hash:r}}}async function OT(e,t,n,r){let o;try{o=ut(await Up(n.content))}catch(s){throw new Error(`gunzip/decode of "${n.fileName}" failed (likely forged peer payload)`,{cause:s})}if(!r())return!1;let i=ux(o);if(!i.recognized)throw new Error(`cloud copy of "${n.fileName}" did not analyze as a recognized report \u2014 refusing to overwrite local copy`);if(await LT(e,n.fileName,n.content),e.disposed)return!1;px(n.fileName,i.count,i.source),dl(e,t,n,!0,await Ho(n.content)),Wo(e.workspaceId,e);for(let s of cx)try{s(e.workspaceId,n.fileName)}catch{}return!0}async function bK(e,t,n,r,{keepLocalChanges:o=!0}={}){let{same:i,hash:s}=await yx(n.fileName,n.content);return r()?i?(dl(e,t,n,!0,s),Wo(e.workspaceId,e),!1):o&&i===!1&&IT(e.baselines.get(t),s)?(dl(e,t,n,!1),Wo(e.workspaceId,e),!1):await OT(e,t,n,r):!1}async function dx(e){if(!e.session||e.disposed)return;let t=Ms().find(s=>s.id===e.workspaceId),n=new Set(t?.reports??[]),r=new Set(t?.bundles??[]),o=new Set;try{o=new Set(await hx())}catch(s){console.warn(`objstore-presence: listFiles failed during discovery for "${e.workspaceId}":`,s)}if(e.disposed||!e.session)return;let i=[];for(let s of e.remoteTags){let a=e.remoteNameByTag.get(s);if(a!==void 0&&n.has(a)&&o.has(a)&&mK(e,s))continue;if(e.remoteBundleByTag.has(s)){let d=e.remoteBundleByTag.get(s);if(e.remoteBundleNameByIntegrity.has(d)&&r.has(d))continue}let l=e.inFlight.get(s);if(!l){let d=e.remoteMeta.get(s),u=()=>e.disposed||!e.remoteTags.has(s)||e.remoteMeta.get(s)===d?null:dx(e).then(()=>null,()=>null);l=e.session.fetchByTag(s).then(async f=>(e.inFlight.delete(s),e.disposed?null:f?e.remoteTags.has(s)?f.kind==="bundle"?(e.remoteBundleByTag.set(s,f.integrity),e.bundleTags.set(f.integrity,s),f.name&&e.remoteBundleNameByIntegrity.set(f.integrity,f.name),await kK(e,s,f.integrity,f.name,f.content),null):(e.remoteNameByTag.set(s,f.fileName),e.fileTags.set(f.fileName,s),await yK(e,s,f),null):null:u()),()=>(e.inFlight.delete(s),u())),e.inFlight.set(s,l)}i.push(l)}i.length!==0&&(await Promise.all(i),!e.disposed&&(Wo(e.workspaceId,e),Pr()))}async function yK(e,t,n){e.disposed||!e.remoteTags.has(t)||await bx(e,t,async()=>{await vK(e,t,n),!e.disposed&&e.remoteTags.has(t)&&Xc(e.baselines.get(t),e.remoteMeta.get(t))&&tb(e,t).catch(()=>{})})}async function vK(e,t,n){let r=n.fileName,o=n.content;if(e.disposed||!e.remoteTags.has(t))return;let i=Ms().find(u=>u.id===e.workspaceId),s=!!(i&&Array.isArray(i.reports)&&i.reports.includes(r)),a;try{let u=await hx();if(e.disposed||!e.remoteTags.has(t))return;a=u.includes(r)}catch(u){console.warn(`auto-download: listFiles failed before saving "${r}":`,u);return}if(a){if(s){await wK(e,t,n);return}if(e.disposed||!e.remoteTags.has(t))return;try{await ax(r,e.workspaceId)}catch(u){console.warn(`auto-download: attaching local "${r}" to workspace "${e.workspaceId}" failed:`,u);return}if(e.disposed)return;if(!e.baselines.has(t)){let{same:u,hash:f}=await yx(r,o);if(e.disposed)return;u!==null&&(dl(e,t,n,u,f),Wo(e.workspaceId,e))}for(let u of cx)try{u(e.workspaceId,r)}catch{}return}let l;try{l=ut(await Up(o))}catch(u){console.warn(`auto-download: gunzip/decode of "${r}" failed (likely forged peer payload):`,u);return}if(e.disposed||!e.remoteTags.has(t))return;let d=ux(l);if(d.recognized){try{if(await LT(e,r,o),e.disposed||!e.remoteTags.has(t)||(px(r,d.count,d.source),dl(e,t,n,!0,await Ho(o)),!e.remoteTags.has(t)))return;await ax(r,e.workspaceId),Wo(e.workspaceId,e)}catch(u){console.warn(`auto-download: persisting "${r}" to workspace "${e.workspaceId}" failed:`,u);return}if(!e.disposed)for(let u of cx)try{u(e.workspaceId,r)}catch{}}}async function wK(e,t,n){let r=()=>!e.disposed&&e.remoteTags.has(t),{same:o,hash:i}=await yx(n.fileName,n.content);if(!r()||o===null)return;let s=e.baselines.get(t);if(o){(!MT(s,n)||s.hash!==i)&&(dl(e,t,n,!0,i),Wo(e.workspaceId,e));return}if(Xc(s,n)&&!IT(s,i)){try{await OT(e,t,n,r)}catch(a){console.warn(`auto-download: ${a.message}`,a)}return}if(!s||s.incarnation===null||Xc(s,n)){dl(e,t,n,!1),Wo(e.workspaceId,e);return}AT(s,i)&&!e.localChanged.has(t)&&(e.localChanged.add(t),Pr())}async function tb(e,t,n=0){e.disposed||!e.remoteTags.has(t)||await bx(e,t,async()=>{let r=()=>!e.disposed&&e.remoteTags.has(t);if(!r())return;let o=e.baselines.get(t);if(o?.synced&&!Xc(o,e.remoteMeta.get(t)))return;let i;try{i=await e.session.fetchByTag(t)}catch(s){console.warn(`replace-refetch: fetchByTag failed for tag in workspace "${e.workspaceId}":`,s);return}if(!(!i||!r())&&i.kind!=="bundle"){e.remoteNameByTag.set(t,i.fileName),e.fileTags.set(i.fileName,t);try{await bK(e,t,i,r)}catch(s){console.warn(`replace-refetch: ${s.message}`,s);return}n<2&&r()&&Xc(e.baselines.get(t),e.remoteMeta.get(t))&&tb(e,t,n+1).catch(()=>{})}})}async function kK(e,t,n,r,o){if(e.disposed||!e.remoteTags.has(t))return;let i;try{i=await fx()}catch(d){console.warn(`auto-download: listBundles failed before saving bundle "${n}":`,d);return}if(e.disposed||!e.remoteTags.has(t))return;if(i.some(d=>d.integrity===n)){try{await lx(n,e.workspaceId)}catch(u){console.warn("auto-download: attach pre-existing bundle failed:",u);return}if(e.disposed)return;let d=i.find(u=>u.integrity===n)?.name??"";for(let u of vT)try{u(e.workspaceId,n,d)}catch{}return}let s=await Km(o);if(e.disposed||!e.remoteTags.has(t))return;if(s!==n){console.warn(`auto-download: bundle integrity mismatch (claimed ${n}, got ${s}) \u2014 refusing to save`);return}let a=r&&r.length>0?r:`bundle-${n.slice(7,15)}`,l=uK(a);try{if(await _T(l,o),e.disposed||!e.remoteTags.has(t))return;await lx(n,e.workspaceId)}catch(d){console.warn(`auto-download: persisting bundle "${n}" to workspace "${e.workspaceId}" failed:`,d);return}if(!e.disposed)for(let d of vT)try{d(e.workspaceId,n,l)}catch{}}var Ms,ax,lx,ux,px,Up,fx,hx,oK,mx,_T,CT,gr,iK,sK,ET,aK,lK,ix,cx,vT,wT,PT=$(()=>{"use strict";Tg();W4();Ig();Bk();bT();Ut();X0();Hc();gr=new Map,iK=2e3,sK={setTimeout:(e,t)=>setTimeout(e,t)},ET=new Map,aK=new Set,lK="deepview.objstore-presence.";ix=null;cx=new Set,vT=new Set;wT=256;Fg(e=>{Ms=e.listWorkspaces,ax=e.addReportToWorkspace,lx=e.addBundleToWorkspace,ux=e.analyzeContent,px=e.setCount,Up=e.gunzipBytes,fx=e.listBundles,hx=e.listFiles,oK=e.readBundle,mx=e.readFileBytes,_T=e.saveBundle,CT=e.saveFileBytes,e.onFileMutated?.((t,n)=>{for(let r of gr.values()){let o=r.fileTags.get(t);if(o!==void 0){if(n==="delete"){r.localChanged.delete(o)&&Pr();continue}if(r.selfWrites.has(t)){r.selfWriteNotices.set(t,(r.selfWriteNotices.get(t)??0)+1);continue}ET.has(t)||FT(r,o,t)}}}),e.onReportMembershipChanged(t=>{gr.has(t)||sx(t);let n=gr.get(t);if(!n)return;let r=Ms().find(o=>o.id===t);if(r)for(let o of r.reports??[])n.fileTags.has(o)||fK(t,o).catch(()=>{})}),e.onBundleMembershipChanged(t=>{gr.has(t)||sx(t);let n=gr.get(t);if(!n)return;let r=Ms().find(o=>o.id===t);if(r)for(let o of r.bundles??[])n.bundleTags.has(o)||hK(t,o).catch(()=>{})}),e.onWorkspaceDeleted(t=>{kT(t),yT(t)}),e.onWorkspacePrivateKeyChanged(t=>{gr.has(t)&&(kT(t),yT(t),sx(t))})})});function vx(){return{...NT,hydrateKey:L0,localContentSyncStatus:TT,readTriageBlob:async()=>(await pm(await vg(),e=>tp("report",e,()=>Zm(e)))).entries,reportSyncHash:e=>tp("report",e,async()=>Ho(await io(e)))}}function wx(e=NT){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,i,s)=>{let a=!1,l=!1,d=e.onVaultStateChange(()=>{a=!0}),u=i==="report"?e.onFileMutated:e.onBundleMutated,f=s===void 0?null:u(h=>{h===s&&(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 ${i} changed. Select it again before importing.`)},unsubscribe(){d(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(i=>({value:i,label:i})):(await e.listBundles()).map(i=>({value:i.integrity,label:i.name,secondary:i.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 i=n();try{i.check();let s=await r(o);return i.check(),s}finally{i.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let i=e.onVaultStateChange(()=>o()),s=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{i(),s(),a()}},async importItem(o,i,s,{signal:a}={}){let l=n(a,o,i);try{l.check();let{result:d}=await e.withStoredItem(o,i,async()=>{l.check();let u=(await r(o)).find(m=>m.value===i);if(l.check(),!u)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(i):await e.readBundle(i);l.check();let h=new File([f],u.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let m=Promise.resolve(s(h));return m.catch(()=>{}),{result:m}}finally{l.unsubscribe()}});return d}finally{l.unsubscribe()}}}}var NT,DT=$(()=>{"use strict";Gn();xc();no();Ar();_s();PT();Ig();NT={hasStoredBundleBytes:d1,listBundles:vn,listFiles:Pe,onBundleMutated:a1,onFileMutated:Kn,readBundle:Fr,readFile:Zm,withStoredItem:tp,isEncryptionEnabled:De,isUnlocked:Vn,onVaultStateChange:At,unlockEncryption:Ha}});function zT(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function Zc(){if(!zT()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function kx(){let e={supported:zT(),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 UT=$(()=>{"use strict"});function jT(){for(let e of xx)e()}function Qc(){return lt(nb)!=null}function $x(e){try{let t=JSON.parse(lt(nb)),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 Sx({server:e,deepview:t,provider:n,token:r}){await It(nb,JSON.stringify({server:e,deepview:t,provider:n,token:r})),jT()}async function _x(){await us(nb),jT()}function Cx(e){xx.add(e);let t=Lo(e);return()=>{xx.delete(e),t()}}var nb,xx,HT=$(()=>{"use strict";no();nb="deepview.scan.access",xx=new Set});function xK(){let e=dk(),t=Fm();return{version:Ex,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function $K(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function Rx(){let e=xK();return{blob:new Blob([await Zu(JSON.stringify(e))]),filename:$K()}}async function Tx(e){let t;try{t=await Va(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!==Ex)throw new Error(`Unsupported backup version: ${n.version} (expected ${Ex})`);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 Mx(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()])Uo.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(Uo.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ie(r,a,{color:l.color});let d=Xe(l);if(d&&(!o||!Xe(r.get(a)))&&ie(r,a,{triage:d}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ie(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ie(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ie(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wn(r.get(a)))for(let u of l.ignoredReports)typeof u=="string"&&St(r,a,u,!0,ir(l,u))}await Nc(),await We();let i=0,s=null;try{await m3(e.repoUrls,t),i=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),s=a}return{triageEntries:Object.keys(n).length,repoUrls:i,repoUrlError:s}}var Ex,WT=$(()=>{"use strict";Ka();eo();cr();_s();Ex=1});function SK(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function Ax(e){let t=new Set;for(let n of e){let r;try{r=await ot(n)}catch(i){if(SK(i))continue;throw new Error(`Failed to read ${n}: ${i.message}`,{cause:i})}if(r==null)continue;let o=await gn(r);if(o)for(let i of o.findings)i.id&&t.add(i.id)}return t}function _K(){let e=new Set;for(let t of c.triage.keys())Uo.test(t)||e.add(t);return e}async function rb(e){let t=_K();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await Ax(e),r=new Set;for(let u of t)n.has(u)&&r.add(u);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await Pe(),i=new Set(e),s=o.filter(u=>!i.has(u)),a=await Ax(s),l=0,d=0;for(let u of r)a.has(u)?d++:l++;return{orphanedCount:l,sharedCount:d}}async function ob(){let e=new Set(c.triage.keys()),t=[];for(let[s,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:s,report:l});let n=await Pe(),r=new Set(n),o=await Ax(n),i=!1;for(let s of e){if(Uo.test(s)||o.has(s))continue;let a=c.triage.get(s);!a||!(a.color||Xe(a)||a.comment||a.fix||a.flagged!==void 0)||ie(c.triage,s,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(i=!0)}for(let{id:s,report:a}of t)Uo.test(s)||o.has(s)&&r.has(a)||Da(c.triage,s,a)&&St(c.triage,s,a,!1)&&(i=!0);i&&await We()}var VT=$(()=>{"use strict";cr();eo();_s();Gn();Le()});var KT=$(()=>{"use strict"});async function YT(e,t){let n=await crypto.subtle.importKey("raw",be(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:t,iterations:3e6},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function JT(e){return!(e instanceof Uint8Array)||e.length<qT?!1:e[0]===Ix}async function ib(e,t){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof t!="string"||!t)throw new TypeError("encryptWithPassword: password required");let n=new Uint8Array(As+e.length+16);n[0]=Ix,crypto.getRandomValues(n.subarray(1,1+Is)),crypto.getRandomValues(n.subarray(1+Is,As));let r=n.subarray(1,1+Is),o=n.subarray(1+Is,As),i=await YT(t,r),s=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:n.subarray(0,As)},i,e));return n.set(s,As),n}async function EK(e,t){if(typeof t!="string"||!t)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<qT)return{ok:!1,reason:"malformed"};if(e[0]!==Ix)return{ok:!1,reason:"malformed"};let n=e.subarray(1,1+Is),r=e.subarray(1+Is,As),o=e.subarray(As),i=await YT(t,n),s;try{s=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:r,additionalData:e.subarray(0,As)},i,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:s}}async function sb(e,t,n){if(!n||typeof n.malformedMsg!="string"||typeof n.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let r=await EK(e,t);if(r.ok)return r.plaintext;throw r.reason==="wrong-password"?new Error(n.wrongPasswordMsg):new Error(n.malformedMsg)}var Ix,Is,GT,qT,As,Lx=$(()=>{"use strict";Ut();KT();Ix=1,Is=16,GT=12,qT=1+Is+GT+16,As=1+Is+GT});function ZT(e,t){return sb(e,t,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var jp,XT,Hp=$(()=>{"use strict";Lx();jp=JT,XT=ib});async function TK(e){let t=new Set,n=await gn(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function Fx(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function MK(e){if(!Array.isArray(e)||e.length===0)return[];let t=await vn(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let i=n.get(o);if(!i)continue;let s;try{s=await Fr(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:i,data:s.toBase64()})}return r}function AK(e){let t=Fn(e);return t?{github:t}:null}async function QT(e){let t=[];for(let n of e.reports??[]){let r;try{r=await ot(n)}catch(i){console.warn(`Workspace export: skipping ${n}: ${i?.message??i}`),(i instanceof DOMException&&i.name==="NotFoundError"||typeof i?.message=="string"&&i.message.startsWith("File not found:"))&&await vp(n,null);continue}let o=AK(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function IK(e,{includeBundleBytes:t=!1}={}){let n=await QT(e),r=new Set;for(let d of n)for(let u of await TK(d.content))r.add(u);let o=new Set(e.reports??[]),i={};for(let[d,u]of c.triage){if(!r.has(d))continue;let f=(u.ignoredReports??[]).filter(m=>o.has(m)),h=sr({...u,ignoredReports:f});h&&(i[d]=h)}let s={};for(let d of n)d.repo?.github&&(s[d.name]=d.repo.github);let a=(e.bundles??[]).filter(d=>typeof d=="string"&&d.length>0),l={version:RK,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:s,triage:i};if(t){let d=await MK(a);d.length>0&&(l.bundleBlobs=d)}return l}async function eM(e,{includeBundleBytes:t=!1}={}){let n=await IK(e,{includeBundleBytes:t});return{blob:new Blob([await Zu(JSON.stringify(n))]),filename:`${Fx(e.name)}.deepview-workspace.json.gz`}}async function LK(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await eM(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),i=await XT(o,t);return{blob:new Blob([i],{type:"application/octet-stream"}),filename:`${Fx(e.name)}.deepview-workspace.enc`}}async function Bx(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await LK(e,t,{includeBundleBytes:n}):await eM(e,{includeBundleBytes:n})}async function FK(e){return{reports:await QT(e)}}async function Ox(e){let t=await FK(e);return{blob:new Blob([await Zu(JSON.stringify(t))]),filename:`${Fx(e.name)}.deepview-reports.json.gz`}}var RK,tM=$(()=>{"use strict";cr();eo();Gn();xs();Le();Ka();Hp();RK=1});function PK(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==BK)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>ed)return`reports count (${e.reports.length}) exceeds cap (${ed})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>nM)return`bundles count (${e.bundles.length}) exceeds cap (${nM})`;for(let t of e.bundles){if(typeof t!="string")return"bundles entries must be strings";if(t.length>ab)return`bundle integrity exceeds per-entry length cap (${ab})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>oM)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${oM})`;for(let t of e.bundleBlobs){if(!t||typeof t!="object"||Array.isArray(t))return"bundleBlobs entries must be objects";if(typeof t.integrity!="string"||t.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(t.integrity.length>ab)return`bundleBlobs.integrity exceeds per-entry length cap (${ab})`;if(typeof t.name!="string"||t.name.length===0)return"bundleBlobs.name must be a non-empty string";if(t.name.length>rM)return`bundleBlobs.name exceeds per-entry length cap (${rM})`;if(t.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof t.data!="string")return"bundleBlobs.data must be a base64 string";if(t.data.length>OK)return`bundleBlobs.data exceeds per-blob size cap (${iM} bytes raw)`}}return null}async function lb(e){return new Uint8Array(await e.arrayBuffer())}async function cb(e,t){if(jp(e)){if(typeof t!="string"||!t)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let r=await ZT(e,t);try{return td(await Va(r))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let n;try{n=await Va(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}return td(n)}function td(e){let t;try{t=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let n=PK(t);if(n===null)return t;let r=n.includes("exceeds cap");throw new Error(r?n:`not a deepview workspace export: ${n}`)}var BK,nM,ed,ab,iM,OK,rM,oM,sM=$(()=>{"use strict";Ka();Hp();BK=1,nM=1024,ed=1024,ab=200,iM=100*1024*1024,OK=Math.ceil(iM*4/3)+16,rM=512,oM=64});function NK(e){return Xe(e)??null}async function DK(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await gn(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:Y1(o.description)})}return t}async function zK(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[i,s]of Object.entries(e)){if(!s||typeof s!="object")continue;let a=r.get(i)?.color,l=typeof s.color=="string"?s.color:void 0;l&&a&&a!==l?o.push({id:i,property:"color",local:a,imported:l}):l&&l!==a&&ie(r,i,{color:l});let d=r.get(i)?.comment??"",u=typeof s.comment=="string"?s.comment:"";u&&d&&d!==u?o.push({id:i,property:"comment",local:d,imported:u}):u&&u!==d&&ie(r,i,{comment:u});let f=r.get(i)?.fix??"",h=typeof s.fix=="string"?s.fix:"";h&&f&&f!==h?o.push({id:i,property:"fix",local:f,imported:h}):h&&h!==f&&ie(r,i,{fix:h});let m=NK(s),g=Xe(r.get(i))??null;m&&g&&g!==m?o.push({id:i,property:"triage",local:g,imported:m}):m&&!g&&ie(r,i,{triage:m,...m==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(i)?.flagged,w=typeof s.flagged=="boolean"?s.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:i,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ie(r,i,{flagged:w});let x=Array.isArray(s.ignoredReports)?s.ignoredReports:[];if(Wn(r.get(i)))for(let v of x)typeof v=="string"&&St(r,i,v,!0,ir(s,v))}if(o.length>0&&t){let i=await t(o,n??new Map);i&&UK(o,i)}await We()}function UK(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&jK(n.id,n.property)===n.local&&(n.property==="color"?ie(c.triage,n.id,{color:n.imported}):n.property==="comment"?ie(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ie(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ie(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ie(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function jK(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return Xe(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 HK(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 ws(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 Px(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await pr(f.name,f.content);let{count:h,source:m}=kn(f.content);wn(f.name,h,m??Lt(f.name)),n.push(f.name)}catch(h){console.warn(`Workspace import: failed to save ${f.name}: ${h.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await HK(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await DK(e.reports):new Map,i=await pm(e.triage,f=>e.reports.find(h=>h.name===f)?.content);await zK(i.entries,t,o);let s=Array.isArray(e.bundles),a=s?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await Y3({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:s?a:void 0,preserveBundles:!s,createdAt:e.workspace.createdAt}),d=new Set(n),u=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,h]of Object.entries(e.repoUrls))!d.has(f)||typeof h!="string"||!h||(u[f]=h);if(Object.keys(u).length>0)try{await Bm(u)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}var Nx=$(()=>{"use strict";Ar();cr();Gn();xs();_s();Bc();X1();Le();eo();sM()});function WK(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>ed?`reports count (${e.reports.length}) exceeds cap (${ed})`:null:"reports field must be an array"}function aM(e){return WK(e)===null}async function Dx(e){if(jp(e))return{kind:"encrypted"};let t;try{t=await Va(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 aM(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}var lM=$(()=>{"use strict";Nx();Ka();Hp()});async function zx({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 i=await pp(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await ib(be(JSON.stringify(i)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function Ux({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 sb(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await VK(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function VK(e){let t=JSON.parse(ut(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 pp(t.k),name:t.n,privateKeyBase64:t.k}}function jx(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function Hx(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 cM=$(()=>{"use strict";Ut();Lx();T1()});function rd(e=lt(Gx)){try{let t=JSON.parse(e);if(t?.version===dM&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:dM,revision:"",links:"[]",entries:{}}}function nd(){for(let e of Wx)e()}function pM(e){let t=pb.then(()=>Sc(Gx,n=>e(rd(n))));return pb=t.catch(n=>console.warn("workspace App cache:",n)),t}function db(e){return JSON.stringify(e.reports.toSorted())}function fM(){return JSON.stringify(rk().map(({name:e,groups:t})=>({name:e,groups:t})))}function Jx(e){return tk()&&e.links===fM()}function hM(e,t){return e.workspaceRevisions?.[t]??""}function mM(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(ub.get(t?.id)??0)&&n.workspaceRevision===hM(e,t?.id)}function gM(e,t,n){return n.reportEpoch===Yx&&n.reportRevision===(e.reportRevision??e.revision)&&mM(e,t,n)}function Xx(e,t){return gM(rd(),e,t)}function bM(e,t){if(Kx||Vx.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==db(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Zx(e){return bM(e,rd())?.appMode??null}function ul(e){let t=rd(),n=bM(e,t);return!n||!Jx(t)?null:n}async function Wp(e,t=null){let n;do n=pb,await n;while(n!==pb);let r=rd(),o=r.reportRevision??r.revision;return t&&(!gM(r,e,t)||!Jx(r))?null:{epoch:qx,revision:r.revision,reportEpoch:Yx,reportRevision:o,workspaceId:e?.id,workspaceEpoch:ub.get(e?.id)??0,workspaceRevision:hM(r,e?.id)}}async function Qx(e,t,n){let r=!1;return await pM(o=>{if(n.epoch!==qx||n.revision!==o.revision||!mM(o,e,n)||!Jx(o))return;let i=de().find(s=>s.id===e.id);if(!(!i||db(i)!==db(e)))return o.entries[e.id]={...t,reports:db(e)},r=!0,JSON.stringify(o)}),r&&nd(),r}function fb(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)qx++,t===void 0&&Yx++,Kx++;else for(let n of e)ub.set(n,(ub.get(n)??0)+1),Vx.add(n);return nd(),pM(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)Kx--;else for(let n of e)Vx.delete(n);nd()})}function e$(e){return Wx.add(e),()=>Wx.delete(e)}var Gx,dM,Wx,Vx,Kx,qx,Yx,ub,pb,uM,yM=$(()=>{"use strict";no();xs();F1();Gn();ik();Gx="deepview.workspaceApp",dM=2,Wx=new Set,Vx=new Set,Kx=0,qx=0,Yx=0,ub=new Map,pb=Promise.resolve(),uM=null;Lo(()=>{let e=lt(Gx);e!==uM&&(uM=e,nd())});mp(e=>{fb([e]).catch(()=>{})});hp(e=>{fb([e]).catch(()=>{})});Kn(e=>{let t=de().filter(n=>n.reports.includes(e)).map(n=>n.id);fb(t).catch(()=>{})});ol(()=>{if(!tk()){nd();return}let e=fM();rd().links===e?nd():fb(null,e).catch(()=>{})})});var q=$(()=>{"use strict";N3();J0();U3();Bc();Cc();X3();X1();hs();ik();o4();DT();xc();UT();no();HT();cr();Em();Gn();WT();VT();_s();eo();Hp();tM();Nx();lM();cM();xs();yM()});function vM(e){e.installSyncHost(KK),ak(()=>e.triageSync.notify())}var KK,wM=$(()=>{"use strict";cr();Bc();xs();Gn();_s();no();KK={get state(){return c},listWorkspaces:de,addReportToWorkspace:nl,addBundleToWorkspace:rl,onReportMembershipChanged:mp,onBundleMembershipChanged:A1,onWorkspaceDeleted:hp,onWorkspacePrivateKeyChanged:M1,analyzeContent:kn,setCount:wn,gunzipBytes:ur,listBundles:vn,listFiles:Pe,readBundle:Fr,readFileBytes:io,saveBundle:ws,saveFileBytes:Qm,onFileMutated:Kn,async saveTriage(){return await Nc(),We()},getSecureItem:lt,setSecureItem:It,removeSecureItem:us,onSecureStorageHydrated:Lo}});function SM(){try{return lt("deepview.sync.userEnabled")!=="0"}catch{return!0}}function gb(e){_M=!!e}function mb(){if(_M||c.serverMode!=="e2e")return!0;try{return lr()?.mode==="managed"}catch{return!1}}function Vp(){return pl||(mb()&&!$e?Promise.resolve(null):(pl=(async()=>{let e="./client-sync.js";try{let t=await import(e);return vM(t),$e=t,GK(),t}catch(t){throw pl=null,t}})(),pl))}function Kp(e){$e?e($e):CM.push(e)}function GK(){let e=CM.splice(0);for(let t of e)try{t($e)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function fl(e,t){let n={cancelled:!1,unsub:null};return Kp(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function t$(e,t){return $e?$e.isInRemote(e,t):!1}function EM(e,t){return $e?$e.isBundleInRemote(e,t):!1}function RM(e){try{let t=localStorage.getItem(qK+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function od(e,t){if($e&&$e.isInRemote(e,t))return!0;let n=RM(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function n$(e,t){if($e&&$e.isBundleInRemote(e,t))return!0;let n=RM(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function r$(e){return $e?$e.remoteCount(e):0}function TM(e){return $e?$e.differingReports(e):[]}function MM(e){return fl(e,(t,n)=>t.onAutoDownloaded(n))}function AM(e){return fl(e,(t,n)=>t.onBundleAutoDownloaded(n))}function IM(e){return fl(e,(t,n)=>t.onChange(n))}function LM(e){if($e){$e.setRedraw(e);return}kM=e,Kp(t=>{kM===e&&t.setRedraw(e)})}function FM(e){if($e){$e.setAuthenticationResolver(e);return}xM=e,Kp(t=>{xM===e&&t.setAuthenticationResolver(e)})}function BM(e){if($e){$e.setHydrationConflictResolver(e);return}$M=e,Kp(t=>{$M===e&&t.setHydrationConflictResolver(e)})}async function Vo(e,t){if(mb()||!SM()&&!$e)return;let n=await Vp();if(!(!n||mb()))return n[e](...t)}function OM(...e){return Vo("downloadFileFromRemote",e)}function PM(...e){return Vo("fetchBundleFromRemote",e)}function bb(...e){return Vo("putFile",e)}function NM(...e){return Vo("holdLocalChangeChecks",e)}function DM(...e){return Vo("putBundleToRemote",e)}function yb(...e){return Vo("deleteFromRemote",e)}function vb(...e){return Vo("deleteBundleFromRemote",e)}function Gp(...e){return Vo("openWorkspace",e)}async function o$(...e){return($e??(pl?await pl:null))?.closeWorkspace(...e)}function zM(...e){return Vo("recheckRemoteStorage",e)}function UM(...e){return Vo("resolveReportDifference",e)}function Li(e,t){if($e)return $e.triageSync[e](...t);Kp(n=>{n.triageSync[e](...t)})}var $e,pl,_M,CM,qK,kM,xM,$M,hb,me,co=$(()=>{"use strict";q();wM();$e=null,pl=null;_M=!1;CM=[];qK="deepview.objstore-presence.";kM=null,xM=null,$M=null,hb=[];me={get status(){return $e?$e.triageSync.status:"off"},get openSessions(){return $e?$e.triageSync.openSessions:[]},get persistenceDegraded(){return $e?$e.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return $e?$e.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return mb()?Promise.resolve(null):Vp().then(t=>{t.triageSync.setEnabled(!0);let n=hb;hb=[];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($e){hb=$e.openWorkspaceIds();for(let t of hb)try{$e.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}$e.triageSync.setEnabled(!1);return}Li("setEnabled",[e])},isEnabled(){return $e?$e.triageSync.isEnabled():SM()},openSession(e){Li("openSession",[e])},closeSession(e){Li("closeSession",[e])},refreshSession(e){Li("refreshSession",[e])},dismissError(e){Li("dismissError",[e])},setForcedOff(e){Li("setForcedOff",[e])},setProtocolLocked(e){Li("setProtocolLocked",[e])},setServerUrl(e){Li("setServerUrl",[e])},getServerUrl(){return $e?$e.triageSync.getServerUrl():null},notify(){Li("notify",[])},onStatusChange(e){return fl(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return fl(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return fl(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return fl(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}}});function i$(e){if(!e?.startsWith("#public="))return null;let t=/^#public=([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]{43})$/u.exec(e);return t?{id:t[1],token:t[2]}:{id:"",token:""}}function Ko(){return HM}function hl(e,t=HM){return t?`${e}#public=${t.id}.${t.token}`:e}var jM,HM,ml=$(()=>{"use strict";jM=globalThis.location?.hash,HM=i$(jM);globalThis.addEventListener?.("hashchange",()=>{let e=globalThis.location?.hash;e?.startsWith("#public=")&&e!==jM&&globalThis.location.reload()})});function s$(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function YK(e){let t=e.location.hash,n=i$(t),r=!1,o=null,i=0,s=null,a=null,l=!1,d=null,u=null;function f(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h(k){let S=qu(k),C=S?.view==="home"?ps(k.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function m(){try{let k=e.sessionStorage?.getItem(wb);if(e.sessionStorage?.removeItem(wb),!k)return null;let S=new URL(k,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function g(){if(!r||!ps(e.location.hash)||d===e.location.href||e.history.state?.[Go]&&e.history.state[Go]!==o)return;let k=d=e.location.href,S=h(new URL(k));w(S??{view:"home"},{replace:!0}).finally(()=>{d===k&&(d=null)})}function y(k){f()||(k=hl(k,n),e.history.replaceState(r?{[Go]:o}:null,"",k),a=k)}async function w(k,{replace:S=!1,pop:C=!1}={}){if(!r||!s||f())return!1;k??={view:"home"};let _=dr(k);if(_===null)return!1;let E=++i,O=u={route:k,findingRoute:null},z=()=>r&&E===i&&!f(),T=!1;try{T=await s(k,z)}catch(D){console.warn("managed: navigation failed:",D)}return z()?T?(typeof T=="object"&&(_=dr(T)??_),s$(O.findingRoute,typeof T=="object"?T:k)&&(_=dr(O.findingRoute)),u=null,C||S?y(_):hl(_,n)!==a&&(_=hl(_,n),e.history.pushState({[Go]:o},"",_),a=_),!0):(await s({view:"home"},z),z()&&(u=null,y("/")),!1):!1}function x(k){if(f())return;if(!r){k.state?.[Go]&&y("/");return}if((!k.state?.[Go]||k.state[Go]===o)&&ps(e.location.hash)){g();return}let S=k.state?.[Go]===o?h(new URL(e.location.href)):null;w(S??{view:"home"},{pop:!0})}function v(k){if(!r||k.defaultPrevented||k.button!==0||k.metaKey||k.ctrlKey||k.shiftKey||k.altKey)return;let S=k.composedPath().find(E=>E.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 _=h(C);if(_?.finding)return k.preventDefault(),w(_)}return{get active(){return r},rememberFinding(){let k=h(new URL(e.location.href));if(!k?.finding)return;let S=k.view==="home"?`/#${Po(k.finding)}`:dr(k);try{e.sessionStorage?.setItem(wb,S)}catch{}},start(k){if(r)return;r=!0,s=k,o=typeof e.history.state?.[Go]=="string"?e.history.state[Go]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",g),e.addEventListener("click",v),e.launchQueue?.setConsumer(({targetURL:_})=>{if(!r||!_)return;let E=new URL(_);if(E.origin!==e.location.origin)return;let O=h(E);O&&w(O)}),l=!0);let S=m(),C=h(new URL(e.location.href))??{view:"home"};return S&&C.view==="home"&&!C.finding&&(C=S),w(C,{replace:!0})},navigate:w,replaceFindingRoute(k){if(!r||k?.view!=="findings"||f())return;let S=dr(k);if(S!=null){if(u){(u.route.view==="home"&&u.route.finding||s$(k,{...u.route,view:"findings"}))&&(u.findingRoute=k);return}s$(k,qu(new URL(e.location.href)))&&hl(S,n)!==a&&y(S)}},replaceRoute(k){if(!r||!k||f())return;let S=dr(k);S!=null&&y(S)},reset({force:k=!1}={}){if(++i,u=null,r||k){try{e.sessionStorage?.removeItem(wb)}catch{}r=!1,o=null,s=null,y("/")}}}}var Go,wb,Ve,id=$(()=>{"use strict";Ti();Cc();ml();Go="deepviewManagedNavigation",wb="deepviewManagedLoginFinding";Ve=typeof window>"u"?null:YK(window)});function WM(e){return typeof e=="string"&&qp.includes(e)}function sd(e,t){let n=qp.indexOf(e);return n!==-1&&n<=qp.indexOf(t)}var qp,Yp=$(()=>{"use strict";qp=["admin","manage","triage","view","none"]});function gl(e){return A()&&!c.managedSession?.publicShare&&sd(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}var kb=$(()=>{"use strict";q();Yp()});function VM(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function JK(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 KM(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]}`,i=Number(r[3]);return!JK(o)||!Number.isSafeInteger(i)||i<=0?null:{repo:o,number:i}}function Jp(e){return KM(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Xp(e){return KM(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function a$(e){let t=Jp(e);if(t)return{...t,kind:"pull"};let n=Xp(e);return n?{...n,kind:"issue"}:null}function l$(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}var xb=$(()=>{"use strict"});function $b(e){return A()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function qo(e){return $b(e)?.autoFix??""}function Zp(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let i=Object.hasOwn(t,o)?t[o]:null,s=Xp(i?.url)?{url:i.url,autoFix:Jp(i.autoFix)?i.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===s?.url&&a?.autoFix===s?.autoFix||(s?c.managedIssues.set(o,s):c.managedIssues.delete(o),r=!0)}return r}var bl=$(()=>{"use strict";q();xb()});function XK(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 Sb,GM=$(()=>{"use strict";xb();Sb=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=XK(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&&a$(t);if(!o)return null;let i=l$(o),s=this.entries.get(i)??null;return n&&!s&&(this.run?this.required.add(i):this.expires=0),this.expires<=this.now()&&this.schedule(),s}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 i of Array.isArray(r)?r:[]){let s=a$(i?.url);if(s&&typeof i.title=="string"&&["open","draft","closed","merged"].includes(i.status)){let a=s.kind==="issue"&&i.status==="closed"?VM(i.stateReason):null;this.entries.set(l$(s),{title:i.title,description:typeof i.description=="string"?i.description:null,status:i.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(i=>!this.entries.has(i));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}}});function qM(e){return _b.add(e),()=>_b.delete(e)}function c$(){Qp.reset();for(let e of _b)e()}function ad(e){c.currentManagedTeam===e&&c$()}function d$(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(i=>({id:i,issue:c.managedIssues.get(i)}));r.some(({id:i,issue:s})=>s?.url!==n.get(i)?.url)&&ad(e);for(let{id:i,issue:s}of r)s?.autoFix&&s.autoFix!==n.get(i)?.autoFix&&Qp.read(s.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:i})=>i?.url)?.issue.url;o&&Qp.read(o)}var _b,Qp,ef=$(()=>{"use strict";q();GM();xn();_b=new Set,Qp=new Sb({context:()=>{let e=c.managedSession;return A()&&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:YM,changed:()=>{for(let e of _b)e()}})});var tf,te,JM=$(()=>{Yr();Ea();tf=class extends Un{constructor(t){if(super(t),this.it=b,t.type!==An.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===b||t==null)return this._t=void 0,this.it=t;if(t===Tt)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let n=[t];return n.raw=n,this._t={_$litType$:this.constructor.resultType,strings:n,values:[]}}};tf.directiveName="unsafeHTML",tf.resultType=1;te=Er(tf)});var wt=$(()=>{JM()});var Cb,Yn,Ls,XM,ZM,Eb,ld,cd,dd,Rb,QM,br,Tb,eA,tA,jt=$(()=>{"use strict";Cb="m5.875 10.154 1.376-.772.023-.067-.023-.037h-.067l-.23-.015-.787-.02-.681-.03-.661-.035-.166-.035-.156-.205.016-.103.14-.094.2.018.442.03.665.046.481.028.714.075h.113l.016-.047-.039-.028-.03-.028-.687-.466-.744-.492-.39-.284-.21-.143-.106-.135-.046-.294.19-.21.258.017.065.018.26.2.557.43.726.535.106.089.042-.03.006-.022-.048-.08-.395-.713-.422-.726-.187-.301-.05-.18a1 1 0 0 1-.03-.213l.218-.296.12-.039.29.039.123.106.18.413.293.65.453.884.133.262.07.242.027.075h.046v-.043l.038-.497.069-.611.067-.787.023-.221.11-.266.218-.143.17.081.14.2-.02.13-.083.54-.163.846-.106.567h.062l.07-.07.287-.382.482-.602.213-.239.248-.264.159-.125h.301l.221.329-.099.34-.31.393-.256.333-.369.496-.23.397.021.032.055-.006.832-.177.45-.081.537-.092.243.113.026.115-.096.236-.573.141-.673.135-1.003.237-.012.01.014.017.452.042.193.01h.473l.88.066.23.153.138.186-.023.141-.354.181-.478-.113-1.116-.266-.383-.096h-.053v.032l.32.312.584.528.731.68.037.168-.094.133-.099-.014-.643-.484-.248-.218-.561-.472H9.08v.05l.129.189.684 1.027.035.315-.05.103-.177.062-.194-.036-.4-.561-.413-.632-.333-.567-.041.023-.197 2.116-.092.108-.212.082-.177-.135-.094-.218.094-.43.113-.561.092-.447.083-.554.05-.184-.004-.013-.04.006-.418.574-.636.858-.503.539-.12.048-.21-.108.02-.193.117-.172.696-.886.42-.549.27-.317-.001-.046h-.016l-1.85 1.201-.328.042-.142-.132.018-.218.067-.071.556-.383Z",Yn='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2 2 5v6l6 3 6-3V5L8 2Z"/><path d="M2 5l6 3 6-3"/><path d="M8 8v6"/></svg>',Ls='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="11" height="9" rx="1.2"/><path d="M6 4V3h4v1"/></svg>',XM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4.5 4.5 7 2-5 5z"/><circle cx="4.5" cy="4.5" r="2" fill="currentColor"/><circle cx="11.5" cy="6.5" r="2" fill="currentColor"/><circle cx="6.5" cy="11.5" r="2" fill="currentColor"/></svg>',ZM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="2.5" r="1.5" fill="currentColor"/><circle cx="3" cy="13" r="1.5" fill="currentColor"/><circle cx="8" cy="13" r="1.5" fill="currentColor"/><circle cx="13" cy="13" r="1.5" fill="currentColor"/><path d="M8 4v3M8 7H3m5 0h5M3 7v4M8 7v4M13 7v4"/></svg>',Eb='<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>',ld='<svg class="file-icon" 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="M6.67 8.67a3.33 3.33 0 0 0 5.03.36l2-2a3.33 3.33 0 0 0-4.71-4.71l-1.15 1.14"/><path d="M9.33 7.33a3.33 3.33 0 0 0-5.03-.36l-2 2a3.33 3.33 0 0 0 4.71 4.71l1.14-1.14"/></svg>',cd='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 1.5H2.5a1 1 0 0 0-1 1V5m9.5-3.5h2.5a1 1 0 0 1 1 1V5M1.5 11v2.5a1 1 0 0 0 1 1H5m6 0h2.5a1 1 0 0 0 1-1V11"/><circle cx="7.25" cy="7.25" r="2.75"/><path d="m9.25 9.25 2.25 2.25"/></svg>',dd='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 1.5H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V5.5L9 1.5ZM9 1.5v4h4M5.5 8h5m-5 3h3.5"/></svg>',Rb='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4.5 4.5-3 3.5 3 3.5m7-7 3 3.5-3 3.5M9.5 2l-3 12"/></svg>',QM='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6.5 3.5 1.6 3.9L12 9l-3.9 1.6-1.6 3.9-1.6-3.9L1 9l3.9-1.6 1.6-3.9ZM12 1.5v4m-2-2h4"/></svg>',br='<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path fill="currentColor" 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-.27s1.36.09 2 .27c1.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.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>',Tb='<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M1 8h3.5m7 0H15"/><circle cx="8" cy="8" r="3.5"/></svg>',eA='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m10 2 4 4-8 8H2v-4l8-8Zm-1 1 4 4"/></svg>',tA='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4h12M6 4V2h4v2M4 4l.6 10h6.8L12 4M6.5 7v4m3-4v4"/></svg>'});var nA,ZK,nf,Ft,Mb=$(()=>{"use strict";jt();nA={default:{className:"brand-deepview",mark:'<path class="fg" d="M7.843 6.719c-1.605 0-2.926 1.292-3.477 1.947.466.58 1.872 2.024 3.496 2.024s2.907-1.292 3.486-2.005c-.627-.703-1.88-1.966-3.505-1.966m.019 3.857c-1.51 0-2.802-1.263-3.353-1.9.55-.617 1.814-1.852 3.334-1.852 1.51 0 2.698 1.12 3.335 1.852-.533.618-1.787 1.9-3.316 1.9m-.019-3.42c-.826 0-1.577.694-1.577 1.596 0 .789.599 1.577 1.577 1.577.893 0 1.587-.684 1.587-1.577-.01-.779-.627-1.596-1.587-1.596m0 3.069a1.476 1.476 0 0 1-1.482-1.473c0-.722.599-1.491 1.482-1.491.846 0 1.482.693 1.492 1.491 0 .808-.618 1.473-1.492 1.473m.01-2.727c-.637 0-1.264.532-1.264 1.244 0 .627.475 1.235 1.245 1.245.684 0 1.254-.522 1.254-1.244 0-.58-.475-1.236-1.235-1.245m-.02 2.403a1.167 1.167 0 0 1-1.149-1.159c0-.532.456-1.14 1.169-1.149.56 0 1.149.427 1.159 1.15 0 .636-.485 1.158-1.179 1.158m-.769-1.833c-.19.238-.275.494-.237.864l.74.057zm1.026-.294c-.295-.057-.665 0-.912.228l.323.607zm.133.047-.38.56.988.114c-.057-.275-.323-.579-.608-.674m-.124.741.456.912c.21-.209.352-.484.314-.836zm-1.225.504a.97.97 0 0 0 .57.617l.399-.551zm.713.664c.313.076.636.01.845-.161l-.295-.618zm-.637 1.55c0 .028-.028.066-.066.066h-.59c-.028 0-.066-.028-.066-.066s.029-.066.067-.066h.579c.048 0 .076.028.076.066m.712 0c0 .028-.028.066-.066.066h-.437c-.028 0-.066-.028-.066-.066s.028-.066.066-.066h.437c.038 0 .066.028.066.066m.666 0c0 .028-.029.066-.067.066h-.37c-.029 0-.067-.028-.067-.066s.029-.066.067-.066h.37c.038 0 .067.028.067.066m-1.672.351c0 .029-.029.067-.067.067h-.295c-.028 0-.066-.028-.066-.066 0-.029.029-.067.067-.067h.294c.038 0 .066.028.066.066m.694 0c0 .029-.028.067-.066.067h-.409c-.028 0-.066-.028-.066-.066 0-.029.028-.067.066-.067h.399c.038 0 .076.028.076.066m.732 0c0 .029-.029.067-.067.067h-.465c-.029 0-.067-.028-.067-.066 0-.029.029-.067.067-.067h.465c.038 0 .067.028.067.066m-1.093.371a.065.065 0 0 1-.067.066h-.627c-.028 0-.075-.028-.066-.066 0-.028.029-.066.067-.066h.627c.038 0 .066.028.066.066m.684 0a.065.065 0 0 1-.066.066h-.39c-.028 0-.076-.028-.066-.066 0-.028.028-.066.066-.066h.39c.038 0 .066.028.066.066M5.088 6.263c-.019-.105-.114-.19-.237-.19s-.257.104-.257.237.105.238.247.238c.105 0 .218-.076.238-.18h.864v.826l.095-.048V6.31c0-.028-.019-.057-.048-.057h-.902zm-.237.19c-.076 0-.143-.066-.143-.143s.066-.142.143-.142.142.066.142.143c.01.076-.066.142-.143.142m2.89-.323H6.38l.418-.475v-.332a.255.255 0 0 0 .218-.248c0-.123-.114-.256-.256-.256s-.266.114-.266.257c0 .123.095.228.209.247v.284l-.456.523v.893l.095-.047v-.742h1.396c.029 0 .067-.009.067-.057 0-.028-.019-.047-.067-.047m-1.13-1.054c0-.076.066-.152.152-.152s.152.066.152.151c0 .076-.066.152-.152.152s-.152-.066-.152-.152m-.836 5.264h-.874c-.019-.105-.114-.219-.247-.219s-.256.105-.256.257c0 .132.114.275.266.275.104 0 .218-.076.237-.19h.827v.608l-.257.285a.3.3 0 0 0-.095-.019c-.133 0-.256.105-.256.228 0 .133.104.238.237.238.124 0 .247-.105.247-.238a.23.23 0 0 0-.057-.152l.285-.304v-.712c0-.029-.019-.058-.057-.058m-1.121.219a.16.16 0 0 1-.152-.161c0-.077.066-.162.152-.162s.152.066.152.152-.066.171-.152.171m.713 1.14c-.076 0-.143-.066-.143-.143s.066-.133.143-.133.142.067.142.143c0 .066-.066.133-.143.133m5.472-1.377a.24.24 0 0 0-.237.208h-1.13c-.029 0-.038.02-.038.048v.712l-.323.39h-.029a.245.245 0 0 0-.247.247c0 .133.114.256.247.256s.247-.113.247-.256a.26.26 0 0 0-.123-.219l.313-.38v-.674h1.083c.019.105.114.2.238.2.133 0 .266-.105.266-.257 0-.133-.105-.276-.266-.276m-1.758 1.767a.15.15 0 0 1-.143-.152c0-.075.067-.142.143-.142s.152.066.152.143a.15.15 0 0 1-.152.151m1.758-1.33a.15.15 0 0 1-.143-.152.147.147 0 0 1 .294.001.15.15 0 0 1-.152.151M8.917 5.55h-.399a.075.075 0 0 1-.076-.076c0-.028.029-.066.067-.066h.418c.028 0 .066.028.066.066s-.038.076-.076.076m.742 0H9.22c-.038 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.437c.038 0 .066.028.066.066s-.028.076-.066.076m.883 0h-.598c-.029 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.598c.028 0 .066.028.066.066s-.028.076-.066.076m-1.282.4h-.741c-.038 0-.076-.029-.076-.067s.028-.076.066-.076h.75c.039 0 .067.038.067.076 0 .029-.028.067-.066.067m.797 0h-.503c-.038 0-.076-.029-.076-.067s.028-.066.066-.066h.513c.038 0 .067.028.067.066 0 .029-.029.067-.067.067m.476 0h-.19c-.039 0-.067-.029-.067-.067s.028-.066.066-.066h.2c.028 0 .066.028.066.066 0 .029-.028.067-.075.067m-1.682.398h-.332c-.039 0-.077-.028-.077-.066s.029-.066.067-.066h.342c.038 0 .076.028.076.066s-.028.066-.076.066m.789 0h-.494c-.038 0-.067-.028-.067-.066s.029-.066.067-.066h.494c.038 0 .066.028.066.066s-.028.066-.066.066m.893 0h-.599c-.038 0-.076-.028-.076-.066s.028-.066.066-.066h.618c.028 0 .066.028.066.066s-.028.066-.076.066m.418.305a.69.69 0 0 0-.674.712c0 .086.019.18.048.257l.085.066c-.028-.085-.057-.171-.057-.304 0-.285.228-.646.598-.646.295 0 .599.228.599.636a.58.58 0 0 1-.599.59.8.8 0 0 1-.237-.048l.123.114a.4.4 0 0 0 .114.01c.39 0 .684-.276.684-.666 0-.313-.266-.712-.684-.722m.353.552-.019-.01-.161.19-.143-.01-.057-.047-.019-.133.19-.2a.28.28 0 0 0-.361.077c-.076.095-.076.209-.038.351l-.247.304.171.152.266-.266c.142.038.285.019.38-.095a.31.31 0 0 0 .038-.313"/>'},"claude-security":{className:"brand-claude",mark:`<path class="fg" d="${Cb}"/>`},"codex-security":{className:"brand-codex",mark:'<path class="fg" d="M11.04 8.364a1.72 1.72 0 0 0-.152-1.432 1.8 1.8 0 0 0-1.925-.846 1.8 1.8 0 0 0-.778-.498 1.8 1.8 0 0 0-.927-.05 1.8 1.8 0 0 0-.827.414 1.77 1.77 0 0 0-.507.767 1.8 1.8 0 0 0-.683.297 1.75 1.75 0 0 0-.499.549 1.75 1.75 0 0 0 .22 2.07 1.72 1.72 0 0 0 .151 1.432 1.8 1.8 0 0 0 1.926.846 1.77 1.77 0 0 0 1.333.587c.78 0 1.47-.496 1.707-1.227a1.8 1.8 0 0 0 .684-.298 1.75 1.75 0 0 0 .499-.548 1.75 1.75 0 0 0-.222-2.063m-2.667 3.678a1.33 1.33 0 0 1-.851-.304l.042-.024 1.413-.804a.23.23 0 0 0 .116-.199V8.747l.597.34q.01.005.011.015v1.629a1.323 1.323 0 0 1-1.328 1.31m-2.857-1.203a1.3 1.3 0 0 1-.158-.879l.042.025 1.414.805a.23.23 0 0 0 .23 0l1.729-.982v.68a.02.02 0 0 1-.01.018l-1.431.814a1.34 1.34 0 0 1-1.816-.48m-.372-3.037a1.32 1.32 0 0 1 .7-.574v1.656a.22.22 0 0 0 .114.197l1.72.979-.598.34a.02.02 0 0 1-.021 0L5.63 9.587a1.304 1.304 0 0 1-.487-1.791zm4.907 1.125L8.327 7.94l.596-.34a.02.02 0 0 1 .02 0l1.43.814a1.3 1.3 0 0 1 .512.528 1.3 1.3 0 0 1-.118 1.4 1.33 1.33 0 0 1-.595.436V9.122a.23.23 0 0 0-.12-.195m.594-.881-.042-.025-1.411-.812a.23.23 0 0 0-.232 0l-1.727.983v-.68a.02.02 0 0 1 .008-.018l1.429-.813a1.34 1.34 0 0 1 1.425.061 1.3 1.3 0 0 1 .55 1.298zM6.908 9.252l-.597-.34a.02.02 0 0 1-.012-.016V7.271c0-.249.073-.493.209-.703s.329-.378.557-.483a1.35 1.35 0 0 1 1.415.18l-.042.023-1.413.804a.23.23 0 0 0-.116.2zm.324-.69.77-.438.77.438v.875l-.768.437-.77-.437z"/>'},deepsec:{className:"brand-vercel",mark:'<path class="fg" d="m8 5.97 3.5 6.062h-7Z"/>'},"markdown-generic":{className:"brand-markdown",mark:'<path class="fg" d="M4 7h1.2l1.2 1.5L7.6 7h1.2v4H7.6V8.8L6.4 10 5.2 8.8V11H4zm5.6 0h1.2v2.3H12l-1.8 1.8-1.8-1.8h1.2Z"/>'},piolium:{className:"brand-piolium",mark:'<path class="fg" d="M8 6.4 5.6 7.2v2.3c0 1.6 1 2.7 2.4 3.3 1.4-.6 2.4-1.7 2.4-3.3V7.2Z"/>'}},ZK={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"],"markdown-generic":["#374151","#fff"]},nf=Object.fromEntries(Object.entries(nA).map(([e,{className:t,mark:n}])=>{let[r,o]=ZK[e],i=e==="codex-security"||e==="deepsec"?` stroke="${o}" stroke-width=".5"`:"";return[e,`<svg class="file-icon ${t}" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path class="bg" fill="${r}"${i} d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/><g fill="${o}">${n}</g></svg>`]})),Ft=Object.fromEntries(Object.entries(nA).map(([e,{className:t,mark:n}])=>[e,`<span class="report-logo ${t}" aria-hidden="true"><svg viewBox="${e==="default"?"3.5 4 9 9":"4 5 8 8"}" width="14" height="14">${n}</svg></span>`]))});function Ne(e){let t=e.toLowerCase();if(t.endsWith(".generic-md")){let n=e.slice(0,-11);try{return decodeURIComponent(n)}catch{return n}}return t.endsWith(".codex")?e.slice(0,-6).replaceAll("__","/"):e}var u$=$(()=>{"use strict"});function eG(e){return e!=="default"&&Object.hasOwn(Ft,e)?e:null}function Ab(e){return eG(e._source??e.source)}function Bt(e){return p$(e,Lt(e))}function p$(e,t){if(t===vt)return vt;if(t!==void 0)return QK.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 Ib(e){return Lt(e)===vt}var Ze,QK,ud,uo=$(()=>{"use strict";q();Mb();Mb();Le();jt();u$();Ze={...nf,[vt]:ld},QK=new Set(Object.keys(nn)),ud={...nn,default:"DeepView"}});function rf(e=document){if(e.querySelector(":modal"))return!0;for(let t of e.querySelectorAll("*"))if(t.shadowRoot&&rf(t.shadowRoot))return!0;return!1}var f$=$(()=>{"use strict"});function yl(e){return typeof e=="string"&&/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(e)?e:null}var of=$(()=>{"use strict"});function tG(){return Nr||(Nr=document.createElement("div"),Nr.id="styled-tooltip",Nr.setAttribute("popover","manual"),document.body.append(Nr),Nr)}function nG(e){typeof e.showPopover=="function"&&(e.matches(":popover-open")&&e.hidePopover(),e.showPopover())}function h$(e,{placement:t="cursor"}={}){t=e.dataset.tooltipPlacement??t;let n=tG(),r=e.dataset.tooltip??"",o=e.dataset.tooltipRepo??"",i=yl(e.dataset.tooltipCommit),s=["stasis","sourcemap"].includes(e.dataset.tooltipBundle)?e.dataset.tooltipBundle:"",a=e.dataset.tooltipStats??"",l=e.dataset.tooltipBuilt==="true",d=e.dataset.tooltipPackage??"",u=e.dataset.tooltipEcosystem??"",f=e.dataset.tooltipVersion??"",h=e.dataset.tooltipFiles??"",m=JSON.stringify([r,o,i,s,a,l,d,u,f,h]);if(!r||Fs===e&&rA===m)return;if(n.textContent=r,d){let _=document.createElement("div");_.className="tooltip-package";let E=(e.querySelector("[data-tooltip-package-icon] svg")??e.querySelector("svg"))?.cloneNode(!0);E&&_.append(E);let O=document.createElement("span");O.className="tooltip-package-details";for(let z of[d,f,/^\d+$/u.test(h)?`${h} ${h==="1"?"file":"files"}`:""].filter(Boolean)){let T=document.createElement("span");T.textContent=z,O.append(T)}_.append(O),n.append(_)}if(o||i){let _=document.createElement("div");if(_.className="tooltip-repo",o){_.innerHTML=br;let E=document.createElement("span");E.textContent=o,_.append(E)}if(i){let E=document.createElement("span");E.className="tooltip-commit",E.innerHTML=Tb;let O=document.createElement("span");O.textContent=i.slice(0,7),E.append(O),_.append(E)}n.append(_)}if(s||a||l){let _=document.createElement("div");if(_.className="tooltip-bundle",s==="stasis"){let z=document.createElement("img");z.src="./stasis.svg",z.alt="",_.append(z)}else _.innerHTML=Yn;let E=document.createElement("span"),O=s==="stasis"?"Stasis":s==="sourcemap"?"Sourcemap":"";E.textContent=[O,l?"Built on server":"",a].filter(Boolean).join(" \xB7 "),_.append(E),n.append(_)}nG(n),n.style.left="0px",n.style.top="0px",n.style.transform="none",n.classList.add("visible");let g=aA,y=lA+oG;if(t==="right"||t==="right-start"){let _=e.getBoundingClientRect();g=_.right+iG,y=_.top+(t==="right"?_.height/2:0)}let w=window.innerWidth-n.offsetWidth-Lb,x=Math.max(Lb,Math.min(g,w));n.style.left=`${Math.round(x)}px`;let v=n.offsetHeight,k=t==="right"?y-v/2:y,S=window.innerHeight-v-Lb,C=Math.max(Lb,Math.min(k,S));n.style.top=`${Math.round(C)}px`,Fs=e,rA=m}function Bs(){clearTimeout(sf),sf=null,Nr&&(Nr.classList.remove("visible"),typeof Nr.hidePopover=="function"&&Nr.matches(":popover-open")&&Nr.hidePopover()),Fs=null}function cA(e,{gate:t,placement:n}={}){Object.hasOwn(e.dataset,"tooltipTruncated")&&e.scrollWidth<=e.clientWidth&&e.scrollHeight<=e.clientHeight||t&&!t(e)||(clearTimeout(sf),sf=setTimeout(()=>{h$(e,{placement:n})},rG))}function iA(e,t){for(let n of e.composedPath()){if(n===t)break;if(n.nodeType===1&&Object.hasOwn(n.dataset,"tooltip"))return n}return null}function Jn(e,t){!e||oA.has(e)||(oA.add(e),e.addEventListener("mouseover",n=>{let r=iA(n,e);if(!r){Bs();return}r!==Fs&&cA(r,t)}),e.addEventListener("mouseout",n=>{let r=iA(n,e),o=n.relatedTarget?.closest?.("[data-tooltip]")??null;r&&r===o||Bs()}))}function dA(){sA||(sA=!0,document.addEventListener("tooltip-root-connected",e=>{Jn(e.composedPath()[0]?.shadowRoot)}),document.body.addEventListener("mouseover",e=>{if(e.target.closest("[data-tooltip-managed]"))return;let t=e.target.closest("[data-tooltip]");!t||t===Fs||(Bs(),cA(t))}),document.body.addEventListener("mouseout",e=>{e.target.closest("[data-tooltip-managed]")||e.relatedTarget?.closest?.("[data-tooltip-managed]")||!Fs&&!sf||Fs&&Fs.contains(e.relatedTarget)||Bs()}))}var Nr,Fs,rA,sf,aA,lA,rG,oG,iG,Lb,oA,sA,Os=$(()=>{"use strict";jt();of();Fs=null,rA="",sf=null,aA=0,lA=0;document.addEventListener("mousemove",e=>{aA=e.clientX,lA=e.clientY},{passive:!0});rG=100,oG=14,iG=8,Lb=8;oA=new WeakSet;sA=!1});var pA,uA=$(()=>{pA=`a{cursor:default}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}button,summary,select,label,legend,header h3,.section-title,.ui-hint,.hint,.note,.lwd-note,.lwd-empty,.empty:not(.error,[role=alert]),.empty-discussion,.history-state[role=status],.history-summary{cursor:default;user-select:none;-webkit-user-select:none}input:not([type=checkbox],[type=radio]),textarea,[contenteditable],pre,code,.mono{cursor:text;user-select:text;-webkit-user-select:text}dialog{margin-top:5rem;margin-inline:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--surface);color:var(--text);padding:1.1rem 1.25rem 1rem;max-width:480px;width:min(94vw,480px);box-shadow:0 20px 60px #00000059;&::backdrop{background:rgb(from var(--theme-bar) r g b / .55);backdrop-filter:blur(2px)}}header h3{margin:0 0 .6rem;font-size:1rem;font-weight:600}.nwd-input{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:.88rem;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}.nwd-note{margin:.55rem 0 0;color:var(--muted);font-size:.74rem;line-height:1.45}.nwd-intro{margin:0 0 .8rem;color:var(--muted);font-size:.82rem;line-height:1.5}.nwd-actions{display:flex;align-items:center;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.nwd-spacer{flex:1}.nwd-actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent);&:hover:not(:disabled){color:var(--surface);filter:brightness(1.08)}}&.quiet{border-color:transparent;color:var(--muted);&:hover:not(:disabled){border-color:transparent}}&.danger{color:var(--critical, #f87171);border-color:var(--border);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--critical, #f87171)}}&:disabled{opacity:.5}}@media(display-mode:window-controls-overlay){dialog{-webkit-app-region:no-drag;app-region:no-drag}}
|
|
103
|
+
`});function ge(e,t={}){return new Promise(n=>{let r=document.createElement(e);Object.assign(r,t),r.addEventListener("resolve",o=>{r.remove(),n(o.detail)}),document.body.append(r)})}function Ps(e,t,n){return new Promise((r,o)=>{let i=document.createElement(e);Object.assign(i,t),i.exclusive=!0,i.addEventListener("resolve",s=>{i.remove(),r(s.detail)}),i.addEventListener("modal-conflict",s=>{n(i),i.remove(),o(oc(s.detail?.cause))}),document.body.append(i)})}var H,Ee=$(()=>{"use strict";P();nr();f$();Os();uA();H=class extends he{static styles=[N(pA)];exclusive=!1;firstUpdated(){Jn(this.renderRoot),this.beforeOpen();let t=this.renderRoot.querySelector("dialog");if(t){if(this.exclusive&&rf()){this._conflict(new DOMException("Another modal dialog is already open","InvalidStateError"));return}try{t.showModal()}catch(n){this._conflict(n);return}this.focusInitial()}}_conflict(t){this._settled=!0,this.dispatchEvent(new CustomEvent("modal-conflict",{detail:{cause:t}}))}beforeOpen(){}focusInitial(){(this.renderRoot.querySelector("input, textarea")??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector("button"))?.focus()}_finish(t){this._settled||(this._settled=!0,this.renderRoot.querySelector("dialog")?.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t})))}_onClose=()=>this._finish(null);_onBackdrop=t=>{if(t.target!==t.currentTarget)return;let{left:n,right:r,top:o,bottom:i}=t.currentTarget.getBoundingClientRect();(t.clientX<n||t.clientX>r||t.clientY<o||t.clientY>i)&&this._onClose()}}});var Dr,vl=$(()=>{Dr=`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)}}
|
|
104
104
|
`});function Fb({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return Ps("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var m$,g$=$(()=>{"use strict";P();Ee();vl();m$=class extends H{static styles=[...H.styles,N(Dr)];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 p`<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?p`<p class="wsl-error" role="alert">${this._error}</p>`:b}<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",m$)});var fA,hA,af,mA,gA,upe,ppe,fpe,hpe,mpe,b$=$(()=>{"use strict";fA=globalThis[Symbol.for("@rray/frontend")];if(!fA)throw new Error("@rray/frontend global not installed; view.js must run before lazy bundles import this wrapper");({LitElement:hA,html:af,nothing:mA,unsafeCSS:gA,render:upe,StateElement:ppe,classMap:fpe,repeat:hpe,styleMap:mpe}=fA)});function Ns(e,t=!1){pd=e!==!1&&!t}function cf(){return pd}function yr(e){return pd?et(e):""}function EA(e){return et(e)!==""}function df(e){let t=et(e);return t!==""&&t!=="revalidation"}function Bb(e){return e.some(t=>(t.groups??[]).some(n=>n.some(df)))}function k$(e){let t=yr(e);return t&&t!=="revalidation"?t:null}function uf(e){return yr(e)==="revalidation"}function wl(e){return RA.has(yr(e))}function TA(e){return RA.has(yr(e))}function Pb(e){return Ob.find(t=>t.value===e)?.kinds??null}function pf(e,t){let n=Pb(e);return n?.includes("partial")?t==="only"?["partial"]:t==="exclude"?["confirmed"]:n:n}function MA(e){let t=new Set(e);return Ob.filter(n=>n.kinds.some(r=>t.has(r)))}function Db(e){return new RegExp(`(^|/)${e}/`,"u")}function AA(e){return new RegExp(`^(?:.*/)?${e}/(?:@[^/]+/[^/]+|[^/]+)/(.*)$`,"u")}function dG(e){e!==lf&&(lf=e,x$=Db(e),IA=AA(e))}function zb(e){dG(To(e))}function Yo(){return lf}function Sn(e){return x$.test(e)}function Ub(e){let t=!1;for(let n of e??[])for(let r of n.groups??[])for(let o of r){if(o.isApp!==!1)continue;let i=y$.has(o);"isUpstream"in o&&!i||(Sn(o.file)?(o.isUpstream!==!0&&(t=!0),o.isUpstream=!0,y$.add(o)):i&&(t=!0,delete o.isUpstream,y$.delete(o)))}return t}function bA(e){let t=typeof e=="string"?e:"";return lG.test(t)||cG.test(t)||x$.test(t)}function yA(e){return uG.exec(typeof e=="string"?e:"")?.[1]??null}function qe(e){return typeof e!="number"||!Number.isFinite(e)?null:`${e.toLocaleString()} B`}function Ur(e){if(e.length<=1)return{prefix:"",stripped:[...e]};let t=e.map(s=>s.split("/")),n=Math.min(...t.map(s=>s.length)),r=0;for(let s=0;s<n-1&&t.every(a=>a[s]===t[0][s]);s++)r=s+1;if(r>0&&t[0][r-1].startsWith("@")&&r--,r>0&&t[0][r-1]==="node_modules"&&r--,r===0)return{prefix:"",stripped:[...e]};let o=`${t[0].slice(0,r).join("/")}/`,i=t.map(s=>s.slice(r).join("/"));return{prefix:o,stripped:i}}function pG(e){return e.match(IA)?.[1]??e}function LA(e){let t=pd?[k$(e),e.revalidateVerdict,e.revalidateRecommendation]:[];return[e.file,e.title,e.description,e.impact,e.reproduction,hf(e),e.recommendation,e.confidenceReason,...t,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
|
|
105
105
|
`).toLowerCase()}function kl(e){return[typeof e?.category=="string"?e.category.trim():"",Su(e,pd)].filter(Boolean).join(" \xB7 ")}function ff(e){if(e.length===0)return"";let t=e[0];for(let n=1;n<e.length;n++){for(;t&&!e[n].startsWith(t);)t=t.slice(0,-1);if(!t)return""}return t}function Ct(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}function FA(e){if(!e)return null;let t=e.trim().replace(/\/$/u,"");return t?/^https?:\/\//iu.test(t)?t:/^github\.com\//iu.test(t)?`https://${t}`:`https://github.com/${t}`:null}function hG(e){return fG.test(e||"")}function vA(e){if(e==null||typeof e=="string")return{id:e??"",prefix:""};let t=Tr(e);return{id:typeof e.github=="string"?e.github:"",prefix:t?`${t}/`:""}}function mG(e,t,n){if(hG(e))return null;let r=vA(t);if(r.id)return`https://github.com/${r.id}/blob/HEAD/${r.prefix}${pG(e)}`;if(Sn(e))return null;let o=vA(n),i=FA(o.id);return i?`${i}/blob/HEAD/${o.prefix}${e}`:null}function $$(e,t){let n=e?.file??"",r=zr(e,t);return r?af`<a href="${gG(r)}" target="_blank" rel="noopener">${n}</a>`:n}function gG(e){return e.replace(/#L\d+(?:-L?\d+)?$/u,"")}function zr(e,t){if(!e)return null;if(dt(e.location))return e.location;let n=mG(e.file,e.repo,t);if(!n)return null;let r=parseInt(e.line,10);return Number.isFinite(r)?`${n}#L${r}`:n}function BA(e){let t=typeof e=="string"?bG.exec(e):null;if(!t)return"";let n=t[2],r=yG.exec(n);if(!r)return`${t[1]}/${n}`;n=n.slice(0,r.index);let o=r[2]?`${r[1]}-${r[2]}`:r[1];return`${t[1]}/${n}:${o}`}function OA(e){return e.split(/(\n{2,})/u).map(t=>{if(/^\n+$/u.test(t))return t;let n=t.split(`
|
|
106
106
|
`);return n.some(r=>vG.test(r))?t:n.map(r=>r.trim()).filter(Boolean).join(" ")}).join("")}function wA(e,t,n){let r=t?/^\n*/u.exec(e)[0]:"",o=e.slice(r.length),i=n?/\n*$/u.exec(o)[0]:"";return r+OA(o.slice(0,o.length-i.length))+i}function Ds(e){if(!e)return e;let t=fn(e);if(t.length===0)return OA(e);let n=[],r=0;for(let[o,i]of t)o>r&&n.push(wA(e.slice(r,o),r>0,!0)),n.push(e.slice(o,i)),r=i;return r<e.length&&n.push(wA(e.slice(r),!0,!1)),n.join("")}function PA(e,t){let n=0;for(;n<t&&e[n]===" ";)n++;return e.slice(n)}function kG(e){let t=e.split(`
|
|
@@ -133,7 +133,7 @@ ${f}`)}return i.join(`
|
|
|
133
133
|
`)[0]||s}</h4>${a.file?p`<p class="location">${a.file}${a.line?`:${a.line}`:""}</p>`:b}<p class="finding-id"><code>${s}</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(d=>p`<tr class="${d.kind}"><th scope="row">${YG[d.property]}<span class="difference-kind">${aI[d.kind]}</span></th><td class="${d.kind==="managed-only"?"":"highlight"}">${lI(d.property,d.local)}</td><td class="${d.kind==="local-only"?"":"highlight"}">${lI(d.property,d.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?p`<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>`:b}</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",E$);cI=e=>ge("triage-comparison-dialog",e)});function Yb(){let e=new Set;if(c.currentWorkspace||!ok())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 i of o)i.id!=null&&n.add(String(i.id));for(let r of n)fr(r).some(o=>!n.has(o)&&el(o).some(i=>i!==t))&&e.add(r);return e}var R$=$(()=>{"use strict";q()});function yf(e){return La(e.model)||null}function M$(e){let t=Qo();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===js?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=yf(e),r=t.filterModel===Hs?null:t.filterModel;if(n!==r)return!1}return!0}function A$(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 fI(e){let t=new Set;for(let n of e)for(let r of n)t.add(A$(r));return t}function md(){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"}function hI(){let e={};for(let t of XG){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}function vf(e){I$=e}function wf(){I$=null}function Qo(){return I$??c}function bf(e){if(e.confidence!==void 0)return e.confidence;if(e.critical===!0||e._source)return 10}function L$(e){return e.every(t=>t.every(n=>bf(n)!==void 0))&&e.some(t=>t.some(ZG))}function mI(e,t,n=yr){return e.some(r=>{let o=["refuted","unreachable"].includes(n(r))?0:bf(r);return o===void 0?t===0:o>=t})}function Jb(e,t=jr){let n=e.map(t).filter(i=>i.length>0);if(!n.some(i=>i.some(s=>bf(s)!==void 0)))return 0;let r=i=>n.reduce((s,a)=>s+(a.some(l=>(bf(l)??-1)>=i)?1:0),0),o;for(r(6)<=25?o=6:r(7)<=25?o=7:o=8;o>0&&r(o-1)===r(o);)o--;return o}function gI(e){return yr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function bI(e){let t=pf("confirmed","");return e.some(n=>t.includes(gI(n)))}function yI(e,t){return L$(e)?t:0}function vI(e,t=jr,n=yr){let r=new Set(e.ruledOutIds??[]);for(let o of e)for(let i of o)["refuted","unreachable"].includes(n(i))&&r.add(le(i));for(let o of e){let i=t(o);if(i.length!==0&&i.some(s=>pf("confirmed","").includes(n(s)||(s._source&&!s._sourcePass?"revalidation":"")))){for(let s of o)if(r.add(le(s)),s.isApp&&Array.isArray(s.revalidateInputs))for(let a of s.revalidateInputs)a&&r.add(a)}}return r}function wI(e,t,n,r=yr){let o=yI(e,t),i=e.filter(a=>mI(a,o,r));if(i.length===0)return!1;let s=new Set(pf("confirmed",""));return e.some(a=>a.some(l=>s.has(r(l))))?i.every(a=>a.every(l=>n.has(le(l)))):!1}function F$(e,t){let n=e.map(jr).filter(r=>r.length>0);return wI(n,t,vI(e))?"confirmed":""}function Xb(e){return c.showRevalidation===!1||c.upstreamOnly||Oi()?!1:B$(e)}function B$(e,{tabs:t=jr,kindOf:n=yr,severityMode:r=c.severityMode}={}){let o=e.map(t).filter(a=>a.length>0),i=vI(e,t,n);if(!wI(o,Jb(e,t),i,n))return!1;let s=yI(o,6);return o.every(a=>!mI(a,s,n)||!a.some(l=>Me(l,r)!=="low")||a.every(l=>i.has(le(l))))}function Sl(e,{resetSort:t=!0}={}){c.filterConfMin=Jb(e),c.filterConfMax=10,c.filterRevalidate=F$(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=O$(e)?"priority-desc":"severity")}function O$(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(kI(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&&wl(o))})}function kI(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(wl)?0:void 0}function xI(e){let t=Qo();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Sn(e.file)||!n&&!Sn(e.file))return!1}if(t.filterRevalidate){let n=pf(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(gI(e)))return!1}if(!t.filterRevalidate){let n=TA(e)?0:bf(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 QG(e){if(!xI(e))return!1;let t=Qo(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(Me(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=Ye(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!M$(e))return!1;if(t.filterRepo){let r=A$(e),o=t.filterRepo===$l?null:t.filterRepo;if(r!==o)return!1}if(n){let r=Ye(e),o=LA(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(i=>i.length>=6&&e.id?.toLowerCase().includes(i));return t.filterIncludeNegate?!o:o}return!0}function eq(e){let t=Qo();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(Ye(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=>!!(Ye(o)?.fix||qo(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 tq(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!ms(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function $I(){return c.showRevalidation!==!1&&!c.upstreamOnly}function P$(e){if($I())return!1;let t=jr(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let i=A$(o);i&&n.add(i);let s=tq(o);s&&r.add(s)}return n.size>1||r.size>1}function N$(e){if(!$I()||jr(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function T$(e){return e.some(t=>t.isSecurity===!0)}function SI(e){return e.some(T$)&&e.some(t=>!T$(t))}function _I(e){return e.filter(t=>t.some(xI)).map(jr)}function Ws(e){let t=!c.currentWorkspace&&Qo().filterDuplicates,n=t?Yb():null,r=Qo().filterCrossContext,o=Qo().filterAppStacked,i=Qo().filterSecurity;return e.filter(s=>s.some(QG)&&eq(s)&&(!t||t==="with"===s.some(a=>n.has(le(a))))&&(!r||r==="with"===P$(s))&&(!o||o==="with"===N$(s))&&(!i||i==="with"===T$(s)))}function uI(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let i=r[e]??n,s=o[e]??n;return(t==="desc"?s-i:i-s)||r.file.localeCompare(o.file)}}function CI(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,i=r.confidence===void 0&&r.critical===!0,s=n.confidence??(o?10:t),a=r.confidence??(i?10:t);return(e==="desc"?a-s:s-a)||(o===i?0:o?-1:1)||n.file.localeCompare(r.file)}}function Zb(e){let t=nq[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:kI(o),g:o})).toSorted((o,i)=>{let s=o.p??r,a=i.p??r;return(n==="desc"?a-s:s-a)||Bi(o.g).file.localeCompare(Bi(i.g).file)}).map(o=>o.g)}return e.map(n=>({p:Bi(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var js,$l,Hs,XG,I$,ZG,pI,nq,po=$(()=>{"use strict";bl();q();Fe();Ht();R$();js="\0",$l="",Hs="";XG=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];I$=null;ZG=e=>e.confidence!==void 0||e.critical===!0;pI=CI("desc"),nq={severity:(e,t)=>(bt[Me(t,c.severityMode)]||0)-(bt[Me(e,c.severityMode)]||0)||pI(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":pI,"confidence-asc":CI("asc"),"priority-desc":uI("priority","desc"),"priority-asc":uI("priority","asc")}});function EI(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function RI(e,t,n){let r=EI(t);if(!e._revalidationCopies){let o=EI(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 TI(e){let t=new Map,n=new Set(Ia);for(let{reportName:r,fields:o}of e)for(let[i,s]of Object.entries(o)){if(s==null)continue;let a=i==="revalidate"?et(o)||String(s).trim().toLowerCase():String(s).trim();if(i==="revalidate"&&!a||i==="revalidate"&&!n.has(a))continue;t.has(i)||t.set(i,new Map);let l=t.get(i);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(([i,s])=>({value:i,reports:[...s]}))}))}var D$=$(()=>{"use strict";Le()});function MI(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||rq.has(r)||o==null)continue;if(r==="revalidate"){let s=et(t);if(!s)continue;let a=et(e);a?a!==s&&(n=!0):e[r]=o;continue}let i=e[r];if(i==null){e[r]=o;continue}r.startsWith("revalidate")&&String(i).trim()!==String(o).trim()&&(n=!0)}return n}function z$(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:Rr(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:Rr(t),reason:t.correctedSeverityReason});let o=RI(e,t,n);(MI(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}var rq,U$=$(()=>{"use strict";Le();D$();Fe();rq=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"])});function kf(e,t=null){let n=t??e.filter(u=>u.isApp),r=e.filter(u=>!u.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(u=>u.isApp))return[e];if(r.some(u=>typeof u.id!="string"||!u.id))return[e];let o=new Set(r.map(u=>u.id)),i=new Map,s=new Set;for(let u of n){let f=u.revalidateInputs===void 0?[]:u.revalidateInputs;if(!Array.isArray(f))return[e];for(let h of f){if(!o.has(h))return[e];s.add(h)}i.set(u,f)}if(s.size!==o.size)return[e];let a=new Map([...o].map(u=>[u,u])),l=u=>{let f=u;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(u)!==f;){let h=a.get(u);a.set(u,f),u=h}return f};for(let u of i.values()){if(u.length===0)continue;let f=l(u[0]);for(let h of u)a.set(l(h),f)}let d=new Map;for(let u of e){let f=i.get(u),h=f?f.length>0?l(f[0]):u:l(u.id);d.has(h)||d.set(h,[]),d.get(h).push(u)}return d.size===1?[e]:[...d.values()]}var j$=$(()=>{"use strict"});function Qb(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let i=[],s=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let x of w.groups){for(let S of x)S.id&&["refuted","unreachable"].includes(et(S))&&s.add(S.id);let v=n?x.filter(S=>S.isUpstream&&et(S)!=="revalidation").map(AI):t?r?x.filter(S=>!["refuted","unreachable"].includes(et(S))):x:x.filter(S=>et(S)!=="revalidation").map(AI),k=v.length===x.length&&v.every((S,C)=>S===x[C])?x:v;k.length>0&&i.push({group:k,sourceGroup:x,reportIndex:y,reportName:w.fileName??"",hasApp:k.some(S=>S.isApp)})}}let a=i.map((y,w)=>w),l=i.map(y=>y.hasApp),d=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let x=a[y];a[y]=w,y=x}return w},u=(y,w)=>{y=d(y),w=d(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<i.length;y++)for(let w of i[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,x=y.find(v=>v.app);for(let{index:v}of y){x&&u(x.index,v);let k=i[v].reportIndex;w.has(k)?u(w.get(k),v):w.set(k,v)}}for(let y of f.values()){let w=null;for(let{index:x}of y)l[d(x)]||(w===null?w=x:u(w,x))}for(let y of o){let w=null;for(let x of y)for(let{index:v}of f.get(x)??[])w===null?w=v:u(w,v)}let h=new Map;for(let y=0;y<i.length;y++){let w=d(y);h.has(w)||h.set(w,[]),h.get(w).push(i[y])}let m=new Map,g=[];for(let y of h.values()){let w=y[0].group,x=w.map(E=>E.id).filter(Boolean);if(y.length===1&&new Set(x).size===x.length&&o.length===0){let E=e.length>1&&w.find(O=>O.isApp);if(E){let O=[...w];O.workspaceKey=E.id??String(E._id),g.push(...H$(y,O,t,n))}else g.push(...H$(y,w,t,n));continue}let v=new Map,k=new Map,S=[];for(let{group:E,reportName:O}of y)for(let z of E)if(z.id&&k.has(z.id))z$(k.get(z.id),z,O,v);else{let T={...z,_reportName:z._reportName??O};z.id&&k.set(z.id,T),S.push(T)}let C=new Set;for(let E of o)for(let O of E)k.has(O)&&C.add(O);for(let{group:E}of y)if(E.length>1)for(let O of E)O.id&&C.add(O.id);let _=[...C].map(E=>k.get(E));for(let E of S)C.has(E.id)||_.push(E);if(e.length>1){let E=_.find(O=>O.isApp);E&&(_.workspaceKey=E.id??String(E._id))}g.push(...H$(y,_,t,n));for(let[E,O]of v){let z=m.get(E);m.set(E,z?{finding:z.finding,copies:[...z.copies,...O.copies]}:O)}}return Object.defineProperty(g,"ruledOutIds",{value:s,configurable:!0}),{groups:g,conflicts:m}}function H$(e,t,n,r){if(n)return[t];if(r){let i=e.flatMap(u=>u.sourceGroup),s=kf(i);if(s.length===1)return[t];let a=[],l=new Set;for(let u of s){let f=new Set(u.filter(m=>!m.isApp&&m.id).map(m=>m.id)),h=t.filter(m=>f.has(m.id));if(h.length>0){a.push(h);for(let m of h)l.add(m.id)}}let d=new Set(t.map(u=>u.id).filter(Boolean));return l.size===d.size?a:[t]}let o=e.flatMap(i=>i.sourceGroup.filter(s=>s.isApp));return kf(t,o)}function AI(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 W$=$(()=>{"use strict";Le();U$();j$()});function vr(){return c.currentView==="links"&&_l?.owner===c.currentLinks?_l:null}function ey(){V$++,_l=null}async function II(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=jn(c.currentLinks),i=++V$;_l={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let s=()=>i===V$&&c.currentView==="links"&&c.currentLinks===o;try{if(A()){let m=Do([e]).find(g=>g.report===t&&(!r||g.managedReportId===r)&&(n==null||g.index===Number(n)));if(!m)throw new Error("This finding is no longer in the report.");_l={owner:o,id:e,reportName:t,group:m.members.map(g=>({...g})),error:""},c.activeTabByGroup.set(m.members[0].id,e);return}let a=await gn(await ot(t));if(!s())return;let l=(Mt(a?.data)??[]).map(m=>Array.isArray(m)?m:[m]),d=m=>m?.some(g=>String(g?.id)===e),u=d(l[n])?l[n]:l.find(d);if(!u)throw new Error("This finding is no longer in the report.");let{data:f}=a,h=u.filter(m=>m?.id).map(m=>{let g={...m,_reportName:t,_repoFallback:xt(f)??Fn(t),_repoDirectory:Tr(f?.repo),_bundleHashes:f.bundleHashes??[],_source:m.source??f.source??null};return Qr(g,f),g._analyzer=g._source??g.type??null,"isApp"in g||(g.isApp=mn(g,g._source)),g});await Promise.all([il(),yn("report",t),...kp(t).map(m=>yn("workspace",m.id))]),s()&&(Ci([h],{linkedIds:fr,knownRows:m=>[...Do(m),...c.reports.flatMap(g=>g.groups??[]).filter(g=>g.some(y=>m.includes(y.id))).map(g=>({members:g}))]}),_l.group=h,c.activeTabByGroup.set(h[0].id,e))}catch(a){s()&&(_l.error=a.message||"Unable to load this finding.")}}var _l,V$,ty=$(()=>{"use strict";q();$i();Le();_l=null,V$=0});function ny(e,t,n,r=n){let o=e.map((f,h)=>h),i=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},s=e.map(n),a=new Map;for(let f=0;f<s.length;f++)for(let h of s[f])h.id&&(a.has(h.id)||a.set(h.id,[]),a.get(h.id).push(f));for(let[f,h]of a)for(let m of t(f))if(m!==f)for(let g of h)for(let y of a.get(m)??[]){let w=i(g),x=i(y);w!==x&&(o[x]=w)}let l=new Map;for(let f=0;f<e.length;f++){let h=i(f);l.has(h)||l.set(h,[]),l.get(h).push(f)}if(l.size===e.length)return e;let d=f=>f.id??String(f._id),u=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let h=new Map;for(let w of f)for(let x of r(e[w]))h.has(d(x))||h.set(d(x),x);let m=new Map;for(let w of f)for(let x of e[w])m.has(d(x))||m.set(d(x),h.get(d(x))??x);let g=[...m.values()],y=e[f[0]];return g.workspaceKey=y.workspaceKey??d(y[0]),g.linkedTabs=[...h.values()],g});return Object.defineProperty(u,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),u}var K$=$(()=>{"use strict"});function le(e){return e.id??String(e._id)}function Te(e){return e.workspaceKey??le(e[0])}function ry(e){return Array.isArray(e)?e:[e]}function Oi(){return c.revalidationDetailed===!0}function oq(e){return e?._reportName??""}function iq(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==LI&&(LI=e,FI=Bb(e)),FI)}function ft(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!iq()}function Ye(e){if(!ft(e))return;let t=c.triage.get(le(e)),n=t?.triage==="ignored"&&Kt(e,Yo())?{...t,triage:void 0}:t;if(!A())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(`
|
|
134
134
|
|
|
135
135
|
`)}}function G$(e){return ft(e)&&(Gt(e,c.triage.get(le(e)),Yo())==="ignored"||Kt(e,Yo())&&Da(c.triage,le(e),oq(e)))}function xf(e,t=Ye(e)){if(ft(e))return Gt(e,t,Yo())??(G$(e)?"ignored":void 0)}function jr(e){return vr()?.group===e?e:e.linkedTabs?e.linkedTabs:Oi()?e:BI(e)}function BI(e){return e.length<=1||!e.some(uf)?e:e.filter(uf)}function ei(e){let t=jr(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=uf(n)?1:0,i=uf(r)?1:0;if(o!==i)return i-o;let s=Ye(n)?.color?1:0,a=Ye(r)?.color?1:0;if(s!==a)return a-s;let l=bt[Me(n,c.severityMode)]||0,d=bt[Me(r,c.severityMode)]||0;if(l!==d)return d-l;let u=n.confidence??-1;return(r.confidence??-1)-u})}function Bi(e){return e.length===1?e[0]:ei(e)[0]}function OI(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function sq(e){let t=Ye(e);return!!t?.comment||!!(t?.fix||qo(e))||t?.flagged===!0}function ct(e){if(e.length===1)return e[0];let t=ei(e);if(t.length===1)return t[0];let n=c.activeTabByGroup.get(Te(e));if(n){let o=t.find(i=>le(i)===n);if(o)return o}let r=t;if(c.filterAnalyzer||c.filterModel){let o=t.filter(M$);o.length>0&&(r=o)}return r.find(sq)??r[0]}function PI(e){return e?._repoFallback||c.repoUrl||""}function Xn(e){return{github:PI(e),directory:e?._repoDirectory??""}}function oy(e){for(let t of No().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||PI(e)||null}function gd(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function kt(e){let t=gd(e),n=0,r=!1,o,i=!1,s=!1,a,l=!1,d=null,u=!1,f=!0;for(let w of t){let x=Ye(w),v=xf(w,x),k=x?.color;k===void 0&&v===void 0||(n++,k!==void 0&&(i?k!==o&&(r=!0):(i=!0,o=k)),l?v!==a&&(s=!0):(l=!0,a=v),v?(d===null&&(d=v),v==="ignored"&&x?.triage!=="ignored"?f=!1:u=!0):f=!1)}let h=r||s,m=!h&&i?o:null,g=n>0&&f,y=!h&&d!==null?d:null;return{hasConflict:h,commonColor:m,anyTriage:u,allTriaged:g,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function NI(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(ft);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>q$(o,r))}function q$(e,t){if(!ft(e))return!1;let n=(Ye(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function DI(e,t){if(!ft(ct(e)))return{targets:[],clearing:!1};let n=kt(e);return{targets:Vs(e,n),clearing:t==="restore"||Y$(e,n)===t}}function Vs(e,t=kt(e)){let n=gd(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[ct(e)]:n;return r.every(ft)?r:r.filter(ft)}function Y$(e,t=kt(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&gd(e)!==e||!t.hasConflict?t.commonTriage??null:xf(n??ct(e))??null}function iy(e){let t=gd(e);if(t.length<2)return!1;let r=kt(e).commonTriage;if(!r||r==="ignored"&&!t.some(i=>Ye(i)?.triage==="ignored"))return!1;let o=!1;for(let i of t){if(!ft(i))continue;let s=le(i),a=c.triage.get(s);xf(i,a)!==r&&(r==="ignored"&&Kt(i,Yo())||r!=="ignored"&&a?.ignoredReports?.length||ie(c.triage,s,{triage:r})&&(o=!0))}return o}function Ks(){wr=null}function sy(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,i=A();(!wr||wr.reports.length!==r.length||wr.reports.some((a,l)=>a!==r[l])||wr.merges!==o||wr.mergeCount!==o.length||wr.securityLinksTick!==c.linksTick||wr.findingIndexTick!==c.findingIndexTick||wr.managed!==i)&&(Ci(r.flatMap(a=>a.groups??[]),{linkedIds:fr,knownRows:Do}),wr={reports:[...r],merges:o,mergeCount:o.length,managed:i,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick});let s=t?"upstream":e?n?"workspace-app":"app":"code";return wr[s]||(wr[s]=Qb(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),wr[s]}function zI(){return sy(c.showRevalidation!==!1).groups}function J$(){return sy(!0).groups}function UI(){return sy(!0,!1,!!c.currentWorkspace).conflicts}function kr(){let e=sy(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=Oi();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=ny(t,fr,BI,jr),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return Oi()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(i=>!wl(i));return o.length===r.length?[r]:o.length===0?[]:(o.workspaceKey=Te(r),[o])});return Object.defineProperty(n,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),n})()}function ti(){let e=kr();if(c.viewMode==="kanban")return e;let t=e.filter(n=>kt(n).commonTriage===c.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function jI(e){if(c.showRevalidation||c.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(le)),n=new Map;for(let r of J$())for(let o of kf(r))if(o.some(i=>t.has(le(i))))for(let i of o)n.set(le(i),i);return n.size===e.length&&e.every(r=>n.get(le(r))===r)?e:n.size>0?[...n.values()]:e}function Zn(e){let t=vr()?.group;if(t&&Te(t)===e)return t;for(let n of kr())if(Te(n)===e)return n;return null}var LI,FI,wr,Ht=$(()=>{"use strict";bl();Ar();q();Le();Fe();po();W$();ty();K$();j$();U$();LI=null,FI=!0;wr=null});function HI(e){return e==null?"(none)":Z$[e]??e}function WI(e){return e??"(no model)"}var Z$,X$,Q$=$(()=>{"use strict";P();ht();nt();q();po();Le();Z$=nn;X$=class extends ce{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 b;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===js?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===Hs?null:c.filterModel,i=new Map,s=new Map;for(let f of this.groups){let h=new Set,m=new Set;for(let g of f){let y=g._analyzer??null,w=yf(g);(o===void 0||w===o)&&h.add(y),(r===void 0||y===r)&&m.add(w)}for(let g of h)i.set(g,(i.get(g)??0)+1);for(let g of m)s.set(g,(s.get(g)??0)+1)}let a=r===void 0?null:HI(r),l=o===void 0?null:WI(o),d=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),u=a!=null||l!=null;return p`<button type="button" class="${Y({"analyzer-btn":!0,active:u})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${d}`}"><span class="analyzer-btn-label">${d}</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:js,labelOf:HI,counts:i,current:c.filterAnalyzer}):b} ${t&&n?p`<div class="analyzer-menu-sep"></div>`:b} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:Hs,labelOf:WI,counts:s,current:c.filterModel}):b}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:i,labelOf:s,counts:a,current:l}){return p`<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="${Y({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(d=>{let u=d??i,f=a.get(d)??0,h=l===u;return p`<button type="button" aria-pressed="${String(h)}" class="${Y({"analyzer-menu-item":!0,active:h,zero:f===0})}" @click="${()=>this._pick(t,u)}"><span class="analyzer-menu-label">${s(d)}</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,i=t.offsetHeight||200,s=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+s;l+i>window.innerHeight-4&&r.top>i+s&&(l=r.top-i-s),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",X$)});function eS(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}function dq(e,t,n){for(let r of n){let o=cq[r],i=o(e[r])-o(t[r]);if(i!==0)return i;let s=String(e[r]??"").localeCompare(String(t[r]??""));if(s!==0)return s}return 0}function KI(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function uq(e,t){let n=t.filter(i=>i!=="exportsMode"),r=[],o=new Map;for(let i of e){if(i.exportsMode==null){r.push({...i});continue}let s=n.map(d=>i[d]??"").join("|"),a=o.get(s);if(a){a.exportsMode=`${a.exportsMode}+${i.exportsMode}`;continue}let l={...i};o.set(s,l),r.push(l)}return r}function GI(e,t=ay){let n=new Map;for(let h of e){let m={};for(let y of t)m[y]=y==="model"?La(h.model)??null:h[y]??null;let g=t.map(y=>m[y]??"").join("|");n.has(g)||n.set(g,m)}let r=[...n.values()].toSorted((h,m)=>dq(h,m,t));if(r.length===0)return[];let o={};for(let h of t)o[h]=new Set(r.map(m=>m[h])).size===1;let i=t.filter(h=>!o[h]),s=i.includes("exportsMode")?uq(r,t):r,a=s.length>2&&i.includes("type")&&i.length>1,l=["model","effort"].filter(h=>t.includes(h)&&o[h]),d=[...l,...t.filter(h=>!l.includes(h))],u=[],f=!1;for(let h of d)if(o[h]){let m=KI(h,s[0][h]);m!=null&&u.push(m)}else if(!f){for(let m of s){let g=i.map(y=>KI(y,m[y],{typePrefix:!a})).filter(y=>y!=null);g.length>0&&u.push(g.join(" \xB7 "))}f=!0}return u}var ay,VI,aq,lq,cq,qI=$(()=>{"use strict";Fe();ay=["type","model","effort","exportsMode"],VI=["security","correctness"],aq=["max","xhigh","high","medium","low","minimal"],lq=["list","isolate"];cq={type:e=>e==="terminal"?VI.length+2:eS(VI,e),model:e=>e==null?1:0,effort:e=>eS(aq,e),exportsMode:e=>eS(lq,e)}});function YI(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 JI=$(()=>{"use strict"});function xr(e,t){if(typeof t=="string"&&XI[t])return XI[t];if(typeof e!="string")return null;let n=e.slice(e.lastIndexOf("/")+1),r=n.lastIndexOf(".");return r<=0?null:pq[n.slice(r+1).toLowerCase()]??null}var pq,XI,ly=$(()=>{"use strict";pq={__proto__:null,js:"javascript",mjs:"javascript",cjs:"javascript",jsx:"jsx",ts:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",yml:"yaml",yaml:"yaml",sh:"bash",bash:"bash",md:"markdown",markdown:"markdown",sol:"solidity",php:"php",phtml:"php",rs:"rust",rb:"ruby",py:"python",pyw:"python",pyi:"python",java:"java",cpp:"cpp",cc:"cpp",cxx:"cpp","c++":"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",m:"objectivec",mm:"objectivec"},XI={__proto__:null,module:"javascript",commonjs:"javascript","module-typescript":"typescript","commonjs-typescript":"typescript",json:"json",solidity:"solidity",php:"php",shell:"bash",rust:"rust",java:"java",objc:"objectivec",objcpp:"objectivec",c:"c","c-header":"c",cpp:"cpp","cpp-header":"cpp",ruby:"ruby",podspec:"ruby",podfile:"ruby",fastlane:"ruby","podfile-lock":"yaml",xml:"markup"}});function fq(){return cy||(cy=(async()=>await import("./prism.js"))(),cy)}function ZI(e){return typeof e!="string"?null:hq[e.toLowerCase()]??null}async function Hr(e,t,n=null){if(!t)return null;try{return(await fq()).highlight(e,t,n)}catch{return null}}function QI(e){let t=[],n=[],r="",o=0;for(;o<e.length;){let i=e.indexOf("<",o),a=(i===-1?e.slice(o):e.slice(o,i)).split(`
|
|
136
|
-
`);r+=a[0];for(let u=1;u<a.length;u++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[u]}if(i===-1)break;let l=e.indexOf(">",i);if(l===-1){r+=e.slice(i);break}let d=e.slice(i,l+1);d.startsWith("</")?n.pop():n.push({open:d,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(d)?.[1]??"span"}>`}),r+=d,o=l+1}return t.push(r),t}var cy,hq,Cl=$(()=>{"use strict";ly();cy=null;hq={__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 mq(){rS||(rS=!0,queueMicrotask(()=>{rS=!1,c.codeBlockTick++,F()}))}function oS(e,t){let n=ZI(t);if(!n||!e)return null;let r=`${n}\0${e}`;return tS.has(r)?tS.get(r):(nS.has(r)||(nS.add(r),(async()=>{let o=await Hr(e,n);tS.set(r,o??null),nS.delete(r),mq()})()),null)}var tS,nS,rS,e8=$(()=>{"use strict";q();Cl();ln();tS=new Map,nS=new Set,rS=!1});function kq(e,t,n){if(e===t)return e;let r=iS(e);if(r!==iS(t)&&t8(e)===t8(t))return r?t:e;throw new Error(`format conflict for '${n}' ('${t}' vs '${e}')`)}function El(e,t){return t===""?e:e==="."?t:`${e}/${t}`}function sS({name:e,version:t,ecosystem:n,repo:r,files:o},i,s){return he(n===void 0||typeof n=="string"),uy({name:e,version:t??void 0,ecosystem:n,repo:s8(i,{ecosystem:n,repo:r},s),files:fo(Object.entries(o))})}function a8(e,{scope:t="full"}={}){let n=new Set;for(let[r,{files:o}]of e)if(!(t!=="full"&&!Tl(r)))for(let i of Object.keys(o))n.add(El(r,i));return n}function Cq(e,{what:t,files:n,formats:r,scope:o}){if(e.includes("\\"))return"holds a '\\'";if(Sf(e))return"escapes the root";if(o!=="full"&&!Tl(e))return`is outside node_modules, which a '${o}'-scope ${t} does not record`;if(!n.has(e))return`names no file the ${t} records`;let i=r.get(e);return i==="directory"?"is a directory capture, not a file":iS(i)?`is a payload-free '${i}' record, not a file`:null}function l8(e,{what:t,files:n,formats:r,scope:o}){for(let i of e){let s=Cq(i,{what:t,files:n,formats:r,scope:o});he(s===null,`${t}: executable entry '${i}' ${s}`)}}function c8(e,{what:t,files:n,formats:r,scope:o="full"}){if(e===void 0)return new Set;let i=`${t}: executable`;he(Array.isArray(e),`${i} must be an array of file paths`);let s=new Set;for(let a of e)he(typeof a=="string"&&a!=="",`${i} entry must be a non-empty string`),he(!s.has(a),`${i} entry '${a}' is listed twice`),s.add(a);return l8(s,{what:t,files:n,formats:r,scope:o}),s}function d8(e,{what:t,modules:n,formats:r,scope:o}){if(e.size!==0)return l8(e,{what:t,files:a8(n,{scope:o}),formats:r,scope:o}),hy(e)}function he(e,t){if(!e)throw new Error(t)}function u8(e,t){let[n,r]=[e.split("/"),t.split("/")];for(;n.length>0&&n[0]===r[0];)n.shift(),r.shift();if(n.length===0&&r.length===0)return 0;if(n.length<2)return r.length<2&&n>r?1:-1;if(r.length<2)return 1;if(n[0]==="*")return-1;if(r[0]==="*"||n[0]==="node_modules")return 1;if(r[0]==="node_modules")return-1;let[o,i]=[n,r].map(s=>s.join(String.fromCodePoint(0)));if(o<i)return-1;if(o>i)return 1;throw new Error("Unreachable")}function Sf(e){if(e.startsWith("/"))return!0;if(!e.includes(".."))return!1;let t=0;for(let n of e.split("/"))if(!(n==="."||n==="")){if(n!=="..")t++;else if(--t<0)return!0}return!1}function m8(e,t){he(Array.isArray(e),`${t}: entries must be an array of file paths`);let n=new Set;for(let r of e)h8(r,t),he(!n.has(r),`${t}: entry '${r}' is listed twice`),n.add(r);return n}function g8(e,t){for(let n of e)h8(n,t);return hy(e)}function b8(e,t){Pi(e,"formats"),he(wq.has(t),`unknown format '${t}' for ${e}`)}function y8(e){he(Rl(e));let t=new Map;for(let[n,r]of Object.entries(e)){b8(n,r);let o=n===""?".":n;he(!t.has(o),`duplicate format key '${o}'`),t.set(o,r)}return t}function v8(e){for(let[t,n]of e)b8(t,n);return aS(e)}function w8(e){for(let[,t]of e){he(t instanceof Map);for(let[n,r]of t){Pi(n,"imports"),he(r instanceof Map);for(let[,o]of r){if(typeof o=="string"){Pi(o,"imports");continue}he(o instanceof Map&&o.size>0,"import target must be a file or a non-empty {platform: file} map");for(let[i,s]of o)he(typeof i=="string"&&i.length>0&&!i.includes("/"),`invalid platform key '${i}'`),he(typeof s=="string"),Pi(s,"imports")}}}}function k8(e){he(Rl(e));let t=p8(e);return w8(t),t}function x8(e){return w8(e),aS(e)}function $8(e,{skipEmpty:t=!1,repo:n=!0,what:r}={}){let o={modules:[],sources:[]};for(let[i,s]of e){if(t&&Object.keys(s.files).length===0)continue;let a=Tl(i);a&&he(s.name&&s.version&&s.files);let l=fo(Object.entries(s.files).toSorted(dy));o[a?"modules":"sources"].push([i,uy({...s,repo:n?s8(i,s,r):void 0,files:l})])}return{modules:fo(o.modules.toSorted(dy)),sources:fo(o.sources.toSorted(dy))}}function Eq(e,t){let n=e instanceof Map;if(n!==t instanceof Map)return!1;if(!n)return e===t;if(e.size!==t.size)return!1;for(let[r,o]of e)if(t.get(r)!==o)return!1;return!0}function S8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=n8(r,s);for(let[d,u]of a){let f=n8(l,d);for(let[h,m]of u)f.has(h)?he(Eq(f.get(h),m),`${n}: import '${h}' from '${d}' resolves differently ('${r8(f.get(h))}' vs '${r8(m)}')`):f.set(h,m instanceof Map?new Map(m):m)}}};return o(e),o(t),r}function _8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=r.get(s);if(l===void 0){r.set(s,a);continue}try{r.set(s,kq(a,l,s))}catch(d){throw new Error(`${n}: ${d.message}`,{cause:d})}}};return o(e),o(t),r}function C8(e,t,n,r){if(e.size===0)return new Set(t);let o=a8(n,{scope:r}),i=new Set(t);for(let s of e)o.has(s)||i.add(s);return i}function my(e,t,n){let r=El(e,t);return(r!=="."||t!=="")&&Rq.test(r)&&he(!1,`${n}: non-canonical file key ${JSON.stringify(r)}`),r.includes("\\")&&he(!1,`${n}: file key '${r}' holds a '\\', which no path may`),r}function gy(e,t,n){let r=new Map;for(let[o,{files:i}]of e){typeof o!="string"&&he(!1,`${t}: bucket dir ${String(o)} is not a string`),Pi(o,t);for(let s of Object.keys(i)){let a=my(o,s,t),l=r.get(a);l!==void 0&&n(a,l,o),r.set(a,o)}}return r}function R8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=r.get(s);if(l===void 0){r.set(s,uy({...a,files:Object.assign(Object.create(null),a.files)}));continue}he(l.name===a.name,`${n}: module '${s}' name mismatch ('${l.name}' vs '${a.name}')`),he(l.version===a.version,`${n}: module '${s}' version mismatch ('${l.version}' vs '${a.version}')`+(l.version==null==(a.version==null)?"":" -- an artifact from an older stasis may record a placeholder version for a workspace package without one; regenerate it (bundle=replace / lock=replace)")),he(l.ecosystem===a.ecosystem,`${n}: module '${s}' ecosystem mismatch ('${l.ecosystem??"(none)"}' vs '${a.ecosystem??"(none)"}')`),l.repo===void 0&&a.repo!==void 0&&r.set(s,uy({...l,repo:a.repo}));for(let[d,u]of Object.entries(a.files))Object.hasOwn(l.files,d)?he(l.files[d]===u,`${n}: content mismatch for '${El(s,d)}'`):l.files[d]=u}};return o(e),o(t),gy(r,n,(i,s,a)=>he(!1,`${n}: file '${i}' is bucketed under both '${s}' and '${a}' -- module bucketing changed between the artifacts (a workspace package without a version now owns its own bucket); regenerate the artifact (bundle=replace / lock=replace)`)),r}function Tl(e){return e.split("/").includes("node_modules")}function Tq(e){let t="node_modules/",n=e.length;for(;(n=e.lastIndexOf(t,n-1))!==-1;)if(n===0||e[n-1]==="/")return n;return-1}function T8(e){let t="node_modules/",n=Tq(e);if(n===-1)return null;let r=n+t.length,o=e.slice(r).split("/"),i=o[0].startsWith("@")?2:1;if(o.length<=i||o.slice(0,i).some(a=>!a))return null;let s=o.slice(0,i).join("/");return{dir:e.slice(0,r)+s,rel:o.slice(i).join("/"),name:s}}var gq,bq,yq,vq,o8,wq,iS,t8,xq,$q,Sq,$f,i8,py,fy,_q,s8,uy,dy,Rl,fo,hy,aS,n8,p8,f8,Pi,h8,r8,Rq,E8,M8=$(()=>{gq=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),bq=new Set(["solidity","php","shell","rust"]),yq=new Set(["java","kotlin","gradle","objc","objcpp","swift","c","cpp","c-header","cpp-header","ruby","python","cmake","podspec","podfile","podfile-lock","template","xml","env","fastlane","pbxproj"]),vq=new Set(["resource","resource:base64"]),o8=new Set(["stat:file","stat:directory"]),wq=new Set([...gq,...bq,...yq,...vq,"patch","directory",...o8]),iS=e=>o8.has(e),t8=e=>e==="directory"||e==="stat:directory"?"directory":"file";xq=/^(?=[A-Za-z0-9-]{1,39}\/)[A-Za-z0-9](?:-?[A-Za-z0-9])*\/(?!\.\.?$)[\w.-]{1,100}$/u,$q=/^(?!\.\.?(?:\/|$))[\w.~@+-]+(?:\/(?!\.\.?(?:\/|$))[\w.~@+-]+)*$/u,Sq=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u,$f={github:e=>typeof e=="string"&&xq.test(e),directory:e=>typeof e=="string"&&e.length<=1024&&(e===""||$q.test(e)),commit:e=>typeof e=="string"&&Sq.test(e)},i8=(e,t)=>e?.toLowerCase()===t?.toLowerCase(),py=(e,t,n)=>{if(e===void 0)return;Rl(e)||he(!1,`${n} must be an object`);for(let o of Object.keys(e))Object.hasOwn(t,o)||he(!1,`unknown ${n} key '${o}'`);let r=Object.entries(t).map(([o,i])=>typeof i=="object"?[o,py(e[o],i,`${n}.${o}`)]:(e[o]!==void 0&&!i(e[o])&&he(!1,`invalid ${n}.${o}: ${JSON.stringify(e[o])}`),[o,e[o]])).filter(([,o])=>o!==void 0);return r.length===0?void 0:Object.freeze(fo(r))},fy=(e,t="bundle repo")=>py(e,$f,t),_q=(e,t)=>t??(Tl(e)?"npm":void 0),s8=(e,{ecosystem:t,repo:n},r)=>{if(n!==void 0)return _q(e,t)===void 0&&he(!1,`${r}: '${e}' is no dependency's bucket, and carries no repo`),fy(n,`${r} module '${e}' repo`)},uy=({name:e,version:t,ecosystem:n,repo:r,files:o})=>({name:e,version:t,...n===void 0?{}:{ecosystem:n},...r===void 0?{}:{repo:r},files:o});dy=(e,t)=>u8(e[0],t[0]),Rl=e=>e&&[null,Object.prototype].includes(Object.getPrototypeOf(e)),fo=e=>Object.setPrototypeOf(Object.fromEntries(e),null),hy=e=>[...e].toSorted(u8),aS=(e,{sorted:t=!0}={})=>{let n=t?[...e].toSorted(dy):[...e];return fo(n.map(([r,o])=>[r,o instanceof Map?aS(o,{sorted:t}):o]))},n8=(e,t)=>e.get(t)??e.set(t,new Map).get(t),p8=e=>new Map(Object.entries(e).map(([t,n])=>[t,Rl(n)?p8(n):n]));f8=e=>e.includes("\\")||Sf(e),Pi=(e,t)=>he(!f8(e),`${t}: path '${e}' escapes the root or holds a '\\'`),h8=(e,t)=>he(typeof e=="string"&&e!==""&&!f8(e),`${t}: invalid entry ${JSON.stringify(e)}`);r8=e=>e instanceof Map?`{${[...e].map(([t,n])=>`${t}: ${n}`).join(", ")}}`:e;Rq=/(?:^|\/)\.{0,2}(?:\/|$)/u;E8=(e,t)=>n=>he(!1,`duplicate file key '${n}' across ${e} buckets -- module bucketing changed between writes (a workspace package without a version now owns its own bucket); regenerate the ${t}`)});function Mq(){throw new Error("bundle: file contents are not retained by this contents-free Bundle")}var Gs,A8,I8,L8,Aq,lS,dS,Iq,Lq,F8,cS,B8,Fq,Wr,_f=$(()=>{M8();Gs=1,A8=0,I8=E8("bundle","artifact (bundle=replace)"),L8=e=>T8(e)??{dir:".",rel:e==="."?"":e,name:null};Aq=(e,{files:t,...n})=>{let r=Object.create(null);for(let[o,i]of Object.entries(t))typeof i!="symbol"&&he(!1,`bundle: file '${El(e,o)}' is not a placeholder`),Object.defineProperty(r,o,{get:Mq,enumerable:!0});return{...n,files:Object.freeze(r)}},lS=(e,t)=>{if(e===void 0&&t===void 0)return;let n=new Map;for(let r of[e,t])for(let[o,i]of Object.entries(r??{})){if(!Array.isArray(i))continue;let s=n.get(o);s===void 0&&n.set(o,s=new Set);for(let a of i)s.add(a)}return fo([...n.keys()].toSorted().map(r=>[r,hy(n.get(r))]))},dS=(e,t)=>Object.hasOwn($f,e)&&$f[e](t),Iq=(e,t)=>{if(e?.github===void 0||!i8(e.github,t?.github))return;let n=Object.keys($f).filter(r=>e[r]!==void 0&&(r==="github"||e[r]===t[r]));return fo(n.map(r=>[r,e[r]]))},Lq=e=>{if(!Rl(e)||e.root!==!0||Object.hasOwn(e,"directory"))return e;let{root:t,...n}=e;return n},F8=e=>typeof e=="string"&&/^[\w.+@/~'!()*-]+$/u.test(e),cS={name:F8,version:F8},B8={npm:cS,composer:cS,cargo:cS},Fq=(e,t)=>fo(Object.keys(B8).map(n=>{let[r,o]=[e?.[n],t?.[n]];return[n,r?.name!==void 0&&r.name===o?.name?fo(Object.entries(r).filter(([i,s])=>s===o[i])):void 0]})),Wr=class e{static VERSION=Gs;version=Gs;config;entries;modules;formats;imports;executable;reason;#e;get repo(){return this.#e}set repo(t){this.#e=fy(t)}#t;get package(){return this.#t}set package(t){this.#t=py(t,B8,"bundle package")}constructor({config:t={scope:"full"},entries:n,modules:r,formats:o,imports:i,executable:s,reason:a,repo:l,package:d,version:u=Gs}={}){he([A8,Gs].includes(u)),he(["node_modules","full"].includes(t.scope)),this.version=u,this.config=t,this.entries=n??new Set,this.modules=r??new Map,this.formats=o??new Map,this.imports=i??new Map,this.executable=s??new Set,this.reason=a,this.repo=fy(l),this.package=d}get sources(){let t=new Map;for(let[n,{files:r}]of this.modules)for(let[o,i]of Object.entries(r))t.set(El(n,o),i);return t}static isResourceFormat(t){return t==="resource"||t==="resource:base64"||t==="directory"}get hasCode(){for(let[t,{files:n}]of this.modules)for(let r of Object.keys(n))if(!e.isResourceFormat(this.formats.get(El(t,r))))return!0;return!1}static parse(t){return e.fromJSON(JSON.parse(t))}static fileKeyAt(t){let[n,r,o,i]=t;if(typeof r=="string"){if(t.length===2&&n==="sources"){let s=L8(r);return my(s.dir,s.rel,"bundle")}if(t.length===4&&(n==="sources"||n==="modules")&&o==="files"&&typeof i=="string")return my(r,i,"bundle")}}static fromJSON(t,{contents:n=!0}={}){he(t.version===Gs||t.version===A8),he(["node_modules","full"].includes(t.config?.scope));let r=y8(t.formats),o=new Map,i=new Set;if(t.version===Gs){let l=t.config.scope==="full";if(t.modules!==void 0){he(typeof t.modules=="object"&&t.modules!==null);for(let[d,u]of Object.entries(t.modules))he(Tl(d)),Pi(d,"bundle"),he(u?.name&&u.version&&u.files),o.set(d,sS(u,d,"bundle"))}if(l){he(t.sources&&typeof t.sources=="object");for(let[d,u]of Object.entries(t.sources))he(!Tl(d)),Pi(d,"bundle"),he(u?.name&&u.files),o.set(d,sS(u,d,"bundle"));t.entries!==void 0&&(i=m8(t.entries,"bundle"))}else he(t.entries===void 0),he(t.sources===void 0)}else{he(t.sources);for(let[l,d]of Object.entries(t.sources)){Pi(l,"bundle");let{dir:u,rel:f,name:h}=L8(l);he(!Sf(u)&&!Sf(f)),o.has(u)||o.set(u,{name:h,version:null,files:Object.create(null)});let{files:m}=o.get(u);he(!Object.hasOwn(m,f),"bundle: duplicate file key '.' (v0 '' and '.')"),m[f]=d}}let s=gy(o,"bundle",I8),a=k8(t.imports);if(!n)for(let[l,d]of o)o.set(l,Aq(l,d));return new e({version:t.version,config:t.config,entries:i,modules:o,formats:r,imports:a,executable:t.version===Gs?c8(t.executable,{what:"bundle",files:s,formats:r,scope:t.config.scope}):new Set,reason:Rl(t.reason)?t.reason:void 0,repo:Lq(t.repo),package:t.package})}serialize(){gy(this.modules,"bundle",I8);let{modules:t,sources:n}=$8(this.modules,{skipEmpty:!0,what:"bundle"}),r=this.config.scope==="full",o={version:Gs,config:this.config};this.repo!==void 0&&(o.repo=this.repo),this.package!==void 0&&(o.package=this.package),r&&(o.entries=g8(this.entries,"bundle")),o.formats=v8(this.formats),o.imports=x8(this.imports);let i=d8(this.executable,{what:"bundle",modules:this.modules,formats:this.formats,scope:this.config.scope});return i!==void 0&&(o.executable=i),this.reason!==void 0&&(o.reason=lS(this.reason,void 0)),r&&(o.sources=n),o.modules=t,JSON.stringify(o,void 0,2)}withReason(t){let{version:n,config:r,entries:o,modules:i,formats:s,imports:a,executable:l,repo:d,package:u}=this,f=lS(this.reason,{[t]:[...this.sources.keys()]});return new e({version:n,config:r,entries:o,modules:i,formats:s,imports:a,executable:l,reason:f,repo:d,package:u})}merge(t){return he(this.config.scope===t.config.scope,`bundle merge: scope mismatch ('${this.config.scope}' vs '${t.config.scope}')`),new e({config:{scope:this.config.scope},entries:new Set([...this.entries,...t.entries]),modules:R8(this.modules,t.modules,"bundle merge"),formats:_8(this.formats,t.formats,"bundle merge"),imports:S8(this.imports,t.imports,"bundle merge"),executable:C8(this.executable,t.executable,t.modules,this.config.scope),reason:lS(this.reason,t.reason),repo:Iq(this.repo,t.repo),package:Fq(this.package,t.package)})}}});function Bq(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function Oq(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function Pq(){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{}}function Dq(){return yy||(yy=(async()=>await import(O8))(),yy)}function pS(){uS=!0,ni&&(ni.terminate(),ni=null);let e=[...bd.values()];bd.clear();for(let t of e)t.resolve(vy)}function zq(e){let{id:t,bytes:n,error:r}=e.data??{},o=bd.get(t);o&&(bd.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function Uq(){if(ni)return ni;if(uS||typeof Worker>"u")return null;try{ni=new Worker(new URL(O8,import.meta.url),{type:"module"})}catch{return uS=!0,null}return ni.addEventListener("message",zq),ni.addEventListener("error",pS),ni.addEventListener("messageerror",pS),ni}function jq(e){let t=Uq();return t?new Promise((n,r)=>{let o=++Nq;bd.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{bd.delete(o),pS(),n(vy)}}):Promise.resolve(vy)}async function Hq(){await Pq();let e=Bq();return e?{kind:"native",format:e}:{kind:"fallback"}}function P8(){return by||(by=Hq(),by)}async function N8(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await P8();if(n(),r.kind==="native")return Oq(r.format,e);let o=await jq(e);return n(),o!==vy?o:(await Dq()).brotliDecompress(e)}var by,yy,O8,vy,ni,uS,Nq,bd,fS=$(()=>{"use strict";by=null,yy=null;O8="./brotli-fallback.js",vy=Symbol("brotli worker unavailable"),ni=null,uS=!1,Nq=0,bd=new Map;P8().catch(()=>{})});function Wq(){return{showAll:!1,packagesView:!1,dependencyPackagesView:!1,bundleLayout:"graph",bundleReason:null,bundleReasonFor:null,selected:null,focusedPkg:null,topPkgsTab:"issues",edgeOpacity:.22,nodeSize:1,showLabels:!1,selectedSeverities:new Set,selectedColors:new Set,pathFilter:"",hidden:new Set,solo:null,graphState:null,layoutCache:null}}function Et(){G.graphState?._cleanup&&G.graphState._cleanup(),G.graphState=null}function D8(){return qs}var qs,G,ri=$(()=>{"use strict";qs=Wq(),G=new Proxy(qs,{get(e,t){return qs[t]},set(e,t,n){return qs[t]=n,!0},has(e,t){return t in qs},deleteProperty(e,t){return delete qs[t]},ownKeys(){return Reflect.ownKeys(qs)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(qs,t)}})});function it(){return z8}function Cn(){return hS.signal}function cn(){return hS.abort(),hS=new AbortController,++z8}var z8,hS,Ml=$(()=>{"use strict";z8=0,hS=new AbortController});function Gq(e){let t=typeof e=="string"?e.slice(e.lastIndexOf("/")+1):"",n=t.lastIndexOf("."),r=n>0?t.slice(n+1).trim().toLowerCase():"",o=xr(e)??Kq[r];return o?{key:o,label:Vq[o]??o}:r?{key:`extension:${r}`,label:`.${r}`}:{key:"other",label:"Other"}}function Cf(e,t){let n=new Map,r=0,o=0;for(let[i,s]of e){let a=Gq(i),l=n.get(a.key)??{...a,files:0,lines:0,bytes:0};l.files++,l.lines+=s,l.bytes+=t.get(i)??0,n.set(a.key,l),o+=s,r+=t.get(i)??0}return{files:e.size,lines:o,bytes:r,languages:[...n.values()].toSorted((i,s)=>s.lines-i.lines||i.label.localeCompare(s.label))}}var Vq,Kq,mS=$(()=>{"use strict";ly();Vq=Object.freeze({javascript:"JavaScript",jsx:"JSX",typescript:"TypeScript",tsx:"TSX",json:"JSON",css:"CSS",markup:"HTML",yaml:"YAML",bash:"Shell",markdown:"Markdown",solidity:"Solidity",php:"PHP",rust:"Rust",ruby:"Ruby",java:"Java",cpp:"C++",c:"C",objectivec:"Objective-C",python:"Python",go:"Go",kotlin:"Kotlin",swift:"Swift",dart:"Dart",sql:"SQL",lua:"Lua",csharp:"C#",scala:"Scala",vue:"Vue",svelte:"Svelte"}),Kq=Object.freeze({py:"python",pyw:"python",go:"go",kt:"kotlin",kts:"kotlin",swift:"swift",dart:"dart",sql:"sql",lua:"lua",cs:"csharp",scala:"scala",sc:"scala",vue:"vue",svelte:"svelte"})});function Wt(e){if(e?.metadataOnly)return new Map;let t=e?.bundle??e?.json;if(t&&gS.has(t))return gS.get(t);let n=new Map;if(!e)return n;if(e.kind==="stasis"){if(!e.bundle)return n;let r=e.bundle.formats;for(let[o,i]of e.bundle.sources)typeof i=="string"&&(Wr.isResourceFormat(r?.get(o))||n.set(o,i))}else if(e.kind==="sourcemap"){if(!e.json)return n;let r=e.json.sources??[],o=e.json.sourcesContent??[];for(let i=0;i<r.length;i++)typeof o[i]=="string"&&n.set(r[i],o[i])}return t&&gS.set(t,n),n}function On(e){let t=e?.bundle??e?.json;if(t&&bS.has(t))return bS.get(t);let n=new Map(Wt(e));if(e?.kind==="stasis"&&e.bundle){let r=e.bundle.formats;for(let[o,i]of e.bundle.sources){if(typeof i!="string")continue;let s=r?.get(o);s==="resource"?n.set(o,i):s==="resource:base64"&&n.set(o,{format:"base64",data:i})}}return t&&bS.set(t,n),n}function Yq(e){let t=e.endsWith("=");if(t?e.length%4!==0||e.at(-3)==="=":e.length%4===1)return null;let n=t?e.slice(0,e.endsWith("==")?-2:-1):e;if(/[^A-Za-z0-9+/]/u.test(n))return null;let r=n.length%4;return r>1&&qq.indexOf(n.at(-1))&(r===2?15:3)?null:Math.floor(n.length*3/4)}function Ef(e){return typeof e=="string"?za(e):e?.format==="base64"?Yq(e.data):null}function Pn(e){if(e?.fileSizes)return e.fileSizes;let t=e?.bundle??e?.json;if(t&&yS.has(t))return yS.get(t);let n=new Map,r=On(e),o=e?.kind==="stasis"?e.bundle?.sources.keys():e?.json?.sources;for(let i of o??[])n.set(i,Ef(r.get(i)));return t&&yS.set(t,n),n}function xS(e){if(e?.metadataOnly)return e.unsizedFiles??new Set;let t=Pn(e);if(kS.has(t))return kS.get(t);let n=new Set;for(let r of On(e).keys())t.get(r)===null&&n.add(r);return kS.set(t,n),n}function yd(e){let t=Pn(e);if(wS.has(t))return wS.get(t);let n=xS(e),r=e?.kind==="stasis"?e.bundle?.formats:null,o=new Map;for(let[i,s]of t)s===null&&!n.has(i)||o.set(i,Wr.isResourceFormat(r?.get(i))?"resource":"source");return wS.set(t,o),o}function U8(e){let t=Pn(e),n=e?.kind==="stasis"?e.bundle?.formats:null;if(!n||n.size===0)return t;if(vS.has(t))return vS.get(t);let r=new Map;for(let[o,i]of t)r.set(o,Wr.isResourceFormat(n.get(o))?null:i);return vS.set(t,r),r}function Zt(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return null;let t=new Map;for(let[n,r]of e.bundle.modules)for(let o of Object.keys(r.files))t.set(n==="."?o:`${n}/${o}`,n);return t}function Rf(e,t=null){let n=new Map;if(e?.kind!=="stasis"||!e.bundle?.modules)return n;let r=t===null?null:Zt(e),o=t===null?null:new Set([...t].map(i=>r?.get(i)));for(let[i,s]of e.bundle.modules){if(o&&!o.has(i)||!i.includes("node_modules")||!s?.name||typeof s.version!="string"||!s.version)continue;let a=n.get(s.name);a||(a=new Set,n.set(s.name,a)),a.add(s.version)}return n}var gS,bS,yS,vS,wS,kS,qq,Tf=$(()=>{"use strict";_f();Ut();gS=new WeakMap,bS=new WeakMap,yS=new WeakMap,vS=new WeakMap,wS=new WeakMap,kS=new WeakMap;qq="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"});function Ys(e,t=null){return!!t||Xq.has(e)}function Mf(e){if(e.fileHashes)return Promise.resolve(e.fileHashes);if(wy.has(e))return wy.get(e);let t=(async()=>{let n=[...Wt(e)],r=new Map;for(let o=0;o<n.length;o+=32){let i=await Promise.all(n.slice(o,o+32).map(async([s,a])=>[s,await Vw(a)]));for(let[s,a]of i)r.set(s,a)}return e.fileHashes=r,r})();return wy.set(e,t),t.catch(()=>wy.delete(e)),t}function Af(e){return typeof e!="string"||e.length===0?0:(e.match(/\r\n|\r|\n/gu)?.length??0)+(/[\r\n]$/u.test(e)?0:1)}function SS(e){return e instanceof Map?Object.fromEntries([...e].map(([t,n])=>[t,SS(n)])):e}async function j8(e){let t=await Mf(e),n=Pn(e),r=e.lineCounts??=new Map([...Wt(e)].map(([s,a])=>[s,Af(a)])),o={version:$S,integrity:e.integrity,kind:e.kind,size:e.size,codeStats:Cf(r,n),files:[...n].map(([s,a])=>[s,a,t.get(s)??null,r.get(s)??null])},i=xS(e);if(i.size>0&&(o.unsized=[...i]),e.kind==="sourcemap"){let{version:s,file:a,sourceRoot:l,names:d,sources:u=[],sourcesContent:f=[]}=e.json;o.json={version:s,file:a,sourceRoot:l,sources:u},o.sourceSizes=u.map((h,m)=>typeof f[m]=="string"?za(f[m]):null),o.namesCount=d?.length??null}else{let s=e.bundle,a={version:s.version,config:s.config,repo:s.repo,package:s.package,formats:SS(s.formats),imports:SS(s.imports),reason:s.reason,executable:[...s.executable]};if(s.version===0)a.sources=Object.fromEntries([...n.keys()].map(l=>[l,null]));else{let l={},d={};for(let[u,f]of s.modules){let h=u.split("/").includes("node_modules")?l:d;Object.defineProperty(h,u,{enumerable:!0,value:{name:f.name,version:f.version,ecosystem:f.ecosystem,repo:f.repo,files:Object.fromEntries(Object.keys(f.files).map(m=>[m,null]))}})}a.modules=l,s.config.scope==="full"&&(a.sources=d,a.entries=[...s.entries])}o.bundle=a}return o}function If(e,t){if(![1,2,3,$S].includes(e?.version)||e.integrity!==t||!["stasis","sourcemap"].includes(e.kind)||!Number.isSafeInteger(e.size)||e.size<0||!Array.isArray(e.files))throw new Error("Invalid bundle metadata");let n=e.version!==$S,r=e.version===1,o=new Map,i=new Map,s=new Map;for(let d of e.files){if(!Array.isArray(d)||d.length!==4&&!(r&&d.length===3))throw new Error("Invalid bundle metadata file");let[u,f,h,m]=d;if(typeof u!="string"||i.has(u)||f!==null&&(!Number.isSafeInteger(f)||f<0)||h!==null&&(typeof h!="string"||!/^sha512-[A-Za-z0-9+/]{86}==$/u.test(h))||f===null&&h!==null||r&&f!==null&&h===null||m!=null&&(!Number.isSafeInteger(m)||m<0))throw new Error("Invalid bundle metadata file");i.set(u,f),h!==null&&o.set(u,h),m!=null&&s.set(u,m)}let a=new Set(e.unsized??[]);if(e.unsized!==void 0&&(r||!Array.isArray(e.unsized)||a.size!==e.unsized.length)||[...a].some(d=>typeof d!="string"||!i.has(d)||i.get(d)!==null))throw new Error("Invalid bundle metadata");let l={integrity:t,kind:e.kind,size:e.size,metadataOnly:!0,fileSizes:i,fileHashes:o,lineCounts:s,unsizedFiles:a,stale:n};if(e.kind==="stasis"){l.bundle=Wr.parse(JSON.stringify(e.bundle));let d=l.bundle.sources;if(d.size!==i.size||[...d.keys()].some(f=>!i.has(f)))throw new Error("Invalid bundle metadata inventory");let u=l.bundle.formats;if(!r&&[...i].some(([f,h])=>o.has(f)!==(h!==null&&!Wr.isResourceFormat(u.get(f)))))throw new Error("Invalid bundle metadata inventory");if([...a].some(f=>u.get(f)!=="resource:base64"))throw new Error("Invalid bundle metadata inventory")}else{if(!e.json||typeof e.json!="object"||![null,void 0].includes(e.namesCount)&&(!Number.isSafeInteger(e.namesCount)||e.namesCount<0))throw new Error("Invalid sourcemap metadata");if(!Array.isArray(e.json.sources)||e.json.sources.some(d=>!i.has(d))||!Array.isArray(e.sourceSizes)||e.sourceSizes.length!==e.json.sources.length||e.sourceSizes.some(d=>d!==null&&(!Number.isSafeInteger(d)||d<0))||[...i].some(([d,u])=>o.has(d)!==(u!==null))||a.size>0)throw new Error("Invalid sourcemap inventory");l.json=e.json,l.sourceSizes=e.sourceSizes,l.namesCount=e.namesCount}if(e.codeStats===void 0)l.codeStats=Cf(s,i);else{let d=e.codeStats,u=f=>Number.isSafeInteger(f)&&f>=0;if(!d||![d.files,d.lines,d.bytes].every(u)||!Array.isArray(d.languages)||d.languages.some(f=>!f||typeof f.key!="string"||typeof f.label!="string"||![f.files,f.lines,f.bytes].every(u)))throw new Error("Invalid bundle code stats");l.codeStats=d}return l}function H8(e,{integrity:t,kind:n,size:r}){if(n==="stasis")return{integrity:t,kind:n,size:r,bundle:Wr.parse(e)};if(n!=="sourcemap")throw new Error("Unsupported bundle format");let o=JSON.parse(e);if(!Array.isArray(o?.sources)||o.sources.some(i=>typeof i!="string")||o.sourcesContent!==void 0&&(!Array.isArray(o.sourcesContent)||o.sourcesContent.some(i=>i!==null&&typeof i!="string")))throw new Error("Invalid sourcemap");return{integrity:t,kind:n,size:r,json:o}}var Jq,$S,wy,Xq,W8=$(()=>{"use strict";mS();of();_f();Le();Ut();Tf();Jq=4,$S=Jq,wy=new WeakMap,Xq=new Set(["terminal","code","search","compare"])});var vd=$(()=>{"use strict";W8()});async function _S(e){try{let t=await tg(e);return t?If(t,e):null}catch{return null}}function Ni(e,t,{sources:n=!0}={}){if(!t.managedId&&A())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?Zq:Qq,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",i=c.bundleDetails;if(i?.integrity===e&&i.kind===o&&i.managedId===t.managedId&&!i.error&&(!n||!i.metadataOnly))return Promise.resolve(i);let s=`${t.managedId??"local"}:${e}:${o}`,a=t.managedId&&n?Cn():void 0,l=r.get(s);if(l&&l.signal===a)return l.job;let d=(async()=>{if(t.managedId)try{let h=n?H8(await V8(t.managedId,{signal:a}),{integrity:e,kind:o,size:t.size}):If(await xy(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 _S(e);return h?.kind===o&&!h.stale?h:Ni(e,t)}let[u,f]=await Promise.all([eY(e,t),_S(e)]);if(!u.error){let h=f?.kind===u.kind&&!f.stale;h&&(u.fileHashes=f.fileHashes,u.fileSizes=f.fileSizes,u.lineCounts=f.lineCounts),h||j8(u).then(m=>ng(e,m)).catch(()=>{})}return u})();return r.set(s,{job:d,signal:a}),d.finally(()=>{r.get(s)?.job===d&&r.delete(s)}).catch(()=>{}),d}function ho(e,t=c.currentView==="bundles"?c.bundleDetailsTab:"overview",{workspaceId:n=null}={}){cn(),c.currentView="bundles",c.selectedBundle=e,c.selectedBundleWorkspace=n,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleCodeHistory=null,c.bundleSourceFindingIdx=null,c.bundleCodeSearchQuery="",c.bundleCodeSearchMode="files",c.bundleSearchQuery="",c.bundleSearchRegex=!1,c.bundleSearchCase=!1,c.bundleSearchContext=!0,c.bundleDetailsTab=t??"overview",G.showAll=!0,c.shownTriage=null}function wd(e,{preserveSource:t=!1}={}){Ys(c.bundleDetailsTab,c.bundleSourceFile)&&!Ys(e,t?c.bundleSourceFile:null)&&cn(),c.bundleDetailsTab=e,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function eY(e,t){try{let n=await Fr(e);if(A())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r){let a=JSON.parse(ut(n));return{integrity:e,kind:o,size:n.byteLength,json:a}}let i=ut(await N8(n,()=>!A())),s=Wr.parse(i);return{integrity:e,kind:o,size:n.byteLength,bundle:s}}catch(i){if(i.name==="AbortError")throw i;return{integrity:e,kind:o,size:n.byteLength,error:i.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function tY(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){lp(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Mf(e);if(lp(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,F()}catch{}})()}}function CS(e){if(_1(e))return Promise.resolve();if(Lf.has(e))return Lf.get(e);let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await _S(e);if(!(!r?.json&&!r?.bundle))try{let o=await Mf(r);lp(e,o)}catch{}})();return Lf.set(e,n),n.finally(()=>{Lf.get(e)===n&&Lf.delete(e)}).catch(()=>{}),n}async function ES(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 CS(r)}}}async function oi(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await Ni(e,t,{sources:Ys(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,F(),tY(n),t.managedId||Br().catch(()=>{}))}function Al(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Cn():void 0,n=ky.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(i=>i.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=Ni(e.integrity,r).then(i=>(t?.throwIfAborted(),c.bundleDetails!==e?i:i.error&&e.managedId?(e.sourceError=i.error,F(),null):(i.error||(i.fileHashes=e.fileHashes,i.fileSizes=e.fileSizes,i.lineCounts=e.lineCounts,i.codeStats=e.codeStats),c.bundleDetails=i,F(),i))).catch(i=>{if(i.name==="AbortError")return null;throw i});return ky.set(e,{job:o,signal:t}),o.finally(()=>{ky.get(e)?.job===o&&ky.delete(e)}).catch(()=>{}),o}var Zq,Qq,Lf,ky,ii=$(()=>{"use strict";_f();q();xn();Ut();fS();ri();ln();Ml();vd();Zq=new Map,Qq=new Map,Lf=new Map,ky=new WeakMap});var $r=$(()=>{"use strict";Tf()});function kd(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),i=[];for(let s of r.split("/"))if(!(!s||s==="."))if(s===".."&&i.length>0&&i.at(-1)!=="..")i.pop();else{if(s===".."&&o&&i.length===0)return null;i.push(s)}return n+(o?"/":"")+i.join("/")}function G8(e){let t=new Map;for(let n of e.keys()){let r=kd(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function nY(e,t,n,r){let o=kd(n);if(o===null)return null;let i=typeof r=="string"?kd(`${r}/package.json`):null,s=o.slice(0,o.lastIndexOf("/")+1),a=K8.get(e);for(a||(a=new Map,K8.set(e,a));;){if(s.endsWith("node_modules/"))return null;let l=`${s}package.json`;if(t.has(l)){if(!a.has(l)){let u=e.get(t.get(l)),f=null;try{f=typeof u=="string"?JSON.parse(u.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:s,imports:a.get(l)}}if(l===i||!s||s==="/"||s.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(s))return null;let d=s.slice(0,-1);s=d.slice(0,d.lastIndexOf("/")+1)}}function rY(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 i=r.slice(0,o),s=r.slice(o+1);t.length<=i.length+s.length||!t.startsWith(i)||!t.endsWith(s)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:s})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function Y8(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=>Y8(r,t,n+1)):[null]}function oY(e,t,n,r,o,i){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let s=e.startsWith("./"),a=null;if(s){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(h=>[".","..","node_modules"].includes(h.toLowerCase())))return null;a=kd(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(s)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&kd(i+f)===a&&l.add(f);let d=!1,u=null;for(let f of l){if(!o?.has(f))continue;let h=o.get(f);if(typeof h!="string"||!n.has(h)||d&&h!==u)return null;d=!0,u=h}return d?u:s?r.get(a)??null:null}function iY(e,t,n,r,o,i){let s=rY(e?.imports,t);if(!s)return null;let a=Y8(s.value,s.wildcard),l=null;for(let d of a){let u=oY(d,e,n,r,o,i);if(!u||l&&u!==l)return null;l=u}return l}function RS(e,t=Wt(e)){let n=new Map;if(e?.kind==="stasis")for(let r of e.bundle?.imports?.values()??[])for(let[o,i]of r){if(!t.has(o))continue;n.has(o)||n.set(o,new Map);let s=n.get(o);for(let[a,l]of i){let d=typeof l=="string"&&t.has(l)?l:null;s.set(a,s.has(a)&&s.get(a)!==d?null:d)}}return n}function Sy(e,t,n=null,r=e,o=null){let i=$y.get(e);i||(i=G8(e),$y.set(e,i));let s=$y.get(r);s||(s=G8(r),$y.set(r,s));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),d=n?nY(r,s,t,o?.get(t)):null;return u=>{if(typeof u!="string"||/\p{Cc}/u.test(u))return null;if(a?.has(u)){let m=a.get(u);return typeof m=="string"&&e.has(m)?m:null}if(u.startsWith("#"))return iY(d,u,e,i,a,l);if(!u.startsWith("./")&&!u.startsWith("../"))return null;let f=u.slice(u.lastIndexOf("/")+1),h=f.lastIndexOf(".");return h<=0||h===f.length-1?null:i.get(kd(l+u))??null}}function TS(e,t){let n=Wt(e),r=q8.get(n);return r||(r={imports:RS(e,n),packageDirs:Zt(e)},q8.set(n,r)),Sy(n,t,r.imports,On(e),r.packageDirs)}var $y,K8,q8,MS=$(()=>{"use strict";Tf();$y=new WeakMap,K8=new WeakMap;q8=new WeakMap});function _y(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)}function AS(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!_y(e[0],n))return{stack:sY,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function J8({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(_y(o,r))return null;let i=e.length>0?e.slice(0,t+1):[n];return{stack:[...i,r],at:i.length}}function X8(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}var sY,Cy=$(()=>{"use strict";sY=[]});function xd(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(),i=r.top-n+e.scrollTop,s=o.bottom-n+e.scrollTop,a=i+(s-i)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,i-r.height)),behavior:"instant"})}var Ey=$(()=>{"use strict"});function Q8(e,t,n,r,o,i=LS,s=aY){let a=`${e}\0${t}`;if(i.has(a)||s.has(a))return;let l=xr(t,r);if(!l){i.set(a,null);return}s.add(a),(async()=>{let d=await Hr(n,l,o);i.set(a,d??null),s.delete(a),c.focusCodeTick++,queueMicrotask(F)})()}async function lY(e){let t=Ff.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){Ff.set(e,{sources:null,loading:!0,error:null});try{let r=await Ni(e,n),o=Wt(r);Ff.set(e,{sources:o,packageFiles:On(r),packageDirs:Zt(r),imports:RS(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){Ff.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(F),queueMicrotask(Di)}}function Di(){let e=V.querySelectorAll(".focus-code-line-active");e.length!==0&&xd(e[0].closest(".focus-code-body"),e)}function Bf(e){if(A()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Sd(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 i of o){let s=Of(r,i?.file);if(s)return{...r,file:s,line:i.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:tl(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function Of(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return S1(e.integrity,t);let n=Sd(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 eL(e,t,n){if(!A())return null;let r=Sd(e);if(!r||r.data===void 0&&!r.error)return n&&!IS.has(e)&&(IS.add(e),Ty(e).catch(()=>{}).finally(()=>{IS.delete(e),c.focusCodeTick++,queueMicrotask(F),queueMicrotask(Di)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let i=o.sources.get(t);if(typeof i!="string")return null;let s=Z8.get(o);return s||(s={cache:new Map,pending:new Set},Z8.set(o,s)),Q8(o.integrity,t,i,o.formats?.get(t),Sy(o.sources,t,o.imports,o.sources,o.packageDirs),s.cache,s.pending),{content:i,highlighted:s.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function Il(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return eL(r,t,n);if(A())return null;let o=Ff.get(e);if(!o)return n?(lY(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let i=o.sources.get(t);if(typeof i!="string")return null;Q8(e,t,i,o.formats?.get(t),Sy(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let s=`${e}\0${t}`;return{content:i,highlighted:LS.has(s)?LS.get(s):void 0,loading:!1}}function tL(e){let t=Bf(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:$n(t.reportId?t.line:e.line)}:null}function cY(e){return e?tL(ct(e)):null}function $d(e){let t=cY(e);return t?{base:t,...AS(c.focusCodeStack,c.focusCodeAt,t)}:null}function nL(e){let t=tL(e);return t?AS(c.focusCodeStack,c.focusCodeAt,t).pos:null}function rL(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let i=ct(e),s=Il(t,r,{kick:!1,reportId:i?._managedReportId});return s&&!s.loading?{integrity:t,file:r,range:null}:null}function oL(e){let t=e&&ct(e),n=Bf(t);if(n?.reportId&&!n.integrity)return eL(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,i=Il(o.integrity,o.file,{reportId:t?._managedReportId});return!i||i.loading?i:{...i,file:o.file,integrity:o.integrity,range:o.range}}var Ff,LS,aY,Z8,IS,Ry=$(()=>{"use strict";q();xn();Ht();ii();$r();MS();Cy();Fe();Cl();ln();nr();Ey();Ff=new Map,LS=new Map,aY=new Set,Z8=new WeakMap,IS=new Set});function _d(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=le(e);if(!Bn(r))return null;if(A()){let s=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=dr(Yt({view:"findings",teamId:c.currentManagedTeam,reportId:s,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",i=c.currentWorkspace||Js(o);return q0({id:r,report:c.currentWorkspace?null:Dm("report",o),workspace:Dm("workspace",i??"")})}function Js(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=kp(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function Xs(e){for(let t of[kr(),zI()])for(let n of t)for(let r of n)if(le(r)===e)return{group:n,finding:r};return null}function FS(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Et());let n=kt(e).commonTriage;if(c.viewMode==="kanban"){let s=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==s&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(s=>s.isUpstream)&&(c.upstreamOnly=!1),Ns(c.showRevalidation,c.upstreamOnly);let r=e.find(s=>le(s)===t);if(wl(r)||Xb(ti())&&!bI(e)||!ei(e).some(s=>le(s)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,Ns(c.showRevalidation,c.upstreamOnly);let s=kr().find(a=>a.some(l=>le(l)===t));if(s)return FS(s,t)}else c.revalidationDetailed=!0;if(Ws([e]).length===0){let s=c.sortBy;md(),c.sortBy=s}let i=Te(e);return e.length>1&&c.activeTabByGroup.set(i,t),c.viewMode==="table"?c.tableSelectedGid=i:c.viewMode==="focus"?c.focusGid=i:c.viewMode==="kanban"&&(c.kanbanPopoverGid=i),i}var Zs=$(()=>{"use strict";q();Ti();po();Ht();Fe();ri()});function iL(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function sL(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 BS=$(()=>{"use strict"});function My(e,t){Pf.has(e)||Pf.set(e,new Set);let n=Pf.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&Pf.delete(e)}}function OS(e,t){c.managedComments.set(e,t);for(let n of Pf.get(e)??[])n()}function si(e){return A()?c.managedComments?.get(e?.id)??[]:[]}function Ay(){return A()&&c.managedSession!=null&&sd(c.managedSession.role,"triage")}function Iy(e){return Ay()&&iL(e,c.managedSession)}function Nf(e){let t=c.reports,n=c.managedSession?.id;return()=>A()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function Cd(e,{signal:t,readAnnotations:n}={}){let r=Nf(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(d=>d.map(u=>u.id)))),i=new Map([...o].map(l=>[l,c.managedComments.get(l)])),s=n?(await n(e))?.comments:await cL(e,c.currentManagedTeam,{signal:t});if(!r()||s==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of s)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,d]of a)c.managedComments.get(l)===i.get(l)&&OS(l,d);return!0}async function aL(e,t,n=null){let r=e?._managedReportId,o=Nf(r);if(!o()||!Ay())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let i=await dL(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(i.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==i.comment.id);a.push(i.comment),a.sort(sL),OS(e.id,a)}return i}async function lL(e,t){let n=e?._managedReportId,r=Nf(n);if(!r()||!Iy(t))return 403;let o=await uL(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let i=c.managedComments.get(e.id)??[];OS(e.id,i.filter(s=>s.id!==t.id))}return o}var Pf,Ed=$(()=>{"use strict";q();Yp();BS();xn();Pf=new Map});var pL,fL=$(()=>{Yr();Ea();Hh();pL=Er(class extends Un{constructor(){super(...arguments),this.key=b}render(e,t){return this.key=e,t}update(e,[t,n]){return t!==this.key&&(nc(e),this.key=t),n}})});var hL=$(()=>{fL()});function PS(e,t){return e?pL(e,p`<span class="managed-comment-avatar" aria-hidden="true"><span>${(t?.[0]??"?").toUpperCase()}</span> ${Ko()?b:p`<img alt="" src="${`/api/avatar/${encodeURIComponent(e)}`}" loading="lazy" @error="${n=>{n.currentTarget.hidden=!0}}">`}</span>`):b}function dY(e){let t=e.version>1&&e.updatedAt!=null,n=e.createdAt??(t?e.updatedAt:null);if(n==null)return b;let r=new Date(n),o=[e.createdAt==null?"":`Posted ${new Date(e.createdAt).toLocaleString()}`,t?`Edited ${new Date(e.updatedAt).toLocaleString()}`:""].filter(Boolean).join(`
|
|
136
|
+
`);r+=a[0];for(let u=1;u<a.length;u++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[u]}if(i===-1)break;let l=e.indexOf(">",i);if(l===-1){r+=e.slice(i);break}let d=e.slice(i,l+1);d.startsWith("</")?n.pop():n.push({open:d,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(d)?.[1]??"span"}>`}),r+=d,o=l+1}return t.push(r),t}var cy,hq,Cl=$(()=>{"use strict";ly();cy=null;hq={__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 mq(){rS||(rS=!0,queueMicrotask(()=>{rS=!1,c.codeBlockTick++,F()}))}function oS(e,t){let n=ZI(t);if(!n||!e)return null;let r=`${n}\0${e}`;return tS.has(r)?tS.get(r):(nS.has(r)||(nS.add(r),(async()=>{let o=await Hr(e,n);tS.set(r,o??null),nS.delete(r),mq()})()),null)}var tS,nS,rS,e8=$(()=>{"use strict";q();Cl();ln();tS=new Map,nS=new Set,rS=!1});function kq(e,t,n){if(e===t)return e;let r=iS(e);if(r!==iS(t)&&t8(e)===t8(t))return r?t:e;throw new Error(`format conflict for '${n}' ('${t}' vs '${e}')`)}function El(e,t){return t===""?e:e==="."?t:`${e}/${t}`}function sS({name:e,version:t,ecosystem:n,repo:r,files:o},i,s){return ue(n===void 0||typeof n=="string"),uy({name:e,version:t??void 0,ecosystem:n,repo:s8(i,{ecosystem:n,repo:r},s),files:fo(Object.entries(o))})}function a8(e,{scope:t="full"}={}){let n=new Set;for(let[r,{files:o}]of e)if(!(t!=="full"&&!Tl(r)))for(let i of Object.keys(o))n.add(El(r,i));return n}function Cq(e,{what:t,files:n,formats:r,scope:o}){if(e.includes("\\"))return"holds a '\\'";if(Sf(e))return"escapes the root";if(o!=="full"&&!Tl(e))return`is outside node_modules, which a '${o}'-scope ${t} does not record`;if(!n.has(e))return`names no file the ${t} records`;let i=r.get(e);return i==="directory"?"is a directory capture, not a file":iS(i)?`is a payload-free '${i}' record, not a file`:null}function l8(e,{what:t,files:n,formats:r,scope:o}){for(let i of e){let s=Cq(i,{what:t,files:n,formats:r,scope:o});ue(s===null,`${t}: executable entry '${i}' ${s}`)}}function c8(e,{what:t,files:n,formats:r,scope:o="full"}){if(e===void 0)return new Set;let i=`${t}: executable`;ue(Array.isArray(e),`${i} must be an array of file paths`);let s=new Set;for(let a of e)ue(typeof a=="string"&&a!=="",`${i} entry must be a non-empty string`),ue(!s.has(a),`${i} entry '${a}' is listed twice`),s.add(a);return l8(s,{what:t,files:n,formats:r,scope:o}),s}function d8(e,{what:t,modules:n,formats:r,scope:o}){if(e.size!==0)return l8(e,{what:t,files:a8(n,{scope:o}),formats:r,scope:o}),hy(e)}function ue(e,t){if(!e)throw new Error(t)}function u8(e,t){let[n,r]=[e.split("/"),t.split("/")];for(;n.length>0&&n[0]===r[0];)n.shift(),r.shift();if(n.length===0&&r.length===0)return 0;if(n.length<2)return r.length<2&&n>r?1:-1;if(r.length<2)return 1;if(n[0]==="*")return-1;if(r[0]==="*"||n[0]==="node_modules")return 1;if(r[0]==="node_modules")return-1;let[o,i]=[n,r].map(s=>s.join(String.fromCodePoint(0)));if(o<i)return-1;if(o>i)return 1;throw new Error("Unreachable")}function Sf(e){if(e.startsWith("/"))return!0;if(!e.includes(".."))return!1;let t=0;for(let n of e.split("/"))if(!(n==="."||n==="")){if(n!=="..")t++;else if(--t<0)return!0}return!1}function m8(e,t){ue(Array.isArray(e),`${t}: entries must be an array of file paths`);let n=new Set;for(let r of e)h8(r,t),ue(!n.has(r),`${t}: entry '${r}' is listed twice`),n.add(r);return n}function g8(e,t){for(let n of e)h8(n,t);return hy(e)}function b8(e,t){Pi(e,"formats"),ue(wq.has(t),`unknown format '${t}' for ${e}`)}function y8(e){ue(Rl(e));let t=new Map;for(let[n,r]of Object.entries(e)){b8(n,r);let o=n===""?".":n;ue(!t.has(o),`duplicate format key '${o}'`),t.set(o,r)}return t}function v8(e){for(let[t,n]of e)b8(t,n);return aS(e)}function w8(e){for(let[,t]of e){ue(t instanceof Map);for(let[n,r]of t){Pi(n,"imports"),ue(r instanceof Map);for(let[,o]of r){if(typeof o=="string"){Pi(o,"imports");continue}ue(o instanceof Map&&o.size>0,"import target must be a file or a non-empty {platform: file} map");for(let[i,s]of o)ue(typeof i=="string"&&i.length>0&&!i.includes("/"),`invalid platform key '${i}'`),ue(typeof s=="string"),Pi(s,"imports")}}}}function k8(e){ue(Rl(e));let t=p8(e);return w8(t),t}function x8(e){return w8(e),aS(e)}function $8(e,{skipEmpty:t=!1,repo:n=!0,what:r}={}){let o={modules:[],sources:[]};for(let[i,s]of e){if(t&&Object.keys(s.files).length===0)continue;let a=Tl(i);a&&ue(s.name&&s.version&&s.files);let l=fo(Object.entries(s.files).toSorted(dy));o[a?"modules":"sources"].push([i,uy({...s,repo:n?s8(i,s,r):void 0,files:l})])}return{modules:fo(o.modules.toSorted(dy)),sources:fo(o.sources.toSorted(dy))}}function Eq(e,t){let n=e instanceof Map;if(n!==t instanceof Map)return!1;if(!n)return e===t;if(e.size!==t.size)return!1;for(let[r,o]of e)if(t.get(r)!==o)return!1;return!0}function S8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=n8(r,s);for(let[d,u]of a){let f=n8(l,d);for(let[h,m]of u)f.has(h)?ue(Eq(f.get(h),m),`${n}: import '${h}' from '${d}' resolves differently ('${r8(f.get(h))}' vs '${r8(m)}')`):f.set(h,m instanceof Map?new Map(m):m)}}};return o(e),o(t),r}function _8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=r.get(s);if(l===void 0){r.set(s,a);continue}try{r.set(s,kq(a,l,s))}catch(d){throw new Error(`${n}: ${d.message}`,{cause:d})}}};return o(e),o(t),r}function C8(e,t,n,r){if(e.size===0)return new Set(t);let o=a8(n,{scope:r}),i=new Set(t);for(let s of e)o.has(s)||i.add(s);return i}function my(e,t,n){let r=El(e,t);return(r!=="."||t!=="")&&Rq.test(r)&&ue(!1,`${n}: non-canonical file key ${JSON.stringify(r)}`),r.includes("\\")&&ue(!1,`${n}: file key '${r}' holds a '\\', which no path may`),r}function gy(e,t,n){let r=new Map;for(let[o,{files:i}]of e){typeof o!="string"&&ue(!1,`${t}: bucket dir ${String(o)} is not a string`),Pi(o,t);for(let s of Object.keys(i)){let a=my(o,s,t),l=r.get(a);l!==void 0&&n(a,l,o),r.set(a,o)}}return r}function R8(e,t,n){let r=new Map,o=i=>{for(let[s,a]of i){let l=r.get(s);if(l===void 0){r.set(s,uy({...a,files:Object.assign(Object.create(null),a.files)}));continue}ue(l.name===a.name,`${n}: module '${s}' name mismatch ('${l.name}' vs '${a.name}')`),ue(l.version===a.version,`${n}: module '${s}' version mismatch ('${l.version}' vs '${a.version}')`+(l.version==null==(a.version==null)?"":" -- an artifact from an older stasis may record a placeholder version for a workspace package without one; regenerate it (bundle=replace / lock=replace)")),ue(l.ecosystem===a.ecosystem,`${n}: module '${s}' ecosystem mismatch ('${l.ecosystem??"(none)"}' vs '${a.ecosystem??"(none)"}')`),l.repo===void 0&&a.repo!==void 0&&r.set(s,uy({...l,repo:a.repo}));for(let[d,u]of Object.entries(a.files))Object.hasOwn(l.files,d)?ue(l.files[d]===u,`${n}: content mismatch for '${El(s,d)}'`):l.files[d]=u}};return o(e),o(t),gy(r,n,(i,s,a)=>ue(!1,`${n}: file '${i}' is bucketed under both '${s}' and '${a}' -- module bucketing changed between the artifacts (a workspace package without a version now owns its own bucket); regenerate the artifact (bundle=replace / lock=replace)`)),r}function Tl(e){return e.split("/").includes("node_modules")}function Tq(e){let t="node_modules/",n=e.length;for(;(n=e.lastIndexOf(t,n-1))!==-1;)if(n===0||e[n-1]==="/")return n;return-1}function T8(e){let t="node_modules/",n=Tq(e);if(n===-1)return null;let r=n+t.length,o=e.slice(r).split("/"),i=o[0].startsWith("@")?2:1;if(o.length<=i||o.slice(0,i).some(a=>!a))return null;let s=o.slice(0,i).join("/");return{dir:e.slice(0,r)+s,rel:o.slice(i).join("/"),name:s}}var gq,bq,yq,vq,o8,wq,iS,t8,xq,$q,Sq,$f,i8,py,fy,_q,s8,uy,dy,Rl,fo,hy,aS,n8,p8,f8,Pi,h8,r8,Rq,E8,M8=$(()=>{gq=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),bq=new Set(["solidity","php","shell","rust"]),yq=new Set(["java","kotlin","gradle","objc","objcpp","swift","c","cpp","c-header","cpp-header","ruby","python","cmake","podspec","podfile","podfile-lock","template","xml","env","fastlane","pbxproj"]),vq=new Set(["resource","resource:base64"]),o8=new Set(["stat:file","stat:directory"]),wq=new Set([...gq,...bq,...yq,...vq,"patch","directory",...o8]),iS=e=>o8.has(e),t8=e=>e==="directory"||e==="stat:directory"?"directory":"file";xq=/^(?=[A-Za-z0-9-]{1,39}\/)[A-Za-z0-9](?:-?[A-Za-z0-9])*\/(?!\.\.?$)[\w.-]{1,100}$/u,$q=/^(?!\.\.?(?:\/|$))[\w.~@+-]+(?:\/(?!\.\.?(?:\/|$))[\w.~@+-]+)*$/u,Sq=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u,$f={github:e=>typeof e=="string"&&xq.test(e),directory:e=>typeof e=="string"&&e.length<=1024&&(e===""||$q.test(e)),commit:e=>typeof e=="string"&&Sq.test(e)},i8=(e,t)=>e?.toLowerCase()===t?.toLowerCase(),py=(e,t,n)=>{if(e===void 0)return;Rl(e)||ue(!1,`${n} must be an object`);for(let o of Object.keys(e))Object.hasOwn(t,o)||ue(!1,`unknown ${n} key '${o}'`);let r=Object.entries(t).map(([o,i])=>typeof i=="object"?[o,py(e[o],i,`${n}.${o}`)]:(e[o]!==void 0&&!i(e[o])&&ue(!1,`invalid ${n}.${o}: ${JSON.stringify(e[o])}`),[o,e[o]])).filter(([,o])=>o!==void 0);return r.length===0?void 0:Object.freeze(fo(r))},fy=(e,t="bundle repo")=>py(e,$f,t),_q=(e,t)=>t??(Tl(e)?"npm":void 0),s8=(e,{ecosystem:t,repo:n},r)=>{if(n===void 0)return;_q(e,t)===void 0&&ue(!1,`${r}: '${e}' is no dependency's bucket, and carries no repo`);let o=fy(n,`${r} module '${e}' repo`);return o?.github===void 0&&ue(!1,`${r} module '${e}' repo has no github`),o},uy=({name:e,version:t,ecosystem:n,repo:r,files:o})=>({name:e,version:t,...n===void 0?{}:{ecosystem:n},...r===void 0?{}:{repo:r},files:o});dy=(e,t)=>u8(e[0],t[0]),Rl=e=>e&&[null,Object.prototype].includes(Object.getPrototypeOf(e)),fo=e=>Object.setPrototypeOf(Object.fromEntries(e),null),hy=e=>[...e].toSorted(u8),aS=(e,{sorted:t=!0}={})=>{let n=t?[...e].toSorted(dy):[...e];return fo(n.map(([r,o])=>[r,o instanceof Map?aS(o,{sorted:t}):o]))},n8=(e,t)=>e.get(t)??e.set(t,new Map).get(t),p8=e=>new Map(Object.entries(e).map(([t,n])=>[t,Rl(n)?p8(n):n]));f8=e=>e.includes("\\")||Sf(e),Pi=(e,t)=>ue(!f8(e),`${t}: path '${e}' escapes the root or holds a '\\'`),h8=(e,t)=>ue(typeof e=="string"&&e!==""&&!f8(e),`${t}: invalid entry ${JSON.stringify(e)}`);r8=e=>e instanceof Map?`{${[...e].map(([t,n])=>`${t}: ${n}`).join(", ")}}`:e;Rq=/(?:^|\/)\.{0,2}(?:\/|$)/u;E8=(e,t)=>n=>ue(!1,`duplicate file key '${n}' across ${e} buckets -- module bucketing changed between writes (a workspace package without a version now owns its own bucket); regenerate the ${t}`)});function Mq(){throw new Error("bundle: file contents are not retained by this contents-free Bundle")}var Gs,A8,I8,L8,Aq,lS,dS,Iq,Lq,F8,cS,B8,Fq,Wr,_f=$(()=>{M8();Gs=1,A8=0,I8=E8("bundle","artifact (bundle=replace)"),L8=e=>T8(e)??{dir:".",rel:e==="."?"":e,name:null};Aq=(e,{files:t,...n})=>{let r=Object.create(null);for(let[o,i]of Object.entries(t))typeof i!="symbol"&&ue(!1,`bundle: file '${El(e,o)}' is not a placeholder`),Object.defineProperty(r,o,{get:Mq,enumerable:!0});return{...n,files:Object.freeze(r)}},lS=(e,t)=>{if(e===void 0&&t===void 0)return;let n=new Map;for(let r of[e,t])for(let[o,i]of Object.entries(r??{})){if(!Array.isArray(i))continue;let s=n.get(o);s===void 0&&n.set(o,s=new Set);for(let a of i)s.add(a)}return fo([...n.keys()].toSorted().map(r=>[r,hy(n.get(r))]))},dS=(e,t)=>Object.hasOwn($f,e)&&$f[e](t),Iq=(e,t)=>{if(e?.github===void 0||!i8(e.github,t?.github))return;let n=Object.keys($f).filter(r=>e[r]!==void 0&&(r==="github"||e[r]===t[r]));return fo(n.map(r=>[r,e[r]]))},Lq=e=>{if(!Rl(e)||e.root!==!0||Object.hasOwn(e,"directory"))return e;let{root:t,...n}=e;return n},F8=e=>typeof e=="string"&&/^[\w.+@/~'!()*-]+$/u.test(e),cS={name:F8,version:F8},B8={npm:cS,composer:cS,cargo:cS},Fq=(e,t)=>fo(Object.keys(B8).map(n=>{let[r,o]=[e?.[n],t?.[n]];return[n,r?.name!==void 0&&r.name===o?.name?fo(Object.entries(r).filter(([i,s])=>s===o[i])):void 0]})),Wr=class e{static VERSION=Gs;version=Gs;config;entries;modules;formats;imports;executable;reason;#e;get repo(){return this.#e}set repo(t){this.#e=fy(t)}#t;get package(){return this.#t}set package(t){this.#t=py(t,B8,"bundle package")}constructor({config:t={scope:"full"},entries:n,modules:r,formats:o,imports:i,executable:s,reason:a,repo:l,package:d,version:u=Gs}={}){ue([A8,Gs].includes(u)),ue(["node_modules","full"].includes(t.scope)),this.version=u,this.config=t,this.entries=n??new Set,this.modules=r??new Map,this.formats=o??new Map,this.imports=i??new Map,this.executable=s??new Set,this.reason=a,this.repo=fy(l),this.package=d}get sources(){let t=new Map;for(let[n,{files:r}]of this.modules)for(let[o,i]of Object.entries(r))t.set(El(n,o),i);return t}static isResourceFormat(t){return t==="resource"||t==="resource:base64"||t==="directory"}get hasCode(){for(let[t,{files:n}]of this.modules)for(let r of Object.keys(n))if(!e.isResourceFormat(this.formats.get(El(t,r))))return!0;return!1}static parse(t){return e.fromJSON(JSON.parse(t))}static fileKeyAt(t){let[n,r,o,i]=t;if(typeof r=="string"){if(t.length===2&&n==="sources"){let s=L8(r);return my(s.dir,s.rel,"bundle")}if(t.length===4&&(n==="sources"||n==="modules")&&o==="files"&&typeof i=="string")return my(r,i,"bundle")}}static fromJSON(t,{contents:n=!0}={}){ue(t.version===Gs||t.version===A8),ue(["node_modules","full"].includes(t.config?.scope));let r=y8(t.formats),o=new Map,i=new Set;if(t.version===Gs){let l=t.config.scope==="full";if(t.modules!==void 0){ue(typeof t.modules=="object"&&t.modules!==null);for(let[d,u]of Object.entries(t.modules))ue(Tl(d)),Pi(d,"bundle"),ue(u?.name&&u.version&&u.files),o.set(d,sS(u,d,"bundle"))}if(l){ue(t.sources&&typeof t.sources=="object");for(let[d,u]of Object.entries(t.sources))ue(!Tl(d)),Pi(d,"bundle"),ue(u?.name&&u.files),o.set(d,sS(u,d,"bundle"));t.entries!==void 0&&(i=m8(t.entries,"bundle"))}else ue(t.entries===void 0),ue(t.sources===void 0)}else{ue(t.sources);for(let[l,d]of Object.entries(t.sources)){Pi(l,"bundle");let{dir:u,rel:f,name:h}=L8(l);ue(!Sf(u)&&!Sf(f)),o.has(u)||o.set(u,{name:h,version:null,files:Object.create(null)});let{files:m}=o.get(u);ue(!Object.hasOwn(m,f),"bundle: duplicate file key '.' (v0 '' and '.')"),m[f]=d}}let s=gy(o,"bundle",I8),a=k8(t.imports);if(!n)for(let[l,d]of o)o.set(l,Aq(l,d));return new e({version:t.version,config:t.config,entries:i,modules:o,formats:r,imports:a,executable:t.version===Gs?c8(t.executable,{what:"bundle",files:s,formats:r,scope:t.config.scope}):new Set,reason:Rl(t.reason)?t.reason:void 0,repo:Lq(t.repo),package:t.package})}serialize(){gy(this.modules,"bundle",I8);let{modules:t,sources:n}=$8(this.modules,{skipEmpty:!0,what:"bundle"}),r=this.config.scope==="full",o={version:Gs,config:this.config};this.repo!==void 0&&(o.repo=this.repo),this.package!==void 0&&(o.package=this.package),r&&(o.entries=g8(this.entries,"bundle")),o.formats=v8(this.formats),o.imports=x8(this.imports);let i=d8(this.executable,{what:"bundle",modules:this.modules,formats:this.formats,scope:this.config.scope});return i!==void 0&&(o.executable=i),this.reason!==void 0&&(o.reason=lS(this.reason,void 0)),r&&(o.sources=n),o.modules=t,JSON.stringify(o,void 0,2)}withReason(t){let{version:n,config:r,entries:o,modules:i,formats:s,imports:a,executable:l,repo:d,package:u}=this,f=lS(this.reason,{[t]:[...this.sources.keys()]});return new e({version:n,config:r,entries:o,modules:i,formats:s,imports:a,executable:l,reason:f,repo:d,package:u})}merge(t){return ue(this.config.scope===t.config.scope,`bundle merge: scope mismatch ('${this.config.scope}' vs '${t.config.scope}')`),new e({config:{scope:this.config.scope},entries:new Set([...this.entries,...t.entries]),modules:R8(this.modules,t.modules,"bundle merge"),formats:_8(this.formats,t.formats,"bundle merge"),imports:S8(this.imports,t.imports,"bundle merge"),executable:C8(this.executable,t.executable,t.modules,this.config.scope),reason:lS(this.reason,t.reason),repo:Iq(this.repo,t.repo),package:Fq(this.package,t.package)})}}});function Bq(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function Oq(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function Pq(){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{}}function Dq(){return yy||(yy=(async()=>await import(O8))(),yy)}function pS(){uS=!0,ni&&(ni.terminate(),ni=null);let e=[...bd.values()];bd.clear();for(let t of e)t.resolve(vy)}function zq(e){let{id:t,bytes:n,error:r}=e.data??{},o=bd.get(t);o&&(bd.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function Uq(){if(ni)return ni;if(uS||typeof Worker>"u")return null;try{ni=new Worker(new URL(O8,import.meta.url),{type:"module"})}catch{return uS=!0,null}return ni.addEventListener("message",zq),ni.addEventListener("error",pS),ni.addEventListener("messageerror",pS),ni}function jq(e){let t=Uq();return t?new Promise((n,r)=>{let o=++Nq;bd.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{bd.delete(o),pS(),n(vy)}}):Promise.resolve(vy)}async function Hq(){await Pq();let e=Bq();return e?{kind:"native",format:e}:{kind:"fallback"}}function P8(){return by||(by=Hq(),by)}async function N8(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await P8();if(n(),r.kind==="native")return Oq(r.format,e);let o=await jq(e);return n(),o!==vy?o:(await Dq()).brotliDecompress(e)}var by,yy,O8,vy,ni,uS,Nq,bd,fS=$(()=>{"use strict";by=null,yy=null;O8="./brotli-fallback.js",vy=Symbol("brotli worker unavailable"),ni=null,uS=!1,Nq=0,bd=new Map;P8().catch(()=>{})});function Wq(){return{showAll:!1,packagesView:!1,dependencyPackagesView:!1,bundleLayout:"graph",bundleReason:null,bundleReasonFor:null,selected:null,focusedPkg:null,topPkgsTab:"issues",edgeOpacity:.22,nodeSize:1,showLabels:!1,selectedSeverities:new Set,selectedColors:new Set,pathFilter:"",hidden:new Set,solo:null,graphState:null,layoutCache:null}}function Et(){G.graphState?._cleanup&&G.graphState._cleanup(),G.graphState=null}function D8(){return qs}var qs,G,ri=$(()=>{"use strict";qs=Wq(),G=new Proxy(qs,{get(e,t){return qs[t]},set(e,t,n){return qs[t]=n,!0},has(e,t){return t in qs},deleteProperty(e,t){return delete qs[t]},ownKeys(){return Reflect.ownKeys(qs)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(qs,t)}})});function it(){return z8}function Cn(){return hS.signal}function cn(){return hS.abort(),hS=new AbortController,++z8}var z8,hS,Ml=$(()=>{"use strict";z8=0,hS=new AbortController});function Gq(e){let t=typeof e=="string"?e.slice(e.lastIndexOf("/")+1):"",n=t.lastIndexOf("."),r=n>0?t.slice(n+1).trim().toLowerCase():"",o=xr(e)??Kq[r];return o?{key:o,label:Vq[o]??o}:r?{key:`extension:${r}`,label:`.${r}`}:{key:"other",label:"Other"}}function Cf(e,t){let n=new Map,r=0,o=0;for(let[i,s]of e){let a=Gq(i),l=n.get(a.key)??{...a,files:0,lines:0,bytes:0};l.files++,l.lines+=s,l.bytes+=t.get(i)??0,n.set(a.key,l),o+=s,r+=t.get(i)??0}return{files:e.size,lines:o,bytes:r,languages:[...n.values()].toSorted((i,s)=>s.lines-i.lines||i.label.localeCompare(s.label))}}var Vq,Kq,mS=$(()=>{"use strict";ly();Vq=Object.freeze({javascript:"JavaScript",jsx:"JSX",typescript:"TypeScript",tsx:"TSX",json:"JSON",css:"CSS",markup:"HTML",yaml:"YAML",bash:"Shell",markdown:"Markdown",solidity:"Solidity",php:"PHP",rust:"Rust",ruby:"Ruby",java:"Java",cpp:"C++",c:"C",objectivec:"Objective-C",python:"Python",go:"Go",kotlin:"Kotlin",swift:"Swift",dart:"Dart",sql:"SQL",lua:"Lua",csharp:"C#",scala:"Scala",vue:"Vue",svelte:"Svelte"}),Kq=Object.freeze({py:"python",pyw:"python",go:"go",kt:"kotlin",kts:"kotlin",swift:"swift",dart:"dart",sql:"sql",lua:"lua",cs:"csharp",scala:"scala",sc:"scala",vue:"vue",svelte:"svelte"})});function Wt(e){if(e?.metadataOnly)return new Map;let t=e?.bundle??e?.json;if(t&&gS.has(t))return gS.get(t);let n=new Map;if(!e)return n;if(e.kind==="stasis"){if(!e.bundle)return n;let r=e.bundle.formats;for(let[o,i]of e.bundle.sources)typeof i=="string"&&(Wr.isResourceFormat(r?.get(o))||n.set(o,i))}else if(e.kind==="sourcemap"){if(!e.json)return n;let r=e.json.sources??[],o=e.json.sourcesContent??[];for(let i=0;i<r.length;i++)typeof o[i]=="string"&&n.set(r[i],o[i])}return t&&gS.set(t,n),n}function On(e){let t=e?.bundle??e?.json;if(t&&bS.has(t))return bS.get(t);let n=new Map(Wt(e));if(e?.kind==="stasis"&&e.bundle){let r=e.bundle.formats;for(let[o,i]of e.bundle.sources){if(typeof i!="string")continue;let s=r?.get(o);s==="resource"?n.set(o,i):s==="resource:base64"&&n.set(o,{format:"base64",data:i})}}return t&&bS.set(t,n),n}function Yq(e){let t=e.endsWith("=");if(t?e.length%4!==0||e.at(-3)==="=":e.length%4===1)return null;let n=t?e.slice(0,e.endsWith("==")?-2:-1):e;if(/[^A-Za-z0-9+/]/u.test(n))return null;let r=n.length%4;return r>1&&qq.indexOf(n.at(-1))&(r===2?15:3)?null:Math.floor(n.length*3/4)}function Ef(e){return typeof e=="string"?za(e):e?.format==="base64"?Yq(e.data):null}function Pn(e){if(e?.fileSizes)return e.fileSizes;let t=e?.bundle??e?.json;if(t&&yS.has(t))return yS.get(t);let n=new Map,r=On(e),o=e?.kind==="stasis"?e.bundle?.sources.keys():e?.json?.sources;for(let i of o??[])n.set(i,Ef(r.get(i)));return t&&yS.set(t,n),n}function xS(e){if(e?.metadataOnly)return e.unsizedFiles??new Set;let t=Pn(e);if(kS.has(t))return kS.get(t);let n=new Set;for(let r of On(e).keys())t.get(r)===null&&n.add(r);return kS.set(t,n),n}function yd(e){let t=Pn(e);if(wS.has(t))return wS.get(t);let n=xS(e),r=e?.kind==="stasis"?e.bundle?.formats:null,o=new Map;for(let[i,s]of t)s===null&&!n.has(i)||o.set(i,Wr.isResourceFormat(r?.get(i))?"resource":"source");return wS.set(t,o),o}function U8(e){let t=Pn(e),n=e?.kind==="stasis"?e.bundle?.formats:null;if(!n||n.size===0)return t;if(vS.has(t))return vS.get(t);let r=new Map;for(let[o,i]of t)r.set(o,Wr.isResourceFormat(n.get(o))?null:i);return vS.set(t,r),r}function Zt(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return null;let t=new Map;for(let[n,r]of e.bundle.modules)for(let o of Object.keys(r.files))t.set(n==="."?o:`${n}/${o}`,n);return t}function Rf(e,t=null){let n=new Map;if(e?.kind!=="stasis"||!e.bundle?.modules)return n;let r=t===null?null:Zt(e),o=t===null?null:new Set([...t].map(i=>r?.get(i)));for(let[i,s]of e.bundle.modules){if(o&&!o.has(i)||!i.includes("node_modules")||!s?.name||typeof s.version!="string"||!s.version)continue;let a=n.get(s.name);a||(a=new Set,n.set(s.name,a)),a.add(s.version)}return n}var gS,bS,yS,vS,wS,kS,qq,Tf=$(()=>{"use strict";_f();Ut();gS=new WeakMap,bS=new WeakMap,yS=new WeakMap,vS=new WeakMap,wS=new WeakMap,kS=new WeakMap;qq="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"});function Ys(e,t=null){return!!t||Xq.has(e)}function Mf(e){if(e.fileHashes)return Promise.resolve(e.fileHashes);if(wy.has(e))return wy.get(e);let t=(async()=>{let n=[...Wt(e)],r=new Map;for(let o=0;o<n.length;o+=32){let i=await Promise.all(n.slice(o,o+32).map(async([s,a])=>[s,await Vw(a)]));for(let[s,a]of i)r.set(s,a)}return e.fileHashes=r,r})();return wy.set(e,t),t.catch(()=>wy.delete(e)),t}function Af(e){return typeof e!="string"||e.length===0?0:(e.match(/\r\n|\r|\n/gu)?.length??0)+(/[\r\n]$/u.test(e)?0:1)}function SS(e){return e instanceof Map?Object.fromEntries([...e].map(([t,n])=>[t,SS(n)])):e}async function j8(e){let t=await Mf(e),n=Pn(e),r=e.lineCounts??=new Map([...Wt(e)].map(([s,a])=>[s,Af(a)])),o={version:$S,integrity:e.integrity,kind:e.kind,size:e.size,codeStats:Cf(r,n),files:[...n].map(([s,a])=>[s,a,t.get(s)??null,r.get(s)??null])},i=xS(e);if(i.size>0&&(o.unsized=[...i]),e.kind==="sourcemap"){let{version:s,file:a,sourceRoot:l,names:d,sources:u=[],sourcesContent:f=[]}=e.json;o.json={version:s,file:a,sourceRoot:l,sources:u},o.sourceSizes=u.map((h,m)=>typeof f[m]=="string"?za(f[m]):null),o.namesCount=d?.length??null}else{let s=e.bundle,a={version:s.version,config:s.config,repo:s.repo,package:s.package,formats:SS(s.formats),imports:SS(s.imports),reason:s.reason,executable:[...s.executable]};if(s.version===0)a.sources=Object.fromEntries([...n.keys()].map(l=>[l,null]));else{let l={},d={};for(let[u,f]of s.modules){let h=u.split("/").includes("node_modules")?l:d;Object.defineProperty(h,u,{enumerable:!0,value:{name:f.name,version:f.version,ecosystem:f.ecosystem,repo:f.repo,files:Object.fromEntries(Object.keys(f.files).map(m=>[m,null]))}})}a.modules=l,s.config.scope==="full"&&(a.sources=d,a.entries=[...s.entries])}o.bundle=a}return o}function If(e,t){if(![1,2,3,$S].includes(e?.version)||e.integrity!==t||!["stasis","sourcemap"].includes(e.kind)||!Number.isSafeInteger(e.size)||e.size<0||!Array.isArray(e.files))throw new Error("Invalid bundle metadata");let n=e.version!==$S,r=e.version===1,o=new Map,i=new Map,s=new Map;for(let d of e.files){if(!Array.isArray(d)||d.length!==4&&!(r&&d.length===3))throw new Error("Invalid bundle metadata file");let[u,f,h,m]=d;if(typeof u!="string"||i.has(u)||f!==null&&(!Number.isSafeInteger(f)||f<0)||h!==null&&(typeof h!="string"||!/^sha512-[A-Za-z0-9+/]{86}==$/u.test(h))||f===null&&h!==null||r&&f!==null&&h===null||m!=null&&(!Number.isSafeInteger(m)||m<0))throw new Error("Invalid bundle metadata file");i.set(u,f),h!==null&&o.set(u,h),m!=null&&s.set(u,m)}let a=new Set(e.unsized??[]);if(e.unsized!==void 0&&(r||!Array.isArray(e.unsized)||a.size!==e.unsized.length)||[...a].some(d=>typeof d!="string"||!i.has(d)||i.get(d)!==null))throw new Error("Invalid bundle metadata");let l={integrity:t,kind:e.kind,size:e.size,metadataOnly:!0,fileSizes:i,fileHashes:o,lineCounts:s,unsizedFiles:a,stale:n};if(e.kind==="stasis"){l.bundle=Wr.parse(JSON.stringify(e.bundle));let d=l.bundle.sources;if(d.size!==i.size||[...d.keys()].some(f=>!i.has(f)))throw new Error("Invalid bundle metadata inventory");let u=l.bundle.formats;if(!r&&[...i].some(([f,h])=>o.has(f)!==(h!==null&&!Wr.isResourceFormat(u.get(f)))))throw new Error("Invalid bundle metadata inventory");if([...a].some(f=>u.get(f)!=="resource:base64"))throw new Error("Invalid bundle metadata inventory")}else{if(!e.json||typeof e.json!="object"||![null,void 0].includes(e.namesCount)&&(!Number.isSafeInteger(e.namesCount)||e.namesCount<0))throw new Error("Invalid sourcemap metadata");if(!Array.isArray(e.json.sources)||e.json.sources.some(d=>!i.has(d))||!Array.isArray(e.sourceSizes)||e.sourceSizes.length!==e.json.sources.length||e.sourceSizes.some(d=>d!==null&&(!Number.isSafeInteger(d)||d<0))||[...i].some(([d,u])=>o.has(d)!==(u!==null))||a.size>0)throw new Error("Invalid sourcemap inventory");l.json=e.json,l.sourceSizes=e.sourceSizes,l.namesCount=e.namesCount}if(e.codeStats===void 0)l.codeStats=Cf(s,i);else{let d=e.codeStats,u=f=>Number.isSafeInteger(f)&&f>=0;if(!d||![d.files,d.lines,d.bytes].every(u)||!Array.isArray(d.languages)||d.languages.some(f=>!f||typeof f.key!="string"||typeof f.label!="string"||![f.files,f.lines,f.bytes].every(u)))throw new Error("Invalid bundle code stats");l.codeStats=d}return l}function H8(e,{integrity:t,kind:n,size:r}){if(n==="stasis")return{integrity:t,kind:n,size:r,bundle:Wr.parse(e)};if(n!=="sourcemap")throw new Error("Unsupported bundle format");let o=JSON.parse(e);if(!Array.isArray(o?.sources)||o.sources.some(i=>typeof i!="string")||o.sourcesContent!==void 0&&(!Array.isArray(o.sourcesContent)||o.sourcesContent.some(i=>i!==null&&typeof i!="string")))throw new Error("Invalid sourcemap");return{integrity:t,kind:n,size:r,json:o}}var Jq,$S,wy,Xq,W8=$(()=>{"use strict";mS();of();_f();Le();Ut();Tf();Jq=4,$S=Jq,wy=new WeakMap,Xq=new Set(["terminal","code","search","compare"])});var vd=$(()=>{"use strict";W8()});async function _S(e){try{let t=await tg(e);return t?If(t,e):null}catch{return null}}function Ni(e,t,{sources:n=!0}={}){if(!t.managedId&&A())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?Zq:Qq,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",i=c.bundleDetails;if(i?.integrity===e&&i.kind===o&&i.managedId===t.managedId&&!i.error&&(!n||!i.metadataOnly))return Promise.resolve(i);let s=`${t.managedId??"local"}:${e}:${o}`,a=t.managedId&&n?Cn():void 0,l=r.get(s);if(l&&l.signal===a)return l.job;let d=(async()=>{if(t.managedId)try{let h=n?H8(await V8(t.managedId,{signal:a}),{integrity:e,kind:o,size:t.size}):If(await xy(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 _S(e);return h?.kind===o&&!h.stale?h:Ni(e,t)}let[u,f]=await Promise.all([eY(e,t),_S(e)]);if(!u.error){let h=f?.kind===u.kind&&!f.stale;h&&(u.fileHashes=f.fileHashes,u.fileSizes=f.fileSizes,u.lineCounts=f.lineCounts),h||j8(u).then(m=>ng(e,m)).catch(()=>{})}return u})();return r.set(s,{job:d,signal:a}),d.finally(()=>{r.get(s)?.job===d&&r.delete(s)}).catch(()=>{}),d}function ho(e,t=c.currentView==="bundles"?c.bundleDetailsTab:"overview",{workspaceId:n=null}={}){cn(),c.currentView="bundles",c.selectedBundle=e,c.selectedBundleWorkspace=n,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleCodeHistory=null,c.bundleSourceFindingIdx=null,c.bundleCodeSearchQuery="",c.bundleCodeSearchMode="files",c.bundleSearchQuery="",c.bundleSearchRegex=!1,c.bundleSearchCase=!1,c.bundleSearchContext=!0,c.bundleDetailsTab=t??"overview",G.showAll=!0,c.shownTriage=null}function wd(e,{preserveSource:t=!1}={}){Ys(c.bundleDetailsTab,c.bundleSourceFile)&&!Ys(e,t?c.bundleSourceFile:null)&&cn(),c.bundleDetailsTab=e,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function eY(e,t){try{let n=await Fr(e);if(A())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r){let a=JSON.parse(ut(n));return{integrity:e,kind:o,size:n.byteLength,json:a}}let i=ut(await N8(n,()=>!A())),s=Wr.parse(i);return{integrity:e,kind:o,size:n.byteLength,bundle:s}}catch(i){if(i.name==="AbortError")throw i;return{integrity:e,kind:o,size:n.byteLength,error:i.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function tY(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){lp(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Mf(e);if(lp(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,F()}catch{}})()}}function CS(e){if(_1(e))return Promise.resolve();if(Lf.has(e))return Lf.get(e);let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await _S(e);if(!(!r?.json&&!r?.bundle))try{let o=await Mf(r);lp(e,o)}catch{}})();return Lf.set(e,n),n.finally(()=>{Lf.get(e)===n&&Lf.delete(e)}).catch(()=>{}),n}async function ES(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 CS(r)}}}async function oi(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await Ni(e,t,{sources:Ys(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,F(),tY(n),t.managedId||Br().catch(()=>{}))}function Al(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Cn():void 0,n=ky.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(i=>i.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=Ni(e.integrity,r).then(i=>(t?.throwIfAborted(),c.bundleDetails!==e?i:i.error&&e.managedId?(e.sourceError=i.error,F(),null):(i.error||(i.fileHashes=e.fileHashes,i.fileSizes=e.fileSizes,i.lineCounts=e.lineCounts,i.codeStats=e.codeStats),c.bundleDetails=i,F(),i))).catch(i=>{if(i.name==="AbortError")return null;throw i});return ky.set(e,{job:o,signal:t}),o.finally(()=>{ky.get(e)?.job===o&&ky.delete(e)}).catch(()=>{}),o}var Zq,Qq,Lf,ky,ii=$(()=>{"use strict";_f();q();xn();Ut();fS();ri();ln();Ml();vd();Zq=new Map,Qq=new Map,Lf=new Map,ky=new WeakMap});var $r=$(()=>{"use strict";Tf()});function kd(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),i=[];for(let s of r.split("/"))if(!(!s||s==="."))if(s===".."&&i.length>0&&i.at(-1)!=="..")i.pop();else{if(s===".."&&o&&i.length===0)return null;i.push(s)}return n+(o?"/":"")+i.join("/")}function G8(e){let t=new Map;for(let n of e.keys()){let r=kd(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function nY(e,t,n,r){let o=kd(n);if(o===null)return null;let i=typeof r=="string"?kd(`${r}/package.json`):null,s=o.slice(0,o.lastIndexOf("/")+1),a=K8.get(e);for(a||(a=new Map,K8.set(e,a));;){if(s.endsWith("node_modules/"))return null;let l=`${s}package.json`;if(t.has(l)){if(!a.has(l)){let u=e.get(t.get(l)),f=null;try{f=typeof u=="string"?JSON.parse(u.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:s,imports:a.get(l)}}if(l===i||!s||s==="/"||s.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(s))return null;let d=s.slice(0,-1);s=d.slice(0,d.lastIndexOf("/")+1)}}function rY(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 i=r.slice(0,o),s=r.slice(o+1);t.length<=i.length+s.length||!t.startsWith(i)||!t.endsWith(s)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:s})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function Y8(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=>Y8(r,t,n+1)):[null]}function oY(e,t,n,r,o,i){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let s=e.startsWith("./"),a=null;if(s){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(h=>[".","..","node_modules"].includes(h.toLowerCase())))return null;a=kd(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(s)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&kd(i+f)===a&&l.add(f);let d=!1,u=null;for(let f of l){if(!o?.has(f))continue;let h=o.get(f);if(typeof h!="string"||!n.has(h)||d&&h!==u)return null;d=!0,u=h}return d?u:s?r.get(a)??null:null}function iY(e,t,n,r,o,i){let s=rY(e?.imports,t);if(!s)return null;let a=Y8(s.value,s.wildcard),l=null;for(let d of a){let u=oY(d,e,n,r,o,i);if(!u||l&&u!==l)return null;l=u}return l}function RS(e,t=Wt(e)){let n=new Map;if(e?.kind==="stasis")for(let r of e.bundle?.imports?.values()??[])for(let[o,i]of r){if(!t.has(o))continue;n.has(o)||n.set(o,new Map);let s=n.get(o);for(let[a,l]of i){let d=typeof l=="string"&&t.has(l)?l:null;s.set(a,s.has(a)&&s.get(a)!==d?null:d)}}return n}function Sy(e,t,n=null,r=e,o=null){let i=$y.get(e);i||(i=G8(e),$y.set(e,i));let s=$y.get(r);s||(s=G8(r),$y.set(r,s));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),d=n?nY(r,s,t,o?.get(t)):null;return u=>{if(typeof u!="string"||/\p{Cc}/u.test(u))return null;if(a?.has(u)){let m=a.get(u);return typeof m=="string"&&e.has(m)?m:null}if(u.startsWith("#"))return iY(d,u,e,i,a,l);if(!u.startsWith("./")&&!u.startsWith("../"))return null;let f=u.slice(u.lastIndexOf("/")+1),h=f.lastIndexOf(".");return h<=0||h===f.length-1?null:i.get(kd(l+u))??null}}function TS(e,t){let n=Wt(e),r=q8.get(n);return r||(r={imports:RS(e,n),packageDirs:Zt(e)},q8.set(n,r)),Sy(n,t,r.imports,On(e),r.packageDirs)}var $y,K8,q8,MS=$(()=>{"use strict";Tf();$y=new WeakMap,K8=new WeakMap;q8=new WeakMap});function _y(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)}function AS(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!_y(e[0],n))return{stack:sY,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function J8({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(_y(o,r))return null;let i=e.length>0?e.slice(0,t+1):[n];return{stack:[...i,r],at:i.length}}function X8(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}var sY,Cy=$(()=>{"use strict";sY=[]});function xd(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(),i=r.top-n+e.scrollTop,s=o.bottom-n+e.scrollTop,a=i+(s-i)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,i-r.height)),behavior:"instant"})}var Ey=$(()=>{"use strict"});function Q8(e,t,n,r,o,i=LS,s=aY){let a=`${e}\0${t}`;if(i.has(a)||s.has(a))return;let l=xr(t,r);if(!l){i.set(a,null);return}s.add(a),(async()=>{let d=await Hr(n,l,o);i.set(a,d??null),s.delete(a),c.focusCodeTick++,queueMicrotask(F)})()}async function lY(e){let t=Ff.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){Ff.set(e,{sources:null,loading:!0,error:null});try{let r=await Ni(e,n),o=Wt(r);Ff.set(e,{sources:o,packageFiles:On(r),packageDirs:Zt(r),imports:RS(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){Ff.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(F),queueMicrotask(Di)}}function Di(){let e=V.querySelectorAll(".focus-code-line-active");e.length!==0&&xd(e[0].closest(".focus-code-body"),e)}function Bf(e){if(A()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Sd(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 i of o){let s=Of(r,i?.file);if(s)return{...r,file:s,line:i.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:tl(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function Of(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return S1(e.integrity,t);let n=Sd(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 eL(e,t,n){if(!A())return null;let r=Sd(e);if(!r||r.data===void 0&&!r.error)return n&&!IS.has(e)&&(IS.add(e),Ty(e).catch(()=>{}).finally(()=>{IS.delete(e),c.focusCodeTick++,queueMicrotask(F),queueMicrotask(Di)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let i=o.sources.get(t);if(typeof i!="string")return null;let s=Z8.get(o);return s||(s={cache:new Map,pending:new Set},Z8.set(o,s)),Q8(o.integrity,t,i,o.formats?.get(t),Sy(o.sources,t,o.imports,o.sources,o.packageDirs),s.cache,s.pending),{content:i,highlighted:s.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function Il(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return eL(r,t,n);if(A())return null;let o=Ff.get(e);if(!o)return n?(lY(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let i=o.sources.get(t);if(typeof i!="string")return null;Q8(e,t,i,o.formats?.get(t),Sy(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let s=`${e}\0${t}`;return{content:i,highlighted:LS.has(s)?LS.get(s):void 0,loading:!1}}function tL(e){let t=Bf(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:$n(t.reportId?t.line:e.line)}:null}function cY(e){return e?tL(ct(e)):null}function $d(e){let t=cY(e);return t?{base:t,...AS(c.focusCodeStack,c.focusCodeAt,t)}:null}function nL(e){let t=tL(e);return t?AS(c.focusCodeStack,c.focusCodeAt,t).pos:null}function rL(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let i=ct(e),s=Il(t,r,{kick:!1,reportId:i?._managedReportId});return s&&!s.loading?{integrity:t,file:r,range:null}:null}function oL(e){let t=e&&ct(e),n=Bf(t);if(n?.reportId&&!n.integrity)return eL(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,i=Il(o.integrity,o.file,{reportId:t?._managedReportId});return!i||i.loading?i:{...i,file:o.file,integrity:o.integrity,range:o.range}}var Ff,LS,aY,Z8,IS,Ry=$(()=>{"use strict";q();xn();Ht();ii();$r();MS();Cy();Fe();Cl();ln();nr();Ey();Ff=new Map,LS=new Map,aY=new Set,Z8=new WeakMap,IS=new Set});function _d(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=le(e);if(!Bn(r))return null;if(A()){let s=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=dr(Yt({view:"findings",teamId:c.currentManagedTeam,reportId:s,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",i=c.currentWorkspace||Js(o);return q0({id:r,report:c.currentWorkspace?null:Dm("report",o),workspace:Dm("workspace",i??"")})}function Js(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=kp(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function Xs(e){for(let t of[kr(),zI()])for(let n of t)for(let r of n)if(le(r)===e)return{group:n,finding:r};return null}function FS(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Et());let n=kt(e).commonTriage;if(c.viewMode==="kanban"){let s=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==s&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(s=>s.isUpstream)&&(c.upstreamOnly=!1),Ns(c.showRevalidation,c.upstreamOnly);let r=e.find(s=>le(s)===t);if(wl(r)||Xb(ti())&&!bI(e)||!ei(e).some(s=>le(s)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,Ns(c.showRevalidation,c.upstreamOnly);let s=kr().find(a=>a.some(l=>le(l)===t));if(s)return FS(s,t)}else c.revalidationDetailed=!0;if(Ws([e]).length===0){let s=c.sortBy;md(),c.sortBy=s}let i=Te(e);return e.length>1&&c.activeTabByGroup.set(i,t),c.viewMode==="table"?c.tableSelectedGid=i:c.viewMode==="focus"?c.focusGid=i:c.viewMode==="kanban"&&(c.kanbanPopoverGid=i),i}var Zs=$(()=>{"use strict";q();Ti();po();Ht();Fe();ri()});function iL(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function sL(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 BS=$(()=>{"use strict"});function My(e,t){Pf.has(e)||Pf.set(e,new Set);let n=Pf.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&Pf.delete(e)}}function OS(e,t){c.managedComments.set(e,t);for(let n of Pf.get(e)??[])n()}function si(e){return A()?c.managedComments?.get(e?.id)??[]:[]}function Ay(){return A()&&c.managedSession!=null&&sd(c.managedSession.role,"triage")}function Iy(e){return Ay()&&iL(e,c.managedSession)}function Nf(e){let t=c.reports,n=c.managedSession?.id;return()=>A()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function Cd(e,{signal:t,readAnnotations:n}={}){let r=Nf(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(d=>d.map(u=>u.id)))),i=new Map([...o].map(l=>[l,c.managedComments.get(l)])),s=n?(await n(e))?.comments:await cL(e,c.currentManagedTeam,{signal:t});if(!r()||s==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of s)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,d]of a)c.managedComments.get(l)===i.get(l)&&OS(l,d);return!0}async function aL(e,t,n=null){let r=e?._managedReportId,o=Nf(r);if(!o()||!Ay())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let i=await dL(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(i.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==i.comment.id);a.push(i.comment),a.sort(sL),OS(e.id,a)}return i}async function lL(e,t){let n=e?._managedReportId,r=Nf(n);if(!r()||!Iy(t))return 403;let o=await uL(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let i=c.managedComments.get(e.id)??[];OS(e.id,i.filter(s=>s.id!==t.id))}return o}var Pf,Ed=$(()=>{"use strict";q();Yp();BS();xn();Pf=new Map});var pL,fL=$(()=>{Yr();Ea();Hh();pL=Er(class extends Un{constructor(){super(...arguments),this.key=b}render(e,t){return this.key=e,t}update(e,[t,n]){return t!==this.key&&(nc(e),this.key=t),n}})});var hL=$(()=>{fL()});function PS(e,t){return e?pL(e,p`<span class="managed-comment-avatar" aria-hidden="true"><span>${(t?.[0]??"?").toUpperCase()}</span> ${Ko()?b:p`<img alt="" src="${`/api/avatar/${encodeURIComponent(e)}`}" loading="lazy" @error="${n=>{n.currentTarget.hidden=!0}}">`}</span>`):b}function dY(e){let t=e.version>1&&e.updatedAt!=null,n=e.createdAt??(t?e.updatedAt:null);if(n==null)return b;let r=new Date(n),o=[e.createdAt==null?"":`Posted ${new Date(e.createdAt).toLocaleString()}`,t?`Edited ${new Date(e.updatedAt).toLocaleString()}`:""].filter(Boolean).join(`
|
|
137
137
|
`);return p`<time class="managed-comment-time" datetime="${r.toISOString()}" data-tooltip="${o}">${e.createdAt==null?"edited ":""}${r.toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"})}${t&&e.createdAt!=null?" (edited)":""}</time>`}function Rd(e,t,n=b){let r=dY(e);return p`<div class="managed-comment"><div class="managed-comment-row">${e.authorId||e.authorLogin?p`<span class="managed-comment-author">${PS(e.authorId,e.authorLogin)} ${e.authorLogin?p`<strong>${e.authorLogin}</strong>`:b}</span>`:b}<div class="managed-comment-body">${t}</div>${r===b&&n===b?b:p`<div class="managed-comment-meta">${n===b?b:p`<div class="managed-comment-actions">${n}</div>`} ${r}</div>`}</div></div>`}var Ly=$(()=>{"use strict";ml();P();hL()});function zi(e){return KA(e,{managed:A()}).map(t=>typeof t=="string"?t:t.self?p`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:p`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Fy=$(()=>{"use strict";P();q();Fe()});function Qn(e){return e==="informational"?"info":e.replaceAll("_"," ")}function NS(e,{variant:t="full"}={}){let n=c.severityMode,r=Me(e,n),o=p`<span class="${`badge ${r}`}">${Qn(r)}</span>`,i=or(e),s=t==="tab"?null:dc(e);if(!i&&!s)return o;let a=s?`Corrected severity varies across reports \u2014 ${Object.entries(s).map(([k,S])=>`${k||"(this report)"}: ${Qn(S.severity)}`).join("; ")}`:null,l=s?p`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:b;if(!i)return p`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let d=Me(e,"original"),u=Rr(e),f=e.correctedSeverityReason,h=(bt[u]??0)>(bt[d]??0),m=h?"up":"down",g=h?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${m} from ${Qn(d)}`:`Original severity \u2014 corrected ${m} to ${Qn(u)}`)+(f?` \u2014 ${f}`:""),x=`Severity ${Qn(r)}; ${y?`corrected ${m} from ${Qn(d)}`:`original, corrected to ${Qn(u)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return p`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${x}">${o}<span class="${`badge-corr-mark ${m}`}" aria-hidden="true">${g}</span></span>`;let v=y?d:u;return p`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${x}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${m}`}" aria-hidden="true">${g}</span>${y?p`<span class="badge-pre" aria-hidden="true">was</span>`:b}<span class="${`badge-orig ${v}${y?" struck":""}`}">${Qn(v)}</span></span>${l}</span>`}function zf(e){mL.lastIndex=0;let t=[],n=0,r;for(;(r=mL.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let i=jA(r[0]);t.push(i?p`<a href="${i.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${i.url}">${i.label}</a>`:r[0])}else o===42?t.push(p`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(p`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(p`<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 uY({lang:e,code:t}){c.codeBlockTick;let n=oS(t,e);return p`<div class="code-block" data-lang="${e||b}">${e?p`<div class="code-block-lang">${e}</div>`:b}<pre><code>${n?te(n):t}</code></pre></div>`}function pY(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?p`<div class="para">${zf(e)}</div>`:zf(e):n.map(r=>p`<div class="para">${zf(r)}</div>`)}function fY({ordered:e,start:t,items:n}){let r=n.map(o=>p`<li>${En(o)}</li>`);return e?p`<ol class="md-list" start="${t>1?t:b}">${r}</ol>`:p`<ul class="md-list">${r}</ul>`}function En(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?DA(e):[e],r=n.length>1,o=s=>t?pY(s,{wrap:r}):zf(s),i=s=>{let a=NA(s);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):uY(l))};return n.length===1&&typeof n[0]=="string"?i(n[0]):n.map(s=>typeof s=="string"?i(s):fY(s))}function hY(e){let t=new Set;for(let n of e)t.add(Bt(n));return[...t]}function mY(e){let t=Bt(e);return ud[t]??t}function gY(e,t){c.linksTick,c.findingIndexTick;let n=le(e),r=Bn(n)?fr(n).filter(o=>!t.has(o)):[];return r.length===0?b:p`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let i=mf(o),s=el(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Do([o])[0]:null,l=s.length===0?"":` \u2014 in ${s.map(d=>`${Ne(d)} (${mY(d)})`).join(", ")}`;return p`<a class="duplicate-ref" href="${A()?_d({id:o},{teamOnly:!0}):`#${Po({id:o})}`}" data-links-preview="${a?o:b}" data-preview-report="${a?.report??b}" data-preview-row="${a?.index??b}" data-preview-managed-report="${a?.managedReportId??b}" data-tooltip="${`${i}${l}`}">${hY(s).map(d=>te(Ze[d]??Ze.default))}<span class="duplicate-ref-id">${xl(o)??i}</span></a>`})}</div>`}function bY(e){let t=k$(e);return t?p`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:b}function yY(e){let t=cf()?In(e.revalidateVerdict,e):"";return t?p`<div class="revalidate-verdict">${En(Ds(t))}</div>`:b}function Df(e,t,n="section",{collapsible:r=!1}={}){let o=t?p`<div class="section-body">${En(Ds(t))}</div>`:b;return!r||!t?p`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:p`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function vY(e,t,n){let r=e?.integrity&&t?.file?Of(e,t.file):null;return r?p`<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>`:p`<span class="evidence-ref">${n}</span>`}function wY(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return b;let r=Xn(e),o=Bf(e),i=t==="focus"&&o!==null,s=i?nL(e):null;return p`<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 d=rn(a),u=Hb(a,e,r,l),f=Ba(a),h=yL(e,`ev${l}`,o,a?.file,a?.line),m=DS(u),g=i&&_y(s,{integrity:o.integrity,file:Of(o,a?.file),range:$n(a?.line)});return p`<li class="${Y({current:g})}">${i?vY(o,a,d):u?p`<a class="evidence-ref" href="${u}" target="_blank" rel="noopener">${d}</a>`:p`<span class="evidence-ref">${d}</span>`} ${h?.mark??b} ${m} ${h?.tip??b} ${f?p`<div class="evidence-note">${En(Ds(f))}</div>`:b} ${h?.body??b}</li>`})}</ol></details>`}function bL(e,t){let n=rn(e);return t?p`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function kY(e,t){if(!t)return b;let n=t.slice(0,7),r=Wb(e,t);return r?p`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:p`<span data-tooltip="${t}">${n}</span>`}function DS(e){let t=BA(e);return t?p`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${_Y}</a>`:b}function CY(e,t,n,r){return`${le(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}function By(e,t){if(Td.key===e)return;let n=Td.host,r=e===null?null:t?.getRootNode?.()?.host??null;Td={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function gL(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:i}=zA(e,t);if(o.length===0)return b;let s=n.lastIndexOf("."),a=oS(r,s<0?"":n.slice(s+1)),l=i+o.length-1;return p`<div class="code-preview" style="${Oe({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((d,u)=>{let f=i+u,h=!!t&&f>=t.start&&f<=t.end;return p`<div class="${Y({"code-preview-lineno":!0,cited:h})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?te(a):r}</code></pre></div>`}function yL(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let i=Of(n,r);if(!i)return null;let s=$n(o),a=CY(e,t,r,s),l=c.codePreviews.has(a);c.focusCodeTick;let d=p`<button type="button" class="${Y({"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="${h=>{By(a,h.currentTarget),Il(n.integrity,i,{reportId:n.reportId})}}" @mouseleave="${h=>{Td.key===a&&By(null,h.currentTarget)}}" @focus="${h=>{By(a,h.currentTarget),Il(n.integrity,i,{reportId:n.reportId})}}" @blur="${h=>{Td.key===a&&By(null,h.currentTarget)}}">${SY}</button>`;if(l){let h=Il(n.integrity,i,{reportId:n.reportId}),m=!h||h.loading?p`<div class="code-preview code-preview-pending">${h?"Loading source\u2026":"Source unavailable"}</div>`:gL(h.content,s,i);return{mark:d,tip:b,body:m}}if(Td.key!==a)return{mark:d,tip:b,body:b};let u=Il(n.integrity,i,{kick:!1,reportId:n.reportId}),f=u&&!u.loading?p`<div class="code-preview-tip" role="tooltip">${gL(u.content,s,i)}</div>`:b;return{mark:d,tip:f,body:b}}function TY(e,t=!1){let n=Ye(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return p`<button type="button" class="${Y({"mark-flag":!0,flagged:n})}" data-flag-toggle="${le(e)}" ?disabled="${!ft(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Py}${t?p`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:b}</button>`}function MY(e){let t=yt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function AY(e){let t=zr(e,Xn(e)),n=rn(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=hf(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
138
138
|
|
|
139
139
|
`)}function IY(e){if(!c.currentWorkspace)return b;let t=e._reportName;if(!t)return b;if(A()&&!e._managedReportId)return b;let n=Ft[Bt(t)]??Ft.default,r=p`${te(n)}<span class="report-chip-label report-button-label">${Ne(t)}</span>`;if(A()){let o=_d(e,{reportId:e._managedReportId});if(o)return p`<a class="report-chip report-button comment-self-ref" href="${hl(o)}">${r}</a>`}return p`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${le(e)}" data-managed-report="${A()?e._managedReportId:b}">${r}</button>`}function vL(e,t,n,r,o=null){let i=o==="table"?b:IY(r),s=Ye(r),a=!ft(r),l=s?.color??null,d=s?.comment??"",u=s?.fix??"",f=A()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=u?`Edit fix link: ${u}`:"Add fix link (PR URL, etc.)",m=o==="focus"&&i===b,g=A()?"Comments":d?"Edit comment":"Comment",y=u?"Edit fix link":"Fix link",w=p`<button type="button" ?disabled="${a}" class="${Y({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!A()?f:b}" aria-label="${f}">${Oy}${m?p`<span class="mark-btn-label">${g}</span>`:b}</button>`,x=p`<button type="button" ?disabled="${a}" class="${Y({"mark-fix":!0,"has-fix":u})}" data-tooltip="${u?h:b}" aria-label="${h}">${Uf}${m?p`<span class="mark-btn-label">${y}</span>`:b}</button>`,v=TY(r,m),k=p`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${xY}${m?p`<span class="mark-btn-label">Copy</span>`:b}</button>`,S=_d(r)?p`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${$Y}${m?p`<span class="mark-btn-label">Link</span>`:b}</button>`:b,C=A()?xt({repo:{github:r.repo?.github||r._repoFallback}}):oy(r),_=VA(C,{title:MY(r),body:AY(r),labels:YI(r.isSecurity===!0,c.githubNewIssueLabels)}),E=A()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,O=p`${RY}${m?p`<span class="mark-btn-label">Issue</span>`:b}`,z=$b(r)?b:_?E?p`<button type="button" class="mark-issue" data-issue-form="${_}" data-tooltip="${m?b:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${O}</button>`:p`<a class="mark-issue" href="${_}" target="_blank" rel="noopener" data-tooltip="${m?b:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${O}</a>`:b,T=p`<button type="button" class="mark-claude" data-tooltip="${m?b:"Open in Claude Code (claude://) with a confirm-and-fix prompt"}" aria-label="Open finding in Claude Code">${EY}${m?p`<span class="mark-btn-label">Claude</span>`:b}</button>`,D=p`<color-marker .selected="${l}" .disabled="${a}"></color-marker>`,K=gd(e)!==e,Z=e.linkedTabs?"change triage state for linked findings":K?"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 p`<div class="finding-actions">${i}<div class="finding-action-controls"><span class="mark-action-group">${w}${x}${v}</span><span class="mark-action-group">${k}${S}${z}${T}</span>${D}${FY(e,Z,o,n,r)}</div></div>`}function LY(e){if(e.newState!=="open")return;let t=e.currentTarget,r=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!r)return;let o=r.getBoundingClientRect(),i=t.offsetWidth||110,s=t.offsetHeight||100,a=4,l=o.right-i;l<4&&(l=4),l+i>window.innerWidth-4&&(l=window.innerWidth-i-4);let d=o.bottom+a;d+s>window.innerHeight-4&&o.top>s+a&&(d=o.top-s-a),t.style.top=`${d}px`,t.style.left=`${l}px`}function FY(e,t,n,r,o){let i=Te(e),s=!ft(o)||Vs(e,r).length===0,a=s?null:Y$(e,r,o),l={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},d={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},u=!!c.shownTriage,f=u?l[c.shownTriage]:null,h=["inprogress","fixed","invalid","deleted","ignored"],g=u&&!(n==="focus")?[{key:"restore",label:"Restore"},...h.filter(x=>x!==c.shownTriage).map(x=>({key:x,label:d[x]}))]:h.map(x=>({key:x,label:d[x]})),y=["mark-triage-menu"];u&&y.push("with-label",`triage-state-${c.shownTriage}`);let w=`triage-menu-${i.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return p`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${s}">${f?p`<span class="mark-triage-label">${f}</span>`:b} <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="${i}" role="menu" @beforetoggle="${LY}">${g.map(x=>p`<button type="button" class="${Y({"triage-menu-item":!0,[`triage-menu-${x.key}`]:!0,active:a===x.key})}" data-triage-action="${x.key}" ?disabled="${s}" role="menuitem">${x.label}</button>`)}</div></div>`}function BY(e,t){let n=!!e?.comment,r=!!(e?.fix||qo(t)),o=e?.flagged===!0;return!n&&!r&&!o?b:p`<span class="tab-marks">${n?p`<span class="has-comment" role="img" aria-label="Has a comment">${Oy}</span>`:b}${r?p`<span class="has-fix" role="img" aria-label="Has a fix link">${Uf}</span>`:b}${o?p`<span class="flagged" role="img" aria-label="Flagged">${Py}</span>`:b}</span>`}function wL(e,t,n){let{app:r,source:o}=OI(e),i=s=>OY(s,le(s)===t,n);return p`<div class="tabs">${r.map(i)} ${r.length>0&&o.length>0?p`<span class="tab-level-separator" aria-hidden="true">•</span>`:b} ${o.map(i)}</div>`}function OY(e,t,n){let r=le(e),o=Ye(e),i=o?.color,s=xf(e,o),a=["tab",`tab-severity-${Me(e,c.severityMode)}`];t&&a.push("active"),i&&a.push(`tab-mark-${i}`),s==="ignored"&&!n.allIgnored?a.push("tab-ignored"):s&&s!=="ignored"&&n.commonTriage===null&&a.push(`tab-${s}`);let l=Ab(e),d=l?Ft[l]:null,u=!d&&e.confidence!=null;d?a.push("tab-with-analyzer"):u&&a.push("tab-with-confidence");let f=d?p`<span class="tab-analyzer" role="img" aria-label="${ud[l]}">${te(d)}</span>`:u?p`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:b;return p`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${i?`${i} color label`:b}"><span class="tab-label"><span class="tab-severity">${NS(e,{variant:"tab"})}</span><span class="tab-indicators">${BY(o,e)}</span></span>${f}</button>`}function PY(e){if(c.viewMode==="table"||c.viewMode==="focus"){let t=e.confidence*10;return p`<div class="${`conf-ring ${Me(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 p`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}function DY(e){if(ms(e))return b;let t=e?.name;if(typeof t!="string"||!NY.test(t))return b;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}`,i=r?`${t}@${n}`:t;return p`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${i}</a></span>`}function zY(e,t,n,r,o,i){let s=le(e),a=Ye(e),l=a?.comment??"",d=a?.fix??"",u=qo(e),f=$b(e),h=zr(e,Xn(e)),m=bL(e,h),g=_i(e),y=Bf(e),w=yL(e,"loc",y,e.file,e.line),x=DS(h),v=p`<span class="line-num">${g?p`${m}, ${g}`:m}${w?.mark??b}${x}</span>`,k=kl(e),S=String(e.discoveredIn??"").trim(),C=S===String(e.file??"").trim()?"":S,_=o==="focus"?DY(e.package?.npm):b,E=b;if(o!=="focus"&&A()&&w)E=p`<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"&&!A()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){c.bundleHashTick;let ae=new Set(e._bundleHashes),_e=tl(e.fileHash).find(({integrity:Ce})=>ae.has(Ce));_e&&(E=p`<button type="button" class="finding-code-btn" data-finding-code-bundle="${_e.integrity}" data-finding-code-file="${_e.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${_e.file} in bundle source viewer`}">Code</button>`)}let{title:O,body:z}=ss(e),T=pc(z),D=T.findIndex(ae=>ae.label!==null),K=D===-1?T:T.slice(0,D),Z=D===-1?[]:T.slice(D);return p`<div class="${Y({"tab-body":!0,active:t})}" data-tid="${s}">${r>1?p`<div class="print-case-label">${n+1} of ${r}</div>`:b}<div class="finding-left">${a?.color||a?.flagged===!0?p`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?p`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:b} ${a?.flagged===!0?p`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:b}</div>`:b} ${NS(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?b:PY(e)} ${bY(e)} ${E}</div><div class="finding-body"><div class="line-row">${v} ${w?.tip??b} ${_} ${C?p`<span class="line-num discovered-in">(found analyzing ${C})</span>`:b} ${k?p`<span class="run-meta">${k}</span>`:b}</div>${w?.body??b} ${O?p`<div class="desc-title">${zf(O)}</div>`:b} ${K.map(ae=>p`<div class="desc">${En(Ds(ae.body))}</div>`)} ${wY(e,o)} ${Z.map(ae=>ae.label===null?p`<div class="desc">${En(Ds(ae.body))}</div>`:Df(ae.label,ae.body))} ${e.impact?Df("Impact",In(e.impact,e)):b} ${e.reproduction?Df("Reproduction",In(e.reproduction,e),"section",{collapsible:!0}):b} ${e.recommendation?Df("Recommendation",In(e.recommendation,e),"recommendation",{collapsible:!0}):b} ${e.confidenceReason?p`<div class="conf-reason">${En(In(e.confidenceReason,e))}</div>`:b} ${yY(e)} ${e.revalidateRecommendation&&cf()?Df("Revalidation recommendation",In(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):b} ${or(e)&&e.correctedSeverityReason?p`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${En(e.correctedSeverityReason)}</div>`:b} ${gY(e,i)} ${A()?si(e).map(ae=>p`<div class="comment-block">${Rd(ae,zi(ae.body))}</div>`):l?p`<div class="comment-block"><span class="comment-label">Comment:</span> ${zi(l)}</div>`:b} ${f?p`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:b} ${d?p`<div class="fix-block"><span class="fix-label">Fix:</span> ${dt(d)?p`<managed-fix-link .url="${d}"></managed-fix-link>`:d}</div>`:b} ${u&&u!==d?p`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${u}"></managed-fix-link></div>`:b}</div></div>`}function kL(e){let t=["finding",...zS(e)];return ei(e).length>1&&t.push("multi-case"),t}function xL(e,t={}){let{context:n=null}=t,r=kt(e),o=ei(e),i=new Set(o.map(le)),s=ct(e),a=le(s),l=s.commitHash?p`<div class="commit-ref">introduced in ${kY(s.repo?.github,s.commitHash)}</div>`:b,d=c.currentWorkspace&&l!==b;return p`${o.map((u,f)=>zY(u,le(u)===a,f,o.length,n,i))} ${d?p`<div class="marks-commit-row">${l}</div>`:b}<div class="marks"><div class="marks-left">${d?b:l} ${o.length>1?wL(o,a,r):b}</div>${vL(e,o,r,s,n)}</div>`}function zS(e){let t=kt(e),n=e.some(o=>o.critical||Me(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 $L(e){let t=kt(e),n=ei(e),r=ct(e),o=le(r),i=r,s=yt(i),a=kl(i),l=_i(i),d=l?`, ${l}`:"",u=zr(i,Xn(i));return p`<div class="row-score">${NS(i,{variant:"compact"})} ${i.confidence===void 0?b:p`<span class="row-conf"><strong>${i.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${s}</span> ${a?p`<span class="row-type">${a}</span>`:b}</div><div class="meta-row"><span class="row-loc">${bL(i,u)}${d}</span> ${DS(u)}<div class="marks">${vL(e,n,t,r,"table")}</div></div>${n.length>1?p`<div class="tabs-row">${wL(n,o,t)}</div>`:b}</div>`}var mL,Oy,Uf,xY,$Y,SY,_Y,Td,EY,RY,Py,NY,Qs=$(()=>{"use strict";P();ht();So();wt();q();ml();Le();JI();Fe();Ht();e8();Ry();Cy();uo();jt();Zs();Ed();bl();Ly();Fy();Fy();mL=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;Oy=p`<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>`,Uf=p`<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>`,xY=p`<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>`,$Y=p`<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>`,SY=p`<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>`,_Y=te(br);Td={key:null,host:null};EY=p`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${Cb}"/></svg>`,RY=p`<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>`,Py=p`<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>`;NY=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function jf(e){return"tree-"+e.replaceAll(/[^\w-]+/gu,"_")}function US(e,t){let n=new Map;for(let r of e)for(let o of r){n.has(o.file)||n.set(o.file,_L());let i=n.get(o.file),s=Me(o,t);i[s]!==void 0&&i[s]++}return n}function jS(e){let t=null;for(let n of e)if(n?.tree){t||(t={});for(let r of Object.keys(n.tree)){let o=n.tree[r];if(!t[r]){t[r]={...o,imports:[...o.imports??[]]};continue}let i=new Set(t[r].imports);for(let s of o.imports??[])i.has(s)||(i.add(s),t[r].imports.push(s));t[r].size==null&&o.size!=null&&(t[r].size=o.size)}}return t}function Ny(e,t){let n=Object.keys(e),r=new Map(n.map((l,d)=>[l,d])),o=n.map(()=>_L()),i=n.map(()=>[]);for(let[l,d]of n.entries())for(let u of e[d].imports??[]){let f=r.get(u);f!==void 0&&i[f].push(l)}let s=new Uint32Array(n.length),a=0;for(let[l,d]of t){let u=r.get(l);if(u===void 0||!d)continue;let f=rt.map(y=>[y,d[y]??0]).filter(([,y])=>y!==0);if(f.length===0)continue;let h=++a,m=[],g=y=>{s[y]!==h&&(s[y]=h,m.push(y))};for(let y of i[u])g(y);for(;m.length>0;){let y=m.pop();for(let[w,x]of f)o[y][w]+=x;for(let w of i[y])g(w)}}return new Map(n.map((l,d)=>[l,o[d]]))}function HS(e,t,n){let r=t.get(e),o=n.get(e);return SL(r)>0||SL(o)>0}function SL(e){if(!e)return 0;let t=0;for(let n of rt)t+=e[n]??0;return t}var _L,Hf=$(()=>{"use strict";Fe();_L=()=>Object.fromEntries(rt.map(e=>[e,0]))});function CL(e){if(!e)return b;let t=tl(e)[0];return t?p`<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>`:b}function EL(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let u of n)for(let f of e[u].imports??[]){let h=r.get(f)??[];h.push(u),r.set(f,h)}let o=c.filesSearch.trim().toLowerCase(),i=o?n.filter(u=>u.toLowerCase().includes(o)):n,s=u=>e[u]?p`<a href="${`#${jf(u)}`}"><span class="name">${u}</span></a>`:p`<span class="name">${u}</span>`,a=u=>{let f=t.get(u);if(!f)return null;let h=rt.filter(m=>(f[m]??0)>0);return h.length===0?null:p`<span class="tree-count-chips">${h.map(m=>p`<span class="${`tree-count-chip ${m}`}">${f[m]} ${m.replaceAll("_"," ")}</span>`)}</span>`},l=u=>{let f=t.get(u);return f?rt.reduce((h,m)=>h+(f[m]??0),0):0},d=p`<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">${i.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let u=c.filesSelectedFile&&e[c.filesSelectedFile]&&i.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return p`<div class="${u?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${d}<div class="${u?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${i.length===0?p`<div class="tree-table-empty">No files match the search.</div>`:b} ${i.map(m=>{let g=l(m),y=m===u,w=qe(e[m].size);return p`<div class="${`tree-table-row${y?" selected":""}${g===0?" clean":""}`}" data-tree-select="${m}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${m}">${m}</span> ${a(m)??p`<span class="tree-table-clean-marker">—</span>`} ${w?p`<span class="tree-table-size">${w}</span>`:b}</div>`})}</div>${u?p`<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">${UY(e[u],u,r.get(u)??[],s)}</div></aside>`:b}</div></div>`}return p`<div class="tree-view">${d} ${i.length===0?p`<div class="tree-table-empty">No files match the search.</div>`:b} ${i.map(u=>{let f=e[u],h=r.get(u)??[],m=qe(f.size);return p`<section class="tree-file" id="${jf(u)}"><div class="tree-file-header"><span class="name">${u}</span> ${a(u)} ${m?p`<span class="tree-file-size">${m}</span>`:b} ${CL(f.fileHash)}</div>${RL(f,h,s)}</section>`})}</div>`}function RL(e,t,n){return p`${e.fileHash||e.treeHash?p`<div class="tree-hashes hashes">${e.fileHash?p`<div class="tree-hash">file: ${e.fileHash}</div>`:b} ${e.treeHash?p`<div class="tree-hash">tree: ${e.treeHash}</div>`:b}</div>`:b} ${e.imports?.length>0?p`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>p`<li>${n(r)}</li>`)}</ul></div>`:b} ${t.length>0?p`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>p`<li>${n(r)}</li>`)}</ul></div>`:b} ${e.exports?.length>0?p`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>p`<li><span class="name">${r}</span></li>`)}</ul></div>`:b}`}function UY(e,t,n,r){let o=qe(e.size);return p`<div class="tree-detail-name"><span class="name">${t}</span> ${o?p`<span class="tree-detail-size">${o}</span>`:b} ${CL(e.fileHash)}</div>${RL(e,n,r)}`}var TL=$(()=>{"use strict";P();q();Fe();Hf()});function Md(){return ML}function jY(){return Wf||(Wf=(async()=>{let e="./graph.js";try{let t=await import(e);return t._swapGraph2Impl(D8()),ML=t,t}catch(t){throw Wf=null,t}})(),Wf)}async function WS(e,t,n,r,o){try{let i=await jY(),s=i.buildGraphFromPrep(t);xe(p`<graph-layout .graph="${s}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),i.attachGraph2Interaction(e,s,r,o),a}catch(i){let s=i instanceof Error?i.message:String(i);return e.textContent=`Graph failed to load: ${s}`,null}}var Wf,ML,VS=$(()=>{"use strict";P();ri();Wf=null,ML=null});function AL(){ea=null}function HY(){return Vf||(Vf=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw Vf=null,t}})(),Vf)}function WY(e){let t=On(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Ur(n),o=new Map;for(let i=0;i<n.length;i++)o.set(r[i],t.get(n[i]));return o}async function IL(e,t){let n=t?.integrity??"";(!ea||ea.integrity!==n||(t?.managedId||ea.managedId)&&ea.details!==t)&&(ea={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:VY(t,n)});try{let r=await ea.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){ea=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function VY(e,t){return(await HY()).createTerminalElement(WY(e),t)}var Vf,ea,KS=$(()=>{"use strict";$r();Fe();Vf=null,ea=null});function LL(e){if(!e)return null;let t=Yo(),n=new RegExp(`^(?:.*/)?${t}/(@[^/]+/[^/]+|[^/]+)`,"u"),r=e.match(n);return r?r[1]:"__own__"}function FL(e){return new Set(e.filter(t=>!Sn(t)))}function qY(){if(typeof document>"u")return!1;let e=document.body?.classList;return!!e&&(e.contains("theme-light")||e.contains("theme-pink")||e.contains("theme-paper"))}function Rn(e){let t=qY(),n=t?GY:KY,r=e??"__own__",o=`${t?"l":"d"}:${r}`;if(GS.has(o))return GS.get(o);let i=0;for(let d of r)i=i*37+d.codePointAt(0)|0;let a=((i%n.length+n.length)%n.length*7+3)%n.length,l=n[a];return GS.set(o,l),l}var KY,GY,GS,ta=$(()=>{"use strict";Fe();KY=["#4e9af1","#f28e2b","#59a14f","#e15759","#76b7b2","#edc948","#b07aa1","#ff9da7","#9c755f","#5cd1e5","#f1ce63","#d37295","#a0cbe8","#86bcb6","#8cd17d","#b6992d","#499894","#e15759","#e879c7","#d4a6c8"],GY=["#2f8aef","#d2691e","#2ea043","#e63946","#2e9a92","#b88817","#9560e8","#d24a9c","#8a5d40","#0891b2","#a07a14","#c14e8e","#1f7ad0","#549b94","#3fb95f","#a07a14","#2a8278","#cb2c40","#c026d3","#965f93"];GS=new Map});var qS,BL=$(()=>{qS=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()}});var OL=$(()=>{BL()});var Je,PL=$(()=>{Yr();Ea();Hh();Je=Er(class extends Un{constructor(e){if(super(e),e.type!==An.PROPERTY&&e.type!==An.ATTRIBUTE&&e.type!==An.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!f6(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===Tt||t===b)return t;let n=e.element,r=e.name;if(e.type===An.PROPERTY){if(t===n[r])return Tt}else if(e.type===An.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return Tt}else if(e.type===An.ATTRIBUTE&&n.getAttribute(r)===t+"")return Tt;return nc(e),t}})});var er=$(()=>{PL()});function ZY(e,t){let n=xr(e,t);return["javascript","jsx"].includes(n)?"js":["typescript","tsx"].includes(n)?"ts":["solidity","rust","php","python","json"].includes(n)?n:"generic"}function YS(e,t){let n=ZY(e,t),r=n==="js"||n==="ts"?zt`<rect x="1" y="1" width="14" height="14" rx="2" fill=${n==="js"?"#e6c84f":"#3178c6"}/><text x="8" y="11.5" text-anchor="middle" fill=${n==="js"?"#202020":"#fff"} font-family="sans-serif" font-size="8" font-weight="700">${n.toUpperCase()}</text>`:n==="solidity"?zt`<path d="m8 1 4 6-4 2-4-2Z" fill="currentColor"/><path d="m4 8 4 2 4-2-4 7Z" fill="currentColor" opacity=".65"/>`:n==="rust"?JY:n==="php"?XY:n==="python"?YY:n==="json"?zt`<path d="M3 1h6l5 5v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1Z" fill="#e6c84f"/><path d="M9 1v4a1 1 0 0 0 1 1h4Z" fill="#202020" opacity=".2"/><path d="M6.5 6.5h-.75a.75.75 0 0 0-.75.75v1.5L4 9.5l1 .75v1.5a.75.75 0 0 0 .75.75h.75m3-6h.75a.75.75 0 0 1 .75.75v1.5l1 .75-1 .75v1.5a.75.75 0 0 1-.75.75H9.5" fill="none" stroke="#202020" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/>`:zt`<path d="M4 1.5h5l3 3v10H4Zm5 0v3h3M6 8h4M6 10.5h4" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>`;return p`<svg class="source-file-icon" data-file-type="${n}" width="16" height="16" viewBox="0 0 16 16" style="flex: none" aria-hidden="true">${r}</svg>`}var YY,JY,XY,vge,Dy,NL,DL,zL,JS=$(()=>{"use strict";P();ly();YY=zt`<path d="M8 1C4.5 1 4 1.5 4 3v1h4v1H3C1.5 5 1 6 1 8s.5 3 2 3h1V9c0-1.5 1-2 2.5-2H10c1.5 0 2-.5 2-2V3c0-1.5-.5-2-4-2Z" fill="#3776ab"/><path d="M8 1C4.5 1 4 1.5 4 3v1h4v1H3C1.5 5 1 6 1 8s.5 3 2 3h1V9c0-1.5 1-2 2.5-2H10c1.5 0 2-.5 2-2V3c0-1.5-.5-2-4-2Z" fill="#ffd43b" transform="rotate(180 8 8)"/><circle cx="6" cy="2.8" r=".65" fill="#fff"/><circle cx="10" cy="13.2" r=".65" fill="#fff"/>`,JY=zt`<path d="m7 0 2 0 .4 1.6 1.3.5 1.4-.9 1.4 1.4-.9 1.4.5 1.3 1.6.4v2l-1.6.4-.5 1.3.9 1.4-1.4 1.4-1.4-.9-1.3.5-.4 1.6H7l-.4-1.6-1.3-.5-1.4.9-1.4-1.4.9-1.4-.5-1.3L1.3 9V7l1.6-.4.5-1.3-.9-1.4 1.4-1.4 1.4.9 1.3-.5Z" fill="#c97d5d"/><circle cx="8" cy="8" r="4.4" fill="var(--surface, #fff)"/><text x="8" y="10.8" text-anchor="middle" fill="currentColor" font-family="serif" font-size="8" font-weight="700">R</text>`;XY=zt`<g fill="#8892bf" transform="translate(0 .5) scale(.5)"><path d="M28 10a4 4 0 0 0-4-4h-6v6a6 6 0 0 1-6 6h-2v2h2v6h4v-6h8v6h4V16h2v-4a2 2 0 0 0-2-2"/><path d="M12 4H8v2a6 6 0 0 0-6 6v6a2 2 0 0 0 2 2v2H2.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H6a2 2 0 0 0 2-2v-8h4a4 4 0 0 0 4-4V8a4 4 0 0 0-4-4M6 14H4v-2h2Z"/></g>`;vge=p`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" style="flex: none" aria-hidden="true"><path d="M1.5 4V2.5h5L8 4h6.5v9h-13Z" stroke-linejoin="round"/></svg>`,Dy=p`<svg class="bundle-code-tree-npm" width="12" height="12" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M1 1h14v14H1Zm3 3v8h4V6h2v6h2V4Z"/></svg>`,NL=p`<svg class="bundle-code-tree-soldeer" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="m8 1 6 3.5v7L8 15l-6-3.5v-7Z" fill="none" stroke="currentColor" stroke-width="1"/><path d="m8 3 2.5 4L8 8.5 5.5 7Zm-2.5 5L8 9.5 10.5 8 8 13Z" fill="currentColor"/></svg>`,DL=p`<svg class="bundle-code-tree-composer" width="12" height="12" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 1 15 4.5v7L8 15l-7-3.5v-7Z" fill="#8892bf"/><path d="m1 4.5 7 3.5 7-3.5M8 8v7M4.5 2.75l7 3.5" fill="none" stroke="var(--surface, #fff)" stroke-width=".9"/></svg>`,zL=p`<svg class="bundle-code-tree-cargo" width="12" height="12" viewBox="9.25 6.14 14 14" aria-hidden="true"><path d="m16.264 11.547 6.2-2.446v8.16l-6.2 2.485Zm0-.019-6.2-2.481v8.123l6.2 2.522Z" fill="#e5ac3d" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m16.277 11.508 6.169-2.435-6.2-2.531-6.2 2.467Z" fill="#e3b04e" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m12.82 10.149 6.196-2.467" fill="none" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m18.301 7.395-6.24 2.484 1.482.593 6.196-2.466z" fill="#fff" stroke="#73561f" stroke-miterlimit="10" stroke-width=".04741218643894885px" opacity=".3"/><path d="m13.562 10.47-1.453-.565v1.645l.201-.136.18.285.104.04.138-.121.137.228.129.05.189-.166.238.332.137.053zm-1.423 7.576 1.461.545-.023-1.645-.2.139-.184-.282-.104-.039-.136.123-.14-.226-.131-.049-.186.169-.243-.329-.137-.051z" fill="#fff" stroke="#73561f" stroke-miterlimit="10" stroke-width=".06661495224335688px" opacity=".3"/><path d="m21.426 13.49-.172-.039V13.4l.148-.208a.1.1 0 0 0 .018-.065.035.035 0 0 0-.037-.03l-.189.006-.015-.045.118-.222a.07.07 0 0 0 .007-.063.04.04 0 0 0-.045-.018l-.2.051-.024-.037.084-.229a.06.06 0 0 0 0-.058.04.04 0 0 0-.051-.006l-.2.094-.032-.027.047-.227a.05.05 0 0 0-.016-.052.05.05 0 0 0-.056.007l-.2.133-.039-.017.007-.215a.04.04 0 0 0-.026-.043.07.07 0 0 0-.058.02l-.184.166-.045-.006-.033-.2a.036.036 0 0 0-.036-.032.08.08 0 0 0-.057.031l-.164.194-.049.005-.071-.168a.036.036 0 0 0-.044-.021.1.1 0 0 0-.055.042l-.138.214-.05.016-.107-.135a.04.04 0 0 0-.05-.008.1.1 0 0 0-.05.051l-.107.226-.05.026-.138-.1a.05.05 0 0 0-.055 0 .1.1 0 0 0-.044.058l-.071.228-.049.036-.164-.054a.06.06 0 0 0-.057.017.1.1 0 0 0-.036.063l-.033.223-.045.044-.184-.01a.08.08 0 0 0-.058.029.1.1 0 0 0-.026.065l.007.209-.039.05-.2.035a.1.1 0 0 0-.056.04.1.1 0 0 0-.016.065l.046.187-.032.054-.2.079a.1.1 0 0 0-.051.049.07.07 0 0 0 0 .062l.084.157-.024.057-.2.119a.1.1 0 0 0-.045.057.06.06 0 0 0 .007.057l.118.122-.015.058-.189.155a.1.1 0 0 0-.037.062.045.045 0 0 0 .018.05l.148.082v.055l-.172.185a.1.1 0 0 0-.028.065.04.04 0 0 0 .028.041l.172.039v.051l-.148.208a.1.1 0 0 0-.018.065.035.035 0 0 0 .037.03l.189-.006.015.045-.118.222a.07.07 0 0 0-.007.063.04.04 0 0 0 .045.018l.2-.051.024.037-.084.229a.06.06 0 0 0 0 .058.04.04 0 0 0 .051.006l.2-.094.032.027-.046.227a.05.05 0 0 0 .016.051.05.05 0 0 0 .056-.007l.2-.133.039.017-.007.215a.04.04 0 0 0 .026.043.07.07 0 0 0 .058-.02l.184-.166.045.006.033.2a.035.035 0 0 0 .036.032.08.08 0 0 0 .057-.031l.164-.194.049-.005.071.168a.036.036 0 0 0 .044.02.1.1 0 0 0 .055-.042l.138-.214.05-.016.107.135a.04.04 0 0 0 .05.008.1.1 0 0 0 .05-.051l.107-.226.05-.027.138.1a.05.05 0 0 0 .055 0 .1.1 0 0 0 .044-.058l.071-.228.049-.036.164.054a.06.06 0 0 0 .057-.017.1.1 0 0 0 .036-.063l.033-.223.045-.044.184.01a.08.08 0 0 0 .058-.029.1.1 0 0 0 .026-.065l-.007-.209.039-.05.2-.035a.1.1 0 0 0 .056-.04.1.1 0 0 0 .016-.065l-.046-.187.017-.053.2-.079a.1.1 0 0 0 .051-.049.07.07 0 0 0 0-.062l-.084-.157.024-.057.2-.119a.1.1 0 0 0 .045-.057.06.06 0 0 0-.007-.057l-.118-.122.015-.058.189-.155a.1.1 0 0 0 .037-.062.045.045 0 0 0-.018-.05l-.148-.082v-.055l.172-.185a.1.1 0 0 0 .028-.065.04.04 0 0 0-.014-.039m-1.153 1.988c-.066.013-.108-.037-.094-.112a.21.21 0 0 1 .145-.16c.066-.013.108.037.094.112a.21.21 0 0 1-.145.16m-.059-.39a.19.19 0 0 0-.132.146l-.061.325a2.3 2.3 0 0 1-.619.4 1.4 1.4 0 0 1-.632.123l-.061-.273c-.013-.057-.072-.072-.132-.033l-.252.164a1 1 0 0 1-.13-.106l1.226-.521q.022-.007.023-.026v-.455c0-.013-.009-.012-.023-.006l-.359.152v-.288l.388-.165a.16.16 0 0 1 .239.115c.015.057.049.249.072.3s.117.172.217.13l.611-.26.022-.012a3 3 0 0 1-.139.23Zm-1.7 1.13c-.066.043-.131.026-.145-.037a.2.2 0 0 1 .094-.192c.066-.043.131-.026.145.037a.2.2 0 0 1-.09.192Zm-.465-1.779a.18.18 0 0 1-.062.2c-.062.055-.134.056-.161 0a.18.18 0 0 1 .062-.2c.066-.051.138-.053.165 0Zm-.143.416.263-.234a.16.16 0 0 0 .057-.178l-.054-.105.213-.09v1l-.429.182a1.4 1.4 0 0 1-.057-.407c.001-.052.001-.11.011-.168Zm1.152-.587v-.3l.506-.215c.026-.011.185-.047.185.077 0 .1-.122.192-.222.234l-.47.2Zm1.84-.516v.118l-.154.065a.04.04 0 0 0-.022.036v.074a.31.31 0 0 1-.176.3c-.078.043-.165.036-.176-.01-.046-.253-.123-.278-.245-.327a1 1 0 0 0 .308-.578.3.3 0 0 0-.235-.315.57.57 0 0 0-.322.026l-1.592.677a2.7 2.7 0 0 1 .84-.853l.188.127c.042.029.113 0 .157-.063l.21-.3a.94.94 0 0 1 1.027.33l-.144.4c-.025.069 0 .128.057.13l.277.011q.004.073.004.152Zm-1.591-1.044c.049-.069.126-.1.172-.069s.045.113 0 .183-.126.1-.172.069-.044-.114.005-.184Zm1.427.6a.19.19 0 0 1 .161-.133c.062 0 .089.066.062.142a.19.19 0 0 1-.161.133c-.057-.006-.085-.07-.058-.15Z" opacity=".55"/><path d="M0 16.309h22.926v9.971L45.72 13.139 22.926 0v9.97H0z" fill="#231f20" transform="matrix(0 -.029 .022 .013 10.451 11.138)"/><path d="M0 16.309h22.926v9.971L45.72 13.139 22.926 0v9.97H0z" fill="#231f20" transform="matrix(0 -.029 .022 .013 15.013 12.984)"/></svg>`});function Rt(e){let t=UL(e,64);return t===e?XS(e):`${XS(t)}...`}var QY,UL,ZS,XS,zy,Ad=$(()=>{QY=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,UL=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,ZS=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,XS=e=>JSON.stringify(e).replaceAll(QY,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);zy=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}}});function Ge(e,t,n){if(!e)throw new mo(typeof n=="function"?n():n,t.line)}var mo,Id=$(()=>{Ad();Ad();mo=class extends zy{}});var HL=$(()=>{Ad()});function na(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var Ige,WL=$(()=>{HL();Ad();Ige=2**20});function QS(e){let t=eJ.exec(e);if(t===null)return;let[n,r,o,i,s,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:rJ[r-1])||i>23||s>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let d=[];(t[4]==="t"||t[9]==="z")&&d.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&d.push("the year 0000 is not supported"),a===60&&d.push("a leap second is not supported");let u=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:i,minute:s,second:a,fraction:t[8]?.slice(1)??"",offset:u,unsupported:d}}function VL(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=QS(e);if(n?.unsupported.length===0)return new Uy(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 Ge(!r,t,'a date-time with a space in place of "T" is not supported'),Ge(!tJ.test(e),t,()=>`local dates and times are not supported: ${Rt(e)}`),Ge(!nJ.test(e),t,()=>`a date-time or a time without seconds is not supported: ${Rt(e)}`),Ge(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${Rt(e)}`),new mo(`${Rt(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var eJ,tJ,nJ,rJ,Uy,e_=$(()=>{Id();eJ=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,tJ=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,nJ=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,rJ=[31,28,31,30,31,30,31,31,30,31,30,31];Uy=class{constructor(t){if(typeof t!="string"||QS(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:i,second:s,fraction:a,offset:l}=QS(this.text),d=new Date(0);return d.setUTCFullYear(t,n-1,r),d.setUTCHours(o,i-l,s,Number(a.padEnd(3,"0").slice(0,3))),d}}});function YL(e,t){let n=oJ.test(e);if(!n&&!iJ.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),s=o.length<=(n?19:aJ[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return Ge(s!==void 0&&s>=-KL&&s<KL,t,()=>`integer out of range ${Rt(e)}`),s>=-GL&&s<=GL?Number(s):s}function JL(e){if(typeof e!="string"||!sJ.test(e))return;if(e in qL)return qL[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}function XL(e,t){let n=JL(e);if(n!==void 0)return Ge(n!==null,t,()=>`float out of range ${Rt(e)}`),new jy(e)}var oJ,iJ,sJ,KL,GL,aJ,qL,jy,t_=$(()=>{Id();oJ=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,iJ=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,sJ=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,KL=2n**63n,GL=BigInt(Number.MAX_SAFE_INTEGER),aJ={__proto__:null,x:16,o:21,b:63};qL={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};jy=class{constructor(t){let n=JL(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 ra(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function Ll(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":Rt(t)}function n7(e,t,n){throw new mo(t==="\r"?t7:`${ZS(t)} is not allowed in ${n}`,e.line)}function r7(e){e.text[e.pos]==="#"&&(na(e,lJ),Wy(e)||n7(e,e.text[e.pos],"a comment"))}function Hy(e){if(e.text[e.pos]===`
|
|
@@ -155,7 +155,7 @@ You can change this anytime from the lock icon in the sidebar header.`)){O7();re
|
|
|
155
155
|
<path fill="#EA4335" d="M12 6.08c1.43 0 2.72.49 3.74 1.45l2.8-2.8C16.85 3.14 14.63 2.2 12 2.2a9.8 9.8 0 0 0-8.76 5.42l3.25 2.52C7.27 7.81 9.44 6.08 12 6.08Z"/>
|
|
156
156
|
</svg>
|
|
157
157
|
`});var _F,CF=$(()=>{P();_F=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg>`});var K_,EF=$(()=>{P();K_=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z"></path></svg>`});var RF,TF=$(()=>{P();RF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M10.212 8.976V7.62c.127-.01.256-.017.388-.021 3.596-.117 5.957 3.184 5.957 3.184s-2.548 3.647-5.282 3.647a3.227 3.227 0 01-1.063-.175v-4.109c1.4.174 1.681.812 2.523 2.258l1.873-1.627a4.905 4.905 0 00-3.67-1.846 6.594 6.594 0 00-.729.044m0-4.476v2.025c.13-.01.259-.019.388-.024 5.002-.174 8.261 4.226 8.261 4.226s-3.743 4.69-7.643 4.69c-.338 0-.675-.031-1.007-.092v1.25c.278.038.558.057.838.057 3.629 0 6.253-1.91 8.794-4.169.421.347 2.146 1.193 2.501 1.564-2.416 2.083-8.048 3.763-11.24 3.763-.308 0-.603-.02-.894-.048V19.5H24v-15H10.21zm0 9.756v1.068c-3.356-.616-4.287-4.21-4.287-4.21a7.173 7.173 0 014.287-2.138v1.172h-.005a3.182 3.182 0 00-2.502 1.178s.615 2.276 2.507 2.931m-5.961-3.3c1.436-1.935 3.604-3.148 5.961-3.336V6.523C5.81 6.887 2 10.723 2 10.723s2.158 6.427 8.21 7.015v-1.166C5.77 16 4.25 10.958 4.25 10.958h-.002z"></path></svg>`});var MF,AF=$(()=>{P();MF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>`});var IF,LF=$(()=>{P();IF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"></path></svg>`});var FF,BF=$(()=>{P();FF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"></path></svg>`});var OF,PF=$(()=>{P();OF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12 0C8.016 0 4.756.255 2.493 2.516.23 4.776 0 8.033 0 12.012c0 3.98.23 7.235 2.494 9.497C4.757 23.77 8.017 24 12 24c3.983 0 7.243-.23 9.506-2.491C23.77 19.247 24 15.99 24 12.012c0-3.984-.233-7.243-2.502-9.504C19.234.252 15.978 0 12 0zM4.906 7.405h5.624c1.47 0 3.007.068 3.764.827.746.746.827 2.233.83 3.676v4.54a.15.15 0 0 1-.152.147h-1.947a.15.15 0 0 1-.152-.148V11.83c-.002-.806-.048-1.634-.464-2.051-.358-.36-1.026-.441-1.72-.458H7.158a.15.15 0 0 0-.151.147v6.98a.15.15 0 0 1-.152.148H4.906a.15.15 0 0 1-.15-.148V7.554a.15.15 0 0 1 .15-.149zm12.131 0h1.949a.15.15 0 0 1 .15.15v8.892a.15.15 0 0 1-.15.148h-1.949a.15.15 0 0 1-.151-.148V7.554a.15.15 0 0 1 .151-.149zM8.92 10.948h2.046c.083 0 .15.066.15.147v5.352a.15.15 0 0 1-.15.148H8.92a.15.15 0 0 1-.152-.148v-5.352a.15.15 0 0 1 .152-.147Z"/></svg>
|
|
158
|
-
`});var NF,DF=$(()=>{P();NF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z"></path></svg>`});function sh(e){return Object.hasOwn(zF,e)?zF[e]:cX}var zF,cX,G_=$(()=>{"use strict";P();wF();xF();SF();CF();EF();TF();AF();LF();BF();PF();DF();zF={anthropic:vF,deepseek:kF,google:$F,moonshot:K_,moonshotai:K_,nvidia:RF,openai:MF,openrouter:IF,qwen:FF,xiaomi:OF,"x-ai":_F,"z-ai":NF},cX=p`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="12" height="12" rx="3"/><path d="M8 1v3m4-3v3M8 16v3m4-3v3M1 8h3m-3 4h3m12-4h3m-3 4h3"/></svg>`});function q_(e){let t=new Map(e.map(r=>[r.id,r])),n=new Set;return e.flatMap(r=>{if(n.has(r.id))return[];let o=r.id.endsWith("-pro")?r.id.slice(0,-4):r.id,i=t.get(o),s=t.get(`${o}-pro`);return!/(?:^|\/)gpt-.+$/u.test(o)||o.endsWith("-pro")||!i||!s?[r]:(n.add(i.id),n.add(s.id),[{...i,pro:s}])})}function Y_(e){return[...Map.groupBy(q_(e),n=>ih(n.id).key)].map(([n,r])=>({key:n,models:r}))}function UF(e,t){if(e.length===0)return[];let n=Math.min(e.length,Math.max(1,t)),r=e.map(d=>d.models.length*2+3),o=r.reduce((d,u)=>d+u,0),i=Math.max(...r);for(;i<o;){let d=Math.floor((i+o)/2),u=0,f=1;for(let h of r)u+h>d&&(f++,u=0),u+=h;f>n?i=d+1:o=d}let s=[],a=[],l=0;for(let[d,u]of e.entries())a.length>0&&(l+r[d]>i||e.length-d===n-s.length-1)&&(s.push(a),a=[],l=0),a.push(u),l+=r[d];return s.push(a),s}var jF=$(()=>{"use strict";ca()});var dX,J_,X_=$(()=>{"use strict";P();ca();jF();G_();dX=p`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg>`,J_=class extends fe{static properties={loadModels:{attribute:!1},pending:{type:Boolean},value:{attribute:!1},effort:{attribute:!1},hasExtra:{type:Boolean,attribute:"has-extra"},_models:{state:!0},_error:{state:!0},_menuColumns:{state:!0}};static styles=Qe`:host{display:block;min-width:0;container:scan-controls / inline-size}*{box-sizing:border-box}.layout{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr);gap:1.25rem;align-items:start}.layout.with-extra{grid-template-columns:minmax(16rem,.9fr) minmax(14rem,1.2fr) minmax(14rem,auto)}.field{min-width:0;min-height:4.9rem}.model-placeholder{height:3.25rem;display:flex;align-items:center;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--muted);background:var(--bg);font-size:.75rem}.effort-placeholder{height:.3rem;margin:1rem .6rem;border-radius:999px;background:var(--surface-active)}.label{display:flex;justify-content:space-between;align-items:center;margin-bottom:.4rem;color:var(--muted);font-size:.72rem}output{color:var(--text);font-size:.72rem;font-weight:500}details{position:relative}.model-control{position:relative}summary{display:flex;align-items:center;gap:.55rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg);color:var(--text);list-style:none;transition:border-color .12s,background .12s}summary:hover,details[open] summary{border-color:var(--muted);background:var(--surface-active)}summary::-webkit-details-marker{display:none}summary,.menu{user-select:none}summary>svg{width:.9rem;height:.9rem;margin-left:auto;color:var(--muted)}.selected-copy{display:grid;gap:.1rem;flex:1;min-width:0}.selected-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;font-weight:500}.selected-copy small{color:var(--muted);font-size:.63rem}.pro-space{width:3.65rem;flex:0 0 3.65rem}.pro-toggle,.pro-checkbox{position:absolute;right:2.05rem;top:50%;transform:translateY(-50%);align-items:center;justify-content:center;gap:.3rem;width:3.65rem;height:1.65rem;padding:.2rem .3rem;color:var(--muted);font:inherit;font-size:.65rem;font-weight:600;cursor:default;user-select:none}.pro-toggle{display:var(--switch-button-display, inline-flex);border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg)}.pro-checkbox{display:var(--switch-checkbox-display, none)}.pro-checkbox input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}.pro-toggle:hover{border-color:var(--muted);color:var(--text)}.pro-track{position:relative;flex:0 0 1.3rem;height:.8rem;border-radius:var(--ui-radius, 999px);background:var(--border)}.pro-track:after{content:"";position:absolute;top:.15rem;left:.15rem;width:.5rem;height:.5rem;border-radius:50%;background:var(--muted);transition:transform .12s,background .12s}.pro-toggle[aria-checked=true]{color:var(--accent);border-color:rgb(from var(--accent) r g b / .45);background:rgb(from var(--accent) r g b / .08)}.pro-toggle[aria-checked=true] .pro-track{background:rgb(from var(--accent) r g b / .25)}.pro-toggle[aria-checked=true] .pro-track:after{transform:translate(.5rem);background:var(--accent)}.icon{display:inline-grid;place-items:center;width:1.7rem;height:1.5rem;flex:0 0 1.7rem;color:var(--text)}.icon svg{display:block;width:1.12rem;height:1.12rem}.icon.openai{color:#10a37f}.icon.anthropic{color:#d97757}.icon.moonshotai{color:#8068d9}.icon.google{color:#4285f4}.icon.nvidia{color:#76b900}.icon.qwen{color:#f97316}.icon.deepseek{color:#4d8dff}.icon.xiaomi{color:#ff6900}.icon.moonshotai svg{transform:scale(.78)}.icon.qwen svg{transform:scale(.82)}.icon.nvidia svg{transform:scale(.86)}.icon.deepseek svg{transform:scale(.9)}.extra{display:flex;min-width:0;min-height:4.9rem;align-items:flex-end;align-self:end;padding-bottom:.05rem}.menu{visibility:hidden;position:fixed;z-index:1000;width:min(46rem,calc(100vw - 1rem));max-height:calc(100dvh - 1rem);overflow:auto;overscroll-behavior:contain;padding:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface-active);color:var(--text);box-shadow:0 .65rem 1.8rem #0000008c}details[open] .menu[data-positioned]{visibility:visible}.groups{display:grid;grid-template-columns:repeat(var(--model-columns, 1),minmax(0,1fr));gap:1rem;align-items:start}.provider-column{min-width:0}fieldset{min-width:0;margin:0 0 .6rem;padding:0;border:0}fieldset:last-child{margin-bottom:0}legend{display:flex;align-items:center;gap:.45rem;width:100%;min-height:1.9rem;padding:.35rem .5rem .25rem;border-bottom:1px solid rgb(from var(--border) r g b / .7);color:var(--muted);font-size:.64rem;font-weight:700;letter-spacing:.055em;text-transform:uppercase}legend .icon{width:.88rem;height:1.25rem;flex-basis:.88rem}legend .icon svg{width:.88rem;height:.88rem}.choice{display:flex;align-items:center;gap:.5rem;padding:.35rem .5rem;border-radius:var(--ui-radius, 4px);font-size:.76rem}.choice:hover{background:rgb(from var(--text) r g b / .05)}.choice:has(:checked){color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.choice input{margin:0;accent-color:var(--accent)}.choice span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slider{--thumb-size: 1rem;padding:.15rem .6rem 0}input[type=range]{appearance:none;display:block;width:100%;height:var(--thumb-size);margin:.4rem 0 .5rem;padding:0;border:0;background:transparent}input[type=range]::-webkit-slider-runnable-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-moz-range-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-webkit-slider-thumb{appearance:none;width:var(--thumb-size);height:var(--thumb-size);margin-top:calc((.3rem - var(--thumb-size)) / 2);border:0;border-radius:50%;background:var(--accent)}input[type=range]::-moz-range-thumb{width:var(--thumb-size);height:var(--thumb-size);border:0;border-radius:50%;background:var(--accent)}input[type=range]:disabled{opacity:.5}.steps{position:relative;height:1.3rem;margin:0 calc(var(--thumb-size) / 2)}.step{position:absolute;top:0;left:var(--step-position);transform:translate(-50%);padding:.35rem 0 0;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.62rem;white-space:nowrap;cursor:default}.step:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:1px;height:.2rem;background:var(--muted)}.step.active{color:var(--accent)}:is(summary,input,button):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.message{margin:0;color:var(--muted);font-size:.75rem}.error{color:var(--critical, #e5534b)}.retry{margin-left:.5rem;padding:.2rem .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--bg);color:var(--text);font:inherit}@container scan-controls (max-width: 50rem){.layout.with-extra{grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr)}.layout.with-extra .extra{grid-column:1 / -1;align-self:start;min-height:0}}@container scan-controls (max-width: 33rem){.layout,.layout.with-extra{grid-template-columns:minmax(0,1fr);gap:1rem}.layout.with-extra .extra{grid-column:auto}}`;constructor(){super(),this.loadModels=lv,this.pending=!1,this.value=null,this.effort=null,this.hasExtra=!1,this._models=[],this._error=null,this._menuColumns=1,this._positionRequest=0,this._onOutside=t=>{t.composedPath().includes(this)||this._close()},this._onViewportChange=()=>this._positionMenu()}connectedCallback(){super.connectedCallback(),document.addEventListener("pointerdown",this._onOutside),window.addEventListener("resize",this._onViewportChange),window.addEventListener("scroll",this._onViewportChange,!0),this.hasUpdated&&this._load()}updated(t){(t.has("loadModels")||t.has("pending"))&&this.isConnected&&this._load(),t.has("_models")&&this.renderRoot.querySelector("details")?.open&&(this._resetMenuPosition(),this._positionMenu())}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort(),document.removeEventListener("pointerdown",this._onOutside),window.removeEventListener("resize",this._onViewportChange),window.removeEventListener("scroll",this._onViewportChange,!0)}async _load(){if(this._controller?.abort(),this.pending)return;let t=new AbortController;this._controller=t,this._error=null;let n=!1,r=o=>{if(t.signal.aborted)return;n=!0,this._models=o.models;let i=o.models.find(s=>s.id===this.value);i?i.efforts.includes(this.effort)||this._setEffort(jd(i)):this._select(o.defaultModel)};try{r(await this.loadModels(t.signal,r))}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}}_close(){this._resetMenuPosition();let t=this.renderRoot.querySelector("details");t&&(t.open=!1)}_resetMenuPosition(){this._positionRequest++;let t=this.renderRoot.querySelector(".menu");t&&delete t.dataset.positioned}_toggleMenu(t){this._resetMenuPosition(),t.currentTarget.open&&this._positionMenu()}get _selectedRow(){return q_(this._models).find(t=>t.id===this.value||t.pro?.id===this.value)}async _positionMenu(){let t=++this._positionRequest,n=this.renderRoot.querySelector("details"),r=this.renderRoot.querySelector("summary"),o=this.renderRoot.querySelector(".menu");if(!n?.open||!r||!o)return;let i=r.getBoundingClientRect(),s=6,a=8,l=Y_(this._models),d=l.reduce((_,E)=>_+E.models.length,0),u=Math.min(3,l.length,Math.ceil((d+l.length*1.5)/9)),f=parseFloat(getComputedStyle(o).fontSize),h=0;for(let _ of o.querySelectorAll(".choice span, legend")){let E=document.createRange();E.selectNodeContents(_),h=Math.max(h,E.getBoundingClientRect().width)}let m=Math.max(11*f,Math.min(18*f,h+2.5*f)),g=1.3*f+2,y=Math.max(1,Math.min(u,Math.floor((window.innerWidth-a*2-g+f)/(m+f)))),w=Math.min(y*m+(y-1)*f+g,window.innerWidth-a*2),x=Math.max(a,Math.min(i.left,window.innerWidth-w-a));if(this._menuColumns=y,await this.updateComplete,t!==this._positionRequest||!this.isConnected||!n.open)return;o.style.left=`${x}px`,o.style.width=`${w}px`,o.style.setProperty("--model-columns",y),o.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let v=o.getBoundingClientRect().height,k=window.innerHeight-i.bottom-s-a,S=i.top-s-a,C=k<v&&S>k?i.top-s-v:i.bottom+s;o.style.bottom="auto",o.style.top=`${Math.max(a,Math.min(C,window.innerHeight-v-a))}px`,o.dataset.positioned=""}_select(t,{preserveEffort:n=!1,close:r=!0}={}){let o=this._models.find(i=>i.id===t);o&&(this.value=t,this._setEffort(n&&o.efforts.includes(this.effort)?this.effort:jd(o)),r&&this._close())}_selectRow(t){let n=this._selectedRow?.pro?.id===this.value;this._select(n&&t.pro?t.pro.id:t.id)}_togglePro(){let t=this._selectedRow;t?.pro&&this._select(this.value===t.pro.id?t.id:t.pro.id,{preserveEffort:!0,close:!1})}_setEffort(t){this.effort=t,this.dispatchEvent(new CustomEvent("model-change",{detail:{model:this.value,effort:t},bubbles:!0,composed:!0}))}render(){let t=this._models.find(i=>i.id===this.value);if(this.pending||!t)return p`<div class="${`layout ${this.hasExtra?"with-extra":""}`}" aria-busy="true"><div class="field"><span class="label">Model</span><div class="model-placeholder" role="${this._error?"alert":"status"}">${this._error?p`Couldn’t load models. <button type="button" class="retry" @click="${()=>{this._load()}}">Retry</button>`:"Loading models\u2026"}</div></div><div class="field" aria-hidden="true"><span class="label">Effort</span><div class="effort-placeholder"></div></div>${this.hasExtra?p`<div class="extra"><slot name="effort-extra"></slot></div>`:b}</div>`;let n=this._selectedRow,r=ih(t.id),o=UF(Y_(this._models),this._menuColumns);return p`${this._error?p`<p class="message error" role="alert">Couldn’t refresh models: ${this._error}<button class="retry" @click="${()=>{this._load()}}">Retry</button></p>`:b}<div class="${`layout ${this.hasExtra?"with-extra":""}`}"><div class="field"><span class="label" id="model-label">Model</span><div class="model-control"><details @toggle="${this._toggleMenu}" @keydown="${i=>{i.key==="Escape"&&(this._close(),this.renderRoot.querySelector("summary")?.focus())}}"><summary aria-labelledby="model-label selected-model" @click="${this._resetMenuPosition}"><span class="${`icon ${r.key}`}" aria-hidden="true">${sh(r.key)}</span><span class="selected-copy"><strong id="selected-model">${Nl(n.id)}</strong><small>${r.name}</small></span>${n.pro?p`<span class="pro-space" aria-hidden="true"></span>`:b}${dX}</summary><div class="menu"><div class="groups">${o.map(i=>p`<div class="provider-column">${i.map(s=>this._modelSection(s))}</div>`)}</div></div></details>${n.pro?p`<button type="button" class="pro-toggle" role="switch" aria-label="Pro model" aria-checked="${t.id===n.pro.id}" @click="${this._togglePro}"><span>Pro</span><span class="pro-track" aria-hidden="true"></span></button><label class="pro-checkbox"><input type="checkbox" aria-label="Pro model" .checked="${t.id===n.pro.id}" @change="${this._togglePro}"><span>Pro</span></label>`:b}</div></div>${t.efforts.length>0?this._effortSlider(t.efforts):p`<div class="field" aria-hidden="true"></div>`} ${this.hasExtra?p`<div class="extra"><slot name="effort-extra"></slot></div>`:b}</div>`}_modelSection({key:t,models:n}){return p`<fieldset><legend><span class="${`icon ${t}`}" aria-hidden="true">${sh(t)}</span>${ih(n[0].id).name}</legend>${n.map(r=>p`<label class="choice"><input type="radio" name="scan-model" value="${r.id}" .checked="${r.id===this.value||r.pro?.id===this.value}" @change="${()=>{this._selectRow(r),this.renderRoot.querySelector("summary")?.focus()}}"><span>${Nl(r.id)}</span></label>`)}</fieldset>`}_effortSlider(t){let n=Math.max(0,t.indexOf(this.effort)),r=Math.max(1,t.length-1);return p`<div class="field"><div class="label"><label for="effort">Effort</label><output for="effort">${Dl(t[n])}</output></div><div class="slider" style="${`--effort-fill: calc(var(--thumb-size) / 2 + (100% - var(--thumb-size)) * ${n/r})`}"><input id="effort" type="range" min="0" max="${r}" step="1" .value="${String(n)}" ?disabled="${t.length===1}" aria-valuetext="${Dl(t[n])}" @input="${o=>this._setEffort(t[Number(o.target.value)])}"><div class="steps">${t.map((o,i)=>p`<button type="button" class="${`step ${o===this.effort?"active":""}`}" style="${`--step-position: ${i/r*100}%`}" aria-label="${`Set effort to ${Dl(o)}`}" aria-pressed="${o===this.effort}" @click="${()=>this._setEffort(o)}">${Dl(o)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",J_)});var Wi,dv=$(()=>{"use strict";P();er();Wi=class extends fe{static properties={options:{attribute:!1},value:{attribute:!1},label:{type:String},placeholder:{type:String},disabled:{type:Boolean},_query:{state:!0},_facet:{state:!0},_open:{state:!0}};static styles=Qe`:host{display:block;min-width:0}:host,.menu{-webkit-app-region:no-drag;app-region:no-drag}*{box-sizing:border-box}button,input{font:inherit;color:var(--text)}button{cursor:default;user-select:none}.trigger{display:flex;align-items:center;gap:.6rem;width:100%;height:2rem;padding:.28rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);text-align:left;font-size:.76rem}.trigger:hover:not(:disabled){border-color:var(--muted)}.trigger:disabled{opacity:.5}:host([variant=filter]){display:inline-block;max-width:min(20rem,100%)}:host([variant=filter]) .trigger{height:30px;min-width:8.5rem;background:transparent;font-size:.8rem;font-weight:500;border-radius:var(--ui-radius, 4px)}.name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.option-copy{flex:1;min-width:0;display:grid;gap:.08rem}.secondary{color:var(--muted);font-size:.64rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{display:grid;place-items:center;flex:0 0 1.5rem;width:1.5rem;height:1.5rem;border-radius:50%;color:var(--accent);background:rgb(from var(--accent) r g b / .13);font-family:sans-serif;font-size:.62rem;font-weight:600}.detail,.count{flex:0 0 auto;color:var(--muted);font-size:.66rem;font-variant-numeric:tabular-nums;white-space:nowrap}svg{flex:0 0 auto;width:.9rem;height:.9rem;color:var(--muted)}.menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg);color:var(--text);box-shadow:0 .6rem 1.6rem #0006;user-select:none}.menu:popover-open{display:flex;flex-direction:column}.menu[data-positioned]{visibility:visible}.search{display:flex;align-items:center;gap:.5rem;flex:0 0 auto;padding:.55rem .65rem;border-bottom:1px solid var(--border)}input{flex:1;min-width:0;width:0;padding:.15rem 0;border:0;background:transparent;font-size:.78rem;outline:none}input::placeholder{color:var(--muted)}.search:focus-within{box-shadow:inset 0 -2px var(--accent)}.body{display:flex;min-height:0;flex:1}.facets{width:10.5rem;flex:0 0 auto;padding:.35rem;overflow:auto;overscroll-behavior:none;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.org{display:flex;align-items:center;gap:.4rem;width:100%;padding:.4rem .45rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.7rem}.org[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.results{flex:1;min-width:0;overflow:auto;overscroll-behavior:none;padding:.3rem}.group+.group{margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--border)}.heading{position:sticky;top:-.3rem;z-index:1;display:flex;align-items:center;gap:.4rem;margin:0;padding:.4rem .5rem;color:var(--muted);background:var(--bg);font-size:.68rem;font-weight:600}.heading svg{width:.8rem;height:.8rem}.option{display:flex;align-items:center;gap:.65rem;width:100%;padding:.35rem .5rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.76rem}.option svg{width:.8rem;height:.8rem;opacity:0;color:var(--accent)}.option[aria-selected=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.option[aria-selected=true] svg{opacity:1}.option:disabled{opacity:.45}.option:hover:not(:disabled),.org:hover{background:rgb(from var(--text) r g b / .05)}.pinned{padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid var(--border)}.empty{margin:0;padding:1.3rem .7rem;color:var(--muted);font-size:.76rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(max-width:40rem){.facets{width:8.5rem}}@media(max-width:28rem){.facets{width:7rem}.option{gap:.35rem}}`;constructor(){super(),this.options=[],this.value=null,this.label="Choose",this.placeholder="Choose",this.disabled=!1,this._query="",this._facet=null,this._open=!1,this._menuHeight=null,this._onViewport=()=>this._position()}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0})),window.addEventListener("resize",this._onViewport),window.addEventListener("scroll",this._onViewport,!0),this._scrollRoots=[];for(let t=this.getRootNode();t.host;t=t.host.getRootNode())t.addEventListener("scroll",this._onViewport,!0),this._scrollRoots.push(t)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onViewport),window.removeEventListener("scroll",this._onViewport,!0);for(let t of this._scrollRoots??[])t.removeEventListener("scroll",this._onViewport,!0);this._scrollRoots=[]}render(){let t=this.options.find(s=>s.value===this.value),n=this.choices(),o=[...n.pinned,...n.sections.flatMap(s=>s.options)].filter(s=>!s.disabled),i=o.find(s=>s.value===this.value)?.value??o[0]?.value;return p`<button type="button" class="trigger" popovertarget="selector-menu" aria-label="${this.label}" aria-haspopup="dialog" aria-expanded="${this._open}" ?disabled="${this.disabled}">${t?this.optionIcon(t):b}<span class="name" data-tooltip-truncated data-tooltip="${t?.label??b}">${t?.label??this.placeholder}</span>${t?.detail?p`<span class="detail">${t.detail}</span>`:b} <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg></button><div class="menu" id="selector-menu" popover="auto" role="dialog" aria-label="${this.label}" @beforetoggle="${this._beforeToggle}" @toggle="${this._toggle}" @keydown="${this._keyDown}"><div class="search"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3.5 3.5"/></svg> <input type="search" placeholder="${`${this.searchLabel}\u2026`}" aria-label="${this.searchLabel}" aria-controls="selector-options" .value="${Je(this._query)}" @input="${s=>{this._query=s.target.value}}"> <span class="count" role="status">${n.count}${n.count===n.total?"":` / ${n.total}`}</span></div><div class="body">${n.showFacets?p`<div class="facets" role="group" aria-label="${this.facetLabel}"><button type="button" class="org" aria-pressed="${n.activeFacet==null}" @click="${()=>this._filterFacet(null)}"><span class="name">${this.allFacetsLabel}</span><span class="count">${n.total}</span></button> ${n.facets.map(s=>p`<button type="button" class="org" aria-pressed="${n.activeFacet===s.value}" @click="${()=>this._filterFacet(s.value)}"><span class="name" data-tooltip-truncated data-tooltip="${s.name}">${s.name}</span><span class="count">${s.count}</span></button>`)}</div>`:b}<div class="results" id="selector-options" role="listbox" aria-label="${this.optionsLabel}">${n.pinned.length>0?p`<div class="pinned">${n.pinned.map(s=>this._option(s,!1,i))}</div>`:b} ${n.sections.map((s,a)=>p`<div class="group" role="group" aria-labelledby="${s.label?`selector-group-${a}`:b}">${s.label?p`<h3 class="heading" id="${`selector-group-${a}`}">${s.organization?p`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" aria-hidden="true"><path d="M3 14V3h6v11M9 7h4v7M1 14h14M5 6h2M5 9h2M5 12h2"/></svg>`:b}${s.label}</h3>`:b} ${s.options.map(l=>this._option(l,s.organization,i))}</div>`)} ${n.count?b:p`<p class="empty">${this.options.length>0?this.noMatchesLabel:this.emptyLabel}</p>`}</div></div></div>`}optionIcon(t){return t.initials?p`<span class="avatar" aria-hidden="true">${t.initials}</span>`:b}optionTooltip(t){return t.label}_option(t,n,r){let o=t.displayLabel??(n?t.name:t.label),i=this.optionTooltip(t);return p`<button type="button" class="option" role="option" ?data-reset="${t.reset}" ?disabled="${t.disabled}" aria-label="${t.label}" aria-selected="${t.value===this.value}" tabindex="${t.value===r?0:-1}" @click="${()=>this._pick(t.value)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m3 8 3 3 7-7"/></svg>${this.optionIcon(t)}<span class="option-copy"><span class="name" ?data-tooltip-truncated="${o===i}" data-tooltip="${i}">${o}</span>${t.secondary?p`<span class="secondary" data-tooltip-truncated data-tooltip="${t.secondary}">${t.secondary}</span>`:b}</span>${t.detail?p`<span class="detail">${t.detail}</span>`:b}</button>`}updated(t){this.disabled&&this._open&&this._close(!1),t.has("options")&&(this._menuHeight=null),this._position(),(t.has("_query")||t.has("_facet"))&&(this.renderRoot.querySelector(".results").scrollTop=0)}_beforeToggle(t){this._open=t.newState==="open",delete t.target.dataset.positioned,this._open&&(this._query="",this._facet=null,this._menuHeight=null)}async _toggle(t){t.newState==="open"&&(await this.updateComplete,!(!this._open||!this.isConnected)&&(this._position(),this.renderRoot.querySelector("input").focus({preventScroll:!0})))}_position(){let t=this.renderRoot.querySelector(".menu");if(!t?.matches(":popover-open"))return;let n=this.renderRoot.querySelector(".trigger").getBoundingClientRect(),r=8,o=t.querySelector(".facets")!=null,i=Math.min(Math.max(n.width,o?560:360),window.innerWidth-r*2),s=window.innerHeight-n.bottom-r-4,a=n.top-r-4;t.style.width=`${i}px`,this._menuHeight??=Math.min(480,t.querySelector(".search").offsetHeight+Math.max(t.querySelector(".results").scrollHeight,t.querySelector(".facets")?.scrollHeight??0)+2);let l=this._menuHeight,d=s<l&&a>s;t.style.maxHeight=`${Math.max(0,Math.min(l,d?a:s))}px`,t.style.left=`${Math.max(r,Math.min(n.left,window.innerWidth-i-r))}px`,t.style.top=`${Math.max(r,d?n.top-t.offsetHeight-4:n.bottom+4)}px`,t.dataset.positioned=""}_filterFacet(t){this._facet=t,this.renderRoot.querySelector("input").focus({preventScroll:!0})}_keyDown(t){if(t.stopPropagation(),t.key==="Escape"){t.preventDefault(),this._close();return}let n=this.renderRoot.querySelector("input"),r=this.renderRoot.activeElement,o=[...this.renderRoot.querySelectorAll(".option:not(:disabled)")],i=o.indexOf(r);if(r!==n&&i<0)return;if(t.key==="Enter"&&r===n){t.preventDefault(),(this.renderRoot.querySelector(".option:not([data-reset]):not(:disabled)")??o[0])?.click();return}let s;if(t.key==="ArrowDown")s=Math.min(i+1,o.length-1);else if(t.key==="ArrowUp")s=i-1;else if(r!==n&&t.key==="Home")s=0;else if(r!==n&&t.key==="End")s=o.length-1;else if(r!==n&&t.key.length===1&&t.key!==" "&&!t.ctrlKey&&!t.metaKey&&!t.altKey){t.preventDefault(),this._query+=t.key,n.focus();return}else return;t.preventDefault();for(let[a,l]of o.entries())l.tabIndex=a===s?0:-1;s<0?n.focus():o[s]?.focus()}_pick(t){this.disabled||!this.options.some(n=>n.value===t&&!n.disabled)||(this._close(),this.dispatchEvent(new CustomEvent(this.changeEvent,{detail:{value:t},bubbles:!0,composed:!0})))}_close(t=!0){this.renderRoot.querySelector(".menu").hidePopover(),this._open=!1,t&&this.renderRoot.querySelector(".trigger").focus({preventScroll:!0})}}});function uX(e){if(/^https?:\/\//iu.test(e)){try{let n=new URL(e),r=n.pathname.split("/").filter(Boolean);if(r.length>=2)return{owner:`${n.host}/${r[0]}`,name:r.slice(1).join("/")}}catch{}return{owner:null,name:e}}let t=/^([^\s/:]+)\/(.+)$/u.exec(e);return t?{owner:t[1],name:t[2]}:{owner:null,name:e}}function WF(e,t="",n=null,{includeSingletonOrganizations:r=!1}={}){let o=e.map(x=>({...x,...x.special?{owner:null,name:x.label}:uX(x.label)})),i=new Map;for(let x of o)x.owner!=null&&i.set(x.owner,(i.get(x.owner)??0)+1);let s=r?1:2,a=[...i].filter(([,x])=>x>=s).toSorted(([x],[v])=>Z_(x,v)).map(([x,v])=>({value:x,name:x,count:v})),l=x=>(i.get(x.owner)??0)<s,d=o.filter(x=>!x.special&&!x.reset&&l(x)).length;d>0&&a.push({value:Q_,name:"Other",count:d});let u=a.some(x=>x.value===n)?n:null,f=HF(t.trim()).split(/\s+/u).filter(Boolean),h=x=>f.every(v=>HF(x.label).includes(v)),m=o.filter(x=>x.reset||x.special&&h(x)),g=o.filter(x=>!x.reset&&!x.special&&h(x)&&(u==null||(u===Q_?l(x):x.owner===u))),y=new Map;for(let x of g){let v=(i.get(x.owner)??0)>=s?x.owner:null;y.has(v)||y.set(v,[]),y.get(v).push(x)}let w=[...y].toSorted(([x],[v])=>x==null?1:v==null?-1:Z_(x,v)).map(([x,v])=>({label:x??(a.some(k=>k.value!==Q_)?"Other":null),organization:x!=null,options:v.toSorted((k,S)=>Z_(k.label,S.label))}));return{facets:a,activeFacet:u,pinned:m,sections:w,count:g.length+m.filter(x=>!x.reset).length,total:o.filter(x=>!x.reset).length,showFacets:a.length>1}}var HF,Z_,Q_,VF=$(()=>{"use strict";HF=e=>e.normalize("NFKC").toLocaleLowerCase(),Z_=(e,t)=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}),Q_=Symbol("other repositories")});var e2,uv=$(()=>{"use strict";dv();VF();e2=class extends Wi{constructor(){super(),this.label="Choose repository",this.placeholder="Choose repository"}get searchLabel(){return"Search repositories"}get optionsLabel(){return"Repositories"}get facetLabel(){return"Filter by organization"}get allFacetsLabel(){return"All organizations"}get noMatchesLabel(){return"No matching repositories"}get emptyLabel(){return"No repositories available"}get changeEvent(){return"repository-change"}choices(){return WF(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",e2)});var t2,n2=$(()=>{"use strict";dv();t2=class extends Wi{constructor(){super(),this.label="Choose workspace",this.placeholder="Choose workspace"}get searchLabel(){return"Search workspaces"}get optionsLabel(){return"Workspaces"}get noMatchesLabel(){return"No matching workspaces"}get emptyLabel(){return"No workspaces available"}get changeEvent(){return"workspace-change"}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),n=this.options.filter(r=>t.every(o=>r.label.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((r,o)=>r.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:n}],facets:[],showFacets:!1,count:n.length,total:this.options.length}}};customElements.get("workspace-selector")||customElements.define("workspace-selector",t2)});function pX(e){return e.map(t=>{let n=["sourcemap","sourcemaps"].includes(t.kind)||t.filename.toLowerCase().endsWith(".map")?"sourcemap":"stasis",r=n==="sourcemap"?"Sourcemap":"Stasis",o=[];if(typeof t.size=="string"&&!["","\u2014"].includes(t.size)&&o.push(t.size),t.files){o.push(`${t.files.length.toLocaleString()} files`);let{lines:i}=Zf(t.files);i!=null&&o.push(`${i.toLocaleString()} LoC`)}else t.summary&&(Number.isSafeInteger(t.summary.files)&&t.summary.files>=0&&o.push(`${t.summary.files.toLocaleString()} files`),Number.isSafeInteger(t.summary.lines)&&t.summary.lines>=0&&o.push(`${t.summary.lines.toLocaleString()} LoC`));return{value:t.id,label:t.filename,detail:r,format:n,secondary:o.join(" \xB7 ")}})}var r2,pv=$(()=>{"use strict";P();wt();dv();jt();Ol();r2=class extends Wi{static properties={bundles:{attribute:!1}};static styles=[Wi.styles,Qe`.bundle-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 1.05rem;width:1.05rem;height:1.05rem;color:var(--muted)}.bundle-icon img,.bundle-icon svg{display:block;width:100%;height:100%;opacity:1}.option{gap:.5rem;padding-block:.25rem}.option-copy{gap:0}.option .name{line-height:1.3}.option .bundle-icon{flex-basis:1.35rem;width:1.35rem;height:1.35rem;margin-right:.15rem}.secondary{line-height:1.25;font-variant-numeric:tabular-nums}`];constructor(){super(),this.bundles=[],this.label="Choose bundle",this.placeholder="Choose bundle"}get searchLabel(){return"Search bundles"}get optionsLabel(){return"Bundles"}get noMatchesLabel(){return"No matching bundles"}get emptyLabel(){return"No stored bundles"}get changeEvent(){return"bundle-change"}willUpdate(t){t.has("bundles")&&(this.options=pX(this.bundles))}optionIcon(t){return p`<span class="bundle-icon" aria-hidden="true">${t.format==="sourcemap"?te(Yn):p`<img src="./stasis.svg" alt="">`}</span>`}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),n=this.options.filter(r=>t.every(o=>`${r.label} ${r.detail}`.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((r,o)=>r.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:n}],facets:[],showFacets:!1,count:n.length,total:this.options.length}}};customElements.get("bundle-selector")||customElements.define("bundle-selector",r2)});var fv,hv,mv,gv=$(()=>{"use strict";P();fv=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg>`,hv=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg>`,mv=Qe`.row-action{display:grid;place-items:center;flex:0 0 auto;width:1.5rem;height:1.5rem;padding:.25rem;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.row-action:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.row-action:disabled{opacity:.4}.row-action svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:1.4}`});var ah,o2,KF=$(()=>{"use strict";P();wt();Mb();ca();gv();pv();uv();n2();ah=e=>({kind:e,sourceIds:[null],ids:new Set}),o2=class extends fe{static properties={mode:{type:String},loadSources:{attribute:!1},restore:{attribute:!1},_sources:{state:!0},_loading:{state:!0},_error:{state:!0},_merge:{state:!0},_link:{state:!0}};constructor(){super(),this.mode="link",this._sources=null,this._loading=!1,this._error=null,this._merge=ah("bundle"),this._link=ah("repository")}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadSources")){this._load();return}t.has("mode")&&this._selectOnlySource(),t.has("restore")&&this._restore(),["_sources","_merge","_link","mode","restore"].some(n=>t.has(n))&&this._notify()}get _current(){return this.mode==="merge"?this._merge:this._link}get _parents(){if(this.mode==="merge")return this._sources?.merge?.bundles??[];let t=this._sources?.link?.reports??[];return this._current.kind==="workspace"?(this._sources?.link?.workspaces??[]).filter(n=>t.some(r=>n.reports.includes(r.id))):(this._sources?.link?.repositories??[]).filter(n=>t.some(r=>r.repoIds.includes(n.id)))}get _selectedParents(){let t=this._parents;return this._current.sourceIds.map(n=>t.find(r=>r.id===n)).filter(Boolean)}get _parent(){return this._selectedParents[0]}get _scopeOptions(){let t=this._sources?.link?.reports??[];return this._parents.map(n=>{let r=t.filter(o=>this._current.kind==="workspace"?n.reports.includes(o.id):o.repoIds.includes(n.id)).length;return{value:n.id,label:n.label,detail:`${r} ${r===1?"report":"reports"}`}})}get _inputs(){let t=this._selectedParents;return t.length===0?[]:this.mode==="merge"?(this._sources?.merge?.results??[]).filter(n=>n.bundleId===t[0].id):(this._sources?.link?.reports??[]).filter(n=>this._current.kind==="workspace"?t[0].reports.includes(n.id):n.repoIds.some(r=>t.some(o=>o.id===r)))}get selection(){let t=this._selectedParents,n=t[0],r=n?this.mode==="link"&&this._current.kind==="repository"?{kind:"repository",ids:t.map(o=>o.id),label:t.map(o=>o.label).join(", ")}:{kind:this._current.kind,id:n.id,label:n.label??n.filename}:null;return{mode:this.mode,source:r,inputs:this._loading||this._error?[]:this._inputs.filter(o=>this._current.ids.has(o.id))}}_notify(){this.dispatchEvent(new CustomEvent("report-inputs-change",{detail:this.selection,bubbles:!0,composed:!0}))}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let n=!1,r=o=>{if(t.signal.aborted)return;let i=!n;n=!0,this._sources=o,i&&(this._merge=ah("bundle"),this._link=ah(Array.isArray(o.link?.workspaces)?"workspace":"repository")),this._selectOnlySource(),i&&this._restore(),this._loading=!1,this._notify()};try{r(this.loadSources?await this.loadSources(t.signal,r):{merge:{bundles:[],results:[]},link:{repositories:[],reports:[]}})}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_setCurrent(t){this.mode==="merge"?this._merge=t:this._link=t}_selectSource(t,n=0){if(n<0||n>=this._current.sourceIds.length||this._current.sourceIds.includes(t)||!this._parents.some(o=>o.id===t))return;let r=new Set(this.mode==="link"&&this._current.kind==="repository"?this._inputs.map(o=>o.id):[]);this._setCurrent({...this._current,sourceIds:this._current.sourceIds.map((o,i)=>i===n?t:o)}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(o=>!r.has(o.id)||this._current.ids.has(o.id)).map(o=>o.id))}),this._notify()}get _canAddRepository(){return this.mode==="link"&&this._current.kind==="repository"&&!this._loading&&!this._current.sourceIds.includes(null)&&this._parents.some(t=>!this._current.sourceIds.includes(t.id))}_addRepository(){this._canAddRepository&&(this._link={...this._link,sourceIds:[...this._link.sourceIds,null]},this._focusRepository(this._link.sourceIds.length-1))}_removeRepository(t){this.mode!=="link"||this._link.kind!=="repository"||this._loading||this._link.sourceIds.length<=1||t<0||t>=this._link.sourceIds.length||(this._link={...this._link,sourceIds:this._link.sourceIds.filter((n,r)=>r!==t)},this._link={...this._link,ids:new Set(this._inputs.filter(n=>this._link.ids.has(n.id)).map(n=>n.id))},this._notify(),this._focusRepository(Math.min(t,this._link.sourceIds.length-1)))}async _focusRepository(t){await this.updateComplete,this.renderRoot?.querySelectorAll("repository-selector")[t]?.renderRoot?.querySelector(".trigger")?.focus()}_changeKind(t){["workspace","repository"].includes(t)&&(t==="workspace"&&!Array.isArray(this._sources?.link?.workspaces)||(t!==this._link.kind&&(this._link=ah(t)),this._selectOnlySource(),this._notify()))}_selectOnlySource(){this.mode==="link"&&this._current.sourceIds.length===1&&this._current.sourceIds[0]==null&&this._parents.length===1&&this._selectSource(this._parents[0].id)}_toggle(t,n){if(!this._inputs.some(o=>o.id===t))return;let r=new Set(this._current.ids);n?r.add(t):r.delete(t),this._setCurrent({...this._current,ids:r}),this._notify()}_selectAll(t){this._setCurrent({...this._current,ids:new Set(t?this._inputs.map(n=>n.id):[])}),this._notify()}_restore(){let t=this.restore;if(!this._sources||t?.mode!==this.mode||!t.source)return;let n=this.mode==="merge"?"bundle":t.source.kind;if(this.mode==="link"&&(n==="workspace"?!Array.isArray(this._sources.link?.workspaces):n!=="repository"))return;let r=this.mode==="link"&&n==="repository"?t.source.ids??[t.source.id]:[t.source.id],o=[...new Set(r)].filter(i=>i!=null);this._setCurrent({kind:n,sourceIds:o.length>0?o:[null],ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(i=>t.inputIds.includes(i.id)).map(i=>i.id))})}render(){let t=this.mode==="merge",n=this._inputs,r=n.filter(s=>this._current.ids.has(s.id)).length,o=Array.isArray(this._sources?.link?.workspaces),i=this._parent?t?"No scan results for this bundle.":`No saved reports in this ${this._current.kind}.`:t?"Choose a bundle to see its scan results.":this._parents.length===0?"No saved reports with app findings.":`Choose a ${this._current.kind} to see its saved reports.`;return p`<section class="panel" aria-label="${t?"Merge scan results":"Link saved reports"}" aria-busy="${this._loading}"><div class="source">${!t&&o?p`<div class="kinds" role="radiogroup" aria-label="Report source">${[["workspace","Workspace"],["repository","Repository"]].map(([s,a])=>p`<button type="button" role="radio" aria-checked="${s===this._link.kind}" @click="${()=>this._changeKind(s)}">${a}</button>`)}</div>`:b}<div class="field">${t?p`<span>Bundle with scan results</span>`:b} ${t?p`<bundle-selector .bundles="${this._parents}" .value="${this._current.sourceIds[0]}" ?disabled="${this._loading||this._parents.length===0}" @bundle-change="${s=>this._selectSource(s.detail.value)}"></bundle-selector>`:this._current.kind==="workspace"?p`<workspace-selector .options="${this._scopeOptions}" .value="${this._current.sourceIds[0]}" ?disabled="${this._loading}" @workspace-change="${s=>this._selectSource(s.detail.value)}"></workspace-selector>`:this._repositoryFields()}</div></div><div class="input-results">${this._error?p`<p class="empty" role="alert">Couldn’t load report inputs: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:this._loading&&this._sources==null?p`<p class="empty" role="status">Loading report inputs…</p>`:n.length>0?p`<div class="list-head"><label><input type="checkbox" aria-label="Select all" ?disabled="${this._loading}" .checked="${r===n.length}" .indeterminate="${r>0&&r<n.length}" @change="${s=>this._selectAll(s.target.checked)}"><strong>All</strong></label><span>${r} of ${n.length} selected</span></div><div class="list">${n.map(s=>this._row(s))}</div>`:p`<p class="empty">${t&&this._parents.length===0?"No scan results available.":i}</p>`}</div></section>`}_repositoryFields(){let t=this._current.sourceIds,n=this._scopeOptions;return p`<div class="repository-fields"><div class="repository-rows">${t.map((r,o)=>p`<div class="repository-row"><repository-selector .options="${n.filter(i=>i.value===r||!t.includes(i.value))}" .value="${r}" label="${`Choose repository ${o+1}`}" ?disabled="${this._loading}" @repository-change="${i=>this._selectSource(i.detail.value,o)}"></repository-selector>${t.length>1?p`<button type="button" class="row-action" aria-label="${`Remove repository ${o+1}`}" ?disabled="${this._loading}" @click="${()=>this._removeRepository(o)}">${hv}</button>`:b}</div>`)}</div><button type="button" class="row-action" aria-label="Add repository" ?disabled="${!this._canAddRepository}" @click="${()=>this._addRepository()}">${fv}</button></div>`}_row(t){let n=this.mode==="link"?t.appFindings:t.findings,r=[t.model?Nl(t.model):null,n==null?null:`${n} ${this.mode==="link"?"app ":""}${n===1?"finding":"findings"}`,t.createdAt,t.repo?`${t.repo}${t.directory?`/${t.directory}`:""}`:null].filter(Boolean),o=t.title??t.filename,i=r.join(" \xB7 ");return p`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(t.id)}" @change="${s=>this._toggle(t.id,s.target.checked)}">${te(nf[t.analyzer]??nf.default)}<span class="copy"><strong data-tooltip-truncated data-tooltip="${o}">${o}</strong><span data-tooltip-truncated data-tooltip="${i}">${i}</span></span></label>`}static styles=Qe`
|
|
158
|
+
`});var NF,DF=$(()=>{P();NF=p`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z"></path></svg>`});function sh(e){return Object.hasOwn(zF,e)?zF[e]:cX}var zF,cX,G_=$(()=>{"use strict";P();wF();xF();SF();CF();EF();TF();AF();LF();BF();PF();DF();zF={anthropic:vF,deepseek:kF,google:$F,moonshot:K_,moonshotai:K_,nvidia:RF,openai:MF,openrouter:IF,qwen:FF,xiaomi:OF,"x-ai":_F,"z-ai":NF},cX=p`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="12" height="12" rx="3"/><path d="M8 1v3m4-3v3M8 16v3m4-3v3M1 8h3m-3 4h3m12-4h3m-3 4h3"/></svg>`});function q_(e){let t=new Map(e.map(r=>[r.id,r])),n=new Set;return e.flatMap(r=>{if(n.has(r.id))return[];let o=r.id.endsWith("-pro")?r.id.slice(0,-4):r.id,i=t.get(o),s=t.get(`${o}-pro`);return!/(?:^|\/)gpt-.+$/u.test(o)||o.endsWith("-pro")||!i||!s?[r]:(n.add(i.id),n.add(s.id),[{...i,pro:s}])})}function Y_(e){return[...Map.groupBy(q_(e),n=>ih(n.id).key)].map(([n,r])=>({key:n,models:r}))}function UF(e,t){if(e.length===0)return[];let n=Math.min(e.length,Math.max(1,t)),r=e.map(d=>d.models.length*2+3),o=r.reduce((d,u)=>d+u,0),i=Math.max(...r);for(;i<o;){let d=Math.floor((i+o)/2),u=0,f=1;for(let h of r)u+h>d&&(f++,u=0),u+=h;f>n?i=d+1:o=d}let s=[],a=[],l=0;for(let[d,u]of e.entries())a.length>0&&(l+r[d]>i||e.length-d===n-s.length-1)&&(s.push(a),a=[],l=0),a.push(u),l+=r[d];return s.push(a),s}var jF=$(()=>{"use strict";ca()});var dX,J_,X_=$(()=>{"use strict";P();ca();jF();G_();dX=p`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg>`,J_=class extends he{static properties={loadModels:{attribute:!1},pending:{type:Boolean},value:{attribute:!1},effort:{attribute:!1},hasExtra:{type:Boolean,attribute:"has-extra"},_models:{state:!0},_error:{state:!0},_menuColumns:{state:!0}};static styles=Qe`:host{display:block;min-width:0;container:scan-controls / inline-size}*{box-sizing:border-box}.layout{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr);gap:1.25rem;align-items:start}.layout.with-extra{grid-template-columns:minmax(16rem,.9fr) minmax(14rem,1.2fr) minmax(14rem,auto)}.field{min-width:0;min-height:4.9rem}.model-placeholder{height:3.25rem;display:flex;align-items:center;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--muted);background:var(--bg);font-size:.75rem}.effort-placeholder{height:.3rem;margin:1rem .6rem;border-radius:999px;background:var(--surface-active)}.label{display:flex;justify-content:space-between;align-items:center;margin-bottom:.4rem;color:var(--muted);font-size:.72rem}output{color:var(--text);font-size:.72rem;font-weight:500}details{position:relative}.model-control{position:relative}summary{display:flex;align-items:center;gap:.55rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg);color:var(--text);list-style:none;transition:border-color .12s,background .12s}summary:hover,details[open] summary{border-color:var(--muted);background:var(--surface-active)}summary::-webkit-details-marker{display:none}summary,.menu{user-select:none}summary>svg{width:.9rem;height:.9rem;margin-left:auto;color:var(--muted)}.selected-copy{display:grid;gap:.1rem;flex:1;min-width:0}.selected-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;font-weight:500}.selected-copy small{color:var(--muted);font-size:.63rem}.pro-space{width:3.65rem;flex:0 0 3.65rem}.pro-toggle,.pro-checkbox{position:absolute;right:2.05rem;top:50%;transform:translateY(-50%);align-items:center;justify-content:center;gap:.3rem;width:3.65rem;height:1.65rem;padding:.2rem .3rem;color:var(--muted);font:inherit;font-size:.65rem;font-weight:600;cursor:default;user-select:none}.pro-toggle{display:var(--switch-button-display, inline-flex);border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg)}.pro-checkbox{display:var(--switch-checkbox-display, none)}.pro-checkbox input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}.pro-toggle:hover{border-color:var(--muted);color:var(--text)}.pro-track{position:relative;flex:0 0 1.3rem;height:.8rem;border-radius:var(--ui-radius, 999px);background:var(--border)}.pro-track:after{content:"";position:absolute;top:.15rem;left:.15rem;width:.5rem;height:.5rem;border-radius:50%;background:var(--muted);transition:transform .12s,background .12s}.pro-toggle[aria-checked=true]{color:var(--accent);border-color:rgb(from var(--accent) r g b / .45);background:rgb(from var(--accent) r g b / .08)}.pro-toggle[aria-checked=true] .pro-track{background:rgb(from var(--accent) r g b / .25)}.pro-toggle[aria-checked=true] .pro-track:after{transform:translate(.5rem);background:var(--accent)}.icon{display:inline-grid;place-items:center;width:1.7rem;height:1.5rem;flex:0 0 1.7rem;color:var(--text)}.icon svg{display:block;width:1.12rem;height:1.12rem}.icon.openai{color:#10a37f}.icon.anthropic{color:#d97757}.icon.moonshotai{color:#8068d9}.icon.google{color:#4285f4}.icon.nvidia{color:#76b900}.icon.qwen{color:#f97316}.icon.deepseek{color:#4d8dff}.icon.xiaomi{color:#ff6900}.icon.moonshotai svg{transform:scale(.78)}.icon.qwen svg{transform:scale(.82)}.icon.nvidia svg{transform:scale(.86)}.icon.deepseek svg{transform:scale(.9)}.extra{display:flex;min-width:0;min-height:4.9rem;align-items:flex-end;align-self:end;padding-bottom:.05rem}.menu{visibility:hidden;position:fixed;z-index:1000;width:min(46rem,calc(100vw - 1rem));max-height:calc(100dvh - 1rem);overflow:auto;overscroll-behavior:contain;padding:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface-active);color:var(--text);box-shadow:0 .65rem 1.8rem #0000008c}details[open] .menu[data-positioned]{visibility:visible}.groups{display:grid;grid-template-columns:repeat(var(--model-columns, 1),minmax(0,1fr));gap:1rem;align-items:start}.provider-column{min-width:0}fieldset{min-width:0;margin:0 0 .6rem;padding:0;border:0}fieldset:last-child{margin-bottom:0}legend{display:flex;align-items:center;gap:.45rem;width:100%;min-height:1.9rem;padding:.35rem .5rem .25rem;border-bottom:1px solid rgb(from var(--border) r g b / .7);color:var(--muted);font-size:.64rem;font-weight:700;letter-spacing:.055em;text-transform:uppercase}legend .icon{width:.88rem;height:1.25rem;flex-basis:.88rem}legend .icon svg{width:.88rem;height:.88rem}.choice{display:flex;align-items:center;gap:.5rem;padding:.35rem .5rem;border-radius:var(--ui-radius, 4px);font-size:.76rem}.choice:hover{background:rgb(from var(--text) r g b / .05)}.choice:has(:checked){color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.choice input{margin:0;accent-color:var(--accent)}.choice span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slider{--thumb-size: 1rem;padding:.15rem .6rem 0}input[type=range]{appearance:none;display:block;width:100%;height:var(--thumb-size);margin:.4rem 0 .5rem;padding:0;border:0;background:transparent}input[type=range]::-webkit-slider-runnable-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-moz-range-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-webkit-slider-thumb{appearance:none;width:var(--thumb-size);height:var(--thumb-size);margin-top:calc((.3rem - var(--thumb-size)) / 2);border:0;border-radius:50%;background:var(--accent)}input[type=range]::-moz-range-thumb{width:var(--thumb-size);height:var(--thumb-size);border:0;border-radius:50%;background:var(--accent)}input[type=range]:disabled{opacity:.5}.steps{position:relative;height:1.3rem;margin:0 calc(var(--thumb-size) / 2)}.step{position:absolute;top:0;left:var(--step-position);transform:translate(-50%);padding:.35rem 0 0;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.62rem;white-space:nowrap;cursor:default}.step:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:1px;height:.2rem;background:var(--muted)}.step.active{color:var(--accent)}:is(summary,input,button):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.message{margin:0;color:var(--muted);font-size:.75rem}.error{color:var(--critical, #e5534b)}.retry{margin-left:.5rem;padding:.2rem .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--bg);color:var(--text);font:inherit}@container scan-controls (max-width: 50rem){.layout.with-extra{grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr)}.layout.with-extra .extra{grid-column:1 / -1;align-self:start;min-height:0}}@container scan-controls (max-width: 33rem){.layout,.layout.with-extra{grid-template-columns:minmax(0,1fr);gap:1rem}.layout.with-extra .extra{grid-column:auto}}`;constructor(){super(),this.loadModels=lv,this.pending=!1,this.value=null,this.effort=null,this.hasExtra=!1,this._models=[],this._error=null,this._menuColumns=1,this._positionRequest=0,this._onOutside=t=>{t.composedPath().includes(this)||this._close()},this._onViewportChange=()=>this._positionMenu()}connectedCallback(){super.connectedCallback(),document.addEventListener("pointerdown",this._onOutside),window.addEventListener("resize",this._onViewportChange),window.addEventListener("scroll",this._onViewportChange,!0),this.hasUpdated&&this._load()}updated(t){(t.has("loadModels")||t.has("pending"))&&this.isConnected&&this._load(),t.has("_models")&&this.renderRoot.querySelector("details")?.open&&(this._resetMenuPosition(),this._positionMenu())}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort(),document.removeEventListener("pointerdown",this._onOutside),window.removeEventListener("resize",this._onViewportChange),window.removeEventListener("scroll",this._onViewportChange,!0)}async _load(){if(this._controller?.abort(),this.pending)return;let t=new AbortController;this._controller=t,this._error=null;let n=!1,r=o=>{if(t.signal.aborted)return;n=!0,this._models=o.models;let i=o.models.find(s=>s.id===this.value);i?i.efforts.includes(this.effort)||this._setEffort(jd(i)):this._select(o.defaultModel)};try{r(await this.loadModels(t.signal,r))}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}}_close(){this._resetMenuPosition();let t=this.renderRoot.querySelector("details");t&&(t.open=!1)}_resetMenuPosition(){this._positionRequest++;let t=this.renderRoot.querySelector(".menu");t&&delete t.dataset.positioned}_toggleMenu(t){this._resetMenuPosition(),t.currentTarget.open&&this._positionMenu()}get _selectedRow(){return q_(this._models).find(t=>t.id===this.value||t.pro?.id===this.value)}async _positionMenu(){let t=++this._positionRequest,n=this.renderRoot.querySelector("details"),r=this.renderRoot.querySelector("summary"),o=this.renderRoot.querySelector(".menu");if(!n?.open||!r||!o)return;let i=r.getBoundingClientRect(),s=6,a=8,l=Y_(this._models),d=l.reduce((_,E)=>_+E.models.length,0),u=Math.min(3,l.length,Math.ceil((d+l.length*1.5)/9)),f=parseFloat(getComputedStyle(o).fontSize),h=0;for(let _ of o.querySelectorAll(".choice span, legend")){let E=document.createRange();E.selectNodeContents(_),h=Math.max(h,E.getBoundingClientRect().width)}let m=Math.max(11*f,Math.min(18*f,h+2.5*f)),g=1.3*f+2,y=Math.max(1,Math.min(u,Math.floor((window.innerWidth-a*2-g+f)/(m+f)))),w=Math.min(y*m+(y-1)*f+g,window.innerWidth-a*2),x=Math.max(a,Math.min(i.left,window.innerWidth-w-a));if(this._menuColumns=y,await this.updateComplete,t!==this._positionRequest||!this.isConnected||!n.open)return;o.style.left=`${x}px`,o.style.width=`${w}px`,o.style.setProperty("--model-columns",y),o.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let v=o.getBoundingClientRect().height,k=window.innerHeight-i.bottom-s-a,S=i.top-s-a,C=k<v&&S>k?i.top-s-v:i.bottom+s;o.style.bottom="auto",o.style.top=`${Math.max(a,Math.min(C,window.innerHeight-v-a))}px`,o.dataset.positioned=""}_select(t,{preserveEffort:n=!1,close:r=!0}={}){let o=this._models.find(i=>i.id===t);o&&(this.value=t,this._setEffort(n&&o.efforts.includes(this.effort)?this.effort:jd(o)),r&&this._close())}_selectRow(t){let n=this._selectedRow?.pro?.id===this.value;this._select(n&&t.pro?t.pro.id:t.id)}_togglePro(){let t=this._selectedRow;t?.pro&&this._select(this.value===t.pro.id?t.id:t.pro.id,{preserveEffort:!0,close:!1})}_setEffort(t){this.effort=t,this.dispatchEvent(new CustomEvent("model-change",{detail:{model:this.value,effort:t},bubbles:!0,composed:!0}))}render(){let t=this._models.find(i=>i.id===this.value);if(this.pending||!t)return p`<div class="${`layout ${this.hasExtra?"with-extra":""}`}" aria-busy="true"><div class="field"><span class="label">Model</span><div class="model-placeholder" role="${this._error?"alert":"status"}">${this._error?p`Couldn’t load models. <button type="button" class="retry" @click="${()=>{this._load()}}">Retry</button>`:"Loading models\u2026"}</div></div><div class="field" aria-hidden="true"><span class="label">Effort</span><div class="effort-placeholder"></div></div>${this.hasExtra?p`<div class="extra"><slot name="effort-extra"></slot></div>`:b}</div>`;let n=this._selectedRow,r=ih(t.id),o=UF(Y_(this._models),this._menuColumns);return p`${this._error?p`<p class="message error" role="alert">Couldn’t refresh models: ${this._error}<button class="retry" @click="${()=>{this._load()}}">Retry</button></p>`:b}<div class="${`layout ${this.hasExtra?"with-extra":""}`}"><div class="field"><span class="label" id="model-label">Model</span><div class="model-control"><details @toggle="${this._toggleMenu}" @keydown="${i=>{i.key==="Escape"&&(this._close(),this.renderRoot.querySelector("summary")?.focus())}}"><summary aria-labelledby="model-label selected-model" @click="${this._resetMenuPosition}"><span class="${`icon ${r.key}`}" aria-hidden="true">${sh(r.key)}</span><span class="selected-copy"><strong id="selected-model">${Nl(n.id)}</strong><small>${r.name}</small></span>${n.pro?p`<span class="pro-space" aria-hidden="true"></span>`:b}${dX}</summary><div class="menu"><div class="groups">${o.map(i=>p`<div class="provider-column">${i.map(s=>this._modelSection(s))}</div>`)}</div></div></details>${n.pro?p`<button type="button" class="pro-toggle" role="switch" aria-label="Pro model" aria-checked="${t.id===n.pro.id}" @click="${this._togglePro}"><span>Pro</span><span class="pro-track" aria-hidden="true"></span></button><label class="pro-checkbox"><input type="checkbox" aria-label="Pro model" .checked="${t.id===n.pro.id}" @change="${this._togglePro}"><span>Pro</span></label>`:b}</div></div>${t.efforts.length>0?this._effortSlider(t.efforts):p`<div class="field" aria-hidden="true"></div>`} ${this.hasExtra?p`<div class="extra"><slot name="effort-extra"></slot></div>`:b}</div>`}_modelSection({key:t,models:n}){return p`<fieldset><legend><span class="${`icon ${t}`}" aria-hidden="true">${sh(t)}</span>${ih(n[0].id).name}</legend>${n.map(r=>p`<label class="choice"><input type="radio" name="scan-model" value="${r.id}" .checked="${r.id===this.value||r.pro?.id===this.value}" @change="${()=>{this._selectRow(r),this.renderRoot.querySelector("summary")?.focus()}}"><span>${Nl(r.id)}</span></label>`)}</fieldset>`}_effortSlider(t){let n=Math.max(0,t.indexOf(this.effort)),r=Math.max(1,t.length-1);return p`<div class="field"><div class="label"><label for="effort">Effort</label><output for="effort">${Dl(t[n])}</output></div><div class="slider" style="${`--effort-fill: calc(var(--thumb-size) / 2 + (100% - var(--thumb-size)) * ${n/r})`}"><input id="effort" type="range" min="0" max="${r}" step="1" .value="${String(n)}" ?disabled="${t.length===1}" aria-valuetext="${Dl(t[n])}" @input="${o=>this._setEffort(t[Number(o.target.value)])}"><div class="steps">${t.map((o,i)=>p`<button type="button" class="${`step ${o===this.effort?"active":""}`}" style="${`--step-position: ${i/r*100}%`}" aria-label="${`Set effort to ${Dl(o)}`}" aria-pressed="${o===this.effort}" @click="${()=>this._setEffort(o)}">${Dl(o)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",J_)});var Wi,dv=$(()=>{"use strict";P();er();Wi=class extends he{static properties={options:{attribute:!1},value:{attribute:!1},label:{type:String},placeholder:{type:String},disabled:{type:Boolean},_query:{state:!0},_facet:{state:!0},_open:{state:!0}};static styles=Qe`:host{display:block;min-width:0}:host,.menu{-webkit-app-region:no-drag;app-region:no-drag}*{box-sizing:border-box}button,input{font:inherit;color:var(--text)}button{cursor:default;user-select:none}.trigger{display:flex;align-items:center;gap:.6rem;width:100%;height:2rem;padding:.28rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);text-align:left;font-size:.76rem}.trigger:hover:not(:disabled){border-color:var(--muted)}.trigger:disabled{opacity:.5}:host([variant=filter]){display:inline-block;max-width:min(20rem,100%)}:host([variant=filter]) .trigger{height:30px;min-width:8.5rem;background:transparent;font-size:.8rem;font-weight:500;border-radius:var(--ui-radius, 4px)}.name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.option-copy{flex:1;min-width:0;display:grid;gap:.08rem}.secondary{color:var(--muted);font-size:.64rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{display:grid;place-items:center;flex:0 0 1.5rem;width:1.5rem;height:1.5rem;border-radius:50%;color:var(--accent);background:rgb(from var(--accent) r g b / .13);font-family:sans-serif;font-size:.62rem;font-weight:600}.detail,.count{flex:0 0 auto;color:var(--muted);font-size:.66rem;font-variant-numeric:tabular-nums;white-space:nowrap}svg{flex:0 0 auto;width:.9rem;height:.9rem;color:var(--muted)}.menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg);color:var(--text);box-shadow:0 .6rem 1.6rem #0006;user-select:none}.menu:popover-open{display:flex;flex-direction:column}.menu[data-positioned]{visibility:visible}.search{display:flex;align-items:center;gap:.5rem;flex:0 0 auto;padding:.55rem .65rem;border-bottom:1px solid var(--border)}input{flex:1;min-width:0;width:0;padding:.15rem 0;border:0;background:transparent;font-size:.78rem;outline:none}input::placeholder{color:var(--muted)}.search:focus-within{box-shadow:inset 0 -2px var(--accent)}.body{display:flex;min-height:0;flex:1}.facets{width:10.5rem;flex:0 0 auto;padding:.35rem;overflow:auto;overscroll-behavior:none;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.org{display:flex;align-items:center;gap:.4rem;width:100%;padding:.4rem .45rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.7rem}.org[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.results{flex:1;min-width:0;overflow:auto;overscroll-behavior:none;padding:.3rem}.group+.group{margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--border)}.heading{position:sticky;top:-.3rem;z-index:1;display:flex;align-items:center;gap:.4rem;margin:0;padding:.4rem .5rem;color:var(--muted);background:var(--bg);font-size:.68rem;font-weight:600}.heading svg{width:.8rem;height:.8rem}.option{display:flex;align-items:center;gap:.65rem;width:100%;padding:.35rem .5rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.76rem}.option svg{width:.8rem;height:.8rem;opacity:0;color:var(--accent)}.option[aria-selected=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.option[aria-selected=true] svg{opacity:1}.option:disabled{opacity:.45}.option:hover:not(:disabled),.org:hover{background:rgb(from var(--text) r g b / .05)}.pinned{padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid var(--border)}.empty{margin:0;padding:1.3rem .7rem;color:var(--muted);font-size:.76rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(max-width:40rem){.facets{width:8.5rem}}@media(max-width:28rem){.facets{width:7rem}.option{gap:.35rem}}`;constructor(){super(),this.options=[],this.value=null,this.label="Choose",this.placeholder="Choose",this.disabled=!1,this._query="",this._facet=null,this._open=!1,this._menuHeight=null,this._onViewport=()=>this._position()}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0})),window.addEventListener("resize",this._onViewport),window.addEventListener("scroll",this._onViewport,!0),this._scrollRoots=[];for(let t=this.getRootNode();t.host;t=t.host.getRootNode())t.addEventListener("scroll",this._onViewport,!0),this._scrollRoots.push(t)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onViewport),window.removeEventListener("scroll",this._onViewport,!0);for(let t of this._scrollRoots??[])t.removeEventListener("scroll",this._onViewport,!0);this._scrollRoots=[]}render(){let t=this.options.find(s=>s.value===this.value),n=this.choices(),o=[...n.pinned,...n.sections.flatMap(s=>s.options)].filter(s=>!s.disabled),i=o.find(s=>s.value===this.value)?.value??o[0]?.value;return p`<button type="button" class="trigger" popovertarget="selector-menu" aria-label="${this.label}" aria-haspopup="dialog" aria-expanded="${this._open}" ?disabled="${this.disabled}">${t?this.optionIcon(t):b}<span class="name" data-tooltip-truncated data-tooltip="${t?.label??b}">${t?.label??this.placeholder}</span>${t?.detail?p`<span class="detail">${t.detail}</span>`:b} <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg></button><div class="menu" id="selector-menu" popover="auto" role="dialog" aria-label="${this.label}" @beforetoggle="${this._beforeToggle}" @toggle="${this._toggle}" @keydown="${this._keyDown}"><div class="search"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3.5 3.5"/></svg> <input type="search" placeholder="${`${this.searchLabel}\u2026`}" aria-label="${this.searchLabel}" aria-controls="selector-options" .value="${Je(this._query)}" @input="${s=>{this._query=s.target.value}}"> <span class="count" role="status">${n.count}${n.count===n.total?"":` / ${n.total}`}</span></div><div class="body">${n.showFacets?p`<div class="facets" role="group" aria-label="${this.facetLabel}"><button type="button" class="org" aria-pressed="${n.activeFacet==null}" @click="${()=>this._filterFacet(null)}"><span class="name">${this.allFacetsLabel}</span><span class="count">${n.total}</span></button> ${n.facets.map(s=>p`<button type="button" class="org" aria-pressed="${n.activeFacet===s.value}" @click="${()=>this._filterFacet(s.value)}"><span class="name" data-tooltip-truncated data-tooltip="${s.name}">${s.name}</span><span class="count">${s.count}</span></button>`)}</div>`:b}<div class="results" id="selector-options" role="listbox" aria-label="${this.optionsLabel}">${n.pinned.length>0?p`<div class="pinned">${n.pinned.map(s=>this._option(s,!1,i))}</div>`:b} ${n.sections.map((s,a)=>p`<div class="group" role="group" aria-labelledby="${s.label?`selector-group-${a}`:b}">${s.label?p`<h3 class="heading" id="${`selector-group-${a}`}">${s.organization?p`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" aria-hidden="true"><path d="M3 14V3h6v11M9 7h4v7M1 14h14M5 6h2M5 9h2M5 12h2"/></svg>`:b}${s.label}</h3>`:b} ${s.options.map(l=>this._option(l,s.organization,i))}</div>`)} ${n.count?b:p`<p class="empty">${this.options.length>0?this.noMatchesLabel:this.emptyLabel}</p>`}</div></div></div>`}optionIcon(t){return t.initials?p`<span class="avatar" aria-hidden="true">${t.initials}</span>`:b}optionTooltip(t){return t.label}_option(t,n,r){let o=t.displayLabel??(n?t.name:t.label),i=this.optionTooltip(t);return p`<button type="button" class="option" role="option" ?data-reset="${t.reset}" ?disabled="${t.disabled}" aria-label="${t.label}" aria-selected="${t.value===this.value}" tabindex="${t.value===r?0:-1}" @click="${()=>this._pick(t.value)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m3 8 3 3 7-7"/></svg>${this.optionIcon(t)}<span class="option-copy"><span class="name" ?data-tooltip-truncated="${o===i}" data-tooltip="${i}">${o}</span>${t.secondary?p`<span class="secondary" data-tooltip-truncated data-tooltip="${t.secondary}">${t.secondary}</span>`:b}</span>${t.detail?p`<span class="detail">${t.detail}</span>`:b}</button>`}updated(t){this.disabled&&this._open&&this._close(!1),t.has("options")&&(this._menuHeight=null),this._position(),(t.has("_query")||t.has("_facet"))&&(this.renderRoot.querySelector(".results").scrollTop=0)}_beforeToggle(t){this._open=t.newState==="open",delete t.target.dataset.positioned,this._open&&(this._query="",this._facet=null,this._menuHeight=null)}async _toggle(t){t.newState==="open"&&(await this.updateComplete,!(!this._open||!this.isConnected)&&(this._position(),this.renderRoot.querySelector("input").focus({preventScroll:!0})))}_position(){let t=this.renderRoot.querySelector(".menu");if(!t?.matches(":popover-open"))return;let n=this.renderRoot.querySelector(".trigger").getBoundingClientRect(),r=8,o=t.querySelector(".facets")!=null,i=Math.min(Math.max(n.width,o?560:360),window.innerWidth-r*2),s=window.innerHeight-n.bottom-r-4,a=n.top-r-4;t.style.width=`${i}px`,this._menuHeight??=Math.min(480,t.querySelector(".search").offsetHeight+Math.max(t.querySelector(".results").scrollHeight,t.querySelector(".facets")?.scrollHeight??0)+2);let l=this._menuHeight,d=s<l&&a>s;t.style.maxHeight=`${Math.max(0,Math.min(l,d?a:s))}px`,t.style.left=`${Math.max(r,Math.min(n.left,window.innerWidth-i-r))}px`,t.style.top=`${Math.max(r,d?n.top-t.offsetHeight-4:n.bottom+4)}px`,t.dataset.positioned=""}_filterFacet(t){this._facet=t,this.renderRoot.querySelector("input").focus({preventScroll:!0})}_keyDown(t){if(t.stopPropagation(),t.key==="Escape"){t.preventDefault(),this._close();return}let n=this.renderRoot.querySelector("input"),r=this.renderRoot.activeElement,o=[...this.renderRoot.querySelectorAll(".option:not(:disabled)")],i=o.indexOf(r);if(r!==n&&i<0)return;if(t.key==="Enter"&&r===n){t.preventDefault(),(this.renderRoot.querySelector(".option:not([data-reset]):not(:disabled)")??o[0])?.click();return}let s;if(t.key==="ArrowDown")s=Math.min(i+1,o.length-1);else if(t.key==="ArrowUp")s=i-1;else if(r!==n&&t.key==="Home")s=0;else if(r!==n&&t.key==="End")s=o.length-1;else if(r!==n&&t.key.length===1&&t.key!==" "&&!t.ctrlKey&&!t.metaKey&&!t.altKey){t.preventDefault(),this._query+=t.key,n.focus();return}else return;t.preventDefault();for(let[a,l]of o.entries())l.tabIndex=a===s?0:-1;s<0?n.focus():o[s]?.focus()}_pick(t){this.disabled||!this.options.some(n=>n.value===t&&!n.disabled)||(this._close(),this.dispatchEvent(new CustomEvent(this.changeEvent,{detail:{value:t},bubbles:!0,composed:!0})))}_close(t=!0){this.renderRoot.querySelector(".menu").hidePopover(),this._open=!1,t&&this.renderRoot.querySelector(".trigger").focus({preventScroll:!0})}}});function uX(e){if(/^https?:\/\//iu.test(e)){try{let n=new URL(e),r=n.pathname.split("/").filter(Boolean);if(r.length>=2)return{owner:`${n.host}/${r[0]}`,name:r.slice(1).join("/")}}catch{}return{owner:null,name:e}}let t=/^([^\s/:]+)\/(.+)$/u.exec(e);return t?{owner:t[1],name:t[2]}:{owner:null,name:e}}function WF(e,t="",n=null,{includeSingletonOrganizations:r=!1}={}){let o=e.map(x=>({...x,...x.special?{owner:null,name:x.label}:uX(x.label)})),i=new Map;for(let x of o)x.owner!=null&&i.set(x.owner,(i.get(x.owner)??0)+1);let s=r?1:2,a=[...i].filter(([,x])=>x>=s).toSorted(([x],[v])=>Z_(x,v)).map(([x,v])=>({value:x,name:x,count:v})),l=x=>(i.get(x.owner)??0)<s,d=o.filter(x=>!x.special&&!x.reset&&l(x)).length;d>0&&a.push({value:Q_,name:"Other",count:d});let u=a.some(x=>x.value===n)?n:null,f=HF(t.trim()).split(/\s+/u).filter(Boolean),h=x=>f.every(v=>HF(x.label).includes(v)),m=o.filter(x=>x.reset||x.special&&h(x)),g=o.filter(x=>!x.reset&&!x.special&&h(x)&&(u==null||(u===Q_?l(x):x.owner===u))),y=new Map;for(let x of g){let v=(i.get(x.owner)??0)>=s?x.owner:null;y.has(v)||y.set(v,[]),y.get(v).push(x)}let w=[...y].toSorted(([x],[v])=>x==null?1:v==null?-1:Z_(x,v)).map(([x,v])=>({label:x??(a.some(k=>k.value!==Q_)?"Other":null),organization:x!=null,options:v.toSorted((k,S)=>Z_(k.label,S.label))}));return{facets:a,activeFacet:u,pinned:m,sections:w,count:g.length+m.filter(x=>!x.reset).length,total:o.filter(x=>!x.reset).length,showFacets:a.length>1}}var HF,Z_,Q_,VF=$(()=>{"use strict";HF=e=>e.normalize("NFKC").toLocaleLowerCase(),Z_=(e,t)=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}),Q_=Symbol("other repositories")});var e2,uv=$(()=>{"use strict";dv();VF();e2=class extends Wi{constructor(){super(),this.label="Choose repository",this.placeholder="Choose repository"}get searchLabel(){return"Search repositories"}get optionsLabel(){return"Repositories"}get facetLabel(){return"Filter by organization"}get allFacetsLabel(){return"All organizations"}get noMatchesLabel(){return"No matching repositories"}get emptyLabel(){return"No repositories available"}get changeEvent(){return"repository-change"}choices(){return WF(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",e2)});var t2,n2=$(()=>{"use strict";dv();t2=class extends Wi{constructor(){super(),this.label="Choose workspace",this.placeholder="Choose workspace"}get searchLabel(){return"Search workspaces"}get optionsLabel(){return"Workspaces"}get noMatchesLabel(){return"No matching workspaces"}get emptyLabel(){return"No workspaces available"}get changeEvent(){return"workspace-change"}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),n=this.options.filter(r=>t.every(o=>r.label.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((r,o)=>r.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:n}],facets:[],showFacets:!1,count:n.length,total:this.options.length}}};customElements.get("workspace-selector")||customElements.define("workspace-selector",t2)});function pX(e){return e.map(t=>{let n=["sourcemap","sourcemaps"].includes(t.kind)||t.filename.toLowerCase().endsWith(".map")?"sourcemap":"stasis",r=n==="sourcemap"?"Sourcemap":"Stasis",o=[];if(typeof t.size=="string"&&!["","\u2014"].includes(t.size)&&o.push(t.size),t.files){o.push(`${t.files.length.toLocaleString()} files`);let{lines:i}=Zf(t.files);i!=null&&o.push(`${i.toLocaleString()} LoC`)}else t.summary&&(Number.isSafeInteger(t.summary.files)&&t.summary.files>=0&&o.push(`${t.summary.files.toLocaleString()} files`),Number.isSafeInteger(t.summary.lines)&&t.summary.lines>=0&&o.push(`${t.summary.lines.toLocaleString()} LoC`));return{value:t.id,label:t.filename,detail:r,format:n,secondary:o.join(" \xB7 ")}})}var r2,pv=$(()=>{"use strict";P();wt();dv();jt();Ol();r2=class extends Wi{static properties={bundles:{attribute:!1}};static styles=[Wi.styles,Qe`.bundle-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 1.05rem;width:1.05rem;height:1.05rem;color:var(--muted)}.bundle-icon img,.bundle-icon svg{display:block;width:100%;height:100%;opacity:1}.option{gap:.5rem;padding-block:.25rem}.option-copy{gap:0}.option .name{line-height:1.3}.option .bundle-icon{flex-basis:1.35rem;width:1.35rem;height:1.35rem;margin-right:.15rem}.secondary{line-height:1.25;font-variant-numeric:tabular-nums}`];constructor(){super(),this.bundles=[],this.label="Choose bundle",this.placeholder="Choose bundle"}get searchLabel(){return"Search bundles"}get optionsLabel(){return"Bundles"}get noMatchesLabel(){return"No matching bundles"}get emptyLabel(){return"No stored bundles"}get changeEvent(){return"bundle-change"}willUpdate(t){t.has("bundles")&&(this.options=pX(this.bundles))}optionIcon(t){return p`<span class="bundle-icon" aria-hidden="true">${t.format==="sourcemap"?te(Yn):p`<img src="./stasis.svg" alt="">`}</span>`}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),n=this.options.filter(r=>t.every(o=>`${r.label} ${r.detail}`.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((r,o)=>r.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:n}],facets:[],showFacets:!1,count:n.length,total:this.options.length}}};customElements.get("bundle-selector")||customElements.define("bundle-selector",r2)});var fv,hv,mv,gv=$(()=>{"use strict";P();fv=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg>`,hv=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg>`,mv=Qe`.row-action{display:grid;place-items:center;flex:0 0 auto;width:1.5rem;height:1.5rem;padding:.25rem;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.row-action:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.row-action:disabled{opacity:.4}.row-action svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:1.4}`});var ah,o2,KF=$(()=>{"use strict";P();wt();Mb();ca();gv();pv();uv();n2();ah=e=>({kind:e,sourceIds:[null],ids:new Set}),o2=class extends he{static properties={mode:{type:String},loadSources:{attribute:!1},restore:{attribute:!1},_sources:{state:!0},_loading:{state:!0},_error:{state:!0},_merge:{state:!0},_link:{state:!0}};constructor(){super(),this.mode="link",this._sources=null,this._loading=!1,this._error=null,this._merge=ah("bundle"),this._link=ah("repository")}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadSources")){this._load();return}t.has("mode")&&this._selectOnlySource(),t.has("restore")&&this._restore(),["_sources","_merge","_link","mode","restore"].some(n=>t.has(n))&&this._notify()}get _current(){return this.mode==="merge"?this._merge:this._link}get _parents(){if(this.mode==="merge")return this._sources?.merge?.bundles??[];let t=this._sources?.link?.reports??[];return this._current.kind==="workspace"?(this._sources?.link?.workspaces??[]).filter(n=>t.some(r=>n.reports.includes(r.id))):(this._sources?.link?.repositories??[]).filter(n=>t.some(r=>r.repoIds.includes(n.id)))}get _selectedParents(){let t=this._parents;return this._current.sourceIds.map(n=>t.find(r=>r.id===n)).filter(Boolean)}get _parent(){return this._selectedParents[0]}get _scopeOptions(){let t=this._sources?.link?.reports??[];return this._parents.map(n=>{let r=t.filter(o=>this._current.kind==="workspace"?n.reports.includes(o.id):o.repoIds.includes(n.id)).length;return{value:n.id,label:n.label,detail:`${r} ${r===1?"report":"reports"}`}})}get _inputs(){let t=this._selectedParents;return t.length===0?[]:this.mode==="merge"?(this._sources?.merge?.results??[]).filter(n=>n.bundleId===t[0].id):(this._sources?.link?.reports??[]).filter(n=>this._current.kind==="workspace"?t[0].reports.includes(n.id):n.repoIds.some(r=>t.some(o=>o.id===r)))}get selection(){let t=this._selectedParents,n=t[0],r=n?this.mode==="link"&&this._current.kind==="repository"?{kind:"repository",ids:t.map(o=>o.id),label:t.map(o=>o.label).join(", ")}:{kind:this._current.kind,id:n.id,label:n.label??n.filename}:null;return{mode:this.mode,source:r,inputs:this._loading||this._error?[]:this._inputs.filter(o=>this._current.ids.has(o.id))}}_notify(){this.dispatchEvent(new CustomEvent("report-inputs-change",{detail:this.selection,bubbles:!0,composed:!0}))}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let n=!1,r=o=>{if(t.signal.aborted)return;let i=!n;n=!0,this._sources=o,i&&(this._merge=ah("bundle"),this._link=ah(Array.isArray(o.link?.workspaces)?"workspace":"repository")),this._selectOnlySource(),i&&this._restore(),this._loading=!1,this._notify()};try{r(this.loadSources?await this.loadSources(t.signal,r):{merge:{bundles:[],results:[]},link:{repositories:[],reports:[]}})}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_setCurrent(t){this.mode==="merge"?this._merge=t:this._link=t}_selectSource(t,n=0){if(n<0||n>=this._current.sourceIds.length||this._current.sourceIds.includes(t)||!this._parents.some(o=>o.id===t))return;let r=new Set(this.mode==="link"&&this._current.kind==="repository"?this._inputs.map(o=>o.id):[]);this._setCurrent({...this._current,sourceIds:this._current.sourceIds.map((o,i)=>i===n?t:o)}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(o=>!r.has(o.id)||this._current.ids.has(o.id)).map(o=>o.id))}),this._notify()}get _canAddRepository(){return this.mode==="link"&&this._current.kind==="repository"&&!this._loading&&!this._current.sourceIds.includes(null)&&this._parents.some(t=>!this._current.sourceIds.includes(t.id))}_addRepository(){this._canAddRepository&&(this._link={...this._link,sourceIds:[...this._link.sourceIds,null]},this._focusRepository(this._link.sourceIds.length-1))}_removeRepository(t){this.mode!=="link"||this._link.kind!=="repository"||this._loading||this._link.sourceIds.length<=1||t<0||t>=this._link.sourceIds.length||(this._link={...this._link,sourceIds:this._link.sourceIds.filter((n,r)=>r!==t)},this._link={...this._link,ids:new Set(this._inputs.filter(n=>this._link.ids.has(n.id)).map(n=>n.id))},this._notify(),this._focusRepository(Math.min(t,this._link.sourceIds.length-1)))}async _focusRepository(t){await this.updateComplete,this.renderRoot?.querySelectorAll("repository-selector")[t]?.renderRoot?.querySelector(".trigger")?.focus()}_changeKind(t){["workspace","repository"].includes(t)&&(t==="workspace"&&!Array.isArray(this._sources?.link?.workspaces)||(t!==this._link.kind&&(this._link=ah(t)),this._selectOnlySource(),this._notify()))}_selectOnlySource(){this.mode==="link"&&this._current.sourceIds.length===1&&this._current.sourceIds[0]==null&&this._parents.length===1&&this._selectSource(this._parents[0].id)}_toggle(t,n){if(!this._inputs.some(o=>o.id===t))return;let r=new Set(this._current.ids);n?r.add(t):r.delete(t),this._setCurrent({...this._current,ids:r}),this._notify()}_selectAll(t){this._setCurrent({...this._current,ids:new Set(t?this._inputs.map(n=>n.id):[])}),this._notify()}_restore(){let t=this.restore;if(!this._sources||t?.mode!==this.mode||!t.source)return;let n=this.mode==="merge"?"bundle":t.source.kind;if(this.mode==="link"&&(n==="workspace"?!Array.isArray(this._sources.link?.workspaces):n!=="repository"))return;let r=this.mode==="link"&&n==="repository"?t.source.ids??[t.source.id]:[t.source.id],o=[...new Set(r)].filter(i=>i!=null);this._setCurrent({kind:n,sourceIds:o.length>0?o:[null],ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(i=>t.inputIds.includes(i.id)).map(i=>i.id))})}render(){let t=this.mode==="merge",n=this._inputs,r=n.filter(s=>this._current.ids.has(s.id)).length,o=Array.isArray(this._sources?.link?.workspaces),i=this._parent?t?"No scan results for this bundle.":`No saved reports in this ${this._current.kind}.`:t?"Choose a bundle to see its scan results.":this._parents.length===0?"No saved reports with app findings.":`Choose a ${this._current.kind} to see its saved reports.`;return p`<section class="panel" aria-label="${t?"Merge scan results":"Link saved reports"}" aria-busy="${this._loading}"><div class="source">${!t&&o?p`<div class="kinds" role="radiogroup" aria-label="Report source">${[["workspace","Workspace"],["repository","Repository"]].map(([s,a])=>p`<button type="button" role="radio" aria-checked="${s===this._link.kind}" @click="${()=>this._changeKind(s)}">${a}</button>`)}</div>`:b}<div class="field">${t?p`<span>Bundle with scan results</span>`:b} ${t?p`<bundle-selector .bundles="${this._parents}" .value="${this._current.sourceIds[0]}" ?disabled="${this._loading||this._parents.length===0}" @bundle-change="${s=>this._selectSource(s.detail.value)}"></bundle-selector>`:this._current.kind==="workspace"?p`<workspace-selector .options="${this._scopeOptions}" .value="${this._current.sourceIds[0]}" ?disabled="${this._loading}" @workspace-change="${s=>this._selectSource(s.detail.value)}"></workspace-selector>`:this._repositoryFields()}</div></div><div class="input-results">${this._error?p`<p class="empty" role="alert">Couldn’t load report inputs: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:this._loading&&this._sources==null?p`<p class="empty" role="status">Loading report inputs…</p>`:n.length>0?p`<div class="list-head"><label><input type="checkbox" aria-label="Select all" ?disabled="${this._loading}" .checked="${r===n.length}" .indeterminate="${r>0&&r<n.length}" @change="${s=>this._selectAll(s.target.checked)}"><strong>All</strong></label><span>${r} of ${n.length} selected</span></div><div class="list">${n.map(s=>this._row(s))}</div>`:p`<p class="empty">${t&&this._parents.length===0?"No scan results available.":i}</p>`}</div></section>`}_repositoryFields(){let t=this._current.sourceIds,n=this._scopeOptions;return p`<div class="repository-fields"><div class="repository-rows">${t.map((r,o)=>p`<div class="repository-row"><repository-selector .options="${n.filter(i=>i.value===r||!t.includes(i.value))}" .value="${r}" label="${`Choose repository ${o+1}`}" ?disabled="${this._loading}" @repository-change="${i=>this._selectSource(i.detail.value,o)}"></repository-selector>${t.length>1?p`<button type="button" class="row-action" aria-label="${`Remove repository ${o+1}`}" ?disabled="${this._loading}" @click="${()=>this._removeRepository(o)}">${hv}</button>`:b}</div>`)}</div><button type="button" class="row-action" aria-label="Add repository" ?disabled="${!this._canAddRepository}" @click="${()=>this._addRepository()}">${fv}</button></div>`}_row(t){let n=this.mode==="link"?t.appFindings:t.findings,r=[t.model?Nl(t.model):null,n==null?null:`${n} ${this.mode==="link"?"app ":""}${n===1?"finding":"findings"}`,t.createdAt,t.repo?`${t.repo}${t.directory?`/${t.directory}`:""}`:null].filter(Boolean),o=t.title??t.filename,i=r.join(" \xB7 ");return p`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(t.id)}" @change="${s=>this._toggle(t.id,s.target.checked)}">${te(nf[t.analyzer]??nf.default)}<span class="copy"><strong data-tooltip-truncated data-tooltip="${o}">${o}</strong><span data-tooltip-truncated data-tooltip="${i}">${i}</span></span></label>`}static styles=Qe`
|
|
159
159
|
:host { display: block; min-width: 0; }
|
|
160
160
|
* { box-sizing: border-box; }
|
|
161
161
|
button, .field > span, .list-head, .empty:not([role='alert']) { cursor: default; user-select: none; -webkit-user-select: none; }
|
|
@@ -191,8 +191,8 @@ You can change this anytime from the lock icon in the sidebar header.`)){O7();re
|
|
|
191
191
|
.copy span { max-width: 55%; color: var(--muted); font-size: .66rem; }
|
|
192
192
|
.empty { margin: 0; padding: 1rem .9rem; color: var(--muted); font-size: .76rem; }
|
|
193
193
|
button:focus-visible, input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
194
|
-
`};customElements.get("scan-report-inputs")||customElements.define("scan-report-inputs",o2)});var fX,hX,i2,s2=$(()=>{"use strict";P();fX=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,hX=p`<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3 3M7 5v4M5 7h4"/></svg>`,i2=class extends fe{static properties={isolate:{type:Boolean},vertical:{type:Boolean,reflect:!0}};constructor(){super(),this.isolate=!1,this.vertical=!1}_select(t){this.isolate!==t&&(this.isolate=t,this.dispatchEvent(new CustomEvent("depth-change",{detail:{isolate:t},bubbles:!0,composed:!0})))}render(){return p`<div class="scan-depth"><div class="depth-options" role="radiogroup" aria-label="Scan depth" aria-orientation="${this.vertical?"vertical":"horizontal"}" aria-describedby="${this.vertical?b:"scan-depth-description"}">${[[!1,"List",fX],[!0,"Isolate",hX]].map(([t,n,r])=>p`<label class="depth-choice"><input type="radio" name="scan-depth" value="${t?"isolate":"list"}" .checked="${this.isolate===t}" @change="${()=>this._select(t)}"><span>${r}${n}</span></label>`)}</div>${this.vertical?b:p`<div class="depth-description" id="scan-depth-description" aria-live="polite"><span class="${this.isolate?"inactive":""}" aria-hidden="${this.isolate}">Regular scan depth</span><span class="${this.isolate?"":"inactive"}" aria-hidden="${!this.isolate}">Deeper search at ~10x the tokens spent</span></div>`}</div>`}static styles=Qe`:host{display:block;width:19rem;max-width:100%;min-width:0}*{box-sizing:border-box}.scan-depth{display:grid;gap:.4rem;width:100%;min-width:0;user-select:none}.depth-options{display:flex;position:relative;padding:.2rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg)}.depth-options:before{content:"";position:absolute;inset:.2rem auto .2rem .2rem;width:calc((100% - .4rem)/2);border-radius:var(--ui-radius, 5px);background:var(--surface-active);box-shadow:0 1px 3px #0000001f,inset 0 0 0 1px rgb(from var(--accent) r g b / .18);transition:transform .16s ease-out}.depth-options:has(input[value=isolate]:checked):before{transform:translate(100%)}.depth-choice{position:relative;flex:1;min-width:0}.depth-choice input{position:absolute;width:1px;height:1px;opacity:0}.depth-choice span{display:flex;align-items:center;justify-content:center;gap:.4rem;height:1.9rem;padding:.3rem .65rem;border-radius:var(--ui-radius, 5px);color:var(--muted);font-size:.76rem;font-weight:500;transition:color .12s}.depth-choice svg{width:.95rem;height:.95rem;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.depth-choice:hover span{color:var(--text)}.depth-choice input:checked+span{color:var(--accent)}.depth-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.depth-description{display:grid;color:var(--muted);font-size:.68rem;line-height:1.4}.depth-description span{grid-area:1 / 1}.depth-description .inactive{visibility:hidden}@media(prefers-reduced-motion:reduce){.depth-options:before,.depth-choice span{transition:none}}:host([vertical]){width:5.8rem}:host([vertical]) .depth-options{flex-direction:column}:host([vertical]) .depth-options:before{inset:.2rem .2rem auto;width:auto;height:calc((100% - .4rem)/2)}:host([vertical]) .depth-options:has(input[value=isolate]:checked):before{transform:translateY(100%)}:host([vertical]) .depth-choice span{justify-content:flex-start;height:1.7rem;padding:.25rem .5rem;font-size:.72rem}`};customElements.get("scan-depth-toggle")||customElements.define("scan-depth-toggle",i2)});function GF(e){let t=e[0];return t?.model&&e.every(n=>n.model===t.model&&n.effort===t.effort)?{model:t.model,effort:t.effort}:null}function qF(e,t){let n=t.models.find(r=>r.id===e?.model)??t.models.find(r=>r.id===t.defaultModel)??t.models[0];return n?{model:n.id,effort:n.efforts.includes(e?.effort)?e.effort:jd(n)}:null}function l2(e,t){let n=t.models.find(r=>r.id===t.defaultModel)??t.models[0];return n?(e.length>0?e:[{mode:"generic",isolate:!1}]).map(r=>{let o=t.models.find(i=>i.id===r.model)??n;return{...r,mode:a2.includes(r.mode)?r.mode:"generic",model:o.id,effort:o.efforts.includes(r.effort)?r.effort:jd(o),isolate:!!r.isolate}}):[]}function c2(e){let t=new Set;return e.map(n=>{let r=mX(n),o=t.has(r);return t.add(r),o})}var a2,mX,YF=$(()=>{"use strict";ca();a2=["security","generic","correctness"],mX=e=>JSON.stringify([e.mode,e.model,e.effort,e.isolate])});var d2,JF=$(()=>{"use strict";P();er();un();X_();s2();ca();YF();d2=class extends fe{static properties={value:{attribute:!1},loadModels:{attribute:!1},appModel:{attribute:!1},appModelAutomatic:{attribute:!1},_rows:{state:!0},_loading:{state:!0},_error:{state:!0},_resolvedAppModel:{state:!0},_appModelOpen:{state:!0}};constructor(){super(),this.value=[],this.appModel=null,this.appModelAutomatic=!0,this._resolvedAppModel=null,this._appModelOpen=!1,this._appModelsAgree=!0,this._rows=[],this._catalogue={models:[]},this._nextId=0,this._loading=!0,this._error=null}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadModels")){this._load();return}t.has("value")&&this.value!==this._lastEmitted&&!this._loading?(this._setRows(this.value),this._notify()):(t.has("appModel")||t.has("appModelAutomatic"))&&!this._loading&&this._notify()}_setRows(t){this._rows=l2(t,this._catalogue).map(n=>({...n,id:n.id??++this._nextId}))}_notify(){let t=this._loading&&this._rows.length===0?this.value:this._rows.map(({id:r,...o})=>o);this._loading||this._syncAppModel();let n=!this._loading&&!this._error&&this._resolvedAppModel!=null&&t.length>0&&!c2(t).includes(!0);this._lastEmitted=t,this.dispatchEvent(new CustomEvent("regimes-change",{detail:{value:t,ready:n,appModel:this._resolvedAppModel??this.appModel,appModelAutomatic:this.appModelAutomatic},bubbles:!0,composed:!0}))}_syncAppModel(){let t=GF(this._rows),n=qF((this.appModelAutomatic?t:null)??this.appModel??this._rows[0],this._catalogue);(this.appModel?.model!==n?.model||this.appModel?.effort!==n?.effort)&&(this.appModel=n),this._resolvedAppModel=this.appModel;let r=!!t&&t.model===n?.model&&t.effort===n?.effort;r!==this._appModelsAgree&&(this._appModelOpen=!r),this._appModelsAgree=r}_changeAppModel(t){t.model===this._resolvedAppModel?.model&&t.effort===this._resolvedAppModel?.effort||(this.appModelAutomatic=!1,this.appModel={model:t.model,effort:t.effort},this._notify())}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let n=!1,r=o=>{t.signal.aborted||(n=!0,this._catalogue=o,this._sharedModels=()=>Promise.resolve(o),this._setRows(this._rows.length>0?this._rows:this.value),this._loading=!1,this._notify())};try{r(await this.loadModels(t.signal,r))}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_change(t,n){let r=this._rows.find(i=>i.id===t);if(!r)return;let o=l2([{...r,...n}],this._catalogue)[0];o&&(this._rows=this._rows.map(i=>i.id===t?o:i),this._notify())}_add(){let t=this._rows.at(-1);t&&(this._rows=[...this._rows,{...t,id:++this._nextId}],this._notify())}_remove(t){this._rows.length<=1||(this._rows=this._rows.filter(n=>n.id!==t),this._notify())}render(){let t=this._loading&&this._rows.length===0,n=t?(this.value.length>0?this.value:[{mode:"generic",isolate:!1}]).map((o,i)=>({...o,id:`pending-${i}`})):this._rows,r=c2(this._rows);return p`<section aria-label="Scan regimes" aria-busy="${this._loading}"><div class="heading"><h2>Scan regimes</h2><span>${n.length} ${n.length===1?"regime":"regimes"}</span></div>${this._error?p`<p class="message" role="alert">Couldn’t load models: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:b} ${ve(n,o=>o.id,(o,i)=>this._row(o,i,r[i],t))}<div class="footer"><button type="button" class="add" ?disabled="${this._loading||this._rows.length===0}" @click="${this._add}"><span aria-hidden="true">+</span> Add regime</button><span class="message" role="status">${r.includes(!0)?"Change or remove duplicate regimes to run the scan":"Results from these regimes will be merged"}</span></div>${t?p`<div class="app-model"><div class="app-model-placeholder">App model: Loading…</div></div>`:this._appModelRow()}</section>`}_appModelRow(){let t=this._resolvedAppModel;return t?p`<details class="app-model" .open="${Je(this._appModelOpen)}" @toggle="${n=>{this._appModelOpen=n.currentTarget.open}}"><summary><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><span class="app-model-name">App model: <strong>${Nl(t.model)}</strong></span><span class="app-model-effort">Effort: <strong>${Dl(t.effort)}</strong></span></summary><div class="app-model-controls"><scan-model-picker .loadModels="${this._sharedModels}" .value="${Je(t.model)}" .effort="${Je(t.effort)}" @model-change="${n=>{n.stopPropagation(),this._changeAppModel(n.detail)}}"></scan-model-picker></div></details>`:b}_row(t,n,r,o=!1){return p`<div class="${`row${r?" duplicate":""}`}" ?inert="${o}" role="group" aria-label="${`Regime ${n+1}`}" aria-describedby="${r?`duplicate-${t.id}`:b}"><div class="mode" role="radiogroup" aria-label="Scan mode">${a2.map(i=>p`<label class="mode-choice"><input type="radio" name="${`regime-mode-${t.id}`}" .checked="${t.mode===i}" @change="${()=>this._change(t.id,{mode:i})}"><span>${i[0].toUpperCase()+i.slice(1)}</span></label>`)}</div><scan-model-picker .pending="${o}" .loadModels="${this._sharedModels}" .value="${Je(t.model)}" .effort="${Je(t.effort)}" @model-change="${i=>{i.stopPropagation(),this._change(t.id,i.detail)}}"></scan-model-picker><div class="row-actions"><scan-depth-toggle vertical .isolate="${t.isolate}" @depth-change="${i=>{i.stopPropagation(),this._change(t.id,{isolate:i.detail.isolate})}}"></scan-depth-toggle>${r?p`<span class="duplicate-label" id="${`duplicate-${t.id}`}">Duplicate regime</span>`:b}</div><button type="button" class="remove" aria-label="${`Remove regime ${n+1}`}" ?disabled="${this._rows.length===1}" @click="${()=>this._remove(t.id)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button></div>`}static styles=Qe`:host{display:block;min-width:0;container:regime-editor / inline-size}*{box-sizing:border-box}.heading{display:flex;align-items:baseline;gap:.65rem;margin-bottom:.75rem}h2{margin:0;color:var(--text);font-size:.85rem;font-weight:600}.heading>span{color:var(--muted);font-size:.7rem}.row{position:relative;display:grid;grid-template-columns:7.75rem minmax(0,1fr) 5.8rem;align-items:start;gap:1rem;padding:.85rem 0;border-top:1px solid var(--border)}.mode{display:grid;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;background:var(--bg)}.mode-choice{position:relative;user-select:none}.mode-choice+.mode-choice{border-top:1px solid var(--border)}.mode-choice input{position:absolute;width:1px;height:1px;opacity:0}.mode-choice span{display:block;padding:.2rem .6rem;color:var(--muted);font-size:.72rem;line-height:1.15rem}.mode-choice:hover span{background:var(--surface-active)}.mode-choice input:checked+span{color:var(--accent);background:rgb(from var(--accent) r g b / .1);box-shadow:inset 2px 0 var(--accent);font-weight:600}.mode-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}button{border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit;font-size:.74rem;cursor:default}button{padding:.4rem .55rem;user-select:none}button:hover:not(:disabled){background:var(--surface-active)}button:disabled{opacity:.35}.row-actions{position:relative;display:flex;align-items:center;align-self:stretch;min-height:4.65rem;padding:.8rem 0 .25rem}.remove{position:absolute;top:.15rem;right:0;display:grid;place-items:center;width:1.5rem;height:1.5rem;padding:.25rem;border:0;background:transparent;color:var(--muted)}.duplicate-label{position:absolute;right:.15rem;bottom:-.05rem;transform:rotate(-7deg);padding:.1rem .3rem;border:1px solid rgb(from var(--critical, #e5534b) r g b / .45);border-radius:3px;color:var(--critical, #e5534b);background:var(--surface);font-size:.6rem;line-height:1rem;white-space:nowrap;pointer-events:none;user-select:none}svg{width:1rem;height:1rem}.footer{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;padding-top:.6rem;border-top:1px solid var(--border)}.add{display:flex;align-items:center;gap:.3rem}.app-model{margin-top:.7rem;border-top:1px solid var(--border)}.app-model-placeholder{padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem}.app-model>summary{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .8rem;padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem;list-style:none;cursor:default;user-select:none}.app-model>summary::-webkit-details-marker{display:none}.app-model>summary:hover{color:var(--text)}.app-model>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 3px)}.app-model>summary svg{width:.8rem;height:.8rem;flex:0 0 .8rem}.app-model[open]>summary svg{transform:rotate(90deg)}.app-model strong{color:var(--text);font-weight:500}.app-model-name{min-width:0;overflow-wrap:anywhere}.app-model-effort{white-space:nowrap}.app-model-controls{padding:.85rem 0 .15rem}.message{margin:0;color:var(--muted);font-size:.7rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container regime-editor (max-width: 54rem){.row{grid-template-columns:minmax(0,1fr) 5.8rem}scan-model-picker{grid-row:2;grid-column:1 / -1}.mode{grid-column:1;max-width:9rem}.row-actions{grid-column:2}}`};customElements.get("scan-regime-editor")||customElements.define("scan-regime-editor",d2)});var ZF,XF=$(()=>{ZF=`:host{display:block;min-width:0;color:var(--text);container:mode-selector / inline-size}*{box-sizing:border-box}section{overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface)}header{display:flex;align-items:baseline;gap:.8rem;padding:.85rem 1rem .7rem}h2{margin:0;font-size:.86rem;font-weight:600}header>span{color:var(--muted);font-size:.73rem}fieldset{min-width:0;margin:0;padding:0;border:0}.modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;padding:0 1rem .9rem}.mode{position:relative;display:flex;align-items:flex-start;gap:.55rem;padding:.7rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);background:var(--bg);cursor:default;text-align:left}.mode:hover{background:var(--surface-active)}.mode:has(:checked){border-color:rgb(from var(--accent) r g b / .6);background:rgb(from var(--accent) r g b / .07)}input{position:absolute;width:1px;height:1px;opacity:0;margin:0}.mode:has(:focus-visible),.subtype-option:has(:focus-visible){outline:2px solid var(--accent);outline-offset:3px}.mode-icon{display:flex;flex-shrink:0;color:var(--muted);padding-top:.1rem}.mode-icon svg{width:1rem;height:1rem}.mode-copy{display:grid;min-width:0;gap:.35rem;padding-right:.55rem}.mode-copy strong{font-size:.78rem;font-weight:500;line-height:1.3}.mode-copy>span{color:var(--muted);font-size:.69rem;line-height:1.4}.mode:has(:checked) .mode-copy strong,.mode:has(:checked) .mode-icon{color:var(--accent)}.indicator{position:absolute;right:.55rem;top:.75rem;width:.55rem;height:.55rem;border:1px solid var(--muted);border-radius:50%;opacity:.5}.mode:has(:checked) .indicator{border-color:var(--accent);background:var(--accent);box-shadow:inset 0 0 0 2px var(--bg);opacity:1}.subtype-wrap{border-top:1px solid var(--border);background:rgb(from var(--accent) r g b / .025)}.subtype-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem;padding:.7rem .9rem .45rem}.report-subtypes{grid-template-columns:repeat(2,minmax(0,1fr));padding-bottom:.7rem}.subtype-option{position:relative;display:grid;gap:.12rem;padding:.42rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--muted);background:var(--bg);text-align:left}.subtype-option strong{color:var(--text);font-size:.72rem;font-weight:500}.subtype-option span{font-size:.62rem}.subtype-option:has(:checked){border-color:rgb(from var(--accent) r g b / .55);background:rgb(from var(--accent) r g b / .1)}.subtype-option:has(:checked) strong{color:var(--accent)}.subtype-help{margin:0;padding:.15rem .9rem .72rem;color:var(--muted);font-size:.68rem;line-height:1.4}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@container mode-selector (max-width: 48rem){.modes,.subtype-options{grid-template-columns:repeat(2,minmax(0,1fr))}}@container mode-selector (max-width: 30rem){.mode-icon{display:none}header>span{display:none}}
|
|
195
|
-
`});var bX,yX,vX,u2,QF=$(()=>{"use strict";P();wt();jt();XF();bX=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Rb},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:ZM},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:QM},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:dd}],yX=[{id:"generic",label:"Generic",detail:"Free-form code scan: wide-scoped, most results"},{id:"security",label:"Security",detail:"Security findings only"},{id:"correctness",label:"Correctness",detail:"Guided correctness scan"},{id:"advanced",label:"Advanced",detail:"Merge multiple regimes"}],vX=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],u2=class extends
|
|
194
|
+
`};customElements.get("scan-report-inputs")||customElements.define("scan-report-inputs",o2)});var fX,hX,i2,s2=$(()=>{"use strict";P();fX=p`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,hX=p`<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3 3M7 5v4M5 7h4"/></svg>`,i2=class extends he{static properties={isolate:{type:Boolean},vertical:{type:Boolean,reflect:!0}};constructor(){super(),this.isolate=!1,this.vertical=!1}_select(t){this.isolate!==t&&(this.isolate=t,this.dispatchEvent(new CustomEvent("depth-change",{detail:{isolate:t},bubbles:!0,composed:!0})))}render(){return p`<div class="scan-depth"><div class="depth-options" role="radiogroup" aria-label="Scan depth" aria-orientation="${this.vertical?"vertical":"horizontal"}" aria-describedby="${this.vertical?b:"scan-depth-description"}">${[[!1,"List",fX],[!0,"Isolate",hX]].map(([t,n,r])=>p`<label class="depth-choice"><input type="radio" name="scan-depth" value="${t?"isolate":"list"}" .checked="${this.isolate===t}" @change="${()=>this._select(t)}"><span>${r}${n}</span></label>`)}</div>${this.vertical?b:p`<div class="depth-description" id="scan-depth-description" aria-live="polite"><span class="${this.isolate?"inactive":""}" aria-hidden="${this.isolate}">Regular scan depth</span><span class="${this.isolate?"":"inactive"}" aria-hidden="${!this.isolate}">Deeper search at ~10x the tokens spent</span></div>`}</div>`}static styles=Qe`:host{display:block;width:19rem;max-width:100%;min-width:0}*{box-sizing:border-box}.scan-depth{display:grid;gap:.4rem;width:100%;min-width:0;user-select:none}.depth-options{display:flex;position:relative;padding:.2rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg)}.depth-options:before{content:"";position:absolute;inset:.2rem auto .2rem .2rem;width:calc((100% - .4rem)/2);border-radius:var(--ui-radius, 5px);background:var(--surface-active);box-shadow:0 1px 3px #0000001f,inset 0 0 0 1px rgb(from var(--accent) r g b / .18);transition:transform .16s ease-out}.depth-options:has(input[value=isolate]:checked):before{transform:translate(100%)}.depth-choice{position:relative;flex:1;min-width:0}.depth-choice input{position:absolute;width:1px;height:1px;opacity:0}.depth-choice span{display:flex;align-items:center;justify-content:center;gap:.4rem;height:1.9rem;padding:.3rem .65rem;border-radius:var(--ui-radius, 5px);color:var(--muted);font-size:.76rem;font-weight:500;transition:color .12s}.depth-choice svg{width:.95rem;height:.95rem;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.depth-choice:hover span{color:var(--text)}.depth-choice input:checked+span{color:var(--accent)}.depth-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.depth-description{display:grid;color:var(--muted);font-size:.68rem;line-height:1.4}.depth-description span{grid-area:1 / 1}.depth-description .inactive{visibility:hidden}@media(prefers-reduced-motion:reduce){.depth-options:before,.depth-choice span{transition:none}}:host([vertical]){width:5.8rem}:host([vertical]) .depth-options{flex-direction:column}:host([vertical]) .depth-options:before{inset:.2rem .2rem auto;width:auto;height:calc((100% - .4rem)/2)}:host([vertical]) .depth-options:has(input[value=isolate]:checked):before{transform:translateY(100%)}:host([vertical]) .depth-choice span{justify-content:flex-start;height:1.7rem;padding:.25rem .5rem;font-size:.72rem}`};customElements.get("scan-depth-toggle")||customElements.define("scan-depth-toggle",i2)});function GF(e){let t=e[0];return t?.model&&e.every(n=>n.model===t.model&&n.effort===t.effort)?{model:t.model,effort:t.effort}:null}function qF(e,t){let n=t.models.find(r=>r.id===e?.model)??t.models.find(r=>r.id===t.defaultModel)??t.models[0];return n?{model:n.id,effort:n.efforts.includes(e?.effort)?e.effort:jd(n)}:null}function l2(e,t){let n=t.models.find(r=>r.id===t.defaultModel)??t.models[0];return n?(e.length>0?e:[{mode:"generic",isolate:!1}]).map(r=>{let o=t.models.find(i=>i.id===r.model)??n;return{...r,mode:a2.includes(r.mode)?r.mode:"generic",model:o.id,effort:o.efforts.includes(r.effort)?r.effort:jd(o),isolate:!!r.isolate}}):[]}function c2(e){let t=new Set;return e.map(n=>{let r=mX(n),o=t.has(r);return t.add(r),o})}var a2,mX,YF=$(()=>{"use strict";ca();a2=["security","generic","correctness"],mX=e=>JSON.stringify([e.mode,e.model,e.effort,e.isolate])});var d2,JF=$(()=>{"use strict";P();er();un();X_();s2();ca();YF();d2=class extends he{static properties={value:{attribute:!1},loadModels:{attribute:!1},appModel:{attribute:!1},appModelAutomatic:{attribute:!1},_rows:{state:!0},_loading:{state:!0},_error:{state:!0},_resolvedAppModel:{state:!0},_appModelOpen:{state:!0}};constructor(){super(),this.value=[],this.appModel=null,this.appModelAutomatic=!0,this._resolvedAppModel=null,this._appModelOpen=!1,this._appModelsAgree=!0,this._rows=[],this._catalogue={models:[]},this._nextId=0,this._loading=!0,this._error=null}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadModels")){this._load();return}t.has("value")&&this.value!==this._lastEmitted&&!this._loading?(this._setRows(this.value),this._notify()):(t.has("appModel")||t.has("appModelAutomatic"))&&!this._loading&&this._notify()}_setRows(t){this._rows=l2(t,this._catalogue).map(n=>({...n,id:n.id??++this._nextId}))}_notify(){let t=this._loading&&this._rows.length===0?this.value:this._rows.map(({id:r,...o})=>o);this._loading||this._syncAppModel();let n=!this._loading&&!this._error&&this._resolvedAppModel!=null&&t.length>0&&!c2(t).includes(!0);this._lastEmitted=t,this.dispatchEvent(new CustomEvent("regimes-change",{detail:{value:t,ready:n,appModel:this._resolvedAppModel??this.appModel,appModelAutomatic:this.appModelAutomatic},bubbles:!0,composed:!0}))}_syncAppModel(){let t=GF(this._rows),n=qF((this.appModelAutomatic?t:null)??this.appModel??this._rows[0],this._catalogue);(this.appModel?.model!==n?.model||this.appModel?.effort!==n?.effort)&&(this.appModel=n),this._resolvedAppModel=this.appModel;let r=!!t&&t.model===n?.model&&t.effort===n?.effort;r!==this._appModelsAgree&&(this._appModelOpen=!r),this._appModelsAgree=r}_changeAppModel(t){t.model===this._resolvedAppModel?.model&&t.effort===this._resolvedAppModel?.effort||(this.appModelAutomatic=!1,this.appModel={model:t.model,effort:t.effort},this._notify())}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let n=!1,r=o=>{t.signal.aborted||(n=!0,this._catalogue=o,this._sharedModels=()=>Promise.resolve(o),this._setRows(this._rows.length>0?this._rows:this.value),this._loading=!1,this._notify())};try{r(await this.loadModels(t.signal,r))}catch(o){!t.signal.aborted&&!n&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_change(t,n){let r=this._rows.find(i=>i.id===t);if(!r)return;let o=l2([{...r,...n}],this._catalogue)[0];o&&(this._rows=this._rows.map(i=>i.id===t?o:i),this._notify())}_add(){let t=this._rows.at(-1);t&&(this._rows=[...this._rows,{...t,id:++this._nextId}],this._notify())}_remove(t){this._rows.length<=1||(this._rows=this._rows.filter(n=>n.id!==t),this._notify())}render(){let t=this._loading&&this._rows.length===0,n=t?(this.value.length>0?this.value:[{mode:"generic",isolate:!1}]).map((o,i)=>({...o,id:`pending-${i}`})):this._rows,r=c2(this._rows);return p`<section aria-label="Scan regimes" aria-busy="${this._loading}"><div class="heading"><h2>Scan regimes</h2><span>${n.length} ${n.length===1?"regime":"regimes"}</span></div>${this._error?p`<p class="message" role="alert">Couldn’t load models: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:b} ${ve(n,o=>o.id,(o,i)=>this._row(o,i,r[i],t))}<div class="footer"><button type="button" class="add" ?disabled="${this._loading||this._rows.length===0}" @click="${this._add}"><span aria-hidden="true">+</span> Add regime</button><span class="message" role="status">${r.includes(!0)?"Change or remove duplicate regimes to run the scan":"Results from these regimes will be merged"}</span></div>${t?p`<div class="app-model"><div class="app-model-placeholder">App model: Loading…</div></div>`:this._appModelRow()}</section>`}_appModelRow(){let t=this._resolvedAppModel;return t?p`<details class="app-model" .open="${Je(this._appModelOpen)}" @toggle="${n=>{this._appModelOpen=n.currentTarget.open}}"><summary><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><span class="app-model-name">App model: <strong>${Nl(t.model)}</strong></span><span class="app-model-effort">Effort: <strong>${Dl(t.effort)}</strong></span></summary><div class="app-model-controls"><scan-model-picker .loadModels="${this._sharedModels}" .value="${Je(t.model)}" .effort="${Je(t.effort)}" @model-change="${n=>{n.stopPropagation(),this._changeAppModel(n.detail)}}"></scan-model-picker></div></details>`:b}_row(t,n,r,o=!1){return p`<div class="${`row${r?" duplicate":""}`}" ?inert="${o}" role="group" aria-label="${`Regime ${n+1}`}" aria-describedby="${r?`duplicate-${t.id}`:b}"><div class="mode" role="radiogroup" aria-label="Scan mode">${a2.map(i=>p`<label class="mode-choice"><input type="radio" name="${`regime-mode-${t.id}`}" .checked="${t.mode===i}" @change="${()=>this._change(t.id,{mode:i})}"><span>${i[0].toUpperCase()+i.slice(1)}</span></label>`)}</div><scan-model-picker .pending="${o}" .loadModels="${this._sharedModels}" .value="${Je(t.model)}" .effort="${Je(t.effort)}" @model-change="${i=>{i.stopPropagation(),this._change(t.id,i.detail)}}"></scan-model-picker><div class="row-actions"><scan-depth-toggle vertical .isolate="${t.isolate}" @depth-change="${i=>{i.stopPropagation(),this._change(t.id,{isolate:i.detail.isolate})}}"></scan-depth-toggle>${r?p`<span class="duplicate-label" id="${`duplicate-${t.id}`}">Duplicate regime</span>`:b}</div><button type="button" class="remove" aria-label="${`Remove regime ${n+1}`}" ?disabled="${this._rows.length===1}" @click="${()=>this._remove(t.id)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button></div>`}static styles=Qe`:host{display:block;min-width:0;container:regime-editor / inline-size}*{box-sizing:border-box}.heading{display:flex;align-items:baseline;gap:.65rem;margin-bottom:.75rem}h2{margin:0;color:var(--text);font-size:.85rem;font-weight:600}.heading>span{color:var(--muted);font-size:.7rem}.row{position:relative;display:grid;grid-template-columns:7.75rem minmax(0,1fr) 5.8rem;align-items:start;gap:1rem;padding:.85rem 0;border-top:1px solid var(--border)}.mode{display:grid;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;background:var(--bg)}.mode-choice{position:relative;user-select:none}.mode-choice+.mode-choice{border-top:1px solid var(--border)}.mode-choice input{position:absolute;width:1px;height:1px;opacity:0}.mode-choice span{display:block;padding:.2rem .6rem;color:var(--muted);font-size:.72rem;line-height:1.15rem}.mode-choice:hover span{background:var(--surface-active)}.mode-choice input:checked+span{color:var(--accent);background:rgb(from var(--accent) r g b / .1);box-shadow:inset 2px 0 var(--accent);font-weight:600}.mode-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}button{border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit;font-size:.74rem;cursor:default}button{padding:.4rem .55rem;user-select:none}button:hover:not(:disabled){background:var(--surface-active)}button:disabled{opacity:.35}.row-actions{position:relative;display:flex;align-items:center;align-self:stretch;min-height:4.65rem;padding:.8rem 0 .25rem}.remove{position:absolute;top:.15rem;right:0;display:grid;place-items:center;width:1.5rem;height:1.5rem;padding:.25rem;border:0;background:transparent;color:var(--muted)}.duplicate-label{position:absolute;right:.15rem;bottom:-.05rem;transform:rotate(-7deg);padding:.1rem .3rem;border:1px solid rgb(from var(--critical, #e5534b) r g b / .45);border-radius:3px;color:var(--critical, #e5534b);background:var(--surface);font-size:.6rem;line-height:1rem;white-space:nowrap;pointer-events:none;user-select:none}svg{width:1rem;height:1rem}.footer{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;padding-top:.6rem;border-top:1px solid var(--border)}.add{display:flex;align-items:center;gap:.3rem}.app-model{margin-top:.7rem;border-top:1px solid var(--border)}.app-model-placeholder{padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem}.app-model>summary{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .8rem;padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem;list-style:none;cursor:default;user-select:none}.app-model>summary::-webkit-details-marker{display:none}.app-model>summary:hover{color:var(--text)}.app-model>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 3px)}.app-model>summary svg{width:.8rem;height:.8rem;flex:0 0 .8rem}.app-model[open]>summary svg{transform:rotate(90deg)}.app-model strong{color:var(--text);font-weight:500}.app-model-name{min-width:0;overflow-wrap:anywhere}.app-model-effort{white-space:nowrap}.app-model-controls{padding:.85rem 0 .15rem}.message{margin:0;color:var(--muted);font-size:.7rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container regime-editor (max-width: 54rem){.row{grid-template-columns:minmax(0,1fr) 5.8rem}scan-model-picker{grid-row:2;grid-column:1 / -1}.mode{grid-column:1;max-width:9rem}.row-actions{grid-column:2}}`};customElements.get("scan-regime-editor")||customElements.define("scan-regime-editor",d2)});var ZF,XF=$(()=>{ZF=`:host{display:block;min-width:0;color:var(--text);container:mode-selector / inline-size}*{box-sizing:border-box}section{overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface)}header{display:flex;align-items:baseline;gap:.8rem;padding:.85rem 1rem .7rem}h2{margin:0;font-size:.86rem;font-weight:600}header>span{color:var(--muted);font-size:.73rem}fieldset{min-width:0;margin:0;padding:0;border:0}.modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;padding:0 1rem .9rem}.mode{position:relative;display:flex;align-items:flex-start;gap:.55rem;padding:.7rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);background:var(--bg);cursor:default;text-align:left}.mode:hover{background:var(--surface-active)}.mode:has(:checked){border-color:rgb(from var(--accent) r g b / .6);background:rgb(from var(--accent) r g b / .07)}input{position:absolute;width:1px;height:1px;opacity:0;margin:0}.mode:has(:focus-visible),.subtype-option:has(:focus-visible){outline:2px solid var(--accent);outline-offset:3px}.mode-icon{display:flex;flex-shrink:0;color:var(--muted);padding-top:.1rem}.mode-icon svg{width:1rem;height:1rem}.mode-copy{display:grid;min-width:0;gap:.35rem;padding-right:.55rem}.mode-copy strong{font-size:.78rem;font-weight:500;line-height:1.3}.mode-copy>span{color:var(--muted);font-size:.69rem;line-height:1.4}.mode:has(:checked) .mode-copy strong,.mode:has(:checked) .mode-icon{color:var(--accent)}.indicator{position:absolute;right:.55rem;top:.75rem;width:.55rem;height:.55rem;border:1px solid var(--muted);border-radius:50%;opacity:.5}.mode:has(:checked) .indicator{border-color:var(--accent);background:var(--accent);box-shadow:inset 0 0 0 2px var(--bg);opacity:1}.subtype-wrap{border-top:1px solid var(--border);background:rgb(from var(--accent) r g b / .025)}.subtype-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem;padding:.7rem .9rem .45rem}.report-subtypes{grid-template-columns:repeat(2,minmax(0,1fr));padding-bottom:.7rem}.subtype-option{position:relative;display:grid;gap:.12rem;padding:.42rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--muted);background:var(--bg);text-align:left}.subtype-option strong{color:var(--text);font-size:.72rem;font-weight:500}.subtype-option span{font-size:.62rem}.subtype-option:has(:checked){border-color:rgb(from var(--accent) r g b / .55);background:rgb(from var(--accent) r g b / .1)}.subtype-option:has(:checked) strong{color:var(--accent)}.subtype-help{margin:0;padding:.15rem .9rem .72rem;color:var(--muted);font-size:.68rem;line-height:1.4}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@container mode-selector (max-width: 48rem){.modes,.subtype-options{grid-template-columns:repeat(2,minmax(0,1fr))}}@container mode-selector (max-width: 30rem){.mode-icon{display:none}header>span{display:none}}
|
|
195
|
+
`});var bX,yX,vX,u2,QF=$(()=>{"use strict";P();wt();jt();XF();bX=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Rb},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:ZM},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:QM},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:dd}],yX=[{id:"generic",label:"Generic",detail:"Free-form code scan: wide-scoped, most results"},{id:"security",label:"Security",detail:"Security findings only"},{id:"correctness",label:"Correctness",detail:"Guided correctness scan"},{id:"advanced",label:"Advanced",detail:"Merge multiple regimes"}],vX=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],u2=class extends he{static properties={mode:{},analyzer:{},reportMode:{}};static styles=N(ZF);constructor(){super(),this.mode="code",this.analyzer="generic",this.reportMode="link"}_choose(t,n){this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}render(){let t=this.mode==="code",n=this.mode==="report",r=t?yX:vX,o=t?this.analyzer:this.reportMode;return p`<section aria-labelledby="mode-heading"><header><h2 id="mode-heading">Scan mode</h2><span>Choose what the server should analyze</span></header><fieldset class="modes"><legend class="sr-only">Scan mode</legend>${bX.map(i=>p`<label class="mode"><input type="radio" name="scan-mode" .checked="${this.mode===i.id}" aria-label="${i.label}" @change="${()=>this._choose("scan-mode-change",{mode:i.id})}"> <span class="mode-icon" aria-hidden="true">${te(i.icon)}</span> <span class="mode-copy"><strong>${i.label}</strong><span>${i.detail}</span></span> <span class="indicator" aria-hidden="true"></span></label>`)}</fieldset>${t||n?p`<div class="subtype-wrap"><fieldset class="${`subtype-options ${n?"report-subtypes":""}`}"><legend class="sr-only">${t?"Code subtype":"Reports submode"}</legend>${r.map(i=>p`<label class="subtype-option"><input type="radio" name="scan-focus" .checked="${o===i.id}" aria-label="${i.label}" @change="${()=>t?this._choose("scan-analyzer-change",{analyzer:i.id}):this._choose("scan-report-mode-change",{mode:i.id})}"> <strong>${i.label}</strong><span>${i.detail}</span></label>`)}</fieldset>${t?p`<p class="subtype-help">Focusing controls how effort is spent: while Generic can also find security issues, a focused Security scan is likely to find more.</p>`:b}</div>`:b}</section>`}};customElements.get("scan-mode-selector")||customElements.define("scan-mode-selector",u2)});var eB,tB=$(()=>{"use strict";P();gv();eB=Qe`
|
|
196
196
|
/* The containing page owns the outer gutters, in both Manage and local. */
|
|
197
197
|
:host { display: block; box-sizing: border-box; color: var(--text); }
|
|
198
198
|
* { box-sizing: border-box; }
|
|
@@ -330,7 +330,7 @@ You can change this anytime from the lock icon in the sidebar header.`)){O7();re
|
|
|
330
330
|
@container scan-page (max-width: 48rem) { .bundle-choice, .source-choice, .source-footer { grid-template-columns: 1fr; gap: .7rem; } .scope-grid { grid-template-columns: 1fr; } .scope-pane + .scope-pane { border-top: 1px solid var(--border); border-left: 0; } }
|
|
331
331
|
@container scan-page (max-width: 42rem) { .options { display: block; padding-bottom: 3rem; } .checks { margin-top: .8rem; } .offline-help { max-width: 100%; white-space: normal; } .options-footer { margin-top: .8rem; } }
|
|
332
332
|
@container scan-page (max-width: 34rem) { .bundle-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .45rem .65rem; } .scope-head { flex-wrap: wrap; } .scope-head p { flex-basis: 100%; justify-content: start; margin-left: 1.4rem; text-align: left; } .scope-head p span { white-space: normal; } .scope-head p span + span { padding-left: 0; border-left: 0; } .scan-row { grid-template-columns: 1fr; gap: .55rem; } .scan-actions { justify-content: flex-start; } .head-tabs { margin-left: 0; } }
|
|
333
|
-
`});function rB(e){let t=e.filter(r=>r.id!=="all");if(t.length===0)return null;let n=new Map(t.map(r=>[String(r.id).replace(/^reason:/u,""),r]));return n.size!==t.length||[...n.keys()].some(r=>!nB.some(o=>o.key===r))?null:[{id:"",label:"All files",subtitle:"Everything"},...nB.filter(r=>n.has(r.key)).map(({key:r,...o})=>({...o,id:n.get(r).id,subtitle:r==="run"&&n.has("metro")?"Bundler and Node.js CLI":o.subtitle}))]}var nB,oB=$(()=>{"use strict";nB=[{key:"metro",label:"metro",subtitle:"Metro bundle contents"},{key:"run",label:"run",subtitle:"Node.js CLI"},{key:"add",label:"add",subtitle:"Manually added files"}]});var p2,lh=$(()=>{"use strict";P();er();oB();p2=class extends fe{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value="",this.label="Choose scope"}_select(t){this.dispatchEvent(new CustomEvent("scope-change",{detail:{value:t},bubbles:!0,composed:!0}))}render(){let t=this.reasons.filter(o=>o.id!=="all");if(t.length===0)return b;let n=rB(t);if(!n)return p`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${Je(this.value==="all"?"":this.value)}" @change="${o=>this._select(o.target.value)}"><option value="">All files</option>${t.map(o=>p`<option value="${o.id}">${o.label??o.id}</option>`)}</select></label>`;let r=n.find(o=>o.id===this.value)??n[0];return p`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${n.map(o=>p`<label class="scope-option"><input type="radio" name="scope" value="${o.id}" .checked="${r.id===o.id}" @change="${()=>this._select(o.id)}"><span>${o.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${r.subtitle}</span></div>`}static styles=Qe`:host{display:block;min-width:0}*{box-sizing:border-box}.scope-toggle,.scope-field{cursor:default;user-select:none;-webkit-user-select:none}.scope-toggle{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.4rem .7rem;min-width:0;min-height:2rem}.scope-options{display:flex;flex-shrink:0;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);overflow:hidden;background:var(--bg)}.scope-option{position:relative;flex:1 0 auto}.scope-option+.scope-option{border-left:1px solid var(--border)}.scope-option input{position:absolute;width:1px;height:1px;opacity:0}.scope-option span{display:grid;place-items:center;height:calc(2rem - 2px);padding:.3rem .55rem;color:var(--muted);font-size:.74rem;white-space:nowrap}.scope-option:hover span{color:var(--text);background:var(--surface-active)}.scope-option input:checked+span{color:var(--text);background:var(--surface-active);font-weight:500}.scope-option input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.scope-description{order:-1;min-width:0;color:var(--muted);font-size:.66rem;line-height:1rem;text-align:right}.scope-field{display:flex;align-items:center;justify-content:end;gap:.5rem;min-width:0;max-width:100%;margin-left:auto;color:var(--muted);font-size:.7rem}select{width:13rem;min-width:0;max-width:100%;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.76rem}:host([compact]) .scope-toggle{min-height:0;gap:.3rem .5rem}:host([compact]) .scope-option span{height:auto;padding:2px 8px;font-size:.68rem;line-height:1.2}:host([compact]) .scope-field{font-size:.68rem}:host([compact]) .scope-description{display:none}:host([compact]) select{width:auto;max-width:22ch;padding:2px 6px;font-size:.68rem;line-height:1.2}`};customElements.get("bundle-scope-selector")||customElements.define("bundle-scope-selector",p2)});var iB,f2,sB=$(()=>{"use strict";P();wt();er();un();jt();ca();X_();uv();n2();pv();KF();JF();s2();QF();tB();gv();Ol();lh();iB={code:te(Rb),report:te(dd)},f2=class extends fe{static properties={hideHeading:{type:Boolean,attribute:"hide-heading"},sourceLoading:{type:Boolean,attribute:!1},selection:{attribute:!1},scopeLabel:{type:String,attribute:"scope-label"},createBundleHref:{attribute:!1},source:{attribute:!1},loadBundle:{attribute:!1},loadModels:{attribute:!1},loadReportSources:{attribute:!1},canRun:{attribute:!1},_loadingBundle:{state:!0},_bundleError:{state:!0},_tab:{state:!0},_mode:{state:!0},_bundles:{state:!0},_repositories:{state:!0},_reportMode:{state:!0},_reportInput:{state:!0},_reportRestore:{state:!0},_scans:{state:!0},_selectedRepoId:{state:!0},_selectedBundleId:{state:!0},_reason:{state:!0},_excluded:{state:!0},_excludedModules:{state:!0},_prompts:{state:!0},_options:{state:!0},_regimes:{state:!0},_regimesReady:{state:!0},_appModel:{state:!0},_appModelAutomatic:{state:!0},_notice:{state:!0}};static styles=eB;constructor(){super(),this.loadModels=lv,this.canRun=!0,this.hideHeading=!1,this._tab="new",this._mode="code",this.source=null,this.selection=null,this.scopeLabel="Repository",this._pendingSelection=null,this.sourceLoading=!1,this.loadBundle=null,this._loadingBundle=!1,this._bundleError=null,this._bundles=[],this._repositories=[],this._reportMode="link",this._reportInput=null,this._reportRestore=null,this._scans=[],this._selectedRepoId=null,this._selectedBundleId=this._bundles[0]?.id??null,this._reason=this._bundles[0]?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._nextPromptId=1,this._prompts=[{id:1,text:""}],this._options={analyzer:"generic",model:null,effort:null,cached:!1,isolate:!1},this._regimes=[],this._appModel=null,this._appModelAutomatic=!0,this._regimesReady=!1,this._notice=null,this._timers=new Set}willUpdate(t){if(t.has("selection")&&(this._pendingSelection=this.selection),t.has("source")&&(this._bundles=this.source?.bundles??[],this._repositories=this.source?.repositories??[],this._scans=this.source?.scans??[]),t.has("source")||t.has("selection")){this._excluded=new Set,this._excludedModules=new Set;let n=this._repositories.find(i=>i.id===this._selectedRepoId),r=this._pendingSelection,o=r?this._bundles.find(i=>i.id===r.bundleId&&(r.repoId==null||i.repoId===r.repoId)):this._bundles.find(i=>i.id===this._selectedBundleId&&i.repoId===this._selectedRepoId)??(this.scopeLabel==="Workspace"?null:this._bundles.find(i=>i.id===this._selectedBundleId))??(n?this._bundles.find(i=>i.repoId===n.id):this._bundles[0]);this._selectedRepoId=o?.repoId??r?.repoId??n?.id??this._repositories[0]?.id??"unattached",this._selectedBundleId=o?.id??null,this._reason=o?.reasons?.[0]?.id??"",r&&(this._tab="new",this._mode=r.mode==="report"?"report":"code",r.mode==="report"&&(this._reportMode="link",this._reportRestore=null,this._reportInput=null,this._pendingSelection=null),this._notice=r.mode==="report"||o||this.source==null?null:"The selected bundle is no longer available in this source. Choose another bundle.",o&&(this._pendingSelection=null))}}updated(t){(t.has("source")||t.has("selection")||t.has("loadBundle"))&&this._loadSelectedBundle()}async _loadSelectedBundle(){this._bundleController?.abort(),this._loadingBundle=!1,this._bundleError=null;let t=this._bundle;if(!this.loadBundle||!t||Array.isArray(t.files))return;let n=this._bundleController=new AbortController;this._loadingBundle=!0;try{let r=await this.loadBundle(t,n.signal);if(n.signal.aborted)return;this._bundles=this._bundles.map(o=>o.id===t.id?{...r,repoId:o.repoId,repo:o.repo}:o),this._reason=r.reasons?.[0]?.id??""}catch(r){n.signal.aborted||(this._bundleError=String(r?.message??r))}finally{n.signal.aborted||(this._loadingBundle=!1)}}disconnectedCallback(){super.disconnectedCallback(),this._bundleController?.abort();for(let t of this._timers)clearTimeout(t);this._timers.clear()}get _repoBundles(){return this._bundles.filter(t=>t.repoId===this._selectedRepoId)}get _bundle(){return this._repoBundles.find(t=>t.id===this._selectedBundleId)}get _reasonData(){return this._bundle?.reasons.find(t=>t.id===this._reason)??this._bundle?.reasons[0]}_packageLabel(t){return t==="__own__"?"Own code":t}get _scopeFiles(){let t=this._reasonData,n=t?.fileModules,r=t?.filePaths?new Set(t.filePaths):null;return(this._bundle?.files??[]).filter(o=>(n==null||n.includes(o.module))&&(r==null||r.has(o.path))).toSorted((o,i)=>i.bytes-o.bytes)}get _files(){return P_(this._scopeFiles)}render(){return p`<div class="wrap">${this.hideHeading?p`<h1 class="sr-only">Scans</h1>`:p`<div class="head"><div class="head-title"><slot name="navigation"></slot><h1>Scans</h1></div></div>`}<div class="intro-row"><p class="intro">${this._tab==="history"?"Review past scans and save completed results as reports.":this._mode==="report"?"Choose inputs and start a scan. Save the report when it finishes.":"Choose a bundle and start a scan. Save the report when it finishes."}</p><div class="head-tabs" role="tablist" aria-label="Scan views"><button class="${this._tab==="new"?"active":""}" role="tab" aria-selected="${this._tab==="new"}" @click="${()=>{this._tab="new"}}">New scan</button> <button class="${this._tab==="history"?"active":""}" role="tab" aria-selected="${this._tab==="history"}" @click="${()=>{this._tab="history"}}">Scan history</button></div></div>${this._notice?p`<p class="notice" role="status">${this._notice}</p>`:b} ${this._bundleError?p`<p class="notice" role="alert">Couldn’t load bundle: ${this._bundleError}<button @click="${()=>{this._loadSelectedBundle()}}">Retry</button></p>`:b} ${this._tab==="new"?this._newScan():this._history()}</div>`}_newScan(){let t=this._mode,n=this._bundle,r=t==="code"?this._files:t==="dependencies"?this._scopeFiles:n?.files??[],o=this._excluded,i=this._excludedModules,s=r.filter(m=>!o.has(m.path)&&!i.has(m.module)),a=Zf(n?.files?s:null),l=new Map;for(let m of r){let g=l.get(m.module)??{bytes:0,count:0,included:0};g.bytes+=m.bytes,g.count++,o.has(m.path)||g.included++,l.set(m.module,g)}let d=[...l.keys()].toSorted((m,g)=>l.get(g).bytes-l.get(m).bytes||this._packageLabel(m).localeCompare(this._packageLabel(g))),u=r.slice(0,80),f=d.filter(m=>!i.has(m)).length,h=this._reportInput?.mode===this._reportMode?this._reportInput.inputs:[];return p`<div class="setup"><scan-mode-selector .mode="${t}" .analyzer="${this._options.analyzer}" .reportMode="${this._reportMode}" @scan-mode-change="${m=>this._changeMode(m.detail.mode)}" @scan-analyzer-change="${m=>this._setOption("analyzer",m.detail.analyzer)}" @scan-report-mode-change="${m=>{this._reportMode=m.detail.mode,this._reportRestore=null}}"></scan-mode-selector>${t==="report"?p`<scan-report-inputs .mode="${this._reportMode}" .loadSources="${this.loadReportSources}" .restore="${this._reportRestore}" @report-inputs-change="${m=>{this._reportInput=m.detail}}"></scan-report-inputs>`:this._sourcePanel(n,r)} ${t==="code"?p`<details class="panel scope-panel"><summary class="scope-head"><svg class="scope-chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><h2>Source filter</h2><p><span>${s.length} of ${r.length} files · ${f} of ${d.length} packages</span> <span>${bo(a.bytes)} · ${a.lines==null?"\u2014":a.lines.toLocaleString()} LoC</span></p></summary><div class="scope-grid"><section class="scope-pane package-pane" aria-label="Packages in bundle"><div class="pane-head"><strong>Packages</strong><span>${d.length} total · sorted by size</span></div><div class="package-list">${d.map(m=>{let{bytes:g,count:y,included:w}=l.get(m),x=!i.has(m);return p`<label class="${`package-row ${x?"":"excluded"}`}"><input type="checkbox" .checked="${x}" @change="${v=>this._toggleModule(m)}"><span class="package-name" data-tooltip-truncated data-tooltip="${this._packageLabel(m)}">${this._packageLabel(m)}</span><span class="package-size">${bo(g)} · ${w}/${y}</span></label>`})}</div></section><section class="scope-pane file-panel" aria-label="Largest files in bundle"><div class="pane-head"><strong>Largest files</strong><span>showing ${u.length} of ${r.length}</span></div>${r.length===0?p`<p class="empty">No files in this selection.</p>`:p`<div class="file-list">${u.map(m=>{let g=!o.has(m.path)&&!i.has(m.module);return p`<label class="${`file ${g?"":"excluded"}`}"><input type="checkbox" .checked="${g}" @change="${y=>this._toggleFile(m,y.target.checked)}"><span class="file-copy"><span class="file-path" data-tooltip-truncated data-tooltip="${m.path}">${m.path}</span><span class="file-meta">${m.size} · ${this._packageLabel(m.module)}</span></span></label>`})}</div>`}</section></div></details>`:b} ${t==="agentic"?this._agenticPanel():b}<slot name="access"></slot>${this._optionsPanel(t,n,t==="report"?h.length:s.length)}</div>`}_sourcePanel(t,n){if(this.sourceLoading)return p`<section class="panel source-panel" aria-busy="true"><div class="panel-head"><h2>Source</h2></div><p class="empty" role="status">Loading scan sources…</p></section>`;let r=this._mode==="code"?this._repoBundles.map(d=>d.files?{...d,files:P_(d.files)}:d.summary?{...d,summary:{...d.summary,files:d.summary.codeFiles}}:d):this._repoBundles,{lines:o}=Zf(t?.files?n:null),i=new Map;for(let d of this._bundles)i.set(d.repoId,(i.get(d.repoId)??0)+1);let s=this._repositories.length>1,a=["code","agentic","dependencies"].includes(this._mode)&&t!=null&&(!t.filename.toLowerCase().endsWith(".map")||t.reasons?.some(d=>d.id!=="all")),l=this._repositories.map(d=>{let u=i.get(d.id)??0;return{value:d.id,label:d.label,detail:`${u} ${u===1?"bundle":"bundles"}`,special:d.id==="unattached"}});return p`<section class="panel source-panel" aria-busy="${this._loadingBundle}"><div class="panel-head"><h2>Source</h2></div><div class="${`source-choice ${s?"":"single-repository"}`}">${s?p`<div class="field"><span>${this.scopeLabel}</span>${this.scopeLabel==="Workspace"?p`<workspace-selector .options="${l}" .value="${this._selectedRepoId}" @workspace-change="${d=>this._selectRepoById(d.detail.value)}"></workspace-selector>`:p`<repository-selector .options="${l}" .value="${this._selectedRepoId}" @repository-change="${d=>this._selectRepoById(d.detail.value)}"></repository-selector>`}</div>`:b}<div class="field">${s||this.createBundleHref?this._bundleLabel():b}${r.length>0?p`<bundle-selector .bundles="${r}" .value="${t?.id??null}" @bundle-change="${d=>this._selectBundleById(d.detail.value)}"></bundle-selector>`:this._emptyBundles()}</div><div class="source-footer"><div class="bundle-stats" aria-label="Bundle statistics"><div class="metric"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="8" cy="4" rx="5" ry="2"/><path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/></svg><strong>${t?.size??"\u2014"}</strong><span>bundle size</span></div><div class="metric">${iB.report}<strong>${n.length}</strong><span>files</span></div><div class="metric">${iB.code}<strong>${o==null?"\u2014":o.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${te(Yn)}<strong>${new Set(n.map(d=>d.module)).size}</strong><span>packages</span></div></div>${a?p`<div class="scope-slot">${this._scopeField(t)}</div>`:b}</div></div></section>`}_bundleLabel(){let t=this.createBundleHref?.(this._selectedRepoId);return p`<div class="bundle-label"><span>Bundle</span>${t?p`<a class="create-bundle-button" href="${t}">Create a bundle</a>`:b}</div>`}_emptyBundles(){let t=this.createBundleHref?.(this._selectedRepoId);return p`<div class="choice-empty"><span>${this._bundles.length===0?"No stored bundles.":`No stored bundles for this ${this.scopeLabel.toLowerCase()}.`}</span>${t?p`<a href="${t}">Create?</a>`:b}</div>`}_scopeField(t){if(!["code","agentic","dependencies"].includes(this._mode))return b;let n=(t?.reasons??[]).filter(r=>r.id!=="all");return n.length===0?b:p`<bundle-scope-selector .reasons="${n}" .value="${this._reason}" label="${this._mode==="agentic"?"Choose agentic scope":"Choose scan scope"}" @scope-change="${r=>this._changeReason(r.detail.value)}"></bundle-scope-selector>`}_optionsPanel(t,n,r){let o=t==="report"?`${r} ${this._reportMode==="merge"?"scan results":"reports"} selected`:`${n?.filename??"No bundle selected"} \xB7 ${r} files will be analyzed`,i=t==="code"&&this._options.analyzer==="advanced",s=!this.canRun||(t==="report"?r===0:n==null||r===0||i&&(!this._regimesReady||this._regimes.length===0));return p`<section class="panel options"><div class="options-grid">${i?p`<scan-regime-editor .loadModels="${this.loadModels}" .value="${this._regimes}" .appModel="${this._appModel}" .appModelAutomatic="${this._appModelAutomatic}" @regimes-change="${a=>{this._regimesReady=a.detail.ready,this._regimes=a.detail.value,this._appModel=a.detail.appModel,this._appModelAutomatic=a.detail.appModelAutomatic}}"></scan-regime-editor>`:p`<scan-model-picker .loadModels="${this.loadModels}" ?has-extra="${t==="code"}" .value="${this._options.model}" .effort="${this._options.effort}" @model-change="${a=>{this._options={...this._options,model:a.detail.model,effort:a.detail.effort}}}">${t==="code"?p`<scan-depth-toggle slot="effort-extra" .isolate="${this._options.isolate}" @depth-change="${a=>this._setOption("isolate",a.detail.isolate)}"></scan-depth-toggle>`:b}</scan-model-picker>`}</div><div class="options-footer"><slot name="before-run"></slot><button type="button" class="run" ?disabled="${s}" @click="${()=>this._runScan()}">${t==="report"?this._reportMode==="merge"?"Merge results":"Link reports":"Run scan"}</button><span class="summary">${o}</span></div><div class="checks"><label class="switch"><input type="checkbox" aria-describedby="${this._options.cached?"offline-help":b}" .checked="${this._options.cached}" @change="${a=>this._setOption("cached",a.target.checked)}"><span class="switch-track" aria-hidden="true"></span><span>Offline</span></label>${this._options.cached?p`<small class="offline-help" id="offline-help">Cache only, no new model requests</small>`:b}</div></section>`}_history(){return p`<section class="panel history"><div class="panel-head"><h2>Scan history</h2><p>${this._scans.length} scans</p></div>${this._scans.length===0?p`<p class="empty">No scans yet.</p>`:this._scans.map(t=>this._scanRow(t))}</section>`}_scanRow(t){let n=t.status==="completed"?t.reportSaved?p`<button type="button" class="action" @click="${()=>this._deleteSavedReport(t)}">Delete saved report</button>`:p`<button type="button" class="action" @click="${()=>this._saveReport(t)}">Save report</button>`:b;return p`<div class="scan-row"><div class="scan-main"><div class="scan-title"><strong data-tooltip-truncated data-tooltip="${t.bundleName}">${t.bundleName}</strong><span class="${`status ${t.status}`}">${t.status}</span></div><span class="scan-meta">${t.reason} · ${t.files} ${t.mode==="report"?t.reportMode==="merge"?"results":"reports":"files"} · ${t.createdAt}${t.duration?` \xB7 ${t.duration}`:""}${t.reportSaved?" \xB7 Report saved":t.status==="completed"?" \xB7 Report available":""}</span></div><span class="scan-actions">${n}${t.status==="running"?p`<button type="button" class="action" @click="${()=>this._stopScan(t)}">Stop</button>`:b}${t.status==="stopped"?p`<button type="button" class="action" @click="${()=>this._restartScan(t)}">Restart as new scan</button>`:b}</span><span aria-hidden="true"></span></div>`}_selectBundle(t){this._pendingSelection=null,this._selectedRepoId=t.repoId,this._selectedBundleId=t.id,this._reason=t.reasons?.[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_selectBundleById(t){let n=this._repoBundles.find(r=>r.id===t);n!=null&&this._selectBundle(n)}_selectRepoById(t){if(t===this._selectedRepoId||!this._repositories.some(r=>r.id===t))return;this._selectedRepoId=t,this._pendingSelection=null;let n=this._bundles.find(r=>r.repoId===t);this._selectedBundleId=n?.id??null,this._reason=n?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_changeMode(t){!["dependencies","code","agentic","report"].includes(t)||t===this._mode||(this._mode=t,this._reportInput=null,this._reportRestore=null,this._excluded=new Set,this._excludedModules=new Set,this._notice=null)}_changeReason(t){this._reason=t,this._excluded=new Set,this._excludedModules=new Set}_toggleFile(t,n){let r=new Set(this._excluded);n?r.delete(t.path):r.add(t.path),this._excluded=r}_toggleModule(t){let n=new Set(this._excludedModules);n.has(t)?n.delete(t):n.add(t),this._excludedModules=n}_setOption(t,n){this._options[t]!==n&&(t==="analyzer"&&n==="advanced"&&(this._regimesReady=!1,this._regimes.length===0&&(this._regimes=[{mode:this._options.analyzer,model:this._options.model,effort:this._options.effort,isolate:this._options.isolate}])),this._options={...this._options,[t]:n})}_agenticPanel(){return p`<section class="panel agentic-panel"><div class="panel-head"><h2>Agentic instructions</h2><button type="button" class="row-action" aria-label="Add prompt" @click="${()=>this._addPrompt()}">${fv}</button></div><div class="agentic-fields">${ve(this._prompts,t=>t.id,(t,n)=>p`<div class="prompt-row"><textarea aria-label="${`Prompt ${n+1}`}" rows="3" placeholder="${this._promptPlaceholder(n)}" .value="${Je(t.text)}" @input="${r=>{this._prompts=this._prompts.map(o=>o.id===t.id?{...o,text:r.target.value}:o)}}"></textarea>${this._prompts.length>1?p`<button type="button" class="row-action" aria-label="${`Remove prompt ${n+1}`}" @click="${()=>this._removePrompt(t.id)}">${hv}</button>`:b}</div>`)}</div></section>`}_promptPlaceholder(t){let n=["","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"][t];return n!=null?`What should the ${n?`${n} `:""}agent focus on?`:`What should agent ${t+1} focus on?`}async _addPrompt(){this._prompts=[...this._prompts,{id:++this._nextPromptId,text:""}],await this.updateComplete,this.renderRoot?.querySelector(".prompt-row:last-child textarea")?.focus()}_removePrompt(t){this._prompts.length>1&&(this._prompts=this._prompts.filter(n=>n.id!==t))}_runScan(){if(!this.canRun)return;let t=this._mode,n=t==="code"&&this._options.analyzer==="advanced";if(n&&(!this._regimesReady||this._regimes.length===0))return;let r=this._bundle,o=this._reportInput?.mode===this._reportMode?this._reportInput:null,i=o?.inputs??[],s=t==="code"?this._files.filter(d=>!this._excluded.has(d.path)&&!this._excludedModules.has(d.module)):t==="dependencies"?this._scopeFiles:r?.files??[];if(t==="report"&&(!o?.source||i.length===0)||t!=="report"&&(!r||s.length===0))return;let a={id:`scan-${Date.now()}`,mode:t,bundleId:t==="report"?this._reportMode==="merge"?o.source.id:null:r?.id??null,bundleName:t==="report"?o.source.label:r.filename,reason:t==="report"?this._reportMode==="merge"?"Merge scan results":"Link saved reports":this._reasonData?.label??"All files",status:"running",createdAt:"Just now",duration:"",files:t==="report"?i.length:s.length,reportSaved:!1,cached:this._options.cached,isolate:t==="code"&&this._options.isolate,model:this._options.model,effort:this._options.effort};t!=="report"&&(a.repoId=this._selectedRepoId,a.scopeId=this._reason),t==="code"&&(a.analyzer=this._options.analyzer),n&&(a.regimes=this._regimes.map(d=>({...d})),a.appModel=this._appModel?{...this._appModel}:null,a.appModelAutomatic=this._appModelAutomatic,a.reason=`Advanced \xB7 ${a.regimes.length} regimes \xB7 ${a.reason}`,a.model=null,a.effort=null,a.isolate=!1),t==="agentic"&&(a.prompts=this._prompts.map(d=>d.text)),t==="report"&&(a.reportMode=this._reportMode,a.reportSource={...o.source},a.inputIds=i.map(d=>d.id)),this._scans=[a,...this._scans],this._tab="history",this._notice="Scan started. The server will update its status as work progresses.";let l=setTimeout(()=>{this._timers.delete(l),a.status==="running"&&(a.status="completed",a.duration="2m 14s",this._notice="Scan completed. Its report is ready to save.",this.requestUpdate())},2200);this._timers.add(l)}_stopScan(t){t.status==="running"&&(t.status="stopped",t.duration=t.duration||"stopped by user",this._notice="Scan stopped. It cannot continue, but you can restart it as a new scan.",this.requestUpdate())}_restartScan(t){if(this._options={...this._options,model:t.model??this._options.model,effort:t.effort??this._options.effort,cached:t.cached??!1,isolate:t.isolate??!1,analyzer:t.analyzer??"generic"},t.mode==="report"){this._mode="report",this._reportMode=t.reportMode==="link"?"link":"merge",this._reportInput=null,this._reportRestore={mode:this._reportMode,source:t.reportSource,inputIds:t.inputIds??[]},this._tab="new",this._notice="New report scan settings restored from the stopped run.";return}let n=this._bundles.find(r=>r.id===t.bundleId&&(t.repoId==null||r.repoId===t.repoId));n&&(this._selectBundle(n),this._mode=t.mode??"dependencies",t.mode==="agentic"&&(this._prompts=(t.prompts?.length>0?t.prompts:[""]).map(r=>({id:++this._nextPromptId,text:r}))),t.regimes?.length>0&&(this._options={...this._options,analyzer:"advanced"},this._regimes=t.regimes.map(r=>({...r})),this._appModel=t.appModel?{...t.appModel}:null,this._appModelAutomatic=t.appModelAutomatic!==!1,this._regimesReady=!1),this._reason=n.reasons.find(r=>r.label===t.reason)?.id??n.reasons[0]?.id??"",this._reason=t.scopeId??this._reason,this._tab="new",this._notice="New scan settings restored from the stopped run.")}_saveReport(t){t.reportSaved=!0,this._notice="Report saved. You can delete it from Reports and save this completed scan again.",this.requestUpdate()}_deleteSavedReport(t){t.reportSaved=!1,this._notice="Saved report deleted. The completed scan can be saved again.",this.requestUpdate()}};customElements.get("deepview-scan-page")||customElements.define("deepview-scan-page",f2)});function Pt(e,{packageDir:t=null}={}){if(t){if(t!=="."){let n=t.match(/(?:^|\/)node_modules\/(@[^/]+\/[^/]+|[^/]+)$/u);return n&&n[1]!==".pnpm"?n[1]:t}}else{let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e))!==null;)if(r[1]!==".pnpm")return r[1]}return"__own__"}function _r(e){return e==="__own__"?"Own source":typeof e!="string"?e:e.match(/^(?:.*\/)?vendor\/(.+)$/u)?.[1]??e}var pi=$(()=>{"use strict"});function yo(e,t){let n=new Map,r=e?.kind==="stasis"?e.bundle?.reason:null;if(!r||typeof r!="object"||Array.isArray(r))return n;let o=new Set(t??[...Pn(e)].filter(([,i])=>i!=null).map(([i])=>i));for(let[i,s]of Object.entries(r).toSorted(([a],[l])=>a.localeCompare(l))){if(!i||!Array.isArray(s))continue;let a=new Set(s.filter(l=>typeof l=="string"&&o.has(l)));a.size>0&&n.set(i,a)}return[...n.values()].some(i=>i.size<o.size)||n.clear(),n}var bv=$(()=>{"use strict";Tf()});function aB(e,t,n,r){let o=n.has(r)?r:null;if(o===null)return{tree:e,origToStripped:t,selected:o};let i=new Map([...t].filter(([l])=>n.get(o).has(l))),s=new Set(i.values());return{tree:Object.fromEntries([...s].map(l=>[l,{...e[l],imports:(e[l].imports??[]).filter(d=>s.has(d))}])),origToStripped:i,selected:o}}function ch(e){let t=new Map;if(e?.kind!=="stasis"||!e.bundle)return t;for(let n of e.bundle.imports.values())for(let[r,o]of n){t.has(r)||t.set(r,new Set);for(let i of o.values()){let s=typeof i=="string"?[i]:i instanceof Map?i.values():[];for(let a of s)typeof a=="string"&&t.get(r).add(a)}}return t}function yv(e,t,n,r,o=t){let i=ch(e),s=new Set;for(let[l,d]of t)Pt(l,{packageDir:r?.get(l)})==="__own__"&&s.add(n(d));for(let l of e?.bundle?.entries??[]){let d=t.get(l);d!==void 0&&s.add(n(d))}if(s.size===0){let l=new Set;for(let[u,f]of t){let h=r?.get(u);h&&h!=="."&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(h)&&l.add(n(f))}let d=new Set;for(let[u,f]of i){let h=t.get(u);if(!(h===void 0||!l.has(n(h))))for(let m of f){let g=t.get(m);g!==void 0&&n(h)!==n(g)&&d.add(n(g))}}for(let u of l)d.has(u)||s.add(u)}let a=new Set;for(let[l,d]of i)if(!o.has(l)&&Pt(l,{packageDir:r?.get(l)})==="__own__")for(let u of d){let f=t.get(u);f!==void 0&&a.add(n(f))}return a.size>0&&s.add("__own__"),{roots:[...s],appImports:[...a]}}var dh=$(()=>{"use strict";pi();bv()});function lB(e,t=[]){let n=new Map,r=e.flatMap(o=>{let i=t.filter(a=>a.bundles?.includes(o.integrity));return(i.length>0?i.map(a=>({id:a.id,label:a.name})):[{id:"unattached",label:"Unattached"}]).map(a=>(n.set(a.id,a),{id:o.integrity,integrity:o.integrity,filename:o.name,repoId:a.id,repo:a.label,files:null,reasons:[],size:"\u2014"}))});return{repositories:[...n.values()],bundles:r,reports:[],scans:[]}}function cB(e,t){if(t.error)throw new Error(t.error);let n=Zt(t),r=t.kind==="stasis"?t.bundle?.formats:null,o=t.lineCounts??new Map([...Wt(t)].map(([a,l])=>[a,Af(l)])),i=[...Pn(t)].filter(([,a])=>a!=null).map(([a,l])=>({path:a,format:r?.get(a)??null,bytes:l,lines:o.get(a)??0,size:bo(l),module:Pt(a,{packageDir:n?.get(a)})})),s=[{id:"all",label:"All",filePaths:null},...[...yo(t,i.map(a=>a.path))].map(([a,l])=>({id:`reason:${a}`,label:a,filePaths:[...l]}))];return{...e,files:i,reasons:s,size:bo(t.size)}}var dB=$(()=>{"use strict";$r();vd();pi();dh();Ol()});function wX(e){let{data:t}=Mr(e);return t&&uB(t)>0?t:null}function uB(e){return(Mt(e)??[]).filter(t=>(Array.isArray(t)?t:[t]).some(n=>n&&typeof n=="object"&&mn(n,n.source??e.source))).length}function pB(e,t){let n=[],r=new Map;for(let{name:i,content:s,fallbackRepo:a}of e){if(typeof s!="string")continue;let l=wX(s);if(!l)continue;let d=Mt(l),u=xt(l)??xt({repo:{github:a}}),f=new Set(u?[u]:[]);if(!u)for(let h of d.flat()){if(/(?:^|\/)(?:node_modules|dependencies)\//u.test(h?.file??""))continue;let m=xt(h);m&&f.add(m)}for(let h of f)r.set(h,{id:h,label:h});n.push({id:i,filename:i,repoIds:[...f],analyzer:l.source,appFindings:uB(l)})}let o=new Set(n.map(i=>i.id));return{merge:{bundles:[],results:[]},link:{reports:n,repositories:[...r.values()],workspaces:t.map(i=>({id:i.id,label:i.name,reports:i.reports.filter(s=>o.has(s))})).filter(i=>i.reports.length>0)}}}var fB=$(()=>{"use strict";Le();Ol()});function da(e){if(e?.throwIfAborted(),A())throw new DOMException("Local scan closed","AbortError")}async function hB(e){da(e);let t=await vn();return da(e),lB(t,de())}async function mB(e,t){da(t);let n=await Ni(e.integrity,{name:e.filename},{sources:!1});return da(t),cB(e,n)}async function gB(e){da(e);let t=await Pe(),n=[];for(let r of t){da(e);let o=await ot(r);da(e),n.push({name:r,content:o,fallbackRepo:Fn(r)})}return da(e),pB(n,de())}var bB=$(()=>{"use strict";q();ii();dB();fB()});function yB({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?Du(o):Du(t)??(e==="127.0.0.1"?c3:null)}var vB=$(()=>{"use strict";P0()});async function wB(e,t,n){let r=Ot(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function uh(){return yB({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function vv(e){return A()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!uh()}async function m2(e=null){let t=c.selectedBundleWorkspace,n=it();if(await Qt(),n!==it()||e&&!vv(e))return;if(A()){e&&await Pl("manage-scans",{bundleId:e.managedId});return}if(!uh())return;let r=Kr(),o=it();await r,!(!uh()||o!==it())&&(c.scanSelection=e?{bundleId:e.integrity,...t?{repoId:t}:{}}:null,c.currentView="scan",F(),se())}function wv(){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=`${cd}<span>Scan</span>`,t.addEventListener("click",()=>{m2()}),e.append(t));let n=uh();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(i=>i.integrity===c.selectedBundle);r&&(r.hidden=!o||!vv(o))}var h2,kv=$(()=>{"use strict";P();q();sa();ui();ln();gF();yF();G_();jt();sB();bB();vB();Fl();h2=class extends fe{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=uh(),this._access=new cv(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>wB("Loading bundle\u2026",n,()=>mB(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=Cx(()=>{this._savedAccess=Qc()}),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 wB("Loading bundles\u2026",t.signal,()=>hB(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=Qc();let t=$x(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=Qc();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await _x(),this._resetAccess()):await Sx({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=Qc()}catch{Ot(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=bF(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=Qe`: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 p`<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?p`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:b}</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?b:p`<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,i])=>p`<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">${sh(o)}</span><span>${i}</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 p`${this._error?p`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:b}<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="${gB}"><button slot="navigation" type="button" @click="${()=>{Kr()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",h2)});function Hd(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))}var g2=$(()=>{"use strict"});function kB(e,t=""){let n=[],r=xt(e);if(r){let i=[Tr(e.repo),Tr({directory:t})].filter(Boolean).join("/"),s=yl(e.repo?.commit),a=i.split("/").map(encodeURIComponent).join("/"),l=`https://github.com/${r}`;n.push({label:"GitHub",text:r+(i?`/${i}`:""),href:s||i?`${l}/tree/${s??"HEAD"}${a?`/${a}`:""}`:l,...s?{commit:{hash:s,text:s.slice(0,7),href:`${l}/commit/${s}`}}:{}})}let o=e?.package?.npm;if(typeof o?.name=="string"&&kX.test(o.name)){let i=typeof o.version=="string"?o.version.trim():"";n.push({label:"npm",text:o.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${o.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return n}var kX,xB=$(()=>{"use strict";Le();of();kX=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function b2(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let s=n.indexOf("/");s>0&&(r=n.slice(0,s),o=n.slice(s+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function xv(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function SB(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 i=`${o.name}@${o.version}`,s=n.get(i);if(s!==void 0){r==="."&&(t[s].dir=".");continue}n.set(i,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function _B(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 CB(e,t){let n=e.find(i=>i.dir===".")??null,r=n?e.filter(i=>i!==n):e;return{root:n?{name:n.name,version:n.version,purl:b2(n.name,n.version)}:{name:xv(t?.name??"bundle"),version:null,purl:null},rest:r}}function EB(e){return e??globalThis.crypto.randomUUID()}function RB(e,t,{now:n=new Date,uuid:r}={}){let o=SB(e),{root:i,rest:s}=CB(o,t),a={type:"application","bom-ref":i.purl??`application:${i.name}`,name:i.name};i.version&&(a.version=i.version),i.purl&&(a.purl=i.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${EB(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:$B}]},component:a},components:s.map(d=>{let u=b2(d.name,d.version);return{type:"library","bom-ref":u,name:d.name,version:d.version,purl:u}})};return`${JSON.stringify(l,null,2)}
|
|
333
|
+
`});function rB(e){let t=e.filter(r=>r.id!=="all");if(t.length===0)return null;let n=new Map(t.map(r=>[String(r.id).replace(/^reason:/u,""),r]));return n.size!==t.length||[...n.keys()].some(r=>!nB.some(o=>o.key===r))?null:[{id:"",label:"All files",subtitle:"Everything"},...nB.filter(r=>n.has(r.key)).map(({key:r,...o})=>({...o,id:n.get(r).id,subtitle:r==="run"&&n.has("metro")?"Bundler and Node.js CLI":o.subtitle}))]}var nB,oB=$(()=>{"use strict";nB=[{key:"metro",label:"metro",subtitle:"Metro bundle contents"},{key:"run",label:"run",subtitle:"Node.js CLI"},{key:"add",label:"add",subtitle:"Manually added files"}]});var p2,lh=$(()=>{"use strict";P();er();oB();p2=class extends he{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value="",this.label="Choose scope"}_select(t){this.dispatchEvent(new CustomEvent("scope-change",{detail:{value:t},bubbles:!0,composed:!0}))}render(){let t=this.reasons.filter(o=>o.id!=="all");if(t.length===0)return b;let n=rB(t);if(!n)return p`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${Je(this.value==="all"?"":this.value)}" @change="${o=>this._select(o.target.value)}"><option value="">All files</option>${t.map(o=>p`<option value="${o.id}">${o.label??o.id}</option>`)}</select></label>`;let r=n.find(o=>o.id===this.value)??n[0];return p`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${n.map(o=>p`<label class="scope-option"><input type="radio" name="scope" value="${o.id}" .checked="${r.id===o.id}" @change="${()=>this._select(o.id)}"><span>${o.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${r.subtitle}</span></div>`}static styles=Qe`:host{display:block;min-width:0}*{box-sizing:border-box}.scope-toggle,.scope-field{cursor:default;user-select:none;-webkit-user-select:none}.scope-toggle{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.4rem .7rem;min-width:0;min-height:2rem}.scope-options{display:flex;flex-shrink:0;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);overflow:hidden;background:var(--bg)}.scope-option{position:relative;flex:1 0 auto}.scope-option+.scope-option{border-left:1px solid var(--border)}.scope-option input{position:absolute;width:1px;height:1px;opacity:0}.scope-option span{display:grid;place-items:center;height:calc(2rem - 2px);padding:.3rem .55rem;color:var(--muted);font-size:.74rem;white-space:nowrap}.scope-option:hover span{color:var(--text);background:var(--surface-active)}.scope-option input:checked+span{color:var(--text);background:var(--surface-active);font-weight:500}.scope-option input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.scope-description{order:-1;min-width:0;color:var(--muted);font-size:.66rem;line-height:1rem;text-align:right}.scope-field{display:flex;align-items:center;justify-content:end;gap:.5rem;min-width:0;max-width:100%;margin-left:auto;color:var(--muted);font-size:.7rem}select{width:13rem;min-width:0;max-width:100%;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.76rem}:host([compact]) .scope-toggle{min-height:0;gap:.3rem .5rem}:host([compact]) .scope-option span{height:auto;padding:2px 8px;font-size:.68rem;line-height:1.2}:host([compact]) .scope-field{font-size:.68rem}:host([compact]) .scope-description{display:none}:host([compact]) select{width:auto;max-width:22ch;padding:2px 6px;font-size:.68rem;line-height:1.2}`};customElements.get("bundle-scope-selector")||customElements.define("bundle-scope-selector",p2)});var iB,f2,sB=$(()=>{"use strict";P();wt();er();un();jt();ca();X_();uv();n2();pv();KF();JF();s2();QF();tB();gv();Ol();lh();iB={code:te(Rb),report:te(dd)},f2=class extends he{static properties={hideHeading:{type:Boolean,attribute:"hide-heading"},sourceLoading:{type:Boolean,attribute:!1},selection:{attribute:!1},scopeLabel:{type:String,attribute:"scope-label"},createBundleHref:{attribute:!1},source:{attribute:!1},loadBundle:{attribute:!1},loadModels:{attribute:!1},loadReportSources:{attribute:!1},canRun:{attribute:!1},_loadingBundle:{state:!0},_bundleError:{state:!0},_tab:{state:!0},_mode:{state:!0},_bundles:{state:!0},_repositories:{state:!0},_reportMode:{state:!0},_reportInput:{state:!0},_reportRestore:{state:!0},_scans:{state:!0},_selectedRepoId:{state:!0},_selectedBundleId:{state:!0},_reason:{state:!0},_excluded:{state:!0},_excludedModules:{state:!0},_prompts:{state:!0},_options:{state:!0},_regimes:{state:!0},_regimesReady:{state:!0},_appModel:{state:!0},_appModelAutomatic:{state:!0},_notice:{state:!0}};static styles=eB;constructor(){super(),this.loadModels=lv,this.canRun=!0,this.hideHeading=!1,this._tab="new",this._mode="code",this.source=null,this.selection=null,this.scopeLabel="Repository",this._pendingSelection=null,this.sourceLoading=!1,this.loadBundle=null,this._loadingBundle=!1,this._bundleError=null,this._bundles=[],this._repositories=[],this._reportMode="link",this._reportInput=null,this._reportRestore=null,this._scans=[],this._selectedRepoId=null,this._selectedBundleId=this._bundles[0]?.id??null,this._reason=this._bundles[0]?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._nextPromptId=1,this._prompts=[{id:1,text:""}],this._options={analyzer:"generic",model:null,effort:null,cached:!1,isolate:!1},this._regimes=[],this._appModel=null,this._appModelAutomatic=!0,this._regimesReady=!1,this._notice=null,this._timers=new Set}willUpdate(t){if(t.has("selection")&&(this._pendingSelection=this.selection),t.has("source")&&(this._bundles=this.source?.bundles??[],this._repositories=this.source?.repositories??[],this._scans=this.source?.scans??[]),t.has("source")||t.has("selection")){this._excluded=new Set,this._excludedModules=new Set;let n=this._repositories.find(i=>i.id===this._selectedRepoId),r=this._pendingSelection,o=r?this._bundles.find(i=>i.id===r.bundleId&&(r.repoId==null||i.repoId===r.repoId)):this._bundles.find(i=>i.id===this._selectedBundleId&&i.repoId===this._selectedRepoId)??(this.scopeLabel==="Workspace"?null:this._bundles.find(i=>i.id===this._selectedBundleId))??(n?this._bundles.find(i=>i.repoId===n.id):this._bundles[0]);this._selectedRepoId=o?.repoId??r?.repoId??n?.id??this._repositories[0]?.id??"unattached",this._selectedBundleId=o?.id??null,this._reason=o?.reasons?.[0]?.id??"",r&&(this._tab="new",this._mode=r.mode==="report"?"report":"code",r.mode==="report"&&(this._reportMode="link",this._reportRestore=null,this._reportInput=null,this._pendingSelection=null),this._notice=r.mode==="report"||o||this.source==null?null:"The selected bundle is no longer available in this source. Choose another bundle.",o&&(this._pendingSelection=null))}}updated(t){(t.has("source")||t.has("selection")||t.has("loadBundle"))&&this._loadSelectedBundle()}async _loadSelectedBundle(){this._bundleController?.abort(),this._loadingBundle=!1,this._bundleError=null;let t=this._bundle;if(!this.loadBundle||!t||Array.isArray(t.files))return;let n=this._bundleController=new AbortController;this._loadingBundle=!0;try{let r=await this.loadBundle(t,n.signal);if(n.signal.aborted)return;this._bundles=this._bundles.map(o=>o.id===t.id?{...r,repoId:o.repoId,repo:o.repo}:o),this._reason=r.reasons?.[0]?.id??""}catch(r){n.signal.aborted||(this._bundleError=String(r?.message??r))}finally{n.signal.aborted||(this._loadingBundle=!1)}}disconnectedCallback(){super.disconnectedCallback(),this._bundleController?.abort();for(let t of this._timers)clearTimeout(t);this._timers.clear()}get _repoBundles(){return this._bundles.filter(t=>t.repoId===this._selectedRepoId)}get _bundle(){return this._repoBundles.find(t=>t.id===this._selectedBundleId)}get _reasonData(){return this._bundle?.reasons.find(t=>t.id===this._reason)??this._bundle?.reasons[0]}_packageLabel(t){return t==="__own__"?"Own code":t}get _scopeFiles(){let t=this._reasonData,n=t?.fileModules,r=t?.filePaths?new Set(t.filePaths):null;return(this._bundle?.files??[]).filter(o=>(n==null||n.includes(o.module))&&(r==null||r.has(o.path))).toSorted((o,i)=>i.bytes-o.bytes)}get _files(){return P_(this._scopeFiles)}render(){return p`<div class="wrap">${this.hideHeading?p`<h1 class="sr-only">Scans</h1>`:p`<div class="head"><div class="head-title"><slot name="navigation"></slot><h1>Scans</h1></div></div>`}<div class="intro-row"><p class="intro">${this._tab==="history"?"Review past scans and save completed results as reports.":this._mode==="report"?"Choose inputs and start a scan. Save the report when it finishes.":"Choose a bundle and start a scan. Save the report when it finishes."}</p><div class="head-tabs" role="tablist" aria-label="Scan views"><button class="${this._tab==="new"?"active":""}" role="tab" aria-selected="${this._tab==="new"}" @click="${()=>{this._tab="new"}}">New scan</button> <button class="${this._tab==="history"?"active":""}" role="tab" aria-selected="${this._tab==="history"}" @click="${()=>{this._tab="history"}}">Scan history</button></div></div>${this._notice?p`<p class="notice" role="status">${this._notice}</p>`:b} ${this._bundleError?p`<p class="notice" role="alert">Couldn’t load bundle: ${this._bundleError}<button @click="${()=>{this._loadSelectedBundle()}}">Retry</button></p>`:b} ${this._tab==="new"?this._newScan():this._history()}</div>`}_newScan(){let t=this._mode,n=this._bundle,r=t==="code"?this._files:t==="dependencies"?this._scopeFiles:n?.files??[],o=this._excluded,i=this._excludedModules,s=r.filter(m=>!o.has(m.path)&&!i.has(m.module)),a=Zf(n?.files?s:null),l=new Map;for(let m of r){let g=l.get(m.module)??{bytes:0,count:0,included:0};g.bytes+=m.bytes,g.count++,o.has(m.path)||g.included++,l.set(m.module,g)}let d=[...l.keys()].toSorted((m,g)=>l.get(g).bytes-l.get(m).bytes||this._packageLabel(m).localeCompare(this._packageLabel(g))),u=r.slice(0,80),f=d.filter(m=>!i.has(m)).length,h=this._reportInput?.mode===this._reportMode?this._reportInput.inputs:[];return p`<div class="setup"><scan-mode-selector .mode="${t}" .analyzer="${this._options.analyzer}" .reportMode="${this._reportMode}" @scan-mode-change="${m=>this._changeMode(m.detail.mode)}" @scan-analyzer-change="${m=>this._setOption("analyzer",m.detail.analyzer)}" @scan-report-mode-change="${m=>{this._reportMode=m.detail.mode,this._reportRestore=null}}"></scan-mode-selector>${t==="report"?p`<scan-report-inputs .mode="${this._reportMode}" .loadSources="${this.loadReportSources}" .restore="${this._reportRestore}" @report-inputs-change="${m=>{this._reportInput=m.detail}}"></scan-report-inputs>`:this._sourcePanel(n,r)} ${t==="code"?p`<details class="panel scope-panel"><summary class="scope-head"><svg class="scope-chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><h2>Source filter</h2><p><span>${s.length} of ${r.length} files · ${f} of ${d.length} packages</span> <span>${bo(a.bytes)} · ${a.lines==null?"\u2014":a.lines.toLocaleString()} LoC</span></p></summary><div class="scope-grid"><section class="scope-pane package-pane" aria-label="Packages in bundle"><div class="pane-head"><strong>Packages</strong><span>${d.length} total · sorted by size</span></div><div class="package-list">${d.map(m=>{let{bytes:g,count:y,included:w}=l.get(m),x=!i.has(m);return p`<label class="${`package-row ${x?"":"excluded"}`}"><input type="checkbox" .checked="${x}" @change="${v=>this._toggleModule(m)}"><span class="package-name" data-tooltip-truncated data-tooltip="${this._packageLabel(m)}">${this._packageLabel(m)}</span><span class="package-size">${bo(g)} · ${w}/${y}</span></label>`})}</div></section><section class="scope-pane file-panel" aria-label="Largest files in bundle"><div class="pane-head"><strong>Largest files</strong><span>showing ${u.length} of ${r.length}</span></div>${r.length===0?p`<p class="empty">No files in this selection.</p>`:p`<div class="file-list">${u.map(m=>{let g=!o.has(m.path)&&!i.has(m.module);return p`<label class="${`file ${g?"":"excluded"}`}"><input type="checkbox" .checked="${g}" @change="${y=>this._toggleFile(m,y.target.checked)}"><span class="file-copy"><span class="file-path" data-tooltip-truncated data-tooltip="${m.path}">${m.path}</span><span class="file-meta">${m.size} · ${this._packageLabel(m.module)}</span></span></label>`})}</div>`}</section></div></details>`:b} ${t==="agentic"?this._agenticPanel():b}<slot name="access"></slot>${this._optionsPanel(t,n,t==="report"?h.length:s.length)}</div>`}_sourcePanel(t,n){if(this.sourceLoading)return p`<section class="panel source-panel" aria-busy="true"><div class="panel-head"><h2>Source</h2></div><p class="empty" role="status">Loading scan sources…</p></section>`;let r=this._mode==="code"?this._repoBundles.map(d=>d.files?{...d,files:P_(d.files)}:d.summary?{...d,summary:{...d.summary,files:d.summary.codeFiles}}:d):this._repoBundles,{lines:o}=Zf(t?.files?n:null),i=new Map;for(let d of this._bundles)i.set(d.repoId,(i.get(d.repoId)??0)+1);let s=this._repositories.length>1,a=["code","agentic","dependencies"].includes(this._mode)&&t!=null&&(!t.filename.toLowerCase().endsWith(".map")||t.reasons?.some(d=>d.id!=="all")),l=this._repositories.map(d=>{let u=i.get(d.id)??0;return{value:d.id,label:d.label,detail:`${u} ${u===1?"bundle":"bundles"}`,special:d.id==="unattached"}});return p`<section class="panel source-panel" aria-busy="${this._loadingBundle}"><div class="panel-head"><h2>Source</h2></div><div class="${`source-choice ${s?"":"single-repository"}`}">${s?p`<div class="field"><span>${this.scopeLabel}</span>${this.scopeLabel==="Workspace"?p`<workspace-selector .options="${l}" .value="${this._selectedRepoId}" @workspace-change="${d=>this._selectRepoById(d.detail.value)}"></workspace-selector>`:p`<repository-selector .options="${l}" .value="${this._selectedRepoId}" @repository-change="${d=>this._selectRepoById(d.detail.value)}"></repository-selector>`}</div>`:b}<div class="field">${s||this.createBundleHref?this._bundleLabel():b}${r.length>0?p`<bundle-selector .bundles="${r}" .value="${t?.id??null}" @bundle-change="${d=>this._selectBundleById(d.detail.value)}"></bundle-selector>`:this._emptyBundles()}</div><div class="source-footer"><div class="bundle-stats" aria-label="Bundle statistics"><div class="metric"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="8" cy="4" rx="5" ry="2"/><path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/></svg><strong>${t?.size??"\u2014"}</strong><span>bundle size</span></div><div class="metric">${iB.report}<strong>${n.length}</strong><span>files</span></div><div class="metric">${iB.code}<strong>${o==null?"\u2014":o.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${te(Yn)}<strong>${new Set(n.map(d=>d.module)).size}</strong><span>packages</span></div></div>${a?p`<div class="scope-slot">${this._scopeField(t)}</div>`:b}</div></div></section>`}_bundleLabel(){let t=this.createBundleHref?.(this._selectedRepoId);return p`<div class="bundle-label"><span>Bundle</span>${t?p`<a class="create-bundle-button" href="${t}">Create a bundle</a>`:b}</div>`}_emptyBundles(){let t=this.createBundleHref?.(this._selectedRepoId);return p`<div class="choice-empty"><span>${this._bundles.length===0?"No stored bundles.":`No stored bundles for this ${this.scopeLabel.toLowerCase()}.`}</span>${t?p`<a href="${t}">Create?</a>`:b}</div>`}_scopeField(t){if(!["code","agentic","dependencies"].includes(this._mode))return b;let n=(t?.reasons??[]).filter(r=>r.id!=="all");return n.length===0?b:p`<bundle-scope-selector .reasons="${n}" .value="${this._reason}" label="${this._mode==="agentic"?"Choose agentic scope":"Choose scan scope"}" @scope-change="${r=>this._changeReason(r.detail.value)}"></bundle-scope-selector>`}_optionsPanel(t,n,r){let o=t==="report"?`${r} ${this._reportMode==="merge"?"scan results":"reports"} selected`:`${n?.filename??"No bundle selected"} \xB7 ${r} files will be analyzed`,i=t==="code"&&this._options.analyzer==="advanced",s=!this.canRun||(t==="report"?r===0:n==null||r===0||i&&(!this._regimesReady||this._regimes.length===0));return p`<section class="panel options"><div class="options-grid">${i?p`<scan-regime-editor .loadModels="${this.loadModels}" .value="${this._regimes}" .appModel="${this._appModel}" .appModelAutomatic="${this._appModelAutomatic}" @regimes-change="${a=>{this._regimesReady=a.detail.ready,this._regimes=a.detail.value,this._appModel=a.detail.appModel,this._appModelAutomatic=a.detail.appModelAutomatic}}"></scan-regime-editor>`:p`<scan-model-picker .loadModels="${this.loadModels}" ?has-extra="${t==="code"}" .value="${this._options.model}" .effort="${this._options.effort}" @model-change="${a=>{this._options={...this._options,model:a.detail.model,effort:a.detail.effort}}}">${t==="code"?p`<scan-depth-toggle slot="effort-extra" .isolate="${this._options.isolate}" @depth-change="${a=>this._setOption("isolate",a.detail.isolate)}"></scan-depth-toggle>`:b}</scan-model-picker>`}</div><div class="options-footer"><slot name="before-run"></slot><button type="button" class="run" ?disabled="${s}" @click="${()=>this._runScan()}">${t==="report"?this._reportMode==="merge"?"Merge results":"Link reports":"Run scan"}</button><span class="summary">${o}</span></div><div class="checks"><label class="switch"><input type="checkbox" aria-describedby="${this._options.cached?"offline-help":b}" .checked="${this._options.cached}" @change="${a=>this._setOption("cached",a.target.checked)}"><span class="switch-track" aria-hidden="true"></span><span>Offline</span></label>${this._options.cached?p`<small class="offline-help" id="offline-help">Cache only, no new model requests</small>`:b}</div></section>`}_history(){return p`<section class="panel history"><div class="panel-head"><h2>Scan history</h2><p>${this._scans.length} scans</p></div>${this._scans.length===0?p`<p class="empty">No scans yet.</p>`:this._scans.map(t=>this._scanRow(t))}</section>`}_scanRow(t){let n=t.status==="completed"?t.reportSaved?p`<button type="button" class="action" @click="${()=>this._deleteSavedReport(t)}">Delete saved report</button>`:p`<button type="button" class="action" @click="${()=>this._saveReport(t)}">Save report</button>`:b;return p`<div class="scan-row"><div class="scan-main"><div class="scan-title"><strong data-tooltip-truncated data-tooltip="${t.bundleName}">${t.bundleName}</strong><span class="${`status ${t.status}`}">${t.status}</span></div><span class="scan-meta">${t.reason} · ${t.files} ${t.mode==="report"?t.reportMode==="merge"?"results":"reports":"files"} · ${t.createdAt}${t.duration?` \xB7 ${t.duration}`:""}${t.reportSaved?" \xB7 Report saved":t.status==="completed"?" \xB7 Report available":""}</span></div><span class="scan-actions">${n}${t.status==="running"?p`<button type="button" class="action" @click="${()=>this._stopScan(t)}">Stop</button>`:b}${t.status==="stopped"?p`<button type="button" class="action" @click="${()=>this._restartScan(t)}">Restart as new scan</button>`:b}</span><span aria-hidden="true"></span></div>`}_selectBundle(t){this._pendingSelection=null,this._selectedRepoId=t.repoId,this._selectedBundleId=t.id,this._reason=t.reasons?.[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_selectBundleById(t){let n=this._repoBundles.find(r=>r.id===t);n!=null&&this._selectBundle(n)}_selectRepoById(t){if(t===this._selectedRepoId||!this._repositories.some(r=>r.id===t))return;this._selectedRepoId=t,this._pendingSelection=null;let n=this._bundles.find(r=>r.repoId===t);this._selectedBundleId=n?.id??null,this._reason=n?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_changeMode(t){!["dependencies","code","agentic","report"].includes(t)||t===this._mode||(this._mode=t,this._reportInput=null,this._reportRestore=null,this._excluded=new Set,this._excludedModules=new Set,this._notice=null)}_changeReason(t){this._reason=t,this._excluded=new Set,this._excludedModules=new Set}_toggleFile(t,n){let r=new Set(this._excluded);n?r.delete(t.path):r.add(t.path),this._excluded=r}_toggleModule(t){let n=new Set(this._excludedModules);n.has(t)?n.delete(t):n.add(t),this._excludedModules=n}_setOption(t,n){this._options[t]!==n&&(t==="analyzer"&&n==="advanced"&&(this._regimesReady=!1,this._regimes.length===0&&(this._regimes=[{mode:this._options.analyzer,model:this._options.model,effort:this._options.effort,isolate:this._options.isolate}])),this._options={...this._options,[t]:n})}_agenticPanel(){return p`<section class="panel agentic-panel"><div class="panel-head"><h2>Agentic instructions</h2><button type="button" class="row-action" aria-label="Add prompt" @click="${()=>this._addPrompt()}">${fv}</button></div><div class="agentic-fields">${ve(this._prompts,t=>t.id,(t,n)=>p`<div class="prompt-row"><textarea aria-label="${`Prompt ${n+1}`}" rows="3" placeholder="${this._promptPlaceholder(n)}" .value="${Je(t.text)}" @input="${r=>{this._prompts=this._prompts.map(o=>o.id===t.id?{...o,text:r.target.value}:o)}}"></textarea>${this._prompts.length>1?p`<button type="button" class="row-action" aria-label="${`Remove prompt ${n+1}`}" @click="${()=>this._removePrompt(t.id)}">${hv}</button>`:b}</div>`)}</div></section>`}_promptPlaceholder(t){let n=["","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"][t];return n!=null?`What should the ${n?`${n} `:""}agent focus on?`:`What should agent ${t+1} focus on?`}async _addPrompt(){this._prompts=[...this._prompts,{id:++this._nextPromptId,text:""}],await this.updateComplete,this.renderRoot?.querySelector(".prompt-row:last-child textarea")?.focus()}_removePrompt(t){this._prompts.length>1&&(this._prompts=this._prompts.filter(n=>n.id!==t))}_runScan(){if(!this.canRun)return;let t=this._mode,n=t==="code"&&this._options.analyzer==="advanced";if(n&&(!this._regimesReady||this._regimes.length===0))return;let r=this._bundle,o=this._reportInput?.mode===this._reportMode?this._reportInput:null,i=o?.inputs??[],s=t==="code"?this._files.filter(d=>!this._excluded.has(d.path)&&!this._excludedModules.has(d.module)):t==="dependencies"?this._scopeFiles:r?.files??[];if(t==="report"&&(!o?.source||i.length===0)||t!=="report"&&(!r||s.length===0))return;let a={id:`scan-${Date.now()}`,mode:t,bundleId:t==="report"?this._reportMode==="merge"?o.source.id:null:r?.id??null,bundleName:t==="report"?o.source.label:r.filename,reason:t==="report"?this._reportMode==="merge"?"Merge scan results":"Link saved reports":this._reasonData?.label??"All files",status:"running",createdAt:"Just now",duration:"",files:t==="report"?i.length:s.length,reportSaved:!1,cached:this._options.cached,isolate:t==="code"&&this._options.isolate,model:this._options.model,effort:this._options.effort};t!=="report"&&(a.repoId=this._selectedRepoId,a.scopeId=this._reason),t==="code"&&(a.analyzer=this._options.analyzer),n&&(a.regimes=this._regimes.map(d=>({...d})),a.appModel=this._appModel?{...this._appModel}:null,a.appModelAutomatic=this._appModelAutomatic,a.reason=`Advanced \xB7 ${a.regimes.length} regimes \xB7 ${a.reason}`,a.model=null,a.effort=null,a.isolate=!1),t==="agentic"&&(a.prompts=this._prompts.map(d=>d.text)),t==="report"&&(a.reportMode=this._reportMode,a.reportSource={...o.source},a.inputIds=i.map(d=>d.id)),this._scans=[a,...this._scans],this._tab="history",this._notice="Scan started. The server will update its status as work progresses.";let l=setTimeout(()=>{this._timers.delete(l),a.status==="running"&&(a.status="completed",a.duration="2m 14s",this._notice="Scan completed. Its report is ready to save.",this.requestUpdate())},2200);this._timers.add(l)}_stopScan(t){t.status==="running"&&(t.status="stopped",t.duration=t.duration||"stopped by user",this._notice="Scan stopped. It cannot continue, but you can restart it as a new scan.",this.requestUpdate())}_restartScan(t){if(this._options={...this._options,model:t.model??this._options.model,effort:t.effort??this._options.effort,cached:t.cached??!1,isolate:t.isolate??!1,analyzer:t.analyzer??"generic"},t.mode==="report"){this._mode="report",this._reportMode=t.reportMode==="link"?"link":"merge",this._reportInput=null,this._reportRestore={mode:this._reportMode,source:t.reportSource,inputIds:t.inputIds??[]},this._tab="new",this._notice="New report scan settings restored from the stopped run.";return}let n=this._bundles.find(r=>r.id===t.bundleId&&(t.repoId==null||r.repoId===t.repoId));n&&(this._selectBundle(n),this._mode=t.mode??"dependencies",t.mode==="agentic"&&(this._prompts=(t.prompts?.length>0?t.prompts:[""]).map(r=>({id:++this._nextPromptId,text:r}))),t.regimes?.length>0&&(this._options={...this._options,analyzer:"advanced"},this._regimes=t.regimes.map(r=>({...r})),this._appModel=t.appModel?{...t.appModel}:null,this._appModelAutomatic=t.appModelAutomatic!==!1,this._regimesReady=!1),this._reason=n.reasons.find(r=>r.label===t.reason)?.id??n.reasons[0]?.id??"",this._reason=t.scopeId??this._reason,this._tab="new",this._notice="New scan settings restored from the stopped run.")}_saveReport(t){t.reportSaved=!0,this._notice="Report saved. You can delete it from Reports and save this completed scan again.",this.requestUpdate()}_deleteSavedReport(t){t.reportSaved=!1,this._notice="Saved report deleted. The completed scan can be saved again.",this.requestUpdate()}};customElements.get("deepview-scan-page")||customElements.define("deepview-scan-page",f2)});function Pt(e,{packageDir:t=null}={}){if(t){if(t!=="."){let n=t.match(/(?:^|\/)node_modules\/(@[^/]+\/[^/]+|[^/]+)$/u);return n&&n[1]!==".pnpm"?n[1]:t}}else{let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e))!==null;)if(r[1]!==".pnpm")return r[1]}return"__own__"}function _r(e){return e==="__own__"?"Own source":typeof e!="string"?e:e.match(/^(?:.*\/)?vendor\/(.+)$/u)?.[1]??e}var pi=$(()=>{"use strict"});function yo(e,t){let n=new Map,r=e?.kind==="stasis"?e.bundle?.reason:null;if(!r||typeof r!="object"||Array.isArray(r))return n;let o=new Set(t??[...Pn(e)].filter(([,i])=>i!=null).map(([i])=>i));for(let[i,s]of Object.entries(r).toSorted(([a],[l])=>a.localeCompare(l))){if(!i||!Array.isArray(s))continue;let a=new Set(s.filter(l=>typeof l=="string"&&o.has(l)));a.size>0&&n.set(i,a)}return[...n.values()].some(i=>i.size<o.size)||n.clear(),n}var bv=$(()=>{"use strict";Tf()});function aB(e,t,n,r){let o=n.has(r)?r:null;if(o===null)return{tree:e,origToStripped:t,selected:o};let i=new Map([...t].filter(([l])=>n.get(o).has(l))),s=new Set(i.values());return{tree:Object.fromEntries([...s].map(l=>[l,{...e[l],imports:(e[l].imports??[]).filter(d=>s.has(d))}])),origToStripped:i,selected:o}}function ch(e){let t=new Map;if(e?.kind!=="stasis"||!e.bundle)return t;for(let n of e.bundle.imports.values())for(let[r,o]of n){t.has(r)||t.set(r,new Set);for(let i of o.values()){let s=typeof i=="string"?[i]:i instanceof Map?i.values():[];for(let a of s)typeof a=="string"&&t.get(r).add(a)}}return t}function yv(e,t,n,r,o=t){let i=ch(e),s=new Set;for(let[l,d]of t)Pt(l,{packageDir:r?.get(l)})==="__own__"&&s.add(n(d));for(let l of e?.bundle?.entries??[]){let d=t.get(l);d!==void 0&&s.add(n(d))}if(s.size===0){let l=new Set;for(let[u,f]of t){let h=r?.get(u);h&&h!=="."&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(h)&&l.add(n(f))}let d=new Set;for(let[u,f]of i){let h=t.get(u);if(!(h===void 0||!l.has(n(h))))for(let m of f){let g=t.get(m);g!==void 0&&n(h)!==n(g)&&d.add(n(g))}}for(let u of l)d.has(u)||s.add(u)}let a=new Set;for(let[l,d]of i)if(!o.has(l)&&Pt(l,{packageDir:r?.get(l)})==="__own__")for(let u of d){let f=t.get(u);f!==void 0&&a.add(n(f))}return a.size>0&&s.add("__own__"),{roots:[...s],appImports:[...a]}}var dh=$(()=>{"use strict";pi();bv()});function lB(e,t=[]){let n=new Map,r=e.flatMap(o=>{let i=t.filter(a=>a.bundles?.includes(o.integrity));return(i.length>0?i.map(a=>({id:a.id,label:a.name})):[{id:"unattached",label:"Unattached"}]).map(a=>(n.set(a.id,a),{id:o.integrity,integrity:o.integrity,filename:o.name,repoId:a.id,repo:a.label,files:null,reasons:[],size:"\u2014"}))});return{repositories:[...n.values()],bundles:r,reports:[],scans:[]}}function cB(e,t){if(t.error)throw new Error(t.error);let n=Zt(t),r=t.kind==="stasis"?t.bundle?.formats:null,o=t.lineCounts??new Map([...Wt(t)].map(([a,l])=>[a,Af(l)])),i=[...Pn(t)].filter(([,a])=>a!=null).map(([a,l])=>({path:a,format:r?.get(a)??null,bytes:l,lines:o.get(a)??0,size:bo(l),module:Pt(a,{packageDir:n?.get(a)})})),s=[{id:"all",label:"All",filePaths:null},...[...yo(t,i.map(a=>a.path))].map(([a,l])=>({id:`reason:${a}`,label:a,filePaths:[...l]}))];return{...e,files:i,reasons:s,size:bo(t.size)}}var dB=$(()=>{"use strict";$r();vd();pi();dh();Ol()});function wX(e){let{data:t}=Mr(e);return t&&uB(t)>0?t:null}function uB(e){return(Mt(e)??[]).filter(t=>(Array.isArray(t)?t:[t]).some(n=>n&&typeof n=="object"&&mn(n,n.source??e.source))).length}function pB(e,t){let n=[],r=new Map;for(let{name:i,content:s,fallbackRepo:a}of e){if(typeof s!="string")continue;let l=wX(s);if(!l)continue;let d=Mt(l),u=xt(l)??xt({repo:{github:a}}),f=new Set(u?[u]:[]);if(!u)for(let h of d.flat()){if(/(?:^|\/)(?:node_modules|dependencies)\//u.test(h?.file??""))continue;let m=xt(h);m&&f.add(m)}for(let h of f)r.set(h,{id:h,label:h});n.push({id:i,filename:i,repoIds:[...f],analyzer:l.source,appFindings:uB(l)})}let o=new Set(n.map(i=>i.id));return{merge:{bundles:[],results:[]},link:{reports:n,repositories:[...r.values()],workspaces:t.map(i=>({id:i.id,label:i.name,reports:i.reports.filter(s=>o.has(s))})).filter(i=>i.reports.length>0)}}}var fB=$(()=>{"use strict";Le();Ol()});function da(e){if(e?.throwIfAborted(),A())throw new DOMException("Local scan closed","AbortError")}async function hB(e){da(e);let t=await vn();return da(e),lB(t,de())}async function mB(e,t){da(t);let n=await Ni(e.integrity,{name:e.filename},{sources:!1});return da(t),cB(e,n)}async function gB(e){da(e);let t=await Pe(),n=[];for(let r of t){da(e);let o=await ot(r);da(e),n.push({name:r,content:o,fallbackRepo:Fn(r)})}return da(e),pB(n,de())}var bB=$(()=>{"use strict";q();ii();dB();fB()});function yB({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?Du(o):Du(t)??(e==="127.0.0.1"?c3:null)}var vB=$(()=>{"use strict";P0()});async function wB(e,t,n){let r=Ot(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function uh(){return yB({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function vv(e){return A()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!uh()}async function m2(e=null){let t=c.selectedBundleWorkspace,n=it();if(await Qt(),n!==it()||e&&!vv(e))return;if(A()){e&&await Pl("manage-scans",{bundleId:e.managedId});return}if(!uh())return;let r=Kr(),o=it();await r,!(!uh()||o!==it())&&(c.scanSelection=e?{bundleId:e.integrity,...t?{repoId:t}:{}}:null,c.currentView="scan",F(),se())}function wv(){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=`${cd}<span>Scan</span>`,t.addEventListener("click",()=>{m2()}),e.append(t));let n=uh();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(i=>i.integrity===c.selectedBundle);r&&(r.hidden=!o||!vv(o))}var h2,kv=$(()=>{"use strict";P();q();sa();ui();ln();gF();yF();G_();jt();sB();bB();vB();Fl();h2=class extends he{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=uh(),this._access=new cv(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>wB("Loading bundle\u2026",n,()=>mB(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=Cx(()=>{this._savedAccess=Qc()}),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 wB("Loading bundles\u2026",t.signal,()=>hB(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=Qc();let t=$x(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=Qc();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await _x(),this._resetAccess()):await Sx({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=Qc()}catch{Ot(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=bF(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=Qe`: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 p`<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?p`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:b}</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?b:p`<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,i])=>p`<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">${sh(o)}</span><span>${i}</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 p`${this._error?p`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:b}<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="${gB}"><button slot="navigation" type="button" @click="${()=>{Kr()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",h2)});function Hd(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))}var g2=$(()=>{"use strict"});function kB(e,t=""){let n=[],r=xt(e);if(r){let i=[Tr(e.repo),Tr({directory:t})].filter(Boolean).join("/"),s=yl(e.repo?.commit),a=i.split("/").map(encodeURIComponent).join("/"),l=`https://github.com/${r}`;n.push({label:"GitHub",text:r+(i?`/${i}`:""),href:s||i?`${l}/tree/${s??"HEAD"}${a?`/${a}`:""}`:l,...s?{commit:{hash:s,text:s.slice(0,7),href:`${l}/commit/${s}`}}:{}})}let o=e?.package?.npm;if(typeof o?.name=="string"&&kX.test(o.name)){let i=typeof o.version=="string"?o.version.trim():"";n.push({label:"npm",text:o.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${o.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return n}var kX,xB=$(()=>{"use strict";Le();of();kX=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function b2(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let s=n.indexOf("/");s>0&&(r=n.slice(0,s),o=n.slice(s+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function xv(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function SB(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 i=`${o.name}@${o.version}`,s=n.get(i);if(s!==void 0){r==="."&&(t[s].dir=".");continue}n.set(i,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function _B(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 CB(e,t){let n=e.find(i=>i.dir===".")??null,r=n?e.filter(i=>i!==n):e;return{root:n?{name:n.name,version:n.version,purl:b2(n.name,n.version)}:{name:xv(t?.name??"bundle"),version:null,purl:null},rest:r}}function EB(e){return e??globalThis.crypto.randomUUID()}function RB(e,t,{now:n=new Date,uuid:r}={}){let o=SB(e),{root:i,rest:s}=CB(o,t),a={type:"application","bom-ref":i.purl??`application:${i.name}`,name:i.name};i.version&&(a.version=i.version),i.purl&&(a.purl=i.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${EB(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:$B}]},component:a},components:s.map(d=>{let u=b2(d.name,d.version);return{type:"library","bom-ref":u,name:d.name,version:d.version,purl:u}})};return`${JSON.stringify(l,null,2)}
|
|
334
334
|
`}function xX(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function TB(e,t,{now:n=new Date,uuid:r}={}){let o=SB(e),{root:i,rest:s}=CB(o,t),a=xv(t?.name??"bundle"),l=n.toISOString().replace(/\.\d{3}Z$/u,"Z"),d=(g,y,w,x)=>{let v={SPDXID:g,name:y,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return w&&(v.versionInfo=w),x&&(v.externalRefs=[xX(x)]),v},u="SPDXRef-Package-root",f=[d(u,i.name,i.version,i.purl)],h=[{spdxElementId:"SPDXRef-DOCUMENT",relationshipType:"DESCRIBES",relatedSpdxElement:u}];s.forEach((g,y)=>{let w=`SPDXRef-Package-${y+1}`;f.push(d(w,g.name,g.version,b2(g.name,g.version))),h.push({spdxElementId:u,relationshipType:"DEPENDS_ON",relatedSpdxElement:w})});let m={spdxVersion:"SPDX-2.3",dataLicense:"CC0-1.0",SPDXID:"SPDXRef-DOCUMENT",name:a,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(a)}-${EB(r)}`,creationInfo:{created:l,creators:[`Tool: ${$B}`]},packages:f,relationships:h};return`${JSON.stringify(m,null,2)}
|
|
335
335
|
`}var $B,y2=$(()=>{"use strict";$B="@preventive/triage"});function $X(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 v2(e,t,n){if(t){let i=$X(e,n);if(i.error)return{error:i.error};let{re:s}=i;return{ranges(a){s.lastIndex=0;let l=[],d;for(;(d=s.exec(a))!==null;){if(d[0].length===0){s.lastIndex++;continue}if(l.push([d.index,d.index+d[0].length]),l.length>=50)break}return l}}}let r=n?e:e.toLowerCase(),o=r.length;return{ranges(i){let s=n?i:i.toLowerCase(),a=[],l=0,d;for(;(d=s.indexOf(r,l))!==-1&&(a.push([d,d+o]),l=d+o,!(a.length>=50)););return a}}}function SX(e,t){let n=[...e.keys()].toSorted(),r=[],o=0,i=!1;for(let s of n){let a=e.get(s);if(typeof a!="string")continue;let l=a.split(`
|
|
336
336
|
`),d=[];for(let u=0;u<l.length;u++){let f=t.ranges(l[u]);if(f.length!==0&&(d.push({ln:u+1,ranges:f}),o++,o>=5e3)){i=!0;break}}if(d.length>0&&r.push({path:s,lines:l,hits:d}),i)break;if(r.length>=500){i=!0;break}}return{fileResults:r,totalHits:o,truncated:i}}function _X(e,t){let n=[],r=0;for(let{path:o,lines:i,hits:s}of e.fileResults){let a=[];for(let{ln:l}of s){let d=t.ranges(i[l-1]);d.length!==0&&(a.push({ln:l,ranges:d}),r++)}a.length>0&&n.push({path:o,lines:i,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}function MB(e,t,n,r,o){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=v2(n,r,o);if(i.error)return{error:i.error};(tr.tag!==e||tr.useRegex!==r||tr.caseSensitive!==o)&&(tr.tag=e,tr.useRegex=r,tr.caseSensitive=o,tr.entries.length=0);let s=r||o?f=>f:f=>f.toLowerCase(),a=s(n),l=null,d=-1;for(let f=0;f<tr.entries.length;f++){let h=tr.entries[f],m=s(h.query);if(m===a)return tr.entries.splice(f,1),tr.entries.unshift(h),h.result;r||h.result.truncated||m.length<=d||!a.includes(m)||(l=h.result,d=m.length)}let u=l?_X(l,i):SX(t,i);return tr.entries.unshift({query:n,result:u}),tr.entries.length>8&&tr.entries.pop(),u}var tr,AB=$(()=>{"use strict";tr={tag:null,useRegex:!1,caseSensitive:!1,entries:[]}});function CX(e,t){for(let n=0;n<8;n++){let r=!1;for(let o=0;o<e.length-1;o++){let i=n%2?e.length-2-o:o,s=e[i],a=e[i+1];(t.get(a)?.get(s)?.cycleCount??0)<=(t.get(s)?.get(a)?.cycleCount??0)||(e[i]=a,e[i+1]=s,r=!0)}if(!r)break}return e}function EX(e){let t=[],n=new Set;for(let r of e.values())r.outgoing.sort((o,i)=>i[1]-o[1]||o[0].tie-i[0].tie);for(let r of e.values()){if(n.has(r))continue;let o=[{node:r,next:0}];for(n.add(r);o.length>0;){let i=o.at(-1);if(i.next===i.node.outgoing.length){t.push(i.node.id),o.pop();continue}let s=i.node.outgoing[i.next++][0];n.has(s)||(n.add(s),o.push({node:s,next:0}))}}return t.toReversed()}function k2(e,t){let n=new Map(e.map((o,i)=>[o,i])),r=0;for(let o of t.values())for(let[i,s]of o.outgoing)n.get(o.id)<n.get(i.id)&&(r+=s);return r}function RX(e,t){let n=k2(e,t),r=n,o=0;for(let i=0;i<e.length-1;i++)n-=t.get(e[i]).originalBalance,n>r&&(r=n,o=i+1);return[...e.slice(o),...e.slice(0,o)]}function x2(e,t){if(e.length<2)return e;let n=new Map(e.map((l,d)=>[l,{id:l,tie:d,balance:0,incoming:[],outgoing:[]}]));for(let l of n.values())for(let d of t.get(l.id)?.values()??[]){let u=n.get(d.to);!u||u===l||!d.cycleCount||(l.outgoing.push([u,d.cycleCount]),u.incoming.push([l,d.cycleCount]),l.balance+=d.cycleCount,u.balance-=d.cycleCount)}for(let l of n.values())l.originalBalance=l.balance;let r=[],o=new w2(n.values()),i=[];for(;o.nodes.length>0;){let l=o.take();l.balance>=0?r.push(l.id):i.push(l.id);for(let[d,u]of l.outgoing)d.position<0||(d.balance+=u,o.update(d));for(let[d,u]of l.incoming)d.position<0||(d.balance-=u,o.update(d))}let s=e,a=k2(e,n);for(let l of[[...r,...i.toReversed()],EX(n),e,e.toReversed()]){let d=CX(RX(l,n),t),u=k2(d,n);u>a&&(s=d,a=u)}return s}var w2,$2=$(()=>{"use strict";w2=class{constructor(t){this.nodes=[...t];for(let[n,r]of this.nodes.entries())r.position=n;for(let n=(this.nodes.length>>1)-1;n>=0;n--)this.down(n)}before(t,n){return Math.abs(t.balance)>Math.abs(n.balance)||Math.abs(t.balance)===Math.abs(n.balance)&&(t.balance>n.balance||t.balance===n.balance&&t.tie<n.tie)}swap(t,n){let r=this.nodes,o=r[t];r[t]=r[n],r[n]=o,r[t].position=t,r[n].position=n}down(t){let n=this.nodes;for(;2*t+1<n.length;){let r=2*t+1;if(r+1<n.length&&this.before(n[r+1],n[r])&&r++,!this.before(n[r],n[t]))break;this.swap(t,r),t=r}}update(t){if(t.position<0)return;let n=t.position;for(;n>0;){let r=n-1>>1;if(!this.before(t,this.nodes[r]))break;this.swap(n,r),n=r}this.down(n)}take(){let t=this.nodes[0],n=this.nodes.pop();return t.position=-1,this.nodes.length>0&&(this.nodes[0]=n,n.position=0,this.down(0)),t}}});function LB(e){return typeof e=="string"&&!e.includes("\\")&&!e.includes(":")&&e.split("/").every(t=>t!==""&&t!=="."&&t!==".."&&t!=="node_modules")}function FB(e,t){let n=e.package;return n!==void 0&&t.ownSource===!0?!1:(n===void 0||(typeof n=="string"?n===t.package:n.test(t.package??"")))&&e.path.test(t.path)}function _2(e,t){if(!(e?.ownSource===!0||!LB(e?.path)||!LB(t?.path)))return BB.find(n=>(!n.ownSourceOnly||t.ownSource===!0)&&FB(n.from,e)&&FB(n.to,t))}var IB,S2,BB,OB=$(()=>{IB={package:"@babel/core",path:/^lib\/config\//u},S2={package:"@babel/core",path:/^lib\/config\/files\/(?:module-types|plugins)\.js$/u},BB=Object.freeze([{id:"react-native-codegen-discovery",reason:"Codegen discovers package metadata and React Native configuration.",from:{package:"react-native",path:/^scripts\/codegen\/generate-artifacts-executor\.js$/u},to:{path:/(?:^|\/)(?:package\.json|react-native\.config\.js)$/u}},{id:"react-native-release-version",reason:"The CLI release checker reads the installed React Native version.",from:{package:"@react-native-community/cli-tools",path:/^build\/releaseChecker\/index\.js$/u},to:{package:"react-native",path:/^package\.json$/u}},{id:"react-native-platform-config",reason:"React Native configuration loads platform CLIs supplied by the host project.",from:{package:"react-native",path:/^react-native\.config\.js$/u},to:{package:/^@react-native-community\/cli-platform-(?:android|ios)$/u,path:/^build\/index\.js$/u}},{id:"babel-project-config",reason:"Babel discovers project configuration.",from:IB,to:{path:/(?:^|\/)babel\.config\.js$/u}},{id:"babel-typescript-preset",reason:"Babel configuration loads the TypeScript preset.",from:IB,to:{package:"@babel/preset-typescript",path:/./u}},{id:"babel-react-native-preset",reason:"Babel config loaders load the configured React Native preset.",from:S2,to:{package:"@react-native/babel-preset",path:/^(?:src\/)?index\.js$/u}},{id:"babel-reanimated-plugin",reason:"Babel config loaders load the configured Reanimated plugin, including scoped copies.",from:S2,to:{package:/^(?:@[^/]+\/)?react-native-reanimated$/u,path:/^plugin\/index\.js$/u}},{id:"babel-transform-plugin",reason:"Babel config loaders load configured transform plugins.",from:S2,to:{package:/^@babel\/plugin-transform-[^/]+$/u,path:/^lib\/index\.js$/u}},{id:"cosmiconfig-config",reason:"Cosmiconfig loads discovered configuration, including dependency configuration.",from:{package:"cosmiconfig",path:/^dist\/loaders\.js$/u},to:{path:/\.config\.js$/u}},{id:"import-fresh-own-config",reason:"import-fresh loads host-project configuration.",from:{package:"import-fresh",path:/./u},to:{path:/\.config\.js$/u},ownSourceOnly:!0}].map(e=>Object.freeze({...e,from:Object.freeze(e.from),to:Object.freeze(e.to)})))});var PB=$(()=>{OB()});function NB(e,t){let r=e.split(/(?:^|\/)node_modules\//u).slice(1).at(-1)?.match(/^(@[^/]+\/[^/]+|[^/]+)\/(.+)$/u);return{package:r?.[1],path:r?.[2]??e.replace(/^\/+/u,""),ownSource:t??Pt(e)==="__own__"}}function C2(e,t,n,r){return!_2(NB(e,r),NB(t,n))}var E2=$(()=>{"use strict";PB();pi()});function DB(e,t){let n=new Set(e),r=new Map(e.map(l=>[l,[]]));for(let[l,d]of t)for(let u of d)n.has(l)&&n.has(u)&&r.get(u).push(l);let o=[],i=new Set;for(let l of e){if(i.has(l))continue;i.add(l);let d=[[l,(t.get(l)??[])[Symbol.iterator]()]];for(;d.length>0;){let[u,f]=d.at(-1),h=f.next();if(h.done){o.push(u),d.pop();continue}n.has(h.value)&&!i.has(h.value)&&(i.add(h.value),d.push([h.value,(t.get(h.value)??[])[Symbol.iterator]()]))}}let s=new Map,a=[];for(let l of o.toReversed()){if(s.has(l))continue;let d=[],u=a.length,f=[l];for(s.set(l,u);f.length>0;){let h=f.pop();d.push(h);for(let m of r.get(h))s.has(m)||(s.set(m,u),f.push(m))}a.push(d.toSorted())}return{groups:a,componentOf:s}}var zB=$(()=>{"use strict";$2();pi();E2()});function TX(e,t){let n=new Map(e.map(i=>[i,[...t.get(i)].map(([s,a])=>{let l=t.get(i),d=t.get(s),u=l.size<d.size?l:d,f=0,h=0;for(let m of u.keys())if(l.has(m)&&d.has(m)&&f++,++h===32)break;return{to:s,score:a*2+f}}).toSorted((s,a)=>a.score-s.score||t.get(s.to).size-t.get(a.to).size||s.to.localeCompare(a.to))])),r=[],o=new Set;for(let i of e){let s=[i];for(;s.length>0;){let a=s.pop();if(!o.has(a)){o.add(a),r.push(a);for(let{to:l}of n.get(a).toReversed())o.has(l)||s.push(l)}}}return r}function UB(e,t,n){let r=e.toSorted(),o=new Set(r),i=new Map,s=new Map(r.map(x=>[x,new Map]));for(let x of r){i.set(x,new Map);for(let v of t.get(x)??[])x===v||!o.has(v)||(i.get(x).set(v,{to:v,count:1}),s.get(x).set(v,(s.get(x).get(v)??0)+1),s.get(v).set(x,(s.get(v).get(x)??0)+1))}let a=x2(r,i),l=r.map((x,v)=>({col:v%n,row:Math.floor(v/n)})),d=l.map(({col:x,row:v})=>({col:v%2?n-x-1:x,row:v})),u=(x,v)=>Math.abs(x.col-v.col)+Math.abs(x.row-v.row),f=x=>r.reduce((v,k)=>v+[...s.get(k)].reduce((S,[C,_])=>S+_*u(x.get(k),x.get(C)),0),0),h=new Map(r.map((x,v)=>[x,l[v]])),m=f(h);for(let x of[a,TX(r,s)])for(let v of[l,d]){let k=new Map(x.map((C,_)=>[C,v[_]])),S=f(k);S<m&&(h=k,m=S)}let g=({col:x,row:v})=>`${x},${v}`,y=new Map([...h].map(([x,v])=>[g(v),x])),w=(x,v,k,S)=>{let C=0;for(let[_,E]of s.get(x))C+=E*u(v,_===k?S:h.get(_));return C};for(let x=0;x<8;x++){let v=!1;for(let k of r){let S=h.get(k),C=s.get(k),_=0,E=0,O=0;for(let[K,Z]of C)_+=h.get(K).col*Z,E+=h.get(K).row*Z,O+=Z;if(!O)continue;let z=new Set;for(let K of[S,{col:Math.round(_/O),row:Math.round(E/O)}])for(let Z=-1;Z<=1;Z++)for(let ae=-1;ae<=1;ae++){let _e=y.get(`${K.col+Z},${K.row+ae}`);_e!==void 0&&_e!==k&&z.add(_e)}let T=0,D=null;for(let K of z){let Z=h.get(K),ae=w(k,Z,K,S)+w(K,S,k,Z)-w(k,S,K,Z)-w(K,Z,k,S);ae<T&&(T=ae,D=K)}if(D!==null){let K=h.get(D);h.set(k,K),h.set(D,S),y.set(g(K),k),y.set(g(S),D),v=!0}}if(!v)break}return r.map(x=>({id:x,...h.get(x)})).toSorted((x,v)=>x.row-v.row||x.col-v.col)}var jB=$(()=>{"use strict";$2()});function HB(e,t){let n=u=>u&&(u.collapsed||u.members.length===1),r=e.map((u,f)=>e.length>5&&n(u)&&n(e[f+1])),o=0,i=0;e.forEach((u,f)=>{r[f]?i+=u.width:o+=u.width+(f===e.length-1?0:Vi)});let s=Math.min(t,fi*5+Vi*4),a=i?Math.max(.3,Math.min(.9,(s-o)/i)):1,l=0;return{groups:e.map((u,f)=>{let h=u.width*(r[f]?a:1),m={...u,x:l,visibleWidth:h,stacked:!!(r[f]||r[f-1])};return l+=h+(r[f]||f===e.length-1?0:Vi),m}),width:l,height:Math.max(...e.map(u=>u.height))}}function WB(e){let t=`M${e[0].join(",")}`;for(let n=1;n<e.length-1;n++){let[r,o]=e[n],[i,s]=e[n-1],[a,l]=e[n+1],d=Math.hypot(a-r,l-o),u=Math.hypot(r-i,o-s);if(!u||!d)continue;let f=Math.min(6,u/2,d/2);t+=` L${r-(r-i)/u*f},${o-(o-s)/u*f} Q${r},${o} ${r+(a-r)/d*f},${o+(l-o)/d*f}`}return`${t} L${e.at(-1).join(",")}`}function T2(e,t,n,r){let o=e.packages.find(u=>u.id===t),i=A2(r),s=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let u=e.x+e.visibleWidth/2+i;return[[u,n?e.y-5:e.y+e.height],[u,s]]}let a=e.x+o.x+(n?0:fi),l=e.y+o.y+ua/2+i/2,d=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),l],[d,l],[d,s]]}function VB(e,t){let n=(a,l)=>{let d=e.get(a[l]),u=d.packages.find(f=>f.id===a[`${l}Package`]);return d.members.length===1||d.collapsed?[d.x+d.visibleWidth/2,d.y+d.height/2]:u?[d.x+u.x+fi/2,d.y+u.y+ua/2]:[d.x+d.width/2,d.y+d.height/2]},r=(a,l,d=u=>n(u,l))=>{let u=new Map,f=Map.groupBy(t,h=>{let m=e.get(h[a]);return m.collapsed?m:h[`${a}Package`]});for(let h of f.values())h.toSorted((g,y)=>{let[w,x]=d(g),[v,k]=d(y);return(g.bypassLane??w)-(y.bypassLane??v)||x-k||g[`${l}Package`].localeCompare(y[`${l}Package`])||g[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((g,y)=>u.set(g,{count:h.length,index:y}));for(let h of Map.groupBy(t,m=>m[a]).values())h.toSorted((g,y)=>{let[w,x]=n(g,a),[v,k]=n(y,a);return w-v||x-k||A2(u.get(g))-A2(u.get(y))}).forEach((g,y)=>{let w=y/Math.max(1,h.length-1);u.get(g).lane=a==="from"?1-w:w});return u},o=r("from","to"),i=r("to","from",a=>{let l=T2(e.get(a.from),a.fromPackage,!1,o.get(a));return[l.at(-1)[0],l[0][1]]}),s=t.map(a=>{let l=e.get(a.from),d=e.get(a.to),u=T2(l,a.fromPackage,!1,o.get(a)),f=T2(d,a.toPackage,!0,i.get(a));return{edge:a,end:f,start:u,rowBottom:l.rowBottom,x1:u.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(s,l=>l.rowBottom).values())for(let l of[!0,!1]){let d=a.filter(u=>u.x2<u.x1===l).toSorted((u,f)=>(l?1:-1)*(u.x1-f.x1||u.x2-f.x2));d.forEach((u,f)=>{u.bendY=u.rowBottom+9+12*f/Math.max(1,d.length-1)})}return s.map(({edge:a,end:l,start:d,x1:u,x2:f,bendY:h})=>{let m=[[u,h],[f,h]],{bypassLane:g,...y}=a;return g!==null&&m.push([f,l.at(-1)[1]]),{...y,path:WB([...d,...m,...l.toReversed()])}})}function AX(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),o=ua,i=fi;if(r===0&&Math.abs(t.x-e.x)===i+Vi){let g=e.y+o/2-n*6;return`M${e.x+(n>0?i:0)},${g} L${t.x+(n>0?-4:i+4)},${g}`}if(n===0&&Math.abs(t.y-e.y)===o+M2){let g=e.x+i/2+r*8;return`M${g},${e.y+(r>0?o:0)} L${g},${t.y+(r>0?-4:o+4)}`}let s=n||r,a=e.x+(s>0?i:0),l=e.y+o/2,d=a+s*(Vi/2-3),u=t.x+i/2+s*8,f=r>0||r===0&&n>0,h=t.y+(f?-10:o+10),m=t.y+(f?-4:o+4);return WB([[a,l],[d,l],[d,h],[u,h],[u,m]])}function KB(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:fi+R2*2,height:ua};let i=t.length>1,s=Math.max(1,Math.floor((r-R2*2+Vi)/(fi+Vi))),a=i?Math.min(s,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=i?R2:0,d=Math.ceil(t.length/a),u=i?MX:0,h=(i?UB(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(fi+Vi),y:l+u+y.row*(ua+M2)})),m=new Map(h.map(y=>[y.id,y])),g=[];if(i)for(let y of t)for(let w of n.get(y)??[])y!==w&&m.has(w)&&g.push({from:y,to:w,path:AX(m.get(y),m.get(w))});return{id:e,members:t,collapsed:o,packages:h,internalEdges:g,width:a*fi+(a-1)*Vi+l*2,height:d*ua+(d-1)*M2+l*2+u}}var fi,ua,$v,Vi,M2,MX,R2,A2,I2=$(()=>{"use strict";jB();fi=216,ua=48,$v=32,Vi=20,M2=24,MX=20,R2=10;A2=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1))});function L2(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}}function qB(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=L2(t,n);return{packageKey:r.ecosystem?GB(r):r.name,packageGroup:Pt("",{packageDir:t})}}function YB(e,{packageKey:t,packageGroup:n,version:r,reason:o=""}){let i=new Map,s=new Map,a=new Map,l=Zt(e)??new Map,d=new Map([...l.keys()].map(k=>[k,k])),u=yo(e).get(o),f=new Map([...d].filter(([k])=>!u||u.has(k)));for(let k of new Set([...f.keys()].map(S=>l.get(S))))a.set(k,L2(k,e.bundle.modules.get(k)));let h=(k,S)=>{k!==S&&(s.has(k)||s.set(k,new Set),i.has(S)||i.set(S,new Set),s.get(k).add(S),i.get(S).add(k))};for(let[k,S]of ch(e))if(f.has(k))for(let C of S){if(!f.has(C))continue;let _=l.get(k),E=l.get(C);if(C2(k,C,E===".",_==="."))h(_,E);else if(_!==E){let O=a.get(E);O.excludedImporters??=new Set,O.excludedImporters.add(_)}}let{roots:m,appImports:g}=yv(e,f,k=>l.get(k),l,d);g.length>0&&!a.has(".")&&a.set(".",L2("."));for(let k of g)h(".",k);for(let[k,S]of a){if(!(S.own||S.ecosystem==="npm"&&(S.name==="@babel/core"||S.name==="react-native"&&s.get(".")?.has(k))))continue;S.traceBoundary=!0;let _=i.get(k);for(let E of _??[])E!=="."&&(_.delete(E),s.get(E).delete(k))}for(let k of m){let S=a.get(k==="__own__"?".":k);S&&(S.root=!0)}let y=[];for(let k of a.values()){let S=GB(k),C=n===void 0?k.ecosystem==="github"?S.toLowerCase()===t.toLowerCase():S===t:Pt("",{packageDir:k.id})===n,_=k.ecosystem==="github"&&k.version==="."?"0.0.0":k.version;!k.own&&C&&(r===void 0||_===r)&&(k.target=!0,y.push(k.id))}let w=new Set(y),x=[...y];for(let k=0;k<x.length;k++)for(let S of i.get(x[k])??[])w.has(S)||(w.add(S),x.push(S));let v=k=>new Map([...w].map(S=>[S,new Set([...k.get(S)??[]].filter(C=>w.has(C)))]));return{nodes:new Map([...a].filter(([k])=>w.has(k))),imports:v(s),importedBy:v(i),targets:y}}function JB(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:i}=DB(r,e.imports),s=o.map(()=>new Set),a=[];for(let[S,C]of e.imports){let _=i.get(S);for(let E of C){let O=i.get(E);_!==O&&(s[_].add(O),a.push({from:_,to:O,fromPackage:S,toPackage:E}))}}let l=o.map(()=>0),d=o.map(()=>0);for(let S of s)for(let C of S)d[C]++;let u=o.flatMap((S,C)=>d[C]===0?[C]:[]);for(let S=0;S<u.length;S++){let C=u[S];for(let _ of s[C])l[_]=Math.max(l[_],l[C]+1),--d[_]===0&&u.push(_)}let f=s.some((S,C)=>[...S].some(_=>l[_]!==l[C]+1)),h=t-$v-24-(f?56:0),g=[...Map.groupBy(o.map((S,C)=>{let _=S.length>10;return{...KB(C,S,e.imports,h,_&&!n.has(C)),collapsible:_}}),S=>l[S.id])].toSorted(([S],[C])=>S-C).map(([,S])=>HB(S,h)),y=g.reduce((S,C)=>Math.max(S,C.width+24),240),w=new Map,x=12;for(let{groups:S,width:C,height:_}of g){for(let E of S)w.set(E.id,{...E,x:E.x+(y-C)/2,y:x,rowBottom:x+_});x+=_+36}let v=0,k=VB(w,a.map(S=>{let C=l[S.to]===l[S.from]+1?null:y+8+v++%4*10;return{...S,bypassLane:C}}));return{boxes:[...w.values()],componentOf:i,edges:k,width:y+(v?56:0),height:Math.max(0,x-24)}}function XB(e,t){if(t===null)return null;let n=new Set,r=new Set([t]);for(let o of[!1,!0]){let i=new Map,s=[t],a=new Set([t]);for(let l of e.edges){let d=o?l.to:l.from,u=o?l.from:l.to;i.has(d)||i.set(d,[]),i.get(d).push(u)}for(let l=0;l<s.length;l++)for(let d of i.get(s[l])??[])a.has(d)||(a.add(d),r.add(d),s.push(d));for(let l of e.edges)a.has(l.from)&&a.has(l.to)&&n.add(l)}return{groups:r,edges:n}}var GB,F2=$(()=>{"use strict";$r();pi();dh();bv();zB();E2();I2();GB=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`});var QB,ZB=$(()=>{QB=`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}
|
|
@@ -359,7 +359,7 @@ Variant ${y.variant}`:g.node.sourcePath,k=h.packageInfo,S=!!k||!!y?.variant,C=uZ
|
|
|
359
359
|
${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 b;let n=this._running||this._bulk||this._resolving.has(t.resourceTag);return p`<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?p`<p class="lwd-body">Fetching remote listing…</p>`:b:p`<ul class="rec-list">${this._rows.map(t=>p`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?p`<span class="lwd-kind-tag">bundle</span>`:b}</span> ${this._choice(t)} <span class="${`rec-status rec-status-${t.status}`}" data-tooltip="${this._statusHint(t)}">${ZO[t.status]?.label??t.status}</span></li>`)}</ul>`}_summarySection(){if(!this._ran||this._rows.length===0)return b;let t=this._counts(),n=[];return t.good&&n.push(`${t.good} available`),t.updated&&n.push(`${t.updated} local ${QO(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${QO(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?p`<p class="rec-summary" role="status" aria-live="polite">${n.join(" \xB7 ")}</p>`:b}render(){let t=this.cloudCount===1?"":"s",n=this.cloudCount>0?p`the <strong>${this.cloudCount}</strong> remote`:"remote",r=this._ran?b:p`<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?p`<p class="lwd-empty">No remote objects to check.</p>`:b,i=this._ran?this._downloadableItems().length:0,s=this._differingRows().length>1||this._bulk;return p`<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?p`<p class="rec-error" role="alert">${this._error}</p>`:b}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${s?p`<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>`:b} ${!s&&i>0?p`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${i} not stored locally</button>`:b} ${s?b:p`<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",r5)});var nP,tP=$(()=>{nP=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
360
360
|
`});function rP({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,i)=>{n.remove(),t({shown:o,sync:i})};n.addEventListener("resolve",o=>r(!0,o.detail===!0)),n.addEventListener("modal-conflict",()=>r(!1,!1)),document.body.append(n)})}var hQ,i5,oP=$(()=>{"use strict";P();Ee();n5();Fi();tP();hQ=10,i5=class extends H{static styles=[...H.styles,N(Tv),N(_n),N(nP)];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 b;let t=this.names.slice(0,hQ),n=this.names.length-t.length;return p`<ul class="lwd-list">${t.map(r=>p`<li><strong>${r}</strong></li>`)} ${n>0?p`<li>and ${n} more</li>`:b}</ul>`}render(){let t=this.names.length===1,n=t?p`Your copy of <strong>"${this.names[0]}"</strong> no longer matches its cloud copy, so other members may be seeing a different version.`:p`<strong>${this.names.length}</strong> reports no longer match their cloud copies, so other members may be seeing different versions.`;return p`<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",i5)});function iP({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>rf()}){let r=new Set,o=!1;function i(s,a,{onSync:l,retry:d}={}){!s||!Array.isArray(a)||a.length===0||o||r.has(s)||(o=!0,t(async()=>{let u;if(n())u={shown:!1,sync:!1};else try{u=await e([...a])}catch{u={shown:!1,sync:!1}}if(o=!1,!u.shown){typeof d=="function"&&t(d,mQ);return}r.add(s),u.sync&&typeof l=="function"&&l()},0))}return{suggestSync:i,isClosedFor:s=>r.has(s)}}var mQ,sP=$(()=>{"use strict";f$();mQ=1500});function aP(e,t,n=0){let{viewMode:r,focusGid:o,tableSelectedGid:i,kanbanPopoverGid:s}=t,a=r==="focus"?o:r==="table"?i:r==="kanban"?s:null,l=a?e.find(d=>Te(d)===a):null;return l||(r==="focus"?e[Math.min(n,e.length-1)]??null:null)}function lP(e,t){if(t.currentView!=="findings")return null;let n=Yt({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!n||!e)return n;let r={...n,finding:{id:le(ct(e))}};return dr(r)?r:n}var cP=$(()=>{"use strict";Ti();Ht()});function s5(e){let t=Mv=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{Mv===t&&(Mv=null)}).catch(()=>{}),t}function dP(e){let t=null;return n=>{t!==null&&t!==n&&Mv?.skipTransition(),t=n,e()}}var Mv,a5=$(()=>{"use strict";Mv=null});var CP={};uu(CP,{configureReportRevalidation:()=>Dd,refreshGraph2Sidebar:()=>Lv,refreshGraph2TopPkgs:()=>Fv,render:()=>F,renderEmptyWorkspace:()=>rh});function u5(){let e=jS(c.reports);if(!e)return null;let t=Object.keys(e),r=kr().filter(u=>kt(u).commonTriage===c.shownTriage),o=US(r,c.severityMode),i=Ny(e,o),s=new Map,a=new Map,l=new Map;for(let u of r)for(let f of u){let h=Me(f,c.severityMode);s.has(f.file)||s.set(f.file,new Set),s.get(f.file).add(h);let m=Ye(f)?.color??"none";a.has(f.file)||a.set(f.file,new Set),a.get(f.file).add(m),l.has(f.file)||l.set(f.file,[]),l.get(f.file).push({severity:h,color:m})}let d;return G.focusedPkg?(d=t.filter(u=>(LL(u)??"__own__")===G.focusedPkg),G.showAll||(d=d.filter(u=>HS(u,o,i)))):d=G.showAll?t:t.filter(u=>HS(u,o,i)),{treeData:e,files:d,ownCounts:o,transitiveCounts:i,severitySets:s,colorSets:a,fileFindings:l,ownSourceFiles:FL(d)}}function Lv(){let e=Md();if(!e)return;let t=u5();t&&e.refreshSidebar(t,{isBundleContext:c.currentView==="bundles"})}function Fv(){let e=Md();if(!e)return;let t=u5();t&&e.refreshTopPkgs(t)}function gQ(e){return`${nn[e]??e} findings`}function bQ(e,t,n){return n?p`<repo-chip url="${n}"></repo-chip>`:A()?b:c.currentWorkspace?t?p`<repo-chip url="${t}"></repo-chip>`:b:e?p`<repo-chip url="${c.repoUrl}" editable ?editing="${c.repoEditing}" ?empty="${!c.repoUrl}"></repo-chip>`:t?p`<repo-chip url="${t}"></repo-chip>`:b}function mP(e,t,n,r,o){let i=e.length,s=new Set(c.reports.map(T=>T.source)),a=s.size===1?[...s][0]:null,l=c.currentWorkspace?de().find(T=>T.id===c.currentWorkspace):null,d=c.currentWorkspace&&c.currentManagedTeam?c.managedTeams.find(T=>T.id===c.currentManagedTeam):null,u=rv(c,l?[l]:[],Lt),f=d?`Team: ${d.name}`:l?`Workspace: ${l.name}`:a?gQ(a):"Findings",h=a&&Ze[a]?a:"default",m=te(Ze[h]),g=p`<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=b;if(u)y=Qf(u,"reports",c.currentView);else if(t.length===1){let T=Ne(t[0]);y=p`<button type="button" class="file-chip" data-copy-report="${T}">${m}<span>${T}</span></button>`}else t.length>1&&(y=p`<button type="button" class="file-chip" data-copy-report="${t.map(Ne).join(`
|
|
361
361
|
`)}">${g}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(T=>T.groups.flat()),v=`${i} ${`finding${i===1?"":"s"}`}`,k=c.currentWorkspace?[]:GI(w,a?ay.filter(T=>T!=="type"):ay),S=b;if(i>0){let T={};for(let K of e){let Z=Me(Bi(K),c.severityMode);Z&&(T[Z]=(T[Z]||0)+1)}let D=rt.filter(K=>T[K]>0);D.length>0&&(S=p`<span class="status-bar" aria-hidden="true">${D.map(K=>{let Z=`${T[K]} ${K.replaceAll("_"," ")}`;return p`<span class="${`status-seg sev-${K}`}" style="${Oe({flexGrow:T[K]})}" data-tooltip="${Z}"></span>`})}</span>`)}let C=new Set(c.reports.map(T=>T.repo??null)),_=C.size===1?[...C][0]:null,E=bQ(n,r,_),O=p`<span class="sep" aria-hidden="true"></span>`,z=D_(o,c.currentView);return p`<header class="page-head"><div class="page-title"><h1>${u?N_(u,c.currentView):f}${y}${Qf(u,"bundles",c.currentView)}${E}${z}${gP()}</h1><div class="meta-row"><span>${v}</span> ${S} ${k.length>0?p`${O}${k.map(T=>p`<span class="tag">${T}</span>`)}`:b}</div></div></header>`}function gP(){if(me.status!=="online")return b;if(!vQ.has(c.currentView))return b;let e=KO();if(!e)return b;let{workspaceId:t,fileNames:n,mode:r}=e,o=TM(t);if(o.length>0&&yQ(t,o,{onSync:()=>l5(t,r,n),retry:F}),r==="single"){let v=n[0];if(o.includes(v))return uP({status:"differ",label:"differs",title:`Your copy of "${v}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>l5(t,r,n)});let k=t$(t,v)?"cloud":"local";return uP({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>pP({workspaceId:t,items:[{kind:"report",identifier:v}]}):null})}let i=de().find(v=>v.id===t),s=i&&Array.isArray(i.bundles)?i.bundles:[],a=r$(t),l=n.filter(v=>!t$(t,v)),d=s.filter(v=>!EM(t,v)),u=[...l.map(v=>({kind:"report",identifier:v})),...d.map(v=>({kind:"bundle",identifier:v}))];if(a===0&&u.length===0)return b;let f=[a>0?`${a} in cloud`:null,u.length>0?`${u.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,u.length>0?`click "local" to upload ${u.length}`:null].filter(Boolean).join(" \u2014 "),h=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.`,m=o.length===0?b:p`<button type="button" class="sync-badge-chunk differ" data-tooltip="${h}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${v=>{v.stopPropagation(),l5(t,r,n)}}">${yP()}<span>${o.length} differ</span></button>`,g=a===0?b:p`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${v=>{v.stopPropagation(),o5({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:s})}}">${vP()}<span>${a} cloud</span></button>`,y=u.length===0?b:p`<button type="button" class="sync-badge-chunk local" aria-label="${`${u.length} items not yet uploaded \u2014 open upload dialog`}" @click="${v=>{v.stopPropagation(),pP({workspaceId:t,items:u})}}">${bP()}<span>${u.length} local</span></button>`,w=p`<span class="sync-badge-divider" aria-hidden="true"></span>`,x=[g,m,y].filter(v=>v!==b);return p`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${x.map((v,k)=>k===0?v:p`${w}${v}`)}</div>`}function l5(e,t,n){let r=de().find(s=>s.id===e),o=t==="single"?e5(r?.reports??[],c.storedFiles??[],n):n,i=r&&Array.isArray(r.bundles)?r.bundles:[];return o5({workspaceId:e,cloudCount:r$(e),localFileNames:o,localBundles:i,autoRun:!0})}function uP({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?vP():e==="differ"?yP():bP(),i=p`<span class="sync-badge-label">${t}</span>`;return typeof r!="function"?p`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${o}${i}</span>`:p`<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}${i}</button>`}function bP(){return p`<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 yP(){return p`<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 vP(){return p`<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 pP({workspaceId:e,items:t}){let n=t.filter(r=>r.kind==="bundle");if(n.length>0){let r=await vn(),o=new Map(r.map(i=>[i.integrity,i.name]));for(let i of n){let s=o.get(i.identifier);s&&(i.label=s)}}await qO({workspaceId:e,items:t})}function wQ(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?p`<severity-chips .counts="${e}"></severity-chips>`:b}function kQ(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?p`<triage-filter .counts="${e}"></triage-filter>`:b}function xQ(e,t,n,r,o,i,s,a){let{showSource:l,showConfidence:d,showPriority:u,showGraphMode:f,showFileSort:h,kanbanMode:m,showRepo:g,hasComment:y,hasFix:w,hasFlagged:x,hasDuplicates:v,hasCrossContext:k,hasAppStacked:S,showSecurity:C,showSeverityMode:_,revalidateOptions:E,showPartial:O,canDropLayer:z,canDetailLayer:T,canUpstreamLens:D,confirmedLocked:K}=i;return p`<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="${h}" ?show-confidence="${d}" ?show-priority="${u}"></findings-sort>${l?p`<source-filter></source-filter>`:b} ${!K&&(d||E.length>0)?p`<conf-filter ?range-disabled="${!d}" .revalidateOptions="${E}" ?has-partial="${O}"></conf-filter>`:b} ${y||w||x||c.filterComment||c.filterFix||c.filterFlagged?p`<annotation-filter .hasComment="${y}" .hasFix="${w}" .hasFlagged="${x}"></annotation-filter>`:b} ${m?b:p`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!c.currentWorkspace&&(v||c.filterDuplicates)||k||S||C||c.filterCrossContext||c.filterAppStacked?p`<annotation-filter group="context" .hasDuplicates="${v}" .hasCrossContext="${k}" .hasAppStacked="${S}" .hasSecurityContrast="${C}"></annotation-filter>`:b} ${z||c.revalidateConflicts.size>0?p`<revalidation-switch ?can-drop="${z}" ?can-detail="${T}" ?can-upstream="${D&&z}" .upstreamDisabled="${c.showRevalidation===!1&&z}"></revalidation-switch>`:b}</div></div><div class="toolbar-row sev-row">${_?p`<severity-mode-switch></severity-mode-switch>`:b} ${wQ(r)} ${s.analyzers.length>1||s.models.length>1?p`<analyzer-select .analyzers="${s.analyzers}" .models="${s.models}" .groups="${s.groups}"></analyzer-select>`:b} ${g&&a.length>1?p`<repo-filter .options="${a}"></repo-filter>`:b} ${kQ(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function c5(e,t){return e.map(n=>({p:Bi(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function gh(e,t=!1,n=null,r=!1,o=!1){return p`<finding-card data-gid="${Te(e)}" .group="${e}" ?in-group="${t}" context="${n??b}" ?lazy="${r}" ?popup="${o}"></finding-card>`}function d5(e,t={}){let{variant:n="kanban",active:r=!1,expandedTrackLast:o=!1}=t,i=kt(e),s=ct(e),a=yt(s)||"(untitled finding)",l=n==="kanban",d=n==="kanban-side",u=l&&c.currentWorkspace?Ab(s):null,f={"kanban-card":!0,"has-conflict":i.hasConflict,"focus-side-card":!l,"kanban-expanded-track-last":o,active:r};!i.hasConflict&&i.commonColor&&(f[`mark-${i.commonColor}`]=!0);let h=parseInt(s.line,10),m=Number.isFinite(h)?`:${h}`:"",g=Me(s,c.severityMode),y=$Q[g]??"?",w=or(s)&&c.severityMode!=="original",x=Ye(s),v=x?.flagged===!0,k=x?.fix||qo(s),S=x?.comment??"",C=b;l&&k?C=dt(k)?p`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${k}">${Uf}</managed-fix-link>`:p`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${k}`}" aria-label="${`Edit fix link: ${k}`}">${Uf}</button>`:l&&(S||A()&&ft(s))&&(C=p`<comment-preview class="kanban-action" .finding="${s}" .comment="${S}">${Oy}</comment-preview>`);let _=p`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${g}`}" data-tooltip="${w?`${Qn(g)} \u2014 corrected from ${Qn(s.severity)}`:b}" aria-label="${w?`Severity ${Qn(g)}, corrected from ${Qn(s.severity)}`:`Severity ${Qn(g)}`}">${y}${w?"*":""}</span> ${v?p`<span class="kanban-flag" aria-label="Flagged">${Py}</span>`:b} ${C}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${s.file}${m}</span> ${s.confidence===void 0||s.confidence===null?b:p`<span class="kanban-conf" data-tooltip="${`Confidence ${s.confidence}/10`}">${s.confidence}</span>`} ${u?p`<span class="kanban-analyzer" role="img" data-tooltip="${ud[u]}" aria-label="${ud[u]}">${te(Ft[u])}</span>`:b}</div>`;return l?p`<div class="${Y(f)}" data-gid="${Te(e)}" data-kanban-source draggable="${Vs(e,i).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Open details for ${a}`}">${_}</div>`:d?p`<div class="${Y(f)}" data-gid="${Te(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Show details for ${a}`}">${_}</div>`:p`<div class="${Y(f)}" data-gid="${Te(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Focus on ${a}`}">${_}</div>`}function SQ(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
362
|
-
`).length,i=String(o).length;return p`<div class="focus-code-lines" style="${Oe({"--lineno-width":`${i}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(s,a)=>{let l=a+1,u={"focus-code-lineno":!0,"focus-code-line-active":!!n&&l>=n.start&&l<=n.end};return p`<div class="${Y(u)}" data-focus-code-line="${l}">${l}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?te(r):t}</code></pre></div>`}function $P(e){return!e||!gl(ct(e))?b:p`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${Te(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 SP(e,t=b,n=!1){c.focusCodeTick;let r=oL(e),o=$d(e),i=r?"focus-main with-code":"focus-main",s=Oe({"--focus-split":String(c.focusSplit)});return p`<div class="${i}" style="${s}" data-gid="${Te(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?b:$P(e)} ${gh(e,!1,"focus",!1,n)}</div></div>${t} ${r?p`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${Am}" aria-valuemax="${Im}" 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??b}" data-focus-code-integrity="${r.integrity??b}">${r.loading?p`<div class="focus-code-empty">Loading source…</div>`:p`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?p`<span class="focus-code-line">:${jb(r.range)}</span>`:b} ${(o?.stack.length??0)>1?p`<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">${p5}</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">${f5}</button></div>`:b}</header><div class="focus-code-body">${SQ(r)}</div>`}</div>`:b}</div>`}function _P(e,t,n=[],r=null){if(!e&&!r)return b;let o=e?kt(e):{},i=c.kanbanDetailFullscreen,s={"kanban-detail-modal":!0,fullscreen:i,"has-conflict":o.hasConflict},a=e?Te(e):null,l=t?.items??[],d=l.findIndex(f=>Te(f)===a),u=p`<div class="kanban-detail-actions">${$P(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${i?"true":"false"}" aria-label="${i?"Back to the readable width":"Fill the available space"}">${i?xP:kP}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return p`<div class="${Y({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${Y(s)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${i&&e?b:u}<div class="kanban-detail-body">${e?i?SP(e,u,!0):gh(e,!1,"kanban-detail",!1,!0):p`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?b:p`<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 h=f.key===t.key,m=h?f.label:`${f.label} (${f.count})`;return p`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${h}" ?disabled="${f.count===0}">${m}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${d===0}" aria-label="Previous finding">${p5}</button> <span class="count">${d<0?l.length:`${d+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${d===l.length-1}" aria-label="Next finding">${f5}</button></div></div><div class="kanban-detail-side-body">${ve(l,f=>Te(f),f=>d5(f,{variant:"kanban-side",active:Te(f)===a}))}</div></aside>`}</div>`}function _Q(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?c5(e,fP):e;return r.length===0?b:(Iv=r,p`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?p`<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">${gh(t)}</div></aside>`:b}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return b;let r=e.indexOf(t);wP=r;let o=t,i=r===0,s=r===e.length-1;return p`<div class="focus-view">${SP(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="${i}" aria-label="Previous finding">${p5}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${s}" aria-label="Next finding">${f5}</button></div></div><div class="focus-sidebar-body">${ve(e,a=>Te(a),a=>d5(a,{variant:"focus",active:Te(a)===Te(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(u=>[u.key,[]]));for(let u of e){let h=kt(u).commonTriage??"untriaged",m=o.get(h);m&&m.push(u)}let i=r.some(u=>u.key===c.kanbanExpandedColumn)?c.kanbanExpandedColumn:null,s=i?r.filter(u=>u.key===i):r,a={"--kanban-cols":String(r.length)},l=t,d=l?r.find(u=>u.key===(kt(l).commonTriage??"untriaged")):null;return p`<div class="kanban-board" style="${Oe(a)}">${ve(s,u=>u.key,u=>{let f=o.get(u.key),h=u.key===i;return p`<div class="${`kanban-column kanban-column-${u.key}${h?" expanded":""}`}" data-kanban-target="${u.key}"><div class="kanban-column-header"><span class="label">${u.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${u.key}" aria-pressed="${h}" aria-label="${h?"Show all columns":`Show only ${u.label}`}">${h?xP:kP}</button></div><div class="kanban-column-body">${f.length===0?p`<div class="kanban-empty">No ${u.label.toLowerCase()} findings.</div>`:ve(f,m=>Te(m),(m,g)=>d5(m,{active:Te(m)===c.kanbanPopoverGid,expandedTrackLast:(g+1)%r.length===0}))}</div></div>`})}</div>${_P(l,d&&{key:d.key,label:d.label,items:o.get(d.key)},r.map(u=>{let f=o.get(u.key);return{key:u.key,label:u.label,count:f.length,firstGid:f.length>0?Te(f[0]):""}}))}`}if(c.viewMode==="grouped"){let r=new Map;for(let i of e){let s=Bi(i).file;r.has(s)||r.set(s,[]),r.get(s).push(i)}let o=c.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return p`${ve(o,i=>i,i=>{let s=c.sortBy==="file"?c5(r.get(i),(l,d)=>parseInt(l.line,10)-parseInt(d.line,10)):r.get(i),a=Bi(s[0]);return p`<div class="file-group"><div class="file-header"><span>${$$(a,Xn(a))}</span> <span class="count">${s.length}</span></div><div class="file-body">${ve(s,l=>Te(l),l=>gh(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?c5(e,fP):e;return p`${ve(n,r=>Te(r),r=>{let o=ct(r),i=HA(o,Xn(o)),s=kl(o),a=_i(o),l=r.length>1;return p`<div class="${Y({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${$$(o,Xn(o))}</span> ${i===b?b:p`<span class="line-num">${i}</span>`} ${a?p`<span class="meta">${a}</span>`:b} ${s?p`<span class="run-meta">${s}</span>`:b}</div>${gh(r,!0,null,!0)}</div>`})}`}function CQ(){c.bundleSourceFile&&Al().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&xe(TO(),e)}function F(){EQ(c.currentView)}function fa(e){let t=document.querySelector(`#${e}`);return(!t||!V.contains(t)||V.firstElementChild!==t)&&(V.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function rh(){let e=rv(c,de(),Lt);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=fa("empty-workspace-slot");t&&xe(p`${mP([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),V.classList.add("active"),mt.classList.add("hidden")}function Dd(){let e=c.revalidateConflicts.size>0,t=!e&&Bb(c.reports);return e?c.showRevalidation!==!1&&(Av=c.showRevalidation,c.showRevalidation=!1):(Av!==null&&(c.showRevalidation=Av,Av=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),Ns(c.showRevalidation,c.upstreamOnly),t}function TQ(){vr()||ey(),CQ(),zb(c.reports),yg()&&queueMicrotask(()=>{We()}),Ub(c.reports)&&Ks();let e=Dd(),t=c.reports.some(j=>(j.groups??[]).some(ee=>ee.some(pe=>pe.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let j=c.currentView.slice(10),ee=rv(c,de(),Lt),pe=fa("workspace-content-slot");pe&&xe(Q7(ee,j,c.workspaceContentFileCount),pe),document.title=ee?`${ee.title} \u2014 ${j}`:`DeepView \u2014 ${j}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Ys(c.bundleDetailsTab,c.bundleSourceFile)&&Al().catch(()=>{});let j=fa("bundles-slot");j&&xe(LO(c.bundles),j);let ee=c.bundleDetails,pe=c.selectedBundle&&ee&&(ee.json||ee.bundle);if(pe&&c.bundleDetailsTab==="graph"){let at=document.querySelector("#bundle-graph-slot");if(at){let Mn=_O(c.bundleDetails);if(Mn){CO(Mn);let Lz={hideAllFiles:!0,triageCounts:SO(c.bundleDetails,new Set(Mn.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:Mn.canPackagesView,showBundleLayouts:!0};WS(at,Mn,Lz,Ev,Rv)}}}if(pe&&!ee.metadataOnly&&c.bundleDetailsTab==="terminal"){let at=document.querySelector("#bundle-terminal-slot");at&&IL(at,c.bundleDetails)}V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 bundles";return}if(c.currentView==="packages"){let j=fa("packages-slot");j&&xe(FO(),j),V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let j=fa("repositories-slot");j&&xe(NO(),j),V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let j=fa("links-slot"),ee=vr();j&&xe(p`${WO(gP())}${ee?_P(ee.group,null,[],ee):b}`,j),V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let j=fa("scan-slot");if(j&&!j.firstElementChild){let ee=document.createElement("local-scan-page");ee.selection=c.scanSelection,j.append(ee),ee.updateComplete.then(()=>Jn(ee.renderRoot,{gate:pe=>!Object.hasOwn(pe.dataset,"tooltipTruncated")||pe.scrollWidth>pe.clientWidth}))}V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 scans";return}let n=RQ[c.currentView];if(n){let j=fa(n.slot);j?.classList.add("managed-page-slot");let ee=j?.firstElementChild?.session;if((ee?.id!==c.managedSession?.id||ee?.role!==c.managedSession?.role)&&j?.replaceChildren(),j&&!j.firstElementChild){let pe=document.createElement(n.tag),at=Mn=>Jn(Mn,{gate:Ah=>!Object.hasOwn(Ah.dataset,"tooltipTruncated")||Ah.scrollWidth>Ah.clientWidth});pe.localImportSource=wx(),c.currentView==="manage-import"&&(pe.localDeps=vx(),pe.promptPassword=Fb,pe.resolveConflicts=hd,pe.confirmTriageImport=QA,pe.confirmContentImport=rI,pe.showTriageComparison=cI),pe.session=c.managedSession,pe.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(pe.selection=c.scanSelection),c.currentView==="manage-bundles"&&(pe.createRepoId=c.bundleCreationRepoId,pe.installTooltips=at),j.append(pe),(async()=>{await customElements.whenDefined(n.tag),await pe.updateComplete,at(pe.renderRoot)})().catch(()=>{})}j?.firstElementChild&&(j.firstElementChild.session=c.managedSession,j.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&j?.firstElementChild&&(j.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&j?.firstElementChild&&(j.firstElementChild.createRepoId=c.bundleCreationRepoId),V.classList.add("active"),mt.classList.add("hidden"),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&rh();return}let r=kr(),o=c.viewMode==="kanban",i={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},s=[];for(let j of r){let ee=kt(j).commonTriage;ee&&i[ee]++,(o||ee===c.shownTriage)&&s.push(j)}Object.defineProperty(s,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,d=!1,u=!1;for(let j of r)for(let ee of j){or(ee)&&(u=!0);let pe=Ye(ee);qo(ee)&&(l=!0),pe&&(pe.comment&&(a=!0),pe.fix&&(l=!0),pe.flagged===!0&&(d=!0))}let f=Yb(),h=r.some(j=>j.some(ee=>f.has(ee.id)));h||(c.filterDuplicates="");let m=s.some(P$),g=s.some(N$);m||(c.filterCrossContext=""),g||(c.filterAppStacked="");let y=SI(s);y||(c.filterSecurity="");let w=new Set,x=!1,v=!1,k=!1;for(let j of s)for(let ee of j){let pe=yr(ee);pe&&w.add(pe)}for(let j of J$()){let ee=!1,pe=!1;for(let at of j){let Mn=et(at);Mn==="partial"&&(v=!0),!((Mn==="unreachable"||Mn==="refuted")&&(k=!0,c.currentWorkspace))&&(Mn==="revalidation"?ee=!0:pe=!0)}ee&&pe&&(x=!0)}let C=[...new Set(c.reports.map(j=>j.type))].join(", "),_=c.reports.map(j=>j.fileName),E=s.map(jr).filter(j=>j.length>0),O=E.length>0&&L$(E),z=O$(r),T=r.some(j=>j.some(ee=>Sn(ee.file))),D=r.some(j=>j.some(ee=>!Sn(ee.file))),K=!1,Z=!1,ae;e:for(let j of r)for(let ee of j)if(!Z)Z=!0,ae=ee.file;else if(ee.file!==ae){K=!0;break e}let _e=r.some(j=>j.some(ee=>!ee.repo?.github&&!Sn(ee.file))),Ce=new Set;for(let j of r)for(let ee of j)!Sn(ee.file)&&ee.repo?.github&&Ce.add(ee.repo.github);let Ie=Ce.size===1?[...Ce][0]:null,Re=new Set,ne=new Set;for(let j of r)for(let ee of j)Re.add(ee._analyzer??null),ne.add(yf(ee));let Ue=Object.keys(Z$),je=j=>{if(j==null)return 1/0;let ee=Ue.indexOf(j);return ee===-1?Ue.length:ee},He=[...Re].toSorted((j,ee)=>{let pe=je(j),at=je(ee);return pe!==at?pe-at:String(j??"").localeCompare(String(ee??""))}),Vt=[...ne].toSorted(hP);if(c.filterAnalyzer){let j=c.filterAnalyzer===js?null:c.filterAnalyzer;(!Re.has(j)||Re.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let j=c.filterModel===Hs?null:c.filterModel;(!ne.has(j)||ne.size<2)&&(c.filterModel="")}let dn=MA(w);c.filterRevalidate&&!dn.some(j=>j.value===c.filterRevalidate)&&(c.filterRevalidate="");let L=Xb(s);L&&(c.filterRevalidate="confirmed");let I=w.has("partial")&&Oi();I||(c.filterPartial="");let M=e&&(x||v||!c.currentWorkspace&&k),R=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&T&&D;!R&&c.filterSources.size>0&&c.filterSources.clear(),O||(c.filterConfMin=0,c.filterConfMax=10,(c.sortBy==="confidence-desc"||c.sortBy==="confidence-asc")&&(c.sortBy="severity")),!z&&(c.sortBy==="priority-desc"||c.sortBy==="priority-asc")&&(c.sortBy="severity"),!K&&c.sortBy==="file"&&(c.sortBy="severity");let U=_I(s),J={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Se={red:0,blue:0,green:0,gray:0,none:0};for(let j of U){if(j.length===1){let at=Me(j[0],c.severityMode);J[at]=(J[at]||0)+1;let Mn=Ye(j[0])?.color??"none";Se[Mn]=(Se[Mn]||0)+1;continue}let ee=new Set(j.map(at=>Me(at,c.severityMode)));for(let at of ee)J[at]=(J[at]||0)+1;let pe=new Set(j.map(at=>Ye(at)?.color??"none"));for(let at of pe)Se[at]=(Se[at]||0)+1}let B=fI(U),Q=[...B].toSorted(hP);if(c.filterRepo){let j=c.filterRepo===$l?null:c.filterRepo;B.has(j)||(c.filterRepo="")}let oe=Zb(Ws(s)),re=jS(c.reports),st=re?Object.keys(re).length:0,Dt=st>1;!Dt&&c.currentView==="files"&&(c.currentView="findings"),!Dt&&c.viewMode==="graph"&&(c.viewMode="kanban");let Tn=mP(r,_,_e,Ie,st);if(c.currentView==="files"){let j=US(r,c.severityMode),ee=document.querySelector("#header-slot"),pe=document.querySelector("#tree-view-slot");(!ee||!pe||!V.contains(ee)||!V.contains(pe))&&(V.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',ee=document.querySelector("#header-slot"),pe=document.querySelector("#tree-view-slot")),ee&&xe(Tn,ee),pe&&xe(EL(re,j),pe),V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${C||"no analyzer"}`;return}let Ql=c.viewMode==="table"&&c.tableSelectedGid&&oe.some(j=>Te(j)===c.tableSelectedGid),$o=null;c.viewMode==="graph"&&re&&($o=u5(),$o||(c.viewMode="kanban"));let X=!!$o,ue="findings-content";Ql&&(ue+=" with-details"),X&&(ue+=" with-graph"),o&&(ue+=" with-kanban"),c.viewMode==="focus"&&(ue+=" with-focus");let we=b,Ke=b,ka=b,du=aP(oe,c,wP);Iv=null,X||(we=xQ(oe.length,s.length,i,J,Se,{showSource:R,showConfidence:O,showPriority:z,showGraphMode:Dt,showFileSort:K,kanbanMode:o,showRepo:!!c.currentWorkspace,hasComment:a,revalidateOptions:dn,showPartial:I,canDropLayer:e,canDetailLayer:M,canUpstreamLens:t,confirmedLocked:L,hasFix:l,hasFlagged:d,hasDuplicates:h,hasCrossContext:m,hasAppStacked:g,showSecurity:y,showSeverityMode:u||c.severityMode==="original"},{analyzers:He,models:Vt,groups:U},Q),c.shownTriage&&s.length===0?Ke=p`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:oe.length===0&&s.length>0&&!o?Ke=p`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:s.length===0&&(Ke=r.length>0?p`<p style="color:var(--green)">All ${C} issues triaged.</p>`:p`<p style="color:var(--green)">No ${C} issues found.</p>`),ka=_Q(oe,du));let wi=document.querySelector("#header-slot"),Cr=V.querySelector(":scope > .findings-content"),Mz=Cr&&Cr.querySelector(":scope > #findings-graph-slot"),Az=Cr&&Cr.querySelector(":scope > #findings-body-slot"),Iz=Cr&&(Mz?"graph":Az?"body":null)===(X?"graph":"body");if(!wi||!Cr||!V.contains(wi)||!V.contains(Cr)||!Iz){let j=X?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';V.innerHTML=`<div id="header-slot"></div><div class="${ue}">${j}</div>`,wi=document.querySelector("#header-slot"),Cr=V.querySelector(":scope > .findings-content")}else Cr.className!==ue&&(Cr.className=ue);wi&&xe(Tn,wi);let jE=document.querySelector("#toolbar-slot");jE&&xe(we,jE);let HE=document.querySelector("#empty-state-slot");HE&&xe(Ke,HE);let WE=document.querySelector("#findings-body-slot");if(WE&&xe(ka,WE),$o){let j=document.querySelector("#findings-graph-slot");if(j){let pe={extraTopRow:p`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:i,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};WS(j,$o,pe,Lv,Fv)}}if(Iv){let j=V.querySelector(".finding-table-slot");j&&(Xd||(Xd=document.createElement("finding-table")),Xd.items=Iv,Xd.selectedGid=c.tableSelectedGid,Xd.parentNode!==j&&j.append(Xd))}V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${C||"no analyzer"}`,A()&&Ve?.replaceFindingRoute(lP(du,c))}var yQ,vQ,fP,Iv,wP,Xd,kP,xP,p5,f5,$Q,EQ,RQ,hP,Av,ln=$(()=>{"use strict";P();ht();un();So();wt();uo();q();g$();gf();eI();oI();dI();co();Os();nr();Fe();Ht();po();Q$();R$();Le();qI();Qs();Hf();TL();bl();ri();VS();KS();ii();vd();ta();PO();zO();VO();ty();GO();mh();Ry();YO();eP();oP();sP();cP();id();kb();ov();a5();({suggestSync:yQ}=iP({open:e=>rP({names:e})})),vQ=new Set(["findings","files","links"]);fP=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Iv=null,wP=0,Xd=null;kP=p`<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>`,xP=p`<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>`,p5=p`<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>`,f5=p`<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>`,$Q={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};EQ=dP(TQ);RQ={"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-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"}},hP=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Av=null});function h5(){return mi?.getPreviewRole()??null}function EP(){mi?.setPreviewRole(null)}function RP(){mi?.resetManagedAppState()}function TP(e){mi?.setManagedAppSession(e)}function MP(e){return mi?.setManagedReportCatalog(e)??new Set}function Sd(e,t=c.currentManagedTeam){return mi?.readReportSources(e,t)}function cF(){mi?.clearReportSources(),mi?.clearFindingHistory()}async function Ty(e,t=c.currentManagedTeam){return(await tt()).fetchReportSources(e,t)}function tt(){return bh||(bh=(async()=>{let e="./client-managed.js";try{return mi=await import(e),mi}catch(t){throw bh=null,t}})(),bh)}async function AP(e){return(await tt()).probeSession(e)}async function IP(e){return(await tt()).probeTeams(e)}async function m5(e){return(await tt()).fetchManagedBundleCatalog(e)}async function LP(e){return(await tt()).openManagedShareDialog(e,"",c.managedSession)}async function FP(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([tt(),Promise.resolve().then(()=>(ln(),CP))]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let i=e.context.findingId,s=c.managedIssues.get(i),a=Zp([i],{[i]:{url:o,autoFix:s?.url===o?s.autoFix:null}});ad(e.teamId),a&&r()}}):null}async function BP(e){if(!gl(e))return null;let t=c.reports,n=c.managedSession,r=c.currentManagedTeam,o=()=>gl(e)&&c.managedSession===n&&c.currentManagedTeam===r&&c.reports===t,i=await tt();return o()?i.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function W7(e,t){return(await tt()).fetchTeamAnnotations(e,t)}async function R_(e,t=c.currentManagedTeam,n){return(await tt()).fetchReportTriage(e,t,n)}async function YM(e,t,n){return(await tt()).fetchFixes(e,t,n)}async function cL(e,t=c.currentManagedTeam,n){return(await tt()).fetchReportComments(e,t,n)}async function dL(e,t,n,r=c.currentManagedTeam){return(await tt()).saveReportComment(e,t,n,r)}async function uL(e,t,n,r,o=c.currentManagedTeam){return(await tt()).deleteReportComment(e,t,n,r,o)}async function V7(e,t,n,r=c.currentManagedTeam){return(await tt()).pushReportTriage(e,t,n,r)}async function dF(e){return e&&Ve?.rememberFinding(),(await tt()).login(e)}async function OP(e){return(await tt()).logout(e)}async function xy(e,t){return(await tt()).fetchBundleMetadata(e,t)}async function V8(e,t){return(await tt()).fetchBundleContents(e,t)}async function oh(e,t){return(await tt()).fetchTeamReports(e,t)}async function Y7(e,t){return(await tt()).watchTeamFeed(e,t)}async function yO(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await tt()).fetchBundleAdvisories(e,t,n,r,o)}var bh,mi,xn=$(()=>{"use strict";q();id();kb();bl();ef();bh=null,mi=null});function PP(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(s=>s.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(s=>n.has(s.id)))return!0;let o=new Set(r.reports.filter(s=>e.currentManagedReport!==null||s.visible!==!1).map(s=>s.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let i=new Set(e.managedReports.map(s=>s.id));return o.size!==i.size||[...o].some(s=>!i.has(s))}var NP=$(()=>{"use strict"});async function DP(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:i}){let s=e.currentView==="bundles"?e.bundleDetails?.managedId:null;if(!s||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,d=null;if(e.currentManagedTeam!=null||!a){let f=h=>h.bundles?.some(m=>m.id===s);d=t.find(h=>h.id===e.currentManagedTeam&&f(h))??t.find(f)}if(d)l=Bd(t);else if(a)try{l=(await n()).map(oa)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let u=l.find(f=>f.managedId===s);return u?(e.bundles=l,e.currentManagedTeam=d?.id??null,o(),i(ia(t,u,e.currentManagedTeam,e.bundleDetailsTab)),!0):!1}var zP=$(()=>{"use strict";Od()});async function UP({bundleId:e,teamId:t,bundleTab:n},r,o,i){let s=it(),a;try{a=await xy(e,{signal:Cn()})}catch{return!1}try{if(!o()||s!==it()||!A())return!1;let l=If(a,a.integrity);l.managedId=e;let d=r.find(u=>u.managedId===e);return!d||d.integrity!==a.integrity?!1:(c.bundles=r,Et(),ho(d.integrity,n),c.bundleDetails=l,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),F({animate:!1}),i(),document.querySelector("#main-content")?.scrollTo({top:0}),!0)}catch(l){return o()&&l.name!=="AbortError"&&Ot(`Couldn't open bundle: ${l.message}`,{kind:"error"}),!1}}var jP=$(()=>{"use strict";q();xn();vd();ii();ri();ln();Fl();Ml()});function MQ(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 HP(e){let t=null,n=null,r=null;return async({generation:o,session:i,signal:s,reuse:a=!1,revision:l=null})=>{if(s.aborted)return null;let d=JSON.stringify([o,i?.id,i?.role,i?.csrfToken]);if(r!==d&&(t?.controller.abort(),t=null,n=null,r=d),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 h=new AbortController,m=AbortSignal.any([s,h.signal]),g={controller:h,signal:m,promise:null,revision:l};t=g;let y=null;g.promise=e({fallback:null,signal:m,onRevision:w=>{y=w}}).then(w=>m.aborted||r!==d?null:(w!==null&&(n={teams:w,revision:y,expiresAt:MQ(w)}),w)).finally(()=>{t===g&&(t=null)})}let u=t,f=()=>u.controller.abort();s.addEventListener("abort",f,{once:!0});try{let h=await u.promise;return s.aborted||u.signal.aborted?null:h}finally{s.removeEventListener("abort",f)}}}var WP=$(()=>{"use strict"});function g5(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function VP(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(bo(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 KP(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let i=(o.reports??[]).filter(a=>r(a.filename)||r(Ne(a.filename??""))),s=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||i.length>0||s.length>0?[{team:o,reports:i,bundles:s}]:[]})}var Bv,GP=$(()=>{"use strict";u$();Ol();Bv=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 u of this.expanded.keys())o.some(f=>f.id===u)||this.expanded.delete(u);let i=t.currentView==="bundles"?t.bundleDetails?.managedId:null,s=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=i?"bundles":"reports",l=o.find(u=>u.id===t.currentManagedTeam&&(i?u.bundles?.some(f=>f.id===i):u.reports?.some(f=>f.id===s))),d=JSON.stringify([a,i||s,l?.id]);if(!(!n&&d===this.focus)&&(this.focus=d,l)){let u=this.expanded.get(l.id)??new Set;u.add(a),this.expanded.set(l.id,u)}}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}}});var YP,qP=$(()=>{YP=`*,*: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]) #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;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([data-mode="managed"]) #sidebar-toggle{display:none}: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:help;.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}#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)}.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)}.user-menu-group{display:flex;flex-direction:column;gap:.1rem;padding-bottom:.2rem;margin-bottom:.2rem;border-bottom:1px solid var(--border)}.user-menu-group-label{padding:.25rem .5rem .15rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);user-select:none}
|
|
362
|
+
`).length,i=String(o).length;return p`<div class="focus-code-lines" style="${Oe({"--lineno-width":`${i}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(s,a)=>{let l=a+1,u={"focus-code-lineno":!0,"focus-code-line-active":!!n&&l>=n.start&&l<=n.end};return p`<div class="${Y(u)}" data-focus-code-line="${l}">${l}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?te(r):t}</code></pre></div>`}function $P(e){return!e||!gl(ct(e))?b:p`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${Te(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 SP(e,t=b,n=!1){c.focusCodeTick;let r=oL(e),o=$d(e),i=r?"focus-main with-code":"focus-main",s=Oe({"--focus-split":String(c.focusSplit)});return p`<div class="${i}" style="${s}" data-gid="${Te(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?b:$P(e)} ${gh(e,!1,"focus",!1,n)}</div></div>${t} ${r?p`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${Am}" aria-valuemax="${Im}" 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??b}" data-focus-code-integrity="${r.integrity??b}">${r.loading?p`<div class="focus-code-empty">Loading source…</div>`:p`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?p`<span class="focus-code-line">:${jb(r.range)}</span>`:b} ${(o?.stack.length??0)>1?p`<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">${p5}</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">${f5}</button></div>`:b}</header><div class="focus-code-body">${SQ(r)}</div>`}</div>`:b}</div>`}function _P(e,t,n=[],r=null){if(!e&&!r)return b;let o=e?kt(e):{},i=c.kanbanDetailFullscreen,s={"kanban-detail-modal":!0,fullscreen:i,"has-conflict":o.hasConflict},a=e?Te(e):null,l=t?.items??[],d=l.findIndex(f=>Te(f)===a),u=p`<div class="kanban-detail-actions">${$P(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${i?"true":"false"}" aria-label="${i?"Back to the readable width":"Fill the available space"}">${i?xP:kP}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return p`<div class="${Y({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${Y(s)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${i&&e?b:u}<div class="kanban-detail-body">${e?i?SP(e,u,!0):gh(e,!1,"kanban-detail",!1,!0):p`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?b:p`<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 h=f.key===t.key,m=h?f.label:`${f.label} (${f.count})`;return p`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${h}" ?disabled="${f.count===0}">${m}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${d===0}" aria-label="Previous finding">${p5}</button> <span class="count">${d<0?l.length:`${d+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${d===l.length-1}" aria-label="Next finding">${f5}</button></div></div><div class="kanban-detail-side-body">${ve(l,f=>Te(f),f=>d5(f,{variant:"kanban-side",active:Te(f)===a}))}</div></aside>`}</div>`}function _Q(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?c5(e,fP):e;return r.length===0?b:(Iv=r,p`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?p`<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">${gh(t)}</div></aside>`:b}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return b;let r=e.indexOf(t);wP=r;let o=t,i=r===0,s=r===e.length-1;return p`<div class="focus-view">${SP(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="${i}" aria-label="Previous finding">${p5}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${s}" aria-label="Next finding">${f5}</button></div></div><div class="focus-sidebar-body">${ve(e,a=>Te(a),a=>d5(a,{variant:"focus",active:Te(a)===Te(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(u=>[u.key,[]]));for(let u of e){let h=kt(u).commonTriage??"untriaged",m=o.get(h);m&&m.push(u)}let i=r.some(u=>u.key===c.kanbanExpandedColumn)?c.kanbanExpandedColumn:null,s=i?r.filter(u=>u.key===i):r,a={"--kanban-cols":String(r.length)},l=t,d=l?r.find(u=>u.key===(kt(l).commonTriage??"untriaged")):null;return p`<div class="kanban-board" style="${Oe(a)}">${ve(s,u=>u.key,u=>{let f=o.get(u.key),h=u.key===i;return p`<div class="${`kanban-column kanban-column-${u.key}${h?" expanded":""}`}" data-kanban-target="${u.key}"><div class="kanban-column-header"><span class="label">${u.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${u.key}" aria-pressed="${h}" aria-label="${h?"Show all columns":`Show only ${u.label}`}">${h?xP:kP}</button></div><div class="kanban-column-body">${f.length===0?p`<div class="kanban-empty">No ${u.label.toLowerCase()} findings.</div>`:ve(f,m=>Te(m),(m,g)=>d5(m,{active:Te(m)===c.kanbanPopoverGid,expandedTrackLast:(g+1)%r.length===0}))}</div></div>`})}</div>${_P(l,d&&{key:d.key,label:d.label,items:o.get(d.key)},r.map(u=>{let f=o.get(u.key);return{key:u.key,label:u.label,count:f.length,firstGid:f.length>0?Te(f[0]):""}}))}`}if(c.viewMode==="grouped"){let r=new Map;for(let i of e){let s=Bi(i).file;r.has(s)||r.set(s,[]),r.get(s).push(i)}let o=c.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return p`${ve(o,i=>i,i=>{let s=c.sortBy==="file"?c5(r.get(i),(l,d)=>parseInt(l.line,10)-parseInt(d.line,10)):r.get(i),a=Bi(s[0]);return p`<div class="file-group"><div class="file-header"><span>${$$(a,Xn(a))}</span> <span class="count">${s.length}</span></div><div class="file-body">${ve(s,l=>Te(l),l=>gh(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?c5(e,fP):e;return p`${ve(n,r=>Te(r),r=>{let o=ct(r),i=HA(o,Xn(o)),s=kl(o),a=_i(o),l=r.length>1;return p`<div class="${Y({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${$$(o,Xn(o))}</span> ${i===b?b:p`<span class="line-num">${i}</span>`} ${a?p`<span class="meta">${a}</span>`:b} ${s?p`<span class="run-meta">${s}</span>`:b}</div>${gh(r,!0,null,!0)}</div>`})}`}function CQ(){c.bundleSourceFile&&Al().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&xe(TO(),e)}function F(){EQ(c.currentView)}function fa(e){let t=document.querySelector(`#${e}`);return(!t||!V.contains(t)||V.firstElementChild!==t)&&(V.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function rh(){let e=rv(c,de(),Lt);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=fa("empty-workspace-slot");t&&xe(p`${mP([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),V.classList.add("active"),mt.classList.add("hidden")}function Dd(){let e=c.revalidateConflicts.size>0,t=!e&&Bb(c.reports);return e?c.showRevalidation!==!1&&(Av=c.showRevalidation,c.showRevalidation=!1):(Av!==null&&(c.showRevalidation=Av,Av=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),Ns(c.showRevalidation,c.upstreamOnly),t}function TQ(){vr()||ey(),CQ(),zb(c.reports),yg()&&queueMicrotask(()=>{We()}),Ub(c.reports)&&Ks();let e=Dd(),t=c.reports.some(j=>(j.groups??[]).some(ee=>ee.some(fe=>fe.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let j=c.currentView.slice(10),ee=rv(c,de(),Lt),fe=fa("workspace-content-slot");fe&&xe(Q7(ee,j,c.workspaceContentFileCount),fe),document.title=ee?`${ee.title} \u2014 ${j}`:`DeepView \u2014 ${j}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Ys(c.bundleDetailsTab,c.bundleSourceFile)&&Al().catch(()=>{});let j=fa("bundles-slot");j&&xe(LO(c.bundles),j);let ee=c.bundleDetails,fe=c.selectedBundle&&ee&&(ee.json||ee.bundle);if(fe&&c.bundleDetailsTab==="graph"){let at=document.querySelector("#bundle-graph-slot");if(at){let Mn=_O(c.bundleDetails);if(Mn){CO(Mn);let Lz={hideAllFiles:!0,triageCounts:SO(c.bundleDetails,new Set(Mn.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:Mn.canPackagesView,showBundleLayouts:!0};WS(at,Mn,Lz,Ev,Rv)}}}if(fe&&!ee.metadataOnly&&c.bundleDetailsTab==="terminal"){let at=document.querySelector("#bundle-terminal-slot");at&&IL(at,c.bundleDetails)}V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 bundles";return}if(c.currentView==="packages"){let j=fa("packages-slot");j&&xe(FO(),j),V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let j=fa("repositories-slot");j&&xe(NO(),j),V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let j=fa("links-slot"),ee=vr();j&&xe(p`${WO(gP())}${ee?_P(ee.group,null,[],ee):b}`,j),V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let j=fa("scan-slot");if(j&&!j.firstElementChild){let ee=document.createElement("local-scan-page");ee.selection=c.scanSelection,j.append(ee),ee.updateComplete.then(()=>Jn(ee.renderRoot,{gate:fe=>!Object.hasOwn(fe.dataset,"tooltipTruncated")||fe.scrollWidth>fe.clientWidth}))}V.classList.add("active"),mt.classList.add("hidden"),document.title="DeepView \u2014 scans";return}let n=RQ[c.currentView];if(n){let j=fa(n.slot);j?.classList.add("managed-page-slot");let ee=j?.firstElementChild?.session;if((ee?.id!==c.managedSession?.id||ee?.role!==c.managedSession?.role)&&j?.replaceChildren(),j&&!j.firstElementChild){let fe=document.createElement(n.tag),at=Mn=>Jn(Mn,{gate:Ah=>!Object.hasOwn(Ah.dataset,"tooltipTruncated")||Ah.scrollWidth>Ah.clientWidth});fe.localImportSource=wx(),c.currentView==="manage-import"&&(fe.localDeps=vx(),fe.promptPassword=Fb,fe.resolveConflicts=hd,fe.confirmTriageImport=QA,fe.confirmContentImport=rI,fe.showTriageComparison=cI),fe.session=c.managedSession,fe.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(fe.selection=c.scanSelection),c.currentView==="manage-bundles"&&(fe.createRepoId=c.bundleCreationRepoId,fe.installTooltips=at),j.append(fe),(async()=>{await customElements.whenDefined(n.tag),await fe.updateComplete,at(fe.renderRoot)})().catch(()=>{})}j?.firstElementChild&&(j.firstElementChild.session=c.managedSession,j.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&j?.firstElementChild&&(j.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&j?.firstElementChild&&(j.firstElementChild.createRepoId=c.bundleCreationRepoId),V.classList.add("active"),mt.classList.add("hidden"),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&rh();return}let r=kr(),o=c.viewMode==="kanban",i={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},s=[];for(let j of r){let ee=kt(j).commonTriage;ee&&i[ee]++,(o||ee===c.shownTriage)&&s.push(j)}Object.defineProperty(s,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,d=!1,u=!1;for(let j of r)for(let ee of j){or(ee)&&(u=!0);let fe=Ye(ee);qo(ee)&&(l=!0),fe&&(fe.comment&&(a=!0),fe.fix&&(l=!0),fe.flagged===!0&&(d=!0))}let f=Yb(),h=r.some(j=>j.some(ee=>f.has(ee.id)));h||(c.filterDuplicates="");let m=s.some(P$),g=s.some(N$);m||(c.filterCrossContext=""),g||(c.filterAppStacked="");let y=SI(s);y||(c.filterSecurity="");let w=new Set,x=!1,v=!1,k=!1;for(let j of s)for(let ee of j){let fe=yr(ee);fe&&w.add(fe)}for(let j of J$()){let ee=!1,fe=!1;for(let at of j){let Mn=et(at);Mn==="partial"&&(v=!0),!((Mn==="unreachable"||Mn==="refuted")&&(k=!0,c.currentWorkspace))&&(Mn==="revalidation"?ee=!0:fe=!0)}ee&&fe&&(x=!0)}let C=[...new Set(c.reports.map(j=>j.type))].join(", "),_=c.reports.map(j=>j.fileName),E=s.map(jr).filter(j=>j.length>0),O=E.length>0&&L$(E),z=O$(r),T=r.some(j=>j.some(ee=>Sn(ee.file))),D=r.some(j=>j.some(ee=>!Sn(ee.file))),K=!1,Z=!1,ae;e:for(let j of r)for(let ee of j)if(!Z)Z=!0,ae=ee.file;else if(ee.file!==ae){K=!0;break e}let _e=r.some(j=>j.some(ee=>!ee.repo?.github&&!Sn(ee.file))),Ce=new Set;for(let j of r)for(let ee of j)!Sn(ee.file)&&ee.repo?.github&&Ce.add(ee.repo.github);let Ie=Ce.size===1?[...Ce][0]:null,Re=new Set,ne=new Set;for(let j of r)for(let ee of j)Re.add(ee._analyzer??null),ne.add(yf(ee));let Ue=Object.keys(Z$),je=j=>{if(j==null)return 1/0;let ee=Ue.indexOf(j);return ee===-1?Ue.length:ee},He=[...Re].toSorted((j,ee)=>{let fe=je(j),at=je(ee);return fe!==at?fe-at:String(j??"").localeCompare(String(ee??""))}),Vt=[...ne].toSorted(hP);if(c.filterAnalyzer){let j=c.filterAnalyzer===js?null:c.filterAnalyzer;(!Re.has(j)||Re.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let j=c.filterModel===Hs?null:c.filterModel;(!ne.has(j)||ne.size<2)&&(c.filterModel="")}let dn=MA(w);c.filterRevalidate&&!dn.some(j=>j.value===c.filterRevalidate)&&(c.filterRevalidate="");let L=Xb(s);L&&(c.filterRevalidate="confirmed");let I=w.has("partial")&&Oi();I||(c.filterPartial="");let M=e&&(x||v||!c.currentWorkspace&&k),R=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&T&&D;!R&&c.filterSources.size>0&&c.filterSources.clear(),O||(c.filterConfMin=0,c.filterConfMax=10,(c.sortBy==="confidence-desc"||c.sortBy==="confidence-asc")&&(c.sortBy="severity")),!z&&(c.sortBy==="priority-desc"||c.sortBy==="priority-asc")&&(c.sortBy="severity"),!K&&c.sortBy==="file"&&(c.sortBy="severity");let U=_I(s),J={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Se={red:0,blue:0,green:0,gray:0,none:0};for(let j of U){if(j.length===1){let at=Me(j[0],c.severityMode);J[at]=(J[at]||0)+1;let Mn=Ye(j[0])?.color??"none";Se[Mn]=(Se[Mn]||0)+1;continue}let ee=new Set(j.map(at=>Me(at,c.severityMode)));for(let at of ee)J[at]=(J[at]||0)+1;let fe=new Set(j.map(at=>Ye(at)?.color??"none"));for(let at of fe)Se[at]=(Se[at]||0)+1}let B=fI(U),Q=[...B].toSorted(hP);if(c.filterRepo){let j=c.filterRepo===$l?null:c.filterRepo;B.has(j)||(c.filterRepo="")}let oe=Zb(Ws(s)),re=jS(c.reports),st=re?Object.keys(re).length:0,Dt=st>1;!Dt&&c.currentView==="files"&&(c.currentView="findings"),!Dt&&c.viewMode==="graph"&&(c.viewMode="kanban");let Tn=mP(r,_,_e,Ie,st);if(c.currentView==="files"){let j=US(r,c.severityMode),ee=document.querySelector("#header-slot"),fe=document.querySelector("#tree-view-slot");(!ee||!fe||!V.contains(ee)||!V.contains(fe))&&(V.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',ee=document.querySelector("#header-slot"),fe=document.querySelector("#tree-view-slot")),ee&&xe(Tn,ee),fe&&xe(EL(re,j),fe),V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${C||"no analyzer"}`;return}let Ql=c.viewMode==="table"&&c.tableSelectedGid&&oe.some(j=>Te(j)===c.tableSelectedGid),$o=null;c.viewMode==="graph"&&re&&($o=u5(),$o||(c.viewMode="kanban"));let X=!!$o,pe="findings-content";Ql&&(pe+=" with-details"),X&&(pe+=" with-graph"),o&&(pe+=" with-kanban"),c.viewMode==="focus"&&(pe+=" with-focus");let we=b,Ke=b,ka=b,du=aP(oe,c,wP);Iv=null,X||(we=xQ(oe.length,s.length,i,J,Se,{showSource:R,showConfidence:O,showPriority:z,showGraphMode:Dt,showFileSort:K,kanbanMode:o,showRepo:!!c.currentWorkspace,hasComment:a,revalidateOptions:dn,showPartial:I,canDropLayer:e,canDetailLayer:M,canUpstreamLens:t,confirmedLocked:L,hasFix:l,hasFlagged:d,hasDuplicates:h,hasCrossContext:m,hasAppStacked:g,showSecurity:y,showSeverityMode:u||c.severityMode==="original"},{analyzers:He,models:Vt,groups:U},Q),c.shownTriage&&s.length===0?Ke=p`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:oe.length===0&&s.length>0&&!o?Ke=p`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:s.length===0&&(Ke=r.length>0?p`<p style="color:var(--green)">All ${C} issues triaged.</p>`:p`<p style="color:var(--green)">No ${C} issues found.</p>`),ka=_Q(oe,du));let wi=document.querySelector("#header-slot"),Cr=V.querySelector(":scope > .findings-content"),Mz=Cr&&Cr.querySelector(":scope > #findings-graph-slot"),Az=Cr&&Cr.querySelector(":scope > #findings-body-slot"),Iz=Cr&&(Mz?"graph":Az?"body":null)===(X?"graph":"body");if(!wi||!Cr||!V.contains(wi)||!V.contains(Cr)||!Iz){let j=X?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';V.innerHTML=`<div id="header-slot"></div><div class="${pe}">${j}</div>`,wi=document.querySelector("#header-slot"),Cr=V.querySelector(":scope > .findings-content")}else Cr.className!==pe&&(Cr.className=pe);wi&&xe(Tn,wi);let jE=document.querySelector("#toolbar-slot");jE&&xe(we,jE);let HE=document.querySelector("#empty-state-slot");HE&&xe(Ke,HE);let WE=document.querySelector("#findings-body-slot");if(WE&&xe(ka,WE),$o){let j=document.querySelector("#findings-graph-slot");if(j){let fe={extraTopRow:p`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:i,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};WS(j,$o,fe,Lv,Fv)}}if(Iv){let j=V.querySelector(".finding-table-slot");j&&(Xd||(Xd=document.createElement("finding-table")),Xd.items=Iv,Xd.selectedGid=c.tableSelectedGid,Xd.parentNode!==j&&j.append(Xd))}V.classList.add("active"),mt.classList.add("hidden"),document.title=`DeepView \u2014 ${C||"no analyzer"}`,A()&&Ve?.replaceFindingRoute(lP(du,c))}var yQ,vQ,fP,Iv,wP,Xd,kP,xP,p5,f5,$Q,EQ,RQ,hP,Av,ln=$(()=>{"use strict";P();ht();un();So();wt();uo();q();g$();gf();eI();oI();dI();co();Os();nr();Fe();Ht();po();Q$();R$();Le();qI();Qs();Hf();TL();bl();ri();VS();KS();ii();vd();ta();PO();zO();VO();ty();GO();mh();Ry();YO();eP();oP();sP();cP();id();kb();ov();a5();({suggestSync:yQ}=iP({open:e=>rP({names:e})})),vQ=new Set(["findings","files","links"]);fP=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Iv=null,wP=0,Xd=null;kP=p`<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>`,xP=p`<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>`,p5=p`<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>`,f5=p`<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>`,$Q={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};EQ=dP(TQ);RQ={"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-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"}},hP=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Av=null});function h5(){return mi?.getPreviewRole()??null}function EP(){mi?.setPreviewRole(null)}function RP(){mi?.resetManagedAppState()}function TP(e){mi?.setManagedAppSession(e)}function MP(e){return mi?.setManagedReportCatalog(e)??new Set}function Sd(e,t=c.currentManagedTeam){return mi?.readReportSources(e,t)}function cF(){mi?.clearReportSources(),mi?.clearFindingHistory()}async function Ty(e,t=c.currentManagedTeam){return(await tt()).fetchReportSources(e,t)}function tt(){return bh||(bh=(async()=>{let e="./client-managed.js";try{return mi=await import(e),mi}catch(t){throw bh=null,t}})(),bh)}async function AP(e){return(await tt()).probeSession(e)}async function IP(e){return(await tt()).probeTeams(e)}async function m5(e){return(await tt()).fetchManagedBundleCatalog(e)}async function LP(e){return(await tt()).openManagedShareDialog(e,"",c.managedSession)}async function FP(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([tt(),Promise.resolve().then(()=>(ln(),CP))]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let i=e.context.findingId,s=c.managedIssues.get(i),a=Zp([i],{[i]:{url:o,autoFix:s?.url===o?s.autoFix:null}});ad(e.teamId),a&&r()}}):null}async function BP(e){if(!gl(e))return null;let t=c.reports,n=c.managedSession,r=c.currentManagedTeam,o=()=>gl(e)&&c.managedSession===n&&c.currentManagedTeam===r&&c.reports===t,i=await tt();return o()?i.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function W7(e,t){return(await tt()).fetchTeamAnnotations(e,t)}async function R_(e,t=c.currentManagedTeam,n){return(await tt()).fetchReportTriage(e,t,n)}async function YM(e,t,n){return(await tt()).fetchFixes(e,t,n)}async function cL(e,t=c.currentManagedTeam,n){return(await tt()).fetchReportComments(e,t,n)}async function dL(e,t,n,r=c.currentManagedTeam){return(await tt()).saveReportComment(e,t,n,r)}async function uL(e,t,n,r,o=c.currentManagedTeam){return(await tt()).deleteReportComment(e,t,n,r,o)}async function V7(e,t,n,r=c.currentManagedTeam){return(await tt()).pushReportTriage(e,t,n,r)}async function dF(e){return e&&Ve?.rememberFinding(),(await tt()).login(e)}async function OP(e){return(await tt()).logout(e)}async function xy(e,t){return(await tt()).fetchBundleMetadata(e,t)}async function V8(e,t){return(await tt()).fetchBundleContents(e,t)}async function oh(e,t){return(await tt()).fetchTeamReports(e,t)}async function Y7(e,t){return(await tt()).watchTeamFeed(e,t)}async function yO(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await tt()).fetchBundleAdvisories(e,t,n,r,o)}var bh,mi,xn=$(()=>{"use strict";q();id();kb();bl();ef();bh=null,mi=null});function PP(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(s=>s.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(s=>n.has(s.id)))return!0;let o=new Set(r.reports.filter(s=>e.currentManagedReport!==null||s.visible!==!1).map(s=>s.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let i=new Set(e.managedReports.map(s=>s.id));return o.size!==i.size||[...o].some(s=>!i.has(s))}var NP=$(()=>{"use strict"});async function DP(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:i}){let s=e.currentView==="bundles"?e.bundleDetails?.managedId:null;if(!s||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,d=null;if(e.currentManagedTeam!=null||!a){let f=h=>h.bundles?.some(m=>m.id===s);d=t.find(h=>h.id===e.currentManagedTeam&&f(h))??t.find(f)}if(d)l=Bd(t);else if(a)try{l=(await n()).map(oa)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let u=l.find(f=>f.managedId===s);return u?(e.bundles=l,e.currentManagedTeam=d?.id??null,o(),i(ia(t,u,e.currentManagedTeam,e.bundleDetailsTab)),!0):!1}var zP=$(()=>{"use strict";Od()});async function UP({bundleId:e,teamId:t,bundleTab:n},r,o,i){let s=it(),a;try{a=await xy(e,{signal:Cn()})}catch{return!1}try{if(!o()||s!==it()||!A())return!1;let l=If(a,a.integrity);l.managedId=e;let d=r.find(u=>u.managedId===e);return!d||d.integrity!==a.integrity?!1:(c.bundles=r,Et(),ho(d.integrity,n),c.bundleDetails=l,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),F({animate:!1}),i(),document.querySelector("#main-content")?.scrollTo({top:0}),!0)}catch(l){return o()&&l.name!=="AbortError"&&Ot(`Couldn't open bundle: ${l.message}`,{kind:"error"}),!1}}var jP=$(()=>{"use strict";q();xn();vd();ii();ri();ln();Fl();Ml()});function MQ(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 HP(e){let t=null,n=null,r=null;return async({generation:o,session:i,signal:s,reuse:a=!1,revision:l=null})=>{if(s.aborted)return null;let d=JSON.stringify([o,i?.id,i?.role,i?.csrfToken]);if(r!==d&&(t?.controller.abort(),t=null,n=null,r=d),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 h=new AbortController,m=AbortSignal.any([s,h.signal]),g={controller:h,signal:m,promise:null,revision:l};t=g;let y=null;g.promise=e({fallback:null,signal:m,onRevision:w=>{y=w}}).then(w=>m.aborted||r!==d?null:(w!==null&&(n={teams:w,revision:y,expiresAt:MQ(w)}),w)).finally(()=>{t===g&&(t=null)})}let u=t,f=()=>u.controller.abort();s.addEventListener("abort",f,{once:!0});try{let h=await u.promise;return s.aborted||u.signal.aborted?null:h}finally{s.removeEventListener("abort",f)}}}var WP=$(()=>{"use strict"});function g5(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function VP(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(bo(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 KP(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let i=(o.reports??[]).filter(a=>r(a.filename)||r(Ne(a.filename??""))),s=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||i.length>0||s.length>0?[{team:o,reports:i,bundles:s}]:[]})}var Bv,GP=$(()=>{"use strict";u$();Ol();Bv=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 u of this.expanded.keys())o.some(f=>f.id===u)||this.expanded.delete(u);let i=t.currentView==="bundles"?t.bundleDetails?.managedId:null,s=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=i?"bundles":"reports",l=o.find(u=>u.id===t.currentManagedTeam&&(i?u.bundles?.some(f=>f.id===i):u.reports?.some(f=>f.id===s))),d=JSON.stringify([a,i||s,l?.id]);if(!(!n&&d===this.focus)&&(this.focus=d,l)){let u=this.expanded.get(l.id)??new Set;u.add(a),this.expanded.set(l.id,u)}}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}}});var YP,qP=$(()=>{YP=`*,*: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]) #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;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([data-mode="managed"]) #sidebar-toggle{display:none}: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:help;.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}#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)}.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)}.user-menu-group{display:flex;flex-direction:column;gap:.1rem;padding-bottom:.2rem;margin-bottom:.2rem;border-bottom:1px solid var(--border)}.user-menu-group-label{padding:.25rem .5rem .15rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);user-select:none}
|
|
363
363
|
`});var ha,yh=$(()=>{ha=`: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)}
|
|
364
364
|
`});async function b5(){if(!en)return;if(await Qt(),A()){en.hidden=!0;return}if(!Io()){en.hidden=!0;return}let e=De();en.hidden=!1;let t=Vn();en.classList.toggle("encrypted",e&&t),en.classList.toggle("locked-pending",e&&!t),e&&t?(en.dataset.tooltip="Encryption on \u2014 click to disable",en.setAttribute("aria-label","Disable encryption"),xe(JP,en)):e?(en.dataset.tooltip="Encryption on, locked \u2014 click to unlock",en.setAttribute("aria-label","Unlock encrypted data"),xe(JP,en)):(en.dataset.tooltip="Encryption off \u2014 click to enable",en.setAttribute("aria-label","Enable encryption"),xe(LQ,en))}async function FQ(){if(confirm(`Disable encryption?
|
|
365
365
|
|
|
@@ -374,10 +374,10 @@ To complete cleanup, remove the DeepView passkey from your password manager / OS
|
|
|
374
374
|
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function XP(){b5()}function ZP(e){if(!e||e===en)return;en=e;let t=!1;en.addEventListener("click",async()=>{if(await Qt(),!A()&&!t){t=!0;try{if(!De()){await Yy();return}if(!Vn()){await Xy();return}await FQ()}finally{t=!1}}}),At(b5),b5()}var JP,LQ,en,y5=$(()=>{"use strict";P();q();m_();y_();ui();JP=p`<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>`,LQ=p`<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>`,en=null});var eN,QP=$(()=>{eN=`.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}
|
|
375
375
|
`});function w5(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}function tN(){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 v5,nN=$(()=>{"use strict";P();Ee();q();QP();v5=class extends H{static styles=[...H.styles,N(eN)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await Zc()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?p`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:b;return p`<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 p`<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 p`<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=w5(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return p`<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?p`<span class="spd-denied" role="status">Still not granted.</span>`:b} <span class="nwd-spacer"></span> ${t==="webkit"?b:p`<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",v5)});function x5(){return w5()==="webkit"}function rN(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 oN(){if(!bi)return;if(A()||!gi||gi.persisted!==!1||!$5){bi.hidden=!0;return}bi.hidden=!1;let e=gi.usage===null||gi.quota===null?"":` Using ${rN(gi.usage)} of ${rN(gi.quota)}.`;bi.querySelector(".storage-label").textContent="Storage at risk",bi.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. "+(x5()?"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 sN(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!x5()&&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 `+(x5()?"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 Pv(){if(await Qt(),!bi||A()){oN();return}let[e,t]=await Promise.all([kx(),(async()=>{try{return(await Pe()).length>0||await Tc()}catch{return!1}})()]);gi=e,$5=t,oN()}function S5(){!bi||k5||(k5=setTimeout(()=>{k5=0,Pv()},1e3))}async function iN(){if(Ov||(await Pv(),A()||gi?.persisted!==!1||!$5||Ov))return;Ov=!0;let e=await Zc();sN(e,!1),await Pv()}async function OQ(){if(gi&&gi.persisted===!1){Ov=!0;let e=await Zc();sN(e,!0),e||await tN()}await Pv()}function aN(e){bi=e,bi&&(bi.addEventListener("click",()=>{OQ()}),Kn((t,n)=>{S5(),n==="save"&&iN()}),iN())}var bi,gi,$5,Ov,k5,lN=$(()=>{"use strict";q();ui();nN();bi=null,gi=null,$5=!1,Ov=!1,k5=0});function _5(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);xe(n.length>0?p`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${ve(n,r=>r.id,r=>{let o=ul(r),i=r.reports.filter(s=>Lt(s)!==vt).length;return p`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${te(Ls)} <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 `:""}${i.toLocaleString()} report${i===1?"":"s"}</span></span></button>`})}</div></nav>`:b,t)}var cN=$(()=>{"use strict";P();un();wt();q();jt()});function C5(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:i=[],alternateMode:s="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),d=l?.querySelector(".managed-landing");if(!d)return;let u=t==="managed",f=t==="local",h=u&&(n?n.role!=="none"&&o:r);h?ma?ma.options=e:ma={options:e,elapsed:!1,timer:setTimeout(()=>{ma.elapsed=!0,C5(ma.options)},1e3)}:(clearTimeout(ma?.timer),ma=null);let m=h&&!ma.elapsed;l.dataset.serverMode=u?"managed":"local",l.setAttribute("aria-label",u?m?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let g=l.querySelector(".drop-local-copy");if(g&&(g.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!u||m){xe(b,d);return}let y=n?.role==="admin"||n?.role==="manage",w=i.filter(x=>x.reports.length>0||x.bundles?.length>0);if(Ko()&&!n){xe(p`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,d);return}xe(n==null?p`<section class="managed-login" aria-labelledby="managed-login-title"><h1 id="managed-login-title">Log in to DeepView</h1><p>Access your team's security reports and findings.</p><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}">${s} mode</button></div></section>`:n.role==="none"?p`<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>`:p`<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?p`<nav class="managed-team-list" aria-label="Teams">${ve(w,x=>x.id,x=>p`<button type="button" class="managed-team-button" data-managed-team="${x.id}"><span class="managed-team-icon" aria-hidden="true">${te(Ls)}</span> <span class="managed-team-copy"><strong>${x.name}</strong> <span>${x.reports.length} ${x.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>`:p`<p class="managed-landing-empty">No team reports are available yet.</p>`} ${y?p`<nav class="managed-content-links" aria-label="Content and activity">${[["manage-bundles","Bundles",Yn],["manage-scans","Scans",cd],["manage-reports","Reports",dd]].map(([x,v,k])=>p`<button type="button" class="managed-content-card" data-managed-page="${x}"><span class="managed-content-icon" aria-hidden="true">${te(k)}</span> <span>${v}</span></button>`)}</nav><div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${te(Eb)}</span><span>Manage</span></button></div>`:b}`,d)}var ma,dN=$(()=>{"use strict";P();un();wt();jt();ml();ma=null});var Nv,E5=$(()=>{Nv=`.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}}
|
|
376
376
|
`});function uN({workspace:e}={}){return Ps("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}var NQ,R5,pN=$(()=>{"use strict";P();q();nr();Ee();Zo();vl();E5();NQ=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],R5=class extends H{static styles=[...H.styles,N(Dr),N(Nv)];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 Ox(this.workspace):await Bx(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;Si(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 Vb({tabs:NQ,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 p`<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?p`<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>`:b} ${this._noPassword?p`<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>`:b} ${!this._noPassword&&!t?p`<p class="wsl-error" role="alert">Passwords don't match.</p>`:b}`}_rawPanel(){let t=this._reportCount(),n=this._bundleCount();return p`<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?p`— and none of this workspace's ${n} attached bundle${n===1?"":"s"}`:b}.</p><p>This file is written unencrypted: anyone who obtains it can read every report in it.</p></div>${t===0?p`<p class="wsl-error" role="alert">This workspace has no reports to export.</p>`:b}`}_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 p`<div role="tabpanel" id="${`wsl-panel-${this._tab}`}" aria-labelledby="${`wsl-tab-${this._tab}`}">${this._tab==="raw"?this._rawPanel():this._workspacePanel()}</div>${this._error?p`<p class="wsl-error" role="alert">${this._error}</p>`:b}<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 p`<dialog @close="${this._onClose}"><header>${this._tabsTemplate()}</header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",R5)});async function fN(e){await uN({workspace:e})}var hN=$(()=>{"use strict";pN()});function mN(){return ge("new-workspace-dialog")}var T5,gN=$(()=>{"use strict";P();Ee();T5=class extends H{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 p`<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",T5)});function bN({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return ge("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var M5,yN=$(()=>{"use strict";P();Ee();Fi();M5=class extends H{static styles=[...H.styles,N(_n)];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?p`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?p`<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>`:p`<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",i=t===1?"it":"them",s=t===1?"stays":"stay",a=t===1?"is removed":"are removed",l=n>0?p`<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>`:"",d=r?p`<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 ${i} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${s} 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 ${i} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${a} from this browser.</span></span></label></fieldset>`:n>0?p`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:p`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return p`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${d} ${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",M5)});function vN({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let i=document.createElement("workspace-share-link-dialog");i.workspaceId=e??"",i.initialName=t??"",i.privateKeyBase64=n??"",i.addEventListener("resolve",()=>{i.remove(),r()}),i.addEventListener("modal-conflict",s=>{i.privateKeyBase64="",i.remove(),o(oc(s.detail?.cause))}),document.body.append(i)})}var A5,wN=$(()=>{"use strict";P();q();nr();Ee();vl();A5=class extends H{static styles=[...H.styles,N(Dr)];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 zx({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=jx(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?p`<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?p`<p class="wsl-error" role="alert">${this._error}</p>`:b}<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>`:p`<label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> <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?p`<p class="wsl-error" role="alert">${this._error}</p>`:b} ${this._password&&this._confirm&&this._password!==this._confirm?p`<p class="wsl-error" role="alert">Passwords don't match.</p>`:b}<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 p`<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",A5)});function kN({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return ge("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var I5,xN=$(()=>{"use strict";P();Ee();Us();I5=class extends Xt{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?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).</p>`:b}_triageSection(){let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?p`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?p`<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>`:p`<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 p`<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",I5)});function $N({name:e,inRemote:t}={}){return ge("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var L5,SN=$(()=>{"use strict";P();Ee();Us();L5=class extends Xt{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?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).</p>`:b}render(){return p`<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",L5)});function _N({name:e,workspaceName:t}={}){return ge("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var F5,CN=$(()=>{"use strict";P();Ee();Us();F5=class extends Xt{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return p`<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",F5)});function EN({name:e,workspaceName:t}={}){return ge("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var B5,RN=$(()=>{"use strict";P();Ee();Us();B5=class extends Xt{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return p`<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",B5)});function TN(){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 O5,MN=$(()=>{"use strict";P();Ee();O5=class extends H{_onConfirm=()=>this._finish(!0);render(){return p`<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",O5)});function AN(){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 P5,IN=$(()=>{"use strict";P();Ee();P5=class extends H{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return p`<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",P5)});async function LN(e,{openManagedReport:t,readTeam:n=oh,isCurrent:r=()=>!0}){let o=c.managedSession,i=()=>r()&&A()&&c.managedSession?.id===o?.id&&c.managedSession?.role===o?.role,s=c.managedTeams;if(!i())return null;async function a(m,g){return!i()||(c.currentManagedTeam!==m.id||c.currentManagedReport!==g)&&!await t(m,g)||!i()||c.currentManagedTeam!==m.id||c.currentManagedReport!==g?null:Xs(e.id)}if(e.teamId){let m=s.find(g=>g.id===e.teamId);return!m||e.reportId&&!m.reports.some(g=>g.id===e.reportId)?null:a(m,e.reportId??null)}let l=s.flatMap(m=>m.reports.map(g=>({team:m,report:g}))),d=new Set,u=new Map;async function f(m){for(let{team:g,report:y}of m){if(!i())return null;if(d.has(`${g.id}:${y.id}`))continue;d.add(`${g.id}:${y.id}`),u.has(g.id)||u.set(g.id,await n(g.id));let w=u.get(g.id)?.find(v=>v.id===y.id);if(!i())return null;if(w==null)continue;let x=await L7(JSON.stringify(w.data),y.filename);if(!i())return null;if(x?.findings.some(v=>v.id===e.id))return a(g,y.id)}return null}if(e.report){let m=await Promise.all(l.map(({report:y})=>yn("report",y.filename))),g=await f(l.filter((y,w)=>m[w]===e.report));if(g||!i())return g}if(e.workspace){let m=await Promise.all(s.map(y=>yn("workspace",`managed-team:${y.id}`))),g=s[m.indexOf(e.workspace)];if(g){let y=await a(g,null);if(y||!i())return y}}if(!i())return null;let h=s.find(m=>m.id===c.currentManagedTeam);if(h&&(c.currentManagedReport==null||h.reports.some(m=>m.id===c.currentManagedReport))){let m=Xs(e.id);if(m)return m}return f(l)}var FN=$(()=>{"use strict";q();f_();xn();Zs()});async function BN(e,t,n,{openReport:r,openManagedReport:o}){if(A()){let i=c.managedTeams.find(s=>s.id===c.currentManagedTeam);if(!n||!i?.reports.some(s=>s.id===n)||(c.currentManagedReport!==n||c.currentWorkspace)&&!await o(i,n)||!A()||c.currentManagedTeam!==i.id||c.currentManagedReport!==n||c.currentWorkspace)return null}else if(n||((c.currentFile!==t||c.currentWorkspace)&&await r(t),A()||c.currentFile!==t||c.currentWorkspace))return null;return Xs(e)}async function ON(e,t){if(A())return LN(e,t);let{openReport:n,openWorkspace:r}=t,[o,i]=await Promise.all([G1(e.report),K1(e.workspace)]);async function s(u){let f=Js(u,i?.id);return(c.currentFile!==u||c.currentWorkspace||c.currentReportWorkspace!==f)&&await n(u,void 0,{workspaceId:f}),Xs(e.id)}if(o){let u=await s(o);if(u)return u}if(i){c.currentWorkspace!==i.id&&await r(i.id);let u=Xs(e.id);if(u)return u}let a=Xs(e.id);if(a)return a;let l=c.reports.map(u=>u.fileName).filter(Boolean),d=await q1(e.id,{skip:l});return d?await s(d):null}var PN=$(()=>{"use strict";q();Zs();FN()});function zQ(e){let t=DN.get(e);if(t===void 0){let n=getComputedStyle(e).overflowY;t=n==="auto"||n==="scroll"||n==="overlay",DN.set(e,t)}return t}function z5(e){let t=e.parentNode;for(;t;){if(t.nodeType===Node.DOCUMENT_FRAGMENT_NODE){t=t.host??null;continue}if(t.nodeType!==Node.ELEMENT_NODE||t===document.documentElement)return null;if(zQ(t))return t;t=t.parentNode}return null}function UQ(e){for(let t of e)Zd.get(t.target)?.cb(t.isIntersecting)}function jQ(e){let t=e??document,n=NN.get(t);return n||(n=new IntersectionObserver(UQ,{root:e,rootMargin:DQ,threshold:0}),NN.set(t,n)),n}function Qd(e,t){let n=Zd.get(e);n?.io&&n.io.unobserve(e),Zd.set(e,{cb:t,io:null}),N5.push(e),D5||(D5=!0,queueMicrotask(HQ))}function HQ(){D5=!1;let e=N5;N5=[];for(let t of e){let n=Zd.get(t);!n||n.io||(n.io=jQ(z5(t)),n.io.observe(t))}}function Gi(e){let t=Zd.get(e);t&&(t.io?.unobserve(e),Zd.delete(e))}var DQ,NN,Zd,N5,D5,DN,vh=$(()=>{"use strict";DQ="100% 0px",NN=new WeakMap,Zd=new WeakMap,N5=[],D5=!1,DN=new WeakMap});var UN={};uu(UN,{revealFinding:()=>U5,revealFindingInReport:()=>Uv});function YQ(e){zv!==null&&clearTimeout(zv);for(let t of document.querySelectorAll(`.${Dv}`))t.classList.remove(Dv);e.classList.add(Dv),zv=setTimeout(()=>{e.classList.remove(Dv),zv=null},WQ)}function JQ(e){return new Promise(t=>{let n=null,r=0,o=0,i=()=>{let s=Math.round(e.getBoundingClientRect().top);r=s===n?r+1:0,n=s,r>=KQ||++o>=GQ?t():requestAnimationFrame(i)};requestAnimationFrame(i)})}function XQ(e){let t=0,n=window.innerHeight,r=z5(e);if(r){let o=r.getBoundingClientRect();t=Math.max(t,o.top),n=Math.min(n,o.bottom)}return{top:t,bottom:n}}function ZQ(e){let t=e.getBoundingClientRect();if(t.height===0)return!1;let{top:n,bottom:r}=XQ(e);if(r<=n)return!1;let o=(n+r)/2;return t.top>=n&&t.bottom<=r||t.top<=o&&t.bottom>=o}async function QQ(e){e.scrollIntoView({block:"center",behavior:"smooth"});for(let t=0;t<qQ;t++){if(await JQ(e),!e.isConnected||ZQ(e))return;e.scrollIntoView({block:"center",behavior:"instant"})}}async function eee(e){let t=CSS.escape(e);if(c.viewMode==="table"){let n=V.querySelector("finding-table");if(n){try{await n.updateComplete}catch{}for(let r of n.shadowRoot?.querySelectorAll("finding-row")??[])if(r.group&&Te(r.group)===e)return r}}if(c.viewMode==="kanban"){let n=V.querySelector(`.kanban-card[data-gid="${t}"]`);if(n)return n}return V.querySelector(`finding-card[data-gid="${t}"]`)??V.querySelector(`[data-gid="${t}"]`)}async function zN(e,t,n=()=>!0){let r=FS(e.group,t),o=Zn(r);if(o&&iy(o)&&queueMicrotask(We),F(),await se({revealSelection:!0}),!n())return{ok:!1};let i=await eee(r);return n()?i?(typeof i.ensureRendered=="function"&&await i.ensureRendered(),await QQ(i),n()?(YQ(i),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function U5(e,{openManagedReport:t=Sr,isCurrent:n=()=>!0}={}){if(!e?.id)return{ok:!1,reason:"This link is missing a finding id."};let r=await ON(e,{openReport:Dn,openWorkspace:Nn,openManagedReport:t,isCurrent:n});return n()?r?await zN(r,e.id,n):{ok:!1,reason:A()?"Couldn't find that finding in the team reports you can access.":VQ}:{ok:!1}}async function Uv(e,t,n=null){if(!e||!t)return{ok:!1,reason:"Missing finding id or report name."};let r=await BN(e,t,n,{openReport:Dn,openManagedReport:Sr});return r?await zN(r,e):{ok:!1,reason:n?`Could not open that finding in "${t}". Open the team and try again.`:`Couldn't find that finding in "${t}". It may have been re-imported since this links file was written.`}}var WQ,Dv,VQ,zv,KQ,GQ,qQ,jv=$(()=>{"use strict";q();nr();Zs();PN();Ht();sa();vh();ln();ui();WQ=1600,Dv="link-target",VQ="Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.",zv=null,KQ=3,GQ=150,qQ=5});function Hv(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}function tee(){return No().size}function nee(){return Qa().size}function oee(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",i=r?Js(r):null,s=e.filter(l=>n?l.bundles.includes(n):l.id===i),a=JSON.stringify([o,n||r,s.map(l=>l.id)]);if(!(!t&&a===HN)){HN=a;for(let l of s){let d=$h.get(l.id)??new Set;d.add(o),$h.set(l.id,d)}}}function WN(e,t={}){let r=`file-item${e===c.currentFile&&(t.workspaceId??null)===Js(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")?" current":""}${t.indented?" indented":""}`,o=Ne(e),i=up(e),s=Ze[Bt(e)]??Ze.default;return p`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??b}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${te(s)}<span class="file-label">${o}</span>${i===void 0?b:p`<span class="file-count">${i}</span>`}</button></li>`}function JN(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return p`<li class="${n}" data-default-reports="${t.dropTarget?"true":b}"><span class="group-label">${e}</span></li>`}function aee(){let e=A()?b:p`<span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" aria-label="Create a new workspace">${iee}</button></span>`;return p`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span>${e}</li>`}function VN(){if(!A())return b;let e=KP(c.managedTeams,ga);return e.length===0?b:p`${JN("Teams")} ${ve(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=li.get(t.id),i=o?.appMode===!0,s=Sh.shown(t.id,"reports",i,vo),a=Sh.shown(t.id,"bundles",i,vo),l=n.filter(d=>d.analyzer!==vt).length;return p`<li class="${`file-item team-item${c.currentManagedTeam===t.id&&c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Sr(t)}}">${mee}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?p`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{LP(t)}}">${ZN}</button>`:b}</div>${i?p`<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(s)}" ?disabled="${vo}">${l.toLocaleString()} report${l===1?"":"s"}</button> ${r.length>0?p`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${vo}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:b}</span></div>`:b}</li>${s?ve(n,d=>d.id,d=>lee(t,d)):b} ${a?ve(r,d=>d.id,d=>dee(t,d)):b}`})}`}function lee(e,t){let n=Ne(t.filename),r=c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView);return p`<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)`:b}" data-tooltip="${n}" data-tooltip-repo="${g5(t)||b}" data-tooltip-placement="right-start" @click="${()=>{cee(e,t)}}">${te(Ze[p$(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function cee(e,t){return Sr(e,t.id)}function dee(e,t){let n=c.currentView==="bundles"&&c.currentManagedTeam===e.id&&c.bundleDetails?.managedId===t.id;return p`<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)`:b}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${g5(t)||b}" data-tooltip-bundle="${t.kind||b}" data-tooltip-built="${t.provenance==="build"?"true":b}" data-tooltip-stats="${VP(t)||b}" data-tooltip-commit="${t.summary?.commit||b}" data-tooltip-placement="right-start">${XN}<span class="file-label">${t.filename}</span></button></li>`}function uee(){return p`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}function KN(e,t={}){let{integrity:n,name:r}=e,o=c.selectedBundle===n&&c.currentView==="bundles"&&(t.workspaceId??null)===c.selectedBundleWorkspace,s=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return p`<li class="${s}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??b}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
|
|
377
|
-
${n}`}">${XN}<span class="file-label">${r}</span></button></li>`}function pee(e,t){let n=e.slice(0,15);return p`<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 fee(e,t){return p`<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 · ${Ne(e)}</em></span></span></li>`}function yee(e,{app:t,compact:n,reports:r,bundles:o,showReports:i,showBundles:s}){let l=`file-item workspace-item${c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)?" current":""}`;return p`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${hee}<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">${ZN}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${gee}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${bee}</button></div>${n?p`<div class="workspace-meta">${t?.appMode?p`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:b} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(i)}" ?disabled="${vo}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?p`<button type="button" data-workspace-section="bundles" aria-expanded="${String(s)}" ?disabled="${vo}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:b}</span></div>`:b}</li>`}function eu(e){return ga?Ne(e).toLowerCase().includes(ga):!0}async function se({revealSelection:e=!1}={}){await Qt();let t=Bo();if(C5({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:Wl,teamsPending:Vl,alternateMode:ro(c.serverModeConfig)?"e2e":"local",onSwitchMode:eD}),wv(),A()){if(Sh.sync(c,e),li.sync(c.managedSession,c.managedTeams),!Wl&&!Vl&&!tu&&!qi&&la({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(g=>g.managedId),c.storedFiles=[],_5([]),!ye)return;xe(p`${VN()}`,G5),ye.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),ye.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),ye.querySelector("#storage-status")?.setAttribute("hidden",""),yi();return}if(li.sync(null,[]),Sh.sync({managedTeams:[]}),ye?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),ye?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await fk(),t!==Bo()){await se();return}Br().catch(()=>{}),_p().catch(()=>{});let n=await Pe();if(t!==Bo()){await se();return}let r=de();oee(r,e),_5(r);let[o]=await Promise.all([vn(),...r.map(g=>yn("workspace",g.id))]);if(t!==Bo()){await se();return}if(c.bundles=o,c.storedFiles=n,S5(),!ye)return;let i=new Set(n),s=new Set;for(let g of r)for(let y of g.reports)i.has(y)&&s.add(y);let a=new Map(o.map(g=>[g.integrity,g])),l=new Set;for(let g of r)for(let y of g.bundles)a.has(y)&&l.add(y);let d=new Map;for(let g of jN)d.set(g,[]);for(let g of n){if(s.has(g)||!eu(g))continue;let y=Bt(g);d.has(y)||d.set(y,[]),d.get(y).push(g)}let u=r.filter(g=>!ga||g.name.toLowerCase().includes(ga)||g.reports.some(y=>eu(y))?!0:g.bundles.some(y=>{let w=a.get(y);return w&&eu(w.name)})),f=o.filter(g=>!l.has(g.integrity)&&eu(g.name));xe(p`${VN()} ${A()&&r.length===0?b:aee()} ${ve(u,g=>g.id,g=>{let y=[],w=[];for(let T of g.reports)eu(T)&&(i.has(T)?y.push(T):w.push(T));y.sort(j5),w.sort(j5);let x=[],v=[];for(let T of g.bundles){let D=a.get(T);D?(!ga||eu(D.name))&&x.push(D):ga||v.push(T)}let k=X7(g)??ul(g),S=k?.appMode??Zx(g)===!0,C=$h.get(g.id),_=!S||vo||C?.has("reports")===!0,E=!S||vo||C?.has("bundles")===!0,O=[...y,...w].filter(T=>Lt(T)!==vt).length,z=x.length+v.length;return p`${yee(g,{app:k,compact:S,reports:O,bundles:z,showReports:_,showBundles:E})} ${_?p`${y.map(T=>WN(T,{indented:!0,workspaceId:g.id}))}${w.map(T=>fee(T,g.id))}`:b} ${E?p`${x.map(T=>KN(T,{workspaceId:g.id}))}${v.map(T=>pee(T,g.id))}`:b}`})} ${jN.map(g=>{let y=(d.get(g)??[]).toSorted(j5),w=g==="default";return y.length===0&&!(w&&Wv)?null:p`${JN(ree[g]??g,{dropTarget:w})} ${y.map(x=>WN(x))}`})} ${f.length>0||Vv?uee():null} ${ve(f,g=>g.integrity,g=>KN(g))}`,G5);let h=ye.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=tee());let m=ye.querySelector('sidebar-view-button[kind="repositories"]');m&&(m.count=nee()),yi(),R1(n,QN)}function QN(){H5||(H5=!0,requestAnimationFrame(()=>{H5=!1,se().catch(e=>console.warn("counts repaint:",e))}))}async function eD(){ye?.querySelector("#user-menu")?.hidePopover?.(),Gr?await Mee():V0()&&await qv()}async function GN(e){let t=e.target.closest("[data-team-section]");if(t){if(vo||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Sh.toggle(f,t.dataset.teamSection),await se();return}let n=e.target.closest("[data-workspace-section]");if(n){if(vo||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let h=n.dataset.workspaceSection,m=$h.get(f)??new Set;m.has(h)?m.delete(h):m.add(h),$h.set(f,m),await se();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await eD();return}if(e.target.closest('[data-action="go-home"]')){await Kr();return}let r=e.target.closest("[data-managed-bundle]");if(r){Ve.navigate(Yt({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,h=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===h)return;ho(f,void 0,{workspaceId:h}),di(f,c.bundleDetailsTab),F(),se(),oi(f);return}let i=e.target.closest("sidebar-view-button");if(i){let f=i.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,F(),se());return}if(e.target.closest('[data-action="new-workspace"]')){if(A())return;let f=await mN();f&&(await Jy(),await N1(f),se());return}let s=e.target.closest('[data-action="share-workspace"]');if(s){let f=s.closest("[data-workspace-id]"),h=f?de().find(m=>m.id===f.dataset.workspaceId):null;h&&vN({id:h.id,name:h.name,privateKeyBase64:h.privateKey}).catch(m=>alert(`Failed to open share dialog: ${m.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),h=f?de().find(m=>m.id===f.dataset.workspaceId):null;h&&fN(h).catch(m=>alert(`Failed to open export dialog: ${m.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),h=f?de().find(v=>v.id===f.dataset.workspaceId):null;if(!h)return;let m=Array.isArray(h.reports)?h.reports:[],g;try{g=await rb(m)}catch(v){alert(`Couldn't read reports to analyze triage impact: ${v.message}`);return}let{confirmed:y,mode:w,triage:x}=await bN({name:h.name,reportCount:m.length,bundleCount:h.bundles.length,triageImpact:g});if(!y)return;if(!de().some(v=>v.id===h.id)){alert(`Workspace "${h.name}" was removed elsewhere; nothing to leave.`);return}try{await lF(h.id,w,{triage:x})}catch(v){alert(`Failed to leave workspace: ${v.message}`)}return}let d=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(d){let f=d.dataset.workspaceId,h=c.currentView==="findings"||c.currentView==="files";f&&(f!==c.currentWorkspace||!h)&&Nn(f);return}let u=e.target.closest(".file-item[data-file]");if(u){let f=u.dataset.file,h=c.currentView==="findings"||c.currentView==="links",m=u.dataset.workspaceId??null;f&&(f!==c.currentFile||m!==c.currentReportWorkspace||!h)&&Dn(f,void 0,{workspaceId:m});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let v=c.selectedBundle,k=(c.bundles??[]).find(_=>_.integrity===v)?.name??v,S=de().filter(_=>Array.isArray(_.bundles)&&_.bundles.includes(v)).filter(_=>n$(_.id,v)).map(_=>_.id),{confirmed:C}=await $N({name:k,inRemote:S.length>0});if(!C)return;if(c.selectedBundle!==v){alert(`Active bundle changed during confirmation; aborting delete of "${k}".`);return}try{await aF({deleteFromRemoteWorkspaceIds:S})}catch(_){alert(`Failed to delete bundle: ${_.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,h;try{h=await rb([f])}catch(v){alert(`Couldn't read reports to analyze triage impact: ${v.message}`);return}let m=de().filter(v=>Array.isArray(v.reports)&&v.reports.includes(f)).filter(v=>od(v.id,f)).map(v=>v.id),g=m.length>0,y=Ib(f)?"links file":"report",{confirmed:w,triage:x}=await kN({name:f,kindLabel:y,triageImpact:h,inRemote:g});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await iF({triage:x,deleteFromRemoteWorkspaceIds:m})}catch(v){alert(`Failed to delete ${y}: ${v.message}`)}return}if(e.target.closest("#sync-status")){me.status==="error"?me.dismissError():me.status==="off"?(!me.getServerUrl()&&kh&&me.setServerUrl(kh),me.setEnabled(!0)):me.setEnabled(!1);return}for(let f of Object.keys(Kv))if(e.target.closest(`[data-action="${f}"]`)){ye?.querySelector("#user-menu")?.hidePopover?.(),Pl(f);return}if(e.target.closest('[data-action="managed-logout"]')){OP(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){if(A())return;ba.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",ba.classList.contains("collapsed")?"1":"0")}catch{}}}function wee(e){vo=e.target.value.length>0,ga=e.target.value.trim().toLowerCase(),se()}function tD(){return me.getServerUrl()||kh?de().length>0:!1}function nD(){let e=ye?.querySelector("#auth-status");if(!e)return;let t=ye?.querySelector("#manage-status"),n=ye?.querySelector("#user-menu"),r=c.managedSession;if(ba?.toggleAttribute("data-authenticated",r!=null),ba?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),e.hidden=r==null,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),xe(b,e),n&&xe(b,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),xe(p`<span class="auth-login">Public workspace · Read only</span>`,e),n&&xe(b,n);return}let o=(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}`),xe(p`${qN(o,r.id)}<span class="auth-login">${i}</span>`,e),t){let s=A()&&(r.role==="admin"||r.role==="manage");t.hidden=!s}n&&xe(p`<div class="user-card">${qN(o,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?p`<span class="user-name">${r.name}</span>`:b}</span></div><button type="button" class="user-menu-row" data-action="toggle-client-mode">${ro(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${see}<span>Log out</span></button>`,n)}function qN(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return p`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${h5()||c.managedSession?.role==="none"?b:p`<img alt="" src="${r}" @error="${xee}">`}</span>`}function xee(e){e.currentTarget.classList.add("broken")}function rD(){let e=ye?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||ro(c.serverModeConfig);e.textContent=Bo(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Bo()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function $ee(){ba&&(ba.dataset.mode=Bo()),A()?(ba?.classList.remove("collapsed"),ye?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),ye?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),ye?.querySelector("#auth-status")?.removeAttribute("hidden")):(ye?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),ye?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),ye?.querySelector("#manage-status")?.setAttribute("hidden",""),ye?.querySelector("#auth-status")?.setAttribute("hidden","")),XP()}function yi(e){let t=ye?.querySelector("#sync-status");if(!t)return;if(rD(),$ee(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,me.setForcedOff(!0);let u=ye?.querySelector("#auth-status");u&&(u.hidden=!0);return}if(A()){t.hidden=!0,me.setForcedOff(!0),nD();return}if(c.serverMode==="standalone"){t.hidden=!0;let u=ye?.querySelector("#auth-status");u&&(u.hidden=!0);return}let n=ye?.querySelector("#auth-status");n&&(n.hidden=!0);let r=tD(),o=lr()!=null;if(r&&o&&me.isEnabled()&&Vp().catch(u=>{console.warn("sync: load failed",u)}),r&&o&&!me.getServerUrl()&&kh&&me.isEnabled()&&me.setServerUrl(kh),me.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let i=e??me.status;t.dataset.status=i;let s=me.persistenceDegraded;t.toggleAttribute("data-degraded",s);let a=me.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let l=s?"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 d=t.querySelector(".sync-label");d&&(d.textContent=kee[i]??"")}async function oD(){if(!me.persistenceDegraded||Y5||W5)return;W5=!0;let{shown:e}=await TN();if(W5=!1,e){Y5=!0;return}me.persistenceDegraded&&setTimeout(oD,1500)}async function iD(){if(!me.proxyAuthRequired||J5||V5)return;V5=!0;let{shown:e,reload:t}=await AN();if(V5=!1,!e){me.proxyAuthRequired&&setTimeout(iD,1500);return}J5=!0,t&&location.reload()}function See(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=de().find(l=>l.id===r);if(!o)return;e.preventDefault();let i=document.createElement("input");i.type="text",i.value=o.name,i.className="workspace-rename-input",n.textContent="",n.append(i),i.focus(),i.select();let s=!1,a=async l=>{if(!s){s=!0;try{l&&await z1(r,i.value)}catch(d){alert(`Failed to rename workspace: ${d.message}`)}finally{n.contains(i)&&(n.textContent=de().find(d=>d.id===r)?.name??o.name),se()}}};i.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),a(!0)):l.key==="Escape"&&(l.preventDefault(),a(!1))}),i.addEventListener("blur",()=>a(!0)),i.addEventListener("click",l=>l.stopPropagation()),i.addEventListener("dblclick",l=>l.stopPropagation())}function Gv(){for(let e of ye.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function sD(e){return e.dataTransfer.types.includes(Q5)||e.dataTransfer.types.includes(xh)}function _ee(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(xh,r),e.dataTransfer.setData(q5,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Vv=!0,se();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(Q5,n.dataset.file),e.dataTransfer.setData(q5,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),Wv=!0,se())}function Cee(){for(let e of ye.querySelectorAll(".dragging"))e.classList.remove("dragging");Gv(),(Wv||Vv)&&(Wv=!1,Vv=!1,se())}function Eee(e){if(!sD(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=ye.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,i=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=i?"none":"move",Gv(),!i)if(t){let s=t.dataset.workspaceId;for(let a of ye.querySelectorAll(`[data-workspace-id="${CSS.escape(s)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(xh)?"[data-default-bundles]":"[data-default-reports]",l=ye.querySelector(a);l&&l.classList.add("drag-over")}}function Ree(e){ye.contains(e.relatedTarget)||Gv()}async function Tee(e){if(!sD(e))return;e.preventDefault(),e.stopPropagation(),Gv();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(q5)||null;if(e.dataTransfer.types.includes(xh)){let s=e.dataTransfer.getData(xh);if(!s)return;if(r&&r!==n&&n$(r,s)){let a=(c.bundles??[]).find(u=>u.integrity===s)?.name??s,l=de().find(u=>u.id===r),{confirmed:d}=await _N({name:a,workspaceName:l?.name??""});if(!d)return;try{await vb(r,s)}catch(u){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,u)}}n&&await rl(s,n),r&&r!==n&&await V1(s,r),se();return}let o=e.dataTransfer.getData(Q5);if(!o)return;if(r&&r!==n&&od(r,o)){let s=de().find(l=>l.id===r),{confirmed:a}=await EN({name:o,workspaceName:s?.name??""});if(!a)return;try{await yb(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await nl(o,n),r&&r!==n&&await wp(o,r),c.currentWorkspace&&(c.currentWorkspace===n||c.currentWorkspace===r)?await Nn(c.currentWorkspace):se()}async function qv({forgetLastView:e=!0,resetNavigation:t=!0}={}){Ve.reset({force:t}),wh?.remove(),wh=null;let n=++tn;if(Vl=!0,qi=!1,RP(),li.sync(null,[]),c$(),Bl(),Jf(),gb(c.serverMode!=="e2e"),me.setForcedOff(!0),me.setProtocolLocked(c.serverMode!=="e2e"||!!Gr),sF({forgetLastView:e}),c.triage.clear(),A()){let r=Kl();if(h5()&&(await r,n!==tn))return}else{if(c.managedSession=null,c.managedTeams=[],await Fo(),n!==tn||(await Cp(),n!==tn))return;yp()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),wv(),rD(),yi(me.status),F(),await se()}async function aD(e){if(e!==void 0&&!WM(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${qp.join(", ")}.`);if(await Qt(),e===void 0&&(Gr||A()))return;let t=tn,n=e===void 0?null:await tt();t===tn&&(Gr??={serverMode:c.serverMode,serverModeConfig:c.serverModeConfig,serverModeSelection:c.serverModeSelection,localMode:c.localMode,managed:c.managed},n&&n.setPreviewRole(e),c.serverMode="managed",Ri(!1),c.managedSession=null,c.managedTeams=[],await qv({forgetLastView:!1}))}async function Mee(){let e=Gr,t=X5;Gr=null,X5=null,EP(),Object.assign(c,e),await qv({forgetLastView:!1}),t&&jl(t)}function jl(e,{runtime:t=!0}={}){if(Gr){X5=e;return}Hv(!1);let n=lr()!=null,r=A(),o=c.serverMode;Ko()&&e.managed&&(c.serverModeSelection="managed"),Om(e.mode),Ko()&&e.managed&&Ri(!1);let i=o!==c.serverMode;c.managed=e.managed;let s=t&&c.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(c.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(c.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),wv(),gb(c.serverMode!=="e2e"),me.setProtocolLocked(c.serverMode!=="e2e"),j0(e),r!==A()){qv({forgetLastView:!1,resetNavigation:n&&!Ko()&&!_c(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}yi(me.status),i&&c.serverMode==="e2e"&&tD()&&me.isEnabled()&&Vp().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)),i&&se(),s&&F({animate:!1}),A()&&Kl()}function Kl(){if(tu?.generation===tn)return tu.promise;Wl=!0;let e={generation:tn,promise:null};return tu=e,e.promise=Aee().finally(()=>{tu===e&&(tu=null,se())}),e.promise}async function Aee(){let e=tn,t=++YN,n=()=>e===tn&&t===YN&&A();try{let r=c.managedSession,o=await AP({fallback:r});if(!n()||(c.managedSession=o,Wl=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Vl=!0),se(),TP(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],Bl(),Jf(),Ve.reset(),Kr({history:!1})):c.currentView in Kv&&ya(c.currentView)&&F({animate:!1}),nD(),S_(),!await eC(n)))return;document.querySelector("base")||(wh=document.createElement("base"),wh.href="/",document.head.prepend(wh)),Ve.active&&Object.hasOwn(Wa,c.currentView)&&!ya(c.currentView)?await Ve.navigate({view:ya("manage")?"manage":"home"},{replace:!0}):o&&await Ve.start(Fee)}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(Wl||Vl)&&(Wl=!1,Vl=!1,se())}}async function eC(e,{strict:t=!1,signal:n=Cn(),reuse:r=!1,revision:o=null}={}){let i=tn,s=c.managedSession,a=await Iee({generation:i,session:s,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||i!==tn||!A())return!1;let d=c.managedTeams.find(m=>m.id===c.currentManagedTeam)?.name,u=MP(l);c.managedTeams=l;let f=a===null?K5:++K5;Vl=!1;let h=c.currentView==="bundles"?c.bundleDetails?.managedId:null;if(a!==null&&h&&!qi){let m=it(),g=()=>e()&&!n.aborted&&!qi&&f===K5&&m===it()&&i===tn&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&A()&&c.currentView==="bundles"&&c.bundleDetails?.managedId===h,y;try{y=await DP(c,l,{fetchCatalog:()=>m5({signal:AbortSignal.any([n,Cn()])}),isCurrent:g,render:()=>F({animate:!1}),replaceRoute:w=>Ve.replaceRoute(w)})}catch(w){return g()?(w.name!=="AbortError"&&Ot(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),se(),!1):e()}if(!g())return e();if(!y){Hl=null;let w=Kr({history:!1}),x=it();return await w,x===it()&&i===tn&&e()&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&Ve.replaceRoute({view:"home"}),e()}}if(PP(c,l,u)){let m=l.find(v=>v.id===c.currentManagedTeam),y=m&&(c.currentManagedReport===null||m.reports.some(v=>v.id===c.currentManagedReport))?Yt({view:c.currentView==="links"?"findings":c.currentView,teamId:m.id,reportId:c.currentManagedReport},l):null;Hl=null;let w=Kr({history:!1}),x=it();if(await w,t)return x===it()&&i===tn&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&A()&&await Ve.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!qi&&["workspace-reports","workspace-bundles"].includes(c.currentView)&&!l.some(m=>m.id===c.currentManagedTeam)){let m=Kr({history:!1}),g=it();return await m,g===it()&&i===tn&&e()&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&Ve.replaceRoute({view:"home"}),e()}return!qi&&(c.currentWorkspace||d!==l.find(m=>m.id===c.currentManagedTeam)?.name)&&F({animate:!1}),se(),!(a!==null&&!qi&&!await H_(n))}function ya(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!Lee.has(e)||t==="admin")}async function Fee(e,t){qi=!0;try{return await Bee(e,t)}finally{t()&&(qi=!1,se())}}async function Bee(e,t){let n=Hl===it()?Hl:null;if(cn(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await eC(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!ya("manage-bundles")||(r=await m5(),!t()||!A()))||(e=Gu(e,c.managedTeams,r),!e))return!1;let o=n!==null&&Hl===n&&c.currentManagedTeam===e.teamId&&c.currentManagedReport===e.reportId;if(!t()||!A()||e.view!=="home"&&(!c.managedSession||c.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:s}=await Promise.resolve().then(()=>(jv(),UN));if(!t())return!1;let a=await s({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(l,d)=>Sr(l,d,{history:!1}),isCurrent:t});return t()?a.ok?(Hl=it(),la(),Yt({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ot(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return Ud(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let s=e.teamId==null?r.map(oa):Bd(c.managedTeams);return await UP(e,s,t,se)?Yt({...e,bundleTab:c.bundleDetailsTab},c.managedTeams,r):!1}if(e.view==="home")return Kr({history:!1});if(e.view==="manage-deduplication"&&e.linkId)return ya(e.view)&&await oF(e.linkId);if(Object.hasOwn(Wa,e.view))return Pl(e.view,{...e,history:!1});let i=c.managedTeams.find(s=>s.id===e.teamId);return!i||!o&&!await Sr(i,e.reportId,{history:!1})||!t()?!1:(c.currentView!==e.view&&Et(),c.currentView=c.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),F({animate:!1}),Hl=it(),la(),se(),document.querySelector("#main-content")?.scrollTo({top:0}),Yt({...e,view:c.currentView==="links"?"findings":c.currentView},c.managedTeams))}async function Pl(e,t={}){if(t.history!==!1&&A()&&(Ve.active||await Kl(),Ve.active))return Ve.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{},...t.scanMode==="link"?{scanMode:"link"}:{},...t.linkId?{linkId:t.linkId}:{}});if(!(e in Kv)||!A()||!ya(e))return!1;let n=cn(),r=tn;try{let o=await tt();e==="manage-import"&&ya(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(Kv[e],o),!1}return r!==tn||n!==it()||!A()||!ya(e)?!1:(c.currentView=e,c.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId}:null:null,c.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,F({animate:!1}),se(),Kl(),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)}function Qt(){return Oee??=Pee().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function Pee(){let e=lr();if(e){Om(e.mode),c.managed=e.managed,Cm().then(o=>{if(o&&o!=="standalone")return jl(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Hv(!zu());let t=Cm(),n=await U0(t,zu()?0:3e3),r=lr();if(r)return n&&n!=="standalone"?jl(n):jl(r,{runtime:!1});if(n&&n!=="standalone")return jl(n);n==="standalone"&&_m(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Ri(n===null),gb(!0),Hv(!1),yi(me.status),se(),n===null&&t.then(o=>{let i=lr(),s=o&&o!=="standalone"?o:i??o;if(s==="standalone"){if(_m(),Gr){Gr.serverMode="standalone",Gr.serverModeConfig=null,Gr.serverModeSelection=null,Gr.localMode=!1;return}return Ri(!1),yi(me.status),se()}if(s)return jl(s,{runtime:s!==i})}).catch(o=>console.warn("server mode probe:",o))}function Nee(){let e=ye?.querySelector("#user-menu"),t=ye?.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 Dee(e){ba=e,ye=e.renderRoot,G5=ye.querySelector("#file-list"),ZP(ye.querySelector("#encryption-toggle")),aN(ye.querySelector("#storage-status")),ye.addEventListener("click",GN),ye.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),GN(t))}),ye.addEventListener("dblclick",See),ye.addEventListener("dragstart",_ee),ye.addEventListener("dragend",Cee),ye.addEventListener("dragover",Eee),ye.addEventListener("dragleave",Ree),ye.addEventListener("drop",Tee),Jn(ye,vee),ye.querySelector("#sidebar-search-input")?.addEventListener("input",wee),Nee(),yi(me.status),lr()||Hv(!zu()),se(),me.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=lr(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return jl(z0(r,t))}),Qt(),c.serverMode==="managed"&&Kl()}var ba,ye,G5,kh,Q5,q5,xh,Wv,Vv,ree,jN,ga,vo,$h,HN,Sh,iee,see,XN,hee,mee,gee,bee,ZN,j5,H5,vee,kee,W5,Y5,V5,J5,Gr,X5,tn,YN,tu,Wl,Vl,qi,wh,Iee,K5,Kv,Lee,Hl,Oee,Z5,ui=$(()=>{"use strict";ml();xn();P();un();wt();q();co();xn();ef();Fl();id();Od();NP();zP();jP();WP();Ml();GP();ri();Ti();Yp();nv();M_();qP();yh();y5();lN();ln();cN();F_();O_();dN();kv();sa();Zs();hN();g_();gN();yN();wN();xN();SN();CN();RN();MN();IN();uo();jt();ii();Os();ba=null,ye=null,G5=null;dA();kh=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,Q5="application/x-deepview-report",q5="application/x-deepview-source-ws",xh="application/x-deepview-bundle",Wv=!1,Vv=!1,ree={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[vt]:"Links"},jN=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",vt],ga="",vo=!1,$h=new Map,HN="",Sh=new Bv;iee=p`<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>`,see=p`<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>`;XN=p`${te(Yn)}`;hee=p`${te(Ls)}`,mee=p`<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>`,gee=p`<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>`,bee=p`<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>`,ZN=p`<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>`;j5=(e,t)=>Ne(e).localeCompare(Ne(t));H5=!1;At(()=>{se()});e$(QN);vee={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}};kee={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};me.onStatusChange(yi);W5=!1,Y5=!1;me.onPersistenceDegraded(e=>{yi(),e?oD():Y5=!1});V5=!1,J5=!1;me.onProxyAuthRequired(e=>{yi(),e?iD():J5=!1});Gr=null,X5=null,tn=0,YN=0,tu=null,Wl=!0,Vl=!0,qi=!1,wh=null;G7((e,t,n)=>eC(e,{strict:!0,signal:t,revision:n}));Iee=HP(IP),K5=0;Kv={manage:"admin: bundle load failed:","admin-users":"admin: bundle load failed:","manage-repos":"admin: repos bundle load failed:","manage-reports":"admin: reports bundle load failed:","manage-bundles":"admin: bundles bundle load failed:","manage-history":"admin: history bundle load failed:","manage-teams":"admin: teams bundle load failed:","manage-import":"admin: import bundle load failed:","manage-links":"admin: links bundle load failed:","manage-deduplication":"admin: deduplication bundle load failed:","manage-scans":"admin: scans bundle load failed:"},Lee=new Set(["admin-users","manage-repos","manage-teams","manage-import","manage-deduplication"]),Hl=null;document.addEventListener("managed-bundle-open",e=>{if(A()&&typeof e.detail?.id=="string"){let t=oa(e.detail),n=c.managedTeams,r=n.find(o=>o.id===c.currentManagedTeam&&o.bundles?.some(i=>i.id===t.managedId))??n.find(o=>o.bundles?.some(i=>i.id===t.managedId));Ve.navigate(ia(n,t,r?.id,c.currentView==="bundles"?c.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{Kl()});document.addEventListener("managed-feed-closed",()=>{Wl=!0,Bl(),Jf(),Kr({history:!1}).then(()=>Kl()),Ot("Workspace access changed. Refreshing your session.")});document.addEventListener("managed-notice",e=>Ot(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&Pl(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});Z5=class extends fe{static styles=[N(ha),N(YP)];render(){return p`<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">${Bo()}</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><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><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><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> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${te(Eb)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){Dee(this)}};customElements.define("app-sidebar",Z5)});var Xv,sC=$(()=>{Xv=`dialog{max-width:640px;width:min(94vw,640px)}header h3{margin:0 0 .4rem}.finding{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}textarea{display:block;width:100%;box-sizing:border-box;min-height:9rem;max-height:50vh;resize:vertical;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;line-height:1.4;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}
|
|
377
|
+
${n}`}">${XN}<span class="file-label">${r}</span></button></li>`}function pee(e,t){let n=e.slice(0,15);return p`<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 fee(e,t){return p`<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 · ${Ne(e)}</em></span></span></li>`}function yee(e,{app:t,compact:n,reports:r,bundles:o,showReports:i,showBundles:s}){let l=`file-item workspace-item${c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)?" current":""}`;return p`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${hee}<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">${ZN}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${gee}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${bee}</button></div>${n?p`<div class="workspace-meta">${t?.appMode?p`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:b} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(i)}" ?disabled="${vo}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?p`<button type="button" data-workspace-section="bundles" aria-expanded="${String(s)}" ?disabled="${vo}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:b}</span></div>`:b}</li>`}function eu(e){return ga?Ne(e).toLowerCase().includes(ga):!0}async function se({revealSelection:e=!1}={}){await Qt();let t=Bo();if(C5({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:Wl,teamsPending:Vl,alternateMode:ro(c.serverModeConfig)?"e2e":"local",onSwitchMode:eD}),wv(),A()){if(Sh.sync(c,e),li.sync(c.managedSession,c.managedTeams),!Wl&&!Vl&&!tu&&!qi&&la({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(g=>g.managedId),c.storedFiles=[],_5([]),!ye)return;xe(p`${VN()}`,G5),ye.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),ye.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),ye.querySelector("#storage-status")?.setAttribute("hidden",""),yi();return}if(li.sync(null,[]),Sh.sync({managedTeams:[]}),ye?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),ye?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await fk(),t!==Bo()){await se();return}Br().catch(()=>{}),_p().catch(()=>{});let n=await Pe();if(t!==Bo()){await se();return}let r=de();oee(r,e),_5(r);let[o]=await Promise.all([vn(),...r.map(g=>yn("workspace",g.id))]);if(t!==Bo()){await se();return}if(c.bundles=o,c.storedFiles=n,S5(),!ye)return;let i=new Set(n),s=new Set;for(let g of r)for(let y of g.reports)i.has(y)&&s.add(y);let a=new Map(o.map(g=>[g.integrity,g])),l=new Set;for(let g of r)for(let y of g.bundles)a.has(y)&&l.add(y);let d=new Map;for(let g of jN)d.set(g,[]);for(let g of n){if(s.has(g)||!eu(g))continue;let y=Bt(g);d.has(y)||d.set(y,[]),d.get(y).push(g)}let u=r.filter(g=>!ga||g.name.toLowerCase().includes(ga)||g.reports.some(y=>eu(y))?!0:g.bundles.some(y=>{let w=a.get(y);return w&&eu(w.name)})),f=o.filter(g=>!l.has(g.integrity)&&eu(g.name));xe(p`${VN()} ${A()&&r.length===0?b:aee()} ${ve(u,g=>g.id,g=>{let y=[],w=[];for(let T of g.reports)eu(T)&&(i.has(T)?y.push(T):w.push(T));y.sort(j5),w.sort(j5);let x=[],v=[];for(let T of g.bundles){let D=a.get(T);D?(!ga||eu(D.name))&&x.push(D):ga||v.push(T)}let k=X7(g)??ul(g),S=k?.appMode??Zx(g)===!0,C=$h.get(g.id),_=!S||vo||C?.has("reports")===!0,E=!S||vo||C?.has("bundles")===!0,O=[...y,...w].filter(T=>Lt(T)!==vt).length,z=x.length+v.length;return p`${yee(g,{app:k,compact:S,reports:O,bundles:z,showReports:_,showBundles:E})} ${_?p`${y.map(T=>WN(T,{indented:!0,workspaceId:g.id}))}${w.map(T=>fee(T,g.id))}`:b} ${E?p`${x.map(T=>KN(T,{workspaceId:g.id}))}${v.map(T=>pee(T,g.id))}`:b}`})} ${jN.map(g=>{let y=(d.get(g)??[]).toSorted(j5),w=g==="default";return y.length===0&&!(w&&Wv)?null:p`${JN(ree[g]??g,{dropTarget:w})} ${y.map(x=>WN(x))}`})} ${f.length>0||Vv?uee():null} ${ve(f,g=>g.integrity,g=>KN(g))}`,G5);let h=ye.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=tee());let m=ye.querySelector('sidebar-view-button[kind="repositories"]');m&&(m.count=nee()),yi(),R1(n,QN)}function QN(){H5||(H5=!0,requestAnimationFrame(()=>{H5=!1,se().catch(e=>console.warn("counts repaint:",e))}))}async function eD(){ye?.querySelector("#user-menu")?.hidePopover?.(),Gr?await Mee():V0()&&await qv()}async function GN(e){let t=e.target.closest("[data-team-section]");if(t){if(vo||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Sh.toggle(f,t.dataset.teamSection),await se();return}let n=e.target.closest("[data-workspace-section]");if(n){if(vo||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let h=n.dataset.workspaceSection,m=$h.get(f)??new Set;m.has(h)?m.delete(h):m.add(h),$h.set(f,m),await se();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await eD();return}if(e.target.closest('[data-action="go-home"]')){await Kr();return}let r=e.target.closest("[data-managed-bundle]");if(r){Ve.navigate(Yt({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,h=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===h)return;ho(f,void 0,{workspaceId:h}),di(f,c.bundleDetailsTab),F(),se(),oi(f);return}let i=e.target.closest("sidebar-view-button");if(i){let f=i.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,F(),se());return}if(e.target.closest('[data-action="new-workspace"]')){if(A())return;let f=await mN();f&&(await Jy(),await N1(f),se());return}let s=e.target.closest('[data-action="share-workspace"]');if(s){let f=s.closest("[data-workspace-id]"),h=f?de().find(m=>m.id===f.dataset.workspaceId):null;h&&vN({id:h.id,name:h.name,privateKeyBase64:h.privateKey}).catch(m=>alert(`Failed to open share dialog: ${m.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),h=f?de().find(m=>m.id===f.dataset.workspaceId):null;h&&fN(h).catch(m=>alert(`Failed to open export dialog: ${m.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),h=f?de().find(v=>v.id===f.dataset.workspaceId):null;if(!h)return;let m=Array.isArray(h.reports)?h.reports:[],g;try{g=await rb(m)}catch(v){alert(`Couldn't read reports to analyze triage impact: ${v.message}`);return}let{confirmed:y,mode:w,triage:x}=await bN({name:h.name,reportCount:m.length,bundleCount:h.bundles.length,triageImpact:g});if(!y)return;if(!de().some(v=>v.id===h.id)){alert(`Workspace "${h.name}" was removed elsewhere; nothing to leave.`);return}try{await lF(h.id,w,{triage:x})}catch(v){alert(`Failed to leave workspace: ${v.message}`)}return}let d=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(d){let f=d.dataset.workspaceId,h=c.currentView==="findings"||c.currentView==="files";f&&(f!==c.currentWorkspace||!h)&&Nn(f);return}let u=e.target.closest(".file-item[data-file]");if(u){let f=u.dataset.file,h=c.currentView==="findings"||c.currentView==="links",m=u.dataset.workspaceId??null;f&&(f!==c.currentFile||m!==c.currentReportWorkspace||!h)&&Dn(f,void 0,{workspaceId:m});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let v=c.selectedBundle,k=(c.bundles??[]).find(_=>_.integrity===v)?.name??v,S=de().filter(_=>Array.isArray(_.bundles)&&_.bundles.includes(v)).filter(_=>n$(_.id,v)).map(_=>_.id),{confirmed:C}=await $N({name:k,inRemote:S.length>0});if(!C)return;if(c.selectedBundle!==v){alert(`Active bundle changed during confirmation; aborting delete of "${k}".`);return}try{await aF({deleteFromRemoteWorkspaceIds:S})}catch(_){alert(`Failed to delete bundle: ${_.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,h;try{h=await rb([f])}catch(v){alert(`Couldn't read reports to analyze triage impact: ${v.message}`);return}let m=de().filter(v=>Array.isArray(v.reports)&&v.reports.includes(f)).filter(v=>od(v.id,f)).map(v=>v.id),g=m.length>0,y=Ib(f)?"links file":"report",{confirmed:w,triage:x}=await kN({name:f,kindLabel:y,triageImpact:h,inRemote:g});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await iF({triage:x,deleteFromRemoteWorkspaceIds:m})}catch(v){alert(`Failed to delete ${y}: ${v.message}`)}return}if(e.target.closest("#sync-status")){me.status==="error"?me.dismissError():me.status==="off"?(!me.getServerUrl()&&kh&&me.setServerUrl(kh),me.setEnabled(!0)):me.setEnabled(!1);return}for(let f of Object.keys(Kv))if(e.target.closest(`[data-action="${f}"]`)){ye?.querySelector("#user-menu")?.hidePopover?.(),Pl(f);return}if(e.target.closest('[data-action="managed-logout"]')){OP(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){if(A())return;ba.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",ba.classList.contains("collapsed")?"1":"0")}catch{}}}function wee(e){vo=e.target.value.length>0,ga=e.target.value.trim().toLowerCase(),se()}function tD(){return me.getServerUrl()||kh?de().length>0:!1}function nD(){let e=ye?.querySelector("#auth-status");if(!e)return;let t=ye?.querySelector("#manage-status"),n=ye?.querySelector("#user-menu"),r=c.managedSession;if(ba?.toggleAttribute("data-authenticated",r!=null),ba?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),e.hidden=r==null,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),xe(b,e),n&&xe(b,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),xe(p`<span class="auth-login">Public workspace · Read only</span>`,e),n&&xe(b,n);return}let o=(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}`),xe(p`${qN(o,r.id)}<span class="auth-login">${i}</span>`,e),t){let s=A()&&(r.role==="admin"||r.role==="manage");t.hidden=!s}n&&xe(p`<div class="user-card">${qN(o,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?p`<span class="user-name">${r.name}</span>`:b}</span></div><button type="button" class="user-menu-row" data-action="toggle-client-mode">${ro(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${see}<span>Log out</span></button>`,n)}function qN(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return p`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${h5()||c.managedSession?.role==="none"?b:p`<img alt="" src="${r}" @error="${xee}">`}</span>`}function xee(e){e.currentTarget.classList.add("broken")}function rD(){let e=ye?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||ro(c.serverModeConfig);e.textContent=Bo(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Bo()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function $ee(){ba&&(ba.dataset.mode=Bo()),A()?(ba?.classList.remove("collapsed"),ye?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),ye?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),ye?.querySelector("#auth-status")?.removeAttribute("hidden")):(ye?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),ye?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),ye?.querySelector("#manage-status")?.setAttribute("hidden",""),ye?.querySelector("#auth-status")?.setAttribute("hidden","")),XP()}function yi(e){let t=ye?.querySelector("#sync-status");if(!t)return;if(rD(),$ee(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,me.setForcedOff(!0);let u=ye?.querySelector("#auth-status");u&&(u.hidden=!0);return}if(A()){t.hidden=!0,me.setForcedOff(!0),nD();return}if(c.serverMode==="standalone"){t.hidden=!0;let u=ye?.querySelector("#auth-status");u&&(u.hidden=!0);return}let n=ye?.querySelector("#auth-status");n&&(n.hidden=!0);let r=tD(),o=lr()!=null;if(r&&o&&me.isEnabled()&&Vp().catch(u=>{console.warn("sync: load failed",u)}),r&&o&&!me.getServerUrl()&&kh&&me.isEnabled()&&me.setServerUrl(kh),me.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let i=e??me.status;t.dataset.status=i;let s=me.persistenceDegraded;t.toggleAttribute("data-degraded",s);let a=me.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let l=s?"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 d=t.querySelector(".sync-label");d&&(d.textContent=kee[i]??"")}async function oD(){if(!me.persistenceDegraded||Y5||W5)return;W5=!0;let{shown:e}=await TN();if(W5=!1,e){Y5=!0;return}me.persistenceDegraded&&setTimeout(oD,1500)}async function iD(){if(!me.proxyAuthRequired||J5||V5)return;V5=!0;let{shown:e,reload:t}=await AN();if(V5=!1,!e){me.proxyAuthRequired&&setTimeout(iD,1500);return}J5=!0,t&&location.reload()}function See(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=de().find(l=>l.id===r);if(!o)return;e.preventDefault();let i=document.createElement("input");i.type="text",i.value=o.name,i.className="workspace-rename-input",n.textContent="",n.append(i),i.focus(),i.select();let s=!1,a=async l=>{if(!s){s=!0;try{l&&await z1(r,i.value)}catch(d){alert(`Failed to rename workspace: ${d.message}`)}finally{n.contains(i)&&(n.textContent=de().find(d=>d.id===r)?.name??o.name),se()}}};i.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),a(!0)):l.key==="Escape"&&(l.preventDefault(),a(!1))}),i.addEventListener("blur",()=>a(!0)),i.addEventListener("click",l=>l.stopPropagation()),i.addEventListener("dblclick",l=>l.stopPropagation())}function Gv(){for(let e of ye.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function sD(e){return e.dataTransfer.types.includes(Q5)||e.dataTransfer.types.includes(xh)}function _ee(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(xh,r),e.dataTransfer.setData(q5,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Vv=!0,se();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(Q5,n.dataset.file),e.dataTransfer.setData(q5,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),Wv=!0,se())}function Cee(){for(let e of ye.querySelectorAll(".dragging"))e.classList.remove("dragging");Gv(),(Wv||Vv)&&(Wv=!1,Vv=!1,se())}function Eee(e){if(!sD(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=ye.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,i=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=i?"none":"move",Gv(),!i)if(t){let s=t.dataset.workspaceId;for(let a of ye.querySelectorAll(`[data-workspace-id="${CSS.escape(s)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(xh)?"[data-default-bundles]":"[data-default-reports]",l=ye.querySelector(a);l&&l.classList.add("drag-over")}}function Ree(e){ye.contains(e.relatedTarget)||Gv()}async function Tee(e){if(!sD(e))return;e.preventDefault(),e.stopPropagation(),Gv();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(q5)||null;if(e.dataTransfer.types.includes(xh)){let s=e.dataTransfer.getData(xh);if(!s)return;if(r&&r!==n&&n$(r,s)){let a=(c.bundles??[]).find(u=>u.integrity===s)?.name??s,l=de().find(u=>u.id===r),{confirmed:d}=await _N({name:a,workspaceName:l?.name??""});if(!d)return;try{await vb(r,s)}catch(u){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,u)}}n&&await rl(s,n),r&&r!==n&&await V1(s,r),se();return}let o=e.dataTransfer.getData(Q5);if(!o)return;if(r&&r!==n&&od(r,o)){let s=de().find(l=>l.id===r),{confirmed:a}=await EN({name:o,workspaceName:s?.name??""});if(!a)return;try{await yb(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await nl(o,n),r&&r!==n&&await wp(o,r),c.currentWorkspace&&(c.currentWorkspace===n||c.currentWorkspace===r)?await Nn(c.currentWorkspace):se()}async function qv({forgetLastView:e=!0,resetNavigation:t=!0}={}){Ve.reset({force:t}),wh?.remove(),wh=null;let n=++tn;if(Vl=!0,qi=!1,RP(),li.sync(null,[]),c$(),Bl(),Jf(),gb(c.serverMode!=="e2e"),me.setForcedOff(!0),me.setProtocolLocked(c.serverMode!=="e2e"||!!Gr),sF({forgetLastView:e}),c.triage.clear(),A()){let r=Kl();if(h5()&&(await r,n!==tn))return}else{if(c.managedSession=null,c.managedTeams=[],await Fo(),n!==tn||(await Cp(),n!==tn))return;yp()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),wv(),rD(),yi(me.status),F(),await se()}async function aD(e){if(e!==void 0&&!WM(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${qp.join(", ")}.`);if(await Qt(),e===void 0&&(Gr||A()))return;let t=tn,n=e===void 0?null:await tt();t===tn&&(Gr??={serverMode:c.serverMode,serverModeConfig:c.serverModeConfig,serverModeSelection:c.serverModeSelection,localMode:c.localMode,managed:c.managed},n&&n.setPreviewRole(e),c.serverMode="managed",Ri(!1),c.managedSession=null,c.managedTeams=[],await qv({forgetLastView:!1}))}async function Mee(){let e=Gr,t=X5;Gr=null,X5=null,EP(),Object.assign(c,e),await qv({forgetLastView:!1}),t&&jl(t)}function jl(e,{runtime:t=!0}={}){if(Gr){X5=e;return}Hv(!1);let n=lr()!=null,r=A(),o=c.serverMode;Ko()&&e.managed&&(c.serverModeSelection="managed"),Om(e.mode),Ko()&&e.managed&&Ri(!1);let i=o!==c.serverMode;c.managed=e.managed;let s=t&&c.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(c.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(c.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),wv(),gb(c.serverMode!=="e2e"),me.setProtocolLocked(c.serverMode!=="e2e"),j0(e),r!==A()){qv({forgetLastView:!1,resetNavigation:n&&!Ko()&&!_c(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}yi(me.status),i&&c.serverMode==="e2e"&&tD()&&me.isEnabled()&&Vp().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)),i&&se(),s&&F({animate:!1}),A()&&Kl()}function Kl(){if(tu?.generation===tn)return tu.promise;Wl=!0;let e={generation:tn,promise:null};return tu=e,e.promise=Aee().finally(()=>{tu===e&&(tu=null,se())}),e.promise}async function Aee(){let e=tn,t=++YN,n=()=>e===tn&&t===YN&&A();try{let r=c.managedSession,o=await AP({fallback:r});if(!n()||(c.managedSession=o,Wl=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Vl=!0),se(),TP(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],Bl(),Jf(),Ve.reset(),Kr({history:!1})):c.currentView in Kv&&ya(c.currentView)&&F({animate:!1}),nD(),S_(),!await eC(n)))return;document.querySelector("base")||(wh=document.createElement("base"),wh.href="/",document.head.prepend(wh)),Ve.active&&Object.hasOwn(Wa,c.currentView)&&!ya(c.currentView)?await Ve.navigate({view:ya("manage")?"manage":"home"},{replace:!0}):o&&await Ve.start(Fee)}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(Wl||Vl)&&(Wl=!1,Vl=!1,se())}}async function eC(e,{strict:t=!1,signal:n=Cn(),reuse:r=!1,revision:o=null}={}){let i=tn,s=c.managedSession,a=await Iee({generation:i,session:s,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||i!==tn||!A())return!1;let d=c.managedTeams.find(m=>m.id===c.currentManagedTeam)?.name,u=MP(l);c.managedTeams=l;let f=a===null?K5:++K5;Vl=!1;let h=c.currentView==="bundles"?c.bundleDetails?.managedId:null;if(a!==null&&h&&!qi){let m=it(),g=()=>e()&&!n.aborted&&!qi&&f===K5&&m===it()&&i===tn&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&A()&&c.currentView==="bundles"&&c.bundleDetails?.managedId===h,y;try{y=await DP(c,l,{fetchCatalog:()=>m5({signal:AbortSignal.any([n,Cn()])}),isCurrent:g,render:()=>F({animate:!1}),replaceRoute:w=>Ve.replaceRoute(w)})}catch(w){return g()?(w.name!=="AbortError"&&Ot(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),se(),!1):e()}if(!g())return e();if(!y){Hl=null;let w=Kr({history:!1}),x=it();return await w,x===it()&&i===tn&&e()&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&Ve.replaceRoute({view:"home"}),e()}}if(PP(c,l,u)){let m=l.find(v=>v.id===c.currentManagedTeam),y=m&&(c.currentManagedReport===null||m.reports.some(v=>v.id===c.currentManagedReport))?Yt({view:c.currentView==="links"?"findings":c.currentView,teamId:m.id,reportId:c.currentManagedReport},l):null;Hl=null;let w=Kr({history:!1}),x=it();if(await w,t)return x===it()&&i===tn&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&A()&&await Ve.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!qi&&["workspace-reports","workspace-bundles"].includes(c.currentView)&&!l.some(m=>m.id===c.currentManagedTeam)){let m=Kr({history:!1}),g=it();return await m,g===it()&&i===tn&&e()&&c.managedSession?.id===s?.id&&c.managedSession?.role===s?.role&&Ve.replaceRoute({view:"home"}),e()}return!qi&&(c.currentWorkspace||d!==l.find(m=>m.id===c.currentManagedTeam)?.name)&&F({animate:!1}),se(),!(a!==null&&!qi&&!await H_(n))}function ya(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!Lee.has(e)||t==="admin")}async function Fee(e,t){qi=!0;try{return await Bee(e,t)}finally{t()&&(qi=!1,se())}}async function Bee(e,t){let n=Hl===it()?Hl:null;if(cn(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await eC(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!ya("manage-bundles")||(r=await m5(),!t()||!A()))||(e=Gu(e,c.managedTeams,r),!e))return!1;let o=n!==null&&Hl===n&&c.currentManagedTeam===e.teamId&&c.currentManagedReport===e.reportId;if(!t()||!A()||e.view!=="home"&&(!c.managedSession||c.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:s}=await Promise.resolve().then(()=>(jv(),UN));if(!t())return!1;let a=await s({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(l,d)=>Sr(l,d,{history:!1}),isCurrent:t});return t()?a.ok?(Hl=it(),la(),Yt({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ot(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return Ud(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let s=e.teamId==null?r.map(oa):Bd(c.managedTeams);return await UP(e,s,t,se)?Yt({...e,bundleTab:c.bundleDetailsTab},c.managedTeams,r):!1}if(e.view==="home")return Kr({history:!1});if(e.view==="manage-deduplication"&&e.linkId)return ya(e.view)&&await oF(e.linkId);if(Object.hasOwn(Wa,e.view))return Pl(e.view,{...e,history:!1});let i=c.managedTeams.find(s=>s.id===e.teamId);return!i||!o&&!await Sr(i,e.reportId,{history:!1})||!t()?!1:(c.currentView!==e.view&&Et(),c.currentView=c.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),F({animate:!1}),Hl=it(),la(),se(),document.querySelector("#main-content")?.scrollTo({top:0}),Yt({...e,view:c.currentView==="links"?"findings":c.currentView},c.managedTeams))}async function Pl(e,t={}){if(t.history!==!1&&A()&&(Ve.active||await Kl(),Ve.active))return Ve.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{},...t.scanMode==="link"?{scanMode:"link"}:{},...t.linkId?{linkId:t.linkId}:{}});if(!(e in Kv)||!A()||!ya(e))return!1;let n=cn(),r=tn;try{let o=await tt();e==="manage-import"&&ya(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(Kv[e],o),!1}return r!==tn||n!==it()||!A()||!ya(e)?!1:(c.currentView=e,c.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId}:null:null,c.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,F({animate:!1}),se(),Kl(),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)}function Qt(){return Oee??=Pee().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function Pee(){let e=lr();if(e){Om(e.mode),c.managed=e.managed,Cm().then(o=>{if(o&&o!=="standalone")return jl(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Hv(!zu());let t=Cm(),n=await U0(t,zu()?0:3e3),r=lr();if(r)return n&&n!=="standalone"?jl(n):jl(r,{runtime:!1});if(n&&n!=="standalone")return jl(n);n==="standalone"&&_m(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Ri(n===null),gb(!0),Hv(!1),yi(me.status),se(),n===null&&t.then(o=>{let i=lr(),s=o&&o!=="standalone"?o:i??o;if(s==="standalone"){if(_m(),Gr){Gr.serverMode="standalone",Gr.serverModeConfig=null,Gr.serverModeSelection=null,Gr.localMode=!1;return}return Ri(!1),yi(me.status),se()}if(s)return jl(s,{runtime:s!==i})}).catch(o=>console.warn("server mode probe:",o))}function Nee(){let e=ye?.querySelector("#user-menu"),t=ye?.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 Dee(e){ba=e,ye=e.renderRoot,G5=ye.querySelector("#file-list"),ZP(ye.querySelector("#encryption-toggle")),aN(ye.querySelector("#storage-status")),ye.addEventListener("click",GN),ye.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),GN(t))}),ye.addEventListener("dblclick",See),ye.addEventListener("dragstart",_ee),ye.addEventListener("dragend",Cee),ye.addEventListener("dragover",Eee),ye.addEventListener("dragleave",Ree),ye.addEventListener("drop",Tee),Jn(ye,vee),ye.querySelector("#sidebar-search-input")?.addEventListener("input",wee),Nee(),yi(me.status),lr()||Hv(!zu()),se(),me.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=lr(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return jl(z0(r,t))}),Qt(),c.serverMode==="managed"&&Kl()}var ba,ye,G5,kh,Q5,q5,xh,Wv,Vv,ree,jN,ga,vo,$h,HN,Sh,iee,see,XN,hee,mee,gee,bee,ZN,j5,H5,vee,kee,W5,Y5,V5,J5,Gr,X5,tn,YN,tu,Wl,Vl,qi,wh,Iee,K5,Kv,Lee,Hl,Oee,Z5,ui=$(()=>{"use strict";ml();xn();P();un();wt();q();co();xn();ef();Fl();id();Od();NP();zP();jP();WP();Ml();GP();ri();Ti();Yp();nv();M_();qP();yh();y5();lN();ln();cN();F_();O_();dN();kv();sa();Zs();hN();g_();gN();yN();wN();xN();SN();CN();RN();MN();IN();uo();jt();ii();Os();ba=null,ye=null,G5=null;dA();kh=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,Q5="application/x-deepview-report",q5="application/x-deepview-source-ws",xh="application/x-deepview-bundle",Wv=!1,Vv=!1,ree={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[vt]:"Links"},jN=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",vt],ga="",vo=!1,$h=new Map,HN="",Sh=new Bv;iee=p`<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>`,see=p`<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>`;XN=p`${te(Yn)}`;hee=p`${te(Ls)}`,mee=p`<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>`,gee=p`<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>`,bee=p`<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>`,ZN=p`<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>`;j5=(e,t)=>Ne(e).localeCompare(Ne(t));H5=!1;At(()=>{se()});e$(QN);vee={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}};kee={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};me.onStatusChange(yi);W5=!1,Y5=!1;me.onPersistenceDegraded(e=>{yi(),e?oD():Y5=!1});V5=!1,J5=!1;me.onProxyAuthRequired(e=>{yi(),e?iD():J5=!1});Gr=null,X5=null,tn=0,YN=0,tu=null,Wl=!0,Vl=!0,qi=!1,wh=null;G7((e,t,n)=>eC(e,{strict:!0,signal:t,revision:n}));Iee=HP(IP),K5=0;Kv={manage:"admin: bundle load failed:","admin-users":"admin: bundle load failed:","manage-repos":"admin: repos bundle load failed:","manage-reports":"admin: reports bundle load failed:","manage-bundles":"admin: bundles bundle load failed:","manage-history":"admin: history bundle load failed:","manage-teams":"admin: teams bundle load failed:","manage-import":"admin: import bundle load failed:","manage-links":"admin: links bundle load failed:","manage-deduplication":"admin: deduplication bundle load failed:","manage-scans":"admin: scans bundle load failed:"},Lee=new Set(["admin-users","manage-repos","manage-teams","manage-import","manage-deduplication"]),Hl=null;document.addEventListener("managed-bundle-open",e=>{if(A()&&typeof e.detail?.id=="string"){let t=oa(e.detail),n=c.managedTeams,r=n.find(o=>o.id===c.currentManagedTeam&&o.bundles?.some(i=>i.id===t.managedId))??n.find(o=>o.bundles?.some(i=>i.id===t.managedId));Ve.navigate(ia(n,t,r?.id,c.currentView==="bundles"?c.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{Kl()});document.addEventListener("managed-feed-closed",()=>{Wl=!0,Bl(),Jf(),Kr({history:!1}).then(()=>Kl()),Ot("Workspace access changed. Refreshing your session.")});document.addEventListener("managed-notice",e=>Ot(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&Pl(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});Z5=class extends he{static styles=[N(ha),N(YP)];render(){return p`<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">${Bo()}</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><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><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><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> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${te(Eb)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){Dee(this)}};customElements.define("app-sidebar",Z5)});var Xv,sC=$(()=>{Xv=`dialog{max-width:640px;width:min(94vw,640px)}header h3{margin:0 0 .4rem}.finding{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}textarea{display:block;width:100%;box-sizing:border-box;min-height:9rem;max-height:50vh;resize:vertical;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;line-height:1.4;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}
|
|
378
378
|
`});var nu,ew=$(()=>{nu=`.managed-comment{container:managed-comment / inline-size;white-space:normal}.managed-comment-row{display:grid;grid-template-columns:minmax(0,max-content) minmax(0,1fr) auto;align-items:start;gap:.35rem .65rem;line-height:1.5}.managed-comment-author{grid-column:1;grid-row:1;display:flex;align-items:center;gap:.45rem;min-width:0;max-width:14rem;& strong{overflow:hidden;text-overflow:ellipsis;font-weight:600}}.managed-comment-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:1.3rem;height:1.3rem;overflow:hidden;border-radius:50%;background:rgb(from var(--muted) r g b / .15);color:var(--muted);font-size:.65rem;font-weight:600;& img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}& img[hidden]{display:none}}.managed-comment-body{grid-column:2;grid-row:1;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.managed-comment-time{color:var(--muted);font-size:.7rem;font-weight:400;white-space:nowrap;text-align:right}.managed-comment-meta{grid-column:3;grid-row:1;justify-self:end;display:flex;align-items:center;gap:.5rem;min-height:1.3rem}.managed-comment-actions{display:flex;align-items:center;gap:.15rem}.managed-comment-row:not(:has(.managed-comment-author)){grid-template-columns:minmax(0,1fr) auto;.managed-comment-body{grid-column:1}.managed-comment-meta{grid-column:2}}@container managed-comment (max-width: 28rem){.managed-comment-row:has(.managed-comment-meta){grid-template-columns:minmax(0,max-content) minmax(0,1fr);.managed-comment-meta{grid-column:1 / -1;grid-row:1}.managed-comment-author,.managed-comment-body{grid-row:2}}.managed-comment-row:not(:has(.managed-comment-author)){grid-template-columns:minmax(0,1fr)}.managed-comment-author{max-width:9rem}}
|
|
379
379
|
`});var HD,jD=$(()=>{HD=`dialog{width:min(94vw,800px);max-width:800px;max-height:calc(100dvh - 4rem);margin-block:2rem;padding:0}dialog[open]{display:flex;flex-direction:column}.discussion-header{display:flex;align-items:start;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.discussion-heading{flex:1;min-width:0}header h3{display:flex;align-items:center;gap:.5rem;margin:0;line-height:1.5}.comment-count{padding:.05rem .4rem;border-radius:1rem;background:rgb(from var(--muted) r g b / .12);color:var(--muted);font-size:.72rem;font-weight:400}.discussion-finding{margin-top:.4rem;font-size:.85rem;overflow-wrap:anywhere}.loc{margin-top:.25rem;color:var(--muted)}.header-actions{display:flex;flex:none;align-items:center;gap:.7rem}.header-actions button{display:inline-flex;flex:none;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:0;background:transparent;color:var(--muted);line-height:0;& svg{display:block;width:1rem;height:1rem}&:hover:not(:disabled){color:var(--text)}&:disabled{opacity:.5}}.comment-action{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:.2rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);cursor:default;& svg{width:.9rem;height:.9rem}&:hover:not(:disabled),&[aria-pressed=true]{border-color:var(--border);background:rgb(from var(--muted) r g b / .08);color:var(--text)}&.danger:hover:not(:disabled),&[aria-expanded=true]{color:var(--critical, #f87171)}&:disabled{opacity:.5}}button:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 3px)}.discussion-log{min-height:0;max-height:50dvh;overflow-y:auto;overscroll-behavior:contain;padding:.5rem;scrollbar-gutter:stable}.comments{display:flex;flex-direction:column;gap:.15rem;list-style:none}.comment{padding:.6rem .75rem;border-radius:var(--ui-radius, 6px);font-size:.84rem}.comment:hover{background:rgb(from var(--muted) r g b / .035)}.comment.editing{background:rgb(from var(--accent) r g b / .08);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .2)}.delete-confirm{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.5rem;margin-top:.6rem;color:var(--muted);font-size:.75rem;& button{padding:.25rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:transparent;color:var(--text);font:inherit;&:hover:not(:disabled){background:rgb(from var(--muted) r g b / .08)}&.danger{color:var(--critical, #f87171)}&:disabled{opacity:.5}}}.empty-discussion{padding:2.5rem 0;color:var(--muted);text-align:center;font-size:.85rem}.composer{padding:1rem 1.25rem;border-top:1px solid var(--border)}.composer-label{display:flex;align-items:center;gap:.45rem;margin-bottom:.6rem;font-size:.78rem}.composer-label strong{font-weight:600}textarea{min-height:4.5rem;max-height:25dvh;font-size:.84rem}.nwd-actions{border:0;padding-top:0;margin-top:.65rem}.shortcut{color:var(--muted);font-size:.7rem}.error{padding:.65rem 1.25rem;color:var(--danger, #c44);font-size:.8rem}.read-only{padding:1rem 1.25rem;border-top:1px solid var(--border);color:var(--muted);font-size:.8rem}@media(width<=480px){.discussion-header,.composer{padding:.8rem}.discussion-log{padding-inline:.3rem}.comment{padding-inline:.5rem}.shortcut{max-width:8rem}}
|
|
380
|
-
`});var VD={};uu(VD,{openManagedCommentsDialog:()=>yte});function yte(e,t){return ge("managed-comments-dialog",{finding:e,changed:t})}var vC,KD=$(()=>{"use strict";P();wt();q();BS();Ed();Qs();Ly();jt();Ee();sC();ew();jD();vC=class extends H{static styles=[...H.styles,N(Xv),N(nu),N(HD)];static properties={finding:{attribute:!1},changed:{attribute:!1},_comments:{state:!0},_value:{state:!0},_editing:{state:!0},_busy:{state:!0},_error:{state:!0},_deleting:{state:!0}};constructor(){super(),this.finding=null,this.changed=null,this._comments=[],this._value="",this._editing=null,this._busy=!1,this._error="",this._deleting=null}connectedCallback(){super.connectedCallback(),document.addEventListener("managed-comments-reset",this._close)}disconnectedCallback(){this._unsubscribeComments?.(),this._unsubscribeComments=null,document.removeEventListener("managed-comments-reset",this._close),super.disconnectedCallback()}beforeOpen(){this._current=Nf(this.finding?._managedReportId),this._comments=si(this.finding),this._unsubscribeComments?.(),this._unsubscribeComments=My(this.finding.id,this._commentsChanged),this._refresh({scroll:!0})}_commentsChanged=()=>{if(!this.isConnected)return;if(!this._current()){this._close();return}let t=this.renderRoot.querySelector(".discussion-log"),n=t&&t.scrollHeight-t.scrollTop-t.clientHeight<32;this._comments=si(this.finding),n&&this._scrollToLatest()};_close=()=>this._finish(null);_scrollToLatest=async()=>{await this.updateComplete;let t=this.renderRoot.querySelector(".discussion-log");t&&(t.scrollTop=t.scrollHeight)};_refresh=async({scroll:t=!1}={})=>{if(!this._current()){this._close();return}let n=this.renderRoot.querySelector(".discussion-log"),r=n&&n.scrollHeight-n.scrollTop-n.clientHeight<32;this._busy=!0,this._error="";let o=await Cd(this.finding._managedReportId);if(this.isConnected){if(!this._current()){this._close();return}if(this._busy=!1,!o){this._error="Could not load comments. Please retry.";return}this._comments=si(this.finding),this.changed?.(),(t||r)&&this._scrollToLatest()}};_edit(t){this._deleting=null,this._editing=t,this._value=t.body,this._error="",this.updateComplete.then(()=>this.renderRoot.querySelector("textarea")?.focus())}_cancelEdit=()=>{this._editing=null,this._value="",this._error=""};_delete=async t=>{if(this._busy||!this._current())return;this._busy=!0,this._error="";let n=await lL(this.finding,t);if(!this.isConnected){n===204&&this._current()&&this.changed?.();return}if(!this._current()){this._close();return}if(this._busy=!1,this._deleting=null,n===409){await this._refresh(),this.isConnected&&(this._error="This comment changed elsewhere. Review the latest version before deleting it.");return}if(n!==204){this._error=n===403||n===404?"This comment is unavailable or you no longer have permission to delete it.":"Could not delete the comment. Please retry.";return}this._comments=si(this.finding),this._editing?.id===t.id&&this._cancelEdit(),this.changed?.()};_save=async()=>{let t=this._value.trim();if(this._busy||!t||t.length>1e4||!this._current())return;this._busy=!0,this._error="";let n=await aL(this.finding,t,this._editing);if(!this.isConnected)return;if(!this._current()){this._close();return}if(this._busy=!1,n.status===409){if(await this._refresh(),!this.isConnected)return;this._editing=this._comments.find(o=>o.id===this._editing?.id)??this._editing,this._error="This comment changed elsewhere. Your draft is kept. Review the latest version above before saving again.";return}if(!n.comment){this._error=n.status===403||n.status===404?"You no longer have permission to save this comment.":"Could not save the comment. Your draft is kept; please retry.";return}let r=this._editing!=null;this._comments=si(this.finding),this._cancelEdit(),this.changed?.(),r||await this._scrollToLatest(),await this.updateComplete,this.renderRoot.querySelector("textarea")?.focus()};_keydown=t=>{t.key==="Enter"&&(t.ctrlKey||t.metaKey)&&(t.preventDefault(),this._save())};_commentActions(t,n){let r=n&&t.authorId===c.managedSession?.id,o=Iy(t);return!r&&!o?b:p`${r?p`<button type="button" class="comment-action" aria-label="Edit comment" aria-pressed="${this._editing?.id===t.id}" ?disabled="${this._busy}" @click="${()=>this._edit(t)}">${te(eA)}</button>`:b} ${o?p`<button type="button" class="comment-action danger" aria-label="Delete comment" aria-expanded="${this._deleting===t.id}" ?disabled="${this._busy}" @click="${()=>{this._deleting=this._deleting===t.id?null:t.id}}">${te(tA)}</button>`:b}`}_deleteConfirmation(t){return this._deleting!==t.id||!Iy(t)?b:p`<div class="delete-confirm" role="group" aria-label="Confirm comment deletion"><span>Delete this comment?</span> <button type="button" ?disabled="${this._busy}" @click="${()=>{this._deleting=null}}">Cancel</button> <button type="button" class="danger" ?disabled="${this._busy}" @click="${()=>this._delete(t)}">Delete</button></div>`}render(){let t=Ay();return p`<dialog aria-labelledby="comments-title" @close="${this._onClose}"><header class="discussion-header"><div class="discussion-heading"><h3 id="comments-title">Discussion <span class="comment-count">${this._comments.length}</span></h3>${this.finding?.title?p`<p class="discussion-finding">${this.finding.title}</p>`:b}<p class="loc">${this.finding?.file??""}</p></div><div class="header-actions"><button type="button" class="refresh" aria-label="Refresh discussion" ?disabled="${this._busy}" @click="${()=>this._refresh()}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8M21 3v5h-5"/></svg></button> <button type="button" class="close" aria-label="Close discussion" @click="${this._close}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="m6 6 12 12M6 18 18 6"/></svg></button></div></header><section class="discussion-log" role="log" aria-label="Discussion" aria-relevant="additions text" aria-busy="${this._busy}"><ol class="comments">${this._comments.map(n=>p`<li class="${`comment${this._editing?.id===n.id?" editing":""}`}">${Rd(n,zi(n.body),this._commentActions(n,t))} ${this._deleteConfirmation(n)}</li>`)}</ol>${this._comments.length===0?p`<p class="empty-discussion">${this._busy?"Loading discussion\u2026":t?"No comments yet. Start the discussion below.":"No comments yet."}</p>`:b}</section>${this._error?p`<p class="error" role="alert">${this._error}</p>`:b} ${t?p`<form class="composer" @submit="${n=>{n.preventDefault(),this._save()}}"><label class="composer-label" for="comment-body">${PS(c.managedSession.id,c.managedSession.login)} ${this._editing?"Edit your comment":p`Reply as <strong>${c.managedSession.login}</strong>`}</label> <textarea id="comment-body" rows="3" maxlength="${1e4}" .value="${this._value}" placeholder="Write a comment…" aria-describedby="comment-shortcut" ?disabled="${this._busy}" @input="${n=>{this._value=n.target.value}}" @keydown="${this._keydown}"></textarea><footer class="nwd-actions"><span id="comment-shortcut" class="shortcut">Ctrl / ⌘ + Enter to send</span><span class="nwd-spacer"></span> ${this._editing?p`<button type="button" class="quiet" ?disabled="${this._busy}" @click="${this._cancelEdit}">Cancel edit</button>`:b} <button type="submit" class="primary" ?disabled="${this._busy||!this._value.trim()}">${this._editing?"Save changes":"Comment"}</button></footer></form>`:p`<p class="read-only">You have read-only access to this discussion.</p>`}</dialog>`}};customElements.define("managed-comments-dialog",vC)});P();ht();un();So();nt();globalThis[Symbol.for("@rray/frontend")]={LitElement:fe,html:p,nothing:b,render:xe,unsafeCSS:N,StateElement:ce,classMap:Y,repeat:ve,styleMap:Oe};nr();q();co();ui();sa();ii();jv();xg();q();co();gf();var lD={attach:{title:"Synced triage on report attach",intro:"have triage from your workspace that disagrees with your local view on",trailingNote:"Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.",importedSideLabel:"Apply from chain",applyButton:"Apply"},chain:{title:"Triage conflict from peer update",intro:"were changed by a peer (or by another tab) in a way that disagrees with your local triage on",trailingNote:`Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep for each \u2014 a "keep current" pick re-publishes your local value to the chain on your next save.`,importedSideLabel:"Apply from chain",applyButton:"Apply"}};function cD(){BM(async(e,t,n)=>{let r=J1(e);try{return await hd(e,r,lD[n]??lD.attach)}catch{let o=e.length;return alert(`${n==="attach"?"A report attach":"A workspace sync"} had ${o} triage disagreement${o===1?"":"s"} with your local view. Kept your local values because another dialog is open. ${n==="attach"?"Detach and re-attach the report to pick again.":"Your local values will re-publish to the chain on the next change."}`),null}})}co();P();Ee();var tC=class extends H{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=""}_finish(t){this._value="",super._finish(t)}_onCancel=()=>this._finish(null);_onInput=t=>{this._value=t.target.value};_onSubmit=()=>{let t=this._value??"";t&&this._finish(t)};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onSubmit())};render(){let t=(this._value??"").length>0,n=this.retry?"That password didn't match. Try again, or cancel to leave the workspace unsynced for now.":"This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.";return p`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${n}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onSubmit}">${this.retry?"Retry":"Authenticate"}</button></footer></dialog>`}};customElements.define("sync-auth-dialog",tC);function dD({retry:e=!1}={}){return ge("sync-auth-dialog",{retry:!!e})}function uD(){FM(async({retry:e})=>{try{return await dD({retry:e})}catch(t){return console.warn("Sync auth dialog failed to open:",t),null}})}P();q();var Yv="https://triage.space/",zee=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function Uee(){for(let e of zee)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var jee=["deepview.triage","deepview.triage.pending"],Hee="deepview.repoUrls";function Wee(){try{for(let e of jee)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(Hee);if(e){let t=JSON.parse(e);if(t&&typeof t=="object"&&Object.keys(t).length>0)return!0}}catch{return!0}return!1}async function Vee(){if(Wee())return!0;let e=[];try{e=await Pe()}catch{return!0}if(e.length>0)return!0;try{if(de().length>0)return!0}catch{return!0}try{return await Tc()}catch{return!0}}var nC=class extends fe{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let t=this.querySelector("dialog");t&&t.showModal();let n=this.querySelector("button.om-stay");n&&n.focus()}_finish(t){if(this._settled)return;this._settled=!0;let n=this.querySelector("dialog");n&&n.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let t=()=>p`<a class="om-link" href="${Yv}" target="_blank" rel="noopener noreferrer">${Yv}</a>`;return p`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${t()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${t()}.</p>${this.supportsSync?p`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:p`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define("origin-migration-dialog",nC);function Kee(e){return new Promise(t=>{let n=document.createElement("origin-migration-dialog");n.supportsSync=e.supportsSync,n.addEventListener("resolve",r=>{n.remove(),t(!!r.detail)}),document.body.append(n)})}async function pD(){let e=Uee();return e?await Vee()?await Kee(e)?(location.assign(Yv),!0):!1:(location.replace(Yv),!0):!1}ln();P();q();Ee();vl();var rC=class extends H{static styles=[...H.styles,N(Dr)];static properties={encoded:{type:String},_stage:{state:!0},_password:{state:!0},_name:{state:!0},_decoded:{state:!0},_existingById:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.encoded="",this._stage="password",this._password="",this._name="",this._decoded=null,this._existingById=null,this._busy=!1,this._error="",this._settled=!1}focusInitial(){this._focusActiveInput()}updated(t){t.has("_stage")&&this._focusActiveInput()}_focusActiveInput(){if(this._stage==="password")this.renderRoot.querySelector('input[type="password"]')?.focus();else if(this._stage==="name"){let t=this.renderRoot.querySelector('input[data-role="name"]');t&&(t.focus(),t.select())}}_finish(t){this._settled||(this._decoded=null,this._password="",this.encoded="",super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onNameInput=t=>{this._name=t.target.value};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await Ux({encoded:this.encoded,password:this._password});if(this._settled)return;let n=de().find(r=>r.id===t.id)??null;this._decoded=t,this._existingById=n,this._name=t.name,this._password="",this._stage="name"}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onAttach=()=>{if(!this._decoded)return;let t=zo(this._name);if(!t)return;let n=de().find(r=>r.id===this._decoded.id)??null;if(n){this._existingById=n;return}this._nameCollision(t)||this._finish({id:this._decoded.id,name:t,privateKeyBase64:this._decoded.privateKeyBase64})};_nameCollision(t){if(!t||!this._decoded)return null;for(let n of de())if(n.id!==this._decoded.id&&zo(n.name)===t)return n;return null}_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._stage==="password"?this._onUnlock():this._stage==="name"&&this._onAttach())};_passwordStage(){return p`<p class="nwd-note ui-hint">Someone shared a workspace with you. Enter the password they sent separately to attach it to this browser.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?p`<p class="wsl-error" role="alert">${this._error}</p>`:b}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer>`}_alreadyAttachedStage(){let t=this._existingById;return p`<p class="nwd-note">This workspace is already attached as <strong>"${t?.name??""}"</strong>. Open it from the sidebar.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onCancel}">Close</button></footer>`}_nameStage(){if(this._existingById)return this._alreadyAttachedStage();let t=zo(this._name),n=this._nameCollision(t),r=!!t&&!n;return p`<p class="nwd-note ui-hint">Pick a name for the workspace on this device. The shared identity is preserved either way — only the visible label changes.</p><label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> ${n?p`<p class="wsl-error" role="alert">A workspace named "${t}" already exists on this device. Pick a different name.</p>`:b}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!r}" @click="${this._onAttach}">Attach</button></footer>`}render(){let t=this._stage==="password"?"Attach shared workspace":this._existingById?"Workspace already attached":"Name the workspace";return p`<dialog @close="${this._onClose}"><header><h3>${t}</h3></header>${this._stage==="password"?this._passwordStage():this._nameStage()}</dialog>`}};customElements.define("workspace-unlock-link-dialog",rC);function fD({encoded:e}={}){return Ps("workspace-unlock-link-dialog",{encoded:e??""},t=>{t.encoded=""})}y5();q();ui();var zn=null,Jv=!1,_h=null;function Gee(e){if(!e)return"Could not unlock. Try again.";switch(e.name??""){case"NotAllowedError":case"AbortError":return"";case"SecurityError":return"The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.";case"InvalidStateError":return"The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.";case"NotSupportedError":return"This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.";case"NetworkError":return"A network error prevented the passkey from completing. Check your connection and try again.";case"UnknownError":return"The authenticator returned an unknown error. Try again, or use a different passkey.";default:{let n=e.message??String(e);return n.length>200?n.slice(0,197)+"\u2026":n}}}function qee(){if(zn)return zn;zn=document.createElement("div"),zn.id="lock-overlay",zn.setAttribute("role","dialog"),zn.setAttribute("aria-modal","true"),zn.setAttribute("aria-label","Unlock DeepView"),zn.innerHTML=`
|
|
380
|
+
`});var VD={};uu(VD,{openManagedCommentsDialog:()=>yte});function yte(e,t){return ge("managed-comments-dialog",{finding:e,changed:t})}var vC,KD=$(()=>{"use strict";P();wt();q();BS();Ed();Qs();Ly();jt();Ee();sC();ew();jD();vC=class extends H{static styles=[...H.styles,N(Xv),N(nu),N(HD)];static properties={finding:{attribute:!1},changed:{attribute:!1},_comments:{state:!0},_value:{state:!0},_editing:{state:!0},_busy:{state:!0},_error:{state:!0},_deleting:{state:!0}};constructor(){super(),this.finding=null,this.changed=null,this._comments=[],this._value="",this._editing=null,this._busy=!1,this._error="",this._deleting=null}connectedCallback(){super.connectedCallback(),document.addEventListener("managed-comments-reset",this._close)}disconnectedCallback(){this._unsubscribeComments?.(),this._unsubscribeComments=null,document.removeEventListener("managed-comments-reset",this._close),super.disconnectedCallback()}beforeOpen(){this._current=Nf(this.finding?._managedReportId),this._comments=si(this.finding),this._unsubscribeComments?.(),this._unsubscribeComments=My(this.finding.id,this._commentsChanged),this._refresh({scroll:!0})}_commentsChanged=()=>{if(!this.isConnected)return;if(!this._current()){this._close();return}let t=this.renderRoot.querySelector(".discussion-log"),n=t&&t.scrollHeight-t.scrollTop-t.clientHeight<32;this._comments=si(this.finding),n&&this._scrollToLatest()};_close=()=>this._finish(null);_scrollToLatest=async()=>{await this.updateComplete;let t=this.renderRoot.querySelector(".discussion-log");t&&(t.scrollTop=t.scrollHeight)};_refresh=async({scroll:t=!1}={})=>{if(!this._current()){this._close();return}let n=this.renderRoot.querySelector(".discussion-log"),r=n&&n.scrollHeight-n.scrollTop-n.clientHeight<32;this._busy=!0,this._error="";let o=await Cd(this.finding._managedReportId);if(this.isConnected){if(!this._current()){this._close();return}if(this._busy=!1,!o){this._error="Could not load comments. Please retry.";return}this._comments=si(this.finding),this.changed?.(),(t||r)&&this._scrollToLatest()}};_edit(t){this._deleting=null,this._editing=t,this._value=t.body,this._error="",this.updateComplete.then(()=>this.renderRoot.querySelector("textarea")?.focus())}_cancelEdit=()=>{this._editing=null,this._value="",this._error=""};_delete=async t=>{if(this._busy||!this._current())return;this._busy=!0,this._error="";let n=await lL(this.finding,t);if(!this.isConnected){n===204&&this._current()&&this.changed?.();return}if(!this._current()){this._close();return}if(this._busy=!1,this._deleting=null,n===409){await this._refresh(),this.isConnected&&(this._error="This comment changed elsewhere. Review the latest version before deleting it.");return}if(n!==204){this._error=n===403||n===404?"This comment is unavailable or you no longer have permission to delete it.":"Could not delete the comment. Please retry.";return}this._comments=si(this.finding),this._editing?.id===t.id&&this._cancelEdit(),this.changed?.()};_save=async()=>{let t=this._value.trim();if(this._busy||!t||t.length>1e4||!this._current())return;this._busy=!0,this._error="";let n=await aL(this.finding,t,this._editing);if(!this.isConnected)return;if(!this._current()){this._close();return}if(this._busy=!1,n.status===409){if(await this._refresh(),!this.isConnected)return;this._editing=this._comments.find(o=>o.id===this._editing?.id)??this._editing,this._error="This comment changed elsewhere. Your draft is kept. Review the latest version above before saving again.";return}if(!n.comment){this._error=n.status===403||n.status===404?"You no longer have permission to save this comment.":"Could not save the comment. Your draft is kept; please retry.";return}let r=this._editing!=null;this._comments=si(this.finding),this._cancelEdit(),this.changed?.(),r||await this._scrollToLatest(),await this.updateComplete,this.renderRoot.querySelector("textarea")?.focus()};_keydown=t=>{t.key==="Enter"&&(t.ctrlKey||t.metaKey)&&(t.preventDefault(),this._save())};_commentActions(t,n){let r=n&&t.authorId===c.managedSession?.id,o=Iy(t);return!r&&!o?b:p`${r?p`<button type="button" class="comment-action" aria-label="Edit comment" aria-pressed="${this._editing?.id===t.id}" ?disabled="${this._busy}" @click="${()=>this._edit(t)}">${te(eA)}</button>`:b} ${o?p`<button type="button" class="comment-action danger" aria-label="Delete comment" aria-expanded="${this._deleting===t.id}" ?disabled="${this._busy}" @click="${()=>{this._deleting=this._deleting===t.id?null:t.id}}">${te(tA)}</button>`:b}`}_deleteConfirmation(t){return this._deleting!==t.id||!Iy(t)?b:p`<div class="delete-confirm" role="group" aria-label="Confirm comment deletion"><span>Delete this comment?</span> <button type="button" ?disabled="${this._busy}" @click="${()=>{this._deleting=null}}">Cancel</button> <button type="button" class="danger" ?disabled="${this._busy}" @click="${()=>this._delete(t)}">Delete</button></div>`}render(){let t=Ay();return p`<dialog aria-labelledby="comments-title" @close="${this._onClose}"><header class="discussion-header"><div class="discussion-heading"><h3 id="comments-title">Discussion <span class="comment-count">${this._comments.length}</span></h3>${this.finding?.title?p`<p class="discussion-finding">${this.finding.title}</p>`:b}<p class="loc">${this.finding?.file??""}</p></div><div class="header-actions"><button type="button" class="refresh" aria-label="Refresh discussion" ?disabled="${this._busy}" @click="${()=>this._refresh()}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8M21 3v5h-5"/></svg></button> <button type="button" class="close" aria-label="Close discussion" @click="${this._close}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="m6 6 12 12M6 18 18 6"/></svg></button></div></header><section class="discussion-log" role="log" aria-label="Discussion" aria-relevant="additions text" aria-busy="${this._busy}"><ol class="comments">${this._comments.map(n=>p`<li class="${`comment${this._editing?.id===n.id?" editing":""}`}">${Rd(n,zi(n.body),this._commentActions(n,t))} ${this._deleteConfirmation(n)}</li>`)}</ol>${this._comments.length===0?p`<p class="empty-discussion">${this._busy?"Loading discussion\u2026":t?"No comments yet. Start the discussion below.":"No comments yet."}</p>`:b}</section>${this._error?p`<p class="error" role="alert">${this._error}</p>`:b} ${t?p`<form class="composer" @submit="${n=>{n.preventDefault(),this._save()}}"><label class="composer-label" for="comment-body">${PS(c.managedSession.id,c.managedSession.login)} ${this._editing?"Edit your comment":p`Reply as <strong>${c.managedSession.login}</strong>`}</label> <textarea id="comment-body" rows="3" maxlength="${1e4}" .value="${this._value}" placeholder="Write a comment…" aria-describedby="comment-shortcut" ?disabled="${this._busy}" @input="${n=>{this._value=n.target.value}}" @keydown="${this._keydown}"></textarea><footer class="nwd-actions"><span id="comment-shortcut" class="shortcut">Ctrl / ⌘ + Enter to send</span><span class="nwd-spacer"></span> ${this._editing?p`<button type="button" class="quiet" ?disabled="${this._busy}" @click="${this._cancelEdit}">Cancel edit</button>`:b} <button type="submit" class="primary" ?disabled="${this._busy||!this._value.trim()}">${this._editing?"Save changes":"Comment"}</button></footer></form>`:p`<p class="read-only">You have read-only access to this discussion.</p>`}</dialog>`}};customElements.define("managed-comments-dialog",vC)});P();ht();un();So();nt();globalThis[Symbol.for("@rray/frontend")]={LitElement:he,html:p,nothing:b,render:xe,unsafeCSS:N,StateElement:ce,classMap:Y,repeat:ve,styleMap:Oe};nr();q();co();ui();sa();ii();jv();xg();q();co();gf();var lD={attach:{title:"Synced triage on report attach",intro:"have triage from your workspace that disagrees with your local view on",trailingNote:"Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.",importedSideLabel:"Apply from chain",applyButton:"Apply"},chain:{title:"Triage conflict from peer update",intro:"were changed by a peer (or by another tab) in a way that disagrees with your local triage on",trailingNote:`Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep for each \u2014 a "keep current" pick re-publishes your local value to the chain on your next save.`,importedSideLabel:"Apply from chain",applyButton:"Apply"}};function cD(){BM(async(e,t,n)=>{let r=J1(e);try{return await hd(e,r,lD[n]??lD.attach)}catch{let o=e.length;return alert(`${n==="attach"?"A report attach":"A workspace sync"} had ${o} triage disagreement${o===1?"":"s"} with your local view. Kept your local values because another dialog is open. ${n==="attach"?"Detach and re-attach the report to pick again.":"Your local values will re-publish to the chain on the next change."}`),null}})}co();P();Ee();var tC=class extends H{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=""}_finish(t){this._value="",super._finish(t)}_onCancel=()=>this._finish(null);_onInput=t=>{this._value=t.target.value};_onSubmit=()=>{let t=this._value??"";t&&this._finish(t)};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onSubmit())};render(){let t=(this._value??"").length>0,n=this.retry?"That password didn't match. Try again, or cancel to leave the workspace unsynced for now.":"This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.";return p`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${n}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onSubmit}">${this.retry?"Retry":"Authenticate"}</button></footer></dialog>`}};customElements.define("sync-auth-dialog",tC);function dD({retry:e=!1}={}){return ge("sync-auth-dialog",{retry:!!e})}function uD(){FM(async({retry:e})=>{try{return await dD({retry:e})}catch(t){return console.warn("Sync auth dialog failed to open:",t),null}})}P();q();var Yv="https://triage.space/",zee=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function Uee(){for(let e of zee)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var jee=["deepview.triage","deepview.triage.pending"],Hee="deepview.repoUrls";function Wee(){try{for(let e of jee)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(Hee);if(e){let t=JSON.parse(e);if(t&&typeof t=="object"&&Object.keys(t).length>0)return!0}}catch{return!0}return!1}async function Vee(){if(Wee())return!0;let e=[];try{e=await Pe()}catch{return!0}if(e.length>0)return!0;try{if(de().length>0)return!0}catch{return!0}try{return await Tc()}catch{return!0}}var nC=class extends he{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let t=this.querySelector("dialog");t&&t.showModal();let n=this.querySelector("button.om-stay");n&&n.focus()}_finish(t){if(this._settled)return;this._settled=!0;let n=this.querySelector("dialog");n&&n.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let t=()=>p`<a class="om-link" href="${Yv}" target="_blank" rel="noopener noreferrer">${Yv}</a>`;return p`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${t()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${t()}.</p>${this.supportsSync?p`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:p`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define("origin-migration-dialog",nC);function Kee(e){return new Promise(t=>{let n=document.createElement("origin-migration-dialog");n.supportsSync=e.supportsSync,n.addEventListener("resolve",r=>{n.remove(),t(!!r.detail)}),document.body.append(n)})}async function pD(){let e=Uee();return e?await Vee()?await Kee(e)?(location.assign(Yv),!0):!1:(location.replace(Yv),!0):!1}ln();P();q();Ee();vl();var rC=class extends H{static styles=[...H.styles,N(Dr)];static properties={encoded:{type:String},_stage:{state:!0},_password:{state:!0},_name:{state:!0},_decoded:{state:!0},_existingById:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.encoded="",this._stage="password",this._password="",this._name="",this._decoded=null,this._existingById=null,this._busy=!1,this._error="",this._settled=!1}focusInitial(){this._focusActiveInput()}updated(t){t.has("_stage")&&this._focusActiveInput()}_focusActiveInput(){if(this._stage==="password")this.renderRoot.querySelector('input[type="password"]')?.focus();else if(this._stage==="name"){let t=this.renderRoot.querySelector('input[data-role="name"]');t&&(t.focus(),t.select())}}_finish(t){this._settled||(this._decoded=null,this._password="",this.encoded="",super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onNameInput=t=>{this._name=t.target.value};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await Ux({encoded:this.encoded,password:this._password});if(this._settled)return;let n=de().find(r=>r.id===t.id)??null;this._decoded=t,this._existingById=n,this._name=t.name,this._password="",this._stage="name"}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onAttach=()=>{if(!this._decoded)return;let t=zo(this._name);if(!t)return;let n=de().find(r=>r.id===this._decoded.id)??null;if(n){this._existingById=n;return}this._nameCollision(t)||this._finish({id:this._decoded.id,name:t,privateKeyBase64:this._decoded.privateKeyBase64})};_nameCollision(t){if(!t||!this._decoded)return null;for(let n of de())if(n.id!==this._decoded.id&&zo(n.name)===t)return n;return null}_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._stage==="password"?this._onUnlock():this._stage==="name"&&this._onAttach())};_passwordStage(){return p`<p class="nwd-note ui-hint">Someone shared a workspace with you. Enter the password they sent separately to attach it to this browser.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?p`<p class="wsl-error" role="alert">${this._error}</p>`:b}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer>`}_alreadyAttachedStage(){let t=this._existingById;return p`<p class="nwd-note">This workspace is already attached as <strong>"${t?.name??""}"</strong>. Open it from the sidebar.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onCancel}">Close</button></footer>`}_nameStage(){if(this._existingById)return this._alreadyAttachedStage();let t=zo(this._name),n=this._nameCollision(t),r=!!t&&!n;return p`<p class="nwd-note ui-hint">Pick a name for the workspace on this device. The shared identity is preserved either way — only the visible label changes.</p><label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> ${n?p`<p class="wsl-error" role="alert">A workspace named "${t}" already exists on this device. Pick a different name.</p>`:b}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!r}" @click="${this._onAttach}">Attach</button></footer>`}render(){let t=this._stage==="password"?"Attach shared workspace":this._existingById?"Workspace already attached":"Name the workspace";return p`<dialog @close="${this._onClose}"><header><h3>${t}</h3></header>${this._stage==="password"?this._passwordStage():this._nameStage()}</dialog>`}};customElements.define("workspace-unlock-link-dialog",rC);function fD({encoded:e}={}){return Ps("workspace-unlock-link-dialog",{encoded:e??""},t=>{t.encoded=""})}y5();q();ui();var zn=null,Jv=!1,_h=null;function Gee(e){if(!e)return"Could not unlock. Try again.";switch(e.name??""){case"NotAllowedError":case"AbortError":return"";case"SecurityError":return"The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.";case"InvalidStateError":return"The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.";case"NotSupportedError":return"This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.";case"NetworkError":return"A network error prevented the passkey from completing. Check your connection and try again.";case"UnknownError":return"The authenticator returned an unknown error. Try again, or use a different passkey.";default:{let n=e.message??String(e);return n.length>200?n.slice(0,197)+"\u2026":n}}}function qee(){if(zn)return zn;zn=document.createElement("div"),zn.id="lock-overlay",zn.setAttribute("role","dialog"),zn.setAttribute("aria-modal","true"),zn.setAttribute("aria-label","Unlock DeepView"),zn.innerHTML=`
|
|
381
381
|
<div class="lock-overlay-card">
|
|
382
382
|
<div class="lock-overlay-icon" aria-hidden="true">
|
|
383
383
|
<svg viewBox="0 0 32 32" width="40" height="40" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="15" width="18" height="12" rx="1.5"/><path d="M11 15v-4a5 5 0 0 1 10 0v4"/></svg>
|
|
@@ -414,18 +414,18 @@ Use this only if you have lost access to your passkey and have no other way to u
|
|
|
414
414
|
|
|
415
415
|
${B}`)}`;try{window.location.href=Q,e9(W)}catch{}return}if(ke(e,".mark-fix")){let Q=ke(e,"[data-gid]")?.dataset.gid,oe=Q?Zn(Q):null;if(!oe)return;let re=ct(oe);if(!ft(re))return;let st=jI(oe),Dt=Ye(re)?.fix??"";MD({initial:Dt,finding:re,canApplyToGroup:NI(st,Dt)}).then(Tn=>{if(Tn===null||!ft(re))return null;let Ql=Tn.scope==="group"?st.filter(X=>ft(X)&&(X===re||q$(X,Dt))):[re],$o=!1;for(let X of Ql)ie(c.triage,le(X),{fix:Tn.value||void 0})&&($o=!0);return $o&&(Ql.length>1&&c.activeTabByGroup.set(Q,le(re)),Yi(),queueMicrotask(We)),null}).catch(()=>{});return}let U=ke(e,"[data-flag-toggle]");if(U){let B=U.dataset.flagToggle,Q=ke(e,"[data-gid]")?.dataset.gid,oe=(Q?Zn(Q):null)?.find(st=>le(st)===B);if(!oe||!ft(oe))return;let re=Ye(oe)?.flagged;ie(c.triage,B,{flagged:re!==!0}),We(),Yi();return}let J=e.target.closest("[data-triage-show]");if(J&&!J.closest(".graph2-triage-selector")){let B=J.dataset.triageShow;c.shownTriage=c.shownTriage===B?null:B,F();return}if(e.target.closest("[data-table-deselect]")){c.tableSelectedGid=null,Yi();return}let Se=e.target.closest("[data-tree-select]");if(Se){let B=Se.dataset.treeSelect;c.filesSelectedFile=c.filesSelectedFile===B?null:B,F();return}e.target.closest("[data-tree-deselect]")&&(c.filesSelectedFile=null,F())});var XD=document.querySelector("#bundle-source-overlay-slot");XD&&XD.addEventListener("click",n9);function aw(e){let t=e?Zn(e):null;t&&iy(t)&&queueMicrotask(We)}V.addEventListener("row-select",e=>{let t=e.detail?.gid;if(!t)return;let n=c.tableSelectedGid!==t;c.tableSelectedGid=n?t:null,n&&aw(t),Yi()});var lw="application/x-deepview-kanban-gid";function r9(e,t){for(let n of e)ft(n)&&YR(c.triage,n,t,Yo())}function CC(){for(let e of V.querySelectorAll(".kanban-card.dragging"))e.classList.remove("dragging");for(let e of V.querySelectorAll(".kanban-column.drag-over"))e.classList.remove("drag-over")}V.addEventListener("dragstart",e=>{let t=e.target.closest?.(".kanban-card[data-kanban-source]");if(!t||!e.dataTransfer)return;let n=t.dataset.gid;if(!n)return;let r=Zn(n);if(!r||Vs(r).length===0){e.preventDefault();return}e.dataTransfer.setData(lw,n),e.dataTransfer.setData("text/plain",n),e.dataTransfer.effectAllowed="move",t.classList.add("dragging")});V.addEventListener("dragend",CC);V.addEventListener("dragover",e=>{if(!e.dataTransfer?.types.includes(lw))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(t&&(e.preventDefault(),e.dataTransfer.dropEffect="move",!t.classList.contains("drag-over"))){for(let n of V.querySelectorAll(".kanban-column.drag-over"))n!==t&&n.classList.remove("drag-over");t.classList.add("drag-over")}});V.addEventListener("dragleave",e=>{let t=e.target.closest?.(".kanban-column[data-kanban-target]");t&&(t.contains(e.relatedTarget)||t.classList.remove("drag-over"))});V.addEventListener("drop",e=>{if(!e.dataTransfer?.types.includes(lw))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(!t){CC();return}e.preventDefault();let n=e.dataTransfer.getData(lw),r=t.dataset.kanbanTarget;if(CC(),!n||!r)return;let o=Zn(n);if(!o||(kt(o).commonTriage??"untriaged")===r)return;let s=Vs(o);s.length!==0&&(r9(s,r),F(),queueMicrotask(We))});var $C=!1;function ql(e){return e?V.querySelector(`.kanban-card[data-gid="${CSS.escape(e)}"]`):null}function rw(e){let t=e??V.querySelector(".kanban-card");if(!t)return;let n=t.getBoundingClientRect();n.width<=0||n.height<=0||(document.documentElement.style.setProperty("--kanban-clip-card-w",`${Math.floor(n.width)}px`),document.documentElement.style.setProperty("--kanban-clip-card-h",`${Math.floor(n.height)}px`),document.documentElement.style.setProperty("--kanban-return-card-bg",getComputedStyle(t).backgroundColor))}function wte(){let e=V.querySelector(".kanban-detail-side [data-kanban-select].active");e&&e.scrollIntoView({block:"nearest",behavior:"instant"})}function SC(e){c.kanbanPopoverGid=e,c.focusCodeStack=[],c.focusCodeAt=0}function ZD(){wte(),Di()}function Yl(e){let t=c.kanbanPopoverGid;if(t===e)return;let n=t===null&&e!==null,r=t!==null&&e===null;if(!document.startViewTransition||!n&&!r){aw(e),SC(e),F(),ZD();return}if($C)return;aw(e),$C=!0;let o=n?"kanban-opening":"kanban-closing";document.documentElement.classList.add(o);let i=d=>{d&&(d.style.viewTransitionName=""),document.documentElement.classList.remove(o),$C=!1};if(n){let d=ql(e);d?(rw(d),d.style.viewTransitionName="kanban-detail-modal",d.getBoundingClientRect()):rw(),SC(e);let u=s5(()=>{F(),ZD(),d&&(d.style.viewTransitionName="")}),f=setTimeout(()=>i(d),600);(async()=>{try{await u.finished}catch{}clearTimeout(f),i(d)})();return}rw(),SC(e);let s=null,a=s5(()=>{F(),s=ql(t),s&&(rw(s),s.style.viewTransitionName="kanban-detail-modal")}),l=setTimeout(()=>i(s??ql(t)),600);(async()=>{try{await a.finished}catch{}clearTimeout(l),i(s??ql(t))})()}function o9(e){let t=ql(c.kanbanPopoverGid),n=t?.closest(".kanban-column");if(!n)return;let r=[...n.querySelectorAll(".kanban-card[data-kanban-source]")],o=r.indexOf(t);if(o<0)return;let i=Math.min(Math.max(o+e,0),r.length-1);if(i===o)return;let s=r[i].dataset.gid;if(!s)return;Yl(s);let a=ql(s);a&&(a.focus({preventScroll:!0}),a.scrollIntoView({block:"nearest",behavior:"instant"}))}var ow=null;function EC(){ey(),c.focusCodeStack=[],c.focusCodeAt=0,F(),ow?.isConnected&&ow.focus({preventScroll:!0}),ow=null}V.addEventListener("click",e=>{let t=ke(e,"[data-links-preview]");if(t){e.preventDefault(),ow=t;let s=t.dataset.previewRow,a=II(t.dataset.linksPreview,t.dataset.previewReport,s===void 0?void 0:Number(s),t.dataset.previewManagedReport);F(),V.querySelector(".kanban-detail-close")?.focus({preventScroll:!0}),a.then(()=>{F(),Di();let l=vr()?.group?.[0]._bundleHashes;if(Array.isArray(l))for(let d of l)CS(d).catch(()=>{});return null});return}if(e.target.closest?.(".kanban-detail-close")){if(vr()){EC();return}Yl(null);return}if(e.target.closest?.("[data-kanban-detail-fullscreen]")){c.kanbanDetailFullscreen=!c.kanbanDetailFullscreen;try{localStorage.setItem(Mm,String(c.kanbanDetailFullscreen))}catch{}F(),Di();return}let n=e.target.closest?.("[data-kanban-expand]");if(n){let s=n.dataset.kanbanExpand,a=c.kanbanExpandedColumn===s?null:s;c.kanbanExpandedColumn=a,a&&c.kanbanPopoverGid&&ql(c.kanbanPopoverGid)?.closest(".kanban-column")?.dataset.kanbanTarget!==a&&(c.kanbanPopoverGid=null),F();return}let r=e.target.closest?.("[data-kanban-nav]");if(r){o9(r.dataset.kanbanNav==="next"?1:-1);return}let o=e.target.closest?.("[data-kanban-select]");if(o){if(window.getSelection?.()?.toString())return;let s=o.dataset.gid;s&&Yl(s);return}if(e.target.closest?.(".kanban-action"))return;let i=e.target.closest?.(".kanban-card[data-kanban-source]");if(i){if(window.getSelection?.()?.toString())return;let s=i.dataset.gid;if(!s)return;Yl(c.kanbanPopoverGid===s?null:s);return}if(!ke(e,".kanban-detail-modal, .kanban-detail-side")){if(vr()){EC();return}c.kanbanPopoverGid&&Yl(null)}});V.addEventListener("change",e=>{let t=e.target.closest?.("[data-kanban-column]");if(!t)return;let n=t.selectedOptions[0]?.dataset.gid;n&&Yl(n)});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(vr()){!e.defaultPrevented&&!l9(e)&&!document.querySelector(":popover-open:not(#styled-tooltip)")&&EC();return}if(c.kanbanPopoverGid){Yl(null);return}c.viewMode!=="kanban"||c.kanbanExpandedColumn===null||(c.kanbanExpandedColumn=null,F())}});function Ch(e){let n=ke(e,"[data-gid]")?.dataset?.gid;return n?Zn(n):null}function TC(e,t){if(!t.integrity||!t.file)return;let n=$d(e);if(!n)return;let r=J8(n,t);r&&(c.focusCodeStack=r.stack,c.focusCodeAt=r.at,F()),t.range||i9(),Di()}function i9(){for(let e of V.querySelectorAll(".focus-code-body"))e.scrollTop=0,e.scrollLeft=0}V.addEventListener("keydown",e=>{if(e.key!=="Enter"&&e.key!==" ")return;let t=ke(e,"[data-code-nav-file]");t&&(e.preventDefault(),TC(Ch(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:$n(t.dataset.codeNavLine)}))});function kte(e){let t=X8(c.focusCodeStack,c.focusCodeAt,e);t!==c.focusCodeAt&&(c.focusCodeAt=t,F(),c.focusCodeStack[t]?.range||i9(),Di())}function s9(e){if(!e||c.focusGid===e)return;aw(e),c.focusGid=e,c.focusCodeStack=[],c.focusCodeAt=0,F();let t=V.querySelector(".focus-side-card.active");t&&t.scrollIntoView({block:"nearest",behavior:"instant"}),Di()}function a9(e){let t=[...V.querySelectorAll(".focus-side-card[data-focus-select]")];if(t.length===0)return;let n=t.findIndex(i=>i.classList.contains("active")),r=n<0?e>0?0:t.length-1:Math.min(Math.max(n+e,0),t.length-1);if(r===n)return;let o=t[r].dataset.gid;o&&s9(o)}V.addEventListener("click",e=>{let t=e.target.closest?.("[data-focus-nav]");if(t){a9(t.dataset.focusNav==="next"?1:-1);return}let n=e.target.closest?.(".focus-side-card[data-focus-select]");if(!n||window.getSelection?.()?.toString())return;let r=n.dataset.gid;r&&s9(r)});V.addEventListener("pointerdown",e=>{if(e.button!==0)return;let t=e.target.closest?.("[data-focus-splitter]");t&&DD(t,e)});V.addEventListener("dblclick",e=>{let t=e.target.closest?.("[data-focus-splitter]");t&&ND(t)});function l9(e){if(document.querySelector("dialog[open]"))return!0;for(let t of e.composedPath()){if(!t||t.nodeType!==1)continue;let n=t.tagName;if(n==="INPUT"||n==="TEXTAREA"||n==="SELECT"||n==="DIALOG"&&t.open||t.isContentEditable)return!0}return!1}document.addEventListener("keydown",e=>{if(c.currentView!=="findings")return;let t=c.viewMode==="focus",n=c.viewMode==="kanban"&&c.kanbanPopoverGid!==null;if(!t&&!n||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||l9(e))return;let r=0;if(e.key==="ArrowRight")r=1;else if(e.key==="ArrowLeft")r=-1;else return;e.preventDefault();let o=e.target?.closest?.("[data-focus-splitter]");if(o){PD(o,r*LD);return}t?a9(r):o9(r)});V.addEventListener("mark-color",e=>{let t=ke(e,"[data-gid]");if(!t)return;let n=t.dataset.gid,r=Zn(n);if(!r)return;let o=ct(r);if(!ft(o))return;let i=le(o),s=e.detail?.color;if(!s)return;Ye(o)?.color===s?ie(c.triage,i,{color:void 0}):ie(c.triage,i,{color:s}),We(),Yi()});var Jl=null,RC=null,ru=null,cw=!1;function c9(){if(Jl!==null)return;if(c.reports.length===0){ru=null,cw=!1;return}Jl=c.viewMode,RC=document.title;let e=!1;c.viewMode==="table"&&(c.viewMode="list",e=!0),ru&&(vf(ru),e=!0),e&&F();for(let r of V.querySelectorAll("finding-card"))r.toggleAttribute("print-one-sample",cw),r.ensureRendered({sync:!0});let t=c.reports.map(r=>r.fileName),n="";t.length===1?n=t[0]:t.length>1&&(n=ff(t)),n=n.replace(/\.json$/u,""),n&&(document.title=n)}function d9(){if(Jl===null)return;for(let t of V.querySelectorAll("finding-card"))t.removeAttribute("print-one-sample");cw=!1;let e=!1;c.viewMode!==Jl&&(c.viewMode=Jl,e=!0),ru&&(wf(),ru=null,e=!0),e&&F(),document.title=RC,Jl=null,RC=null}window.addEventListener("beforeprint",c9);window.addEventListener("afterprint",d9);async function xte(e,{oneSamplePerGroup:t=!1}={}){if(Jl===null){ru=e,cw=t;try{c9(),await Promise.all([...V.querySelectorAll("finding-card")].map(n=>n.ensureRendered())),window.print()}catch(n){throw d9(),n}}}function QD(e,t){if(!e)return t();vf(e);try{return t()}finally{wf()}}document.addEventListener("download-requested",async()=>{if(c.reports.length===0)return;let{confirmed:e,view:t,fields:n,mode:r,oneSamplePerGroup:o}=await xD("download");if(t){await RD(QD(n,()=>yC({oneSamplePerGroup:o})));return}if(e){if(r==="print"){await xte(n,{oneSamplePerGroup:o});return}QD(n,()=>UD({oneSamplePerGroup:o}))}});V.addEventListener("analyzer-change",e=>{c.filterAnalyzer=e.detail.analyzer,c.filterModel=e.detail.model,F()});V.addEventListener("repo-change",e=>{c.filterRepo=e.detail.value,F()});V.addEventListener("revalidate-change",e=>{c.filterRevalidate=e.detail.value,F()});V.addEventListener("partial-change",e=>{c.filterPartial=e.detail.value,F()});V.addEventListener("revalidation-change",e=>{c.showRevalidation=e.detail.on,!e.detail.on&&c.reports.some(n=>(n.groups??[]).some(r=>r.some(o=>!o.isApp&&(o.isUpstream||Sn(o.file)))))?Ot("App mode off is not recommended; it can conflate triage for issues in dependencies.",{kind:"warning"}):e.detail.on&&k_(),Ns(c.showRevalidation,c.upstreamOnly),Sl(ti(),{resetSort:!1}),F()});V.addEventListener("revalidation-conflicts-open",()=>{(async()=>{let e=await ID(c.revalidateConflicts);if(!e)return;let t=await Uv(e.id,e.reportName);t.ok||alert(t.reason)})().catch(e=>console.warn("revalidation: open conflicting finding failed:",e))});V.addEventListener("revalidation-detail-change",e=>{c.revalidationDetailed=e.detail.on===!0,F()});V.addEventListener("upstream-only-change",e=>{if(c.upstreamOnly=e.detail.on===!0,Ns(c.showRevalidation,c.upstreamOnly),!c.upstreamOnly){let t=ti();F$(t,Jb(t))==="confirmed"&&(c.filterRevalidate="confirmed",c.filterPartial="")}F()});V.addEventListener("bundle-search-mode-change",e=>{let t=e.detail?.mode;t!=="files"&&t!=="code"&&t!=="issues"||(c.bundleCodeSearchMode=t,F(),t==="files"&&pa())});V.addEventListener("bundle-graph-reason-change",e=>{let t=e.detail?.reason;t!==null&&typeof t!="string"||(G.bundleReason=t,G.layoutCache=null,G.selected=null,G.solo=null,G.focusedPkg=null,Et(),F())});V.addEventListener("bundle-search-regex-toggle",()=>{c.bundleSearchRegex=!c.bundleSearchRegex,F()});V.addEventListener("bundle-search-case-toggle",()=>{c.bundleSearchCase=!c.bundleSearchCase,F()});V.addEventListener("bundle-swap",e=>{let t=e.detail?.integrity;if(!t||!(c.bundles??[]).some(r=>r.integrity===t))return;let n=c.bundles.find(r=>r.integrity===t);if(n.managedId){Ve.navigate(ia(c.managedTeams,n,c.currentManagedTeam,"compare"));return}ho(t,"compare"),di(t,"compare"),F(),se(),oi(t)});V.addEventListener("sort-change",e=>{let{kind:t,value:n}=e.detail;if(t==="findings")c.sortBy=n;else if(t==="packages")c.packagesSortBy=n;else if(t==="repositories")c.repositoriesSortBy=n;else return;F()});V.addEventListener("range-change",e=>{e.target.id==="conf-range"&&(c.filterConfMin=e.detail.low,c.filterConfMax=e.detail.high,F())});V.addEventListener("input",e=>{let t=e.composedPath()[0],n=t?.id,r=t?.value;n==="g2-path-filter"&&(G.pathFilter=r,G.graphState?.requestDraw?.())});V.addEventListener("search-input",e=>{if(!e.detail)return;let{kind:t,value:n}=e.detail;if(t==="findings"){c.filterInclude=n,n||(c.filterIncludeNegate=!1),qD();return}else if(t==="files")c.filesSearch=n;else if(t==="packages")c.packagesSearchQuery=n;else if(t==="repositories")c.repositoriesSearchQuery=n;else if(t==="bundle-code")c.bundleCodeSearchQuery=n;else if(t==="bundle-search"){c.bundleSearchQuery=n,qD();return}else return;F()});V.addEventListener("search-negate-toggle",()=>{c.filterIncludeNegate=!c.filterIncludeNegate,F()});V.addEventListener("severity-toggle",e=>{let t=e.detail.severity;if(e.detail.kind==="graph"){G.selectedSeverities.has(t)?G.selectedSeverities.delete(t):G.selectedSeverities.add(t),e.composedPath()[0].selected=[...G.selectedSeverities],G.graphState?.requestDraw?.(),iw();return}c.filterSeverities.has(t)?c.filterSeverities.delete(t):c.filterSeverities.add(t),F()});V.addEventListener("color-toggle",e=>{let t=e.detail.color;if(e.detail.kind==="graph"){G.selectedColors.has(t)?G.selectedColors.delete(t):G.selectedColors.add(t),e.composedPath()[0].selected=[...G.selectedColors],G.graphState?.requestDraw?.(),iw();return}c.filterColors.has(t)?c.filterColors.delete(t):c.filterColors.add(t),F()});V.addEventListener("source-toggle",e=>{let t=e.detail.source,n=c.filterSources.has(t);c.filterSources.clear(),n||c.filterSources.add(t),F()});V.addEventListener("annotation-filter-toggle",e=>{let t=e.detail?.key,n=r=>r===""?"with":r==="with"?"without":"";if(t==="comment")c.filterComment=n(c.filterComment);else if(t==="fix")c.filterFix=n(c.filterFix);else if(t==="flag")c.filterFlagged=n(c.filterFlagged);else if(t==="duplicates"&&!c.currentWorkspace)c.filterDuplicates=n(c.filterDuplicates);else if(t==="cross-context")c.filterCrossContext=n(c.filterCrossContext);else if(t==="app-stacked")c.filterAppStacked=n(c.filterAppStacked);else if(t==="security")c.filterSecurity=n(c.filterSecurity);else return;F()});V.addEventListener("slide-triage-toggle",e=>{let{kind:t,value:n}=e.detail;if(t==="package")c.packageSlideTriage=c.packageSlideTriage===n?null:n;else if(t==="repository")c.repositorySlideTriage=c.repositorySlideTriage===n?null:n;else return;F()});V.addEventListener("view-mode-change",e=>{if(e.detail.kind==="files"){c.filesViewMode=e.detail.mode,F();return}c.viewMode=e.detail.mode,c.viewMode!=="kanban"&&(c.kanbanPopoverGid=null),c.viewMode!=="focus"&&(c.focusGid=null),F()});V.addEventListener("severity-mode-change",e=>{let t=e.detail?.mode;if(!(t!=="corrected"&&t!=="original")){c.severityMode=t;try{localStorage.setItem(Rm,t)}catch{}F()}});V.addEventListener("repo-edit-start",()=>{A()||(c.repoEditing=!0,F())});V.addEventListener("repo-input",e=>{A()||(c.repoUrl=e.detail.url,oo(c.currentFile,c.repoUrl))});V.addEventListener("repo-commit",e=>{A()||(c.repoUrl=e.detail.url,oo(c.currentFile,c.repoUrl),c.repoEditing=!1,F())});V.addEventListener("repo-cancel",e=>{A()||(c.repoUrl=e.detail.url,oo(c.currentFile,c.repoUrl),c.repoEditing=!1,F())});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(c.bundleSourceFindingIdx!=null){c.bundleSourceFindingIdx=null,sw();return}if(c.bundleSourceFile){if(c.currentView==="bundles"&&c.bundleDetailsTab==="code")return;wd(c.bundleDetailsTab),F()}}});P();function Nt(e,t){for(let[n,r]of Object.entries(t))e.hasAttribute(n)||e.setAttribute(n,r)}var Ji=Math.PI*2;function $te(e){return()=>{e=e+1831565813|0;let t=e;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function u9(e,t,n,r){let o=Math.cos(t),i=Math.sin(t);return Math.min(o>0?(n-e.x)/o:o<0?-e.x/o:1/0,i>0?(r-e.y)/i:i<0?-e.y/i:1/0)}function Ste(e){return Math.abs(e.reduce((t,n,r)=>{let o=e[(r+1)%e.length];return t+n.x*o.y-o.x*n.y},0))/2}function MC(e){return e.slice(1).reduce((t,n,r)=>t+Math.hypot(n.x-e[r].x,n.y-e[r].y),0)}function _te(e,t,n,r){let o=e.map(d=>d.x),i=e.map(d=>d.y),s={x:(Math.min(...o)+Math.max(...o))/2,y:(Math.min(...i)+Math.max(...i))/2},a=Math.max(...e.map(d=>Math.hypot(d.x-s.x,d.y-s.y))),l=Math.atan2(s.y-t.y,s.x-t.x);return{center:s,distance:Math.hypot(s.x-t.x,s.y-t.y),dx:Math.cos(l)*(80+r()*200)+(r()-.5)*90,dy:n-s.y+a+40,rotation:(r()-.5)*160,delay:r()*120}}function p9(e,t,n=7){let r=$te(n),o={x:e*1820/1920,y:t*90/1080},i=Math.hypot(e,t),s=(v,k)=>v<1e-8?0:v>k-1e-8?k:v,a=v=>({x:s(v.x,e),y:s(v.y,t)}),l=Array.from({length:20},(v,k)=>((k+(r()-.5)*.35)*Ji/20+Ji)%Ji);for(let[v,k]of[[0,0],[e,0],[e,t],[0,t]])l.push((Math.atan2(k-o.y,v-o.x)+Ji)%Ji);l.sort((v,k)=>v-k);let u=[.045,.29,.58].map(v=>v*Math.min(e,t)).map(v=>l.map(k=>{let S=Math.min(v*(.92+r()*.16),u9(o,k,e,t));return a({x:o.x+Math.cos(k)*S,y:o.y+Math.sin(k)*S})}));u.push(l.map(v=>{let k=u9(o,v,e,t);return a({x:o.x+Math.cos(v)*k,y:o.y+Math.sin(v)*k})}));let f=u.map((v,k)=>v.map((S,C)=>{let _=v[(C+1)%v.length],E={x:(S.x+_.x)/2,y:(S.y+_.y)/2},O=Math.hypot(_.x-S.x,_.y-S.y),z=S.x===_.x&&(S.x===0||S.x===e)||S.y===_.y&&(S.y===0||S.y===t),T=k===u.length-1||z?0:(r()-.5)*O*.08,D=Math.atan2(E.y-o.y,E.x-o.x);return[S,a({x:E.x+Math.cos(D)*T,y:E.y+Math.sin(D)*T}),_]})),h=u.slice(1).map((v,k)=>v.map((S,C)=>{let _=u[k][C],E=Math.hypot(S.x-_.x,S.y-_.y),O={x:(_.x+S.x)/2,y:(_.y+S.y)/2},z=(l[C]-l[(C+l.length-1)%l.length]+Ji)%Ji,T=(l[(C+1)%l.length]-l[C]+Ji)%Ji,D=Math.min(z,T)*Math.hypot(O.x-o.x,O.y-o.y),K=(r()-.5)*Math.min(E*.12,D*.14);return[_,a({x:O.x-Math.sin(l[C])*K,y:O.y+Math.cos(l[C])*K}),S]})),m=[],g=v=>{Ste(v)>.01&&m.push({points:v,..._te(v,o,t,r)})};g(f[0].flatMap(v=>v.slice(0,-1)));for(let v=0;v<u.length-1;v++)for(let k=0;k<l.length;k++){let S=(k+1)%l.length;g([...h[v][k],...f[v+1][k].slice(1),...h[v][S].toReversed().slice(1),...f[v][k].toReversed().slice(1)])}let y=Math.max(...m.map(v=>v.distance));for(let v of m)v.delay+=v.distance/y*400;let w=[],x=(v,k,S,C)=>{let _=MC(v);_>.1&&w.push({points:v,length:_,delay:k,duration:S,width:C})};for(let v=0;v<l.length;v++){let k=[o,u[0][v],...h.flatMap(S=>S[v].slice(1))];x(k,0,200+MC(k)/i*1e3,1.1)}for(let v of f.slice(0,-1))for(let k of v){let S=Math.hypot(k[0].x-o.x,k[0].y-o.y);x(k,S/i*1e3,220+MC(k)/i*400,.7)}for(let v of u[1]){let k=Math.atan2(v.y-o.y,v.x-o.x)+(r()-.5)*1.4,S=Math.min(e,t)*(.07+r()*.12),C=[v];for(let _=1;_<=3;_++)C.push(a({x:v.x+Math.cos(k+(r()-.5)*.3)*S*_/3,y:v.y+Math.sin(k+(r()-.5)*.3)*S*_/3}));x(C,Math.hypot(v.x-o.x,v.y-o.y)/i*1e3+80,220,.5)}return{width:e,height:t,impact:o,pieces:m,cracks:w}}var f9=`.screen-crack{position:fixed;inset:0;z-index:2147483646;overflow:hidden;pointer-events:none;user-select:none}.screen-crack-svg{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.screen-crack-glass{position:absolute;inset:0;backdrop-filter:blur(9px) brightness(1.06) saturate(.85);background:linear-gradient(135deg,#dcebff0f,#dcebff00 55%);mask-mode:luminance;opacity:0}.screen-crack-shard{transform-box:fill-box;transform-origin:center}.screen-crack-outline{opacity:0}.screen-crack-flash{position:absolute;width:18vmin;height:18vmin;border-radius:50%;background:radial-gradient(circle,rgb(255 255 255 / .85),rgb(200 230 255 / .15) 55%,transparent 75%);transform:translate(-50%,-50%);opacity:0}@media print{.screen-crack{display:none}}
|
|
416
416
|
`;var Ete="http://www.w3.org/2000/svg",AC=1.5,Rte=0;function wo(e,t={}){let n=document.createElementNS(Ete,e);for(let[r,o]of Object.entries(t))n.setAttribute(r,String(o));return n}function Tte(e){let t=document.createElement("div");t.className="screen-crack",t.setAttribute("aria-hidden","true");let n=document.createElement("style");n.textContent=f9;let r=wo("svg",{viewBox:`0 0 ${e.width} ${e.height}`,preserveAspectRatio:"none"});r.classList.add("screen-crack-svg");let o=wo("defs"),i=`screen-crack-mask-${++Rte}`,s=wo("mask",{id:i,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse",x:0,y:0,width:e.width,height:e.height});s.append(wo("rect",{width:e.width,height:e.height,fill:"black"})),o.append(s);let a=wo("g"),l=wo("g"),d=e.pieces.map(m=>{let g=m.points.map(v=>`${v.x},${v.y}`).join(" "),y=wo("g"),w=wo("g");y.classList.add("screen-crack-shard"),w.classList.add("screen-crack-shard"),y.append(wo("polygon",{points:g,fill:"white"}));let x=wo("polygon",{points:g,fill:"none",stroke:"rgb(240 248 255 / .8)","stroke-width":1.1,"stroke-linejoin":"round"});return x.classList.add("screen-crack-outline"),w.append(x),s.append(y),l.append(w),{masked:y,outlined:w,outline:x,piece:m}});r.append(o,a,l);let u=document.createElement("div");u.className="screen-crack-glass";let f=`${document.URL.split("#")[0]}#${i}`;u.style.maskImage=`url("${f}")`,u.style.webkitMaskImage=`url("${f}")`;let h=document.createElement("div");return h.className="screen-crack-flash",h.style.left=`${e.impact.x}px`,h.style.top=`${e.impact.y}px`,t.append(n,u,r,h),{overlay:t,glass:u,cracks:a,shards:d,flash:h}}function Mte(e,t,n){for(let r of t.cracks){let o=r.points.map((i,s)=>`${s===0?"M":"L"}${i.x} ${i.y}`).join(" ");for(let i of[!0,!1]){let s=wo("path",{d:o,fill:"none",stroke:i?"rgb(0 0 0 / .55)":"rgb(232 244 255 / .95)","stroke-width":r.width+(i?.8:0),"stroke-linecap":"round","stroke-linejoin":"round"});i&&s.setAttribute("transform","translate(.5 .7)"),s.style.strokeDasharray=`${r.length} ${r.length}`,s.style.strokeDashoffset=String(r.length),e.append(s),n(s,[{strokeDashoffset:String(r.length)},{strokeDashoffset:"0"}],{duration:r.duration*AC,delay:r.delay*AC,easing:"cubic-bezier(.2,.7,.2,1)"})}}}function h9(e){let t=window.innerHeight,n=window.innerWidth;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||!n||!t||!Element.prototype.animate)return e(),Promise.resolve();let r=p9(n,t),{overlay:o,glass:i,cracks:s,shards:a,flash:l}=Tte(r);document.body.append(o);let d=document.timeline.currentTime,u=[],f=(C,_,E)=>{let O=C.animate(_,{fill:"both",...E});return O.playbackRate=2,O.startTime=d,u.push(O),O},h=!1,m=!1,g=()=>{m||(m=!0,e())},y=()=>{if(!h){h=!0,window.removeEventListener("resize",y),window.removeEventListener("beforeprint",y),document.removeEventListener("visibilitychange",w),o.remove();for(let C of u)C.cancel();g()}},w=()=>{document.hidden&&y()};window.addEventListener("resize",y,{once:!0}),window.addEventListener("beforeprint",y,{once:!0}),document.addEventListener("visibilitychange",w),Mte(s,r,f),f(l,[{opacity:0,transform:"translate(-50%, -50%) scale(0)"},{opacity:.85,transform:"translate(-50%, -50%) scale(.8)",offset:.08},{opacity:0,transform:"translate(-50%, -50%) scale(2.4)"}],{duration:600,easing:"ease-out"}),f(s,[{transform:"translate(0, 0)"},{transform:"translate(-3px, 2px)"},{transform:"translate(3px, -2px)"},{transform:"translate(-2px, -2px)"},{transform:"translate(2px, 2px)"},{transform:"translate(0, 0)"}],{duration:450});let x=Math.max(...r.cracks.map(C=>C.delay+C.duration))*AC,v=500,k=Math.max(v,x*.8);f(i,[{opacity:0},{opacity:1}],{duration:v,easing:"ease-out"}),f(l,[{visibility:"visible"},{visibility:"visible"}],{duration:1,delay:k-1}).finished.then(g,()=>{}),f(s,[{opacity:1},{opacity:0}],{duration:450,delay:k,easing:"ease-out"});for(let{masked:C,outlined:_,outline:E,piece:O}of a){let z=k+O.delay,T=[{transform:"translate(0, 0) rotate(0deg)"},{transform:`translate(${O.dx}px, ${O.dy}px) rotate(${O.rotation}deg)`}];for(let D of[C,_])f(D,T,{duration:1700,delay:z,easing:"cubic-bezier(.32,0,.82,.94)"});f(E,[{opacity:0},{opacity:1}],{duration:250,delay:z})}return Promise.all(u.map(C=>C.finished)).then(y,y)}var m9=`:host{position:absolute;top:.5rem;right:.5rem;z-index:1000;width:30px;height:30px;background:var(--theme-toggle-bg, transparent);color:var(--muted);border:var(--theme-toggle-border, 0);border-radius:var(--ui-radius, 6px);font-size:1rem;line-height:1;font-family:inherit;display:flex;align-items:center;justify-content:center;transition:color .12s,background .12s;cursor:default;user-select:none}:host(:hover){color:var(--text);background:var(--theme-toggle-hover-bg, rgb(from var(--text) r g b / .06))}:host(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media print{:host{display:none!important}}@media(display-mode:window-controls-overlay){:host{-webkit-app-region:no-drag;app-region:no-drag}}
|
|
417
|
-
`;var LC="deepview.theme",uw=Object.freeze(["dark","light","green","pink","paper"]),IC=Object.freeze(["dark","green","pink","paper","light"]),Ite={dark:{base:"#1a1a1b",dim:"#0a0a0a"},light:{base:"#f6f6fa",dim:"#646464"},green:{base:"#0a140a",dim:"#050a05",sidebar:"#0f1e0f"},pink:{base:"#ffe4ee",dim:"#a3727f",sidebar:"#ffe0f0"},paper:{base:"#ffffff",dim:"#666666"}},FC=window.matchMedia?.("(display-mode: window-controls-overlay)"),g9=window.matchMedia?.("(display-mode: standalone)"),b9=window.navigator?.windowControlsOverlay,Lte={light:"\u2600",dark:"\u263E",green:"\u{1F576}\uFE0F",pink:"\u273F",paper:"\u{1F4C4}"},BC="deepview-theme-changed",ko="dark",zC=!1,Fte=0,OC=!1,dw=!1,PC=0;function Bte(){return OC?IC[(IC.indexOf(ko)+1)%IC.length]:ko==="light"?"dark":"light"}function NC(){window.dispatchEvent(new CustomEvent(BC,{detail:{theme:ko}}))}function Ote(){try{let e=localStorage.getItem(LC);return uw.includes(e)?e:"dark"}catch{return"dark"}}function pw(){let e=document.querySelector('meta[name="theme-color"]');if(!e)return;let{base:t,dim:n,sidebar:r}=Ite[ko],o=b9?.visible??FC?.matches??!1,i=(g9?.matches||FC?.matches)&&!o;e.setAttribute("content",zC?n:i&&r?r:t)}function ou(e){uw.includes(e)||(e="dark"),ko=e;for(let t of uw)t!=="dark"&&document.body.classList.remove(`theme-${t}`);e!=="dark"&&document.body.classList.add(`theme-${e}`);try{e==="dark"?localStorage.removeItem(LC):localStorage.setItem(LC,e)}catch{}pw(),NC()}ou(Ote());FC?.addEventListener("change",pw);g9?.addEventListener("change",pw);b9?.addEventListener("geometrychange",pw);window.addEventListener("beforeprint",()=>{zC=!0,ou(ko)});window.addEventListener("afterprint",()=>{zC=!1,ou(ko)});function y9(e){if(!uw.includes(e))throw new TypeError("unknown theme");PC++,ou(e)}function v9(){return ko}var DC=class extends fe{static properties={_theme:{state:!0}};static styles=N(m9);constructor(){super(),this._theme=ko}connectedCallback(){super.connectedCallback(),Nt(this,{role:"button",tabindex:"0","aria-label":"toggle theme"}),this.addEventListener("click",this._toggle),this.addEventListener("keydown",this._onKeydown),window.addEventListener(BC,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(BC,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=ko,this.setAttribute("aria-disabled",String(dw))};_toggle=()=>{if(!dw){if(!OC&&++Fte>=8&&ko==="dark"){OC=!0,dw=!0,NC();let t=PC,n=()=>{PC===t&&ou("green")},r=()=>{dw=!1,NC()};try{h9(n).catch(n).finally(r)}catch{n(),r()}return}ou(Bte())}};_onKeydown=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.repeat||this._toggle())};render(){return p`${Lte[this._theme]}`}};customElements.define("theme-toggle",DC);P();un();Ht();P();nt();Os();vh();Ht();Qs();var w9=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}.row.row-pending{min-height:3rem}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(.link-target) .row{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .row{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host(:first-of-type) .row{border-top-left-radius:var(--ui-radius, 6px);border-top-right-radius:var(--ui-radius, 6px)}:host(:last-of-type) .row{border-bottom-left-radius:var(--ui-radius, 6px);border-bottom-right-radius:var(--ui-radius, 6px)}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit;text-decoration:none;cursor:default}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;min-width:0;margin-left:auto;user-select:none}}.gh-ref-btn{display:inline-flex;align-items:center;position:relative;flex-shrink:0;padding:0 .15rem;color:var(--muted);cursor:default;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}.line-num a:hover{color:var(--accent)}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}:host(.link-target) .row{animation:none;box-shadow:none!important}.row{break-inside:avoid}.marks{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre{color:#555!important}a,.line-num,.line-num a{color:inherit}}
|
|
417
|
+
`;var LC="deepview.theme",uw=Object.freeze(["dark","light","green","pink","paper"]),IC=Object.freeze(["dark","green","pink","paper","light"]),Ite={dark:{base:"#1a1a1b",dim:"#0a0a0a"},light:{base:"#f6f6fa",dim:"#646464"},green:{base:"#0a140a",dim:"#050a05",sidebar:"#0f1e0f"},pink:{base:"#ffe4ee",dim:"#a3727f",sidebar:"#ffe0f0"},paper:{base:"#ffffff",dim:"#666666"}},FC=window.matchMedia?.("(display-mode: window-controls-overlay)"),g9=window.matchMedia?.("(display-mode: standalone)"),b9=window.navigator?.windowControlsOverlay,Lte={light:"\u2600",dark:"\u263E",green:"\u{1F576}\uFE0F",pink:"\u273F",paper:"\u{1F4C4}"},BC="deepview-theme-changed",ko="dark",zC=!1,Fte=0,OC=!1,dw=!1,PC=0;function Bte(){return OC?IC[(IC.indexOf(ko)+1)%IC.length]:ko==="light"?"dark":"light"}function NC(){window.dispatchEvent(new CustomEvent(BC,{detail:{theme:ko}}))}function Ote(){try{let e=localStorage.getItem(LC);return uw.includes(e)?e:"dark"}catch{return"dark"}}function pw(){let e=document.querySelector('meta[name="theme-color"]');if(!e)return;let{base:t,dim:n,sidebar:r}=Ite[ko],o=b9?.visible??FC?.matches??!1,i=(g9?.matches||FC?.matches)&&!o;e.setAttribute("content",zC?n:i&&r?r:t)}function ou(e){uw.includes(e)||(e="dark"),ko=e;for(let t of uw)t!=="dark"&&document.body.classList.remove(`theme-${t}`);e!=="dark"&&document.body.classList.add(`theme-${e}`);try{e==="dark"?localStorage.removeItem(LC):localStorage.setItem(LC,e)}catch{}pw(),NC()}ou(Ote());FC?.addEventListener("change",pw);g9?.addEventListener("change",pw);b9?.addEventListener("geometrychange",pw);window.addEventListener("beforeprint",()=>{zC=!0,ou(ko)});window.addEventListener("afterprint",()=>{zC=!1,ou(ko)});function y9(e){if(!uw.includes(e))throw new TypeError("unknown theme");PC++,ou(e)}function v9(){return ko}var DC=class extends he{static properties={_theme:{state:!0}};static styles=N(m9);constructor(){super(),this._theme=ko}connectedCallback(){super.connectedCallback(),Nt(this,{role:"button",tabindex:"0","aria-label":"toggle theme"}),this.addEventListener("click",this._toggle),this.addEventListener("keydown",this._onKeydown),window.addEventListener(BC,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(BC,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=ko,this.setAttribute("aria-disabled",String(dw))};_toggle=()=>{if(!dw){if(!OC&&++Fte>=8&&ko==="dark"){OC=!0,dw=!0,NC();let t=PC,n=()=>{PC===t&&ou("green")},r=()=>{dw=!1,NC()};try{h9(n).catch(n).finally(r)}catch{n(),r()}return}ou(Bte())}};_onKeydown=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.repeat||this._toggle())};render(){return p`${Lte[this._theme]}`}};customElements.define("theme-toggle",DC);P();un();Ht();P();nt();Os();vh();Ht();Qs();var w9=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}.row.row-pending{min-height:3rem}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(.link-target) .row{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .row{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host(:first-of-type) .row{border-top-left-radius:var(--ui-radius, 6px);border-top-right-radius:var(--ui-radius, 6px)}:host(:last-of-type) .row{border-bottom-left-radius:var(--ui-radius, 6px);border-bottom-right-radius:var(--ui-radius, 6px)}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit;text-decoration:none;cursor:default}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;min-width:0;margin-left:auto;user-select:none}}.gh-ref-btn{display:inline-flex;align-items:center;position:relative;flex-shrink:0;padding:0 .15rem;color:var(--muted);cursor:default;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}.line-num a:hover{color:var(--accent)}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}:host(.link-target) .row{animation:none;box-shadow:none!important}.row{break-inside:avoid}.marks{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre{color:#555!important}a,.line-num,.line-num a{color:inherit}}
|
|
418
418
|
`;var fw=`.tab-level-separator{align-self:center;padding-inline:.125rem;color:var(--muted);font-size:.75rem;line-height:1}.tab{--tab-severity: var(--bg);position:relative;display:inline-flex;align-items:center;gap:.35rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding-block:calc(.35rem - .1em);padding-inline:.5rem;min-width:0;font-family:inherit;font-size:.75rem;line-height:1.3;color:var(--text);background:var(--tab-severity);background-image:linear-gradient(135deg,var(--tab-marker, transparent) 50%,var(--tab-marker-shadow, transparent) 50%,transparent 60%);background-size:12px 12px;background-repeat:no-repeat;background-origin:border-box;&.tab-with-confidence{padding-right:1rem;min-width:3.25rem}&.tab-with-analyzer{padding-right:calc(.5rem + 20px)}&.tab-severity-critical{--tab-severity: var(--critical);color:#fff}&.tab-severity-high{--tab-severity: var(--high);color:#fff}&.tab-severity-medium{--tab-severity: var(--medium);color:#000}&.tab-severity-low{--tab-severity: var(--low);color:var(--badge-low-text)}&.tab-severity-high_bug{--tab-severity: var(--high-bug);color:#fff}&.tab-severity-bug{--tab-severity: var(--bug);color:#fff}&.tab-severity-informational{--tab-severity: var(--info);color:#fff}&.tab-mark-red{--tab-marker: var(--marker-red)}&.tab-mark-blue{--tab-marker: var(--marker-blue)}&.tab-mark-green{--tab-marker: var(--marker-green)}&.tab-mark-gray{--tab-marker: var(--marker-gray)}&:is(.tab-mark-red,.tab-mark-blue,.tab-mark-green,.tab-mark-gray){--tab-marker-shadow: rgb(0 0 0 / .3)}&:hover{border-color:var(--muted)}&.active{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.active:before{content:"";position:absolute;z-index:1;top:-1px;left:-1px;width:12px;height:12px;border-top-left-radius:inherit;background:var(--tab-marker, transparent);clip-path:polygon(0 0,100% 0,0 100%);pointer-events:none}&.tab-with-analyzer:is(:hover,.active):after{content:"";position:absolute;inset:-1px;border:1px solid var(--muted);border-radius:inherit;pointer-events:none}&.tab-with-analyzer.active:after{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-inprogress .tab-label:after{content:" \\25d0";opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-label{display:flex;align-items:center;gap:.35rem;text-align:left}.tab-conf{position:absolute;right:.25rem;bottom:.15rem;font-size:.6rem;line-height:1;color:inherit}.tab-analyzer{position:absolute;inset:-1px -1px -1px auto;width:20px;display:flex;overflow:hidden;border-radius:var(--ui-radius, 0 4px 4px 0);box-shadow:0 0 2px #0003}.tab-analyzer .report-logo{flex:1;border:0}.tab-analyzer svg{display:block}.tab-conf-max{display:none}.tab-severity{display:inline-flex}.badge{padding:0;background:none;color:inherit}.tab-indicators{display:inline-flex;align-items:center;gap:.25rem}.tab-indicators:empty{display:none}.tab-marks{display:inline-flex;align-items:center;gap:.15rem;color:inherit}.tab-marks svg{display:block}.tab-marks :is(.bubble,.wrench,.flag-cloth){fill:currentcolor;fill-opacity:.15}.badge-corr-mark{color:inherit}}
|
|
419
419
|
`;yh();var hw=`.report-button{display:inline-flex;align-items:center;max-width:16rem;padding:0;overflow:hidden;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);color:var(--muted);font:inherit;font-size:.7rem;text-decoration:none;cursor:default;transition:border-color .12s,color .12s;&:hover{border-color:var(--accent);color:var(--accent)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.report-button-label{min-width:0;padding:.1rem .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
420
420
|
`;var mw=`a{cursor:default}.finding-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.25rem 1rem;min-width:0;max-width:100%}.finding-action-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem;max-width:100%}.finding-actions .report-chip{flex:0 1 auto;width:max-content;min-width:0;max-width:100%;min-height:1.4rem}.finding-actions .report-chip-label{white-space:normal;overflow-wrap:anywhere;text-align:left}
|
|
421
421
|
`;var Ute=["is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","selected"],UC=class extends ce{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=[N(ha),N(hw),N(w9),N(mw),N(fw)];_near=!1;_watching=!1;constructor(){super(),this.group=null,this.selected=!1}render(){if(!this.group)return p``;if(this.dataset.gid=Te(this.group),!this._near)return this.classList.toggle("selected",this.selected),p`<div class="row row-pending" aria-busy="true"></div>`;let t=new Set(zS(this.group));this.selected&&t.add("selected");for(let n of Ute)this.classList.toggle(n,t.has(n));return p`<div class="row">${$L(this.group)}</div>`}connectedCallback(){super.connectedCallback(),Jn(this.renderRoot),this.addEventListener("click",this._onClick),this._watching=!0,Qd(this,t=>this._onNear(t))}disconnectedCallback(){this.removeEventListener("click",this._onClick),this._watching&&(Gi(this),this._watching=!1),super.disconnectedCallback()}_onNear(t){t?(this._watching&&(Gi(this),this._watching=!1),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:t=!1}={}){return this._near||this._onNear(!0),t&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}_onClick=t=>{t.composedPath().some(r=>r?.matches?.("a, button, label"))||this.dataset.gid&&this.dispatchEvent(new CustomEvent("row-select",{detail:{gid:this.dataset.gid},bubbles:!0,composed:!0}))}};customElements.define("finding-row",UC);var k9=`:host{display:block;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;box-shadow:var(--shadow-glass);margin-bottom:1rem;max-width:1200px}@media not print{finding-row{content-visibility:auto;contain-intrinsic-size:auto 3.2rem}}
|
|
422
|
-
`;var jC=class extends fe{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=N(k9);constructor(){super(),this.items=[],this.selectedGid=null}render(){return p`${ve(this.items??[],t=>Te(t),t=>p`<finding-row .group="${t}" ?selected="${Te(t)===this.selectedGid}"></finding-row>`)}`}};customElements.define("finding-table",jC);P();nt();Os();vh();Ht();Qs();Ey();var x9=`:host{display:block}:host(.hidden){display:none}:host([lazy]:not(.content-ready)){visibility:hidden}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.card{padding:.5rem .75rem;padding-bottom:var(--finding-card-pad-bottom, .5rem);border-bottom:1px solid var(--border);font-size:.875rem;display:var(--finding-card-display, block);flex-direction:column;flex:1}:host(:last-child) .card{border-bottom:none}.card.card-pending{min-height:8rem}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host(.has-conflict[popup][context="kanban-detail"]) .card{outline:none}:host(.link-target) .card{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .card{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host([in-group]) .line-row{display:none}@media not print{:host([in-group]) .line-row+*{margin-top:0}:host([in-group]) .line-row+:is(.conf-reason,.revalidate-verdict,.severity-reason){padding-top:0;border-top:0}}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.tab-body>:not(.finding-left){min-width:0;overflow-wrap:break-word}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-wrap;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.section,.evidence,.recommendation{grid-column:2;margin-top:.55rem;font-size:.92em}.section-label{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-weight:600;font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;&:before{content:"";flex:none;width:2px;height:.58rem;margin-left:calc((2px + .3rem)*-1);border-radius:1px;background:currentcolor;opacity:.75;-webkit-print-color-adjust:exact;print-color-adjust:exact}}.code-preview-btn{display:inline-flex;align-items:center;margin-left:.35rem;padding:0 .15rem;border:0;background:transparent;color:var(--muted);vertical-align:-2px;&.open{color:var(--accent)}}.gh-ref-btn{display:inline-flex;align-items:center;margin-left:.25rem;padding:0 .15rem;color:var(--muted);vertical-align:-2px}:is(.code-preview-btn,.gh-ref-btn){position:relative;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.code-preview-tip{position:absolute;z-index:20;top:100%;left:0;margin-top:.3rem;width:max-content;max-width:min(100%,46rem);visibility:hidden;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .35));background:var(--bg);border-radius:var(--ui-radius, 4px);.code-preview{margin:0}}:is(.line-row,.evidence-list li):has(.code-preview-btn:is(:hover,:focus-visible))>.code-preview-tip{visibility:visible}.code-preview{margin:.3rem 0 .1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);backdrop-filter:var(--glass-blur);max-height:calc(10lh + .7rem);overflow:auto;display:flex;align-items:flex-start;white-space:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;line-height:1.5}.code-preview-pending{display:block;padding:.35rem .5rem;color:var(--muted);font-style:italic}.code-preview-gutter{flex:none;padding:.35rem .45rem .35rem .5rem;border-right:1px solid var(--border);color:var(--muted);text-align:right;user-select:none;position:sticky;left:0;z-index:1;background-color:var(--bg);background-image:linear-gradient(rgb(from var(--text) r g b / .03),rgb(from var(--text) r g b / .03)),linear-gradient(var(--surface),var(--surface));.code-preview-lineno{width:var(--lineno-width, 3ch);opacity:.7}.cited{opacity:1;color:var(--accent);font-weight:600}}.code-preview-source{margin:0;padding:.35rem .6rem;white-space:pre;color:var(--text);font:inherit;& code{font:inherit}}summary.section-label{cursor:default;list-style:none;&::-webkit-details-marker{display:none}&:after{content:"";flex:none;width:.3rem;height:.3rem;margin-left:.05rem;border-right:1.5px solid currentcolor;border-bottom:1.5px solid currentcolor;transform:translateY(-1px) rotate(-45deg);transition:transform .12s;opacity:.8}}details[open]>summary.section-label:after{transform:translateY(-2px) rotate(45deg)}.evidence-count{font-weight:500;opacity:.8}.section-body{white-space:pre-wrap;line-height:1.55;color:rgb(from var(--text) r g b / .82);margin-top:.1rem}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.recommendation .section-label,.recommendation .section-body{color:var(--green)}.conf-reason,.revalidate-verdict{grid-column:2;white-space:pre-wrap;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.revalidate-stamp{display:inline-block;margin-top:.1rem;font-size:.55rem;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.03em;padding:.14rem .3rem;border-radius:3px;background:transparent;color:var(--muted);border:1px solid var(--border);white-space:nowrap;&.confirmed{color:var(--critical);border-color:rgb(from var(--critical) r g b / .55)}&.partial{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .55)}&.unknown{color:var(--warning);border-color:rgb(from var(--warning) r g b / .55)}}.evidence-list{margin:.25rem 0 0;padding-left:1.6rem;display:flex;flex-direction:column;gap:.15rem;>li{position:relative}& li::marker{color:var(--muted);font-size:.9em}>li.current:before{content:"";position:absolute;left:-1.5rem;top:.58em;width:.35rem;height:.35rem;border-radius:50%;background:var(--accent)}>li.current::marker{color:var(--accent)}& li:has(.evidence-note):not(:last-child){margin-bottom:.3rem}}.evidence-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;overflow-wrap:anywhere;color:var(--accent);text-decoration:none;&:is(a,[role=link]):hover{text-decoration:underline}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}:is(.line-num a,.evidence-ref,.gh-ref-btn){cursor:default}span.evidence-ref:not([role]){color:var(--muted)}.evidence-note{white-space:pre-wrap;line-height:1.5;color:rgb(from var(--text) r g b / .78);margin-top:.1rem}.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a{color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.code-block{white-space:normal;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.45rem .6rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;line-height:1.5;color:var(--text)}& code{font:inherit}}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding-right:var(--finding-line-end-inset, 0);position:relative}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 999px);color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;position:var(--finding-marks-position, static);bottom:0;background:var(--finding-marks-bg, transparent);padding-bottom:var(--finding-marks-pad-bottom, 0);padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;padding-top:var(--finding-left-inset, 0);position:var(--finding-left-position, relative);top:var(--finding-mark-sticky-top, 0);.value-label:last-child{margin-bottom:0}}:host(:not([popup])) .finding-left{padding-top:calc(var(--finding-left-inset, 0px) + 2px)}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.severity-reason{margin-top:.4rem;padding-top:.35rem;border-top:1px dashed var(--border);font-size:.82em;font-style:italic;color:var(--muted)}.severity-reason-label{font-style:normal;font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.04em;margin-right:.35rem}.duplicates-block .file-icon{flex-shrink:0}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:not(:disabled):hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-inprogress.active{background:rgb(from var(--warning, #d97706) r g b / .12);border-color:var(--warning, #d97706);color:var(--warning, #d97706)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:var(--finding-marks-margin-top, .65rem);padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-flag,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-link,:host([context="focus"]) .mark-issue,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}.finding-top-marks{position:absolute;top:calc(var(--finding-left-inset, 0px) - var(--finding-mark-inset, .5rem));left:calc(.75rem - var(--finding-mark-inset, .5rem));display:grid;grid-template-columns:24px 12px;column-gap:31px;&.color-red{color:var(--marker-red)}&.color-blue{color:var(--marker-blue)}&.color-green{color:var(--marker-green)}&.color-gray{color:var(--marker-gray)}}.finding-color-mark{grid-column:1;display:block;width:24px;height:12px;border-radius:var(--ui-radius, 0 0 6px 6px);background:currentcolor;box-shadow:inset 0 0 0 1px rgb(from var(--text) r g b / .15)}.finding-bookmark-mark{grid-column:2;display:block;width:12px;height:12px;background:var(--bookmark-color);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%)}:host(:not([popup])) :is(.finding-color-mark,.finding-bookmark-mark){height:10px}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.comment-block:has(.managed-comment){white-space:normal}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.fix-block:has(managed-fix-link){display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--muted) r g b / .04);word-break:normal;.fix-label{flex:none;font-size:.75rem;font-weight:500}& managed-fix-link{flex:1;min-width:0}}.duplicates-block{display:flex;align-items:baseline;flex-wrap:wrap;gap:.1rem .4rem;margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--muted);background:rgb(from var(--muted) r g b / .1);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text);.duplicates-label{color:var(--muted);font-weight:600}& a.duplicate-ref{display:inline-flex;align-items:center;gap:.25rem;color:var(--accent);text-decoration:none}& a.duplicate-ref .duplicate-ref-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;text-decoration:underline dotted;text-underline-offset:2px}& a.duplicate-ref:hover .duplicate-ref-id{text-decoration:underline solid}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit;text-decoration:none}.line-num a:hover{color:var(--accent)}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:var(--finding-print-break, avoid);box-decoration-break:clone;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-link,.mark-issue,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.link-target) .card{animation:none;box-shadow:none!important}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important;break-inside:var(--finding-print-break, avoid)}:host(.multi-case) .tab-body{break-inside:auto}:host(.multi-case) .tab-body+.tab-body{break-inside:avoid}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([print-one-sample]) .tab-body:not(.active),:host([print-one-sample]) .print-case-label,:host([print-one-sample]) .card:before{display:none!important}:host([print-one-sample]) .tab-body.active{margin-top:0;padding-top:0;border-top:0;break-inside:var(--finding-print-break, avoid)}.finding-body{display:flex;flex-direction:column;>*{flex-shrink:0}}.line-row,.desc-title,.conf-reason,.severity-reason{break-inside:avoid}.section-label{break-after:avoid}.desc,.section-body{orphans:2;widows:2}.section,.recommendation,.evidence{break-inside:avoid}.evidence{order:99}.evidence>summary{break-after:avoid}.evidence-list>li{break-inside:avoid}:host([in-group].multi-case:not([print-one-sample])) .tab-body .line-row{display:flex}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+*{margin-top:0}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+.conf-reason{padding-top:0;border-top:0}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;break-after:avoid;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies,.revalidate-stamp{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre,.severity-reason{color:#555!important}a,.line-num,.line-num a,.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a,.evidence-ref{color:inherit}details:not([open])>:not(summary){display:block}details::details-content{content-visibility:visible}summary.section-label{cursor:auto;&:after{display:none}}.code-preview-btn,.gh-ref-btn{display:none}.inline-code{border:0;background:transparent}.code-block{background:transparent;border-color:#bbb;.code-block-lang{color:#555;border-bottom-color:#bbb}& pre{white-space:pre-wrap;overflow:visible}.token{color:#333!important}.token.comment,.token.prolog,.token.cdata{color:#666!important}}}
|
|
422
|
+
`;var jC=class extends he{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=N(k9);constructor(){super(),this.items=[],this.selectedGid=null}render(){return p`${ve(this.items??[],t=>Te(t),t=>p`<finding-row .group="${t}" ?selected="${Te(t)===this.selectedGid}"></finding-row>`)}`}};customElements.define("finding-table",jC);P();nt();Os();vh();Ht();Qs();Ey();var x9=`:host{display:block}:host(.hidden){display:none}:host([lazy]:not(.content-ready)){visibility:hidden}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.card{padding:.5rem .75rem;padding-bottom:var(--finding-card-pad-bottom, .5rem);border-bottom:1px solid var(--border);font-size:.875rem;display:var(--finding-card-display, block);flex-direction:column;flex:1}:host(:last-child) .card{border-bottom:none}.card.card-pending{min-height:8rem}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host(.has-conflict[popup][context="kanban-detail"]) .card{outline:none}:host(.link-target) .card{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .card{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host([in-group]) .line-row{display:none}@media not print{:host([in-group]) .line-row+*{margin-top:0}:host([in-group]) .line-row+:is(.conf-reason,.revalidate-verdict,.severity-reason){padding-top:0;border-top:0}}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.tab-body>:not(.finding-left){min-width:0;overflow-wrap:break-word}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-wrap;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.section,.evidence,.recommendation{grid-column:2;margin-top:.55rem;font-size:.92em}.section-label{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-weight:600;font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;&:before{content:"";flex:none;width:2px;height:.58rem;margin-left:calc((2px + .3rem)*-1);border-radius:1px;background:currentcolor;opacity:.75;-webkit-print-color-adjust:exact;print-color-adjust:exact}}.code-preview-btn{display:inline-flex;align-items:center;margin-left:.35rem;padding:0 .15rem;border:0;background:transparent;color:var(--muted);vertical-align:-2px;&.open{color:var(--accent)}}.gh-ref-btn{display:inline-flex;align-items:center;margin-left:.25rem;padding:0 .15rem;color:var(--muted);vertical-align:-2px}:is(.code-preview-btn,.gh-ref-btn){position:relative;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.code-preview-tip{position:absolute;z-index:20;top:100%;left:0;margin-top:.3rem;width:max-content;max-width:min(100%,46rem);visibility:hidden;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .35));background:var(--bg);border-radius:var(--ui-radius, 4px);.code-preview{margin:0}}:is(.line-row,.evidence-list li):has(.code-preview-btn:is(:hover,:focus-visible))>.code-preview-tip{visibility:visible}.code-preview{margin:.3rem 0 .1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);backdrop-filter:var(--glass-blur);max-height:calc(10lh + .7rem);overflow:auto;display:flex;align-items:flex-start;white-space:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;line-height:1.5}.code-preview-pending{display:block;padding:.35rem .5rem;color:var(--muted);font-style:italic}.code-preview-gutter{flex:none;padding:.35rem .45rem .35rem .5rem;border-right:1px solid var(--border);color:var(--muted);text-align:right;user-select:none;position:sticky;left:0;z-index:1;background-color:var(--bg);background-image:linear-gradient(rgb(from var(--text) r g b / .03),rgb(from var(--text) r g b / .03)),linear-gradient(var(--surface),var(--surface));.code-preview-lineno{width:var(--lineno-width, 3ch);opacity:.7}.cited{opacity:1;color:var(--accent);font-weight:600}}.code-preview-source{margin:0;padding:.35rem .6rem;white-space:pre;color:var(--text);font:inherit;& code{font:inherit}}summary.section-label{cursor:default;list-style:none;&::-webkit-details-marker{display:none}&:after{content:"";flex:none;width:.3rem;height:.3rem;margin-left:.05rem;border-right:1.5px solid currentcolor;border-bottom:1.5px solid currentcolor;transform:translateY(-1px) rotate(-45deg);transition:transform .12s;opacity:.8}}details[open]>summary.section-label:after{transform:translateY(-2px) rotate(45deg)}.evidence-count{font-weight:500;opacity:.8}.section-body{white-space:pre-wrap;line-height:1.55;color:rgb(from var(--text) r g b / .82);margin-top:.1rem}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.recommendation .section-label,.recommendation .section-body{color:var(--green)}.conf-reason,.revalidate-verdict{grid-column:2;white-space:pre-wrap;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.revalidate-stamp{display:inline-block;margin-top:.1rem;font-size:.55rem;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.03em;padding:.14rem .3rem;border-radius:3px;background:transparent;color:var(--muted);border:1px solid var(--border);white-space:nowrap;&.confirmed{color:var(--critical);border-color:rgb(from var(--critical) r g b / .55)}&.partial{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .55)}&.unknown{color:var(--warning);border-color:rgb(from var(--warning) r g b / .55)}}.evidence-list{margin:.25rem 0 0;padding-left:1.6rem;display:flex;flex-direction:column;gap:.15rem;>li{position:relative}& li::marker{color:var(--muted);font-size:.9em}>li.current:before{content:"";position:absolute;left:-1.5rem;top:.58em;width:.35rem;height:.35rem;border-radius:50%;background:var(--accent)}>li.current::marker{color:var(--accent)}& li:has(.evidence-note):not(:last-child){margin-bottom:.3rem}}.evidence-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;overflow-wrap:anywhere;color:var(--accent);text-decoration:none;&:is(a,[role=link]):hover{text-decoration:underline}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}:is(.line-num a,.evidence-ref,.gh-ref-btn){cursor:default}span.evidence-ref:not([role]){color:var(--muted)}.evidence-note{white-space:pre-wrap;line-height:1.5;color:rgb(from var(--text) r g b / .78);margin-top:.1rem}.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a{color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.code-block{white-space:normal;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.45rem .6rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;line-height:1.5;color:var(--text)}& code{font:inherit}}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding-right:var(--finding-line-end-inset, 0);position:relative}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 999px);color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;position:var(--finding-marks-position, static);bottom:0;background:var(--finding-marks-bg, transparent);padding-bottom:var(--finding-marks-pad-bottom, 0);padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;padding-top:var(--finding-left-inset, 0);position:var(--finding-left-position, relative);top:var(--finding-mark-sticky-top, 0);.value-label:last-child{margin-bottom:0}}:host(:not([popup])) .finding-left{padding-top:calc(var(--finding-left-inset, 0px) + 2px)}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.severity-reason{margin-top:.4rem;padding-top:.35rem;border-top:1px dashed var(--border);font-size:.82em;font-style:italic;color:var(--muted)}.severity-reason-label{font-style:normal;font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.04em;margin-right:.35rem}.duplicates-block .file-icon{flex-shrink:0}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:not(:disabled):hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-inprogress.active{background:rgb(from var(--warning, #d97706) r g b / .12);border-color:var(--warning, #d97706);color:var(--warning, #d97706)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:var(--finding-marks-margin-top, .65rem);padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-flag,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-link,:host([context="focus"]) .mark-issue,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}.finding-top-marks{position:absolute;top:calc(var(--finding-left-inset, 0px) - var(--finding-mark-inset, .5rem));left:calc(.75rem - var(--finding-mark-inset, .5rem));display:grid;grid-template-columns:24px 12px;column-gap:31px;&.color-red{color:var(--marker-red)}&.color-blue{color:var(--marker-blue)}&.color-green{color:var(--marker-green)}&.color-gray{color:var(--marker-gray)}}.finding-color-mark{grid-column:1;display:block;width:24px;height:12px;border-radius:var(--ui-radius, 0 0 6px 6px);background:currentcolor;box-shadow:inset 0 0 0 1px rgb(from var(--text) r g b / .15)}.finding-bookmark-mark{grid-column:2;display:block;width:12px;height:12px;background:var(--bookmark-color);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%)}:host(:not([popup])) :is(.finding-color-mark,.finding-bookmark-mark){height:10px}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.comment-block:has(.managed-comment){white-space:normal}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.fix-block:has(managed-fix-link){display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--muted) r g b / .04);word-break:normal;.fix-label{flex:none;font-size:.75rem;font-weight:500}& managed-fix-link{flex:1;min-width:0}}.duplicates-block{display:flex;align-items:baseline;flex-wrap:wrap;gap:.1rem .4rem;margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--muted);background:rgb(from var(--muted) r g b / .1);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text);.duplicates-label{color:var(--muted);font-weight:600}& a.duplicate-ref{display:inline-flex;align-items:center;gap:.25rem;color:var(--accent);text-decoration:none}& a.duplicate-ref .duplicate-ref-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;text-decoration:underline dotted;text-underline-offset:2px}& a.duplicate-ref:hover .duplicate-ref-id{text-decoration:underline solid}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit;text-decoration:none}.line-num a:hover{color:var(--accent)}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:var(--finding-print-break, avoid);box-decoration-break:clone;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-link,.mark-issue,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.link-target) .card{animation:none;box-shadow:none!important}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important;break-inside:var(--finding-print-break, avoid)}:host(.multi-case) .tab-body{break-inside:auto}:host(.multi-case) .tab-body+.tab-body{break-inside:avoid}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([print-one-sample]) .tab-body:not(.active),:host([print-one-sample]) .print-case-label,:host([print-one-sample]) .card:before{display:none!important}:host([print-one-sample]) .tab-body.active{margin-top:0;padding-top:0;border-top:0;break-inside:var(--finding-print-break, avoid)}.finding-body{display:flex;flex-direction:column;>*{flex-shrink:0}}.line-row,.desc-title,.conf-reason,.severity-reason{break-inside:avoid}.section-label{break-after:avoid}.desc,.section-body{orphans:2;widows:2}.section,.recommendation,.evidence{break-inside:avoid}.evidence{order:99}.evidence>summary{break-after:avoid}.evidence-list>li{break-inside:avoid}:host([in-group].multi-case:not([print-one-sample])) .tab-body .line-row{display:flex}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+*{margin-top:0}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+.conf-reason{padding-top:0;border-top:0}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;break-after:avoid;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies,.revalidate-stamp{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre,.severity-reason{color:#555!important}a,.line-num,.line-num a,.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a,.evidence-ref{color:inherit}details:not([open])>:not(summary){display:block}details::details-content{content-visibility:visible}summary.section-label{cursor:auto;&:after{display:none}}.code-preview-btn,.gh-ref-btn{display:none}.inline-code{border:0;background:transparent}.code-block{background:transparent;border-color:#bbb;.code-block-lang{color:#555;border-bottom-color:#bbb}& pre{white-space:pre-wrap;overflow:visible}.token{color:#333!important}.token.comment,.token.prolog,.token.cdata{color:#666!important}}}
|
|
423
423
|
`;yh();Wd();ew();var Wte=["finding","is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","multi-case"],HC=class extends ce{static properties={group:{attribute:!1},inGroup:{type:Boolean,attribute:"in-group",reflect:!0},context:{type:String,reflect:!0},lazy:{type:Boolean}};static styles=[N(ha),N(hw),N(x9),N(mw),N(fw),N(hi),N(nu)];_near=!1;_watched=null;constructor(){super(),this.group=null,this.inGroup=!1,this.context=null,this.lazy=!1}render(){if(!this.group)return p``;if(this.dataset.gid=Te(this.group),this.lazy&&!this._near)return this.classList.add("finding"),p`<div class="card card-pending" aria-busy="true"></div>`;let t=new Set(kL(this.group));for(let n of Wte)this.classList.toggle(n,t.has(n));return p`<div class="card">${xL(this.group,{context:this.context})}</div>`}updated(){this.classList.toggle("content-ready",!!this.group&&(!this.lazy||this._near));for(let t of this.renderRoot.querySelectorAll(".code-preview")){let n=t.dataset.revealedTo;if(n!==void 0&&Math.round(t.scrollTop)!==Number(n))continue;let r=t.querySelectorAll(".code-preview-lineno.cited");r.length!==0&&(xd(t,r),t.dataset.revealedTo=String(Math.round(t.scrollTop)))}}connectedCallback(){if(super.connectedCallback(),Jn(this.renderRoot),this.lazy){this._watched=this.closest(".flat-group")??this,Qd(this._watched,t=>this._onNear(t));return}this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this._watched&&(Gi(this._watched),this._watched=null),super.disconnectedCallback()}_onNear(t){t?(this._watched&&(Gi(this._watched),this._watched=null),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:t=!1}={}){return this.lazy&&!this._near&&this._onNear(!0),t&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}};customElements.define("finding-card",HC);P();var $9=`:host{display:inline-flex;gap:4px;align-items:center;flex-shrink:0}button{width:14px;height:14px;user-select:none;padding:0;background:transparent;border:1.5px solid currentcolor;border-radius:var(--ui-radius, 50%);opacity:.55;transition:opacity .12s,transform .12s}button:not(:disabled):hover{opacity:1;transform:scale(1.12)}button:disabled{opacity:.25}button.active{background:currentcolor;opacity:1;box-shadow:0 0 0 2px var(--surface),0 0 0 3px currentcolor}.color-red{color:var(--marker-red)}.color-blue{color:var(--marker-blue)}.color-green{color:var(--marker-green)}.color-gray{color:var(--marker-gray)}
|
|
424
|
-
`;var Kte=["red","blue","green","gray"],WC=class extends fe{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=N($9);constructor(){super(),this.selected=null,this.disabled=!1}render(){return p`${Kte.map(t=>p`<button type="button" class="${`color-${t}${this.selected===t?" active":""}`}" data-color="${t}" aria-label="${`mark ${t}`}" ?disabled="${this.disabled}" @click="${this._onClick}"></button>`)}`}_onClick=t=>{if(this.disabled)return;let n=t.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent("mark-color",{detail:{color:n},bubbles:!0,composed:!0}))}};customElements.define("color-marker",WC);Q$();P();ht();nt();q();var VC=class extends ce{static properties={rangeDisabled:{type:Boolean,attribute:"range-disabled"},revalidateOptions:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.rangeDisabled=!1,this.revalidateOptions=[],this.hasPartial=!1}render(){let t=c.filterConfMin,n=c.filterConfMax,r=this.revalidateOptions??[],o=this.rangeDisabled,i=r.length>0&&!!c.filterRevalidate,s=o?"No confidence range: some findings on screen carry no confidence score":b;return p`<span class="${Y({"conf-range-label":!0,replaced:i,disabled:o})}" data-tooltip="${s}">Confidence</span> <span class="${Y({"conf-range":!0,replaced:i,disabled:o})}" ?inert="${o||i}"><range-slider id="conf-range" min="0" max="10" step="1" low="${t}" high="${n}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${t}" .high="${n}"></conf-range-mirror></span>${r.length>0?p`<revalidate-filter class="${Y({replaces:i})}" .options="${r}" ?has-partial="${this.hasPartial}"></revalidate-filter>`:b}`}};customElements.define("conf-filter",VC);P();ht();er();nt();q();var S9={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026"},_9={files:"Filter files",code:"Search code",issues:"Search issues"},Gte=p`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,qte={files:p`<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>`,code:p`<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>`,issues:p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`},KC=class extends ce{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let t=c.bundleCodeSearchQuery,n=c.bundleCodeSearchMode,r=this.modes.includes(n)?n:"files",o=S9[r]??S9.files;return p`${Gte} <input type="text" class="bundle-code-search-input" placeholder="${o}" aria-label="${o}" .value="${Je(t)}" @input="${this._onInput}"> ${t?p`<button type="button" class="bundle-code-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:b} ${this.modes.length>0?p`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(i=>p`<button type="button" class="${Y({"bundle-code-search-mode":!0,active:r===i})}" role="tab" aria-selected="${String(r===i)}" data-tooltip="${_9[i]??i}" aria-label="${_9[i]??i}" @click="${()=>this._selectMode(i)}">${qte[i]??b}</button>`)}</span>`:b}`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-code",value:t},bubbles:!0,composed:!0}))}_selectMode(t){this.dispatchEvent(new CustomEvent("bundle-search-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("bundle-code-search",KC);var iu=320,GC=class extends HTMLElement{constructor(){super(),this._drag=null,this.addEventListener("pointerdown",t=>this._startDrag(t)),this.addEventListener("pointermove",t=>{this._drag?.id===t.pointerId&&(iu=this._apply(this._drag.width+t.clientX-this._drag.x))});for(let t of["pointerup","pointercancel","lostpointercapture"])this.addEventListener(t,n=>{this._drag?.id===n.pointerId&&this._endDrag()});this.addEventListener("keydown",t=>this._onKeyDown(t)),this.addEventListener("dblclick",()=>{iu=320,this._apply(iu)})}connectedCallback(){this._view=this.closest(".bundle-code-view"),this._view&&(this._observer=new ResizeObserver(()=>this._apply(iu)),this._observer.observe(this._view),this._apply(iu))}disconnectedCallback(){this._observer?.disconnect(),this._endDrag(),this._view=null}_bounds(){let t=this._view.getBoundingClientRect().width;return{min:Math.min(180,t*.4),max:t*.6}}_apply(t){if(!this._view)return t;let{min:n,max:r}=this._bounds();if(r===0)return t;let o=Math.max(n,Math.min(r,t));return this._view.style.setProperty("--bundle-code-rail-width",`${o}px`),this.setAttribute("aria-valuemin",String(Math.round(n))),this.setAttribute("aria-valuemax",String(Math.round(r))),this.setAttribute("aria-valuenow",String(Math.round(o))),this.setAttribute("aria-valuetext",`${Math.round(o)} pixels`),o}_startDrag(t){if(t.button!==0||!t.isPrimary||this._drag||!this._view)return;t.preventDefault();let n=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width;this._drag={id:t.pointerId,x:t.clientX,width:n},this.setPointerCapture(t.pointerId),this.classList.add("dragging")}_endDrag(){if(!this._drag)return;let{id:t}=this._drag;this._drag=null,this.classList.remove("dragging"),this.hasPointerCapture(t)&&this.releasePointerCapture(t)}_onKeyDown(t){if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||!this._view)return;let n=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width,{min:r,max:o}=this._bounds(),i={ArrowLeft:n-16,ArrowRight:n+16,Home:r,End:o}[t.key];i!==void 0&&(t.preventDefault(),t.stopPropagation(),iu=this._apply(i))}};customElements.define("bundle-code-splitter",GC);var qC=class extends HTMLElement{connectedCallback(){this._schedule=()=>{this._frame||(this._frame=requestAnimationFrame(()=>this._update()))},this._resize=new ResizeObserver(this._schedule),this._resize.observe(this),this._mutation=new MutationObserver(this._schedule),this._mutation.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["hidden"]}),this._mode=matchMedia("(display-mode: window-controls-overlay)"),this._mode.addEventListener("change",this._schedule),navigator.windowControlsOverlay?.addEventListener("geometrychange",this._schedule),this._schedule()}disconnectedCallback(){cancelAnimationFrame(this._frame),this._frame=0,this._resize.disconnect(),this._mutation.disconnect(),this._mode.removeEventListener("change",this._schedule),navigator.windowControlsOverlay?.removeEventListener("geometrychange",this._schedule)}_update(){this._frame=0,this.classList.remove("boxed");let t=this.querySelector(".bundles-slide-bar");if(!t)return;this._resize.observe(t);let n=this.querySelector(".bundles-slide-tabs");n&&this._resize.observe(n);let r=parseFloat(getComputedStyle(this,"::before").height)||0;if(!r)return;let o=this.getBoundingClientRect(),i=t.getBoundingClientRect();this.classList.toggle("boxed",i.top>o.top+1||i.height>r+1)}};customElements.define("bundle-slide-header",qC);P();ht();er();nt();q();var Yte=p`<svg class="bundle-search-icon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,YC=class extends ce{createRenderRoot(){return this}render(){let t=c.bundleSearchQuery,n=c.bundleSearchRegex,r=c.bundleSearchCase,o=n?"Search by regular expression\u2026":"Search all source\u2026";return p`${Yte} <input type="text" class="bundle-search-input" placeholder="${o}" aria-label="${o}" spellcheck="false" autocapitalize="off" autocomplete="off" .value="${Je(t)}" @input="${this._onInput}"> ${t?p`<button type="button" class="bundle-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:b} <span class="bundle-search-mods"><button type="button" class="${Y({"bundle-search-mod":!0,active:r})}" data-tooltip="${r?"Case-sensitive on \u2014 click to ignore case":"Match case"}" aria-label="Match case" aria-pressed="${String(r)}" @click="${this._onToggleCase}">Aa</button> <button type="button" class="${Y({"bundle-search-mod":!0,active:n})}" data-tooltip="${n?"Regular expression on \u2014 click for plain text":"Match by regular expression"}" aria-label="Match by regular expression" aria-pressed="${String(n)}" @click="${this._onToggleRegex}">.*</button></span>`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-search",value:t},bubbles:!0,composed:!0}))}_onToggleRegex=()=>{this.dispatchEvent(new CustomEvent("bundle-search-regex-toggle",{bubbles:!0,composed:!0}))};_onToggleCase=()=>{this.dispatchEvent(new CustomEvent("bundle-search-case-toggle",{bubbles:!0,composed:!0}))}};customElements.define("bundle-search",YC);P();er();nt();q();function vi(e,t,n){let r=t[n];return r||console.warn(`<${e}>: unknown kind ${JSON.stringify(n)}; expected one of ${Object.keys(t).map(o=>JSON.stringify(o)).join(", ")}.`),r}var Jte={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},JC=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("entity-search",Jte,this.kind);return t?p`<input type="search" class="packages-search" placeholder="${`${t.label}\u2026`}" aria-label="${t.label}" .value="${Je(c[t.stateKey])}" @input="${this._onInput}">`:b}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-search",JC);P();er();nt();q();var Xte=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],Zte={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},XC=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("entity-sort",Zte,this.kind);return t?p`<select class="packages-sort" aria-label="${t.aria}" .value="${Je(c[t.stateKey])}" @change="${this._onChange}">${Xte.map(([n,r])=>p`<option value="${n}" ?selected="${c[t.stateKey]===n}">${r}</option>`)}</select>`:b}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-sort",XC);P();er();nt();q();var ZC=class extends ce{static properties={showFile:{type:Boolean,attribute:"show-file"},showConfidence:{type:Boolean,attribute:"show-confidence"},showPriority:{type:Boolean,attribute:"show-priority"}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let t=(n,r)=>p`<option value="${n}" ?selected="${c.sortBy===n}">${r}</option>`;return p`<select class="sort-select" aria-label="Sort findings" .value="${Je(c.sortBy)}" @change="${this._onChange}">${t("severity","Severity \u2193")} ${this.showFile?t("file","File \u2191"):b} ${this.showConfidence?p`${t("confidence-desc","Confidence \u2193")}${t("confidence-asc","Confidence \u2191")}`:b} ${this.showPriority?p`${t("priority-desc","Priority \u2193")}${t("priority-asc","Priority \u2191")}`:b}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:"findings",value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("findings-sort",ZC);P();var C9=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:var(--ui-radius, 99px);background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}
|
|
425
|
-
`;var QC=class extends
|
|
424
|
+
`;var Kte=["red","blue","green","gray"],WC=class extends he{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=N($9);constructor(){super(),this.selected=null,this.disabled=!1}render(){return p`${Kte.map(t=>p`<button type="button" class="${`color-${t}${this.selected===t?" active":""}`}" data-color="${t}" aria-label="${`mark ${t}`}" ?disabled="${this.disabled}" @click="${this._onClick}"></button>`)}`}_onClick=t=>{if(this.disabled)return;let n=t.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent("mark-color",{detail:{color:n},bubbles:!0,composed:!0}))}};customElements.define("color-marker",WC);Q$();P();ht();nt();q();var VC=class extends ce{static properties={rangeDisabled:{type:Boolean,attribute:"range-disabled"},revalidateOptions:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.rangeDisabled=!1,this.revalidateOptions=[],this.hasPartial=!1}render(){let t=c.filterConfMin,n=c.filterConfMax,r=this.revalidateOptions??[],o=this.rangeDisabled,i=r.length>0&&!!c.filterRevalidate,s=o?"No confidence range: some findings on screen carry no confidence score":b;return p`<span class="${Y({"conf-range-label":!0,replaced:i,disabled:o})}" data-tooltip="${s}">Confidence</span> <span class="${Y({"conf-range":!0,replaced:i,disabled:o})}" ?inert="${o||i}"><range-slider id="conf-range" min="0" max="10" step="1" low="${t}" high="${n}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${t}" .high="${n}"></conf-range-mirror></span>${r.length>0?p`<revalidate-filter class="${Y({replaces:i})}" .options="${r}" ?has-partial="${this.hasPartial}"></revalidate-filter>`:b}`}};customElements.define("conf-filter",VC);P();ht();er();nt();q();var S9={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026"},_9={files:"Filter files",code:"Search code",issues:"Search issues"},Gte=p`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,qte={files:p`<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>`,code:p`<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>`,issues:p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`},KC=class extends ce{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let t=c.bundleCodeSearchQuery,n=c.bundleCodeSearchMode,r=this.modes.includes(n)?n:"files",o=S9[r]??S9.files;return p`${Gte} <input type="text" class="bundle-code-search-input" placeholder="${o}" aria-label="${o}" .value="${Je(t)}" @input="${this._onInput}"> ${t?p`<button type="button" class="bundle-code-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:b} ${this.modes.length>0?p`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(i=>p`<button type="button" class="${Y({"bundle-code-search-mode":!0,active:r===i})}" role="tab" aria-selected="${String(r===i)}" data-tooltip="${_9[i]??i}" aria-label="${_9[i]??i}" @click="${()=>this._selectMode(i)}">${qte[i]??b}</button>`)}</span>`:b}`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-code",value:t},bubbles:!0,composed:!0}))}_selectMode(t){this.dispatchEvent(new CustomEvent("bundle-search-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("bundle-code-search",KC);var iu=320,GC=class extends HTMLElement{constructor(){super(),this._drag=null,this.addEventListener("pointerdown",t=>this._startDrag(t)),this.addEventListener("pointermove",t=>{this._drag?.id===t.pointerId&&(iu=this._apply(this._drag.width+t.clientX-this._drag.x))});for(let t of["pointerup","pointercancel","lostpointercapture"])this.addEventListener(t,n=>{this._drag?.id===n.pointerId&&this._endDrag()});this.addEventListener("keydown",t=>this._onKeyDown(t)),this.addEventListener("dblclick",()=>{iu=320,this._apply(iu)})}connectedCallback(){this._view=this.closest(".bundle-code-view"),this._view&&(this._observer=new ResizeObserver(()=>this._apply(iu)),this._observer.observe(this._view),this._apply(iu))}disconnectedCallback(){this._observer?.disconnect(),this._endDrag(),this._view=null}_bounds(){let t=this._view.getBoundingClientRect().width;return{min:Math.min(180,t*.4),max:t*.6}}_apply(t){if(!this._view)return t;let{min:n,max:r}=this._bounds();if(r===0)return t;let o=Math.max(n,Math.min(r,t));return this._view.style.setProperty("--bundle-code-rail-width",`${o}px`),this.setAttribute("aria-valuemin",String(Math.round(n))),this.setAttribute("aria-valuemax",String(Math.round(r))),this.setAttribute("aria-valuenow",String(Math.round(o))),this.setAttribute("aria-valuetext",`${Math.round(o)} pixels`),o}_startDrag(t){if(t.button!==0||!t.isPrimary||this._drag||!this._view)return;t.preventDefault();let n=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width;this._drag={id:t.pointerId,x:t.clientX,width:n},this.setPointerCapture(t.pointerId),this.classList.add("dragging")}_endDrag(){if(!this._drag)return;let{id:t}=this._drag;this._drag=null,this.classList.remove("dragging"),this.hasPointerCapture(t)&&this.releasePointerCapture(t)}_onKeyDown(t){if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||!this._view)return;let n=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width,{min:r,max:o}=this._bounds(),i={ArrowLeft:n-16,ArrowRight:n+16,Home:r,End:o}[t.key];i!==void 0&&(t.preventDefault(),t.stopPropagation(),iu=this._apply(i))}};customElements.define("bundle-code-splitter",GC);var qC=class extends HTMLElement{connectedCallback(){this._schedule=()=>{this._frame||(this._frame=requestAnimationFrame(()=>this._update()))},this._resize=new ResizeObserver(this._schedule),this._resize.observe(this),this._mutation=new MutationObserver(this._schedule),this._mutation.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["hidden"]}),this._mode=matchMedia("(display-mode: window-controls-overlay)"),this._mode.addEventListener("change",this._schedule),navigator.windowControlsOverlay?.addEventListener("geometrychange",this._schedule),this._schedule()}disconnectedCallback(){cancelAnimationFrame(this._frame),this._frame=0,this._resize.disconnect(),this._mutation.disconnect(),this._mode.removeEventListener("change",this._schedule),navigator.windowControlsOverlay?.removeEventListener("geometrychange",this._schedule)}_update(){this._frame=0,this.classList.remove("boxed");let t=this.querySelector(".bundles-slide-bar");if(!t)return;this._resize.observe(t);let n=this.querySelector(".bundles-slide-tabs");n&&this._resize.observe(n);let r=parseFloat(getComputedStyle(this,"::before").height)||0;if(!r)return;let o=this.getBoundingClientRect(),i=t.getBoundingClientRect();this.classList.toggle("boxed",i.top>o.top+1||i.height>r+1)}};customElements.define("bundle-slide-header",qC);P();ht();er();nt();q();var Yte=p`<svg class="bundle-search-icon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,YC=class extends ce{createRenderRoot(){return this}render(){let t=c.bundleSearchQuery,n=c.bundleSearchRegex,r=c.bundleSearchCase,o=n?"Search by regular expression\u2026":"Search all source\u2026";return p`${Yte} <input type="text" class="bundle-search-input" placeholder="${o}" aria-label="${o}" spellcheck="false" autocapitalize="off" autocomplete="off" .value="${Je(t)}" @input="${this._onInput}"> ${t?p`<button type="button" class="bundle-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:b} <span class="bundle-search-mods"><button type="button" class="${Y({"bundle-search-mod":!0,active:r})}" data-tooltip="${r?"Case-sensitive on \u2014 click to ignore case":"Match case"}" aria-label="Match case" aria-pressed="${String(r)}" @click="${this._onToggleCase}">Aa</button> <button type="button" class="${Y({"bundle-search-mod":!0,active:n})}" data-tooltip="${n?"Regular expression on \u2014 click for plain text":"Match by regular expression"}" aria-label="Match by regular expression" aria-pressed="${String(n)}" @click="${this._onToggleRegex}">.*</button></span>`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-search",value:t},bubbles:!0,composed:!0}))}_onToggleRegex=()=>{this.dispatchEvent(new CustomEvent("bundle-search-regex-toggle",{bubbles:!0,composed:!0}))};_onToggleCase=()=>{this.dispatchEvent(new CustomEvent("bundle-search-case-toggle",{bubbles:!0,composed:!0}))}};customElements.define("bundle-search",YC);P();er();nt();q();function vi(e,t,n){let r=t[n];return r||console.warn(`<${e}>: unknown kind ${JSON.stringify(n)}; expected one of ${Object.keys(t).map(o=>JSON.stringify(o)).join(", ")}.`),r}var Jte={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},JC=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("entity-search",Jte,this.kind);return t?p`<input type="search" class="packages-search" placeholder="${`${t.label}\u2026`}" aria-label="${t.label}" .value="${Je(c[t.stateKey])}" @input="${this._onInput}">`:b}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-search",JC);P();er();nt();q();var Xte=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],Zte={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},XC=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("entity-sort",Zte,this.kind);return t?p`<select class="packages-sort" aria-label="${t.aria}" .value="${Je(c[t.stateKey])}" @change="${this._onChange}">${Xte.map(([n,r])=>p`<option value="${n}" ?selected="${c[t.stateKey]===n}">${r}</option>`)}</select>`:b}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-sort",XC);P();er();nt();q();var ZC=class extends ce{static properties={showFile:{type:Boolean,attribute:"show-file"},showConfidence:{type:Boolean,attribute:"show-confidence"},showPriority:{type:Boolean,attribute:"show-priority"}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let t=(n,r)=>p`<option value="${n}" ?selected="${c.sortBy===n}">${r}</option>`;return p`<select class="sort-select" aria-label="Sort findings" .value="${Je(c.sortBy)}" @change="${this._onChange}">${t("severity","Severity \u2193")} ${this.showFile?t("file","File \u2191"):b} ${this.showConfidence?p`${t("confidence-desc","Confidence \u2193")}${t("confidence-asc","Confidence \u2191")}`:b} ${this.showPriority?p`${t("priority-desc","Priority \u2193")}${t("priority-asc","Priority \u2191")}`:b}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:"findings",value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("findings-sort",ZC);P();var C9=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:var(--ui-radius, 99px);background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}
|
|
425
|
+
`;var QC=class extends he{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=N(C9);constructor(){super(),this.min=0,this.max=100,this.step=1,this.low=0,this.high=100}willUpdate(){this.low<this.min&&(this.low=this.min),this.high>this.max&&(this.high=this.max),this.low>this.high&&(this.low=this.high)}render(){let t=this.max-this.min||1,n=(this.low-this.min)/t*100,r=(this.high-this.min)/t*100;return p`<div class="track-wrap" style="${`--low:${n}%;--high:${r}%`}"><div class="track"></div><input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"> <input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"></div>`}firstUpdated(){this._inputs=[...this.renderRoot.querySelectorAll('input[type="range"]')],this._inputs[0].value=this.low,this._inputs[1].value=this.high}updated(t){if(!this._inputs||!(t.has("low")||t.has("high")))return;let n=this._inputs.map(s=>Number(s.value)),r=n[0]>n[1],o=r?1:0,i=r?0:1;this.low!==n[o]&&(this._inputs[o].value=this.low),this.high!==n[i]&&(this._inputs[i].value=this.high)}_onInput=()=>{let t=Number(this._inputs[0].value),n=Number(this._inputs[1].value);this.low=Math.min(t,n),this.high=Math.max(t,n),this._emit("range-input")};_onChange=()=>{this._emit("range-change")};_emit(t){this.dispatchEvent(new CustomEvent(t,{detail:{low:this.low,high:this.high},bubbles:!0,composed:!0}))}};customElements.define("range-slider",QC);P();var eE=class extends he{static properties={low:{type:Number},high:{type:Number},for:{type:String}};createRenderRoot(){return this}constructor(){super(),this.low=0,this.high=10,this.for="conf-range",this._dragging=!1,this._liveLow=0,this._liveHigh=10}connectedCallback(){super.connectedCallback(),document.addEventListener("range-input",this._onRangeInput),document.addEventListener("range-change",this._onRangeChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("range-input",this._onRangeInput),document.removeEventListener("range-change",this._onRangeChange)}willUpdate(t){this._dragging&&(t.has("low")&&this.low!==this._liveLow&&(this.low=this._liveLow),t.has("high")&&this.high!==this._liveHigh&&(this.high=this._liveHigh))}_onRangeInput=t=>{t.target?.id===this.for&&(this._dragging=!0,this._liveLow=t.detail.low,this._liveHigh=t.detail.high,this.low=t.detail.low,this.high=t.detail.high)};_onRangeChange=t=>{t.target?.id===this.for&&(this._dragging=!1)};render(){return p`<span>${this.low}</span><span class="dash">–</span><span>${this.high}</span>`}};customElements.define("conf-range-mirror",eE);gf();P();q();nr();ln();Ee();var E9=`dialog{max-width:560px;width:min(94vw,560px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .9rem;color:var(--muted);font-size:.82rem}hr{border:0;border-top:1px solid var(--border);margin:.9rem 0}.section h4{margin:0 0 .25rem;font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.section p{margin:0 0 .55rem;color:var(--muted);font-size:.78rem}.section button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}&:disabled{opacity:.5}}input[type=file]{display:block;color:var(--text);font:inherit;font-size:.78rem;margin-bottom:.5rem}.error{margin:.5rem 0;padding:.4rem .6rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 5px);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text);font-size:.78rem}.summary{margin:.5rem 0;font-size:.82rem;& strong{color:var(--text)}.meta{margin-left:.4rem;color:var(--muted);font-size:.74rem}}.mode{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem;margin:.55rem 0 .7rem;display:flex;flex-direction:column;gap:.35rem}.mode legend{padding:0 .35rem;font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.mode label{display:flex;align-items:flex-start;gap:.5rem;font-size:.82rem;& em{color:var(--muted);font-style:normal;font-size:.74rem}}.status{margin:.8rem 0 0;padding:.4rem .6rem;border-radius:5px;font-size:.78rem;&.status-ok{border:1px solid var(--accent);background:rgb(from var(--accent) r g b / .08);color:var(--text)}&.status-err{border:1px solid var(--critical, #f87171);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text)}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}}
|
|
426
426
|
`;var tE=class extends H{static styles=[...H.styles,N(E9)];static properties={parsed:{state:!0},parseError:{state:!0},mode:{state:!0},busy:{state:!0},status:{state:!0}};constructor(){super(),this.parsed=null,this.parseError=null,this.mode="prefer-current",this.busy=!1,this.status=null}focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}async _onDownload(){this.busy=!0,this.status=null;try{let{blob:t,filename:n}=await Rx();Si(t,n),this.status={kind:"ok",text:`Downloaded ${n}`}}catch(t){this.status={kind:"err",text:`Export failed: ${t.message}`}}finally{this.busy=!1}}async _onFile(t){let n=t.target.files?.[0];if(this.parsed=null,this.parseError=null,this.status=null,!!n)try{this.parsed=await Tx(n)}catch(r){this.parseError=r.message}}_onMode(t){this.mode=t.target.value}async _onApply(){if(!(!this.parsed||this.busy)){this.busy=!0,this.status=null;try{let t=await Mx(this.parsed,this.mode);F(),this.status=t.repoUrlError?{kind:"err",text:`Applied ${t.triageEntries} triage entries (${this.mode}), but saving repo URLs failed: ${t.repoUrlError.message}`}:{kind:"ok",text:`Applied ${t.triageEntries} triage entries and ${t.repoUrls} repo URLs (${this.mode}).`},this.parsed=null;let n=this.renderRoot.querySelector('input[type="file"]');n&&(n.value="")}catch(t){this.status={kind:"err",text:`Import failed: ${t.message}`}}finally{this.busy=!1}}}render(){let t=this.parsed;return p`<dialog @close="${this._onClose}"><header><h3>Triage backup</h3><p>Bundles every triage entry (markers, triage states, comments, fixes, per-report ignores) and all saved repo URLs into a single gzipped JSON file.</p></header><section class="section"><h4>Export</h4><p>Download the current triage + repo-URL set as a portable backup.</p><button type="button" class="primary" @click="${this._onDownload}" ?disabled="${this.busy}">${this.busy?"Working\u2026":"Download backup"}</button></section><hr><section class="section"><h4>Import</h4><p>Pick a previously-exported backup. Nothing is applied until you click Apply.</p><input type="file" accept=".gz,application/gzip" @change="${this._onFile}" ?disabled="${this.busy}"> ${this.parseError?p`<div class="error">Failed to parse: ${this.parseError}</div>`:b} ${t?p`<div class="summary">Found <strong>${Object.keys(t.triage).length}</strong> triage entries and <strong>${Object.keys(t.repoUrls).length}</strong> repo URLs. ${t.exportedAt?p`<span class="meta">Exported ${t.exportedAt}.</span>`:b}</div><fieldset class="mode"><legend>Merge mode</legend><label><input type="radio" name="te-mode" value="prefer-current" .checked="${this.mode==="prefer-current"}" @change="${this._onMode}"> <span>Merge — keep current on conflict <em>(safest, only fills gaps)</em></span></label> <label><input type="radio" name="te-mode" value="prefer-imported" .checked="${this.mode==="prefer-imported"}" @change="${this._onMode}"> <span>Merge — prefer imported on conflict <em>(overwrites where both have a value)</em></span></label> <label><input type="radio" name="te-mode" value="replace" .checked="${this.mode==="replace"}" @change="${this._onMode}"> <span>Replace all <em>(drops every current persisted entry first — destructive)</em></span></label></fieldset><button type="button" class="primary" @click="${this._onApply}" ?disabled="${this.busy}">${this.busy?"Applying\u2026":"Apply import"}</button>`:b}</section>${this.status?p`<div class="${`status status-${this.status.kind}`}">${this.status.text}</div>`:b}<footer class="actions"><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}};customElements.define("triage-export-dialog",tE);function R9(){return ge("triage-export-dialog")}P();er();var T9=`:host{display:inline-flex;vertical-align:middle;position:relative}.chip{display:inline-flex;align-items:center;gap:.375rem;cursor:default;user-select:none;position:relative;min-height:24px;box-sizing:border-box;padding:.125rem .375rem .125rem .5rem;background:var(--surface);border:var(--header-tag-border, 1px solid var(--border));border-radius:var(--ui-radius, 999px);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:500}.chip svg{color:var(--muted);flex-shrink:0}.chip.empty:hover{border-color:var(--accent)}.chip.empty .label{color:var(--muted);font-style:italic}.chip.readonly{padding-right:.5rem}.chip.copied:after{content:"Copied";position:absolute;inset:0;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border-radius:var(--ui-radius, 999px);color:var(--text);font-weight:400;white-space:nowrap;pointer-events:none}.edit-btn{width:18px;height:18px;display:grid;place-items:center;padding:0;margin-left:.125rem;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted)}.edit-btn:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}@media(display-mode:window-controls-overlay){.edit-btn,.url-input,input{-webkit-app-region:no-drag;app-region:no-drag}}.chip[inert]{visibility:hidden;min-width:19rem}input{position:absolute;inset:0;box-sizing:border-box;padding:0 .55rem;background:var(--surface);border:1px solid var(--accent);border-radius:var(--ui-radius, 999px);color:var(--text);font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:400;outline:none}@media print{.chip{color:#000!important;border:0!important}.chip svg{color:#000!important}.edit-btn,input{display:none!important}}
|
|
427
|
-
`;Fe();var nE=p`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,M9=p`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,rE=class extends fe{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=N(T9);constructor(){super(),this.url="",this.editable=!1,this.editing=!1,this._copied=!1,this._opener=""}render(){if(this.editable&&this.editing){let t=!!this.url,n=t?Ct(this.url):"Set repo";return p`<span class="${t?"chip":"chip empty"}" aria-hidden="true" inert>${nE} <span class="label">${n}</span> <button type="button" class="edit-btn">${M9}</button> </span><input type="text" .value="${Je(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let t=!!this.url,n=t?Ct(this.url):"Set repo",r=t?this._copied?"chip copied":"chip":"chip empty";return p`<span class="${r}" @click="${t?null:this._onEdit}">${nE} ${t?this._slugLabel(n):p`<span class="label">${n}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${M9}</button></span>`}if(this.url){let t=this._copied?"chip readonly copied":"chip readonly";return p`<span class="${t}">${nE} ${this._slugLabel(Ct(this.url))}</span>`}return b}_slugLabel(t){return p`<span class="label" @click="${this._onCopyLabel}">${t}</span>`}updated(t){if(t.has("editing")&&this.editing){let n=this.renderRoot.querySelector("input");n&&(n.focus(),n.select())}}_onEdit=t=>{t&&t.stopPropagation(),this._emit("repo-edit-start")};_onCopyLabel=t=>{t&&t.stopPropagation();let n=Ct(this.url);if(n)try{navigator.clipboard.writeText(n).then(()=>(this._copied=!0,setTimeout(()=>{this._copied=!1},1e3),null)).catch(()=>{})}catch{}};_onFocus=t=>{this._opener=t.target.value};_onInput=t=>{this.url=t.target.value,this._emit("repo-input",{url:this.url})};_onKeydown=t=>{t.key==="Enter"?(t.preventDefault(),this._emit("repo-commit",{url:this.url})):t.key==="Escape"&&(t.preventDefault(),this.url=this._opener,this._emit("repo-cancel",{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit("repo-commit",{url:this.url})};_emit(t,n){this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}};customElements.define("repo-chip",rE);P();ht();wt();nt();q();jt();var nne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,rne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,one=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`,ine=te(ld.replace('width="14" height="14"','width="12" height="12"')),sne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round"><path d="M5 1.2 1.3 3.1v5.7L5 10.7l3.7-1.9V3.1Z M1.3 3.1 5 5l3.7-1.9 M5 5v5.7"/><path d="M11 5.2 7.3 7.1v5.7l3.7 1.9 3.7-1.9V7.1Z M7.3 7.1 11 9l3.7-1.9 M11 9v5.7"/></g></svg>`,ane=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="1.5" width="10" height="3.6" rx=".8"/><rect x="2.2" y="5.3" width="10" height="3.6" rx=".8"/><rect x="1" y="9.1" width="10" height="3.6" rx=".8"/></g></svg>`,lne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M8 1.5 13 3.5v4c0 3-2.1 5.5-5 7-2.9-1.5-5-4-5-7v-4Z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,cne=[{key:"comment",glyph:nne,label:"commented",stateKey:"filterComment",hasKey:"hasComment"},{key:"fix",glyph:rne,label:"fixed",stateKey:"filterFix",hasKey:"hasFix"},{key:"flag",glyph:one,label:"flagged",stateKey:"filterFlagged",hasKey:"hasFlagged"},{key:"duplicates",glyph:ine,label:"rows with duplicates in other reports",stateKey:"filterDuplicates",hasKey:"hasDuplicates"},{key:"cross-context",glyph:sne,label:"rows across multiple repos or packages",stateKey:"filterCrossContext",hasKey:"hasCrossContext"},{key:"app-stacked",glyph:ane,label:"stacked App rows",stateKey:"filterAppStacked",hasKey:"hasAppStacked"},{key:"security",glyph:lne,label:"security-related rows",stateKey:"filterSecurity",hasKey:"hasSecurityContrast"}],A9=new Set(["duplicates","cross-context","app-stacked","security"]),oE=class extends ce{static properties={group:{type:String},hasComment:{attribute:!1},hasFix:{attribute:!1},hasFlagged:{attribute:!1},hasDuplicates:{attribute:!1},hasCrossContext:{attribute:!1},hasAppStacked:{attribute:!1},hasSecurityContrast:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.group="marks",this.hasComment=!1,this.hasFix=!1,this.hasFlagged=!1,this.hasDuplicates=!1,this.hasCrossContext=!1,this.hasAppStacked=!1,this.hasSecurityContrast=!1}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":this.group==="context"?"Finding row filters":"Annotation filter"})}render(){let t=cne.filter(r=>this.group==="context"===A9.has(r.key)).filter(r=>r.key==="security"?this.hasSecurityContrast:r.key==="duplicates"?!c.currentWorkspace&&(this.hasDuplicates||c[r.stateKey]):this[r.hasKey]||c[r.stateKey]);if(t.length===0)return b;let n=r=>{let o=c[r.stateKey],i=A9.has(r.key)?r.label:`${r.label} findings`,s=o==="with"?`Showing only ${i} \u2014 click to exclude them`:o==="without"?`Excluding ${i} \u2014 click to clear`:`Show only ${i}`;return p`<button type="button" class="${Y({"annotation-chip":!0,"sel-with":o==="with","sel-without":o==="without"})}" aria-label="${s}" aria-pressed="${String(o!=="")}" @click="${()=>this._toggle(r.key)}">${r.glyph}</button>`};return p`${t.map(n)}`}_toggle(t){this.dispatchEvent(new CustomEvent("annotation-filter-toggle",{detail:{key:t},bubbles:!0,composed:!0}))}};customElements.define("annotation-filter",oE);P();ht();nt();q();var dne=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],iE=class extends ce{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Filter by severity"})}render(){let t=this.kind==="graph"?new Set(this.selected):c.filterSeverities,n=dne.filter(([r])=>(this.counts[r]??0)||t.has(r));return n.length===0?b:p`${n.map(([r,o])=>{let i=this.counts[r]??0,s=t.has(r);return p`<button type="button" class="${Y({"sev-chip":!0,[r]:!0,active:s})}" aria-pressed="${String(s)}" @click="${()=>this._toggle(r)}"><span class="sd"></span><span class="name">${o}</span><span class="n">${i}</span></button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("severity-toggle",{detail:{severity:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("severity-chips",iE);P();ht();nt();q();var une=[["corrected","Corrected","Show corrected severities (application-specific re-ratings)"],["original","Original",b]],sE=class extends ce{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Severity display mode"})}render(){let t=c.severityMode;return p`<span class="severity-mode-label">Severity</span><span class="severity-mode-chips">${une.map(([n,r,o])=>{let i=t===n;return p`<button type="button" class="${Y({"severity-mode-chip":!0,active:i})}" aria-pressed="${String(i)}" data-tooltip="${o}" @click="${()=>this._select(n)}">${r}</button>`})}</span>`}_select(t){t!==c.severityMode&&this.dispatchEvent(new CustomEvent("severity-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("severity-mode-switch",sE);P();ht();nt();q();var pne=p`<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.8 14.4 5 8 8.2 1.6 5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><path d="M2.6 8 8 10.7 13.4 8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.6 11 8 13.7 13.4 11" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`,I9="Show underlying code findings",fne=p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5.5v2h10v-2M8 7.5v3"/><rect x="1" y="1.5" width="4" height="4" rx=".6"/><rect x="11" y="1.5" width="4" height="4" rx=".6"/><rect x="6" y="10.5" width="4" height="4" rx=".6"/></svg>`,L9="Show only upstream dependency findings",aE=class extends ce{static properties={canDrop:{type:Boolean,attribute:"can-drop"},canDetail:{type:Boolean,attribute:"can-detail"},canUpstream:{type:Boolean,attribute:"can-upstream"},upstreamDisabled:{type:Boolean,attribute:"upstream-disabled"}};createRenderRoot(){return this}constructor(){super(),this.canDrop=!1,this.canDetail=!1,this.canUpstream=!1,this.upstreamDisabled=!1}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Revalidation layer"})}render(){let t=c.revalidateConflicts.size,n=t>0?p`<button type="button" class="revalidation-toggle revalidation-conflicts" aria-haspopup="dialog" aria-label="${`View ${t} revalidation conflict${t===1?"":"s"}`}" @click="${this._openConflicts}">${t} ${t===1?"conflict":"conflicts"}</button>`:b,r=c.showRevalidation!==!1,o=r&&c.revalidationDetailed===!0,i=c.upstreamOnly===!0,s=i&&!this.upstreamDisabled;return p`${n}${t===0&&this.canDrop?p`<mode-switch class="revalidation-toggle" label="App" borderless .checked="${r}" accessible-label="App view — hide the issues the revalidation pass ruled out" .disabled="${i}" @click="${this._toggle}"></mode-switch>`:b}${t===0&&this.canDrop&&this.canDetail?p`<button type="button" class="${Y({"revalidation-detail":!0,on:o})}" aria-pressed="${String(o)}" aria-label="${I9}" data-tooltip="${I9}" ?disabled="${!r||i}" @click="${this._toggleDetail}">${pne}</button>`:b}${this.canUpstream?p`<button type="button" class="${Y({"revalidation-upstream":!0,on:s})}" aria-pressed="${String(s)}" aria-label="${L9}" data-tooltip="${L9}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${fne}</button>`:b}`}_toggle=()=>{this.dispatchEvent(new CustomEvent("revalidation-change",{detail:{on:c.showRevalidation===!1},bubbles:!0,composed:!0}))};_openConflicts=()=>{this.dispatchEvent(new CustomEvent("revalidation-conflicts-open",{bubbles:!0,composed:!0}))};_toggleDetail=()=>{this.dispatchEvent(new CustomEvent("revalidation-detail-change",{detail:{on:c.revalidationDetailed!==!0},bubbles:!0,composed:!0}))};_toggleUpstream=()=>{this.upstreamDisabled||this.dispatchEvent(new CustomEvent("upstream-only-change",{detail:{on:c.upstreamOnly!==!0},bubbles:!0,composed:!0}))}};customElements.define("revalidation-switch",aE);b$();var F9=`:host{display:inline-flex;flex-shrink:0;vertical-align:middle;--switch-track-width: 26px;--switch-track-height: 14px}button,.checkbox-mode{align-items:center;gap:8px;box-sizing:border-box;height:30px;margin:0;padding:0 .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);font:inherit;font-size:.78rem;font-weight:500;line-height:1;white-space:nowrap;cursor:default}button{display:var(--switch-button-display, inline-flex);&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .04)}&[aria-pressed=true]{color:var(--text)}&:disabled{opacity:.4}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.checkbox-mode{display:var(--switch-checkbox-display, none);border:0;color:var(--text);&:has(:disabled){opacity:.4}& input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}}.track{position:relative;flex-shrink:0;width:var(--switch-track-width);height:var(--switch-track-height);background:var(--border);border-radius:var(--ui-radius, 8px);transition:background .15s;&:after{content:"";position:absolute;top:2px;left:2px;width:calc(var(--switch-track-height) - 4px);height:calc(var(--switch-track-height) - 4px);border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}}button[aria-pressed=true] .track{background:color-mix(in oklch,var(--accent) 22%,transparent);&:after{transform:translate(calc(var(--switch-track-width) - var(--switch-track-height)));background:var(--accent)}}:host([borderless]) :is(button,.checkbox-mode){height:100%;border:0;border-radius:0}:host([compact]){--switch-track-width: 22px;--switch-track-height: 12px}:host([compact]) :is(button,.checkbox-mode){height:auto;gap:7px;padding:2px 8px;border-radius:var(--ui-radius, 6px);font-size:.68rem;line-height:1.2}
|
|
428
|
-
`;var lE=class extends hA{static properties={checked:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},label:{type:String},accessibleLabel:{type:String,attribute:"accessible-label"}};static styles=gA(F9);constructor(){super(),this.checked=!1,this.disabled=!1,this.label="",this.accessibleLabel=""}_checkboxClick(t){(this.disabled||t.target.tagName!=="INPUT")&&t.stopPropagation()}render(){return af`<button type="button" part="button" aria-pressed="${String(this.checked)}" aria-label="${this.accessibleLabel||this.label}" ?disabled="${this.disabled}"><span>${this.label}</span><span class="track" part="track" aria-hidden="true"></span></button> <label class="checkbox-mode" @click="${this._checkboxClick}"><input type="checkbox" part="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" aria-label="${this.accessibleLabel||this.label}"> <span>${this.label}</span></label>`}};customElements.get("mode-switch")||customElements.define("mode-switch",lE);nt();q();var mne=p`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,cE=class extends ce{createRenderRoot(){return this}render(){let t=c.currentView==="bundles"&&c.selectedBundle,n=!c.currentFile&&!t;return p`<button type="button" class="danger" ?disabled="${n}">${mne}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",cE);P();ht();nt();q();var gne=p`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,bne=p`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,yne={packages:{title:"Show packages",icon:gne,view:"packages"},repositories:{title:"Show repositories",icon:bne,view:"repositories"}},dE=class extends ce{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind="",this.count=0}render(){if(this.count===0)return b;let t=vi("sidebar-view-button",yne,this.kind);if(!t)return b;let n=c.currentView===t.view;return p`<button type="button" class="${Y({"sidebar-view-btn":!0,active:n})}" aria-label="${t.title}">${t.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",dE);P();ht();nt();q();var vne=["invalid","deleted"],wne={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},uE=class extends ce{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=""}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Triage view"})}render(){let t=vi("slide-triage-tabs",wne,this.kind);if(!t)return b;let n=c[t.stateKey],r=vne.filter(o=>(this.counts[o]??0)>0||n===o);return r.length===0?b:p`${r.map(o=>{let i=n===o,s=this.counts[o]??0;return p`<button type="button" class="${Y({"triage-state-btn":!0,[`triage-state-${o}`]:!0,active:i})}" aria-pressed="${String(i)}" @click="${()=>this._toggle(o)}">${o.charAt(0).toUpperCase()+o.slice(1)} (${s})</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("slide-triage-toggle",{detail:{kind:this.kind,value:t},bubbles:!0,composed:!0}))}};customElements.define("slide-triage-tabs",uE);ht();nt();q();var kne=[["own","Sources"],["modules","Deps"]],pE=class extends ce{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Source filter"})}render(){return p`${kne.map(([t,n])=>{let r=c.filterSources.has(t);return p`<button type="button" class="${Y({"source-chip":!0,active:r})}" aria-pressed="${String(r)}" @click="${()=>this._toggle(t)}">${n}</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("source-toggle",{detail:{source:t},bubbles:!0,composed:!0}))}};customElements.define("source-filter",pE);P();ht();er();nt();q();var xne=p`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,$ne=p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h10v4"/></svg>`,Sne={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},fE=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("toolbar-search",Sne,this.kind);if(!t)return b;let n=c[t.stateKey];return p`${xne} <input type="text" aria-label="${t.placeholder}" placeholder="${t.placeholder}" .value="${Je(n)}" @input="${this._onInput}"> ${this.kind==="findings"&&n?this._negateToggle():b}`}_negateToggle(){let t=c.filterIncludeNegate;return p`<button type="button" class="${Y({"search-negate-btn":!0,active:t})}" data-tooltip="${t?"Negation on \u2014 click to undo":"Negate: show non-matching findings"}" aria-label="Negate search" aria-pressed="${String(t)}" @click="${this._onToggleNegate}">${$ne}</button>`}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))};_onToggleNegate=()=>{this.dispatchEvent(new CustomEvent("search-negate-toggle",{bubbles:!0,composed:!0}))}};customElements.define("toolbar-search",fE);nt();q();po();Fe();uv();var hE=class extends ce{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){let t=[{value:"",label:"All repositories",special:!0,reset:!0},...this.options.map(n=>({value:n??$l,label:n==null?"(no repo)":Ct(n),special:n==null}))];return p`<repository-selector variant="filter" label="Filter by repository" .options="${t}" .value="${c.filterRepo}" @repository-change="${n=>this.dispatchEvent(new CustomEvent("repo-change",{detail:{value:n.detail.value},bubbles:!0,composed:!0}))}"></repository-selector>`}};customElements.define("repo-filter",hE);P();er();ht();nt();Fe();q();var B9={"":{cls:"included",label:"+ Partial",title:"Confirmed, partial and revalidation rows \u2014 click for full confirmations only"},exclude:{cls:"excluded",label:"\u2212 Partial",title:"Full confirmations only \u2014 click to show the partial ones only"},only:{cls:"only",label:"only Partial",title:"Partial confirmations only \u2014 click to show all of them again"}},mE=class extends ce{static properties={options:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.options=[],this.hasPartial=!1}render(){return p`<select class="sort-select" aria-label="Filter by revalidation outcome" .value="${Je(c.filterRevalidate)}" @change="${this._onChange}"><option value="" hidden ?selected="${c.filterRevalidate===""}"></option><option value="">Confidence</option>${this.options.map(t=>p`<option value="${t.value}" ?selected="${c.filterRevalidate===t.value}">${t.label}</option>`)}</select> ${this.hasPartial&&c.filterRevalidate==="confirmed"?this._partialChip():b}`}_partialChip(){let t=B9[c.filterPartial]??B9[""];return p`<button type="button" class="${Y({"partial-cycle":!0,[t.cls]:!0})}" data-tooltip="${t.title}" @click="${this._onPartial}">${t.label}</button>`}_onPartial=()=>{let t=Nb.indexOf(c.filterPartial),n=Nb[(t+1)%Nb.length];this.dispatchEvent(new CustomEvent("partial-change",{detail:{value:n},bubbles:!0,composed:!0}))};_onChange=t=>{let{value:n}=t.target;n||(t.target.selectedIndex=0),this.dispatchEvent(new CustomEvent("revalidate-change",{detail:{value:n},bubbles:!0,composed:!0}))}};customElements.define("revalidate-filter",mE);P();nt();q();var O9=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],gE=class extends ce{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Filter by mark color"})}render(){let t=this.kind==="graph"?new Set(this.selected):c.filterColors;return O9.some(([r])=>(this.counts[r]??0)||t.has(r))?p`${O9.map(([r,o,i])=>{let s=this.counts[r]??0,a=t.has(r);return p`<button type="button" class="${a?"active":""}" aria-label="${`${i} (${s})`}" aria-pressed="${String(a)}" @click="${()=>this._toggle(r)}"><span class="${`td ${o}`}"></span><span class="count">${s}</span></button>`})}`:b}_toggle(t){this.dispatchEvent(new CustomEvent("color-toggle",{detail:{color:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("triage-filter",gE);P();ht();nt();q();var _ne=["inprogress","fixed","invalid","deleted","ignored"],bE={graph:"graph2-triage-selector",packages:"packages-triage-selector"},Cne={inprogress:"In progress"},Ene=e=>Cne[e]??e.charAt(0).toUpperCase()+e.slice(1),yE=class extends ce{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=""}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Triage view"})}render(){let t=this.states??_ne,n=t.reduce((i,s)=>i+(this.counts[s]??0),0),r=this.variant?bE[this.variant]:null;this.variant&&r===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(bE).map(i=>JSON.stringify(i)).join(", ")} or "".`);for(let i of Object.values(bE))this.classList.toggle(i,i===r);let o=n===0&&!c.shownTriage;return this.classList.toggle("is-empty",o),o?b:p`${t.map(i=>{let s=this.counts[i]??0,a=c.shownTriage===i;if(s===0&&!a)return b;let l=Ene(i);return p`<button type="button" class="${Y({"triage-state-btn":!0,[`triage-state-${i}`]:!0,active:a})}" data-triage-show="${i}" aria-pressed="${String(a)}"><span>${l}</span><span class="n">${s}</span></button>`})}`}};customElements.define("triage-selector",yE);ht();nt();q();wt();jt();var Rne={table:p`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:p`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:p`${te(XM)}`},Tne={table:"Table view (compact rows, click a row to expand)",list:"List view (flat, one card per finding)",grouped:"List view, grouped by file",focus:"Focus view (one finding centered + a queue of next findings)",kanban:"Kanban board, columns grouped by triage status",graph:"Graph view (canvas with imports / exports)"},vE=["kanban","focus","table","list","grouped","graph"],wE=class extends ce{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=vE.join(","),this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"View mode"})}render(){let t=this.kind==="files"?c.filesViewMode:c.viewMode,n=this.modes.split(",").map(o=>o.trim()).filter(o=>vE.includes(o)),r=n.length>0?n:vE;return p`${r.map(o=>p`<button type="button" class="${Y({"view-mode-btn":!0,active:t===o})}" aria-label="${Tne[o]}" aria-pressed="${String(t===o)}" @click="${()=>this._select(o,t)}">${Rne[o]}</button>`)}`}_select(t,n){t!==n&&this.dispatchEvent(new CustomEvent("view-mode-change",{detail:{mode:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("view-mode-buttons",wE);P();So();ht();$r();dh();Fe();ta();pi();lh();var z9=6,P9=14,gw=2,N9=24,Eh=4,Mne=1.5,bw=new Map,yw=new Map,D9="treemap";function Ane(e){let t=/^#?([0-9a-f]{6})$/iu.exec(e);if(!t)return"#fff";let n=parseInt(t[1],16),r=n>>16&255,o=n>>8&255,i=n&255;return(.2126*r+.7152*o+.0722*i)/255>.6?"#1a1a1a":"#fff"}function Ine(e,t,n,r){let o=n*n,i=r*r;return Math.max(i*e/o,o/(i*t))}function U9(e,t){let n=[],r=e.filter(f=>f.value>0),{x:o,y:i,w:s,h:a}=t;if(r.length===0||s<=0||a<=0)return n;let l=0;for(let f of r)l+=f.value;let d=s*a/l,u=0;for(;u<r.length&&s>.5&&a>.5;){let f=Math.min(s,a),h=u,m=0,g=0,y=1/0,w=1/0;for(;h<r.length;){let v=r[h].value*d,k=v>g?v:g,S=v<y?v:y,C=Ine(k,S,m+v,f);if(h===u||C<=w)w=C,m+=v,g=k,y=S,h++;else break}let x=m/f;if(s>=a){let v=i;for(let k=u;k<h;k++){let S=k===h-1?i+a-v:r[k].value*d/x;n.push({node:r[k],x:o,y:v,w:x,h:S}),v+=S}o+=x,s-=x}else{let v=o;for(let k=u;k<h;k++){let S=k===h-1?o+s-v:r[k].value*d/x;n.push({node:r[k],x:v,y:i,w:S,h:x}),v+=S}i+=x,a-=x}u=h}return n}function j9(e){for(;e.children&&e.children.size===1;){let t=e.children.values().next().value;if(t.isFile)break;e.name=`${e.name}/${t.name}`,e.children=t.children}if(e.children)for(let t of e.children.values())j9(t)}function H9(e,t,n,r){if(e.path=e.name?t?`${t}/${e.name}`:e.name:t,e.parent=n,e.isFile)return e.count=1,e.value;r.set(e.path,e);let o=0,i=0,s;for(let a of e.children.values())o+=H9(a,e.path,e,r),i+=a.count,s===void 0?s=a.pkg:s!==a.pkg&&(s=null);return e.value=o,e.count=i,e.pkg=s??null,o}function W9(e,t,n,r,o,i,s){if(r<Eh||o<Eh)return;if(e.isFile){s.push({kind:"file",node:e,x:t,y:n,w:r,h:o});return}if(!(i<z9&&r>=N9&&o>=N9&&e.children.size>0)){s.push({kind:"agg",node:e,x:t,y:n,w:r,h:o});return}s.push({kind:"dir",node:e,x:t,y:n,w:r,h:o});let l=o>=P9+Eh+gw?P9:0,d=t+gw,u=n+l,f=r-gw*2,h=o-l-gw;if(f<Eh||h<Eh)return;let m=[...e.children.values()].toSorted((g,y)=>y.value-g.value);for(let g of U9(m,{x:d,y:u,w:f,h}))W9(g.node,g.x,g.y,g.w,g.h,i+1,s)}function kE(e,t){let n=e/(t||1)*100;return n>=10?n.toFixed(0):n.toFixed(n>=1?1:2)}function V9(e,t){if(t<=0||e.isFile||!e.children||e.children.size===0)return 0;let n=1;for(let r of e.children.values()){if(n>=t)break;let o=1+V9(r,t-1);o>n&&(n=o)}return n}function Lne(e,t,n,r,o,i){let s=Math.min(i-o,Math.PI*2-1e-4),a=o+s,l=s>Math.PI?1:0,d=Math.cos(o),u=Math.sin(o),f=Math.cos(a),h=Math.sin(a),m=g=>g.toFixed(2);return`M${m(e+r*d)} ${m(t+r*u)}A${m(r)} ${m(r)} 0 ${l} 1 ${m(e+r*f)} ${m(t+r*h)}L${m(e+n*f)} ${m(t+n*h)}A${m(n)} ${m(n)} 0 ${l} 0 ${m(e+n*d)} ${m(t+n*u)}Z`}function Fne(e,t){let n=Math.max(4,Math.floor(t/6.4));return e.length>n?`${e.slice(0,n-1)}\u2026`:e}var xE=class extends fe{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0},_focus:{state:!0},_mode:{state:!0},_reason:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._focus=[],this._mode=D9,this._reason="",this._reasons=new Map,this._dirByPath=new Map,this._status="loading",this._meta={total:0,prefix:""},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null}willUpdate(t){t.has("details")&&(this._reason=yw.get(this.details?.integrity)??""),(t.has("details")||t.has("_reason"))&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(".bundle-treemap-plot"),this._tooltip=this.querySelector(".bundle-treemap-tooltip"),!(!this._plot||typeof ResizeObserver>"u")&&(this._ro=new ResizeObserver(t=>{let n=t[0]?.contentRect;if(!n)return;let r=Math.floor(n.width),o=Math.floor(n.height);(r!==this._w||o!==this._h)&&(this._w=r,this._h=o)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&(this._ro.disconnect(),this._ro=null)}_onPointerMove(t){let n=t.target.closest(".bundle-treemap-node");if(!n||!this._tooltip){this._hideTooltip();return}if(n!==this._ttCell){this._ttCell=n;let r=n.dataset;xe(p`<div class="bundle-treemap-tt-path">${r.ttPath}</div>${r.ttPkg?p`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${`background:${r.ttColor}`}"></span> <span class="bundle-treemap-tt-pkg">${r.ttPkg}</span></div>`:""}<div class="bundle-treemap-tt-meta">${r.ttMeta}</div>`,this._tooltip)}this._positionTooltip(t.clientX,t.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(t,n){let r=this._tooltip;if(!r||!this._plot)return;r.classList.add("show");let o=this._plot.getBoundingClientRect(),i=t-o.left,s=n-o.top,a=12,l=i+a;l+r.offsetWidth>o.width-4&&(l=i-r.offsetWidth-a),l<4&&(l=4);let d=s+a;d+r.offsetHeight>o.height-4&&(d=s-r.offsetHeight-a),d<4&&(d=4),r.style.left=`${l}px`,r.style.top=`${d}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove("show")}_rebuild(){if(this._root=null,this._focus=[],this._dirByPath=new Map,this._reasons=new Map,this._meta={total:0,prefix:""},this._hideTooltip(),!this.details){this._status="loading";return}let t=Pn(this.details),n=[...t.keys()].filter(h=>t.get(h)!==null);if(n.length===0){this._status="empty";return}this._reasons=yo(this.details,n),this._reasons.has(this._reason)||(this._reason="",yw.delete(this.details.integrity));let r=this._reasons.get(this._reason),o=Zt(this.details),i=yd(this.details),{prefix:s,stripped:a}=Ur(n),l={name:"",children:new Map,value:0,isFile:!1},d=0;for(let h=0;h<n.length;h++){if(r&&!r.has(n[h]))continue;let m=t.get(n[h]);if(m<=0)continue;let g=a[h].split("/"),y=l,w=!1;for(let k=0;k<g.length-1;k++){let S=y.children.get(g[k]);if(S&&S.isFile){w=!0;break}S||(S={name:g[k],children:new Map,value:0,isFile:!1},y.children.set(g[k],S)),y=S}if(w)continue;let x=g.at(-1),v=y.children.get(x);if(!(v&&!v.isFile)){if(!v){let k=Pt(n[h],{packageDir:o?.get(n[h])});v={name:x,isFile:!0,value:0,origPath:n[h],pkg:k,resource:i.get(n[h])==="resource"},y.children.set(x,v)}v.value+=m,d+=m}}if(d===0){this._status="empty";return}for(let h of l.children.values())j9(h);let u=new Map;H9(l,"",null,u),this._root=l,this._dirByPath=u,this._meta={total:d,prefix:s},this._status="ok";let f=this.details?.integrity?bw.get(this.details.integrity):null;if(f){let h=u.get(f);h?this._focus=this._chainTo(h):bw.delete(this.details.integrity)}}get _focusNode(){return this._focus.length>0?this._focus.at(-1):this._root}_chainTo(t){let n=[];for(let r=t;r&&r!==this._root;r=r.parent)n.push(r);return n.reverse(),n}_rememberFocus(){let t=this.details?.integrity;if(!t)return;let n=this._focus.at(-1)?.path;n?bw.set(t,n):bw.delete(t)}_drillInto(t){!t||t.isFile||!t.children||t.children.size===0||(this._focus=this._chainTo(t),this._rememberFocus(),this._hideTooltip())}_focusTo(t){let n=t<0?[]:this._focus.slice(0,t+1);n.length!==this._focus.length&&(this._focus=n,this._rememberFocus(),this._hideTooltip())}_toggleMode(){this._mode=this._mode==="sunburst"?"treemap":"sunburst",D9=this._mode,this._hideTooltip()}_changeReason(t){this._reason=t.detail.value.replace(/^reason:/u,"");let n=this.details?.integrity;n&&(this._reason?yw.set(n,this._reason):yw.delete(n))}_onPlotClick(t){let n=t.target.closest("[data-treemap-into]");if(!n)return;let r=this._dirByPath.get(n.dataset.treemapInto);r&&this._drillInto(r)}_renderCrumbs(){let t=this._focus,n=t.length===0,r=t.slice(0,-1),o=n?null:t.at(-1);return p`<nav class="bundle-treemap-crumbs" aria-label="Treemap location"><span class="bundle-treemap-crumbs-lead"><button type="button" class="${Y({"bundle-treemap-crumb-home":!0,"at-root":n})}" @click="${()=>this._focusTo(-1)}">Source ${this._mode==="sunburst"?"sunburst":"treemap"}</button> ${r.map((i,s)=>p`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><button type="button" class="bundle-treemap-crumb" @click="${()=>this._focusTo(s)}" data-tooltip-truncated data-tooltip="${i.path}">${i.name}</button>`)} </span>${o?p`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><span class="bundle-treemap-crumb-current" aria-current="location" data-tooltip-truncated data-tooltip="${o.path}">${o.name}</span>`:""}</nav>`}_cell(t){let n=kE(t.node.value,this._meta.total),r={left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`},o=`${t.node.count} ${t.node.count===1?"file":"files"}`;if(t.kind==="dir")return p`<div class="bundle-treemap-node bundle-treemap-dir" style="${Oe(r)}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${o} \xB7 ${n}%`}"><span class="bundle-treemap-dirname">${t.node.name}</span></div>`;let i=t.node.pkg??Pt(t.node.path),s=Rn(i),a=Oe({...r,background:s,color:Ane(s)}),l=_r(i);return t.kind==="agg"?p`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${a}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-pkg="${l}" data-tt-color="${s}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${o} \xB7 ${n}%`}"><span class="bundle-treemap-label">${t.node.name}/</span></div>`:p`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${a}" data-bundle-view-source="${t.node.resource?b:t.node.origPath}" data-tt-path="${t.node.path}" data-tt-pkg="${l}" data-tt-color="${s}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${n}% of bundle`}"><span class="bundle-treemap-label">${t.node.name}</span></div>`}_arc(t,n,r){let o=kE(t.value,r),i=t.pkg??Pt(t.path),s=Rn(i),a=_r(i);if(t.isFile)return zt`<path
|
|
427
|
+
`;Fe();var nE=p`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,M9=p`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,rE=class extends he{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=N(T9);constructor(){super(),this.url="",this.editable=!1,this.editing=!1,this._copied=!1,this._opener=""}render(){if(this.editable&&this.editing){let t=!!this.url,n=t?Ct(this.url):"Set repo";return p`<span class="${t?"chip":"chip empty"}" aria-hidden="true" inert>${nE} <span class="label">${n}</span> <button type="button" class="edit-btn">${M9}</button> </span><input type="text" .value="${Je(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let t=!!this.url,n=t?Ct(this.url):"Set repo",r=t?this._copied?"chip copied":"chip":"chip empty";return p`<span class="${r}" @click="${t?null:this._onEdit}">${nE} ${t?this._slugLabel(n):p`<span class="label">${n}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${M9}</button></span>`}if(this.url){let t=this._copied?"chip readonly copied":"chip readonly";return p`<span class="${t}">${nE} ${this._slugLabel(Ct(this.url))}</span>`}return b}_slugLabel(t){return p`<span class="label" @click="${this._onCopyLabel}">${t}</span>`}updated(t){if(t.has("editing")&&this.editing){let n=this.renderRoot.querySelector("input");n&&(n.focus(),n.select())}}_onEdit=t=>{t&&t.stopPropagation(),this._emit("repo-edit-start")};_onCopyLabel=t=>{t&&t.stopPropagation();let n=Ct(this.url);if(n)try{navigator.clipboard.writeText(n).then(()=>(this._copied=!0,setTimeout(()=>{this._copied=!1},1e3),null)).catch(()=>{})}catch{}};_onFocus=t=>{this._opener=t.target.value};_onInput=t=>{this.url=t.target.value,this._emit("repo-input",{url:this.url})};_onKeydown=t=>{t.key==="Enter"?(t.preventDefault(),this._emit("repo-commit",{url:this.url})):t.key==="Escape"&&(t.preventDefault(),this.url=this._opener,this._emit("repo-cancel",{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit("repo-commit",{url:this.url})};_emit(t,n){this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}};customElements.define("repo-chip",rE);P();ht();wt();nt();q();jt();var nne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,rne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,one=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`,ine=te(ld.replace('width="14" height="14"','width="12" height="12"')),sne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round"><path d="M5 1.2 1.3 3.1v5.7L5 10.7l3.7-1.9V3.1Z M1.3 3.1 5 5l3.7-1.9 M5 5v5.7"/><path d="M11 5.2 7.3 7.1v5.7l3.7 1.9 3.7-1.9V7.1Z M7.3 7.1 11 9l3.7-1.9 M11 9v5.7"/></g></svg>`,ane=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="1.5" width="10" height="3.6" rx=".8"/><rect x="2.2" y="5.3" width="10" height="3.6" rx=".8"/><rect x="1" y="9.1" width="10" height="3.6" rx=".8"/></g></svg>`,lne=p`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M8 1.5 13 3.5v4c0 3-2.1 5.5-5 7-2.9-1.5-5-4-5-7v-4Z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,cne=[{key:"comment",glyph:nne,label:"commented",stateKey:"filterComment",hasKey:"hasComment"},{key:"fix",glyph:rne,label:"fixed",stateKey:"filterFix",hasKey:"hasFix"},{key:"flag",glyph:one,label:"flagged",stateKey:"filterFlagged",hasKey:"hasFlagged"},{key:"duplicates",glyph:ine,label:"rows with duplicates in other reports",stateKey:"filterDuplicates",hasKey:"hasDuplicates"},{key:"cross-context",glyph:sne,label:"rows across multiple repos or packages",stateKey:"filterCrossContext",hasKey:"hasCrossContext"},{key:"app-stacked",glyph:ane,label:"stacked App rows",stateKey:"filterAppStacked",hasKey:"hasAppStacked"},{key:"security",glyph:lne,label:"security-related rows",stateKey:"filterSecurity",hasKey:"hasSecurityContrast"}],A9=new Set(["duplicates","cross-context","app-stacked","security"]),oE=class extends ce{static properties={group:{type:String},hasComment:{attribute:!1},hasFix:{attribute:!1},hasFlagged:{attribute:!1},hasDuplicates:{attribute:!1},hasCrossContext:{attribute:!1},hasAppStacked:{attribute:!1},hasSecurityContrast:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.group="marks",this.hasComment=!1,this.hasFix=!1,this.hasFlagged=!1,this.hasDuplicates=!1,this.hasCrossContext=!1,this.hasAppStacked=!1,this.hasSecurityContrast=!1}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":this.group==="context"?"Finding row filters":"Annotation filter"})}render(){let t=cne.filter(r=>this.group==="context"===A9.has(r.key)).filter(r=>r.key==="security"?this.hasSecurityContrast:r.key==="duplicates"?!c.currentWorkspace&&(this.hasDuplicates||c[r.stateKey]):this[r.hasKey]||c[r.stateKey]);if(t.length===0)return b;let n=r=>{let o=c[r.stateKey],i=A9.has(r.key)?r.label:`${r.label} findings`,s=o==="with"?`Showing only ${i} \u2014 click to exclude them`:o==="without"?`Excluding ${i} \u2014 click to clear`:`Show only ${i}`;return p`<button type="button" class="${Y({"annotation-chip":!0,"sel-with":o==="with","sel-without":o==="without"})}" aria-label="${s}" aria-pressed="${String(o!=="")}" @click="${()=>this._toggle(r.key)}">${r.glyph}</button>`};return p`${t.map(n)}`}_toggle(t){this.dispatchEvent(new CustomEvent("annotation-filter-toggle",{detail:{key:t},bubbles:!0,composed:!0}))}};customElements.define("annotation-filter",oE);P();ht();nt();q();var dne=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],iE=class extends ce{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Filter by severity"})}render(){let t=this.kind==="graph"?new Set(this.selected):c.filterSeverities,n=dne.filter(([r])=>(this.counts[r]??0)||t.has(r));return n.length===0?b:p`${n.map(([r,o])=>{let i=this.counts[r]??0,s=t.has(r);return p`<button type="button" class="${Y({"sev-chip":!0,[r]:!0,active:s})}" aria-pressed="${String(s)}" @click="${()=>this._toggle(r)}"><span class="sd"></span><span class="name">${o}</span><span class="n">${i}</span></button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("severity-toggle",{detail:{severity:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("severity-chips",iE);P();ht();nt();q();var une=[["corrected","Corrected","Show corrected severities (application-specific re-ratings)"],["original","Original",b]],sE=class extends ce{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Severity display mode"})}render(){let t=c.severityMode;return p`<span class="severity-mode-label">Severity</span><span class="severity-mode-chips">${une.map(([n,r,o])=>{let i=t===n;return p`<button type="button" class="${Y({"severity-mode-chip":!0,active:i})}" aria-pressed="${String(i)}" data-tooltip="${o}" @click="${()=>this._select(n)}">${r}</button>`})}</span>`}_select(t){t!==c.severityMode&&this.dispatchEvent(new CustomEvent("severity-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("severity-mode-switch",sE);P();ht();nt();q();var pne=p`<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.8 14.4 5 8 8.2 1.6 5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><path d="M2.6 8 8 10.7 13.4 8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.6 11 8 13.7 13.4 11" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`,I9="Show underlying code findings",fne=p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5.5v2h10v-2M8 7.5v3"/><rect x="1" y="1.5" width="4" height="4" rx=".6"/><rect x="11" y="1.5" width="4" height="4" rx=".6"/><rect x="6" y="10.5" width="4" height="4" rx=".6"/></svg>`,L9="Show only upstream dependency findings",aE=class extends ce{static properties={canDrop:{type:Boolean,attribute:"can-drop"},canDetail:{type:Boolean,attribute:"can-detail"},canUpstream:{type:Boolean,attribute:"can-upstream"},upstreamDisabled:{type:Boolean,attribute:"upstream-disabled"}};createRenderRoot(){return this}constructor(){super(),this.canDrop=!1,this.canDetail=!1,this.canUpstream=!1,this.upstreamDisabled=!1}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Revalidation layer"})}render(){let t=c.revalidateConflicts.size,n=t>0?p`<button type="button" class="revalidation-toggle revalidation-conflicts" aria-haspopup="dialog" aria-label="${`View ${t} revalidation conflict${t===1?"":"s"}`}" @click="${this._openConflicts}">${t} ${t===1?"conflict":"conflicts"}</button>`:b,r=c.showRevalidation!==!1,o=r&&c.revalidationDetailed===!0,i=c.upstreamOnly===!0,s=i&&!this.upstreamDisabled;return p`${n}${t===0&&this.canDrop?p`<mode-switch class="revalidation-toggle" label="App" borderless .checked="${r}" accessible-label="App view — hide the issues the revalidation pass ruled out" .disabled="${i}" @click="${this._toggle}"></mode-switch>`:b}${t===0&&this.canDrop&&this.canDetail?p`<button type="button" class="${Y({"revalidation-detail":!0,on:o})}" aria-pressed="${String(o)}" aria-label="${I9}" data-tooltip="${I9}" ?disabled="${!r||i}" @click="${this._toggleDetail}">${pne}</button>`:b}${this.canUpstream?p`<button type="button" class="${Y({"revalidation-upstream":!0,on:s})}" aria-pressed="${String(s)}" aria-label="${L9}" data-tooltip="${L9}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${fne}</button>`:b}`}_toggle=()=>{this.dispatchEvent(new CustomEvent("revalidation-change",{detail:{on:c.showRevalidation===!1},bubbles:!0,composed:!0}))};_openConflicts=()=>{this.dispatchEvent(new CustomEvent("revalidation-conflicts-open",{bubbles:!0,composed:!0}))};_toggleDetail=()=>{this.dispatchEvent(new CustomEvent("revalidation-detail-change",{detail:{on:c.revalidationDetailed!==!0},bubbles:!0,composed:!0}))};_toggleUpstream=()=>{this.upstreamDisabled||this.dispatchEvent(new CustomEvent("upstream-only-change",{detail:{on:c.upstreamOnly!==!0},bubbles:!0,composed:!0}))}};customElements.define("revalidation-switch",aE);b$();var F9=`:host{display:inline-flex;flex-shrink:0;vertical-align:middle;--switch-track-width: 26px;--switch-track-height: 14px}button,.checkbox-mode{align-items:center;gap:8px;box-sizing:border-box;height:30px;margin:0;padding:0 .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);font:inherit;font-size:.78rem;font-weight:500;line-height:1;white-space:nowrap;cursor:default}button{display:var(--switch-button-display, inline-flex);&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .04)}&[aria-pressed=true]{color:var(--text)}&:disabled{opacity:.4}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.checkbox-mode{display:var(--switch-checkbox-display, none);border:0;color:var(--text);&:has(:disabled){opacity:.4}& input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}}.track{position:relative;flex-shrink:0;width:var(--switch-track-width);height:var(--switch-track-height);background:var(--border);border-radius:var(--ui-radius, 8px);transition:background .15s;&:after{content:"";position:absolute;top:2px;left:2px;width:calc(var(--switch-track-height) - 4px);height:calc(var(--switch-track-height) - 4px);border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}}button[aria-pressed=true] .track{background:color-mix(in oklch,var(--accent) 22%,transparent);&:after{transform:translate(calc(var(--switch-track-width) - var(--switch-track-height)));background:var(--accent)}}:host([borderless]) :is(button,.checkbox-mode){height:100%;border:0;border-radius:0}:host([compact]){--switch-track-width: 22px;--switch-track-height: 12px}:host([compact]) :is(button,.checkbox-mode){height:auto;gap:7px;padding:2px 8px;border-radius:var(--ui-radius, 6px);font-size:.68rem;line-height:1.2}
|
|
428
|
+
`;var lE=class extends hA{static properties={checked:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},label:{type:String},accessibleLabel:{type:String,attribute:"accessible-label"}};static styles=gA(F9);constructor(){super(),this.checked=!1,this.disabled=!1,this.label="",this.accessibleLabel=""}_checkboxClick(t){(this.disabled||t.target.tagName!=="INPUT")&&t.stopPropagation()}render(){return af`<button type="button" part="button" aria-pressed="${String(this.checked)}" aria-label="${this.accessibleLabel||this.label}" ?disabled="${this.disabled}"><span>${this.label}</span><span class="track" part="track" aria-hidden="true"></span></button> <label class="checkbox-mode" @click="${this._checkboxClick}"><input type="checkbox" part="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" aria-label="${this.accessibleLabel||this.label}"> <span>${this.label}</span></label>`}};customElements.get("mode-switch")||customElements.define("mode-switch",lE);nt();q();var mne=p`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,cE=class extends ce{createRenderRoot(){return this}render(){let t=c.currentView==="bundles"&&c.selectedBundle,n=!c.currentFile&&!t;return p`<button type="button" class="danger" ?disabled="${n}">${mne}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",cE);P();ht();nt();q();var gne=p`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,bne=p`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,yne={packages:{title:"Show packages",icon:gne,view:"packages"},repositories:{title:"Show repositories",icon:bne,view:"repositories"}},dE=class extends ce{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind="",this.count=0}render(){if(this.count===0)return b;let t=vi("sidebar-view-button",yne,this.kind);if(!t)return b;let n=c.currentView===t.view;return p`<button type="button" class="${Y({"sidebar-view-btn":!0,active:n})}" aria-label="${t.title}">${t.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",dE);P();ht();nt();q();var vne=["invalid","deleted"],wne={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},uE=class extends ce{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=""}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Triage view"})}render(){let t=vi("slide-triage-tabs",wne,this.kind);if(!t)return b;let n=c[t.stateKey],r=vne.filter(o=>(this.counts[o]??0)>0||n===o);return r.length===0?b:p`${r.map(o=>{let i=n===o,s=this.counts[o]??0;return p`<button type="button" class="${Y({"triage-state-btn":!0,[`triage-state-${o}`]:!0,active:i})}" aria-pressed="${String(i)}" @click="${()=>this._toggle(o)}">${o.charAt(0).toUpperCase()+o.slice(1)} (${s})</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("slide-triage-toggle",{detail:{kind:this.kind,value:t},bubbles:!0,composed:!0}))}};customElements.define("slide-triage-tabs",uE);ht();nt();q();var kne=[["own","Sources"],["modules","Deps"]],pE=class extends ce{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Source filter"})}render(){return p`${kne.map(([t,n])=>{let r=c.filterSources.has(t);return p`<button type="button" class="${Y({"source-chip":!0,active:r})}" aria-pressed="${String(r)}" @click="${()=>this._toggle(t)}">${n}</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("source-toggle",{detail:{source:t},bubbles:!0,composed:!0}))}};customElements.define("source-filter",pE);P();ht();er();nt();q();var xne=p`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,$ne=p`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h10v4"/></svg>`,Sne={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},fE=class extends ce{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=vi("toolbar-search",Sne,this.kind);if(!t)return b;let n=c[t.stateKey];return p`${xne} <input type="text" aria-label="${t.placeholder}" placeholder="${t.placeholder}" .value="${Je(n)}" @input="${this._onInput}"> ${this.kind==="findings"&&n?this._negateToggle():b}`}_negateToggle(){let t=c.filterIncludeNegate;return p`<button type="button" class="${Y({"search-negate-btn":!0,active:t})}" data-tooltip="${t?"Negation on \u2014 click to undo":"Negate: show non-matching findings"}" aria-label="Negate search" aria-pressed="${String(t)}" @click="${this._onToggleNegate}">${$ne}</button>`}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))};_onToggleNegate=()=>{this.dispatchEvent(new CustomEvent("search-negate-toggle",{bubbles:!0,composed:!0}))}};customElements.define("toolbar-search",fE);nt();q();po();Fe();uv();var hE=class extends ce{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){let t=[{value:"",label:"All repositories",special:!0,reset:!0},...this.options.map(n=>({value:n??$l,label:n==null?"(no repo)":Ct(n),special:n==null}))];return p`<repository-selector variant="filter" label="Filter by repository" .options="${t}" .value="${c.filterRepo}" @repository-change="${n=>this.dispatchEvent(new CustomEvent("repo-change",{detail:{value:n.detail.value},bubbles:!0,composed:!0}))}"></repository-selector>`}};customElements.define("repo-filter",hE);P();er();ht();nt();Fe();q();var B9={"":{cls:"included",label:"+ Partial",title:"Confirmed, partial and revalidation rows \u2014 click for full confirmations only"},exclude:{cls:"excluded",label:"\u2212 Partial",title:"Full confirmations only \u2014 click to show the partial ones only"},only:{cls:"only",label:"only Partial",title:"Partial confirmations only \u2014 click to show all of them again"}},mE=class extends ce{static properties={options:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.options=[],this.hasPartial=!1}render(){return p`<select class="sort-select" aria-label="Filter by revalidation outcome" .value="${Je(c.filterRevalidate)}" @change="${this._onChange}"><option value="" hidden ?selected="${c.filterRevalidate===""}"></option><option value="">Confidence</option>${this.options.map(t=>p`<option value="${t.value}" ?selected="${c.filterRevalidate===t.value}">${t.label}</option>`)}</select> ${this.hasPartial&&c.filterRevalidate==="confirmed"?this._partialChip():b}`}_partialChip(){let t=B9[c.filterPartial]??B9[""];return p`<button type="button" class="${Y({"partial-cycle":!0,[t.cls]:!0})}" data-tooltip="${t.title}" @click="${this._onPartial}">${t.label}</button>`}_onPartial=()=>{let t=Nb.indexOf(c.filterPartial),n=Nb[(t+1)%Nb.length];this.dispatchEvent(new CustomEvent("partial-change",{detail:{value:n},bubbles:!0,composed:!0}))};_onChange=t=>{let{value:n}=t.target;n||(t.target.selectedIndex=0),this.dispatchEvent(new CustomEvent("revalidate-change",{detail:{value:n},bubbles:!0,composed:!0}))}};customElements.define("revalidate-filter",mE);P();nt();q();var O9=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],gE=class extends ce{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Filter by mark color"})}render(){let t=this.kind==="graph"?new Set(this.selected):c.filterColors;return O9.some(([r])=>(this.counts[r]??0)||t.has(r))?p`${O9.map(([r,o,i])=>{let s=this.counts[r]??0,a=t.has(r);return p`<button type="button" class="${a?"active":""}" aria-label="${`${i} (${s})`}" aria-pressed="${String(a)}" @click="${()=>this._toggle(r)}"><span class="${`td ${o}`}"></span><span class="count">${s}</span></button>`})}`:b}_toggle(t){this.dispatchEvent(new CustomEvent("color-toggle",{detail:{color:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("triage-filter",gE);P();ht();nt();q();var _ne=["inprogress","fixed","invalid","deleted","ignored"],bE={graph:"graph2-triage-selector",packages:"packages-triage-selector"},Cne={inprogress:"In progress"},Ene=e=>Cne[e]??e.charAt(0).toUpperCase()+e.slice(1),yE=class extends ce{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=""}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"Triage view"})}render(){let t=this.states??_ne,n=t.reduce((i,s)=>i+(this.counts[s]??0),0),r=this.variant?bE[this.variant]:null;this.variant&&r===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(bE).map(i=>JSON.stringify(i)).join(", ")} or "".`);for(let i of Object.values(bE))this.classList.toggle(i,i===r);let o=n===0&&!c.shownTriage;return this.classList.toggle("is-empty",o),o?b:p`${t.map(i=>{let s=this.counts[i]??0,a=c.shownTriage===i;if(s===0&&!a)return b;let l=Ene(i);return p`<button type="button" class="${Y({"triage-state-btn":!0,[`triage-state-${i}`]:!0,active:a})}" data-triage-show="${i}" aria-pressed="${String(a)}"><span>${l}</span><span class="n">${s}</span></button>`})}`}};customElements.define("triage-selector",yE);ht();nt();q();wt();jt();var Rne={table:p`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:p`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:p`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:p`${te(XM)}`},Tne={table:"Table view (compact rows, click a row to expand)",list:"List view (flat, one card per finding)",grouped:"List view, grouped by file",focus:"Focus view (one finding centered + a queue of next findings)",kanban:"Kanban board, columns grouped by triage status",graph:"Graph view (canvas with imports / exports)"},vE=["kanban","focus","table","list","grouped","graph"],wE=class extends ce{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=vE.join(","),this.kind="findings"}connectedCallback(){super.connectedCallback(),Nt(this,{role:"group","aria-label":"View mode"})}render(){let t=this.kind==="files"?c.filesViewMode:c.viewMode,n=this.modes.split(",").map(o=>o.trim()).filter(o=>vE.includes(o)),r=n.length>0?n:vE;return p`${r.map(o=>p`<button type="button" class="${Y({"view-mode-btn":!0,active:t===o})}" aria-label="${Tne[o]}" aria-pressed="${String(t===o)}" @click="${()=>this._select(o,t)}">${Rne[o]}</button>`)}`}_select(t,n){t!==n&&this.dispatchEvent(new CustomEvent("view-mode-change",{detail:{mode:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("view-mode-buttons",wE);P();So();ht();$r();dh();Fe();ta();pi();lh();var z9=6,P9=14,gw=2,N9=24,Eh=4,Mne=1.5,bw=new Map,yw=new Map,D9="treemap";function Ane(e){let t=/^#?([0-9a-f]{6})$/iu.exec(e);if(!t)return"#fff";let n=parseInt(t[1],16),r=n>>16&255,o=n>>8&255,i=n&255;return(.2126*r+.7152*o+.0722*i)/255>.6?"#1a1a1a":"#fff"}function Ine(e,t,n,r){let o=n*n,i=r*r;return Math.max(i*e/o,o/(i*t))}function U9(e,t){let n=[],r=e.filter(f=>f.value>0),{x:o,y:i,w:s,h:a}=t;if(r.length===0||s<=0||a<=0)return n;let l=0;for(let f of r)l+=f.value;let d=s*a/l,u=0;for(;u<r.length&&s>.5&&a>.5;){let f=Math.min(s,a),h=u,m=0,g=0,y=1/0,w=1/0;for(;h<r.length;){let v=r[h].value*d,k=v>g?v:g,S=v<y?v:y,C=Ine(k,S,m+v,f);if(h===u||C<=w)w=C,m+=v,g=k,y=S,h++;else break}let x=m/f;if(s>=a){let v=i;for(let k=u;k<h;k++){let S=k===h-1?i+a-v:r[k].value*d/x;n.push({node:r[k],x:o,y:v,w:x,h:S}),v+=S}o+=x,s-=x}else{let v=o;for(let k=u;k<h;k++){let S=k===h-1?o+s-v:r[k].value*d/x;n.push({node:r[k],x:v,y:i,w:S,h:x}),v+=S}i+=x,a-=x}u=h}return n}function j9(e){for(;e.children&&e.children.size===1;){let t=e.children.values().next().value;if(t.isFile)break;e.name=`${e.name}/${t.name}`,e.children=t.children}if(e.children)for(let t of e.children.values())j9(t)}function H9(e,t,n,r){if(e.path=e.name?t?`${t}/${e.name}`:e.name:t,e.parent=n,e.isFile)return e.count=1,e.value;r.set(e.path,e);let o=0,i=0,s;for(let a of e.children.values())o+=H9(a,e.path,e,r),i+=a.count,s===void 0?s=a.pkg:s!==a.pkg&&(s=null);return e.value=o,e.count=i,e.pkg=s??null,o}function W9(e,t,n,r,o,i,s){if(r<Eh||o<Eh)return;if(e.isFile){s.push({kind:"file",node:e,x:t,y:n,w:r,h:o});return}if(!(i<z9&&r>=N9&&o>=N9&&e.children.size>0)){s.push({kind:"agg",node:e,x:t,y:n,w:r,h:o});return}s.push({kind:"dir",node:e,x:t,y:n,w:r,h:o});let l=o>=P9+Eh+gw?P9:0,d=t+gw,u=n+l,f=r-gw*2,h=o-l-gw;if(f<Eh||h<Eh)return;let m=[...e.children.values()].toSorted((g,y)=>y.value-g.value);for(let g of U9(m,{x:d,y:u,w:f,h}))W9(g.node,g.x,g.y,g.w,g.h,i+1,s)}function kE(e,t){let n=e/(t||1)*100;return n>=10?n.toFixed(0):n.toFixed(n>=1?1:2)}function V9(e,t){if(t<=0||e.isFile||!e.children||e.children.size===0)return 0;let n=1;for(let r of e.children.values()){if(n>=t)break;let o=1+V9(r,t-1);o>n&&(n=o)}return n}function Lne(e,t,n,r,o,i){let s=Math.min(i-o,Math.PI*2-1e-4),a=o+s,l=s>Math.PI?1:0,d=Math.cos(o),u=Math.sin(o),f=Math.cos(a),h=Math.sin(a),m=g=>g.toFixed(2);return`M${m(e+r*d)} ${m(t+r*u)}A${m(r)} ${m(r)} 0 ${l} 1 ${m(e+r*f)} ${m(t+r*h)}L${m(e+n*f)} ${m(t+n*h)}A${m(n)} ${m(n)} 0 ${l} 0 ${m(e+n*d)} ${m(t+n*u)}Z`}function Fne(e,t){let n=Math.max(4,Math.floor(t/6.4));return e.length>n?`${e.slice(0,n-1)}\u2026`:e}var xE=class extends he{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0},_focus:{state:!0},_mode:{state:!0},_reason:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._focus=[],this._mode=D9,this._reason="",this._reasons=new Map,this._dirByPath=new Map,this._status="loading",this._meta={total:0,prefix:""},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null}willUpdate(t){t.has("details")&&(this._reason=yw.get(this.details?.integrity)??""),(t.has("details")||t.has("_reason"))&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(".bundle-treemap-plot"),this._tooltip=this.querySelector(".bundle-treemap-tooltip"),!(!this._plot||typeof ResizeObserver>"u")&&(this._ro=new ResizeObserver(t=>{let n=t[0]?.contentRect;if(!n)return;let r=Math.floor(n.width),o=Math.floor(n.height);(r!==this._w||o!==this._h)&&(this._w=r,this._h=o)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&(this._ro.disconnect(),this._ro=null)}_onPointerMove(t){let n=t.target.closest(".bundle-treemap-node");if(!n||!this._tooltip){this._hideTooltip();return}if(n!==this._ttCell){this._ttCell=n;let r=n.dataset;xe(p`<div class="bundle-treemap-tt-path">${r.ttPath}</div>${r.ttPkg?p`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${`background:${r.ttColor}`}"></span> <span class="bundle-treemap-tt-pkg">${r.ttPkg}</span></div>`:""}<div class="bundle-treemap-tt-meta">${r.ttMeta}</div>`,this._tooltip)}this._positionTooltip(t.clientX,t.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(t,n){let r=this._tooltip;if(!r||!this._plot)return;r.classList.add("show");let o=this._plot.getBoundingClientRect(),i=t-o.left,s=n-o.top,a=12,l=i+a;l+r.offsetWidth>o.width-4&&(l=i-r.offsetWidth-a),l<4&&(l=4);let d=s+a;d+r.offsetHeight>o.height-4&&(d=s-r.offsetHeight-a),d<4&&(d=4),r.style.left=`${l}px`,r.style.top=`${d}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove("show")}_rebuild(){if(this._root=null,this._focus=[],this._dirByPath=new Map,this._reasons=new Map,this._meta={total:0,prefix:""},this._hideTooltip(),!this.details){this._status="loading";return}let t=Pn(this.details),n=[...t.keys()].filter(h=>t.get(h)!==null);if(n.length===0){this._status="empty";return}this._reasons=yo(this.details,n),this._reasons.has(this._reason)||(this._reason="",yw.delete(this.details.integrity));let r=this._reasons.get(this._reason),o=Zt(this.details),i=yd(this.details),{prefix:s,stripped:a}=Ur(n),l={name:"",children:new Map,value:0,isFile:!1},d=0;for(let h=0;h<n.length;h++){if(r&&!r.has(n[h]))continue;let m=t.get(n[h]);if(m<=0)continue;let g=a[h].split("/"),y=l,w=!1;for(let k=0;k<g.length-1;k++){let S=y.children.get(g[k]);if(S&&S.isFile){w=!0;break}S||(S={name:g[k],children:new Map,value:0,isFile:!1},y.children.set(g[k],S)),y=S}if(w)continue;let x=g.at(-1),v=y.children.get(x);if(!(v&&!v.isFile)){if(!v){let k=Pt(n[h],{packageDir:o?.get(n[h])});v={name:x,isFile:!0,value:0,origPath:n[h],pkg:k,resource:i.get(n[h])==="resource"},y.children.set(x,v)}v.value+=m,d+=m}}if(d===0){this._status="empty";return}for(let h of l.children.values())j9(h);let u=new Map;H9(l,"",null,u),this._root=l,this._dirByPath=u,this._meta={total:d,prefix:s},this._status="ok";let f=this.details?.integrity?bw.get(this.details.integrity):null;if(f){let h=u.get(f);h?this._focus=this._chainTo(h):bw.delete(this.details.integrity)}}get _focusNode(){return this._focus.length>0?this._focus.at(-1):this._root}_chainTo(t){let n=[];for(let r=t;r&&r!==this._root;r=r.parent)n.push(r);return n.reverse(),n}_rememberFocus(){let t=this.details?.integrity;if(!t)return;let n=this._focus.at(-1)?.path;n?bw.set(t,n):bw.delete(t)}_drillInto(t){!t||t.isFile||!t.children||t.children.size===0||(this._focus=this._chainTo(t),this._rememberFocus(),this._hideTooltip())}_focusTo(t){let n=t<0?[]:this._focus.slice(0,t+1);n.length!==this._focus.length&&(this._focus=n,this._rememberFocus(),this._hideTooltip())}_toggleMode(){this._mode=this._mode==="sunburst"?"treemap":"sunburst",D9=this._mode,this._hideTooltip()}_changeReason(t){this._reason=t.detail.value.replace(/^reason:/u,"");let n=this.details?.integrity;n&&(this._reason?yw.set(n,this._reason):yw.delete(n))}_onPlotClick(t){let n=t.target.closest("[data-treemap-into]");if(!n)return;let r=this._dirByPath.get(n.dataset.treemapInto);r&&this._drillInto(r)}_renderCrumbs(){let t=this._focus,n=t.length===0,r=t.slice(0,-1),o=n?null:t.at(-1);return p`<nav class="bundle-treemap-crumbs" aria-label="Treemap location"><span class="bundle-treemap-crumbs-lead"><button type="button" class="${Y({"bundle-treemap-crumb-home":!0,"at-root":n})}" @click="${()=>this._focusTo(-1)}">Source ${this._mode==="sunburst"?"sunburst":"treemap"}</button> ${r.map((i,s)=>p`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><button type="button" class="bundle-treemap-crumb" @click="${()=>this._focusTo(s)}" data-tooltip-truncated data-tooltip="${i.path}">${i.name}</button>`)} </span>${o?p`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><span class="bundle-treemap-crumb-current" aria-current="location" data-tooltip-truncated data-tooltip="${o.path}">${o.name}</span>`:""}</nav>`}_cell(t){let n=kE(t.node.value,this._meta.total),r={left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`},o=`${t.node.count} ${t.node.count===1?"file":"files"}`;if(t.kind==="dir")return p`<div class="bundle-treemap-node bundle-treemap-dir" style="${Oe(r)}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${o} \xB7 ${n}%`}"><span class="bundle-treemap-dirname">${t.node.name}</span></div>`;let i=t.node.pkg??Pt(t.node.path),s=Rn(i),a=Oe({...r,background:s,color:Ane(s)}),l=_r(i);return t.kind==="agg"?p`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${a}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-pkg="${l}" data-tt-color="${s}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${o} \xB7 ${n}%`}"><span class="bundle-treemap-label">${t.node.name}/</span></div>`:p`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${a}" data-bundle-view-source="${t.node.resource?b:t.node.origPath}" data-tt-path="${t.node.path}" data-tt-pkg="${l}" data-tt-color="${s}" data-tt-meta="${`${qe(t.node.value)} \xB7 ${n}% of bundle`}"><span class="bundle-treemap-label">${t.node.name}</span></div>`}_arc(t,n,r){let o=kE(t.value,r),i=t.pkg??Pt(t.path),s=Rn(i),a=_r(i);if(t.isFile)return zt`<path
|
|
429
429
|
class="bundle-treemap-node bundle-treemap-arc"
|
|
430
430
|
d=${n}
|
|
431
431
|
fill=${s}
|
|
@@ -471,7 +471,7 @@ ${B}`)}`;try{window.location.href=Q,e9(W)}catch{}return}if(ke(e,".mark-fix")){le
|
|
|
471
471
|
`),n=ire[sre(t)];return n===void 0?null:t.map(r=>n.find(([o])=>o.test(r))?.[1]??null)}var are={bold:"head",cyan:"hunk",green:"add",red:"del",yellow:"chg",gray:"meta"};function fz(e){let t=pz(e);return t===null?null:e.split(`
|
|
472
472
|
`).map((n,r)=>({text:n,kind:t[r]===null?"":are[t[r]]??""}))}function hz(e,t){if(typeof e!="string"||typeof t!="string")return null;let n=ME(e,t,{format:"unified",context:3});return fz(n)??n.split(`
|
|
473
473
|
`).map(r=>({text:r,kind:""}))}$r();Fe();Cl();Wd();var mz=`dialog{width:min(96vw,90rem);max-width:none;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{padding:.8rem 1rem;border-bottom:1px solid var(--border);flex-shrink:0}.file-heading{display:flex;align-items:center;gap:1rem}.file-heading h3{margin:0;flex:1;min-width:0;overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem}.file-heading button{display:grid;place-items:center;flex-shrink:0;width:1.8rem;height:1.8rem;padding:0;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.file-heading button svg{display:block}.file-heading button:hover{color:var(--text);background:var(--surface-active)}.file-details{display:flex;flex-wrap:wrap;align-items:baseline;gap:.35rem 1.2rem;margin-top:.35rem}.file-context,.file-legend{margin:0;color:var(--muted);font-size:.72rem;overflow-wrap:anywhere}.file-context{flex:1;min-width:min(100%,16rem)}.file-legend{display:flex;flex-wrap:wrap;gap:.8rem;margin-left:auto;font-variant-numeric:tabular-nums}.file-legend span{white-space:nowrap}.removed{color:var(--critical)}.added{color:var(--green)}.file-code{min-height:0;overflow:auto;overscroll-behavior:contain;margin:0;padding:.8rem 0;background:var(--bg);tab-size:2;font:.76rem/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}.file-code code{display:block;min-width:100%;width:max-content;padding-inline:1rem;font:inherit}.diff-line{display:block;min-height:1.55em}.diff-line.add{color:var(--green);background:rgb(from var(--green) r g b / .08)}.diff-line.del{color:var(--critical);background:rgb(from var(--critical) r g b / .08)}.diff-line.hunk{color:var(--accent);background:rgb(from var(--accent) r g b / .06)}.diff-line.meta{color:var(--muted)}.file-message{padding:2rem 1rem;color:var(--muted);font-size:.8rem}button:focus-visible,pre:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
474
|
-
`;var AE=class extends H{static properties={path:{},format:{},before:{attribute:!1},after:{attribute:!1},baseName:{},otherName:{},kind:{},_lines:{state:!0},_error:{state:!0},_highlighted:{state:!0}};static styles=[...H.styles,N(hi),N(mz)];constructor(){super(),this._lines=null,this._error=null,this._highlighted=null}beforeOpen(){if(this.kind==="changed")try{this._lines=hz(this.before,this.after)}catch{this._error="Could not calculate this diff."}else{let t=this.kind==="removed"?this.before:this.after;typeof t=="string"&&this._highlight(t)}}async _highlight(t){let n=await Hr(t,xr(this.path,this.format));this.isConnected&&(this._highlighted=n)}render(){let t=this.kind==="changed",n=this.kind==="removed"?this.before:this.after,r=t?this._lines===null:typeof n!="string",o=i=>qe(Ef(i)??0);return p`<dialog aria-labelledby="file-title" @close="${this._onClose}"><header><div class="file-heading"><h3 id="file-title" class="mono">${this.path}</h3><button type="button" aria-label="Close file" @click="${this._onClose}"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></div><div class="file-details"><p class="file-context">${t?`${this.baseName} \u2192 ${this.otherName}`:this.kind==="removed"?this.baseName:this.otherName}</p>${t?p`<p class="file-legend"><span class="removed">− Before</span><span class="added">+ After</span><span>${o(this.before)} → ${o(this.after)}</span></p>`:b}</div></header>${this._error?p`<p class="file-message" role="alert">${this._error}</p>`:r?p`<p class="file-message">${t?"Binary file changed. A text diff is not available.":`Binary file \xB7 ${o(n)}`}</p>`:t?p`<pre class="file-code" tabindex="0" aria-label="File diff"><code>${this._lines.map(i=>p`<span class="${`diff-line ${i.kind}`}">${i.text}</span>`)}</code></pre>`:p`<pre class="file-code" tabindex="0" aria-label="File contents"><code>${this._highlighted?te(this._highlighted):n||"Empty file"}</code></pre>`}</dialog>`}};customElements.define("bundle-file-dialog",AE);function gz(e){return Ps("bundle-file-dialog",e,t=>{t.before=null,t.after=null})}Fl();pv();lh();var bz=400,lu=null;function LE(e){return e===0?"\xB10":`${e>0?"+":"\u2212"}${Math.abs(e).toLocaleString()}`}function yz(e){return`${LE(e)} B`}function _w(e){return e>0?"up":e<0?"down":""}function cre(e,t){if(!t)return"";let n=e/t*100;return`${n>0?"+":n<0?"\u2212":"\xB1"}${Math.abs(n).toFixed(1)}%`}function IE(e){return e.join(", ")}var FE=class extends fe{static properties={details:{attribute:!1},integrity:{attribute:!1},_targetIntegrity:{state:!0},_otherDetails:{state:!0},_status:{state:!0},_scope:{state:!0},_fileSort:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this.integrity=null,this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._fileSort={removed:"name",added:"name",changed:"name"},this._diff=null,this._diffKey=null}willUpdate(t){if((t.has("_otherDetails")||t.has("details"))&&this._status==="ready"&&!$E(this.details,this._otherDetails).some(n=>n.id===this._scope)&&(this._scope=""),!!t.has("integrity")){if(lu&&this.integrity===lu.base){let n=lu.target;this._scope=lu.scope,lu=null,this._targetIntegrity=n,this._otherDetails=null,this._status="loading",this._diff=null,this._diffKey=null,this._loadOther(n);return}this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._diff=null,this._diffKey=null}}_swap(){let t=this._targetIntegrity;!t||t===this.integrity||Hd(c.bundles??[],this.integrity).some(n=>n.integrity===t)&&(lu={base:t,target:this.integrity,scope:this._scope},this.dispatchEvent(new CustomEvent("bundle-swap",{bubbles:!0,composed:!0,detail:{integrity:t}})))}_nameFor(t){return(c.bundles??[]).find(r=>r.integrity===t)?.name??`${t.slice(0,15)}\u2026`}_pick(t){let n=t||null;if(this._targetIntegrity=n,this._otherDetails=null,this._diff=null,this._diffKey=null,!n){this._status="idle",this._scope="";return}this._status="loading",this._loadOther(n)}async _loadOther(t){let n=Hd(c.bundles??[],this.integrity).find(o=>o.integrity===t);if(!n){this._status="idle",this._targetIntegrity=null;return}let r;try{r=await Ni(t,n)}catch(o){if(o.name==="AbortError")return;throw o}this._targetIntegrity===t&&(this._otherDetails=r,this._status="ready")}get _baseReady(){return!!(this.details&&this.details.integrity===this.integrity&&(this.details.json||this.details.bundle))}_openFile(t,n){let r=n==="removed"?this.details:this._otherDetails;gz({path:t,kind:n,baseName:this._nameFor(this.integrity),otherName:this._nameFor(this._targetIntegrity),format:r?.kind==="stasis"?r.bundle.formats?.get(t):void 0,before:On(this.details).get(t),after:On(this._otherDetails).get(t)}).catch(o=>Ot(o.message,{kind:"error"}))}_fileRow(t,n,r,o){let i=p`<span class="bundle-compare-row-path mono" data-tooltip-truncated data-tooltip="${t}">${n}</span>${o}`;return r==="removed"&&yd(this.details).get(t)!=="resource"?p`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" data-bundle-view-source="${t}">${i}</button></li>`:p`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" @click="${()=>this._openFile(t,r)}">${i}</button></li>`}_group(t,n,r,o,i,s=b){if(n.length===0)return b;let a=n.slice(0,bz),l=n.length-a.length;return p`<section class="${`bundle-compare-group bundle-compare-${r}`}"><header class="bundle-compare-group-head"><span class="bundle-compare-dot" aria-hidden="true"></span> <span class="bundle-compare-group-title" data-tooltip-truncated data-tooltip="${t}">${t}</span> <span class="bundle-compare-group-count">${n.length}</span> ${s}</header><ul class="bundle-compare-rows">${ve(a,o,i)}</ul>${l>0?p`<div class="bundle-compare-more">and ${l.toLocaleString()} more…</div>`:b}</section>`}_sizeCells(t){return t.delta===void 0?p`<span class="bundle-compare-row-size">${qe(t.bytes)}</span>`:p`<span class="bundle-compare-row-size">${qe(t.baseBytes)} → ${qe(t.otherBytes)}</span> <span class="${`bundle-compare-row-delta ${_w(t.delta)}`}">${yz(t.delta)}</span>`}_fileGroup(t,n,r,o){let i=this._fileSort[r],s=n.toSorted((l,d)=>(i==="size"?(d.bytes??d.otherBytes)-(l.bytes??l.otherBytes):0)||l.path.localeCompare(d.path)),a=p`<span class="bundles-overview-sort" role="group" aria-label="${`${r} file order`}">${[["name","Name"],["size","Size"]].map(([l,d])=>p`<button type="button" aria-pressed="${String(i===l)}" @click="${()=>{this._fileSort={...this._fileSort,[r]:l}}}">${d}</button>`)}</span>`;return this._group(t,s,r,l=>l.path,l=>this._fileRow(l.path,o(l.path),r,this._sizeCells(l)),a)}_pkgGroup(t,n,r){return this._group(t,n,r,o=>o.pkg,o=>p`<li><div class="bundle-compare-row"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${_r(o.pkg)}">${_r(o.pkg)}</span> ${this._sizeCells(o)}</div></li>`)}_versionRow(t){let n=t.direction==="up"?"\u2191":t.direction==="down"?"\u2193":"\xB1",r=t.direction==="up"?"Upgraded":t.direction==="down"?"Downgraded":"Changed";return p`<li><div class="bundle-compare-row" aria-label="${`${t.pkg} \xB7 ${r}`}"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(t.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${t.pkg}">${t.pkg}</span> <span class="bundle-compare-ver"><span class="bundle-compare-ver-from">${IE(t.baseVersions)}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="${`bundle-compare-ver-to ${t.direction}`}">${IE(t.otherVersions)}</span> <span class="${`bundle-compare-ver-dir ${t.direction}`}" aria-hidden="true">${n}</span></span></div></li>`}_depGroup(t,n,r){return this._group(t,n,r,o=>o.pkg,o=>p`<li><div class="bundle-compare-row"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${o.pkg}">${o.pkg}</span> <span class="bundle-compare-dep-ver">${IE(o.versions)}</span></div></li>`)}_renderVersionUpdates(t,n,r){let{updated:o,added:i,removed:s}=t;if(o.length===0&&i.length===0&&s.length===0)return b;let a=o.slice(0,bz),l=o.length-a.length;return p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Dependency updates</h3>${o.length>0?p`<div class="bundle-compare-ver-changes"><header class="bundle-compare-group-head"><span class="bundle-compare-group-title">Updated</span> <span class="bundle-compare-group-count">${o.length}</span></header><ul class="bundle-compare-rows">${ve(a,d=>d.pkg,d=>this._versionRow(d))}</ul>${l>0?p`<div class="bundle-compare-more">and ${l.toLocaleString()} more…</div>`:b}</div>`:b} ${i.length>0||s.length>0?p`<div class="bundle-compare-cols">${this._depGroup(`Removed \xB7 only in ${n}`,s,"removed")} ${this._depGroup(`Added \xB7 only in ${r}`,i,"added")}</div>`:b}</section>`}_resolutionGroup(t){return this._group("Repointed",t,"changed",n=>n.key,n=>{let r=`${n.conditions}${n.platform===null?"":` \xB7 Platform: ${n.platform}`}`;return p`<li class="bundle-compare-resolution"><div class="bundle-compare-resolution-source"><code data-tooltip-truncated data-tooltip="${n.parent}">${n.parent}</code> <span aria-hidden="true">→</span> <code data-tooltip-truncated data-tooltip="${n.specifier}">${n.specifier}</code> <span class="bundle-compare-resolution-context" data-tooltip-truncated data-tooltip="${r}">${r}</span></div><div class="bundle-compare-resolution-targets"><div class="bundle-compare-resolution-before"><span>Before</span><code data-tooltip-truncated data-tooltip="${n.baseTarget||"(empty target)"}">${n.baseTarget||"(empty target)"}</code></div><span aria-hidden="true">→</span><div class="bundle-compare-resolution-after"><span>After</span><code data-tooltip-truncated data-tooltip="${n.otherTarget||"(empty target)"}">${n.otherTarget||"(empty target)"}</code></div></div></li>`})}_renderResolutions(t){return t.totalChanges===0?b:p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Import resolutions</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._resolutionGroup(t.changed)}</div></section>`}_diffFor(){let t=`${this.integrity}|${this._targetIntegrity}|${this._scope}`;if(this._diffKey!==t||!this._diff){let n=kw(this.details,this._scope),r=kw(this._otherDetails,this._scope),o=Zt(this.details),i=Zt(this._otherDetails),s=o||i?new Map([...o??[],...i??[]]):null,a=l=>Pt(l,{packageDir:s?.get(l)});this._diff=Y9(n,r,a),this._diff.resolutions=q9(SE(this.details,this._scope),SE(this._otherDetails,this._scope)),this._diff.versionUpdates=J9(Rf(this.details,this._scope?n.keys():null),Rf(this._otherDetails,this._scope?r.keys():null)),this._diffKey=t}return this._diff}_renderSummary(t){let n=t.totals,r=t.versionUpdates.totals,o=r.baseDeps>0||r.otherDeps>0,i=r.otherDeps-r.baseDeps,s=cre(n.byteDelta,n.baseBytes);return p`<div class="bundle-compare-summary"><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Files</span> <span class="bundle-compare-metric-value">${n.baseFiles.toLocaleString()} → ${n.otherFiles.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${_w(n.fileDelta)}`}">${LE(n.fileDelta)}</span></div><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Size</span> <span class="bundle-compare-metric-value">${qe(n.baseBytes)} → ${qe(n.otherBytes)}</span> <span class="${`bundle-compare-metric-delta ${_w(n.byteDelta)}`}">${yz(n.byteDelta)}${s?p`${" "}<span class="bundle-compare-pct">(${s})</span>`:b}</span></div>${o?p`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Deps</span> <span class="bundle-compare-metric-value">${r.baseDeps.toLocaleString()} → ${r.otherDeps.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${_w(i)}`}">${LE(i)}</span></div>`:b}<div class="bundle-compare-chips"><span class="bundle-compare-chip removed">−${n.onlyBaseFiles.toLocaleString()} removed</span> <span class="bundle-compare-chip added">+${n.onlyOtherFiles.toLocaleString()} added</span> <span class="bundle-compare-chip changed">${n.changedFiles.toLocaleString()} changed</span> <span class="bundle-compare-chip unchanged">${n.unchangedFiles.toLocaleString()} unchanged</span> ${t.resolutions.totalChanges>0?p`<span class="bundle-compare-chip changed">${t.resolutions.totalChanges.toLocaleString()} repointed ${t.resolutions.totalChanges===1?"resolution":"resolutions"}</span>`:b}</div></div>`}_renderPicker(t,n){let r=this._nameFor(this.integrity);return p`<div class="bundle-compare-picker"><span class="bundle-compare-base" data-tooltip-truncated data-tooltip="${r}">${r}</span> <span class="bundle-compare-arrow" aria-hidden="true">→</span><div class="bundle-compare-select-wrap"><span class="bundle-compare-select-hint">Compare with</span><bundle-selector .bundles="${t}" .value="${this._targetIntegrity}" label="Bundle to compare with" placeholder="Choose a bundle…" @bundle-change="${o=>this._pick(o.detail.value)}"></bundle-selector>${n?p`<button type="button" class="bundle-compare-clear" aria-label="Clear comparison" @click="${()=>this._pick(null)}">×</button>`:b}</div>${n?p`<button type="button" class="bundle-compare-swap" @click="${()=>this._swap()}" aria-label="Swap the two bundles"><span class="bundle-compare-swap-icon" aria-hidden="true">↔</span>Swap</button>`:b}</div>`}_otherOptions(){let t=Hd(c.bundles??[],this.integrity),n=new Map;for(let r of t)n.set(r.name,(n.get(r.name)??0)+1);return t.map(r=>({id:r.integrity,integrity:r.integrity,kind:r.kind??(r.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis"),summary:r.summary,size:typeof r.size=="number"?qe(r.size):"\u2014",filename:n.get(r.name)>1?`${r.name} \xB7 ${r.integrity.slice(7,13)}\u2026`:r.name}))}render(){let t=this._otherOptions(),n=!!this._targetIntegrity&&t.some(a=>a.integrity===this._targetIntegrity),r=t.length>0?this._renderPicker(t,n):b,o=this._baseReady?$E(this.details,n?this._otherDetails:null):[],i=n&&this._status==="ready"&&this._otherDetails&&(this._otherDetails.json||this._otherDetails.bundle)&&!this._otherDetails.error,s;return this._baseReady?t.length===0?s=p`<div class="bundle-compare-empty">No other bundles to compare with. Drop a second <code>.map</code> or <code>.stasis.code.br</code> bundle to diff against this one.</div>`:n?this._status==="loading"||!this._otherDetails?s=p`<div class="bundle-compare-empty">Comparing…</div>`:this._otherDetails.error?s=p`<div class="bundle-compare-empty is-error">Couldn't read the selected bundle: ${this._otherDetails.error}</div>`:!this._otherDetails.json&&!this._otherDetails.bundle?s=p`<div class="bundle-compare-empty is-error">The selected bundle couldn't be parsed.</div>`:s=this._renderDiff():s=p`<div class="bundle-compare-empty">Pick a bundle above to compare against <strong>${this._nameFor(this.integrity)}</strong>.</div>`:s=p`<div class="bundle-compare-empty">Loading bundle…</div>`,p`<div class="bundle-compare"><header class="bundle-compare-head">${r} ${o.length>0?p`<bundle-scope-selector .reasons="${o}" .value="${this._scope}" label="Compare scope" @scope-change="${a=>{this._scope=a.detail.value}}"></bundle-scope-selector>`:b} ${this._baseReady&&i?this._renderSummary(this._diffFor()):b}</header><div class="bundle-compare-body">${s}</div></div>`}_renderDiff(){let t=this._diffFor(),n=this._nameFor(this._targetIntegrity),r=this._nameFor(this.integrity),o=[...t.files.onlyBase.map(u=>u.path),...t.files.onlyOther.map(u=>u.path),...t.files.changed.map(u=>u.path)],{prefix:i,stripped:s}=Ur(o),a=new Map;for(let u=0;u<o.length;u++)a.set(o[u],s[u]);let l=u=>a.get(u)??u,d=t.packages.onlyOther.length>0||t.packages.onlyBase.length>0||t.packages.changed.length>0;return p`<div class="bundle-compare-caption">Changes from <strong>${r}</strong> to <strong>${n}</strong> ${i?p`· <span class="mono">${i}</span>`:b}</div>${this._renderVersionUpdates(t.versionUpdates,r,n)} ${t.totals.identical?t.resolutions.totalChanges>0?p`<div class="bundle-compare-caption">File contents are unchanged; import resolutions differ.</div>`:p`<div class="bundle-compare-identical">These two bundles carry identical files (${t.totals.unchangedFiles.toLocaleString()} ${t.totals.unchangedFiles===1?"file":"files"}).</div>`:p`${d?p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Packages</h3><div class="bundle-compare-cols">${this._pkgGroup(`Removed \xB7 only in ${r}`,t.packages.onlyBase,"removed")} ${this._pkgGroup(`Added \xB7 only in ${n}`,t.packages.onlyOther,"added")} ${this._pkgGroup("Changed size",t.packages.changed,"changed")}</div></section>`:b}<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Files</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._fileGroup(`Removed \xB7 only in ${r}`,t.files.onlyBase,"removed",l)} ${this._fileGroup(`Added \xB7 only in ${n}`,t.files.onlyOther,"added",l)} ${this._fileGroup("Changed",t.files.changed,"changed",l)}</div></section>`} ${this._renderResolutions(t.resolutions)}`}};customElements.define("bundle-compare",FE);P();nt();q();var BE=class extends ce{createRenderRoot(){return this}render(){return c.reports.length>0&&c.currentView==="findings"&&c.viewMode!=="graph"&&c.viewMode!=="kanban"?p`<button type="button" class="toolbar-export-btn" aria-label="Download or print report" @click="${this._onClick}">${yD}</button>`:b}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",BE);P();wt();P();nt();Os();var wa=class extends ce{static styles=Qe`.preview{position:fixed;inset:auto;margin:0;padding:14px;box-sizing:border-box;width:min(24rem,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--bg);color:var(--text);box-shadow:0 8px 28px #00000040;font:13px/1.45 system-ui,sans-serif;text-align:left;white-space:normal;overflow-wrap:anywhere;letter-spacing:normal;cursor:default}.preview.wide{width:min(36rem,calc(100vw - 24px))}@media print{.preview{display:none}}`;constructor(){super(),this.showTimer=null,this.hideTimer=null}connectedCallback(){super.connectedCallback(),Jn(this.renderRoot)}disconnectedCallback(){this._hidePreview(),super.disconnectedCallback()}updated(){let t=this.renderRoot.querySelector(".preview");t?t.matches(":popover-open")&&this._positionPreview():this._hidePreview()}_schedulePreview(){clearTimeout(this.hideTimer),clearTimeout(this.showTimer),this.renderRoot.querySelector(".preview")&&(this.showTimer=setTimeout(()=>{if(!this.isConnected)return;let t=this.renderRoot.querySelector(".preview");t&&(Bs(),t.showPopover(),this._positionPreview(),document.addEventListener("keydown",this._previewKeyDown,!0),window.addEventListener("scroll",this._previewScroll,!0),window.addEventListener("resize",this._hidePreview))},150))}_keepPreview(){clearTimeout(this.hideTimer)}_leavePreview(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>{this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)||this._hidePreview()},150)}_hidePreview=()=>{clearTimeout(this.showTimer),clearTimeout(this.hideTimer);let t=this.renderRoot?.querySelector(".preview");t?.matches(":popover-open")&&t.hidePopover(),document.removeEventListener("keydown",this._previewKeyDown,!0),window.removeEventListener("scroll",this._previewScroll,!0),window.removeEventListener("resize",this._hidePreview)};_previewKeyDown=t=>{t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)&&this.renderRoot.querySelector("[aria-details]").focus({preventScroll:!0}),this._hidePreview())};_previewScroll=t=>{t.composedPath().includes(this.renderRoot.querySelector(".preview"))||this._hidePreview()};_positionPreview(){let t=this.renderRoot.querySelector(".preview"),n=this.renderRoot.querySelector("[aria-details]").getBoundingClientRect(),{width:r,height:o}=t.getBoundingClientRect(),i=8,s=12,a=Math.max(s,Math.min(n.left,window.innerWidth-r-s)),l=n.bottom+i+o<=window.innerHeight-s?n.bottom+i:Math.max(s,n.top-i-o);t.style.left=`${a}px`,t.style.top=`${l}px`}};Le();xb();ef();jt();var OE={open:"Open",draft:"Draft",closed:"Closed",merged:"Merged",completed:"Completed",not_planned:"Not planned",duplicate:"Duplicate",unknown:"Closed"},dre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3" r="1.75"/><circle cx="4" cy="13" r="1.75"/><circle cx="12" cy="13" r="1.75"/><path d="M4 4.75v6.5M12 11.25V5a2 2 0 0 0-2-2H8m2-2L8 3l2 2"/></svg>`,ure=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,pre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m5 8 2 2 4-4"/></svg>`,fre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m3.5 12.5 9-9"/></svg>`,hre={completed:pre,not_planned:fre},PE=class extends wa{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[wa.styles,Qe`:host{display:inline;word-break:normal}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere;cursor:default}.status{display:inline-flex;align-items:center;gap:.3em;vertical-align:text-bottom;margin-right:.35em;font-weight:600;white-space:nowrap}svg{flex:none}.open{color:light-dark(#1a7f37,#3fb950)}.draft,.not_planned,.duplicate,.unknown,.unavailable{color:var(--muted)}.closed{color:light-dark(#d1242f,#f85149)}.merged,.completed{color:light-dark(#8250df,#a371f7)}:host(:not([compact])){display:block}:host(:not([compact])) .fix-link{display:flex;align-items:center;gap:.55rem;min-width:0}.link-icon{flex:none;line-height:1}.link-icon svg{display:block}.link-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500;line-height:1.5}.link-icon.unavailable+.link-title{color:var(--accent)}.ref{min-width:0;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.74rem}.link-status{flex:none;padding:.15rem .4rem;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:.7rem;font-weight:500;line-height:1.3}:host([compact]){display:inline-flex}:host([compact]) .fix-link{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host([compact]) .fix-link svg{width:14px;height:14px}:host([compact]) .status{margin:0;font-size:1rem;line-height:1}.preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.preview-ref{display:inline-flex;align-items:center;gap:.4rem;min-width:0;color:var(--muted);font-size:12px;line-height:1.4}.preview-ref span{min-width:0}.preview-description{margin-top:8px;white-space:pre-wrap}.preview-title{margin-top:8px;font-size:15px;font-weight:600;line-height:1.4}.preview .preview-header .status{flex:none;margin:0;font-size:12px;line-height:1.4}@media print{:host(:not([compact])) .fix-link{display:block}.link-title,.ref{white-space:normal;overflow:visible;text-overflow:clip;max-width:none}.link-icon{display:inline-block;vertical-align:middle;margin-right:.55rem}.ref,.link-status{margin-left:.55rem}.preview{display:none}}`];constructor(){super(),this.url="",this.compact=!1,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this.unsubscribe=qM(()=>this.requestUpdate()),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,super.disconnectedCallback()}updated(t){t.has("url")||t.has("compact")?this._hidePreview():super.updated(t)}render(){if(!dt(this.url))return p`${this.url}`;let t=Jp(this.url),n=!t&&Xp(this.url),r=t||n,o=Qp.read(this.url);if(!o&&!r){let u=`Open fix link: ${this.url}`;return p`<a class="${this.compact?"fix-link":""}" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" data-tooltip="${this.compact?u:b}" aria-label="${u}">${this.compact?p`<slot></slot>`:this.url}</a>`}let i=o?n&&o.status==="closed"?o.stateReason??"unknown":o.status:"unavailable",s=t?dre:n?hre[i]??ure:null,a=r?`${r.repo}#${r.number}`:"",l=(o?.title.length??0)>40||(o?.description??"").split(/[\r\n]/u).some(u=>u.length>100),d=o?`${OE[i]} ${t?"pull request":"issue"}: ${o.title} (${a})`:r?`Open ${t?"pull request":"issue"}: ${a}`:`Open fix link: ${this.url}`;return p`<a class="fix-link" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${d}" aria-details="${this.compact&&r?"fix-preview":b}" data-tooltip="${this.compact&&!r?d:b}" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}">${this.compact?s?p`<span class="${`status ${i}`}">${s}</span>`:p`<slot></slot>`:p`${s?p`<span class="${`link-icon ${i}`}">${s}</span>`:b} <span class="link-title">${o?.title??(a||this.url)}</span> ${o?p`<span class="ref">${a}</span><span class="${`link-status ${i}`}">${OE[i]}</span>`:b}`} </a>${this.compact&&r?p`<a class="${l?"preview wide":"preview"}" id="fix-preview" popover="manual" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${`Open ${t?"pull request":"issue"} ${a} on GitHub`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${u=>{u.stopPropagation(),this._hidePreview()}}"><div class="preview-header"><span class="preview-ref">${te(br)}<span>${a}</span></span> <span class="${`status ${i}`}">${s}${o?OE[i]:t?"Pull request":"Issue"}</span></div>${o?p`<div class="preview-title">${o.title}</div>`:b} ${o?.description?p`<div class="preview-description">${o.description}</div>`:b}</a>`:b}`}};customElements.define("managed-fix-link",PE);P();q();Ed();Ly();Fy();ew();var NE=class extends wa{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[wa.styles,N(nu),Qe`:host{display:inline-flex}:host([hidden]){display:none!important}button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:default}.preview-trigger{display:inline-flex;align-items:center;justify-content:center;line-height:0}.preview-trigger:hover{color:var(--accent)}.managed-comment+.managed-comment{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.comment-body{white-space:pre-wrap}.comment-body a{color:var(--accent);text-decoration:none}.comment-body a:hover{text-decoration:underline}.preview-footer{display:flex;justify-content:flex-end;margin-top:8px}.edit-hint{color:var(--muted);font-size:12px}.edit-hint:hover{color:var(--accent)}`];constructor(){super(),this.finding=null,this.comment="",this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this._subscribe(),document.addEventListener("managed-comments-reset",this._resetComments),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,document.removeEventListener("managed-comments-reset",this._resetComments),super.disconnectedCallback()}updated(t){this.hidden=!this.renderRoot.querySelector(".preview"),t.has("finding")&&(this._hidePreview(),this._subscribe()),super.updated(t)}_subscribe(){this.unsubscribe?.(),this.unsubscribe=this.finding?.id?My(this.finding.id,()=>this.requestUpdate()):null}_resetComments=()=>{this._hidePreview(),this.requestUpdate()};_previewClick(t){if(t.target.closest("a, button")){this._hidePreview();return}window.getSelection?.()?.toString()||(t.stopPropagation(),this.renderRoot.querySelector(".preview-trigger").click())}render(){let t=A(),n=t?si(this.finding):[];if(!(t?n.length>0:!!this.comment))return b;let i=(t?n.map(s=>s.body):[this.comment]).some(s=>s.split(/[\r\n]/u).some(a=>a.length>100));return p`<button type="button" class="preview-trigger mark-comment" aria-label="${t?"View comments":"Edit comment"}" aria-details="comment-preview" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}"><slot></slot></button><div class="${i?"preview wide":"preview"}" id="comment-preview" popover="manual" role="region" aria-label="${t?"Comments":"Comment"}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${this._previewClick}">${t?n.map(s=>Rd(s,zi(s.body))):p`<div class="comment-body">${zi(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define("comment-preview",NE);q();co();ln();ui();P();q();Le();Le();hs();function kz(e){if(Ir(e))throw new Error("This is a links file, not a report. Wrap report rows in a groups or findings object to compare them.");let t=e;try{let a=JSON.parse(e);Array.isArray(a)&&(t=JSON.stringify({groups:a}))}catch{}let{data:n,reason:r}=Mr(t);if(!n)throw new Error(r);let o=[],i=new Map,s=0;for(let a of Mt(n)){let l=new Set;for(let d of Array.isArray(a)?a:[a])if(!(!d||typeof d!="object"||Array.isArray(d))){if(typeof d.id!="string"||!d.id){s++;continue}l.add(d.id),i.has(d.id)||i.set(d.id,[]),i.get(d.id).push(d)}o.push([...l].toSorted())}return{rows:o,byId:i,missingIds:s}}function mre(e){let t=new Set;for(let n of e){let r=[...new Set(n)].toSorted();for(let o=0;o<r.length;o++)for(let i=o+1;i<r.length;i++)t.add(JSON.stringify([r[o],r[i]]))}return t}function vz(e){let t=new Map,n=o=>{let i=o;for(;t.get(i)!==i;)t.set(i,t.get(t.get(i))),i=t.get(i);return i};for(let o of e){let[i,s]=JSON.parse(o);for(let a of[i,s])t.has(a)||t.set(a,a);t.set(n(i),n(s))}let r=new Map;for(let o of[...t.keys()].toSorted()){let i=n(o);r.has(i)||r.set(i,[]),r.get(i).push(o)}return[...r.values()].toSorted((o,i)=>o[0].localeCompare(i[0]))}function Qi(e,t,n){let r=(e.byId.get(t)??[]).map(o=>n==="verdict"?et(o)||null:n==="severity"?Rr(o)??null:n==="originalSeverity"?o.severity??null:n==="confidence"&&Number.isFinite(o.confidence)?o.confidence:null);return[...new Set(r)].toSorted((o,i)=>String(o).localeCompare(String(i),void 0,{numeric:!0}))}var wz=(e,t)=>e.length===t.length&&e.every((n,r)=>n===t[r]),Cw=(e,t)=>[...e].filter(n=>!t.has(n)).toSorted();function xz(e,t){let n=new Set(e.byId.keys()),r=new Set(t.byId.keys()),o=[...n].filter(g=>r.has(g)).toSorted(),i=new Set(o),s=g=>mre(g.rows.map(y=>y.filter(w=>i.has(w)))),a=s(e),l=s(t),d={confirmed:[],refuted:[],otherVerdicts:[],confidence:[],severity:[]};for(let g of o)for(let y of["verdict","confidence","severity"]){let w=Qi(e,g,y),x=Qi(t,g,y),v={id:g,before:w,after:x};if(y==="severity"&&(v.originalBefore=Qi(e,g,"originalSeverity"),v.originalAfter=Qi(t,g,"originalSeverity")),wz(w,x)&&(y!=="severity"||wz(v.originalBefore,v.originalAfter)))continue;if(y!=="verdict"){d[y].push(v);continue}let k=x.length===1&&x[0]==="confirmed"?"confirmed":x.length===1&&x[0]==="refuted"?"refuted":"otherVerdicts";d[k].push(v)}let u=vz(Cw(l,a)),f=vz(Cw(a,l)),h=Cw(r,n),m=Cw(n,r);return{before:e,after:t,added:h,removed:m,shared:o,joined:u,split:f,...d,unchanged:h.length===0&&m.length===0&&u.length===0&&f.length===0&&Object.values(d).every(g=>g.length===0)}}Ee();var $z=`dialog{width:min(94vw,1180px);max-width:1180px;height:min(88dvh,960px);max-height:92dvh;margin-block:auto;padding:0;overflow:hidden;background:var(--theme-bar)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.3rem}header h3{margin-bottom:.25rem;font-size:1.1rem}header p,.muted,.note,.empty{color:var(--muted);font-size:.78rem;line-height:1.5}button,select,input{font:inherit;font-size:.8rem}button,select,.file-button,.search{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.45rem .65rem}button:not(:disabled):hover,.file-button:hover{background:var(--surface-active)}button:disabled{opacity:.45}button:focus-visible,select:focus-visible,.search:focus-visible,.file-button:focus-within{outline:2px solid var(--accent);outline-offset:2px}.pickers{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:start;gap:1rem;padding:0 1.3rem 1rem;border-bottom:1px solid var(--border)}.picker{min-width:0}.picker>label{display:block;font-size:.72rem;font-weight:600;margin-bottom:.4rem;color:var(--muted)}.picker select{width:100%;text-overflow:ellipsis}.file-picker{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-top:.55rem}.file-button{position:relative;display:inline-block;font-size:.74rem;padding:.3rem .5rem;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;width:100%}.swap{align-self:start;margin-top:1.5rem;font-size:1rem}.results{overflow:auto;min-height:0;padding:1.1rem 1.3rem 1.4rem}.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem}.summary>div{display:flex;flex-direction:column;gap:.35rem;padding:.8rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 7px)}.summary span{font-size:.72rem;color:var(--muted)}.summary strong{font-size:1.15rem;font-variant-numeric:tabular-nums}.positive h4{color:var(--green)}.negative h4,.verdict-confirmed h4,.summary .verdict-confirmed strong{color:var(--critical)}.verdict-refuted h4,.summary .verdict-refuted strong{color:var(--muted)}.change-counts{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.7rem}.change-counts span{font-size:.7rem;padding:.3rem .5rem;border-radius:5px;background:var(--bg);color:var(--muted)}.results-head{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-block:1rem}.results-head p{flex:1;font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}.search{width:min(100%,17rem)}.section-title{margin:1.2rem 0 .5rem;font-size:.87rem}.note{margin:-.15rem 0 .6rem}.columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.change-section{border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden;margin-bottom:.6rem}.change-section h4{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.78rem;font-weight:600;padding:.65rem .8rem;background:var(--bg)}.count{font-variant-numeric:tabular-nums;font-size:.7rem}ul{list-style:none}li{border-top:1px solid var(--border);padding:.7rem .8rem}.change-row{display:flex;justify-content:space-between;align-items:start;gap:.8rem}.finding{display:flex;flex-direction:column;gap:.2rem;min-width:0;overflow-wrap:anywhere}.finding strong{font-size:.77rem;font-weight:500;line-height:1.4}.finding code,.finding small{color:var(--muted);font-size:.66rem;line-height:1.4}.change-value{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.3rem;max-width:48%;flex-shrink:0;font-size:.73rem;text-align:end;overflow-wrap:anywhere}.from{color:var(--muted)}.change-value small{width:100%;color:var(--muted);font-size:.67rem}.group-members{display:flex;flex-direction:column;gap:.55rem}.group-shape{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.7rem;font:.66rem/1.5 monospace;overflow-wrap:anywhere}.group-shape>span{min-width:0}.empty{padding:.7rem .8rem}.more{margin:.5rem .8rem .7rem;font-size:.72rem}.placeholder{padding:4rem 1rem;text-align:center;color:var(--muted);font-size:.85rem}.identical{color:var(--green);font-size:.82rem;padding-block:.5rem}.error,.warning{font-size:.75rem;line-height:1.5;margin-top:.5rem;overflow-wrap:anywhere}.error{color:var(--critical)}.warning{color:var(--medium)}dialog>.error{padding:0 1.3rem .6rem}@media(width<=650px){.pickers{gap:.5rem;padding-inline:.8rem}.columns{grid-template-columns:minmax(0,1fr);gap:0}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.summary>div{padding:.6rem}.results-head p{flex-basis:100%}.search{width:100%}header,.results{padding-inline:.8rem}.change-row{flex-wrap:wrap}.change-value{max-width:100%}}
|
|
474
|
+
`;var AE=class extends H{static properties={path:{},format:{},before:{attribute:!1},after:{attribute:!1},baseName:{},otherName:{},kind:{},_lines:{state:!0},_error:{state:!0},_highlighted:{state:!0}};static styles=[...H.styles,N(hi),N(mz)];constructor(){super(),this._lines=null,this._error=null,this._highlighted=null}beforeOpen(){if(this.kind==="changed")try{this._lines=hz(this.before,this.after)}catch{this._error="Could not calculate this diff."}else{let t=this.kind==="removed"?this.before:this.after;typeof t=="string"&&this._highlight(t)}}async _highlight(t){let n=await Hr(t,xr(this.path,this.format));this.isConnected&&(this._highlighted=n)}render(){let t=this.kind==="changed",n=this.kind==="removed"?this.before:this.after,r=t?this._lines===null:typeof n!="string",o=i=>qe(Ef(i)??0);return p`<dialog aria-labelledby="file-title" @close="${this._onClose}"><header><div class="file-heading"><h3 id="file-title" class="mono">${this.path}</h3><button type="button" aria-label="Close file" @click="${this._onClose}"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></div><div class="file-details"><p class="file-context">${t?`${this.baseName} \u2192 ${this.otherName}`:this.kind==="removed"?this.baseName:this.otherName}</p>${t?p`<p class="file-legend"><span class="removed">− Before</span><span class="added">+ After</span><span>${o(this.before)} → ${o(this.after)}</span></p>`:b}</div></header>${this._error?p`<p class="file-message" role="alert">${this._error}</p>`:r?p`<p class="file-message">${t?"Binary file changed. A text diff is not available.":`Binary file \xB7 ${o(n)}`}</p>`:t?p`<pre class="file-code" tabindex="0" aria-label="File diff"><code>${this._lines.map(i=>p`<span class="${`diff-line ${i.kind}`}">${i.text}</span>`)}</code></pre>`:p`<pre class="file-code" tabindex="0" aria-label="File contents"><code>${this._highlighted?te(this._highlighted):n||"Empty file"}</code></pre>`}</dialog>`}};customElements.define("bundle-file-dialog",AE);function gz(e){return Ps("bundle-file-dialog",e,t=>{t.before=null,t.after=null})}Fl();pv();lh();var bz=400,lu=null;function LE(e){return e===0?"\xB10":`${e>0?"+":"\u2212"}${Math.abs(e).toLocaleString()}`}function yz(e){return`${LE(e)} B`}function _w(e){return e>0?"up":e<0?"down":""}function cre(e,t){if(!t)return"";let n=e/t*100;return`${n>0?"+":n<0?"\u2212":"\xB1"}${Math.abs(n).toFixed(1)}%`}function IE(e){return e.join(", ")}var FE=class extends he{static properties={details:{attribute:!1},integrity:{attribute:!1},_targetIntegrity:{state:!0},_otherDetails:{state:!0},_status:{state:!0},_scope:{state:!0},_fileSort:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this.integrity=null,this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._fileSort={removed:"name",added:"name",changed:"name"},this._diff=null,this._diffKey=null}willUpdate(t){if((t.has("_otherDetails")||t.has("details"))&&this._status==="ready"&&!$E(this.details,this._otherDetails).some(n=>n.id===this._scope)&&(this._scope=""),!!t.has("integrity")){if(lu&&this.integrity===lu.base){let n=lu.target;this._scope=lu.scope,lu=null,this._targetIntegrity=n,this._otherDetails=null,this._status="loading",this._diff=null,this._diffKey=null,this._loadOther(n);return}this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._diff=null,this._diffKey=null}}_swap(){let t=this._targetIntegrity;!t||t===this.integrity||Hd(c.bundles??[],this.integrity).some(n=>n.integrity===t)&&(lu={base:t,target:this.integrity,scope:this._scope},this.dispatchEvent(new CustomEvent("bundle-swap",{bubbles:!0,composed:!0,detail:{integrity:t}})))}_nameFor(t){return(c.bundles??[]).find(r=>r.integrity===t)?.name??`${t.slice(0,15)}\u2026`}_pick(t){let n=t||null;if(this._targetIntegrity=n,this._otherDetails=null,this._diff=null,this._diffKey=null,!n){this._status="idle",this._scope="";return}this._status="loading",this._loadOther(n)}async _loadOther(t){let n=Hd(c.bundles??[],this.integrity).find(o=>o.integrity===t);if(!n){this._status="idle",this._targetIntegrity=null;return}let r;try{r=await Ni(t,n)}catch(o){if(o.name==="AbortError")return;throw o}this._targetIntegrity===t&&(this._otherDetails=r,this._status="ready")}get _baseReady(){return!!(this.details&&this.details.integrity===this.integrity&&(this.details.json||this.details.bundle))}_openFile(t,n){let r=n==="removed"?this.details:this._otherDetails;gz({path:t,kind:n,baseName:this._nameFor(this.integrity),otherName:this._nameFor(this._targetIntegrity),format:r?.kind==="stasis"?r.bundle.formats?.get(t):void 0,before:On(this.details).get(t),after:On(this._otherDetails).get(t)}).catch(o=>Ot(o.message,{kind:"error"}))}_fileRow(t,n,r,o){let i=p`<span class="bundle-compare-row-path mono" data-tooltip-truncated data-tooltip="${t}">${n}</span>${o}`;return r==="removed"&&yd(this.details).get(t)!=="resource"?p`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" data-bundle-view-source="${t}">${i}</button></li>`:p`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" @click="${()=>this._openFile(t,r)}">${i}</button></li>`}_group(t,n,r,o,i,s=b){if(n.length===0)return b;let a=n.slice(0,bz),l=n.length-a.length;return p`<section class="${`bundle-compare-group bundle-compare-${r}`}"><header class="bundle-compare-group-head"><span class="bundle-compare-dot" aria-hidden="true"></span> <span class="bundle-compare-group-title" data-tooltip-truncated data-tooltip="${t}">${t}</span> <span class="bundle-compare-group-count">${n.length}</span> ${s}</header><ul class="bundle-compare-rows">${ve(a,o,i)}</ul>${l>0?p`<div class="bundle-compare-more">and ${l.toLocaleString()} more…</div>`:b}</section>`}_sizeCells(t){return t.delta===void 0?p`<span class="bundle-compare-row-size">${qe(t.bytes)}</span>`:p`<span class="bundle-compare-row-size">${qe(t.baseBytes)} → ${qe(t.otherBytes)}</span> <span class="${`bundle-compare-row-delta ${_w(t.delta)}`}">${yz(t.delta)}</span>`}_fileGroup(t,n,r,o){let i=this._fileSort[r],s=n.toSorted((l,d)=>(i==="size"?(d.bytes??d.otherBytes)-(l.bytes??l.otherBytes):0)||l.path.localeCompare(d.path)),a=p`<span class="bundles-overview-sort" role="group" aria-label="${`${r} file order`}">${[["name","Name"],["size","Size"]].map(([l,d])=>p`<button type="button" aria-pressed="${String(i===l)}" @click="${()=>{this._fileSort={...this._fileSort,[r]:l}}}">${d}</button>`)}</span>`;return this._group(t,s,r,l=>l.path,l=>this._fileRow(l.path,o(l.path),r,this._sizeCells(l)),a)}_pkgGroup(t,n,r){return this._group(t,n,r,o=>o.pkg,o=>p`<li><div class="bundle-compare-row"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${_r(o.pkg)}">${_r(o.pkg)}</span> ${this._sizeCells(o)}</div></li>`)}_versionRow(t){let n=t.direction==="up"?"\u2191":t.direction==="down"?"\u2193":"\xB1",r=t.direction==="up"?"Upgraded":t.direction==="down"?"Downgraded":"Changed";return p`<li><div class="bundle-compare-row" aria-label="${`${t.pkg} \xB7 ${r}`}"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(t.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${t.pkg}">${t.pkg}</span> <span class="bundle-compare-ver"><span class="bundle-compare-ver-from">${IE(t.baseVersions)}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="${`bundle-compare-ver-to ${t.direction}`}">${IE(t.otherVersions)}</span> <span class="${`bundle-compare-ver-dir ${t.direction}`}" aria-hidden="true">${n}</span></span></div></li>`}_depGroup(t,n,r){return this._group(t,n,r,o=>o.pkg,o=>p`<li><div class="bundle-compare-row"><span class="bundle-compare-pkg-dot" style="${Oe({background:Rn(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${o.pkg}">${o.pkg}</span> <span class="bundle-compare-dep-ver">${IE(o.versions)}</span></div></li>`)}_renderVersionUpdates(t,n,r){let{updated:o,added:i,removed:s}=t;if(o.length===0&&i.length===0&&s.length===0)return b;let a=o.slice(0,bz),l=o.length-a.length;return p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Dependency updates</h3>${o.length>0?p`<div class="bundle-compare-ver-changes"><header class="bundle-compare-group-head"><span class="bundle-compare-group-title">Updated</span> <span class="bundle-compare-group-count">${o.length}</span></header><ul class="bundle-compare-rows">${ve(a,d=>d.pkg,d=>this._versionRow(d))}</ul>${l>0?p`<div class="bundle-compare-more">and ${l.toLocaleString()} more…</div>`:b}</div>`:b} ${i.length>0||s.length>0?p`<div class="bundle-compare-cols">${this._depGroup(`Removed \xB7 only in ${n}`,s,"removed")} ${this._depGroup(`Added \xB7 only in ${r}`,i,"added")}</div>`:b}</section>`}_resolutionGroup(t){return this._group("Repointed",t,"changed",n=>n.key,n=>{let r=`${n.conditions}${n.platform===null?"":` \xB7 Platform: ${n.platform}`}`;return p`<li class="bundle-compare-resolution"><div class="bundle-compare-resolution-source"><code data-tooltip-truncated data-tooltip="${n.parent}">${n.parent}</code> <span aria-hidden="true">→</span> <code data-tooltip-truncated data-tooltip="${n.specifier}">${n.specifier}</code> <span class="bundle-compare-resolution-context" data-tooltip-truncated data-tooltip="${r}">${r}</span></div><div class="bundle-compare-resolution-targets"><div class="bundle-compare-resolution-before"><span>Before</span><code data-tooltip-truncated data-tooltip="${n.baseTarget||"(empty target)"}">${n.baseTarget||"(empty target)"}</code></div><span aria-hidden="true">→</span><div class="bundle-compare-resolution-after"><span>After</span><code data-tooltip-truncated data-tooltip="${n.otherTarget||"(empty target)"}">${n.otherTarget||"(empty target)"}</code></div></div></li>`})}_renderResolutions(t){return t.totalChanges===0?b:p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Import resolutions</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._resolutionGroup(t.changed)}</div></section>`}_diffFor(){let t=`${this.integrity}|${this._targetIntegrity}|${this._scope}`;if(this._diffKey!==t||!this._diff){let n=kw(this.details,this._scope),r=kw(this._otherDetails,this._scope),o=Zt(this.details),i=Zt(this._otherDetails),s=o||i?new Map([...o??[],...i??[]]):null,a=l=>Pt(l,{packageDir:s?.get(l)});this._diff=Y9(n,r,a),this._diff.resolutions=q9(SE(this.details,this._scope),SE(this._otherDetails,this._scope)),this._diff.versionUpdates=J9(Rf(this.details,this._scope?n.keys():null),Rf(this._otherDetails,this._scope?r.keys():null)),this._diffKey=t}return this._diff}_renderSummary(t){let n=t.totals,r=t.versionUpdates.totals,o=r.baseDeps>0||r.otherDeps>0,i=r.otherDeps-r.baseDeps,s=cre(n.byteDelta,n.baseBytes);return p`<div class="bundle-compare-summary"><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Files</span> <span class="bundle-compare-metric-value">${n.baseFiles.toLocaleString()} → ${n.otherFiles.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${_w(n.fileDelta)}`}">${LE(n.fileDelta)}</span></div><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Size</span> <span class="bundle-compare-metric-value">${qe(n.baseBytes)} → ${qe(n.otherBytes)}</span> <span class="${`bundle-compare-metric-delta ${_w(n.byteDelta)}`}">${yz(n.byteDelta)}${s?p`${" "}<span class="bundle-compare-pct">(${s})</span>`:b}</span></div>${o?p`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Deps</span> <span class="bundle-compare-metric-value">${r.baseDeps.toLocaleString()} → ${r.otherDeps.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${_w(i)}`}">${LE(i)}</span></div>`:b}<div class="bundle-compare-chips"><span class="bundle-compare-chip removed">−${n.onlyBaseFiles.toLocaleString()} removed</span> <span class="bundle-compare-chip added">+${n.onlyOtherFiles.toLocaleString()} added</span> <span class="bundle-compare-chip changed">${n.changedFiles.toLocaleString()} changed</span> <span class="bundle-compare-chip unchanged">${n.unchangedFiles.toLocaleString()} unchanged</span> ${t.resolutions.totalChanges>0?p`<span class="bundle-compare-chip changed">${t.resolutions.totalChanges.toLocaleString()} repointed ${t.resolutions.totalChanges===1?"resolution":"resolutions"}</span>`:b}</div></div>`}_renderPicker(t,n){let r=this._nameFor(this.integrity);return p`<div class="bundle-compare-picker"><span class="bundle-compare-base" data-tooltip-truncated data-tooltip="${r}">${r}</span> <span class="bundle-compare-arrow" aria-hidden="true">→</span><div class="bundle-compare-select-wrap"><span class="bundle-compare-select-hint">Compare with</span><bundle-selector .bundles="${t}" .value="${this._targetIntegrity}" label="Bundle to compare with" placeholder="Choose a bundle…" @bundle-change="${o=>this._pick(o.detail.value)}"></bundle-selector>${n?p`<button type="button" class="bundle-compare-clear" aria-label="Clear comparison" @click="${()=>this._pick(null)}">×</button>`:b}</div>${n?p`<button type="button" class="bundle-compare-swap" @click="${()=>this._swap()}" aria-label="Swap the two bundles"><span class="bundle-compare-swap-icon" aria-hidden="true">↔</span>Swap</button>`:b}</div>`}_otherOptions(){let t=Hd(c.bundles??[],this.integrity),n=new Map;for(let r of t)n.set(r.name,(n.get(r.name)??0)+1);return t.map(r=>({id:r.integrity,integrity:r.integrity,kind:r.kind??(r.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis"),summary:r.summary,size:typeof r.size=="number"?qe(r.size):"\u2014",filename:n.get(r.name)>1?`${r.name} \xB7 ${r.integrity.slice(7,13)}\u2026`:r.name}))}render(){let t=this._otherOptions(),n=!!this._targetIntegrity&&t.some(a=>a.integrity===this._targetIntegrity),r=t.length>0?this._renderPicker(t,n):b,o=this._baseReady?$E(this.details,n?this._otherDetails:null):[],i=n&&this._status==="ready"&&this._otherDetails&&(this._otherDetails.json||this._otherDetails.bundle)&&!this._otherDetails.error,s;return this._baseReady?t.length===0?s=p`<div class="bundle-compare-empty">No other bundles to compare with. Drop a second <code>.map</code> or <code>.stasis.code.br</code> bundle to diff against this one.</div>`:n?this._status==="loading"||!this._otherDetails?s=p`<div class="bundle-compare-empty">Comparing…</div>`:this._otherDetails.error?s=p`<div class="bundle-compare-empty is-error">Couldn't read the selected bundle: ${this._otherDetails.error}</div>`:!this._otherDetails.json&&!this._otherDetails.bundle?s=p`<div class="bundle-compare-empty is-error">The selected bundle couldn't be parsed.</div>`:s=this._renderDiff():s=p`<div class="bundle-compare-empty">Pick a bundle above to compare against <strong>${this._nameFor(this.integrity)}</strong>.</div>`:s=p`<div class="bundle-compare-empty">Loading bundle…</div>`,p`<div class="bundle-compare"><header class="bundle-compare-head">${r} ${o.length>0?p`<bundle-scope-selector .reasons="${o}" .value="${this._scope}" label="Compare scope" @scope-change="${a=>{this._scope=a.detail.value}}"></bundle-scope-selector>`:b} ${this._baseReady&&i?this._renderSummary(this._diffFor()):b}</header><div class="bundle-compare-body">${s}</div></div>`}_renderDiff(){let t=this._diffFor(),n=this._nameFor(this._targetIntegrity),r=this._nameFor(this.integrity),o=[...t.files.onlyBase.map(u=>u.path),...t.files.onlyOther.map(u=>u.path),...t.files.changed.map(u=>u.path)],{prefix:i,stripped:s}=Ur(o),a=new Map;for(let u=0;u<o.length;u++)a.set(o[u],s[u]);let l=u=>a.get(u)??u,d=t.packages.onlyOther.length>0||t.packages.onlyBase.length>0||t.packages.changed.length>0;return p`<div class="bundle-compare-caption">Changes from <strong>${r}</strong> to <strong>${n}</strong> ${i?p`· <span class="mono">${i}</span>`:b}</div>${this._renderVersionUpdates(t.versionUpdates,r,n)} ${t.totals.identical?t.resolutions.totalChanges>0?p`<div class="bundle-compare-caption">File contents are unchanged; import resolutions differ.</div>`:p`<div class="bundle-compare-identical">These two bundles carry identical files (${t.totals.unchangedFiles.toLocaleString()} ${t.totals.unchangedFiles===1?"file":"files"}).</div>`:p`${d?p`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Packages</h3><div class="bundle-compare-cols">${this._pkgGroup(`Removed \xB7 only in ${r}`,t.packages.onlyBase,"removed")} ${this._pkgGroup(`Added \xB7 only in ${n}`,t.packages.onlyOther,"added")} ${this._pkgGroup("Changed size",t.packages.changed,"changed")}</div></section>`:b}<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Files</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._fileGroup(`Removed \xB7 only in ${r}`,t.files.onlyBase,"removed",l)} ${this._fileGroup(`Added \xB7 only in ${n}`,t.files.onlyOther,"added",l)} ${this._fileGroup("Changed",t.files.changed,"changed",l)}</div></section>`} ${this._renderResolutions(t.resolutions)}`}};customElements.define("bundle-compare",FE);P();nt();q();var BE=class extends ce{createRenderRoot(){return this}render(){return c.reports.length>0&&c.currentView==="findings"&&c.viewMode!=="graph"&&c.viewMode!=="kanban"?p`<button type="button" class="toolbar-export-btn" aria-label="Download or print report" @click="${this._onClick}">${yD}</button>`:b}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",BE);P();wt();P();nt();Os();var wa=class extends ce{static styles=Qe`.preview{position:fixed;inset:auto;margin:0;padding:14px;box-sizing:border-box;width:min(24rem,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--bg);color:var(--text);box-shadow:0 8px 28px #00000040;font:13px/1.45 system-ui,sans-serif;text-align:left;white-space:normal;overflow-wrap:anywhere;letter-spacing:normal;cursor:default}.preview.wide{width:min(36rem,calc(100vw - 24px))}@media print{.preview{display:none}}`;constructor(){super(),this.showTimer=null,this.hideTimer=null}connectedCallback(){super.connectedCallback(),Jn(this.renderRoot)}disconnectedCallback(){this._hidePreview(),super.disconnectedCallback()}updated(){let t=this.renderRoot.querySelector(".preview");t?t.matches(":popover-open")&&this._positionPreview():this._hidePreview()}_schedulePreview(){clearTimeout(this.hideTimer),clearTimeout(this.showTimer),this.renderRoot.querySelector(".preview")&&(this.showTimer=setTimeout(()=>{if(!this.isConnected)return;let t=this.renderRoot.querySelector(".preview");t&&(Bs(),t.showPopover(),this._positionPreview(),document.addEventListener("keydown",this._previewKeyDown,!0),window.addEventListener("scroll",this._previewScroll,!0),window.addEventListener("resize",this._hidePreview))},150))}_keepPreview(){clearTimeout(this.hideTimer)}_leavePreview(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>{this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)||this._hidePreview()},150)}_hidePreview=()=>{clearTimeout(this.showTimer),clearTimeout(this.hideTimer);let t=this.renderRoot?.querySelector(".preview");t?.matches(":popover-open")&&t.hidePopover(),document.removeEventListener("keydown",this._previewKeyDown,!0),window.removeEventListener("scroll",this._previewScroll,!0),window.removeEventListener("resize",this._hidePreview)};_previewKeyDown=t=>{t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)&&this.renderRoot.querySelector("[aria-details]").focus({preventScroll:!0}),this._hidePreview())};_previewScroll=t=>{t.composedPath().includes(this.renderRoot.querySelector(".preview"))||this._hidePreview()};_positionPreview(){let t=this.renderRoot.querySelector(".preview"),n=this.renderRoot.querySelector("[aria-details]").getBoundingClientRect(),{width:r,height:o}=t.getBoundingClientRect(),i=8,s=12,a=Math.max(s,Math.min(n.left,window.innerWidth-r-s)),l=n.bottom+i+o<=window.innerHeight-s?n.bottom+i:Math.max(s,n.top-i-o);t.style.left=`${a}px`,t.style.top=`${l}px`}};Le();xb();ef();jt();var OE={open:"Open",draft:"Draft",closed:"Closed",merged:"Merged",completed:"Completed",not_planned:"Not planned",duplicate:"Duplicate",unknown:"Closed"},dre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3" r="1.75"/><circle cx="4" cy="13" r="1.75"/><circle cx="12" cy="13" r="1.75"/><path d="M4 4.75v6.5M12 11.25V5a2 2 0 0 0-2-2H8m2-2L8 3l2 2"/></svg>`,ure=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,pre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m5 8 2 2 4-4"/></svg>`,fre=p`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m3.5 12.5 9-9"/></svg>`,hre={completed:pre,not_planned:fre},PE=class extends wa{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[wa.styles,Qe`:host{display:inline;word-break:normal}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere;cursor:default}.status{display:inline-flex;align-items:center;gap:.3em;vertical-align:text-bottom;margin-right:.35em;font-weight:600;white-space:nowrap}svg{flex:none}.open{color:light-dark(#1a7f37,#3fb950)}.draft,.not_planned,.duplicate,.unknown,.unavailable{color:var(--muted)}.closed{color:light-dark(#d1242f,#f85149)}.merged,.completed{color:light-dark(#8250df,#a371f7)}:host(:not([compact])){display:block}:host(:not([compact])) .fix-link{display:flex;align-items:center;gap:.55rem;min-width:0}.link-icon{flex:none;line-height:1}.link-icon svg{display:block}.link-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500;line-height:1.5}.link-icon.unavailable+.link-title{color:var(--accent)}.ref{min-width:0;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.74rem}.link-status{flex:none;padding:.15rem .4rem;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:.7rem;font-weight:500;line-height:1.3}:host([compact]){display:inline-flex}:host([compact]) .fix-link{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host([compact]) .fix-link svg{width:14px;height:14px}:host([compact]) .status{margin:0;font-size:1rem;line-height:1}.preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.preview-ref{display:inline-flex;align-items:center;gap:.4rem;min-width:0;color:var(--muted);font-size:12px;line-height:1.4}.preview-ref span{min-width:0}.preview-description{margin-top:8px;white-space:pre-wrap}.preview-title{margin-top:8px;font-size:15px;font-weight:600;line-height:1.4}.preview .preview-header .status{flex:none;margin:0;font-size:12px;line-height:1.4}@media print{:host(:not([compact])) .fix-link{display:block}.link-title,.ref{white-space:normal;overflow:visible;text-overflow:clip;max-width:none}.link-icon{display:inline-block;vertical-align:middle;margin-right:.55rem}.ref,.link-status{margin-left:.55rem}.preview{display:none}}`];constructor(){super(),this.url="",this.compact=!1,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this.unsubscribe=qM(()=>this.requestUpdate()),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,super.disconnectedCallback()}updated(t){t.has("url")||t.has("compact")?this._hidePreview():super.updated(t)}render(){if(!dt(this.url))return p`${this.url}`;let t=Jp(this.url),n=!t&&Xp(this.url),r=t||n,o=Qp.read(this.url);if(!o&&!r){let u=`Open fix link: ${this.url}`;return p`<a class="${this.compact?"fix-link":""}" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" data-tooltip="${this.compact?u:b}" aria-label="${u}">${this.compact?p`<slot></slot>`:this.url}</a>`}let i=o?n&&o.status==="closed"?o.stateReason??"unknown":o.status:"unavailable",s=t?dre:n?hre[i]??ure:null,a=r?`${r.repo}#${r.number}`:"",l=(o?.title.length??0)>40||(o?.description??"").split(/[\r\n]/u).some(u=>u.length>100),d=o?`${OE[i]} ${t?"pull request":"issue"}: ${o.title} (${a})`:r?`Open ${t?"pull request":"issue"}: ${a}`:`Open fix link: ${this.url}`;return p`<a class="fix-link" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${d}" aria-details="${this.compact&&r?"fix-preview":b}" data-tooltip="${this.compact&&!r?d:b}" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}">${this.compact?s?p`<span class="${`status ${i}`}">${s}</span>`:p`<slot></slot>`:p`${s?p`<span class="${`link-icon ${i}`}">${s}</span>`:b} <span class="link-title">${o?.title??(a||this.url)}</span> ${o?p`<span class="ref">${a}</span><span class="${`link-status ${i}`}">${OE[i]}</span>`:b}`} </a>${this.compact&&r?p`<a class="${l?"preview wide":"preview"}" id="fix-preview" popover="manual" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${`Open ${t?"pull request":"issue"} ${a} on GitHub`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${u=>{u.stopPropagation(),this._hidePreview()}}"><div class="preview-header"><span class="preview-ref">${te(br)}<span>${a}</span></span> <span class="${`status ${i}`}">${s}${o?OE[i]:t?"Pull request":"Issue"}</span></div>${o?p`<div class="preview-title">${o.title}</div>`:b} ${o?.description?p`<div class="preview-description">${o.description}</div>`:b}</a>`:b}`}};customElements.define("managed-fix-link",PE);P();q();Ed();Ly();Fy();ew();var NE=class extends wa{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[wa.styles,N(nu),Qe`:host{display:inline-flex}:host([hidden]){display:none!important}button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:default}.preview-trigger{display:inline-flex;align-items:center;justify-content:center;line-height:0}.preview-trigger:hover{color:var(--accent)}.managed-comment+.managed-comment{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.comment-body{white-space:pre-wrap}.comment-body a{color:var(--accent);text-decoration:none}.comment-body a:hover{text-decoration:underline}.preview-footer{display:flex;justify-content:flex-end;margin-top:8px}.edit-hint{color:var(--muted);font-size:12px}.edit-hint:hover{color:var(--accent)}`];constructor(){super(),this.finding=null,this.comment="",this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this._subscribe(),document.addEventListener("managed-comments-reset",this._resetComments),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,document.removeEventListener("managed-comments-reset",this._resetComments),super.disconnectedCallback()}updated(t){this.hidden=!this.renderRoot.querySelector(".preview"),t.has("finding")&&(this._hidePreview(),this._subscribe()),super.updated(t)}_subscribe(){this.unsubscribe?.(),this.unsubscribe=this.finding?.id?My(this.finding.id,()=>this.requestUpdate()):null}_resetComments=()=>{this._hidePreview(),this.requestUpdate()};_previewClick(t){if(t.target.closest("a, button")){this._hidePreview();return}window.getSelection?.()?.toString()||(t.stopPropagation(),this.renderRoot.querySelector(".preview-trigger").click())}render(){let t=A(),n=t?si(this.finding):[];if(!(t?n.length>0:!!this.comment))return b;let i=(t?n.map(s=>s.body):[this.comment]).some(s=>s.split(/[\r\n]/u).some(a=>a.length>100));return p`<button type="button" class="preview-trigger mark-comment" aria-label="${t?"View comments":"Edit comment"}" aria-details="comment-preview" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}"><slot></slot></button><div class="${i?"preview wide":"preview"}" id="comment-preview" popover="manual" role="region" aria-label="${t?"Comments":"Comment"}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${this._previewClick}">${t?n.map(s=>Rd(s,zi(s.body))):p`<div class="comment-body">${zi(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define("comment-preview",NE);q();co();ln();ui();P();q();Le();Le();hs();function kz(e){if(Ir(e))throw new Error("This is a links file, not a report. Wrap report rows in a groups or findings object to compare them.");let t=e;try{let a=JSON.parse(e);Array.isArray(a)&&(t=JSON.stringify({groups:a}))}catch{}let{data:n,reason:r}=Mr(t);if(!n)throw new Error(r);let o=[],i=new Map,s=0;for(let a of Mt(n)){let l=new Set;for(let d of Array.isArray(a)?a:[a])if(!(!d||typeof d!="object"||Array.isArray(d))){if(typeof d.id!="string"||!d.id){s++;continue}l.add(d.id),i.has(d.id)||i.set(d.id,[]),i.get(d.id).push(d)}o.push([...l].toSorted())}return{rows:o,byId:i,missingIds:s}}function mre(e){let t=new Set;for(let n of e){let r=[...new Set(n)].toSorted();for(let o=0;o<r.length;o++)for(let i=o+1;i<r.length;i++)t.add(JSON.stringify([r[o],r[i]]))}return t}function vz(e){let t=new Map,n=o=>{let i=o;for(;t.get(i)!==i;)t.set(i,t.get(t.get(i))),i=t.get(i);return i};for(let o of e){let[i,s]=JSON.parse(o);for(let a of[i,s])t.has(a)||t.set(a,a);t.set(n(i),n(s))}let r=new Map;for(let o of[...t.keys()].toSorted()){let i=n(o);r.has(i)||r.set(i,[]),r.get(i).push(o)}return[...r.values()].toSorted((o,i)=>o[0].localeCompare(i[0]))}function Qi(e,t,n){let r=(e.byId.get(t)??[]).map(o=>n==="verdict"?et(o)||null:n==="severity"?Rr(o)??null:n==="originalSeverity"?o.severity??null:n==="confidence"&&Number.isFinite(o.confidence)?o.confidence:null);return[...new Set(r)].toSorted((o,i)=>String(o).localeCompare(String(i),void 0,{numeric:!0}))}var wz=(e,t)=>e.length===t.length&&e.every((n,r)=>n===t[r]),Cw=(e,t)=>[...e].filter(n=>!t.has(n)).toSorted();function xz(e,t){let n=new Set(e.byId.keys()),r=new Set(t.byId.keys()),o=[...n].filter(g=>r.has(g)).toSorted(),i=new Set(o),s=g=>mre(g.rows.map(y=>y.filter(w=>i.has(w)))),a=s(e),l=s(t),d={confirmed:[],refuted:[],otherVerdicts:[],confidence:[],severity:[]};for(let g of o)for(let y of["verdict","confidence","severity"]){let w=Qi(e,g,y),x=Qi(t,g,y),v={id:g,before:w,after:x};if(y==="severity"&&(v.originalBefore=Qi(e,g,"originalSeverity"),v.originalAfter=Qi(t,g,"originalSeverity")),wz(w,x)&&(y!=="severity"||wz(v.originalBefore,v.originalAfter)))continue;if(y!=="verdict"){d[y].push(v);continue}let k=x.length===1&&x[0]==="confirmed"?"confirmed":x.length===1&&x[0]==="refuted"?"refuted":"otherVerdicts";d[k].push(v)}let u=vz(Cw(l,a)),f=vz(Cw(a,l)),h=Cw(r,n),m=Cw(n,r);return{before:e,after:t,added:h,removed:m,shared:o,joined:u,split:f,...d,unchanged:h.length===0&&m.length===0&&u.length===0&&f.length===0&&Object.values(d).every(g=>g.length===0)}}Ee();var $z=`dialog{width:min(94vw,1180px);max-width:1180px;height:min(88dvh,960px);max-height:92dvh;margin-block:auto;padding:0;overflow:hidden;background:var(--theme-bar)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.3rem}header h3{margin-bottom:.25rem;font-size:1.1rem}header p,.muted,.note,.empty{color:var(--muted);font-size:.78rem;line-height:1.5}button,select,input{font:inherit;font-size:.8rem}button,select,.file-button,.search{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.45rem .65rem}button:not(:disabled):hover,.file-button:hover{background:var(--surface-active)}button:disabled{opacity:.45}button:focus-visible,select:focus-visible,.search:focus-visible,.file-button:focus-within{outline:2px solid var(--accent);outline-offset:2px}.pickers{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:start;gap:1rem;padding:0 1.3rem 1rem;border-bottom:1px solid var(--border)}.picker{min-width:0}.picker>label{display:block;font-size:.72rem;font-weight:600;margin-bottom:.4rem;color:var(--muted)}.picker select{width:100%;text-overflow:ellipsis}.file-picker{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-top:.55rem}.file-button{position:relative;display:inline-block;font-size:.74rem;padding:.3rem .5rem;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;width:100%}.swap{align-self:start;margin-top:1.5rem;font-size:1rem}.results{overflow:auto;min-height:0;padding:1.1rem 1.3rem 1.4rem}.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem}.summary>div{display:flex;flex-direction:column;gap:.35rem;padding:.8rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 7px)}.summary span{font-size:.72rem;color:var(--muted)}.summary strong{font-size:1.15rem;font-variant-numeric:tabular-nums}.positive h4{color:var(--green)}.negative h4,.verdict-confirmed h4,.summary .verdict-confirmed strong{color:var(--critical)}.verdict-refuted h4,.summary .verdict-refuted strong{color:var(--muted)}.change-counts{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.7rem}.change-counts span{font-size:.7rem;padding:.3rem .5rem;border-radius:5px;background:var(--bg);color:var(--muted)}.results-head{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-block:1rem}.results-head p{flex:1;font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}.search{width:min(100%,17rem)}.section-title{margin:1.2rem 0 .5rem;font-size:.87rem}.note{margin:-.15rem 0 .6rem}.columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.change-section{border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden;margin-bottom:.6rem}.change-section h4{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.78rem;font-weight:600;padding:.65rem .8rem;background:var(--bg)}.count{font-variant-numeric:tabular-nums;font-size:.7rem}ul{list-style:none}li{border-top:1px solid var(--border);padding:.7rem .8rem}.change-row{display:flex;justify-content:space-between;align-items:start;gap:.8rem}.finding{display:flex;flex-direction:column;gap:.2rem;min-width:0;overflow-wrap:anywhere}.finding strong{font-size:.77rem;font-weight:500;line-height:1.4}.finding code,.finding small{color:var(--muted);font-size:.66rem;line-height:1.4}.change-value{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.3rem;max-width:48%;flex-shrink:0;font-size:.73rem;text-align:end;overflow-wrap:anywhere}.from{color:var(--muted)}.change-value small{width:100%;color:var(--muted);font-size:.67rem}.group-members{display:flex;flex-direction:column;gap:.55rem}.group-shape{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.7rem;font:.66rem/1.5 monospace;overflow-wrap:anywhere}.group-shape>span{min-width:0}.empty{padding:.7rem .8rem}.more{margin:.5rem .8rem .7rem;font-size:.72rem}.placeholder{padding:4rem 1rem;text-align:center;color:var(--muted);font-size:.85rem}.identical{color:var(--green);font-size:.82rem;padding-block:.5rem}.error,.warning{font-size:.75rem;line-height:1.5;margin-top:.5rem;overflow-wrap:anywhere}.error{color:var(--critical)}.warning{color:var(--medium)}dialog>.error{padding:0 1.3rem .6rem}@media(width<=650px){.pickers{gap:.5rem;padding-inline:.8rem}.columns{grid-template-columns:minmax(0,1fr);gap:0}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.summary>div{padding:.6rem}.results-head p{flex-basis:100%}.search{width:100%}header,.results{padding-inline:.8rem}.change-row{flex-wrap:wrap}.change-value{max-width:100%}}
|
|
475
475
|
`;var DE=()=>({key:"",name:"",report:null,error:"",loading:!1}),Zl=(e,t)=>e.map(n=>n===null?"Not supplied":t==="confidence"?`${n}/10`:String(n).replaceAll("_"," ")).join(" / "),zE=50,UE=class extends H{static styles=[...H.styles,N($z)];static properties={_names:{state:!0},_sides:{state:!0},_catalogError:{state:!0},_catalogLoading:{state:!0},_diff:{state:!0},_query:{state:!0},_limits:{state:!0}};constructor(){super(),this._names=[],this._sides=[DE(),DE()],this._tokens=[0,0],this._catalogError="",this._catalogLoading=!0,this._diff=null,this._query="",this._limits={}}beforeOpen(){this._loadCatalog()}focusInitial(){this.renderRoot.querySelector("select")?.focus()}async _loadCatalog(){try{let t=await Pe();if(this._settled)return;this._names=t.filter(o=>Lt(o)!==vt);let n=this._names.includes(c.currentFile)?c.currentFile:this._names[0];n&&!this._tokens[0]&&this._select(0,n);let r=this._names.find(o=>o!==n);r&&!this._tokens[1]&&this._select(1,r)}catch(t){this._settled||(this._catalogError=`Couldn't list saved reports: ${t.message}`)}finally{this._settled||(this._catalogLoading=!1)}}_setSide(t,n){this._sides=this._sides.map((i,s)=>s===t?n:i),this._limits={};let[r,o]=this._sides.map(i=>i.report);this._diff=r&&o?xz(r,o):null}async _select(t,n,r){let o=++this._tokens[t],i={...DE(),key:r?"":n,name:n,loading:!!n};if(this._setSide(t,i),!!n)try{let s=r?await r.text():await ot(n);if(this._settled||this._tokens[t]!==o)return;this._setSide(t,{...i,loading:!1,report:kz(s)})}catch(s){!this._settled&&this._tokens[t]===o&&this._setSide(t,{...i,loading:!1,error:`Couldn't read ${n}: ${s.message}`})}}_file(t,n){let r=n.target.files?.[0];n.target.value="",r&&this._select(t,r.name,r)}_swap(){this._sides.some(t=>t.loading)||(this._tokens=this._tokens.map(t=>t+1),this._sides=this._sides.toReversed(),this._setSide(0,this._sides[0]))}_picker(t){let n=this._sides[t],r=t===0?"Before":"After";return p`<section class="picker"><label for="${`report-${t}`}">${r}</label> <select id="${`report-${t}`}" @change="${o=>this._select(t,o.target.value)}"><option value="" .selected="${!n.key}">${n.name&&!n.key?n.name:"Choose a saved report\u2026"}</option>${this._names.map(o=>p`<option value="${o}" .selected="${n.key===o}">${o}</option>`)}</select><div class="file-picker"><label class="file-button">Open file…<input type="file" accept=".json,.md,.markdown" aria-label="${`Open ${r.toLowerCase()} report file`}" @change="${o=>this._file(t,o)}"></label> <span class="muted">${n.loading?"Reading report\u2026":n.report?`${n.report.byId.size.toLocaleString()} unique findings`:"JSON or Markdown"}</span></div>${n.error?p`<p class="error" role="alert">${n.error}</p>`:b} ${n.report?.missingIds?p`<p class="warning">${n.report.missingIds} findings without an id excluded.</p>`:b}</section>`}_finding(t){let n=this._diff.after.byId.get(t)?.[0]??this._diff.before.byId.get(t)?.[0];return p`<span class="finding"><strong>${yt(n)||t}</strong><code>${t}</code>${n.file?p`<small>${n.file}</small>`:b}</span>`}_matches(t){let n=this._query.trim().toLowerCase();if(!n)return!0;let r=[...this._diff.before.byId.get(t)??[],...this._diff.after.byId.get(t)??[]];return[t,...r.flatMap(o=>[yt(o),o.file])].filter(Boolean).some(o=>o.toLowerCase().includes(n))}_section(t,n,r,o,i=""){let s=r.filter(l=>(Array.isArray(l)?l:[l.id??l]).some(d=>this._matches(d))),a=this._limits[t]??zE;return p`<section class="${`change-section ${i}`}" aria-label="${n}"><h4>${n}<span class="count">${this._query.trim()?`${s.length} / `:""}${r.length}</span></h4>${s.length>0?p`<ul>${s.slice(0,a).map(o)}</ul>`:p`<p class="empty">${r.length>0?"No matching findings.":"No changes."}</p>`} ${s.length>a?p`<button class="more" @click="${()=>{this._limits={...this._limits,[t]:a+zE}}}">Show ${Math.min(zE,s.length-a)} more (${s.length-a} remaining)</button>`:b}</section>`}_changeRow(t,n){let r=n==="severity"&&JSON.stringify(t.originalBefore)!==JSON.stringify(t.originalAfter);return p`<li class="change-row">${this._finding(t.id)}<span class="change-value"> <span class="from">${Zl(t.before,n)}</span><span aria-label="to">→</span><span>${Zl(t.after,n)}</span> ${r?p`<small>Original: ${Zl(t.originalBefore)} → ${Zl(t.originalAfter)}</small>`:b}</span></li>`}_presenceRow(t,n){let r=Zl(Qi(n,t,"verdict"));return p`<li class="change-row">${this._finding(t)}<span class="change-value"> <span>${Zl(Qi(n,t,"severity"))}</span><span>${Zl(Qi(n,t,"confidence"),"confidence")}</span> ${r==="Not supplied"?b:p`<small>${r}</small>`}</span></li>`}_groupRow(t){let n=new Set(t),r=o=>o.rows.map(i=>i.filter(s=>n.has(s))).filter(i=>i.length).map(i=>i.join(", ")).filter((i,s,a)=>a.indexOf(i)===s).join(" | ");return p`<li class="group-row"><div class="group-members">${t.map(o=>this._finding(o))}</div><div class="group-shape"><span class="from">${r(this._diff.before)}</span><span aria-label="to">→</span><span>${r(this._diff.after)}</span></div></li>`}_verdictCount(t,n){return[...t.byId.keys()].filter(r=>Qi(t,r,"verdict").includes(n)).length}_results(){let t=this._diff;return t?p`<div class="summary" aria-label="Comparison summary"><div><span>Unique findings</span><strong>${t.before.byId.size} → ${t.after.byId.size}</strong></div><div><span>In common</span><strong>${t.shared.length}</strong></div><div class="verdict-confirmed"><span>Confirmed</span><strong>${this._verdictCount(t.before,"confirmed")} → ${this._verdictCount(t.after,"confirmed")}</strong></div><div class="verdict-refuted"><span>Refuted</span><strong>${this._verdictCount(t.before,"refuted")} → ${this._verdictCount(t.after,"refuted")}</strong></div></div><div class="change-counts" aria-label="Change counts"><span>${t.added.length} added</span><span>${t.removed.length} removed</span> <span>${t.joined.length} joined</span><span>${t.split.length} split</span> <span>${t.confidence.length} confidence</span><span>${t.severity.length} severity</span></div><div class="results-head"><p>Changes from <strong>${this._sides[0].name}</strong> to <strong>${this._sides[1].name}</strong>.</p><input class="search" type="search" aria-label="Filter comparison findings" placeholder="Filter by id, title or file…" .value="${this._query}" @input="${n=>{this._query=n.target.value,this._limits={}}}"></div>${t.shared.length===0&&(t.before.missingIds||t.after.missingIds)?p`<p class="warning" role="status">No shared ids to compare. Findings without ids cannot be matched.</p>`:t.unchanged?p`<p class="identical" role="status">No differences in finding ids, grouping, verdicts, confidence or severity.</p>`:b}<h3 class="section-title">Findings</h3><div class="columns">${this._section("added","Added",t.added,n=>this._presenceRow(n,t.after),"positive")} ${this._section("removed","Removed",t.removed,n=>this._presenceRow(n,t.before),"negative")}</div><h3 class="section-title">Revalidation</h3><p class="note">Changed verdicts for shared ids, grouped by the after report’s verdict.</p><div class="columns">${this._section("confirmed","Confirmed",t.confirmed,n=>this._changeRow(n,"verdict"),"verdict-confirmed")} ${this._section("refuted","Refuted",t.refuted,n=>this._changeRow(n,"verdict"),"verdict-refuted")}</div>${t.otherVerdicts.length>0?this._section("other","Other verdict changes",t.otherVerdicts,n=>this._changeRow(n,"verdict")):b}<h3 class="section-title">Grouping</h3><p class="note">Only shared ids. Each cluster connects changed pairs; added or removed findings do not count as regrouping.</p><div class="columns">${this._section("joined","Joined",t.joined,n=>this._groupRow(n),"positive")} ${this._section("split","Split",t.split,n=>this._groupRow(n),"negative")}</div><h3 class="section-title">Ratings</h3><p class="note">Shared ids only. Severity includes report corrections; changes to original severity are also shown.</p><div class="columns">${this._section("confidence","Confidence changes",t.confidence,n=>this._changeRow(n,"confidence"))} ${this._section("severity","Severity changes",t.severity,n=>this._changeRow(n,"severity"))}</div>`:p`<p class="placeholder" role="status">${this._sides.some(n=>n.loading)||this._catalogLoading?"Loading reports\u2026":"Choose two saved reports or open two files to compare."}</p>`}render(){return p`<dialog aria-labelledby="compare-title" @close="${this._onClose}"><header><div><h3 id="compare-title">Compare reports</h3><p>Compare findings, grouping and ratings between two reports.</p></div><button aria-label="Close report comparison" @click="${this._onClose}">Close</button></header><div class="pickers">${this._picker(0)}<button class="swap" aria-label="Swap before and after reports" ?disabled="${this._sides.some(t=>t.loading)}" @click="${this._swap}">⇄</button>${this._picker(1)}</div>${this._catalogError?p`<p class="error" role="alert">${this._catalogError} You can still open files directly.</p>`:b}<div class="results">${this._results()}</div></dialog>`}};customElements.define("report-compare-dialog",UE);function Sz(){if(A())throw new Error("Report comparison is available in local/E2E mode.");return ge("report-compare-dialog")}Ht();function Mh(e){let t=new Map;for(let[n,r]of c.triage)r[e]&&t.set(n,r[e]);return t}var bre={get markers(){return Mh("color")},get triageState(){return Mh("triage")},get comments(){return Mh("comment")},get fixes(){return Mh("fix")},get flags(){return Mh("flagged")},get(e){let t=c.triage.get(e),n={};return t?.color&&(n.color=t.color),t?.triage&&(n.triage=t.triage),t?.comment&&(n.comment=t.comment),t?.fix&&(n.fix=t.fix),t?.flagged!==void 0&&(n.flagged=t.flagged),n},async set(e,{color:t,triage:n,comment:r,fix:o,flagged:i}={}){let s=!1;if(t!==void 0&&(t===null||t===""?ie(c.triage,e,{color:void 0})&&(s=!0):c.triage.get(e)?.color!==t&&(ie(c.triage,e,{color:t}),s=!0)),n!==void 0)if(n===null||n===""||n===!1)ie(c.triage,e,{triage:void 0})&&(s=!0);else if(n==="inprogress"||n==="fixed"||n==="invalid"||n==="deleted"||n==="ignored")c.triage.get(e)?.triage!==n&&(ie(c.triage,e,{triage:n}),s=!0);else throw new TypeError(`DeepView.triage.set: unknown triage value ${JSON.stringify(n)} (expected 'inprogress' | 'fixed' | 'invalid' | 'deleted' | 'ignored' | null)`);if(r!==void 0){let a=r?String(r):"";a?c.triage.get(e)?.comment!==a&&(ie(c.triage,e,{comment:a}),s=!0):ie(c.triage,e,{comment:void 0})&&(s=!0)}if(o!==void 0){let a=o?String(o):"";a?c.triage.get(e)?.fix!==a&&(ie(c.triage,e,{fix:a}),s=!0):ie(c.triage,e,{fix:void 0})&&(s=!0)}if(i!==void 0){let a=i===null||i===""?void 0:!!i;c.triage.get(e)?.flagged!==a&&(ie(c.triage,e,{flagged:a}),s=!0)}return s&&(await We(),F()),s}};window.DeepView={get reports(){return c.reports.slice()},get groups(){return kr()},get findings(){return kr().flat()},get currentFile(){return c.currentFile},get currentWorkspace(){return c.currentWorkspace},triage:bre,forceManagedMode:aD,setTheme:y9,get theme(){return v9()},triageSync:me,refresh(){F()},export(){return R9()},compareReports(){return Sz()}};fS();uo();jt();var yre={default:Ze.default,"claude-security":Ze["claude-security"],"codex-security":Ze["codex-security"],deepsec:Ze.deepsec,piolium:Ze.piolium,"markdown-generic":Ze["markdown-generic"],bundle:Yn,workspace:Ls,links:ld,github:br};for(let e of document.querySelectorAll(".drop-supported-icon[data-icon]")){let t=yre[e.dataset.icon];t&&(e.innerHTML=t)}kv();LM(F);ck(F);IM(F);me.onStatusChange(F);MM(async(e,t)=>{c.currentWorkspace===e?await Nn(e):c.currentFile&&c.currentFile===t?await Dn(t):await se()});AM(async()=>{await se(),c.currentView==="bundles"&&F()});cD();uD();async function Ez(){let e=Hx();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t;try{t=await fD({encoded:e})}catch(r){return alert(`Couldn't open the share-link unlock prompt: ${r.message}`),!1}if(!t)return!1;let n=await U1({id:t.id,name:t.name,privateKey:t.privateKeyBase64});if(n.status==="already-attached")return alert(`This workspace is already attached as "${n.workspace.name}".`),!1;if(n.status==="name-collision"){let r=n.existing?.name;return alert(r?`A workspace named "${r}" already exists. Open the share link again and pick a different name.`:"The shared workspace name is empty or invalid. Ask the sender to re-share with a real name."),!1}return n.workspace?.id?await Nn(n.workspace.id):await se(),!0}async function Rz(){let e=ps();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t=await U5(e);return t.ok?!0:(alert(t.reason),!1)}var cu=!1;async function Tz(){if(await Qt(),!cu&&!(!A()&&De()&&!Vn())){cu=!0;try{await vre()}finally{mt.hidden=!1}}}async function vre(){let e=it(),t=()=>e===it()&&!A();if(A()){await se();return}if(await Fo(),!t()||(yp(),await Promise.all([se(),bg().catch(i=>console.warn("initial linked findings:",i))]),!t())||await Ez()||!t()||await Rz()||!t())return;let o=lt(Hi);if(o)if(o.startsWith("wbs:")||o.startsWith("wrs:"))await Ud(o.slice(4),o.startsWith("wrs:")?"reports":"bundles");else if(o.startsWith("ws:")){let i=o.slice(3);de().some(s=>s.id===i)&&await Nn(i)}else if(o.startsWith("b:")){let i=o.slice(2),s=i.indexOf(" "),a=s>=0?i.slice(0,s):i,l=s>=0?i.slice(s+1):"",d=Oo.has(l)?l:"overview";(c.bundles??[]).some(u=>u.integrity===a)&&(ho(a,d),F(),oi(a),await se())}else{let i=await Pe();if(!t())return;let s=kg(o);s&&i.includes(s.name)&&await Dn(s.name,void 0,{workspaceId:s.workspaceId})}}var Ew=!1,_z=!1;document.addEventListener("managed-client-mode-change",()=>{Ew=!A()&&De()});function Cz(e){_z||(_z=!0,queueMicrotask(()=>{alert(e+" This tab will reload to refresh its state. Any unsaved edits in this tab will be lost."),location.reload()}))}At(async()=>{if(await Qt(),A()){F();return}let e=Ew,t=De();if(Ew=t,F(),!cu&&Vn()){Tz().catch(n=>console.warn("continueBoot:",n));return}if(cu&&t&&!Vn()){Cz("Encryption was just enabled in another tab.");return}cu&&e&&!t&&!T0()&&Cz("Encryption was disabled in another tab.")});window.addEventListener("hashchange",()=>{!cu||A()||(async()=>{await Ez()||await Rz()})().catch(e=>console.warn("deep-link hashchange:",e))});(async()=>{if(!await pD()){await Qt(),Ew=!A()&&De();try{let e=window.matchMedia?.("(display-mode: window-controls-overlay)").matches;if(!e&&!A()&&localStorage.getItem("deepview.sidebarCollapsed")==="1"&&I6.classList.add("collapsed"),window.matchMedia?.("(display-mode: standalone)").matches||e){let n=document.querySelector('meta[name="viewport"]');n&&n.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"),window.addEventListener("wheel",r=>{(r.ctrlKey||r.metaKey)&&r.preventDefault()},{passive:!1}),window.addEventListener("keydown",r=>{(r.ctrlKey||r.metaKey)&&(r.key==="="||r.key==="+"||r.key==="-"||r.key==="0")&&r.preventDefault()})}}catch{}!A()&&De()&&!Vn()||await Tz()}})();
|
|
476
476
|
/*!
|
|
477
477
|
* PHP elephant adapted from Material Icon Theme:
|