bugstash 0.1.26 → 0.1.28

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,24 @@
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(`
1
+ "use strict";var dn=Object.defineProperty;var Ds=Object.getOwnPropertyDescriptor;var Bs=Object.getOwnPropertyNames;var Ns=Object.prototype.hasOwnProperty;var Os=(e,t)=>{for(var n in t)dn(e,n,{get:t[n],enumerable:!0})},js=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Bs(t))!Ns.call(e,s)&&s!==n&&dn(e,s,{get:()=>t[s],enumerable:!(r=Ds(t,s))||r.enumerable});return e};var qs=e=>js(dn({},"__esModule",{value:!0}),e);var Mi={};Os(Mi,{BugStash:()=>Is,default:()=>$i});module.exports=qs(Mi);var tt=[],Jn=50,nt=null,rt=null,st=null,ot=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){tt.push(e),tt.length>Jn&&tt.shift()}function Kn(e){e&&(Jn=e),nt=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",nt,!0);let t=new WeakMap;rt=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 i=r instanceof HTMLInputElement&&r.type==="password";V({type:"input",category:"ui",message:`Input ${Pt(r)}`,timestamp:Date.now(),data:{selector:Pt(r),value:i?"[redacted]":void 0}})},300))},document.addEventListener("input",rt,!0),st=()=>{V({type:"navigation",category:"navigation",message:`Navigated to ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("popstate",st),ot=()=>{V({type:"navigation",category:"navigation",message:`Hash changed to ${window.location.hash}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("hashchange",ot),V({type:"navigation",category:"navigation",message:`Page loaded: ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})}function Ie(){return[...tt]}function Gn(){tt=[]}function Qn(){nt&&document.removeEventListener("click",nt,!0),rt&&document.removeEventListener("input",rt,!0),st&&window.removeEventListener("popstate",st),ot&&window.removeEventListener("hashchange",ot),nt=null,rt=null,st=null,ot=null}var pn="[REDACTED]",Us=[[/\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)+" "+pn}],[/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)+' "'+pn+'"'}]];function Re(e){let t=e;for(let[n,r]of Us)t=t.replace(n,r);return t}function Zn(e){return e.map(Re)}function Tt(e){if(typeof e=="string")return Re(e);if(Array.isArray(e))return e.map(Tt);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]=pn:t[n]=Tt(r)}return t}return e}var $t={log:console.log,warn:console.warn,error:console.error,debug:console.debug,info:console.info},it=[],er=50;function _s(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 Fs(e,t){let n={level:e,args:Zn(_s(t)),timestamp:Date.now()};e==="error"&&(n.stack=new Error().stack?.split(`
3
3
  `).slice(2).join(`
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=`
4
+ `)),it.push(n),it.length>er&&it.shift(),V({type:"console",category:`console.${e}`,message:n.args.join(" ").slice(0,200),timestamp:n.timestamp})}function tr(e){e&&(er=e);for(let t of Object.keys($t))console[t]=function(...n){Fs(t,n),$t[t].apply(console,n)}}function fe(){return[...it]}function nr(){it=[]}function rr(){for(let e of Object.keys($t))console[e]=$t[e]}var ze=[],sr=50,Mt,At,It;function bn(e){ze.push(e),ze.length>sr&&ze.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 or(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 Re(e)}}function Ws(){Mt=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=or(r),o=Date.now();try{let i=await Mt.call(window,e,t);return bn({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 bn({method:n,url:s,status:0,statusText:"Network Error",duration:Date.now()-o,timestamp:o,failed:!0}),i}}}function Ys(){At=XMLHttpRequest.prototype.open,It=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=function(e,t,...n){return this.__bs_method=e.toUpperCase(),this.__bs_url=or(typeof t=="string"?t:t.href),At.apply(this,[e,t,...n])},XMLHttpRequest.prototype.send=function(e){let t=Date.now();return this.addEventListener("loadend",function(){bn({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})}),It.call(this,e)}}function ir(e){e&&(sr=e),Ws(),Ys()}function He(){return[...ze]}function xe(){return ze.filter(e=>e.failed)}function ar(){ze=[]}function lr(){Mt&&(window.fetch=Mt),At&&(XMLHttpRequest.prototype.open=At),It&&(XMLHttpRequest.prototype.send=It)}var Rt=[],at=null,lt=null;function cr(){at=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}})},lt=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",at),window.addEventListener("unhandledrejection",lt)}function ge(){return[...Rt]}function dr(){Rt=[]}function pr(){at&&window.removeEventListener("error",at),lt&&window.removeEventListener("unhandledrejection",lt),at=null,lt=null}var R=null,zt=null,Ht=null,Dt=null;function br(){if(R={timestamp:Date.now()},performance.getEntriesByType){let e=()=>{let[t]=performance.getEntriesByType("navigation");t&&R&&(R.pageLoadTime=Math.round(t.loadEventEnd-t.startTime),R.domContentLoaded=Math.round(t.domContentLoadedEventEnd-t.startTime));let n=performance.getEntriesByType("paint");for(let s of n)s.name==="first-paint"&&R&&(R.firstPaint=Math.round(s.startTime)),s.name==="first-contentful-paint"&&R&&(R.firstContentfulPaint=Math.round(s.startTime));R&&(R.resourceCount=performance.getEntriesByType("resource").length);let r=performance.memory;r&&R&&(R.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&&R&&(R.largestContentfulPaint=Math.round(n.startTime))}),zt.observe({type:"largest-contentful-paint",buffered:!0})}catch{}try{let e=0;Ht=new PerformanceObserver(t=>{for(let n of t.getEntries())n.hadRecentInput||(e+=n.value);R&&(R.cumulativeLayoutShift=Math.round(e*1e3)/1e3)}),Ht.observe({type:"layout-shift",buffered:!0})}catch{}try{Dt=new PerformanceObserver(e=>{let[t]=e.getEntries();t&&R&&(R.firstInputDelay=Math.round(t.processingStart-t.startTime))}),Dt.observe({type:"first-input",buffered:!0})}catch{}}}function De(){return R&&(R.timestamp=Date.now()),R?{...R}:null}function ur(){zt?.disconnect(),Ht?.disconnect(),Dt?.disconnect(),zt=null,Ht=null,Dt=null,R=null}function mr(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 fr=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function oe(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var Be=null;function Nt(e={}){return Be||(e.includeStyleProperties?(Be=e.includeStyleProperties,Be):(Be=oe(window.getComputedStyle(document.documentElement)),Be))}function Bt(e,t){let r=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function Xs(e){let t=Bt(e,"border-left-width"),n=Bt(e,"border-right-width");return e.clientWidth+t+n}function Vs(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||Xs(e),r=t.height||Vs(e);return{width:n,height:r}}function gr(){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 ee=16384;function hr(e){(e.width>ee||e.height>ee)&&(e.width>ee&&e.height>ee?e.width>e.height?(e.height*=ee/e.width,e.width=ee):(e.width*=ee/e.height,e.height=ee):e.width>ee?(e.height*=ee/e.width,e.width=ee):(e.width*=ee/e.height,e.height=ee))}function Ne(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 Js(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function vr(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),Js(s)}var Y=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||Y(n,t)};function Ks(e){let t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function Gs(e,t){return Nt(t).map(n=>{let r=e.getPropertyValue(n),s=e.getPropertyPriority(n);return`${n}: ${r}${s?" !important":""};`}).join(" ")}function Qs(e,t,n,r){let s=`.${e}:${t}`,o=n.cssText?Ks(n):Gs(n,r);return document.createTextNode(`${s}{${o}}`)}function yr(e,t,n,r){let s=window.getComputedStyle(e,n),o=s.getPropertyValue("content");if(o===""||o==="none")return;let i=fr();try{t.className=`${t.className} ${i}`}catch{return}let a=document.createElement("style");a.appendChild(Qs(i,n,s,r)),t.appendChild(a)}function xr(e,t,n){yr(e,t,":before",n),yr(e,t,":after",n)}var wr="application/font-woff",kr="image/jpeg",Zs={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(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function Oe(e){let t=eo(e).toLowerCase();return Zs[t]||""}function to(e){return e.split(/,/)[1]}function ct(e){return e.search(/^(data:)/)!==-1}function fn(e,t){return`data:${t};base64,${e}`}async function gn(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,i)=>{let a=new FileReader;a.onerror=i,a.onloadend=()=>{try{o(n({res:r,result:a.result}))}catch(d){i(d)}},a.readAsDataURL(s)})}var mn={};function no(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 je(e,t,n){let r=no(e,t,n.includeQueryParams);if(mn[r]!=null)return mn[r];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let s;try{let o=await gn(e,n.fetchRequestInit,({res:i,result:a})=>(t||(t=i.headers.get("Content-Type")||""),to(a)));s=fn(o,t)}catch(o){s=n.imagePlaceholder||"";let i=`Failed to fetch resource: ${e}`;o&&(i=typeof o=="string"?o:o.message),i&&console.warn(i)}return mn[r]=s,s}async function ro(e){let t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):Ne(t)}async function so(e,t){if(e.currentSrc){let o=document.createElement("canvas"),i=o.getContext("2d");o.width=e.clientWidth,o.height=e.clientHeight,i?.drawImage(e,0,0,o.width,o.height);let a=o.toDataURL();return Ne(a)}let n=e.poster,r=Oe(n),s=await je(n,r,t);return Ne(s)}async function oo(e,t){var n;try{if(!((n=e?.contentDocument)===null||n===void 0)&&n.body)return await dt(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function io(e,t){return Y(e,HTMLCanvasElement)?ro(e):Y(e,HTMLVideoElement)?so(e,t):Y(e,HTMLIFrameElement)?oo(e,t):e.cloneNode(Er(e))}var ao=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",Er=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function lo(e,t,n){var r,s;if(Er(t))return t;let o=[];return ao(e)&&e.assignedNodes?o=oe(e.assignedNodes()):Y(e,HTMLIFrameElement)&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?o=oe(e.contentDocument.body.childNodes):o=oe(((s=e.shadowRoot)!==null&&s!==void 0?s:e).childNodes),o.length===0||Y(e,HTMLVideoElement)||await o.reduce((i,a)=>i.then(()=>dt(a,n)).then(d=>{d&&t.appendChild(d)}),Promise.resolve()),t}function co(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):Nt(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`),Y(e,HTMLIFrameElement)&&o==="display"&&i==="inline"&&(i="block"),o==="d"&&t.getAttribute("d")&&(i=`path(${t.getAttribute("d")})`),r.setProperty(o,i,s.getPropertyPriority(o))})}function po(e,t){Y(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),Y(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function bo(e,t){if(Y(e,HTMLSelectElement)){let r=Array.from(t.children).find(s=>e.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function uo(e,t,n){return Y(t,Element)&&(co(e,t,n),xr(e,t,n),po(e,t),bo(e,t)),t}async function mo(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 a=n[o].getAttribute("xlink:href");if(a){let d=e.querySelector(a),p=document.querySelector(a);!d&&p&&!r[a]&&(r[a]=await dt(p,t,!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 d=0;d<s.length;d++)a.appendChild(s[d]);e.appendChild(i)}return e}async function dt(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(r=>io(r,t)).then(r=>lo(e,r,t)).then(r=>uo(e,r,t)).then(r=>mo(r,t))}var Sr=/url\((['"]?)([^'"]+?)\1\)/g,fo=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,go=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function ho(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function vo(e){let t=[];return e.replace(Sr,(n,r,s)=>(t.push(s),n)),t.filter(n=>!ct(n))}async function yo(e,t,n,r,s){try{let o=n?mr(t,n):t,i=Oe(t),a;if(s){let d=await s(o);a=fn(d,i)}else a=await je(o,i,r);return e.replace(ho(t),`$1${a}$3`)}catch{}return e}function xo(e,{preferredFontFormat:t}){return t?e.replace(go,n=>{for(;;){let[r,,s]=fo.exec(n)||[];if(!s)return"";if(s===t)return`src: ${r};`}}):e}function hn(e){return e.search(Sr)!==-1}async function Ot(e,t,n){if(!hn(e))return e;let r=xo(e,n);return vo(r).reduce((o,i)=>o.then(a=>yo(a,i,t,n)),Promise.resolve(r))}async function qe(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 wo(e,t){await qe("background",e,t)||await qe("background-image",e,t),await qe("mask",e,t)||await qe("-webkit-mask",e,t)||await qe("mask-image",e,t)||await qe("-webkit-mask-image",e,t)}async function ko(e,t){let n=Y(e,HTMLImageElement);if(!(n&&!ct(e.src))&&!(Y(e,SVGImageElement)&&!ct(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,s=await je(r,Oe(r),t);await new Promise((o,i)=>{e.onload=o,e.onerror=t.onImageErrorHandler?(...d)=>{try{o(t.onImageErrorHandler(...d))}catch(p){i(p)}}:i;let a=e;a.decode&&(a.decode=o),a.loading==="lazy"&&(a.loading="eager"),n?(e.srcset="",e.src=s):e.href.baseVal=s})}async function Eo(e,t){let r=oe(e.childNodes).map(s=>vn(s,t));await Promise.all(r).then(()=>e)}async function vn(e,t){Y(e,Element)&&(await wo(e,t),await ko(e,t),await Eo(e,t))}function Lr(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 Cr={};async function Pr(e){let t=Cr[e];if(t!=null)return t;let r=await(await fetch(e)).text();return t={url:e,cssText:r},Cr[e]=t,t}async function Tr(e,t){let n=e.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,e.url).href),gn(a,t.fetchRequestInit,({result:d})=>(n=n.replace(i,`url(${d})`),[i,d]))});return Promise.all(o).then(()=>n)}function $r(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 d=s.exec(r);if(d===null)break;t.push(d[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 d=o.exec(r);if(d===null){if(d=a.exec(r),d===null)break;o.lastIndex=a.lastIndex}else a.lastIndex=o.lastIndex;t.push(d[0])}return t}async function So(e,t){let n=[],r=[];return e.forEach(s=>{if("cssRules"in s)try{oe(s.cssRules||[]).forEach((o,i)=>{if(o.type===CSSRule.IMPORT_RULE){let a=i+1,d=o.href,p=Pr(d).then(b=>Tr(b,t)).then(b=>$r(b).forEach(v=>{try{s.insertRule(v,v.startsWith("@import")?a+=1:s.cssRules.length)}catch(k){console.error("Error inserting rule from remote css",{rule:v,error:k})}})).catch(b=>{console.error("Error loading remote css",b.toString())});r.push(p)}})}catch(o){let i=e.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&r.push(Pr(s.href).then(a=>Tr(a,t)).then(a=>$r(a).forEach(d=>{i.insertRule(d,i.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",o)}}),Promise.all(r).then(()=>(e.forEach(s=>{if("cssRules"in s)try{oe(s.cssRules||[]).forEach(o=>{n.push(o)})}catch(o){console.error(`Error while reading CSS rules from ${s.href}`,o)}}),n))}function Lo(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>hn(t.style.getPropertyValue("src")))}async function Co(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");let n=oe(e.ownerDocument.styleSheets),r=await So(n,t);return Lo(r)}function Mr(e){return e.trim().replace(/["']/g,"")}function Po(e){let t=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(o=>{t.add(Mr(o))}),Array.from(r.children).forEach(o=>{o instanceof HTMLElement&&n(o)})}return n(e),t}async function yn(e,t){let n=await Co(e,t),r=Po(e);return(await Promise.all(n.filter(o=>r.has(Mr(o.style.fontFamily))).map(o=>{let i=o.parentStyleSheet?o.parentStyleSheet.href:null;return Ot(o.cssText,i,t)}))).join(`
5
+ `)}async function Ar(e,t){let n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await yn(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 To(e,t={}){let{width:n,height:r}=un(e,t),s=await dt(e,t,!0);return await Ar(s,t),await vn(s,t),Lr(s,t),await vr(s,n,r)}async function Ir(e,t={}){let{width:n,height:r}=un(e,t),s=await To(e,t),o=await Ne(s),i=document.createElement("canvas"),a=i.getContext("2d"),d=t.pixelRatio||gr(),p=t.canvasWidth||n,b=t.canvasHeight||r;return i.width=p*d,i.height=b*d,t.skipAutoScale||hr(i),i.style.width=`${p}`,i.style.height=`${b}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,i.width,i.height)),a.drawImage(o,0,0,i.width,i.height),i}async function Rr(e,t={}){return yn(e,t)}function $o(){let e=document.createElement("div");if(e.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 e=document.createElement("style");e.id="bs-flash-style",e.textContent=`
10
+ `,!document.getElementById("bs-flash-style")){let t=document.createElement("style");t.id="bs-flash-style",t.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(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=`
16
+ `,document.head.appendChild(t)}document.body.appendChild(e),e.addEventListener("animationend",()=>e.remove())}var zr=e=>{let t=e.tagName.toLowerCase();return t==="bugstash-root"||t==="bugstash-overlay"||t==="bugstash-pin"||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 jt(e=!1){e&&$o();try{let n=await Mo();if(n)return n}catch{}let t=[{tier:"high",timeout:5e3},{tier:"reduced",timeout:8e3},{tier:"reduced-skip-cors",timeout:8e3}];for(let{tier:n,timeout:r}of t)try{let s=await zo(n,r);if(s)return s}catch{}return null}async function Mo(){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())}}function Ao(){let e=document.createElement("style");return e.id="bs-pause-animations",e.textContent=`
17
+ *, *::before, *::after {
18
+ animation-play-state: paused !important;
19
+ transition: none !important;
20
+ }
21
+ `,document.head.appendChild(e),()=>e.remove()}function Io(e,t){let n=e.getContext("2d");if(!n)return;let r=window.scrollX,s=window.scrollY;document.querySelectorAll("canvas, video").forEach(i=>{if(zr(i))return;let a=i.getBoundingClientRect(),d=(a.left+r)*t,p=(a.top+s)*t,b=a.width*t,v=a.height*t;try{n.drawImage(i,d,p,b,v)}catch{}})}function Ro(e){return new Promise((t,n)=>{setTimeout(()=>n(new Error(`Screenshot capture timed out after ${e}ms`)),e)})}async function zo(e,t){let n=e==="reduced-skip-cors",r=e==="high"?Math.min(window.devicePixelRatio||1,3):Math.min(window.devicePixelRatio||1,2),s=window.getComputedStyle(document.body).backgroundColor,o=window.getComputedStyle(document.documentElement).backgroundColor,i=b=>!b||b==="transparent"||b==="rgba(0, 0, 0, 0)",a=i(s)?i(o)?"#ffffff":o:s,d=await Rr(document.body),p=Ao();try{let b=await Promise.race([Ir(document.body,{pixelRatio:r,backgroundColor:a,width:window.innerWidth,height:window.innerHeight,cacheBust:!0,fontEmbedCSS:d,filter:v=>{if(n&&v.tagName==="IMG"){let k=v.src||"";if(k&&!k.startsWith(window.location.origin)&&!k.startsWith("data:"))return!1}return!zr(v)},imagePlaceholder:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"}),Ro(t)]);return Io(b,r),b.toDataURL("image/png")}finally{p()}}var Ho="https://bugstash-backend.vercel.app",Hr="https://bugstash-backend.vercel.app",X=Ho,xn=!1;function Dr(e){X=e.replace(/\/$/,""),xn=!1}function Br(){return X}async function ce(e,t){try{return await fetch(e,t)}catch(n){if(xn)throw n;xn=!0;let r=X;X=Hr;let s=e.replace(r,Hr);return fetch(s,t)}}var wn="bugstash_auth";function kn(){try{let e=localStorage.getItem(wn);if(!e)return null;let t=JSON.parse(e);return t.tokens.expiresAt<Date.now(),t}catch{return null}}function Nr(e){localStorage.setItem(wn,JSON.stringify(e))}function Do(){localStorage.removeItem(wn)}function ie(){return kn()?.user||null}function Or(){return kn()?.tokens.accessToken||null}async function we(){let e=kn();if(!e)return{"Content-Type":"application/json"};if(e.tokens.expiresAt<Date.now()+6e4)try{let t=await ce(`${X}/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,Nr(e))}}catch{}return{"Content-Type":"application/json",Authorization:`Bearer ${e.tokens.accessToken}`}}async function Ut(e,t,n){try{let s=await(await ce(`${X}/api/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:t,projectId:n})})).json();return s.success&&Nr({user:s.data.user,tokens:s.data.tokens}),s}catch{return{success:!1,error:"Network error"}}}async function _t(){Do()}async function En(e){try{let t=await we();return await(await ce(`${X}/api/reports`,{method:"POST",headers:t,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error - could not reach BugStash"}}}async function jr(e,t){try{let n=await we();return await(await ce(`${X}/api/pins/by-page?projectId=${e}&pathname=${encodeURIComponent(t)}`,{headers:n})).json()}catch{return{success:!1,error:"Network error"}}}async function Sn(e){try{let t=await we();return await(await ce(`${X}/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 we();return await(await ce(`${X}/api/pins/${e}`,{method:"PUT",headers:n,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error"}}}async function qr(e){try{let t=await we();return await(await ce(`${X}/api/pins/${e}`,{method:"DELETE",headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function Ur(e){try{let t=await we();return await(await ce(`${X}/api/pins/${e}/comments`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function Ln(e,t,n=[]){try{let r=await we();return await(await ce(`${X}/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 _r(e){try{let t=await we();return await(await ce(`${X}/api/members/for-project/${e}`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}var qt=null;function Fr(e){return qt||(qt=(async()=>{try{let t=await fetch(`${X}/api/orgs/projects/${encodeURIComponent(e)}/verify-domain`,{headers:{"Content-Type":"application/json"}});return t.ok?(await t.json()).allowed===!0:!1}catch{return!1}})(),qt)}var Cn="bugstash_offline_queue";function Pn(e){let t=Wr();t.push({...e,id:Math.random().toString(36).slice(2),timestamp:Date.now()}),localStorage.setItem(Cn,JSON.stringify(t))}function Wr(){try{return JSON.parse(localStorage.getItem(Cn)||"[]")}catch{return[]}}async function Bo(){let e=Wr();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 Sn(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 En(r.data);break;default:s={success:!1,error:"Unknown action"}}s.success?t++:n.push(r)}catch{n.push(r)}return localStorage.setItem(Cn,JSON.stringify(n)),t}typeof window<"u"&&window.addEventListener("online",()=>{Bo().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 Wt(){return Tn}function Yt(e){return Tn.find(t=>t.id===e)}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 Xt(){return $n}function pt(e){return $n.find(t=>t.id===e)}function Xr(){return $n[0]}var Vr=`
17
22
  /* \u2500\u2500 1. Classic (default \u2014 no overrides) \u2500\u2500 */
18
23
 
19
24
  /* \u2500\u2500 2. Drawer Right \u2500\u2500 */
@@ -73,8 +78,410 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
73
78
  }
74
79
  .bs-ly-sidebar-tabs .bs-tab-divider { display: none; }
75
80
  .bs-ly-sidebar-tabs .bs-scroll { flex: 1; }
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
- /* \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 */
81
+ `;var Fe=null,Vt=0,No=5e3,Ue=new Map,_e=null,Jt=new Set;function We(e){_e=e,Vt=Date.now(),Oo()}function Oo(){Fe||(Fe=setInterval(jo,No))}async function jo(){if(!_e)return;let e=Or();if(e)try{let t=Br(),n=window.location.pathname,r=await fetch(`${t}/api/pins/poll?projectId=${_e}&pathname=${encodeURIComponent(n)}&since=${Vt}`,{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||[];Vt=s.serverTime||s.data?.serverTime||Date.now();for(let i of o)Jt.has(i.id)?Jr("pin:updated",{type:"pin:updated",projectId:_e,data:i,userId:"",timestamp:Date.now()}):(Jt.add(i.id),Jr("pin:created",{type:"pin:created",projectId:_e,data:i,userId:"",timestamp:Date.now()}))}catch{}}function Kr(){Fe&&(clearInterval(Fe),Fe=null),_e=null,Jt.clear(),Vt=0}function bt(e,t){return Ue.has(e)||Ue.set(e,new Set),Ue.get(e).add(t),()=>{Ue.get(e)?.delete(t)}}function Jr(e,t){Ue.get(e)?.forEach(n=>n(t)),Ue.get("*")?.forEach(n=>n(t))}function Mn(e){Jt=new Set(e)}function Gr(){return Fe!==null}var Qr=`
82
+ :host {
83
+ all: initial !important;
84
+ display: block !important;
85
+ position: absolute !important;
86
+ /* CSS custom properties survive all:initial \u2014 inline --bs-x/--bs-y set per pin */
87
+ left: var(--bs-x, 0) !important;
88
+ top: var(--bs-y, 0) !important;
89
+ pointer-events: auto !important;
90
+ z-index: 2147483640 !important;
91
+ cursor: pointer !important;
92
+ transform: translate(-50%, -50%) !important;
93
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
94
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
95
+ line-height: 1.5;
96
+ -webkit-font-smoothing: antialiased;
97
+ -moz-osx-font-smoothing: grayscale;
98
+ }
99
+ :host(:hover) {
100
+ transform: translate(-50%, -50%) scale(1.1) !important;
101
+ z-index: 2147483645 !important;
102
+ }
103
+
104
+ /* Color scheme support */
105
+ @media (prefers-color-scheme: light) {
106
+ :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); }
107
+ }
108
+ @media (prefers-color-scheme: dark) {
109
+ :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); }
110
+ }
111
+ /* Fallback (default to light) */
112
+ :host {
113
+ --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);
114
+ }
115
+ @media (prefers-color-scheme: dark) {
116
+ :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); }
117
+ }
118
+
119
+ *, *::before, *::after {
120
+ box-sizing: border-box !important;
121
+ margin: 0;
122
+ padding: 0;
123
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
124
+ line-height: 1.5;
125
+ direction: ltr;
126
+ text-align: left;
127
+ }
128
+
129
+ /* \u2500\u2500 Pin Marker (Avatar-based) \u2500\u2500 */
130
+ .bs-lp-dot {
131
+ width: 32px;
132
+ height: 32px;
133
+ border-radius: 50%;
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ font-size: 12px;
138
+ font-weight: 600;
139
+ color: #fff;
140
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
141
+ position: relative;
142
+ overflow: hidden;
143
+ background-size: cover;
144
+ background-position: center;
145
+ }
146
+ .bs-lp-dot.bs-overdue {
147
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.4), 0 0 12px rgba(239, 68, 68, 0.25);
148
+ }
149
+ .bs-lp-avatar {
150
+ width: 100%;
151
+ height: 100%;
152
+ border-radius: 50%;
153
+ object-fit: cover;
154
+ }
155
+ .bs-lp-initials {
156
+ width: 100%;
157
+ height: 100%;
158
+ border-radius: 50%;
159
+ display: flex;
160
+ align-items: center;
161
+ justify-content: center;
162
+ font-size: 12px;
163
+ font-weight: 600;
164
+ color: #fff;
165
+ }
166
+ .bs-lp-badge {
167
+ position: absolute;
168
+ top: -3px;
169
+ right: -3px;
170
+ min-width: 14px;
171
+ height: 14px;
172
+ border-radius: 7px;
173
+ background: var(--bs-pin-text, #171717);
174
+ color: var(--bs-pin-bg, #fff);
175
+ font-size: 9px;
176
+ font-weight: 700;
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ padding: 0 3px;
181
+ line-height: 1;
182
+ z-index: 2;
183
+ }
184
+ `,Zr=`
185
+ /* \u2500\u2500 Popup (Clean Card) \u2500\u2500 */
186
+ .bs-lp-popup {
187
+ position: absolute;
188
+ left: 40px;
189
+ top: -8px;
190
+ width: min(360px, calc(100vw - 48px));
191
+ background: var(--bs-pin-bg);
192
+ border: 1px solid var(--bs-pin-border);
193
+ border-radius: 14px;
194
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg), 0 0 0 1px var(--bs-pin-shadow);
195
+ backdrop-filter: blur(12px);
196
+ z-index: 10;
197
+ pointer-events: auto;
198
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
199
+ color: var(--bs-pin-text);
200
+ overflow: hidden;
201
+ animation: bs-lp-pop-in 0.2s ease;
202
+ }
203
+ @keyframes bs-lp-pop-in {
204
+ from { opacity: 0; transform: translateY(4px); }
205
+ to { opacity: 1; transform: translateY(0); }
206
+ }
207
+ .bs-lp-popup-hdr {
208
+ padding: 14px 16px 12px;
209
+ display: flex;
210
+ align-items: flex-start;
211
+ gap: 10px;
212
+ }
213
+ .bs-lp-popup-hdr-avatar {
214
+ width: 24px;
215
+ height: 24px;
216
+ border-radius: 50%;
217
+ flex-shrink: 0;
218
+ display: flex;
219
+ align-items: center;
220
+ justify-content: center;
221
+ font-size: 10px;
222
+ font-weight: 600;
223
+ color: #fff;
224
+ overflow: hidden;
225
+ }
226
+ .bs-lp-popup-hdr-avatar img { width: 100%; height: 100%; object-fit: cover; }
227
+ .bs-lp-popup-hdr-body { flex: 1; min-width: 0; }
228
+ .bs-lp-popup-title {
229
+ font-size: 14px;
230
+ font-weight: 600;
231
+ color: var(--bs-pin-text);
232
+ line-height: 1.3;
233
+ margin-bottom: 2px;
234
+ }
235
+ .bs-lp-popup-meta {
236
+ font-size: 12px;
237
+ color: var(--bs-pin-muted);
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 6px;
241
+ flex-wrap: wrap;
242
+ }
243
+ .bs-lp-popup-pill {
244
+ font-size: 11px;
245
+ padding: 2px 8px;
246
+ border-radius: 99px;
247
+ font-weight: 500;
248
+ white-space: nowrap;
249
+ }
250
+ .bs-lp-popup-close {
251
+ all: initial;
252
+ color: var(--bs-pin-muted);
253
+ cursor: pointer;
254
+ padding: 2px;
255
+ flex-shrink: 0;
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: center;
259
+ border-radius: 6px;
260
+ transition: background 0.15s, color 0.15s;
261
+ }
262
+ .bs-lp-popup-close:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
263
+ .bs-lp-popup-close svg { width: 16px; height: 16px; }
264
+ .bs-lp-popup-desc {
265
+ padding: 0 16px 12px;
266
+ font-size: 13px;
267
+ line-height: 1.6;
268
+ color: var(--bs-pin-muted);
269
+ }
270
+ .bs-lp-popup-due {
271
+ padding: 6px 16px;
272
+ font-size: 12px;
273
+ font-weight: 500;
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 4px;
277
+ }
278
+ .bs-lp-popup-due.overdue { color: #ef4444; background: rgba(239,68,68,0.06); }
279
+ .bs-lp-popup-due:not(.overdue) { color: var(--bs-pin-muted); }
280
+ .bs-lp-popup-info {
281
+ padding: 8px 16px;
282
+ font-size: 11px;
283
+ color: var(--bs-pin-muted);
284
+ background: var(--bs-pin-surface);
285
+ border-top: 1px solid var(--bs-pin-border);
286
+ display: flex;
287
+ justify-content: space-between;
288
+ }
289
+
290
+ /* Comments */
291
+ .bs-lp-cmts {
292
+ max-height: 220px;
293
+ overflow-y: auto;
294
+ border-top: 1px solid var(--bs-pin-border);
295
+ }
296
+ .bs-lp-cmts::-webkit-scrollbar { width: 4px; }
297
+ .bs-lp-cmts::-webkit-scrollbar-thumb { background: var(--bs-pin-border); border-radius: 2px; }
298
+ .bs-lp-cmt {
299
+ padding: 10px 16px;
300
+ display: flex;
301
+ gap: 8px;
302
+ align-items: flex-start;
303
+ border-bottom: 1px solid var(--bs-pin-border);
304
+ }
305
+ .bs-lp-cmt:last-child { border-bottom: none; }
306
+ .bs-lp-cmt-avatar {
307
+ width: 20px;
308
+ height: 20px;
309
+ border-radius: 50%;
310
+ flex-shrink: 0;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ font-size: 8px;
315
+ font-weight: 600;
316
+ color: #fff;
317
+ overflow: hidden;
318
+ }
319
+ .bs-lp-cmt-avatar img { width: 100%; height: 100%; object-fit: cover; }
320
+ .bs-lp-cmt-content { flex: 1; min-width: 0; }
321
+ .bs-lp-cmt-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 2px; }
322
+ .bs-lp-cmt-author { font-weight: 600; color: var(--bs-pin-text); font-size: 12px; }
323
+ .bs-lp-cmt-time { font-size: 11px; color: var(--bs-pin-muted); }
324
+ .bs-lp-cmt-body { color: var(--bs-pin-text); font-size: 13px; line-height: 1.5; }
325
+
326
+ /* Comment input */
327
+ .bs-lp-input {
328
+ display: flex;
329
+ align-items: center;
330
+ border-top: 1px solid var(--bs-pin-border);
331
+ padding: 4px;
332
+ gap: 4px;
333
+ }
334
+ .bs-lp-input input {
335
+ all: initial;
336
+ flex: 1;
337
+ padding: 8px 12px;
338
+ color: var(--bs-pin-text);
339
+ font-size: 13px;
340
+ font-family: inherit;
341
+ background: var(--bs-pin-input-bg);
342
+ border: 1px solid var(--bs-pin-border);
343
+ border-radius: 8px;
344
+ box-sizing: border-box;
345
+ transition: border-color 0.15s;
346
+ }
347
+ .bs-lp-input input:focus { border-color: #6E9ED0; outline: none; }
348
+ .bs-lp-input input::placeholder { color: var(--bs-pin-muted); }
349
+ .bs-lp-input button {
350
+ all: initial;
351
+ width: 32px;
352
+ height: 32px;
353
+ border-radius: 8px;
354
+ background: #6E9ED0;
355
+ color: #fff;
356
+ cursor: pointer;
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ flex-shrink: 0;
361
+ transition: opacity 0.15s;
362
+ }
363
+ .bs-lp-input button:hover { opacity: 0.85; }
364
+ .bs-lp-input button svg { width: 14px; height: 14px; }
365
+
366
+ /* Actions */
367
+ .bs-lp-acts {
368
+ padding: 8px 16px 10px;
369
+ display: flex;
370
+ gap: 8px;
371
+ border-top: 1px solid var(--bs-pin-border);
372
+ }
373
+ .bs-lp-act {
374
+ all: initial;
375
+ padding: 6px 14px;
376
+ border-radius: 8px;
377
+ background: var(--bs-pin-surface);
378
+ color: var(--bs-pin-muted);
379
+ font-size: 12px;
380
+ font-weight: 500;
381
+ font-family: inherit;
382
+ cursor: pointer;
383
+ transition: all 0.15s;
384
+ display: flex;
385
+ align-items: center;
386
+ gap: 5px;
387
+ }
388
+ .bs-lp-act:hover { background: var(--bs-pin-hover); color: var(--bs-pin-text); }
389
+ .bs-lp-act.resolve { color: #22c55e; }
390
+ .bs-lp-act.resolve:hover { background: rgba(34,197,94,0.1); }
391
+ .bs-lp-act.delete { color: #ef4444; }
392
+ .bs-lp-act.delete:hover { background: rgba(239,68,68,0.1); }
393
+ `,es=`
394
+ /* \u2500\u2500 New Pin Form \u2500\u2500 */
395
+ .bs-lp-form {
396
+ position: fixed;
397
+ width: min(320px, calc(100vw - 32px));
398
+ background: var(--bs-pin-bg);
399
+ border: 1px solid var(--bs-pin-border);
400
+ border-radius: 14px;
401
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg);
402
+ backdrop-filter: blur(12px);
403
+ z-index: 2147483645;
404
+ pointer-events: auto;
405
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
406
+ color: var(--bs-pin-text);
407
+ padding: 16px;
408
+ animation: bs-lp-pop-in 0.2s ease;
409
+ }
410
+ .bs-lp-form-label {
411
+ display: block;
412
+ font-size: 12px;
413
+ color: var(--bs-pin-muted);
414
+ margin-bottom: 4px;
415
+ margin-top: 12px;
416
+ font-weight: 500;
417
+ }
418
+ .bs-lp-form-label:first-child { margin-top: 0; }
419
+ .bs-lp-form input,
420
+ .bs-lp-form textarea,
421
+ .bs-lp-form select {
422
+ all: initial;
423
+ display: block;
424
+ width: 100%;
425
+ background: var(--bs-pin-input-bg);
426
+ border: 1px solid var(--bs-pin-border);
427
+ border-radius: 10px;
428
+ padding: 8px 12px;
429
+ color: var(--bs-pin-text);
430
+ font-size: 13px;
431
+ font-family: inherit;
432
+ box-sizing: border-box;
433
+ transition: border-color 0.15s;
434
+ }
435
+ .bs-lp-form textarea { resize: vertical; min-height: 48px; white-space: pre-wrap; }
436
+ .bs-lp-form input:focus,
437
+ .bs-lp-form textarea:focus,
438
+ .bs-lp-form select:focus { border-color: #6E9ED0; outline: none; }
439
+ .bs-lp-form input::placeholder,
440
+ .bs-lp-form textarea::placeholder { color: var(--bs-pin-muted); }
441
+ /* Segmented buttons for priority/category */
442
+ .bs-lp-seg-row {
443
+ display: flex;
444
+ gap: 0;
445
+ border: 1px solid var(--bs-pin-border);
446
+ border-radius: 10px;
447
+ overflow: hidden;
448
+ }
449
+ .bs-lp-seg-btn {
450
+ all: initial;
451
+ flex: 1;
452
+ padding: 7px 4px;
453
+ text-align: center;
454
+ font-size: 12px;
455
+ font-weight: 500;
456
+ font-family: inherit;
457
+ cursor: pointer;
458
+ color: var(--bs-pin-muted);
459
+ background: var(--bs-pin-input-bg);
460
+ border-right: 1px solid var(--bs-pin-border);
461
+ transition: all 0.15s;
462
+ box-sizing: border-box;
463
+ }
464
+ .bs-lp-seg-btn:last-child { border-right: none; }
465
+ .bs-lp-seg-btn:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
466
+ .bs-lp-seg-btn.bs-active { background: #6E9ED0; color: #fff; }
467
+ .bs-lp-form-btns { display: flex; gap: 8px; margin-top: 14px; }
468
+ .bs-lp-form-btns button {
469
+ all: initial;
470
+ padding: 9px 16px;
471
+ border-radius: 10px;
472
+ font-size: 13px;
473
+ font-weight: 600;
474
+ font-family: inherit;
475
+ cursor: pointer;
476
+ text-align: center;
477
+ transition: opacity 0.15s;
478
+ }
479
+ .bs-lp-form-submit { background: #6E9ED0; color: #fff; flex: 1; }
480
+ .bs-lp-form-submit:hover { opacity: 0.85; }
481
+ .bs-lp-form-cancel { background: transparent; color: var(--bs-pin-muted); }
482
+ .bs-lp-form-cancel:hover { color: var(--bs-pin-text); }
483
+ `;var Zt,de=null,L=null,M=[],is=[],Ye=!1,Xe=null,qo="",Gt=null,Rn=null,Ve=new Map,Kt=null,Qt={open:"#f97316",in_progress:"#3b82f6",resolved:"#22c55e",closed:"#6b7280"},ts={critical:"#ef4444",high:"#f97316",medium:"#eab308",low:"#6b7280"};function Je(e,t){Zt=e,Rn=t,qo=window.location.pathname,Yo(),ps(),Xo(),Zo(),ei(),_o()}function as(){Fo(),ds(),de?.remove(),de=null,L?.remove(),L=null,Rn=null,M=[]}function Pe(e){return Ye=e!==void 0?e:!Ye,L&&L.style.setProperty("display",Ye?"block":"none","important"),Ye}function en(){return Ye}function ls(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 Uo(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 i=n.getBoundingClientRect();if(t.bottom<=i.top||t.top>=i.bottom||t.right<=i.left||t.left>=i.right)return!0}n=n.parentElement}return!1}function _o(){window.addEventListener("keydown",cs),Gt=new MutationObserver(e=>{for(let t of e)for(let n of t.removedNodes)if(n.nodeType===Node.ELEMENT_NODE){for(let[r,s]of Ve)if(n.contains(s)){Ve.delete(r),pe();return}}}),Gt.observe(document.body,{childList:!0,subtree:!0}),Kt=setInterval(Wo,500)}function Fo(){window.removeEventListener("keydown",cs),Gt?.disconnect(),Gt=null,Kt&&(clearInterval(Kt),Kt=null)}function cs(e){e.key==="Escape"&&(Xe?ke():Ye&&(de?.querySelectorAll(".bs-lp-form").forEach(t=>t.remove()),Pe(!1)))}function Wo(){for(let[e,t]of Ve){let n=M.find(s=>s.id===e);if(!n)continue;let r=ls(n.elementSelector,n.elementXPath);r&&Uo(r)?t.style.display="none":t.style.display=""}}function ds(){for(let[,e]of Ve)e.remove();Ve=new Map}function Yo(){if(de)return;de=document.createElement("div"),de.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 e=document.createElement("style");e.textContent=`
484
+ /* \u2500\u2500\u2500 Container styles for form overlay (pins are in light DOM now) \u2500\u2500\u2500 */
78
485
  :host {
79
486
  all: initial !important;
80
487
  position: fixed !important;
@@ -95,13 +502,8 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
95
502
  box-sizing: border-box !important;
96
503
  margin: 0;
97
504
  padding: 0;
98
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
505
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
99
506
  line-height: 1.5;
100
- direction: ltr;
101
- text-align: left;
102
- -webkit-text-size-adjust: 100%;
103
- -webkit-font-smoothing: antialiased;
104
- -moz-osx-font-smoothing: grayscale;
105
507
  }
106
508
  /* Color scheme support */
107
509
  @media (prefers-color-scheme: light) {
@@ -110,7 +512,6 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
110
512
  @media (prefers-color-scheme: dark) {
111
513
  :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
514
  }
113
- /* Fallback (default to light) */
114
515
  :host {
115
516
  --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
517
  }
@@ -133,437 +534,44 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
133
534
  contain: none !important;
134
535
  }
135
536
 
136
- /* \u2500\u2500 Pin Marker (Avatar-based) \u2500\u2500 */
137
- .bs-lp {
138
- position: fixed !important;
139
- pointer-events: auto !important;
140
- cursor: pointer !important;
141
- transform: translate(-50%, -50%) !important;
142
- z-index: 1;
143
- transition: transform 0.15s ease, box-shadow 0.15s ease;
144
- }
145
- .bs-lp:hover { transform: translate(-50%, -50%) scale(1.1) !important; z-index: 5; }
146
- .bs-lp-dot {
147
- width: 32px;
148
- height: 32px;
149
- border-radius: 50%;
150
- display: flex;
151
- align-items: center;
152
- justify-content: center;
153
- font-size: 12px;
154
- font-weight: 600;
155
- font-family: -apple-system, system-ui, sans-serif;
156
- color: #fff;
157
- box-shadow: 0 2px 8px rgba(0,0,0,0.15);
158
- position: relative;
159
- overflow: hidden;
160
- background-size: cover;
161
- background-position: center;
162
- }
163
- .bs-lp-avatar {
164
- width: 100%;
165
- height: 100%;
166
- border-radius: 50%;
167
- object-fit: cover;
168
- }
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;
197
- }
198
-
199
- /* \u2500\u2500 Popup (Clean Card) \u2500\u2500 */
200
- .bs-lp-popup {
201
- position: absolute;
202
- left: 40px;
203
- top: -8px;
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);
210
- z-index: 10;
211
- pointer-events: auto;
212
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
213
- color: var(--bs-pin-text);
214
- overflow: hidden;
215
- animation: bs-lp-pop-in 0.2s ease;
216
- }
217
- @keyframes bs-lp-pop-in {
218
- from { opacity: 0; transform: translateY(4px); }
219
- to { opacity: 1; transform: translateY(0); }
220
- }
221
- .bs-lp-popup-hdr {
222
- padding: 14px 16px 12px;
223
- display: flex;
224
- align-items: flex-start;
225
- gap: 10px;
226
- }
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 {
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);
253
- line-height: 1.3;
254
- margin-bottom: 2px;
255
- }
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;
267
- border-radius: 99px;
268
- font-weight: 500;
269
- white-space: nowrap;
270
- }
271
- .bs-lp-popup-close {
272
- all: initial;
273
- color: var(--bs-pin-muted);
274
- cursor: pointer;
275
- padding: 2px;
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;
282
- }
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; }
285
- .bs-lp-popup-desc {
286
- padding: 0 16px 12px;
287
- font-size: 13px;
288
- line-height: 1.6;
289
- color: var(--bs-pin-muted);
290
- }
291
- .bs-lp-popup-info {
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);
297
- display: flex;
298
- justify-content: space-between;
299
- }
300
-
301
- /* Comments */
302
- .bs-lp-cmts {
303
- max-height: 220px;
304
- overflow-y: auto;
305
- border-top: 1px solid var(--bs-pin-border);
306
- }
307
- .bs-lp-cmts::-webkit-scrollbar { width: 4px; }
308
- .bs-lp-cmts::-webkit-scrollbar-thumb { background: var(--bs-pin-border); border-radius: 2px; }
309
- .bs-lp-cmt {
310
- padding: 10px 16px;
311
- display: flex;
312
- gap: 8px;
313
- align-items: flex-start;
314
- border-bottom: 1px solid var(--bs-pin-border);
315
- }
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; }
332
- .bs-lp-cmt-top {
333
- display: flex;
334
- align-items: center;
335
- justify-content: space-between;
336
- margin-bottom: 2px;
337
- }
338
- .bs-lp-cmt-author {
339
- font-weight: 600;
340
- color: var(--bs-pin-text);
341
- font-size: 12px;
342
- }
343
- .bs-lp-cmt-time {
344
- font-size: 11px;
345
- color: var(--bs-pin-muted);
346
- }
347
- .bs-lp-cmt-body {
348
- color: var(--bs-pin-text);
349
- font-size: 13px;
350
- line-height: 1.5;
351
- }
352
-
353
- /* Comment input */
354
- .bs-lp-input {
355
- display: flex;
356
- align-items: center;
357
- border-top: 1px solid var(--bs-pin-border);
358
- padding: 4px;
359
- gap: 4px;
360
- }
361
- .bs-lp-input input {
362
- all: initial;
363
- flex: 1;
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;
373
- }
374
- .bs-lp-input input:focus { border-color: #6E9ED0; outline: none; }
375
- .bs-lp-input input::placeholder { color: var(--bs-pin-muted); }
376
- .bs-lp-input button {
377
- all: initial;
378
- width: 32px;
379
- height: 32px;
380
- border-radius: 8px;
381
- background: #6E9ED0;
382
- color: #fff;
383
- cursor: pointer;
384
- display: flex;
385
- align-items: center;
386
- justify-content: center;
387
- flex-shrink: 0;
388
- transition: opacity 0.15s;
389
- }
390
- .bs-lp-input button:hover { opacity: 0.85; }
391
- .bs-lp-input button svg { width: 14px; height: 14px; }
392
-
393
- /* Actions */
394
- .bs-lp-acts {
395
- padding: 8px 16px 10px;
396
- display: flex;
397
- gap: 8px;
398
- border-top: 1px solid var(--bs-pin-border);
399
- }
400
- .bs-lp-act {
401
- all: initial;
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;
409
- cursor: pointer;
410
- transition: all 0.15s;
411
- display: flex;
412
- align-items: center;
413
- gap: 5px;
414
- }
415
- .bs-lp-act:hover { background: var(--bs-pin-hover); color: var(--bs-pin-text); }
416
- .bs-lp-act.resolve { color: #22c55e; }
417
- .bs-lp-act.resolve:hover { background: rgba(34,197,94,0.1); }
418
- .bs-lp-act.delete { color: #ef4444; }
419
- .bs-lp-act.delete:hover { background: rgba(239,68,68,0.1); }
420
-
421
- /* \u2500\u2500 New Pin Form \u2500\u2500 */
422
- .bs-lp-form {
423
- position: fixed;
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);
430
- z-index: 2147483645;
431
- pointer-events: auto;
432
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
433
- color: var(--bs-pin-text);
434
- padding: 16px;
435
- animation: bs-lp-pop-in 0.2s ease;
436
- }
437
- .bs-lp-form-label {
438
- display: block;
439
- font-size: 12px;
440
- color: var(--bs-pin-muted);
441
- margin-bottom: 4px;
442
- margin-top: 12px;
443
- font-weight: 500;
444
- }
445
- .bs-lp-form-label:first-child { margin-top: 0; }
446
- .bs-lp-form input,
447
- .bs-lp-form textarea,
448
- .bs-lp-form select {
449
- all: initial;
450
- display: block;
451
- width: 100%;
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);
457
- font-size: 13px;
458
- font-family: inherit;
459
- box-sizing: border-box;
460
- transition: border-color 0.15s;
461
- }
462
- .bs-lp-form textarea {
463
- resize: vertical;
464
- min-height: 48px;
465
- white-space: pre-wrap;
466
- }
467
- .bs-lp-form input:focus,
468
- .bs-lp-form textarea:focus,
469
- .bs-lp-form select:focus {
470
- border-color: #6E9ED0;
471
- outline: none;
472
- }
473
- .bs-lp-form input::placeholder,
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
- }
504
- .bs-lp-form-btns {
505
- display: flex;
506
- gap: 8px;
507
- margin-top: 14px;
508
- }
509
- .bs-lp-form-btns button {
510
- all: initial;
511
- padding: 9px 16px;
512
- border-radius: 10px;
513
- font-size: 13px;
514
- font-weight: 600;
515
- font-family: inherit;
516
- cursor: pointer;
517
- text-align: center;
518
- transition: opacity 0.15s;
519
- }
520
- .bs-lp-form-submit {
521
- background: #6E9ED0;
522
- color: #fff;
523
- flex: 1;
524
- }
525
- .bs-lp-form-submit:hover { opacity: 0.85; }
526
- .bs-lp-form-cancel {
527
- background: transparent;
528
- color: var(--bs-pin-muted);
529
- }
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}
537
+ ${es}
538
+ `,de.appendChild(e),Rn.appendChild(de),document.body.appendChild(L),L.addEventListener("click",t=>{let n=t.clientX,r=t.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,d;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,d=(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,d=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,d=i/b*100}Qo(o,i,a,d,n,r,s)})}async function ps(){let e=await jr(Zt,window.location.pathname);e.success&&e.data&&(M=e.data,Mn(M.map(t=>t.id)),pe())}async function Xo(){let e=await _r(Zt);e.success&&e.data&&(is=e.data)}function pe(){ds(),M.forEach(e=>{let t=e.xPercent>=0&&e.xPercent<=1&&e.yPercent>=0&&e.yPercent<=1,n=ls(e.elementSelector,e.elementXPath),r=document.createElement("bugstash-pin");r.dataset.pinId=e.id,t&&n?(window.getComputedStyle(n).position==="static"&&(n.style.position="relative"),r.style.setProperty("--bs-x",`${e.xPercent*100}%`),r.style.setProperty("--bs-y",`${e.yPercent*100}%`),n.appendChild(r)):(r.style.setProperty("--bs-x",`${e.pageX}px`),r.style.setProperty("--bs-y",`${e.pageY}px`),document.body.appendChild(r));let s=r.attachShadow({mode:"open"}),o=document.createElement("style");o.textContent=Qr+Zr,s.appendChild(o);let i=Qt[e.status]||Qt.open,a=zn(e.creatorName||"U"),d=Dn(e.creatorName||"U"),p=Hn(e.creatorAvatar)?`<img class="bs-lp-avatar" src="${he(e.creatorAvatar)}" alt="" />`:`<div class="bs-lp-initials" style="background:${d}">${a}</div>`,b=e.commentCount>0?`<span class="bs-lp-badge">${e.commentCount>99?"99+":e.commentCount}</span>`:"",v=e.dueDate&&e.dueDate<Date.now()&&e.status!=="resolved"&&e.status!=="closed",k=document.createElement("div");k.className="bs-lp-marker",k.innerHTML=`
539
+ <div class="bs-lp-dot${v?" bs-overdue":""}" style="border:2px solid ${i}; background:transparent;">
540
+ ${p}
541
+ ${b}
535
542
  </div>
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=`
543
+ `,s.appendChild(k),k.addEventListener("click",S=>{S.stopPropagation(),Vo(e,r)}),Ve.set(e.id,r)})}function bs(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 ns(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,i=parseFloat(e.style.top)||0;e.style.left=`${o+r}px`,e.style.top=`${i+s}px`,e.style.right="auto",e.style.bottom="auto"}})}async function Vo(e,t){ke();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),i=Qt[e.status]||Qt.open,a=ts[e.priority]||ts.medium,d=e.priority?e.priority.charAt(0).toUpperCase()+e.priority.slice(1):"Medium",p=zn(e.creatorName||"U"),b=Dn(e.creatorName||"U"),v=Hn(e.creatorAvatar)?`<img src="${he(e.creatorAvatar)}" alt="" style="width:100%;height:100%;object-fit:cover;border-radius:50%;" />`:`<span>${p}</span>`,k=e.status.replace("_"," "),S='<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>',ue='<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>',ye=e.dueDate&&e.dueDate<Date.now()&&e.status!=="resolved"&&e.status!=="closed",N=e.dueDate?`<div class="bs-lp-popup-due${ye?" overdue":""}">${ye?"OVERDUE: ":"Due: "}${new Date(e.dueDate).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}</div>`:"";n.innerHTML=`
537
544
  <div class="bs-lp-popup-hdr">
538
545
  <div class="bs-lp-popup-hdr-avatar" style="background:${b}">
539
546
  ${v}
540
547
  </div>
541
548
  <div class="bs-lp-popup-hdr-body">
542
- <div class="bs-lp-popup-title">${mt(t.title)}</div>
549
+ <div class="bs-lp-popup-title">${he(e.title)}</div>
543
550
  <div class="bs-lp-popup-meta">
544
- <span>${t.creatorName||"Unknown"}</span>
551
+ <span>${e.creatorName||"Unknown"}</span>
545
552
  <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>
553
+ <span>${bs(e.createdAt)}</span>
554
+ <span class="bs-lp-popup-pill" style="background:${i}18;color:${i}">${k}</span>
555
+ <span class="bs-lp-popup-pill" style="background:${a}18;color:${a}">${d}</span>
549
556
  </div>
550
557
  </div>
551
- <button class="bs-lp-popup-close">${R}</button>
558
+ <button class="bs-lp-popup-close">${ue}</button>
552
559
  </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>`:""}
