bugstash 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,19 +1,19 @@
1
- "use strict";var sn=Object.defineProperty;var vs=Object.getOwnPropertyDescriptor;var ws=Object.getOwnPropertyNames;var ks=Object.prototype.hasOwnProperty;var Es=(e,t)=>{for(var n in t)sn(e,n,{get:t[n],enumerable:!0})},Ss=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ws(t))!ks.call(e,s)&&s!==n&&sn(e,s,{get:()=>t[s],enumerable:!(r=vs(t,s))||r.enumerable});return e};var Ls=e=>Ss(sn({},"__esModule",{value:!0}),e);var ii={};Es(ii,{BugStash:()=>fs,default:()=>oi});module.exports=Ls(ii);var Je=[],jn=50,Ke=null,Ge=null,Qe=null,Ze=null;function kt(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 Y(e){Je.push(e),Je.length>jn&&Je.shift()}function qn(e){e&&(jn=e),Ke=n=>{let r=n.target;!r||!r.tagName||Y({type:"click",category:"ui",message:`Clicked ${kt(r)}`,timestamp:Date.now(),data:{x:n.clientX,y:n.clientY,selector:kt(r)}})},document.addEventListener("click",Ke,!0);let t=new WeakMap;Ge=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";Y({type:"input",category:"ui",message:`Input ${kt(r)}`,timestamp:Date.now(),data:{selector:kt(r),value:i?"[redacted]":void 0}})},300))},document.addEventListener("input",Ge,!0),Qe=()=>{Y({type:"navigation",category:"navigation",message:`Navigated to ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("popstate",Qe),Ze=()=>{Y({type:"navigation",category:"navigation",message:`Hash changed to ${window.location.hash}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("hashchange",Ze),Y({type:"navigation",category:"navigation",message:`Page loaded: ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})}function Te(){return[...Je]}function Un(){Je=[]}function Fn(){Ke&&document.removeEventListener("click",Ke,!0),Ge&&document.removeEventListener("input",Ge,!0),Qe&&window.removeEventListener("popstate",Qe),Ze&&window.removeEventListener("hashchange",Ze),Ke=null,Ge=null,Qe=null,Ze=null}var on="[REDACTED]",Cs=[[/\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)+" "+on}],[/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)+' "'+on+'"'}]];function Pe(e){let t=e;for(let[n,r]of Cs)t=t.replace(n,r);return t}function Wn(e){return e.map(Pe)}function Et(e){if(typeof e=="string")return Pe(e);if(Array.isArray(e))return e.map(Et);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]=on:t[n]=Et(r)}return t}return e}var St={log:console.log,warn:console.warn,error:console.error,debug:console.debug,info:console.info},et=[],_n=50;function Ts(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 Ps(e,t){let n={level:e,args:Wn(Ts(t)),timestamp:Date.now()};e==="error"&&(n.stack=new Error().stack?.split(`
1
+ "use strict";var pn=Object.defineProperty;var Bs=Object.getOwnPropertyDescriptor;var Os=Object.getOwnPropertyNames;var Ns=Object.prototype.hasOwnProperty;var js=(t,e)=>{for(var n in e)pn(t,n,{get:e[n],enumerable:!0})},qs=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Os(e))!Ns.call(t,s)&&s!==n&&pn(t,s,{get:()=>e[s],enumerable:!(r=Bs(e,s))||r.enumerable});return t};var Us=t=>qs(pn({},"__esModule",{value:!0}),t);var Mi={};js(Mi,{BugStash:()=>Rs,default:()=>$i});module.exports=Us(Mi);var ne=[],Jn=50,re=null,se=null,oe=null,ie=null;function $e(t){if(t.id)return`#${t.id}`;let e=t.tagName.toLowerCase(),n=t.className&&typeof t.className=="string"?"."+t.className.trim().split(/\s+/).slice(0,2).join("."):"",r=(t.textContent||"").trim().slice(0,30),s=r?` "${r}"`:"";return`${e}${n}${s}`}function V(t){ne.push(t),ne.length>Jn&&ne.shift()}function Kn(t){t&&(Jn=t),re=n=>{let r=n.target;!r||!r.tagName||V({type:"click",category:"ui",message:`Clicked ${$e(r)}`,timestamp:Date.now(),data:{x:n.clientX,y:n.clientY,selector:$e(r)}})},document.addEventListener("click",re,!0);let e=new WeakMap;se=n=>{let r=n.target;if(!r||!r.tagName)return;let s=r.tagName.toLowerCase();if(s!=="input"&&s!=="textarea"&&s!=="select")return;let o=e.get(r);o&&clearTimeout(o),e.set(r,window.setTimeout(()=>{let i=r instanceof HTMLInputElement&&r.type==="password";V({type:"input",category:"ui",message:`Input ${$e(r)}`,timestamp:Date.now(),data:{selector:$e(r),value:i?"[redacted]":void 0}})},300))},document.addEventListener("input",se,!0),oe=()=>{V({type:"navigation",category:"navigation",message:`Navigated to ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("popstate",oe),ie=()=>{V({type:"navigation",category:"navigation",message:`Hash changed to ${window.location.hash}`,timestamp:Date.now(),data:{url:window.location.href}})},window.addEventListener("hashchange",ie),V({type:"navigation",category:"navigation",message:`Page loaded: ${window.location.pathname}`,timestamp:Date.now(),data:{url:window.location.href}})}function zt(){return[...ne]}function Gn(){ne=[]}function Qn(){re&&document.removeEventListener("click",re,!0),se&&document.removeEventListener("input",se,!0),oe&&window.removeEventListener("popstate",oe),ie&&window.removeEventListener("hashchange",ie),re=null,se=null,oe=null,ie=null}var bn="[REDACTED]",Fs=[[/\b(?:\d[ -]*?){13,19}\b/g,"[CC_REDACTED]"],[/\b\d{3}-\d{2}-\d{4}\b/g,"[SSN_REDACTED]"],[/Bearer\s+[A-Za-z0-9\-._~+/]+=*/g,"Bearer [TOKEN_REDACTED]"],[/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,"[JWT_REDACTED]"],[/(?:api[_-]?key|apikey|secret|token|password|passwd|authorization)['":\s=]+['"]?([A-Za-z0-9\-._~+/]{20,})['"]?/gi,t=>{let e=t.search(/[=:]/);return t.slice(0,e+1)+" "+bn}],[/AKIA[0-9A-Z]{16}/g,"[AWS_KEY_REDACTED]"],[/"(?:password|passwd|secret|token|access_token|refresh_token|api_key|apiKey|private_key)":\s*"[^"]*"/gi,t=>{let e=t.indexOf(":");return t.slice(0,e+1)+' "'+bn+'"'}]];function It(t){let e=t;for(let[n,r]of Fs)e=e.replace(n,r);return e}function Zn(t){return t.map(It)}function Me(t){if(typeof t=="string")return It(t);if(Array.isArray(t))return t.map(Me);if(t&&typeof t=="object"){let e={};for(let[n,r]of Object.entries(t)){let s=n.toLowerCase();s.includes("password")||s.includes("secret")||s.includes("token")||s.includes("apikey")||s.includes("api_key")||s.includes("private")?e[n]=bn:e[n]=Me(r)}return e}return t}var Ae={log:console.log,warn:console.warn,error:console.error,debug:console.debug,info:console.info},ae=[],tr=50;function _s(t){return t.map(e=>{if(e instanceof Error)return`${e.name}: ${e.message}
2
+ ${e.stack??""}`;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)})}function Ws(t,e){let n={level:t,args:Zn(_s(e)),timestamp:Date.now()};t==="error"&&(n.stack=new Error().stack?.split(`
3
3
  `).slice(2).join(`
4
- `)),et.push(n),et.length>_n&&et.shift(),Y({type:"console",category:`console.${e}`,message:n.args.join(" ").slice(0,200),timestamp:n.timestamp})}function Xn(e){e&&(_n=e);for(let t of Object.keys(St))console[t]=function(...n){Ps(t,n),St[t].apply(console,n)}}function le(){return[...et]}function Yn(){et=[]}function Vn(){for(let e of Object.keys(St))console[e]=St[e]}var $e=[],Jn=50,Lt,Ct,Tt;function an(e){$e.push(e),$e.length>Jn&&$e.shift(),Y({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 Kn(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 Pe(e)}}function $s(){Lt=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=Kn(r),o=Date.now();try{let i=await Lt.call(window,e,t);return an({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 an({method:n,url:s,status:0,statusText:"Network Error",duration:Date.now()-o,timestamp:o,failed:!0}),i}}}function Ms(){Ct=XMLHttpRequest.prototype.open,Tt=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=function(e,t,...n){return this.__bs_method=e.toUpperCase(),this.__bs_url=Kn(typeof t=="string"?t:t.href),Ct.apply(this,[e,t,...n])},XMLHttpRequest.prototype.send=function(e){let t=Date.now();return this.addEventListener("loadend",function(){an({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})}),Tt.call(this,e)}}function Gn(e){e&&(Jn=e),$s(),Ms()}function Me(){return[...$e]}function fe(){return $e.filter(e=>e.failed)}function Qn(){$e=[]}function Zn(){Lt&&(window.fetch=Lt),Ct&&(XMLHttpRequest.prototype.open=Ct),Tt&&(XMLHttpRequest.prototype.send=Tt)}var Pt=[],tt=null,nt=null;function er(){tt=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()};Pt.push(t),Y({type:"error",category:"exception",message:t.message,timestamp:t.timestamp,data:{source:t.source,lineno:t.lineno}})},nt=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()};Pt.push(r),Y({type:"error",category:"promise",message:n,timestamp:r.timestamp})},window.addEventListener("error",tt),window.addEventListener("unhandledrejection",nt)}function ce(){return[...Pt]}function tr(){Pt=[]}function nr(){tt&&window.removeEventListener("error",tt),nt&&window.removeEventListener("unhandledrejection",nt),tt=null,nt=null}var P=null,$t=null,Mt=null,At=null;function rr(){if(P={timestamp:Date.now()},performance.getEntriesByType){let e=()=>{let[t]=performance.getEntriesByType("navigation");t&&P&&(P.pageLoadTime=Math.round(t.loadEventEnd-t.startTime),P.domContentLoaded=Math.round(t.domContentLoadedEventEnd-t.startTime));let n=performance.getEntriesByType("paint");for(let s of n)s.name==="first-paint"&&P&&(P.firstPaint=Math.round(s.startTime)),s.name==="first-contentful-paint"&&P&&(P.firstContentfulPaint=Math.round(s.startTime));P&&(P.resourceCount=performance.getEntriesByType("resource").length);let r=performance.memory;r&&P&&(P.memoryUsage={usedJSHeapSize:r.usedJSHeapSize,totalJSHeapSize:r.totalJSHeapSize})};document.readyState==="complete"?setTimeout(e,0):window.addEventListener("load",()=>setTimeout(e,100))}if(typeof PerformanceObserver<"u"){try{$t=new PerformanceObserver(e=>{let t=e.getEntries(),n=t[t.length-1];n&&P&&(P.largestContentfulPaint=Math.round(n.startTime))}),$t.observe({type:"largest-contentful-paint",buffered:!0})}catch{}try{let e=0;Mt=new PerformanceObserver(t=>{for(let n of t.getEntries())n.hadRecentInput||(e+=n.value);P&&(P.cumulativeLayoutShift=Math.round(e*1e3)/1e3)}),Mt.observe({type:"layout-shift",buffered:!0})}catch{}try{At=new PerformanceObserver(e=>{let[t]=e.getEntries();t&&P&&(P.firstInputDelay=Math.round(t.processingStart-t.startTime))}),At.observe({type:"first-input",buffered:!0})}catch{}}}function Ae(){return P&&(P.timestamp=Date.now()),P?{...P}:null}function sr(){$t?.disconnect(),Mt?.disconnect(),At?.disconnect(),$t=null,Mt=null,At=null,P=null}function or(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 ir=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function te(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var Re=null;function zt(e={}){return Re||(e.includeStyleProperties?(Re=e.includeStyleProperties,Re):(Re=te(window.getComputedStyle(document.documentElement)),Re))}function Rt(e,t){let r=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function As(e){let t=Rt(e,"border-left-width"),n=Rt(e,"border-right-width");return e.clientWidth+t+n}function Rs(e){let t=Rt(e,"border-top-width"),n=Rt(e,"border-bottom-width");return e.clientHeight+t+n}function ln(e,t={}){let n=t.width||As(e),r=t.height||Rs(e);return{width:n,height:r}}function ar(){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 K=16384;function lr(e){(e.width>K||e.height>K)&&(e.width>K&&e.height>K?e.width>e.height?(e.height*=K/e.width,e.width=K):(e.width*=K/e.height,e.height=K):e.width>K?(e.height*=K/e.width,e.width=K):(e.width*=K/e.height,e.height=K))}function ze(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 zs(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function cr(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),zs(s)}var W=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||W(n,t)};function Is(e){let t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function Hs(e,t){return zt(t).map(n=>{let r=e.getPropertyValue(n),s=e.getPropertyPriority(n);return`${n}: ${r}${s?" !important":""};`}).join(" ")}function Ds(e,t,n,r){let s=`.${e}:${t}`,o=n.cssText?Is(n):Hs(n,r);return document.createTextNode(`${s}{${o}}`)}function dr(e,t,n,r){let s=window.getComputedStyle(e,n),o=s.getPropertyValue("content");if(o===""||o==="none")return;let i=ir();try{t.className=`${t.className} ${i}`}catch{return}let a=document.createElement("style");a.appendChild(Ds(i,n,s,r)),t.appendChild(a)}function pr(e,t,n){dr(e,t,":before",n),dr(e,t,":after",n)}var br="application/font-woff",ur="image/jpeg",Bs={woff:br,woff2:br,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:ur,jpeg:ur,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Os(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function Ie(e){let t=Os(e).toLowerCase();return Bs[t]||""}function Ns(e){return e.split(/,/)[1]}function rt(e){return e.search(/^(data:)/)!==-1}function dn(e,t){return`data:${t};base64,${e}`}async function pn(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 cn={};function js(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 He(e,t,n){let r=js(e,t,n.includeQueryParams);if(cn[r]!=null)return cn[r];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let s;try{let o=await pn(e,n.fetchRequestInit,({res:i,result:a})=>(t||(t=i.headers.get("Content-Type")||""),Ns(a)));s=dn(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 cn[r]=s,s}async function qs(e){let t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):ze(t)}async function Us(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 ze(a)}let n=e.poster,r=Ie(n),s=await He(n,r,t);return ze(s)}async function Fs(e,t){var n;try{if(!((n=e?.contentDocument)===null||n===void 0)&&n.body)return await st(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function Ws(e,t){return W(e,HTMLCanvasElement)?qs(e):W(e,HTMLVideoElement)?Us(e,t):W(e,HTMLIFrameElement)?Fs(e,t):e.cloneNode(mr(e))}var _s=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",mr=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function Xs(e,t,n){var r,s;if(mr(t))return t;let o=[];return _s(e)&&e.assignedNodes?o=te(e.assignedNodes()):W(e,HTMLIFrameElement)&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?o=te(e.contentDocument.body.childNodes):o=te(((s=e.shadowRoot)!==null&&s!==void 0?s:e).childNodes),o.length===0||W(e,HTMLVideoElement)||await o.reduce((i,a)=>i.then(()=>st(a,n)).then(d=>{d&&t.appendChild(d)}),Promise.resolve()),t}function Ys(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):zt(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(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 Vs(e,t){W(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),W(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function Js(e,t){if(W(e,HTMLSelectElement)){let r=Array.from(t.children).find(s=>e.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function Ks(e,t,n){return W(t,Element)&&(Ys(e,t,n),pr(e,t,n),Vs(e,t),Js(e,t)),t}async function Gs(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 st(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 st(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(r=>Ws(r,t)).then(r=>Xs(e,r,t)).then(r=>Ks(e,r,t)).then(r=>Gs(r,t))}var fr=/url\((['"]?)([^'"]+?)\1\)/g,Qs=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,Zs=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function eo(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function to(e){let t=[];return e.replace(fr,(n,r,s)=>(t.push(s),n)),t.filter(n=>!rt(n))}async function no(e,t,n,r,s){try{let o=n?or(t,n):t,i=Ie(t),a;if(s){let d=await s(o);a=dn(d,i)}else a=await He(o,i,r);return e.replace(eo(t),`$1${a}$3`)}catch{}return e}function ro(e,{preferredFontFormat:t}){return t?e.replace(Zs,n=>{for(;;){let[r,,s]=Qs.exec(n)||[];if(!s)return"";if(s===t)return`src: ${r};`}}):e}function bn(e){return e.search(fr)!==-1}async function It(e,t,n){if(!bn(e))return e;let r=ro(e,n);return to(r).reduce((o,i)=>o.then(a=>no(a,i,t,n)),Promise.resolve(r))}async function De(e,t,n){var r;let s=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(e);if(s){let o=await It(s,null,n);return t.style.setProperty(e,o,t.style.getPropertyPriority(e)),!0}return!1}async function so(e,t){await De("background",e,t)||await De("background-image",e,t),await De("mask",e,t)||await De("-webkit-mask",e,t)||await De("mask-image",e,t)||await De("-webkit-mask-image",e,t)}async function oo(e,t){let n=W(e,HTMLImageElement);if(!(n&&!rt(e.src))&&!(W(e,SVGImageElement)&&!rt(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,s=await He(r,Ie(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 io(e,t){let r=te(e.childNodes).map(s=>un(s,t));await Promise.all(r).then(()=>e)}async function un(e,t){W(e,Element)&&(await so(e,t),await oo(e,t),await io(e,t))}function gr(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 hr={};async function yr(e){let t=hr[e];if(t!=null)return t;let r=await(await fetch(e)).text();return t={url:e,cssText:r},hr[e]=t,t}async function xr(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),pn(a,t.fetchRequestInit,({result:d})=>(n=n.replace(i,`url(${d})`),[i,d]))});return Promise.all(o).then(()=>n)}function vr(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 ao(e,t){let n=[],r=[];return e.forEach(s=>{if("cssRules"in s)try{te(s.cssRules||[]).forEach((o,i)=>{if(o.type===CSSRule.IMPORT_RULE){let a=i+1,d=o.href,p=yr(d).then(b=>xr(b,t)).then(b=>vr(b).forEach(y=>{try{s.insertRule(y,y.startsWith("@import")?a+=1:s.cssRules.length)}catch(w){console.error("Error inserting rule from remote css",{rule:y,error:w})}})).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(yr(s.href).then(a=>xr(a,t)).then(a=>vr(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{te(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=>bn(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=te(e.ownerDocument.styleSheets),r=await ao(n,t);return lo(r)}function wr(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(wr(o))}),Array.from(r.children).forEach(o=>{o instanceof HTMLElement&&n(o)})}return n(e),t}async function kr(e,t){let n=await co(e,t),r=po(e);return(await Promise.all(n.filter(o=>r.has(wr(o.style.fontFamily))).map(o=>{let i=o.parentStyleSheet?o.parentStyleSheet.href:null;return It(o.cssText,i,t)}))).join(`
5
- `)}async function Er(e,t){let n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await kr(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 bo(e,t={}){let{width:n,height:r}=ln(e,t),s=await st(e,t,!0);return await Er(s,t),await un(s,t),gr(s,t),await cr(s,n,r)}async function uo(e,t={}){let{width:n,height:r}=ln(e,t),s=await bo(e,t),o=await ze(s),i=document.createElement("canvas"),a=i.getContext("2d"),d=t.pixelRatio||ar(),p=t.canvasWidth||n,b=t.canvasHeight||r;return i.width=p*d,i.height=b*d,t.skipAutoScale||lr(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 Sr(e,t={}){return(await uo(e,t)).toDataURL()}function mo(){let e=document.createElement("div");if(e.style.cssText=`
4
+ `)),ae.push(n),ae.length>tr&&ae.shift(),V({type:"console",category:`console.${t}`,message:n.args.join(" ").slice(0,200),timestamp:n.timestamp})}function er(t){t&&(tr=t);for(let e of Object.keys(Ae))console[e]=function(...n){Ws(e,n),Ae[e].apply(console,n)}}function ut(){return[...ae]}function nr(){ae=[]}function rr(){for(let t of Object.keys(Ae))console[t]=Ae[t]}var Ht=[],sr=50,Re,ze,Ie;function un(t){Ht.push(t),Ht.length>sr&&Ht.shift(),V({type:"network",category:t.failed?"network.error":"network.ok",message:`${t.method} ${t.url} \u2192 ${t.status} (${t.duration}ms)`,timestamp:t.timestamp,data:{status:t.status,duration:t.duration}})}function or(t){try{let e=new URL(t,window.location.origin),n=new URLSearchParams(e.search);for(let s of n.keys()){let o=s.toLowerCase();(o.includes("token")||o.includes("key")||o.includes("secret")||o.includes("password")||o.includes("auth"))&&n.set(s,"[REDACTED]")}let r=n.toString();return e.pathname+(r?"?"+r:"")}catch{return It(t)}}function Ys(){Re=window.fetch,window.fetch=async function(t,e){let n=e?.method?.toUpperCase()??"GET",r=typeof t=="string"?t:t instanceof URL?t.href:t.url,s=or(r),o=Date.now();try{let i=await Re.call(window,t,e);return un({method:n,url:s,status:i.status,statusText:i.statusText,duration:Date.now()-o,responseType:i.headers.get("content-type")??void 0,timestamp:o,failed:i.status>=400}),i}catch(i){throw un({method:n,url:s,status:0,statusText:"Network Error",duration:Date.now()-o,timestamp:o,failed:!0}),i}}}function Xs(){ze=XMLHttpRequest.prototype.open,Ie=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=function(t,e,...n){return this.__bs_method=t.toUpperCase(),this.__bs_url=or(typeof e=="string"?e:e.href),ze.apply(this,[t,e,...n])},XMLHttpRequest.prototype.send=function(t){let e=Date.now();return this.addEventListener("loadend",function(){un({method:this.__bs_method??"GET",url:this.__bs_url??"",status:this.status,statusText:this.statusText,duration:Date.now()-e,responseType:this.getResponseHeader("content-type")??void 0,timestamp:e,failed:this.status>=400||this.status===0})}),Ie.call(this,t)}}function ir(t){t&&(sr=t),Ys(),Xs()}function Dt(){return[...Ht]}function vt(){return Ht.filter(t=>t.failed)}function ar(){Ht=[]}function lr(){Re&&(window.fetch=Re),ze&&(XMLHttpRequest.prototype.open=ze),Ie&&(XMLHttpRequest.prototype.send=Ie)}var He=[],le=null,ce=null;function cr(){le=t=>{let e={message:t.message||"Unknown error",source:t.filename,lineno:t.lineno,colno:t.colno,stack:t.error?.stack,type:"error",timestamp:Date.now()};He.push(e),V({type:"error",category:"exception",message:e.message,timestamp:e.timestamp,data:{source:e.source,lineno:e.lineno}})},ce=t=>{let e=t.reason,n=e instanceof Error?e.message:typeof e=="string"?e:"Unhandled promise rejection",r={message:n,stack:e instanceof Error?e.stack:void 0,type:"unhandledrejection",timestamp:Date.now()};He.push(r),V({type:"error",category:"promise",message:n,timestamp:r.timestamp})},window.addEventListener("error",le),window.addEventListener("unhandledrejection",ce)}function ft(){return[...He]}function dr(){He=[]}function pr(){le&&window.removeEventListener("error",le),ce&&window.removeEventListener("unhandledrejection",ce),le=null,ce=null}var H=null,De=null,Be=null,Oe=null;function br(){if(H={timestamp:Date.now()},performance.getEntriesByType){let t=()=>{let[e]=performance.getEntriesByType("navigation");e&&H&&(H.pageLoadTime=Math.round(e.loadEventEnd-e.startTime),H.domContentLoaded=Math.round(e.domContentLoadedEventEnd-e.startTime));let n=performance.getEntriesByType("paint");for(let s of n)s.name==="first-paint"&&H&&(H.firstPaint=Math.round(s.startTime)),s.name==="first-contentful-paint"&&H&&(H.firstContentfulPaint=Math.round(s.startTime));H&&(H.resourceCount=performance.getEntriesByType("resource").length);let r=performance.memory;r&&H&&(H.memoryUsage={usedJSHeapSize:r.usedJSHeapSize,totalJSHeapSize:r.totalJSHeapSize})};document.readyState==="complete"?setTimeout(t,0):window.addEventListener("load",()=>setTimeout(t,100))}if(typeof PerformanceObserver<"u"){try{De=new PerformanceObserver(t=>{let e=t.getEntries(),n=e[e.length-1];n&&H&&(H.largestContentfulPaint=Math.round(n.startTime))}),De.observe({type:"largest-contentful-paint",buffered:!0})}catch{}try{let t=0;Be=new PerformanceObserver(e=>{for(let n of e.getEntries())n.hadRecentInput||(t+=n.value);H&&(H.cumulativeLayoutShift=Math.round(t*1e3)/1e3)}),Be.observe({type:"layout-shift",buffered:!0})}catch{}try{Oe=new PerformanceObserver(t=>{let[e]=t.getEntries();e&&H&&(H.firstInputDelay=Math.round(e.processingStart-e.startTime))}),Oe.observe({type:"first-input",buffered:!0})}catch{}}}function Bt(){return H&&(H.timestamp=Date.now()),H?{...H}:null}function ur(){De?.disconnect(),Be?.disconnect(),Oe?.disconnect(),De=null,Be=null,Oe=null,H=null}function fr(t,e){if(t.match(/^[a-z]+:\/\//i))return t;if(t.match(/^\/\//))return window.location.protocol+t;if(t.match(/^[a-z]+:/i))return t;let n=document.implementation.createHTMLDocument(),r=n.createElement("base"),s=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(s),e&&(r.href=e),s.href=t,s.href}var mr=(()=>{let t=0,e=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(t+=1,`u${e()}${t}`)})();function st(t){let e=[];for(let n=0,r=t.length;n<r;n++)e.push(t[n]);return e}var Ot=null;function je(t={}){return Ot||(t.includeStyleProperties?(Ot=t.includeStyleProperties,Ot):(Ot=st(window.getComputedStyle(document.documentElement)),Ot))}function Ne(t,e){let r=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return r?parseFloat(r.replace("px","")):0}function Vs(t){let e=Ne(t,"border-left-width"),n=Ne(t,"border-right-width");return t.clientWidth+e+n}function Js(t){let e=Ne(t,"border-top-width"),n=Ne(t,"border-bottom-width");return t.clientHeight+e+n}function fn(t,e={}){let n=e.width||Vs(t),r=e.height||Js(t);return{width:n,height:r}}function gr(){let t,e;try{e=process}catch{}let n=e&&e.env?e.env.devicePixelRatio:null;return n&&(t=parseInt(n,10),Number.isNaN(t)&&(t=1)),t||window.devicePixelRatio||1}var tt=16384;function hr(t){(t.width>tt||t.height>tt)&&(t.width>tt&&t.height>tt?t.width>t.height?(t.height*=tt/t.width,t.width=tt):(t.width*=tt/t.height,t.height=tt):t.width>tt?(t.height*=tt/t.width,t.width=tt):(t.width*=tt/t.height,t.height=tt))}function Nt(t){return new Promise((e,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>e(r))})},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=t})}async function Ks(t){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(t)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function vr(t,e,n){let r="http://www.w3.org/2000/svg",s=document.createElementNS(r,"svg"),o=document.createElementNS(r,"foreignObject");return s.setAttribute("width",`${e}`),s.setAttribute("height",`${n}`),s.setAttribute("viewBox",`0 0 ${e} ${n}`),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("externalResourcesRequired","true"),s.appendChild(o),o.appendChild(t),Ks(s)}var W=(t,e)=>{if(t instanceof e)return!0;let n=Object.getPrototypeOf(t);return n===null?!1:n.constructor.name===e.name||W(n,e)};function Gs(t){let e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}function Qs(t,e){return je(e).map(n=>{let r=t.getPropertyValue(n),s=t.getPropertyPriority(n);return`${n}: ${r}${s?" !important":""};`}).join(" ")}function Zs(t,e,n,r){let s=`.${t}:${e}`,o=n.cssText?Gs(n):Qs(n,r);return document.createTextNode(`${s}{${o}}`)}function yr(t,e,n,r){let s=window.getComputedStyle(t,n),o=s.getPropertyValue("content");if(o===""||o==="none")return;let i=mr();try{e.className=`${e.className} ${i}`}catch{return}let a=document.createElement("style");a.appendChild(Zs(i,n,s,r)),e.appendChild(a)}function xr(t,e,n){yr(t,e,":before",n),yr(t,e,":after",n)}var wr="application/font-woff",kr="image/jpeg",to={woff:wr,woff2:wr,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:kr,jpeg:kr,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function eo(t){let e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}function jt(t){let e=eo(t).toLowerCase();return to[e]||""}function no(t){return t.split(/,/)[1]}function de(t){return t.search(/^(data:)/)!==-1}function gn(t,e){return`data:${e};base64,${t}`}async function hn(t,e,n){let r=await fetch(t,e);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);let s=await r.blob();return new Promise((o,i)=>{let a=new FileReader;a.onerror=i,a.onloadend=()=>{try{o(n({res:r,result:a.result}))}catch(c){i(c)}},a.readAsDataURL(s)})}var mn={};function ro(t,e,n){let r=t.replace(/\?.*/,"");return n&&(r=t),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),e?`[${e}]${r}`:r}async function qt(t,e,n){let r=ro(t,e,n.includeQueryParams);if(mn[r]!=null)return mn[r];n.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+new Date().getTime());let s;try{let o=await hn(t,n.fetchRequestInit,({res:i,result:a})=>(e||(e=i.headers.get("Content-Type")||""),no(a)));s=gn(o,e)}catch(o){s=n.imagePlaceholder||"";let i=`Failed to fetch resource: ${t}`;o&&(i=typeof o=="string"?o:o.message),i&&console.warn(i)}return mn[r]=s,s}async function so(t){let e=t.toDataURL();return e==="data:,"?t.cloneNode(!1):Nt(e)}async function oo(t,e){if(t.currentSrc){let o=document.createElement("canvas"),i=o.getContext("2d");o.width=t.clientWidth,o.height=t.clientHeight,i?.drawImage(t,0,0,o.width,o.height);let a=o.toDataURL();return Nt(a)}let n=t.poster,r=jt(n),s=await qt(n,r,e);return Nt(s)}async function io(t,e){var n;try{if(!((n=t?.contentDocument)===null||n===void 0)&&n.body)return await pe(t.contentDocument.body,e,!0)}catch{}return t.cloneNode(!1)}async function ao(t,e){return W(t,HTMLCanvasElement)?so(t):W(t,HTMLVideoElement)?oo(t,e):W(t,HTMLIFrameElement)?io(t,e):t.cloneNode(Er(t))}var lo=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SLOT",Er=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SVG";async function co(t,e,n){var r,s;if(Er(e))return e;let o=[];return lo(t)&&t.assignedNodes?o=st(t.assignedNodes()):W(t,HTMLIFrameElement)&&(!((r=t.contentDocument)===null||r===void 0)&&r.body)?o=st(t.contentDocument.body.childNodes):o=st(((s=t.shadowRoot)!==null&&s!==void 0?s:t).childNodes),o.length===0||W(t,HTMLVideoElement)||await o.reduce((i,a)=>i.then(()=>pe(a,n)).then(c=>{c&&e.appendChild(c)}),Promise.resolve()),e}function po(t,e,n){let r=e.style;if(!r)return;let s=window.getComputedStyle(t);s.cssText?(r.cssText=s.cssText,r.transformOrigin=s.transformOrigin):je(n).forEach(o=>{let i=s.getPropertyValue(o);o==="font-size"&&i.endsWith("px")&&(i=`${Math.floor(parseFloat(i.substring(0,i.length-2)))-.1}px`),W(t,HTMLIFrameElement)&&o==="display"&&i==="inline"&&(i="block"),o==="d"&&e.getAttribute("d")&&(i=`path(${e.getAttribute("d")})`),r.setProperty(o,i,s.getPropertyPriority(o))})}function bo(t,e){W(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),W(t,HTMLInputElement)&&e.setAttribute("value",t.value)}function uo(t,e){if(W(t,HTMLSelectElement)){let r=Array.from(e.children).find(s=>t.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function fo(t,e,n){return W(e,Element)&&(po(t,e,n),xr(t,e,n),bo(t,e),uo(t,e)),e}async function mo(t,e){let n=t.querySelectorAll?t.querySelectorAll("use"):[];if(n.length===0)return t;let r={};for(let o=0;o<n.length;o++){let a=n[o].getAttribute("xlink:href");if(a){let c=t.querySelector(a),p=document.querySelector(a);!c&&p&&!r[a]&&(r[a]=await pe(p,e,!0))}}let s=Object.values(r);if(s.length){let o="http://www.w3.org/1999/xhtml",i=document.createElementNS(o,"svg");i.setAttribute("xmlns",o),i.style.position="absolute",i.style.width="0",i.style.height="0",i.style.overflow="hidden",i.style.display="none";let a=document.createElementNS(o,"defs");i.appendChild(a);for(let c=0;c<s.length;c++)a.appendChild(s[c]);t.appendChild(i)}return t}async function pe(t,e,n){return!n&&e.filter&&!e.filter(t)?null:Promise.resolve(t).then(r=>ao(r,e)).then(r=>co(t,r,e)).then(r=>fo(t,r,e)).then(r=>mo(r,e))}var Lr=/url\((['"]?)([^'"]+?)\1\)/g,go=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ho=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function vo(t){let e=t.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`,"g")}function yo(t){let e=[];return t.replace(Lr,(n,r,s)=>(e.push(s),n)),e.filter(n=>!de(n))}async function xo(t,e,n,r,s){try{let o=n?fr(e,n):e,i=jt(e),a;if(s){let c=await s(o);a=gn(c,i)}else a=await qt(o,i,r);return t.replace(vo(e),`$1${a}$3`)}catch{}return t}function wo(t,{preferredFontFormat:e}){return e?t.replace(ho,n=>{for(;;){let[r,,s]=go.exec(n)||[];if(!s)return"";if(s===e)return`src: ${r};`}}):t}function vn(t){return t.search(Lr)!==-1}async function qe(t,e,n){if(!vn(t))return t;let r=wo(t,n);return yo(r).reduce((o,i)=>o.then(a=>xo(a,i,e,n)),Promise.resolve(r))}async function Ut(t,e,n){var r;let s=(r=e.style)===null||r===void 0?void 0:r.getPropertyValue(t);if(s){let o=await qe(s,null,n);return e.style.setProperty(t,o,e.style.getPropertyPriority(t)),!0}return!1}async function ko(t,e){await Ut("background",t,e)||await Ut("background-image",t,e),await Ut("mask",t,e)||await Ut("-webkit-mask",t,e)||await Ut("mask-image",t,e)||await Ut("-webkit-mask-image",t,e)}async function Eo(t,e){let n=W(t,HTMLImageElement);if(!(n&&!de(t.src))&&!(W(t,SVGImageElement)&&!de(t.href.baseVal)))return;let r=n?t.src:t.href.baseVal,s=await qt(r,jt(r),e);await new Promise((o,i)=>{t.onload=o,t.onerror=e.onImageErrorHandler?(...c)=>{try{o(e.onImageErrorHandler(...c))}catch(p){i(p)}}:i;let a=t;a.decode&&(a.decode=o),a.loading==="lazy"&&(a.loading="eager"),n?(t.srcset="",t.src=s):t.href.baseVal=s})}async function Lo(t,e){let r=st(t.childNodes).map(s=>yn(s,e));await Promise.all(r).then(()=>t)}async function yn(t,e){W(t,Element)&&(await ko(t,e),await Eo(t,e),await Lo(t,e))}function Sr(t,e){let{style:n}=t;e.backgroundColor&&(n.backgroundColor=e.backgroundColor),e.width&&(n.width=`${e.width}px`),e.height&&(n.height=`${e.height}px`);let r=e.style;return r!=null&&Object.keys(r).forEach(s=>{n[s]=r[s]}),t}var Cr={};async function Pr(t){let e=Cr[t];if(e!=null)return e;let r=await(await fetch(t)).text();return e={url:t,cssText:r},Cr[t]=e,e}async function Tr(t,e){let n=t.cssText,r=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let a=i.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,t.url).href),hn(a,e.fetchRequestInit,({result:c})=>(n=n.replace(i,`url(${c})`),[i,c]))});return Promise.all(o).then(()=>n)}function $r(t){if(t==null)return[];let e=[],n=/(\/\*[\s\S]*?\*\/)/gi,r=t.replace(n,""),s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){let c=s.exec(r);if(c===null)break;e.push(c[0])}r=r.replace(s,"");let o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(i,"gi");for(;;){let c=o.exec(r);if(c===null){if(c=a.exec(r),c===null)break;o.lastIndex=a.lastIndex}else a.lastIndex=o.lastIndex;e.push(c[0])}return e}async function So(t,e){let n=[],r=[];return t.forEach(s=>{if("cssRules"in s)try{st(s.cssRules||[]).forEach((o,i)=>{if(o.type===CSSRule.IMPORT_RULE){let a=i+1,c=o.href,p=Pr(c).then(b=>Tr(b,e)).then(b=>$r(b).forEach(v=>{try{s.insertRule(v,v.startsWith("@import")?a+=1:s.cssRules.length)}catch(S){console.error("Error inserting rule from remote css",{rule:v,error:S})}})).catch(b=>{console.error("Error loading remote css",b.toString())});r.push(p)}})}catch(o){let i=t.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&r.push(Pr(s.href).then(a=>Tr(a,e)).then(a=>$r(a).forEach(c=>{i.insertRule(c,i.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",o)}}),Promise.all(r).then(()=>(t.forEach(s=>{if("cssRules"in s)try{st(s.cssRules||[]).forEach(o=>{n.push(o)})}catch(o){console.error(`Error while reading CSS rules from ${s.href}`,o)}}),n))}function Co(t){return t.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>vn(e.style.getPropertyValue("src")))}async function Po(t,e){if(t.ownerDocument==null)throw new Error("Provided element is not within a Document");let n=st(t.ownerDocument.styleSheets),r=await So(n,e);return Co(r)}function Mr(t){return t.trim().replace(/["']/g,"")}function To(t){let e=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(o=>{e.add(Mr(o))}),Array.from(r.children).forEach(o=>{o instanceof HTMLElement&&n(o)})}return n(t),e}async function Ar(t,e){let n=await Po(t,e),r=To(t);return(await Promise.all(n.filter(o=>r.has(Mr(o.style.fontFamily))).map(o=>{let i=o.parentStyleSheet?o.parentStyleSheet.href:null;return qe(o.cssText,i,e)}))).join(`
5
+ `)}async function Rr(t,e){let n=e.fontEmbedCSS!=null?e.fontEmbedCSS:e.skipFonts?null:await Ar(t,e);if(n){let r=document.createElement("style"),s=document.createTextNode(n);r.appendChild(s),t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r)}}async function $o(t,e={}){let{width:n,height:r}=fn(t,e),s=await pe(t,e,!0);return await Rr(s,e),await yn(s,e),Sr(s,e),await vr(s,n,r)}async function Mo(t,e={}){let{width:n,height:r}=fn(t,e),s=await $o(t,e),o=await Nt(s),i=document.createElement("canvas"),a=i.getContext("2d"),c=e.pixelRatio||gr(),p=e.canvasWidth||n,b=e.canvasHeight||r;return i.width=p*c,i.height=b*c,e.skipAutoScale||hr(i),i.style.width=`${p}`,i.style.height=`${b}`,e.backgroundColor&&(a.fillStyle=e.backgroundColor,a.fillRect(0,0,i.width,i.height)),a.drawImage(o,0,0,i.width,i.height),i}async function zr(t,e={}){return(await Mo(t,e)).toDataURL()}function Ao(){let t=document.createElement("div");if(t.style.cssText=`
6
6
  position: fixed; inset: 0; z-index: 2147483647;
7
7
  background: white; opacity: 0;
8
8
  pointer-events: none;
9
9
  animation: bs-flash 0.4s ease-out forwards;
10
- `,!document.getElementById("bs-flash-style")){let t=document.createElement("style");t.id="bs-flash-style",t.textContent=`
10
+ `,!document.getElementById("bs-flash-style")){let e=document.createElement("style");e.id="bs-flash-style",e.textContent=`
11
11
  @keyframes bs-flash {
12
12
  0% { opacity: 0; }
13
13
  15% { opacity: 0.7; }
14
14
  100% { opacity: 0; }
15
15
  }
16
- `,document.head.appendChild(t)}document.body.appendChild(e),e.addEventListener("animationend",()=>e.remove())}var fo=e=>{let t=e.tagName.toLowerCase();return t==="bugstash-root"||t==="bugstash-overlay"||e.classList?.contains("bs-fab")||e.classList?.contains("bs-toolbar")||e.classList?.contains("bs-modal")||e.classList?.contains("bs-backdrop")||e.id==="bs-flash-style"||e.id==="bugstash-live-pins"||e.id==="bugstash-pin-overlay"};async function mn(e=!1){e&&mo();try{let t=await go();if(t)return t}catch{}try{return await Lr()}catch{try{return await Lr(!0)}catch{return null}}}async function go(){if(!navigator.mediaDevices?.getDisplayMedia)return null;let e=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser",width:{ideal:window.screen.width*(window.devicePixelRatio||1)},height:{ideal:window.screen.height*(window.devicePixelRatio||1)}},audio:!1,preferCurrentTab:!0,selfBrowserSurface:"include",monitorTypeSurfaces:"exclude"});try{if(!e.getVideoTracks()[0])return null;let n=document.createElement("video");n.srcObject=e,n.muted=!0,n.playsInline=!0,await n.play(),await new Promise(o=>{if(n.readyState>=2){o();return}n.onloadeddata=()=>o()}),await new Promise(o=>requestAnimationFrame(()=>o()));let r=document.createElement("canvas");r.width=n.videoWidth,r.height=n.videoHeight;let s=r.getContext("2d");return s?(s.drawImage(n,0,0),r.toDataURL("image/png")):null}finally{e.getTracks().forEach(t=>t.stop())}}async function Lr(e=!1){let t=window.getComputedStyle(document.body).backgroundColor,n=window.getComputedStyle(document.documentElement).backgroundColor,r=i=>!i||i==="transparent"||i==="rgba(0, 0, 0, 0)",s=r(t)?r(n)?"#ffffff":n:t;return await Sr(document.body,{pixelRatio:Math.min(window.devicePixelRatio||1,2),backgroundColor:s,width:window.innerWidth,height:window.innerHeight,filter:i=>{if(e&&i.tagName==="IMG"){let a=i.src||"";if(a&&!a.startsWith(window.location.origin)&&!a.startsWith("data:"))return!1}return!fo(i)},imagePlaceholder:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"})}var ho="https://bugstash-backend.vercel.app",Cr="https://bugstash-backend.vercel.app",X=ho,fn=!1;function Tr(e){X=e.replace(/\/$/,""),fn=!1}function Pr(){return X}async function se(e,t){try{return await fetch(e,t)}catch(n){if(fn)throw n;fn=!0;let r=X;X=Cr;let s=e.replace(r,Cr);return fetch(s,t)}}var gn="bugstash_auth";function hn(){try{let e=localStorage.getItem(gn);if(!e)return null;let t=JSON.parse(e);return t.tokens.expiresAt<Date.now(),t}catch{return null}}function $r(e){localStorage.setItem(gn,JSON.stringify(e))}function yo(){localStorage.removeItem(gn)}function ne(){return hn()?.user||null}function Mr(){return hn()?.tokens.accessToken||null}async function ge(){let e=hn();if(!e)return{"Content-Type":"application/json"};if(e.tokens.expiresAt<Date.now()+6e4)try{let t=await se(`${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,$r(e))}}catch{}return{"Content-Type":"application/json",Authorization:`Bearer ${e.tokens.accessToken}`}}async function Dt(e,t,n){try{let s=await(await se(`${X}/api/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:t,projectId:n})})).json();return s.success&&$r({user:s.data.user,tokens:s.data.tokens}),s}catch{return{success:!1,error:"Network error"}}}async function Bt(){yo()}async function yn(e){try{let t=await ge();return await(await se(`${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 Ar(e,t){try{let n=await ge();return await(await se(`${X}/api/pins/by-page?projectId=${e}&pathname=${encodeURIComponent(t)}`,{headers:n})).json()}catch{return{success:!1,error:"Network error"}}}async function xn(e){try{let t=await ge();return await(await se(`${X}/api/pins`,{method:"POST",headers:t,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error"}}}async function Ot(e,t){try{let n=await ge();return await(await se(`${X}/api/pins/${e}`,{method:"PUT",headers:n,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error"}}}async function Rr(e){try{let t=await ge();return await(await se(`${X}/api/pins/${e}`,{method:"DELETE",headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function zr(e){try{let t=await ge();return await(await se(`${X}/api/pins/${e}/comments`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}async function vn(e,t,n=[]){try{let r=await ge();return await(await se(`${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 Ir(e){try{let t=await ge();return await(await se(`${X}/api/members/for-project/${e}`,{headers:t})).json()}catch{return{success:!1,error:"Network error"}}}var Ht=null;function Hr(e){return Ht||(Ht=(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}})(),Ht)}var wn="bugstash_offline_queue";function kn(e){let t=Dr();t.push({...e,id:Math.random().toString(36).slice(2),timestamp:Date.now()}),localStorage.setItem(wn,JSON.stringify(t))}function Dr(){try{return JSON.parse(localStorage.getItem(wn)||"[]")}catch{return[]}}async function xo(){let e=Dr();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 xn(r.data);break;case"create_comment":s=await vn(r.data.pinId,r.data.body,r.data.mentions);break;case"update_pin":s=await Ot(r.data.pinId,r.data.updates);break;case"submit_report":s=await yn(r.data);break;default:s={success:!1,error:"Unknown action"}}s.success?t++:n.push(r)}catch{n.push(r)}return localStorage.setItem(wn,JSON.stringify(n)),t}typeof window<"u"&&window.addEventListener("online",()=>{xo().catch(()=>{})});var En=[{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 Nt(){return En}function jt(e){return En.find(t=>t.id===e)}function Br(){return En[0]}var Sn=[{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 qt(){return Sn}function ot(e){return Sn.find(t=>t.id===e)}function Or(){return Sn[0]}var Nr=`
16
+ `,document.head.appendChild(e)}document.body.appendChild(t),t.addEventListener("animationend",()=>t.remove())}var Ro=t=>{let e=t.tagName.toLowerCase();return e==="bugstash-root"||e==="bugstash-overlay"||t.classList?.contains("bs-fab")||t.classList?.contains("bs-toolbar")||t.classList?.contains("bs-modal")||t.classList?.contains("bs-backdrop")||t.id==="bs-flash-style"||t.id==="bugstash-live-pins"||t.id==="bugstash-pin-overlay"};async function Ue(t=!1){t&&Ao();try{let e=await zo();if(e)return e}catch{}try{return await Ir()}catch{try{return await Ir(!0)}catch{return null}}}async function zo(){if(!navigator.mediaDevices?.getDisplayMedia)return null;let t=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser",width:{ideal:window.screen.width*(window.devicePixelRatio||1)},height:{ideal:window.screen.height*(window.devicePixelRatio||1)}},audio:!1,preferCurrentTab:!0,selfBrowserSurface:"include",monitorTypeSurfaces:"exclude"});try{if(!t.getVideoTracks()[0])return null;let n=document.createElement("video");n.srcObject=t,n.muted=!0,n.playsInline=!0,await n.play(),await new Promise(o=>{if(n.readyState>=2){o();return}n.onloadeddata=()=>o()}),await new Promise(o=>requestAnimationFrame(()=>o()));let r=document.createElement("canvas");r.width=n.videoWidth,r.height=n.videoHeight;let s=r.getContext("2d");return s?(s.drawImage(n,0,0),r.toDataURL("image/png")):null}finally{t.getTracks().forEach(e=>e.stop())}}async function Ir(t=!1){let e=window.getComputedStyle(document.body).backgroundColor,n=window.getComputedStyle(document.documentElement).backgroundColor,r=i=>!i||i==="transparent"||i==="rgba(0, 0, 0, 0)",s=r(e)?r(n)?"#ffffff":n:e;return await zr(document.body,{pixelRatio:Math.min(window.devicePixelRatio||1,2),backgroundColor:s,width:window.innerWidth,height:window.innerHeight,filter:i=>{if(t&&i.tagName==="IMG"){let a=i.src||"";if(a&&!a.startsWith(window.location.origin)&&!a.startsWith("data:"))return!1}return!Ro(i)},imagePlaceholder:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"})}var Io="https://bugstash-backend.vercel.app",Hr="https://bugstash-backend.vercel.app",X=Io,xn=!1;function Dr(t){X=t.replace(/\/$/,""),xn=!1}function Br(){return X}async function ct(t,e){try{return await fetch(t,e)}catch(n){if(xn)throw n;xn=!0;let r=X;X=Hr;let s=t.replace(r,Hr);return fetch(s,e)}}var wn="bugstash_auth";function kn(){try{let t=localStorage.getItem(wn);if(!t)return null;let e=JSON.parse(t);return e.tokens.expiresAt<Date.now(),e}catch{return null}}function Or(t){localStorage.setItem(wn,JSON.stringify(t))}function Ho(){localStorage.removeItem(wn)}function ot(){return kn()?.user||null}function Nr(){return kn()?.tokens.accessToken||null}async function yt(){let t=kn();if(!t)return{"Content-Type":"application/json"};if(t.tokens.expiresAt<Date.now()+6e4)try{let e=await ct(`${X}/api/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t.tokens.refreshToken})});if(e.ok){let n=await e.json();n.success&&(t.tokens=n.data,Or(t))}}catch{}return{"Content-Type":"application/json",Authorization:`Bearer ${t.tokens.accessToken}`}}async function _e(t,e,n){try{let s=await(await ct(`${X}/api/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,password:e,projectId:n})})).json();return s.success&&Or({user:s.data.user,tokens:s.data.tokens}),s}catch{return{success:!1,error:"Network error"}}}async function We(){Ho()}async function En(t){try{let e=await yt();return await(await ct(`${X}/api/reports`,{method:"POST",headers:e,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error - could not reach BugStash"}}}async function jr(t,e){try{let n=await yt();return await(await ct(`${X}/api/pins/by-page?projectId=${t}&pathname=${encodeURIComponent(e)}`,{headers:n})).json()}catch{return{success:!1,error:"Network error"}}}async function Ln(t){try{let e=await yt();return await(await ct(`${X}/api/pins`,{method:"POST",headers:e,body:JSON.stringify(t)})).json()}catch{return{success:!1,error:"Network error"}}}async function Ye(t,e){try{let n=await yt();return await(await ct(`${X}/api/pins/${t}`,{method:"PUT",headers:n,body:JSON.stringify(e)})).json()}catch{return{success:!1,error:"Network error"}}}async function qr(t){try{let e=await yt();return await(await ct(`${X}/api/pins/${t}`,{method:"DELETE",headers:e})).json()}catch{return{success:!1,error:"Network error"}}}async function Ur(t){try{let e=await yt();return await(await ct(`${X}/api/pins/${t}/comments`,{headers:e})).json()}catch{return{success:!1,error:"Network error"}}}async function Sn(t,e,n=[]){try{let r=await yt();return await(await ct(`${X}/api/pins/${t}/comments`,{method:"POST",headers:r,body:JSON.stringify({body:e,mentions:n})})).json()}catch{return{success:!1,error:"Network error"}}}async function Fr(t){try{let e=await yt();return await(await ct(`${X}/api/members/for-project/${t}`,{headers:e})).json()}catch{return{success:!1,error:"Network error"}}}var Fe=null;function _r(t){return Fe||(Fe=(async()=>{try{let e=await fetch(`${X}/api/orgs/projects/${encodeURIComponent(t)}/verify-domain`,{headers:{"Content-Type":"application/json"}});return e.ok?(await e.json()).allowed===!0:!1}catch{return!1}})(),Fe)}var Cn="bugstash_offline_queue";function Pn(t){let e=Wr();e.push({...t,id:Math.random().toString(36).slice(2),timestamp:Date.now()}),localStorage.setItem(Cn,JSON.stringify(e))}function Wr(){try{return JSON.parse(localStorage.getItem(Cn)||"[]")}catch{return[]}}async function Do(){let t=Wr();if(t.length===0)return 0;let e=0,n=[];for(let r of t)try{let s;switch(r.type){case"create_pin":s=await Ln(r.data);break;case"create_comment":s=await Sn(r.data.pinId,r.data.body,r.data.mentions);break;case"update_pin":s=await Ye(r.data.pinId,r.data.updates);break;case"submit_report":s=await En(r.data);break;default:s={success:!1,error:"Unknown action"}}s.success?e++:n.push(r)}catch{n.push(r)}return localStorage.setItem(Cn,JSON.stringify(n)),e}typeof window<"u"&&window.addEventListener("online",()=>{Do().catch(()=>{})});var Tn=[{id:"slate",name:"Slate",preview:["#0f1117","#6E9ED0"],vars:{"--bs-bg":"#0f1117","--bs-bg2":"#1a1d27","--bs-bg3":"#2a2d37","--bs-text":"#e8eaed","--bs-muted":"#9ca3af","--bs-border":"#2a2d37","--bs-accent":"#6E9ED0","--bs-accent2":"#C3CAD6","--bs-fab1":"#6E9ED0","--bs-fab2":"#4a7ba8","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"black",name:"Dark",preview:["#0a0a0a","#ffffff"],vars:{"--bs-bg":"#0a0a0a","--bs-bg2":"#141414","--bs-bg3":"#1e1e1e","--bs-text":"#f5f5f5","--bs-muted":"#737373","--bs-border":"#262626","--bs-accent":"#f5f5f5","--bs-accent2":"#d4d4d4","--bs-fab1":"#262626","--bs-fab2":"#171717","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#ef4444","--bs-green":"#22c55e","--bs-orange":"#f97316","--bs-yellow":"#eab308"}},{id:"white",name:"Light",preview:["#ffffff","#0a0a0a"],vars:{"--bs-bg":"#ffffff","--bs-bg2":"#f5f5f5","--bs-bg3":"#e5e5e5","--bs-text":"#0a0a0a","--bs-muted":"#737373","--bs-border":"#e5e5e5","--bs-accent":"#0a0a0a","--bs-accent2":"#404040","--bs-fab1":"#0a0a0a","--bs-fab2":"#262626","--bs-radius":"12px","--bs-radius-sm":"8px","--bs-red":"#dc2626","--bs-green":"#16a34a","--bs-orange":"#ea580c","--bs-yellow":"#ca8a04"}}];function Xe(){return Tn}function Ve(t){return Tn.find(e=>e.id===t)}function Yr(){return Tn[0]}var $n=[{id:"classic",name:"Center",description:"Centered modal",tabPosition:"top"},{id:"drawer-right",name:"Right Drawer",description:"Slides from right",tabPosition:"top"},{id:"bottom-sheet",name:"Bottom Sheet",description:"Slides from bottom",tabPosition:"top"},{id:"sidebar-tabs",name:"Sidebar",description:"Side navigation",tabPosition:"left"}];function Je(){return $n}function be(t){return $n.find(e=>e.id===t)}function Xr(){return $n[0]}var Vr=`
17
17
  /* \u2500\u2500 1. Classic (default \u2014 no overrides) \u2500\u2500 */
18
18
 
19
19
  /* \u2500\u2500 2. Drawer Right \u2500\u2500 */
@@ -73,229 +73,374 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
73
73
  }
74
74
  .bs-ly-sidebar-tabs .bs-tab-divider { display: none; }
75
75
  .bs-ly-sidebar-tabs .bs-scroll { flex: 1; }
76
- `;var Ne=null,Ut=0,vo=5e3,Be=new Map,Oe=null,Ft=new Set;function it(e){Oe=e,Ut=Date.now(),wo()}function wo(){Ne||(Ne=setInterval(ko,vo))}async function ko(){if(!Oe)return;let e=Mr();if(e)try{let t=Pr(),n=window.location.pathname,r=await fetch(`${t}/api/pins/poll?projectId=${Oe}&pathname=${encodeURIComponent(n)}&since=${Ut}`,{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||[];Ut=s.serverTime||s.data?.serverTime||Date.now();for(let i of o)Ft.has(i.id)?jr("pin:updated",{type:"pin:updated",projectId:Oe,data:i,userId:"",timestamp:Date.now()}):(Ft.add(i.id),jr("pin:created",{type:"pin:created",projectId:Oe,data:i,userId:"",timestamp:Date.now()}))}catch{}}function qr(){Ne&&(clearInterval(Ne),Ne=null),Oe=null,Ft.clear(),Ut=0}function at(e,t){return Be.has(e)||Be.set(e,new Set),Be.get(e).add(t),()=>{Be.get(e)?.delete(t)}}function jr(e,t){Be.get(e)?.forEach(n=>n(t)),Be.get("*")?.forEach(n=>n(t))}function Ln(e){Ft=new Set(e)}function Ur(){return Ne!==null}var Yt,_=null,$=null,z=[],Xr=[],je=!1,Ue=null,Eo="",qe=null,_t=null,Tn=[],lt=null,Pn=null,Fr={open:"#f97316",in_progress:"#3b82f6",resolved:"#22c55e",closed:"#6b7280"},Xt={critical:"#ef4444",high:"#f97316",medium:"#eab308",low:"#6b7280"};function ct(e,t){Yt=e,Pn=t,Eo=window.location.pathname,$o(),Gr(),Mo(),Do(),Bo(),So()}function Yr(){Lo(),_?.remove(),_=null,$?.remove(),$=null,Pn=null,z=[]}function Fe(e){return je=e!==void 0?e:!je,$&&$.style.setProperty("display",je?"block":"none","important"),je}function Vt(){return je}function Vr(e){try{let t=document.documentElement.scrollWidth||document.body.scrollWidth||1,n=document.documentElement.scrollHeight||document.body.scrollHeight||1,r=window.scrollX,s=window.scrollY,o=$n(e.elementSelector,e.elementXPath),i=Wt(e)&&e.xPercent>=0&&e.xPercent<=1&&e.yPercent>=0&&e.yPercent<=1;if(i&&o){let a=o.getBoundingClientRect();if(a.width>0&&a.height>0){let d=a.left+e.xPercent*a.width,p=a.top+e.yPercent*a.height;return{left:`${d}px`,top:`${p}px`}}}if(i)return e.pageX>0||e.pageY>0?{left:`${e.pageX-r}px`,top:`${e.pageY-s}px`}:{left:`${e.xPercent*t-r}px`,top:`${e.yPercent*n-s}px`};if(o){let a=o.getBoundingClientRect();if(a.width>0&&a.height>0){if(e.pageX>0||e.pageY>0){let d=Wt(e)?e.xPercent/100*t:e.pageX,p=Wt(e)?e.yPercent/100*n:e.pageY,b=a.left+a.width/2,y=a.top+a.height/2,w=d-r,k=p-s;return Math.abs(w-b)+Math.abs(k-y)>100?{left:`${b}px`,top:`${y}px`}:{left:`${w}px`,top:`${k}px`}}return{left:`${a.left+a.width/2}px`,top:`${a.top+a.height/2}px`}}}return Wt(e)?{left:`${e.xPercent/100*t-r}px`,top:`${e.yPercent/100*n-s}px`}:{left:`${e.pageX-r}px`,top:`${e.pageY-s}px`}}catch{let t=(e.pageX||0)-(window.scrollX||0),n=(e.pageY||0)-(window.scrollY||0);return{left:`${t}px`,top:`${n}px`}}}function Wt(e){return e.xPercent!=null&&e.yPercent!=null&&(e.xPercent!==0||e.yPercent!==0||e.pageX===0&&e.pageY===0)}function $n(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 So(){window.addEventListener("scroll",ke,{passive:!0}),window.addEventListener("resize",ke,{passive:!0}),window.addEventListener("keydown",Jr),_t=new MutationObserver(e=>{e.every(n=>_?.contains(n.target)||$?.contains(n.target))||ke()}),_t.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]}),typeof ResizeObserver<"u"&&(lt=new ResizeObserver(()=>ke()))}function Lo(){window.removeEventListener("scroll",ke),window.removeEventListener("resize",ke),window.removeEventListener("keydown",Jr),Kr(),_t?.disconnect(),_t=null,lt?.disconnect(),lt=null,qe&&(cancelAnimationFrame(qe),qe=null)}function Jr(e){e.key==="Escape"&&(Ue?he():je&&(_?.querySelectorAll(".bs-lp-form").forEach(t=>t.remove()),Fe(!1)))}function ke(){qe||(qe=requestAnimationFrame(()=>{qe=null,Co()}))}function Co(){if(!_)return;_.querySelectorAll(".bs-lp").forEach(t=>{let n=t.dataset.pinId,r=z.find(o=>o.id===n);if(!r)return;let s=Vr(r);t.style.left=s.left,t.style.top=s.top})}function To(e){let t=[],n=e.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;(s==="auto"||s==="scroll"||o==="auto"||o==="scroll")&&(n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth)&&t.push(n),n=n.parentElement}return t}function Po(){Kr();let e=new Set;for(let t of z){let n=$n(t.elementSelector,t.elementXPath);if(!n)continue;let r=To(n);for(let s of r){if(e.has(s))continue;e.add(s);let o=()=>ke();s.addEventListener("scroll",o,{passive:!0}),Tn.push(()=>s.removeEventListener("scroll",o))}}}function Kr(){for(let e of Tn)e();Tn=[]}function $o(){if(_)return;_=document.createElement("div"),_.id="bugstash-live-pins",$=document.createElement("bugstash-overlay"),$.style.setProperty("display","none","important"),$.style.setProperty("position","fixed","important"),$.style.setProperty("inset","0","important"),$.style.setProperty("z-index","2147483641","important"),$.style.setProperty("cursor","crosshair","important"),$.style.setProperty("background","rgba(0,0,0,0.05)","important"),$.style.setProperty("margin","0","important"),$.style.setProperty("padding","0","important"),$.style.setProperty("border","none","important"),$.style.setProperty("opacity","1","important"),$.style.setProperty("visibility","visible","important"),$.style.setProperty("pointer-events","auto","important");let e=document.createElement("style");e.textContent=`
76
+ `;var Wt=null,Ke=0,Bo=5e3,Ft=new Map,_t=null,Ge=new Set;function Yt(t){_t=t,Ke=Date.now(),Oo()}function Oo(){Wt||(Wt=setInterval(No,Bo))}async function No(){if(!_t)return;let t=Nr();if(t)try{let e=Br(),n=window.location.pathname,r=await fetch(`${e}/api/pins/poll?projectId=${_t}&pathname=${encodeURIComponent(n)}&since=${Ke}`,{headers:{Authorization:`Bearer ${t}`}});if(!r.ok)return;let s=await r.json();if(!s.success)return;let o=Array.isArray(s.data)?s.data:s.data?.pins||[];Ke=s.serverTime||s.data?.serverTime||Date.now();for(let i of o)Ge.has(i.id)?Jr("pin:updated",{type:"pin:updated",projectId:_t,data:i,userId:"",timestamp:Date.now()}):(Ge.add(i.id),Jr("pin:created",{type:"pin:created",projectId:_t,data:i,userId:"",timestamp:Date.now()}))}catch{}}function Kr(){Wt&&(clearInterval(Wt),Wt=null),_t=null,Ge.clear(),Ke=0}function ue(t,e){return Ft.has(t)||Ft.set(t,new Set),Ft.get(t).add(e),()=>{Ft.get(t)?.delete(e)}}function Jr(t,e){Ft.get(t)?.forEach(n=>n(e)),Ft.get("*")?.forEach(n=>n(e))}function Mn(t){Ge=new Set(t)}function Gr(){return Wt!==null}var en,Y=null,L=null,$=[],ss=[],Xt=!1,Jt=null,jo="",Vt=null,Ze=null,Rn=[],fe=null,me=null,Pt={x:0,y:0};function os(){if(!me)return;let t=document.createElement("div");t.style.cssText="position:fixed!important;top:0!important;left:0!important;width:1px!important;height:1px!important;pointer-events:none!important;visibility:hidden!important;z-index:-1!important;opacity:0!important;",me.appendChild(t);try{let e=t.getBoundingClientRect();Pt={x:-e.left,y:-e.top}}finally{t.remove()}}function is(t){return Pt.x===0&&Pt.y===0?t:{left:`${parseFloat(t.left)+Pt.x}px`,top:`${parseFloat(t.top)+Pt.y}px`,hidden:t.hidden}}function Qr(t,e){return{left:`${t+Pt.x}px`,top:`${e+Pt.y}px`}}var tn={open:"#f97316",in_progress:"#3b82f6",resolved:"#22c55e",closed:"#6b7280"},Zr={critical:"#ef4444",high:"#f97316",medium:"#eab308",low:"#6b7280"};function Kt(t,e){en=t,me=e,jo=window.location.pathname,Xo(),os(),ps(),Vo(),ti(),ei(),Uo()}function as(){Fo(),Y?.remove(),Y=null,L?.remove(),L=null,me=null,$=[]}function $t(t){return Xt=t!==void 0?t:!Xt,L&&L.style.setProperty("display",Xt?"block":"none","important"),Xt}function nn(){return Xt}function ls(t){try{let e=document.documentElement.scrollWidth||document.body.scrollWidth||1,n=document.documentElement.scrollHeight||document.body.scrollHeight||1,r=window.scrollX,s=window.scrollY,o=In(t.elementSelector,t.elementXPath),i=Qe(t)&&t.xPercent>=0&&t.xPercent<=1&&t.yPercent>=0&&t.yPercent<=1,a=o?qo(o):!1;if(i&&o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){let p=c.left+t.xPercent*c.width,b=c.top+t.yPercent*c.height;return{left:`${p}px`,top:`${b}px`,hidden:a}}}if(i)return t.pageX>0||t.pageY>0?{left:`${t.pageX-r}px`,top:`${t.pageY-s}px`,hidden:!1}:{left:`${t.xPercent*e-r}px`,top:`${t.yPercent*n-s}px`,hidden:!1};if(o){let c=o.getBoundingClientRect();if(c.width>0&&c.height>0){if(t.pageX>0||t.pageY>0){let p=Qe(t)?t.xPercent/100*e:t.pageX,b=Qe(t)?t.yPercent/100*n:t.pageY,v=c.left+c.width/2,S=c.top+c.height/2,D=p-r,R=b-s;return Math.abs(D-v)+Math.abs(R-S)>100?{left:`${v}px`,top:`${S}px`,hidden:a}:{left:`${D}px`,top:`${R}px`,hidden:a}}return{left:`${c.left+c.width/2}px`,top:`${c.top+c.height/2}px`,hidden:a}}}return Qe(t)?{left:`${t.xPercent/100*e-r}px`,top:`${t.yPercent/100*n-s}px`,hidden:!1}:{left:`${t.pageX-r}px`,top:`${t.pageY-s}px`,hidden:!1}}catch{let e=(t.pageX||0)-(window.scrollX||0),n=(t.pageY||0)-(window.scrollY||0);return{left:`${e}px`,top:`${n}px`,hidden:!1}}}function Qe(t){return t.xPercent!=null&&t.yPercent!=null&&(t.xPercent!==0||t.yPercent!==0||t.pageX===0&&t.pageY===0)}function In(t,e){let n;if(t&&t.startsWith('["')&&t.endsWith('"]'))try{let r=JSON.parse(t);n=Array.isArray(r)?r.filter(s=>typeof s=="string"):[t]}catch{n=[t]}else n=t?[t]:[];for(let r of n)if(r&&r!=="body")try{let s=document.querySelector(r);if(s)return s}catch{}if(e)try{let r=document.evaluate(e,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(r.singleNodeValue instanceof Element)return r.singleNodeValue}catch{}return null}function qo(t){let e=t.getBoundingClientRect();if(e.bottom<=0||e.top>=window.innerHeight||e.right<=0||e.left>=window.innerWidth)return!0;let n=t.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;if(s==="hidden"||s==="scroll"||s==="auto"||o==="hidden"||o==="scroll"||o==="auto"){let i=n.getBoundingClientRect();if(e.bottom<=i.top||e.top>=i.bottom||e.right<=i.left||e.left>=i.right)return!0}n=n.parentElement}return!1}function Uo(){window.addEventListener("scroll",Tt,{passive:!0}),window.addEventListener("resize",Tt,{passive:!0}),window.addEventListener("keydown",cs),Ze=new MutationObserver(t=>{t.every(n=>Y?.contains(n.target)||L?.contains(n.target))||Tt()}),Ze.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]}),typeof ResizeObserver<"u"&&(fe=new ResizeObserver(()=>Tt()))}function Fo(){window.removeEventListener("scroll",Tt),window.removeEventListener("resize",Tt),window.removeEventListener("keydown",cs),ds(),Ze?.disconnect(),Ze=null,fe?.disconnect(),fe=null,Vt&&(cancelAnimationFrame(Vt),Vt=null)}function cs(t){t.key==="Escape"&&(Jt?xt():Xt&&(Y?.querySelectorAll(".bs-lp-form").forEach(e=>e.remove()),$t(!1)))}function Tt(){Vt||(Vt=requestAnimationFrame(()=>{Vt=null,os(),_o()}))}function _o(){if(!Y)return;Y.querySelectorAll(".bs-lp").forEach(e=>{let n=e.dataset.pinId,r=$.find(o=>o.id===n);if(!r)return;let s=is(ls(r));e.style.left=s.left,e.style.top=s.top,e.style.display=s.hidden?"none":""})}function Wo(t){let e=[],n=t.parentElement;for(;n&&n!==document.documentElement;){let r=window.getComputedStyle(n),s=r.overflowY,o=r.overflowX;(s==="auto"||s==="scroll"||o==="auto"||o==="scroll")&&(n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth)&&e.push(n),n=n.parentElement}return e}function Yo(){ds();let t=new Set;for(let e of $){let n=In(e.elementSelector,e.elementXPath);if(!n)continue;let r=Wo(n);for(let s of r){if(t.has(s))continue;t.add(s);let o=()=>Tt();s.addEventListener("scroll",o,{passive:!0}),Rn.push(()=>s.removeEventListener("scroll",o))}}}function ds(){for(let t of Rn)t();Rn=[]}function Xo(){if(Y)return;Y=document.createElement("div"),Y.id="bugstash-live-pins",L=document.createElement("bugstash-overlay"),L.style.setProperty("display","none","important"),L.style.setProperty("position","fixed","important"),L.style.setProperty("inset","0","important"),L.style.setProperty("z-index","2147483641","important"),L.style.setProperty("cursor","crosshair","important"),L.style.setProperty("background","rgba(0,0,0,0.05)","important"),L.style.setProperty("margin","0","important"),L.style.setProperty("padding","0","important"),L.style.setProperty("border","none","important"),L.style.setProperty("opacity","1","important"),L.style.setProperty("visibility","visible","important"),L.style.setProperty("pointer-events","auto","important"),L.style.setProperty("transform","none","important"),L.style.setProperty("filter","none","important"),L.style.setProperty("perspective","none","important"),L.style.setProperty("will-change","auto","important"),L.style.setProperty("contain","none","important"),L.style.setProperty("clip-path","none","important"),L.style.setProperty("isolation","auto","important"),L.style.setProperty("mix-blend-mode","normal","important"),L.style.setProperty("box-sizing","border-box","important"),L.style.setProperty("overflow","visible","important"),L.style.setProperty("float","none","important");let t=document.createElement("style");t.textContent=`
77
+ /* \u2500\u2500\u2500 Isolation Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
78
+ :host {
79
+ all: initial !important;
80
+ position: fixed !important;
81
+ inset: 0 !important;
82
+ pointer-events: none !important;
83
+ z-index: 2147483640 !important;
84
+ display: block !important;
85
+ visibility: visible !important;
86
+ opacity: 1 !important;
87
+ transform: none !important;
88
+ perspective: none !important;
89
+ filter: none !important;
90
+ will-change: auto !important;
91
+ contain: none !important;
92
+ isolation: auto !important;
93
+ }
94
+ *, *::before, *::after {
95
+ box-sizing: border-box !important;
96
+ margin: 0;
97
+ padding: 0;
98
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
99
+ 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
+ }
106
+ /* Color scheme support */
107
+ @media (prefers-color-scheme: light) {
108
+ :host { --bs-pin-bg: #ffffff; --bs-pin-text: #171717; --bs-pin-muted: #6b7280; --bs-pin-border: #eaeaea; --bs-pin-surface: #fafafa; --bs-pin-input-bg: #ffffff; --bs-pin-hover: #f5f5f5; --bs-pin-shadow: rgba(0,0,0,0.08); --bs-pin-shadow-lg: rgba(0,0,0,0.12); }
109
+ }
110
+ @media (prefers-color-scheme: dark) {
111
+ :host { --bs-pin-bg: #1a1a1a; --bs-pin-text: #ededed; --bs-pin-muted: #888; --bs-pin-border: #333; --bs-pin-surface: #222; --bs-pin-input-bg: #2a2a2a; --bs-pin-hover: #2a2a2a; --bs-pin-shadow: rgba(0,0,0,0.2); --bs-pin-shadow-lg: rgba(0,0,0,0.4); }
112
+ }
113
+ /* Fallback (default to light) */
114
+ :host {
115
+ --bs-pin-bg: #ffffff; --bs-pin-text: #171717; --bs-pin-muted: #6b7280; --bs-pin-border: #eaeaea; --bs-pin-surface: #fafafa; --bs-pin-input-bg: #ffffff; --bs-pin-hover: #f5f5f5; --bs-pin-shadow: rgba(0,0,0,0.08); --bs-pin-shadow-lg: rgba(0,0,0,0.12);
116
+ }
117
+ @media (prefers-color-scheme: dark) {
118
+ :host { --bs-pin-bg: #1a1a1a; --bs-pin-text: #ededed; --bs-pin-muted: #888; --bs-pin-border: #333; --bs-pin-surface: #222; --bs-pin-input-bg: #2a2a2a; --bs-pin-hover: #2a2a2a; --bs-pin-shadow: rgba(0,0,0,0.2); --bs-pin-shadow-lg: rgba(0,0,0,0.4); }
119
+ }
77
120
  #bugstash-live-pins {
78
- position: fixed;
79
- top: 0;
80
- left: 0;
81
- width: 0;
82
- height: 0;
83
- overflow: visible;
84
- z-index: 2147483640;
85
- pointer-events: none;
121
+ position: fixed !important;
122
+ top: 0 !important;
123
+ left: 0 !important;
124
+ width: 0 !important;
125
+ height: 0 !important;
126
+ overflow: visible !important;
127
+ z-index: 2147483640 !important;
128
+ pointer-events: none !important;
129
+ transform: none !important;
130
+ perspective: none !important;
131
+ filter: none !important;
132
+ will-change: auto !important;
133
+ contain: none !important;
86
134
  }
87
- /* \u2500\u2500 Pin Marker \u2500\u2500 */
135
+
136
+ /* \u2500\u2500 Pin Marker (Avatar-based) \u2500\u2500 */
88
137
  .bs-lp {
89
- position: fixed;
90
- pointer-events: auto;
91
- cursor: pointer;
92
- transform: translate(-50%, -50%);
138
+ position: fixed !important;
139
+ pointer-events: auto !important;
140
+ cursor: pointer !important;
141
+ transform: translate(-50%, -50%) !important;
93
142
  z-index: 1;
94
- transition: transform 0.2s cubic-bezier(0.34,1.56,0.64,1);
143
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
95
144
  }
96
- .bs-lp:hover { transform: translate(-50%, -50%) scale(1.2); z-index: 5; }
145
+ .bs-lp:hover { transform: translate(-50%, -50%) scale(1.1) !important; z-index: 5; }
97
146
  .bs-lp-dot {
98
- width: 24px;
99
- height: 24px;
147
+ width: 32px;
148
+ height: 32px;
100
149
  border-radius: 50%;
101
150
  display: flex;
102
151
  align-items: center;
103
152
  justify-content: center;
104
- font-size: 11px;
105
- font-weight: 800;
153
+ font-size: 12px;
154
+ font-weight: 600;
106
155
  font-family: -apple-system, system-ui, sans-serif;
107
156
  color: #fff;
108
- box-shadow: 0 2px 8px rgba(0,0,0,0.4), 0 0 0 2.5px rgba(255,255,255,0.85);
157
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
109
158
  position: relative;
159
+ overflow: hidden;
160
+ background-size: cover;
161
+ background-position: center;
110
162
  }
111
- .bs-lp-ring {
112
- position: absolute;
113
- inset: -4px;
163
+ .bs-lp-avatar {
164
+ width: 100%;
165
+ height: 100%;
114
166
  border-radius: 50%;
115
- border: 2px solid currentColor;
116
- opacity: 0;
117
- animation: bs-lp-pulse 2s ease-out infinite;
167
+ object-fit: cover;
118
168
  }
119
- @keyframes bs-lp-pulse {
120
- 0% { opacity: 0.6; transform: scale(0.8); }
121
- 100% { opacity: 0; transform: scale(1.6); }
169
+ .bs-lp-initials {
170
+ width: 100%;
171
+ height: 100%;
172
+ border-radius: 50%;
173
+ display: flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ font-size: 12px;
177
+ font-weight: 600;
178
+ color: #fff;
179
+ }
180
+ .bs-lp-badge {
181
+ position: absolute;
182
+ top: -3px;
183
+ right: -3px;
184
+ min-width: 14px;
185
+ height: 14px;
186
+ border-radius: 7px;
187
+ background: var(--bs-pin-text, #171717);
188
+ color: var(--bs-pin-bg, #fff);
189
+ font-size: 9px;
190
+ font-weight: 700;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ padding: 0 3px;
195
+ line-height: 1;
196
+ z-index: 2;
122
197
  }
123
198
 
124
- /* \u2500\u2500 Popup \u2500\u2500 */
199
+ /* \u2500\u2500 Popup (Clean Card) \u2500\u2500 */
125
200
  .bs-lp-popup {
126
201
  position: absolute;
127
- left: 34px;
202
+ left: 40px;
128
203
  top: -8px;
129
- width: min(320px, calc(100vw - 48px));
130
- background: #111318;
131
- border: 1px solid rgba(255,255,255,0.08);
132
- border-radius: 12px;
133
- box-shadow: 0 20px 60px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.03);
204
+ width: min(360px, calc(100vw - 48px));
205
+ background: var(--bs-pin-bg);
206
+ border: 1px solid var(--bs-pin-border);
207
+ border-radius: 14px;
208
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg), 0 0 0 1px var(--bs-pin-shadow);
209
+ backdrop-filter: blur(12px);
134
210
  z-index: 10;
135
211
  pointer-events: auto;
136
212
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
137
- color: #e8eaed;
213
+ color: var(--bs-pin-text);
138
214
  overflow: hidden;
139
- animation: bs-lp-pop-in 0.2s cubic-bezier(0.34,1.56,0.64,1);
215
+ animation: bs-lp-pop-in 0.2s ease;
140
216
  }
141
217
  @keyframes bs-lp-pop-in {
142
- from { opacity: 0; transform: scale(0.95) translateX(-4px); }
143
- to { opacity: 1; transform: scale(1) translateX(0); }
218
+ from { opacity: 0; transform: translateY(4px); }
219
+ to { opacity: 1; transform: translateY(0); }
144
220
  }
145
221
  .bs-lp-popup-hdr {
146
- padding: 12px 14px 10px;
222
+ padding: 14px 16px 12px;
147
223
  display: flex;
148
224
  align-items: flex-start;
149
- gap: 8px;
225
+ gap: 10px;
150
226
  }
151
- .bs-lp-popup-title {
152
- font-size: 13px;
153
- font-weight: 700;
227
+ .bs-lp-popup-hdr-avatar {
228
+ width: 24px;
229
+ height: 24px;
230
+ border-radius: 50%;
231
+ flex-shrink: 0;
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ font-size: 10px;
236
+ font-weight: 600;
237
+ color: #fff;
238
+ overflow: hidden;
239
+ }
240
+ .bs-lp-popup-hdr-avatar img {
241
+ width: 100%;
242
+ height: 100%;
243
+ object-fit: cover;
244
+ }
245
+ .bs-lp-popup-hdr-body {
154
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);
155
253
  line-height: 1.3;
254
+ margin-bottom: 2px;
156
255
  }
157
- .bs-lp-popup-badge {
158
- font-size: 9px;
159
- padding: 3px 8px;
256
+ .bs-lp-popup-meta {
257
+ font-size: 12px;
258
+ color: var(--bs-pin-muted);
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 6px;
262
+ flex-wrap: wrap;
263
+ }
264
+ .bs-lp-popup-pill {
265
+ font-size: 11px;
266
+ padding: 2px 8px;
160
267
  border-radius: 99px;
161
- font-weight: 700;
162
- text-transform: uppercase;
163
- letter-spacing: 0.4px;
268
+ font-weight: 500;
164
269
  white-space: nowrap;
165
- flex-shrink: 0;
166
270
  }
167
271
  .bs-lp-popup-close {
168
272
  all: initial;
169
- color: #4b5563;
170
- font-size: 18px;
273
+ color: var(--bs-pin-muted);
171
274
  cursor: pointer;
172
- line-height: 1;
173
- padding: 0 2px;
275
+ padding: 2px;
174
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;
175
282
  }
176
- .bs-lp-popup-close:hover { color: #e8eaed; }
283
+ .bs-lp-popup-close:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
284
+ .bs-lp-popup-close svg { width: 16px; height: 16px; }
177
285
  .bs-lp-popup-desc {
178
- padding: 0 14px 10px;
179
- font-size: 12px;
180
- line-height: 1.55;
181
- color: #9ca3af;
286
+ padding: 0 16px 12px;
287
+ font-size: 13px;
288
+ line-height: 1.6;
289
+ color: var(--bs-pin-muted);
182
290
  }
183
291
  .bs-lp-popup-info {
184
- padding: 8px 14px;
185
- font-size: 10px;
186
- color: #6b7280;
187
- background: rgba(255,255,255,0.02);
188
- border-top: 1px solid rgba(255,255,255,0.05);
292
+ padding: 8px 16px;
293
+ font-size: 11px;
294
+ color: var(--bs-pin-muted);
295
+ background: var(--bs-pin-surface);
296
+ border-top: 1px solid var(--bs-pin-border);
189
297
  display: flex;
190
298
  justify-content: space-between;
191
299
  }
192
300
 
193
301
  /* Comments */
194
302
  .bs-lp-cmts {
195
- max-height: 200px;
303
+ max-height: 220px;
196
304
  overflow-y: auto;
197
- border-top: 1px solid rgba(255,255,255,0.05);
305
+ border-top: 1px solid var(--bs-pin-border);
198
306
  }
199
307
  .bs-lp-cmts::-webkit-scrollbar { width: 4px; }
200
- .bs-lp-cmts::-webkit-scrollbar-thumb { background: #333; border-radius: 2px; }
308
+ .bs-lp-cmts::-webkit-scrollbar-thumb { background: var(--bs-pin-border); border-radius: 2px; }
201
309
  .bs-lp-cmt {
202
- padding: 10px 14px;
203
- border-bottom: 1px solid rgba(255,255,255,0.03);
310
+ padding: 10px 16px;
311
+ display: flex;
312
+ gap: 8px;
313
+ align-items: flex-start;
314
+ border-bottom: 1px solid var(--bs-pin-border);
204
315
  }
205
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; }
206
332
  .bs-lp-cmt-top {
207
333
  display: flex;
208
334
  align-items: center;
209
335
  justify-content: space-between;
210
- margin-bottom: 3px;
336
+ margin-bottom: 2px;
211
337
  }
212
338
  .bs-lp-cmt-author {
213
339
  font-weight: 600;
214
- color: #e8eaed;
215
- font-size: 11px;
340
+ color: var(--bs-pin-text);
341
+ font-size: 12px;
216
342
  }
217
343
  .bs-lp-cmt-time {
218
- font-size: 10px;
219
- color: #4b5563;
344
+ font-size: 11px;
345
+ color: var(--bs-pin-muted);
220
346
  }
221
347
  .bs-lp-cmt-body {
222
- color: #9ca3af;
223
- font-size: 12px;
224
- line-height: 1.4;
348
+ color: var(--bs-pin-text);
349
+ font-size: 13px;
350
+ line-height: 1.5;
225
351
  }
226
352
 
227
353
  /* Comment input */
228
354
  .bs-lp-input {
229
355
  display: flex;
230
- border-top: 1px solid rgba(255,255,255,0.06);
356
+ align-items: center;
357
+ border-top: 1px solid var(--bs-pin-border);
358
+ padding: 4px;
359
+ gap: 4px;
231
360
  }
232
361
  .bs-lp-input input {
233
362
  all: initial;
234
363
  flex: 1;
235
- padding: 10px 14px;
236
- color: #e8eaed;
237
- font-size: 12px;
364
+ padding: 8px 12px;
365
+ color: var(--bs-pin-text);
366
+ font-size: 13px;
367
+ font-family: inherit;
368
+ background: var(--bs-pin-input-bg);
369
+ border: 1px solid var(--bs-pin-border);
370
+ border-radius: 8px;
371
+ box-sizing: border-box;
372
+ transition: border-color 0.15s;
238
373
  }
239
- .bs-lp-input input::placeholder { color: #4b5563; }
374
+ .bs-lp-input input:focus { border-color: #6E9ED0; outline: none; }
375
+ .bs-lp-input input::placeholder { color: var(--bs-pin-muted); }
240
376
  .bs-lp-input button {
241
377
  all: initial;
242
- padding: 0 14px;
243
- color: #6E9ED0;
244
- font-size: 11px;
245
- font-weight: 700;
378
+ width: 32px;
379
+ height: 32px;
380
+ border-radius: 8px;
381
+ background: #6E9ED0;
382
+ color: #fff;
246
383
  cursor: pointer;
384
+ display: flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ flex-shrink: 0;
388
+ transition: opacity 0.15s;
247
389
  }
248
- .bs-lp-input button:hover { color: #93bdea; }
390
+ .bs-lp-input button:hover { opacity: 0.85; }
391
+ .bs-lp-input button svg { width: 14px; height: 14px; }
249
392
 
250
393
  /* Actions */
251
394
  .bs-lp-acts {
252
- padding: 8px 14px;
395
+ padding: 8px 16px 10px;
253
396
  display: flex;
254
- gap: 6px;
255
- border-top: 1px solid rgba(255,255,255,0.05);
397
+ gap: 8px;
398
+ border-top: 1px solid var(--bs-pin-border);
256
399
  }
257
400
  .bs-lp-act {
258
401
  all: initial;
259
- padding: 5px 12px;
260
- border-radius: 6px;
261
- border: 1px solid rgba(255,255,255,0.08);
262
- background: rgba(255,255,255,0.03);
263
- color: #9ca3af;
264
- font-size: 11px;
265
- font-weight: 600;
402
+ padding: 6px 14px;
403
+ border-radius: 8px;
404
+ background: var(--bs-pin-surface);
405
+ color: var(--bs-pin-muted);
406
+ font-size: 12px;
407
+ font-weight: 500;
408
+ font-family: inherit;
266
409
  cursor: pointer;
267
410
  transition: all 0.15s;
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 5px;
268
414
  }
269
- .bs-lp-act:hover { background: rgba(255,255,255,0.06); color: #e8eaed; }
270
- .bs-lp-act.resolve { color: #4ade80; border-color: rgba(34,197,94,0.2); }
415
+ .bs-lp-act:hover { background: var(--bs-pin-hover); color: var(--bs-pin-text); }
416
+ .bs-lp-act.resolve { color: #22c55e; }
271
417
  .bs-lp-act.resolve:hover { background: rgba(34,197,94,0.1); }
272
- .bs-lp-act.delete { color: #f87171; border-color: rgba(239,68,68,0.2); }
418
+ .bs-lp-act.delete { color: #ef4444; }
273
419
  .bs-lp-act.delete:hover { background: rgba(239,68,68,0.1); }
274
420
 
275
421
  /* \u2500\u2500 New Pin Form \u2500\u2500 */
276
422
  .bs-lp-form {
277
423
  position: fixed;
278
- width: min(300px, calc(100vw - 32px));
279
- background: #111318;
280
- border: 1px solid rgba(255,255,255,0.08);
281
- border-radius: 12px;
282
- box-shadow: 0 20px 60px rgba(0,0,0,0.6);
424
+ width: min(320px, calc(100vw - 32px));
425
+ background: var(--bs-pin-bg);
426
+ border: 1px solid var(--bs-pin-border);
427
+ border-radius: 14px;
428
+ box-shadow: 0 8px 30px var(--bs-pin-shadow-lg);
429
+ backdrop-filter: blur(12px);
283
430
  z-index: 2147483645;
284
431
  pointer-events: auto;
285
432
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
286
- color: #e8eaed;
287
- padding: 14px;
288
- animation: bs-lp-pop-in 0.2s cubic-bezier(0.34,1.56,0.64,1);
433
+ color: var(--bs-pin-text);
434
+ padding: 16px;
435
+ animation: bs-lp-pop-in 0.2s ease;
289
436
  }
290
437
  .bs-lp-form-label {
291
438
  display: block;
292
- font-size: 10px;
293
- color: #6b7280;
439
+ font-size: 12px;
440
+ color: var(--bs-pin-muted);
294
441
  margin-bottom: 4px;
295
- margin-top: 10px;
296
- font-weight: 700;
297
- text-transform: uppercase;
298
- letter-spacing: 0.5px;
442
+ margin-top: 12px;
443
+ font-weight: 500;
299
444
  }
300
445
  .bs-lp-form-label:first-child { margin-top: 0; }
301
446
  .bs-lp-form input,
@@ -304,11 +449,11 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
304
449
  all: initial;
305
450
  display: block;
306
451
  width: 100%;
307
- background: rgba(255,255,255,0.04);
308
- border: 1px solid rgba(255,255,255,0.08);
309
- border-radius: 8px;
310
- padding: 8px 10px;
311
- color: #e8eaed;
452
+ background: var(--bs-pin-input-bg);
453
+ border: 1px solid var(--bs-pin-border);
454
+ border-radius: 10px;
455
+ padding: 8px 12px;
456
+ color: var(--bs-pin-text);
312
457
  font-size: 13px;
313
458
  font-family: inherit;
314
459
  box-sizing: border-box;
@@ -323,21 +468,51 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
323
468
  .bs-lp-form textarea:focus,
324
469
  .bs-lp-form select:focus {
325
470
  border-color: #6E9ED0;
471
+ outline: none;
326
472
  }
327
473
  .bs-lp-form input::placeholder,
328
- .bs-lp-form textarea::placeholder { color: #4b5563; }
474
+ .bs-lp-form textarea::placeholder { color: var(--bs-pin-muted); }
475
+ /* Segmented buttons for priority/category */
476
+ .bs-lp-seg-row {
477
+ display: flex;
478
+ gap: 0;
479
+ border: 1px solid var(--bs-pin-border);
480
+ border-radius: 10px;
481
+ overflow: hidden;
482
+ }
483
+ .bs-lp-seg-btn {
484
+ all: initial;
485
+ flex: 1;
486
+ padding: 7px 4px;
487
+ text-align: center;
488
+ font-size: 12px;
489
+ font-weight: 500;
490
+ font-family: inherit;
491
+ cursor: pointer;
492
+ color: var(--bs-pin-muted);
493
+ background: var(--bs-pin-input-bg);
494
+ border-right: 1px solid var(--bs-pin-border);
495
+ transition: all 0.15s;
496
+ box-sizing: border-box;
497
+ }
498
+ .bs-lp-seg-btn:last-child { border-right: none; }
499
+ .bs-lp-seg-btn:hover { color: var(--bs-pin-text); background: var(--bs-pin-hover); }
500
+ .bs-lp-seg-btn.bs-active {
501
+ background: #6E9ED0;
502
+ color: #fff;
503
+ }
329
504
  .bs-lp-form-btns {
330
505
  display: flex;
331
506
  gap: 8px;
332
- margin-top: 12px;
507
+ margin-top: 14px;
333
508
  }
334
509
  .bs-lp-form-btns button {
335
510
  all: initial;
336
- flex: 1;
337
- padding: 9px;
338
- border-radius: 8px;
339
- font-size: 12px;
340
- font-weight: 700;
511
+ padding: 9px 16px;
512
+ border-radius: 10px;
513
+ font-size: 13px;
514
+ font-weight: 600;
515
+ font-family: inherit;
341
516
  cursor: pointer;
342
517
  text-align: center;
343
518
  transition: opacity 0.15s;
@@ -345,97 +520,94 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
345
520
  .bs-lp-form-submit {
346
521
  background: #6E9ED0;
347
522
  color: #fff;
523
+ flex: 1;
348
524
  }
349
525
  .bs-lp-form-submit:hover { opacity: 0.85; }
350
526
  .bs-lp-form-cancel {
351
- background: rgba(255,255,255,0.06);
352
- color: #9ca3af;
527
+ background: transparent;
528
+ color: var(--bs-pin-muted);
353
529
  }
354
- .bs-lp-form-cancel:hover { background: rgba(255,255,255,0.1); }
355
- `,_.appendChild(e),Pn.appendChild(_),document.body.appendChild($),$.addEventListener("click",t=>{let n=t.clientX,r=t.clientY,s=null;try{$.style.setProperty("pointer-events","none","important"),s=document.elementFromPoint(n,r)}finally{$.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,y=document.documentElement.scrollHeight||document.body.scrollHeight||1;a=o/b*100,d=i/y*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}Ho(o,i,a,d,n,r,s)})}async function Gr(){let e=await Ar(Yt,window.location.pathname);e.success&&e.data&&(z=e.data,Ln(z.map(t=>t.id)),pe())}async function Mo(){let e=await Ir(Yt);e.success&&e.data&&(Xr=e.data)}function pe(){if(_){_.querySelectorAll(".bs-lp").forEach(e=>e.remove()),z.forEach((e,t)=>{let n=document.createElement("div");n.className="bs-lp",n.dataset.pinId=e.id;let r=Vr(e);n.style.left=r.left,n.style.top=r.top;let s=Xt[e.priority]||Xt.medium;n.innerHTML=`
356
- <div class="bs-lp-dot" style="background:${s};color:${s}">
357
- ${t+1}
358
- <span class="bs-lp-ring"></span>
530
+ .bs-lp-form-cancel:hover { color: var(--bs-pin-text); }
531
+ `,Y.appendChild(t),me.appendChild(Y),document.body.appendChild(L),L.addEventListener("click",e=>{let n=e.clientX,r=e.clientY,s=null;try{L.style.setProperty("pointer-events","none","important"),s=document.elementFromPoint(n,r)}finally{L.style.setProperty("pointer-events","auto","important")}let o=n+window.scrollX,i=r+window.scrollY,a,c;if(s&&s!==document.body&&s!==document.documentElement){let p=s.getBoundingClientRect();if(p.width>0&&p.height>0)a=(n-p.left)/p.width,c=(r-p.top)/p.height;else{let b=document.documentElement.scrollWidth||document.body.scrollWidth||1,v=document.documentElement.scrollHeight||document.body.scrollHeight||1;a=o/b*100,c=i/v*100}}else{let p=document.documentElement.scrollWidth||document.body.scrollWidth||1,b=document.documentElement.scrollHeight||document.body.scrollHeight||1;a=o/p*100,c=i/b*100}Zo(o,i,a,c,n,r,s)})}async function ps(){let t=await jr(en,window.location.pathname);t.success&&t.data&&($=t.data,Mn($.map(e=>e.id)),gt())}async function Vo(){let t=await Fr(en);t.success&&t.data&&(ss=t.data)}function gt(){if(Y){Y.querySelectorAll(".bs-lp").forEach(t=>t.remove()),$.forEach(t=>{let e=document.createElement("div");e.className="bs-lp",e.dataset.pinId=t.id;let n=is(ls(t));e.style.left=n.left,e.style.top=n.top,n.hidden&&(e.style.display="none");let r=tn[t.status]||tn.open,s=Hn(t.creatorName||"U"),o=Dn(t.creatorName||"U"),i=t.creatorAvatar?`<img class="bs-lp-avatar" src="${mt(t.creatorAvatar)}" alt="" />`:`<div class="bs-lp-initials" style="background:${o}">${s}</div>`,a=t.commentCount>0?`<span class="bs-lp-badge">${t.commentCount>99?"99+":t.commentCount}</span>`:"";e.innerHTML=`
532
+ <div class="bs-lp-dot" style="border:2px solid ${r}; background:transparent;">
533
+ ${i}
534
+ ${a}
359
535
  </div>
360
- `,n.addEventListener("click",o=>{o.stopPropagation(),Ao(e,n)}),_.appendChild(n)}),Po(),lt?.disconnect();for(let e of z){let t=$n(e.elementSelector,e.elementXPath);t&&lt?.observe(t)}}}function Wr(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 _r(e){requestAnimationFrame(()=>{let t=e.getBoundingClientRect(),n=16;t.right>window.innerWidth-n&&(e.style.left="auto",e.style.right="34px"),t.left<n&&(e.style.left=`${n}px`,e.style.right="auto");let r=e.getBoundingClientRect();r.bottom>window.innerHeight-n&&(e.style.top="auto",e.style.bottom="0"),r.top<n&&(e.style.top=`${n}px`,e.style.bottom="auto")})}async function Ao(e,t){he();let n=document.createElement("div");n.className="bs-lp-popup";let r=ne(),s=r&&(r.role==="owner"||r.role==="admin"||r.id===e.createdBy),o=Fr[e.status]||Fr.open,i=Xt[e.priority]||Xt.medium,a=e.priority?e.priority.charAt(0).toUpperCase()+e.priority.slice(1):"Medium";n.innerHTML=`
536
+ `,e.addEventListener("click",c=>{c.stopPropagation(),Jo(t,e)}),Y.appendChild(e)}),Yo(),fe?.disconnect();for(let t of $){let e=In(t.elementSelector,t.elementXPath);e&&fe?.observe(e)}}}function bs(t){let e=typeof t=="string"?new Date(t).getTime():t;if(isNaN(e))return"";let n=Date.now()-e,r=Math.floor(n/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;let s=Math.floor(r/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`}function ts(t){requestAnimationFrame(()=>{let e=t.getBoundingClientRect(),n=16,r=0,s=0;if(e.right>window.innerWidth-n&&(r=window.innerWidth-n-e.right),e.left+r<n&&(r=n-e.left),e.bottom>window.innerHeight-n&&(s=window.innerHeight-n-e.bottom),e.top+s<n&&(s=n-e.top),r!==0||s!==0){let o=parseFloat(t.style.left)||0,i=parseFloat(t.style.top)||0;t.style.left=`${o+r}px`,t.style.top=`${i+s}px`,t.style.right="auto",t.style.bottom="auto"}})}async function Jo(t,e){xt();let n=document.createElement("div");n.className="bs-lp-popup";let r=ot(),s=t.createdBy||t.createdById,o=r&&(r.role==="owner"||r.role==="admin"||r.id===s),i=tn[t.status]||tn.open,a=Zr[t.priority]||Zr.medium,c=t.priority?t.priority.charAt(0).toUpperCase()+t.priority.slice(1):"Medium",p=Hn(t.creatorName||"U"),b=Dn(t.creatorName||"U"),v=t.creatorAvatar?`<img src="${mt(t.creatorAvatar)}" alt="" style="width:100%;height:100%;object-fit:cover;border-radius:50%;" />`:`<span>${p}</span>`,S=t.status.replace("_"," "),D='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg>',R='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>';n.innerHTML=`
361
537
  <div class="bs-lp-popup-hdr">
362
- <div class="bs-lp-popup-title">${de(e.title)}</div>
363
- <span class="bs-lp-popup-badge" style="background:${i}18;color:${i}">${a}</span>
364
- <span class="bs-lp-popup-badge" style="background:${o}18;color:${o}">${e.status.replace("_"," ")}</span>
365
- <button class="bs-lp-popup-close">&times;</button>
366
- </div>
367
- ${e.description?`<div class="bs-lp-popup-desc">${de(e.description)}</div>`:""}
368
- <div class="bs-lp-popup-info">
369
- <span>${e.creatorName||"Unknown"} &middot; ${Wr(e.createdAt)}</span>
370
- <span>${e.assigneeName?`\u2192 ${e.assigneeName}`:"Unassigned"}</span>
538
+ <div class="bs-lp-popup-hdr-avatar" style="background:${b}">
539
+ ${v}
540
+ </div>
541
+ <div class="bs-lp-popup-hdr-body">
542
+ <div class="bs-lp-popup-title">${mt(t.title)}</div>
543
+ <div class="bs-lp-popup-meta">
544
+ <span>${t.creatorName||"Unknown"}</span>
545
+ <span>&middot;</span>
546
+ <span>${bs(t.createdAt)}</span>
547
+ <span class="bs-lp-popup-pill" style="background:${i}18;color:${i}">${S}</span>
548
+ <span class="bs-lp-popup-pill" style="background:${a}18;color:${a}">${c}</span>
549
+ </div>
550
+ </div>
551
+ <button class="bs-lp-popup-close">${R}</button>
371
552
  </div>
553
+ ${t.description?`<div class="bs-lp-popup-desc">${mt(t.description)}</div>`:""}
554
+ ${t.assigneeName?`<div class="bs-lp-popup-info"><span>Assigned to ${mt(t.assigneeName)}</span></div>`:""}
372
555
  <div class="bs-lp-cmts" id="bs-lp-cmts">
373
- <div class="bs-lp-cmt" style="text-align:center;color:#4b5563;padding:12px">Loading comments...</div>
556
+ <div style="text-align:center;color:var(--bs-pin-muted);padding:12px;font-size:12px">Loading comments...</div>
374
557
  </div>
375
558
  <div class="bs-lp-input">
376
- <input type="text" placeholder="Add a comment..." id="bs-lp-cmt-in" name="pin-comment" />
377
- <button id="bs-lp-cmt-send">Send</button>
559
+ <input type="text" placeholder="Write a comment..." id="bs-lp-cmt-in" name="pin-comment" />
560
+ <button id="bs-lp-cmt-send">${D}</button>
378
561
  </div>
379
562
  <div class="bs-lp-acts">
380
- ${e.status!=="resolved"?'<button class="bs-lp-act resolve" id="bs-lp-resolve">Resolve</button>':'<button class="bs-lp-act" id="bs-lp-reopen">Reopen</button>'}
381
- ${s?'<button class="bs-lp-act delete" id="bs-lp-delete">Delete</button>':""}
563
+ ${t.status!=="resolved"?'<button class="bs-lp-act resolve" id="bs-lp-resolve">&#10003; Resolve</button>':'<button class="bs-lp-act" id="bs-lp-reopen">&#8634; Reopen</button>'}
564
+ ${o?'<button class="bs-lp-act delete" id="bs-lp-delete">&#10005; Delete</button>':""}
382
565
  </div>
383
- `,t.appendChild(n),Ue=n,zr(e.id).then(p=>{let b=n.querySelector("#bs-lp-cmts");if(!b)return;let y=p.success&&p.data?p.data:[];b.innerHTML=y.length?y.map(w=>`
384
- <div class="bs-lp-cmt">
385
- <div class="bs-lp-cmt-top">
386
- <span class="bs-lp-cmt-author">${de(w.author?.name||w.authorName||"Unknown")}</span>
387
- <span class="bs-lp-cmt-time">${Wr(new Date(w.createdAt).getTime())}</span>
388
- </div>
389
- <div class="bs-lp-cmt-body">${de(w.body)}</div>
390
- </div>
391
- `).join(""):"",_r(n)}),_r(n),n.querySelector(".bs-lp-popup-close").addEventListener("click",p=>{p.stopPropagation(),he()}),n.querySelector("#bs-lp-cmt-send")?.addEventListener("click",async()=>{let p=n.querySelector("#bs-lp-cmt-in"),b=p.value.trim();if(b)if(p.value="",navigator.onLine){let y=await vn(e.id,b);if(y.success&&y.data){let w=n.querySelector("#bs-lp-cmts"),k=y.data;w.innerHTML+=`
392
- <div class="bs-lp-cmt">
393
- <div class="bs-lp-cmt-top">
394
- <span class="bs-lp-cmt-author">${de(k.authorName||r?.name||"You")}</span>
395
- <span class="bs-lp-cmt-time">just now</span>
396
- </div>
397
- <div class="bs-lp-cmt-body">${de(k.body)}</div>
398
- </div>
399
- `,w.scrollTop=w.scrollHeight}}else kn({type:"create_comment",data:{pinId:e.id,body:b}})}),n.querySelector("#bs-lp-cmt-in")?.addEventListener("keydown",p=>{p.key==="Enter"&&n.querySelector("#bs-lp-cmt-send")?.dispatchEvent(new Event("click"))}),n.querySelector("#bs-lp-resolve")?.addEventListener("click",async()=>{await Ot(e.id,{status:"resolved"}),e.status="resolved",he(),pe()}),n.querySelector("#bs-lp-reopen")?.addEventListener("click",async()=>{await Ot(e.id,{status:"open"}),e.status="open",he(),pe()});let d=!1;n.querySelector("#bs-lp-delete")?.addEventListener("click",async()=>{d||confirm("Delete this pin?")&&(d=!0,await Rr(e.id),z=z.filter(p=>p.id!==e.id),he(),pe())}),n.addEventListener("click",p=>p.stopPropagation())}function he(){Ue?.remove(),Ue=null}var Cn=e=>e?typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1"):"";function Ro(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}="${Cn(s)}"]`);break}}if(e.id)try{let r=`#${Cn(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="${Cn(n)}"]`;try{document.querySelectorAll(r).length===1&&t.push(r)}catch{}}return t.push(zo(e)),t}function zo(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 Io(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 Ho(e,t,n,r,s,o,i){he(),_?.querySelectorAll(".bs-lp-form").forEach(k=>k.remove());let a=document.createElement("div");a.className="bs-lp-form";let d=Math.min(300,window.innerWidth-32),p=16,b=s+p,y=o-8;b+d>window.innerWidth-p&&(b=s-d-p),b<p&&(b=p),a.style.left=`${b}px`,a.style.top=`${y}px`,requestAnimationFrame(()=>{let k=a.getBoundingClientRect();k.bottom>window.innerHeight-p&&(a.style.top=`${Math.max(p,o-k.height)}px`)});let w=Xr.filter(k=>k.userId!==ne()?.id).map(k=>`<option value="${k.userId}">${de(k.name)}</option>`).join("");a.innerHTML=`
400
- <label class="bs-lp-form-label">Title *</label>
566
+ `,e.appendChild(n),Jt=n,Ur(t.id).then(w=>{let E=n.querySelector("#bs-lp-cmts");if(!E)return;let T=w.success&&w.data?w.data:[];E.innerHTML=T.length?T.map(pt=>zn(pt)).join(""):"",ts(n)}),ts(n),n.querySelector(".bs-lp-popup-close").addEventListener("click",w=>{w.stopPropagation(),xt()}),n.querySelector("#bs-lp-cmt-send")?.addEventListener("click",async()=>{let w=n.querySelector("#bs-lp-cmt-in"),E=w.value.trim();if(E)if(w.value="",navigator.onLine){let T=await Sn(t.id,E);if(T.success&&T.data){let pt=n.querySelector("#bs-lp-cmts");pt.innerHTML+=zn(T.data),pt.scrollTop=pt.scrollHeight}}else Pn({type:"create_comment",data:{pinId:t.id,body:E}})}),n.querySelector("#bs-lp-cmt-in")?.addEventListener("keydown",w=>{w.key==="Enter"&&n.querySelector("#bs-lp-cmt-send")?.dispatchEvent(new Event("click"))}),n.querySelector("#bs-lp-resolve")?.addEventListener("click",async()=>{await Ye(t.id,{status:"resolved"});let w=$.findIndex(E=>E.id===t.id);w>=0&&($=$.map((E,T)=>T===w?{...E,status:"resolved"}:E)),xt(),gt()}),n.querySelector("#bs-lp-reopen")?.addEventListener("click",async()=>{await Ye(t.id,{status:"open"});let w=$.findIndex(E=>E.id===t.id);w>=0&&($=$.map((E,T)=>T===w?{...E,status:"open"}:E)),xt(),gt()});let Z=!1;n.querySelector("#bs-lp-delete")?.addEventListener("click",async()=>{Z||confirm("Delete this pin?")&&(Z=!0,await qr(t.id),$=$.filter(w=>w.id!==t.id),xt(),gt())}),n.addEventListener("click",w=>w.stopPropagation())}function xt(){Jt?.remove(),Jt=null}var An=t=>t?typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(t):t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1"):"";function Ko(t){if(!t||t===document.body||t===document.documentElement)return["body"];let e=[];for(let r of["data-testid","data-test-id","data-cy"]){let s=t.getAttribute(r);if(s){e.push(`[${r}="${An(s)}"]`);break}}if(t.id)try{let r=`#${An(t.id)}`;document.querySelectorAll(r).length===1&&e.push(r)}catch{}let n=t.getAttribute("aria-label");if(n){let r=`${t.tagName.toLowerCase()}[aria-label="${An(n)}"]`;try{document.querySelectorAll(r).length===1&&e.push(r)}catch{}}return e.push(Go(t)),e}function Go(t){let e=[],n=t;for(;n&&n!==document.body&&n!==document.documentElement;){let r=n,s=r.parentElement;if(!s)break;let o=r.tagName.toLowerCase(),i=Array.from(s.children).filter(a=>a.tagName===r.tagName);i.length>1&&(o+=`:nth-of-type(${i.indexOf(r)+1})`),e.unshift(o),n=s}return e.join(" > ")}function Qo(t){if(!t)return"";let e=[],n=t;for(;n&&n!==document.body;){let r=1,s=n.previousElementSibling;for(;s;)s.tagName===n.tagName&&r++,s=s.previousElementSibling;e.unshift(`${n.tagName.toLowerCase()}[${r}]`),n=n.parentElement}return"/body/"+e.join("/")}function Zo(t,e,n,r,s,o,i){xt(),Y?.querySelectorAll(".bs-lp-form").forEach(R=>R.remove());let a=document.createElement("div");a.className="bs-lp-form";let c=Math.min(300,window.innerWidth-32),p=16,b=s+p,v=o-8;b+c>window.innerWidth-p&&(b=s-c-p),b<p&&(b=p);let S=Qr(b,v);a.style.left=S.left,a.style.top=S.top,requestAnimationFrame(()=>{let R=a.getBoundingClientRect();if(R.bottom>window.innerHeight-p){let Z=Qr(b,Math.max(p,o-R.height));a.style.top=Z.top}});let D=ss.filter(R=>R.userId!==ot()?.id).map(R=>`<option value="${R.userId}">${mt(R.name)}</option>`).join("");a.innerHTML=`
567
+ <label class="bs-lp-form-label">Title</label>
401
568
  <input type="text" id="bs-np-title" name="pin-title" placeholder="What's the issue?" autofocus />
402
569
  <label class="bs-lp-form-label">Description</label>
403
- <textarea id="bs-np-desc" name="pin-desc" placeholder="Describe the problem..."></textarea>
570
+ <textarea id="bs-np-desc" name="pin-desc" placeholder="Add more details..."></textarea>
404
571
  <label class="bs-lp-form-label">Priority</label>
405
- <select id="bs-np-priority" name="pin-priority">
406
- <option value="low">Low</option>
407
- <option value="medium" selected>Medium</option>
408
- <option value="high">High</option>
409
- <option value="critical">Critical</option>
410
- </select>
572
+ <div class="bs-lp-seg-row" id="bs-np-priority-row">
573
+ <button class="bs-lp-seg-btn" data-value="low">Low</button>
574
+ <button class="bs-lp-seg-btn bs-active" data-value="medium">Medium</button>
575
+ <button class="bs-lp-seg-btn" data-value="high">High</button>
576
+ <button class="bs-lp-seg-btn" data-value="critical">Critical</button>
577
+ </div>
411
578
  <label class="bs-lp-form-label">Category</label>
412
- <select id="bs-np-category" name="pin-category">
413
- <option value="ui">UI</option>
414
- <option value="functionality">Functionality</option>
415
- <option value="performance">Performance</option>
416
- <option value="content">Content</option>
417
- <option value="other" selected>Other</option>
418
- </select>
419
- ${w?`
579
+ <div class="bs-lp-seg-row" id="bs-np-category-row">
580
+ <button class="bs-lp-seg-btn" data-value="ui">UI</button>
581
+ <button class="bs-lp-seg-btn" data-value="functionality">Func</button>
582
+ <button class="bs-lp-seg-btn" data-value="performance">Perf</button>
583
+ <button class="bs-lp-seg-btn" data-value="content">Content</button>
584
+ <button class="bs-lp-seg-btn bs-active" data-value="other">Other</button>
585
+ </div>
586
+ ${D?`
420
587
  <label class="bs-lp-form-label">Assign to</label>
421
588
  <select id="bs-np-assignee" name="pin-assignee">
422
589
  <option value="">Unassigned</option>
423
- ${w}
590
+ ${D}
424
591
  </select>
425
592
  `:""}
426
593
  <div class="bs-lp-form-btns">
427
594
  <button class="bs-lp-form-cancel" id="bs-np-cancel">Cancel</button>
428
- <button class="bs-lp-form-submit" id="bs-np-submit">Create Pin</button>
595
+ <button class="bs-lp-form-submit" id="bs-np-submit">Create pin</button>
429
596
  </div>
430
- `,_.appendChild(a),a.addEventListener("click",k=>k.stopPropagation()),a.querySelector("#bs-np-cancel").addEventListener("click",()=>a.remove()),a.querySelector("#bs-np-submit").addEventListener("click",async()=>{let k=a.querySelector("#bs-np-title").value.trim();if(!k){a.querySelector("#bs-np-title").style.borderColor="#ef4444";return}let me=a.querySelector("#bs-np-submit");me.textContent="Creating...",me.style.opacity="0.6",me.style.pointerEvents="none";let Ye=a.querySelector("#bs-np-desc").value.trim(),D=a.querySelector("#bs-np-priority").value,B=a.querySelector("#bs-np-category").value,gt=a.querySelector("#bs-np-assignee")?.value||void 0,re=JSON.stringify(Ro(i)),xe=Io(i),ve=le().slice(-20).map(q=>`[${q.level}] ${q.args.join(" ")}`),v=ce().slice(-10).map(q=>`${q.message} at ${q.source}:${q.lineno}`),ee=fe().slice(-10).map(q=>`${q.method} ${q.url} \u2192 ${q.status}`),Le={projectId:Yt,pageUrl:window.location.href,pathname:window.location.pathname,elementSelector:re,elementXPath:xe,xPercent:n,yPercent:r,pageX:e,pageY:t,title:k,description:Ye,priority:D,category:B,assigneeId:gt,browserInfo:navigator.userAgent,screenSize:`${screen.width}x${screen.height}`,viewportSize:`${window.innerWidth}x${window.innerHeight}`,devicePixelRatio:window.devicePixelRatio,consoleLogs:ve,networkErrors:ee,jsErrors:v};if(a.remove(),navigator.onLine){let q=await xn(Le);q.success&&q.data&&(z.push(q.data),pe())}else kn({type:"create_pin",data:Le}),z.push({...Le,id:"local-"+Date.now(),orgId:"",status:"open",tags:[],createdById:ne()?.id||"",creatorName:ne()?.name||"",commentCount:0,createdAt:Date.now(),updatedAt:Date.now()}),pe()}),setTimeout(()=>a.querySelector("#bs-np-title")?.focus(),50)}function Do(){at("pin:created",e=>{let t=e.data;t.pathname===window.location.pathname&&(z.find(n=>n.id===t.id)||(z.push(t),Ln(z.map(n=>n.id)),pe()))}),at("pin:updated",e=>{let t=e.data,n=z.findIndex(r=>r.id===t.id);n>=0&&(z[n]={...z[n],...t},pe())}),at("pin:deleted",e=>{let{id:t}=e.data;z=z.filter(n=>n.id!==t),he(),pe()}),at("comment:created",e=>{let t=e.data;if(Ue){let n=Ue.querySelector("#bs-lp-cmts");n&&(n.innerHTML+=`
431
- <div class="bs-lp-cmt">
432
- <div class="bs-lp-cmt-top">
433
- <span class="bs-lp-cmt-author">${de(t.author?.name||"Someone")}</span>
434
- <span class="bs-lp-cmt-time">just now</span>
435
- </div>
436
- <div class="bs-lp-cmt-body">${de(t.body)}</div>
437
- </div>
438
- `,n.scrollTop=n.scrollHeight)}})}function Bo(){let e=window.location.pathname,t=()=>{window.location.pathname!==e&&(e=window.location.pathname,window.location.href,Gr())},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 de(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}var V,O=null,I=null,h=null,G=null,dt=null,pt=null,oe=null,Q=!1,Jt=!1,We="report";var ye=Br(),Ee=Or(),H={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>'},Oo=`
597
+ `,Y.appendChild(a),a.addEventListener("click",R=>R.stopPropagation()),ns(a,"#bs-np-priority-row"),ns(a,"#bs-np-category-row"),a.querySelector("#bs-np-cancel").addEventListener("click",()=>a.remove()),a.querySelector("#bs-np-submit").addEventListener("click",async()=>{let R=a.querySelector("#bs-np-title").value.trim();if(!R){a.querySelector("#bs-np-title").style.borderColor="#ef4444";return}let Z=a.querySelector("#bs-np-submit");Z.textContent="Creating...",Z.style.opacity="0.6",Z.style.pointerEvents="none";let w=a.querySelector("#bs-np-desc").value.trim(),E=rs(a,"#bs-np-priority-row")||"medium",T=rs(a,"#bs-np-category-row")||"other",lt=a.querySelector("#bs-np-assignee")?.value||void 0,Lt=JSON.stringify(Ko(i)),St=Qo(i),k=ut().slice(-20).map(B=>`[${B.level}] ${B.args.join(" ")}`),rt=ft().slice(-10).map(B=>`${B.message} at ${B.source}:${B.lineno}`),Ee=vt().slice(-10).map(B=>`${B.method} ${B.url} \u2192 ${B.status}`),te={projectId:en,pageUrl:window.location.href,pathname:window.location.pathname,elementSelector:Lt,elementXPath:St,xPercent:n,yPercent:r,pageX:t,pageY:e,title:R,description:w,priority:E,category:T,assigneeId:lt,browserInfo:navigator.userAgent,screenSize:`${screen.width}x${screen.height}`,viewportSize:`${window.innerWidth}x${window.innerHeight}`,devicePixelRatio:window.devicePixelRatio,consoleLogs:k,networkErrors:Ee,jsErrors:rt};if(a.remove(),navigator.onLine){let B=await Ln(te);B.success&&B.data&&($=[...$,B.data],gt())}else{Pn({type:"create_pin",data:te});let B=ot();$=[...$,{...te,id:"local-"+Date.now(),orgId:"",status:"open",tags:[],createdBy:B?.id||"",creatorName:B?.name||"",commentCount:0,createdAt:Date.now(),updatedAt:Date.now()}],gt()}}),setTimeout(()=>a.querySelector("#bs-np-title")?.focus(),50)}function ti(){ue("pin:created",t=>{let e=t.data;e.pathname===window.location.pathname&&($.find(n=>n.id===e.id)||($=[...$,e],Mn($.map(n=>n.id)),gt()))}),ue("pin:updated",t=>{let e=t.data,n=$.findIndex(r=>r.id===e.id);n>=0&&($=$.map((r,s)=>s===n?{...r,...e}:r),gt())}),ue("pin:deleted",t=>{let{id:e}=t.data;$=$.filter(n=>n.id!==e),xt(),gt()}),ue("comment:created",t=>{let e=t.data;if(Jt){let n=Jt.querySelector("#bs-lp-cmts");n&&(n.innerHTML+=zn(e),n.scrollTop=n.scrollHeight)}})}function ei(){let t=window.location.pathname,e=()=>{window.location.pathname!==t&&(t=window.location.pathname,window.location.href,ps())},n=history.pushState,r=history.replaceState;history.pushState=function(...s){n.apply(this,s),e()},history.replaceState=function(...s){r.apply(this,s),e()},window.addEventListener("popstate",e)}function Hn(t){return t.split(" ").map(e=>e[0]||"").join("").toUpperCase().slice(0,2)||"U"}var es=["linear-gradient(135deg, #667eea, #764ba2)","linear-gradient(135deg, #f093fb, #f5576c)","linear-gradient(135deg, #4facfe, #00f2fe)","linear-gradient(135deg, #43e97b, #38f9d7)","linear-gradient(135deg, #fa709a, #fee140)","linear-gradient(135deg, #a18cd1, #fbc2eb)","linear-gradient(135deg, #fccb90, #d57eeb)","linear-gradient(135deg, #e0c3fc, #8ec5fc)"];function Dn(t){let e=0;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n)|0;return es[Math.abs(e)%es.length]}function zn(t){let e=t.author?.name||t.authorName||"Unknown",n=t.author?.avatar||t.authorAvatar,r=Hn(e),s=Dn(e),o=n?`<img src="${mt(n)}" alt="" />`:`<span style="font-size:8px">${r}</span>`;return`
598
+ <div class="bs-lp-cmt">
599
+ <div class="bs-lp-cmt-avatar" style="background:${s}">
600
+ ${o}
601
+ </div>
602
+ <div class="bs-lp-cmt-content">
603
+ <div class="bs-lp-cmt-top">
604
+ <span class="bs-lp-cmt-author">${mt(e)}</span>
605
+ <span class="bs-lp-cmt-time">${bs(t.createdAt?new Date(t.createdAt).getTime():Date.now())}</span>
606
+ </div>
607
+ <div class="bs-lp-cmt-body">${mt(t.body)}</div>
608
+ </div>
609
+ </div>
610
+ `}function ns(t,e){let n=t.querySelector(e);n&&n.querySelectorAll(".bs-lp-seg-btn").forEach(r=>{r.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),n.querySelectorAll(".bs-lp-seg-btn").forEach(o=>o.classList.remove("bs-active")),r.classList.add("bs-active")})})}function rs(t,e){return t.querySelector(`${e} .bs-lp-seg-btn.bs-active`)?.dataset.value||""}function mt(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}var G,x=null,P=null,g=null,et=null,ge=null,Et=null,wt=null,J=null,K=!1,rn=!1,Mt=!1,he=null,Bn=null,fs="bugstash_fab_position",Gt="report";var it=Yr(),At=Xr(),O={bug:'<svg width="28" height="28" viewBox="55 38 60 105" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M95.8 44h-29c-3 0-5.4 2.4-5.4 5.4v29c0 3 2.4 5.4 5.4 5.4h19.5c13 0 23.5-10.5 23.5-23.5v-2.8c0-7.5-6-13.5-13.5-13.5h-.5zm-6.2 28.2H74.8V57.4h14.8c5.8 0 10.4 4.7 10.4 10.4s-4.7 10.4-10.4 10.4z" fill="rgba(255,255,255,0.85)"/><path d="M100.4 96h-33.6c-3 0-5.4 2.4-5.4 5.4v33.6c0 3 2.4 5.4 5.4 5.4h22c15 0 27-12 27-27v-3.9c0-7.5-6-13.5-13.5-13.5h-1.9zm-7.8 32.2H74.8v-20h17.8c6.7 0 12.2 5.5 12.2 12.2 0 4.3-3.5 7.8-7.8 7.8h-4.6z" fill="rgba(255,255,255,1)"/></svg>',x:'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',cam:'<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>',check:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><polyline points="20 6 9 17 4 12"/></svg>',report:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>',console:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>',network:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>',ctx:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',settings:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>',history:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>',pin:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>',sun:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',moon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',keyboard:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="2" y="4" width="20" height="16" rx="2"/><line x1="6" y1="8" x2="6" y2="8"/><line x1="10" y1="8" x2="10" y2="8"/><line x1="14" y1="8" x2="14" y2="8"/><line x1="18" y1="8" x2="18" y2="8"/><line x1="8" y1="12" x2="16" y2="12"/><line x1="6" y1="16" x2="18" y2="16"/></svg>'},ni=`
439
611
  /* \u2500\u2500 Shadow Boundary Reset \u2500\u2500
440
612
  * Cuts ALL inherited CSS from host page (color, font, line-height, etc.)
441
613
  * Every element below must declare its own styles explicitly. */
@@ -461,13 +633,21 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
461
633
  border-radius: var(--bs-radius);
462
634
  background: linear-gradient(135deg, var(--bs-fab1), var(--bs-fab2));
463
635
  color: #fff;
464
- cursor: pointer;
636
+ cursor: grab;
465
637
  box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 0 0 0 rgba(0,0,0,0.15);
466
638
  display: flex;
467
639
  align-items: center;
468
640
  justify-content: center;
469
641
  transition: all 0.35s cubic-bezier(0.34,1.56,0.64,1);
470
642
  animation: bs-pulse 3s ease-in-out infinite;
643
+ touch-action: none;
644
+ user-select: none;
645
+ -webkit-user-select: none;
646
+ }
647
+ .bs-fab.bs-dragging {
648
+ cursor: grabbing;
649
+ transition: none;
650
+ animation: none;
471
651
  }
472
652
  .bs-fab:hover {
473
653
  transform: scale(1.08) translateY(-2px);
@@ -1521,7 +1701,7 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1521
1701
  .bs-set-ly.bs-picked { border-color: var(--bs-accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--bs-accent) 25%, transparent); }
1522
1702
  .bs-set-ly-name { font-size: 12px; font-weight: 600; color: var(--bs-text); margin-bottom: 2px; }
1523
1703
  .bs-set-ly-desc { font-size: 10px; color: var(--bs-muted); }
1524
- `;function No(){return`
1704
+ `;function ri(){return`
1525
1705
  <div class="bs-login-form">
1526
1706
  <div class="bs-login-logo">BugStash</div>
1527
1707
  <div class="bs-login-subtitle">Sign in to report bugs & collaborate</div>
@@ -1531,11 +1711,11 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1531
1711
  <button class="bs-login-btn" id="bs-login-submit">Sign In</button>
1532
1712
  <div style="font-size:11px;color:var(--bs-muted);margin-top:4px">Contact your admin for an account</div>
1533
1713
  </div>
1534
- `}function A(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function jo(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 Zr(e){return new Date(e).toLocaleTimeString("en",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}var es="bugstash_history";function _e(){try{return JSON.parse(localStorage.getItem(es)||"[]")}catch{return[]}}function An(e){try{localStorage.setItem(es,JSON.stringify(e))}catch{}}function qo(e){let t=_e(),n=Date.now();t.unshift({...e,id:n}),t.length>50&&(t.length=50),An(t)}function Uo(e){let t=_e().filter(n=>n.id!==e);An(t)}function Fo(e,t){let n=_e(),r=n.findIndex(s=>s.id===e);r>=0&&(n[r]={...n[r],...t},An(n))}function ts(){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:V.environment??"development",commitHash:V.commitHash,user:V.user}}function ns(){let e=ce(),t=le(),n=Me(),r=fe(),s=Te(),o=Ae(),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 rs(){let e=ns(),t=[{id:"ui",label:"UI"},{id:"functionality",label:"Feature"},{id:"performance",label:"Speed"},{id:"crash",label:"Crash"},{id:"security",label:"Security"},{id:"other",label:"Other"}],n=e.counts.errors>0||e.counts.failedNet>0;return`<div class="bs-view">
1714
+ `}function j(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function si(t){let e=Math.floor((Date.now()-t)/1e3);return e<5?"now":e<60?`${e}s ago`:e<3600?`${Math.floor(e/60)}m ago`:new Date(t).toLocaleTimeString()}function ms(t){return new Date(t).toLocaleTimeString("en",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}var gs="bugstash_history";function Qt(){try{return JSON.parse(localStorage.getItem(gs)||"[]")}catch{return[]}}function Nn(t){try{localStorage.setItem(gs,JSON.stringify(t))}catch{}}function oi(t){let e=Qt(),n=Date.now();e.unshift({...t,id:n}),e.length>50&&(e.length=50),Nn(e)}function ii(t){let e=Qt().filter(n=>n.id!==t);Nn(e)}function ai(t,e){let n=Qt(),r=n.findIndex(s=>s.id===t);r>=0&&(n[r]={...n[r],...e},Nn(n))}function hs(){return{url:window.location.href,userAgent:navigator.userAgent,platform:navigator.platform,language:navigator.language,cookiesEnabled:navigator.cookieEnabled,online:navigator.onLine,screenWidth:screen.width,screenHeight:screen.height,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,devicePixelRatio:window.devicePixelRatio,timestamp:Date.now(),environment:G.environment??"development",commitHash:G.commitHash,user:G.user}}function vs(){let t=ft(),e=ut(),n=Dt(),r=vt(),s=zt(),o=Bt(),i=e.filter(p=>p.level==="error"),a="low";t.length>=3||r.length>=3?a="critical":t.length>=1||r.length>=2?a="high":(i.length>0||r.length>=1)&&(a="medium");let c=[];return t.length&&c.push("has-errors"),r.length&&c.push("network-failures"),i.length&&c.push("console-errors"),o?.pageLoadTime&&o.pageLoadTime>3e3&&c.push("slow-load"),o?.cumulativeLayoutShift&&o.cumulativeLayoutShift>.25&&c.push("layout-shift"),navigator.onLine||c.push("offline"),window.innerWidth<768&&c.push("mobile"),{severity:a,tags:c,counts:{logs:e.length,network:n.length,failedNet:r.length,errors:t.length,crumbs:s.length}}}function ys(){let t=vs(),e=[{id:"ui",label:"UI"},{id:"functionality",label:"Feature"},{id:"performance",label:"Speed"},{id:"crash",label:"Crash"},{id:"security",label:"Security"},{id:"other",label:"Other"}],n=t.counts.errors>0||t.counts.failedNet>0;return`<div class="bs-view">
1535
1715
  <form data-bs-form>
1536
- <div class="bs-report-summary${n?" bs-alert":e.counts.logs>0?" bs-has":""}">
1716
+ <div class="bs-report-summary${n?" bs-alert":t.counts.logs>0?" bs-has":""}">
1537
1717
  <div class="bs-report-summary-left">
1538
- ${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">${H.check}</div><span>Auto-collecting ${e.counts.logs} logs, ${e.counts.network} requests, ${e.counts.crumbs} actions</span>`}
1718
+ ${n?`<div class="bs-report-summary-icon bs-warn">!</div><span>${t.counts.errors} error${t.counts.errors!==1?"s":""}, ${t.counts.failedNet} failed request${t.counts.failedNet!==1?"s":""} detected</span>`:`<div class="bs-report-summary-icon">${O.check}</div><span>Auto-collecting ${t.counts.logs} logs, ${t.counts.network} requests, ${t.counts.crumbs} actions</span>`}
1539
1719
  </div>
1540
1720
  </div>
1541
1721
  <div class="bs-field">
@@ -1548,21 +1728,21 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1548
1728
  <div class="bs-field-label">Category</div>
1549
1729
  <input type="hidden" name="category" value="functionality" />
1550
1730
  <div class="bs-cat-row">
1551
- ${t.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1731
+ ${e.map(s=>`<button type="button" class="bs-cat-btn${s.id==="functionality"?" bs-picked":""}" data-cat="${s.id}">${s.label}</button>`).join("")}
1552
1732
  </div>
1553
1733
  </div>
1554
1734
  <div class="bs-field">
1555
1735
  <div class="bs-field-label">Severity</div>
1556
- <input type="hidden" name="severity" value="${e.severity}" />
1736
+ <input type="hidden" name="severity" value="${t.severity}" />
1557
1737
  <div class="bs-sev-row">
1558
- <button type="button" class="bs-sev-btn bs-sev-low${e.severity==="low"?" bs-picked":""}" data-sev="low">Low</button>
1559
- <button type="button" class="bs-sev-btn bs-sev-medium${e.severity==="medium"?" bs-picked":""}" data-sev="medium">Med</button>
1560
- <button type="button" class="bs-sev-btn bs-sev-high${e.severity==="high"?" bs-picked":""}" data-sev="high">High</button>
1561
- <button type="button" class="bs-sev-btn bs-sev-critical${e.severity==="critical"?" bs-picked":""}" data-sev="critical">Critical</button>
1738
+ <button type="button" class="bs-sev-btn bs-sev-low${t.severity==="low"?" bs-picked":""}" data-sev="low">Low</button>
1739
+ <button type="button" class="bs-sev-btn bs-sev-medium${t.severity==="medium"?" bs-picked":""}" data-sev="medium">Med</button>
1740
+ <button type="button" class="bs-sev-btn bs-sev-high${t.severity==="high"?" bs-picked":""}" data-sev="high">High</button>
1741
+ <button type="button" class="bs-sev-btn bs-sev-critical${t.severity==="critical"?" bs-picked":""}" data-sev="critical">Critical</button>
1562
1742
  </div>
1563
1743
  </div>
1564
1744
  <div class="bs-shot-area" data-bs-screenshot>
1565
- <div class="bs-shot-icon">${H.cam}</div>
1745
+ <div class="bs-shot-icon">${O.cam}</div>
1566
1746
  <div class="bs-shot-text">
1567
1747
  <div class="bs-shot-title" data-bs-shot-title>Attach screenshot</div>
1568
1748
  <div class="bs-shot-sub" data-bs-shot-sub>Capture & annotate the current view</div>
@@ -1571,17 +1751,17 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1571
1751
  <div data-bs-annotate></div>
1572
1752
  <button type="submit" class="bs-submit-btn">Submit Report</button>
1573
1753
  </form>
1574
- </div>`}function Wo(){let e=le(),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">${A(n.args.join(" ")).slice(0,500)}</span><span class="bs-log-t">${Zr(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 _o(){let e=Me();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="${A(t.url)}">${A(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 Xo(){let e='<div class="bs-view">',t=ce();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">${A(o.message)}</div>${o.stack?`<div class="bs-err-stack">${A(o.stack)}</div>`:""}<div class="bs-err-meta">${o.type} &middot; ${Zr(o.timestamp)}${o.source?` &middot; ${A(o.source)}:${o.lineno}`:""}</div></div>`).join(""));let n=Ae();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=Te();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">${A(o.message).slice(0,120)}</span><span class="bs-bc-time">${jo(o.timestamp)}</span></div>`).join(""));let s=ts();return e+='<div class="bs-sec">Environment</div>',e+=`<div class="bs-kv">
1575
- <span class="bs-kv-k">URL</span><span class="bs-kv-v">${A(s.url)}</span>
1754
+ </div>`}function li(){let t=ut(),e={error:"bs-le",warn:"bs-lw",log:"bs-ll",info:"bs-li",debug:"bs-ld"};return t.length?`<div class="bs-view">${t.slice().reverse().map(n=>`<div class="bs-log"><span class="bs-log-lv ${e[n.level]||"bs-ll"}">${n.level}</span><span class="bs-log-m">${j(n.args.join(" ")).slice(0,500)}</span><span class="bs-log-t">${ms(n.timestamp)}</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No console logs captured yet.<br>Use the app \u2014 logs will appear here automatically.</p></div></div>'}function ci(){let t=Dt();return t.length?`<div class="bs-view">${t.slice().reverse().map(e=>`<div class="bs-net"><span class="bs-net-m">${e.method}</span><span class="bs-net-s ${e.failed?"bs-fail":"bs-ok"}">${e.status||"ERR"}</span><span class="bs-net-u" title="${j(e.url)}">${j(e.url)}</span><span class="bs-net-d">${e.duration}ms</span></div>`).join("")}</div>`:'<div class="bs-view"><div class="bs-empty"><p>No network requests captured yet.<br>API calls will show up here automatically.</p></div></div>'}function di(){let t='<div class="bs-view">',e=ft();e.length&&(t+=`<div class="bs-sec">Errors <span class="bs-sec-n">${e.length}</span></div>`,t+=e.slice().reverse().map(o=>`<div class="bs-err-card"><div class="bs-err-m">${j(o.message)}</div>${o.stack?`<div class="bs-err-stack">${j(o.stack)}</div>`:""}<div class="bs-err-meta">${o.type} &middot; ${ms(o.timestamp)}${o.source?` &middot; ${j(o.source)}:${o.lineno}`:""}</div></div>`).join(""));let n=Bt();if(n){t+='<div class="bs-sec">Performance</div>';let o=[["Page Load",n.pageLoadTime,5e3],["DOM Ready",n.domContentLoaded,3e3],["First Paint",n.firstPaint,2e3],["FCP",n.firstContentfulPaint,2500],["LCP",n.largestContentfulPaint,4e3],["FID",n.firstInputDelay,300]];for(let[i,a,c]of o){if(a===void 0)continue;let p=Math.min(100,a/c*100);t+=`<div class="bs-pf"><span class="bs-pf-l">${i}</span><div class="bs-pf-tr"><div class="bs-pf-fl${p>75?" bs-slow":""}" style="width:${p}%"></div></div><span class="bs-pf-v">${a}ms</span></div>`}if(n.cumulativeLayoutShift!==void 0){let i=Math.min(100,n.cumulativeLayoutShift*400);t+=`<div class="bs-pf"><span class="bs-pf-l">CLS</span><div class="bs-pf-tr"><div class="bs-pf-fl${i>40?" bs-slow":""}" style="width:${i}%"></div></div><span class="bs-pf-v">${n.cumulativeLayoutShift}</span></div>`}}let r=zt();r.length&&(t+=`<div class="bs-sec">Your activity trail <span class="bs-sec-n">${r.length}</span></div>`,t+=r.slice().reverse().map(o=>`<div class="bs-bc"><span class="bs-bc-t bs-t-${o.type}">${o.type}</span><span class="bs-bc-m">${j(o.message).slice(0,120)}</span><span class="bs-bc-time">${si(o.timestamp)}</span></div>`).join(""));let s=hs();return t+='<div class="bs-sec">Environment</div>',t+=`<div class="bs-kv">
1755
+ <span class="bs-kv-k">URL</span><span class="bs-kv-v">${j(s.url)}</span>
1576
1756
  <span class="bs-kv-k">Viewport</span><span class="bs-kv-v">${s.viewportWidth}&times;${s.viewportHeight} @${s.devicePixelRatio}x</span>
1577
1757
  <span class="bs-kv-k">Screen</span><span class="bs-kv-v">${s.screenWidth}&times;${s.screenHeight}</span>
1578
- <span class="bs-kv-k">Platform</span><span class="bs-kv-v">${A(s.platform)}</span>
1758
+ <span class="bs-kv-k">Platform</span><span class="bs-kv-v">${j(s.platform)}</span>
1579
1759
  <span class="bs-kv-k">Language</span><span class="bs-kv-v">${s.language}</span>
1580
- ${V.commitHash?`<span class="bs-kv-k">Commit</span><span class="bs-kv-v">${A(V.commitHash)}</span>`:""}
1581
- ${V.user?.email?`<span class="bs-kv-k">User</span><span class="bs-kv-v">${A(V.user.email)}</span>`:""}
1582
- </div>`,e+="</div>",e}function Yo(){let e=_e();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}">
1760
+ ${G.commitHash?`<span class="bs-kv-k">Commit</span><span class="bs-kv-v">${j(G.commitHash)}</span>`:""}
1761
+ ${G.user?.email?`<span class="bs-kv-k">User</span><span class="bs-kv-v">${j(G.user.email)}</span>`:""}
1762
+ </div>`,t+="</div>",t}function pi(){let t=Qt();if(!t.length)return'<div class="bs-view"><div class="bs-empty"><p>No reports yet.<br>Submitted bugs will appear here.</p></div></div>';let e={ui:"UI",functionality:"Feature",performance:"Perf",crash:"Crash",security:"Security",other:"Other"},n=s=>{let o=new Date(s),a=new Date().getTime()-o.getTime(),c=Math.floor(a/6e4);if(c<1)return"Just now";if(c<60)return`${c}m ago`;let p=Math.floor(c/60);if(p<24)return`${p}h ago`;let b=Math.floor(p/24);return b<7?`${b}d ago`:o.toLocaleDateString("en",{month:"short",day:"numeric"})},r='<div class="bs-view">';for(let s of t){let o=s.pins?.length?`<div class="bs-hist-pins">${s.pins.slice(0,5).map(i=>`<div class="bs-hist-pin-dot" style="background:${["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6"][i.number%5]}">${i.number}</div>`).join("")}${s.pins.length>5?`<span>+${s.pins.length-5}</span>`:""}</div>`:"";r+=`<div class="bs-hist-card" data-hist-id="${s.id}">
1583
1763
  <div class="bs-hist-top">
1584
- <div class="bs-hist-title">${A(s.title)}</div>
1764
+ <div class="bs-hist-title">${j(s.title)}</div>
1585
1765
  ${s.screenshot?`<img class="bs-hist-thumb" src="${s.screenshot}" alt=""/>`:""}
1586
1766
  <div class="bs-hist-actions">
1587
1767
  <button class="bs-hist-btn" data-hist-edit="${s.id}" title="Edit"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/></svg></button>
@@ -1589,26 +1769,26 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1589
1769
  </div>
1590
1770
  </div>
1591
1771
  <div class="bs-hist-meta">
1592
- <span class="bs-hist-badge bs-cat">${t[s.category]||s.category}</span>
1772
+ <span class="bs-hist-badge bs-cat">${e[s.category]||s.category}</span>
1593
1773
  <span class="bs-hist-badge bs-sev-${s.severity}">${s.severity}</span>
1594
1774
  <span class="bs-hist-badge bs-status-${s.status}">${s.status}</span>
1595
1775
  </div>
1596
- ${s.description?`<div class="bs-hist-desc">${A(s.description)}</div>`:""}
1776
+ ${s.description?`<div class="bs-hist-desc">${j(s.description)}</div>`:""}
1597
1777
  <div class="bs-hist-foot">
1598
- <span>${n(s.createdAt)} &middot; ${A(s.url.replace(/^https?:\/\//,"").slice(0,40))}</span>
1778
+ <span>${n(s.createdAt)} &middot; ${j(s.url.replace(/^https?:\/\//,"").slice(0,40))}</span>
1599
1779
  ${o}
1600
1780
  </div>
1601
- </div>`}return r+="</div>",r}function Vo(){let e=Nt(),t=qt(),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===Ee.id?" bs-picked":""}" data-set-layout="${r.id}"><div class="bs-set-ly-name">${A(r.name)}</div><div class="bs-set-ly-desc">${A(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===ye.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">${A(r.name)}</div></button>`;return n+="</div>",n+="</div>",n}function Jo(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,y=-1,w=!1,k=!1,me=0,Ye=0,D=0,B=0,j=[],gt=["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6","#ec4899"],re=new Image;re.src=t;let xe=document.createElement("div");xe.className="bs-ann-wrap";let ve=document.createElement("div");ve.className="bs-ann-viewport";let v=document.createElement("canvas");v.className="bs-ann-canvas bs-draw";let ee=document.createElement("div");ee.className="bs-ann-toolbar";let Le={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>'},q={select:"Select & Move",draw:"Draw",arrow:"Arrow",rect:"Rectangle",circle:"Circle",text:"Text",highlight:"Highlight",pin:"Pin Issue"},tn=[],gs=l=>{s=l,b=-1,v.className=`bs-ann-canvas bs-${l}`,tn.forEach(f=>f.classList.remove("bs-sel")),tn.find(f=>f.dataset.tool===l)?.classList.add("bs-sel")};Object.keys(Le).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=q[l],f.innerHTML=Le[l],f.addEventListener("click",()=>gs(l)),tn.push(f),ee.appendChild(f)}),ee.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),n.forEach((l,f)=>{let g=document.createElement("button");g.type="button",g.className=`bs-ann-dot${f===0?" bs-sel":""}`,g.style.background=l,g.addEventListener("click",()=>{r=l,ee.querySelectorAll(".bs-ann-dot").forEach(C=>C.classList.remove("bs-sel")),g.classList.add("bs-sel")}),ee.appendChild(g)}),ee.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"}));let ae=document.createElement("input");ae.type="range",ae.min="1",ae.max="12",ae.value="4",ae.className="bs-ann-size",ae.title="Brush size",ae.addEventListener("input",()=>{o=parseInt(ae.value)}),ee.appendChild(ae);let ht=document.createElement("div");ht.className="bs-ann-right";let yt=(l,f)=>{let g=document.createElement("button");return g.type="button",g.className="bs-ann-btn",g.title=l,g.innerHTML=f,g},zn=yt("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>'),In=Object.assign(document.createElement("span"),{className:"bs-ann-zoom-label",textContent:"100%"}),Hn=yt("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>'),Dn=yt("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>'),Bn=yt("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>'),On=Object.assign(document.createElement("button"),{type:"button",className:"bs-ann-clr-btn",textContent:"Clear"}),nn=()=>{v.style.transform=`scale(${i})`,In.textContent=`${Math.round(i*100)}%`};Hn.addEventListener("click",()=>{i<3&&(i=Math.min(3,i+.25),nn())}),zn.addEventListener("click",()=>{i>.5&&(i=Math.max(.5,i-.25),nn())}),Dn.addEventListener("click",()=>{i=1,nn()}),ht.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),[zn,In,Hn,Dn,Bn,On].forEach(l=>ht.appendChild(l)),ee.appendChild(ht);let xt=document.createElement("div");xt.className="bs-ann-pins";let Ce=document.createElement("div");Ce.className="bs-ann-pin-list",Ce.style.display="none",ve.appendChild(v),ve.appendChild(xt),xe.appendChild(ve),xe.appendChild(ee),xe.appendChild(Ce),e.innerHTML="",e.appendChild(xe);let vt=()=>{xt.innerHTML="",Ce.innerHTML="",Ce.style.display=p.length?"":"none",p.forEach((l,f)=>{let g=document.createElement("div");g.className="bs-ann-pin",g.style.background=l.color,g.style.color=l.color;let C=l.x/(v.width||1)*100,m=l.y/(v.height||1)*100;g.style.left=`${C}%`,g.style.top=`${m}%`,g.innerHTML=`<span class="bs-ann-pin-n">${f+1}</span><span class="bs-ann-pin-pulse"></span>`,g.title=`#${f+1}: ${l.note}`;let T=!1;g.addEventListener("mousedown",M=>{M.stopPropagation(),T=!0,g.classList.add("bs-dragging");let u=S=>{if(!T)return;let L=ve.getBoundingClientRect();l.x=(S.clientX-L.left)/L.width*v.width,l.y=(S.clientY-L.top)/L.height*v.height,g.style.left=`${(S.clientX-L.left)/L.width*100}%`,g.style.top=`${(S.clientY-L.top)/L.height*100}%`},x=()=>{T=!1,g.classList.remove("bs-dragging"),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",x),vt()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",x)}),xt.appendChild(g);let N=document.createElement("div");N.className="bs-ann-pin-item",N.innerHTML=`
1602
- <div class="bs-ann-pin-num" style="background:${l.color}">${f+1}</div>
1781
+ </div>`}return r+="</div>",r}function bi(){let t=Xe(),e=Je(),n='<div class="bs-view">';n+='<div class="bs-set-sec">Layout</div>',n+='<div class="bs-set-ly-grid">';for(let r of e)n+=`<button class="bs-set-ly${r.id===At.id?" bs-picked":""}" data-set-layout="${r.id}"><div class="bs-set-ly-name">${j(r.name)}</div><div class="bs-set-ly-desc">${j(r.description)}</div></button>`;n+="</div>",n+='<div class="bs-set-sec">Theme</div>',n+='<div class="bs-set-grid">';for(let r of t)n+=`<button class="bs-set-card${r.id===it.id?" bs-picked":""}" data-set-theme="${r.id}"><div class="bs-set-preview" style="background:${r.preview[0]}"><div class="bs-set-dot" style="background:${r.preview[1]}"></div><div class="bs-set-dot" style="background:${r.vars["--bs-accent2"]||r.preview[1]};opacity:0.6"></div></div><div class="bs-set-name">${j(r.name)}</div></button>`;return n+="</div>",n+="</div>",n}function ui(t,e){let n=["#f87171","#3b82f6","#fb923c","#4ade80","#a78bfa","#facc15"],r=n[0],s="draw",o=4,i=1,a=!1,c=[],p=[],b=-1,v=-1,S=!1,D=!1,R=0,Z=0,w=0,E=0,T=[],pt=["#ef4444","#3b82f6","#f59e0b","#10b981","#8b5cf6","#ec4899"],lt=new Image;lt.src=e;let Lt=document.createElement("div");Lt.className="bs-ann-wrap";let St=document.createElement("div");St.className="bs-ann-viewport";let k=document.createElement("canvas");k.className="bs-ann-canvas bs-draw";let rt=document.createElement("div");rt.className="bs-ann-toolbar";let Ee={select:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/><path d="M13 13l6 6"/></svg>',draw:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/></svg>',arrow:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>',rect:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/></svg>',circle:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/></svg>',text:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9.5" y1="20" x2="14.5" y2="20"/><line x1="12" y1="4" x2="12" y2="20"/></svg>',highlight:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M9 11l-6 6v3h9l3-3"/><path d="M22 12l-4.6 4.6a2 2 0 01-2.8 0l-5.2-5.2a2 2 0 010-2.8L14 4"/></svg>',pin:'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>'},te={select:"Select & Move",draw:"Draw",arrow:"Arrow",rect:"Rectangle",circle:"Circle",text:"Text",highlight:"Highlight",pin:"Pin Issue"},B=[],zs=l=>{s=l,b=-1,k.className=`bs-ann-canvas bs-${l}`,B.forEach(m=>m.classList.remove("bs-sel")),B.find(m=>m.dataset.tool===l)?.classList.add("bs-sel")};Object.keys(Ee).forEach(l=>{let m=document.createElement("button");m.type="button",m.dataset.tool=l,m.className=`bs-ann-btn${l===s?" bs-sel":""}`,m.title=te[l],m.innerHTML=Ee[l],m.addEventListener("click",()=>zs(l)),B.push(m),rt.appendChild(m)}),rt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),n.forEach((l,m)=>{let h=document.createElement("button");h.type="button",h.className=`bs-ann-dot${m===0?" bs-sel":""}`,h.style.background=l,h.addEventListener("click",()=>{r=l,rt.querySelectorAll(".bs-ann-dot").forEach(z=>z.classList.remove("bs-sel")),h.classList.add("bs-sel")}),rt.appendChild(h)}),rt.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"}));let bt=document.createElement("input");bt.type="range",bt.min="1",bt.max="12",bt.value="4",bt.className="bs-ann-size",bt.title="Brush size",bt.addEventListener("input",()=>{o=parseInt(bt.value)}),rt.appendChild(bt);let Le=document.createElement("div");Le.className="bs-ann-right";let Se=(l,m)=>{let h=document.createElement("button");return h.type="button",h.className="bs-ann-btn",h.title=l,h.innerHTML=m,h},Un=Se("Zoom out",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),Fn=Object.assign(document.createElement("span"),{className:"bs-ann-zoom-label",textContent:"100%"}),_n=Se("Zoom in",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="11" y1="8" x2="11" y2="14"/><line x1="8" y1="11" x2="14" y2="11"/></svg>'),Wn=Se("Fit",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>'),Yn=Se("Undo",'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 105.42-8.49L1 10"/></svg>'),Xn=Object.assign(document.createElement("button"),{type:"button",className:"bs-ann-clr-btn",textContent:"Clear"}),cn=()=>{k.style.transform=`scale(${i})`,Fn.textContent=`${Math.round(i*100)}%`};_n.addEventListener("click",()=>{i<3&&(i=Math.min(3,i+.25),cn())}),Un.addEventListener("click",()=>{i>.5&&(i=Math.max(.5,i-.25),cn())}),Wn.addEventListener("click",()=>{i=1,cn()}),Le.appendChild(Object.assign(document.createElement("div"),{className:"bs-ann-sep"})),[Un,Fn,_n,Wn,Yn,Xn].forEach(l=>Le.appendChild(l)),rt.appendChild(Le);let Ce=document.createElement("div");Ce.className="bs-ann-pins";let Rt=document.createElement("div");Rt.className="bs-ann-pin-list",Rt.style.display="none",St.appendChild(k),St.appendChild(Ce),Lt.appendChild(St),Lt.appendChild(rt),Lt.appendChild(Rt),t.innerHTML="",t.appendChild(Lt);let Pe=()=>{Ce.innerHTML="",Rt.innerHTML="",Rt.style.display=p.length?"":"none",p.forEach((l,m)=>{let h=document.createElement("div");h.className="bs-ann-pin",h.style.background=l.color,h.style.color=l.color;let z=l.x/(k.width||1)*100,f=l.y/(k.height||1)*100;h.style.left=`${z}%`,h.style.top=`${f}%`,h.innerHTML=`<span class="bs-ann-pin-n">${m+1}</span><span class="bs-ann-pin-pulse"></span>`,h.title=`#${m+1}: ${l.note}`;let I=!1;h.addEventListener("mousedown",N=>{N.stopPropagation(),I=!0,h.classList.add("bs-dragging");let u=M=>{if(!I)return;let A=St.getBoundingClientRect();l.x=(M.clientX-A.left)/A.width*k.width,l.y=(M.clientY-A.top)/A.height*k.height,h.style.left=`${(M.clientX-A.left)/A.width*100}%`,h.style.top=`${(M.clientY-A.top)/A.height*100}%`},y=()=>{I=!1,h.classList.remove("bs-dragging"),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",y),Pe()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",y)}),Ce.appendChild(h);let U=document.createElement("div");U.className="bs-ann-pin-item",U.innerHTML=`
1782
+ <div class="bs-ann-pin-num" style="background:${l.color}">${m+1}</div>
1603
1783
  <div class="bs-ann-pin-body">
1604
- <div class="bs-ann-pin-note">${A(l.note)}</div>
1605
- <div class="bs-ann-pin-loc">${Math.round(C)}% \xD7 ${Math.round(m)}%</div>
1606
- </div>`;let F=document.createElement("button");F.type="button",F.className="bs-ann-pin-del",F.innerHTML="&times;",F.title="Remove pin",F.addEventListener("click",()=>{p.splice(f,1),vt()}),N.appendChild(F),Ce.appendChild(N)})},c,rn=()=>a?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.35)",we=(l,f)=>{c.save(),c.strokeStyle=rn(),c.lineWidth=f+3,c.lineCap="round",c.lineJoin="round",c.globalAlpha=.5,l(),c.restore()},hs=(l,f=!1)=>{if(l.type==="draw"||l.type==="highlight"){if(l.points.length<2)return;let m=l.type==="highlight"?.25:1,T=l.type==="highlight"?l.size*4+10:l.size,N=()=>{c.beginPath(),c.moveTo(l.points[0].x,l.points[0].y);for(let F=1;F<l.points.length;F++)c.lineTo(l.points[F].x,l.points[F].y);c.stroke()};l.type!=="highlight"&&we(N,T),c.strokeStyle=l.color,c.lineWidth=T,c.lineCap="round",c.lineJoin="round",c.globalAlpha=m,N(),c.globalAlpha=1}else if(l.type==="rect"){let m=()=>c.strokeRect(l.x,l.y,l.w,l.h);we(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()};we(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),T=12+l.size*2,N=()=>{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-T*Math.cos(m-.45),l.y2-T*Math.sin(m-.45)),c.moveTo(l.x2,l.y2),c.lineTo(l.x2-T*Math.cos(m+.45),l.y2-T*Math.sin(m+.45)),c.stroke()};we(N,l.size),c.strokeStyle=l.color,c.lineWidth=l.size,c.lineCap="round",c.lineJoin="round",N()}else if(l.type==="text"){let m=l.size*5+12;c.font=`bold ${m}px Inter, -apple-system, sans-serif`,c.fillStyle=rn(),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 g=!f&&b>=0&&d[b]===l,C=!f&&!g&&y>=0&&d[y]===l;if(g||C){let m=Ve(l);if(c.save(),c.setLineDash([6,4]),c.strokeStyle=a?"#fff":"#000",c.lineWidth=g?1.5:1,c.globalAlpha=g?.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=g?.9:.6;let N=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[F,M]of N)c.fillStyle="#fff",c.fillRect(F-5,M-5,10,10),c.strokeStyle=a?"#aaa":"#333",c.lineWidth=1.2,c.strokeRect(F-5,M-5,10,10)}c.restore()}},U=()=>{c.clearRect(0,0,v.width,v.height),c.drawImage(re,0,0);for(let l of d)hs(l)},Ve=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 T=Math.min(l.x1,l.x2),N=Math.min(l.y1,l.y2);return{x:T,y:N,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,g=1/0,C=-1/0,m=-1/0;for(let T of l.points)f=Math.min(f,T.x),g=Math.min(g,T.y),C=Math.max(C,T.x),m=Math.max(m,T.y);return{x:f,y:g,w:C-f||10,h:m-g||10}},wt=(l,f)=>{for(let g=d.length-1;g>=0;g--){let C=Ve(d[g]),m=8;if(l>=C.x-m&&l<=C.x+C.w+m&&f>=C.y-m&&f<=C.y+C.h+m)return g}return-1},ys=(l,f,g)=>{if(l.type==="draw"||l.type==="highlight")for(let C of l.points)C.x+=f,C.y+=g;else l.type==="rect"?(l.x+=f,l.y+=g):l.type==="circle"?(l.cx+=f,l.cy+=g):l.type==="arrow"?(l.x1+=f,l.y1+=g,l.x2+=f,l.y2+=g):l.type==="text"&&(l.x+=f,l.y+=g)};re.onload=()=>{let f=(e.clientWidth||450)/re.width;v.width=re.width,v.height=re.height,v.style.height=`${re.height*f}px`,c=v.getContext("2d"),c.drawImage(re,0,0);let g=[[10,10],[v.width-10,10],[10,v.height-10],[v.width-10,v.height-10],[v.width/2,v.height/2]],C=0;for(let[M,u]of g){let x=c.getImageData(M,u,1,1).data;C+=(x[0]*299+x[1]*587+x[2]*114)/1e3}a=C/g.length<128;let m=M=>{let u=v.getBoundingClientRect();return{x:(M.clientX-u.left)*(v.width/u.width),y:(M.clientY-u.top)*(v.height/u.height)}},T=!1;v.addEventListener("mousedown",M=>{let u=m(M);if(s==="select"){let x=wt(u.x,u.y);if(x>=0){b=x,w=!0;let S=Ve(d[x]);me=u.x-S.x,Ye=u.y-S.y,v.classList.add("bs-grabbing"),v.classList.remove("bs-grab"),U()}else b=-1,U();return}if(s!=="pin"&&s!=="text"){let x=wt(u.x,u.y);if(x>=0){b=x,w=!0,T=!0;let S=Ve(d[x]);me=u.x-S.x,Ye=u.y-S.y,v.classList.add("bs-grabbing"),U();return}}if(k=!0,D=u.x,B=u.y,s==="pin"){k=!1;let x=prompt("Describe the issue at this spot:");if(x){let S=gt[p.length%gt.length];p.push({x:u.x,y:u.y,note:x,color:S}),vt()}return}if(s==="text"){k=!1;let x=prompt("Enter text:");x&&(d.push({type:"text",color:r,size:o,x:u.x,y:u.y,text:x}),U());return}(s==="draw"||s==="highlight")&&(j=[{x:u.x,y:u.y}])}),v.addEventListener("mousemove",M=>{let u=m(M);if(w&&b>=0){let x=Ve(d[b]),S=u.x-me-x.x,L=u.y-Ye-x.y;ys(d[b],S,L),U();return}if(s==="select"){let x=wt(u.x,u.y);v.classList.toggle("bs-grab",x>=0),y!==x&&(y=x,U());return}if(s!=="pin"&&s!=="text"&&!k){let x=wt(u.x,u.y);v.classList.toggle("bs-grab",x>=0),y!==x&&(y=x,U())}if(k){if(s==="draw"||s==="highlight"){j.push({x:u.x,y:u.y}),U();let x=s==="highlight"?.25:1,S=s==="highlight"?o*4+10:o;if(s!=="highlight"){c.save(),c.strokeStyle=rn(),c.lineWidth=S+3,c.lineCap="round",c.lineJoin="round",c.globalAlpha=.5,c.beginPath(),c.moveTo(j[0].x,j[0].y);for(let L=1;L<j.length;L++)c.lineTo(j[L].x,j[L].y);c.stroke(),c.restore()}c.strokeStyle=r,c.lineWidth=S,c.lineCap="round",c.lineJoin="round",c.globalAlpha=x,c.beginPath(),c.moveTo(j[0].x,j[0].y);for(let L=1;L<j.length;L++)c.lineTo(j[L].x,j[L].y);c.stroke(),c.globalAlpha=1}else if(U(),c.strokeStyle=r,c.lineWidth=o,c.lineCap="round",c.lineJoin="round",s==="rect")we(()=>c.strokeRect(D,B,u.x-D,u.y-B),o),c.strokeStyle=r,c.lineWidth=o,c.strokeRect(D,B,u.x-D,u.y-B);else if(s==="circle"){let x=Math.abs(u.x-D)/2,S=Math.abs(u.y-B)/2,L=D+(u.x-D)/2,Nn=B+(u.y-B)/2;we(()=>{c.beginPath(),c.ellipse(L,Nn,x,S,0,0,Math.PI*2),c.stroke()},o),c.strokeStyle=r,c.lineWidth=o,c.beginPath(),c.ellipse(L,Nn,x,S,0,0,Math.PI*2),c.stroke()}else if(s==="arrow"){let x=Math.atan2(u.y-B,u.x-D),S=12+o*2,L=()=>{c.beginPath(),c.moveTo(D,B),c.lineTo(u.x,u.y),c.stroke(),c.beginPath(),c.moveTo(u.x,u.y),c.lineTo(u.x-S*Math.cos(x-.45),u.y-S*Math.sin(x-.45)),c.moveTo(u.x,u.y),c.lineTo(u.x-S*Math.cos(x+.45),u.y-S*Math.sin(x+.45)),c.stroke()};we(L,o),c.strokeStyle=r,c.lineWidth=o,c.lineCap="round",c.lineJoin="round",L()}}});let N=M=>{if(w)return w=!1,T=!1,b=-1,v.classList.remove("bs-grabbing"),v.classList.remove("bs-grab"),U(),void 0;if(!k)return;k=!1;let u=m(M);if(s==="draw"||s==="highlight")j.length>1&&d.push({type:s,color:r,size:o,alpha:s==="highlight"?.25:1,points:[...j]}),j=[];else if(s==="rect")d.push({type:"rect",color:r,size:o,x:D,y:B,w:u.x-D,h:u.y-B});else if(s==="circle"){let x=Math.abs(u.x-D)/2,S=Math.abs(u.y-B)/2;d.push({type:"circle",color:r,size:o,cx:D+(u.x-D)/2,cy:B+(u.y-B)/2,rx:x,ry:S})}else s==="arrow"&&d.push({type:"arrow",color:r,size:o,x1:D,y1:B,x2:u.x,y2:u.y});U()};v.addEventListener("mouseup",N),v.addEventListener("mouseleave",M=>{w?(w=!1,T=!1,v.classList.remove("bs-grabbing"),v.classList.remove("bs-grab"),U()):k&&N(M)});let F=M=>{b>=0&&(M.key==="Delete"||M.key==="Backspace")&&(d.splice(b,1),b=-1,U())};document.addEventListener("keydown",F),Bn.addEventListener("click",()=>{d.length&&(d.pop(),b=-1,U())}),On.addEventListener("click",()=>{d.length=0,p.length=0,b=-1,U(),vt()})};let xs=()=>{for(let l=0;l<p.length;l++){let f=p[l],g=16;c.beginPath(),c.arc(f.x,f.y-g,g,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-g),c.textAlign="start",c.textBaseline="alphabetic"}};return{getAnnotation:()=>{try{return b=-1,U(),xs(),v.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 bt(e){if(!h)return;We=e,h.querySelectorAll(".bs-tab").forEach(r=>{r.classList.toggle("bs-active",r.dataset.tab===e)});let t=h.querySelector(".bs-scroll"),n={report:rs,console:Wo,network:_o,context:Xo,history:Yo,settings:Vo};t.innerHTML=n[e](),t.scrollTop=0,ss()}function ss(){if(!h)return;if(We==="history"){h.querySelectorAll("[data-hist-del]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histDel),s=h.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",()=>{Uo(r),bt("history")}),d.addEventListener("click",()=>i.remove()),i.appendChild(a),i.appendChild(d),s.appendChild(i)})}),h.querySelectorAll("[data-hist-edit]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histEdit),s=h.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=_e().find(w=>w.id===r);if(!i)return;let a=document.createElement("div");a.className="bs-hist-edit-wrap",a.innerHTML=`
1784
+ <div class="bs-ann-pin-note">${j(l.note)}</div>
1785
+ <div class="bs-ann-pin-loc">${Math.round(z)}% \xD7 ${Math.round(f)}%</div>
1786
+ </div>`;let _=document.createElement("button");_.type="button",_.className="bs-ann-pin-del",_.innerHTML="&times;",_.title="Remove pin",_.addEventListener("click",()=>{p.splice(m,1),Pe()}),U.appendChild(_),Rt.appendChild(U)})},d,dn=()=>a?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.35)",Ct=(l,m)=>{d.save(),d.strokeStyle=dn(),d.lineWidth=m+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,l(),d.restore()},Is=(l,m=!1)=>{if(l.type==="draw"||l.type==="highlight"){if(l.points.length<2)return;let f=l.type==="highlight"?.25:1,I=l.type==="highlight"?l.size*4+10:l.size,U=()=>{d.beginPath(),d.moveTo(l.points[0].x,l.points[0].y);for(let _=1;_<l.points.length;_++)d.lineTo(l.points[_].x,l.points[_].y);d.stroke()};l.type!=="highlight"&&Ct(U,I),d.strokeStyle=l.color,d.lineWidth=I,d.lineCap="round",d.lineJoin="round",d.globalAlpha=f,U(),d.globalAlpha=1}else if(l.type==="rect"){let f=()=>d.strokeRect(l.x,l.y,l.w,l.h);Ct(f,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",f()}else if(l.type==="circle"){let f=()=>{d.beginPath(),d.ellipse(l.cx,l.cy,Math.abs(l.rx),Math.abs(l.ry),0,0,Math.PI*2),d.stroke()};Ct(f,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,f()}else if(l.type==="arrow"){let f=Math.atan2(l.y2-l.y1,l.x2-l.x1),I=12+l.size*2,U=()=>{d.beginPath(),d.moveTo(l.x1,l.y1),d.lineTo(l.x2,l.y2),d.stroke(),d.beginPath(),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-I*Math.cos(f-.45),l.y2-I*Math.sin(f-.45)),d.moveTo(l.x2,l.y2),d.lineTo(l.x2-I*Math.cos(f+.45),l.y2-I*Math.sin(f+.45)),d.stroke()};Ct(U,l.size),d.strokeStyle=l.color,d.lineWidth=l.size,d.lineCap="round",d.lineJoin="round",U()}else if(l.type==="text"){let f=l.size*5+12;d.font=`bold ${f}px Inter, -apple-system, sans-serif`,d.fillStyle=dn(),d.globalAlpha=.6,d.fillText(l.text,l.x+1,l.y+1),d.globalAlpha=1,d.fillStyle=l.color,d.fillText(l.text,l.x,l.y)}let h=!m&&b>=0&&c[b]===l,z=!m&&!h&&v>=0&&c[v]===l;if(h||z){let f=ee(l);if(d.save(),d.setLineDash([6,4]),d.strokeStyle=a?"#fff":"#000",d.lineWidth=h?1.5:1,d.globalAlpha=h?.7:.45,d.strokeRect(f.x-4,f.y-4,f.w+8,f.h+8),l.type==="rect"||l.type==="circle"){d.setLineDash([]),d.globalAlpha=h?.9:.6;let U=l.type==="rect"?[[f.x,f.y],[f.x+f.w,f.y],[f.x,f.y+f.h],[f.x+f.w,f.y+f.h]]:[[f.x+f.w/2,f.y],[f.x+f.w,f.y+f.h/2],[f.x+f.w/2,f.y+f.h],[f.x,f.y+f.h/2]];for(let[_,N]of U)d.fillStyle="#fff",d.fillRect(_-5,N-5,10,10),d.strokeStyle=a?"#aaa":"#333",d.lineWidth=1.2,d.strokeRect(_-5,N-5,10,10)}d.restore()}},F=()=>{d.clearRect(0,0,k.width,k.height),d.drawImage(lt,0,0);for(let l of c)Is(l)},ee=l=>{if(l.type==="rect")return{x:Math.min(l.x,l.x+l.w),y:Math.min(l.y,l.y+l.h),w:Math.abs(l.w),h:Math.abs(l.h)};if(l.type==="circle")return{x:l.cx-Math.abs(l.rx),y:l.cy-Math.abs(l.ry),w:Math.abs(l.rx)*2,h:Math.abs(l.ry)*2};if(l.type==="arrow"){let I=Math.min(l.x1,l.x2),U=Math.min(l.y1,l.y2);return{x:I,y:U,w:Math.abs(l.x2-l.x1)||20,h:Math.abs(l.y2-l.y1)||20}}if(l.type==="text")return{x:l.x,y:l.y-(l.size*5+12),w:l.text.length*(l.size*3+8),h:l.size*5+16};if(l.points.length===0)return{x:0,y:0,w:0,h:0};let m=1/0,h=1/0,z=-1/0,f=-1/0;for(let I of l.points)m=Math.min(m,I.x),h=Math.min(h,I.y),z=Math.max(z,I.x),f=Math.max(f,I.y);return{x:m,y:h,w:z-m||10,h:f-h||10}},Te=(l,m)=>{for(let h=c.length-1;h>=0;h--){let z=ee(c[h]),f=8;if(l>=z.x-f&&l<=z.x+z.w+f&&m>=z.y-f&&m<=z.y+z.h+f)return h}return-1},Hs=(l,m,h)=>{if(l.type==="draw"||l.type==="highlight")for(let z of l.points)z.x+=m,z.y+=h;else l.type==="rect"?(l.x+=m,l.y+=h):l.type==="circle"?(l.cx+=m,l.cy+=h):l.type==="arrow"?(l.x1+=m,l.y1+=h,l.x2+=m,l.y2+=h):l.type==="text"&&(l.x+=m,l.y+=h)};lt.onload=()=>{let m=(t.clientWidth||450)/lt.width;k.width=lt.width,k.height=lt.height,k.style.height=`${lt.height*m}px`,d=k.getContext("2d"),d.drawImage(lt,0,0);let h=[[10,10],[k.width-10,10],[10,k.height-10],[k.width-10,k.height-10],[k.width/2,k.height/2]],z=0;for(let[N,u]of h){let y=d.getImageData(N,u,1,1).data;z+=(y[0]*299+y[1]*587+y[2]*114)/1e3}a=z/h.length<128;let f=N=>{let u=k.getBoundingClientRect();return{x:(N.clientX-u.left)*(k.width/u.width),y:(N.clientY-u.top)*(k.height/u.height)}},I=!1;k.addEventListener("mousedown",N=>{let u=f(N);if(s==="select"){let y=Te(u.x,u.y);if(y>=0){b=y,S=!0;let M=ee(c[y]);R=u.x-M.x,Z=u.y-M.y,k.classList.add("bs-grabbing"),k.classList.remove("bs-grab"),F()}else b=-1,F();return}if(s!=="pin"&&s!=="text"){let y=Te(u.x,u.y);if(y>=0){b=y,S=!0,I=!0;let M=ee(c[y]);R=u.x-M.x,Z=u.y-M.y,k.classList.add("bs-grabbing"),F();return}}if(D=!0,w=u.x,E=u.y,s==="pin"){D=!1;let y=prompt("Describe the issue at this spot:");if(y){let M=pt[p.length%pt.length];p.push({x:u.x,y:u.y,note:y,color:M}),Pe()}return}if(s==="text"){D=!1;let y=prompt("Enter text:");y&&(c.push({type:"text",color:r,size:o,x:u.x,y:u.y,text:y}),F());return}(s==="draw"||s==="highlight")&&(T=[{x:u.x,y:u.y}])}),k.addEventListener("mousemove",N=>{let u=f(N);if(S&&b>=0){let y=ee(c[b]),M=u.x-R-y.x,A=u.y-Z-y.y;Hs(c[b],M,A),F();return}if(s==="select"){let y=Te(u.x,u.y);k.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F());return}if(s!=="pin"&&s!=="text"&&!D){let y=Te(u.x,u.y);k.classList.toggle("bs-grab",y>=0),v!==y&&(v=y,F())}if(D){if(s==="draw"||s==="highlight"){T.push({x:u.x,y:u.y}),F();let y=s==="highlight"?.25:1,M=s==="highlight"?o*4+10:o;if(s!=="highlight"){d.save(),d.strokeStyle=dn(),d.lineWidth=M+3,d.lineCap="round",d.lineJoin="round",d.globalAlpha=.5,d.beginPath(),d.moveTo(T[0].x,T[0].y);for(let A=1;A<T.length;A++)d.lineTo(T[A].x,T[A].y);d.stroke(),d.restore()}d.strokeStyle=r,d.lineWidth=M,d.lineCap="round",d.lineJoin="round",d.globalAlpha=y,d.beginPath(),d.moveTo(T[0].x,T[0].y);for(let A=1;A<T.length;A++)d.lineTo(T[A].x,T[A].y);d.stroke(),d.globalAlpha=1}else if(F(),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",s==="rect")Ct(()=>d.strokeRect(w,E,u.x-w,u.y-E),o),d.strokeStyle=r,d.lineWidth=o,d.strokeRect(w,E,u.x-w,u.y-E);else if(s==="circle"){let y=Math.abs(u.x-w)/2,M=Math.abs(u.y-E)/2,A=w+(u.x-w)/2,Vn=E+(u.y-E)/2;Ct(()=>{d.beginPath(),d.ellipse(A,Vn,y,M,0,0,Math.PI*2),d.stroke()},o),d.strokeStyle=r,d.lineWidth=o,d.beginPath(),d.ellipse(A,Vn,y,M,0,0,Math.PI*2),d.stroke()}else if(s==="arrow"){let y=Math.atan2(u.y-E,u.x-w),M=12+o*2,A=()=>{d.beginPath(),d.moveTo(w,E),d.lineTo(u.x,u.y),d.stroke(),d.beginPath(),d.moveTo(u.x,u.y),d.lineTo(u.x-M*Math.cos(y-.45),u.y-M*Math.sin(y-.45)),d.moveTo(u.x,u.y),d.lineTo(u.x-M*Math.cos(y+.45),u.y-M*Math.sin(y+.45)),d.stroke()};Ct(A,o),d.strokeStyle=r,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",A()}}});let U=N=>{if(S)return S=!1,I=!1,b=-1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),F(),void 0;if(!D)return;D=!1;let u=f(N);if(s==="draw"||s==="highlight")T.length>1&&c.push({type:s,color:r,size:o,alpha:s==="highlight"?.25:1,points:[...T]}),T=[];else if(s==="rect")c.push({type:"rect",color:r,size:o,x:w,y:E,w:u.x-w,h:u.y-E});else if(s==="circle"){let y=Math.abs(u.x-w)/2,M=Math.abs(u.y-E)/2;c.push({type:"circle",color:r,size:o,cx:w+(u.x-w)/2,cy:E+(u.y-E)/2,rx:y,ry:M})}else s==="arrow"&&c.push({type:"arrow",color:r,size:o,x1:w,y1:E,x2:u.x,y2:u.y});F()};k.addEventListener("mouseup",U),k.addEventListener("mouseleave",N=>{S?(S=!1,I=!1,k.classList.remove("bs-grabbing"),k.classList.remove("bs-grab"),F()):D&&U(N)});let _=N=>{b>=0&&(N.key==="Delete"||N.key==="Backspace")&&(c.splice(b,1),b=-1,F())};document.addEventListener("keydown",_),Yn.addEventListener("click",()=>{c.length&&(c.pop(),b=-1,F())}),Xn.addEventListener("click",()=>{c.length=0,p.length=0,b=-1,F(),Pe()})};let Ds=()=>{for(let l=0;l<p.length;l++){let m=p[l],h=16;d.beginPath(),d.arc(m.x,m.y-h,h,0,Math.PI*2),d.fillStyle=m.color,d.fill(),d.strokeStyle="#fff",d.lineWidth=2,d.stroke(),d.beginPath(),d.moveTo(m.x-8,m.y-6),d.lineTo(m.x,m.y+4),d.lineTo(m.x+8,m.y-6),d.fillStyle=m.color,d.fill(),d.fillStyle="#fff",d.font="bold 14px Inter, sans-serif",d.textAlign="center",d.textBaseline="middle",d.fillText(`${l+1}`,m.x,m.y-h),d.textAlign="start",d.textBaseline="alphabetic"}};return{getAnnotation:()=>{try{return b=-1,F(),Ds(),k.toDataURL("image/jpeg",.7)}catch{return null}},getPins:()=>p.map((l,m)=>({number:m+1,x:Math.round(l.x),y:Math.round(l.y),note:l.note}))}}function ve(t){if(!g)return;Gt=t,g.querySelectorAll(".bs-tab").forEach(r=>{r.classList.toggle("bs-active",r.dataset.tab===t)});let e=g.querySelector(".bs-scroll"),n={report:ys,console:li,network:ci,context:di,history:pi,settings:bi};e.innerHTML=n[t](),e.scrollTop=0,xs()}function xs(){if(!g)return;if(Gt==="history"){g.querySelectorAll("[data-hist-del]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histDel),s=g.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-confirm");if(o){o.remove();return}let i=document.createElement("div");i.className="bs-hist-confirm",i.innerHTML="<span>Delete this report?</span>";let a=document.createElement("button");a.type="button",a.className="bs-hist-confirm-yes",a.textContent="Delete";let c=document.createElement("button");c.type="button",c.className="bs-hist-confirm-no",c.textContent="Cancel",a.addEventListener("click",()=>{ii(r),ve("history")}),c.addEventListener("click",()=>i.remove()),i.appendChild(a),i.appendChild(c),s.appendChild(i)})}),g.querySelectorAll("[data-hist-edit]").forEach(n=>{n.addEventListener("click",()=>{let r=parseInt(n.dataset.histEdit),s=g.querySelector(`[data-hist-id="${r}"]`);if(!s)return;let o=s.querySelector(".bs-hist-edit-wrap");if(o){o.remove();return}s.querySelector(".bs-hist-confirm")?.remove();let i=Qt().find(S=>S.id===r);if(!i)return;let a=document.createElement("div");a.className="bs-hist-edit-wrap",a.innerHTML=`
1607
1787
  <div class="bs-field" style="margin-bottom:8px">
1608
- <input class="bs-input" data-edit-title value="${A(i.title)}" />
1788
+ <input class="bs-input" data-edit-title value="${j(i.title)}" />
1609
1789
  </div>
1610
1790
  <div class="bs-field" style="margin-bottom:8px">
1611
- <textarea class="bs-textarea" data-edit-desc style="min-height:56px">${A(i.description)}</textarea>
1791
+ <textarea class="bs-textarea" data-edit-desc style="min-height:56px">${j(i.description)}</textarea>
1612
1792
  </div>
1613
1793
  <div class="bs-field" style="margin-bottom:8px">
1614
1794
  <div class="bs-sev-row">
@@ -1618,14 +1798,14 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1618
1798
  <button type="button" class="bs-sev-btn bs-sev-critical${i.severity==="critical"?" bs-picked":""}" data-edit-sev="critical">Critical</button>
1619
1799
  </div>
1620
1800
  </div>
1621
- <div class="bs-hist-edit-row"></div>`;let d=i.severity;s.appendChild(a),a.querySelectorAll("[data-edit-sev]").forEach(w=>{w.addEventListener("click",()=>{d=w.dataset.editSev,a.querySelectorAll(".bs-sev-btn").forEach(k=>k.classList.remove("bs-picked")),w.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 y=document.createElement("button");y.type="button",y.className="bs-hist-cancel",y.textContent="Cancel",b.addEventListener("click",()=>{let w=a.querySelector("[data-edit-title]").value.trim(),k=a.querySelector("[data-edit-desc]").value.trim();w&&(Fo(r,{title:w,description:k,severity:d}),bt("history"))}),y.addEventListener("click",()=>a.remove()),p.appendChild(b),p.appendChild(y)})});return}if(We==="settings"){h.querySelectorAll("[data-set-theme]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setTheme;Kt(r),h.querySelectorAll("[data-set-theme]").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),h.querySelectorAll("[data-set-layout]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setLayout,s=ot(r);s&&(Ee=s,Z(),setTimeout(()=>{We="settings",be(),setTimeout(()=>bt("settings"),50)},400))})});return}if(We!=="report")return;h.querySelectorAll(".bs-cat-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.cat;h.querySelector('input[name="category"]').value=r,h.querySelectorAll(".bs-cat-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),h.querySelectorAll(".bs-sev-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.sev;h.querySelector('input[name="severity"]').value=r,h.querySelectorAll(".bs-sev-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})});let e=null,t=null;h.querySelector("[data-bs-screenshot]")?.addEventListener("click",async()=>{let n=h?.querySelector("[data-bs-shot-title]"),r=h?.querySelector("[data-bs-shot-sub]"),s=h?.querySelector("[data-bs-screenshot]");if(n&&(n.textContent="Capturing..."),h&&(h.style.visibility="hidden"),G&&(G.style.visibility="hidden"),await new Promise(o=>setTimeout(o,200)),e=await mn(!0),h&&(h.style.visibility=""),G&&(G.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=h?.querySelector("[data-bs-annotate]");o&&(t=Jo(o,e))}else n&&(n.textContent="Screenshot unavailable"),r&&(r.textContent="Could not capture screenshot on this page")}),h.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=ns(),b={projectId:V.projectId,title:o,description:i,category:d,severity:a,tags:p.tags.length?p.tags:void 0,context:ts(),consoleLogs:le(),errors:ce(),networkCaptures:fe(),breadcrumbs:Te(),performance:Ae()??void 0,screenshot:e??void 0,annotation:t?.getAnnotation()??void 0,pins:t?.getPins().length?t.getPins():void 0,createdAt:Date.now()},y=await yn(b);qo({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:y.success?"sent":"draft"}),y.success?(s.innerHTML=`${H.check} Bug reported!`,s.classList.add("bs-submit-ok"),setTimeout(Z,1200)):(s.textContent=y.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 be(){if(Q)return;Q=!0,We="report",Mn(),G=document.createElement("div"),G.className="bs-backdrop",oe.appendChild(G);let e=fe().length,t=ce().length;h=document.createElement("div"),h.className=`bs-modal bs-ly-${Ee.id}`,Se(h);let n=`
1801
+ <div class="bs-hist-edit-row"></div>`;let c=i.severity;s.appendChild(a),a.querySelectorAll("[data-edit-sev]").forEach(S=>{S.addEventListener("click",()=>{c=S.dataset.editSev,a.querySelectorAll(".bs-sev-btn").forEach(D=>D.classList.remove("bs-picked")),S.classList.add("bs-picked")})});let p=a.querySelector(".bs-hist-edit-row"),b=document.createElement("button");b.type="button",b.className="bs-hist-save",b.textContent="Save";let v=document.createElement("button");v.type="button",v.className="bs-hist-cancel",v.textContent="Cancel",b.addEventListener("click",()=>{let S=a.querySelector("[data-edit-title]").value.trim(),D=a.querySelector("[data-edit-desc]").value.trim();S&&(ai(r,{title:S,description:D,severity:c}),ve("history"))}),v.addEventListener("click",()=>a.remove()),p.appendChild(b),p.appendChild(v)})});return}if(Gt==="settings"){g.querySelectorAll("[data-set-theme]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setTheme;ye(r),g.querySelectorAll("[data-set-theme]").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),g.querySelectorAll("[data-set-layout]").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.setLayout,s=be(r);s&&(At=s,nt(),setTimeout(()=>{Gt="settings",at(),setTimeout(()=>ve("settings"),50)},400))})});return}if(Gt!=="report")return;g.querySelectorAll(".bs-cat-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.cat;g.querySelector('input[name="category"]').value=r,g.querySelectorAll(".bs-cat-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})}),g.querySelectorAll(".bs-sev-btn").forEach(n=>{n.addEventListener("click",()=>{let r=n.dataset.sev;g.querySelector('input[name="severity"]').value=r,g.querySelectorAll(".bs-sev-btn").forEach(s=>s.classList.remove("bs-picked")),n.classList.add("bs-picked")})});let t=null,e=null;g.querySelector("[data-bs-screenshot]")?.addEventListener("click",async()=>{let n=g?.querySelector("[data-bs-shot-title]"),r=g?.querySelector("[data-bs-shot-sub]"),s=g?.querySelector("[data-bs-screenshot]");if(n&&(n.textContent="Capturing..."),g&&(g.style.visibility="hidden"),et&&(et.style.visibility="hidden"),await new Promise(o=>setTimeout(o,200)),t=await Ue(!0),g&&(g.style.visibility=""),et&&(et.style.visibility=""),t){n&&(n.textContent="Screenshot captured!"),r&&(r.textContent="Draw on the image below to highlight the issue"),s?.classList.add("bs-captured");let o=g?.querySelector("[data-bs-annotate]");o&&(e=ui(o,t))}else n&&(n.textContent="Screenshot unavailable"),r&&(r.textContent="Could not capture screenshot on this page")}),g.querySelector("[data-bs-form]")?.addEventListener("submit",async n=>{n.preventDefault();let r=n.target,s=r.querySelector(".bs-submit-btn"),o=r.elements.namedItem("title").value.trim(),i=r.elements.namedItem("description").value.trim(),a=r.elements.namedItem("severity").value,c=r.elements.namedItem("category").value;if(!o)return;s.disabled=!0,s.textContent="Sending...";let p=vs(),b={projectId:G.projectId,title:o,description:i,category:c,severity:a,tags:p.tags.length?p.tags:void 0,context:hs(),consoleLogs:ut(),errors:ft(),networkCaptures:vt(),breadcrumbs:zt(),performance:Bt()??void 0,screenshot:t??void 0,annotation:e?.getAnnotation()??void 0,pins:e?.getPins().length?e.getPins():void 0,createdAt:Date.now()},v=await En(b);oi({title:b.title,description:b.description,category:b.category,severity:b.severity,tags:b.tags,screenshot:b.screenshot,pins:b.pins,url:window.location.href,createdAt:b.createdAt,status:v.success?"sent":"draft"}),v.success?(s.innerHTML=`${O.check} Bug reported!`,s.classList.add("bs-submit-ok"),setTimeout(nt,1200)):(s.textContent=v.error??"Failed \u2014 saved as draft",s.classList.add("bs-submit-err"),setTimeout(()=>{s.disabled=!1,s.textContent="Submit Report",s.classList.remove("bs-submit-err")},2500))})}function at(){if(!J||K)return;K=!0,Gt="report",On(),et=J.createElement("div"),et.className="bs-backdrop",J.body.appendChild(et);let t=vt().length,e=ft().length;g=J.createElement("div"),g.className=`bs-modal bs-ly-${At.id}`,kt(g);let n=`
1622
1802
  <div class="bs-tabs">
1623
- <button class="bs-tab bs-active" data-tab="report">${H.report} Report</button>
1624
- <button class="bs-tab" data-tab="console">${H.console} Console <span class="bs-tab-badge">${le().length}</span></button>
1625
- <button class="bs-tab" data-tab="network">${H.network} Network ${e?`<span class="bs-tab-badge bs-warn">${e}</span>`:`<span class="bs-tab-badge">${Me().length}</span>`}</button>
1626
- <button class="bs-tab" data-tab="context">${H.ctx} Context ${t?`<span class="bs-tab-badge bs-warn">${t}</span>`:""}</button>
1627
- <button class="bs-tab" data-tab="history">${H.history} History <span class="bs-tab-badge">${_e().length}</span></button>
1628
- </div>`,r=ne(),s=r?r.name.split(" ").map(y=>y[0]).join("").toUpperCase().slice(0,2):"",o=Vt(),i=r?`
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?`
1629
1809
  <div class="bs-hdr">
1630
1810
  <div class="bs-logo">BugStash</div>
1631
1811
  <div class="bs-hdr-right">
@@ -1637,35 +1817,39 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1637
1817
  <div class="bs-user-avatar">${s}</div>
1638
1818
  <span>${r.name.split(" ")[0]}</span>
1639
1819
  </div>
1640
- <button class="bs-hdr-icon" data-tab="settings" title="Settings">${H.settings}</button>
1820
+ <button class="bs-hdr-icon" data-tab="settings" title="Settings">${O.settings}</button>
1641
1821
  <button class="bs-login-logout" data-bs-logout title="Sign out">Logout</button>
1642
- <button class="bs-close-btn" data-bs-close title="Close">${H.x}</button>
1822
+ <button class="bs-close-btn" data-bs-close title="Close">${O.x}</button>
1643
1823
  </div>
1644
1824
  </div>`:`
1645
1825
  <div class="bs-hdr" style="justify-content:flex-end">
1646
- <button class="bs-close-btn" data-bs-close title="Close">${H.x}</button>
1647
- </div>`,a=Ee.tabPosition==="left",d=Ee.tabPosition==="bottom",p=r?rs():No();a?h.innerHTML=`
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=`
1648
1828
  ${i}
1649
1829
  <div class="bs-body-wrap">
1650
1830
  ${r?n:""}
1651
1831
  <div class="bs-scroll">${p}</div>
1652
- </div>`:d?h.innerHTML=`
1832
+ </div>`:c?g.innerHTML=`
1653
1833
  ${i}
1654
1834
  <div class="bs-scroll">${p}</div>
1655
- ${r?`<div class="bs-tab-divider"></div>${n}`:""}`:h.innerHTML=`
1835
+ ${r?`<div class="bs-tab-divider"></div>${n}`:""}`:g.innerHTML=`
1656
1836
  ${i}
1657
1837
  ${r?`${n}<div class="bs-tab-divider"></div>`:""}
1658
- <div class="bs-scroll">${p}</div>`,oe.appendChild(h),O&&O.classList.add("bs-open"),requestAnimationFrame(()=>{G?.classList.add("bs-in"),h?.classList.add("bs-in")}),h.querySelectorAll(".bs-tab").forEach(y=>{y.addEventListener("click",()=>bt(y.dataset.tab))}),h.querySelector('.bs-hdr-icon[data-tab="settings"]')?.addEventListener("click",()=>bt("settings")),h.querySelector("[data-bs-close]")?.addEventListener("click",Z),G.addEventListener("click",Z),h.querySelector("[data-bs-pin-toggle]")?.addEventListener("click",()=>{let y=Fe(),w=h?.querySelector("[data-bs-pin-toggle]");w&&(w.classList.toggle("active",y),w.innerHTML=`
1838
+ <div class="bs-scroll">${p}</div>`,J.body.appendChild(g),x&&x.classList.add("bs-open"),requestAnimationFrame(()=>{et?.classList.add("bs-in"),g?.classList.add("bs-in")}),g.querySelectorAll(".bs-tab").forEach(v=>{v.addEventListener("click",()=>ve(v.dataset.tab))}),g.querySelector('.bs-hdr-icon[data-tab="settings"]')?.addEventListener("click",()=>ve("settings")),g.querySelector("[data-bs-close]")?.addEventListener("click",nt),et.addEventListener("click",nt),g.querySelector("[data-bs-pin-toggle]")?.addEventListener("click",()=>{let v=$t(),S=g?.querySelector("[data-bs-pin-toggle]");S&&(S.classList.toggle("active",v),S.innerHTML=`
1659
1839
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1660
- Pins ${y?"ON":"OFF"}
1661
- `)}),h.querySelector("[data-bs-logout]")?.addEventListener("click",()=>{Bt(),Z(),setTimeout(()=>be(),300)}),r?ss():Ko();let b=y=>{y.key==="Escape"&&(Z(),document.removeEventListener("keydown",b))};document.addEventListener("keydown",b)}function Ko(){if(!h)return;let e=h.querySelector("#bs-login-submit"),t=h.querySelector("#bs-login-email"),n=h.querySelector("#bs-login-pass"),r=h.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 Dt(o,i,V.projectId);a.success?(ct(V.projectId,oe),it(V.projectId),Z(),setTimeout(()=>be(),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 Z(){Q&&(O&&O.classList.remove("bs-open"),h&&(h.classList.remove("bs-in"),h.classList.add("bs-out")),G&&G.classList.remove("bs-in"),setTimeout(()=>{h?.remove(),G?.remove(),h=null,G=null,Q=!1},350))}function Se(e){for(let[t,n]of Object.entries(ye.vars))e.style.setProperty(t,n)}function Kt(e){let t=jt(e);t&&(ye=t,h&&Se(h),O&&Se(O),I&&Se(I))}function os(){return ye.id}function is(e){let t=ot(e);t&&(Ee=t,Q&&(Z(),setTimeout(be,400)))}function as(){return Ee.id}function ls(e,t){V=e,oe=t,dt=document.createElement("style"),dt.textContent=`
1840
+ Pins ${v?"ON":"OFF"}
1841
+ `)}),g.querySelector("[data-bs-logout]")?.addEventListener("click",()=>{We(),nt(),setTimeout(()=>at(),300)}),r?xs():fi();let b=v=>{v.key==="Escape"&&(nt(),document.removeEventListener("keydown",b))};document.addEventListener("keydown",b)}function fi(){if(!g)return;let t=g.querySelector("#bs-login-submit"),e=g.querySelector("#bs-login-email"),n=g.querySelector("#bs-login-pass"),r=g.querySelector("#bs-login-error");if(!t||!e||!n)return;let s=async()=>{let o=e.value.trim(),i=n.value;if(!o||!i){r.textContent="Please enter email and password",r.style.display="block";return}t.setAttribute("disabled","true"),t.textContent="Signing in...",r.style.display="none";let a=await _e(o,i,G.projectId);a.success?(Kt(G.projectId,Et),Yt(G.projectId),nt(),setTimeout(()=>at(),300)):(r.textContent=a.error||"Invalid credentials",r.style.display="block",t.removeAttribute("disabled"),t.textContent="Sign In")};t.addEventListener("click",s),n.addEventListener("keydown",o=>{o.key==="Enter"&&s()}),e.addEventListener("keydown",o=>{o.key==="Enter"&&n.focus()}),setTimeout(()=>e.focus(),100)}function nt(){K&&(x&&x.classList.remove("bs-open"),g&&(g.classList.remove("bs-in"),g.classList.add("bs-out")),et&&et.classList.remove("bs-in"),setTimeout(()=>{g?.remove(),et?.remove(),g=null,et=null,K=!1},350))}function kt(t){for(let[e,n]of Object.entries(it.vars))t.style.setProperty(e,n)}function ye(t){let e=Ve(t);e&&(it=e,g&&kt(g),x&&kt(x),P&&kt(P))}function ws(){return it.id}function ks(t){let e=be(t);e&&(At=e,K&&(nt(),setTimeout(at,400)))}function Es(){return At.id}function mi(){try{let t=localStorage.getItem(fs);if(!t)return null;let e=JSON.parse(t);if(typeof e.top=="number"&&typeof e.left=="number")return e}catch{}return null}function gi(t,e){try{localStorage.setItem(fs,JSON.stringify({top:t,left:e}))}catch{}}function hi(t,e){let s=window.innerWidth,o=window.innerHeight;return{top:Math.max(8,Math.min(o-56-8,t)),left:Math.max(8,Math.min(s-56-8,e))}}function jn(t,e){if(!x)return;let n=hi(t,e);x.style.top=`${n.top}px`,x.style.left=`${n.left}px`,x.style.bottom="auto",x.style.right="auto",Ls(n.top,n.left)}function Ls(t,e){if(!P)return;let n=56,r=8,s=P.offsetHeight||200,o=t-s-r;o<8&&(o=t+n+r),P.style.top=`${o}px`,P.style.bottom="auto",P.style.left=`${e+n/2-20}px`,P.style.right="auto"}function vi(){if(!x)return;let t=0,e=0,n=0,r=0,s=!1;function o(){x&&(x.removeEventListener("pointermove",a),x.removeEventListener("pointerup",c),x.classList.remove("bs-dragging")),Bn=null}function i(p){if(!x)return;Mt=!1,s=!1,t=p.clientX,e=p.clientY;let b=x.getBoundingClientRect();n=b.top,r=b.left,x.setPointerCapture(p.pointerId),x.addEventListener("pointermove",a),x.addEventListener("pointerup",c),Bn=o}function a(p){let b=p.clientX-t,v=p.clientY-e;if(!s&&Math.abs(b)<5&&Math.abs(v)<5)return;s=!0,Mt=!0,x?.classList.add("bs-dragging");let S=n+v,D=r+b;jn(S,D)}function c(p){if(x?.releasePointerCapture(p.pointerId),o(),s&&x){let b=x.getBoundingClientRect();gi(b.top,b.left),p.preventDefault(),p.stopPropagation(),setTimeout(()=>{Mt=!1},10)}else Mt=!1}x.addEventListener("pointerdown",i)}function Ss(t,e){G=t,Et=e,wt=document.createElement("iframe"),wt.style.cssText="position:fixed;inset:0;z-index:2147483640;pointer-events:none;border:none;background:transparent;width:100%;height:100%;color-scheme:normal;";let n=`
1662
1842
  @import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap');
1663
- ${Oo}
1664
- ${Nr}
1665
- `,oe.appendChild(dt);let n=e.panelPosition==="bottom-left"?"left":"right";O=document.createElement("button"),O.className="bs-fab",Se(O),O.innerHTML=`${H.bug}<span class="bs-fab-label">Report a bug</span>`,O.style[n]="24px",O.addEventListener("click",()=>Q?Z():be()),oe.appendChild(O),I=document.createElement("div"),I.className="bs-toolbar",I.style[n]="32px",Se(I);let s=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",o=[{icon:H.cam,tip:"Screenshot",kbd:`${s}+Shift+S`,action:async()=>{let i=await mn(!0);i&&(Q||be(),setTimeout(()=>{let a=h?.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:H.pin,tip:"Toggle Pins",kbd:`${s}+Shift+P`,id:"bs-tb-pin",action:()=>{if(!ne()){Q||be();return}oe?.querySelector("#bugstash-live-pins")||(ct(V.projectId,oe),it(V.projectId));let a=Fe(),d=I?.querySelector("#bs-tb-pin");d&&d.classList.toggle("bs-active",a);let p=h?.querySelector("[data-bs-pin-toggle]");p&&(p.classList.toggle("active",a),p.innerHTML=`
1843
+ ${ni}
1844
+ ${Vr}
1845
+ html, body { margin: 0; padding: 0; background: transparent; pointer-events: none; overflow: hidden; }
1846
+ `;wt.srcdoc=`<!DOCTYPE html><html><head><style>${n}</style></head><body></body></html>`,wt.addEventListener("load",()=>{J=wt.contentDocument,J&&yi(t)}),Et.appendChild(wt),xi(t),he=()=>{if(!(!x||Mt)&&x.style.top&&x.style.top!=="auto"){let r=x.getBoundingClientRect();jn(r.top,r.left)}},window.addEventListener("resize",he)}function yi(t){if(!J)return;let e=t.panelPosition==="bottom-left"?"left":"right";x=J.createElement("button"),x.className="bs-fab",kt(x),x.innerHTML=`${O.bug}<span class="bs-fab-label">Report a bug</span>`;let n=mi();n?jn(n.top,n.left):x.style[e]="24px",x.addEventListener("click",()=>{Mt||(K?nt():at())}),J.body.appendChild(x),vi(),P=J.createElement("div"),P.className="bs-toolbar",n?Ls(n.top,n.left):P.style[e]="32px",kt(P);let s=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",o=[{icon:O.cam,tip:"Screenshot",kbd:`${s}+Shift+S`,action:async()=>{let i=await Ue(!0);i&&(K||at(),setTimeout(()=>{let a=g?.querySelector("[data-bs-screenshot]");if(a){a.__screenshot=i,a.classList.add("bs-captured");let c=a.querySelector("[data-bs-shot-title]"),p=a.querySelector("[data-bs-shot-sub]");c&&(c.textContent="Screenshot captured!"),p&&(p.textContent="Click to retake or annotate"),a.click()}},400))}},{icon:O.pin,tip:"Toggle Pins",kbd:`${s}+Shift+P`,id:"bs-tb-pin",action:()=>{if(!ot()){K||at();return}Et?.querySelector("#bugstash-live-pins")||(Kt(G.projectId,Et),Yt(G.projectId));let a=$t(),c=P?.querySelector("#bs-tb-pin");c&&c.classList.toggle("bs-active",a);let p=g?.querySelector("[data-bs-pin-toggle]");p&&(p.classList.toggle("active",a),p.innerHTML=`
1666
1847
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1667
1848
  Pins ${a?"ON":"OFF"}
1668
- `)}},{icon:ye.id==="black"?H.sun:H.moon,tip:"Toggle Theme",kbd:`${s}+Shift+T`,id:"bs-tb-theme",action:()=>{let i=ye.id==="black"?"white":"black";Kt(i),I&&Se(I);let a=I?.querySelector("#bs-tb-theme");a&&(a.innerHTML=`${ye.id==="black"?H.sun:H.moon}<span class="bs-toolbar-tip">${ye.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${s}+Shift+T</span></span>`)}},{icon:H.report,tip:"Open Panel",kbd:`${s}+Shift+B`,action:()=>{Q?Z():be()}}];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()}),I.appendChild(a)}oe.appendChild(I),O.addEventListener("mouseenter",()=>{Q||Qr()}),O.addEventListener("mouseleave",i=>{let a=i.relatedTarget;I?.contains(a)||Mn()}),I.addEventListener("mouseenter",()=>Qr()),I.addEventListener("mouseleave",i=>{let a=i.relatedTarget;O?.contains(a)||Mn()}),pt=i=>{(i.ctrlKey||i.metaKey)&&i.shiftKey&&(i.key==="B"||i.key==="b"?(i.preventDefault(),Q?Z():be()):i.key==="S"||i.key==="s"?(i.preventDefault(),o[0].action()):i.key==="P"||i.key==="p"?(i.preventDefault(),o[1].action()):(i.key==="T"||i.key==="t")&&(i.preventDefault(),o[2].action()))},document.addEventListener("keydown",pt)}function Qr(){Jt||Q||(Jt=!0,I?.classList.add("bs-show"))}function Mn(){Jt=!1,I?.classList.remove("bs-show")}function cs(){Z(),O?.remove(),O=null,I?.remove(),I=null,Jt=!1,dt?.remove(),dt=null,oe=null,pt&&document.removeEventListener("keydown",pt),pt=null}var ie=null,R=null,E=null,ue=null,Gt="freehand",Qt="#ef4444",Go=3,Xe=[],J=null,ut=!1,Zt=null,Qo=[{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"}],Zo=["#ef4444","#f97316","#eab308","#22c55e","#3b82f6","#8b5cf6","#ffffff","#000000"];function bs(e){return new Promise(t=>{Zt=t,Xe=[],J=null,Gt="freehand",Qt="#ef4444",ei(e)})}function ei(e){ie&&ie.remove(),ie=document.createElement("div"),ie.id="bs-annotation-overlay";let t=document.createElement("style");t.textContent=`
1849
+ `)}},{icon:it.id==="black"?O.sun:O.moon,tip:"Toggle Theme",kbd:`${s}+Shift+T`,id:"bs-tb-theme",action:()=>{let i=it.id==="black"?"white":"black";ye(i),P&&kt(P);let a=P?.querySelector("#bs-tb-theme");a&&(a.innerHTML=`${it.id==="black"?O.sun:O.moon}<span class="bs-toolbar-tip">${it.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${s}+Shift+T</span></span>`)}},{icon:O.report,tip:"Open Panel",kbd:`${s}+Shift+B`,action:()=>{K?nt():at()}}];for(let i of o){let a=J.createElement("button");a.className="bs-toolbar-btn",i.id&&(a.id=i.id),a.innerHTML=`${i.icon}<span class="bs-toolbar-tip">${i.tip}<span class="bs-toolbar-kbd">${i.kbd}</span></span>`,a.addEventListener("click",c=>{c.stopPropagation(),i.action()}),P.appendChild(a)}J.body.appendChild(P),x.addEventListener("mouseenter",()=>{K||us()}),x.addEventListener("mouseleave",i=>{let a=i.relatedTarget;P?.contains(a)||On()}),P.addEventListener("mouseenter",()=>us()),P.addEventListener("mouseleave",i=>{let a=i.relatedTarget;x?.contains(a)||On()})}function xi(t){let n=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl";ge=r=>{if((r.ctrlKey||r.metaKey)&&r.shiftKey){if(r.key==="B"||r.key==="b")r.preventDefault(),K?nt():at();else if(r.key==="S"||r.key==="s")r.preventDefault(),Ue(!0).then(o=>{o&&(K||at(),setTimeout(()=>{let i=g?.querySelector("[data-bs-screenshot]");if(i){i.__screenshot=o,i.classList.add("bs-captured");let a=i.querySelector("[data-bs-shot-title]"),c=i.querySelector("[data-bs-shot-sub]");a&&(a.textContent="Screenshot captured!"),c&&(c.textContent="Click to retake or annotate"),i.click()}},400))});else if(r.key==="P"||r.key==="p"){if(r.preventDefault(),!ot()){K||at();return}Et?.querySelector("#bugstash-live-pins")||(Kt(t.projectId,Et),Yt(t.projectId));let i=$t(),a=P?.querySelector("#bs-tb-pin");a&&a.classList.toggle("bs-active",i);let c=g?.querySelector("[data-bs-pin-toggle]");c&&(c.classList.toggle("active",i),c.innerHTML=`
1850
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
1851
+ Pins ${i?"ON":"OFF"}
1852
+ `)}else if(r.key==="T"||r.key==="t"){r.preventDefault();let i=navigator.platform.toUpperCase().includes("MAC")?"\u2318":"Ctrl",a=it.id==="black"?"white":"black";ye(a),P&&kt(P);let c=P?.querySelector("#bs-tb-theme");c&&(c.innerHTML=`${it.id==="black"?O.sun:O.moon}<span class="bs-toolbar-tip">${it.id==="black"?"Light":"Dark"} Mode<span class="bs-toolbar-kbd">${i}+Shift+T</span></span>`)}}},document.addEventListener("keydown",ge)}function us(){rn||K||(rn=!0,P?.classList.add("bs-show"))}function On(){rn=!1,P?.classList.remove("bs-show")}function Cs(){nt(),Bn?.(),Mt=!1,x?.remove(),x=null,P?.remove(),P=null,rn=!1,wt?.remove(),wt=null,J=null,Et=null,ge&&document.removeEventListener("keydown",ge),ge=null,he&&window.removeEventListener("resize",he),he=null}var dt=null,q=null,C=null,ht=null,sn="freehand",on="#ef4444",wi=3,Zt=[],Q=null,xe=!1,an=null,ki=[{id:"freehand",label:"Draw",icon:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z"},{id:"rectangle",label:"Rect",icon:"M3 3h18v18H3V3zm2 2v14h14V5H5z"},{id:"circle",label:"Circle",icon:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"},{id:"arrow",label:"Arrow",icon:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}],Ei=["#ef4444","#f97316","#eab308","#22c55e","#3b82f6","#8b5cf6","#ffffff","#000000"];function $s(t){return new Promise(e=>{an=e,Zt=[],Q=null,sn="freehand",on="#ef4444",Li(t)})}function Li(t){dt&&dt.remove(),dt=document.createElement("div"),dt.id="bs-annotation-overlay";let e=document.createElement("style");e.textContent=`
1669
1853
  #bs-annotation-overlay {
1670
1854
  position: fixed; inset: 0; z-index: 2147483647;
1671
1855
  background: rgba(0,0,0,0.85);
@@ -1710,5 +1894,5 @@ ${t.stack??""}`;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{
1710
1894
  overflow: hidden; padding: 16px;
1711
1895
  }
1712
1896
  .bs-ann-canvas-wrap canvas { cursor: crosshair; border-radius: 4px; }
1713
- `,ie.appendChild(t);let n=document.createElement("div");n.className="bs-ann-toolbar";for(let a of Qo){let d=document.createElement("button");d.className=`bs-ann-tool${a.id===Gt?" active":""}`,d.title=a.label,d.innerHTML=`<svg viewBox="0 0 24 24"><path d="${a.icon}"/></svg>`,d.addEventListener("click",()=>{Gt=a.id,n.querySelectorAll(".bs-ann-tool").forEach(p=>p.classList.remove("active")),d.classList.add("active")}),n.appendChild(d)}n.appendChild(ds());for(let a of Zo){let d=document.createElement("button");d.className=`bs-ann-color${a===Qt?" active":""}`,d.style.background=a,d.addEventListener("click",()=>{Qt=a,n.querySelectorAll(".bs-ann-color").forEach(p=>p.classList.remove("active")),d.classList.add("active")}),n.appendChild(d)}n.appendChild(ds());let r=document.createElement("button");r.className="bs-ann-btn bs-ann-undo",r.textContent="Undo",r.addEventListener("click",()=>{Xe.pop(),en()}),n.appendChild(r);let s=document.createElement("button");s.className="bs-ann-btn bs-ann-save",s.textContent="Save",s.addEventListener("click",ni);let o=document.createElement("button");o.className="bs-ann-btn bs-ann-cancel",o.textContent="Cancel",o.addEventListener("click",()=>{Rn(),Zt?.(null)}),n.appendChild(s),n.appendChild(o),ie.appendChild(n);let i=document.createElement("div");i.className="bs-ann-canvas-wrap",R=document.createElement("canvas"),E=R.getContext("2d"),i.appendChild(R),ie.appendChild(i),document.body.appendChild(ie),ue=new Image,ue.onload=()=>{if(!R||!E||!ue)return;let a=window.innerWidth-32,d=window.innerHeight-100,p=ue.width,b=ue.height,y=Math.min(1,a/p,d/b);p=Math.round(p*y),b=Math.round(b*y),R.width=p,R.height=b,en(),ti()},ue.src=e}function ds(){let e=document.createElement("div");return e.className="bs-ann-sep",e}function ti(){if(!R)return;R.addEventListener("mousedown",t=>{ut=!0;let{x:n,y:r}=ps(t);J={type:Gt,color:Qt,lineWidth:Go,points:[{x:n,y:r}],x:n,y:r,width:0,height:0}}),R.addEventListener("mousemove",t=>{if(!ut||!J)return;let{x:n,y:r}=ps(t);J.type==="freehand"?J.points.push({x:n,y:r}):(J.width=n-J.x,J.height=r-J.y),en(),us(J)});let e=()=>{ut&&J&&(Xe.push(J),J=null),ut=!1,en()};R.addEventListener("mouseup",e),R.addEventListener("mouseleave",e)}function ps(e){let t=R.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function en(){if(!(!E||!R||!ue)){E.clearRect(0,0,R.width,R.height),E.drawImage(ue,0,0,R.width,R.height);for(let e of Xe)us(e)}}function us(e){if(E)switch(E.strokeStyle=e.color,E.fillStyle=e.color,E.lineWidth=e.lineWidth,E.lineCap="round",E.lineJoin="round",e.type){case"freehand":{if(!e.points||e.points.length<2)return;E.beginPath(),E.moveTo(e.points[0].x,e.points[0].y);for(let t=1;t<e.points.length;t++)E.lineTo(e.points[t].x,e.points[t].y);E.stroke();break}case"rectangle":{E.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;E.beginPath(),E.ellipse(t,n,r,s,0,0,Math.PI*2),E.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);E.beginPath(),E.moveTo(t,n),E.lineTo(r,s),E.stroke(),E.beginPath(),E.moveTo(r,s),E.lineTo(r-o*Math.cos(i-Math.PI/6),s-o*Math.sin(i-Math.PI/6)),E.lineTo(r-o*Math.cos(i+Math.PI/6),s-o*Math.sin(i+Math.PI/6)),E.closePath(),E.fill();break}}}function ni(){if(!R){Rn(),Zt?.(null);return}let t={dataUrl:R.toDataURL("image/png"),annotations:Xe};Rn(),Zt?.(t)}function Rn(){ie?.remove(),ie=null,R=null,E=null,ue=null,Xe=[],J=null,ut=!1}var ft=!1,mt=null;function ri(){if(mt)return mt;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("margin","0","important"),e.style.setProperty("padding","0","important"),e.style.setProperty("border","none","important"),e.style.setProperty("background","none","important"),e.style.setProperty("font-size","16px","important"),mt=e.attachShadow({mode:"open"}),document.body.appendChild(e),mt}function ms(e){if(ft)return;ft=!0;let t=ri();qn(e.maxBreadcrumbs),Xn(e.maxLogs),Gn(e.maxNetworkCaptures),er(),e.enablePerformance!==!1&&rr(),ls(e,t),e.enableLivePins!==!1&&ne()&&(ct(e.projectId,t),it(e.projectId))}function si(){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 fs={init(e){if(ft||typeof window>"u"||(e.environment??si())==="production")return;e.endpoint&&Tr(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)?ms(e):Hr(e.projectId).then(s=>{s&&ms(e)}).catch(()=>{})},destroy(){ft&&(cs(),Yr(),qr(),Vn(),Zn(),nr(),Fn(),sr(),document.querySelector("bugstash-root")?.remove(),mt=null,ft=!1)},getLogs:le,clearLogs:Yn,getNetworkCaptures:Me,getFailedNetworkCaptures:fe,clearNetworkCaptures:Qn,getErrors:ce,clearErrors:tr,getBreadcrumbs:Te,clearBreadcrumbs:Un,getPerformanceMetrics:Ae,addBreadcrumb:Y,getThemes:Nt,getThemeById:jt,setTheme:Kt,getCurrentThemeId:os,getLayouts:qt,getLayoutById:ot,setLayout:is,getCurrentLayoutId:as,getCurrentUser:ne,login:Dt,logout:Bt,togglePinMode:Fe,isPinModeActive:Vt,isConnected:Ur,openAnnotationEditor:bs,redactString:Pe,redactObject:Et},oi=fs;0&&(module.exports={BugStash});
1897
+ `,dt.appendChild(e);let n=document.createElement("div");n.className="bs-ann-toolbar";for(let a of ki){let c=document.createElement("button");c.className=`bs-ann-tool${a.id===sn?" active":""}`,c.title=a.label,c.innerHTML=`<svg viewBox="0 0 24 24"><path d="${a.icon}"/></svg>`,c.addEventListener("click",()=>{sn=a.id,n.querySelectorAll(".bs-ann-tool").forEach(p=>p.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(Ps());for(let a of Ei){let c=document.createElement("button");c.className=`bs-ann-color${a===on?" active":""}`,c.style.background=a,c.addEventListener("click",()=>{on=a,n.querySelectorAll(".bs-ann-color").forEach(p=>p.classList.remove("active")),c.classList.add("active")}),n.appendChild(c)}n.appendChild(Ps());let r=document.createElement("button");r.className="bs-ann-btn bs-ann-undo",r.textContent="Undo",r.addEventListener("click",()=>{Zt.pop(),ln()}),n.appendChild(r);let s=document.createElement("button");s.className="bs-ann-btn bs-ann-save",s.textContent="Save",s.addEventListener("click",Ci);let o=document.createElement("button");o.className="bs-ann-btn bs-ann-cancel",o.textContent="Cancel",o.addEventListener("click",()=>{qn(),an?.(null)}),n.appendChild(s),n.appendChild(o),dt.appendChild(n);let i=document.createElement("div");i.className="bs-ann-canvas-wrap",q=document.createElement("canvas"),C=q.getContext("2d"),i.appendChild(q),dt.appendChild(i),document.body.appendChild(dt),ht=new Image,ht.onload=()=>{if(!q||!C||!ht)return;let a=window.innerWidth-32,c=window.innerHeight-100,p=ht.width,b=ht.height,v=Math.min(1,a/p,c/b);p=Math.round(p*v),b=Math.round(b*v),q.width=p,q.height=b,ln(),Si()},ht.src=t}function Ps(){let t=document.createElement("div");return t.className="bs-ann-sep",t}function Si(){if(!q)return;q.addEventListener("mousedown",e=>{xe=!0;let{x:n,y:r}=Ts(e);Q={type:sn,color:on,lineWidth:wi,points:[{x:n,y:r}],x:n,y:r,width:0,height:0}}),q.addEventListener("mousemove",e=>{if(!xe||!Q)return;let{x:n,y:r}=Ts(e);Q.type==="freehand"?Q.points.push({x:n,y:r}):(Q.width=n-Q.x,Q.height=r-Q.y),ln(),Ms(Q)});let t=()=>{xe&&Q&&(Zt.push(Q),Q=null),xe=!1,ln()};q.addEventListener("mouseup",t),q.addEventListener("mouseleave",t)}function Ts(t){let e=q.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}function ln(){if(!(!C||!q||!ht)){C.clearRect(0,0,q.width,q.height),C.drawImage(ht,0,0,q.width,q.height);for(let t of Zt)Ms(t)}}function Ms(t){if(C)switch(C.strokeStyle=t.color,C.fillStyle=t.color,C.lineWidth=t.lineWidth,C.lineCap="round",C.lineJoin="round",t.type){case"freehand":{if(!t.points||t.points.length<2)return;C.beginPath(),C.moveTo(t.points[0].x,t.points[0].y);for(let e=1;e<t.points.length;e++)C.lineTo(t.points[e].x,t.points[e].y);C.stroke();break}case"rectangle":{C.strokeRect(t.x,t.y,t.width,t.height);break}case"circle":{let e=t.x+t.width/2,n=t.y+t.height/2,r=Math.abs(t.width)/2,s=Math.abs(t.height)/2;C.beginPath(),C.ellipse(e,n,r,s,0,0,Math.PI*2),C.stroke();break}case"arrow":{let e=t.x,n=t.y,r=t.x+t.width,s=t.y+t.height,o=14,i=Math.atan2(s-n,r-e);C.beginPath(),C.moveTo(e,n),C.lineTo(r,s),C.stroke(),C.beginPath(),C.moveTo(r,s),C.lineTo(r-o*Math.cos(i-Math.PI/6),s-o*Math.sin(i-Math.PI/6)),C.lineTo(r-o*Math.cos(i+Math.PI/6),s-o*Math.sin(i+Math.PI/6)),C.closePath(),C.fill();break}}}function Ci(){if(!q){qn(),an?.(null);return}let e={dataUrl:q.toDataURL("image/png"),annotations:Zt};qn(),an?.(e)}function qn(){dt?.remove(),dt=null,q=null,C=null,ht=null,Zt=[],Q=null,xe=!1}var ke=!1,we=null;function Pi(){if(we)return we;let t=document.createElement("bugstash-root");return t.style.setProperty("position","fixed","important"),t.style.setProperty("inset","0","important"),t.style.setProperty("pointer-events","none","important"),t.style.setProperty("z-index","2147483640","important"),t.style.setProperty("display","block","important"),t.style.setProperty("visibility","visible","important"),t.style.setProperty("opacity","1","important"),t.style.setProperty("transform","none","important"),t.style.setProperty("perspective","none","important"),t.style.setProperty("filter","none","important"),t.style.setProperty("will-change","auto","important"),t.style.setProperty("contain","none","important"),t.style.setProperty("isolation","auto","important"),t.style.setProperty("mix-blend-mode","normal","important"),t.style.setProperty("clip-path","none","important"),t.style.setProperty("margin","0","important"),t.style.setProperty("padding","0","important"),t.style.setProperty("border","none","important"),t.style.setProperty("background","none","important"),t.style.setProperty("box-sizing","border-box","important"),t.style.setProperty("overflow","visible","important"),t.style.setProperty("min-width","0","important"),t.style.setProperty("min-height","0","important"),t.style.setProperty("max-width","none","important"),t.style.setProperty("max-height","none","important"),t.style.setProperty("float","none","important"),t.style.setProperty("clear","none","important"),t.style.setProperty("columns","auto","important"),t.style.setProperty("font-size","16px","important"),t.style.setProperty("line-height","normal","important"),t.style.setProperty("text-align","left","important"),t.style.setProperty("direction","ltr","important"),we=t.attachShadow({mode:"closed"}),document.body.appendChild(t),we}function As(t){if(ke)return;ke=!0;let e=Pi();Kn(t.maxBreadcrumbs),er(t.maxLogs),ir(t.maxNetworkCaptures),cr(),t.enablePerformance!==!1&&br(),Ss(t,e),t.enableLivePins!==!1&&ot()&&(Kt(t.projectId,e),Yt(t.projectId))}function Ti(){if(typeof window>"u")return"production";let t=window.location.hostname;return t==="localhost"||t==="127.0.0.1"||t==="0.0.0.0"||t.endsWith(".local")||/^192\.168\./.test(t)||/^10\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)?"development":t.includes("staging")||t.includes("stage")||t.includes("preview")||t.includes("preprod")||t.includes("pre-prod")||t.includes("qa.")||t.includes(".qa")||t.includes("test.")||t.includes(".dev.")||t.includes("vercel.app")||t.includes("netlify.app")||t.includes("pages.dev")||t.includes("ngrok.io")||t.includes("ngrok-free.app")||t.includes("localhost.run")||t.includes("loca.lt")?"staging":"production"}var Rs={init(t){if(ke||typeof window>"u"||(t.environment??Ti())==="production")return;t.endpoint&&Dr(t.endpoint);let n=window.location.hostname;n==="localhost"||n==="127.0.0.1"||n==="0.0.0.0"||n.endsWith(".local")||/^192\.168\./.test(n)||/^10\./.test(n)||/^172\.(1[6-9]|2\d|3[01])\./.test(n)?As(t):_r(t.projectId).then(s=>{s&&As(t)}).catch(()=>{})},destroy(){ke&&(Cs(),as(),Kr(),rr(),lr(),pr(),Qn(),ur(),document.querySelector("bugstash-root")?.remove(),we=null,ke=!1)},getLogs:ut,clearLogs:nr,getNetworkCaptures:Dt,getFailedNetworkCaptures:vt,clearNetworkCaptures:ar,getErrors:ft,clearErrors:dr,getBreadcrumbs:zt,clearBreadcrumbs:Gn,getPerformanceMetrics:Bt,addBreadcrumb:V,getThemes:Xe,getThemeById:Ve,setTheme:ye,getCurrentThemeId:ws,getLayouts:Je,getLayoutById:be,setLayout:ks,getCurrentLayoutId:Es,getCurrentUser:ot,login:_e,logout:We,togglePinMode:$t,isPinModeActive:nn,isConnected:Gr,openAnnotationEditor:$s,redactString:It,redactObject:Me},$i=Rs;0&&(module.exports={BugStash});
1714
1898
  //# sourceMappingURL=index.cjs.map