bugstash 0.1.25 → 0.1.26

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/dist/index.cjs CHANGED
@@ -1,19 +1,19 @@
1
- "use strict";var cn=Object.defineProperty;var Ms=Object.getOwnPropertyDescriptor;var As=Object.getOwnPropertyNames;var Rs=Object.prototype.hasOwnProperty;var zs=(e,t)=>{for(var n in t)cn(e,n,{get:t[n],enumerable:!0})},Is=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of As(t))!Rs.call(e,s)&&s!==n&&cn(e,s,{get:()=>t[s],enumerable:!(r=Ms(t,s))||r.enumerable});return e};var Hs=e=>Is(cn({},"__esModule",{value:!0}),e);var wi={};zs(wi,{BugStash:()=>Ss,default:()=>xi});module.exports=Hs(wi);var Ge=[],Wn=50,Qe=null,Ze=null,et=null,tt=null;function Pt(e){if(e.id)return`#${e.id}`;let t=e.tagName.toLowerCase(),n=e.className&&typeof e.className=="string"?"."+e.className.trim().split(/\s+/).slice(0,2).join("."):"",r=(e.textContent||"").trim().slice(0,30),s=r?` "${r}"`:"";return`${t}${n}${s}`}function V(e){Ge.push(e),Ge.length>Wn&&Ge.shift()}function Xn(e){e&&(Wn=e),Qe=n=>{let r=n.target;!r||!r.tagName||V({type:"click",category:"ui",message:`Clicked ${Pt(r)}`,timestamp:Date.now(),data:{x:n.clientX,y:n.clientY,selector:Pt(r)}})},document.addEventListener("click",Qe,!0);let t=new WeakMap;Ze=n=>{let r=n.target;if(!r||!r.tagName)return;let s=r.tagName.toLowerCase();if(s!=="input"&&s!=="textarea"&&s!=="select")return;let o=t.get(r);o&&clearTimeout(o),t.set(r,window.setTimeout(()=>{let a=r instanceof HTMLInputElement&&r.type==="password";V({type:"input",category:"ui",message:`Input ${Pt(r)}`,timestamp:Date.now(),data:{selector:Pt(r),value:a?"[redacted]":void 0}})},300))},document.addEventListener("input",Ze,!0),et=()=>{V({type:"navigation",category:"navigation",message:`Navigated to ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("popstate",et),tt=()=>{V({type:"navigation",category:"navigation",message:`Hash changed to ${window.location.hash}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("hashchange",tt),V({type:"navigation",category:"navigation",message:`Page loaded: ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})}function $e(){return[...Ge]}function Yn(){Ge=[]}function Vn(){Qe&&document.removeEventListener("click",Qe,!0),Ze&&document.removeEventListener("input",Ze,!0),et&&window.removeEventListener("popstate",et),tt&&window.removeEventListener("hashchange",tt),Qe=null,Ze=null,et=null,tt=null}var dn="[REDACTED]",Bs=[[/\b(?:\d[ -]*?){13,19}\b/g,"[CC_REDACTED]"],[/\b\d{3}-\d{2}-\d{4}\b/g,"[SSN_REDACTED]"],[/Bearer\s+[A-Za-z0-9\-._~+/]+=*/g,"Bearer [TOKEN_REDACTED]"],[/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,"[JWT_REDACTED]"],[/(?:api[_-]?key|apikey|secret|token|password|passwd|authorization)['":\s=]+['"]?([A-Za-z0-9\-._~+/]{20,})['"]?/gi,e=>{let t=e.search(/[=:]/);return e.slice(0,t+1)+" "+dn}],[/AKIA[0-9A-Z]{16}/g,"[AWS_KEY_REDACTED]"],[/"(?:password|passwd|secret|token|access_token|refresh_token|api_key|apiKey|private_key)":\s*"[^"]*"/gi,e=>{let t=e.indexOf(":");return e.slice(0,t+1)+' "'+dn+'"'}]];function Me(e){let t=e;for(let[n,r]of Bs)t=t.replace(n,r);return t}function Jn(e){return e.map(Me)}function Ct(e){if(typeof e=="string")return Me(e);if(Array.isArray(e))return e.map(Ct);if(e&&typeof e=="object"){let t={};for(let[n,r]of Object.entries(e)){let s=n.toLowerCase();s.includes("password")||s.includes("secret")||s.includes("token")||s.includes("apikey")||s.includes("api_key")||s.includes("private")?t[n]=dn:t[n]=Ct(r)}return t}return e}var Tt={log:console.log,warn:console.warn,error:console.error,debug:console.debug,info:console.info},nt=[],Kn=50;function Ds(e){return e.map(t=>{if(t instanceof Error)return`${t.name}: ${t.message}
2
- ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{return String(t)}return String(t)})}function Os(e,t){let n={level:e,args:Jn(Ds(t)),timestamp:Date.now()};e==="error"&&(n.stack=new Error().stack?.split(`
1
+ "use strict";var pn=Object.defineProperty;var Bs=Object.getOwnPropertyDescriptor;var Os=Object.getOwnPropertyNames;var Ns=Object.prototype.hasOwnProperty;var js=(t,e)=>{for(var n in e)pn(t,n,{get:e[n],enumerable:!0})},qs=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Os(e))!Ns.call(t,s)&&s!==n&&pn(t,s,{get:()=>e[s],enumerable:!(r=Bs(e,s))||r.enumerable});return t};var Us=t=>qs(pn({},"__esModule",{value:!0}),t);var Mi={};js(Mi,{BugStash:()=>Rs,default:()=>$i});module.exports=Us(Mi);var ne=[],Jn=50,re=null,se=null,oe=null,ie=null;function $e(t){if(t.id)return`#${t.id}`;let e=t.tagName.toLowerCase(),n=t.className&&typeof t.className=="string"?"."+t.className.trim().split(/\s+/).slice(0,2).join("."):"",r=(t.textContent||"").trim().slice(0,30),s=r?` "${r}"`:"";return`${e}${n}${s}`}function V(t){ne.push(t),ne.length>Jn&&ne.shift()}function Kn(t){t&&(Jn=t),re=n=>{let r=n.target;!r||!r.tagName||V({type:"click",category:"ui",message:`Clicked ${$e(r)}`,timestamp:Date.now(),data:{x:n.clientX,y:n.clientY,selector:$e(r)}})},document.addEventListener("click",re,!0);let e=new WeakMap;se=n=>{let r=n.target;if(!r||!r.tagName)return;let s=r.tagName.toLowerCase();if(s!=="input"&&s!=="textarea"&&s!=="select")return;let o=e.get(r);o&&clearTimeout(o),e.set(r,window.setTimeout(()=>{let i=r instanceof HTMLInputElement&&r.type==="password";V({type:"input",category:"ui",message:`Input ${$e(r)}`,timestamp:Date.now(),data:{selector:$e(r),value:i?"[redacted]":void 0}})},300))},document.addEventListener("input",se,!0),oe=()=>{V({type:"navigation",category:"navigation",message:`Navigated to ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("popstate",oe),ie=()=>{V({type:"navigation",category:"navigation",message:`Hash changed to ${window.location.hash}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("hashchange",ie),V({type:"navigation",category:"navigation",message:`Page loaded: ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})}function zt(){return[...ne]}function Gn(){ne=[]}function Qn(){re&&document.removeEventListener("click",re,!0),se&&document.removeEventListener("input",se,!0),oe&&window.removeEventListener("popstate",oe),ie&&window.removeEventListener("hashchange",ie),re=null,se=null,oe=null,ie=null}var bn="[REDACTED]",Fs=[[/\b(?:\d[ -]*?){13,19}\b/g,"[CC_REDACTED]"],[/\b\d{3}-\d{2}-\d{4}\b/g,"[SSN_REDACTED]"],[/Bearer\s+[A-Za-z0-9\-._~+/]+=*/g,"Bearer [TOKEN_REDACTED]"],[/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,"[JWT_REDACTED]"],[/(?:api[_-]?key|apikey|secret|token|password|passwd|authorization)['":\s=]+['"]?([A-Za-z0-9\-._~+/]{20,})['"]?/gi,t=>{let e=t.search(/[=:]/);return t.slice(0,e+1)+" "+bn}],[/AKIA[0-9A-Z]{16}/g,"[AWS_KEY_REDACTED]"],[/"(?:password|passwd|secret|token|access_token|refresh_token|api_key|apiKey|private_key)":\s*"[^"]*"/gi,t=>{let e=t.indexOf(":");return t.slice(0,e+1)+' "'+bn+'"'}]];function It(t){let e=t;for(let[n,r]of Fs)e=e.replace(n,r);return e}function Zn(t){return t.map(It)}function Me(t){if(typeof t=="string")return It(t);if(Array.isArray(t))return t.map(Me);if(t&&typeof t=="object"){let e={};for(let[n,r]of Object.entries(t)){let s=n.toLowerCase();s.includes("password")||s.includes("secret")||s.includes("token")||s.includes("apikey")||s.includes("api_key")||s.includes("private")?e[n]=bn:e[n]=Me(r)}return e}return t}var Ae={log:console.log,warn:console.warn,error:console.error,debug:console.debug,info:console.info},ae=[],tr=50;function _s(t){return t.map(e=>{if(e instanceof Error)return`${e.name}: ${e.message}
2
+ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)})}function Ws(t,e){let n={level:t,args:Zn(_s(e)),timestamp:Date.now()};t==="error"&&(n.stack=new Error().stack?.split(`
3
3
  `).slice(2).join(`
4
- `)),nt.push(n),nt.length>Kn&&nt.shift(),V({type:"console",category:`console.${e}`,message:n.args.join(" ").slice(0,200),timestamp:n.timestamp})}function Gn(e){e&&(Kn=e);for(let t of Object.keys(Tt))console[t]=function(...n){Os(t,n),Tt[t].apply(console,n)}}function de(){return[...nt]}function Qn(){nt=[]}function Zn(){for(let e of Object.keys(Tt))console[e]=Tt[e]}var Ae=[],er=50,$t,Mt,At;function pn(e){Ae.push(e),Ae.length>er&&Ae.shift(),V({type:"network",category:e.failed?"network.error":"network.ok",message:`${e.method} ${e.url} \u2192 ${e.status} (${e.duration}ms)`,timestamp:e.timestamp,data:{status:e.status,duration:e.duration}})}function tr(e){try{let t=new URL(e,window.location.origin),n=new URLSearchParams(t.search);for(let s of n.keys()){let o=s.toLowerCase();(o.includes("token")||o.includes("key")||o.includes("secret")||o.includes("password")||o.includes("auth"))&&n.set(s,"[REDACTED]")}let r=n.toString();return t.pathname+(r?"?"+r:"")}catch{return Me(e)}}function Ns(){$t=window.fetch,window.fetch=async function(e,t){let n=t?.method?.toUpperCase()??"GET",r=typeof e=="string"?e:e instanceof URL?e.href:e.url,s=tr(r),o=Date.now();try{let a=await $t.call(window,e,t);return pn({method:n,url:s,status:a.status,statusText:a.statusText,duration:Date.now()-o,responseType:a.headers.get("content-type")??void 0,timestamp:o,failed:a.status>=400}),a}catch(a){throw pn({method:n,url:s,status:0,statusText:"Network Error",duration:Date.now()-o,timestamp:o,failed:!0}),a}}}function js(){Mt=XMLHttpRequest.prototype.open,At=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=function(e,t,...n){return this.__bs_method=e.toUpperCase(),this.__bs_url=tr(typeof t=="string"?t:t.href),Mt.apply(this,[e,t,...n])},XMLHttpRequest.prototype.send=function(e){let t=Date.now();return this.addEventListener("loadend",function(){pn({method:this.__bs_method??"GET",url:this.__bs_url??"",status:this.status,statusText:this.statusText,duration:Date.now()-t,responseType:this.getResponseHeader("content-type")??void 0,timestamp:t,failed:this.status>=400||this.status===0})}),At.call(this,e)}}function nr(e){e&&(er=e),Ns(),js()}function Re(){return[...Ae]}function ge(){return Ae.filter(e=>e.failed)}function rr(){Ae=[]}function sr(){$t&&(window.fetch=$t),Mt&&(XMLHttpRequest.prototype.open=Mt),At&&(XMLHttpRequest.prototype.send=At)}var Rt=[],rt=null,st=null;function or(){rt=e=>{let t={message:e.message||"Unknown error",source:e.filename,lineno:e.lineno,colno:e.colno,stack:e.error?.stack,type:"error",timestamp:Date.now()};Rt.push(t),V({type:"error",category:"exception",message:t.message,timestamp:t.timestamp,data:{source:t.source,lineno:t.lineno}})},st=e=>{let t=e.reason,n=t instanceof Error?t.message:typeof t=="string"?t:"Unhandled promise rejection",r={message:n,stack:t instanceof Error?t.stack:void 0,type:"unhandledrejection",timestamp:Date.now()};Rt.push(r),V({type:"error",category:"promise",message:n,timestamp:r.timestamp})},window.addEventListener("error",rt),window.addEventListener("unhandledrejection",st)}function pe(){return[...Rt]}function ir(){Rt=[]}function ar(){rt&&window.removeEventListener("error",rt),st&&window.removeEventListener("unhandledrejection",st),rt=null,st=null}var z=null,zt=null,It=null,Ht=null;function lr(){if(z={timestamp:Date.now()},performance.getEntriesByType){let e=()=>{let[t]=performance.getEntriesByType("navigation");t&&z&&(z.pageLoadTime=Math.round(t.loadEventEnd-t.startTime),z.domContentLoaded=Math.round(t.domContentLoadedEventEnd-t.startTime));let n=performance.getEntriesByType("paint");for(let s of n)s.name==="first-paint"&&z&&(z.firstPaint=Math.round(s.startTime)),s.name==="first-contentful-paint"&&z&&(z.firstContentfulPaint=Math.round(s.startTime));z&&(z.resourceCount=performance.getEntriesByType("resource").length);let r=performance.memory;r&&z&&(z.memoryUsage={usedJSHeapSize:r.usedJSHeapSize,totalJSHeapSize:r.totalJSHeapSize})};document.readyState==="complete"?setTimeout(e,0):window.addEventListener("load",()=>setTimeout(e,100))}if(typeof PerformanceObserver<"u"){try{zt=new PerformanceObserver(e=>{let t=e.getEntries(),n=t[t.length-1];n&&z&&(z.largestContentfulPaint=Math.round(n.startTime))}),zt.observe({type:"largest-contentful-paint",buffered:!0})}catch{}try{let e=0;It=new PerformanceObserver(t=>{for(let n of t.getEntries())n.hadRecentInput||(e+=n.value);z&&(z.cumulativeLayoutShift=Math.round(e*1e3)/1e3)}),It.observe({type:"layout-shift",buffered:!0})}catch{}try{Ht=new PerformanceObserver(e=>{let[t]=e.getEntries();t&&z&&(z.firstInputDelay=Math.round(t.processingStart-t.startTime))}),Ht.observe({type:"first-input",buffered:!0})}catch{}}}function ze(){return z&&(z.timestamp=Date.now()),z?{...z}:null}function cr(){zt?.disconnect(),It?.disconnect(),Ht?.disconnect(),zt=null,It=null,Ht=null,z=null}function dr(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;let n=document.implementation.createHTMLDocument(),r=n.createElement("base"),s=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(s),t&&(r.href=t),s.href=e,s.href}var pr=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function ne(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var Ie=null;function Dt(e={}){return Ie||(e.includeStyleProperties?(Ie=e.includeStyleProperties,Ie):(Ie=ne(window.getComputedStyle(document.documentElement)),Ie))}function Bt(e,t){let r=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function qs(e){let t=Bt(e,"border-left-width"),n=Bt(e,"border-right-width");return e.clientWidth+t+n}function Fs(e){let t=Bt(e,"border-top-width"),n=Bt(e,"border-bottom-width");return e.clientHeight+t+n}function un(e,t={}){let n=t.width||qs(e),r=t.height||Fs(e);return{width:n,height:r}}function ur(){let e,t;try{t=process}catch{}let n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}var G=16384;function br(e){(e.width>G||e.height>G)&&(e.width>G&&e.height>G?e.width>e.height?(e.height*=G/e.width,e.width=G):(e.width*=G/e.height,e.height=G):e.width>G?(e.height*=G/e.width,e.width=G):(e.width*=G/e.height,e.height=G))}function He(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=e})}async function Us(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function mr(e,t,n){let r="http://www.w3.org/2000/svg",s=document.createElementNS(r,"svg"),o=document.createElementNS(r,"foreignObject");return s.setAttribute("width",`${t}`),s.setAttribute("height",`${n}`),s.setAttribute("viewBox",`0 0 ${t} ${n}`),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("externalResourcesRequired","true"),s.appendChild(o),o.appendChild(e),Us(s)}var W=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||W(n,t)};function _s(e){let t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function Ws(e,t){return Dt(t).map(n=>{let r=e.getPropertyValue(n),s=e.getPropertyPriority(n);return`${n}: ${r}${s?" !important":""};`}).join(" ")}function Xs(e,t,n,r){let s=`.${e}:${t}`,o=n.cssText?_s(n):Ws(n,r);return document.createTextNode(`${s}{${o}}`)}function fr(e,t,n,r){let s=window.getComputedStyle(e,n),o=s.getPropertyValue("content");if(o===""||o==="none")return;let a=pr();try{t.className=`${t.className} ${a}`}catch{return}let i=document.createElement("style");i.appendChild(Xs(a,n,s,r)),t.appendChild(i)}function gr(e,t,n){fr(e,t,":before",n),fr(e,t,":after",n)}var hr="application/font-woff",yr="image/jpeg",Ys={woff:hr,woff2:hr,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:yr,jpeg:yr,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Vs(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function Be(e){let t=Vs(e).toLowerCase();return Ys[t]||""}function Js(e){return e.split(/,/)[1]}function ot(e){return e.search(/^(data:)/)!==-1}function mn(e,t){return`data:${t};base64,${e}`}async function fn(e,t,n){let r=await fetch(e,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);let s=await r.blob();return new Promise((o,a)=>{let i=new FileReader;i.onerror=a,i.onloadend=()=>{try{o(n({res:r,result:i.result}))}catch(c){a(c)}},i.readAsDataURL(s)})}var bn={};function Ks(e,t,n){let r=e.replace(/\?.*/,"");return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function De(e,t,n){let r=Ks(e,t,n.includeQueryParams);if(bn[r]!=null)return bn[r];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let s;try{let o=await fn(e,n.fetchRequestInit,({res:a,result:i})=>(t||(t=a.headers.get("Content-Type")||""),Js(i)));s=mn(o,t)}catch(o){s=n.imagePlaceholder||"";let a=`Failed to fetch resource: ${e}`;o&&(a=typeof o=="string"?o:o.message),a&&console.warn(a)}return bn[r]=s,s}async function Gs(e){let t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):He(t)}async function Qs(e,t){if(e.currentSrc){let o=document.createElement("canvas"),a=o.getContext("2d");o.width=e.clientWidth,o.height=e.clientHeight,a?.drawImage(e,0,0,o.width,o.height);let i=o.toDataURL();return He(i)}let n=e.poster,r=Be(n),s=await De(n,r,t);return He(s)}async function Zs(e,t){var n;try{if(!((n=e?.contentDocument)===null||n===void 0)&&n.body)return await it(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function eo(e,t){return W(e,HTMLCanvasElement)?Gs(e):W(e,HTMLVideoElement)?Qs(e,t):W(e,HTMLIFrameElement)?Zs(e,t):e.cloneNode(vr(e))}var to=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",vr=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function no(e,t,n){var r,s;if(vr(t))return t;let o=[];return to(e)&&e.assignedNodes?o=ne(e.assignedNodes()):W(e,HTMLIFrameElement)&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?o=ne(e.contentDocument.body.childNodes):o=ne(((s=e.shadowRoot)!==null&&s!==void 0?s:e).childNodes),o.length===0||W(e,HTMLVideoElement)||await o.reduce((a,i)=>a.then(()=>it(i,n)).then(c=>{c&&t.appendChild(c)}),Promise.resolve()),t}function ro(e,t,n){let r=t.style;if(!r)return;let s=window.getComputedStyle(e);s.cssText?(r.cssText=s.cssText,r.transformOrigin=s.transformOrigin):Dt(n).forEach(o=>{let a=s.getPropertyValue(o);o==="font-size"&&a.endsWith("px")&&(a=`${Math.floor(parseFloat(a.substring(0,a.length-2)))-.1}px`),W(e,HTMLIFrameElement)&&o==="display"&&a==="inline"&&(a="block"),o==="d"&&t.getAttribute("d")&&(a=`path(${t.getAttribute("d")})`),r.setProperty(o,a,s.getPropertyPriority(o))})}function so(e,t){W(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),W(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function oo(e,t){if(W(e,HTMLSelectElement)){let r=Array.from(t.children).find(s=>e.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function io(e,t,n){return W(t,Element)&&(ro(e,t,n),gr(e,t,n),so(e,t),oo(e,t)),t}async function ao(e,t){let n=e.querySelectorAll?e.querySelectorAll("use"):[];if(n.length===0)return e;let r={};for(let o=0;o<n.length;o++){let i=n[o].getAttribute("xlink:href");if(i){let c=e.querySelector(i),u=document.querySelector(i);!c&&u&&!r[i]&&(r[i]=await it(u,t,!0))}}let s=Object.values(r);if(s.length){let o="http://www.w3.org/1999/xhtml",a=document.createElementNS(o,"svg");a.setAttribute("xmlns",o),a.style.position="absolute",a.style.width="0",a.style.height="0",a.style.overflow="hidden",a.style.display="none";let i=document.createElementNS(o,"defs");a.appendChild(i);for(let c=0;c<s.length;c++)i.appendChild(s[c]);e.appendChild(a)}return e}async function it(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(r=>eo(r,t)).then(r=>no(e,r,t)).then(r=>io(e,r,t)).then(r=>ao(r,t))}var xr=/url\((['"]?)([^'"]+?)\1\)/g,lo=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,co=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function po(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function uo(e){let t=[];return e.replace(xr,(n,r,s)=>(t.push(s),n)),t.filter(n=>!ot(n))}async function bo(e,t,n,r,s){try{let o=n?dr(t,n):t,a=Be(t),i;if(s){let c=await s(o);i=mn(c,a)}else i=await De(o,a,r);return e.replace(po(t),`$1${i}$3`)}catch{}return e}function mo(e,{preferredFontFormat:t}){return t?e.replace(co,n=>{for(;;){let[r,,s]=lo.exec(n)||[];if(!s)return"";if(s===t)return`src: ${r};`}}):e}function gn(e){return e.search(xr)!==-1}async function Ot(e,t,n){if(!gn(e))return e;let r=mo(e,n);return uo(r).reduce((o,a)=>o.then(i=>bo(i,a,t,n)),Promise.resolve(r))}async function Oe(e,t,n){var r;let s=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(e);if(s){let o=await Ot(s,null,n);return t.style.setProperty(e,o,t.style.getPropertyPriority(e)),!0}return!1}async function fo(e,t){await Oe("background",e,t)||await Oe("background-image",e,t),await Oe("mask",e,t)||await Oe("-webkit-mask",e,t)||await Oe("mask-image",e,t)||await Oe("-webkit-mask-image",e,t)}async function go(e,t){let n=W(e,HTMLImageElement);if(!(n&&!ot(e.src))&&!(W(e,SVGImageElement)&&!ot(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,s=await De(r,Be(r),t);await new Promise((o,a)=>{e.onload=o,e.onerror=t.onImageErrorHandler?(...c)=>{try{o(t.onImageErrorHandler(...c))}catch(u){a(u)}}:a;let i=e;i.decode&&(i.decode=o),i.loading==="lazy"&&(i.loading="eager"),n?(e.srcset="",e.src=s):e.href.baseVal=s})}async function ho(e,t){let r=ne(e.childNodes).map(s=>hn(s,t));await Promise.all(r).then(()=>e)}async function hn(e,t){W(e,Element)&&(await fo(e,t),await go(e,t),await ho(e,t))}function wr(e,t){let{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);let r=t.style;return r!=null&&Object.keys(r).forEach(s=>{n[s]=r[s]}),e}var kr={};async function Er(e){let t=kr[e];if(t!=null)return t;let r=await(await fetch(e)).text();return t={url:e,cssText:r},kr[e]=t,t}async function Lr(e,t){let n=e.cssText,r=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map(async a=>{let i=a.replace(r,"$1");return i.startsWith("https://")||(i=new URL(i,e.url).href),fn(i,t.fetchRequestInit,({result:c})=>(n=n.replace(a,`url(${c})`),[a,c]))});return Promise.all(o).then(()=>n)}function Sr(e){if(e==null)return[];let t=[],n=/(\/\*[\s\S]*?\*\/)/gi,r=e.replace(n,""),s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){let c=s.exec(r);if(c===null)break;t.push(c[0])}r=r.replace(s,"");let o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,a="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",i=new RegExp(a,"gi");for(;;){let c=o.exec(r);if(c===null){if(c=i.exec(r),c===null)break;o.lastIndex=i.lastIndex}else i.lastIndex=o.lastIndex;t.push(c[0])}return t}async function yo(e,t){let n=[],r=[];return e.forEach(s=>{if("cssRules"in s)try{ne(s.cssRules||[]).forEach((o,a)=>{if(o.type===CSSRule.IMPORT_RULE){let i=a+1,c=o.href,u=Er(c).then(p=>Lr(p,t)).then(p=>Sr(p).forEach(f=>{try{s.insertRule(f,f.startsWith("@import")?i+=1:s.cssRules.length)}catch(w){console.error("Error inserting rule from remote css",{rule:f,error:w})}})).catch(p=>{console.error("Error loading remote css",p.toString())});r.push(u)}})}catch(o){let a=e.find(i=>i.href==null)||document.styleSheets[0];s.href!=null&&r.push(Er(s.href).then(i=>Lr(i,t)).then(i=>Sr(i).forEach(c=>{a.insertRule(c,a.cssRules.length)})).catch(i=>{console.error("Error loading remote stylesheet",i)})),console.error("Error inlining remote css file",o)}}),Promise.all(r).then(()=>(e.forEach(s=>{if("cssRules"in s)try{ne(s.cssRules||[]).forEach(o=>{n.push(o)})}catch(o){console.error(`Error while reading CSS rules from ${s.href}`,o)}}),n))}function vo(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>gn(t.style.getPropertyValue("src")))}async function xo(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");let n=ne(e.ownerDocument.styleSheets),r=await yo(n,t);return vo(r)}function Pr(e){return e.trim().replace(/["']/g,"")}function wo(e){let t=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(o=>{t.add(Pr(o))}),Array.from(r.children).forEach(o=>{o instanceof HTMLElement&&n(o)})}return n(e),t}async function Cr(e,t){let n=await xo(e,t),r=wo(e);return(await Promise.all(n.filter(o=>r.has(Pr(o.style.fontFamily))).map(o=>{let a=o.parentStyleSheet?o.parentStyleSheet.href:null;return Ot(o.cssText,a,t)}))).join(`
5
- `)}async function Tr(e,t){let n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Cr(e,t);if(n){let r=document.createElement("style"),s=document.createTextNode(n);r.appendChild(s),e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r)}}async function ko(e,t={}){let{width:n,height:r}=un(e,t),s=await it(e,t,!0);return await Tr(s,t),await hn(s,t),wr(s,t),await mr(s,n,r)}async function Eo(e,t={}){let{width:n,height:r}=un(e,t),s=await ko(e,t),o=await He(s),a=document.createElement("canvas"),i=a.getContext("2d"),c=t.pixelRatio||ur(),u=t.canvasWidth||n,p=t.canvasHeight||r;return a.width=u*c,a.height=p*c,t.skipAutoScale||br(a),a.style.width=`${u}`,a.style.height=`${p}`,t.backgroundColor&&(i.fillStyle=t.backgroundColor,i.fillRect(0,0,a.width,a.height)),i.drawImage(o,0,0,a.width,a.height),a}async function $r(e,t={}){return(await Eo(e,t)).toDataURL()}function Lo(){let e=document.createElement("div");if(e.style.cssText=`
4
+ `)),ae.push(n),ae.length>tr&&ae.shift(),V({type:"console",category:`console.${t}`,message:n.args.join(" ").slice(0,200),timestamp:n.timestamp})}function er(t){t&&(tr=t);for(let e of Object.keys(Ae))console[e]=function(...n){Ws(e,n),Ae[e].apply(console,n)}}function ut(){return[...ae]}function nr(){ae=[]}function rr(){for(let t of Object.keys(Ae))console[t]=Ae[t]}var Ht=[],sr=50,Re,ze,Ie;function un(t){Ht.push(t),Ht.length>sr&&Ht.shift(),V({type:"network",category:t.failed?"network.error":"network.ok",message:`${t.method} ${t.url} \u2192 ${t.status} (${t.duration}ms)`,timestamp:t.timestamp,data:{status:t.status,duration:t.duration}})}function or(t){try{let e=new URL(t,window.location.origin),n=new URLSearchParams(e.search);for(let s of n.keys()){let o=s.toLowerCase();(o.includes("token")||o.includes("key")||o.includes("secret")||o.includes("password")||o.includes("auth"))&&n.set(s,"[REDACTED]")}let r=n.toString();return e.pathname+(r?"?"+r:"")}catch{return It(t)}}function Ys(){Re=window.fetch,window.fetch=async function(t,e){let n=e?.method?.toUpperCase()??"GET",r=typeof t=="string"?t:t instanceof URL?t.href:t.url,s=or(r),o=Date.now();try{let i=await Re.call(window,t,e);return un({method:n,url:s,status:i.status,statusText:i.statusText,duration:Date.now()-o,responseType:i.headers.get("content-type")??void 0,timestamp:o,failed:i.status>=400}),i}catch(i){throw un({method:n,url:s,status:0,statusText:"Network Error",duration:Date.now()-o,timestamp:o,failed:!0}),i}}}function Xs(){ze=XMLHttpRequest.prototype.open,Ie=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=function(t,e,...n){return this.__bs_method=t.toUpperCase(),this.__bs_url=or(typeof e=="string"?e:e.href),ze.apply(this,[t,e,...n])},XMLHttpRequest.prototype.send=function(t){let e=Date.now();return this.addEventListener("loadend",function(){un({method:this.__bs_method??"GET",url:this.__bs_url??"",status:this.status,statusText:this.statusText,duration:Date.now()-e,responseType:this.getResponseHeader("content-type")??void 0,timestamp:e,failed:this.status>=400||this.status===0})}),Ie.call(this,t)}}function ir(t){t&&(sr=t),Ys(),Xs()}function Dt(){return[...Ht]}function vt(){return Ht.filter(t=>t.failed)}function ar(){Ht=[]}function lr(){Re&&(window.fetch=Re),ze&&(XMLHttpRequest.prototype.open=ze),Ie&&(XMLHttpRequest.prototype.send=Ie)}var He=[],le=null,ce=null;function cr(){le=t=>{let e={message:t.message||"Unknown error",source:t.filename,lineno:t.lineno,colno:t.colno,stack:t.error?.stack,type:"error",timestamp:Date.now()};He.push(e),V({type:"error",category:"exception",message:e.message,timestamp:e.timestamp,data:{source:e.source,lineno:e.lineno}})},ce=t=>{let e=t.reason,n=e instanceof Error?e.message:typeof e=="string"?e:"Unhandled promise rejection",r={message:n,stack:e instanceof Error?e.stack:void 0,type:"unhandledrejection",timestamp:Date.now()};He.push(r),V({type:"error",category:"promise",message:n,timestamp:r.timestamp})},window.addEventListener("error",le),window.addEventListener("unhandledrejection",ce)}function ft(){return[...He]}function dr(){He=[]}function pr(){le&&window.removeEventListener("error",le),ce&&window.removeEventListener("unhandledrejection",ce),le=null,ce=null}var H=null,De=null,Be=null,Oe=null;function br(){if(H={timestamp:Date.now()},performance.getEntriesByType){let t=()=>{let[e]=performance.getEntriesByType("navigation");e&&H&&(H.pageLoadTime=Math.round(e.loadEventEnd-e.startTime),H.domContentLoaded=Math.round(e.domContentLoadedEventEnd-e.startTime));let n=performance.getEntriesByType("paint");for(let s of n)s.name==="first-paint"&&H&&(H.firstPaint=Math.round(s.startTime)),s.name==="first-contentful-paint"&&H&&(H.firstContentfulPaint=Math.round(s.startTime));H&&(H.resourceCount=performance.getEntriesByType("resource").length);let r=performance.memory;r&&H&&(H.memoryUsage={usedJSHeapSize:r.usedJSHeapSize,totalJSHeapSize:r.totalJSHeapSize})};document.readyState==="complete"?setTimeout(t,0):window.addEventListener("load",()=>setTimeout(t,100))}if(typeof PerformanceObserver<"u"){try{De=new PerformanceObserver(t=>{let e=t.getEntries(),n=e[e.length-1];n&&H&&(H.largestContentfulPaint=Math.round(n.startTime))}),De.observe({type:"largest-contentful-paint",buffered:!0})}catch{}try{let t=0;Be=new PerformanceObserver(e=>{for(let n of e.getEntries())n.hadRecentInput||(t+=n.value);H&&(H.cumulativeLayoutShift=Math.round(t*1e3)/1e3)}),Be.observe({type:"layout-shift",buffered:!0})}catch{}try{Oe=new PerformanceObserver(t=>{let[e]=t.getEntries();e&&H&&(H.firstInputDelay=Math.round(e.processingStart-e.startTime))}),Oe.observe({type:"first-input",buffered:!0})}catch{}}}function Bt(){return H&&(H.timestamp=Date.now()),H?{...H}:null}function ur(){De?.disconnect(),Be?.disconnect(),Oe?.disconnect(),De=null,Be=null,Oe=null,H=null}function fr(t,e){if(t.match(/^[a-z]+:\/\//i))return t;if(t.match(/^\/\//))return window.location.protocol+t;if(t.match(/^[a-z]+:/i))return t;let n=document.implementation.createHTMLDocument(),r=n.createElement("base"),s=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(s),e&&(r.href=e),s.href=t,s.href}var mr=(()=>{let t=0,e=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(t+=1,`u${e()}${t}`)})();function st(t){let e=[];for(let n=0,r=t.length;n<r;n++)e.push(t[n]);return e}var Ot=null;function je(t={}){return Ot||(t.includeStyleProperties?(Ot=t.includeStyleProperties,Ot):(Ot=st(window.getComputedStyle(document.documentElement)),Ot))}function Ne(t,e){let r=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return r?parseFloat(r.replace("px","")):0}function Vs(t){let e=Ne(t,"border-left-width"),n=Ne(t,"border-right-width");return t.clientWidth+e+n}function Js(t){let e=Ne(t,"border-top-width"),n=Ne(t,"border-bottom-width");return t.clientHeight+e+n}function fn(t,e={}){let n=e.width||Vs(t),r=e.height||Js(t);return{width:n,height:r}}function gr(){let t,e;try{e=process}catch{}let n=e&&e.env?e.env.devicePixelRatio:null;return n&&(t=parseInt(n,10),Number.isNaN(t)&&(t=1)),t||window.devicePixelRatio||1}var tt=16384;function hr(t){(t.width>tt||t.height>tt)&&(t.width>tt&&t.height>tt?t.width>t.height?(t.height*=tt/t.width,t.width=tt):(t.width*=tt/t.height,t.height=tt):t.width>tt?(t.height*=tt/t.width,t.width=tt):(t.width*=tt/t.height,t.height=tt))}function Nt(t){return new Promise((e,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>e(r))})},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=t})}async function Ks(t){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(t)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function vr(t,e,n){let r="http://www.w3.org/2000/svg",s=document.createElementNS(r,"svg"),o=document.createElementNS(r,"foreignObject");return s.setAttribute("width",`${e}`),s.setAttribute("height",`${n}`),s.setAttribute("viewBox",`0 0 ${e} ${n}`),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("externalResourcesRequired","true"),s.appendChild(o),o.appendChild(t),Ks(s)}var W=(t,e)=>{if(t instanceof e)return!0;let n=Object.getPrototypeOf(t);return n===null?!1:n.constructor.name===e.name||W(n,e)};function Gs(t){let e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}function Qs(t,e){return je(e).map(n=>{let r=t.getPropertyValue(n),s=t.getPropertyPriority(n);return`${n}: ${r}${s?" !important":""};`}).join(" ")}function Zs(t,e,n,r){let s=`.${t}:${e}`,o=n.cssText?Gs(n):Qs(n,r);return document.createTextNode(`${s}{${o}}`)}function yr(t,e,n,r){let s=window.getComputedStyle(t,n),o=s.getPropertyValue("content");if(o===""||o==="none")return;let i=mr();try{e.className=`${e.className} ${i}`}catch{return}let a=document.createElement("style");a.appendChild(Zs(i,n,s,r)),e.appendChild(a)}function xr(t,e,n){yr(t,e,":before",n),yr(t,e,":after",n)}var wr="application/font-woff",kr="image/jpeg",to={woff:wr,woff2:wr,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:kr,jpeg:kr,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function eo(t){let e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}function jt(t){let e=eo(t).toLowerCase();return to[e]||""}function no(t){return t.split(/,/)[1]}function de(t){return t.search(/^(data:)/)!==-1}function gn(t,e){return`data:${e};base64,${t}`}async function hn(t,e,n){let r=await fetch(t,e);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);let s=await r.blob();return new Promise((o,i)=>{let a=new FileReader;a.onerror=i,a.onloadend=()=>{try{o(n({res:r,result:a.result}))}catch(c){i(c)}},a.readAsDataURL(s)})}var mn={};function ro(t,e,n){let r=t.replace(/\?.*/,"");return n&&(r=t),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),e?`[${e}]${r}`:r}async function qt(t,e,n){let r=ro(t,e,n.includeQueryParams);if(mn[r]!=null)return mn[r];n.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+new Date().getTime());let s;try{let o=await hn(t,n.fetchRequestInit,({res:i,result:a})=>(e||(e=i.headers.get("Content-Type")||""),no(a)));s=gn(o,e)}catch(o){s=n.imagePlaceholder||"";let i=`Failed to fetch resource: ${t}`;o&&(i=typeof o=="string"?o:o.message),i&&console.warn(i)}return mn[r]=s,s}async function so(t){let e=t.toDataURL();return e==="data:,"?t.cloneNode(!1):Nt(e)}async function oo(t,e){if(t.currentSrc){let o=document.createElement("canvas"),i=o.getContext("2d");o.width=t.clientWidth,o.height=t.clientHeight,i?.drawImage(t,0,0,o.width,o.height);let a=o.toDataURL();return Nt(a)}let n=t.poster,r=jt(n),s=await qt(n,r,e);return Nt(s)}async function io(t,e){var n;try{if(!((n=t?.contentDocument)===null||n===void 0)&&n.body)return await pe(t.contentDocument.body,e,!0)}catch{}return t.cloneNode(!1)}async function ao(t,e){return W(t,HTMLCanvasElement)?so(t):W(t,HTMLVideoElement)?oo(t,e):W(t,HTMLIFrameElement)?io(t,e):t.cloneNode(Er(t))}var lo=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SLOT",Er=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SVG";async function co(t,e,n){var r,s;if(Er(e))return e;let o=[];return lo(t)&&t.assignedNodes?o=st(t.assignedNodes()):W(t,HTMLIFrameElement)&&(!((r=t.contentDocument)===null||r===void 0)&&r.body)?o=st(t.contentDocument.body.childNodes):o=st(((s=t.shadowRoot)!==null&&s!==void 0?s:t).childNodes),o.length===0||W(t,HTMLVideoElement)||await o.reduce((i,a)=>i.then(()=>pe(a,n)).then(c=>{c&&e.appendChild(c)}),Promise.resolve()),e}function po(t,e,n){let r=e.style;if(!r)return;let s=window.getComputedStyle(t);s.cssText?(r.cssText=s.cssText,r.transformOrigin=s.transformOrigin):je(n).forEach(o=>{let i=s.getPropertyValue(o);o==="font-size"&&i.endsWith("px")&&(i=`${Math.floor(parseFloat(i.substring(0,i.length-2)))-.1}px`),W(t,HTMLIFrameElement)&&o==="display"&&i==="inline"&&(i="block"),o==="d"&&e.getAttribute("d")&&(i=`path(${e.getAttribute("d")})`),r.setProperty(o,i,s.getPropertyPriority(o))})}function bo(t,e){W(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),W(t,HTMLInputElement)&&e.setAttribute("value",t.value)}function uo(t,e){if(W(t,HTMLSelectElement)){let r=Array.from(e.children).find(s=>t.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function fo(t,e,n){return W(e,Element)&&(po(t,e,n),xr(t,e,n),bo(t,e),uo(t,e)),e}async function mo(t,e){let n=t.querySelectorAll?t.querySelectorAll("use"):[];if(n.length===0)return t;let r={};for(let o=0;o<n.length;o++){let a=n[o].getAttribute("xlink:href");if(a){let c=t.querySelector(a),p=document.querySelector(a);!c&&p&&!r[a]&&(r[a]=await pe(p,e,!0))}}let s=Object.values(r);if(s.length){let o="http://www.w3.org/1999/xhtml",i=document.createElementNS(o,"svg");i.setAttribute("xmlns",o),i.style.position="absolute",i.style.width="0",i.style.height="0",i.style.overflow="hidden",i.style.display="none";let a=document.createElementNS(o,"defs");i.appendChild(a);for(let c=0;c<s.length;c++)a.appendChild(s[c]);t.appendChild(i)}return t}async function pe(t,e,n){return!n&&e.filter&&!e.filter(t)?null:Promise.resolve(t).then(r=>ao(r,e)).then(r=>co(t,r,e)).then(r=>fo(t,r,e)).then(r=>mo(r,e))}var Lr=/url\((['"]?)([^'"]+?)\1\)/g,go=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ho=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function vo(t){let e=t.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`,"g")}function yo(t){let e=[];return t.replace(Lr,(n,r,s)=>(e.push(s),n)),e.filter(n=>!de(n))}async function xo(t,e,n,r,s){try{let o=n?fr(e,n):e,i=jt(e),a;if(s){let c=await s(o);a=gn(c,i)}else a=await qt(o,i,r);return t.replace(vo(e),`$1${a}$3`)}catch{}return t}function wo(t,{preferredFontFormat:e}){return e?t.replace(ho,n=>{for(;;){let[r,,s]=go.exec(n)||[];if(!s)return"";if(s===e)return`src: ${r};`}}):t}function vn(t){return t.search(Lr)!==-1}async function qe(t,e,n){if(!vn(t))return t;let r=wo(t,n);return yo(r).reduce((o,i)=>o.then(a=>xo(a,i,e,n)),Promise.resolve(r))}async function Ut(t,e,n){var r;let s=(r=e.style)===null||r===void 0?void 0:r.getPropertyValue(t);if(s){let o=await qe(s,null,n);return e.style.setProperty(t,o,e.style.getPropertyPriority(t)),!0}return!1}async function ko(t,e){await Ut("background",t,e)||await Ut("background-image",t,e),await Ut("mask",t,e)||await Ut("-webkit-mask",t,e)||await Ut("mask-image",t,e)||await Ut("-webkit-mask-image",t,e)}async function Eo(t,e){let n=W(t,HTMLImageElement);if(!(n&&!de(t.src))&&!(W(t,SVGImageElement)&&!de(t.href.baseVal)))return;let r=n?t.src:t.href.baseVal,s=await qt(r,jt(r),e);await new Promise((o,i)=>{t.onload=o,t.onerror=e.onImageErrorHandler?(...c)=>{try{o(e.onImageErrorHandler(...c))}catch(p){i(p)}}:i;let a=t;a.decode&&(a.decode=o),a.loading==="lazy"&&(a.loading="eager"),n?(t.srcset="",t.src=s):t.href.baseVal=s})}async function Lo(t,e){let r=st(t.childNodes).map(s=>yn(s,e));await Promise.all(r).then(()=>t)}async function yn(t,e){W(t,Element)&&(await ko(t,e),await Eo(t,e),await Lo(t,e))}function Sr(t,e){let{style:n}=t;e.backgroundColor&&(n.backgroundColor=e.backgroundColor),e.width&&(n.width=`${e.width}px`),e.height&&(n.height=`${e.height}px`);let r=e.style;return r!=null&&Object.keys(r).forEach(s=>{n[s]=r[s]}),t}var Cr={};async function Pr(t){let e=Cr[t];if(e!=null)return e;let r=await(await fetch(t)).text();return e={url:t,cssText:r},Cr[t]=e,e}async function Tr(t,e){let n=t.cssText,r=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let a=i.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,t.url).href),hn(a,e.fetchRequestInit,({result:c})=>(n=n.replace(i,`url(${c})`),[i,c]))});return Promise.all(o).then(()=>n)}function $r(t){if(t==null)return[];let e=[],n=/(\/\*[\s\S]*?\*\/)/gi,r=t.replace(n,""),s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){let c=s.exec(r);if(c===null)break;e.push(c[0])}r=r.replace(s,"");let o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(i,"gi");for(;;){let c=o.exec(r);if(c===null){if(c=a.exec(r),c===null)break;o.lastIndex=a.lastIndex}else a.lastIndex=o.lastIndex;e.push(c[0])}return e}async function So(t,e){let n=[],r=[];return t.forEach(s=>{if("cssRules"in s)try{st(s.cssRules||[]).forEach((o,i)=>{if(o.type===CSSRule.IMPORT_RULE){let a=i+1,c=o.href,p=Pr(c).then(b=>Tr(b,e)).then(b=>$r(b).forEach(v=>{try{s.insertRule(v,v.startsWith("@import")?a+=1:s.cssRules.length)}catch(S){console.error("Error inserting rule from remote css",{rule:v,error:S})}})).catch(b=>{console.error("Error loading remote css",b.toString())});r.push(p)}})}catch(o){let i=t.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&r.push(Pr(s.href).then(a=>Tr(a,e)).then(a=>$r(a).forEach(c=>{i.insertRule(c,i.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",o)}}),Promise.all(r).then(()=>(t.forEach(s=>{if("cssRules"in s)try{st(s.cssRules||[]).forEach(o=>{n.push(o)})}catch(o){console.error(`Error while reading CSS rules from ${s.href}`,o)}}),n))}function Co(t){return t.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>vn(e.style.getPropertyValue("src")))}async function Po(t,e){if(t.ownerDocument==null)throw new Error("Provided element is not within a Document");let n=st(t.ownerDocument.styleSheets),r=await So(n,e);return Co(r)}function Mr(t){return t.trim().replace(/["']/g,"")}function To(t){let e=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(o=>{e.add(Mr(o))}),Array.from(r.children).forEach(o=>{o instanceof HTMLElement&&n(o)})}return n(t),e}async function Ar(t,e){let n=await Po(t,e),r=To(t);return(await Promise.all(n.filter(o=>r.has(Mr(o.style.fontFamily))).map(o=>{let i=o.parentStyleSheet?o.parentStyleSheet.href:null;return qe(o.cssText,i,e)}))).join(`
5
+ `)}async function Rr(t,e){let n=e.fontEmbedCSS!=null?e.fontEmbedCSS:e.skipFonts?null:await Ar(t,e);if(n){let r=document.createElement("style"),s=document.createTextNode(n);r.appendChild(s),t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r)}}async function $o(t,e={}){let{width:n,height:r}=fn(t,e),s=await pe(t,e,!0);return await Rr(s,e),await yn(s,e),Sr(s,e),await vr(s,n,r)}async function Mo(t,e={}){let{width:n,height:r}=fn(t,e),s=await $o(t,e),o=await Nt(s),i=document.createElement("canvas"),a=i.getContext("2d"),c=e.pixelRatio||gr(),p=e.canvasWidth||n,b=e.canvasHeight||r;return i.width=p*c,i.height=b*c,e.skipAutoScale||hr(i),i.style.width=`${p}`,i.style.height=`${b}`,e.backgroundColor&&(a.fillStyle=e.backgroundColor,a.fillRect(0,0,i.width,i.height)),a.drawImage(o,0,0,i.width,i.height),i}async function zr(t,e={}){return(await Mo(t,e)).toDataURL()}function Ao(){let t=document.createElement("div");if(t.style.cssText=`
6
6
  position: fixed; inset: 0; z-index: 2147483647;
7
7
  background: white; opacity: 0;
8
8
  pointer-events: none;
9
9
  animation: bs-flash 0.4s ease-out forwards;
10
- `,!document.getElementById("bs-flash-style")){let t=document.createElement("style");t.id="bs-flash-style",t.textContent=`
10
+ `,!document.getElementById("bs-flash-style")){let e=document.createElement("style");e.id="bs-flash-style",e.textContent=`
11
11
  @keyframes bs-flash {
12
12
  0% { opacity: 0; }
13
13
  15% { opacity: 0.7; }
14
14
  100% { opacity: 0; }
15
15
  }
16
- `,document.head.appendChild(t)}document.body.appendChild(e),e.addEventListener("animationend",()=>e.remove())}var So=e=>{let t=e.tagName.toLowerCase();return t==="bugstash-root"||t==="bugstash-overlay"||e.classList?.contains("bs-fab")||e.classList?.contains("bs-toolbar")||e.classList?.contains("bs-modal")||e.classList?.contains("bs-backdrop")||e.id==="bs-flash-style"||e.id==="bugstash-live-pins"||e.id==="bugstash-pin-overlay"};async function yn(e=!1){e&&Lo();try{let t=await Po();if(t)return t}catch{}try{return await Mr()}catch{try{return await Mr(!0)}catch{return null}}}async function Po(){if(!navigator.mediaDevices?.getDisplayMedia)return null;let e=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser",width:{ideal:window.screen.width*(window.devicePixelRatio||1)},height:{ideal:window.screen.height*(window.devicePixelRatio||1)}},audio:!1,preferCurrentTab:!0,selfBrowserSurface:"include",monitorTypeSurfaces:"exclude"});try{if(!e.getVideoTracks()[0])return null;let n=document.createElement("video");n.srcObject=e,n.muted=!0,n.playsInline=!0,await n.play(),await new Promise(o=>{if(n.readyState>=2){o();return}n.onloadeddata=()=>o()}),await new Promise(o=>requestAnimationFrame(()=>o()));let r=document.createElement("canvas");r.width=n.videoWidth,r.height=n.videoHeight;let s=r.getContext("2d");return s?(s.drawImage(n,0,0),r.toDataURL("image/png")):null}finally{e.getTracks().forEach(t=>t.stop())}}async function Mr(e=!1){let t=window.getComputedStyle(document.body).backgroundColor,n=window.getComputedStyle(document.documentElement).backgroundColor,r=a=>!a||a==="transparent"||a==="rgba(0, 0, 0, 0)",s=r(t)?r(n)?"#ffffff":n:t;return await $r(document.body,{pixelRatio:Math.min(window.devicePixelRatio||1,2),backgroundColor:s,width:window.innerWidth,height:window.innerHeight,filter:a=>{if(e&&a.tagName==="IMG"){let i=a.src||"";if(i&&!i.startsWith(window.location.origin)&&!i.startsWith("data:"))return!1}return!So(a)},imagePlaceholder:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"})}var Co="https://bugstash-backend.vercel.app",Ar="https://bugstash-backend.vercel.app",Y=Co,vn=!1;function Rr(e){Y=e.replace(/\/$/,""),vn=!1}function zr(){return Y}async function oe(e,t){try{return await fetch(e,t)}catch(n){if(vn)throw n;vn=!0;let r=Y;Y=Ar;let s=e.replace(r,Ar);return fetch(s,t)}}var xn="bugstash_auth";function wn(){try{let e=localStorage.getItem(xn);if(!e)return null;let t=JSON.parse(e);return t.tokens.expiresAt<Date.now(),t}catch{return null}}function Ir(e){localStorage.setItem(xn,JSON.stringify(e))}function To(){localStorage.removeItem(xn)}function ie(){return wn()?.user||null}function Hr(){return wn()?.tokens.accessToken||null}async function he(){let e=wn();if(!e)return{"Content-Type":"application/json"};if(e.tokens.expiresAt<Date.now()+6e4)try{let t=await oe(`${Y}/api/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:e.tokens.refreshToken})});if(t.ok){let n=await t.json();n.success&&(e.tokens=n.data,Ir(e))}}catch{}return{"Content-Type":"application/json",Authorization:`Bearer ${e.tokens.accessToken}`}}async function jt(e,t,n){try{let s=await(await oe(`${Y}/api/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:t,projectId:n})})).json();return s.success&&Ir({user:s.data.user,tokens:s.data.tokens}),s}catch{return{success:!1,error:"Network error"}}}async function qt(){To()}async function kn(e){try{let t=await he();return await(await oe(`${Y}/api/reports`,{method:"POST",headers:t,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error - could not reach BugStash"}}}async function Br(e,t){try{let n=await he();return await(await oe(`${Y}/api/pins/by-page?projectId=${e}&pathname=${encodeURIComponent(t)}`,{headers:n})).json()}catch{return{success:!1,error:"Network error"}}}async function En(e){try{let t=await he();return await(await oe(`${Y}/api/pins`,{method:"POST",headers:t,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error"}}}async function Ft(e,t){try{let n=await he();return await(await oe(`${Y}/api/pins/${e}`,{method:"PUT",headers:n,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error"}}}async function Dr(e){try{let t=await he();return await(await oe(`${Y}/api/pins/${e}`,{method:"DELETE",headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function Or(e){try{let t=await he();return await(await oe(`${Y}/api/pins/${e}/comments`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function Ln(e,t,n=[]){try{let r=await he();return await(await oe(`${Y}/api/pins/${e}/comments`,{method:"POST",headers:r,body:JSON.stringify({body:t,mentions:n})})).json()}catch{return{success:!1,error:"Network error"}}}async function Nr(e){try{let t=await he();return await(await oe(`${Y}/api/members/for-project/${e}`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}var Nt=null;function jr(e){return Nt||(Nt=(async()=>{try{let t=await fetch(`${Y}/api/orgs/projects/${encodeURIComponent(e)}/verify-domain`,{headers:{"Content-Type":"application/json"}});return t.ok?(await t.json()).allowed===!0:!1}catch{return!1}})(),Nt)}var Sn="bugstash_offline_queue";function Pn(e){let t=qr();t.push({...e,id:Math.random().toString(36).slice(2),timestamp:Date.now()}),localStorage.setItem(Sn,JSON.stringify(t))}function qr(){try{return JSON.parse(localStorage.getItem(Sn)||"[]")}catch{return[]}}async function $o(){let e=qr();if(e.length===0)return 0;let t=0,n=[];for(let r of e)try{let s;switch(r.type){case"create_pin":s=await En(r.data);break;case"create_comment":s=await Ln(r.data.pinId,r.data.body,r.data.mentions);break;case"update_pin":s=await Ft(r.data.pinId,r.data.updates);break;case"submit_report":s=await kn(r.data);break;default:s={success:!1,error:"Unknown action"}}s.success?t++:n.push(r)}catch{n.push(r)}return localStorage.setItem(Sn,JSON.stringify(n)),t}typeof window<"u"&&window.addEventListener("online",()=>{$o().catch(()=>{})});var Cn=[{id:"slate",name:"Slate",preview:["#0f1117","#6E9ED0"],vars:{"--bs-bg":"#0f1117","--bs-bg2":"#1a1d27","--bs-bg3":"#2a2d37","--bs-text":"#e8eaed","--bs-muted":"#9ca3af","--bs-border":"#2a2d37","--bs-accent":"#6E9ED0","--bs-accent2":"#C3CAD6","--bs-fab1":"#6E9ED0","--bs-fab2":"#4a7ba8","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"black",name:"Dark",preview:["#0a0a0a","#ffffff"],vars:{"--bs-bg":"#0a0a0a","--bs-bg2":"#141414","--bs-bg3":"#1e1e1e","--bs-text":"#f5f5f5","--bs-muted":"#737373","--bs-border":"#262626","--bs-accent":"#f5f5f5","--bs-accent2":"#d4d4d4","--bs-fab1":"#262626","--bs-fab2":"#171717","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"white",name:"Light",preview:["#ffffff","#0a0a0a"],vars:{"--bs-bg":"#ffffff","--bs-bg2":"#f5f5f5","--bs-bg3":"#e5e5e5","--bs-text":"#0a0a0a","--bs-muted":"#737373","--bs-border":"#e5e5e5","--bs-accent":"#0a0a0a","--bs-accent2":"#404040","--bs-fab1":"#0a0a0a","--bs-fab2":"#262626","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#dc2626","--bs-green":"#16a34a","--bs-orange":"#ea580c","--bs-yellow":"#ca8a04"}}];function Ut(){return Cn}function _t(e){return Cn.find(t=>t.id===e)}function Fr(){return Cn[0]}var Tn=[{id:"classic",name:"Center",description:"Centered modal",tabPosition:"top"},{id:"drawer-right",name:"Right Drawer",description:"Slides from right",tabPosition:"top"},{id:"bottom-sheet",name:"Bottom Sheet",description:"Slides from bottom",tabPosition:"top"},{id:"sidebar-tabs",name:"Sidebar",description:"Side navigation",tabPosition:"left"}];function Wt(){return Tn}function at(e){return Tn.find(t=>t.id===e)}function Ur(){return Tn[0]}var _r=`
16
+ `,document.head.appendChild(e)}document.body.appendChild(t),t.addEventListener("animationend",()=>t.remove())}var Ro=t=>{let e=t.tagName.toLowerCase();return e==="bugstash-root"||e==="bugstash-overlay"||t.classList?.contains("bs-fab")||t.classList?.contains("bs-toolbar")||t.classList?.contains("bs-modal")||t.classList?.contains("bs-backdrop")||t.id==="bs-flash-style"||t.id==="bugstash-live-pins"||t.id==="bugstash-pin-overlay"};async function Ue(t=!1){t&&Ao();try{let e=await zo();if(e)return e}catch{}try{return await Ir()}catch{try{return await Ir(!0)}catch{return null}}}async function zo(){if(!navigator.mediaDevices?.getDisplayMedia)return null;let t=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser",width:{ideal:window.screen.width*(window.devicePixelRatio||1)},height:{ideal:window.screen.height*(window.devicePixelRatio||1)}},audio:!1,preferCurrentTab:!0,selfBrowserSurface:"include",monitorTypeSurfaces:"exclude"});try{if(!t.getVideoTracks()[0])return null;let n=document.createElement("video");n.srcObject=t,n.muted=!0,n.playsInline=!0,await n.play(),await new Promise(o=>{if(n.readyState>=2){o();return}n.onloadeddata=()=>o()}),await new Promise(o=>requestAnimationFrame(()=>o()));let r=document.createElement("canvas");r.width=n.videoWidth,r.height=n.videoHeight;let s=r.getContext("2d");return s?(s.drawImage(n,0,0),r.toDataURL("image/png")):null}finally{t.getTracks().forEach(e=>e.stop())}}async function Ir(t=!1){let e=window.getComputedStyle(document.body).backgroundColor,n=window.getComputedStyle(document.documentElement).backgroundColor,r=i=>!i||i==="transparent"||i==="rgba(0, 0, 0, 0)",s=r(e)?r(n)?"#ffffff":n:e;return await zr(document.body,{pixelRatio:Math.min(window.devicePixelRatio||1,2),backgroundColor:s,width:window.innerWidth,height:window.innerHeight,filter:i=>{if(t&&i.tagName==="IMG"){let a=i.src||"";if(a&&!a.startsWith(window.location.origin)&&!a.startsWith("data:"))return!1}return!Ro(i)},imagePlaceholder:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"})}var Io="https://bugstash-backend.vercel.app",Hr="https://bugstash-backend.vercel.app",X=Io,xn=!1;function Dr(t){X=t.replace(/\/$/,""),xn=!1}function Br(){return X}async function ct(t,e){try{return await fetch(t,e)}catch(n){if(xn)throw n;xn=!0;let r=X;X=Hr;let s=t.replace(r,Hr);return fetch(s,e)}}var wn="bugstash_auth";function kn(){try{let t=localStorage.getItem(wn);if(!t)return null;let e=JSON.parse(t);return e.tokens.expiresAt<Date.now(),e}catch{return null}}function Or(t){localStorage.setItem(wn,JSON.stringify(t))}function Ho(){localStorage.removeItem(wn)}function ot(){return kn()?.user||null}function Nr(){return kn()?.tokens.accessToken||null}async function yt(){let t=kn();if(!t)return{"Content-Type":"application/json"};if(t.tokens.expiresAt<Date.now()+6e4)try{let e=await ct(`${X}/api/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t.tokens.refreshToken})});if(e.ok){let n=await e.json();n.success&&(t.tokens=n.data,Or(t))}}catch{}return{"Content-Type":"application/json",Authorization:`Bearer ${t.tokens.accessToken}`}}async function _e(t,e,n){try{let s=await(await ct(`${X}/api/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,password:e,projectId:n})})).json();return s.success&&Or({user:s.data.user,tokens:s.data.tokens}),s}catch{return{success:!1,error:"Network error"}}}async function We(){Ho()}async function En(t){try{let e=await yt();return await(await ct(`${X}/api/reports`,{method:"POST",headers:e,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error - could not reach BugStash"}}}async function jr(t,e){try{let n=await yt();return await(await ct(`${X}/api/pins/by-page?projectId=${t}&pathname=${encodeURIComponent(e)}`,{headers:n})).json()}catch{return{success:!1,error:"Network error"}}}async function Ln(t){try{let e=await yt();return await(await ct(`${X}/api/pins`,{method:"POST",headers:e,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error"}}}async function Ye(t,e){try{let n=await yt();return await(await ct(`${X}/api/pins/${t}`,{method:"PUT",headers:n,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error"}}}async function qr(t){try{let e=await yt();return await(await ct(`${X}/api/pins/${t}`,{method:"DELETE",headers:e})).json()}catch{return{success:!1,error:"Network error"}}}async function Ur(t){try{let e=await yt();return await(await ct(`${X}/api/pins/${t}/comments`,{headers:e})).json()}catch{return{success:!1,error:"Network error"}}}async function Sn(t,e,n=[]){try{let r=await yt();return await(await ct(`${X}/api/pins/${t}/comments`,{method:"POST",headers:r,body:JSON.stringify({body:e,mentions:n})})).json()}catch{return{success:!1,error:"Network error"}}}async function Fr(t){try{let e=await yt();return await(await ct(`${X}/api/members/for-project/${t}`,{headers:e})).json()}catch{return{success:!1,error:"Network error"}}}var Fe=null;function _r(t){return Fe||(Fe=(async()=>{try{let e=await fetch(`${X}/api/orgs/projects/${encodeURIComponent(t)}/verify-domain`,{headers:{"Content-Type":"application/json"}});return e.ok?(await e.json()).allowed===!0:!1}catch{return!1}})(),Fe)}var Cn="bugstash_offline_queue";function Pn(t){let e=Wr();e.push({...t,id:Math.random().toString(36).slice(2),timestamp:Date.now()}),localStorage.setItem(Cn,JSON.stringify(e))}function Wr(){try{return JSON.parse(localStorage.getItem(Cn)||"[]")}catch{return[]}}async function Do(){let t=Wr();if(t.length===0)return 0;let e=0,n=[];for(let r of t)try{let s;switch(r.type){case"create_pin":s=await Ln(r.data);break;case"create_comment":s=await Sn(r.data.pinId,r.data.body,r.data.mentions);break;case"update_pin":s=await Ye(r.data.pinId,r.data.updates);break;case"submit_report":s=await En(r.data);break;default:s={success:!1,error:"Unknown action"}}s.success?e++:n.push(r)}catch{n.push(r)}return localStorage.setItem(Cn,JSON.stringify(n)),e}typeof window<"u"&&window.addEventListener("online",()=>{Do().catch(()=>{})});var Tn=[{id:"slate",name:"Slate",preview:["#0f1117","#6E9ED0"],vars:{"--bs-bg":"#0f1117","--bs-bg2":"#1a1d27","--bs-bg3":"#2a2d37","--bs-text":"#e8eaed","--bs-muted":"#9ca3af","--bs-border":"#2a2d37","--bs-accent":"#6E9ED0","--bs-accent2":"#C3CAD6","--bs-fab1":"#6E9ED0","--bs-fab2":"#4a7ba8","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"black",name:"Dark",preview:["#0a0a0a","#ffffff"],vars:{"--bs-bg":"#0a0a0a","--bs-bg2":"#141414","--bs-bg3":"#1e1e1e","--bs-text":"#f5f5f5","--bs-muted":"#737373","--bs-border":"#262626","--bs-accent":"#f5f5f5","--bs-accent2":"#d4d4d4","--bs-fab1":"#262626","--bs-fab2":"#171717","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"white",name:"Light",preview:["#ffffff","#0a0a0a"],vars:{"--bs-bg":"#ffffff","--bs-bg2":"#f5f5f5","--bs-bg3":"#e5e5e5","--bs-text":"#0a0a0a","--bs-muted":"#737373","--bs-border":"#e5e5e5","--bs-accent":"#0a0a0a","--bs-accent2":"#404040","--bs-fab1":"#0a0a0a","--bs-fab2":"#262626","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#dc2626","--bs-green":"#16a34a","--bs-orange":"#ea580c","--bs-yellow":"#ca8a04"}}];function Xe(){return Tn}function Ve(t){return Tn.find(e=>e.id===t)}function Yr(){return Tn[0]}var $n=[{id:"classic",name:"Center",description:"Centered modal",tabPosition:"top"},{id:"drawer-right",name:"Right Drawer",description:"Slides from right",tabPosition:"top"},{id:"bottom-sheet",name:"Bottom Sheet",description:"Slides from bottom",tabPosition:"top"},{id:"sidebar-tabs",name:"Sidebar",description:"Side navigation",tabPosition:"left"}];function Je(){return $n}function be(t){return $n.find(e=>e.id===t)}function Xr(){return $n[0]}var Vr=`
17
17
  /* \u2500\u2500 1. Classic (default \u2014 no overrides) \u2500\u2500 */
18
18
 
19
19
  /* \u2500\u2500 2. Drawer Right \u2500\u2500 */
@@ -73,13 +73,8 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
73
73
  }
74
74
  .bs-ly-sidebar-tabs .bs-tab-divider { display: none; }
75
75
  .bs-ly-sidebar-tabs .bs-scroll { flex: 1; }
76
- `;var qe=null,Xt=0,Mo=5e3,Ne=new Map,je=null,Yt=new Set;function lt(e){je=e,Xt=Date.now(),Ao()}function Ao(){qe||(qe=setInterval(Ro,Mo))}async function Ro(){if(!je)return;let e=Hr();if(e)try{let t=zr(),n=window.location.pathname,r=await fetch(`${t}/api/pins/poll?projectId=${je}&pathname=${encodeURIComponent(n)}&since=${Xt}`,{headers:{Authorization:`Bearer ${e}`}});if(!r.ok)return;let s=await r.json();if(!s.success)return;let o=Array.isArray(s.data)?s.data:s.data?.pins||[];Xt=s.serverTime||s.data?.serverTime||Date.now();for(let a of o)Yt.has(a.id)?Wr("pin:updated",{type:"pin:updated",projectId:je,data:a,userId:"",timestamp:Date.now()}):(Yt.add(a.id),Wr("pin:created",{type:"pin:created",projectId:je,data:a,userId:"",timestamp:Date.now()}))}catch{}}function Xr(){qe&&(clearInterval(qe),qe=null),je=null,Yt.clear(),Xt=0}function ct(e,t){return Ne.has(e)||Ne.set(e,new Set),Ne.get(e).add(t),()=>{Ne.get(e)?.delete(t)}}function Wr(e,t){Ne.get(e)?.forEach(n=>n(t)),Ne.get("*")?.forEach(n=>n(t))}function $n(e){Yt=new Set(e)}function Yr(){return qe!==null}var Gt,X=null,E=null,P=[],Qr=[],Fe=!1,_e=null,zo="",Ue=null,Jt=null,An=[],dt=null,pt=null,Ee={x:0,y:0};function Zr(){if(!pt)return;let e=document.createElement("div");e.style.cssText="position:fixed!important;top:0!important;left:0!important;width:1px!important;height:1px!important;pointer-events:none!important;visibility:hidden!important;z-index:-1!important;opacity:0!important;",pt.appendChild(e);try{let t=e.getBoundingClientRect();Ee={x:-t.left,y:-t.top}}finally{e.remove()}}function es(e){return Ee.x===0&&Ee.y===0?e:{left:`${parseFloat(e.left)+Ee.x}px`,top:`${parseFloat(e.top)+Ee.y}px`,hidden:e.hidden}}function Vr(e,t){return{left:`${e+Ee.x}px`,top:`${t+Ee.y}px`}}var Jr={open:"#f97316",in_progress:"#3b82f6",resolved:"#22c55e",closed:"#6b7280"},Kt={critical:"#ef4444",high:"#f97316",medium:"#eab308",low:"#6b7280"};function ut(e,t){Gt=e,pt=t,zo=window.location.pathname,jo(),Zr(),os(),qo(),Yo(),Vo(),Ho()}function ts(){Bo(),X?.remove(),X=null,E?.remove(),E=null,pt=null,P=[]}function We(e){return Fe=e!==void 0?e:!Fe,E&&E.style.setProperty("display",Fe?"block":"none","important"),Fe}function Qt(){return Fe}function ns(e){try{let t=document.documentElement.scrollWidth||document.body.scrollWidth||1,n=document.documentElement.scrollHeight||document.body.scrollHeight||1,r=window.scrollX,s=window.scrollY,o=Rn(e.elementSelector,e.elementXPath),a=Vt(e)&&e.xPercent>=0&&e.xPercent<=1&&e.yPercent>=0&&e.yPercent<=1,i=o?Io(o):!1;if(a&&o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){let u=c.left+e.xPercent*c.width,p=c.top+e.yPercent*c.height;return{left:`${u}px`,top:`${p}px`,hidden:i}}}if(a)return e.pageX>0||e.pageY>0?{left:`${e.pageX-r}px`,top:`${e.pageY-s}px`,hidden:!1}:{left:`${e.xPercent*t-r}px`,top:`${e.yPercent*n-s}px`,hidden:!1};if(o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){if(e.pageX>0||e.pageY>0){let u=Vt(e)?e.xPercent/100*t:e.pageX,p=Vt(e)?e.yPercent/100*n:e.pageY,f=c.left+c.width/2,w=c.top+c.height/2,S=u-r,M=p-s;return Math.abs(S-f)+Math.abs(M-w)>100?{left:`${f}px`,top:`${w}px`,hidden:i}:{left:`${S}px`,top:`${M}px`,hidden:i}}return{left:`${c.left+c.width/2}px`,top:`${c.top+c.height/2}px`,hidden:i}}}return Vt(e)?{left:`${e.xPercent/100*t-r}px`,top:`${e.yPercent/100*n-s}px`,hidden:!1}:{left:`${e.pageX-r}px`,top:`${e.pageY-s}px`,hidden:!1}}catch{let t=(e.pageX||0)-(window.scrollX||0),n=(e.pageY||0)-(window.scrollY||0);return{left:`${t}px`,top:`${n}px`,hidden:!1}}}function Vt(e){return e.xPercent!=null&&e.yPercent!=null&&(e.xPercent!==0||e.yPercent!==0||e.pageX===0&&e.pageY===0)}function Rn(e,t){let n;if(e&&e.startsWith('["')&&e.endsWith('"]'))try{let r=JSON.parse(e);n=Array.isArray(r)?r.filter(s=>typeof s=="string"):[e]}catch{n=[e]}else n=e?[e]:[];for(let r of n)if(r&&r!=="body")try{let s=document.querySelector(r);if(s)return s}catch{}if(t)try{let r=document.evaluate(t,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(r.singleNodeValue instanceof Element)return r.singleNodeValue}catch{}return null}function Io(e){let t=e.getBoundingClientRect();if(t.bottom<=0||t.top>=window.innerHeight||t.right<=0||t.left>=window.innerWidth)return!0;let n=e.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;if(s==="hidden"||s==="scroll"||s==="auto"||o==="hidden"||o==="scroll"||o==="auto"){let a=n.getBoundingClientRect();if(t.bottom<=a.top||t.top>=a.bottom||t.right<=a.left||t.left>=a.right)return!0}n=n.parentElement}return!1}function Ho(){window.addEventListener("scroll",Le,{passive:!0}),window.addEventListener("resize",Le,{passive:!0}),window.addEventListener("keydown",rs),Jt=new MutationObserver(e=>{e.every(n=>X?.contains(n.target)||E?.contains(n.target))||Le()}),Jt.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]}),typeof ResizeObserver<"u"&&(dt=new ResizeObserver(()=>Le()))}function Bo(){window.removeEventListener("scroll",Le),window.removeEventListener("resize",Le),window.removeEventListener("keydown",rs),ss(),Jt?.disconnect(),Jt=null,dt?.disconnect(),dt=null,Ue&&(cancelAnimationFrame(Ue),Ue=null)}function rs(e){e.key==="Escape"&&(_e?ye():Fe&&(X?.querySelectorAll(".bs-lp-form").forEach(t=>t.remove()),We(!1)))}function Le(){Ue||(Ue=requestAnimationFrame(()=>{Ue=null,Zr(),Do()}))}function Do(){if(!X)return;X.querySelectorAll(".bs-lp").forEach(t=>{let n=t.dataset.pinId,r=P.find(o=>o.id===n);if(!r)return;let s=es(ns(r));t.style.left=s.left,t.style.top=s.top,t.style.display=s.hidden?"none":""})}function Oo(e){let t=[],n=e.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;(s==="auto"||s==="scroll"||o==="auto"||o==="scroll")&&(n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth)&&t.push(n),n=n.parentElement}return t}function No(){ss();let e=new Set;for(let t of P){let n=Rn(t.elementSelector,t.elementXPath);if(!n)continue;let r=Oo(n);for(let s of r){if(e.has(s))continue;e.add(s);let o=()=>Le();s.addEventListener("scroll",o,{passive:!0}),An.push(()=>s.removeEventListener("scroll",o))}}}function ss(){for(let e of An)e();An=[]}function jo(){if(X)return;X=document.createElement("div"),X.id="bugstash-live-pins",E=document.createElement("bugstash-overlay"),E.style.setProperty("display","none","important"),E.style.setProperty("position","fixed","important"),E.style.setProperty("inset","0","important"),E.style.setProperty("z-index","2147483641","important"),E.style.setProperty("cursor","crosshair","important"),E.style.setProperty("background","rgba(0,0,0,0.05)","important"),E.style.setProperty("margin","0","important"),E.style.setProperty("padding","0","important"),E.style.setProperty("border","none","important"),E.style.setProperty("opacity","1","important"),E.style.setProperty("visibility","visible","important"),E.style.setProperty("pointer-events","auto","important"),E.style.setProperty("transform","none","important"),E.style.setProperty("filter","none","important"),E.style.setProperty("perspective","none","important"),E.style.setProperty("will-change","auto","important"),E.style.setProperty("contain","none","important"),E.style.setProperty("clip-path","none","important"),E.style.setProperty("isolation","auto","important"),E.style.setProperty("mix-blend-mode","normal","important"),E.style.setProperty("box-sizing","border-box","important"),E.style.setProperty("overflow","visible","important"),E.style.setProperty("float","none","important");let e=document.createElement("style");e.textContent=`
76
+ `;var Wt=null,Ke=0,Bo=5e3,Ft=new Map,_t=null,Ge=new Set;function Yt(t){_t=t,Ke=Date.now(),Oo()}function Oo(){Wt||(Wt=setInterval(No,Bo))}async function No(){if(!_t)return;let t=Nr();if(t)try{let e=Br(),n=window.location.pathname,r=await fetch(`${e}/api/pins/poll?projectId=${_t}&pathname=${encodeURIComponent(n)}&since=${Ke}`,{headers:{Authorization:`Bearer ${t}`}});if(!r.ok)return;let s=await r.json();if(!s.success)return;let o=Array.isArray(s.data)?s.data:s.data?.pins||[];Ke=s.serverTime||s.data?.serverTime||Date.now();for(let i of o)Ge.has(i.id)?Jr("pin:updated",{type:"pin:updated",projectId:_t,data:i,userId:"",timestamp:Date.now()}):(Ge.add(i.id),Jr("pin:created",{type:"pin:created",projectId:_t,data:i,userId:"",timestamp:Date.now()}))}catch{}}function Kr(){Wt&&(clearInterval(Wt),Wt=null),_t=null,Ge.clear(),Ke=0}function ue(t,e){return Ft.has(t)||Ft.set(t,new Set),Ft.get(t).add(e),()=>{Ft.get(t)?.delete(e)}}function Jr(t,e){Ft.get(t)?.forEach(n=>n(e)),Ft.get("*")?.forEach(n=>n(e))}function Mn(t){Ge=new Set(t)}function Gr(){return Wt!==null}var en,Y=null,L=null,$=[],ss=[],Xt=!1,Jt=null,jo="",Vt=null,Ze=null,Rn=[],fe=null,me=null,Pt={x:0,y:0};function os(){if(!me)return;let t=document.createElement("div");t.style.cssText="position:fixed!important;top:0!important;left:0!important;width:1px!important;height:1px!important;pointer-events:none!important;visibility:hidden!important;z-index:-1!important;opacity:0!important;",me.appendChild(t);try{let e=t.getBoundingClientRect();Pt={x:-e.left,y:-e.top}}finally{t.remove()}}function is(t){return Pt.x===0&&Pt.y===0?t:{left:`${parseFloat(t.left)+Pt.x}px`,top:`${parseFloat(t.top)+Pt.y}px`,hidden:t.hidden}}function Qr(t,e){return{left:`${t+Pt.x}px`,top:`${e+Pt.y}px`}}var tn={open:"#f97316",in_progress:"#3b82f6",resolved:"#22c55e",closed:"#6b7280"},Zr={critical:"#ef4444",high:"#f97316",medium:"#eab308",low:"#6b7280"};function Kt(t,e){en=t,me=e,jo=window.location.pathname,Xo(),os(),ps(),Vo(),ti(),ei(),Uo()}function as(){Fo(),Y?.remove(),Y=null,L?.remove(),L=null,me=null,$=[]}function $t(t){return Xt=t!==void 0?t:!Xt,L&&L.style.setProperty("display",Xt?"block":"none","important"),Xt}function nn(){return Xt}function ls(t){try{let e=document.documentElement.scrollWidth||document.body.scrollWidth||1,n=document.documentElement.scrollHeight||document.body.scrollHeight||1,r=window.scrollX,s=window.scrollY,o=In(t.elementSelector,t.elementXPath),i=Qe(t)&&t.xPercent>=0&&t.xPercent<=1&&t.yPercent>=0&&t.yPercent<=1,a=o?qo(o):!1;if(i&&o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){let p=c.left+t.xPercent*c.width,b=c.top+t.yPercent*c.height;return{left:`${p}px`,top:`${b}px`,hidden:a}}}if(i)return t.pageX>0||t.pageY>0?{left:`${t.pageX-r}px`,top:`${t.pageY-s}px`,hidden:!1}:{left:`${t.xPercent*e-r}px`,top:`${t.yPercent*n-s}px`,hidden:!1};if(o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){if(t.pageX>0||t.pageY>0){let p=Qe(t)?t.xPercent/100*e:t.pageX,b=Qe(t)?t.yPercent/100*n:t.pageY,v=c.left+c.width/2,S=c.top+c.height/2,D=p-r,R=b-s;return Math.abs(D-v)+Math.abs(R-S)>100?{left:`${v}px`,top:`${S}px`,hidden:a}:{left:`${D}px`,top:`${R}px`,hidden:a}}return{left:`${c.left+c.width/2}px`,top:`${c.top+c.height/2}px`,hidden:a}}}return Qe(t)?{left:`${t.xPercent/100*e-r}px`,top:`${t.yPercent/100*n-s}px`,hidden:!1}:{left:`${t.pageX-r}px`,top:`${t.pageY-s}px`,hidden:!1}}catch{let e=(t.pageX||0)-(window.scrollX||0),n=(t.pageY||0)-(window.scrollY||0);return{left:`${e}px`,top:`${n}px`,hidden:!1}}}function Qe(t){return t.xPercent!=null&&t.yPercent!=null&&(t.xPercent!==0||t.yPercent!==0||t.pageX===0&&t.pageY===0)}function In(t,e){let n;if(t&&t.startsWith('["')&&t.endsWith('"]'))try{let r=JSON.parse(t);n=Array.isArray(r)?r.filter(s=>typeof s=="string"):[t]}catch{n=[t]}else n=t?[t]:[];for(let r of n)if(r&&r!=="body")try{let s=document.querySelector(r);if(s)return s}catch{}if(e)try{let r=document.evaluate(e,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(r.singleNodeValue instanceof Element)return r.singleNodeValue}catch{}return null}function qo(t){let e=t.getBoundingClientRect();if(e.bottom<=0||e.top>=window.innerHeight||e.right<=0||e.left>=window.innerWidth)return!0;let n=t.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;if(s==="hidden"||s==="scroll"||s==="auto"||o==="hidden"||o==="scroll"||o==="auto"){let i=n.getBoundingClientRect();if(e.bottom<=i.top||e.top>=i.bottom||e.right<=i.left||e.left>=i.right)return!0}n=n.parentElement}return!1}function Uo(){window.addEventListener("scroll",Tt,{passive:!0}),window.addEventListener("resize",Tt,{passive:!0}),window.addEventListener("keydown",cs),Ze=new MutationObserver(t=>{t.every(n=>Y?.contains(n.target)||L?.contains(n.target))||Tt()}),Ze.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]}),typeof ResizeObserver<"u"&&(fe=new ResizeObserver(()=>Tt()))}function Fo(){window.removeEventListener("scroll",Tt),window.removeEventListener("resize",Tt),window.removeEventListener("keydown",cs),ds(),Ze?.disconnect(),Ze=null,fe?.disconnect(),fe=null,Vt&&(cancelAnimationFrame(Vt),Vt=null)}function cs(t){t.key==="Escape"&&(Jt?xt():Xt&&(Y?.querySelectorAll(".bs-lp-form").forEach(e=>e.remove()),$t(!1)))}function Tt(){Vt||(Vt=requestAnimationFrame(()=>{Vt=null,os(),_o()}))}function _o(){if(!Y)return;Y.querySelectorAll(".bs-lp").forEach(e=>{let n=e.dataset.pinId,r=$.find(o=>o.id===n);if(!r)return;let s=is(ls(r));e.style.left=s.left,e.style.top=s.top,e.style.display=s.hidden?"none":""})}function Wo(t){let e=[],n=t.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;(s==="auto"||s==="scroll"||o==="auto"||o==="scroll")&&(n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth)&&e.push(n),n=n.parentElement}return e}function Yo(){ds();let t=new Set;for(let e of $){let n=In(e.elementSelector,e.elementXPath);if(!n)continue;let r=Wo(n);for(let s of r){if(t.has(s))continue;t.add(s);let o=()=>Tt();s.addEventListener("scroll",o,{passive:!0}),Rn.push(()=>s.removeEventListener("scroll",o))}}}function ds(){for(let t of Rn)t();Rn=[]}function Xo(){if(Y)return;Y=document.createElement("div"),Y.id="bugstash-live-pins",L=document.createElement("bugstash-overlay"),L.style.setProperty("display","none","important"),L.style.setProperty("position","fixed","important"),L.style.setProperty("inset","0","important"),L.style.setProperty("z-index","2147483641","important"),L.style.setProperty("cursor","crosshair","important"),L.style.setProperty("background","rgba(0,0,0,0.05)","important"),L.style.setProperty("margin","0","important"),L.style.setProperty("padding","0","important"),L.style.setProperty("border","none","important"),L.style.setProperty("opacity","1","important"),L.style.setProperty("visibility","visible","important"),L.style.setProperty("pointer-events","auto","important"),L.style.setProperty("transform","none","important"),L.style.setProperty("filter","none","important"),L.style.setProperty("perspective","none","important"),L.style.setProperty("will-change","auto","important"),L.style.setProperty("contain","none","important"),L.style.setProperty("clip-path","none","important"),L.style.setProperty("isolation","auto","important"),L.style.setProperty("mix-blend-mode","normal","important"),L.style.setProperty("box-sizing","border-box","important"),L.style.setProperty("overflow","visible","important"),L.style.setProperty("float","none","important");let t=document.createElement("style");t.textContent=`
77
77
  /* \u2500\u2500\u2500 Isolation Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
78
- /* Kill ALL inherited properties from the host application.
79
- Shadow DOM blocks selector-based styles but NOT inheritance.
80
- font-family, color, direction, line-height, text-align, visibility,
81
- cursor, letter-spacing, word-spacing, text-transform, white-space,
82
- etc. all inherit through the shadow boundary. */
83
78
  :host {
84
79
  all: initial !important;
85
80
  position: fixed !important;
@@ -89,7 +84,6 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
89
84
  display: block !important;
90
85
  visibility: visible !important;
91
86
  opacity: 1 !important;
92
- /* Prevent this host from becoming a containing block */
93
87
  transform: none !important;
94
88
  perspective: none !important;
95
89
  filter: none !important;
@@ -97,20 +91,32 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
97
91
  contain: none !important;
98
92
  isolation: auto !important;
99
93
  }
100
- /* Hard reset for every element inside the shadow root */
101
94
  *, *::before, *::after {
102
95
  box-sizing: border-box !important;
103
96
  margin: 0;
104
97
  padding: 0;
105
98
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
106
99
  line-height: 1.5;
107
- color: #e8eaed;
108
100
  direction: ltr;
109
101
  text-align: left;
110
102
  -webkit-text-size-adjust: 100%;
111
103
  -webkit-font-smoothing: antialiased;
112
104
  -moz-osx-font-smoothing: grayscale;
113
105
  }
106
+ /* Color scheme support */
107
+ @media (prefers-color-scheme: light) {
108
+ :host { --bs-pin-bg: #ffffff; --bs-pin-text: #171717; --bs-pin-muted: #6b7280; --bs-pin-border: #eaeaea; --bs-pin-surface: #fafafa; --bs-pin-input-bg: #ffffff; --bs-pin-hover: #f5f5f5; --bs-pin-shadow: rgba(0,0,0,0.08); --bs-pin-shadow-lg: rgba(0,0,0,0.12); }
109
+ }
110
+ @media (prefers-color-scheme: dark) {
111
+ :host { --bs-pin-bg: #1a1a1a; --bs-pin-text: #ededed; --bs-pin-muted: #888; --bs-pin-border: #333; --bs-pin-surface: #222; --bs-pin-input-bg: #2a2a2a; --bs-pin-hover: #2a2a2a; --bs-pin-shadow: rgba(0,0,0,0.2); --bs-pin-shadow-lg: rgba(0,0,0,0.4); }
112
+ }
113
+ /* Fallback (default to light) */
114
+ :host {
115
+ --bs-pin-bg: #ffffff; --bs-pin-text: #171717; --bs-pin-muted: #6b7280; --bs-pin-border: #eaeaea; --bs-pin-surface: #fafafa; --bs-pin-input-bg: #ffffff; --bs-pin-hover: #f5f5f5; --bs-pin-shadow: rgba(0,0,0,0.08); --bs-pin-shadow-lg: rgba(0,0,0,0.12);
116
+ }
117
+ @media (prefers-color-scheme: dark) {
118
+ :host { --bs-pin-bg: #1a1a1a; --bs-pin-text: #ededed; --bs-pin-muted: #888; --bs-pin-border: #333; --bs-pin-surface: #222; --bs-pin-input-bg: #2a2a2a; --bs-pin-hover: #2a2a2a; --bs-pin-shadow: rgba(0,0,0,0.2); --bs-pin-shadow-lg: rgba(0,0,0,0.4); }
119
+ }
114
120
  #bugstash-live-pins {
115
121
  position: fixed !important;
116
122
  top: 0 !important;
@@ -120,225 +126,321 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
120
126
  overflow: visible !important;
121
127
  z-index: 2147483640 !important;
122
128
  pointer-events: none !important;
123
- /* Ensure this container never creates a containing block */
124
129
  transform: none !important;
125
130
  perspective: none !important;
126
131
  filter: none !important;
127
132
  will-change: auto !important;
128
133
  contain: none !important;
129
134
  }
130
- /* \u2500\u2500 Pin Marker \u2500\u2500 */
135
+
136
+ /* \u2500\u2500 Pin Marker (Avatar-based) \u2500\u2500 */
131
137
  .bs-lp {
132
138
  position: fixed !important;
133
139
  pointer-events: auto !important;
134
140
  cursor: pointer !important;
135
141
  transform: translate(-50%, -50%) !important;
136
142
  z-index: 1;
137
- transition: transform 0.2s cubic-bezier(0.34,1.56,0.64,1);
143
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
138
144
  }
139
- .bs-lp:hover { transform: translate(-50%, -50%) scale(1.2) !important; z-index: 5; }
145
+ .bs-lp:hover { transform: translate(-50%, -50%) scale(1.1) !important; z-index: 5; }
140
146
  .bs-lp-dot {
141
- width: 24px;
142
- height: 24px;
147
+ width: 32px;
148
+ height: 32px;
143
149
  border-radius: 50%;
144
150
  display: flex;
145
151
  align-items: center;
146
152
  justify-content: center;
147
- font-size: 11px;
148
- font-weight: 800;
153
+ font-size: 12px;
154
+ font-weight: 600;
149
155
  font-family: -apple-system, system-ui, sans-serif;
150
156
  color: #fff;
151
- box-shadow: 0 2px 8px rgba(0,0,0,0.4), 0 0 0 2.5px rgba(255,255,255,0.85);
157
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
152
158
  position: relative;
159
+ overflow: hidden;
160
+ background-size: cover;
161
+ background-position: center;
153
162
  }
154
- .bs-lp-ring {
155
- position: absolute;
156
- inset: -4px;
163
+ .bs-lp-avatar {
164
+ width: 100%;
165
+ height: 100%;
157
166
  border-radius: 50%;
158
- border: 2px solid currentColor;
159
- opacity: 0;
160
- animation: bs-lp-pulse 2s ease-out infinite;
167
+ object-fit: cover;
161
168
  }
162
- @keyframes bs-lp-pulse {
163
- 0% { opacity: 0.6; transform: scale(0.8); }
164
- 100% { opacity: 0; transform: scale(1.6); }
169
+ .bs-lp-initials {
170
+ width: 100%;
171
+ height: 100%;
172
+ border-radius: 50%;
173
+ display: flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ font-size: 12px;
177
+ font-weight: 600;
178
+ color: #fff;
179
+ }
180
+ .bs-lp-badge {
181
+ position: absolute;
182
+ top: -3px;
183
+ right: -3px;
184
+ min-width: 14px;
185
+ height: 14px;
186
+ border-radius: 7px;
187
+ background: var(--bs-pin-text, #171717);
188
+ color: var(--bs-pin-bg, #fff);
189
+ font-size: 9px;
190
+ font-weight: 700;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ padding: 0 3px;
195
+ line-height: 1;
196
+ z-index: 2;
165
197
  }
166
198
 
167
- /* \u2500\u2500 Popup \u2500\u2500 */
199
+ /* \u2500\u2500 Popup (Clean Card) \u2500\u2500 */
168
200
  .bs-lp-popup {
169
201
  position: absolute;
170
- left: 34px;
202
+ left: 40px;
171
203
  top: -8px;
172
- width: min(320px, calc(100vw - 48px));
173
- background: #111318;
174
- border: 1px solid rgba(255,255,255,0.08);
175
- border-radius: 12px;
176
- box-shadow: 0 20px 60px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.03);
204
+ width: min(360px, calc(100vw - 48px));
205
+ background: var(--bs-pin-bg);
206
+ border: 1px solid var(--bs-pin-border);
207
+ border-radius: 14px;
208
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg), 0 0 0 1px var(--bs-pin-shadow);
209
+ backdrop-filter: blur(12px);
177
210
  z-index: 10;
178
211
  pointer-events: auto;
179
212
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
180
- color: #e8eaed;
213
+ color: var(--bs-pin-text);
181
214
  overflow: hidden;
182
- animation: bs-lp-pop-in 0.2s cubic-bezier(0.34,1.56,0.64,1);
215
+ animation: bs-lp-pop-in 0.2s ease;
183
216
  }
184
217
  @keyframes bs-lp-pop-in {
185
- from { opacity: 0; transform: scale(0.95) translateX(-4px); }
186
- to { opacity: 1; transform: scale(1) translateX(0); }
218
+ from { opacity: 0; transform: translateY(4px); }
219
+ to { opacity: 1; transform: translateY(0); }
187
220
  }
188
221
  .bs-lp-popup-hdr {
189
- padding: 12px 14px 10px;
222
+ padding: 14px 16px 12px;
190
223
  display: flex;
191
224
  align-items: flex-start;
192
- gap: 8px;
225
+ gap: 10px;
193
226
  }
194
- .bs-lp-popup-title {
195
- font-size: 13px;
196
- font-weight: 700;
227
+ .bs-lp-popup-hdr-avatar {
228
+ width: 24px;
229
+ height: 24px;
230
+ border-radius: 50%;
231
+ flex-shrink: 0;
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ font-size: 10px;
236
+ font-weight: 600;
237
+ color: #fff;
238
+ overflow: hidden;
239
+ }
240
+ .bs-lp-popup-hdr-avatar img {
241
+ width: 100%;
242
+ height: 100%;
243
+ object-fit: cover;
244
+ }
245
+ .bs-lp-popup-hdr-body {
197
246
  flex: 1;
247
+ min-width: 0;
248
+ }
249
+ .bs-lp-popup-title {
250
+ font-size: 14px;
251
+ font-weight: 600;
252
+ color: var(--bs-pin-text);
198
253
  line-height: 1.3;
254
+ margin-bottom: 2px;
199
255
  }
200
- .bs-lp-popup-badge {
201
- font-size: 9px;
202
- padding: 3px 8px;
256
+ .bs-lp-popup-meta {
257
+ font-size: 12px;
258
+ color: var(--bs-pin-muted);
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 6px;
262
+ flex-wrap: wrap;
263
+ }
264
+ .bs-lp-popup-pill {
265
+ font-size: 11px;
266
+ padding: 2px 8px;
203
267
  border-radius: 99px;
204
- font-weight: 700;
205
- text-transform: uppercase;
206
- letter-spacing: 0.4px;
268
+ font-weight: 500;
207
269
  white-space: nowrap;
208
- flex-shrink: 0;
209
270
  }
210
271
  .bs-lp-popup-close {
211
272
  all: initial;
212
- color: #4b5563;
213
- font-size: 18px;
273
+ color: var(--bs-pin-muted);
214
274
  cursor: pointer;
215
- line-height: 1;
216
- padding: 0 2px;
275
+ padding: 2px;
217
276
  flex-shrink: 0;
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ border-radius: 6px;
281
+ transition: background 0.15s, color 0.15s;
218
282
  }
219
- .bs-lp-popup-close:hover { color: #e8eaed; }
283
+ .bs-lp-popup-close:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
284
+ .bs-lp-popup-close svg { width: 16px; height: 16px; }
220
285
  .bs-lp-popup-desc {
221
- padding: 0 14px 10px;
222
- font-size: 12px;
223
- line-height: 1.55;
224
- color: #9ca3af;
286
+ padding: 0 16px 12px;
287
+ font-size: 13px;
288
+ line-height: 1.6;
289
+ color: var(--bs-pin-muted);
225
290
  }
226
291
  .bs-lp-popup-info {
227
- padding: 8px 14px;
228
- font-size: 10px;
229
- color: #6b7280;
230
- background: rgba(255,255,255,0.02);
231
- border-top: 1px solid rgba(255,255,255,0.05);
292
+ padding: 8px 16px;
293
+ font-size: 11px;
294
+ color: var(--bs-pin-muted);
295
+ background: var(--bs-pin-surface);
296
+ border-top: 1px solid var(--bs-pin-border);
232
297
  display: flex;
233
298
  justify-content: space-between;
234
299
  }
235
300
 
236
301
  /* Comments */
237
302
  .bs-lp-cmts {
238
- max-height: 200px;
303
+ max-height: 220px;
239
304
  overflow-y: auto;
240
- border-top: 1px solid rgba(255,255,255,0.05);
305
+ border-top: 1px solid var(--bs-pin-border);
241
306
  }
242
307
  .bs-lp-cmts::-webkit-scrollbar { width: 4px; }
243
- .bs-lp-cmts::-webkit-scrollbar-thumb { background: #333; border-radius: 2px; }
308
+ .bs-lp-cmts::-webkit-scrollbar-thumb { background: var(--bs-pin-border); border-radius: 2px; }
244
309
  .bs-lp-cmt {
245
- padding: 10px 14px;
246
- border-bottom: 1px solid rgba(255,255,255,0.03);
310
+ padding: 10px 16px;
311
+ display: flex;
312
+ gap: 8px;
313
+ align-items: flex-start;
314
+ border-bottom: 1px solid var(--bs-pin-border);
247
315
  }
248
316
  .bs-lp-cmt:last-child { border-bottom: none; }
317
+ .bs-lp-cmt-avatar {
318
+ width: 20px;
319
+ height: 20px;
320
+ border-radius: 50%;
321
+ flex-shrink: 0;
322
+ display: flex;
323
+ align-items: center;
324
+ justify-content: center;
325
+ font-size: 8px;
326
+ font-weight: 600;
327
+ color: #fff;
328
+ overflow: hidden;
329
+ }
330
+ .bs-lp-cmt-avatar img { width: 100%; height: 100%; object-fit: cover; }
331
+ .bs-lp-cmt-content { flex: 1; min-width: 0; }
249
332
  .bs-lp-cmt-top {
250
333
  display: flex;
251
334
  align-items: center;
252
335
  justify-content: space-between;
253
- margin-bottom: 3px;
336
+ margin-bottom: 2px;
254
337
  }
255
338
  .bs-lp-cmt-author {
256
339
  font-weight: 600;
257
- color: #e8eaed;
258
- font-size: 11px;
340
+ color: var(--bs-pin-text);
341
+ font-size: 12px;
259
342
  }
260
343
  .bs-lp-cmt-time {
261
- font-size: 10px;
262
- color: #4b5563;
344
+ font-size: 11px;
345
+ color: var(--bs-pin-muted);
263
346
  }
264
347
  .bs-lp-cmt-body {
265
- color: #9ca3af;
266
- font-size: 12px;
267
- line-height: 1.4;
348
+ color: var(--bs-pin-text);
349
+ font-size: 13px;
350
+ line-height: 1.5;
268
351
  }
269
352
 
270
353
  /* Comment input */
271
354
  .bs-lp-input {
272
355
  display: flex;
273
- border-top: 1px solid rgba(255,255,255,0.06);
356
+ align-items: center;
357
+ border-top: 1px solid var(--bs-pin-border);
358
+ padding: 4px;
359
+ gap: 4px;
274
360
  }
275
361
  .bs-lp-input input {
276
362
  all: initial;
277
363
  flex: 1;
278
- padding: 10px 14px;
279
- color: #e8eaed;
280
- font-size: 12px;
364
+ padding: 8px 12px;
365
+ color: var(--bs-pin-text);
366
+ font-size: 13px;
367
+ font-family: inherit;
368
+ background: var(--bs-pin-input-bg);
369
+ border: 1px solid var(--bs-pin-border);
370
+ border-radius: 8px;
371
+ box-sizing: border-box;
372
+ transition: border-color 0.15s;
281
373
  }
282
- .bs-lp-input input::placeholder { color: #4b5563; }
374
+ .bs-lp-input input:focus { border-color: #6E9ED0; outline: none; }
375
+ .bs-lp-input input::placeholder { color: var(--bs-pin-muted); }
283
376
  .bs-lp-input button {
284
377
  all: initial;
285
- padding: 0 14px;
286
- color: #6E9ED0;
287
- font-size: 11px;
288
- font-weight: 700;
378
+ width: 32px;
379
+ height: 32px;
380
+ border-radius: 8px;
381
+ background: #6E9ED0;
382
+ color: #fff;
289
383
  cursor: pointer;
384
+ display: flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ flex-shrink: 0;
388
+ transition: opacity 0.15s;
290
389
  }
291
- .bs-lp-input button:hover { color: #93bdea; }
390
+ .bs-lp-input button:hover { opacity: 0.85; }
391
+ .bs-lp-input button svg { width: 14px; height: 14px; }
292
392
 
293
393
  /* Actions */
294
394
  .bs-lp-acts {
295
- padding: 8px 14px;
395
+ padding: 8px 16px 10px;
296
396
  display: flex;
297
- gap: 6px;
298
- border-top: 1px solid rgba(255,255,255,0.05);
397
+ gap: 8px;
398
+ border-top: 1px solid var(--bs-pin-border);
299
399
  }
300
400
  .bs-lp-act {
301
401
  all: initial;
302
- padding: 5px 12px;
303
- border-radius: 6px;
304
- border: 1px solid rgba(255,255,255,0.08);
305
- background: rgba(255,255,255,0.03);
306
- color: #9ca3af;
307
- font-size: 11px;
308
- font-weight: 600;
402
+ padding: 6px 14px;
403
+ border-radius: 8px;
404
+ background: var(--bs-pin-surface);
405
+ color: var(--bs-pin-muted);
406
+ font-size: 12px;
407
+ font-weight: 500;
408
+ font-family: inherit;
309
409
  cursor: pointer;
310
410
  transition: all 0.15s;
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 5px;
311
414
  }
312
- .bs-lp-act:hover { background: rgba(255,255,255,0.06); color: #e8eaed; }
313
- .bs-lp-act.resolve { color: #4ade80; border-color: rgba(34,197,94,0.2); }
415
+ .bs-lp-act:hover { background: var(--bs-pin-hover); color: var(--bs-pin-text); }
416
+ .bs-lp-act.resolve { color: #22c55e; }
314
417
  .bs-lp-act.resolve:hover { background: rgba(34,197,94,0.1); }
315
- .bs-lp-act.delete { color: #f87171; border-color: rgba(239,68,68,0.2); }
418
+ .bs-lp-act.delete { color: #ef4444; }
316
419
  .bs-lp-act.delete:hover { background: rgba(239,68,68,0.1); }
317
420
 
318
421
  /* \u2500\u2500 New Pin Form \u2500\u2500 */
319
422
  .bs-lp-form {
320
423
  position: fixed;
321
- width: min(300px, calc(100vw - 32px));
322
- background: #111318;
323
- border: 1px solid rgba(255,255,255,0.08);
324
- border-radius: 12px;
325
- box-shadow: 0 20px 60px rgba(0,0,0,0.6);
424
+ width: min(320px, calc(100vw - 32px));
425
+ background: var(--bs-pin-bg);
426
+ border: 1px solid var(--bs-pin-border);
427
+ border-radius: 14px;
428
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg);
429
+ backdrop-filter: blur(12px);
326
430
  z-index: 2147483645;
327
431
  pointer-events: auto;
328
432
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
329
- color: #e8eaed;
330
- padding: 14px;
331
- animation: bs-lp-pop-in 0.2s cubic-bezier(0.34,1.56,0.64,1);
433
+ color: var(--bs-pin-text);
434
+ padding: 16px;
435
+ animation: bs-lp-pop-in 0.2s ease;
332
436
  }
333
437
  .bs-lp-form-label {
334
438
  display: block;
335
- font-size: 10px;
336
- color: #6b7280;
439
+ font-size: 12px;
440
+ color: var(--bs-pin-muted);
337
441
  margin-bottom: 4px;
338
- margin-top: 10px;
339
- font-weight: 700;
340
- text-transform: uppercase;
341
- letter-spacing: 0.5px;
442
+ margin-top: 12px;
443
+ font-weight: 500;
342
444
  }
343
445
  .bs-lp-form-label:first-child { margin-top: 0; }
344
446
  .bs-lp-form input,
@@ -347,11 +449,11 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
347
449
  all: initial;
348
450
  display: block;
349
451
  width: 100%;
350
- background: rgba(255,255,255,0.04);
351
- border: 1px solid rgba(255,255,255,0.08);
352
- border-radius: 8px;
353
- padding: 8px 10px;
354
- color: #e8eaed;
452
+ background: var(--bs-pin-input-bg);
453
+ border: 1px solid var(--bs-pin-border);
454
+ border-radius: 10px;
455
+ padding: 8px 12px;
456
+ color: var(--bs-pin-text);
355
457
  font-size: 13px;
356
458
  font-family: inherit;
357
459
  box-sizing: border-box;
@@ -366,21 +468,51 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
366
468
  .bs-lp-form textarea:focus,
367
469
  .bs-lp-form select:focus {
368
470
  border-color: #6E9ED0;
471
+ outline: none;
369
472
  }
370
473
  .bs-lp-form input::placeholder,
371
- .bs-lp-form textarea::placeholder { color: #4b5563; }
474
+ .bs-lp-form textarea::placeholder { color: var(--bs-pin-muted); }
475
+ /* Segmented buttons for priority/category */
476
+ .bs-lp-seg-row {
477
+ display: flex;
478
+ gap: 0;
479
+ border: 1px solid var(--bs-pin-border);
480
+ border-radius: 10px;
481
+ overflow: hidden;
482
+ }
483
+ .bs-lp-seg-btn {
484
+ all: initial;
485
+ flex: 1;
486
+ padding: 7px 4px;
487
+ text-align: center;
488
+ font-size: 12px;
489
+ font-weight: 500;
490
+ font-family: inherit;
491
+ cursor: pointer;
492
+ color: var(--bs-pin-muted);
493
+ background: var(--bs-pin-input-bg);
494
+ border-right: 1px solid var(--bs-pin-border);
495
+ transition: all 0.15s;
496
+ box-sizing: border-box;
497
+ }
498
+ .bs-lp-seg-btn:last-child { border-right: none; }
499
+ .bs-lp-seg-btn:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
500
+ .bs-lp-seg-btn.bs-active {
501
+ background: #6E9ED0;
502
+ color: #fff;
503
+ }
372
504
  .bs-lp-form-btns {
373
505
  display: flex;
374
506
  gap: 8px;
375
- margin-top: 12px;
507
+ margin-top: 14px;
376
508
  }
377
509
  .bs-lp-form-btns button {
378
510
  all: initial;
379
- flex: 1;
380
- padding: 9px;
381
- border-radius: 8px;
382
- font-size: 12px;
383
- font-weight: 700;
511
+ padding: 9px 16px;
512
+ border-radius: 10px;
513
+ font-size: 13px;
514
+ font-weight: 600;
515
+ font-family: inherit;
384
516
  cursor: pointer;
385
517
  text-align: center;
386
518
  transition: opacity 0.15s;
@@ -388,97 +520,94 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
388
520
  .bs-lp-form-submit {
389
521
  background: #6E9ED0;
390
522
  color: #fff;
523
+ flex: 1;
391
524
  }
392
525
  .bs-lp-form-submit:hover { opacity: 0.85; }
393
526
  .bs-lp-form-cancel {
394
- background: rgba(255,255,255,0.06);
395
- color: #9ca3af;
527
+ background: transparent;
528
+ color: var(--bs-pin-muted);
396
529
  }
397
- .bs-lp-form-cancel:hover { background: rgba(255,255,255,0.1); }
398
- `,X.appendChild(e),pt.appendChild(X),document.body.appendChild(E),E.addEventListener("click",t=>{let n=t.clientX,r=t.clientY,s=null;try{E.style.setProperty("pointer-events","none","important"),s=document.elementFromPoint(n,r)}finally{E.style.setProperty("pointer-events","auto","important")}let o=n+window.scrollX,a=r+window.scrollY,i,c;if(s&&s!==document.body&&s!==document.documentElement){let u=s.getBoundingClientRect();if(u.width>0&&u.height>0)i=(n-u.left)/u.width,c=(r-u.top)/u.height;else{let p=document.documentElement.scrollWidth||document.body.scrollWidth||1,f=document.documentElement.scrollHeight||document.body.scrollHeight||1;i=o/p*100,c=a/f*100}}else{let u=document.documentElement.scrollWidth||document.body.scrollWidth||1,p=document.documentElement.scrollHeight||document.body.scrollHeight||1;i=o/u*100,c=a/p*100}Xo(o,a,i,c,n,r,s)})}async function os(){let e=await Br(Gt,window.location.pathname);e.success&&e.data&&(P=e.data,$n(P.map(t=>t.id)),be())}async function qo(){let e=await Nr(Gt);e.success&&e.data&&(Qr=e.data)}function be(){if(X){X.querySelectorAll(".bs-lp").forEach(e=>e.remove()),P.forEach((e,t)=>{let n=document.createElement("div");n.className="bs-lp",n.dataset.pinId=e.id;let r=es(ns(e));n.style.left=r.left,n.style.top=r.top,r.hidden&&(n.style.display="none");let s=Kt[e.priority]||Kt.medium;n.innerHTML=`
399
- <div class="bs-lp-dot" style="background:${s};color:${s}">
400
- ${t+1}
401
- <span class="bs-lp-ring"></span>
530
+ .bs-lp-form-cancel:hover { color: var(--bs-pin-text); }
531
+ `,Y.appendChild(t),me.appendChild(Y),document.body.appendChild(L),L.addEventListener("click",e=>{let n=e.clientX,r=e.clientY,s=null;try{L.style.setProperty("pointer-events","none","important"),s=document.elementFromPoint(n,r)}finally{L.style.setProperty("pointer-events","auto","important")}let o=n+window.scrollX,i=r+window.scrollY,a,c;if(s&&s!==document.body&&s!==document.documentElement){let p=s.getBoundingClientRect();if(p.width>0&&p.height>0)a=(n-p.left)/p.width,c=(r-p.top)/p.height;else{let b=document.documentElement.scrollWidth||document.body.scrollWidth||1,v=document.documentElement.scrollHeight||document.body.scrollHeight||1;a=o/b*100,c=i/v*100}}else{let p=document.documentElement.scrollWidth||document.body.scrollWidth||1,b=document.documentElement.scrollHeight||document.body.scrollHeight||1;a=o/p*100,c=i/b*100}Zo(o,i,a,c,n,r,s)})}async function ps(){let t=await jr(en,window.location.pathname);t.success&&t.data&&($=t.data,Mn($.map(e=>e.id)),gt())}async function Vo(){let t=await Fr(en);t.success&&t.data&&(ss=t.data)}function gt(){if(Y){Y.querySelectorAll(".bs-lp").forEach(t=>t.remove()),$.forEach(t=>{let e=document.createElement("div");e.className="bs-lp",e.dataset.pinId=t.id;let n=is(ls(t));e.style.left=n.left,e.style.top=n.top,n.hidden&&(e.style.display="none");let r=tn[t.status]||tn.open,s=Hn(t.creatorName||"U"),o=Dn(t.creatorName||"U"),i=t.creatorAvatar?`<img class="bs-lp-avatar" src="${mt(t.creatorAvatar)}" alt="" />`:`<div class="bs-lp-initials" style="background:${o}">${s}</div>`,a=t.commentCount>0?`<span class="bs-lp-badge">${t.commentCount>99?"99+":t.commentCount}</span>`:"";e.innerHTML=`
532
+ <div class="bs-lp-dot" style="border:2px solid ${r}; background:transparent;">
533
+ ${i}
534
+ ${a}
402
535
  </div>
403
- `,n.addEventListener("click",o=>{o.stopPropagation(),Fo(e,n)}),X.appendChild(n)}),No(),dt?.disconnect();for(let e of P){let t=Rn(e.elementSelector,e.elementXPath);t&&dt?.observe(t)}}}function Kr(e){let t=typeof e=="string"?new Date(e).getTime():e;if(isNaN(t))return"";let n=Date.now()-t,r=Math.floor(n/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;let s=Math.floor(r/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`}function Gr(e){requestAnimationFrame(()=>{let t=e.getBoundingClientRect(),n=16,r=0,s=0;if(t.right>window.innerWidth-n&&(r=window.innerWidth-n-t.right),t.left+r<n&&(r=n-t.left),t.bottom>window.innerHeight-n&&(s=window.innerHeight-n-t.bottom),t.top+s<n&&(s=n-t.top),r!==0||s!==0){let o=parseFloat(e.style.left)||0,a=parseFloat(e.style.top)||0;e.style.left=`${o+r}px`,e.style.top=`${a+s}px`,e.style.right="auto",e.style.bottom="auto"}})}async function Fo(e,t){ye();let n=document.createElement("div");n.className="bs-lp-popup";let r=ie(),s=e.createdBy||e.createdById,o=r&&(r.role==="owner"||r.role==="admin"||r.id===s),a=Jr[e.status]||Jr.open,i=Kt[e.priority]||Kt.medium,c=e.priority?e.priority.charAt(0).toUpperCase()+e.priority.slice(1):"Medium";n.innerHTML=`
536
+ `,e.addEventListener("click",c=>{c.stopPropagation(),Jo(t,e)}),Y.appendChild(e)}),Yo(),fe?.disconnect();for(let t of $){let e=In(t.elementSelector,t.elementXPath);e&&fe?.observe(e)}}}function bs(t){let e=typeof t=="string"?new Date(t).getTime():t;if(isNaN(e))return"";let n=Date.now()-e,r=Math.floor(n/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;let s=Math.floor(r/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`}function ts(t){requestAnimationFrame(()=>{let e=t.getBoundingClientRect(),n=16,r=0,s=0;if(e.right>window.innerWidth-n&&(r=window.innerWidth-n-e.right),e.left+r<n&&(r=n-e.left),e.bottom>window.innerHeight-n&&(s=window.innerHeight-n-e.bottom),e.top+s<n&&(s=n-e.top),r!==0||s!==0){let o=parseFloat(t.style.left)||0,i=parseFloat(t.style.top)||0;t.style.left=`${o+r}px`,t.style.top=`${i+s}px`,t.style.right="auto",t.style.bottom="auto"}})}async function Jo(t,e){xt();let n=document.createElement("div");n.className="bs-lp-popup";let r=ot(),s=t.createdBy||t.createdById,o=r&&(r.role==="owner"||r.role==="admin"||r.id===s),i=tn[t.status]||tn.open,a=Zr[t.priority]||Zr.medium,c=t.priority?t.priority.charAt(0).toUpperCase()+t.priority.slice(1):"Medium",p=Hn(t.creatorName||"U"),b=Dn(t.creatorName||"U"),v=t.creatorAvatar?`<img src="${mt(t.creatorAvatar)}" alt="" style="width:100%;height:100%;object-fit:cover;border-radius:50%;" />`:`<span>${p}</span>`,S=t.status.replace("_"," "),D='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg>',R='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>';n.innerHTML=`
404
537
  <div class="bs-lp-popup-hdr">
405
- <div class="bs-lp-popup-title">${ue(e.title)}</div>
406
- <span class="bs-lp-popup-badge" style="background:${i}18;color:${i}">${c}</span>
407
- <span class="bs-lp-popup-badge" style="background:${a}18;color:${a}">${e.status.replace("_"," ")}</span>
408
- <button class="bs-lp-popup-close">&times;</button>
409
- </div>
410
- ${e.description?`<div class="bs-lp-popup-desc">${ue(e.description)}</div>`:""}
411
- <div class="bs-lp-popup-info">
412
- <span>${e.creatorName||"Unknown"} &middot; ${Kr(e.createdAt)}</span>
413
- <span>${e.assigneeName?`\u2192 ${e.assigneeName}`:"Unassigned"}</span>
538
+ <div class="bs-lp-popup-hdr-avatar" style="background:${b}">
539
+ ${v}
540
+ </div>
541
+ <div class="bs-lp-popup-hdr-body">
542
+ <div class="bs-lp-popup-title">${mt(t.title)}</div>
543
+ <div class="bs-lp-popup-meta">
544
+ <span>${t.creatorName||"Unknown"}</span>
545
+ <span>&middot;</span>
546
+ <span>${bs(t.createdAt)}</span>
547
+ <span class="bs-lp-popup-pill" style="background:${i}18;color:${i}">${S}</span>
548
+ <span class="bs-lp-popup-pill" style="background:${a}18;color:${a}">${c}</span>
549
+ </div>
550
+ </div>
551
+ <button class="bs-lp-popup-close">${R}</button>
414
552
  </div>
553
+ ${t.description?`<div class="bs-lp-popup-desc">${mt(t.description)}</div>`:""}
554
+ ${t.assigneeName?`<div class="bs-lp-popup-info"><span>Assigned to ${mt(t.assigneeName)}</span></div>`:""}
415
555
  <div class="bs-lp-cmts" id="bs-lp-cmts">
416
- <div class="bs-lp-cmt" style="text-align:center;color:#4b5563;padding:12px">Loading comments...</div>
556
+ <div style="text-align:center;color:var(--bs-pin-muted);padding:12px;font-size:12px">Loading comments...</div>
417
557
  </div>
418
558
  <div class="bs-lp-input">
419
- <input type="text" placeholder="Add a comment..." id="bs-lp-cmt-in" name="pin-comment" />
420
- <button id="bs-lp-cmt-send">Send</button>
559
+ <input type="text" placeholder="Write a comment..." id="bs-lp-cmt-in" name="pin-comment" />
560
+ <button id="bs-lp-cmt-send">${D}</button>
421
561
  </div>
422
562
  <div class="bs-lp-acts">
423
- ${e.status!=="resolved"?'<button class="bs-lp-act resolve" id="bs-lp-resolve">Resolve</button>':'<button class="bs-lp-act" id="bs-lp-reopen">Reopen</button>'}
424
- ${o?'<button class="bs-lp-act delete" id="bs-lp-delete">Delete</button>':""}
563
+ ${t.status!=="resolved"?'<button class="bs-lp-act resolve" id="bs-lp-resolve">&#10003; Resolve</button>':'<button class="bs-lp-act" id="bs-lp-reopen">&#8634; Reopen</button>'}
564
+ ${o?'<button class="bs-lp-act delete" id="bs-lp-delete">&#10005; Delete</button>':""}
425
565
  </div>
426
- `,t.appendChild(n),_e=n,Or(e.id).then(p=>{let f=n.querySelector("#bs-lp-cmts");if(!f)return;let w=p.success&&p.data?p.data:[];f.innerHTML=w.length?w.map(S=>`
427
- <div class="bs-lp-cmt">
428
- <div class="bs-lp-cmt-top">
429
- <span class="bs-lp-cmt-author">${ue(S.author?.name||S.authorName||"Unknown")}</span>
430
- <span class="bs-lp-cmt-time">${Kr(new Date(S.createdAt).getTime())}</span>
431
- </div>
432
- <div class="bs-lp-cmt-body">${ue(S.body)}</div>
433
- </div>
434
- `).join(""):"",Gr(n)}),Gr(n),n.querySelector(".bs-lp-popup-close").addEventListener("click",p=>{p.stopPropagation(),ye()}),n.querySelector("#bs-lp-cmt-send")?.addEventListener("click",async()=>{let p=n.querySelector("#bs-lp-cmt-in"),f=p.value.trim();if(f)if(p.value="",navigator.onLine){let w=await Ln(e.id,f);if(w.success&&w.data){let S=n.querySelector("#bs-lp-cmts"),M=w.data;S.innerHTML+=`
435
- <div class="bs-lp-cmt">
436
- <div class="bs-lp-cmt-top">
437
- <span class="bs-lp-cmt-author">${ue(M.authorName||r?.name||"You")}</span>
438
- <span class="bs-lp-cmt-time">just now</span>
439
- </div>
440
- <div class="bs-lp-cmt-body">${ue(M.body)}</div>
441
- </div>
442
- `,S.scrollTop=S.scrollHeight}}else Pn({type:"create_comment",data:{pinId:e.id,body:f}})}),n.querySelector("#bs-lp-cmt-in")?.addEventListener("keydown",p=>{p.key==="Enter"&&n.querySelector("#bs-lp-cmt-send")?.dispatchEvent(new Event("click"))}),n.querySelector("#bs-lp-resolve")?.addEventListener("click",async()=>{await Ft(e.id,{status:"resolved"});let p=P.findIndex(f=>f.id===e.id);p>=0&&(P=P.map((f,w)=>w===p?{...f,status:"resolved"}:f)),ye(),be()}),n.querySelector("#bs-lp-reopen")?.addEventListener("click",async()=>{await Ft(e.id,{status:"open"});let p=P.findIndex(f=>f.id===e.id);p>=0&&(P=P.map((f,w)=>w===p?{...f,status:"open"}:f)),ye(),be()});let u=!1;n.querySelector("#bs-lp-delete")?.addEventListener("click",async()=>{u||confirm("Delete this pin?")&&(u=!0,await Dr(e.id),P=P.filter(p=>p.id!==e.id),ye(),be())}),n.addEventListener("click",p=>p.stopPropagation())}function ye(){_e?.remove(),_e=null}var Mn=e=>e?typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1"):"";function Uo(e){if(!e||e===document.body||e===document.documentElement)return["body"];let t=[];for(let r of["data-testid","data-test-id","data-cy"]){let s=e.getAttribute(r);if(s){t.push(`[${r}="${Mn(s)}"]`);break}}if(e.id)try{let r=`#${Mn(e.id)}`;document.querySelectorAll(r).length===1&&t.push(r)}catch{}let n=e.getAttribute("aria-label");if(n){let r=`${e.tagName.toLowerCase()}[aria-label="${Mn(n)}"]`;try{document.querySelectorAll(r).length===1&&t.push(r)}catch{}}return t.push(_o(e)),t}function _o(e){let t=[],n=e;for(;n&&n!==document.body&&n!==document.documentElement;){let r=n,s=r.parentElement;if(!s)break;let o=r.tagName.toLowerCase(),a=Array.from(s.children).filter(i=>i.tagName===r.tagName);a.length>1&&(o+=`:nth-of-type(${a.indexOf(r)+1})`),t.unshift(o),n=s}return t.join(" > ")}function Wo(e){if(!e)return"";let t=[],n=e;for(;n&&n!==document.body;){let r=1,s=n.previousElementSibling;for(;s;)s.tagName===n.tagName&&r++,s=s.previousElementSibling;t.unshift(`${n.tagName.toLowerCase()}[${r}]`),n=n.parentElement}return"/body/"+t.join("/")}function Xo(e,t,n,r,s,o,a){ye(),X?.querySelectorAll(".bs-lp-form").forEach(M=>M.remove());let i=document.createElement("div");i.className="bs-lp-form";let c=Math.min(300,window.innerWidth-32),u=16,p=s+u,f=o-8;p+c>window.innerWidth-u&&(p=s-c-u),p<u&&(p=u);let w=Vr(p,f);i.style.left=w.left,i.style.top=w.top,requestAnimationFrame(()=>{let M=i.getBoundingClientRect();if(M.bottom>window.innerHeight-u){let re=Vr(p,Math.max(u,o-M.height));i.style.top=re.top}});let S=Qr.filter(M=>M.userId!==ie()?.id).map(M=>`<option value="${M.userId}">${ue(M.name)}</option>`).join("");i.innerHTML=`
443
- <label class="bs-lp-form-label">Title *</label>
566
+ `,e.appendChild(n),Jt=n,Ur(t.id).then(w=>{let E=n.querySelector("#bs-lp-cmts");if(!E)return;let T=w.success&&w.data?w.data:[];E.innerHTML=T.length?T.map(pt=>zn(pt)).join(""):"",ts(n)}),ts(n),n.querySelector(".bs-lp-popup-close").addEventListener("click",w=>{w.stopPropagation(),xt()}),n.querySelector("#bs-lp-cmt-send")?.addEventListener("click",async()=>{let w=n.querySelector("#bs-lp-cmt-in"),E=w.value.trim();if(E)if(w.value="",navigator.onLine){let T=await Sn(t.id,E);if(T.success&&T.data){let pt=n.querySelector("#bs-lp-cmts");pt.innerHTML+=zn(T.data),pt.scrollTop=pt.scrollHeight}}else Pn({type:"create_comment",data:{pinId:t.id,body:E}})}),n.querySelector("#bs-lp-cmt-in")?.addEventListener("keydown",w=>{w.key==="Enter"&&n.querySelector("#bs-lp-cmt-send")?.dispatchEvent(new Event("click"))}),n.querySelector("#bs-lp-resolve")?.addEventListener("click",async()=>{await Ye(t.id,{status:"resolved"});let w=$.findIndex(E=>E.id===t.id);w>=0&&($=$.map((E,T)=>T===w?{...E,status:"resolved"}:E)),xt(),gt()}),n.querySelector("#bs-lp-reopen")?.addEventListener("click",async()=>{await Ye(t.id,{status:"open"});let w=$.findIndex(E=>E.id===t.id);w>=0&&($=$.map((E,T)=>T===w?{...E,status:"open"}:E)),xt(),gt()});let Z=!1;n.querySelector("#bs-lp-delete")?.addEventListener("click",async()=>{Z||confirm("Delete this pin?")&&(Z=!0,await qr(t.id),$=$.filter(w=>w.id!==t.id),xt(),gt())}),n.addEventListener("click",w=>w.stopPropagation())}function xt(){Jt?.remove(),Jt=null}var An=t=>t?typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(t):t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1"):"";function Ko(t){if(!t||t===document.body||t===document.documentElement)return["body"];let e=[];for(let r of["data-testid","data-test-id","data-cy"]){let s=t.getAttribute(r);if(s){e.push(`[${r}="${An(s)}"]`);break}}if(t.id)try{let r=`#${An(t.id)}`;document.querySelectorAll(r).length===1&&e.push(r)}catch{}let n=t.getAttribute("aria-label");if(n){let r=`${t.tagName.toLowerCase()}[aria-label="${An(n)}"]`;try{document.querySelectorAll(r).length===1&&e.push(r)}catch{}}return e.push(Go(t)),e}function Go(t){let e=[],n=t;for(;n&&n!==document.body&&n!==document.documentElement;){let r=n,s=r.parentElement;if(!s)break;let o=r.tagName.toLowerCase(),i=Array.from(s.children).filter(a=>a.tagName===r.tagName);i.length>1&&(o+=`:nth-of-type(${i.indexOf(r)+1})`),e.unshift(o),n=s}return e.join(" > ")}function Qo(t){if(!t)return"";let e=[],n=t;for(;n&&n!==document.body;){let r=1,s=n.previousElementSibling;for(;s;)s.tagName===n.tagName&&r++,s=s.previousElementSibling;e.unshift(`${n.tagName.toLowerCase()}[${r}]`),n=n.parentElement}return"/body/"+e.join("/")}function Zo(t,e,n,r,s,o,i){xt(),Y?.querySelectorAll(".bs-lp-form").forEach(R=>R.remove());let a=document.createElement("div");a.className="bs-lp-form";let c=Math.min(300,window.innerWidth-32),p=16,b=s+p,v=o-8;b+c>window.innerWidth-p&&(b=s-c-p),b<p&&(b=p);let S=Qr(b,v);a.style.left=S.left,a.style.top=S.top,requestAnimationFrame(()=>{let R=a.getBoundingClientRect();if(R.bottom>window.innerHeight-p){let Z=Qr(b,Math.max(p,o-R.height));a.style.top=Z.top}});let D=ss.filter(R=>R.userId!==ot()?.id).map(R=>`<option value="${R.userId}">${mt(R.name)}</option>`).join("");a.innerHTML=`
567
+ <label class="bs-lp-form-label">Title</label>
444
568
  <input type="text" id="bs-np-title" name="pin-title" placeholder="What's the issue?" autofocus />
445
569
  <label class="bs-lp-form-label">Description</label>
446
- <textarea id="bs-np-desc" name="pin-desc" placeholder="Describe the problem..."></textarea>
570
+ <textarea id="bs-np-desc" name="pin-desc" placeholder="Add more details..."></textarea>
447
571
  <label class="bs-lp-form-label">Priority</label>
448
- <select id="bs-np-priority" name="pin-priority">
449
- <option value="low">Low</option>
450
- <option value="medium" selected>Medium</option>
451
- <option value="high">High</option>
452
- <option value="critical">Critical</option>
453
- </select>
572
+ <div class="bs-lp-seg-row" id="bs-np-priority-row">
573
+ <button class="bs-lp-seg-btn" data-value="low">Low</button>
574
+ <button class="bs-lp-seg-btn bs-active" data-value="medium">Medium</button>
575
+ <button class="bs-lp-seg-btn" data-value="high">High</button>
576
+ <button class="bs-lp-seg-btn" data-value="critical">Critical</button>
577
+ </div>
454
578
  <label class="bs-lp-form-label">Category</label>
455
- <select id="bs-np-category" name="pin-category">
456
- <option value="ui">UI</option>
457
- <option value="functionality">Functionality</option>
458
- <option value="performance">Performance</option>
459
- <option value="content">Content</option>
460
- <option value="other" selected>Other</option>
461
- </select>
462
- ${S?`
579
+ <div class="bs-lp-seg-row" id="bs-np-category-row">
580
+ <button class="bs-lp-seg-btn" data-value="ui">UI</button>
581
+ <button class="bs-lp-seg-btn" data-value="functionality">Func</button>
582
+ <button class="bs-lp-seg-btn" data-value="performance">Perf</button>
583
+ <button class="bs-lp-seg-btn" data-value="content">Content</button>
584
+ <button class="bs-lp-seg-btn bs-active" data-value="other">Other</button>
585
+ </div>
586
+ ${D?`
463
587
  <label class="bs-lp-form-label">Assign to</label>
464
588
  <select id="bs-np-assignee" name="pin-assignee">
465
589
  <option value="">Unassigned</option>
466
- ${S}
590
+ ${D}
467
591
  </select>
468
592
  `:""}
469
593
  <div class="bs-lp-form-btns">
470
594
  <button class="bs-lp-form-cancel" id="bs-np-cancel">Cancel</button>
471
- <button class="bs-lp-form-submit" id="bs-np-submit">Create Pin</button>
595
+ <button class="bs-lp-form-submit" id="bs-np-submit">Create pin</button>
472
596
  </div>
473
- `,X.appendChild(i),i.addEventListener("click",M=>M.stopPropagation()),i.querySelector("#bs-np-cancel").addEventListener("click",()=>i.remove()),i.querySelector("#bs-np-submit").addEventListener("click",async()=>{let M=i.querySelector("#bs-np-title").value.trim();if(!M){i.querySelector("#bs-np-title").style.borderColor="#ef4444";return}let re=i.querySelector("#bs-np-submit");re.textContent="Creating...",re.style.opacity="0.6",re.style.pointerEvents="none";let N=i.querySelector("#bs-np-desc").value.trim(),j=i.querySelector("#bs-np-priority").value,q=i.querySelector("#bs-np-category").value,se=i.querySelector("#bs-np-assignee")?.value||void 0,xe=JSON.stringify(Uo(a)),we=Wo(a),k=de().slice(-20).map(I=>`[${I.level}] ${I.args.join(" ")}`),te=pe().slice(-10).map(I=>`${I.message} at ${I.source}:${I.lineno}`),xt=ge().slice(-10).map(I=>`${I.method} ${I.url} \u2192 ${I.status}`),Je={projectId:Gt,pageUrl:window.location.href,pathname:window.location.pathname,elementSelector:xe,elementXPath:we,xPercent:n,yPercent:r,pageX:e,pageY:t,title:M,description:N,priority:j,category:q,assigneeId:se,browserInfo:navigator.userAgent,screenSize:`${screen.width}x${screen.height}`,viewportSize:`${window.innerWidth}x${window.innerHeight}`,devicePixelRatio:window.devicePixelRatio,consoleLogs:k,networkErrors:xt,jsErrors:te};if(i.remove(),navigator.onLine){let I=await En(Je);I.success&&I.data&&(P=[...P,I.data],be())}else{Pn({type:"create_pin",data:Je});let I=ie();P=[...P,{...Je,id:"local-"+Date.now(),orgId:"",status:"open",tags:[],createdBy:I?.id||"",creatorName:I?.name||"",commentCount:0,createdAt:Date.now(),updatedAt:Date.now()}],be()}}),setTimeout(()=>i.querySelector("#bs-np-title")?.focus(),50)}function Yo(){ct("pin:created",e=>{let t=e.data;t.pathname===window.location.pathname&&(P.find(n=>n.id===t.id)||(P=[...P,t],$n(P.map(n=>n.id)),be()))}),ct("pin:updated",e=>{let t=e.data,n=P.findIndex(r=>r.id===t.id);n>=0&&(P=P.map((r,s)=>s===n?{...r,...t}:r),be())}),ct("pin:deleted",e=>{let{id:t}=e.data;P=P.filter(n=>n.id!==t),ye(),be()}),ct("comment:created",e=>{let t=e.data;if(_e){let n=_e.querySelector("#bs-lp-cmts");n&&(n.innerHTML+=`
474
- <div class="bs-lp-cmt">
475
- <div class="bs-lp-cmt-top">
476
- <span class="bs-lp-cmt-author">${ue(t.author?.name||"Someone")}</span>
477
- <span class="bs-lp-cmt-time">just now</span>
478
- </div>
479
- <div class="bs-lp-cmt-body">${ue(t.body)}</div>
480
- </div>
481
- `,n.scrollTop=n.scrollHeight)}})}function Vo(){let e=window.location.pathname,t=()=>{window.location.pathname!==e&&(e=window.location.pathname,window.location.href,os())},n=history.pushState,r=history.replaceState;history.pushState=function(...s){n.apply(this,s),t()},history.replaceState=function(...s){r.apply(this,s),t()},window.addEventListener("popstate",t)}function ue(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}var J,x=null,$=null,y=null,Q=null,bt=null,mt=null,ae=null,Z=!1,Zt=!1,Se=!1,ft=null,zn=null,as="bugstash_fab_position",Xe="report";var ve=Fr(),Pe=Ur(),O={bug:'<svg width="28" height="28" viewBox="55 38 60 105" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M95.8 44h-29c-3 0-5.4 2.4-5.4 5.4v29c0 3 2.4 5.4 5.4 5.4h19.5c13 0 23.5-10.5 23.5-23.5v-2.8c0-7.5-6-13.5-13.5-13.5h-.5zm-6.2 28.2H74.8V57.4h14.8c5.8 0 10.4 4.7 10.4 10.4s-4.7 10.4-10.4 10.4z" fill="rgba(255,255,255,0.85)"/><path d="M100.4 96h-33.6c-3 0-5.4 2.4-5.4 5.4v33.6c0 3 2.4 5.4 5.4 5.4h22c15 0 27-12 27-27v-3.9c0-7.5-6-13.5-13.5-13.5h-1.9zm-7.8 32.2H74.8v-20h17.8c6.7 0 12.2 5.5 12.2 12.2 0 4.3-3.5 7.8-7.8 7.8h-4.6z" fill="rgba(255,255,255,1)"/></svg>',x:'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',cam:'<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>',check:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><polyline points="20 6 9 17 4 12"/></svg>',report:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>',console:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>',network:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>',ctx:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',settings:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>',history:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>',pin:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>',sun:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',moon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',keyboard:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="2" y="4" width="20" height="16" rx="2"/><line x1="6" y1="8" x2="6" y2="8"/><line x1="10" y1="8" x2="10" y2="8"/><line x1="14" y1="8" x2="14" y2="8"/><line x1="18" y1="8" x2="18" y2="8"/><line x1="8" y1="12" x2="16" y2="12"/><line x1="6" y1="16" x2="18" y2="16"/></svg>'},Jo=`
597
+ `,Y.appendChild(a),a.addEventListener("click",R=>R.stopPropagation()),ns(a,"#bs-np-priority-row"),ns(a,"#bs-np-category-row"),a.querySelector("#bs-np-cancel").addEventListener("click",()=>a.remove()),a.querySelector("#bs-np-submit").addEventListener("click",async()=>{let R=a.querySelector("#bs-np-title").value.trim();if(!R){a.querySelector("#bs-np-title").style.borderColor="#ef4444";return}let Z=a.querySelector("#bs-np-submit");Z.textContent="Creating...",Z.style.opacity="0.6",Z.style.pointerEvents="none";let w=a.querySelector("#bs-np-desc").value.trim(),E=rs(a,"#bs-np-priority-row")||"medium",T=rs(a,"#bs-np-category-row")||"other",lt=a.querySelector("#bs-np-assignee")?.value||void 0,Lt=JSON.stringify(Ko(i)),St=Qo(i),k=ut().slice(-20).map(B=>`[${B.level}] ${B.args.join(" ")}`),rt=ft().slice(-10).map(B=>`${B.message} at ${B.source}:${B.lineno}`),Ee=vt().slice(-10).map(B=>`${B.method} ${B.url} \u2192 ${B.status}`),te={projectId:en,pageUrl:window.location.href,pathname:window.location.pathname,elementSelector:Lt,elementXPath:St,xPercent:n,yPercent:r,pageX:t,pageY:e,title:R,description:w,priority:E,category:T,assigneeId:lt,browserInfo:navigator.userAgent,screenSize:`${screen.width}x${screen.height}`,viewportSize:`${window.innerWidth}x${window.innerHeight}`,devicePixelRatio:window.devicePixelRatio,consoleLogs:k,networkErrors:Ee,jsErrors:rt};if(a.remove(),navigator.onLine){let B=await Ln(te);B.success&&B.data&&($=[...$,B.data],gt())}else{Pn({type:"create_pin",data:te});let B=ot();$=[...$,{...te,id:"local-"+Date.now(),orgId:"",status:"open",tags:[],createdBy:B?.id||"",creatorName:B?.name||"",commentCount:0,createdAt:Date.now(),updatedAt:Date.now()}],gt()}}),setTimeout(()=>a.querySelector("#bs-np-title")?.focus(),50)}function ti(){ue("pin:created",t=>{let e=t.data;e.pathname===window.location.pathname&&($.find(n=>n.id===e.id)||($=[...$,e],Mn($.map(n=>n.id)),gt()))}),ue("pin:updated",t=>{let e=t.data,n=$.findIndex(r=>r.id===e.id);n>=0&&($=$.map((r,s)=>s===n?{...r,...e}:r),gt())}),ue("pin:deleted",t=>{let{id:e}=t.data;$=$.filter(n=>n.id!==e),xt(),gt()}),ue("comment:created",t=>{let e=t.data;if(Jt){let n=Jt.querySelector("#bs-lp-cmts");n&&(n.innerHTML+=zn(e),n.scrollTop=n.scrollHeight)}})}function ei(){let t=window.location.pathname,e=()=>{window.location.pathname!==t&&(t=window.location.pathname,window.location.href,ps())},n=history.pushState,r=history.replaceState;history.pushState=function(...s){n.apply(this,s),e()},history.replaceState=function(...s){r.apply(this,s),e()},window.addEventListener("popstate",e)}function Hn(t){return t.split(" ").map(e=>e[0]||"").join("").toUpperCase().slice(0,2)||"U"}var es=["linear-gradient(135deg, #667eea, #764ba2)","linear-gradient(135deg, #f093fb, #f5576c)","linear-gradient(135deg, #4facfe, #00f2fe)","linear-gradient(135deg, #43e97b, #38f9d7)","linear-gradient(135deg, #fa709a, #fee140)","linear-gradient(135deg, #a18cd1, #fbc2eb)","linear-gradient(135deg, #fccb90, #d57eeb)","linear-gradient(135deg, #e0c3fc, #8ec5fc)"];function Dn(t){let e=0;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n)|0;return es[Math.abs(e)%es.length]}function zn(t){let e=t.author?.name||t.authorName||"Unknown",n=t.author?.avatar||t.authorAvatar,r=Hn(e),s=Dn(e),o=n?`<img src="${mt(n)}" alt="" />`:`<span style="font-size:8px">${r}</span>`;return`
598
+ <div class="bs-lp-cmt">
599
+ <div class="bs-lp-cmt-avatar" style="background:${s}">
600
+ ${o}
601
+ </div>
602
+ <div class="bs-lp-cmt-content">
603
+ <div class="bs-lp-cmt-top">
604
+ <span class="bs-lp-cmt-author">${mt(e)}</span>
605
+ <span class="bs-lp-cmt-time">${bs(t.createdAt?new Date(t.createdAt).getTime():Date.now())}</span>
606
+ </div>
607
+ <div class="bs-lp-cmt-body">${mt(t.body)}</div>
608
+ </div>
609
+ </div>
610
+ `}function ns(t,e){let n=t.querySelector(e);n&&n.querySelectorAll(".bs-lp-seg-btn").forEach(r=>{r.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),n.querySelectorAll(".bs-lp-seg-btn").forEach(o=>o.classList.remove("bs-active")),r.classList.add("bs-active")})})}function rs(t,e){return t.querySelector(`${e} .bs-lp-seg-btn.bs-active`)?.dataset.value||""}function mt(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}var G,x=null,P=null,g=null,et=null,ge=null,Et=null,wt=null,J=null,K=!1,rn=!1,Mt=!1,he=null,Bn=null,fs="bugstash_fab_position",Gt="report";var it=Yr(),At=Xr(),O={bug:'<svg width="28" height="28" viewBox="55 38 60 105" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M95.8 44h-29c-3 0-5.4 2.4-5.4 5.4v29c0 3 2.4 5.4 5.4 5.4h19.5c13 0 23.5-10.5 23.5-23.5v-2.8c0-7.5-6-13.5-13.5-13.5h-.5zm-6.2 28.2H74.8V57.4h14.8c5.8 0 10.4 4.7 10.4 10.4s-4.7 10.4-10.4 10.4z" fill="rgba(255,255,255,0.85)"/><path d="M100.4 96h-33.6c-3 0-5.4 2.4-5.4 5.4v33.6c0 3 2.4 5.4 5.4 5.4h22c15 0 27-12 27-27v-3.9c0-7.5-6-13.5-13.5-13.5h-1.9zm-7.8 32.2H74.8v-20h17.8c6.7 0 12.2 5.5 12.2 12.2 0 4.3-3.5 7.8-7.8 7.8h-4.6z" fill="rgba(255,255,255,1)"/></svg>',x:'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',cam:'<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>',check:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><polyline points="20 6 9 17 4 12"/></svg>',report:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>',console:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>',network:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>',ctx:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',settings:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>',history:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>',pin:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>',sun:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',moon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',keyboard:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="2" y="4" width="20" height="16" rx="2"/><line x1="6" y1="8" x2="6" y2="8"/><line x1="10" y1="8" x2="10" y2="8"/><line x1="14" y1="8" x2="14" y2="8"/><line x1="18" y1="8" x2="18" y2="8"/><line x1="8" y1="12" x2="16" y2="12"/><line x1="6" y1="16" x2="18" y2="16"/></svg>'},ni=`
482
611
  /* \u2500\u2500 Shadow Boundary Reset \u2500\u2500
483
612
  * Cuts ALL inherited CSS from host page (color, font, line-height, etc.)
484
613
  * Every element below must declare its own styles explicitly. */
@@ -1572,7 +1701,7 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1572
1701
  .bs-set-ly.bs-picked { border-color: var(--bs-accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--bs-accent) 25%, transparent); }
1573
1702
  .bs-set-ly-name { font-size: 12px; font-weight: 600; color: var(--bs-text); margin-bottom: 2px; }
1574
1703
  .bs-set-ly-desc { font-size: 10px; color: var(--bs-muted); }
1575
- `;function Ko(){return`
1704
+ `;function ri(){return`
1576
1705
  <div class="bs-login-form">
1577
1706
  <div class="bs-login-logo">BugStash</div>
1578
1707
  <div class="bs-login-subtitle">Sign in to report bugs & collaborate</div>
@@ -1582,11 +1711,11 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1582
1711
  <button class="bs-login-btn" id="bs-login-submit">Sign In</button>
1583
1712
  <div style="font-size:11px;color:var(--bs-muted);margin-top:4px">Contact your admin for an account</div>
1584
1713
  </div>
1585
- `}function B(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Go(e){let t=Math.floor((Date.now()-e)/1e3);return t<5?"now":t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:new Date(e).toLocaleTimeString()}function ls(e){return new Date(e).toLocaleTimeString("en",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}var cs="bugstash_history";function Ye(){try{return JSON.parse(localStorage.getItem(cs)||"[]")}catch{return[]}}function Bn(e){try{localStorage.setItem(cs,JSON.stringify(e))}catch{}}function Qo(e){let t=Ye(),n=Date.now();t.unshift({...e,id:n}),t.length>50&&(t.length=50),Bn(t)}function Zo(e){let t=Ye().filter(n=>n.id!==e);Bn(t)}function ei(e,t){let n=Ye(),r=n.findIndex(s=>s.id===e);r>=0&&(n[r]={...n[r],...t},Bn(n))}function ds(){return{url:window.location.href,userAgent:navigator.userAgent,platform:navigator.platform,language:navigator.language,cookiesEnabled:navigator.cookieEnabled,online:navigator.onLine,screenWidth:screen.width,screenHeight:screen.height,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,devicePixelRatio:window.devicePixelRatio,timestamp:Date.now(),environment:J.environment??"development",commitHash:J.commitHash,user:J.user}}function ps(){let e=pe(),t=de(),n=Re(),r=ge(),s=$e(),o=ze(),a=t.filter(u=>u.level==="error"),i="low";e.length>=3||r.length>=3?i="critical":e.length>=1||r.length>=2?i="high":(a.length>0||r.length>=1)&&(i="medium");let c=[];return e.length&&c.push("has-errors"),r.length&&c.push("network-failures"),a.length&&c.push("console-errors"),o?.pageLoadTime&&o.pageLoadTime>3e3&&c.push("slow-load"),o?.cumulativeLayoutShift&&o.cumulativeLayoutShift>.25&&c.push("layout-shift"),navigator.onLine||c.push("offline"),window.innerWidth<768&&c.push("mobile"),{severity:i,tags:c,counts:{logs:t.length,network:n.length,failedNet:r.length,errors:e.length,crumbs:s.length}}}function us(){let e=ps(),t=[{id:"ui",label:"UI"},{id:"functionality",label:"Feature"},{id:"performance",label:"Speed"},{id:"crash",label:"Crash"},{id:"security",label:"Security"},{id:"other",label:"Other"}],n=e.counts.errors>0||e.counts.failedNet>0;return`<div class="bs-view">
1714
+ `}function j(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function si(t){let e=Math.floor((Date.now()-t)/1e3);return e<5?"now":e<60?`${e}s ago`:e<3600?`${Math.floor(e/60)}m ago`:new Date(t).toLocaleTimeString()}function ms(t){return new Date(t).toLocaleTimeString("en",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}var gs="bugstash_history";function Qt(){try{return JSON.parse(localStorage.getItem(gs)||"[]")}catch{return[]}}function Nn(t){try{localStorage.setItem(gs,JSON.stringify(t))}catch{}}function oi(t){let e=Qt(),n=Date.now();e.unshift({...t,id:n}),e.length>50&&(e.length=50),Nn(e)}function ii(t){let e=Qt().filter(n=>n.id!==t);Nn(e)}function ai(t,e){let n=Qt(),r=n.findIndex(s=>s.id===t);r>=0&&(n[r]={...n[r],...e},Nn(n))}function hs(){return{url:window.location.href,userAgent:navigator.userAgent,platform:navigator.platform,language:navigator.language,cookiesEnabled:navigator.cookieEnabled,online:navigator.onLine,screenWidth:screen.width,screenHeight:screen.height,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,devicePixelRatio:window.devicePixelRatio,timestamp:Date.now(),environment:G.environment??"development",commitHash:G.commitHash,user:G.user}}function vs(){let t=ft(),e=ut(),n=Dt(),r=vt(),s=zt(),o=Bt(),i=e.filter(p=>p.level==="error"),a="low";t.length>=3||r.length>=3?a="critical":t.length>=1||r.length>=2?a="high":(i.length>0||r.length>=1)&&(a="medium");let c=[];return t.length&&c.push("has-errors"),r.length&&c.push("network-failures"),i.length&&c.push("console-errors"),o?.pageLoadTime&&o.pageLoadTime>3e3&&c.push("slow-load"),o?.cumulativeLayoutShift&&o.cumulativeLayoutShift>.25&&c.push("layout-shift"),navigator.onLine||c.push("offline"),window.innerWidth<768&&c.push("mobile"),{severity:a,tags:c,counts:{logs:e.length,network:n.length,failedNet:r.length,errors:t.length,crumbs:s.length}}}function ys(){let t=vs(),e=[{id:"ui",label:"UI"},{id:"functionality",label:"Feature"},{id:"performance",label:"Speed"},{id:"crash",label:"Crash"},{id:"security",label:"Security"},{id:"other",label:"Other"}],n=t.counts.errors>0||t.counts.failedNet>0;return`<div class="bs-view">
1586
1715
  <form data-bs-form>
1587
- <div class="bs-report-summary${n?" bs-alert":e.counts.logs>0?" bs-has":""}">
1716
+ <div class="bs-report-summary${n?" bs-alert":t.counts.logs>0?" bs-has":""}">
1588
1717
  <div class="bs-report-summary-left">
1589
- ${n?`<div class="bs-report-summary-icon bs-warn">!</div><span>${e.counts.errors} error${e.counts.errors!==1?"s":""}, ${e.counts.failedNet} failed request${e.counts.failedNet!==1?"s":""} detected</span>`:`<div class="bs-report-summary-icon">${O.check}</div><span>Auto-collecting ${e.counts.logs} logs, ${e.counts.network} requests, ${e.counts.crumbs} actions</span>`}
1718
+ ${n?`<div class="bs-report-summary-icon bs-warn">!</div><span>${t.counts.errors} error${t.counts.errors!==1?"s":""}, ${t.counts.failedNet} failed request${t.counts.failedNet!==1?"s":""} detected</span>`:`<div class="bs-report-summary-icon">${O.check}</div><span>Auto-collecting ${t.counts.logs} logs, ${t.counts.network} requests, ${t.counts.crumbs} actions</span>`}
1590
1719
  </div>
1591
1720
  </div>
1592
1721
  <div class="bs-field">
@@ -1599,17 +1728,17 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1599
1728
  <div class="bs-field-label">Category</div>
1600
1729
  <input type="hidden" name="category" value="functionality" />
1601
1730
  <div class="bs-cat-row">
1602
- ${t.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1731
+ ${e.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1603
1732
  </div>
1604
1733
  </div>
1605
1734
  <div class="bs-field">
1606
1735
  <div class="bs-field-label">Severity</div>
1607
- <input type="hidden" name="severity" value="${e.severity}" />
1736
+ <input type="hidden" name="severity" value="${t.severity}" />
1608
1737
  <div class="bs-sev-row">
1609
- <button type="button" class="bs-sev-btn bs-sev-low${e.severity==="low"?" bs-picked":""}" data-sev="low">Low</button>
1610
- <button type="button" class="bs-sev-btn bs-sev-medium${e.severity==="medium"?" bs-picked":""}" data-sev="medium">Med</button>
1611
- <button type="button" class="bs-sev-btn bs-sev-high${e.severity==="high"?" bs-picked":""}" data-sev="high">High</button>
1612
- <button type="button" class="bs-sev-btn bs-sev-critical${e.severity==="critical"?" bs-picked":""}" data-sev="critical">Critical</button>
1738
+ <button type="button" class="bs-sev-btn bs-sev-low${t.severity==="low"?" bs-picked":""}" data-sev="low">Low</button>
1739
+ <button type="button" class="bs-sev-btn bs-sev-medium${t.severity==="medium"?" bs-picked":""}" data-sev="medium">Med</button>
1740
+ <button type="button" class="bs-sev-btn bs-sev-high${t.severity==="high"?" bs-picked":""}" data-sev="high">High</button>
1741
+ <button type="button" class="bs-sev-btn bs-sev-critical${t.severity==="critical"?" bs-picked":""}" data-sev="critical">Critical</button>
1613
1742
  </div>
1614
1743
  </div>
1615
1744
  <div class="bs-shot-area" data-bs-screenshot>
@@ -1622,17 +1751,17 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1622
1751
  <div data-bs-annotate></div>
1623
1752
  <button type="submit" class="bs-submit-btn">Submit Report</button>
1624
1753
  </form>
1625
- </div>`}function ti(){let e=de(),t={error:"bs-le",warn:"bs-lw",log:"bs-ll",info:"bs-li",debug:"bs-ld"};return e.length?`<div class="bs-view">${e.slice().reverse().map(n=>`<div class="bs-log"><span class="bs-log-lv ${t[n.level]||"bs-ll"}">${n.level}</span><span class="bs-log-m">${B(n.args.join(" ")).slice(0,500)}</span><span class="bs-log-t">${ls(n.timestamp)}</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No console logs captured yet.<br>Use the app \u2014 logs will appear here automatically.</p></div></div>'}function ni(){let e=Re();return e.length?`<div class="bs-view">${e.slice().reverse().map(t=>`<div class="bs-net"><span class="bs-net-m">${t.method}</span><span class="bs-net-s ${t.failed?"bs-fail":"bs-ok"}">${t.status||"ERR"}</span><span class="bs-net-u" title="${B(t.url)}">${B(t.url)}</span><span class="bs-net-d">${t.duration}ms</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No network requests captured yet.<br>API calls will show up here automatically.</p></div></div>'}function ri(){let e='<div class="bs-view">',t=pe();t.length&&(e+=`<div class="bs-sec">Errors <span class="bs-sec-n">${t.length}</span></div>`,e+=t.slice().reverse().map(o=>`<div class="bs-err-card"><div class="bs-err-m">${B(o.message)}</div>${o.stack?`<div class="bs-err-stack">${B(o.stack)}</div>`:""}<div class="bs-err-meta">${o.type} &middot; ${ls(o.timestamp)}${o.source?` &middot; ${B(o.source)}:${o.lineno}`:""}</div></div>`).join(""));let n=ze();if(n){e+='<div class="bs-sec">Performance</div>';let o=[["Page Load",n.pageLoadTime,5e3],["DOM Ready",n.domContentLoaded,3e3],["First Paint",n.firstPaint,2e3],["FCP",n.firstContentfulPaint,2500],["LCP",n.largestContentfulPaint,4e3],["FID",n.firstInputDelay,300]];for(let[a,i,c]of o){if(i===void 0)continue;let u=Math.min(100,i/c*100);e+=`<div class="bs-pf"><span class="bs-pf-l">${a}</span><div class="bs-pf-tr"><div class="bs-pf-fl${u>75?" bs-slow":""}" style="width:${u}%"></div></div><span class="bs-pf-v">${i}ms</span></div>`}if(n.cumulativeLayoutShift!==void 0){let a=Math.min(100,n.cumulativeLayoutShift*400);e+=`<div class="bs-pf"><span class="bs-pf-l">CLS</span><div class="bs-pf-tr"><div class="bs-pf-fl${a>40?" bs-slow":""}" style="width:${a}%"></div></div><span class="bs-pf-v">${n.cumulativeLayoutShift}</span></div>`}}let r=$e();r.length&&(e+=`<div class="bs-sec">Your activity trail <span class="bs-sec-n">${r.length}</span></div>`,e+=r.slice().reverse().map(o=>`<div class="bs-bc"><span class="bs-bc-t bs-t-${o.type}">${o.type}</span><span class="bs-bc-m">${B(o.message).slice(0,120)}</span><span class="bs-bc-time">${Go(o.timestamp)}</span></div>`).join(""));let s=ds();return e+='<div class="bs-sec">Environment</div>',e+=`<div class="bs-kv">
1626
- <span class="bs-kv-k">URL</span><span class="bs-kv-v">${B(s.url)}</span>
1754
+ </div>`}function li(){let t=ut(),e={error:"bs-le",warn:"bs-lw",log:"bs-ll",info:"bs-li",debug:"bs-ld"};return t.length?`<div class="bs-view">${t.slice().reverse().map(n=>`<div class="bs-log"><span class="bs-log-lv ${e[n.level]||"bs-ll"}">${n.level}</span><span class="bs-log-m">${j(n.args.join(" ")).slice(0,500)}</span><span class="bs-log-t">${ms(n.timestamp)}</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No console logs captured yet.<br>Use the app \u2014 logs will appear here automatically.</p></div></div>'}function ci(){let t=Dt();return t.length?`<div class="bs-view">${t.slice().reverse().map(e=>`<div class="bs-net"><span class="bs-net-m">${e.method}</span><span class="bs-net-s ${e.failed?"bs-fail":"bs-ok"}">${e.status||"ERR"}</span><span class="bs-net-u" title="${j(e.url)}">${j(e.url)}</span><span class="bs-net-d">${e.duration}ms</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No network requests captured yet.<br>API calls will show up here automatically.</p></div></div>'}function di(){let t='<div class="bs-view">',e=ft();e.length&&(t+=`<div class="bs-sec">Errors <span class="bs-sec-n">${e.length}</span></div>`,t+=e.slice().reverse().map(o=>`<div class="bs-err-card"><div class="bs-err-m">${j(o.message)}</div>${o.stack?`<div class="bs-err-stack">${j(o.stack)}</div>`:""}<div class="bs-err-meta">${o.type} &middot; ${ms(o.timestamp)}${o.source?` &middot; ${j(o.source)}:${o.lineno}`:""}</div></div>`).join(""));let n=Bt();if(n){t+='<div class="bs-sec">Performance</div>';let o=[["Page Load",n.pageLoadTime,5e3],["DOM Ready",n.domContentLoaded,3e3],["First Paint",n.firstPaint,2e3],["FCP",n.firstContentfulPaint,2500],["LCP",n.largestContentfulPaint,4e3],["FID",n.firstInputDelay,300]];for(let[i,a,c]of o){if(a===void 0)continue;let p=Math.min(100,a/c*100);t+=`<div class="bs-pf"><span class="bs-pf-l">${i}</span><div class="bs-pf-tr"><div class="bs-pf-fl${p>75?" bs-slow":""}" style="width:${p}%"></div></div><span class="bs-pf-v">${a}ms</span></div>`}if(n.cumulativeLayoutShift!==void 0){let i=Math.min(100,n.cumulativeLayoutShift*400);t+=`<div class="bs-pf"><span class="bs-pf-l">CLS</span><div class="bs-pf-tr"><div class="bs-pf-fl${i>40?" bs-slow":""}" style="width:${i}%"></div></div><span class="bs-pf-v">${n.cumulativeLayoutShift}</span></div>`}}let r=zt();r.length&&(t+=`<div class="bs-sec">Your activity trail <span class="bs-sec-n">${r.length}</span></div>`,t+=r.slice().reverse().map(o=>`<div class="bs-bc"><span class="bs-bc-t bs-t-${o.type}">${o.type}</span><span class="bs-bc-m">${j(o.message).slice(0,120)}</span><span class="bs-bc-time">${si(o.timestamp)}</span></div>`).join(""));let s=hs();return t+='<div class="bs-sec">Environment</div>',t+=`<div class="bs-kv">
1755
+ <span class="bs-kv-k">URL</span><span class="bs-kv-v">${j(s.url)}</span>
1627
1756
  <span class="bs-kv-k">Viewport</span><span class="bs-kv-v">${s.viewportWidth}&times;${s.viewportHeight} @${s.devicePixelRatio}x</span>
1628
1757
  <span class="bs-kv-k">Screen</span><span class="bs-kv-v">${s.screenWidth}&times;${s.screenHeight}</span>
1629
- <span class="bs-kv-k">Platform</span><span class="bs-kv-v">${B(s.platform)}</span>
1758
+ <span class="bs-kv-k">Platform</span><span class="bs-kv-v">${j(s.platform)}</span>
1630
1759
  <span class="bs-kv-k">Language</span><span class="bs-kv-v">${s.language}</span>
1631
- ${J.commitHash?`<span class="bs-kv-k">Commit</span><span class="bs-kv-v">${B(J.commitHash)}</span>`:""}
1632
- ${J.user?.email?`<span class="bs-kv-k">User</span><span class="bs-kv-v">${B(J.user.email)}</span>`:""}
1633
- </div>`,e+="</div>",e}function si(){let e=Ye();if(!e.length)return'<div class="bs-view"><div class="bs-empty"><p>No reports yet.<br>Submitted bugs will appear here.</p></div></div>';let t={ui:"UI",functionality:"Feature",performance:"Perf",crash:"Crash",security:"Security",other:"Other"},n=s=>{let o=new Date(s),i=new Date().getTime()-o.getTime(),c=Math.floor(i/6e4);if(c<1)return"Just now";if(c<60)return`${c}m ago`;let u=Math.floor(c/60);if(u<24)return`${u}h ago`;let p=Math.floor(u/24);return p<7?`${p}d ago`:o.toLocaleDateString("en",{month:"short",day:"numeric"})},r='<div class="bs-view">';for(let s of e){let o=s.pins?.length?`<div class="bs-hist-pins">${s.pins.slice(0,5).map(a=>`<div class="bs-hist-pin-dot" style="background:${["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6"][a.number%5]}">${a.number}</div>`).join("")}${s.pins.length>5?`<span>+${s.pins.length-5}</span>`:""}</div>`:"";r+=`<div class="bs-hist-card" data-hist-id="${s.id}">
1760
+ ${G.commitHash?`<span class="bs-kv-k">Commit</span><span class="bs-kv-v">${j(G.commitHash)}</span>`:""}
1761
+ ${G.user?.email?`<span class="bs-kv-k">User</span><span class="bs-kv-v">${j(G.user.email)}</span>`:""}
1762
+ </div>`,t+="</div>",t}function pi(){let t=Qt();if(!t.length)return'<div class="bs-view"><div class="bs-empty"><p>No reports yet.<br>Submitted bugs will appear here.</p></div></div>';let e={ui:"UI",functionality:"Feature",performance:"Perf",crash:"Crash",security:"Security",other:"Other"},n=s=>{let o=new Date(s),a=new Date().getTime()-o.getTime(),c=Math.floor(a/6e4);if(c<1)return"Just now";if(c<60)return`${c}m ago`;let p=Math.floor(c/60);if(p<24)return`${p}h ago`;let b=Math.floor(p/24);return b<7?`${b}d ago`:o.toLocaleDateString("en",{month:"short",day:"numeric"})},r='<div class="bs-view">';for(let s of t){let o=s.pins?.length?`<div class="bs-hist-pins">${s.pins.slice(0,5).map(i=>`<div class="bs-hist-pin-dot" style="background:${["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6"][i.number%5]}">${i.number}</div>`).join("")}${s.pins.length>5?`<span>+${s.pins.length-5}</span>`:""}</div>`:"";r+=`<div class="bs-hist-card" data-hist-id="${s.id}">
1634
1763
  <div class="bs-hist-top">
1635
- <div class="bs-hist-title">${B(s.title)}</div>
1764
+ <div class="bs-hist-title">${j(s.title)}</div>
1636
1765
  ${s.screenshot?`<img class="bs-hist-thumb" src="${s.screenshot}" alt=""/>`:""}
1637
1766
  <div class="bs-hist-actions">
1638
1767
  <button class="bs-hist-btn" data-hist-edit="${s.id}" title="Edit"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/></svg></button>
@@ -1640,43 +1769,43 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1640
1769
  </div>
1641
1770
  </div>
1642
1771
  <div class="bs-hist-meta">
1643
- <span class="bs-hist-badge bs-cat">${t[s.category]||s.category}</span>
1772
+ <span class="bs-hist-badge bs-cat">${e[s.category]||s.category}</span>
1644
1773
  <span class="bs-hist-badge bs-sev-${s.severity}">${s.severity}</span>
1645
1774
  <span class="bs-hist-badge bs-status-${s.status}">${s.status}</span>
1646
1775
  </div>
1647
- ${s.description?`<div class="bs-hist-desc">${B(s.description)}</div>`:""}
1776
+ ${s.description?`<div class="bs-hist-desc">${j(s.description)}</div>`:""}
1648
1777
  <div class="bs-hist-foot">
1649
- <span>${n(s.createdAt)} &middot; ${B(s.url.replace(/^https?:\/\//,"").slice(0,40))}</span>
1778
+ <span>${n(s.createdAt)} &middot; ${j(s.url.replace(/^https?:\/\//,"").slice(0,40))}</span>
1650
1779
  ${o}
1651
1780
  </div>
1652
- </div>`}return r+="</div>",r}function oi(){let e=Ut(),t=Wt(),n='<div class="bs-view">';n+='<div class="bs-set-sec">Layout</div>',n+='<div class="bs-set-ly-grid">';for(let r of t)n+=`<button class="bs-set-ly${r.id===Pe.id?" bs-picked":""}" data-set-layout="${r.id}"><div class="bs-set-ly-name">${B(r.name)}</div><div class="bs-set-ly-desc">${B(r.description)}</div></button>`;n+="</div>",n+='<div class="bs-set-sec">Theme</div>',n+='<div class="bs-set-grid">';for(let r of e)n+=`<button class="bs-set-card${r.id===ve.id?" bs-picked":""}" data-set-theme="${r.id}"><div class="bs-set-preview" style="background:${r.preview[0]}"><div class="bs-set-dot" style="background:${r.preview[1]}"></div><div class="bs-set-dot" style="background:${r.vars["--bs-accent2"]||r.preview[1]};opacity:0.6"></div></div><div class="bs-set-name">${B(r.name)}</div></button>`;return n+="</div>",n+="</div>",n}function ii(e,t){let n=["#f87171","#3b82f6","#fb923c","#4ade80","#a78bfa","#facc15"],r=n[0],s="draw",o=4,a=1,i=!1,c=[],u=[],p=-1,f=-1,w=!1,S=!1,M=0,re=0,N=0,j=0,q=[],on=["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6","#ec4899"],se=new Image;se.src=t;let xe=document.createElement("div");xe.className="bs-ann-wrap";let we=document.createElement("div");we.className="bs-ann-viewport";let k=document.createElement("canvas");k.className="bs-ann-canvas bs-draw";let te=document.createElement("div");te.className="bs-ann-toolbar";let xt={select:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/><path d="M13 13l6 6"/></svg>',draw:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/></svg>',arrow:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>',rect:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/></svg>',circle:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/></svg>',text:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9.5" y1="20" x2="14.5" y2="20"/><line x1="12" y1="4" x2="12" y2="20"/></svg>',highlight:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M9 11l-6 6v3h9l3-3"/><path d="M22 12l-4.6 4.6a2 2 0 01-2.8 0l-5.2-5.2a2 2 0 010-2.8L14 4"/></svg>',pin:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>'},Je={select:"Select & Move",draw:"Draw",arrow:"Arrow",rect:"Rectangle",circle:"Circle",text:"Text",highlight:"Highlight",pin:"Pin Issue"},I=[],Ps=l=>{s=l,p=-1,k.className=`bs-ann-canvas bs-${l}`,I.forEach(g=>g.classList.remove("bs-sel")),I.find(g=>g.dataset.tool===l)?.classList.add("bs-sel")};Object.keys(xt).forEach(l=>{let g=document.createElement("button");g.type="button",g.dataset.tool=l,g.className=`bs-ann-btn${l===s?" bs-sel":""}`,g.title=Je[l],g.innerHTML=xt[l],g.addEventListener("click",()=>Ps(l)),I.push(g),te.appendChild(g)}),te.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),n.forEach((l,g)=>{let h=document.createElement("button");h.type="button",h.className=`bs-ann-dot${g===0?" bs-sel":""}`,h.style.background=l,h.addEventListener("click",()=>{r=l,te.querySelectorAll(".bs-ann-dot").forEach(A=>A.classList.remove("bs-sel")),h.classList.add("bs-sel")}),te.appendChild(h)}),te.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"}));let ce=document.createElement("input");ce.type="range",ce.min="1",ce.max="12",ce.value="4",ce.className="bs-ann-size",ce.title="Brush size",ce.addEventListener("input",()=>{o=parseInt(ce.value)}),te.appendChild(ce);let wt=document.createElement("div");wt.className="bs-ann-right";let kt=(l,g)=>{let h=document.createElement("button");return h.type="button",h.className="bs-ann-btn",h.title=l,h.innerHTML=g,h},On=kt("Zoom out",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),Nn=Object.assign(document.createElement("span"),{className:"bs-ann-zoom-label",textContent:"100%"}),jn=kt("Zoom in",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="11" y1="8" x2="11" y2="14"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),qn=kt("Fit",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>'),Fn=kt("Undo",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 105.42-8.49L1 10"/></svg>'),Un=Object.assign(document.createElement("button"),{type:"button",className:"bs-ann-clr-btn",textContent:"Clear"}),an=()=>{k.style.transform=`scale(${a})`,Nn.textContent=`${Math.round(a*100)}%`};jn.addEventListener("click",()=>{a<3&&(a=Math.min(3,a+.25),an())}),On.addEventListener("click",()=>{a>.5&&(a=Math.max(.5,a-.25),an())}),qn.addEventListener("click",()=>{a=1,an()}),wt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),[On,Nn,jn,qn,Fn,Un].forEach(l=>wt.appendChild(l)),te.appendChild(wt);let Et=document.createElement("div");Et.className="bs-ann-pins";let Te=document.createElement("div");Te.className="bs-ann-pin-list",Te.style.display="none",we.appendChild(k),we.appendChild(Et),xe.appendChild(we),xe.appendChild(te),xe.appendChild(Te),e.innerHTML="",e.appendChild(xe);let Lt=()=>{Et.innerHTML="",Te.innerHTML="",Te.style.display=u.length?"":"none",u.forEach((l,g)=>{let h=document.createElement("div");h.className="bs-ann-pin",h.style.background=l.color,h.style.color=l.color;let A=l.x/(k.width||1)*100,m=l.y/(k.height||1)*100;h.style.left=`${A}%`,h.style.top=`${m}%`,h.innerHTML=`<span class="bs-ann-pin-n">${g+1}</span><span class="bs-ann-pin-pulse"></span>`,h.title=`#${g+1}: ${l.note}`;let R=!1;h.addEventListener("mousedown",H=>{H.stopPropagation(),R=!0,h.classList.add("bs-dragging");let b=C=>{if(!R)return;let T=we.getBoundingClientRect();l.x=(C.clientX-T.left)/T.width*k.width,l.y=(C.clientY-T.top)/T.height*k.height,h.style.left=`${(C.clientX-T.left)/T.width*100}%`,h.style.top=`${(C.clientY-T.top)/T.height*100}%`},v=()=>{R=!1,h.classList.remove("bs-dragging"),document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",v),Lt()};document.addEventListener("mousemove",b),document.addEventListener("mouseup",v)}),Et.appendChild(h);let F=document.createElement("div");F.className="bs-ann-pin-item",F.innerHTML=`
1653
- <div class="bs-ann-pin-num" style="background:${l.color}">${g+1}</div>
1781
+ </div>`}return r+="</div>",r}function bi(){let t=Xe(),e=Je(),n='<div class="bs-view">';n+='<div class="bs-set-sec">Layout</div>',n+='<div class="bs-set-ly-grid">';for(let r of e)n+=`<button class="bs-set-ly${r.id===At.id?" bs-picked":""}" data-set-layout="${r.id}"><div class="bs-set-ly-name">${j(r.name)}</div><div class="bs-set-ly-desc">${j(r.description)}</div></button>`;n+="</div>",n+='<div class="bs-set-sec">Theme</div>',n+='<div class="bs-set-grid">';for(let r of t)n+=`<button class="bs-set-card${r.id===it.id?" bs-picked":""}" data-set-theme="${r.id}"><div class="bs-set-preview" style="background:${r.preview[0]}"><div class="bs-set-dot" style="background:${r.preview[1]}"></div><div class="bs-set-dot" style="background:${r.vars["--bs-accent2"]||r.preview[1]};opacity:0.6"></div></div><div class="bs-set-name">${j(r.name)}</div></button>`;return n+="</div>",n+="</div>",n}function ui(t,e){let n=["#f87171","#3b82f6","#fb923c","#4ade80","#a78bfa","#facc15"],r=n[0],s="draw",o=4,i=1,a=!1,c=[],p=[],b=-1,v=-1,S=!1,D=!1,R=0,Z=0,w=0,E=0,T=[],pt=["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6","#ec4899"],lt=new Image;lt.src=e;let Lt=document.createElement("div");Lt.className="bs-ann-wrap";let St=document.createElement("div");St.className="bs-ann-viewport";let k=document.createElement("canvas");k.className="bs-ann-canvas bs-draw";let rt=document.createElement("div");rt.className="bs-ann-toolbar";let Ee={select:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/><path d="M13 13l6 6"/></svg>',draw:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/></svg>',arrow:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>',rect:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/></svg>',circle:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/></svg>',text:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9.5" y1="20" x2="14.5" y2="20"/><line x1="12" y1="4" x2="12" y2="20"/></svg>',highlight:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M9 11l-6 6v3h9l3-3"/><path d="M22 12l-4.6 4.6a2 2 0 01-2.8 0l-5.2-5.2a2 2 0 010-2.8L14 4"/></svg>',pin:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>'},te={select:"Select & Move",draw:"Draw",arrow:"Arrow",rect:"Rectangle",circle:"Circle",text:"Text",highlight:"Highlight",pin:"Pin Issue"},B=[],zs=l=>{s=l,b=-1,k.className=`bs-ann-canvas bs-${l}`,B.forEach(m=>m.classList.remove("bs-sel")),B.find(m=>m.dataset.tool===l)?.classList.add("bs-sel")};Object.keys(Ee).forEach(l=>{let m=document.createElement("button");m.type="button",m.dataset.tool=l,m.className=`bs-ann-btn${l===s?" bs-sel":""}`,m.title=te[l],m.innerHTML=Ee[l],m.addEventListener("click",()=>zs(l)),B.push(m),rt.appendChild(m)}),rt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),n.forEach((l,m)=>{let h=document.createElement("button");h.type="button",h.className=`bs-ann-dot${m===0?" bs-sel":""}`,h.style.background=l,h.addEventListener("click",()=>{r=l,rt.querySelectorAll(".bs-ann-dot").forEach(z=>z.classList.remove("bs-sel")),h.classList.add("bs-sel")}),rt.appendChild(h)}),rt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"}));let bt=document.createElement("input");bt.type="range",bt.min="1",bt.max="12",bt.value="4",bt.className="bs-ann-size",bt.title="Brush size",bt.addEventListener("input",()=>{o=parseInt(bt.value)}),rt.appendChild(bt);let Le=document.createElement("div");Le.className="bs-ann-right";let Se=(l,m)=>{let h=document.createElement("button");return h.type="button",h.className="bs-ann-btn",h.title=l,h.innerHTML=m,h},Un=Se("Zoom out",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),Fn=Object.assign(document.createElement("span"),{className:"bs-ann-zoom-label",textContent:"100%"}),_n=Se("Zoom in",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="11" y1="8" x2="11" y2="14"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),Wn=Se("Fit",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>'),Yn=Se("Undo",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 105.42-8.49L1 10"/></svg>'),Xn=Object.assign(document.createElement("button"),{type:"button",className:"bs-ann-clr-btn",textContent:"Clear"}),cn=()=>{k.style.transform=`scale(${i})`,Fn.textContent=`${Math.round(i*100)}%`};_n.addEventListener("click",()=>{i<3&&(i=Math.min(3,i+.25),cn())}),Un.addEventListener("click",()=>{i>.5&&(i=Math.max(.5,i-.25),cn())}),Wn.addEventListener("click",()=>{i=1,cn()}),Le.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),[Un,Fn,_n,Wn,Yn,Xn].forEach(l=>Le.appendChild(l)),rt.appendChild(Le);let Ce=document.createElement("div");Ce.className="bs-ann-pins";let Rt=document.createElement("div");Rt.className="bs-ann-pin-list",Rt.style.display="none",St.appendChild(k),St.appendChild(Ce),Lt.appendChild(St),Lt.appendChild(rt),Lt.appendChild(Rt),t.innerHTML="",t.appendChild(Lt);let Pe=()=>{Ce.innerHTML="",Rt.innerHTML="",Rt.style.display=p.length?"":"none",p.forEach((l,m)=>{let h=document.createElement("div");h.className="bs-ann-pin",h.style.background=l.color,h.style.color=l.color;let z=l.x/(k.width||1)*100,f=l.y/(k.height||1)*100;h.style.left=`${z}%`,h.style.top=`${f}%`,h.innerHTML=`<span class="bs-ann-pin-n">${m+1}</span><span class="bs-ann-pin-pulse"></span>`,h.title=`#${m+1}: ${l.note}`;let I=!1;h.addEventListener("mousedown",N=>{N.stopPropagation(),I=!0,h.classList.add("bs-dragging");let u=M=>{if(!I)return;let A=St.getBoundingClientRect();l.x=(M.clientX-A.left)/A.width*k.width,l.y=(M.clientY-A.top)/A.height*k.height,h.style.left=`${(M.clientX-A.left)/A.width*100}%`,h.style.top=`${(M.clientY-A.top)/A.height*100}%`},y=()=>{I=!1,h.classList.remove("bs-dragging"),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",y),Pe()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",y)}),Ce.appendChild(h);let U=document.createElement("div");U.className="bs-ann-pin-item",U.innerHTML=`
1782
+ <div class="bs-ann-pin-num" style="background:${l.color}">${m+1}</div>
1654
1783
  <div class="bs-ann-pin-body">
1655
- <div class="bs-ann-pin-note">${B(l.note)}</div>
1656
- <div class="bs-ann-pin-loc">${Math.round(A)}% \xD7 ${Math.round(m)}%</div>
1657
- </div>`;let _=document.createElement("button");_.type="button",_.className="bs-ann-pin-del",_.innerHTML="&times;",_.title="Remove pin",_.addEventListener("click",()=>{u.splice(g,1),Lt()}),F.appendChild(_),Te.appendChild(F)})},d,ln=()=>i?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.35)",ke=(l,g)=>{d.save(),d.strokeStyle=ln(),d.lineWidth=g+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,l(),d.restore()},Cs=(l,g=!1)=>{if(l.type==="draw"||l.type==="highlight"){if(l.points.length<2)return;let m=l.type==="highlight"?.25:1,R=l.type==="highlight"?l.size*4+10:l.size,F=()=>{d.beginPath(),d.moveTo(l.points[0].x,l.points[0].y);for(let _=1;_<l.points.length;_++)d.lineTo(l.points[_].x,l.points[_].y);d.stroke()};l.type!=="highlight"&&ke(F,R),d.strokeStyle=l.color,d.lineWidth=R,d.lineCap="round",d.lineJoin="round",d.globalAlpha=m,F(),d.globalAlpha=1}else if(l.type==="rect"){let m=()=>d.strokeRect(l.x,l.y,l.w,l.h);ke(m,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",m()}else if(l.type==="circle"){let m=()=>{d.beginPath(),d.ellipse(l.cx,l.cy,Math.abs(l.rx),Math.abs(l.ry),0,0,Math.PI*2),d.stroke()};ke(m,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,m()}else if(l.type==="arrow"){let m=Math.atan2(l.y2-l.y1,l.x2-l.x1),R=12+l.size*2,F=()=>{d.beginPath(),d.moveTo(l.x1,l.y1),d.lineTo(l.x2,l.y2),d.stroke(),d.beginPath(),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-R*Math.cos(m-.45),l.y2-R*Math.sin(m-.45)),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-R*Math.cos(m+.45),l.y2-R*Math.sin(m+.45)),d.stroke()};ke(F,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",F()}else if(l.type==="text"){let m=l.size*5+12;d.font=`bold ${m}px Inter, -apple-system, sans-serif`,d.fillStyle=ln(),d.globalAlpha=.6,d.fillText(l.text,l.x+1,l.y+1),d.globalAlpha=1,d.fillStyle=l.color,d.fillText(l.text,l.x,l.y)}let h=!g&&p>=0&&c[p]===l,A=!g&&!h&&f>=0&&c[f]===l;if(h||A){let m=Ke(l);if(d.save(),d.setLineDash([6,4]),d.strokeStyle=i?"#fff":"#000",d.lineWidth=h?1.5:1,d.globalAlpha=h?.7:.45,d.strokeRect(m.x-4,m.y-4,m.w+8,m.h+8),l.type==="rect"||l.type==="circle"){d.setLineDash([]),d.globalAlpha=h?.9:.6;let F=l.type==="rect"?[[m.x,m.y],[m.x+m.w,m.y],[m.x,m.y+m.h],[m.x+m.w,m.y+m.h]]:[[m.x+m.w/2,m.y],[m.x+m.w,m.y+m.h/2],[m.x+m.w/2,m.y+m.h],[m.x,m.y+m.h/2]];for(let[_,H]of F)d.fillStyle="#fff",d.fillRect(_-5,H-5,10,10),d.strokeStyle=i?"#aaa":"#333",d.lineWidth=1.2,d.strokeRect(_-5,H-5,10,10)}d.restore()}},U=()=>{d.clearRect(0,0,k.width,k.height),d.drawImage(se,0,0);for(let l of c)Cs(l)},Ke=l=>{if(l.type==="rect")return{x:Math.min(l.x,l.x+l.w),y:Math.min(l.y,l.y+l.h),w:Math.abs(l.w),h:Math.abs(l.h)};if(l.type==="circle")return{x:l.cx-Math.abs(l.rx),y:l.cy-Math.abs(l.ry),w:Math.abs(l.rx)*2,h:Math.abs(l.ry)*2};if(l.type==="arrow"){let R=Math.min(l.x1,l.x2),F=Math.min(l.y1,l.y2);return{x:R,y:F,w:Math.abs(l.x2-l.x1)||20,h:Math.abs(l.y2-l.y1)||20}}if(l.type==="text")return{x:l.x,y:l.y-(l.size*5+12),w:l.text.length*(l.size*3+8),h:l.size*5+16};if(l.points.length===0)return{x:0,y:0,w:0,h:0};let g=1/0,h=1/0,A=-1/0,m=-1/0;for(let R of l.points)g=Math.min(g,R.x),h=Math.min(h,R.y),A=Math.max(A,R.x),m=Math.max(m,R.y);return{x:g,y:h,w:A-g||10,h:m-h||10}},St=(l,g)=>{for(let h=c.length-1;h>=0;h--){let A=Ke(c[h]),m=8;if(l>=A.x-m&&l<=A.x+A.w+m&&g>=A.y-m&&g<=A.y+A.h+m)return h}return-1},Ts=(l,g,h)=>{if(l.type==="draw"||l.type==="highlight")for(let A of l.points)A.x+=g,A.y+=h;else l.type==="rect"?(l.x+=g,l.y+=h):l.type==="circle"?(l.cx+=g,l.cy+=h):l.type==="arrow"?(l.x1+=g,l.y1+=h,l.x2+=g,l.y2+=h):l.type==="text"&&(l.x+=g,l.y+=h)};se.onload=()=>{let g=(e.clientWidth||450)/se.width;k.width=se.width,k.height=se.height,k.style.height=`${se.height*g}px`,d=k.getContext("2d"),d.drawImage(se,0,0);let h=[[10,10],[k.width-10,10],[10,k.height-10],[k.width-10,k.height-10],[k.width/2,k.height/2]],A=0;for(let[H,b]of h){let v=d.getImageData(H,b,1,1).data;A+=(v[0]*299+v[1]*587+v[2]*114)/1e3}i=A/h.length<128;let m=H=>{let b=k.getBoundingClientRect();return{x:(H.clientX-b.left)*(k.width/b.width),y:(H.clientY-b.top)*(k.height/b.height)}},R=!1;k.addEventListener("mousedown",H=>{let b=m(H);if(s==="select"){let v=St(b.x,b.y);if(v>=0){p=v,w=!0;let C=Ke(c[v]);M=b.x-C.x,re=b.y-C.y,k.classList.add("bs-grabbing"),k.classList.remove("bs-grab"),U()}else p=-1,U();return}if(s!=="pin"&&s!=="text"){let v=St(b.x,b.y);if(v>=0){p=v,w=!0,R=!0;let C=Ke(c[v]);M=b.x-C.x,re=b.y-C.y,k.classList.add("bs-grabbing"),U();return}}if(S=!0,N=b.x,j=b.y,s==="pin"){S=!1;let v=prompt("Describe the issue at this spot:");if(v){let C=on[u.length%on.length];u.push({x:b.x,y:b.y,note:v,color:C}),Lt()}return}if(s==="text"){S=!1;let v=prompt("Enter text:");v&&(c.push({type:"text",color:r,size:o,x:b.x,y:b.y,text:v}),U());return}(s==="draw"||s==="highlight")&&(q=[{x:b.x,y:b.y}])}),k.addEventListener("mousemove",H=>{let b=m(H);if(w&&p>=0){let v=Ke(c[p]),C=b.x-M-v.x,T=b.y-re-v.y;Ts(c[p],C,T),U();return}if(s==="select"){let v=St(b.x,b.y);k.classList.toggle("bs-grab",v>=0),f!==v&&(f=v,U());return}if(s!=="pin"&&s!=="text"&&!S){let v=St(b.x,b.y);k.classList.toggle("bs-grab",v>=0),f!==v&&(f=v,U())}if(S){if(s==="draw"||s==="highlight"){q.push({x:b.x,y:b.y}),U();let v=s==="highlight"?.25:1,C=s==="highlight"?o*4+10:o;if(s!=="highlight"){d.save(),d.strokeStyle=ln(),d.lineWidth=C+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,d.beginPath(),d.moveTo(q[0].x,q[0].y);for(let T=1;T<q.length;T++)d.lineTo(q[T].x,q[T].y);d.stroke(),d.restore()}d.strokeStyle=r,d.lineWidth=C,d.lineCap="round",d.lineJoin="round",d.globalAlpha=v,d.beginPath(),d.moveTo(q[0].x,q[0].y);for(let T=1;T<q.length;T++)d.lineTo(q[T].x,q[T].y);d.stroke(),d.globalAlpha=1}else if(U(),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",s==="rect")ke(()=>d.strokeRect(N,j,b.x-N,b.y-j),o),d.strokeStyle=r,d.lineWidth=o,d.strokeRect(N,j,b.x-N,b.y-j);else if(s==="circle"){let v=Math.abs(b.x-N)/2,C=Math.abs(b.y-j)/2,T=N+(b.x-N)/2,_n=j+(b.y-j)/2;ke(()=>{d.beginPath(),d.ellipse(T,_n,v,C,0,0,Math.PI*2),d.stroke()},o),d.strokeStyle=r,d.lineWidth=o,d.beginPath(),d.ellipse(T,_n,v,C,0,0,Math.PI*2),d.stroke()}else if(s==="arrow"){let v=Math.atan2(b.y-j,b.x-N),C=12+o*2,T=()=>{d.beginPath(),d.moveTo(N,j),d.lineTo(b.x,b.y),d.stroke(),d.beginPath(),d.moveTo(b.x,b.y),d.lineTo(b.x-C*Math.cos(v-.45),b.y-C*Math.sin(v-.45)),d.moveTo(b.x,b.y),d.lineTo(b.x-C*Math.cos(v+.45),b.y-C*Math.sin(v+.45)),d.stroke()};ke(T,o),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",T()}}});let F=H=>{if(w)return w=!1,R=!1,p=-1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),U(),void 0;if(!S)return;S=!1;let b=m(H);if(s==="draw"||s==="highlight")q.length>1&&c.push({type:s,color:r,size:o,alpha:s==="highlight"?.25:1,points:[...q]}),q=[];else if(s==="rect")c.push({type:"rect",color:r,size:o,x:N,y:j,w:b.x-N,h:b.y-j});else if(s==="circle"){let v=Math.abs(b.x-N)/2,C=Math.abs(b.y-j)/2;c.push({type:"circle",color:r,size:o,cx:N+(b.x-N)/2,cy:j+(b.y-j)/2,rx:v,ry:C})}else s==="arrow"&&c.push({type:"arrow",color:r,size:o,x1:N,y1:j,x2:b.x,y2:b.y});U()};k.addEventListener("mouseup",F),k.addEventListener("mouseleave",H=>{w?(w=!1,R=!1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),U()):S&&F(H)});let _=H=>{p>=0&&(H.key==="Delete"||H.key==="Backspace")&&(c.splice(p,1),p=-1,U())};document.addEventListener("keydown",_),Fn.addEventListener("click",()=>{c.length&&(c.pop(),p=-1,U())}),Un.addEventListener("click",()=>{c.length=0,u.length=0,p=-1,U(),Lt()})};let $s=()=>{for(let l=0;l<u.length;l++){let g=u[l],h=16;d.beginPath(),d.arc(g.x,g.y-h,h,0,Math.PI*2),d.fillStyle=g.color,d.fill(),d.strokeStyle="#fff",d.lineWidth=2,d.stroke(),d.beginPath(),d.moveTo(g.x-8,g.y-6),d.lineTo(g.x,g.y+4),d.lineTo(g.x+8,g.y-6),d.fillStyle=g.color,d.fill(),d.fillStyle="#fff",d.font="bold 14px Inter, sans-serif",d.textAlign="center",d.textBaseline="middle",d.fillText(`${l+1}`,g.x,g.y-h),d.textAlign="start",d.textBaseline="alphabetic"}};return{getAnnotation:()=>{try{return p=-1,U(),$s(),k.toDataURL("image/jpeg",.7)}catch{return null}},getPins:()=>u.map((l,g)=>({number:g+1,x:Math.round(l.x),y:Math.round(l.y),note:l.note}))}}function gt(e){if(!y)return;Xe=e,y.querySelectorAll(".bs-tab").forEach(r=>{r.classList.toggle("bs-active",r.dataset.tab===e)});let t=y.querySelector(".bs-scroll"),n={report:us,console:ti,network:ni,context:ri,history:si,settings:oi};t.innerHTML=n[e](),t.scrollTop=0,bs()}function bs(){if(!y)return;if(Xe==="history"){y.querySelectorAll("[data-hist-del]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histDel),s=y.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-confirm");if(o){o.remove();return}let a=document.createElement("div");a.className="bs-hist-confirm",a.innerHTML="<span>Delete this report?</span>";let i=document.createElement("button");i.type="button",i.className="bs-hist-confirm-yes",i.textContent="Delete";let c=document.createElement("button");c.type="button",c.className="bs-hist-confirm-no",c.textContent="Cancel",i.addEventListener("click",()=>{Zo(r),gt("history")}),c.addEventListener("click",()=>a.remove()),a.appendChild(i),a.appendChild(c),s.appendChild(a)})}),y.querySelectorAll("[data-hist-edit]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histEdit),s=y.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-edit-wrap");if(o){o.remove();return}s.querySelector(".bs-hist-confirm")?.remove();let a=Ye().find(w=>w.id===r);if(!a)return;let i=document.createElement("div");i.className="bs-hist-edit-wrap",i.innerHTML=`
1784
+ <div class="bs-ann-pin-note">${j(l.note)}</div>
1785
+ <div class="bs-ann-pin-loc">${Math.round(z)}% \xD7 ${Math.round(f)}%</div>
1786
+ </div>`;let _=document.createElement("button");_.type="button",_.className="bs-ann-pin-del",_.innerHTML="&times;",_.title="Remove pin",_.addEventListener("click",()=>{p.splice(m,1),Pe()}),U.appendChild(_),Rt.appendChild(U)})},d,dn=()=>a?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.35)",Ct=(l,m)=>{d.save(),d.strokeStyle=dn(),d.lineWidth=m+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,l(),d.restore()},Is=(l,m=!1)=>{if(l.type==="draw"||l.type==="highlight"){if(l.points.length<2)return;let f=l.type==="highlight"?.25:1,I=l.type==="highlight"?l.size*4+10:l.size,U=()=>{d.beginPath(),d.moveTo(l.points[0].x,l.points[0].y);for(let _=1;_<l.points.length;_++)d.lineTo(l.points[_].x,l.points[_].y);d.stroke()};l.type!=="highlight"&&Ct(U,I),d.strokeStyle=l.color,d.lineWidth=I,d.lineCap="round",d.lineJoin="round",d.globalAlpha=f,U(),d.globalAlpha=1}else if(l.type==="rect"){let f=()=>d.strokeRect(l.x,l.y,l.w,l.h);Ct(f,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",f()}else if(l.type==="circle"){let f=()=>{d.beginPath(),d.ellipse(l.cx,l.cy,Math.abs(l.rx),Math.abs(l.ry),0,0,Math.PI*2),d.stroke()};Ct(f,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,f()}else if(l.type==="arrow"){let f=Math.atan2(l.y2-l.y1,l.x2-l.x1),I=12+l.size*2,U=()=>{d.beginPath(),d.moveTo(l.x1,l.y1),d.lineTo(l.x2,l.y2),d.stroke(),d.beginPath(),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-I*Math.cos(f-.45),l.y2-I*Math.sin(f-.45)),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-I*Math.cos(f+.45),l.y2-I*Math.sin(f+.45)),d.stroke()};Ct(U,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",U()}else if(l.type==="text"){let f=l.size*5+12;d.font=`bold ${f}px Inter, -apple-system, sans-serif`,d.fillStyle=dn(),d.globalAlpha=.6,d.fillText(l.text,l.x+1,l.y+1),d.globalAlpha=1,d.fillStyle=l.color,d.fillText(l.text,l.x,l.y)}let h=!m&&b>=0&&c[b]===l,z=!m&&!h&&v>=0&&c[v]===l;if(h||z){let f=ee(l);if(d.save(),d.setLineDash([6,4]),d.strokeStyle=a?"#fff":"#000",d.lineWidth=h?1.5:1,d.globalAlpha=h?.7:.45,d.strokeRect(f.x-4,f.y-4,f.w+8,f.h+8),l.type==="rect"||l.type==="circle"){d.setLineDash([]),d.globalAlpha=h?.9:.6;let U=l.type==="rect"?[[f.x,f.y],[f.x+f.w,f.y],[f.x,f.y+f.h],[f.x+f.w,f.y+f.h]]:[[f.x+f.w/2,f.y],[f.x+f.w,f.y+f.h/2],[f.x+f.w/2,f.y+f.h],[f.x,f.y+f.h/2]];for(let[_,N]of U)d.fillStyle="#fff",d.fillRect(_-5,N-5,10,10),d.strokeStyle=a?"#aaa":"#333",d.lineWidth=1.2,d.strokeRect(_-5,N-5,10,10)}d.restore()}},F=()=>{d.clearRect(0,0,k.width,k.height),d.drawImage(lt,0,0);for(let l of c)Is(l)},ee=l=>{if(l.type==="rect")return{x:Math.min(l.x,l.x+l.w),y:Math.min(l.y,l.y+l.h),w:Math.abs(l.w),h:Math.abs(l.h)};if(l.type==="circle")return{x:l.cx-Math.abs(l.rx),y:l.cy-Math.abs(l.ry),w:Math.abs(l.rx)*2,h:Math.abs(l.ry)*2};if(l.type==="arrow"){let I=Math.min(l.x1,l.x2),U=Math.min(l.y1,l.y2);return{x:I,y:U,w:Math.abs(l.x2-l.x1)||20,h:Math.abs(l.y2-l.y1)||20}}if(l.type==="text")return{x:l.x,y:l.y-(l.size*5+12),w:l.text.length*(l.size*3+8),h:l.size*5+16};if(l.points.length===0)return{x:0,y:0,w:0,h:0};let m=1/0,h=1/0,z=-1/0,f=-1/0;for(let I of l.points)m=Math.min(m,I.x),h=Math.min(h,I.y),z=Math.max(z,I.x),f=Math.max(f,I.y);return{x:m,y:h,w:z-m||10,h:f-h||10}},Te=(l,m)=>{for(let h=c.length-1;h>=0;h--){let z=ee(c[h]),f=8;if(l>=z.x-f&&l<=z.x+z.w+f&&m>=z.y-f&&m<=z.y+z.h+f)return h}return-1},Hs=(l,m,h)=>{if(l.type==="draw"||l.type==="highlight")for(let z of l.points)z.x+=m,z.y+=h;else l.type==="rect"?(l.x+=m,l.y+=h):l.type==="circle"?(l.cx+=m,l.cy+=h):l.type==="arrow"?(l.x1+=m,l.y1+=h,l.x2+=m,l.y2+=h):l.type==="text"&&(l.x+=m,l.y+=h)};lt.onload=()=>{let m=(t.clientWidth||450)/lt.width;k.width=lt.width,k.height=lt.height,k.style.height=`${lt.height*m}px`,d=k.getContext("2d"),d.drawImage(lt,0,0);let h=[[10,10],[k.width-10,10],[10,k.height-10],[k.width-10,k.height-10],[k.width/2,k.height/2]],z=0;for(let[N,u]of h){let y=d.getImageData(N,u,1,1).data;z+=(y[0]*299+y[1]*587+y[2]*114)/1e3}a=z/h.length<128;let f=N=>{let u=k.getBoundingClientRect();return{x:(N.clientX-u.left)*(k.width/u.width),y:(N.clientY-u.top)*(k.height/u.height)}},I=!1;k.addEventListener("mousedown",N=>{let u=f(N);if(s==="select"){let y=Te(u.x,u.y);if(y>=0){b=y,S=!0;let M=ee(c[y]);R=u.x-M.x,Z=u.y-M.y,k.classList.add("bs-grabbing"),k.classList.remove("bs-grab"),F()}else b=-1,F();return}if(s!=="pin"&&s!=="text"){let y=Te(u.x,u.y);if(y>=0){b=y,S=!0,I=!0;let M=ee(c[y]);R=u.x-M.x,Z=u.y-M.y,k.classList.add("bs-grabbing"),F();return}}if(D=!0,w=u.x,E=u.y,s==="pin"){D=!1;let y=prompt("Describe the issue at this spot:");if(y){let M=pt[p.length%pt.length];p.push({x:u.x,y:u.y,note:y,color:M}),Pe()}return}if(s==="text"){D=!1;let y=prompt("Enter text:");y&&(c.push({type:"text",color:r,size:o,x:u.x,y:u.y,text:y}),F());return}(s==="draw"||s==="highlight")&&(T=[{x:u.x,y:u.y}])}),k.addEventListener("mousemove",N=>{let u=f(N);if(S&&b>=0){let y=ee(c[b]),M=u.x-R-y.x,A=u.y-Z-y.y;Hs(c[b],M,A),F();return}if(s==="select"){let y=Te(u.x,u.y);k.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F());return}if(s!=="pin"&&s!=="text"&&!D){let y=Te(u.x,u.y);k.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F())}if(D){if(s==="draw"||s==="highlight"){T.push({x:u.x,y:u.y}),F();let y=s==="highlight"?.25:1,M=s==="highlight"?o*4+10:o;if(s!=="highlight"){d.save(),d.strokeStyle=dn(),d.lineWidth=M+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,d.beginPath(),d.moveTo(T[0].x,T[0].y);for(let A=1;A<T.length;A++)d.lineTo(T[A].x,T[A].y);d.stroke(),d.restore()}d.strokeStyle=r,d.lineWidth=M,d.lineCap="round",d.lineJoin="round",d.globalAlpha=y,d.beginPath(),d.moveTo(T[0].x,T[0].y);for(let A=1;A<T.length;A++)d.lineTo(T[A].x,T[A].y);d.stroke(),d.globalAlpha=1}else if(F(),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",s==="rect")Ct(()=>d.strokeRect(w,E,u.x-w,u.y-E),o),d.strokeStyle=r,d.lineWidth=o,d.strokeRect(w,E,u.x-w,u.y-E);else if(s==="circle"){let y=Math.abs(u.x-w)/2,M=Math.abs(u.y-E)/2,A=w+(u.x-w)/2,Vn=E+(u.y-E)/2;Ct(()=>{d.beginPath(),d.ellipse(A,Vn,y,M,0,0,Math.PI*2),d.stroke()},o),d.strokeStyle=r,d.lineWidth=o,d.beginPath(),d.ellipse(A,Vn,y,M,0,0,Math.PI*2),d.stroke()}else if(s==="arrow"){let y=Math.atan2(u.y-E,u.x-w),M=12+o*2,A=()=>{d.beginPath(),d.moveTo(w,E),d.lineTo(u.x,u.y),d.stroke(),d.beginPath(),d.moveTo(u.x,u.y),d.lineTo(u.x-M*Math.cos(y-.45),u.y-M*Math.sin(y-.45)),d.moveTo(u.x,u.y),d.lineTo(u.x-M*Math.cos(y+.45),u.y-M*Math.sin(y+.45)),d.stroke()};Ct(A,o),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",A()}}});let U=N=>{if(S)return S=!1,I=!1,b=-1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),F(),void 0;if(!D)return;D=!1;let u=f(N);if(s==="draw"||s==="highlight")T.length>1&&c.push({type:s,color:r,size:o,alpha:s==="highlight"?.25:1,points:[...T]}),T=[];else if(s==="rect")c.push({type:"rect",color:r,size:o,x:w,y:E,w:u.x-w,h:u.y-E});else if(s==="circle"){let y=Math.abs(u.x-w)/2,M=Math.abs(u.y-E)/2;c.push({type:"circle",color:r,size:o,cx:w+(u.x-w)/2,cy:E+(u.y-E)/2,rx:y,ry:M})}else s==="arrow"&&c.push({type:"arrow",color:r,size:o,x1:w,y1:E,x2:u.x,y2:u.y});F()};k.addEventListener("mouseup",U),k.addEventListener("mouseleave",N=>{S?(S=!1,I=!1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),F()):D&&U(N)});let _=N=>{b>=0&&(N.key==="Delete"||N.key==="Backspace")&&(c.splice(b,1),b=-1,F())};document.addEventListener("keydown",_),Yn.addEventListener("click",()=>{c.length&&(c.pop(),b=-1,F())}),Xn.addEventListener("click",()=>{c.length=0,p.length=0,b=-1,F(),Pe()})};let Ds=()=>{for(let l=0;l<p.length;l++){let m=p[l],h=16;d.beginPath(),d.arc(m.x,m.y-h,h,0,Math.PI*2),d.fillStyle=m.color,d.fill(),d.strokeStyle="#fff",d.lineWidth=2,d.stroke(),d.beginPath(),d.moveTo(m.x-8,m.y-6),d.lineTo(m.x,m.y+4),d.lineTo(m.x+8,m.y-6),d.fillStyle=m.color,d.fill(),d.fillStyle="#fff",d.font="bold 14px Inter, sans-serif",d.textAlign="center",d.textBaseline="middle",d.fillText(`${l+1}`,m.x,m.y-h),d.textAlign="start",d.textBaseline="alphabetic"}};return{getAnnotation:()=>{try{return b=-1,F(),Ds(),k.toDataURL("image/jpeg",.7)}catch{return null}},getPins:()=>p.map((l,m)=>({number:m+1,x:Math.round(l.x),y:Math.round(l.y),note:l.note}))}}function ve(t){if(!g)return;Gt=t,g.querySelectorAll(".bs-tab").forEach(r=>{r.classList.toggle("bs-active",r.dataset.tab===t)});let e=g.querySelector(".bs-scroll"),n={report:ys,console:li,network:ci,context:di,history:pi,settings:bi};e.innerHTML=n[t](),e.scrollTop=0,xs()}function xs(){if(!g)return;if(Gt==="history"){g.querySelectorAll("[data-hist-del]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histDel),s=g.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-confirm");if(o){o.remove();return}let i=document.createElement("div");i.className="bs-hist-confirm",i.innerHTML="<span>Delete this report?</span>";let a=document.createElement("button");a.type="button",a.className="bs-hist-confirm-yes",a.textContent="Delete";let c=document.createElement("button");c.type="button",c.className="bs-hist-confirm-no",c.textContent="Cancel",a.addEventListener("click",()=>{ii(r),ve("history")}),c.addEventListener("click",()=>i.remove()),i.appendChild(a),i.appendChild(c),s.appendChild(i)})}),g.querySelectorAll("[data-hist-edit]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histEdit),s=g.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-edit-wrap");if(o){o.remove();return}s.querySelector(".bs-hist-confirm")?.remove();let i=Qt().find(S=>S.id===r);if(!i)return;let a=document.createElement("div");a.className="bs-hist-edit-wrap",a.innerHTML=`
1658
1787
  <div class="bs-field" style="margin-bottom:8px">
1659
- <input class="bs-input" data-edit-title value="${B(a.title)}" />
1788
+ <input class="bs-input" data-edit-title value="${j(i.title)}" />
1660
1789
  </div>
1661
1790
  <div class="bs-field" style="margin-bottom:8px">
1662
- <textarea class="bs-textarea" data-edit-desc style="min-height:56px">${B(a.description)}</textarea>
1791
+ <textarea class="bs-textarea" data-edit-desc style="min-height:56px">${j(i.description)}</textarea>
1663
1792
  </div>
1664
1793
  <div class="bs-field" style="margin-bottom:8px">
1665
1794
  <div class="bs-sev-row">
1666
- <button type="button" class="bs-sev-btn bs-sev-low${a.severity==="low"?" bs-picked":""}" data-edit-sev="low">Low</button>
1667
- <button type="button" class="bs-sev-btn bs-sev-medium${a.severity==="medium"?" bs-picked":""}" data-edit-sev="medium">Medium</button>
1668
- <button type="button" class="bs-sev-btn bs-sev-high${a.severity==="high"?" bs-picked":""}" data-edit-sev="high">High</button>
1669
- <button type="button" class="bs-sev-btn bs-sev-critical${a.severity==="critical"?" bs-picked":""}" data-edit-sev="critical">Critical</button>
1795
+ <button type="button" class="bs-sev-btn bs-sev-low${i.severity==="low"?" bs-picked":""}" data-edit-sev="low">Low</button>
1796
+ <button type="button" class="bs-sev-btn bs-sev-medium${i.severity==="medium"?" bs-picked":""}" data-edit-sev="medium">Medium</button>
1797
+ <button type="button" class="bs-sev-btn bs-sev-high${i.severity==="high"?" bs-picked":""}" data-edit-sev="high">High</button>
1798
+ <button type="button" class="bs-sev-btn bs-sev-critical${i.severity==="critical"?" bs-picked":""}" data-edit-sev="critical">Critical</button>
1670
1799
  </div>
1671
1800
  </div>
1672
- <div class="bs-hist-edit-row"></div>`;let c=a.severity;s.appendChild(i),i.querySelectorAll("[data-edit-sev]").forEach(w=>{w.addEventListener("click",()=>{c=w.dataset.editSev,i.querySelectorAll(".bs-sev-btn").forEach(S=>S.classList.remove("bs-picked")),w.classList.add("bs-picked")})});let u=i.querySelector(".bs-hist-edit-row"),p=document.createElement("button");p.type="button",p.className="bs-hist-save",p.textContent="Save";let f=document.createElement("button");f.type="button",f.className="bs-hist-cancel",f.textContent="Cancel",p.addEventListener("click",()=>{let w=i.querySelector("[data-edit-title]").value.trim(),S=i.querySelector("[data-edit-desc]").value.trim();w&&(ei(r,{title:w,description:S,severity:c}),gt("history"))}),f.addEventListener("click",()=>i.remove()),u.appendChild(p),u.appendChild(f)})});return}if(Xe==="settings"){y.querySelectorAll("[data-set-theme]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setTheme;en(r),y.querySelectorAll("[data-set-theme]").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),y.querySelectorAll("[data-set-layout]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setLayout,s=at(r);s&&(Pe=s,ee(),setTimeout(()=>{Xe="settings",me(),setTimeout(()=>gt("settings"),50)},400))})});return}if(Xe!=="report")return;y.querySelectorAll(".bs-cat-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.cat;y.querySelector('input[name="category"]').value=r,y.querySelectorAll(".bs-cat-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),y.querySelectorAll(".bs-sev-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.sev;y.querySelector('input[name="severity"]').value=r,y.querySelectorAll(".bs-sev-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})});let e=null,t=null;y.querySelector("[data-bs-screenshot]")?.addEventListener("click",async()=>{let n=y?.querySelector("[data-bs-shot-title]"),r=y?.querySelector("[data-bs-shot-sub]"),s=y?.querySelector("[data-bs-screenshot]");if(n&&(n.textContent="Capturing..."),y&&(y.style.visibility="hidden"),Q&&(Q.style.visibility="hidden"),await new Promise(o=>setTimeout(o,200)),e=await yn(!0),y&&(y.style.visibility=""),Q&&(Q.style.visibility=""),e){n&&(n.textContent="Screenshot captured!"),r&&(r.textContent="Draw on the image below to highlight the issue"),s?.classList.add("bs-captured");let o=y?.querySelector("[data-bs-annotate]");o&&(t=ii(o,e))}else n&&(n.textContent="Screenshot unavailable"),r&&(r.textContent="Could not capture screenshot on this page")}),y.querySelector("[data-bs-form]")?.addEventListener("submit",async n=>{n.preventDefault();let r=n.target,s=r.querySelector(".bs-submit-btn"),o=r.elements.namedItem("title").value.trim(),a=r.elements.namedItem("description").value.trim(),i=r.elements.namedItem("severity").value,c=r.elements.namedItem("category").value;if(!o)return;s.disabled=!0,s.textContent="Sending...";let u=ps(),p={projectId:J.projectId,title:o,description:a,category:c,severity:i,tags:u.tags.length?u.tags:void 0,context:ds(),consoleLogs:de(),errors:pe(),networkCaptures:ge(),breadcrumbs:$e(),performance:ze()??void 0,screenshot:e??void 0,annotation:t?.getAnnotation()??void 0,pins:t?.getPins().length?t.getPins():void 0,createdAt:Date.now()},f=await kn(p);Qo({title:p.title,description:p.description,category:p.category,severity:p.severity,tags:p.tags,screenshot:p.screenshot,pins:p.pins,url:window.location.href,createdAt:p.createdAt,status:f.success?"sent":"draft"}),f.success?(s.innerHTML=`${O.check} Bug reported!`,s.classList.add("bs-submit-ok"),setTimeout(ee,1200)):(s.textContent=f.error??"Failed \u2014 saved as draft",s.classList.add("bs-submit-err"),setTimeout(()=>{s.disabled=!1,s.textContent="Submit Report",s.classList.remove("bs-submit-err")},2500))})}function me(){if(Z)return;Z=!0,Xe="report",Hn(),Q=document.createElement("div"),Q.className="bs-backdrop",ae.appendChild(Q);let e=ge().length,t=pe().length;y=document.createElement("div"),y.className=`bs-modal bs-ly-${Pe.id}`,Ce(y);let n=`
1801
+ <div class="bs-hist-edit-row"></div>`;let c=i.severity;s.appendChild(a),a.querySelectorAll("[data-edit-sev]").forEach(S=>{S.addEventListener("click",()=>{c=S.dataset.editSev,a.querySelectorAll(".bs-sev-btn").forEach(D=>D.classList.remove("bs-picked")),S.classList.add("bs-picked")})});let p=a.querySelector(".bs-hist-edit-row"),b=document.createElement("button");b.type="button",b.className="bs-hist-save",b.textContent="Save";let v=document.createElement("button");v.type="button",v.className="bs-hist-cancel",v.textContent="Cancel",b.addEventListener("click",()=>{let S=a.querySelector("[data-edit-title]").value.trim(),D=a.querySelector("[data-edit-desc]").value.trim();S&&(ai(r,{title:S,description:D,severity:c}),ve("history"))}),v.addEventListener("click",()=>a.remove()),p.appendChild(b),p.appendChild(v)})});return}if(Gt==="settings"){g.querySelectorAll("[data-set-theme]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setTheme;ye(r),g.querySelectorAll("[data-set-theme]").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),g.querySelectorAll("[data-set-layout]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setLayout,s=be(r);s&&(At=s,nt(),setTimeout(()=>{Gt="settings",at(),setTimeout(()=>ve("settings"),50)},400))})});return}if(Gt!=="report")return;g.querySelectorAll(".bs-cat-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.cat;g.querySelector('input[name="category"]').value=r,g.querySelectorAll(".bs-cat-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),g.querySelectorAll(".bs-sev-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.sev;g.querySelector('input[name="severity"]').value=r,g.querySelectorAll(".bs-sev-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})});let t=null,e=null;g.querySelector("[data-bs-screenshot]")?.addEventListener("click",async()=>{let n=g?.querySelector("[data-bs-shot-title]"),r=g?.querySelector("[data-bs-shot-sub]"),s=g?.querySelector("[data-bs-screenshot]");if(n&&(n.textContent="Capturing..."),g&&(g.style.visibility="hidden"),et&&(et.style.visibility="hidden"),await new Promise(o=>setTimeout(o,200)),t=await Ue(!0),g&&(g.style.visibility=""),et&&(et.style.visibility=""),t){n&&(n.textContent="Screenshot captured!"),r&&(r.textContent="Draw on the image below to highlight the issue"),s?.classList.add("bs-captured");let o=g?.querySelector("[data-bs-annotate]");o&&(e=ui(o,t))}else n&&(n.textContent="Screenshot unavailable"),r&&(r.textContent="Could not capture screenshot on this page")}),g.querySelector("[data-bs-form]")?.addEventListener("submit",async n=>{n.preventDefault();let r=n.target,s=r.querySelector(".bs-submit-btn"),o=r.elements.namedItem("title").value.trim(),i=r.elements.namedItem("description").value.trim(),a=r.elements.namedItem("severity").value,c=r.elements.namedItem("category").value;if(!o)return;s.disabled=!0,s.textContent="Sending...";let p=vs(),b={projectId:G.projectId,title:o,description:i,category:c,severity:a,tags:p.tags.length?p.tags:void 0,context:hs(),consoleLogs:ut(),errors:ft(),networkCaptures:vt(),breadcrumbs:zt(),performance:Bt()??void 0,screenshot:t??void 0,annotation:e?.getAnnotation()??void 0,pins:e?.getPins().length?e.getPins():void 0,createdAt:Date.now()},v=await En(b);oi({title:b.title,description:b.description,category:b.category,severity:b.severity,tags:b.tags,screenshot:b.screenshot,pins:b.pins,url:window.location.href,createdAt:b.createdAt,status:v.success?"sent":"draft"}),v.success?(s.innerHTML=`${O.check} Bug reported!`,s.classList.add("bs-submit-ok"),setTimeout(nt,1200)):(s.textContent=v.error??"Failed \u2014 saved as draft",s.classList.add("bs-submit-err"),setTimeout(()=>{s.disabled=!1,s.textContent="Submit Report",s.classList.remove("bs-submit-err")},2500))})}function at(){if(!J||K)return;K=!0,Gt="report",On(),et=J.createElement("div"),et.className="bs-backdrop",J.body.appendChild(et);let t=vt().length,e=ft().length;g=J.createElement("div"),g.className=`bs-modal bs-ly-${At.id}`,kt(g);let n=`
1673
1802
  <div class="bs-tabs">
1674
1803
  <button class="bs-tab bs-active" data-tab="report">${O.report} Report</button>
1675
- <button class="bs-tab" data-tab="console">${O.console} Console <span class="bs-tab-badge">${de().length}</span></button>
1676
- <button class="bs-tab" data-tab="network">${O.network} Network ${e?`<span class="bs-tab-badge bs-warn">${e}</span>`:`<span class="bs-tab-badge">${Re().length}</span>`}</button>
1677
- <button class="bs-tab" data-tab="context">${O.ctx} Context ${t?`<span class="bs-tab-badge bs-warn">${t}</span>`:""}</button>
1678
- <button class="bs-tab" data-tab="history">${O.history} History <span class="bs-tab-badge">${Ye().length}</span></button>
1679
- </div>`,r=ie(),s=r?r.name.split(" ").map(f=>f[0]).join("").toUpperCase().slice(0,2):"",o=Qt(),a=r?`
1804
+ <button class="bs-tab" data-tab="console">${O.console} Console <span class="bs-tab-badge">${ut().length}</span></button>
1805
+ <button class="bs-tab" data-tab="network">${O.network} Network ${t?`<span class="bs-tab-badge bs-warn">${t}</span>`:`<span class="bs-tab-badge">${Dt().length}</span>`}</button>
1806
+ <button class="bs-tab" data-tab="context">${O.ctx} Context ${e?`<span class="bs-tab-badge bs-warn">${e}</span>`:""}</button>
1807
+ <button class="bs-tab" data-tab="history">${O.history} History <span class="bs-tab-badge">${Qt().length}</span></button>
1808
+ </div>`,r=ot(),s=r?r.name.split(" ").map(v=>v[0]).join("").toUpperCase().slice(0,2):"",o=nn(),i=r?`
1680
1809
  <div class="bs-hdr">
1681
1810
  <div class="bs-logo">BugStash</div>
1682
1811
  <div class="bs-hdr-right">
@@ -1695,28 +1824,32 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1695
1824
  </div>`:`
1696
1825
  <div class="bs-hdr" style="justify-content:flex-end">
1697
1826
  <button class="bs-close-btn" data-bs-close title="Close">${O.x}</button>
1698
- </div>`,i=Pe.tabPosition==="left",c=Pe.tabPosition==="bottom",u=r?us():Ko();i?y.innerHTML=`
1699
- ${a}
1827
+ </div>`,a=At.tabPosition==="left",c=At.tabPosition==="bottom",p=r?ys():ri();a?g.innerHTML=`
1828
+ ${i}
1700
1829
  <div class="bs-body-wrap">
1701
1830
  ${r?n:""}
1702
- <div class="bs-scroll">${u}</div>
1703
- </div>`:c?y.innerHTML=`
1704
- ${a}
1705
- <div class="bs-scroll">${u}</div>
1706
- ${r?`<div class="bs-tab-divider"></div>${n}`:""}`:y.innerHTML=`
1707
- ${a}
1831
+ <div class="bs-scroll">${p}</div>
1832
+ </div>`:c?g.innerHTML=`
1833
+ ${i}
1834
+ <div class="bs-scroll">${p}</div>
1835
+ ${r?`<div class="bs-tab-divider"></div>${n}`:""}`:g.innerHTML=`
1836
+ ${i}
1708
1837
  ${r?`${n}<div class="bs-tab-divider"></div>`:""}
1709
- <div class="bs-scroll">${u}</div>`,ae.appendChild(y),x&&x.classList.add("bs-open"),requestAnimationFrame(()=>{Q?.classList.add("bs-in"),y?.classList.add("bs-in")}),y.querySelectorAll(".bs-tab").forEach(f=>{f.addEventListener("click",()=>gt(f.dataset.tab))}),y.querySelector('.bs-hdr-icon[data-tab="settings"]')?.addEventListener("click",()=>gt("settings")),y.querySelector("[data-bs-close]")?.addEventListener("click",ee),Q.addEventListener("click",ee),y.querySelector("[data-bs-pin-toggle]")?.addEventListener("click",()=>{let f=We(),w=y?.querySelector("[data-bs-pin-toggle]");w&&(w.classList.toggle("active",f),w.innerHTML=`
1838
+ <div class="bs-scroll">${p}</div>`,J.body.appendChild(g),x&&x.classList.add("bs-open"),requestAnimationFrame(()=>{et?.classList.add("bs-in"),g?.classList.add("bs-in")}),g.querySelectorAll(".bs-tab").forEach(v=>{v.addEventListener("click",()=>ve(v.dataset.tab))}),g.querySelector('.bs-hdr-icon[data-tab="settings"]')?.addEventListener("click",()=>ve("settings")),g.querySelector("[data-bs-close]")?.addEventListener("click",nt),et.addEventListener("click",nt),g.querySelector("[data-bs-pin-toggle]")?.addEventListener("click",()=>{let v=$t(),S=g?.querySelector("[data-bs-pin-toggle]");S&&(S.classList.toggle("active",v),S.innerHTML=`
1710
1839
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1711
- Pins ${f?"ON":"OFF"}
1712
- `)}),y.querySelector("[data-bs-logout]")?.addEventListener("click",()=>{qt(),ee(),setTimeout(()=>me(),300)}),r?bs():ai();let p=f=>{f.key==="Escape"&&(ee(),document.removeEventListener("keydown",p))};document.addEventListener("keydown",p)}function ai(){if(!y)return;let e=y.querySelector("#bs-login-submit"),t=y.querySelector("#bs-login-email"),n=y.querySelector("#bs-login-pass"),r=y.querySelector("#bs-login-error");if(!e||!t||!n)return;let s=async()=>{let o=t.value.trim(),a=n.value;if(!o||!a){r.textContent="Please enter email and password",r.style.display="block";return}e.setAttribute("disabled","true"),e.textContent="Signing in...",r.style.display="none";let i=await jt(o,a,J.projectId);i.success?(ut(J.projectId,ae),lt(J.projectId),ee(),setTimeout(()=>me(),300)):(r.textContent=i.error||"Invalid credentials",r.style.display="block",e.removeAttribute("disabled"),e.textContent="Sign In")};e.addEventListener("click",s),n.addEventListener("keydown",o=>{o.key==="Enter"&&s()}),t.addEventListener("keydown",o=>{o.key==="Enter"&&n.focus()}),setTimeout(()=>t.focus(),100)}function ee(){Z&&(x&&x.classList.remove("bs-open"),y&&(y.classList.remove("bs-in"),y.classList.add("bs-out")),Q&&Q.classList.remove("bs-in"),setTimeout(()=>{y?.remove(),Q?.remove(),y=null,Q=null,Z=!1},350))}function Ce(e){for(let[t,n]of Object.entries(ve.vars))e.style.setProperty(t,n)}function en(e){let t=_t(e);t&&(ve=t,y&&Ce(y),x&&Ce(x),$&&Ce($))}function ms(){return ve.id}function fs(e){let t=at(e);t&&(Pe=t,Z&&(ee(),setTimeout(me,400)))}function gs(){return Pe.id}function li(){try{let e=localStorage.getItem(as);if(!e)return null;let t=JSON.parse(e);if(typeof t.top=="number"&&typeof t.left=="number")return t}catch{}return null}function ci(e,t){try{localStorage.setItem(as,JSON.stringify({top:e,left:t}))}catch{}}function di(e,t){let s=window.innerWidth,o=window.innerHeight;return{top:Math.max(8,Math.min(o-56-8,e)),left:Math.max(8,Math.min(s-56-8,t))}}function In(e,t){if(!x)return;let n=di(e,t);x.style.top=`${n.top}px`,x.style.left=`${n.left}px`,x.style.bottom="auto",x.style.right="auto",hs(n.top,n.left)}function hs(e,t){if(!$)return;let n=56,r=8,s=$.offsetHeight||200,o=e-s-r;o<8&&(o=e+n+r),$.style.top=`${o}px`,$.style.bottom="auto",$.style.left=`${t+n/2-20}px`,$.style.right="auto"}function pi(){if(!x)return;let e=0,t=0,n=0,r=0,s=!1;function o(){x&&(x.removeEventListener("pointermove",i),x.removeEventListener("pointerup",c),x.classList.remove("bs-dragging")),zn=null}function a(u){if(!x)return;Se=!1,s=!1,e=u.clientX,t=u.clientY;let p=x.getBoundingClientRect();n=p.top,r=p.left,x.setPointerCapture(u.pointerId),x.addEventListener("pointermove",i),x.addEventListener("pointerup",c),zn=o}function i(u){let p=u.clientX-e,f=u.clientY-t;if(!s&&Math.abs(p)<5&&Math.abs(f)<5)return;s=!0,Se=!0,x?.classList.add("bs-dragging");let w=n+f,S=r+p;In(w,S)}function c(u){if(x?.releasePointerCapture(u.pointerId),o(),s&&x){let p=x.getBoundingClientRect();ci(p.top,p.left),u.preventDefault(),u.stopPropagation(),setTimeout(()=>{Se=!1},10)}else Se=!1}x.addEventListener("pointerdown",a)}function ys(e,t){J=e,ae=t,bt=document.createElement("style"),bt.textContent=`
1840
+ Pins ${v?"ON":"OFF"}
1841
+ `)}),g.querySelector("[data-bs-logout]")?.addEventListener("click",()=>{We(),nt(),setTimeout(()=>at(),300)}),r?xs():fi();let b=v=>{v.key==="Escape"&&(nt(),document.removeEventListener("keydown",b))};document.addEventListener("keydown",b)}function fi(){if(!g)return;let t=g.querySelector("#bs-login-submit"),e=g.querySelector("#bs-login-email"),n=g.querySelector("#bs-login-pass"),r=g.querySelector("#bs-login-error");if(!t||!e||!n)return;let s=async()=>{let o=e.value.trim(),i=n.value;if(!o||!i){r.textContent="Please enter email and password",r.style.display="block";return}t.setAttribute("disabled","true"),t.textContent="Signing in...",r.style.display="none";let a=await _e(o,i,G.projectId);a.success?(Kt(G.projectId,Et),Yt(G.projectId),nt(),setTimeout(()=>at(),300)):(r.textContent=a.error||"Invalid credentials",r.style.display="block",t.removeAttribute("disabled"),t.textContent="Sign In")};t.addEventListener("click",s),n.addEventListener("keydown",o=>{o.key==="Enter"&&s()}),e.addEventListener("keydown",o=>{o.key==="Enter"&&n.focus()}),setTimeout(()=>e.focus(),100)}function nt(){K&&(x&&x.classList.remove("bs-open"),g&&(g.classList.remove("bs-in"),g.classList.add("bs-out")),et&&et.classList.remove("bs-in"),setTimeout(()=>{g?.remove(),et?.remove(),g=null,et=null,K=!1},350))}function kt(t){for(let[e,n]of Object.entries(it.vars))t.style.setProperty(e,n)}function ye(t){let e=Ve(t);e&&(it=e,g&&kt(g),x&&kt(x),P&&kt(P))}function ws(){return it.id}function ks(t){let e=be(t);e&&(At=e,K&&(nt(),setTimeout(at,400)))}function Es(){return At.id}function mi(){try{let t=localStorage.getItem(fs);if(!t)return null;let e=JSON.parse(t);if(typeof e.top=="number"&&typeof e.left=="number")return e}catch{}return null}function gi(t,e){try{localStorage.setItem(fs,JSON.stringify({top:t,left:e}))}catch{}}function hi(t,e){let s=window.innerWidth,o=window.innerHeight;return{top:Math.max(8,Math.min(o-56-8,t)),left:Math.max(8,Math.min(s-56-8,e))}}function jn(t,e){if(!x)return;let n=hi(t,e);x.style.top=`${n.top}px`,x.style.left=`${n.left}px`,x.style.bottom="auto",x.style.right="auto",Ls(n.top,n.left)}function Ls(t,e){if(!P)return;let n=56,r=8,s=P.offsetHeight||200,o=t-s-r;o<8&&(o=t+n+r),P.style.top=`${o}px`,P.style.bottom="auto",P.style.left=`${e+n/2-20}px`,P.style.right="auto"}function vi(){if(!x)return;let t=0,e=0,n=0,r=0,s=!1;function o(){x&&(x.removeEventListener("pointermove",a),x.removeEventListener("pointerup",c),x.classList.remove("bs-dragging")),Bn=null}function i(p){if(!x)return;Mt=!1,s=!1,t=p.clientX,e=p.clientY;let b=x.getBoundingClientRect();n=b.top,r=b.left,x.setPointerCapture(p.pointerId),x.addEventListener("pointermove",a),x.addEventListener("pointerup",c),Bn=o}function a(p){let b=p.clientX-t,v=p.clientY-e;if(!s&&Math.abs(b)<5&&Math.abs(v)<5)return;s=!0,Mt=!0,x?.classList.add("bs-dragging");let S=n+v,D=r+b;jn(S,D)}function c(p){if(x?.releasePointerCapture(p.pointerId),o(),s&&x){let b=x.getBoundingClientRect();gi(b.top,b.left),p.preventDefault(),p.stopPropagation(),setTimeout(()=>{Mt=!1},10)}else Mt=!1}x.addEventListener("pointerdown",i)}function Ss(t,e){G=t,Et=e,wt=document.createElement("iframe"),wt.style.cssText="position:fixed;inset:0;z-index:2147483640;pointer-events:none;border:none;background:transparent;width:100%;height:100%;color-scheme:normal;";let n=`
1713
1842
  @import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap');
1714
- ${Jo}
1715
- ${_r}
1716
- `,ae.appendChild(bt);let n=e.panelPosition==="bottom-left"?"left":"right";x=document.createElement("button"),x.className="bs-fab",Ce(x),x.innerHTML=`${O.bug}<span class="bs-fab-label">Report a bug</span>`;let r=li();r?In(r.top,r.left):x.style[n]="24px",x.addEventListener("click",()=>{Se||(Z?ee():me())}),ae.appendChild(x),pi(),$=document.createElement("div"),$.className="bs-toolbar",r?hs(r.top,r.left):$.style[n]="32px",Ce($);let o=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",a=[{icon:O.cam,tip:"Screenshot",kbd:`${o}+Shift+S`,action:async()=>{let i=await yn(!0);i&&(Z||me(),setTimeout(()=>{let c=y?.querySelector("[data-bs-screenshot]");if(c){c.__screenshot=i,c.classList.add("bs-captured");let u=c.querySelector("[data-bs-shot-title]"),p=c.querySelector("[data-bs-shot-sub]");u&&(u.textContent="Screenshot captured!"),p&&(p.textContent="Click to retake or annotate"),c.click()}},400))}},{icon:O.pin,tip:"Toggle Pins",kbd:`${o}+Shift+P`,id:"bs-tb-pin",action:()=>{if(!ie()){Z||me();return}ae?.querySelector("#bugstash-live-pins")||(ut(J.projectId,ae),lt(J.projectId));let c=We(),u=$?.querySelector("#bs-tb-pin");u&&u.classList.toggle("bs-active",c);let p=y?.querySelector("[data-bs-pin-toggle]");p&&(p.classList.toggle("active",c),p.innerHTML=`
1843
+ ${ni}
1844
+ ${Vr}
1845
+ html, body { margin: 0; padding: 0; background: transparent; pointer-events: none; overflow: hidden; }
1846
+ `;wt.srcdoc=`<!DOCTYPE html><html><head><style>${n}</style></head><body></body></html>`,wt.addEventListener("load",()=>{J=wt.contentDocument,J&&yi(t)}),Et.appendChild(wt),xi(t),he=()=>{if(!(!x||Mt)&&x.style.top&&x.style.top!=="auto"){let r=x.getBoundingClientRect();jn(r.top,r.left)}},window.addEventListener("resize",he)}function yi(t){if(!J)return;let e=t.panelPosition==="bottom-left"?"left":"right";x=J.createElement("button"),x.className="bs-fab",kt(x),x.innerHTML=`${O.bug}<span class="bs-fab-label">Report a bug</span>`;let n=mi();n?jn(n.top,n.left):x.style[e]="24px",x.addEventListener("click",()=>{Mt||(K?nt():at())}),J.body.appendChild(x),vi(),P=J.createElement("div"),P.className="bs-toolbar",n?Ls(n.top,n.left):P.style[e]="32px",kt(P);let s=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",o=[{icon:O.cam,tip:"Screenshot",kbd:`${s}+Shift+S`,action:async()=>{let i=await Ue(!0);i&&(K||at(),setTimeout(()=>{let a=g?.querySelector("[data-bs-screenshot]");if(a){a.__screenshot=i,a.classList.add("bs-captured");let c=a.querySelector("[data-bs-shot-title]"),p=a.querySelector("[data-bs-shot-sub]");c&&(c.textContent="Screenshot captured!"),p&&(p.textContent="Click to retake or annotate"),a.click()}},400))}},{icon:O.pin,tip:"Toggle Pins",kbd:`${s}+Shift+P`,id:"bs-tb-pin",action:()=>{if(!ot()){K||at();return}Et?.querySelector("#bugstash-live-pins")||(Kt(G.projectId,Et),Yt(G.projectId));let a=$t(),c=P?.querySelector("#bs-tb-pin");c&&c.classList.toggle("bs-active",a);let p=g?.querySelector("[data-bs-pin-toggle]");p&&(p.classList.toggle("active",a),p.innerHTML=`
1717
1847
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1718
- Pins ${c?"ON":"OFF"}
1719
- `)}},{icon:ve.id==="black"?O.sun:O.moon,tip:"Toggle Theme",kbd:`${o}+Shift+T`,id:"bs-tb-theme",action:()=>{let i=ve.id==="black"?"white":"black";en(i),$&&Ce($);let c=$?.querySelector("#bs-tb-theme");c&&(c.innerHTML=`${ve.id==="black"?O.sun:O.moon}<span class="bs-toolbar-tip">${ve.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${o}+Shift+T</span></span>`)}},{icon:O.report,tip:"Open Panel",kbd:`${o}+Shift+B`,action:()=>{Z?ee():me()}}];for(let i of a){let c=document.createElement("button");c.className="bs-toolbar-btn",i.id&&(c.id=i.id),c.innerHTML=`${i.icon}<span class="bs-toolbar-tip">${i.tip}<span class="bs-toolbar-kbd">${i.kbd}</span></span>`,c.addEventListener("click",u=>{u.stopPropagation(),i.action()}),$.appendChild(c)}ae.appendChild($),x.addEventListener("mouseenter",()=>{Z||is()}),x.addEventListener("mouseleave",i=>{let c=i.relatedTarget;$?.contains(c)||Hn()}),$.addEventListener("mouseenter",()=>is()),$.addEventListener("mouseleave",i=>{let c=i.relatedTarget;x?.contains(c)||Hn()}),mt=i=>{(i.ctrlKey||i.metaKey)&&i.shiftKey&&(i.key==="B"||i.key==="b"?(i.preventDefault(),Z?ee():me()):i.key==="S"||i.key==="s"?(i.preventDefault(),a[0].action()):i.key==="P"||i.key==="p"?(i.preventDefault(),a[1].action()):(i.key==="T"||i.key==="t")&&(i.preventDefault(),a[2].action()))},document.addEventListener("keydown",mt),ft=()=>{if(!(!x||Se)&&x.style.top&&x.style.top!=="auto"){let i=x.getBoundingClientRect();In(i.top,i.left)}},window.addEventListener("resize",ft)}function is(){Zt||Z||(Zt=!0,$?.classList.add("bs-show"))}function Hn(){Zt=!1,$?.classList.remove("bs-show")}function vs(){ee(),zn?.(),Se=!1,x?.remove(),x=null,$?.remove(),$=null,Zt=!1,bt?.remove(),bt=null,ae=null,mt&&document.removeEventListener("keydown",mt),mt=null,ft&&window.removeEventListener("resize",ft),ft=null}var le=null,D=null,L=null,fe=null,tn="freehand",nn="#ef4444",ui=3,Ve=[],K=null,ht=!1,rn=null,bi=[{id:"freehand",label:"Draw",icon:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z"},{id:"rectangle",label:"Rect",icon:"M3 3h18v18H3V3zm2 2v14h14V5H5z"},{id:"circle",label:"Circle",icon:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"},{id:"arrow",label:"Arrow",icon:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}],mi=["#ef4444","#f97316","#eab308","#22c55e","#3b82f6","#8b5cf6","#ffffff","#000000"];function ks(e){return new Promise(t=>{rn=t,Ve=[],K=null,tn="freehand",nn="#ef4444",fi(e)})}function fi(e){le&&le.remove(),le=document.createElement("div"),le.id="bs-annotation-overlay";let t=document.createElement("style");t.textContent=`
1848
+ Pins ${a?"ON":"OFF"}
1849
+ `)}},{icon:it.id==="black"?O.sun:O.moon,tip:"Toggle Theme",kbd:`${s}+Shift+T`,id:"bs-tb-theme",action:()=>{let i=it.id==="black"?"white":"black";ye(i),P&&kt(P);let a=P?.querySelector("#bs-tb-theme");a&&(a.innerHTML=`${it.id==="black"?O.sun:O.moon}<span class="bs-toolbar-tip">${it.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${s}+Shift+T</span></span>`)}},{icon:O.report,tip:"Open Panel",kbd:`${s}+Shift+B`,action:()=>{K?nt():at()}}];for(let i of o){let a=J.createElement("button");a.className="bs-toolbar-btn",i.id&&(a.id=i.id),a.innerHTML=`${i.icon}<span class="bs-toolbar-tip">${i.tip}<span class="bs-toolbar-kbd">${i.kbd}</span></span>`,a.addEventListener("click",c=>{c.stopPropagation(),i.action()}),P.appendChild(a)}J.body.appendChild(P),x.addEventListener("mouseenter",()=>{K||us()}),x.addEventListener("mouseleave",i=>{let a=i.relatedTarget;P?.contains(a)||On()}),P.addEventListener("mouseenter",()=>us()),P.addEventListener("mouseleave",i=>{let a=i.relatedTarget;x?.contains(a)||On()})}function xi(t){let n=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl";ge=r=>{if((r.ctrlKey||r.metaKey)&&r.shiftKey){if(r.key==="B"||r.key==="b")r.preventDefault(),K?nt():at();else if(r.key==="S"||r.key==="s")r.preventDefault(),Ue(!0).then(o=>{o&&(K||at(),setTimeout(()=>{let i=g?.querySelector("[data-bs-screenshot]");if(i){i.__screenshot=o,i.classList.add("bs-captured");let a=i.querySelector("[data-bs-shot-title]"),c=i.querySelector("[data-bs-shot-sub]");a&&(a.textContent="Screenshot captured!"),c&&(c.textContent="Click to retake or annotate"),i.click()}},400))});else if(r.key==="P"||r.key==="p"){if(r.preventDefault(),!ot()){K||at();return}Et?.querySelector("#bugstash-live-pins")||(Kt(t.projectId,Et),Yt(t.projectId));let i=$t(),a=P?.querySelector("#bs-tb-pin");a&&a.classList.toggle("bs-active",i);let c=g?.querySelector("[data-bs-pin-toggle]");c&&(c.classList.toggle("active",i),c.innerHTML=`
1850
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1851
+ Pins ${i?"ON":"OFF"}
1852
+ `)}else if(r.key==="T"||r.key==="t"){r.preventDefault();let i=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",a=it.id==="black"?"white":"black";ye(a),P&&kt(P);let c=P?.querySelector("#bs-tb-theme");c&&(c.innerHTML=`${it.id==="black"?O.sun:O.moon}<span class="bs-toolbar-tip">${it.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${i}+Shift+T</span></span>`)}}},document.addEventListener("keydown",ge)}function us(){rn||K||(rn=!0,P?.classList.add("bs-show"))}function On(){rn=!1,P?.classList.remove("bs-show")}function Cs(){nt(),Bn?.(),Mt=!1,x?.remove(),x=null,P?.remove(),P=null,rn=!1,wt?.remove(),wt=null,J=null,Et=null,ge&&document.removeEventListener("keydown",ge),ge=null,he&&window.removeEventListener("resize",he),he=null}var dt=null,q=null,C=null,ht=null,sn="freehand",on="#ef4444",wi=3,Zt=[],Q=null,xe=!1,an=null,ki=[{id:"freehand",label:"Draw",icon:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z"},{id:"rectangle",label:"Rect",icon:"M3 3h18v18H3V3zm2 2v14h14V5H5z"},{id:"circle",label:"Circle",icon:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"},{id:"arrow",label:"Arrow",icon:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}],Ei=["#ef4444","#f97316","#eab308","#22c55e","#3b82f6","#8b5cf6","#ffffff","#000000"];function $s(t){return new Promise(e=>{an=e,Zt=[],Q=null,sn="freehand",on="#ef4444",Li(t)})}function Li(t){dt&&dt.remove(),dt=document.createElement("div"),dt.id="bs-annotation-overlay";let e=document.createElement("style");e.textContent=`
1720
1853
  #bs-annotation-overlay {
1721
1854
  position: fixed; inset: 0; z-index: 2147483647;
1722
1855
  background: rgba(0,0,0,0.85);
@@ -1761,5 +1894,5 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1761
1894
  overflow: hidden; padding: 16px;
1762
1895
  }
1763
1896
  .bs-ann-canvas-wrap canvas { cursor: crosshair; border-radius: 4px; }
1764
- `,le.appendChild(t);let n=document.createElement("div");n.className="bs-ann-toolbar";for(let i of bi){let c=document.createElement("button");c.className=`bs-ann-tool${i.id===tn?" active":""}`,c.title=i.label,c.innerHTML=`<svg viewBox="0 0 24 24"><path d="${i.icon}"/></svg>`,c.addEventListener("click",()=>{tn=i.id,n.querySelectorAll(".bs-ann-tool").forEach(u=>u.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(xs());for(let i of mi){let c=document.createElement("button");c.className=`bs-ann-color${i===nn?" active":""}`,c.style.background=i,c.addEventListener("click",()=>{nn=i,n.querySelectorAll(".bs-ann-color").forEach(u=>u.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(xs());let r=document.createElement("button");r.className="bs-ann-btn bs-ann-undo",r.textContent="Undo",r.addEventListener("click",()=>{Ve.pop(),sn()}),n.appendChild(r);let s=document.createElement("button");s.className="bs-ann-btn bs-ann-save",s.textContent="Save",s.addEventListener("click",hi);let o=document.createElement("button");o.className="bs-ann-btn bs-ann-cancel",o.textContent="Cancel",o.addEventListener("click",()=>{Dn(),rn?.(null)}),n.appendChild(s),n.appendChild(o),le.appendChild(n);let a=document.createElement("div");a.className="bs-ann-canvas-wrap",D=document.createElement("canvas"),L=D.getContext("2d"),a.appendChild(D),le.appendChild(a),document.body.appendChild(le),fe=new Image,fe.onload=()=>{if(!D||!L||!fe)return;let i=window.innerWidth-32,c=window.innerHeight-100,u=fe.width,p=fe.height,f=Math.min(1,i/u,c/p);u=Math.round(u*f),p=Math.round(p*f),D.width=u,D.height=p,sn(),gi()},fe.src=e}function xs(){let e=document.createElement("div");return e.className="bs-ann-sep",e}function gi(){if(!D)return;D.addEventListener("mousedown",t=>{ht=!0;let{x:n,y:r}=ws(t);K={type:tn,color:nn,lineWidth:ui,points:[{x:n,y:r}],x:n,y:r,width:0,height:0}}),D.addEventListener("mousemove",t=>{if(!ht||!K)return;let{x:n,y:r}=ws(t);K.type==="freehand"?K.points.push({x:n,y:r}):(K.width=n-K.x,K.height=r-K.y),sn(),Es(K)});let e=()=>{ht&&K&&(Ve.push(K),K=null),ht=!1,sn()};D.addEventListener("mouseup",e),D.addEventListener("mouseleave",e)}function ws(e){let t=D.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function sn(){if(!(!L||!D||!fe)){L.clearRect(0,0,D.width,D.height),L.drawImage(fe,0,0,D.width,D.height);for(let e of Ve)Es(e)}}function Es(e){if(L)switch(L.strokeStyle=e.color,L.fillStyle=e.color,L.lineWidth=e.lineWidth,L.lineCap="round",L.lineJoin="round",e.type){case"freehand":{if(!e.points||e.points.length<2)return;L.beginPath(),L.moveTo(e.points[0].x,e.points[0].y);for(let t=1;t<e.points.length;t++)L.lineTo(e.points[t].x,e.points[t].y);L.stroke();break}case"rectangle":{L.strokeRect(e.x,e.y,e.width,e.height);break}case"circle":{let t=e.x+e.width/2,n=e.y+e.height/2,r=Math.abs(e.width)/2,s=Math.abs(e.height)/2;L.beginPath(),L.ellipse(t,n,r,s,0,0,Math.PI*2),L.stroke();break}case"arrow":{let t=e.x,n=e.y,r=e.x+e.width,s=e.y+e.height,o=14,a=Math.atan2(s-n,r-t);L.beginPath(),L.moveTo(t,n),L.lineTo(r,s),L.stroke(),L.beginPath(),L.moveTo(r,s),L.lineTo(r-o*Math.cos(a-Math.PI/6),s-o*Math.sin(a-Math.PI/6)),L.lineTo(r-o*Math.cos(a+Math.PI/6),s-o*Math.sin(a+Math.PI/6)),L.closePath(),L.fill();break}}}function hi(){if(!D){Dn(),rn?.(null);return}let t={dataUrl:D.toDataURL("image/png"),annotations:Ve};Dn(),rn?.(t)}function Dn(){le?.remove(),le=null,D=null,L=null,fe=null,Ve=[],K=null,ht=!1}var vt=!1,yt=null;function yi(){if(yt)return yt;let e=document.createElement("bugstash-root");return e.style.setProperty("position","fixed","important"),e.style.setProperty("inset","0","important"),e.style.setProperty("pointer-events","none","important"),e.style.setProperty("z-index","2147483640","important"),e.style.setProperty("display","block","important"),e.style.setProperty("visibility","visible","important"),e.style.setProperty("opacity","1","important"),e.style.setProperty("transform","none","important"),e.style.setProperty("perspective","none","important"),e.style.setProperty("filter","none","important"),e.style.setProperty("will-change","auto","important"),e.style.setProperty("contain","none","important"),e.style.setProperty("isolation","auto","important"),e.style.setProperty("mix-blend-mode","normal","important"),e.style.setProperty("clip-path","none","important"),e.style.setProperty("margin","0","important"),e.style.setProperty("padding","0","important"),e.style.setProperty("border","none","important"),e.style.setProperty("background","none","important"),e.style.setProperty("box-sizing","border-box","important"),e.style.setProperty("overflow","visible","important"),e.style.setProperty("min-width","0","important"),e.style.setProperty("min-height","0","important"),e.style.setProperty("max-width","none","important"),e.style.setProperty("max-height","none","important"),e.style.setProperty("float","none","important"),e.style.setProperty("clear","none","important"),e.style.setProperty("columns","auto","important"),e.style.setProperty("font-size","16px","important"),e.style.setProperty("line-height","normal","important"),e.style.setProperty("text-align","left","important"),e.style.setProperty("direction","ltr","important"),yt=e.attachShadow({mode:"open"}),document.body.appendChild(e),yt}function Ls(e){if(vt)return;vt=!0;let t=yi();Xn(e.maxBreadcrumbs),Gn(e.maxLogs),nr(e.maxNetworkCaptures),or(),e.enablePerformance!==!1&&lr(),ys(e,t),e.enableLivePins!==!1&&ie()&&(ut(e.projectId,t),lt(e.projectId))}function vi(){if(typeof window>"u")return"production";let e=window.location.hostname;return e==="localhost"||e==="127.0.0.1"||e==="0.0.0.0"||e.endsWith(".local")||/^192\.168\./.test(e)||/^10\./.test(e)||/^172\.(1[6-9]|2\d|3[01])\./.test(e)?"development":e.includes("staging")||e.includes("stage")||e.includes("preview")||e.includes("preprod")||e.includes("pre-prod")||e.includes("qa.")||e.includes(".qa")||e.includes("test.")||e.includes(".dev.")||e.includes("vercel.app")||e.includes("netlify.app")||e.includes("pages.dev")||e.includes("ngrok.io")||e.includes("ngrok-free.app")||e.includes("localhost.run")||e.includes("loca.lt")?"staging":"production"}var Ss={init(e){if(vt||typeof window>"u"||(e.environment??vi())==="production")return;e.endpoint&&Rr(e.endpoint);let n=window.location.hostname;n==="localhost"||n==="127.0.0.1"||n==="0.0.0.0"||n.endsWith(".local")||/^192\.168\./.test(n)||/^10\./.test(n)||/^172\.(1[6-9]|2\d|3[01])\./.test(n)?Ls(e):jr(e.projectId).then(s=>{s&&Ls(e)}).catch(()=>{})},destroy(){vt&&(vs(),ts(),Xr(),Zn(),sr(),ar(),Vn(),cr(),document.querySelector("bugstash-root")?.remove(),yt=null,vt=!1)},getLogs:de,clearLogs:Qn,getNetworkCaptures:Re,getFailedNetworkCaptures:ge,clearNetworkCaptures:rr,getErrors:pe,clearErrors:ir,getBreadcrumbs:$e,clearBreadcrumbs:Yn,getPerformanceMetrics:ze,addBreadcrumb:V,getThemes:Ut,getThemeById:_t,setTheme:en,getCurrentThemeId:ms,getLayouts:Wt,getLayoutById:at,setLayout:fs,getCurrentLayoutId:gs,getCurrentUser:ie,login:jt,logout:qt,togglePinMode:We,isPinModeActive:Qt,isConnected:Yr,openAnnotationEditor:ks,redactString:Me,redactObject:Ct},xi=Ss;0&&(module.exports={BugStash});
1897
+ `,dt.appendChild(e);let n=document.createElement("div");n.className="bs-ann-toolbar";for(let a of ki){let c=document.createElement("button");c.className=`bs-ann-tool${a.id===sn?" active":""}`,c.title=a.label,c.innerHTML=`<svg viewBox="0 0 24 24"><path d="${a.icon}"/></svg>`,c.addEventListener("click",()=>{sn=a.id,n.querySelectorAll(".bs-ann-tool").forEach(p=>p.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(Ps());for(let a of Ei){let c=document.createElement("button");c.className=`bs-ann-color${a===on?" active":""}`,c.style.background=a,c.addEventListener("click",()=>{on=a,n.querySelectorAll(".bs-ann-color").forEach(p=>p.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(Ps());let r=document.createElement("button");r.className="bs-ann-btn bs-ann-undo",r.textContent="Undo",r.addEventListener("click",()=>{Zt.pop(),ln()}),n.appendChild(r);let s=document.createElement("button");s.className="bs-ann-btn bs-ann-save",s.textContent="Save",s.addEventListener("click",Ci);let o=document.createElement("button");o.className="bs-ann-btn bs-ann-cancel",o.textContent="Cancel",o.addEventListener("click",()=>{qn(),an?.(null)}),n.appendChild(s),n.appendChild(o),dt.appendChild(n);let i=document.createElement("div");i.className="bs-ann-canvas-wrap",q=document.createElement("canvas"),C=q.getContext("2d"),i.appendChild(q),dt.appendChild(i),document.body.appendChild(dt),ht=new Image,ht.onload=()=>{if(!q||!C||!ht)return;let a=window.innerWidth-32,c=window.innerHeight-100,p=ht.width,b=ht.height,v=Math.min(1,a/p,c/b);p=Math.round(p*v),b=Math.round(b*v),q.width=p,q.height=b,ln(),Si()},ht.src=t}function Ps(){let t=document.createElement("div");return t.className="bs-ann-sep",t}function Si(){if(!q)return;q.addEventListener("mousedown",e=>{xe=!0;let{x:n,y:r}=Ts(e);Q={type:sn,color:on,lineWidth:wi,points:[{x:n,y:r}],x:n,y:r,width:0,height:0}}),q.addEventListener("mousemove",e=>{if(!xe||!Q)return;let{x:n,y:r}=Ts(e);Q.type==="freehand"?Q.points.push({x:n,y:r}):(Q.width=n-Q.x,Q.height=r-Q.y),ln(),Ms(Q)});let t=()=>{xe&&Q&&(Zt.push(Q),Q=null),xe=!1,ln()};q.addEventListener("mouseup",t),q.addEventListener("mouseleave",t)}function Ts(t){let e=q.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}function ln(){if(!(!C||!q||!ht)){C.clearRect(0,0,q.width,q.height),C.drawImage(ht,0,0,q.width,q.height);for(let t of Zt)Ms(t)}}function Ms(t){if(C)switch(C.strokeStyle=t.color,C.fillStyle=t.color,C.lineWidth=t.lineWidth,C.lineCap="round",C.lineJoin="round",t.type){case"freehand":{if(!t.points||t.points.length<2)return;C.beginPath(),C.moveTo(t.points[0].x,t.points[0].y);for(let e=1;e<t.points.length;e++)C.lineTo(t.points[e].x,t.points[e].y);C.stroke();break}case"rectangle":{C.strokeRect(t.x,t.y,t.width,t.height);break}case"circle":{let e=t.x+t.width/2,n=t.y+t.height/2,r=Math.abs(t.width)/2,s=Math.abs(t.height)/2;C.beginPath(),C.ellipse(e,n,r,s,0,0,Math.PI*2),C.stroke();break}case"arrow":{let e=t.x,n=t.y,r=t.x+t.width,s=t.y+t.height,o=14,i=Math.atan2(s-n,r-e);C.beginPath(),C.moveTo(e,n),C.lineTo(r,s),C.stroke(),C.beginPath(),C.moveTo(r,s),C.lineTo(r-o*Math.cos(i-Math.PI/6),s-o*Math.sin(i-Math.PI/6)),C.lineTo(r-o*Math.cos(i+Math.PI/6),s-o*Math.sin(i+Math.PI/6)),C.closePath(),C.fill();break}}}function Ci(){if(!q){qn(),an?.(null);return}let e={dataUrl:q.toDataURL("image/png"),annotations:Zt};qn(),an?.(e)}function qn(){dt?.remove(),dt=null,q=null,C=null,ht=null,Zt=[],Q=null,xe=!1}var ke=!1,we=null;function Pi(){if(we)return we;let t=document.createElement("bugstash-root");return t.style.setProperty("position","fixed","important"),t.style.setProperty("inset","0","important"),t.style.setProperty("pointer-events","none","important"),t.style.setProperty("z-index","2147483640","important"),t.style.setProperty("display","block","important"),t.style.setProperty("visibility","visible","important"),t.style.setProperty("opacity","1","important"),t.style.setProperty("transform","none","important"),t.style.setProperty("perspective","none","important"),t.style.setProperty("filter","none","important"),t.style.setProperty("will-change","auto","important"),t.style.setProperty("contain","none","important"),t.style.setProperty("isolation","auto","important"),t.style.setProperty("mix-blend-mode","normal","important"),t.style.setProperty("clip-path","none","important"),t.style.setProperty("margin","0","important"),t.style.setProperty("padding","0","important"),t.style.setProperty("border","none","important"),t.style.setProperty("background","none","important"),t.style.setProperty("box-sizing","border-box","important"),t.style.setProperty("overflow","visible","important"),t.style.setProperty("min-width","0","important"),t.style.setProperty("min-height","0","important"),t.style.setProperty("max-width","none","important"),t.style.setProperty("max-height","none","important"),t.style.setProperty("float","none","important"),t.style.setProperty("clear","none","important"),t.style.setProperty("columns","auto","important"),t.style.setProperty("font-size","16px","important"),t.style.setProperty("line-height","normal","important"),t.style.setProperty("text-align","left","important"),t.style.setProperty("direction","ltr","important"),we=t.attachShadow({mode:"closed"}),document.body.appendChild(t),we}function As(t){if(ke)return;ke=!0;let e=Pi();Kn(t.maxBreadcrumbs),er(t.maxLogs),ir(t.maxNetworkCaptures),cr(),t.enablePerformance!==!1&&br(),Ss(t,e),t.enableLivePins!==!1&&ot()&&(Kt(t.projectId,e),Yt(t.projectId))}function Ti(){if(typeof window>"u")return"production";let t=window.location.hostname;return t==="localhost"||t==="127.0.0.1"||t==="0.0.0.0"||t.endsWith(".local")||/^192\.168\./.test(t)||/^10\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)?"development":t.includes("staging")||t.includes("stage")||t.includes("preview")||t.includes("preprod")||t.includes("pre-prod")||t.includes("qa.")||t.includes(".qa")||t.includes("test.")||t.includes(".dev.")||t.includes("vercel.app")||t.includes("netlify.app")||t.includes("pages.dev")||t.includes("ngrok.io")||t.includes("ngrok-free.app")||t.includes("localhost.run")||t.includes("loca.lt")?"staging":"production"}var Rs={init(t){if(ke||typeof window>"u"||(t.environment??Ti())==="production")return;t.endpoint&&Dr(t.endpoint);let n=window.location.hostname;n==="localhost"||n==="127.0.0.1"||n==="0.0.0.0"||n.endsWith(".local")||/^192\.168\./.test(n)||/^10\./.test(n)||/^172\.(1[6-9]|2\d|3[01])\./.test(n)?As(t):_r(t.projectId).then(s=>{s&&As(t)}).catch(()=>{})},destroy(){ke&&(Cs(),as(),Kr(),rr(),lr(),pr(),Qn(),ur(),document.querySelector("bugstash-root")?.remove(),we=null,ke=!1)},getLogs:ut,clearLogs:nr,getNetworkCaptures:Dt,getFailedNetworkCaptures:vt,clearNetworkCaptures:ar,getErrors:ft,clearErrors:dr,getBreadcrumbs:zt,clearBreadcrumbs:Gn,getPerformanceMetrics:Bt,addBreadcrumb:V,getThemes:Xe,getThemeById:Ve,setTheme:ye,getCurrentThemeId:ws,getLayouts:Je,getLayoutById:be,setLayout:ks,getCurrentLayoutId:Es,getCurrentUser:ot,login:_e,logout:We,togglePinMode:$t,isPinModeActive:nn,isConnected:Gr,openAnnotationEditor:$s,redactString:It,redactObject:Me},$i=Rs;0&&(module.exports={BugStash});
1765
1898
  //# sourceMappingURL=index.cjs.map