560
+ ${e.description?`<div class="bs-lp-popup-desc">${he(e.description)}</div>`:""}
561
+ ${N}
562
+ ${e.assigneeName?`<div class="bs-lp-popup-info"><span>Assigned to ${he(e.assigneeName)}</span></div>`:""}
555
563
  <div class="bs-lp-cmts" id="bs-lp-cmts">
556
564
  <div style="text-align:center;color:var(--bs-pin-muted);padding:12px;font-size:12px">Loading comments...</div>
557
565
  </div>
558
566
  <div class="bs-lp-input">
559
567
  <input type="text" placeholder="Write a comment..." id="bs-lp-cmt-in" name="pin-comment" />
560
- <button id="bs-lp-cmt-send">${D}</button>
568
+ <button id="bs-lp-cmt-send">${S}</button>
561
569
  </div>
562
570
  <div class="bs-lp-acts">
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>'}
571
+ ${e.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
572
  ${o?'<button class="bs-lp-act delete" id="bs-lp-delete">&#10005; Delete</button>':""}
565
573
  </div>
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=`
574
+ `,t.shadowRoot.appendChild(n),Xe=n,Ur(e.id).then(E=>{let D=n.querySelector("#bs-lp-cmts");if(!D)return;let z=E.success&&E.data?E.data:[];D.innerHTML=z.length?z.map(Z=>In(Z)).join(""):"",ns(n)}),ns(n),n.querySelector(".bs-lp-popup-close").addEventListener("click",E=>{E.stopPropagation(),ke()}),n.querySelector("#bs-lp-cmt-send")?.addEventListener("click",async()=>{let E=n.querySelector("#bs-lp-cmt-in"),D=E.value.trim();if(D)if(E.value="",navigator.onLine){let z=await Ln(e.id,D);if(z.success&&z.data){let Z=n.querySelector("#bs-lp-cmts");Z.innerHTML+=In(z.data),Z.scrollTop=Z.scrollHeight}}else Pn({type:"create_comment",data:{pinId:e.id,body:D}})}),n.querySelector("#bs-lp-cmt-in")?.addEventListener("keydown",E=>{E.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 E=M.findIndex(D=>D.id===e.id);E>=0&&(M=M.map((D,z)=>z===E?{...D,status:"resolved"}:D)),ke(),pe()}),n.querySelector("#bs-lp-reopen")?.addEventListener("click",async()=>{await Ft(e.id,{status:"open"});let E=M.findIndex(D=>D.id===e.id);E>=0&&(M=M.map((D,z)=>z===E?{...D,status:"open"}:D)),ke(),pe()});let H=!1;n.querySelector("#bs-lp-delete")?.addEventListener("click",async()=>{H||confirm("Delete this pin?")&&(H=!0,await qr(e.id),M=M.filter(E=>E.id!==e.id),ke(),pe())}),n.addEventListener("click",E=>E.stopPropagation())}function ke(){Xe?.remove(),Xe=null}var An=e=>e?typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1"):"";function Jo(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}="${An(s)}"]`);break}}if(e.id)try{let r=`#${An(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="${An(n)}"]`;try{document.querySelectorAll(r).length===1&&t.push(r)}catch{}}return t.push(Ko(e)),t}function Ko(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(),i=Array.from(s.children).filter(a=>a.tagName===r.tagName);i.length>1&&(o+=`:nth-of-type(${i.indexOf(r)+1})`),t.unshift(o),n=s}return t.join(" > ")}function Go(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 Qo(e,t,n,r,s,o,i){ke(),de?.querySelectorAll(".bs-lp-form").forEach(S=>S.remove());let a=document.createElement("div");a.className="bs-lp-form";let d=Math.min(300,window.innerWidth-32),p=16,b=s+p,v=o-8;b+d>window.innerWidth-p&&(b=s-d-p),b<p&&(b=p),a.style.left=`${b}px`,a.style.top=`${v}px`,requestAnimationFrame(()=>{let S=a.getBoundingClientRect();S.bottom>window.innerHeight-p&&(a.style.top=`${Math.max(p,o-S.height)}px`)});let k=is.filter(S=>S.userId!==ie()?.id).map(S=>`<option value="${S.userId}">${he(S.name)}</option>`).join("");a.innerHTML=`
567
575
  <label class="bs-lp-form-label">Title</label>
568
576
  <input type="text" id="bs-np-title" name="pin-title" placeholder="What's the issue?" autofocus />
569
577
  <label class="bs-lp-form-label">Description</label>
@@ -583,31 +591,33 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
583
591
  <button class="bs-lp-seg-btn" data-value="content">Content</button>
584
592
  <button class="bs-lp-seg-btn bs-active" data-value="other">Other</button>
585
593
  </div>
586
- ${D?`
594
+ ${k?`
587
595
  <label class="bs-lp-form-label">Assign to</label>
588
596
  <select id="bs-np-assignee" name="pin-assignee">
589
597
  <option value="">Unassigned</option>
590
- ${D}
598
+ ${k}
591
599
  </select>
592
600
  `:""}
601
+ <label class="bs-lp-form-label">Due date</label>
602
+ <input type="date" id="bs-np-duedate" name="pin-duedate" />
593
603
  <div class="bs-lp-form-btns">
594
604
  <button class="bs-lp-form-cancel" id="bs-np-cancel">Cancel</button>
595
605
  <button class="bs-lp-form-submit" id="bs-np-submit">Create pin</button>
596
606
  </div>
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`
607
+ `,de.appendChild(a),a.addEventListener("click",S=>S.stopPropagation()),ss(a,"#bs-np-priority-row"),ss(a,"#bs-np-category-row"),a.querySelector("#bs-np-cancel").addEventListener("click",()=>a.remove()),a.querySelector("#bs-np-submit").addEventListener("click",async()=>{let S=a.querySelector("#bs-np-title").value.trim();if(!S){a.querySelector("#bs-np-title").style.borderColor="#ef4444";return}let ue=a.querySelector("#bs-np-submit");ue.textContent="Creating...",ue.style.opacity="0.6",ue.style.pointerEvents="none";let ye=a.querySelector("#bs-np-desc").value.trim(),N=os(a,"#bs-np-priority-row")||"medium",H=os(a,"#bs-np-category-row")||"other",D=a.querySelector("#bs-np-assignee")?.value||void 0,z=a.querySelector("#bs-np-duedate")?.value,Z=z?new Date(z).getTime():void 0,Se=JSON.stringify(Jo(i)),w=Go(i),se=fe().slice(-20).map(U=>`[${U.level}] ${U.args.join(" ")}`),wt=ge().slice(-10).map(U=>`${U.message} at ${U.source}:${U.lineno}`),an=xe().slice(-10).map(U=>`${U.method} ${U.url} \u2192 ${U.status}`),Le={projectId:Zt,pageUrl:window.location.href,pathname:window.location.pathname,elementSelector:Se,elementXPath:w,xPercent:n,yPercent:r,pageX:e,pageY:t,title:S,description:ye,priority:N,category:H,assigneeId:D,dueDate:Z,browserInfo:navigator.userAgent,screenSize:`${screen.width}x${screen.height}`,viewportSize:`${window.innerWidth}x${window.innerHeight}`,devicePixelRatio:window.devicePixelRatio,consoleLogs:se,networkErrors:an,jsErrors:wt};if(a.remove(),navigator.onLine){let U=await Sn(Le);U.success&&U.data&&(M=[...M,U.data],pe())}else{Pn({type:"create_pin",data:Le});let U=ie();M=[...M,{...Le,id:"local-"+Date.now(),orgId:"",status:"open",tags:[],createdBy:U?.id||"",creatorName:U?.name||"",commentCount:0,createdAt:Date.now(),updatedAt:Date.now()}],pe()}}),setTimeout(()=>a.querySelector("#bs-np-title")?.focus(),50)}function Zo(){bt("pin:created",e=>{let t=e.data;t.pathname===window.location.pathname&&(M.find(n=>n.id===t.id)||(M=[...M,t],Mn(M.map(n=>n.id)),pe()))}),bt("pin:updated",e=>{let t=e.data,n=M.findIndex(r=>r.id===t.id);n>=0&&(M=M.map((r,s)=>s===n?{...r,...t}:r),pe())}),bt("pin:deleted",e=>{let{id:t}=e.data;M=M.filter(n=>n.id!==t),ke(),pe()}),bt("comment:created",e=>{let t=e.data;if(Xe){let n=Xe.querySelector("#bs-lp-cmts");n&&(n.innerHTML+=In(t),n.scrollTop=n.scrollHeight)}})}function ei(){let e=window.location.pathname,t=()=>{window.location.pathname!==e&&(e=window.location.pathname,window.location.href,ps())},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 zn(e){return e.split(" ").map(t=>t[0]||"").join("").toUpperCase().slice(0,2)||"U"}function Hn(e){if(!e)return!1;try{let t=new URL(e);return t.protocol==="https:"||t.protocol==="http:"}catch{return!1}}var rs=["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(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return rs[Math.abs(t)%rs.length]}function In(e){let t=e.author?.name||e.authorName||"Unknown",n=e.author?.avatar||e.authorAvatar,r=zn(t),s=Dn(t),o=Hn(n)?`<img src="${he(n)}" alt="" />`:`<span style="font-size:8px">${r}</span>`;return`
598
608
  <div class="bs-lp-cmt">
599
609
  <div class="bs-lp-cmt-avatar" style="background:${s}">
600
610
  ${o}
601
611
  </div>
602
612
  <div class="bs-lp-cmt-content">
603
613
  <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>
614
+ <span class="bs-lp-cmt-author">${he(t)}</span>
615
+ <span class="bs-lp-cmt-time">${bs(e.createdAt?new Date(e.createdAt).getTime():Date.now())}</span>
606
616
  </div>
607
- <div class="bs-lp-cmt-body">${mt(t.body)}</div>
617
+ <div class="bs-lp-cmt-body">${he(e.body)}</div>
608
618
  </div>
609
619
  </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=`
620
+ `}function ss(e,t){let n=e.querySelector(t);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 os(e,t){return e.querySelector(`${t} .bs-lp-seg-btn.bs-active`)?.dataset.value||""}function he(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}var G,x=null,P=null,g=null,te=null,ut=null,ne=null,J=null,Te=null,K=!1,tn=!1,$e=!1,mt=null,Bn=null,ms="bugstash_fab_position",ft=null,Ke=null,Ge="report";var ae=Yr(),Me=Xr(),B={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>'},ti=`
611
621
  /* \u2500\u2500 Shadow Boundary Reset \u2500\u2500
612
622
  * Cuts ALL inherited CSS from host page (color, font, line-height, etc.)
613
623
  * Every element below must declare its own styles explicitly. */
@@ -1701,6 +1711,131 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1701
1711
  .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); }
1702
1712
  .bs-set-ly-name { font-size: 12px; font-weight: 600; color: var(--bs-text); margin-bottom: 2px; }
1703
1713
  .bs-set-ly-desc { font-size: 10px; color: var(--bs-muted); }
1714
+ `,ni=`
1715
+ :host {
1716
+ all: initial !important;
1717
+ display: block !important;
1718
+ position: fixed !important;
1719
+ inset: 0 !important;
1720
+ pointer-events: none !important;
1721
+ z-index: 2147483640 !important;
1722
+ visibility: visible !important;
1723
+ }
1724
+
1725
+ /* \u2500\u2500 FAB \u2500\u2500 */
1726
+ .bs-fab {
1727
+ all: initial;
1728
+ pointer-events: auto;
1729
+ position: fixed;
1730
+ bottom: 24px;
1731
+ z-index: 2147483647;
1732
+ width: 56px;
1733
+ height: 56px;
1734
+ border-radius: var(--bs-radius);
1735
+ background: linear-gradient(135deg, var(--bs-fab1), var(--bs-fab2));
1736
+ color: #fff;
1737
+ cursor: grab;
1738
+ box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 0 0 0 rgba(0,0,0,0.15);
1739
+ display: flex;
1740
+ align-items: center;
1741
+ justify-content: center;
1742
+ transition: all 0.35s cubic-bezier(0.34,1.56,0.64,1);
1743
+ animation: bs-pulse 3s ease-in-out infinite;
1744
+ touch-action: none;
1745
+ user-select: none;
1746
+ -webkit-user-select: none;
1747
+ font-family: 'Inter', -apple-system, sans-serif;
1748
+ }
1749
+ .bs-fab.bs-dragging { cursor: grabbing; transition: none; animation: none; }
1750
+ .bs-fab:hover { transform: scale(1.08) translateY(-2px); box-shadow: 0 8px 32px rgba(0,0,0,0.4); animation: none; }
1751
+ .bs-fab:active { transform: scale(0.95); }
1752
+ .bs-fab.bs-open { animation: none; transform: rotate(45deg) scale(0.9); box-shadow: 0 2px 12px rgba(0,0,0,0.3); }
1753
+ .bs-fab.bs-open:hover { transform: rotate(45deg) scale(1); }
1754
+ @keyframes bs-pulse {
1755
+ 0%, 100% { box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 0 0 0 rgba(0,0,0,0.15); }
1756
+ 50% { box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 0 0 10px rgba(0,0,0,0); }
1757
+ }
1758
+ .bs-fab-label {
1759
+ position: absolute;
1760
+ right: calc(100% + 12px);
1761
+ background: var(--bs-bg2);
1762
+ color: var(--bs-text);
1763
+ font-family: 'Inter', sans-serif;
1764
+ font-size: 13px;
1765
+ font-weight: 500;
1766
+ padding: 8px 14px;
1767
+ border-radius: var(--bs-radius-sm);
1768
+ white-space: nowrap;
1769
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
1770
+ opacity: 0;
1771
+ transform: translateX(8px);
1772
+ transition: all 0.25s ease;
1773
+ pointer-events: none;
1774
+ }
1775
+ .bs-fab:hover .bs-fab-label { opacity: 1; transform: translateX(0); }
1776
+ .bs-fab-label::after {
1777
+ content: '';
1778
+ position: absolute;
1779
+ right: -6px;
1780
+ top: 50%;
1781
+ transform: translateY(-50%);
1782
+ border: 6px solid transparent;
1783
+ border-left-color: var(--bs-bg2);
1784
+ border-right: none;
1785
+ }
1786
+
1787
+ /* \u2500\u2500 Quick Action Toolbar \u2500\u2500 */
1788
+ .bs-toolbar {
1789
+ pointer-events: auto;
1790
+ position: fixed;
1791
+ z-index: 2147483646;
1792
+ display: flex;
1793
+ flex-direction: column;
1794
+ gap: 6px;
1795
+ bottom: 88px;
1796
+ opacity: 0;
1797
+ transform: translateY(10px);
1798
+ transition: all 0.3s cubic-bezier(0.34,1.56,0.64,1);
1799
+ pointer-events: none;
1800
+ font-family: 'Inter', -apple-system, sans-serif;
1801
+ }
1802
+ .bs-toolbar.bs-show { opacity: 1; transform: translateY(0); pointer-events: all; }
1803
+ .bs-toolbar-btn {
1804
+ all: initial;
1805
+ width: 40px;
1806
+ height: 40px;
1807
+ border-radius: var(--bs-radius-sm);
1808
+ background: var(--bs-bg2);
1809
+ border: 1px solid var(--bs-border);
1810
+ color: var(--bs-muted);
1811
+ cursor: pointer;
1812
+ display: flex;
1813
+ align-items: center;
1814
+ justify-content: center;
1815
+ transition: all 0.2s;
1816
+ position: relative;
1817
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
1818
+ }
1819
+ .bs-toolbar-btn:hover { color: var(--bs-text); border-color: var(--bs-accent); background: var(--bs-bg3); }
1820
+ .bs-toolbar-btn.bs-active { color: var(--bs-accent); border-color: var(--bs-accent); }
1821
+ .bs-toolbar-tip {
1822
+ position: absolute;
1823
+ right: calc(100% + 8px);
1824
+ background: var(--bs-bg2);
1825
+ color: var(--bs-text);
1826
+ font-family: 'Inter', sans-serif;
1827
+ font-size: 11px;
1828
+ font-weight: 500;
1829
+ padding: 4px 8px;
1830
+ border-radius: 6px;
1831
+ white-space: nowrap;
1832
+ box-shadow: 0 2px 8px rgba(0,0,0,0.2);
1833
+ opacity: 0;
1834
+ pointer-events: none;
1835
+ transition: opacity 0.15s;
1836
+ }
1837
+ .bs-toolbar-btn:hover .bs-toolbar-tip { opacity: 1; }
1838
+ .bs-toolbar-kbd { font-size: 9px; color: var(--bs-muted); margin-left: 4px; }
1704
1839
  `;function ri(){return`
1705
1840
  <div class="bs-login-form">
1706
1841
  <div class="bs-login-logo">BugStash</div>
@@ -1711,11 +1846,11 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1711
1846
  <button class="bs-login-btn" id="bs-login-submit">Sign In</button>
1712
1847
  <div style="font-size:11px;color:var(--bs-muted);margin-top:4px">Contact your admin for an account</div>
1713
1848
  </div>
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">
1849
+ `}function j(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function si(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 fs(e){return new Date(e).toLocaleTimeString("en",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}var gs="bugstash_history";function Qe(){try{return JSON.parse(localStorage.getItem(gs)||"[]")}catch{return[]}}function On(e){try{localStorage.setItem(gs,JSON.stringify(e))}catch{}}function oi(e){let t=Qe(),n=Date.now();t.unshift({...e,id:n}),t.length>50&&(t.length=50),On(t)}function ii(e){let t=Qe().filter(n=>n.id!==e);On(t)}function ai(e,t){let n=Qe(),r=n.findIndex(s=>s.id===e);r>=0&&(n[r]={...n[r],...t},On(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 e=ge(),t=fe(),n=He(),r=xe(),s=Ie(),o=De(),i=t.filter(p=>p.level==="error"),a="low";e.length>=3||r.length>=3?a="critical":e.length>=1||r.length>=2?a="high":(i.length>0||r.length>=1)&&(a="medium");let d=[];return e.length&&d.push("has-errors"),r.length&&d.push("network-failures"),i.length&&d.push("console-errors"),o?.pageLoadTime&&o.pageLoadTime>3e3&&d.push("slow-load"),o?.cumulativeLayoutShift&&o.cumulativeLayoutShift>.25&&d.push("layout-shift"),navigator.onLine||d.push("offline"),window.innerWidth<768&&d.push("mobile"),{severity:a,tags:d,counts:{logs:t.length,network:n.length,failedNet:r.length,errors:e.length,crumbs:s.length}}}function ys(){let e=vs(),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">
1715
1850
  <form data-bs-form>
1716
- <div class="bs-report-summary${n?" bs-alert":t.counts.logs>0?" bs-has":""}">
1851
+ <div class="bs-report-summary${n?" bs-alert":e.counts.logs>0?" bs-has":""}">
1717
1852
  <div class="bs-report-summary-left">
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>`}
1853
+ ${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">${B.check}</div><span>Auto-collecting ${e.counts.logs} logs, ${e.counts.network} requests, ${e.counts.crumbs} actions</span>`}
1719
1854
  </div>
1720
1855
  </div>
1721
1856
  <div class="bs-field">
@@ -1728,21 +1863,21 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1728
1863
  <div class="bs-field-label">Category</div>
1729
1864
  <input type="hidden" name="category" value="functionality" />
1730
1865
  <div class="bs-cat-row">
1731
- ${e.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1866
+ ${t.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1732
1867
  </div>
1733
1868
  </div>
1734
1869
  <div class="bs-field">
1735
1870
  <div class="bs-field-label">Severity</div>
1736
- <input type="hidden" name="severity" value="${t.severity}" />
1871
+ <input type="hidden" name="severity" value="${e.severity}" />
1737
1872
  <div class="bs-sev-row">
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>
1873
+ <button type="button" class="bs-sev-btn bs-sev-low${e.severity==="low"?" bs-picked":""}" data-sev="low">Low</button>
1874
+ <button type="button" class="bs-sev-btn bs-sev-medium${e.severity==="medium"?" bs-picked":""}" data-sev="medium">Med</button>
1875
+ <button type="button" class="bs-sev-btn bs-sev-high${e.severity==="high"?" bs-picked":""}" data-sev="high">High</button>
1876
+ <button type="button" class="bs-sev-btn bs-sev-critical${e.severity==="critical"?" bs-picked":""}" data-sev="critical">Critical</button>
1742
1877
  </div>
1743
1878
  </div>
1744
1879
  <div class="bs-shot-area" data-bs-screenshot>
1745
- <div class="bs-shot-icon">${O.cam}</div>
1880
+ <div class="bs-shot-icon">${B.cam}</div>
1746
1881
  <div class="bs-shot-text">
1747
1882
  <div class="bs-shot-title" data-bs-shot-title>Attach screenshot</div>
1748
1883
  <div class="bs-shot-sub" data-bs-shot-sub>Capture & annotate the current view</div>
@@ -1751,7 +1886,7 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1751
1886
  <div data-bs-annotate></div>
1752
1887
  <button type="submit" class="bs-submit-btn">Submit Report</button>
1753
1888
  </form>
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">
1889
+ </div>`}function li(){let e=fe(),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">${j(n.args.join(" ")).slice(0,500)}</span><span class="bs-log-t">${fs(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 e=He();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="${j(t.url)}">${j(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 di(){let e='<div class="bs-view">',t=ge();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">${j(o.message)}</div>${o.stack?`<div class="bs-err-stack">${j(o.stack)}</div>`:""}<div class="bs-err-meta">${o.type} &middot; ${fs(o.timestamp)}${o.source?` &middot; ${j(o.source)}:${o.lineno}`:""}</div></div>`).join(""));let n=De();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[i,a,d]of o){if(a===void 0)continue;let p=Math.min(100,a/d*100);e+=`<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);e+=`<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=Ie();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">${j(o.message).slice(0,120)}</span><span class="bs-bc-time">${si(o.timestamp)}</span></div>`).join(""));let s=hs();return e+='<div class="bs-sec">Environment</div>',e+=`<div class="bs-kv">
1755
1890
  <span class="bs-kv-k">URL</span><span class="bs-kv-v">${j(s.url)}</span>
1756
1891
  <span class="bs-kv-k">Viewport</span><span class="bs-kv-v">${s.viewportWidth}&times;${s.viewportHeight} @${s.devicePixelRatio}x</span>
1757
1892
  <span class="bs-kv-k">Screen</span><span class="bs-kv-v">${s.screenWidth}&times;${s.screenHeight}</span>
@@ -1759,7 +1894,7 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1759
1894
  <span class="bs-kv-k">Language</span><span class="bs-kv-v">${s.language}</span>
1760
1895
  ${G.commitHash?`<span class="bs-kv-k">Commit</span><span class="bs-kv-v">${j(G.commitHash)}</span>`:""}
1761
1896
  ${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}">
1897
+ </div>`,e+="</div>",e}function pi(){let e=Qe();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),a=new Date().getTime()-o.getTime(),d=Math.floor(a/6e4);if(d<1)return"Just now";if(d<60)return`${d}m ago`;let p=Math.floor(d/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 e){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}">
1763
1898
  <div class="bs-hist-top">
1764
1899
  <div class="bs-hist-title">${j(s.title)}</div>
1765
1900
  ${s.screenshot?`<img class="bs-hist-thumb" src="${s.screenshot}" alt=""/>`:""}
@@ -1769,7 +1904,7 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1769
1904
  </div>
1770
1905
  </div>
1771
1906
  <div class="bs-hist-meta">
1772
- <span class="bs-hist-badge bs-cat">${e[s.category]||s.category}</span>
1907
+ <span class="bs-hist-badge bs-cat">${t[s.category]||s.category}</span>
1773
1908
  <span class="bs-hist-badge bs-sev-${s.severity}">${s.severity}</span>
1774
1909
  <span class="bs-hist-badge bs-status-${s.status}">${s.status}</span>
1775
1910
  </div>
@@ -1778,12 +1913,12 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1778
1913
  <span>${n(s.createdAt)} &middot; ${j(s.url.replace(/^https?:\/\//,"").slice(0,40))}</span>
1779
1914
  ${o}
1780
1915
  </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>
1916
+ </div>`}return r+="</div>",r}function bi(){let e=Wt(),t=Xt(),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===Me.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 e)n+=`<button class="bs-set-card${r.id===ae.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(e,t){let n=["#f87171","#3b82f6","#fb923c","#4ade80","#a78bfa","#facc15"],r=n[0],s="draw",o=4,i=1,a=!1,d=[],p=[],b=-1,v=-1,k=!1,S=!1,ue=0,ye=0,N=0,H=0,E=[],D=["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6","#ec4899"],z=new Image;z.src=t;let Z=document.createElement("div");Z.className="bs-ann-wrap";let Se=document.createElement("div");Se.className="bs-ann-viewport";let w=document.createElement("canvas");w.className="bs-ann-canvas bs-draw";let se=document.createElement("div");se.className="bs-ann-toolbar";let wt={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>'},an={select:"Select & Move",draw:"Draw",arrow:"Arrow",rect:"Rectangle",circle:"Circle",text:"Text",highlight:"Highlight",pin:"Pin Issue"},Le=[],U=l=>{s=l,b=-1,w.className=`bs-ann-canvas bs-${l}`,Le.forEach(f=>f.classList.remove("bs-sel")),Le.find(f=>f.dataset.tool===l)?.classList.add("bs-sel")};Object.keys(wt).forEach(l=>{let f=document.createElement("button");f.type="button",f.dataset.tool=l,f.className=`bs-ann-btn${l===s?" bs-sel":""}`,f.title=an[l],f.innerHTML=wt[l],f.addEventListener("click",()=>U(l)),Le.push(f),se.appendChild(f)}),se.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),n.forEach((l,f)=>{let h=document.createElement("button");h.type="button",h.className=`bs-ann-dot${f===0?" bs-sel":""}`,h.style.background=l,h.addEventListener("click",()=>{r=l,se.querySelectorAll(".bs-ann-dot").forEach(A=>A.classList.remove("bs-sel")),h.classList.add("bs-sel")}),se.appendChild(h)}),se.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"}));let me=document.createElement("input");me.type="range",me.min="1",me.max="12",me.value="4",me.className="bs-ann-size",me.title="Brush size",me.addEventListener("input",()=>{o=parseInt(me.value)}),se.appendChild(me);let kt=document.createElement("div");kt.className="bs-ann-right";let Et=(l,f)=>{let h=document.createElement("button");return h.type="button",h.className="bs-ann-btn",h.title=l,h.innerHTML=f,h},Un=Et("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>'),_n=Object.assign(document.createElement("span"),{className:"bs-ann-zoom-label",textContent:"100%"}),Fn=Et("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=Et("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=Et("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"}),ln=()=>{w.style.transform=`scale(${i})`,_n.textContent=`${Math.round(i*100)}%`};Fn.addEventListener("click",()=>{i<3&&(i=Math.min(3,i+.25),ln())}),Un.addEventListener("click",()=>{i>.5&&(i=Math.max(.5,i-.25),ln())}),Wn.addEventListener("click",()=>{i=1,ln()}),kt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),[Un,_n,Fn,Wn,Yn,Xn].forEach(l=>kt.appendChild(l)),se.appendChild(kt);let St=document.createElement("div");St.className="bs-ann-pins";let Ae=document.createElement("div");Ae.className="bs-ann-pin-list",Ae.style.display="none",Se.appendChild(w),Se.appendChild(St),Z.appendChild(Se),Z.appendChild(se),Z.appendChild(Ae),e.innerHTML="",e.appendChild(Z);let Lt=()=>{St.innerHTML="",Ae.innerHTML="",Ae.style.display=p.length?"":"none",p.forEach((l,f)=>{let h=document.createElement("div");h.className="bs-ann-pin",h.style.background=l.color,h.style.color=l.color;let A=l.x/(w.width||1)*100,m=l.y/(w.height||1)*100;h.style.left=`${A}%`,h.style.top=`${m}%`,h.innerHTML=`<span class="bs-ann-pin-n">${f+1}</span><span class="bs-ann-pin-pulse"></span>`,h.title=`#${f+1}: ${l.note}`;let I=!1;h.addEventListener("mousedown",O=>{O.stopPropagation(),I=!0,h.classList.add("bs-dragging");let u=T=>{if(!I)return;let $=Se.getBoundingClientRect();l.x=(T.clientX-$.left)/$.width*w.width,l.y=(T.clientY-$.top)/$.height*w.height,h.style.left=`${(T.clientX-$.left)/$.width*100}%`,h.style.top=`${(T.clientY-$.top)/$.height*100}%`},y=()=>{I=!1,h.classList.remove("bs-dragging"),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",y),Lt()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",y)}),St.appendChild(h);let _=document.createElement("div");_.className="bs-ann-pin-item",_.innerHTML=`
1917
+ <div class="bs-ann-pin-num" style="background:${l.color}">${f+1}</div>
1783
1918
  <div class="bs-ann-pin-body">
1784
1919
  <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=`
1920
+ <div class="bs-ann-pin-loc">${Math.round(A)}% \xD7 ${Math.round(m)}%</div>
1921
+ </div>`;let W=document.createElement("button");W.type="button",W.className="bs-ann-pin-del",W.innerHTML="&times;",W.title="Remove pin",W.addEventListener("click",()=>{p.splice(f,1),Lt()}),_.appendChild(W),Ae.appendChild(_)})},c,cn=()=>a?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.35)",Ce=(l,f)=>{c.save(),c.strokeStyle=cn(),c.lineWidth=f+3,c.lineCap="round",c.lineJoin="round",c.globalAlpha=.5,l(),c.restore()},Rs=(l,f=!1)=>{if(l.type==="draw"||l.type==="highlight"){if(l.points.length<2)return;let m=l.type==="highlight"?.25:1,I=l.type==="highlight"?l.size*4+10:l.size,_=()=>{c.beginPath(),c.moveTo(l.points[0].x,l.points[0].y);for(let W=1;W<l.points.length;W++)c.lineTo(l.points[W].x,l.points[W].y);c.stroke()};l.type!=="highlight"&&Ce(_,I),c.strokeStyle=l.color,c.lineWidth=I,c.lineCap="round",c.lineJoin="round",c.globalAlpha=m,_(),c.globalAlpha=1}else if(l.type==="rect"){let m=()=>c.strokeRect(l.x,l.y,l.w,l.h);Ce(m,l.size),c.strokeStyle=l.color,c.lineWidth=l.size,c.lineCap="round",c.lineJoin="round",m()}else if(l.type==="circle"){let m=()=>{c.beginPath(),c.ellipse(l.cx,l.cy,Math.abs(l.rx),Math.abs(l.ry),0,0,Math.PI*2),c.stroke()};Ce(m,l.size),c.strokeStyle=l.color,c.lineWidth=l.size,m()}else if(l.type==="arrow"){let m=Math.atan2(l.y2-l.y1,l.x2-l.x1),I=12+l.size*2,_=()=>{c.beginPath(),c.moveTo(l.x1,l.y1),c.lineTo(l.x2,l.y2),c.stroke(),c.beginPath(),c.moveTo(l.x2,l.y2),c.lineTo(l.x2-I*Math.cos(m-.45),l.y2-I*Math.sin(m-.45)),c.moveTo(l.x2,l.y2),c.lineTo(l.x2-I*Math.cos(m+.45),l.y2-I*Math.sin(m+.45)),c.stroke()};Ce(_,l.size),c.strokeStyle=l.color,c.lineWidth=l.size,c.lineCap="round",c.lineJoin="round",_()}else if(l.type==="text"){let m=l.size*5+12;c.font=`bold ${m}px Inter, -apple-system, sans-serif`,c.fillStyle=cn(),c.globalAlpha=.6,c.fillText(l.text,l.x+1,l.y+1),c.globalAlpha=1,c.fillStyle=l.color,c.fillText(l.text,l.x,l.y)}let h=!f&&b>=0&&d[b]===l,A=!f&&!h&&v>=0&&d[v]===l;if(h||A){let m=et(l);if(c.save(),c.setLineDash([6,4]),c.strokeStyle=a?"#fff":"#000",c.lineWidth=h?1.5:1,c.globalAlpha=h?.7:.45,c.strokeRect(m.x-4,m.y-4,m.w+8,m.h+8),l.type==="rect"||l.type==="circle"){c.setLineDash([]),c.globalAlpha=h?.9:.6;let _=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[W,O]of _)c.fillStyle="#fff",c.fillRect(W-5,O-5,10,10),c.strokeStyle=a?"#aaa":"#333",c.lineWidth=1.2,c.strokeRect(W-5,O-5,10,10)}c.restore()}},F=()=>{c.clearRect(0,0,w.width,w.height),c.drawImage(z,0,0);for(let l of d)Rs(l)},et=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),_=Math.min(l.y1,l.y2);return{x:I,y:_,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 f=1/0,h=1/0,A=-1/0,m=-1/0;for(let I of l.points)f=Math.min(f,I.x),h=Math.min(h,I.y),A=Math.max(A,I.x),m=Math.max(m,I.y);return{x:f,y:h,w:A-f||10,h:m-h||10}},Ct=(l,f)=>{for(let h=d.length-1;h>=0;h--){let A=et(d[h]),m=8;if(l>=A.x-m&&l<=A.x+A.w+m&&f>=A.y-m&&f<=A.y+A.h+m)return h}return-1},zs=(l,f,h)=>{if(l.type==="draw"||l.type==="highlight")for(let A of l.points)A.x+=f,A.y+=h;else l.type==="rect"?(l.x+=f,l.y+=h):l.type==="circle"?(l.cx+=f,l.cy+=h):l.type==="arrow"?(l.x1+=f,l.y1+=h,l.x2+=f,l.y2+=h):l.type==="text"&&(l.x+=f,l.y+=h)};z.onload=()=>{let f=(e.clientWidth||450)/z.width;w.width=z.width,w.height=z.height,w.style.height=`${z.height*f}px`,c=w.getContext("2d"),c.drawImage(z,0,0);let h=[[10,10],[w.width-10,10],[10,w.height-10],[w.width-10,w.height-10],[w.width/2,w.height/2]],A=0;for(let[O,u]of h){let y=c.getImageData(O,u,1,1).data;A+=(y[0]*299+y[1]*587+y[2]*114)/1e3}a=A/h.length<128;let m=O=>{let u=w.getBoundingClientRect();return{x:(O.clientX-u.left)*(w.width/u.width),y:(O.clientY-u.top)*(w.height/u.height)}},I=!1;w.addEventListener("mousedown",O=>{let u=m(O);if(s==="select"){let y=Ct(u.x,u.y);if(y>=0){b=y,k=!0;let T=et(d[y]);ue=u.x-T.x,ye=u.y-T.y,w.classList.add("bs-grabbing"),w.classList.remove("bs-grab"),F()}else b=-1,F();return}if(s!=="pin"&&s!=="text"){let y=Ct(u.x,u.y);if(y>=0){b=y,k=!0,I=!0;let T=et(d[y]);ue=u.x-T.x,ye=u.y-T.y,w.classList.add("bs-grabbing"),F();return}}if(S=!0,N=u.x,H=u.y,s==="pin"){S=!1;let y=prompt("Describe the issue at this spot:");if(y){let T=D[p.length%D.length];p.push({x:u.x,y:u.y,note:y,color:T}),Lt()}return}if(s==="text"){S=!1;let y=prompt("Enter text:");y&&(d.push({type:"text",color:r,size:o,x:u.x,y:u.y,text:y}),F());return}(s==="draw"||s==="highlight")&&(E=[{x:u.x,y:u.y}])}),w.addEventListener("mousemove",O=>{let u=m(O);if(k&&b>=0){let y=et(d[b]),T=u.x-ue-y.x,$=u.y-ye-y.y;zs(d[b],T,$),F();return}if(s==="select"){let y=Ct(u.x,u.y);w.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F());return}if(s!=="pin"&&s!=="text"&&!S){let y=Ct(u.x,u.y);w.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F())}if(S){if(s==="draw"||s==="highlight"){E.push({x:u.x,y:u.y}),F();let y=s==="highlight"?.25:1,T=s==="highlight"?o*4+10:o;if(s!=="highlight"){c.save(),c.strokeStyle=cn(),c.lineWidth=T+3,c.lineCap="round",c.lineJoin="round",c.globalAlpha=.5,c.beginPath(),c.moveTo(E[0].x,E[0].y);for(let $=1;$<E.length;$++)c.lineTo(E[$].x,E[$].y);c.stroke(),c.restore()}c.strokeStyle=r,c.lineWidth=T,c.lineCap="round",c.lineJoin="round",c.globalAlpha=y,c.beginPath(),c.moveTo(E[0].x,E[0].y);for(let $=1;$<E.length;$++)c.lineTo(E[$].x,E[$].y);c.stroke(),c.globalAlpha=1}else if(F(),c.strokeStyle=r,c.lineWidth=o,c.lineCap="round",c.lineJoin="round",s==="rect")Ce(()=>c.strokeRect(N,H,u.x-N,u.y-H),o),c.strokeStyle=r,c.lineWidth=o,c.strokeRect(N,H,u.x-N,u.y-H);else if(s==="circle"){let y=Math.abs(u.x-N)/2,T=Math.abs(u.y-H)/2,$=N+(u.x-N)/2,Vn=H+(u.y-H)/2;Ce(()=>{c.beginPath(),c.ellipse($,Vn,y,T,0,0,Math.PI*2),c.stroke()},o),c.strokeStyle=r,c.lineWidth=o,c.beginPath(),c.ellipse($,Vn,y,T,0,0,Math.PI*2),c.stroke()}else if(s==="arrow"){let y=Math.atan2(u.y-H,u.x-N),T=12+o*2,$=()=>{c.beginPath(),c.moveTo(N,H),c.lineTo(u.x,u.y),c.stroke(),c.beginPath(),c.moveTo(u.x,u.y),c.lineTo(u.x-T*Math.cos(y-.45),u.y-T*Math.sin(y-.45)),c.moveTo(u.x,u.y),c.lineTo(u.x-T*Math.cos(y+.45),u.y-T*Math.sin(y+.45)),c.stroke()};Ce($,o),c.strokeStyle=r,c.lineWidth=o,c.lineCap="round",c.lineJoin="round",$()}}});let _=O=>{if(k)return k=!1,I=!1,b=-1,w.classList.remove("bs-grabbing"),w.classList.remove("bs-grab"),F(),void 0;if(!S)return;S=!1;let u=m(O);if(s==="draw"||s==="highlight")E.length>1&&d.push({type:s,color:r,size:o,alpha:s==="highlight"?.25:1,points:[...E]}),E=[];else if(s==="rect")d.push({type:"rect",color:r,size:o,x:N,y:H,w:u.x-N,h:u.y-H});else if(s==="circle"){let y=Math.abs(u.x-N)/2,T=Math.abs(u.y-H)/2;d.push({type:"circle",color:r,size:o,cx:N+(u.x-N)/2,cy:H+(u.y-H)/2,rx:y,ry:T})}else s==="arrow"&&d.push({type:"arrow",color:r,size:o,x1:N,y1:H,x2:u.x,y2:u.y});F()};w.addEventListener("mouseup",_),w.addEventListener("mouseleave",O=>{k?(k=!1,I=!1,w.classList.remove("bs-grabbing"),w.classList.remove("bs-grab"),F()):S&&_(O)});let W=O=>{b>=0&&(O.key==="Delete"||O.key==="Backspace")&&(d.splice(b,1),b=-1,F())};document.addEventListener("keydown",W),Yn.addEventListener("click",()=>{d.length&&(d.pop(),b=-1,F())}),Xn.addEventListener("click",()=>{d.length=0,p.length=0,b=-1,F(),Lt()})};let Hs=()=>{for(let l=0;l<p.length;l++){let f=p[l],h=16;c.beginPath(),c.arc(f.x,f.y-h,h,0,Math.PI*2),c.fillStyle=f.color,c.fill(),c.strokeStyle="#fff",c.lineWidth=2,c.stroke(),c.beginPath(),c.moveTo(f.x-8,f.y-6),c.lineTo(f.x,f.y+4),c.lineTo(f.x+8,f.y-6),c.fillStyle=f.color,c.fill(),c.fillStyle="#fff",c.font="bold 14px Inter, sans-serif",c.textAlign="center",c.textBaseline="middle",c.fillText(`${l+1}`,f.x,f.y-h),c.textAlign="start",c.textBaseline="alphabetic"}};return{getAnnotation:()=>{try{return b=-1,F(),Hs(),w.toDataURL("image/jpeg",.7)}catch{return null}},getPins:()=>p.map((l,f)=>({number:f+1,x:Math.round(l.x),y:Math.round(l.y),note:l.note}))}}function gt(e){if(!g)return;Ge=e,g.querySelectorAll(".bs-tab").forEach(r=>{r.classList.toggle("bs-active",r.dataset.tab===e)});let t=g.querySelector(".bs-scroll"),n={report:ys,console:li,network:ci,context:di,history:pi,settings:bi};t.innerHTML=n[e](),t.scrollTop=0,xs()}function xs(){if(!g)return;if(Ge==="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 d=document.createElement("button");d.type="button",d.className="bs-hist-confirm-no",d.textContent="Cancel",a.addEventListener("click",()=>{ii(r),gt("history")}),d.addEventListener("click",()=>i.remove()),i.appendChild(a),i.appendChild(d),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=Qe().find(k=>k.id===r);if(!i)return;let a=document.createElement("div");a.className="bs-hist-edit-wrap",a.innerHTML=`
1787
1922
  <div class="bs-field" style="margin-bottom:8px">
1788
1923
  <input class="bs-input" data-edit-title value="${j(i.title)}" />
1789
1924
  </div>
@@ -1798,14 +1933,14 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1798
1933
  <button type="button" class="bs-sev-btn bs-sev-critical${i.severity==="critical"?" bs-picked":""}" data-edit-sev="critical">Critical</button>
1799
1934
  </div>
1800
1935
  </div>
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=`
1936
+ <div class="bs-hist-edit-row"></div>`;let d=i.severity;s.appendChild(a),a.querySelectorAll("[data-edit-sev]").forEach(k=>{k.addEventListener("click",()=>{d=k.dataset.editSev,a.querySelectorAll(".bs-sev-btn").forEach(S=>S.classList.remove("bs-picked")),k.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 k=a.querySelector("[data-edit-title]").value.trim(),S=a.querySelector("[data-edit-desc]").value.trim();k&&(ai(r,{title:k,description:S,severity:d}),gt("history"))}),v.addEventListener("click",()=>a.remove()),p.appendChild(b),p.appendChild(v)})});return}if(Ge==="settings"){g.querySelectorAll("[data-set-theme]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setTheme;ht(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=pt(r);s&&(Me=s,re(),setTimeout(()=>{Ge="settings",le(),setTimeout(()=>gt("settings"),50)},400))})});return}if(Ge!=="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 e=null,t=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"),te&&(te.style.visibility="hidden"),await new Promise(o=>setTimeout(o,200)),e=await jt(!0),g&&(g.style.visibility=""),te&&(te.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=g?.querySelector("[data-bs-annotate]");o&&(t=ui(o,e))}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,d=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:d,severity:a,tags:p.tags.length?p.tags:void 0,context:hs(),consoleLogs:fe(),errors:ge(),networkCaptures:xe(),breadcrumbs:Ie(),performance:De()??void 0,screenshot:e??void 0,annotation:t?.getAnnotation()??void 0,pins:t?.getPins().length?t.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=`${B.check} Bug reported!`,s.classList.add("bs-submit-ok"),setTimeout(re,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 le(){if(!Te||K)return;K=!0,Ge="report",Nn(),J&&(J.style.display="",J.style.pointerEvents="auto"),te=Te.createElement("div"),te.className="bs-backdrop",Te.body.appendChild(te);let e=xe().length,t=ge().length;g=Te.createElement("div"),g.className=`bs-modal bs-ly-${Me.id}`,Ee(g);let n=`
1802
1937
  <div class="bs-tabs">
1803
- <button class="bs-tab bs-active" data-tab="report">${O.report} Report</button>
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?`
1938
+ <button class="bs-tab bs-active" data-tab="report">${B.report} Report</button>
1939
+ <button class="bs-tab" data-tab="console">${B.console} Console <span class="bs-tab-badge">${fe().length}</span></button>
1940
+ <button class="bs-tab" data-tab="network">${B.network} Network ${e?`<span class="bs-tab-badge bs-warn">${e}</span>`:`<span class="bs-tab-badge">${He().length}</span>`}</button>
1941
+ <button class="bs-tab" data-tab="context">${B.ctx} Context ${t?`<span class="bs-tab-badge bs-warn">${t}</span>`:""}</button>
1942
+ <button class="bs-tab" data-tab="history">${B.history} History <span class="bs-tab-badge">${Qe().length}</span></button>
1943
+ </div>`,r=ie(),s=r?r.name.split(" ").map(v=>v[0]).join("").toUpperCase().slice(0,2):"",o=en(),i=r?`
1809
1944
  <div class="bs-hdr">
1810
1945
  <div class="bs-logo">BugStash</div>
1811
1946
  <div class="bs-hdr-right">
@@ -1817,39 +1952,39 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1817
1952
  <div class="bs-user-avatar">${s}</div>
1818
1953
  <span>${r.name.split(" ")[0]}</span>
1819
1954
  </div>
1820
- <button class="bs-hdr-icon" data-tab="settings" title="Settings">${O.settings}</button>
1955
+ <button class="bs-hdr-icon" data-tab="settings" title="Settings">${B.settings}</button>
1821
1956
  <button class="bs-login-logout" data-bs-logout title="Sign out">Logout</button>
1822
- <button class="bs-close-btn" data-bs-close title="Close">${O.x}</button>
1957
+ <button class="bs-close-btn" data-bs-close title="Close">${B.x}</button>
1823
1958
  </div>
1824
1959
  </div>`:`
1825
1960
  <div class="bs-hdr" style="justify-content:flex-end">
1826
- <button class="bs-close-btn" data-bs-close title="Close">${O.x}</button>
1827
- </div>`,a=At.tabPosition==="left",c=At.tabPosition==="bottom",p=r?ys():ri();a?g.innerHTML=`
1961
+ <button class="bs-close-btn" data-bs-close title="Close">${B.x}</button>
1962
+ </div>`,a=Me.tabPosition==="left",d=Me.tabPosition==="bottom",p=r?ys():ri();a?g.innerHTML=`
1828
1963
  ${i}
1829
1964
  <div class="bs-body-wrap">
1830
1965
  ${r?n:""}
1831
1966
  <div class="bs-scroll">${p}</div>
1832
- </div>`:c?g.innerHTML=`
1967
+ </div>`:d?g.innerHTML=`
1833
1968
  ${i}
1834
1969
  <div class="bs-scroll">${p}</div>
1835
1970
  ${r?`<div class="bs-tab-divider"></div>${n}`:""}`:g.innerHTML=`
1836
1971
  ${i}
1837
1972
  ${r?`${n}<div class="bs-tab-divider"></div>`:""}
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=`
1973
+ <div class="bs-scroll">${p}</div>`,Te.body.appendChild(g),x&&x.classList.add("bs-open"),requestAnimationFrame(()=>{te?.classList.add("bs-in"),g?.classList.add("bs-in")}),g.querySelectorAll(".bs-tab").forEach(v=>{v.addEventListener("click",()=>gt(v.dataset.tab))}),g.querySelector('.bs-hdr-icon[data-tab="settings"]')?.addEventListener("click",()=>gt("settings")),g.querySelector("[data-bs-close]")?.addEventListener("click",re),te.addEventListener("click",re),g.querySelector("[data-bs-pin-toggle]")?.addEventListener("click",()=>{let v=Pe(),k=g?.querySelector("[data-bs-pin-toggle]");k&&(k.classList.toggle("active",v),k.innerHTML=`
1839
1974
  <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>
1840
1975
  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=`
1976
+ `)}),g.querySelector("[data-bs-logout]")?.addEventListener("click",()=>{_t(),re(),setTimeout(()=>le(),300)}),r?xs():mi();let b=v=>{v.key==="Escape"&&(re(),document.removeEventListener("keydown",b))};document.addEventListener("keydown",b)}function mi(){if(!g)return;let e=g.querySelector("#bs-login-submit"),t=g.querySelector("#bs-login-email"),n=g.querySelector("#bs-login-pass"),r=g.querySelector("#bs-login-error");if(!e||!t||!n)return;let s=async()=>{let o=t.value.trim(),i=n.value;if(!o||!i){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 a=await Ut(o,i,G.projectId);a.success?(Je(G.projectId,ne),We(G.projectId),re(),setTimeout(()=>le(),300)):(r.textContent=a.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 re(){K&&(x&&x.classList.remove("bs-open"),g&&(g.classList.remove("bs-in"),g.classList.add("bs-out")),te&&te.classList.remove("bs-in"),setTimeout(()=>{g?.remove(),te?.remove(),g=null,te=null,K=!1,J&&(J.style.display="none",J.style.pointerEvents="none")},350))}function Ee(e){for(let[t,n]of Object.entries(ae.vars))e.style.setProperty(t,n)}function ht(e){let t=Yt(e);t&&(ae=t,g&&Ee(g),x&&Ee(x),P&&Ee(P))}function ws(){return ae.id}function ks(e){let t=pt(e);t&&(Me=t,K&&(re(),setTimeout(le,400)))}function Es(){return Me.id}function fi(){try{let e=localStorage.getItem(ms);if(!e)return null;let t=JSON.parse(e);if(typeof t.top=="number"&&typeof t.left=="number")return t}catch{}return null}function gi(e,t){try{localStorage.setItem(ms,JSON.stringify({top:e,left:t}))}catch{}}function hi(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 jn(e,t){if(!x)return;let n=hi(e,t);x.style.top=`${n.top}px`,x.style.left=`${n.left}px`,x.style.bottom="auto",x.style.right="auto",Ss(n.top,n.left)}function Ss(e,t){if(!P)return;let n=56,r=8,s=P.offsetHeight||200,o=e-s-r;o<8&&(o=e+n+r),P.style.top=`${o}px`,P.style.bottom="auto",P.style.left=`${t+n/2-20}px`,P.style.right="auto"}function vi(){if(!x)return;let e=0,t=0,n=0,r=0,s=!1;function o(){x&&(x.removeEventListener("pointermove",a),x.removeEventListener("pointerup",d),x.classList.remove("bs-dragging")),Bn=null}function i(p){if(!x)return;$e=!1,s=!1,e=p.clientX,t=p.clientY;let b=x.getBoundingClientRect();n=b.top,r=b.left,x.setPointerCapture(p.pointerId),x.addEventListener("pointermove",a),x.addEventListener("pointerup",d),Bn=o}function a(p){let b=p.clientX-e,v=p.clientY-t;if(!s&&Math.abs(b)<5&&Math.abs(v)<5)return;s=!0,$e=!0,x?.classList.add("bs-dragging");let k=n+v,S=r+b;jn(k,S)}function d(p){if(x?.releasePointerCapture(p.pointerId),o(),s&&x){let b=x.getBoundingClientRect();gi(b.top,b.left),p.preventDefault(),p.stopPropagation(),setTimeout(()=>{$e=!1},10)}else $e=!1}x.addEventListener("pointerdown",i)}function Ls(e,t){G=e,ne=t,Ke=document.createElement("link"),Ke.rel="stylesheet",Ke.href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap",ne.appendChild(Ke),ft=document.createElement("style"),ft.textContent=ni,ne.appendChild(ft),yi(e),J=document.createElement("iframe"),J.style.cssText="position:fixed;inset:0;z-index:2147483640;pointer-events:none;border:none;background:transparent;width:100%;height:100%;color-scheme:normal;display:none;";let n=`
1842
1977
  @import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap');
1843
- ${ni}
1978
+ ${ti}
1844
1979
  ${Vr}
1845
1980
  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=`
1981
+ `;J.srcdoc=`<!DOCTYPE html><html><head><style>${n}</style></head><body></body></html>`,J.addEventListener("load",()=>{Te=J.contentDocument}),ne.appendChild(J),xi(e),mt=()=>{if(!(!x||$e)&&x.style.top&&x.style.top!=="auto"){let r=x.getBoundingClientRect();jn(r.top,r.left)}},window.addEventListener("resize",mt)}function yi(e){if(!ne)return;let t=e.panelPosition==="bottom-left"?"left":"right";x=document.createElement("button"),x.className="bs-fab",Ee(x),x.innerHTML=`${B.bug}<span class="bs-fab-label">Report a bug</span>`;let n=fi();n?jn(n.top,n.left):x.style[t]="24px",x.addEventListener("click",()=>{$e||(K?re():le())}),ne.appendChild(x),vi(),P=document.createElement("div"),P.className="bs-toolbar",n?Ss(n.top,n.left):P.style[t]="32px",Ee(P);let s=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",o=[{icon:B.cam,tip:"Screenshot",kbd:`${s}+Shift+S`,action:async()=>{let i=await jt(!0);i&&(K||le(),setTimeout(()=>{let a=g?.querySelector("[data-bs-screenshot]");if(a){a.__screenshot=i,a.classList.add("bs-captured");let d=a.querySelector("[data-bs-shot-title]"),p=a.querySelector("[data-bs-shot-sub]");d&&(d.textContent="Screenshot captured!"),p&&(p.textContent="Click to retake or annotate"),a.click()}},400))}},{icon:B.pin,tip:"Toggle Pins",kbd:`${s}+Shift+P`,id:"bs-tb-pin",action:()=>{if(!ie()){K||le();return}ne?.querySelector("#bugstash-live-pins")||(Je(G.projectId,ne),We(G.projectId));let a=Pe(),d=P?.querySelector("#bs-tb-pin");d&&d.classList.toggle("bs-active",a);let p=g?.querySelector("[data-bs-pin-toggle]");p&&(p.classList.toggle("active",a),p.innerHTML=`
1847
1982
  <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>
1848
1983
  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=`
1984
+ `)}},{icon:ae.id==="black"?B.sun:B.moon,tip:"Toggle Theme",kbd:`${s}+Shift+T`,id:"bs-tb-theme",action:()=>{let i=ae.id==="black"?"white":"black";ht(i),P&&Ee(P);let a=P?.querySelector("#bs-tb-theme");a&&(a.innerHTML=`${ae.id==="black"?B.sun:B.moon}<span class="bs-toolbar-tip">${ae.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${s}+Shift+T</span></span>`)}},{icon:B.report,tip:"Open Panel",kbd:`${s}+Shift+B`,action:()=>{K?re():le()}}];for(let i of o){let a=document.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",d=>{d.stopPropagation(),i.action()}),P.appendChild(a)}ne.appendChild(P),x.addEventListener("mouseenter",()=>{K||us()}),x.addEventListener("mouseleave",i=>{let a=i.relatedTarget;P?.contains(a)||Nn()}),P.addEventListener("mouseenter",()=>us()),P.addEventListener("mouseleave",i=>{let a=i.relatedTarget;x?.contains(a)||Nn()})}function xi(e){let n=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl";ut=r=>{if((r.ctrlKey||r.metaKey)&&r.shiftKey){if(r.key==="B"||r.key==="b")r.preventDefault(),K?re():le();else if(r.key==="S"||r.key==="s")r.preventDefault(),jt(!0).then(o=>{o&&(K||le(),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]"),d=i.querySelector("[data-bs-shot-sub]");a&&(a.textContent="Screenshot captured!"),d&&(d.textContent="Click to retake or annotate"),i.click()}},400))});else if(r.key==="P"||r.key==="p"){if(r.preventDefault(),!ie()){K||le();return}ne?.querySelector("#bugstash-live-pins")||(Je(e.projectId,ne),We(e.projectId));let i=Pe(),a=P?.querySelector("#bs-tb-pin");a&&a.classList.toggle("bs-active",i);let d=g?.querySelector("[data-bs-pin-toggle]");d&&(d.classList.toggle("active",i),d.innerHTML=`
1850
1985
  <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
1986
  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=`
1987
+ `)}else if(r.key==="T"||r.key==="t"){r.preventDefault();let i=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",a=ae.id==="black"?"white":"black";ht(a),P&&Ee(P);let d=P?.querySelector("#bs-tb-theme");d&&(d.innerHTML=`${ae.id==="black"?B.sun:B.moon}<span class="bs-toolbar-tip">${ae.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${i}+Shift+T</span></span>`)}}},document.addEventListener("keydown",ut)}function us(){tn||K||(tn=!0,P?.classList.add("bs-show"))}function Nn(){tn=!1,P?.classList.remove("bs-show")}function Cs(){re(),Bn?.(),$e=!1,x?.remove(),x=null,P?.remove(),P=null,tn=!1,ft?.remove(),ft=null,Ke?.remove(),Ke=null,J?.remove(),J=null,Te=null,ne=null,ut&&document.removeEventListener("keydown",ut),ut=null,mt&&window.removeEventListener("resize",mt),mt=null}var be=null,q=null,C=null,ve=null,nn="freehand",rn="#ef4444",wi=3,Ze=[],Q=null,vt=!1,sn=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(e){return new Promise(t=>{sn=t,Ze=[],Q=null,nn="freehand",rn="#ef4444",Si(e)})}function Si(e){be&&be.remove(),be=document.createElement("div"),be.id="bs-annotation-overlay";let t=document.createElement("style");t.textContent=`
1853
1988
  #bs-annotation-overlay {
1854
1989
  position: fixed; inset: 0; z-index: 2147483647;
1855
1990
  background: rgba(0,0,0,0.85);
@@ -1894,5 +2029,5 @@ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{
1894
2029
  overflow: hidden; padding: 16px;
1895
2030
  }
1896
2031
  .bs-ann-canvas-wrap canvas { cursor: crosshair; border-radius: 4px; }
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});
2032
+ `,be.appendChild(t);let n=document.createElement("div");n.className="bs-ann-toolbar";for(let a of ki){let d=document.createElement("button");d.className=`bs-ann-tool${a.id===nn?" active":""}`,d.title=a.label,d.innerHTML=`<svg viewBox="0 0 24 24"><path d="${a.icon}"/></svg>`,d.addEventListener("click",()=>{nn=a.id,n.querySelectorAll(".bs-ann-tool").forEach(p=>p.classList.remove("active")),d.classList.add("active")}),n.appendChild(d)}n.appendChild(Ps());for(let a of Ei){let d=document.createElement("button");d.className=`bs-ann-color${a===rn?" active":""}`,d.style.background=a,d.addEventListener("click",()=>{rn=a,n.querySelectorAll(".bs-ann-color").forEach(p=>p.classList.remove("active")),d.classList.add("active")}),n.appendChild(d)}n.appendChild(Ps());let r=document.createElement("button");r.className="bs-ann-btn bs-ann-undo",r.textContent="Undo",r.addEventListener("click",()=>{Ze.pop(),on()}),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(),sn?.(null)}),n.appendChild(s),n.appendChild(o),be.appendChild(n);let i=document.createElement("div");i.className="bs-ann-canvas-wrap",q=document.createElement("canvas"),C=q.getContext("2d"),i.appendChild(q),be.appendChild(i),document.body.appendChild(be),ve=new Image,ve.onload=()=>{if(!q||!C||!ve)return;let a=window.innerWidth-32,d=window.innerHeight-100,p=ve.width,b=ve.height,v=Math.min(1,a/p,d/b);p=Math.round(p*v),b=Math.round(b*v),q.width=p,q.height=b,on(),Li()},ve.src=e}function Ps(){let e=document.createElement("div");return e.className="bs-ann-sep",e}function Li(){if(!q)return;q.addEventListener("mousedown",t=>{vt=!0;let{x:n,y:r}=Ts(t);Q={type:nn,color:rn,lineWidth:wi,points:[{x:n,y:r}],x:n,y:r,width:0,height:0}}),q.addEventListener("mousemove",t=>{if(!vt||!Q)return;let{x:n,y:r}=Ts(t);Q.type==="freehand"?Q.points.push({x:n,y:r}):(Q.width=n-Q.x,Q.height=r-Q.y),on(),Ms(Q)});let e=()=>{vt&&Q&&(Ze.push(Q),Q=null),vt=!1,on()};q.addEventListener("mouseup",e),q.addEventListener("mouseleave",e)}function Ts(e){let t=q.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function on(){if(!(!C||!q||!ve)){C.clearRect(0,0,q.width,q.height),C.drawImage(ve,0,0,q.width,q.height);for(let e of Ze)Ms(e)}}function Ms(e){if(C)switch(C.strokeStyle=e.color,C.fillStyle=e.color,C.lineWidth=e.lineWidth,C.lineCap="round",C.lineJoin="round",e.type){case"freehand":{if(!e.points||e.points.length<2)return;C.beginPath(),C.moveTo(e.points[0].x,e.points[0].y);for(let t=1;t<e.points.length;t++)C.lineTo(e.points[t].x,e.points[t].y);C.stroke();break}case"rectangle":{C.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;C.beginPath(),C.ellipse(t,n,r,s,0,0,Math.PI*2),C.stroke();break}case"arrow":{let t=e.x,n=e.y,r=e.x+e.width,s=e.y+e.height,o=14,i=Math.atan2(s-n,r-t);C.beginPath(),C.moveTo(t,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(),sn?.(null);return}let t={dataUrl:q.toDataURL("image/png"),annotations:Ze};qn(),sn?.(t)}function qn(){be?.remove(),be=null,q=null,C=null,ve=null,Ze=[],Q=null,vt=!1}var xt=!1,yt=null;function Pi(){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:"closed"}),document.body.appendChild(e),yt}function As(e){if(xt)return;xt=!0;let t=Pi();Kn(e.maxBreadcrumbs),tr(e.maxLogs),ir(e.maxNetworkCaptures),cr(),e.enablePerformance!==!1&&br(),Ls(e,t),e.enableLivePins!==!1&&ie()&&(Je(e.projectId,t),We(e.projectId))}function Ti(){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 Is={init(e){if(xt||typeof window>"u"||(e.environment??Ti())==="production")return;e.endpoint&&Dr(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)?As(e):Fr(e.projectId).then(s=>{s&&As(e)}).catch(()=>{})},destroy(){xt&&(Cs(),as(),Kr(),rr(),lr(),pr(),Qn(),ur(),document.querySelector("bugstash-root")?.remove(),yt=null,xt=!1)},getLogs:fe,clearLogs:nr,getNetworkCaptures:He,getFailedNetworkCaptures:xe,clearNetworkCaptures:ar,getErrors:ge,clearErrors:dr,getBreadcrumbs:Ie,clearBreadcrumbs:Gn,getPerformanceMetrics:De,addBreadcrumb:V,getThemes:Wt,getThemeById:Yt,setTheme:ht,getCurrentThemeId:ws,getLayouts:Xt,getLayoutById:pt,setLayout:ks,getCurrentLayoutId:Es,getCurrentUser:ie,login:Ut,logout:_t,togglePinMode:Pe,isPinModeActive:en,isConnected:Gr,openAnnotationEditor:$s,redactString:Re,redactObject:Tt},$i=Is;0&&(module.exports={BugStash});
1898
2033
  //# sourceMappingURL=index.cjs.map