prreviewbuddy 0.80.3 → 0.82.1

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.
@@ -1,24 +1,24 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-D6oLtkSC.js","chunk-CvSN2dS5.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-DIEkEPeW.js","chunk-D7hFEgee.js","chunk-B2kMZj3m.js","chunk-BXful7fw.js","chunk-9OYdRhXM.js","chunk-DyBGMc4d.js","chunk-D71XVZIg.js","chunk-Dy-Kn_BL.js","chunk-B-Up-Dum.js","chunk-CCkeMk9N.js","chunk-DwHSAwhM.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-Baon_ihZ.js","chunk-CAnKkQXq.js","chunk-LbU1hoFO.js","chunk-BzbQS41l.js","chunk-BsjqnLg3.js","chunk-BtIQNnN0.js","chunk-D3KKoC5L.js","chunk-CP0rg-5b.js","chunk-j_1H8WHN.js","chunk-BOvsFOI6.js","chunk-CqHdAlCp.js","chunk-DijMHRDA.js","chunk-D2pwppYQ.js","chunk-Cjc271yU.js","chunk-B2PgDgse.js","chunk-D95j_xjm.js","chunk-Cv3JjNkX.js","chunk-EIJEcyW-.js","chunk-C3nvJp0N.js","chunk-D2NZorQR.js","chunk-NzFayA7r.js","chunk-AdYjtsZU.js","chunk-pNSm1SyV.js","chunk-c-cg1wCO.js","chunk-CBrdyqSx.js"])))=>i.map(i=>d[i]);
2
- import{$ as e,A as t,B as n,G as r,H as i,J as a,K as o,M as s,N as c,Q as l,U as u,V as d,W as f,X as ee,Z as p,a as m,d as h,i as te,nt as ne,o as re,q as ie,r as g,t as ae,tt as oe,z as se}from"./chunk-C8d9FvLk.js";import{i as ce,o as le}from"./chunk-h55PfL_M.js";import{t as _}from"./chunk-CvSN2dS5.js";import{n as ue,t as de}from"./chunk-C3E91izb.js";import{t as fe}from"./chunk-Dv0Wowan.js";import{t as pe}from"./chunk-C8kkSv38.js";function v(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function me(e){return v(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var he=`pr-helper-code-block`,ge=`pr-helper-code-copy`,_e=/^\u0002(\d+)\u0002/,ve=/^(?:https?:\/\/|#)/i,ye=/^https:\/\//i,be=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,xe=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function Se(e){let t=(e??``).trim();return!t||be.test(t)||xe.test(t)?`View attached image`:`View image: ${t}`}function Ce(e,t){return ye.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function we(e,t){return Ce(v((e??``).trim()),v(t))}var y=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Te=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Ee=e=>/^\d{1,9}$/.test(e)?e:null,De=e=>e.slice(0,300),Oe=new Map(Object.entries({a:{href:e=>{let t=e.trim();return ve.test(t)?t:null},title:De},abbr:{title:De},b:{},blockquote:{},br:{},caption:{align:y},cite:{},code:{},dd:{},del:{},details:{},div:{align:y},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Ee},p:{align:y},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:y},tbody:{},td:{align:y,colspan:Te,rowspan:Te},tfoot:{},th:{align:y,colspan:Te,rowspan:Te},thead:{},tr:{align:y},u:{},ul:{},var:{},h1:{align:y},h2:{align:y},h3:{align:y},h4:{align:y},h5:{align:y},h6:{align:y}}).map(([e,t])=>[e,new Map(Object.entries({title:De,...t}))])),ke=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Ae=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),je=new Set(`picture.pre.source.track.input.form.label.button.option.optgroup.font.center.section.article.header.footer.nav.figure.figcaption.main.aside.html.body.meta.link.base.wbr.col.colgroup.area.map.param.fieldset.legend.dialog`.split(`.`)),Me=new Set(`address.article.aside.blockquote.caption.center.dd.details.dialog.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),Ne=new RegExp(["`[^`\\n]+`",`<(\\/?)([A-Za-z][A-Za-z0-9-]*)((?:\\s+[^\\s"'<>\\/=]+(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s"'=<>\`]+))?)*)\\s*(\\/?)>`,`&(?:#\\d{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});`].join(`|`),`g`),Pe=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Fe(e){return e.replace(/&(#\d{1,7}|#[xX][0-9a-fA-F]{1,6}|amp|lt|gt|quot|apos|nbsp);/g,(e,t)=>{if(t[0]===`#`){let e=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return e>0&&e<=1114111?String.fromCodePoint(e):``}return{amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:`\xA0`}[t]??``})}function Ie(e){let t=new Map;for(let n of e.matchAll(Pe)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Fe(n[2]??n[3]??n[4]??``))}return t}function Le(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Re(e,t){let n=Le(e),r=Oe.get(e),i=[];for(let[e,n]of Ie(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${v(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function ze(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;Ne.lastIndex=0;for(let t;t=Ne.exec(e);){let[a,o,s,c,l]=t,u=null;if(a[0]===`&`)u=n({kind:`entity`,name:``,tag:``,markup:a});else if(s){let t=s.toLowerCase();if(t===`img`){let e=Ie(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:we(e.get(`src`),Se(r))??v(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Ie(c).get(`src`);if(!o&&!l){let n=e.slice(Ne.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Ie(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(Ne.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:we(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Ae.has(t)){if(!o&&!l&&!ke.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(Ne.lastIndex),i=r.search(n);i!==-1&&(Ne.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(je.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Oe.has(t)){let e=Le(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):ke.has(t)?n({kind:`void`,name:t,tag:e,markup:Re(t,c)}):n({kind:`open`,name:t,tag:e,markup:Re(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=Ne.lastIndex)}return{text:r+e.slice(i),tokens:t}}function Be(e,t){for(let n of e.matchAll(/\u0002(\d+)\u0002/g))if(t.tokens[Number(n[1])].kind!==`entity`)return!0;return!1}function Ve(e,t){let n=e.match(_e);return!!(n&&Me.has(t.tokens[Number(n[1])].name))}function He(e){let t=[];return e.replace(/<a\b[^>]*>|<\/a>/g,e=>{if(e===`</a>`)return t.pop()?``:e;let n=t.length>0;return t.push(n),n?``:e})}function Ue(e,t){let n=[],r=e=>{let r=t.tokens[e];if(r.kind===`open`)return n.push(r.tag),r.markup;if(r.kind===`close`){let e=n.lastIndexOf(r.tag);return e===-1?``:n.splice(e).reverse().map(e=>`</${e}>`).join(``)}return r.markup},i=``,a=0,o=!1;for(let n=0;n<e.length;n++){let s=e[n];if(s===`<`)o=!0;else if(s===`>`)o=!1;else if(s===``){let s=e.indexOf(``,n+1);if(s===-1)break;let c=Number(e.slice(n+1,s));i+=e.slice(a,n)+(o&&t.tokens[c].kind!==`entity`?``:r(c)),n=s,a=s+1}}return i+e.slice(a)+n.reverse().map(e=>`</${e}>`).join(``)}var We=`\0`,Ge=``,Ke=/\u0000(\d+)\u0000/g,qe=/^\u0000\d+\u0000$/,Je=/\u0001(\d+)\u0001/g;function Ye(e,t={}){let{text:n,blocks:r}=tt(et(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return at(ft(n),r);let i=ze(n);return He(Ue(at(ft(i.text,i),r),i))}function Xe(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Ze(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Qe=/`[^`\n]+`|<!--/g;function $e(e,t){Qe.lastIndex=t;for(let t;t=Qe.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function et(e,t={}){let n=[],r=null,i=!1,a=null,o=0;for(let s of e.split(`
3
- `)){let c=o;if(o+=s.length+1,r){let e=Ze(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=Xe(s),r)){n.push({raw:s,visible:s,code:`open`});continue}if(!t.hideHtmlComments){n.push({raw:s,visible:s});continue}let l=i?a:null,u=``,d=0;for(;d<s.length;){if(i){let e=s.indexOf(`-->`,d);if(e===-1)break;d=e+3,i=!1;continue}let t=$e(s,d);if(t===-1||e.indexOf(`-->`,c+t+4)===-1){u+=s.slice(d);break}u+=s.slice(d,t),d=t+4,i=!0}if(l){l.visible+=u,n.push({raw:s,visible:``,absent:!0});continue}let f={raw:s,visible:u};i&&(a=u.trim()===``?null:f),n.push(f)}return n}function tt(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${We}${n.length}${We}`);let e=i.join(`
4
- `);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??it(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&nt(n.raw).toLowerCase()===`mermaid`?rt(r):void 0):n.code===`body`?i.push(n.raw):n.code===`close`?o():r.push(n.visible));return i&&o(),{text:r.join(`
5
- `),blocks:n}}function nt(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function rt(e){for(let t=e.length-1;t>=0;t--){let n=e[t].trim();if(!n)continue;let r=n.match(/^#{1,6}\s+(.+?)\s*#*$/)?.[1]??n.match(/^(\*\*|__)(.+)\1$/)?.[2];return r&&r.replace(/[`*_]/g,``).trim()||null}return null}function it(e){let t=e.split(`
6
- `).map(e=>e.trim()),n=0;if(t.find(e=>e)===`---`){let e=t.indexOf(`---`),r=t.indexOf(`---`,e+1);n=r===-1?t.length:r+1}return t.slice(n).find(e=>e&&!e.startsWith(`%%`))?.split(/\s+/)[0]||`diagram`}function at(e,t){return e.replace(Ke,(e,n)=>{let r=t[Number(n)];return r.diagram?ct(r.code,r.diagram.label):ot(r.code,`Copy`,`Copy code`)})}function ot(e,t,n,r=``){return`<div class="${he}"${r}><pre><code>${v(e)}</code></pre><button type="button" class="${ge}" aria-label="${n}">${t}</button></div>`}var st=0;function ct(e,t){let n=`prb-md-mermaid-source-${++st}`;return`<figure class="prb-md-mermaid" data-md-mermaid data-state="source"><div class="prb-md-mermaid-canvas" data-md-mermaid-canvas role="img" aria-label="${v(t)}" hidden></div><p class="prb-md-mermaid-error" data-md-mermaid-error hidden>This diagram couldn\u2019t be displayed.</p><button type="button" class="prb-md-mermaid-toggle" data-md-mermaid-toggle aria-expanded="true" aria-controls="${n}" hidden>Hide source</button>`+ot(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function lt(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function ut(e){return lt(e.match(/^[ \t]*/)[0])}function dt(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=lt(n)+(r?1:i.length+1),c=lt(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function ft(e,t){let n=[],r=[],i=[],a=null,o=e=>e.tag===`ol`&&e.start!==1?` start="${e.start}"`:``,s=null,c=()=>{if(r.length&&n.push(`<p>${pt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${pt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?pt(e[0],t):e.map(e=>`<p>${pt(e,t)}</p>`).join(``),r=t=>`<${t.tag}${o(t)}>${t.items.map(t=>`<li>${e(t.paras)}</li>`).join(``)}</${t.tag}>`,i=({blocks:e})=>{let n=e.filter(e=>typeof e==`string`).length===1;return e.map(e=>typeof e==`string`?n?pt(e,t):`<p>${pt(e,t)}</p>`:r(e)).join(``)};n.push(`<${a.tag}${o(a)}>${a.items.map(e=>`<li>${i(e)}</li>`).join(``)}</${a.tag}>`)}r=[],i=[],a=null};for(let o of e.split(`
7
- `)){let e=o.trim();if(s){if(e){s.push(v(e));continue}n.push(s.join(`
8
- `)),s=null}if(!e){a&&!r.length&&!i.length?a.gap=!0:c();continue}if(a?.items.length){let t=a.items[a.items.length-1],n=t.blocks[t.blocks.length-1],r=typeof n==`string`?null:n,i=r?.items[r.items.length-1]??null,s=ut(o),l=dt(o),u=a.gap;if(a.gap=!1,l&&s>=t.content){let e=r&&i&&(s>=i.content||r.tag===l.tag),n={paras:[l.text],content:l.content};e?r.items.push(n):t.blocks.push({tag:l.tag,start:l.start,items:[n]});continue}if(!l&&u){if(i&&s>=i.content){i.paras.push(e);continue}if(s>=t.content){t.blocks.push(e);continue}c()}else l&&u&&l.tag!==a.tag&&c()}if(t&&Ve(e,t)){c(),s=[v(e)];continue}if(qe.test(e)){c(),n.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){c(),n.push(`<hr>`);continue}let l=e.match(/^(#{1,6})\s+(.+)$/);if(l){c();let e=Math.min(l[1].length,3)+3;n.push(`<h${e}>${pt(l[2],t)}</h${e}>`);continue}let u=dt(o);if(u){let e=a;e?.tag!==u.tag&&(c(),e=a={tag:u.tag,start:u.start,items:[],gap:!1}),e.items.push({blocks:[u.text],content:u.content});continue}let d=e.match(/^>\s?(.*)$/);if(d){i.length||c(),i.push(d[1]);continue}if(a&&a.items.length){let{blocks:t}=a.items[a.items.length-1],n=t[t.length-1];if(typeof n==`string`)t[t.length-1]=`${n} ${e}`;else{let t=n.items[n.items.length-1].paras;t[t.length-1]+=` ${e}`}continue}if(i.length){i[i.length-1]+=` ${e}`;continue}r.push(e)}return c(),s&&n.push(s.join(`
9
- `)),n.join(``)}function pt(e,t){let n=[];return v(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${Ge}${n.length-1}${Ge}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Be(r,t)?Ce(r,Se(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>ve.test(r)&&!(t&&Be(r,t))?`<a href="${r}" target="_blank" rel="noopener noreferrer">${n}</a>`:e).replace(/\*\*([^*\n]+)\*\*/g,`<strong>$1</strong>`).replace(/__([^_\n]+)__/g,`<strong>$1</strong>`).replace(/(^|[^*\w])\*([^*\n]+)\*/g,`$1<em>$2</em>`).replace(/(^|[^_\w])_([^_\n]+)_(?![\w_])/g,`$1<em>$2</em>`).replace(Je,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function mt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),ht(e)}}function ht(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch(e){return console.warn(`PR Helper: clipboard fallback failed`,e),!1}finally{t.remove()}}var gt=`pr-helper-msg-copy`,_t=`pr-helper-chat-actions`,vt=`data-message-id`,yt=`data-copy-source`,bt={idle:{icon:`<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>`,label:``,aria:`Copy message`},copied:{icon:`<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>`,label:`Copied`,aria:`Copied`},failed:{icon:`<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>`,label:`Copy failed`,aria:`Copy failed`}};function xt(e){return Et(`${yt}="${v(e)}"`)}var St=`pr-helper-finding-copy`,Ct=`data-copy-idle-label`,wt=`data-copy-idle-aria`,Tt=`data-copy-idle-tip`;function Et(e,t){let{icon:n}=bt.idle,r=t?.label??bt.idle.label,i=t?.aria??bt.idle.aria,a=t?` ${Ct}="${v(r)}" ${wt}="${v(i)}" ${Tt}="${v(t.tip)}"`:``,o=`<button type="button" class="${t?`${gt} ${St}`:gt}" ${e}${a}${t?` data-tip="${v(t.tip)}"`:``} aria-label="${v(i)}"><span class="${gt}-icon" aria-hidden="true">${Ot(n)}</span><span class="${gt}-label"${r?``:` hidden`}>${v(r)}</span></button>`;return t?o:`<div class="${_t}">${o}</div>`}function Dt(e,t){let n=bt[t],r=t===`idle`?{...n,label:e.getAttribute(Ct)??n.label,aria:e.getAttribute(wt)??n.aria}:n,i=e.querySelector(`.${gt}-icon`),a=e.querySelector(`.${gt}-label`);i&&(i.innerHTML=Ot(r.icon));let o=(e.getAttribute(Ct)??``)!==``,s=e.classList.contains(`pr-helper-finding-copy`)&&!o;a instanceof HTMLElement&&(a.textContent=s?``:r.label,a.hidden=s||r.label===``),s&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(Tt)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Ot(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var kt=1400,At=`Copy`,jt=`Copied`,Mt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,Nt=new WeakMap;function Pt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${ge}`),i=r?null:n.closest(`.${gt}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Lt(r):i&&Ft(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Ft(e,t){let n=It(e,t);zt(e,n!==null&&await mt(n)?`copied`:`failed`)}function It(e,t){let n=e.getAttribute(yt);if(n!==null)return n;let r=e.getAttribute(vt);return r&&t?t(r):null}async function Lt(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await mt(t.textContent??``):!1;!n&&t&&Rt(t),Bt(e,n?jt:Mt,n)}function Rt(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function zt(e,t){let n=Nt.get(e);n&&window.clearTimeout(n),Dt(e,t),Nt.set(e,window.setTimeout(()=>{Dt(e,`idle`),Nt.delete(e)},kt))}function Bt(e,t,n){let r=Nt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||At;e.textContent=t,e.classList.toggle(`copied`,n),Nt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),Nt.delete(e)},kt))}var Vt={startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`,suppressErrorRendering:!0,secure:[`secure`,`securityLevel`,`startOnLoad`,`maxTextSize`,`suppressErrorRendering`,`maxEdges`,`htmlLabels`,`flowchart`,`themeCSS`,`themeVariables`,`theme`,`darkMode`,`fontFamily`,`dompurifyConfig`,`arrowMarkerAbsolute`,`deterministicIds`,`deterministicIDSeed`]},Ht=null;function Ut(){return Ht??=_(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(Vt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),Ht}async function Wt(e,t,n,r=Ut){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,Kt(e)}var Gt=`http://www.w3.org/2000/svg`;function Kt(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(Gt,`g`);for(let e of[...t.attributes])/^(?:xlink:)?href$|^target$|^rel$/i.test(e.name)||n.setAttribute(e.name,e.value);n.append(...t.childNodes),t.replaceWith(n)}for(let t of e.querySelectorAll(`.clickable`))t.classList.remove(`clickable`)}var qt=0;function Jt(e,t={}){let n=t.engine??Ut,r=t.observe??Yt,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),Xt(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&Qt(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function Yt(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function Xt(e,t){let n=t=>e.querySelector(`[data-md-mermaid-${t}]`),r=n(`canvas`),i=n(`source`),a=n(`toggle`),o=i?.querySelector(`pre code`)?.textContent??``;if(!(!r||!i||!a))try{await Wt(r,`prb-md-mermaid-${++qt}`,o,t),Zt(r.querySelector(`svg`)),r.hidden=!1,i.hidden=!0,a.hidden=!1,a.textContent=`View source`,a.setAttribute(`aria-expanded`,`false`),e.dataset.state=`diagram`}catch{e.dataset.state=`failed`;let t=n(`error`);t&&(t.hidden=!1)}}function Zt(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function Qt(e){let t=e.closest(`figure`)?.querySelector(`[data-md-mermaid-source]`);if(!t)return;let n=t.hidden;t.hidden=!n,e.textContent=n?`Hide source`:`View source`,e.setAttribute(`aria-expanded`,String(n))}var $t=`pr-helper-selection-popover`,en=`pr-helper-selection-popover-expanded`,tn=`pr-helper-selection-copy-done`,nn=8,rn=8,an=1e3,on=`Copy selected text`,sn=`Copy`,cn=`Copied`,ln=`pr-helper-selection-popover-flat`,b=null;function un(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${v(e.id)}">${v(e.label)}</button>`}function dn(e){let t=new Map;for(let n of e){if(!n.section)continue;let e=t.get(n.section);e?e.push(n):t.set(n.section,[n])}return`${e.filter(e=>!e.section).map(un).join(``)}${[...t].map(([e,t])=>`
2
+ import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d as u,dt as d,et as f,ft as ee,i as p,it as te,lt as m,nt as ne,o as h,ot as re,r as ie,rt as g,st as _,t as ae,tt as v}from"./chunk-CQNkZ9TG.js";import{i as oe,o as se}from"./chunk-h55PfL_M.js";import{t as y}from"./chunk-CvSN2dS5.js";import{n as ce,t as le}from"./chunk-CxFmUaBj.js";import{t as ue}from"./chunk-Dv0Wowan.js";import{t as de}from"./chunk-C8kkSv38.js";function b(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function fe(e){return b(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var pe=`pr-helper-code-block`,me=`pr-helper-code-copy`,he=/^\u0002(\d+)\u0002/,ge=/^(?:https?:\/\/|#)/i,_e=/^https:\/\//i,ve=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,ye=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function be(e){let t=(e??``).trim();return!t||ve.test(t)||ye.test(t)?`View attached image`:`View image: ${t}`}function xe(e,t){return _e.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Se(e,t){return xe(b((e??``).trim()),b(t))}var x=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Ce=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,we=e=>/^\d{1,9}$/.test(e)?e:null,Te=e=>e.slice(0,300),Ee=new Map(Object.entries({a:{href:e=>{let t=e.trim();return ge.test(t)?t:null},title:Te},abbr:{title:Te},b:{},blockquote:{},br:{},caption:{align:x},cite:{},code:{},dd:{},del:{},details:{},div:{align:x},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:we},p:{align:x},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:x},tbody:{},td:{align:x,colspan:Ce,rowspan:Ce},tfoot:{},th:{align:x,colspan:Ce,rowspan:Ce},thead:{},tr:{align:x},u:{},ul:{},var:{},h1:{align:x},h2:{align:x},h3:{align:x},h4:{align:x},h5:{align:x},h6:{align:x}}).map(([e,t])=>[e,new Map(Object.entries({title:Te,...t}))])),De=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Oe=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),ke=new Set(`picture.pre.source.track.input.form.label.button.option.optgroup.font.center.section.article.header.footer.nav.figure.figcaption.main.aside.html.body.meta.link.base.wbr.col.colgroup.area.map.param.fieldset.legend.dialog`.split(`.`)),Ae=new Set(`address.article.aside.blockquote.caption.center.dd.details.dialog.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),je=new RegExp(["`[^`\\n]+`",`<(\\/?)([A-Za-z][A-Za-z0-9-]*)((?:\\s+[^\\s"'<>\\/=]+(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s"'=<>\`]+))?)*)\\s*(\\/?)>`,`&(?:#\\d{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});`].join(`|`),`g`),Me=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Ne(e){return e.replace(/&(#\d{1,7}|#[xX][0-9a-fA-F]{1,6}|amp|lt|gt|quot|apos|nbsp);/g,(e,t)=>{if(t[0]===`#`){let e=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return e>0&&e<=1114111?String.fromCodePoint(e):``}return{amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:`\xA0`}[t]??``})}function Pe(e){let t=new Map;for(let n of e.matchAll(Me)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Ne(n[2]??n[3]??n[4]??``))}return t}function Fe(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Ie(e,t){let n=Fe(e),r=Ee.get(e),i=[];for(let[e,n]of Pe(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${b(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Le(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;je.lastIndex=0;for(let t;t=je.exec(e);){let[a,o,s,c,l]=t,u=null;if(a[0]===`&`)u=n({kind:`entity`,name:``,tag:``,markup:a});else if(s){let t=s.toLowerCase();if(t===`img`){let e=Pe(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Se(e.get(`src`),be(r))??b(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Pe(c).get(`src`);if(!o&&!l){let n=e.slice(je.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Pe(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(je.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Se(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Oe.has(t)){if(!o&&!l&&!De.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(je.lastIndex),i=r.search(n);i!==-1&&(je.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(ke.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Ee.has(t)){let e=Fe(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):De.has(t)?n({kind:`void`,name:t,tag:e,markup:Ie(t,c)}):n({kind:`open`,name:t,tag:e,markup:Ie(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=je.lastIndex)}return{text:r+e.slice(i),tokens:t}}function Re(e,t){for(let n of e.matchAll(/\u0002(\d+)\u0002/g))if(t.tokens[Number(n[1])].kind!==`entity`)return!0;return!1}function ze(e,t){let n=e.match(he);return!!(n&&Ae.has(t.tokens[Number(n[1])].name))}function Be(e){let t=[];return e.replace(/<a\b[^>]*>|<\/a>/g,e=>{if(e===`</a>`)return t.pop()?``:e;let n=t.length>0;return t.push(n),n?``:e})}function Ve(e,t){let n=[],r=e=>{let r=t.tokens[e];if(r.kind===`open`)return n.push(r.tag),r.markup;if(r.kind===`close`){let e=n.lastIndexOf(r.tag);return e===-1?``:n.splice(e).reverse().map(e=>`</${e}>`).join(``)}return r.markup},i=``,a=0,o=!1;for(let n=0;n<e.length;n++){let s=e[n];if(s===`<`)o=!0;else if(s===`>`)o=!1;else if(s===``){let s=e.indexOf(``,n+1);if(s===-1)break;let c=Number(e.slice(n+1,s));i+=e.slice(a,n)+(o&&t.tokens[c].kind!==`entity`?``:r(c)),n=s,a=s+1}}return i+e.slice(a)+n.reverse().map(e=>`</${e}>`).join(``)}var He=`\0`,Ue=``,We=/\u0000(\d+)\u0000/g,Ge=/^\u0000\d+\u0000$/,Ke=/\u0001(\d+)\u0001/g;function qe(e,t={}){let{text:n,blocks:r}=$e(Qe(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return rt(ut(n),r);let i=Le(n);return Be(Ve(rt(ut(i.text,i),r),i))}function Je(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Ye(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Xe=/`[^`\n]+`|<!--/g;function Ze(e,t){Xe.lastIndex=t;for(let t;t=Xe.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function Qe(e,t={}){let n=[],r=null,i=!1,a=null,o=0;for(let s of e.split(`
3
+ `)){let c=o;if(o+=s.length+1,r){let e=Ye(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=Je(s),r)){n.push({raw:s,visible:s,code:`open`});continue}if(!t.hideHtmlComments){n.push({raw:s,visible:s});continue}let l=i?a:null,u=``,d=0;for(;d<s.length;){if(i){let e=s.indexOf(`-->`,d);if(e===-1)break;d=e+3,i=!1;continue}let t=Ze(s,d);if(t===-1||e.indexOf(`-->`,c+t+4)===-1){u+=s.slice(d);break}u+=s.slice(d,t),d=t+4,i=!0}if(l){l.visible+=u,n.push({raw:s,visible:``,absent:!0});continue}let f={raw:s,visible:u};i&&(a=u.trim()===``?null:f),n.push(f)}return n}function $e(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${He}${n.length}${He}`);let e=i.join(`
4
+ `);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??nt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&et(n.raw).toLowerCase()===`mermaid`?tt(r):void 0):n.code===`body`?i.push(n.raw):n.code===`close`?o():r.push(n.visible));return i&&o(),{text:r.join(`
5
+ `),blocks:n}}function et(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function tt(e){for(let t=e.length-1;t>=0;t--){let n=e[t].trim();if(!n)continue;let r=n.match(/^#{1,6}\s+(.+?)\s*#*$/)?.[1]??n.match(/^(\*\*|__)(.+)\1$/)?.[2];return r&&r.replace(/[`*_]/g,``).trim()||null}return null}function nt(e){let t=e.split(`
6
+ `).map(e=>e.trim()),n=0;if(t.find(e=>e)===`---`){let e=t.indexOf(`---`),r=t.indexOf(`---`,e+1);n=r===-1?t.length:r+1}return t.slice(n).find(e=>e&&!e.startsWith(`%%`))?.split(/\s+/)[0]||`diagram`}function rt(e,t){return e.replace(We,(e,n)=>{let r=t[Number(n)];return r.diagram?ot(r.code,r.diagram.label):it(r.code,`Copy`,`Copy code`)})}function it(e,t,n,r=``){return`<div class="${pe}"${r}><pre><code>${b(e)}</code></pre><button type="button" class="${me}" aria-label="${n}">${t}</button></div>`}var at=0;function ot(e,t){let n=`prb-md-mermaid-source-${++at}`;return`<figure class="prb-md-mermaid" data-md-mermaid data-state="source"><div class="prb-md-mermaid-canvas" data-md-mermaid-canvas role="img" aria-label="${b(t)}" hidden></div><p class="prb-md-mermaid-error" data-md-mermaid-error hidden>This diagram couldn\u2019t be displayed.</p><button type="button" class="prb-md-mermaid-toggle" data-md-mermaid-toggle aria-expanded="true" aria-controls="${n}" hidden>Hide source</button>`+it(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function st(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function ct(e){return st(e.match(/^[ \t]*/)[0])}function lt(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=st(n)+(r?1:i.length+1),c=st(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function ut(e,t){let n=[],r=[],i=[],a=null,o=e=>e.tag===`ol`&&e.start!==1?` start="${e.start}"`:``,s=null,c=()=>{if(r.length&&n.push(`<p>${dt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${dt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?dt(e[0],t):e.map(e=>`<p>${dt(e,t)}</p>`).join(``),r=t=>`<${t.tag}${o(t)}>${t.items.map(t=>`<li>${e(t.paras)}</li>`).join(``)}</${t.tag}>`,i=({blocks:e})=>{let n=e.filter(e=>typeof e==`string`).length===1;return e.map(e=>typeof e==`string`?n?dt(e,t):`<p>${dt(e,t)}</p>`:r(e)).join(``)};n.push(`<${a.tag}${o(a)}>${a.items.map(e=>`<li>${i(e)}</li>`).join(``)}</${a.tag}>`)}r=[],i=[],a=null};for(let o of e.split(`
7
+ `)){let e=o.trim();if(s){if(e){s.push(b(e));continue}n.push(s.join(`
8
+ `)),s=null}if(!e){a&&!r.length&&!i.length?a.gap=!0:c();continue}if(a?.items.length){let t=a.items[a.items.length-1],n=t.blocks[t.blocks.length-1],r=typeof n==`string`?null:n,i=r?.items[r.items.length-1]??null,s=ct(o),l=lt(o),u=a.gap;if(a.gap=!1,l&&s>=t.content){let e=r&&i&&(s>=i.content||r.tag===l.tag),n={paras:[l.text],content:l.content};e?r.items.push(n):t.blocks.push({tag:l.tag,start:l.start,items:[n]});continue}if(!l&&u){if(i&&s>=i.content){i.paras.push(e);continue}if(s>=t.content){t.blocks.push(e);continue}c()}else l&&u&&l.tag!==a.tag&&c()}if(t&&ze(e,t)){c(),s=[b(e)];continue}if(Ge.test(e)){c(),n.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){c(),n.push(`<hr>`);continue}let l=e.match(/^(#{1,6})\s+(.+)$/);if(l){c();let e=Math.min(l[1].length,3)+3;n.push(`<h${e}>${dt(l[2],t)}</h${e}>`);continue}let u=lt(o);if(u){let e=a;e?.tag!==u.tag&&(c(),e=a={tag:u.tag,start:u.start,items:[],gap:!1}),e.items.push({blocks:[u.text],content:u.content});continue}let d=e.match(/^>\s?(.*)$/);if(d){i.length||c(),i.push(d[1]);continue}if(a&&a.items.length){let{blocks:t}=a.items[a.items.length-1],n=t[t.length-1];if(typeof n==`string`)t[t.length-1]=`${n} ${e}`;else{let t=n.items[n.items.length-1].paras;t[t.length-1]+=` ${e}`}continue}if(i.length){i[i.length-1]+=` ${e}`;continue}r.push(e)}return c(),s&&n.push(s.join(`
9
+ `)),n.join(``)}function dt(e,t){let n=[];return b(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${Ue}${n.length-1}${Ue}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Re(r,t)?xe(r,be(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>ge.test(r)&&!(t&&Re(r,t))?`<a href="${r}" target="_blank" rel="noopener noreferrer">${n}</a>`:e).replace(/\*\*([^*\n]+)\*\*/g,`<strong>$1</strong>`).replace(/__([^_\n]+)__/g,`<strong>$1</strong>`).replace(/(^|[^*\w])\*([^*\n]+)\*/g,`$1<em>$2</em>`).replace(/(^|[^_\w])_([^_\n]+)_(?![\w_])/g,`$1<em>$2</em>`).replace(Ke,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function ft(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),pt(e)}}function pt(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch(e){return console.warn(`PR Helper: clipboard fallback failed`,e),!1}finally{t.remove()}}var mt=`pr-helper-msg-copy`,ht=`pr-helper-chat-actions`,gt=`data-message-id`,_t=`data-copy-source`,vt={idle:{icon:`<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>`,label:``,aria:`Copy message`},copied:{icon:`<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>`,label:`Copied`,aria:`Copied`},failed:{icon:`<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>`,label:`Copy failed`,aria:`Copy failed`}};function yt(e){return wt(`${_t}="${b(e)}"`)}var bt=`pr-helper-finding-copy`,xt=`data-copy-idle-label`,St=`data-copy-idle-aria`,Ct=`data-copy-idle-tip`;function wt(e,t){let{icon:n}=vt.idle,r=t?.label??vt.idle.label,i=t?.aria??vt.idle.aria,a=t?` ${xt}="${b(r)}" ${St}="${b(i)}" ${Ct}="${b(t.tip)}"`:``,o=`<button type="button" class="${t?`${mt} ${bt}`:mt}" ${e}${a}${t?` data-tip="${b(t.tip)}"`:``} aria-label="${b(i)}"><span class="${mt}-icon" aria-hidden="true">${Et(n)}</span><span class="${mt}-label"${r?``:` hidden`}>${b(r)}</span></button>`;return t?o:`<div class="${ht}">${o}</div>`}function Tt(e,t){let n=vt[t],r=t===`idle`?{...n,label:e.getAttribute(xt)??n.label,aria:e.getAttribute(St)??n.aria}:n,i=e.querySelector(`.${mt}-icon`),a=e.querySelector(`.${mt}-label`);i&&(i.innerHTML=Et(r.icon));let o=(e.getAttribute(xt)??``)!==``,s=e.classList.contains(`pr-helper-finding-copy`)&&!o;a instanceof HTMLElement&&(a.textContent=s?``:r.label,a.hidden=s||r.label===``),s&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(Ct)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Et(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Dt=1400,Ot=`Copy`,kt=`Copied`,At=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,jt=new WeakMap;function Mt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${me}`),i=r?null:n.closest(`.${mt}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Ft(r):i&&Nt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Nt(e,t){let n=Pt(e,t);Lt(e,n!==null&&await ft(n)?`copied`:`failed`)}function Pt(e,t){let n=e.getAttribute(_t);if(n!==null)return n;let r=e.getAttribute(gt);return r&&t?t(r):null}async function Ft(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await ft(t.textContent??``):!1;!n&&t&&It(t),Rt(e,n?kt:At,n)}function It(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Lt(e,t){let n=jt.get(e);n&&window.clearTimeout(n),Tt(e,t),jt.set(e,window.setTimeout(()=>{Tt(e,`idle`),jt.delete(e)},Dt))}function Rt(e,t,n){let r=jt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||Ot;e.textContent=t,e.classList.toggle(`copied`,n),jt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),jt.delete(e)},Dt))}var zt={startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`,suppressErrorRendering:!0,secure:[`secure`,`securityLevel`,`startOnLoad`,`maxTextSize`,`suppressErrorRendering`,`maxEdges`,`htmlLabels`,`flowchart`,`themeCSS`,`themeVariables`,`theme`,`darkMode`,`fontFamily`,`dompurifyConfig`,`arrowMarkerAbsolute`,`deterministicIds`,`deterministicIDSeed`]},Bt=null;function Vt(){return Bt??=y(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(zt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),Bt}async function Ht(e,t,n,r=Vt){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,Wt(e)}var Ut=`http://www.w3.org/2000/svg`;function Wt(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(Ut,`g`);for(let e of[...t.attributes])/^(?:xlink:)?href$|^target$|^rel$/i.test(e.name)||n.setAttribute(e.name,e.value);n.append(...t.childNodes),t.replaceWith(n)}for(let t of e.querySelectorAll(`.clickable`))t.classList.remove(`clickable`)}var Gt=0;function Kt(e,t={}){let n=t.engine??Vt,r=t.observe??qt,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),Jt(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&Xt(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function qt(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function Jt(e,t){let n=t=>e.querySelector(`[data-md-mermaid-${t}]`),r=n(`canvas`),i=n(`source`),a=n(`toggle`),o=i?.querySelector(`pre code`)?.textContent??``;if(!(!r||!i||!a))try{await Ht(r,`prb-md-mermaid-${++Gt}`,o,t),Yt(r.querySelector(`svg`)),r.hidden=!1,i.hidden=!0,a.hidden=!1,a.textContent=`View source`,a.setAttribute(`aria-expanded`,`false`),e.dataset.state=`diagram`}catch{e.dataset.state=`failed`;let t=n(`error`);t&&(t.hidden=!1)}}function Yt(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function Xt(e){let t=e.closest(`figure`)?.querySelector(`[data-md-mermaid-source]`);if(!t)return;let n=t.hidden;t.hidden=!n,e.textContent=n?`Hide source`:`View source`,e.setAttribute(`aria-expanded`,String(n))}var Zt=`pr-helper-selection-popover`,Qt=`pr-helper-selection-popover-expanded`,$t=`pr-helper-selection-copy-done`,en=8,tn=8,nn=1e3,rn=`Copy selected text`,an=`Copy`,on=`Copied`,sn=`pr-helper-selection-popover-flat`,S=null;function cn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${b(e.id)}">${b(e.label)}</button>`}function ln(e){let t=new Map;for(let n of e){if(!n.section)continue;let e=t.get(n.section);e?e.push(n):t.set(n.section,[n])}return`${e.filter(e=>!e.section).map(cn).join(``)}${[...t].map(([e,t])=>`
10
10
  <div class="pr-helper-selection-menu-group">
11
- <div class="pr-helper-selection-menu-heading">${v(e)}</div>
12
- <div class="pr-helper-selection-menu-group-items">${t.map(un).join(``)}</div>
13
- </div>`).join(``)}`}function fn(e){if(e.layout===`flat`)return pn(e);let t=dn(e.actions);return`
11
+ <div class="pr-helper-selection-menu-heading">${b(e)}</div>
12
+ <div class="pr-helper-selection-menu-group-items">${t.map(cn).join(``)}</div>
13
+ </div>`).join(``)}`}function un(e){if(e.layout===`flat`)return dn(e);let t=ln(e.actions);return`
14
14
  <div class="pr-helper-selection-bar">
15
15
  <button type="button" class="pr-helper-selection-trigger" data-selection-open>
16
16
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true">
17
17
  <path d="M1.75 1h12.5A1.75 1.75 0 0 1 16 2.75v8.5A1.75 1.75 0 0 1 14.25 13H8.06l-3.5 2.63A.75.75 0 0 1 3.36 15v-2H1.75A1.75 1.75 0 0 1 0 11.25v-8.5A1.75 1.75 0 0 1 1.75 1Z"/>
18
18
  </svg>
19
- <span>${v(e.triggerLabel??`Ask`)}</span>
19
+ <span>${b(e.triggerLabel??`Ask`)}</span>
20
20
  </button>
21
- <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${on}" aria-describedby="pr-helper-selection-tip">
21
+ <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${rn}" aria-describedby="pr-helper-selection-tip">
22
22
  <svg class="pr-helper-selection-copy-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true">
23
23
  <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/>
24
24
  <path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/>
@@ -27,145 +27,145 @@ import{$ as e,A as t,B as n,G as r,H as i,J as a,K as o,M as s,N as c,Q as l,U a
27
27
  <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L1.22 8.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"/>
28
28
  </svg>
29
29
  </button>
30
- <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${on}</span>
30
+ <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${rn}</span>
31
31
  </div>
32
32
  <div class="pr-helper-selection-menu">${t}</div>
33
- `}function pn(e){return`<div class="pr-helper-selection-menu">
34
- ${dn(e.actions)}
35
- <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${sn}</button>
36
- </div>`}function mn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-nn,a=i>=rn?i:Math.min(t.bottom+nn,window.innerHeight-r-rn),o=Math.max(rn,Math.min(t.left,window.innerWidth-n-rn));e.style.top=`${Math.max(rn,a)}px`,e.style.left=`${o}px`}function hn(){gn&&=(window.clearTimeout(gn),0),b?.popover.remove(),b=null}var gn=0;function _n(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(tn),t&&(t.textContent=cn),n&&(n.textContent=cn),gn&&window.clearTimeout(gn),gn=window.setTimeout(()=>vn(e),an)}function vn(e){gn&&=(window.clearTimeout(gn),0),e.classList.remove(tn);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=on);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=sn)}async function yn(e,t){try{await navigator.clipboard.writeText(t)}catch(e){console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,e);let t=!1;try{t=document.execCommand(`copy`)}catch(e){console.warn(`PR Helper: clipboard fallback failed`,e)}if(!t)return}_n(e)}function bn(e,t){let n=window.getSelection();if(!n||n.isCollapsed||n.rangeCount===0)return null;let r=n.toString().trim();if(!r)return null;let i=n.getRangeAt(0);if(!e.contains(i.commonAncestorContainer))return null;if(t.onlyWithin||t.ignoreWithin){let e=i.commonAncestorContainer,n=e instanceof HTMLElement?e:e.parentElement;if(t.onlyWithin&&!n?.closest(t.onlyWithin)||t.ignoreWithin&&n?.closest(t.ignoreWithin))return null}let a=i.getBoundingClientRect();return a.width===0&&a.height===0?null:{text:r,rect:a}}function xn(e,t){let n={},r=()=>{let r=bn(e,t);if(!r){(!b||b.owner===n)&&hn();return}if(b&&b.owner!==n&&hn(),b)b.popover.classList.remove(en),vn(b.popover),b.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${$t} ${ln}`:$t,i.innerHTML=fn(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){b?.text&&yn(i,b.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(en);let n=bn(e,t);mn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!b)return;let o=b.text;hn(),t.onChoose(a,o)}),document.body.appendChild(i),b={popover:i,text:r.text,owner:n}}mn(b.popover,r.rect)},i=e=>{b&&e.target instanceof Node&&b.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!b)return;let e=window.getSelection();(!e||e.isCollapsed)&&hn()},s=e=>{e.key===`Escape`&&hn()},c=()=>hn();return document.addEventListener(`mouseup`,i,!0),document.addEventListener(`keyup`,a,!0),e.addEventListener(`scroll`,c,!0),document.addEventListener(`selectionchange`,o),document.addEventListener(`keydown`,s),window.addEventListener(`scroll`,c,!0),()=>{document.removeEventListener(`mouseup`,i,!0),document.removeEventListener(`keyup`,a,!0),e.removeEventListener(`scroll`,c,!0),document.removeEventListener(`selectionchange`,o),document.removeEventListener(`keydown`,s),window.removeEventListener(`scroll`,c,!0),hn()}}var Sn=[{id:`explain-detail`,label:`Explain (technical)`,instruction:`Explain this, keeping the technical detail.`},{id:`explain`,label:`Explain (simple)`,instruction:`Explain this in simpler terms.`},{id:`is-problem`,label:`Is this actually a problem?`,instruction:`Is this actually a problem? Be specific about when it would and would not matter.`},{id:`why-matters`,label:`Why does this matter?`,instruction:`Why does this matter? Say who or what it affects, and when.`},{id:`better-implementation`,label:`Suggest a better implementation`,instruction:`Suggest a better implementation for this.`},{id:`author-question`,label:`Generate a question for the author`,instruction:`Generate a question I could ask the author about this.`},{id:`custom`,label:`Ask a question`}];function Cn(e){return![...Sn,...wn].find(t=>t.id===e)?.instruction}var wn=[{id:`add-to-chat`,label:`Add to chat`}],Tn=800;function En(e,t={}){let n=t.maxChars??Tn,r=e.replace(/\r\n/g,`
33
+ `}function dn(e){return`<div class="pr-helper-selection-menu">
34
+ ${ln(e.actions)}
35
+ <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${an}</button>
36
+ </div>`}function fn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-en,a=i>=tn?i:Math.min(t.bottom+en,window.innerHeight-r-tn),o=Math.max(tn,Math.min(t.left,window.innerWidth-n-tn));e.style.top=`${Math.max(tn,a)}px`,e.style.left=`${o}px`}function pn(){mn&&=(window.clearTimeout(mn),0),S?.popover.remove(),S=null}var mn=0;function hn(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add($t),t&&(t.textContent=on),n&&(n.textContent=on),mn&&window.clearTimeout(mn),mn=window.setTimeout(()=>gn(e),nn)}function gn(e){mn&&=(window.clearTimeout(mn),0),e.classList.remove($t);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=rn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=an)}async function _n(e,t){try{await navigator.clipboard.writeText(t)}catch(e){console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,e);let t=!1;try{t=document.execCommand(`copy`)}catch(e){console.warn(`PR Helper: clipboard fallback failed`,e)}if(!t)return}hn(e)}function vn(e,t){let n=window.getSelection();if(!n||n.isCollapsed||n.rangeCount===0)return null;let r=n.toString().trim();if(!r)return null;let i=n.getRangeAt(0);if(!e.contains(i.commonAncestorContainer))return null;if(t.onlyWithin||t.ignoreWithin){let e=i.commonAncestorContainer,n=e instanceof HTMLElement?e:e.parentElement;if(t.onlyWithin&&!n?.closest(t.onlyWithin)||t.ignoreWithin&&n?.closest(t.ignoreWithin))return null}let a=i.getBoundingClientRect();return a.width===0&&a.height===0?null:{text:r,rect:a}}function yn(e,t){let n={},r=()=>{let r=vn(e,t);if(!r){(!S||S.owner===n)&&pn();return}if(S&&S.owner!==n&&pn(),S)S.popover.classList.remove(Qt),gn(S.popover),S.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Zt} ${sn}`:Zt,i.innerHTML=un(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){S?.text&&_n(i,S.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(Qt);let n=vn(e,t);fn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!S)return;let o=S.text;pn(),t.onChoose(a,o)}),document.body.appendChild(i),S={popover:i,text:r.text,owner:n}}fn(S.popover,r.rect)},i=e=>{S&&e.target instanceof Node&&S.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!S)return;let e=window.getSelection();(!e||e.isCollapsed)&&pn()},s=e=>{e.key===`Escape`&&pn()},c=()=>pn();return document.addEventListener(`mouseup`,i,!0),document.addEventListener(`keyup`,a,!0),e.addEventListener(`scroll`,c,!0),document.addEventListener(`selectionchange`,o),document.addEventListener(`keydown`,s),window.addEventListener(`scroll`,c,!0),()=>{document.removeEventListener(`mouseup`,i,!0),document.removeEventListener(`keyup`,a,!0),e.removeEventListener(`scroll`,c,!0),document.removeEventListener(`selectionchange`,o),document.removeEventListener(`keydown`,s),window.removeEventListener(`scroll`,c,!0),pn()}}var bn=[{id:`explain-detail`,label:`Explain (technical)`,instruction:`Explain this, keeping the technical detail.`},{id:`explain`,label:`Explain (simple)`,instruction:`Explain this in simpler terms.`},{id:`is-problem`,label:`Is this actually a problem?`,instruction:`Is this actually a problem? Be specific about when it would and would not matter.`},{id:`why-matters`,label:`Why does this matter?`,instruction:`Why does this matter? Say who or what it affects, and when.`},{id:`better-implementation`,label:`Suggest a better implementation`,instruction:`Suggest a better implementation for this.`},{id:`author-question`,label:`Generate a question for the author`,instruction:`Generate a question I could ask the author about this.`},{id:`custom`,label:`Ask a question`}];function xn(e){return![...bn,...Sn].find(t=>t.id===e)?.instruction}var Sn=[{id:`add-to-chat`,label:`Add to chat`}],Cn=800;function wn(e,t={}){let n=t.maxChars??Cn,r=e.replace(/\r\n/g,`
37
37
  `).split(`
38
38
  `).map(e=>e.replace(/\s+$/,``));for(;r.length&&!r[0].trim();)r.shift();for(;r.length&&!r[r.length-1].trim();)r.pop();let i=r.filter(e=>e.trim()).map(e=>e.match(/^[ \t]*/)[0].length),a=i.length?Math.min(...i):0,o=r.map(e=>e.slice(a)).join(`
39
39
  `).replace(/\n{3,}/g,`
40
40
 
41
41
  `);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
42
42
  `).map(e=>`> ${e}`.trimEnd()).join(`
43
- `):``}function Dn(e,t,n={}){let r=En(e,n);if(!r)return null;let i=[...Sn,...wn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function On(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function x(e,t=``){return typeof e==`string`?e:t}var kn=`Dismissed by you — you decided this finding needs no action. It stops counting towards what is left, and stays here so the decision is visible rather than lost.`;function An(e){return e===0?``:`<span class="pr-helper-closed-findings-waiting" data-closed-findings-waiting> ${e===1?`1 suggestion waiting`:`${e} suggestions waiting`}</span>`}var jn=[`explain-detail`,`explain`];function Mn(e){return jn.includes(e)}function Nn(e){return e.action??`explain`}var Pn=`Ask more →`,Fn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function In(e){return Fn[Nn(e)]}function Ln(e,t={}){let n=Ye(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Pn}</button>`:``,i=r&&n.endsWith(`</p>`)?`${n.slice(0,-4)} ${r}</p>`:n+r;return`<details class="pr-helper-simple-explanation" data-simple-explanation${Number.isFinite(e.writtenAt)?` data-explanation-written-at="${e.writtenAt}"`:``}${t.open?` open`:``}>
44
- <summary class="pr-helper-simple-explanation-summary">${In(e)}</summary>
43
+ `):``}function Tn(e,t,n={}){let r=wn(e,n);if(!r)return null;let i=[...bn,...Sn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function En(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function C(e,t=``){return typeof e==`string`?e:t}var Dn=`Dismissed by you — you decided this finding needs no action. It stops counting towards what is left, and stays here so the decision is visible rather than lost.`;function On(e){return e===0?``:`<span class="pr-helper-closed-findings-waiting" data-closed-findings-waiting> ${e===1?`1 suggestion waiting`:`${e} suggestions waiting`}</span>`}var kn=[`explain-detail`,`explain`];function An(e){return kn.includes(e)}function jn(e){return e.action??`explain`}var Mn=`Ask more →`,Nn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Pn(e){return Nn[jn(e)]}function Fn(e,t={}){let n=qe(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Mn}</button>`:``,i=r&&n.endsWith(`</p>`)?`${n.slice(0,-4)} ${r}</p>`:n+r;return`<details class="pr-helper-simple-explanation" data-simple-explanation${Number.isFinite(e.writtenAt)?` data-explanation-written-at="${e.writtenAt}"`:``}${t.open?` open`:``}>
44
+ <summary class="pr-helper-simple-explanation-summary">${Pn(e)}</summary>
45
45
  <div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
46
- </details>`}function Rn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function zn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Bn(e,t){return Mn(e)&&t?{explains:{...t,action:e}}:{}}function Vn(e){let t=Hn(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function Hn(e){let t=e.closest(`[data-finding-card]`),n=zn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Un(e,t){let n=e.querySelector(Rn(t.kind,t.id));if(!n)return;let r=Ln(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Wn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Wn(e,t){if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-desc`);let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n,i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function Gn(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Kn=/^pr-helper-severity-(critical|major|minor|nit)$/;function qn(e,t){let n=e.querySelector(Rn(t.kind,t.id));if(!n)return null;if(t.kind===`issue`){for(let e of[...n.classList])Kn.test(e)&&n.classList.remove(e);t.cardClass&&n.classList.add(t.cardClass)}return n.querySelector(`[data-grade-control]`)?.replaceWith(Yn(e,t.grade)),n.querySelector(`[data-assessment-region]`)?.replaceWith(Yn(e,t.region)),n.querySelector(`[${yt}]`)?.setAttribute(yt,t.copy),Jn(e),n}function Jn(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=An(r);i&&n.append(Yn(e,i))}}function Yn(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function Xn(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var Zn=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function Qn(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return Xn(t,Zn),!1}if(a===null)return!1;let o=a.body?.card?qn(e,a.body.card):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(Xn(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function $n(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=Hn(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),Qn(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function er(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await Qn(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function tr(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){$n(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&er(i,t)})}function nr(e){let t=On(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${En(t,{maxChars:1/0})}\n\n${En(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var rr=`saved:`,ir=`Your prompts`;function ar(e){return`${rr}${e}`}function or(e){return e.startsWith(`saved:`)?e.slice(6):null}var sr=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],cr=`#theme-`,lr=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],ur=`&focus=`;function dr(e){return`#${e}`}function fr(e){return`${cr}${encodeURIComponent(e)}`}function pr(e){let t=e.kind===`view`?dr(e.view):fr(e.sectionId);return e.focus?`${t}${ur}${e.focus}`:t}var mr=[`architecture`,`map`,`diagram`];function hr(e,t){return mr.includes(e)&&mr.includes(t??``)?e:void 0}function gr(e,t){let n=xr(e),r=n?.kind===`view`&&n.view===t?n.focus:hr(t,n?.focus);return pr({kind:`view`,view:t,...r?{focus:r}:{}})}function _r(e){let{focus:t,...n}=e;return n}function vr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function yr(e){return lr.includes(e)}function br(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&yr(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&sr.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function xr(e){let t=e.indexOf(ur);if(t===-1)return Sr(e);let n=Sr(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return yr(r)?{...n,focus:r}:n}function Sr(e){if(e.startsWith(cr)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return sr.includes(t)?{kind:`view`,view:t}:null}var Cr=`pushedFocus`;function wr(e){let{[Cr]:t,...n}=e;return n}function Tr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Er(e,t,n){if(e.focus===t)return;let r={..._r(wr(e)),focus:t};e.focus&&n.history.state?.[Cr]?n.history.replaceState({...r,[Cr]:!0},``,pr(r)):n.history.pushState({...r,[Cr]:!0},``,pr(r)),n.apply(r)}function Dr(e,t){if(!e.focus)return;if(t.history.state?.[Cr]){t.history.back();return}let n=_r(wr(e));t.history.replaceState(n,``,pr(n)),t.apply(n)}function Or(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&oe(r)&&r.value!==``)}function kr(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}var Ar=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function jr(e){return Ar.includes(e)}function Mr(e){if(!e||typeof e!=`object`)return;let t={};for(let n of Ar){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function Nr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=Mr(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function Pr(e){return e?e===`buddy`?`buddy`:`document`:null}function Fr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return lr.includes(i)&&n(i)?i:null}function Ir(e){if(!e)return{};try{return Nr(JSON.parse(e))}catch{return{}}}function Lr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Pr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!jr(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Rr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=or(e);if(a===null)return Dn(t,e,i);let o=r(a);if(!o)return null;let s=En(t,i);return s?`${s}\n\n${o}`:null}function zr(e,t,n){if(n.busy?.())return null;let r=Rr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=Cn(e)||or(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Br(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Vr=`Run review again`;function Hr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function Ur(e){let t=e.dataset.questionAnswered;t&&Hr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Wr=`pr-helper-author-context-preview`,Gr=`View full PR description`,Kr=`Show less`;function qr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Wr);if(!n)return;let i=n.closest(`#${Zr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Jr(n);if(!o){let e=-Yr(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Kr:Gr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Xr(n,s,Yr(n,s)+e);return}i&&Yr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Jr(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function Yr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Xr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Zr=`pr-helper-author-context`;function Qr(e){let t=e.ownerDocument.getElementById(Zr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&qr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function $r(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function ei(e,t,n=`resolved`){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} issues ${n}</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} still open</span>`}function ti(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}return t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function ni(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">✓</span><span class="pr-helper-questions-progress-count">All ${e} questions answered</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} unanswered</span>`}function ri(e){let t=[...document.querySelectorAll(`[data-guide-detail]`)],n=t.find(t=>t.dataset.guideDetail===e);if(!n)return null;for(let e of t)e.hidden=e!==n;return n}function ii(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function ai(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function oi(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function si(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var ci=50;function li(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function S(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function ui(e){if(!e||typeof e!=`object`)return;let t=e,n=S(t.top);return{cited:S(t.cited),centre:S(t.centre),expand:S(t.expand,ci),position:S(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function di(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function fi(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?di(n):{top:null,offset:0};return{cited:S(e.dataset.cited),centre:S(e.dataset.centre),expand:S(e.dataset.expand,ci),position:S(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function pi(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function mi(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function hi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function gi(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function _i(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=li(e);return{host:gi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:fi(t)}:{}}})}function vi(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function yi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&gi(n)===t.host)return n;return null}function bi(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function xi(e){let{doc:t,main:n,rail:r,log:i,panes:o}=e,s={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))s[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let c=o?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:c===`open`||c===`closed`?c:null,log:i?.scrollTop??0,folds:s,panels:_i(t),focus:a(t.activeElement,t.body)}}async function Si(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,s=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=s[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?n.setAsk(t.ask===`open`):t.ask===null&&n.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(bi).map(e=>({...e,state:ui(e.state)}));for(let t of _i(r))if(!e.some(e=>vi(e,t))){let e=yi(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=yi(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=p(t,`main`);i&&c!==null&&(i.scrollTop=c);let u=p(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=p(t,`log`);return o&&d!==null&&(o.scrollTop=d),l(r,t.focus),!0}var Ci=`prb-ask-draft:`,wi=`prb-ask-staged:`,Ti=300;function Ei(e){return`${Ci}${e}`}function Di(e){return`${wi}${e}`}function Oi(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function ki(e,t){let{storage:n,win:r}=t,i=Ei(t.path),a=Di(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Oi(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Ti)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function Ai(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var ji=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Mi(e){return`<details class="prb-update-alt">
46
+ </details>`}function In(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Ln(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Rn(e,t){return An(e)&&t?{explains:{...t,action:e}}:{}}function zn(e){let t=Bn(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function Bn(e){let t=e.closest(`[data-finding-card]`),n=Ln(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Vn(e,t){let n=e.querySelector(In(t.kind,t.id));if(!n)return;let r=Fn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Hn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Hn(e,t){if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-desc`);let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n,i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function Un(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Wn=/^pr-helper-severity-(critical|major|minor|nit)$/;function Gn(e,t){let n=e.querySelector(In(t.kind,t.id));if(!n)return null;if(t.kind===`issue`){for(let e of[...n.classList])Wn.test(e)&&n.classList.remove(e);t.cardClass&&n.classList.add(t.cardClass)}return n.querySelector(`[data-grade-control]`)?.replaceWith(qn(e,t.grade)),n.querySelector(`[data-assessment-region]`)?.replaceWith(qn(e,t.region)),n.querySelector(`[${_t}]`)?.setAttribute(_t,t.copy),Kn(e),n}function Kn(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=On(r);i&&n.append(qn(e,i))}}function qn(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function Jn(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var Yn=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function Xn(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return Jn(t,Yn),!1}if(a===null)return!1;let o=a.body?.card?Gn(e,a.body.card):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(Jn(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function Zn(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=Bn(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),Xn(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function Qn(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await Xn(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function $n(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){Zn(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&Qn(i,t)})}function er(e){let t=En(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${wn(t,{maxChars:1/0})}\n\n${wn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var tr=`saved:`,nr=`Your prompts`;function rr(e){return`${tr}${e}`}function ir(e){return e.startsWith(`saved:`)?e.slice(6):null}var ar=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],or=`#theme-`,sr=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],cr=`&focus=`;function lr(e){return`#${e}`}function ur(e){return`${or}${encodeURIComponent(e)}`}function w(e){let t=e.kind===`view`?lr(e.view):ur(e.sectionId);return e.focus?`${t}${cr}${e.focus}`:t}var dr=[`architecture`,`map`,`diagram`];function fr(e,t){return dr.includes(e)&&dr.includes(t??``)?e:void 0}function pr(e,t){let n=vr(e),r=n?.kind===`view`&&n.view===t?n.focus:fr(t,n?.focus);return w({kind:`view`,view:t,...r?{focus:r}:{}})}function mr(e){let{focus:t,...n}=e;return n}function hr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function gr(e){return sr.includes(e)}function _r(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&gr(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&ar.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function vr(e){let t=e.indexOf(cr);if(t===-1)return yr(e);let n=yr(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return gr(r)?{...n,focus:r}:n}function yr(e){if(e.startsWith(or)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ar.includes(t)?{kind:`view`,view:t}:null}var br=`pushedFocus`;function xr(e){let{[br]:t,...n}=e;return n}function Sr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Cr(e,t,n){if(e.focus===t)return;let r={...mr(xr(e)),focus:t};e.focus&&n.history.state?.[br]?n.history.replaceState({...r,[br]:!0},``,w(r)):n.history.pushState({...r,[br]:!0},``,w(r)),n.apply(r)}function wr(e,t){if(!e.focus)return;if(t.history.state?.[br]){t.history.back();return}let n=mr(xr(e));t.history.replaceState(n,``,w(n)),t.apply(n)}function Tr(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&d(r)&&r.value!==``)}function Er(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}var Dr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function Or(e){return Dr.includes(e)}function kr(e){if(!e||typeof e!=`object`)return;let t={};for(let n of Dr){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function Ar(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=kr(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function jr(e){return e?e===`buddy`?`buddy`:`document`:null}function Mr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return sr.includes(i)&&n(i)?i:null}function Nr(e){if(!e)return{};try{return Ar(JSON.parse(e))}catch{return{}}}function Pr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=jr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!Or(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Fr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ir(e);if(a===null)return Tn(t,e,i);let o=r(a);if(!o)return null;let s=wn(t,i);return s?`${s}\n\n${o}`:null}function Ir(e,t,n){if(n.busy?.())return null;let r=Fr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=xn(e)||ir(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Lr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Rr=`Run review again`;function zr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function Br(e){let t=e.dataset.questionAnswered;t&&zr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Vr=`pr-helper-author-context-preview`,Hr=`View full PR description`,Ur=`Show less`;function Wr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Vr);if(!n)return;let i=n.closest(`#${Jr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Gr(n);if(!o){let e=-Kr(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Ur:Hr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&qr(n,s,Kr(n,s)+e);return}i&&Kr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Gr(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function Kr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function qr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Jr=`pr-helper-author-context`;function Yr(e){let t=e.ownerDocument.getElementById(Jr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Wr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Xr(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Zr(e,t,n=`resolved`){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} issues ${n}</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} still open</span>`}function Qr(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}return t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function $r(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">✓</span><span class="pr-helper-questions-progress-count">All ${e} questions answered</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} unanswered</span>`}function ei(e){let t=[...document.querySelectorAll(`[data-guide-detail]`)],n=t.find(t=>t.dataset.guideDetail===e);if(!n)return null;for(let e of t)e.hidden=e!==n;return n}function ti(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function ni(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function ri(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function ii(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var ai=50;function oi(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function T(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function si(e){if(!e||typeof e!=`object`)return;let t=e,n=T(t.top);return{cited:T(t.cited),centre:T(t.centre),expand:T(t.expand,ai),position:T(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function ci(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function li(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?ci(n):{top:null,offset:0};return{cited:T(e.dataset.cited),centre:T(e.dataset.centre),expand:T(e.dataset.expand,ai),position:T(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function ui(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function di(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function fi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function pi(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function mi(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=oi(e);return{host:pi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:li(t)}:{}}})}function hi(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function gi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&pi(n)===t.host)return n;return null}function _i(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function vi(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:mi(t),...te(t)}}async function yi(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,s=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=s[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?n.setAsk(t.ask===`open`):t.ask===null&&n.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(_i).map(e=>({...e,state:si(e.state)}));for(let t of mi(r))if(!e.some(e=>hi(e,t))){let e=gi(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=gi(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=_(t,`main`);i&&c!==null&&(i.scrollTop=c);let u=_(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=_(t,`log`);return o&&d!==null&&(o.scrollTop=d),l(r,t.focus,t.focusVisible),!0}var bi=`prb-ask-draft:`,xi=`prb-ask-staged:`,Si=300;function Ci(e){return`${bi}${e}`}function wi(e){return`${xi}${e}`}function Ti(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function Ei(e,t){let{storage:n,win:r}=t,i=Ci(t.path),a=wi(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Ti(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Si)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function Di(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Oi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function ki(e){return`<details class="prb-update-alt">
47
47
  <summary>Start a new review</summary>
48
- <span>A brand new review, with its own findings and its own path through the change. Run <code>${v(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${v(e)}">Copy</button></span>
49
- </details>`}var Ni=`prreviewbuddy review --fresh`;function Pi(e,t){return e?e.code.state===`fixed`?{label:`Freshness: Fixed`,state:`fixed`}:t?{label:`PR updated`,state:`changed`}:e.code.state===`changed`?{label:e.code.rewritten?`Code rewritten`:`Code changed`,state:`changed`}:e.code.state===`current`?{label:`Review up to date`,state:`current`}:{label:`Freshness unknown`,state:`unknown`}:t?{label:`PR updated`,state:`changed`}:{label:`Check for updates`,state:`unknown`}}function Fi(e,t){if(!t.actions)return!1;let n=e??(t.remote?Hi(t.remote):null);if(!n)return!1;let r=n.code.state===`fixed`?null:t.remote??null;return n.code.state===`changed`||r!==null||n.code.reason===`missing-commit`}function Ii(e,t={}){let n=e??(t.remote?Hi(t.remote):null);if(!n)return``;let r=n.code.state===`fixed`?null:t.remote??null,i=n.code.state===`changed`||r!==null,a=n.code.reason===`missing-commit`,o=t.availability?.state===`missing`,s=r?.sha??n.code.latestSha,c=t.dismissedSha!==void 0&&t.dismissedSha===s;if(!t.open&&!o&&(!(i||a)||c))return``;let l=r?Ui(n.code,r):Vi(n.code,t.availability??null),u=e?[...l.facts,`checked ${v(fe(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
48
+ <span>A brand new review, with its own findings and its own path through the change. Run <code>${b(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${b(e)}">Copy</button></span>
49
+ </details>`}var Ai=`prreviewbuddy review --fresh`;function ji(e,t){return e?e.code.state===`fixed`?{label:`Freshness: Fixed`,state:`fixed`}:t?{label:`PR updated`,state:`changed`}:e.code.state===`changed`?{label:e.code.rewritten?`Code rewritten`:`Code changed`,state:`changed`}:e.code.state===`current`?{label:`Review up to date`,state:`current`}:{label:`Freshness unknown`,state:`unknown`}:t?{label:`PR updated`,state:`changed`}:{label:`Check for updates`,state:`unknown`}}function Mi(e,t){if(!t.actions)return!1;let n=e??(t.remote?zi(t.remote):null);if(!n)return!1;let r=n.code.state===`fixed`?null:t.remote??null;return n.code.state===`changed`||r!==null||n.code.reason===`missing-commit`}function Ni(e,t={}){let n=e??(t.remote?zi(t.remote):null);if(!n)return``;let r=n.code.state===`fixed`?null:t.remote??null,i=n.code.state===`changed`||r!==null,a=n.code.reason===`missing-commit`,o=t.availability?.state===`missing`,s=r?.sha??n.code.latestSha,c=t.dismissedSha!==void 0&&t.dismissedSha===s;if(!t.open&&!o&&(!(i||a)||c))return``;let l=r?Bi(n.code,r):Ri(n.code,t.availability??null),u=e?[...l.facts,`checked ${b(ue(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
50
50
  <div class="prb-fresh-head">
51
51
  <span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
52
- <strong class="prb-fresh-title">${v(l.title)}</strong>
52
+ <strong class="prb-fresh-title">${b(l.title)}</strong>
53
53
  <span class="prb-fresh-facts">${u.join(` &middot; `)}</span>
54
54
  </div>
55
55
  ${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
56
- ${Li(n,t,i||a,Fi(e,t))}
57
- </div>`}function Li(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
58
- ${r?Ai():``}
59
- ${r?Mi(Ni):``}
56
+ ${Pi(n,t,i||a,Mi(e,t))}
57
+ </div>`}function Pi(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
58
+ ${r?Di():``}
59
+ ${r?ki(Ai):``}
60
60
  ${i}
61
- ${Ri(e,t,n,r===!0)}
62
- </div>`}function Ri(e,t,n,r){let i=[r?v(ji):``,t.remote?Wi(e.code):Gi(e.code,e.checkout.reason!==`no-pull-request`),Ki(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${v(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
61
+ ${Fi(e,t,n,r===!0)}
62
+ </div>`}function Fi(e,t,n,r){let i=[r?b(Oi):``,t.remote?Vi(e.code):Hi(e.code,e.checkout.reason!==`no-pull-request`),Ui(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${b(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
63
63
  <summary>More details</summary>
64
64
  ${a}
65
- </details>`:a}function zi(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Bi(e){return e?`<code title="${v(e)}">${v(e.slice(0,7))}</code>`:``}function C(e){return e?[`reviewed ${Bi(e)}`]:[]}function Vi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:C(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:C(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...C(e.reviewedSha),...zi(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...C(e.reviewedSha),...t,...zi(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:C(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:C(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:C(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function Hi(e){return{checkedAt:0,code:{state:`unknown`,reviewedSha:e.reviewedSha,latestSha:null,comparison:null,newCommits:null,changedFiles:null,rewritten:!1,reason:null},checkout:{state:`unknown`,relation:`unknown`,prHeadSha:null,presentLocally:!1,reason:null},conversation:{attached:!1}}}function Ui(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...C(e.reviewedSha),...i,...n?zi(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${v(fe(t.observedAt))}`],consequence:n?.rewritten?`The branch was rebased or amended, so this review describes older code.`:`New commits landed, so the lines these findings cite may have moved.`}}function Wi(e){return`This review is based on ${Bi(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Gi(e,t){if(!e.comparison)return``;let n=`<code>${v(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Bi(e.reviewedSha)}.`:`This review is based on ${Bi(e.reviewedSha)}, the latest commit on ${n}.`:e.comparison.remote?`This review is currently based on ${n}. <strong>Check for updates</strong> compares against the latest version you already have locally. <strong>Update review</strong> fetches the newest version first.`:`This review is currently based on ${n}, the branch it is of.`}function Ki(e,t){if(!e.conversation.attached)return``;let n=v(fe(e.conversation.importedAt));return t?`<button type="button" class="prb-fresh-quiet" data-pr-recheck>Re-check the conversation</button> to refresh comments and resolved threads without re-running the code review. Last checked ${n}.`:`The PR conversation was last checked ${n}.`}function qi(e,t){let n=$r(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Ji(e){let t=e.gist||e.whyNotJustified,n=e.locations.find(e=>e.primary)??e.locations[0];return[`### ${e.title.trim()}`,t?`**Why it matters:** ${t.trim()}`:``,`**Simpler approach:** ${e.simplerDirection.trim()}`,n?`**Start here:** \`${n.line?`${n.path}:${n.line}`:n.path}\``:``,e.draftComment?.trim()?`**Draft comment:**\n\n${Xi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
65
+ </details>`:a}function Ii(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Li(e){return e?`<code title="${b(e)}">${b(e.slice(0,7))}</code>`:``}function E(e){return e?[`reviewed ${Li(e)}`]:[]}function Ri(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:E(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:E(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...E(e.reviewedSha),...Ii(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...E(e.reviewedSha),...t,...Ii(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:E(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:E(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:E(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function zi(e){return{checkedAt:0,code:{state:`unknown`,reviewedSha:e.reviewedSha,latestSha:null,comparison:null,newCommits:null,changedFiles:null,rewritten:!1,reason:null},checkout:{state:`unknown`,relation:`unknown`,prHeadSha:null,presentLocally:!1,reason:null},conversation:{attached:!1}}}function Bi(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...E(e.reviewedSha),...i,...n?Ii(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${b(ue(t.observedAt))}`],consequence:n?.rewritten?`The branch was rebased or amended, so this review describes older code.`:`New commits landed, so the lines these findings cite may have moved.`}}function Vi(e){return`This review is based on ${Li(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Hi(e,t){if(!e.comparison)return``;let n=`<code>${b(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Li(e.reviewedSha)}.`:`This review is based on ${Li(e.reviewedSha)}, the latest commit on ${n}.`:e.comparison.remote?`This review is currently based on ${n}. <strong>Check for updates</strong> compares against the latest version you already have locally. <strong>Update review</strong> fetches the newest version first.`:`This review is currently based on ${n}, the branch it is of.`}function Ui(e,t){if(!e.conversation.attached)return``;let n=b(ue(e.conversation.importedAt));return t?`<button type="button" class="prb-fresh-quiet" data-pr-recheck>Re-check the conversation</button> to refresh comments and resolved threads without re-running the code review. Last checked ${n}.`:`The PR conversation was last checked ${n}.`}function Wi(e,t){let n=Xr(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Gi(e){let t=e.gist||e.whyNotJustified,n=e.locations.find(e=>e.primary)??e.locations[0];return[`### ${e.title.trim()}`,t?`**Why it matters:** ${t.trim()}`:``,`**Simpler approach:** ${e.simplerDirection.trim()}`,n?`**Start here:** \`${n.line?`${n.path}:${n.line}`:n.path}\``:``,e.draftComment?.trim()?`**Draft comment:**\n\n${qi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
66
66
 
67
- `)}function Yi(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Ji)].join(`
67
+ `)}function Ki(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Gi)].join(`
68
68
 
69
- `)}function Xi(e){return e.split(`
69
+ `)}function qi(e){return e.split(`
70
70
  `).map(e=>e===``?`>`:`> ${e}`).join(`
71
- `)}function Zi(e){return e===`done`||e===`failed`}function Qi(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function $i(e,t=``){return`<div class="prb-doc-head">
72
- <h3 class="prb-doc-title">${v(e)}</h3>
71
+ `)}function Ji(e){return e===`done`||e===`failed`}function Yi(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Xi(e,t=``){return`<div class="prb-doc-head">
72
+ <h3 class="prb-doc-title">${b(e)}</h3>
73
73
  ${t}
74
- </div>`}var ea=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,ta=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function na(e,t){return`<svg class="${t}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`}function ra(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${v(t)}" aria-pressed="false" aria-label="${v(n)}" title="${v(n)}">${na(ea,`prb-focus-expand`)}${na(ta,`prb-focus-collapse`)}</button>`}ra(`kiss`,`KISS review`),$i(`Recommendations`,ra(`kissrecs`,`Recommendations`));var ia={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function aa(e,t){return t===`undecided`?`Open`:ia[e][t]}function oa(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} decided</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} undecided</span>`}function sa(e){return`Decided (${e})`}function ca(e,t,n=!1){return n?{enabled:!1,note:`Saving your decision. You can copy once it is saved.`}:t?{enabled:!1,note:`Run KISS again before handing these recommendations off.`}:e===0?{enabled:!1,note:`Choose Raise with author on the recommendations you want to hand off.`}:{enabled:!0,note:`${e===1?`1 recommendation`:`${e} recommendations`} to raise with the author.`}}function la(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
75
- <p><strong>This KISS review describes commit ${v(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
74
+ </div>`}var Zi=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,Qi=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function $i(e,t){return`<svg class="${t}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`}function ea(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${b(t)}" aria-pressed="false" aria-label="${b(n)}" title="${b(n)}">${$i(Zi,`prb-focus-expand`)}${$i(Qi,`prb-focus-collapse`)}</button>`}ea(`kiss`,`KISS review`),Xi(`Recommendations`,ea(`kissrecs`,`Recommendations`));var ta={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function na(e,t){return t===`undecided`?`Open`:ta[e][t]}function ra(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} decided</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} undecided</span>`}function ia(e){return`Decided (${e})`}function aa(e,t,n=!1){return n?{enabled:!1,note:`Saving your decision. You can copy once it is saved.`}:t?{enabled:!1,note:`Run KISS again before handing these recommendations off.`}:e===0?{enabled:!1,note:`Choose Raise with author on the recommendations you want to hand off.`}:{enabled:!0,note:`${e===1?`1 recommendation`:`${e} recommendations`} to raise with the author.`}}function oa(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
75
+ <p><strong>This KISS review describes commit ${b(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
76
76
  </div>`;let i=t.rewritten?`The branch has been rewritten since, so this report describes commits that are no longer on it.`:t.newCommits===null?`The branch has moved on since.`:`There ${t.newCommits===1?`has been 1 commit`:`have been ${t.newCommits} commits`} on the branch since.`;return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" role="status">
77
- <p><strong>This KISS review describes commit ${v(e.slice(0,7))}.</strong> ${v(i)}</p>
77
+ <p><strong>This KISS review describes commit ${b(e.slice(0,7))}.</strong> ${b(i)}</p>
78
78
  <p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below and your decisions about it are kept either way.</p>
79
- <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${v(t.latestSha)}">Not now</button>`:``}</p>
80
- </div>`}var ua=new WeakMap;function da(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function fa(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Sa(e);let i=e.contains(document.activeElement);pa(e,t),ba(e,!0),ha(n),i&&xa(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(ba(e,!1),a){ha(n);return}pa(e,r),ha(n),Ca(e,t,n)},a=(ua.get(e)??Promise.resolve()).then(i,i);return ua.set(e,a),a}function pa(e,t){e.dataset.decision=t;let n=ya(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=aa(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=ia[n][r.dataset.kissDecide];ma(e,t!==`undecided`)}function ma(e,t){let n=(e.closest(`[data-view="kissrecs"]`)??document).querySelector(t?`[data-kiss-decided-list]`:`[data-kiss-open-list]`);if(!n||e.parentElement===n)return;let r=Number(e.dataset.rank),i=[...n.querySelectorAll(`:scope > [data-kiss-rec]`)].find(e=>Number(e.dataset.rank)>r);n.insertBefore(e,i??null)}function ha(e,t=document){let n=[...t.querySelectorAll(`[data-kiss-rec]`)];if(n.length===0)return;let r=n.filter(e=>e.dataset.decision&&e.dataset.decision!==`undecided`).length,i=n.length-r,a=t.querySelector(`[data-kiss-progress]`);a&&(a.innerHTML=oa(n.length,i));let o=t.querySelector(`[data-kiss-decided]`);if(o){o.hidden=r===0,o.toggleAttribute(`data-nothing-open`,i===0);let e=o.querySelector(`[data-kiss-decided-summary]`);e&&(e.textContent=sa(r))}e.paintRail(n.length,i),ga(t)}function ga(e=document){let t=e.querySelector(`[data-kiss-handoff]`);if(!t)return;let n=new Set([...e.querySelectorAll(`[data-kiss-rec][data-decision="accepted"]`)].map(e=>e.dataset.kissRec)),r=va(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=ca(r.length,t.hasAttribute(`data-stale`),i),o=t.querySelector(`[data-kiss-handoff-copy]`);o&&(o.disabled=!a.enabled,o.setAttribute(`data-copy-source`,a.enabled?Yi(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function _a(e,t=document){for(let n of t.querySelectorAll(`[data-kiss-stale]`))n.hidden=!e;let n=t.querySelector(`[data-kiss-handoff]`);n&&(n.toggleAttribute(`data-stale`,e),ga(t))}function va(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ya(e){return e.dataset.audience===`author`?`author`:`reviewer`}function ba(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function xa(e){if(!e.closest(`[data-kiss-decided-list]`)){e.querySelector(`[data-kiss-decide][aria-pressed="true"], [data-kiss-decide]`)?.focus();return}let t=e.closest(`[data-view="kissrecs"]`)??document;(t.querySelector(`[data-kiss-open-list] > [data-kiss-rec] .prb-kiss-rec-title`)??t.querySelector(`[data-kiss-decided-summary]`))?.focus()}function Sa(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function Ca(e,t,n){let r=document.createElement(`p`);r.className=`prb-kiss-decision-error`,r.dataset.kissDecisionError=``,r.setAttribute(`role`,`alert`),r.append(`Couldn't save that decision. `);let i=document.createElement(`button`);i.type=`button`,i.className=`prb-kiss-decision-retry`,i.textContent=`Try again`,i.addEventListener(`click`,()=>void fa(e,t,n)),r.append(i),(e.querySelector(`[data-kiss-actions]`)??e).append(r);let a=e.closest(`[data-kiss-decided]`);a&&(a.open=!0),i.focus()}function wa(e,t=!1){return e!==`merged`&&e!==`closed`?``:`<span class="prb-card-pr-state" data-pr-state="${e}">${e===`merged`?`Merged`:t?`Closed`:`PR closed`}</span>`}function Ta(e,t){t.complete!==void 0&&Oa(e,t.complete),t.activity!==void 0&&Ea(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&ka(e,Da(e)):ka(e,t.lifecycle??void 0),t.queued!==void 0&&Aa(e,t.queued)}function Ea(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(delete n.dataset.activityAt,delete n.dataset.activityKind,delete n.dataset.activityMovedAt,t&&(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind,t.movedAt!==void 0&&(n.dataset.activityMovedAt=String(t.movedAt))))}function Da(e){let t=e.querySelector(`[data-review-menu]`);return r(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Oa(e,n){let r=n?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&(i.dataset.status=r,i.textContent=se(r));let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=n?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=t(e)}}function ka(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?ja(n):void 0,a=e.querySelector(`[data-page-lifecycle]`);if(a){let e=i(t,r);a.hidden=e===void 0,a.textContent=e?.text??``,a.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=n.dataset.lifecycleSet;n.hidden=!u(e,t,r),n.textContent=d(e,t,r)}}function Aa(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=c(t))}function ja(e){return n(e.dataset)}function Ma(e){return r(e)??null}function Na(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Ma(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=f(i);e&&(a.activity=e)}return a}function Pa(){let e=0,t=0;return{snapshot:()=>e,current:n=>t===0&&n===e,begin:()=>{e+=1,t+=1;let n=!1;return()=>{n||(n=!0,e+=1,--t)}}}}var Fa=`The workspace server did not answer. It may have stopped.`;function Ia(e){let t=()=>e.root.querySelector(`[data-review-menu]`),i=!1,a=async(t,n,r)=>{if(i)return{error:null,busy:!0};i=!0;let a=e.gate.begin();try{let i=await e.post(t,n),a=await i.json().catch(()=>null);return i.ok&&a?(Ta(e.root,r(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Fa}}finally{i=!1,a()}},o=e=>a(`/queue`,{action:e},e=>({lifecycle:Ma(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>a(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>a(`/lifecycle`,{state:e},e=>({lifecycle:Ma(e.lifecycle),queued:e.queued===!0})),setQueued:o,toggleQueued:()=>o(t()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await e.checkForUpdates()},deleteReview:async()=>{try{let t=await e.post(`/delete`);return t.ok?{error:null}:{error:(await t.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:Fa}}},offer:()=>{let a=t(),o=a?.hasAttribute(`data-can-write`)===!0,s=o&&a?.hasAttribute(`data-branch-actions`)===!0,c=a?r({state:a.dataset.lifecycleState,at:Number(a.dataset.lifecycleAt)}):void 0,l=a?n(a.dataset):void 0,d=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,f=!i;return{reviewed:f&&o&&!d,waiting:f&&s&&u(`waiting`,c,l),done:f&&s&&u(`done`,c,l),queue:f&&s,checkForUpdates:o&&a?.hasAttribute(`data-checkable`)===!0,delete:o}},busy:()=>i}}function La(e,t){return`${e} ${t}${e===1?``:`s`}`}function Ra(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?La(e,`issue`):``,questions:t?La(t,`question`):``}}function za(e,t){let n=Ra(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Ba(e){return e===0?``:`${e} chosen`}function Va(e){let t=(e,t)=>{let n=t.map(e=>e.trim()).filter(Boolean);return n.length===0?null:`## ${e}\n\n${n.map((e,t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
79
+ <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${b(t.latestSha)}">Not now</button>`:``}</p>
80
+ </div>`}var sa=new WeakMap;function ca(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function la(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{ya(e);let i=e.contains(document.activeElement);ua(e,t),_a(e,!0),fa(n),i&&va(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(_a(e,!1),a){fa(n);return}ua(e,r),fa(n),ba(e,t,n)},a=(sa.get(e)??Promise.resolve()).then(i,i);return sa.set(e,a),a}function ua(e,t){e.dataset.decision=t;let n=ga(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=na(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=ta[n][r.dataset.kissDecide];da(e,t!==`undecided`)}function da(e,t){let n=(e.closest(`[data-view="kissrecs"]`)??document).querySelector(t?`[data-kiss-decided-list]`:`[data-kiss-open-list]`);if(!n||e.parentElement===n)return;let r=Number(e.dataset.rank),i=[...n.querySelectorAll(`:scope > [data-kiss-rec]`)].find(e=>Number(e.dataset.rank)>r);n.insertBefore(e,i??null)}function fa(e,t=document){let n=[...t.querySelectorAll(`[data-kiss-rec]`)];if(n.length===0)return;let r=n.filter(e=>e.dataset.decision&&e.dataset.decision!==`undecided`).length,i=n.length-r,a=t.querySelector(`[data-kiss-progress]`);a&&(a.innerHTML=ra(n.length,i));let o=t.querySelector(`[data-kiss-decided]`);if(o){o.hidden=r===0,o.toggleAttribute(`data-nothing-open`,i===0);let e=o.querySelector(`[data-kiss-decided-summary]`);e&&(e.textContent=ia(r))}e.paintRail(n.length,i),pa(t)}function pa(e=document){let t=e.querySelector(`[data-kiss-handoff]`);if(!t)return;let n=new Set([...e.querySelectorAll(`[data-kiss-rec][data-decision="accepted"]`)].map(e=>e.dataset.kissRec)),r=ha(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=aa(r.length,t.hasAttribute(`data-stale`),i),o=t.querySelector(`[data-kiss-handoff-copy]`);o&&(o.disabled=!a.enabled,o.setAttribute(`data-copy-source`,a.enabled?Ki(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function ma(e,t=document){for(let n of t.querySelectorAll(`[data-kiss-stale]`))n.hidden=!e;let n=t.querySelector(`[data-kiss-handoff]`);n&&(n.toggleAttribute(`data-stale`,e),pa(t))}function ha(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ga(e){return e.dataset.audience===`author`?`author`:`reviewer`}function _a(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function va(e){if(!e.closest(`[data-kiss-decided-list]`)){e.querySelector(`[data-kiss-decide][aria-pressed="true"], [data-kiss-decide]`)?.focus();return}let t=e.closest(`[data-view="kissrecs"]`)??document;(t.querySelector(`[data-kiss-open-list] > [data-kiss-rec] .prb-kiss-rec-title`)??t.querySelector(`[data-kiss-decided-summary]`))?.focus()}function ya(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function ba(e,t,n){let r=document.createElement(`p`);r.className=`prb-kiss-decision-error`,r.dataset.kissDecisionError=``,r.setAttribute(`role`,`alert`),r.append(`Couldn't save that decision. `);let i=document.createElement(`button`);i.type=`button`,i.className=`prb-kiss-decision-retry`,i.textContent=`Try again`,i.addEventListener(`click`,()=>void la(e,t,n)),r.append(i),(e.querySelector(`[data-kiss-actions]`)??e).append(r);let a=e.closest(`[data-kiss-decided]`);a&&(a.open=!0),i.focus()}function xa(e,t=!1){return e!==`merged`&&e!==`closed`?``:`<span class="prb-card-pr-state" data-pr-state="${e}">${e===`merged`?`Merged`:t?`Closed`:`PR closed`}</span>`}function Sa(e,t){t.complete!==void 0&&Ta(e,t.complete),t.activity!==void 0&&Ca(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Ea(e,wa(e)):Ea(e,t.lifecycle??void 0),t.queued!==void 0&&Da(e,t.queued)}function Ca(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(delete n.dataset.activityAt,delete n.dataset.activityKind,delete n.dataset.activityMovedAt,t&&(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind,t.movedAt!==void 0&&(n.dataset.activityMovedAt=String(t.movedAt))))}function wa(e){let t=e.querySelector(`[data-review-menu]`);return v(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Ta(e,t){let r=t?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&(i.dataset.status=r,i.textContent=o(r));let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=t?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=n(e)}}function Ea(t,n){let i=t.querySelector(`[data-review-menu]`);i&&(n?(i.dataset.lifecycleState=n.state,i.dataset.lifecycleAt=String(n.at)):(delete i.dataset.lifecycleState,delete i.dataset.lifecycleAt));let a=i?Oa(i):void 0,o=t.querySelector(`[data-page-lifecycle]`);if(o){let e=r(n,a);o.hidden=e===void 0,o.textContent=e?.text??``,o.toggleAttribute(`data-changed`,e?.changed===!0)}for(let r of t.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let t=r.dataset.lifecycleSet;r.hidden=!e(t,n,a),r.textContent=s(t,n,a)}}function Da(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=i(t))}function Oa(e){return a(e.dataset)}function ka(e){return v(e)??null}function Aa(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:ka(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=f(i);e&&(a.activity=e)}return a}function ja(){let e=0,t=0;return{snapshot:()=>e,current:n=>t===0&&n===e,begin:()=>{e+=1,t+=1;let n=!1;return()=>{n||(n=!0,e+=1,--t)}}}}var Ma=`The workspace server did not answer. It may have stopped.`;function Na(t){let n=()=>t.root.querySelector(`[data-review-menu]`),r=!1,i=async(e,n,i)=>{if(r)return{error:null,busy:!0};r=!0;let a=t.gate.begin();try{let r=await t.post(e,n),a=await r.json().catch(()=>null);return r.ok&&a?(Sa(t.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Ma}}finally{r=!1,a()}},o=e=>i(`/queue`,{action:e},e=>({lifecycle:ka(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>i(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>i(`/lifecycle`,{state:e},e=>({lifecycle:ka(e.lifecycle),queued:e.queued===!0})),setQueued:o,toggleQueued:()=>o(n()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await t.checkForUpdates()},deleteReview:async()=>{try{let e=await t.post(`/delete`);return e.ok?{error:null}:{error:(await e.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:Ma}}},offer:()=>{let i=n(),o=i?.hasAttribute(`data-can-write`)===!0,s=o&&i?.hasAttribute(`data-branch-actions`)===!0,c=i?v({state:i.dataset.lifecycleState,at:Number(i.dataset.lifecycleAt)}):void 0,l=i?a(i.dataset):void 0,u=t.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,d=!r;return{reviewed:d&&o&&!u,waiting:d&&s&&e(`waiting`,c,l),done:d&&s&&e(`done`,c,l),queue:d&&s,checkForUpdates:o&&i?.hasAttribute(`data-checkable`)===!0,delete:o}},busy:()=>r}}function Pa(e,t){return`${e} ${t}${e===1?``:`s`}`}function Fa(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Pa(e,`issue`):``,questions:t?Pa(t,`question`):``}}function Ia(e,t){let n=Fa(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function La(e){return e===0?``:`${e} chosen`}function Ra(e){let t=(e,t)=>{let n=t.map(e=>e.trim()).filter(Boolean);return n.length===0?null:`## ${e}\n\n${n.map((e,t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
81
81
 
82
82
  `)}).join(`
83
83
 
84
84
  `)}`};return[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean).join(`
85
85
 
86
- `)}var Ha=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;Ha(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Ha(`<path d="M20 6 9 17l-5-5"/>`);function Ua(e){return Va({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Wa(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=Ga(t);return n?.basis!==r&&(n={text:Ua(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!qa(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function Ga(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify(t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1))}var Ka=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function qa(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Ka(t.issues)||!Ka(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var w=[`preview`,`markdown`],Ja={issue:`issues`,question:`questions`};function Ya({root:e,showView:t}){let n=Wa(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Ra(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=Ba(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(yt,t)}let s=()=>({issues:Xa(e,`issue`,n.ids(`issue`)),questions:Xa(e,`question`,n.ids(`question`))}),c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return Ua(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=za(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){Za(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(yt,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>$a(e,t)),a(),c}function Xa(e,t,n){return[...e.querySelectorAll(`[data-view="${Ja[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>({id:e,text:t.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``}))}function Za(e,t){for(let n of w){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return Qa(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Qa(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?Ye(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function $a(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=w.indexOf(n),i=t.key===`ArrowRight`?w[(r+1)%w.length]:t.key===`ArrowLeft`?w[(r+w.length-1)%w.length]:t.key===`Home`?w[0]:t.key===`End`?w[w.length-1]:null;i&&(t.preventDefault(),Za(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function eo(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function to(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!eo(t),run:()=>n()?.click()}}}function no(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function ro(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function io(e){let{doc:t}=e,n=pe({doc:t,item:`[data-finding-card]`,walk:()=>no(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>no(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>no(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!ro(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}var ao=`prb-rail-review`;function oo(e){return(e.getElementById(ao)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function so(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function co(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function lo(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function uo(e){return{title:`Choose a prompt`,mount(t,n){let r=t.ownerDocument,i=e.prompts(),a=r.createElement(`input`);a.type=`search`,a.className=`prb-palette-input`,a.placeholder=`Filter prompts`,a.setAttribute(`aria-label`,`Filter prompts`),a.spellcheck=!1;let o=r.createElement(`p`);o.className=`prb-palette-summary`,o.setAttribute(`aria-live`,`polite`);let s=r.createElement(`div`);s.className=`prb-palette-results`,s.setAttribute(`role`,`group`),s.setAttribute(`aria-label`,`Prompts`);let c=[],l=()=>[...s.querySelectorAll(`[data-prompt-choice]`)],u=()=>{let e=r.activeElement===a;for(let[t,n]of l().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},d=()=>{c=so(i,a.value),s.replaceChildren(...c.map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-prompt`,n.dataset.promptChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=co(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-prompt-text`;let s=r.createElement(`span`);s.className=`prb-palette-result-title`,s.textContent=e.name;let c=r.createElement(`span`);return c.className=`prb-palette-prompt-said`,c.textContent=e.prompt,o.append(s,c),n.append(i,o),n})),o.textContent=i.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:c.length===0?`No prompts match.`:c.length===i.length?`${i.length} ${i.length===1?`prompt`:`prompts`}`:`${c.length} of ${i.length} prompts`,u()},f=t=>{!t||!c.some(e=>e.id===t)||(n(),e.choose(t))},ee=e=>{a.value=e===`Backspace`?a.value.slice(0,-1):a.value+e,a.focus(),a.dispatchEvent(new Event(`input`,{bubbles:!0}))};a.addEventListener(`input`,d),a.addEventListener(`focus`,u),a.addEventListener(`blur`,u),s.addEventListener(`click`,e=>{f(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=l(),n=e.target===a,r=t.indexOf(e.target),i=lo(e.key);if(i!==null)return e.preventDefault(),f(t[i]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),f((n?t[0]:t[r])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?r<0?t[0]:t[r+1]:r<=0?a:t[r-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),ee(e.key))}),t.append(a,o,s),d(),a.focus()}}}ra(`progress`,`Review progress`);function fo(e,t=Date.now()){return`Running for ${po(t-e)}`}function po(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var mo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function ho(e){let t=new Map;for(let n of Object.keys(mo)){let r=mo[n],i=e.querySelector(`[${r}]`);i&&!Zi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function go(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Zi(t.phase):_o(t.phase,n)}function _o(e,t){return Zi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function vo(e,t,n){let r=[...e.querySelectorAll(`.prb-progress-step`)],i=r.findIndex(e=>e.dataset.phase===t);if(i===-1)return;r.forEach((e,t)=>{let n=t<i?`complete`:t===i?`active`:`pending`;e.dataset.state=n;let r=e.querySelector(`.prb-progress-label`),a=n===`complete`?e.dataset.labelDone:e.dataset.labelDoing;r&&a&&(r.textContent=a),t!==i&&e.querySelector(`[data-step-note]`)?.remove()});let a=r[i];if(!n||Qi(n,a.querySelector(`.prb-progress-label`)?.textContent??``))return;let o=a.querySelector(`[data-step-note]`);o||(o=document.createElement(`p`),o.className=`prb-progress-note`,o.setAttribute(`data-step-note`,``),a.appendChild(o)),o.textContent=n}function yo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=fo(e))}}function bo(e,t=1e3){let n=window.setInterval(()=>yo(e),t);return()=>window.clearInterval(n)}async function xo({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||Zi(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function So(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${v(e.scope)}" data-diagram-card="${v(e.scope)}">
86
+ `)}var za=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;za(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),za(`<path d="M20 6 9 17l-5-5"/>`);function Ba(e){return Ra({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Va(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=Ha(t);return n?.basis!==r&&(n={text:Ba(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!Wa(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function Ha(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify(t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1))}var Ua=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Wa(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Ua(t.issues)||!Ua(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var D=[`preview`,`markdown`],Ga={issue:`issues`,question:`questions`};function Ka({root:e,showView:t}){let n=Va(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Fa(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=La(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,t)}let s=()=>({issues:qa(e,`issue`,n.ids(`issue`)),questions:qa(e,`question`,n.ids(`question`))}),c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return Ba(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Ia(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){Ja(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>Xa(e,t)),a(),c}function qa(e,t,n){return[...e.querySelectorAll(`[data-view="${Ga[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>({id:e,text:t.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``}))}function Ja(e,t){for(let n of D){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return Ya(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Ya(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?qe(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function Xa(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=D.indexOf(n),i=t.key===`ArrowRight`?D[(r+1)%D.length]:t.key===`ArrowLeft`?D[(r+D.length-1)%D.length]:t.key===`Home`?D[0]:t.key===`End`?D[D.length-1]:null;i&&(t.preventDefault(),Ja(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Za(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function Qa(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!Za(t),run:()=>n()?.click()}}}function $a(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function eo(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function to(e){let{doc:t}=e,n=de({doc:t,item:`[data-finding-card]`,walk:()=>$a(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>$a(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>$a(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!eo(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}var no=`prb-rail-review`;function ro(e){return(e.getElementById(no)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function io(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function ao(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function oo(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function so(e){return{title:`Choose a prompt`,mount(t,n){let r=t.ownerDocument,i=e.prompts(),a=r.createElement(`input`);a.type=`search`,a.className=`prb-palette-input`,a.placeholder=`Filter prompts`,a.setAttribute(`aria-label`,`Filter prompts`),a.spellcheck=!1;let o=r.createElement(`p`);o.className=`prb-palette-summary`,o.setAttribute(`aria-live`,`polite`);let s=r.createElement(`div`);s.className=`prb-palette-results`,s.setAttribute(`role`,`group`),s.setAttribute(`aria-label`,`Prompts`);let c=[],l=()=>[...s.querySelectorAll(`[data-prompt-choice]`)],u=()=>{let e=r.activeElement===a;for(let[t,n]of l().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},d=()=>{c=io(i,a.value),s.replaceChildren(...c.map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-prompt`,n.dataset.promptChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=ao(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-prompt-text`;let s=r.createElement(`span`);s.className=`prb-palette-result-title`,s.textContent=e.name;let c=r.createElement(`span`);return c.className=`prb-palette-prompt-said`,c.textContent=e.prompt,o.append(s,c),n.append(i,o),n})),o.textContent=i.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:c.length===0?`No prompts match.`:c.length===i.length?`${i.length} ${i.length===1?`prompt`:`prompts`}`:`${c.length} of ${i.length} prompts`,u()},f=t=>{!t||!c.some(e=>e.id===t)||(n(),e.choose(t))},ee=e=>{a.value=e===`Backspace`?a.value.slice(0,-1):a.value+e,a.focus(),a.dispatchEvent(new Event(`input`,{bubbles:!0}))};a.addEventListener(`input`,d),a.addEventListener(`focus`,u),a.addEventListener(`blur`,u),s.addEventListener(`click`,e=>{f(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=l(),n=e.target===a,r=t.indexOf(e.target),i=oo(e.key);if(i!==null)return e.preventDefault(),f(t[i]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),f((n?t[0]:t[r])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?r<0?t[0]:t[r+1]:r<=0?a:t[r-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),ee(e.key))}),t.append(a,o,s),d(),a.focus()}}}ea(`progress`,`Review progress`);function co(e,t=Date.now()){return`Running for ${lo(t-e)}`}function lo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var uo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function fo(e){let t=new Map;for(let n of Object.keys(uo)){let r=uo[n],i=e.querySelector(`[${r}]`);i&&!Ji(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function po(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Ji(t.phase):mo(t.phase,n)}function mo(e,t){return Ji(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function ho(e,t,n){let r=[...e.querySelectorAll(`.prb-progress-step`)],i=r.findIndex(e=>e.dataset.phase===t);if(i===-1)return;r.forEach((e,t)=>{let n=t<i?`complete`:t===i?`active`:`pending`;e.dataset.state=n;let r=e.querySelector(`.prb-progress-label`),a=n===`complete`?e.dataset.labelDone:e.dataset.labelDoing;r&&a&&(r.textContent=a),t!==i&&e.querySelector(`[data-step-note]`)?.remove()});let a=r[i];if(!n||Yi(n,a.querySelector(`.prb-progress-label`)?.textContent??``))return;let o=a.querySelector(`[data-step-note]`);o||(o=document.createElement(`p`),o.className=`prb-progress-note`,o.setAttribute(`data-step-note`,``),a.appendChild(o)),o.textContent=n}function go(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=co(e))}}function _o(e,t=1e3){let n=window.setInterval(()=>go(e),t);return()=>window.clearInterval(n)}async function vo({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||Ji(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function yo(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${b(e.scope)}" data-diagram-card="${b(e.scope)}">
87
87
  <header class="prb-diagram-head">
88
88
  <div class="prb-diagram-heading">
89
89
  <h4 class="prb-diagram-title">
90
90
  <button type="button" class="prb-diagram-toggle" data-diagram-toggle aria-expanded="true">
91
91
  <span class="prb-diagram-disclosure" aria-hidden="true">▼</span>
92
- <span>${v(e.title)}</span>
92
+ <span>${b(e.title)}</span>
93
93
  </button>
94
94
  </h4>
95
- <p class="prb-diagram-scope">${v(r)}</p>
95
+ <p class="prb-diagram-scope">${b(r)}</p>
96
96
  </div>
97
97
  <div class="prb-diagram-tools">
98
98
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="out" aria-label="Zoom out">&minus;</button>
99
99
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="reset">Fit</button>
100
100
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="in" aria-label="Zoom in">+</button>
101
- <button type="button" class="prb-diagram-redraw" data-diagram-request="${v(i)}">Regenerate</button>
101
+ <button type="button" class="prb-diagram-redraw" data-diagram-request="${b(i)}">Regenerate</button>
102
102
  </div>
103
103
  </header>
104
- ${e.caption?`<p class="prb-diagram-caption">${v(e.caption)}</p>`:``}
105
- ${Co(e,n)}
104
+ ${e.caption?`<p class="prb-diagram-caption">${b(e.caption)}</p>`:``}
105
+ ${bo(e,n)}
106
106
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
107
107
  <details class="prb-diagram-source">
108
108
  <summary>Diagram source</summary>
109
- <div class="${he}"><pre><code data-mermaid-source>${v(e.mermaid)}</code></pre><button type="button" class="${ge}" aria-label="Copy code">Copy</button></div>
109
+ <div class="${pe}"><pre><code data-mermaid-source>${b(e.mermaid)}</code></pre><button type="button" class="${me}" aria-label="Copy code">Copy</button></div>
110
110
  </details>
111
- </article>`}function Co(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${v(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var wo=.5,To=3,Eo=1.25,Do=new WeakSet,Oo=new WeakMap,ko=new WeakMap,T=null;function Ao(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{T?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Uo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Ko(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Mo(e):o&&jo(e,o.dataset.diagramRequest||null)}),Io(),No(),{drawPane:Wo}}async function jo(e,t){if(T)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${es(n)}"]`)??null??zo(r,n,t);if(!i)return;Lo(),e.showDiagrams();let a=Bo(i);T=new AbortController,Yo(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:T.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return Vo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Ho(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Lo()):a.remove();return}Vo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{T=null,Yo(!0)}}async function Mo(e){if(T)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=Po(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),T=new AbortController,Yo(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:T.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){Fo(n,r?.error??`Buddy AI did not return a change map. Check the terminal running PR Review Buddy.`);return}n.remove(),e.showChangeMap(r.changeMap),Lo()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Fo(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),T=null,Yo(!0)}}function No(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(Po(e),Yo(!1))}function Po(e){e.parentElement?.querySelector(`[data-map-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-map-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the review and the change…</span>`;let n=document.createElement(`button`);return n.type=`button`,n.className=`prb-diagram-redraw`,n.setAttribute(`data-diagram-stop`,``),n.textContent=`Stop`,t.appendChild(n),e.before(t),t}function Fo(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Io(){let e=document.querySelector(`[data-diagram-pane][data-diagram-running]`);if(!e)return;let t=e.dataset.diagramRunning||null,n=t??`change`,r=e.querySelector(`[data-diagram-card="${es(n)}"]`)??zo(e,n,t);r&&(Lo(),Bo(r,{scroll:!1}),Yo(!1))}function Lo(){let e=document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]:not([data-diagram-pending])`).length,t=document.querySelectorAll(`[data-map-body] [data-change-map]`).length;Ro(`map`,t>0),Ro(`diagram`,e>0);let n=e+t,r=document.querySelector(`.prb-rail [data-view-nav="map"]`);if(!r)return;let i=r.querySelector(`.prb-rail-count`);if(n===0){i?.remove();return}i||(i=document.createElement(`span`),i.className=`prb-rail-count`,r.appendChild(i)),i.textContent=String(n),i.setAttribute(`aria-label`,n===1?`1 diagram`:`${n} diagrams`)}function Ro(e,t){for(let n of document.querySelectorAll(`[data-diagram-mode="${e}"]`)){n.toggleAttribute(`data-ready`,t);let e=n.querySelector(`[data-mode-ready]`);e&&(e.hidden=!t)}}function zo(e,t,n){if(!e)return null;let r=document.createElement(`article`);return r.className=`prb-diagram`,r.dataset.diagramCard=t,r.setAttribute(`data-diagram-pending`,``),r.innerHTML=`<header class="prb-diagram-head">
111
+ </article>`}function bo(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${b(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var xo=.5,So=3,Co=1.25,wo=new WeakSet,To=new WeakMap,Eo=new WeakMap,O=null;function Do(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{O?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Bo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Uo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?ko(e):o&&Oo(e,o.dataset.diagramRequest||null)}),No(),Ao(),{drawPane:Vo}}async function Oo(e,t){if(O)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${Zo(n)}"]`)??null??Io(r,n,t);if(!i)return;Po(),e.showDiagrams();let a=Lo(i);O=new AbortController,Ko(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:O.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return Ro(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);zo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Po()):a.remove();return}Ro(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{O=null,Ko(!0)}}async function ko(e){if(O)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=jo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),O=new AbortController,Ko(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:O.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){Mo(n,r?.error??`Buddy AI did not return a change map. Check the terminal running PR Review Buddy.`);return}n.remove(),e.showChangeMap(r.changeMap),Po()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Mo(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),O=null,Ko(!0)}}function Ao(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(jo(e),Ko(!1))}function jo(e){e.parentElement?.querySelector(`[data-map-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-map-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the review and the change…</span>`;let n=document.createElement(`button`);return n.type=`button`,n.className=`prb-diagram-redraw`,n.setAttribute(`data-diagram-stop`,``),n.textContent=`Stop`,t.appendChild(n),e.before(t),t}function Mo(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function No(){let e=document.querySelector(`[data-diagram-pane][data-diagram-running]`);if(!e)return;let t=e.dataset.diagramRunning||null,n=t??`change`,r=e.querySelector(`[data-diagram-card="${Zo(n)}"]`)??Io(e,n,t);r&&(Po(),Lo(r,{scroll:!1}),Ko(!1))}function Po(){let e=document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]:not([data-diagram-pending])`).length,t=document.querySelectorAll(`[data-map-body] [data-change-map]`).length;Fo(`map`,t>0),Fo(`diagram`,e>0);let n=e+t,r=document.querySelector(`.prb-rail [data-view-nav="map"]`);if(!r)return;let i=r.querySelector(`.prb-rail-count`);if(n===0){i?.remove();return}i||(i=document.createElement(`span`),i.className=`prb-rail-count`,r.appendChild(i)),i.textContent=String(n),i.setAttribute(`aria-label`,n===1?`1 diagram`:`${n} diagrams`)}function Fo(e,t){for(let n of document.querySelectorAll(`[data-diagram-mode="${e}"]`)){n.toggleAttribute(`data-ready`,t);let e=n.querySelector(`[data-mode-ready]`);e&&(e.hidden=!t)}}function Io(e,t,n){if(!e)return null;let r=document.createElement(`article`);return r.className=`prb-diagram`,r.dataset.diagramCard=t,r.setAttribute(`data-diagram-pending`,``),r.innerHTML=`<header class="prb-diagram-head">
112
112
  <div class="prb-diagram-heading">
113
113
  <h4 class="prb-diagram-title">Drawing…</h4>
114
- <p class="prb-diagram-scope">${t===`change`?`Whole change`:$o(Xo(n))}</p>
114
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:Xo(qo(n))}</p>
115
115
  </div>
116
- </header>`,Zo(e,r,n),r}function Bo(e,{scroll:t=!0}={}){e.querySelector(`[data-diagram-status]`)?.remove();let n=document.createElement(`p`);n.className=`prb-diagram-status`,n.setAttribute(`data-diagram-status`,``),n.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the change…</span>`;let r=document.createElement(`button`);return r.type=`button`,r.className=`prb-diagram-redraw`,r.setAttribute(`data-diagram-stop`,``),r.textContent=`Stop`,n.appendChild(r),e.querySelector(`.prb-diagram-head`)?.insertAdjacentElement(`afterend`,n),t&&e.scrollIntoView({behavior:ts()?`auto`:`smooth`,block:`start`}),n}function Vo(e,t,n){if(t.className=`prb-diagram-failed`,t.textContent=n,e.hasAttribute(`data-diagram-pending`)){let n=document.createElement(`button`);n.type=`button`,n.className=`prb-diagram-redraw`,n.dataset.diagramRequest=e.dataset.diagramCard===`change`?``:e.dataset.diagramCard??``,n.textContent=`Try again`,t.appendChild(document.createTextNode(` `)),t.appendChild(n)}}function Ho(e,t,n){let r=So(t,new Map(n?[[n,Xo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Lo(),Go(a))}function Uo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Go(e))}function Wo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Go(e)}async function Go(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Do.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Do.add(e);try{await Wt(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{Do.delete(e),t.innerHTML=``;let n=document.createElement(`p`);n.className=`prb-diagram-failed`,n.textContent=`This diagram could not be drawn. Its source is below, and Regenerate will ask for another.`,t.replaceWith(n),e.querySelector(`details`)?.setAttribute(`open`,``)}}}function Ko(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){ko.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=qo(e,n);if(i<=0)return;let a=Jo((ko.get(e)??1)*(t===`in`?Eo:1/Eo));ko.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function qo(e,t){let n=Oo.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Oo.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Jo(e){return Math.min(To,Math.max(wo,e))}function Yo(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Xo(e){return e?document.querySelector(`[data-goto-section="${es(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Zo(e,t,n){let r=Qo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Qo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Qo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${es(e)}"]`);return Number(t?.dataset.themeIndex??0)}function $o(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function es(e){return CSS.escape(e)}function ts(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ns=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],rs=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],E={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},is={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function as(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`The change map was not a JSON object.`);let t=e;if(!Array.isArray(t.nodes)||t.nodes.length===0)throw Error(`The change map had no nodes. This usually means the model ignored the requested shape.`);let{nodes:n,ids:r}=os(t.nodes);return{schemaVersion:1,title:fs(x(t.title).trim(),E.mapTitle)||`Change map`,intent:cs(t.intent,E.intent)??{simple:``,technical:``},nodes:n,edges:ss(t.edges,r)}}function os(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=cs(e.title,E.title);if(!a)continue;let o=x(e.id).trim()||a.technical;if(t.has(o))continue;let s=ds(us(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=ns.includes(e.role)?e.role:`concept`,l=cs(e.why,E.why),u=fs(x(e.anchor).trim(),E.anchor),d=x(e.sectionId).trim();r.push({id:s,role:c,stage:ls(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:cs(e.body,E.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function ss(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=cs(e.label,E.label),a=t.get(x(e.from).trim())??x(e.from).trim(),o=t.get(x(e.to).trim())??x(e.to).trim();if(!i||!a||!o)continue;let s=cs(e.note,E.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function cs(e,t){if(typeof e==`string`){let n=fs(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=fs(x(n.simple).trim(),t),i=fs(x(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function ls(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:is[t]}function us(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function ds(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function fs(e,t){if(e.length<=t)return e;let n=e.slice(0,t-1),r=n.lastIndexOf(` `);return`${(r>t/2?n.slice(0,r):n).trimEnd()}…`}function ps(e,t){try{return ms(as(e),t).map}catch{return null}}function ms(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=_s(hs(e.nodes,n).map(e=>gs(e,t,n)),n),i=new Set(r.map(e=>e.id)),a=new Set,o=[];for(let t of e.edges){let e=`${t.from}\u0000${t.to}`;if(!i.has(t.from)||!i.has(t.to)||t.from===t.to||a.has(e)||o.length>=16){n.droppedEdges+=1;continue}a.add(e),o.push(t)}if(r.length<2||o.length===0)throw Error(`The change map had too little in it to draw: it needs at least two ideas and one relationship.`);return{map:{...e,nodes:vs(r),edges:o},audit:n}}function hs(e,t){if(e.length<=12)return e;let n=e.filter(e=>e.weight===`primary`).slice(0,3),r=e.filter(e=>!n.includes(e)).slice(0,12-n.length),i=new Set([...n,...r]);return t.droppedNodes+=e.length-i.size,e.filter(e=>i.has(e))}function gs(e,t,n){if(e.sectionId===void 0||t.includes(e.sectionId))return e;n.withdrawnSections+=1;let{sectionId:r,...i}=e;return i}function _s(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function vs(e){return[...e].sort((e,t)=>e.stage-t.stage)}function ys(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?ps(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return bs(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
116
+ </header>`,Jo(e,r,n),r}function Lo(e,{scroll:t=!0}={}){e.querySelector(`[data-diagram-status]`)?.remove();let n=document.createElement(`p`);n.className=`prb-diagram-status`,n.setAttribute(`data-diagram-status`,``),n.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the change…</span>`;let r=document.createElement(`button`);return r.type=`button`,r.className=`prb-diagram-redraw`,r.setAttribute(`data-diagram-stop`,``),r.textContent=`Stop`,n.appendChild(r),e.querySelector(`.prb-diagram-head`)?.insertAdjacentElement(`afterend`,n),t&&e.scrollIntoView({behavior:Qo()?`auto`:`smooth`,block:`start`}),n}function Ro(e,t,n){if(t.className=`prb-diagram-failed`,t.textContent=n,e.hasAttribute(`data-diagram-pending`)){let n=document.createElement(`button`);n.type=`button`,n.className=`prb-diagram-redraw`,n.dataset.diagramRequest=e.dataset.diagramCard===`change`?``:e.dataset.diagramCard??``,n.textContent=`Try again`,t.appendChild(document.createTextNode(` `)),t.appendChild(n)}}function zo(e,t,n){let r=yo(t,new Map(n?[[n,qo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Po(),Ho(a))}function Bo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Ho(e))}function Vo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Ho(e)}async function Ho(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||wo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){wo.add(e);try{await Ht(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{wo.delete(e),t.innerHTML=``;let n=document.createElement(`p`);n.className=`prb-diagram-failed`,n.textContent=`This diagram could not be drawn. Its source is below, and Regenerate will ask for another.`,t.replaceWith(n),e.querySelector(`details`)?.setAttribute(`open`,``)}}}function Uo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Eo.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Wo(e,n);if(i<=0)return;let a=Go((Eo.get(e)??1)*(t===`in`?Co:1/Co));Eo.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Wo(e,t){let n=To.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return To.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Go(e){return Math.min(So,Math.max(xo,e))}function Ko(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function qo(e){return e?document.querySelector(`[data-goto-section="${Zo(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Jo(e,t,n){let r=Yo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Yo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Yo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${Zo(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Xo(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Zo(e){return CSS.escape(e)}function Qo(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var $o=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],es=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],k={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},ts={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function ns(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`The change map was not a JSON object.`);let t=e;if(!Array.isArray(t.nodes)||t.nodes.length===0)throw Error(`The change map had no nodes. This usually means the model ignored the requested shape.`);let{nodes:n,ids:r}=rs(t.nodes);return{schemaVersion:1,title:ls(C(t.title).trim(),k.mapTitle)||`Change map`,intent:as(t.intent,k.intent)??{simple:``,technical:``},nodes:n,edges:is(t.edges,r)}}function rs(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=as(e.title,k.title);if(!a)continue;let o=C(e.id).trim()||a.technical;if(t.has(o))continue;let s=cs(ss(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=$o.includes(e.role)?e.role:`concept`,l=as(e.why,k.why),u=ls(C(e.anchor).trim(),k.anchor),d=C(e.sectionId).trim();r.push({id:s,role:c,stage:os(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:as(e.body,k.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function is(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=as(e.label,k.label),a=t.get(C(e.from).trim())??C(e.from).trim(),o=t.get(C(e.to).trim())??C(e.to).trim();if(!i||!a||!o)continue;let s=as(e.note,k.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function as(e,t){if(typeof e==`string`){let n=ls(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=ls(C(n.simple).trim(),t),i=ls(C(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function os(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:ts[t]}function ss(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function cs(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ls(e,t){if(e.length<=t)return e;let n=e.slice(0,t-1),r=n.lastIndexOf(` `);return`${(r>t/2?n.slice(0,r):n).trimEnd()}…`}function us(e,t){try{return ds(ns(e),t).map}catch{return null}}function ds(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=ms(fs(e.nodes,n).map(e=>ps(e,t,n)),n),i=new Set(r.map(e=>e.id)),a=new Set,o=[];for(let t of e.edges){let e=`${t.from}\u0000${t.to}`;if(!i.has(t.from)||!i.has(t.to)||t.from===t.to||a.has(e)||o.length>=16){n.droppedEdges+=1;continue}a.add(e),o.push(t)}if(r.length<2||o.length===0)throw Error(`The change map had too little in it to draw: it needs at least two ideas and one relationship.`);return{map:{...e,nodes:hs(r),edges:o},audit:n}}function fs(e,t){if(e.length<=12)return e;let n=e.filter(e=>e.weight===`primary`).slice(0,3),r=e.filter(e=>!n.includes(e)).slice(0,12-n.length),i=new Set([...n,...r]);return t.droppedNodes+=e.length-i.size,e.filter(e=>i.has(e))}function ps(e,t,n){if(e.sectionId===void 0||t.includes(e.sectionId))return e;n.withdrawnSections+=1;let{sectionId:r,...i}=e;return i}function ms(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function hs(e){return[...e].sort((e,t)=>e.stage-t.stage)}function gs(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?us(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return _s(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
117
117
  <header class="prb-map-head">
118
118
  <div class="prb-map-heading">
119
- <h4 class="prb-map-title">${v(a.title)}</h4>
120
- ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${D(a.intent)}</p>`:``}
119
+ <h4 class="prb-map-title">${b(a.title)}</h4>
120
+ ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${A(a.intent)}</p>`:``}
121
121
  </div>
122
122
  <div class="prb-map-tools">
123
- ${xs(i)}
123
+ ${vs(i)}
124
124
  <button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
125
125
  </div>
126
126
  </header>
127
127
  <p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
128
- ${Ss(a,s)}
129
- ${Es(a)}
130
- </div>`}function bs(e){return`<div class="prb-map-empty" data-change-map-empty>
128
+ ${ys(a,s)}
129
+ ${Cs(a)}
130
+ </div>`}function _s(e){return`<div class="prb-map-empty" data-change-map-empty>
131
131
  ${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
132
132
  <h4 class="prb-map-empty-title">See the change as a map</h4>
133
133
  <p>See how the main ideas in this change connect, what depends on what, and where the important risks are. Each idea links back to its theme in the Review Path.</p>
134
134
  <p class="prb-map-empty-note">Buddy AI builds it from this review, in plain words and technical ones. It takes a minute or two.</p>
135
135
  <button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
136
- </div>`}function xs(e){let t=(t,n)=>`<button type="button" class="prb-map-register" data-map-register-option="${t}" aria-pressed="${e===t}">${n}</button>`;return`<div class="prb-map-registers" role="group" aria-label="Wording">${t(`simple`,`Simple`)}${t(`technical`,`Technical`)}</div>`}function Ss(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
137
- <h5 class="prb-map-stage-title">${v(rs[n]??``)}</h5>
138
- ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>ws(n,t,e)).join(``)}
139
- </div>`).join(``),i=e.edges.map((e,t)=>Ts(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
136
+ </div>`}function vs(e){let t=(t,n)=>`<button type="button" class="prb-map-register" data-map-register-option="${t}" aria-pressed="${e===t}">${n}</button>`;return`<div class="prb-map-registers" role="group" aria-label="Wording">${t(`simple`,`Simple`)}${t(`technical`,`Technical`)}</div>`}function ys(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
137
+ <h5 class="prb-map-stage-title">${b(es[n]??``)}</h5>
138
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>xs(n,t,e)).join(``)}
139
+ </div>`).join(``),i=e.edges.map((e,t)=>Ss(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
140
140
  <svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
141
141
  ${r}
142
142
  <div class="prb-map-labels" aria-hidden="true">${i}</div>
143
- </div>`}var Cs={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function ws(e,t,n){let r=v(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${D(e.label)}</em> <span aria-hidden="true">→</span> ${D(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
144
- <p class="prb-map-role">${Cs[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
145
- <h5 class="prb-map-node-title" id="prb-map-node-${r}">${D(e.title)}</h5>
146
- ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${D(e.body)}</p>`:``}
147
- ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${D(e.why)}</p>`:``}
148
- ${e.anchor?`<code class="prb-map-anchor">${v(e.anchor)}</code>`:``}
143
+ </div>`}var bs={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function xs(e,t,n){let r=b(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${A(e.label)}</em> <span aria-hidden="true">→</span> ${A(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
144
+ <p class="prb-map-role">${bs[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
145
+ <h5 class="prb-map-node-title" id="prb-map-node-${r}">${A(e.title)}</h5>
146
+ ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${A(e.body)}</p>`:``}
147
+ ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${A(e.why)}</p>`:``}
148
+ ${e.anchor?`<code class="prb-map-anchor">${b(e.anchor)}</code>`:``}
149
149
  ${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
150
- ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${v(e.sectionId)}" aria-label="Open ${v(i)} in the Review Path">Review Path: ${v(i)} <span aria-hidden="true">→</span></button>`:``}
151
- </article>`}function Ts(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${v(e.from)}" data-to="${v(e.to)}">${D(e.label)}</span>`}function Es(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
150
+ ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${b(e.sectionId)}" aria-label="Open ${b(i)} in the Review Path">Review Path: ${b(i)} <span aria-hidden="true">→</span></button>`:``}
151
+ </article>`}function Ss(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${b(e.from)}" data-to="${b(e.to)}">${A(e.label)}</span>`}function Cs(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
152
152
  <summary>Read as a list</summary>
153
- <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${D(n)}</strong> <em>${D(e.label)}</em> <strong>${D(r)}</strong>${e.note?`<span class="prb-map-note"> — ${D(e.note)}</span>`:``}</li>`}).join(``)}</ol>
154
- </details>`}function D(e){return e.simple===e.technical?me(e.simple):`<span data-reg="simple">${me(e.simple)}</span><span data-reg="technical">${me(e.technical)}</span>`}var Ds=`http://www.w3.org/2000/svg`,Os=new WeakSet,ks=new WeakMap;function As(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-map-register-option]`);if(r){Us(r.dataset.mapRegisterOption===`technical`?`technical`:`simple`,e);return}if(n.closest(`[data-goto-section]`))return;let i=n.closest(`[data-map-node]`),a=n.closest(`[data-map-board]`);a&&Hs(a,i&&i.classList.contains(`prb-map-node`)?i.dataset.mapNode??null:null)}),document.addEventListener(`focusin`,e=>{let t=e.target instanceof Element?e.target.closest(`.prb-map-node`):null,n=t?.closest(`[data-map-board]`);t&&n&&Hs(n,t.dataset.mapNode??null)}),document.addEventListener(`keydown`,t=>{let n=t.target;if(n instanceof HTMLElement){if(t.key===`Escape`&&n.closest(`[data-map-board]`)){let e=n.closest(`[data-map-board]`);e?.hasAttribute(`data-selecting`)&&(Hs(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:js,show:Ms}}function js(){for(let e of document.querySelectorAll(`[data-map-board]`))Ns(e),Ps(e)}function Ms(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=ys({stored:e,sections:Gs(),reviewedSha:e.commitSha,register:Ws()}),js())}function Ns(e){if(Os.has(e)||typeof ResizeObserver>`u`)return;Os.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Ps(e)}))}).observe(e)}function Ps(e){let t=e.querySelector(`[data-map-edges]`);if(!t||e.offsetWidth===0)return;let n=e.getBoundingClientRect(),r=t=>{let r=t.getBoundingClientRect(),i=r.left-n.left+e.scrollLeft,a=r.top-n.top+e.scrollTop;return{left:i,top:a,right:i+r.width,bottom:a+r.height,cx:i+r.width/2,cy:a+r.height/2}},i=e.scrollWidth,a=e.scrollHeight;t.setAttribute(`width`,String(i)),t.setAttribute(`height`,String(a)),t.setAttribute(`viewBox`,`0 0 ${i} ${a}`),t.replaceChildren(Vs());let o=new Map;for(let t of e.querySelectorAll(`.prb-map-node`))o.set(t.dataset.mapNode??``,r(t));let s=getComputedStyle(e).gridTemplateColumns.trim().split(/\s+/).length>1,c=[...e.querySelectorAll(`.prb-map-label[data-map-edge]`)].map(e=>{let t=o.get(e.dataset.from??``),n=o.get(e.dataset.to??``);return{label:e,from:t,to:n,ends:t&&n?Fs(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),p=[...o.values()],m=e.clientWidth,h=ks.get(e),te=h&&h.width===m?h.edges:new Set;ks.set(e,{width:m,edges:te});let ne=(t,n)=>{n&&te.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(te.has(o)){e.hidden=!0,ne(o,!0);return}let s=Is(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Is(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Rs(s,i.from,c,i.to),[u,m,h,re]=l,ie=p.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>zs(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,ne(o,!0);return}let g=document.createElementNS(Ds,`path`);g.setAttribute(`d`,`M${O(u.x)},${O(u.y)} C${O(m.x)},${O(m.y)} ${O(h.x)},${O(h.y)} ${O(re.x)},${O(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let ae=e.offsetWidth,oe=e.offsetHeight,se=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=zs(l,e);return{left:t.x-ae/2,top:t.y-oe/2,right:t.x+ae/2,bottom:t.y+oe/2}}).find(e=>![...p,...ee,...f].some(t=>Bs(e,t,2)));if(!se){g.remove(),e.hidden=!0,ne(o,!0);return}ne(o,!1),f.push(se),e.style.left=`${Math.round(se.left)}px`,e.style.top=`${Math.round(se.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Fs(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function Is(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var Ls={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Rs(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=Ls[t],s=Ls[r];return[e,{x:e.x+o.x*a,y:e.y+o.y*a},{x:n.x+s.x*a,y:n.y+s.y*a},n]}function zs([e,t,n,r],i){let a=1-i;return{x:a*a*a*e.x+3*a*a*i*t.x+3*a*i*i*n.x+i*i*i*r.x,y:a*a*a*e.y+3*a*a*i*t.y+3*a*i*i*n.y+i*i*i*r.y}}function Bs(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function O(e){return Math.round(e*10)/10}function Vs(){let e=document.createElementNS(Ds,`defs`),t=document.createElementNS(Ds,`marker`);t.setAttribute(`id`,`prb-map-arrow`),t.setAttribute(`viewBox`,`0 0 10 10`),t.setAttribute(`refX`,`9`),t.setAttribute(`refY`,`5`),t.setAttribute(`markerWidth`,`7`),t.setAttribute(`markerHeight`,`7`),t.setAttribute(`orient`,`auto-start-reverse`);let n=document.createElementNS(Ds,`path`);return n.setAttribute(`d`,`M0,0 L10,5 L0,10 z`),n.setAttribute(`class`,`prb-map-arrow`),t.appendChild(n),e.appendChild(t),e}function Hs(e,t){for(let t of e.querySelectorAll(`[data-active], [data-near]`))t.removeAttribute(`data-active`),t.removeAttribute(`data-near`);if(e.toggleAttribute(`data-selecting`,t!==null),t!==null){e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(t)}"]`)?.setAttribute(`data-active`,``);for(let n of e.querySelectorAll(`[data-map-edge]`)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`);if(r!==t&&i!==t)continue;n.setAttribute(`data-active`,``);let a=r===t?i:r;a&&e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(a)}"]`)?.setAttribute(`data-near`,``)}}}function Us(e,t){document.querySelector(`[data-map-pane]`)?.setAttribute(`data-map-register`,e);for(let t of document.querySelectorAll(`[data-change-map]`))t.dataset.register=e;for(let t of document.querySelectorAll(`[data-map-register-option]`))t.setAttribute(`aria-pressed`,String(t.dataset.mapRegisterOption===e));js(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Ws(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Gs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Ks=`repository`,k={minCharacters:8,maxLines:3,maxCharacters:400},qs=[`app`,`service`,`component`,`store`,`external`,`group`],Js=/^[a-z][a-z0-9-]*$/;function Ys(e){let t=[];if(!rc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};ac(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=ic(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=oc(n.title,`architecture.title`,t),i=sc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=Xs(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>rc(e)&&typeof e.id==`string`&&Js.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)A(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=Zs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(A(a,c).includes(d)||A(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function A(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function Xs(e,t,n){if(!rc(e))return n.push(`${t} must be an object.`),null;ac(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=ic(e,[`parent`,`description`,`owns`],t,n),i=cc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Ks}": that name is kept for the whole repository. Choose another id.`);let a=oc(r.name,`${t}.name`,n),o=qs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${qs.join(`, `)}.`);let s=r.parent===void 0?void 0:cc(r.parent,`${t}.parent`,n),c=sc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Qs(r.owns,`${t}.owns`,n),u=$s(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function Zs(e,t,n){if(!rc(e))return n.push(`${t} must be an object.`),null;ac(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=ic(e,[`description`,`confidence`],t,n),i=cc(r.id,`${t}.id`,n),a=cc(r.source,`${t}.source`,n),o=cc(r.target,`${t}.target`,n),s=oc(r.label,`${t}.label`,n),c=sc(r.description,`${t}.description`,n),l=$s(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function Qs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=oc(e,`${t}[${i}]`,n);a!==null&&(!nc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function $s(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!rc(e)){n.push(`${a} must be an object.`);return}ac(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=ic(e,[`symbol`,`line`,`note`],a,n);let o=oc(e.path,`${a}.path`,n);o!==null&&!nc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=ec(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=lc(e.line,`${a}.line`,n),u=sc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function ec(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${k.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=tc(r);return r.split(`
155
- `).length>k.maxLines||r.length>k.maxCharacters?(n.push(`${t} must be at most ${k.maxLines} lines and ${k.maxCharacters} characters.`),null):i.length<k.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${k.minCharacters} characters.`),null):r}function tc(e){return e.replace(/\s+/g,` `).trim()}function nc(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function rc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ic(e,t,n,r){let i=t.filter(t=>e[t]===null);if(i.length===0)return e;let a={...e};for(let e of i)r.push(e===`parent`?`${n}.parent must be omitted when the node has no parent; null is not allowed.`:`${n}.${e} must be omitted when there is nothing to give; null is not allowed.`),delete a[e];return a}function ac(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function oc(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function sc(e,t,n){if(e!==void 0)return oc(e,t,n)??void 0}function cc(e,t,n){if(typeof e==`string`&&Js.test(e))return e;let r=typeof e==`string`?[...new Set([...e].filter(e=>e>``))]:[],i=r.map(e=>`"${e}" (U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,`0`)})`).join(`, `);return n.push(`${t} must be lowercase ASCII letters, digits and hyphens, starting with a letter${r.length>0?`; "${e}" contains ${i}, which ${r.length===1?`is`:`are`} not ASCII`:``}.`),null}function lc(e,t,n){if(e!==void 0){if(Number.isInteger(e)&&e>=1)return e;n.push(`${t} must be a whole number from 1.`)}}function uc(e,t){let n=new Map(e.nodes.map(e=>[e.id,e]));if(t!==null&&!e.nodes.some(e=>e.parent===t))throw Error(`"${t}" is not a group with members.`);let r=t===null?[]:[t,...A(t,n)],i=e=>t!==null&&A(e,n).includes(t),a=e=>{let a=[e,...A(e,n)];if(t===null)return a[a.length-1];if(i(e))return a[a.indexOf(t)-1];let o=e,s=n.get(o)?.parent;for(;s!==void 0&&!r.includes(s);)o=s,s=n.get(o)?.parent;return o},o=e.nodes.filter(e=>t===null?e.parent===void 0:e.parent===t),s=new Set(o.map(e=>e.id)),c=new Map;for(let n of e.relationships){let e=a(n.source),r=a(n.target);if(e===r)continue;let i=e=>s.has(e)||e===t;if(!i(e)&&!i(r))continue;let o=`${e}>${r}`,l=c.get(o)??{id:o,source:e,target:r,relationships:[],label:``};l.relationships.push(n.id),c.set(o,l)}let l=new Set;for(let e of c.values())for(let n of[e.source,e.target])!s.has(n)&&n!==t&&l.add(n);let u=new Map(e.relationships.map(e=>[e.id,e.label]));for(let e of c.values())e.label=e.relationships.length===1?u.get(e.relationships[0]):`${e.relationships.length} relationships`;let d=t=>e.nodes.filter(e=>e.parent===t.id).length,f=(e,t)=>{let n=e.kind===`group`?d(e):0;return{id:e.id,name:e.name,kind:e.kind,member:t,opens:n,...n>0?{detail:n===1?`1 part`:`${n} parts`}:{}}};return{scope:t,title:t===null?e.title:n.get(t).name,nodes:[...o.map(e=>f(e,!0)),...e.nodes.filter(e=>l.has(e.id)).map(e=>f(e,!1))],edges:[...c.values()]}}var dc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function fc(e){return e.replace(/\s+/g,` `).replace(/#/g,`#35;`).replace(/"/g,`#quot;`).replace(/</g,`#lt;`).replace(/>/g,`#gt;`).replace(/%/g,`#37;`).replace(/`/g,`#96;`).trim()}function pc(e,t={}){let n=t.edgeIds??!0,r=new Map,i=new Map;e.nodes.forEach((e,t)=>{r.set(`n${t}`,e.id),i.set(e.id,`n${t}`)});let a=e=>{let[t,n]=dc[e.kind],r=e.detail?`${fc(e.name)}<br>${fc(e.detail)}`:fc(e.name),a=e.opens>0?`group`:e.member?e.kind===`external`?`external`:e.kind===`store`?`store`:`part`:`context`;return` ${i.get(e.id)}${t}${r}${n}:::${a}`},o=[`flowchart LR`],s=e.nodes.filter(e=>e.member),c=e.nodes.filter(e=>!e.member);e.scope===null?o.push(...s.map(a)):o.push(` subgraph scope["${fc(e.title)}"]`,...s.map(a),` end`),o.push(...c.map(a));let l=t=>t===e.scope?`scope`:i.get(t),u=new Map;return e.edges.forEach((e,t)=>{let r=`e${t}`;u.set(r,e);let i=e.relationships.length>1?`==>`:`-->`;o.push(` ${l(e.source)} ${n?`${r}@`:``}${i}|"${fc(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
156
- `),nodes:r,edges:u}}function mc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=uc(e,t),a=r===0&&t===null?`# ${hc(e.title)}`:`## ${hc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=pc(i,{edgeIds:!1}).source;return[a,...o?[hc(o)]:[],["```mermaid",s,"```"].join(`
153
+ <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${A(n)}</strong> <em>${A(e.label)}</em> <strong>${A(r)}</strong>${e.note?`<span class="prb-map-note"> — ${A(e.note)}</span>`:``}</li>`}).join(``)}</ol>
154
+ </details>`}function A(e){return e.simple===e.technical?fe(e.simple):`<span data-reg="simple">${fe(e.simple)}</span><span data-reg="technical">${fe(e.technical)}</span>`}var ws=`http://www.w3.org/2000/svg`,Ts=new WeakSet,Es=new WeakMap;function Ds(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-map-register-option]`);if(r){Bs(r.dataset.mapRegisterOption===`technical`?`technical`:`simple`,e);return}if(n.closest(`[data-goto-section]`))return;let i=n.closest(`[data-map-node]`),a=n.closest(`[data-map-board]`);a&&zs(a,i&&i.classList.contains(`prb-map-node`)?i.dataset.mapNode??null:null)}),document.addEventListener(`focusin`,e=>{let t=e.target instanceof Element?e.target.closest(`.prb-map-node`):null,n=t?.closest(`[data-map-board]`);t&&n&&zs(n,t.dataset.mapNode??null)}),document.addEventListener(`keydown`,t=>{let n=t.target;if(n instanceof HTMLElement){if(t.key===`Escape`&&n.closest(`[data-map-board]`)){let e=n.closest(`[data-map-board]`);e?.hasAttribute(`data-selecting`)&&(zs(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Os,show:ks}}function Os(){for(let e of document.querySelectorAll(`[data-map-board]`))As(e),js(e)}function ks(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=gs({stored:e,sections:Hs(),reviewedSha:e.commitSha,register:Vs()}),Os())}function As(e){if(Ts.has(e)||typeof ResizeObserver>`u`)return;Ts.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,js(e)}))}).observe(e)}function js(e){let t=e.querySelector(`[data-map-edges]`);if(!t||e.offsetWidth===0)return;let n=e.getBoundingClientRect(),r=t=>{let r=t.getBoundingClientRect(),i=r.left-n.left+e.scrollLeft,a=r.top-n.top+e.scrollTop;return{left:i,top:a,right:i+r.width,bottom:a+r.height,cx:i+r.width/2,cy:a+r.height/2}},i=e.scrollWidth,a=e.scrollHeight;t.setAttribute(`width`,String(i)),t.setAttribute(`height`,String(a)),t.setAttribute(`viewBox`,`0 0 ${i} ${a}`),t.replaceChildren(Rs());let o=new Map;for(let t of e.querySelectorAll(`.prb-map-node`))o.set(t.dataset.mapNode??``,r(t));let s=getComputedStyle(e).gridTemplateColumns.trim().split(/\s+/).length>1,c=[...e.querySelectorAll(`.prb-map-label[data-map-edge]`)].map(e=>{let t=o.get(e.dataset.from??``),n=o.get(e.dataset.to??``);return{label:e,from:t,to:n,ends:t&&n?Ms(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),p=[...o.values()],te=e.clientWidth,m=Es.get(e),ne=m&&m.width===te?m.edges:new Set;Es.set(e,{width:te,edges:ne});let h=(t,n)=>{n&&ne.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(ne.has(o)){e.hidden=!0,h(o,!0);return}let s=Ns(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ns(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Fs(s,i.from,c,i.to),[u,te,m,re]=l,ie=p.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Is(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,h(o,!0);return}let g=document.createElementNS(ws,`path`);g.setAttribute(`d`,`M${j(u.x)},${j(u.y)} C${j(te.x)},${j(te.y)} ${j(m.x)},${j(m.y)} ${j(re.x)},${j(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let _=e.offsetWidth,ae=e.offsetHeight,v=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Is(l,e);return{left:t.x-_/2,top:t.y-ae/2,right:t.x+_/2,bottom:t.y+ae/2}}).find(e=>![...p,...ee,...f].some(t=>Ls(e,t,2)));if(!v){g.remove(),e.hidden=!0,h(o,!0);return}h(o,!1),f.push(v),e.style.left=`${Math.round(v.left)}px`,e.style.top=`${Math.round(v.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Ms(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function Ns(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var Ps={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Fs(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=Ps[t],s=Ps[r];return[e,{x:e.x+o.x*a,y:e.y+o.y*a},{x:n.x+s.x*a,y:n.y+s.y*a},n]}function Is([e,t,n,r],i){let a=1-i;return{x:a*a*a*e.x+3*a*a*i*t.x+3*a*i*i*n.x+i*i*i*r.x,y:a*a*a*e.y+3*a*a*i*t.y+3*a*i*i*n.y+i*i*i*r.y}}function Ls(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function j(e){return Math.round(e*10)/10}function Rs(){let e=document.createElementNS(ws,`defs`),t=document.createElementNS(ws,`marker`);t.setAttribute(`id`,`prb-map-arrow`),t.setAttribute(`viewBox`,`0 0 10 10`),t.setAttribute(`refX`,`9`),t.setAttribute(`refY`,`5`),t.setAttribute(`markerWidth`,`7`),t.setAttribute(`markerHeight`,`7`),t.setAttribute(`orient`,`auto-start-reverse`);let n=document.createElementNS(ws,`path`);return n.setAttribute(`d`,`M0,0 L10,5 L0,10 z`),n.setAttribute(`class`,`prb-map-arrow`),t.appendChild(n),e.appendChild(t),e}function zs(e,t){for(let t of e.querySelectorAll(`[data-active], [data-near]`))t.removeAttribute(`data-active`),t.removeAttribute(`data-near`);if(e.toggleAttribute(`data-selecting`,t!==null),t!==null){e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(t)}"]`)?.setAttribute(`data-active`,``);for(let n of e.querySelectorAll(`[data-map-edge]`)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`);if(r!==t&&i!==t)continue;n.setAttribute(`data-active`,``);let a=r===t?i:r;a&&e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(a)}"]`)?.setAttribute(`data-near`,``)}}}function Bs(e,t){document.querySelector(`[data-map-pane]`)?.setAttribute(`data-map-register`,e);for(let t of document.querySelectorAll(`[data-change-map]`))t.dataset.register=e;for(let t of document.querySelectorAll(`[data-map-register-option]`))t.setAttribute(`aria-pressed`,String(t.dataset.mapRegisterOption===e));Os(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Vs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Hs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Us=`repository`,Ws={minCharacters:8,maxLines:3,maxCharacters:400},Gs=[`app`,`service`,`component`,`store`,`external`,`group`],Ks=/^[a-z][a-z0-9-]*$/;function qs(e){let t=[];if(!nc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};ic(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=rc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=ac(n.title,`architecture.title`,t),i=oc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=Ys(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>nc(e)&&typeof e.id==`string`&&Ks.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)Js(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=Xs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(Js(a,c).includes(d)||Js(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function Js(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function Ys(e,t,n){if(!nc(e))return n.push(`${t} must be an object.`),null;ic(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=rc(e,[`parent`,`description`,`owns`],t,n),i=sc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Us}": that name is kept for the whole repository. Choose another id.`);let a=ac(r.name,`${t}.name`,n),o=Gs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Gs.join(`, `)}.`);let s=r.parent===void 0?void 0:sc(r.parent,`${t}.parent`,n),c=oc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Zs(r.owns,`${t}.owns`,n),u=Qs(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function Xs(e,t,n){if(!nc(e))return n.push(`${t} must be an object.`),null;ic(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=rc(e,[`description`,`confidence`],t,n),i=sc(r.id,`${t}.id`,n),a=sc(r.source,`${t}.source`,n),o=sc(r.target,`${t}.target`,n),s=ac(r.label,`${t}.label`,n),c=oc(r.description,`${t}.description`,n),l=Qs(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function Zs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=ac(e,`${t}[${i}]`,n);a!==null&&(!tc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function Qs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!nc(e)){n.push(`${a} must be an object.`);return}ic(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=rc(e,[`symbol`,`line`,`note`],a,n);let o=ac(e.path,`${a}.path`,n);o!==null&&!tc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=$s(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=cc(e.line,`${a}.line`,n),u=oc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function $s(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Ws.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=ec(r);return r.split(`
155
+ `).length>Ws.maxLines||r.length>Ws.maxCharacters?(n.push(`${t} must be at most ${Ws.maxLines} lines and ${Ws.maxCharacters} characters.`),null):i.length<Ws.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Ws.minCharacters} characters.`),null):r}function ec(e){return e.replace(/\s+/g,` `).trim()}function tc(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function nc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function rc(e,t,n,r){let i=t.filter(t=>e[t]===null);if(i.length===0)return e;let a={...e};for(let e of i)r.push(e===`parent`?`${n}.parent must be omitted when the node has no parent; null is not allowed.`:`${n}.${e} must be omitted when there is nothing to give; null is not allowed.`),delete a[e];return a}function ic(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function ac(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function oc(e,t,n){if(e!==void 0)return ac(e,t,n)??void 0}function sc(e,t,n){if(typeof e==`string`&&Ks.test(e))return e;let r=typeof e==`string`?[...new Set([...e].filter(e=>e>``))]:[],i=r.map(e=>`"${e}" (U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,`0`)})`).join(`, `);return n.push(`${t} must be lowercase ASCII letters, digits and hyphens, starting with a letter${r.length>0?`; "${e}" contains ${i}, which ${r.length===1?`is`:`are`} not ASCII`:``}.`),null}function cc(e,t,n){if(e!==void 0){if(Number.isInteger(e)&&e>=1)return e;n.push(`${t} must be a whole number from 1.`)}}function lc(e,t){let n=new Map(e.nodes.map(e=>[e.id,e]));if(t!==null&&!e.nodes.some(e=>e.parent===t))throw Error(`"${t}" is not a group with members.`);let r=t===null?[]:[t,...Js(t,n)],i=e=>t!==null&&Js(e,n).includes(t),a=e=>{let a=[e,...Js(e,n)];if(t===null)return a[a.length-1];if(i(e))return a[a.indexOf(t)-1];let o=e,s=n.get(o)?.parent;for(;s!==void 0&&!r.includes(s);)o=s,s=n.get(o)?.parent;return o},o=e.nodes.filter(e=>t===null?e.parent===void 0:e.parent===t),s=new Set(o.map(e=>e.id)),c=new Map;for(let n of e.relationships){let e=a(n.source),r=a(n.target);if(e===r)continue;let i=e=>s.has(e)||e===t;if(!i(e)&&!i(r))continue;let o=`${e}>${r}`,l=c.get(o)??{id:o,source:e,target:r,relationships:[],label:``};l.relationships.push(n.id),c.set(o,l)}let l=new Set;for(let e of c.values())for(let n of[e.source,e.target])!s.has(n)&&n!==t&&l.add(n);let u=new Map(e.relationships.map(e=>[e.id,e.label]));for(let e of c.values())e.label=e.relationships.length===1?u.get(e.relationships[0]):`${e.relationships.length} relationships`;let d=t=>e.nodes.filter(e=>e.parent===t.id).length,f=(e,t)=>{let n=e.kind===`group`?d(e):0;return{id:e.id,name:e.name,kind:e.kind,member:t,opens:n,...n>0?{detail:n===1?`1 part`:`${n} parts`}:{}}};return{scope:t,title:t===null?e.title:n.get(t).name,nodes:[...o.map(e=>f(e,!0)),...e.nodes.filter(e=>l.has(e.id)).map(e=>f(e,!1))],edges:[...c.values()]}}var uc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function dc(e){return e.replace(/\s+/g,` `).replace(/#/g,`#35;`).replace(/"/g,`#quot;`).replace(/</g,`#lt;`).replace(/>/g,`#gt;`).replace(/%/g,`#37;`).replace(/`/g,`#96;`).trim()}function fc(e,t={}){let n=t.edgeIds??!0,r=new Map,i=new Map;e.nodes.forEach((e,t)=>{r.set(`n${t}`,e.id),i.set(e.id,`n${t}`)});let a=e=>{let[t,n]=uc[e.kind],r=e.detail?`${dc(e.name)}<br>${dc(e.detail)}`:dc(e.name),a=e.opens>0?`group`:e.member?e.kind===`external`?`external`:e.kind===`store`?`store`:`part`:`context`;return` ${i.get(e.id)}${t}${r}${n}:::${a}`},o=[`flowchart LR`],s=e.nodes.filter(e=>e.member),c=e.nodes.filter(e=>!e.member);e.scope===null?o.push(...s.map(a)):o.push(` subgraph scope["${dc(e.title)}"]`,...s.map(a),` end`),o.push(...c.map(a));let l=t=>t===e.scope?`scope`:i.get(t),u=new Map;return e.edges.forEach((e,t)=>{let r=`e${t}`;u.set(r,e);let i=e.relationships.length>1?`==>`:`-->`;o.push(` ${l(e.source)} ${n?`${r}@`:``}${i}|"${dc(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
156
+ `),nodes:r,edges:u}}function pc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=lc(e,t),a=r===0&&t===null?`# ${mc(e.title)}`:`## ${mc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=fc(i,{edgeIds:!1}).source;return[a,...o?[mc(o)]:[],["```mermaid",s,"```"].join(`
157
157
  `)].join(`
158
158
 
159
159
  `)}).join(`
160
160
 
161
- `)}\n`}function hc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var gc={exploring:{title:`Exploring the code…`,detail:`Reading the repository and identifying its main parts.`},checking:{title:`Checking the evidence…`,detail:`Making sure every piece of code the map cites is really there.`},correcting:{title:`Correcting the map…`,detail:`Fixing what the checks found.`}};function _c(e){return gc[e.stage]}var vc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},yc=5e3;function bc(e){let t=!1,n=!1,r=()=>document.querySelector(`[data-architecture-pane]`)?.hidden===!1;document.addEventListener(`click`,t=>{let n=t.target.closest(`[data-architecture-map]`);n&&Sc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&Cc(e,r,r.dataset.architectureStop||`repository`)}),Tc(e,()=>{r()?xc():n=!0});async function i(){if(n)return xc();if(t)return;let e=document.querySelector(`[data-architecture]`),r=e?.querySelector(`[data-architecture-canvas]`),i=e?.querySelector(`[data-architecture-inspector]`),a=e?.querySelector(`[data-architecture-model]`)?.textContent;if(!e||!r||!i||!a)return;t=!0;let o;try{o=JSON.parse(a)}catch{return Ac(r,`The architecture could not be read.`)}let s=Ys(o.architecture);if(!s.ok)return Ac(r,`The architecture could not be read.`);let c={scope:Ks,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=Ys(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Dc({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=u.draw(c);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&Ec(r,c,l)}),d}return{show:i}}function xc(){let e=gr(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function Sc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{let r=await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n})});if(r.status===202||r.status===409)return xc();wc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{wc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function Cc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{if((await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n,stop:!0})})).ok)return xc();wc(t,`Mapping could not be stopped.`)}catch{wc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function wc(e,t){let n=j(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function Tc(e,t){let n=[];try{n=JSON.parse(document.querySelector(`[data-architecture-runs]`)?.textContent??`[]`)}catch{return}if(n.length===0)return;let r=async()=>{try{let r=(await(await fetch(e.endpoint(`/job`))).json()).architecture??[];for(let e of r){let t=document.querySelector(`[data-architecture-running="${CSS.escape(e.scope)}"]`),{title:n,detail:r}=_c(e),i=t?.querySelector(`[data-architecture-stage]`),a=t?.querySelector(`[data-architecture-stage-detail]`);i&&(i.textContent=n),a&&(a.textContent=r)}if(n.some(e=>!r.some(t=>t.scope===e)))return t()}catch{}window.setTimeout(()=>void r(),yc)};window.setTimeout(()=>void r(),yc)}async function Ec(e,t,n){let r=e=>e.nodes.filter(t=>e.nodes.some(e=>e.parent===t.id)).map(e=>e.id),i=[t,...n.values()].map(e=>mc(e.architecture,[null,...r(e.architecture)])).join(`
162
- `),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Dc=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await _(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return Ac(n,`The architecture drawing could not be loaded. Reload the page to try again.`)}this.drawing?.dispose(),this.shown=e;let s=document.createElement(`div`);s.className=`prb-arch-host`,n.replaceChildren(s);let c=e=>void this.drawing?.showScope(e);try{this.drawing=await o.renderArchitectureWithMermaid(s,e.architecture,{onSelect:e=>this.inspect(e),onScopeChange:t=>{i&&kc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&kc(i,e.architecture,null,c,this.base()):await this.drawing.showScope(t),e!==this.parts.repository&&this.hint()}catch(e){console.error(`[prb architecture]`,e),Ac(n,`The architecture could not be drawn.`)}}async reveal(e){let t=this.parts.repository.architecture.nodes.find(t=>t.id===e);t&&(this.shown!==this.parts.repository&&await this.draw(this.parts.repository),await this.drawing?.showScope(t.parent??null),this.drawing?.select(e),this.parts.canvas.scrollIntoView({block:`nearest`,behavior:`smooth`}))}base(){if(this.shown===this.parts.repository)return[];let{repository:e}=this.parts,t=e.architecture.nodes.find(e=>e.id===this.shown.scope);return[{label:e.architecture.title,go:()=>void this.draw(e,t?.parent??null)},{label:`${t?.name??this.shown.scope} in depth`,go:()=>void this.drawing?.showScope(null)}]}hint(){let{inspector:e}=this.parts,t=[];this.shown!==this.parts.repository&&t.push(...Oc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(j(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;jc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(j(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=j(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Oc(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(j(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(j(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=j(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=j(`details`,`prb-arch-failure-details`,``),n=j(`ul`,``,``);for(let e of r.errors)n.append(j(`li`,``,e));e.append(j(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Oc(e,t,n){let r=t?[j(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,j(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=j(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[j(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function kc(e,t,n,r,i=[]){let a=new Map(t.nodes.map(e=>[e.id,e])),o=[...i.length>0?i:[{label:t.title,go:()=>r(null)}],...(n===null?[]:[...A(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=j(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[j(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function Ac(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function jc(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=j(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[j(`p`,`prb-arch-kind`,`${vc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),j(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(j(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=j(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(Mc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(j(`h5`,`prb-arch-subhead`,`Relationships`));let e=j(`ul`,`prb-arch-related`,``);for(let t of d)e.append(j(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(j(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=j(`section`,`prb-arch-relationship`,``);n.append(j(`p`,`prb-arch-kind`,`Relationship`),j(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(j(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(j(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Mc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Mc(e,t=[]){let n=j(`div`,`prb-arch-evidence`,``);n.append(j(`h5`,`prb-arch-subhead`,`Evidence`));let r=j(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=j(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=j(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(j(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(j(`span`,`prb-arch-location`,e.path),j(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(j(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(j(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function j(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}var Nc=5e3;function Pc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{re(t,(await(await e.markSeen()).json()).unread)}catch{}},a=async()=>{try{if(r()){let n=await(await e.askUnread()).json();typeof n.here==`number`&&n.here>0&&r()?await i():re(t,n.unread)}}catch{}n.setTimeout(()=>void a(),Nc)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void a(),Nc)}function Fc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Ic=1e3,Lc=new WeakMap;function Rc(e,t){return e.length<=1e3?Fc(e)||`&nbsp;`:`${Fc(e.slice(0,Ic))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function zc(e){let t=e.lines.length;return`<tr class="prb-code-deletion" data-before-line="${e.beforeLine}"><td class="prb-code-num"></td><td class="prb-code-line"><button type="button" class="prb-code-deletion-toggle" data-deletion-toggle aria-expanded="false">− ${t} deleted ${t===1?`line`:`lines`}</button></td></tr>`+e.lines.map(e=>`<tr class="prb-code-deleted" hidden><td class="prb-code-num">− ${e.oldLine}</td><td class="prb-code-line">${Rc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Bc(e,t){let n=new Set(e.addedLines),r=new Map;for(let t of e.deletions??[])r.set(t.beforeLine,t);let i=e.lines.map((i,a)=>{let o=e.from+a,s=[n.has(o)?`prb-code-added`:``,o===t?`prb-code-target`:``].filter(Boolean).join(` `),c=r.get(o);return`${c?zc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Rc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(zc(a)),i.join(``)}function Vc(e){let t=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(t));let n=e.closest(`tr`)?.nextElementSibling;for(;n?.classList.contains(`prb-code-deleted`);)n.hidden=!t,n=n.nextElementSibling}function Hc(e,t){let n=new Map;for(let e of t.deletions??[])for(let t of e.lines)n.set(t.oldLine,t.text);for(let r of e.querySelectorAll(`[data-full-line]`)){let[e,i]=(r.dataset.fullLine??``).split(`:`),a=Number(i),o=e===`old`?n.get(a):t.lines[a-t.from];o!==void 0&&Lc.set(r,o)}}function Uc(e){let t=Lc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Wc(e){return e.deletion?2*e.line-1:2*e.line}function Gc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Kc(e,t){if(e.length===0)return``;let n=e.map(Wc),r=n.indexOf(t),i=n.some(e=>e<t),a=n.some(e=>e>t),o=e.length,s=r===-1?`${o} ${o===1?`change`:`changes`}`:`${r+1} of ${o}`;return`<span class="prb-code-nav" data-change-navigator data-change-keys="${n.join(`,`)}" data-change-position="${t}">
161
+ `)}\n`}function mc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var hc={exploring:{title:`Exploring the code…`,detail:`Reading the repository and identifying its main parts.`},checking:{title:`Checking the evidence…`,detail:`Making sure every piece of code the map cites is really there.`},correcting:{title:`Correcting the map…`,detail:`Fixing what the checks found.`}};function gc(e){return hc[e.stage]}var _c={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},vc=5e3;function yc(e){let t=!1,n=!1,r=()=>document.querySelector(`[data-architecture-pane]`)?.hidden===!1;document.addEventListener(`click`,t=>{let n=t.target.closest(`[data-architecture-map]`);n&&xc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&Sc(e,r,r.dataset.architectureStop||`repository`)}),wc(e,()=>{r()?bc():n=!0});async function i(){if(n)return bc();if(t)return;let e=document.querySelector(`[data-architecture]`),r=e?.querySelector(`[data-architecture-canvas]`),i=e?.querySelector(`[data-architecture-inspector]`),a=e?.querySelector(`[data-architecture-model]`)?.textContent;if(!e||!r||!i||!a)return;t=!0;let o;try{o=JSON.parse(a)}catch{return kc(r,`The architecture could not be read.`)}let s=qs(o.architecture);if(!s.ok)return kc(r,`The architecture could not be read.`);let c={scope:Us,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=qs(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Ec({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=u.draw(c);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&Tc(r,c,l)}),d}return{show:i}}function bc(){let e=pr(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function xc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{let r=await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n})});if(r.status===202||r.status===409)return bc();Cc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{Cc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function Sc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{if((await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n,stop:!0})})).ok)return bc();Cc(t,`Mapping could not be stopped.`)}catch{Cc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function Cc(e,t){let n=M(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function wc(e,t){let n=[];try{n=JSON.parse(document.querySelector(`[data-architecture-runs]`)?.textContent??`[]`)}catch{return}if(n.length===0)return;let r=async()=>{try{let r=(await(await fetch(e.endpoint(`/job`))).json()).architecture??[];for(let e of r){let t=document.querySelector(`[data-architecture-running="${CSS.escape(e.scope)}"]`),{title:n,detail:r}=gc(e),i=t?.querySelector(`[data-architecture-stage]`),a=t?.querySelector(`[data-architecture-stage-detail]`);i&&(i.textContent=n),a&&(a.textContent=r)}if(n.some(e=>!r.some(t=>t.scope===e)))return t()}catch{}window.setTimeout(()=>void r(),vc)};window.setTimeout(()=>void r(),vc)}async function Tc(e,t,n){let r=e=>e.nodes.filter(t=>e.nodes.some(e=>e.parent===t.id)).map(e=>e.id),i=[t,...n.values()].map(e=>pc(e.architecture,[null,...r(e.architecture)])).join(`
162
+ `),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Ec=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await y(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return kc(n,`The architecture drawing could not be loaded. Reload the page to try again.`)}this.drawing?.dispose(),this.shown=e;let s=document.createElement(`div`);s.className=`prb-arch-host`,n.replaceChildren(s);let c=e=>void this.drawing?.showScope(e);try{this.drawing=await o.renderArchitectureWithMermaid(s,e.architecture,{onSelect:e=>this.inspect(e),onScopeChange:t=>{i&&Oc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&Oc(i,e.architecture,null,c,this.base()):await this.drawing.showScope(t),e!==this.parts.repository&&this.hint()}catch(e){console.error(`[prb architecture]`,e),kc(n,`The architecture could not be drawn.`)}}async reveal(e){let t=this.parts.repository.architecture.nodes.find(t=>t.id===e);t&&(this.shown!==this.parts.repository&&await this.draw(this.parts.repository),await this.drawing?.showScope(t.parent??null),this.drawing?.select(e),this.parts.canvas.scrollIntoView({block:`nearest`,behavior:`smooth`}))}base(){if(this.shown===this.parts.repository)return[];let{repository:e}=this.parts,t=e.architecture.nodes.find(e=>e.id===this.shown.scope);return[{label:e.architecture.title,go:()=>void this.draw(e,t?.parent??null)},{label:`${t?.name??this.shown.scope} in depth`,go:()=>void this.drawing?.showScope(null)}]}hint(){let{inspector:e}=this.parts,t=[];this.shown!==this.parts.repository&&t.push(...Dc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;Ac(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(M(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=M(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Dc(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(M(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(M(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=M(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=M(`details`,`prb-arch-failure-details`,``),n=M(`ul`,``,``);for(let e of r.errors)n.append(M(`li`,``,e));e.append(M(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Dc(e,t,n){let r=t?[M(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,M(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=M(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[M(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function Oc(e,t,n,r,i=[]){let a=new Map(t.nodes.map(e=>[e.id,e])),o=[...i.length>0?i:[{label:t.title,go:()=>r(null)}],...(n===null?[]:[...Js(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=M(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[M(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function kc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function Ac(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[M(`p`,`prb-arch-kind`,`${_c[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),M(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(M(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=M(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(jc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(M(`h5`,`prb-arch-subhead`,`Relationships`));let e=M(`ul`,`prb-arch-related`,``);for(let t of d)e.append(M(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(M(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=M(`section`,`prb-arch-relationship`,``);n.append(M(`p`,`prb-arch-kind`,`Relationship`),M(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(M(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(M(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(jc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function jc(e,t=[]){let n=M(`div`,`prb-arch-evidence`,``);n.append(M(`h5`,`prb-arch-subhead`,`Evidence`));let r=M(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=M(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=M(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(M(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(M(`span`,`prb-arch-location`,e.path),M(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(M(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(M(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function M(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}var Mc=5e3;function Nc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{h(t,(await(await e.markSeen()).json()).unread)}catch{}},a=async()=>{try{if(r()){let n=await(await e.askUnread()).json();typeof n.here==`number`&&n.here>0&&r()?await i():h(t,n.unread)}}catch{}n.setTimeout(()=>void a(),Mc)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void a(),Mc)}function Pc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Fc=1e3,Ic=new WeakMap;function Lc(e,t){return e.length<=1e3?Pc(e)||`&nbsp;`:`${Pc(e.slice(0,Fc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Rc(e){let t=e.lines.length;return`<tr class="prb-code-deletion" data-before-line="${e.beforeLine}"><td class="prb-code-num"></td><td class="prb-code-line"><button type="button" class="prb-code-deletion-toggle" data-deletion-toggle aria-expanded="false">− ${t} deleted ${t===1?`line`:`lines`}</button></td></tr>`+e.lines.map(e=>`<tr class="prb-code-deleted" hidden><td class="prb-code-num">− ${e.oldLine}</td><td class="prb-code-line">${Lc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function zc(e,t){let n=new Set(e.addedLines),r=new Map;for(let t of e.deletions??[])r.set(t.beforeLine,t);let i=e.lines.map((i,a)=>{let o=e.from+a,s=[n.has(o)?`prb-code-added`:``,o===t?`prb-code-target`:``].filter(Boolean).join(` `),c=r.get(o);return`${c?Rc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Lc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Rc(a)),i.join(``)}function Bc(e){let t=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(t));let n=e.closest(`tr`)?.nextElementSibling;for(;n?.classList.contains(`prb-code-deleted`);)n.hidden=!t,n=n.nextElementSibling}function Vc(e,t){let n=new Map;for(let e of t.deletions??[])for(let t of e.lines)n.set(t.oldLine,t.text);for(let r of e.querySelectorAll(`[data-full-line]`)){let[e,i]=(r.dataset.fullLine??``).split(`:`),a=Number(i),o=e===`old`?n.get(a):t.lines[a-t.from];o!==void 0&&Ic.set(r,o)}}function Hc(e){let t=Ic.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Uc(e){return e.deletion?2*e.line-1:2*e.line}function Wc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Gc(e,t){if(e.length===0)return``;let n=e.map(Uc),r=n.indexOf(t),i=n.some(e=>e<t),a=n.some(e=>e>t),o=e.length,s=r===-1?`${o} ${o===1?`change`:`changes`}`:`${r+1} of ${o}`;return`<span class="prb-code-nav" data-change-navigator data-change-keys="${n.join(`,`)}" data-change-position="${t}">
163
163
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
164
164
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
165
165
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
166
- </span>`}function qc(e,t){let n=(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number),r=Number(e.dataset.changePosition)||0,i=t===`next`?n.find(e=>e>r):[...n].reverse().find(e=>e<r);return i===void 0?null:{key:i,anchor:Gc(i)}}function Jc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Yc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Gc)}function Xc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Gc(t):void 0}function Zc(e,t){return Math.max(e,+!t)+1}var Qc=8;function $c(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)return t}return null}function el(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function tl(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{row:n,offset:e.top-t}}return null}function nl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function rl(e){if(!e.hasAttribute(`data-expanded`))return;let t=$c(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=el({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function il(e){let t=e.querySelector(`[data-code-expand]`),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=e.hasAttribute(`data-expanded`);t.hidden=!r&&n.scrollHeight<=n.clientHeight,t.textContent=r?`Collapse`:`Expand`,t.setAttribute(`aria-expanded`,String(r))}var al=!1;function ol(){al||(al=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))rl(e)}))}function sl(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?tl(n):null;t?(e.setAttribute(`data-expanded`,``),rl(e),ol()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),il(e),n&&r&&nl(n,r);let i=t?$c(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Qc)}var cl={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function ll(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:cl[t.slice(n+1).toLowerCase()]??null}function ul(e){let t=new Set;for(let n of e){let e=ll(n);e&&t.add(e)}return[...t]}var dl={ruby:()=>_(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>_(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>_(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>_(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>_(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>_(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>_(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>_(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>_(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>_(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>_(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>_(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>_(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>_(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>_(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>_(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>_(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>_(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>_(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>_(()=>import(`./chunk-DswuEJGm.js`),[])},fl=`github-light-default`,pl=null,ml=new Map;function hl(){return pl??=Promise.all([_(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),_(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),_(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(_(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),pl}function gl(e){let t=ml.get(e);return t||(t=hl().then(async t=>t?(await t.loadLanguage(dl[e]),!0):!1).catch(()=>!1),ml.set(e,t)),t.then(e=>e?hl():null)}var _l={async preload(e){await gl(e)},async tokenize(e,t){let n=await gl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:fl}),a=i?.toLowerCase();return r.map(e=>e.map(e=>({content:e.content,...e.color&&e.color.toLowerCase()!==a?{color:e.color}:{}})))}catch{return null}}};function vl(e,t=_l){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var yl=/^#[0-9a-f]{3,8}$/i;function bl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&yl.test(e.color)?`<span style="color:${e.color}">${Fc(e.content)}</span>`:Fc(e.content)).join(``)}function xl(e){return e.length>1e3?e.slice(0,Ic):e}function Sl(e,t,n){if(!e||t===``)return;let r=bl(xl(t),n);if(r===null)return;if(t.length<=1e3){if(e.childElementCount!==0||e.textContent!==t)return;e.innerHTML=r;return}let i=e.querySelector(`[data-full-line]`);i&&(e.innerHTML=`${r}… `,e.append(i))}async function Cl(e,t,n=_l){let r=ll(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(xl).join(`
167
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{Sl(i.querySelector(`tr[data-line="${t.from+n}"] .prb-code-line`),e,o[n])});for(let e of t.deletions??[]){if(!i.querySelector(`tr[data-before-line="${e.beforeLine}"]`))continue;let t=await n.tokenize(e.lines.map(e=>xl(e.text)).join(`
168
- `),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;Sl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function wl(e,t=_l){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in dl)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=bl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var M=ie({ownsRestore:!0}),Tl=document.body,El=Tl.dataset.apiBase??``,Dl=Tl.dataset.token??``,Ol=Tl.dataset.editorLabel??``,kl=Tl.dataset.editorTemplate??``,Al=Tl.dataset.repoPath??``,jl=Tl.dataset.explainPrompt??``,Ml=Tl.dataset.sessionId??``;function N(e){return`${El}${e}?t=${encodeURIComponent(Dl)}`}var Nl=!1,Pl=0,Fl=!1;function Il(e){Pl++;try{e()}finally{Pl--}}var Ll=Ir(document.querySelector(`.prb-body`)?.dataset.reviewLayout),Rl=Lr(Ll,e=>{fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>Nl&&Pl===0);function P(e){fetch(N(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var zl=Ao({endpoint:N,showDiagrams:()=>L(`diagram`),showMap:()=>L(`map`),showChangeMap:e=>Bl.show(e)}),Bl=As({endpoint:N,showView:e=>L(e)}),Vl=bc({endpoint:N}),Hl=null,Ul=`the whole change`;function Wl(e){let t=vr(e,ql),n=M.push(pr(t),t);Gl++,Jl(t),n&&Kl(t)}var Gl=0;function Kl(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&o(document,t)}var F=null,ql=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Jl(t){let n=vr(t,ql);if(n!==t){let{kind:t,view:r,focus:i,...a}=e(history.state);M.replace(pr(n),{...a,...n})}let r=!F||!Tr(F,n);F=n,r&&(n.kind===`view`?$l(n.view):ru(n.sectionId)),Xl(n.focus??null)}var Yl={history:{get state(){return history.state},pushState:(t,n,r)=>{Gl++,M.push(r,e(t))},replaceState:(t,n,r)=>M.replace(r,e(t)),back:()=>{Fl=!0,history.back()}},apply:Jl},I=ue(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Td(e):Ed(e),onClose:Ed});tr(document,{post:async e=>{let t=await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reassessment:e})});return{status:t.status,body:await t.json().catch(()=>null)}},closeMenu:e=>I.close(e)});function Xl(e){kr(document.querySelector(`.prb-body`),document,e),Rl.focus(e),I.closeAll(),e===`buddy`&&Wu()}function Zl(e){F&&(F.focus===e?Dr(F,Yl):Er(F,e,Yl))}function L(e,t={}){let n=t.keepFocus&&F?.focus?e:hr(e,F?.focus);Wl({kind:`view`,view:e,...n?{focus:n}:{}})}function Ql(e){Wl({kind:`section`,sectionId:e,...F?.focus===`guide`?{focus:`guide`}:{}})}function $l(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]:not([role="tab"])`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e||(t.dataset.viewAlso??``).split(` `).includes(e)));e!==`architecture`&&P({event:`view_opened`,view:e}),e===`diagram`&&zl.drawPane(),e===`map`&&Bl.layout(),e===`architecture`&&Vl.show(),eu(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function eu(){oi(),Hl=null,Ul=`the whole change`,iu()}function tu(e,t){let n=document.getElementById(e.getAttribute(`aria-controls`)??``);n&&(e.setAttribute(`aria-expanded`,String(t)),e.setAttribute(`aria-label`,`${t?`Collapse`:`Expand`} ${e.dataset.railToggle??`this section`}`),n.hidden=!t,Rl.fold(n.id,t))}function nu(){for(let e of document.querySelectorAll(`[data-rail-toggle]`)){let t=document.getElementById(e.getAttribute(`aria-controls`)??``);(t?.contains(document.getElementById(`prb-rail-path`))||t?.id===`prb-rail-path`)&&tu(e,!0)}}function ru(e){$l(`guide`),nu(),ai(e);let t=ri(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);P({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),Hl=e,Ul=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,iu()}function iu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Ul)}function R(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function au(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function ou(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;if(t?.classList.contains(`prb-code`)){t.remove(),e.setAttribute(`aria-expanded`,`false`);return}let n=e.dataset.file;if(!n)return;let r=Number(e.dataset.line)||0,i=e.tagName!==`LI`,a=document.createElement(`div`);a.className=`prb-code`,a.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:o,position:s}=au(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),P({event:`file_opened`,fromFinding:i,targeted:r>0}),await cu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var su=hi();function cu(e,t,n){return su.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${N(`/file`)}${a}`),s=await o.json();return o.ok?()=>lu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${R(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function lu(e,t,n){let{cited:r,centre:i,expand:a}=n;e.dataset.cited=String(r),e.dataset.centre=String(i),e.dataset.expand=String(a),e.dataset.position=String(n.position);let o=Bc(t,r),s=kl&&Al?t.checkout===`absent`?`<button type="button" class="prb-code-open" disabled>Not in your working folder</button>`:`<button type="button" class="prb-code-open" data-open-editor="${R(t.path)}" data-open-line="${r||t.from}">${R(`Open in ${Ol||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${R(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${R(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${R(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Zc(a,i)}">Show more of this file</button>`:``,u=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,d=t.changes===`unavailable`?` · change details unavailable`:``,f=`<div class="prb-code-source"><span>${t.source===`commit`?`Viewing reviewed version${t.sourceSha?` <code>${R(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Kc(t.changeAnchors??[],n.position)}</div>`,ee=e.hasAttribute(`data-expanded`),p=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${ee}">${ee?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
166
+ </span>`}function Kc(e,t){let n=(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number),r=Number(e.dataset.changePosition)||0,i=t===`next`?n.find(e=>e>r):[...n].reverse().find(e=>e<r);return i===void 0?null:{key:i,anchor:Wc(i)}}function qc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Jc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Wc)}function Yc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Wc(t):void 0}function Xc(e,t){return Math.max(e,+!t)+1}var Zc=8;function Qc(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)return t}return null}function $c(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function el(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{row:n,offset:e.top-t}}return null}function tl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function nl(e){if(!e.hasAttribute(`data-expanded`))return;let t=Qc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=$c({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function rl(e){let t=e.querySelector(`[data-code-expand]`),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=e.hasAttribute(`data-expanded`);t.hidden=!r&&n.scrollHeight<=n.clientHeight,t.textContent=r?`Collapse`:`Expand`,t.setAttribute(`aria-expanded`,String(r))}var il=!1;function al(){il||(il=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))nl(e)}))}function ol(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?el(n):null;t?(e.setAttribute(`data-expanded`,``),nl(e),al()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),rl(e),n&&r&&tl(n,r);let i=t?Qc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Zc)}var sl={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function cl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:sl[t.slice(n+1).toLowerCase()]??null}function ll(e){let t=new Set;for(let n of e){let e=cl(n);e&&t.add(e)}return[...t]}var ul={ruby:()=>y(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>y(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>y(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>y(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>y(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>y(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>y(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>y(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>y(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>y(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>y(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>y(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>y(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>y(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>y(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>y(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>y(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>y(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>y(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>y(()=>import(`./chunk-DswuEJGm.js`),[])},dl=`github-light-default`,fl=null,pl=new Map;function ml(){return fl??=Promise.all([y(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),y(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),y(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(y(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),fl}function hl(e){let t=pl.get(e);return t||(t=ml().then(async t=>t?(await t.loadLanguage(ul[e]),!0):!1).catch(()=>!1),pl.set(e,t)),t.then(e=>e?ml():null)}var gl={async preload(e){await hl(e)},async tokenize(e,t){let n=await hl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:dl}),a=i?.toLowerCase();return r.map(e=>e.map(e=>({content:e.content,...e.color&&e.color.toLowerCase()!==a?{color:e.color}:{}})))}catch{return null}}};function _l(e,t=gl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var vl=/^#[0-9a-f]{3,8}$/i;function yl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&vl.test(e.color)?`<span style="color:${e.color}">${Pc(e.content)}</span>`:Pc(e.content)).join(``)}function bl(e){return e.length>1e3?e.slice(0,Fc):e}function xl(e,t,n){if(!e||t===``)return;let r=yl(bl(t),n);if(r===null)return;if(t.length<=1e3){if(e.childElementCount!==0||e.textContent!==t)return;e.innerHTML=r;return}let i=e.querySelector(`[data-full-line]`);i&&(e.innerHTML=`${r}… `,e.append(i))}async function Sl(e,t,n=gl){let r=cl(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(bl).join(`
167
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{xl(i.querySelector(`tr[data-line="${t.from+n}"] .prb-code-line`),e,o[n])});for(let e of t.deletions??[]){if(!i.querySelector(`tr[data-before-line="${e.beforeLine}"]`))continue;let t=await n.tokenize(e.lines.map(e=>bl(e.text)).join(`
168
+ `),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;xl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Cl(e,t=gl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in ul)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=yl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var N=g({ownsRestore:!0}),wl=document.body,Tl=wl.dataset.apiBase??``,El=wl.dataset.token??``,Dl=wl.dataset.editorLabel??``,Ol=wl.dataset.editorTemplate??``,kl=wl.dataset.repoPath??``,Al=wl.dataset.explainPrompt??``,jl=wl.dataset.sessionId??``;function P(e){return`${Tl}${e}?t=${encodeURIComponent(El)}`}var Ml=!1,Nl=0,Pl=!1;function Fl(e){Nl++;try{e()}finally{Nl--}}var Il=Nr(document.querySelector(`.prb-body`)?.dataset.reviewLayout),Ll=Pr(Il,e=>{fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>Ml&&Nl===0);function Rl(e){fetch(P(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var zl=Do({endpoint:P,showDiagrams:()=>L(`diagram`),showMap:()=>L(`map`),showChangeMap:e=>Bl.show(e)}),Bl=Ds({endpoint:P,showView:e=>L(e)}),Vl=yc({endpoint:P}),Hl=null,Ul=`the whole change`;function Wl(e){let t=hr(e,ql),n=N.push(w(t),t);Gl++,Jl(t),n&&Kl(t)}var Gl=0;function Kl(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&ne(document,t)}var F=null,ql=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Jl(e){let t=hr(e,ql);if(t!==e){let{kind:e,view:n,focus:r,...i}=m(history.state);N.replace(w(t),{...i,...t})}let n=!F||!Sr(F,t);F=t,n&&(t.kind===`view`?$l(t.view):ru(t.sectionId)),Xl(t.focus??null)}var Yl={history:{get state(){return history.state},pushState:(e,t,n)=>{Gl++,N.push(n,m(e))},replaceState:(e,t,n)=>N.replace(n,m(e)),back:()=>{Pl=!0,history.back()}},apply:Jl},I=ce(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Td(e):Ed(e),onClose:Ed});$n(document,{post:async e=>{let t=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reassessment:e})});return{status:t.status,body:await t.json().catch(()=>null)}},closeMenu:e=>I.close(e)});function Xl(e){Er(document.querySelector(`.prb-body`),document,e),Ll.focus(e),I.closeAll(),e===`buddy`&&Wu()}function Zl(e){F&&(F.focus===e?wr(F,Yl):Cr(F,e,Yl))}function L(e,t={}){let n=t.keepFocus&&F?.focus?e:fr(e,F?.focus);Wl({kind:`view`,view:e,...n?{focus:n}:{}})}function Ql(e){Wl({kind:`section`,sectionId:e,...F?.focus===`guide`?{focus:`guide`}:{}})}function $l(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]:not([role="tab"])`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e||(t.dataset.viewAlso??``).split(` `).includes(e)));e!==`architecture`&&Rl({event:`view_opened`,view:e}),e===`diagram`&&zl.drawPane(),e===`map`&&Bl.layout(),e===`architecture`&&Vl.show(),eu(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function eu(){ri(),Hl=null,Ul=`the whole change`,iu()}function tu(e,t){let n=document.getElementById(e.getAttribute(`aria-controls`)??``);n&&(e.setAttribute(`aria-expanded`,String(t)),e.setAttribute(`aria-label`,`${t?`Collapse`:`Expand`} ${e.dataset.railToggle??`this section`}`),n.hidden=!t,Ll.fold(n.id,t))}function nu(){for(let e of document.querySelectorAll(`[data-rail-toggle]`)){let t=document.getElementById(e.getAttribute(`aria-controls`)??``);(t?.contains(document.getElementById(`prb-rail-path`))||t?.id===`prb-rail-path`)&&tu(e,!0)}}function ru(e){$l(`guide`),nu(),ni(e);let t=ei(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);Rl({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),Hl=e,Ul=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,iu()}function iu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Ul)}function R(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function au(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function ou(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;if(t?.classList.contains(`prb-code`)){t.remove(),e.setAttribute(`aria-expanded`,`false`);return}let n=e.dataset.file;if(!n)return;let r=Number(e.dataset.line)||0,i=e.tagName!==`LI`,a=document.createElement(`div`);a.className=`prb-code`,a.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:o,position:s}=au(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),Rl({event:`file_opened`,fromFinding:i,targeted:r>0}),await cu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var su=fi();function cu(e,t,n){return su.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${P(`/file`)}${a}`),s=await o.json();return o.ok?()=>lu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${R(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function lu(e,t,n){let{cited:r,centre:i,expand:a}=n;e.dataset.cited=String(r),e.dataset.centre=String(i),e.dataset.expand=String(a),e.dataset.position=String(n.position);let o=zc(t,r),s=Ol&&kl?t.checkout===`absent`?`<button type="button" class="prb-code-open" disabled>Not in your working folder</button>`:`<button type="button" class="prb-code-open" data-open-editor="${R(t.path)}" data-open-line="${r||t.from}">${R(`Open in ${Dl||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${R(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${R(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${R(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Xc(a,i)}">Show more of this file</button>`:``,u=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,d=t.changes===`unavailable`?` · change details unavailable`:``,f=`<div class="prb-code-source"><span>${t.source===`commit`?`Viewing reviewed version${t.sourceSha?` <code>${R(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Gc(t.changeAnchors??[],n.position)}</div>`,ee=e.hasAttribute(`data-expanded`),p=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${ee}">${ee?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
169
169
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
170
170
  ${c}
171
171
  ${s}
@@ -173,7 +173,7 @@ import{$ as e,A as t,B as n,G as r,H as i,J as a,K as o,M as s,N as c,Q as l,U a
173
173
  </div>
174
174
  ${f}
175
175
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
176
- ${l}`,Hc(e,t),rl(e),il(e),(n.focus?Jc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Cl(e,t)}async function uu(e,t,n){let r=qc(t,n);if(!r)return;let i=Jc(e,r.anchor);if(i)t.outerHTML=Kc(Yc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await cu(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function du(e,t,n){let r=`${Al.replace(/\/$/,``)}/${e}`,i=kl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&P({event:`editor_opened`,fromFinding:n}),window.location.href=i}var z=document.querySelector(`[data-ask-log]`);z&&z.querySelector(`.prb-msg`)&&z.scrollTo({top:z.scrollHeight});var fu=document.querySelector(`[data-ask-form]`),B=fu?.querySelector(`textarea`);function pu(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=Ye(t)+xt(t)):n.textContent=t,z?.appendChild(n),z?.scrollTo({top:z.scrollHeight}),n}function mu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight}),e}var V=null,H=!!z?.querySelector(`[data-ask-pending]`);function hu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight})}async function gu(e,t=`free_text`,n={}){let r=e.trim();if(!r||V||H)return;document.querySelector(`.prb-ask-empty`)?.remove(),pu(`user`,r);let i=mu();V=new AbortController,vu(!0);try{let e=await fetch(N(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:Hl,source:t,...n}),signal:V.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){_u(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){hu();return}if(!e.ok||!a?.answer){pu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}pu(`assistant`,a.answer),a.explanation&&Un(document,a.explanation),a.reassessment?.card&&qn(document,a.reassessment.card)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(hu(),_u(r,n.continuesExplanation)):(pu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),_u(r,n.continuesExplanation))}finally{V=null,vu(!1)}}function _u(e,t){!B||B.value||(B.value=e,qf?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},qf?.stage(U)))}function vu(e){let t=fu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(yu))t.disabled=e;e&&I.closeAll(),e||B?.focus()}var yu=`[data-suggestion], .pr-helper-explain-simply-button`;function bu(){let e=fu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(N(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{V?.abort()})}fu?.addEventListener(`submit`,e=>{if(e.preventDefault(),V||H)return bu();let t=B?.value??``;B&&(B.value=``),qf?.clear();let n=Gn(U,t);gu(t,xu(t),n?{continuesExplanation:n}:{})}),H&&vu(!0);var U=null;function xu(e){return U&&e.includes(U.text)?U.source:`free_text`}B?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),V||H)return;fu?.requestSubmit()}}),B?.addEventListener(`input`,()=>{B&&(B.style.height=`auto`,B.style.height=`${Math.min(B.scrollHeight,140)}px`)});async function Su(e){try{await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Cu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function wu(e,t){e.dataset.answered=String(t),e.textContent=t?`Mark as unanswered`:`Mark answered`;let n=e.closest(`[data-finding-card]`);n?.classList.toggle(`pr-helper-question-card-answered`,t),n&&Au(n,t,`questions`),Iu()}function Tu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Ml})).filter(e=>e.id)}async function Eu(e){try{await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Du(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Ml:delete e.dataset.dismissedIn;let n=e.closest(`[data-finding-card]`);n&&(n.classList.toggle(`pr-helper-issue-card-dismissed`,t),n.querySelector(`.pr-helper-dismissal-stale`)?.remove(),n.querySelector(`.pr-helper-finding-status-dismissed`)?.remove(),t&&n.querySelector(`.pr-helper-issue-badges`)?.prepend(Ou()),Au(n,t||e.dataset.settled===`true`,`issues`),Ru())}function Ou(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=kn,e.textContent=`Dismissed by you`,e}var ku=new WeakMap;function Au(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&ku.set(e,{parent:t,before:e.nextElementSibling}),Pu(n).append(e),t&&Nu(t)}else ju(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Fu(n)}}function ju(e,t){let n=ku.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Mu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Mu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Nu(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Pu(e){let t=document.querySelector(`[data-view="${e}"]`),n=t?.querySelector(`[data-closed-findings="${e}"] .pr-helper-closed-findings-list`);if(n)return n;let r=document.createElement(`details`);r.className=`pr-helper-closed-findings`,r.dataset.closedFindings=e;let i=document.createElement(`summary`);i.className=`pr-helper-closed-findings-summary`,i.setAttribute(`data-closed-findings-summary`,``);let a=document.createElement(`div`);return a.className=`pr-helper-closed-findings-list`,r.append(i,a),t?.append(r),a}function Fu(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:ti(Lu()),Jn(document)}function Iu(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=ni(e.length,t)),zu(`questions`,e.length,t,`question`,`answered`)}function Lu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0;for(let i of e){let e=i.dataset.settled===`true`,a=i.dataset.dismissed===`true`&&i.dataset.stale!==`true`;!e&&!a?t+=1:!e&&a&&(n+=1),e&&i.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{}}}function Ru(){let e=Lu();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`),n=t?.querySelector(`.pr-helper-findings-progress`);!n&&t&&e.done>0&&(n=document.createElement(`div`),n.className=`pr-helper-findings-progress`,n.setAttribute(`role`,`status`),t.querySelector(`.prb-doc-title`)?.after(n)),n&&(n.innerHTML=ei(e.total,e.open,Br(e))),zu(`issues`,e.total,e.open,`issue`,Br(e))}function zu(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){tu(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!ee(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){L(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){qr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Qr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){L(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Ql(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){du(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){Vc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&sl(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&uu(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let p=t.closest(`[data-full-line]`);if(p){let e=Uc(p);e&&wl(e);return}let m=t.closest(`[data-expand-file]`);if(m?.dataset.expandFile){let e=m.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);cu(e,m.dataset.expandFile,{cited:Number(m.dataset.expandCited)||0,centre:Number(m.dataset.expandLine)||0,expand:Number(m.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Xc(t)})}return}let h=t.closest(`[data-focus-toggle]`);if(h?.dataset.focusToggle){Zl(h.dataset.focusToggle);return}let te=t.closest(`[data-prompt-toggle]`);if(te){pd(te.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let ne=t.closest(`[data-file]`);if(ne?.dataset.file){ou(ne);return}let re=ii(t);if(re){Ql(re);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){wu(ie,ie.dataset.answered!==`true`),Ur(ie);let e=Cu();Su(e),P({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){Du(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Tu();Eu(e),P({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ae=t.closest(`[data-suggestion]`);if(ae){gu(ae.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Wu(),gu(jl,`explain_simply`);return}let oe=t.closest(`[data-prompt-use]`);if(oe?.dataset.promptUse){md(oe.dataset.promptUse);return}let se=t.closest(`[data-prompt-edit]`);if(se?.dataset.promptEdit){Fd(se.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Fd(``);return}if(t.closest(`[data-ask-toggle]`)){let e=F?.focus;e?(Dr(F,Yl),Hu(e!==`buddy`)):Hu(!Vu())}});var W=document.querySelector(`.prb-body`),Bu=document.querySelector(`.prb-ask`);function Vu(){return!!Bu&&getComputedStyle(Bu).display!==`none`}function Hu(e){W&&(W.dataset.ask=e?`open`:`closed`),Uu(e),Rl.ask(e)}function Uu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Wu(){F?.focus&&F.focus!==`buddy`&&Dr(F,Yl),Hu(!0)}function Gu(){Uu(Vu())}window.addEventListener(`resize`,Gu),ae(N(`/restart`));var Ku=document.querySelector(`[data-file-filter]`),qu=document.querySelector(`[data-file-count]`),Ju=document.querySelector(`[data-file-none]`);function Yu(){let e=(Ku?.value??``).trim().toLowerCase(),t=0,n=0;for(let r of document.querySelectorAll(`[data-view="files"] .prb-file`)){let i=e===``||(r.dataset.search??``).includes(e);r.hidden=!i,i&&(n+=1,r.classList.contains(`prb-file-referenced`)||(t+=1));let a=r.nextElementSibling;a?.classList.contains(`prb-code`)&&(a.hidden=!i)}for(let t of document.querySelectorAll(`[data-file-group]`)){let n=t.querySelectorAll(`.prb-file:not([hidden])`).length;t.hidden=n===0;let r=t.querySelector(`[data-group-heading]`);if(!r)continue;let i=Number(r.dataset.groupTotal)||0;r.textContent=e&&n!==i?`${r.dataset.groupHeading} · ${n} of ${i}`:`${r.dataset.groupHeading} · ${i}`}Ju&&(Ju.hidden=n>0),qu&&(qu.textContent=e?`${t} of ${Xu} file${Xu===1?``:`s`}`:`${Xu} file${Xu===1?``:`s`}`)}var Xu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Ku?.addEventListener(`input`,Yu),Ku?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Ku.value!==``&&(e.preventDefault(),Ku.value=``,Yu())}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target,n=t.closest(`.prb-file[data-file][role="button"]`);!n||n!==t||(e.preventDefault(),ou(n))});var Zu=320,Qu=()=>Math.round(window.innerWidth/2),$u=e=>Math.round(Math.min(Qu(),Math.max(Zu,e)));function ed(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function td(){return Bu?Math.round(Bu.getBoundingClientRect().width):Zu}function nd(e){fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!W||!Bu)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=td(),r=e=>{ed($u(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,nd(td())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=$u(td()+n);ed(r),nd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),ed(null),nd(null))}),G?.addEventListener(`dblclick`,()=>{ed(null),nd(null)}),window.addEventListener(`resize`,()=>{Vu()&&W?.style.getPropertyValue(`--ask-width`)&&ed($u(td()))});var rd=3e4,id=document.visibilityState===`visible`?Date.now():null,ad=0;function od(){id!==null&&(ad+=Date.now()-id,id=Date.now())}function sd(){od();let e=Math.round(ad/1e3);return ad-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?id=Date.now():(od(),id=null)}),setInterval(()=>{let e=sd();e>0&&P({event:`workspace_heartbeat`,visibleSeconds:e})},rd),window.addEventListener(`pagehide`,()=>{let e=N(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:sd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var cd=document.querySelector(`[data-prompt-bank]`),ld=document.querySelector(`[data-prompt-list]`),K=ud();function ud(){try{let e=JSON.parse(cd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function dd(){if(!ld)return;ld.innerHTML=K.map(e=>`<span class="prb-bank-item">
176
+ ${l}`,Vc(e,t),nl(e),rl(e),(n.focus?qc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Sl(e,t)}async function uu(e,t,n){let r=Kc(t,n);if(!r)return;let i=qc(e,r.anchor);if(i)t.outerHTML=Gc(Jc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await cu(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function du(e,t,n){let r=`${kl.replace(/\/$/,``)}/${e}`,i=Ol.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Rl({event:`editor_opened`,fromFinding:n}),window.location.href=i}var z=document.querySelector(`[data-ask-log]`);z&&z.querySelector(`.prb-msg`)&&z.scrollTo({top:z.scrollHeight});var fu=document.querySelector(`[data-ask-form]`),B=fu?.querySelector(`textarea`);function pu(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=qe(t)+yt(t)):n.textContent=t,z?.appendChild(n),z?.scrollTo({top:z.scrollHeight}),n}function mu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight}),e}var V=null,H=!!z?.querySelector(`[data-ask-pending]`);function hu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight})}async function gu(e,t=`free_text`,n={}){let r=e.trim();if(!r||V||H)return;document.querySelector(`.prb-ask-empty`)?.remove(),pu(`user`,r);let i=mu();V=new AbortController,vu(!0);try{let e=await fetch(P(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:Hl,source:t,...n}),signal:V.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){_u(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){hu();return}if(!e.ok||!a?.answer){pu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}pu(`assistant`,a.answer),a.explanation&&Vn(document,a.explanation),a.reassessment?.card&&Gn(document,a.reassessment.card)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(hu(),_u(r,n.continuesExplanation)):(pu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),_u(r,n.continuesExplanation))}finally{V=null,vu(!1)}}function _u(e,t){!B||B.value||(B.value=e,qf?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},qf?.stage(U)))}function vu(e){let t=fu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(yu))t.disabled=e;e&&I.closeAll(),e||B?.focus()}var yu=`[data-suggestion], .pr-helper-explain-simply-button`;function bu(){let e=fu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(P(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{V?.abort()})}fu?.addEventListener(`submit`,e=>{if(e.preventDefault(),V||H)return bu();let t=B?.value??``;B&&(B.value=``),qf?.clear();let n=Un(U,t);gu(t,xu(t),n?{continuesExplanation:n}:{})}),H&&vu(!0);var U=null;function xu(e){return U&&e.includes(U.text)?U.source:`free_text`}B?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),V||H)return;fu?.requestSubmit()}}),B?.addEventListener(`input`,()=>{B&&(B.style.height=`auto`,B.style.height=`${Math.min(B.scrollHeight,140)}px`)});async function Su(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Cu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function wu(e,t){e.dataset.answered=String(t),e.textContent=t?`Mark as unanswered`:`Mark answered`;let n=e.closest(`[data-finding-card]`);n?.classList.toggle(`pr-helper-question-card-answered`,t),n&&Au(n,t,`questions`),Iu()}function Tu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||jl})).filter(e=>e.id)}async function Eu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Du(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=jl:delete e.dataset.dismissedIn;let n=e.closest(`[data-finding-card]`);n&&(n.classList.toggle(`pr-helper-issue-card-dismissed`,t),n.querySelector(`.pr-helper-dismissal-stale`)?.remove(),n.querySelector(`.pr-helper-finding-status-dismissed`)?.remove(),t&&n.querySelector(`.pr-helper-issue-badges`)?.prepend(Ou()),Au(n,t||e.dataset.settled===`true`,`issues`),Ru())}function Ou(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Dn,e.textContent=`Dismissed by you`,e}var ku=new WeakMap;function Au(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&ku.set(e,{parent:t,before:e.nextElementSibling}),Pu(n).append(e),t&&Nu(t)}else ju(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Fu(n)}}function ju(e,t){let n=ku.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Mu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Mu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Nu(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Pu(e){let t=document.querySelector(`[data-view="${e}"]`),n=t?.querySelector(`[data-closed-findings="${e}"] .pr-helper-closed-findings-list`);if(n)return n;let r=document.createElement(`details`);r.className=`pr-helper-closed-findings`,r.dataset.closedFindings=e;let i=document.createElement(`summary`);i.className=`pr-helper-closed-findings-summary`,i.setAttribute(`data-closed-findings-summary`,``);let a=document.createElement(`div`);return a.className=`pr-helper-closed-findings-list`,r.append(i,a),t?.append(r),a}function Fu(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:Qr(Lu()),Kn(document)}function Iu(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=$r(e.length,t)),zu(`questions`,e.length,t,`question`,`answered`)}function Lu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0;for(let i of e){let e=i.dataset.settled===`true`,a=i.dataset.dismissed===`true`&&i.dataset.stale!==`true`;!e&&!a?t+=1:!e&&a&&(n+=1),e&&i.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{}}}function Ru(){let e=Lu();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`),n=t?.querySelector(`.pr-helper-findings-progress`);!n&&t&&e.done>0&&(n=document.createElement(`div`),n.className=`pr-helper-findings-progress`,n.setAttribute(`role`,`status`),t.querySelector(`.prb-doc-title`)?.after(n)),n&&(n.innerHTML=Zr(e.total,e.open,Lr(e))),zu(`issues`,e.total,e.open,`issue`,Lr(e))}function zu(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){tu(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!re(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){L(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Wr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Yr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){L(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Ql(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){du(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){Bc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&ol(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&uu(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let ee=t.closest(`[data-full-line]`);if(ee){let e=Hc(ee);e&&Cl(e);return}let p=t.closest(`[data-expand-file]`);if(p?.dataset.expandFile){let e=p.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);cu(e,p.dataset.expandFile,{cited:Number(p.dataset.expandCited)||0,centre:Number(p.dataset.expandLine)||0,expand:Number(p.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Yc(t)})}return}let te=t.closest(`[data-focus-toggle]`);if(te?.dataset.focusToggle){Zl(te.dataset.focusToggle);return}let m=t.closest(`[data-prompt-toggle]`);if(m){pd(m.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let ne=t.closest(`[data-file]`);if(ne?.dataset.file){ou(ne);return}let h=ti(t);if(h){Ql(h);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){wu(ie,ie.dataset.answered!==`true`),Br(ie);let e=Cu();Su(e),Rl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){Du(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Tu();Eu(e),Rl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let _=t.closest(`[data-suggestion]`);if(_){gu(_.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Wu(),gu(Al,`explain_simply`);return}let ae=t.closest(`[data-prompt-use]`);if(ae?.dataset.promptUse){md(ae.dataset.promptUse);return}let v=t.closest(`[data-prompt-edit]`);if(v?.dataset.promptEdit){Fd(v.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Fd(``);return}if(t.closest(`[data-ask-toggle]`)){let e=F?.focus;e?(wr(F,Yl),Hu(e!==`buddy`)):Hu(!Vu())}});var W=document.querySelector(`.prb-body`),Bu=document.querySelector(`.prb-ask`);function Vu(){return!!Bu&&getComputedStyle(Bu).display!==`none`}function Hu(e){W&&(W.dataset.ask=e?`open`:`closed`),Uu(e),Ll.ask(e)}function Uu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Wu(){F?.focus&&F.focus!==`buddy`&&wr(F,Yl),Hu(!0)}function Gu(){Uu(Vu())}window.addEventListener(`resize`,Gu),ae(P(`/restart`));var Ku=document.querySelector(`[data-file-filter]`),qu=document.querySelector(`[data-file-count]`),Ju=document.querySelector(`[data-file-none]`);function Yu(){let e=(Ku?.value??``).trim().toLowerCase(),t=0,n=0;for(let r of document.querySelectorAll(`[data-view="files"] .prb-file`)){let i=e===``||(r.dataset.search??``).includes(e);r.hidden=!i,i&&(n+=1,r.classList.contains(`prb-file-referenced`)||(t+=1));let a=r.nextElementSibling;a?.classList.contains(`prb-code`)&&(a.hidden=!i)}for(let t of document.querySelectorAll(`[data-file-group]`)){let n=t.querySelectorAll(`.prb-file:not([hidden])`).length;t.hidden=n===0;let r=t.querySelector(`[data-group-heading]`);if(!r)continue;let i=Number(r.dataset.groupTotal)||0;r.textContent=e&&n!==i?`${r.dataset.groupHeading} · ${n} of ${i}`:`${r.dataset.groupHeading} · ${i}`}Ju&&(Ju.hidden=n>0),qu&&(qu.textContent=e?`${t} of ${Xu} file${Xu===1?``:`s`}`:`${Xu} file${Xu===1?``:`s`}`)}var Xu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Ku?.addEventListener(`input`,Yu),Ku?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Ku.value!==``&&(e.preventDefault(),Ku.value=``,Yu())}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target,n=t.closest(`.prb-file[data-file][role="button"]`);!n||n!==t||(e.preventDefault(),ou(n))});var Zu=320,Qu=()=>Math.round(window.innerWidth/2),$u=e=>Math.round(Math.min(Qu(),Math.max(Zu,e)));function ed(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function td(){return Bu?Math.round(Bu.getBoundingClientRect().width):Zu}function nd(e){fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!W||!Bu)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=td(),r=e=>{ed($u(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,nd(td())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=$u(td()+n);ed(r),nd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),ed(null),nd(null))}),G?.addEventListener(`dblclick`,()=>{ed(null),nd(null)}),window.addEventListener(`resize`,()=>{Vu()&&W?.style.getPropertyValue(`--ask-width`)&&ed($u(td()))});var rd=3e4,id=document.visibilityState===`visible`?Date.now():null,ad=0;function od(){id!==null&&(ad+=Date.now()-id,id=Date.now())}function sd(){od();let e=Math.round(ad/1e3);return ad-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?id=Date.now():(od(),id=null)}),setInterval(()=>{let e=sd();e>0&&Rl({event:`workspace_heartbeat`,visibleSeconds:e})},rd),window.addEventListener(`pagehide`,()=>{let e=P(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:sd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var cd=document.querySelector(`[data-prompt-bank]`),ld=document.querySelector(`[data-prompt-list]`),K=ud();function ud(){try{let e=JSON.parse(cd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function dd(){if(!ld)return;ld.innerHTML=K.map(e=>`<span class="prb-bank-item">
177
177
  <button type="button" class="prb-bank-use" data-prompt-use="${R(e.id)}" title="${R(e.prompt)}">${R(e.name)}</button>
178
178
  <button type="button" class="prb-bank-edit" data-prompt-edit="${R(e.id)}" aria-label="Edit ${R(e.name)}">&#9998;</button>
179
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Sd()}async function fd(e){try{let t=await(await fetch(N(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}dd()}function pd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),cd?.toggleAttribute(`data-collapsed`,e),ld&&(ld.hidden=e),fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function md(e){let t=K.find(t=>t.id===e);!t||!B||(B.value=si(B.value,t.prompt),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}var hd=document.querySelector(`.prb-doc`),gd=null,_d=null;function vd(){z&&(_d?.(),_d=xn(z,{layout:`flat`,actions:wn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Cd(e,`selection`,t)}))}var yd=`reassess`;function bd(e){let t=xd();if(!e)return t;let n={id:yd,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function xd(){return[...Sn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:ar(e.id),label:e.name,section:ir}))]}function Sd(){hd&&(gd?.(),gd=xn(hd,{triggerLabel:`Ask Buddy AI`,actions:xd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Cd(e,`selection`,t)}))}function Cd(e,t,n,r){zr(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>wd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Wu(),gu(t,`finding`,Bn(e,r?.ref))}})}function wd(e,t,n){B&&(U={text:e,source:t,...n?{continues:n}:{}},qf?.stage(U),B.value=si(B.value,e),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}function Td(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=dn(bd(Hn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(V||H)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Ed(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=On(n),a=Hn(n);if(I.close(n),r===yd){i&&a&&Dd(a,i);return}i&&Cd(r,`finding`,i,a?{ref:a}:void 0)});function Dd(e,t){if(V||H)return;let n=e.kind===`issue`?`severity`:`importance`;Wu(),gu(`${En(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?nr(t):null;n&&wd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Vn(t),r=On(t);n&&r&&Cd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Sd(),vd();var q=Ya({root:document,showView:e=>L(e)}),Od=io({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>I.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});Pt(document),Jt(document);var kd=document.querySelector(`[data-prompt-dialog]`),Ad=document.querySelector(`[data-prompt-name]`),jd=document.querySelector(`[data-prompt-text]`),Md=document.querySelector(`[data-prompt-delete]`),Nd=document.getElementById(`prb-prompt-title`),Pd=``;function Fd(e){let t=K.find(t=>t.id===e);Pd=t?.id??``,Nd&&(Nd.textContent=t?`Edit prompt`:`Save a prompt`),Ad&&(Ad.value=t?.name??``),jd&&(jd.value=t?.prompt??``),Md&&(Md.hidden=!t),kd?.showModal(),Ad?.focus()}async function Id(){let e=Ad?.value.trim()??``,t=jd?.value.trim()??``;if(!e||!t){(e?jd:Ad)?.focus();return}let n=Pd?K.map(n=>n.id===Pd?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];kd?.close(),await fd(n)}async function Ld(){if(!Pd)return;let e=K.filter(e=>e.id!==Pd);kd?.close(),await fd(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>kd?.close()),Md?.addEventListener(`click`,()=>void Ld()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Id());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),Rd=document.querySelector(`[data-fresh-check]`),X=Yd(J?.dataset.report),zd=`prb-fresh-reopen`,Bd=Gd(),Vd=J?.dataset.dismissedSha,Hd=Wd(J?.dataset.availability),Z=Ud(J?.dataset.remote);function Ud(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Wd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Gd(){try{return sessionStorage.getItem(zd)!==null&&(sessionStorage.removeItem(zd),!0)}catch{return!1}}Bd&&pf(),Rd?.addEventListener(`click`,()=>void $d());var Kd=document.querySelector(`[data-fetch-remote]`);Kd&&(fetch(N(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Kd.hidden=!1)}).catch(()=>{}),Kd.addEventListener(`click`,()=>void qd(Kd)));async function qd(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(N(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};g(m(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:ce(n)}),n.fetched>0&&await $d()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Bd=!1,pf();let n=t.closest(`[data-fresh-dismiss]`);n&&(Vd=n.dataset.freshDismiss||void 0,Bd=!1,pf(),Jd())});function Jd(){fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Vd??null})}).catch(()=>{})}function Yd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Xd=Pa(),Zd=!1,Qd=null;async function $d(){if(Zd)return;Zd=!0,of(!0),Qd&&await Qd;let e=sf(X,Z),t=await tf(!1);of(!1),t&&ff(),Zd=!1,t&&(X?.code.state===`changed`||Z!==null)&&Vd!==void 0&&(Vd=void 0,Jd()),pf(),ef(t?sf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function ef(e){Y&&(Y.textContent=e,window.setTimeout(mf,2600))}async function tf(e){let t=Xd.snapshot();try{let n=await(await fetch(`${N(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Hd=n.availability??null,Z=n.remote??null,lf=n.kiss??null,n.kissDismissedSha!==void 0&&(uf=n.kissDismissedSha??void 0),n.prState!==void 0&&af(n.prState);let r=Na(n.standing);return r&&Xd.current(t)&&Ta(document,r),!0}catch{return!1}}async function nf(){if(Zd||Qd||!J)return;let e=sf(X,Z),t=JSON.stringify(lf);Qd=tf(!0);let n=await Qd;Qd=null,rf=Date.now(),n&&(sf(X,Z)!==e&&pf(),JSON.stringify(lf)!==t&&ff())}var rf=Date.now();function af(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=wa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function of(e){Rd&&(Rd.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function sf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var cf=document.querySelector(`[data-kiss-fresh-region]`),lf=df(cf?.dataset.freshness),uf=cf?.dataset.dismissedSha;function df(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ff(){_a(lf?.state===`changed`),cf&&(cf.innerHTML=la(cf.dataset.reviewedSha??``,lf,{dismissedSha:uf,actions:Dl!==``}))}cf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(uf=t.dataset.kissFreshnessDismiss||void 0,ff(),fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:uf??null})}).catch(()=>{}))});function pf(){J&&(J.innerHTML=Ii(X,{dismissedSha:Vd,open:Bd,actions:Dl!==``,availability:Hd,remote:Z}),mf())}function mf(){if(Y&&(X||Z)){let{label:e,state:t}=Pi(X,Z);Y.textContent=e,Y.dataset.state=t,qi(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return hf(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void _f(i);if(t.closest(`[data-review-update]`))return void xf();let a=t.closest(`[data-update-cancel]`);if(a)return void Cf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void Cf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function hf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>gf(e,`Copied`),()=>gf(e,`Select it`))}function gf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function _f(e){let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t)e.disabled=!0;let n=Date.now(),r=()=>{let e=Math.max(1,Math.round((Date.now()-n)/1e3));for(let n of t){let t=vf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Ef}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=vf(e)?null:Df(e);try{await fetch(N(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}vf(e)&&yf(),window.location.reload()}function vf(e){return e.closest(`.prb-fresh-notes p`)}function yf(){try{sessionStorage.setItem(zd,`1`)}catch{}}var bf=!1;async function xf(){if(bf)return;bf=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(N(`/job`))).json();e.update&&e.update.phase!==`none`&&!Zi(e.update.phase)&&n()}catch{}},500);try{await fetch(N(`/update`),{method:`POST`})}catch{}n()}var Sf={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function Cf(e,t){let n=Sf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(N(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,Tf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Tf(e,n.tooLate),await xo({look:async()=>{let e=await fetch(N(`/job`),{signal:AbortSignal.timeout(wf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var wf=3e3;function Tf(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var Ef=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Df(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),n.textContent=Ef,t.appendChild(n),n}var Of=ho(document),kf=null,Af=Date.now();function jf(){kf===null&&(kf=window.setTimeout(()=>{kf=null,Mf()},de(Date.now()-Af)))}async function Mf(){try{let e=await(await fetch(N(`/job`))).json();if(H&&!e.ask||Pf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Of){let r=t[e];if(r){if(go(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?vo(n,r.phase,r.progress):Nf(n,r.progress)}}}catch{}jf()}function Nf(e,t){if(!t)return;let n=e.querySelector(`.prb-job-progress`);n||(n=document.createElement(`span`),n.className=`prb-job-progress`,e.querySelector(`p`)?.appendChild(n)),n.textContent=` ${t}`}var Pf=document.querySelector(`[data-diagram-running]`)!==null;(Of.size>0||H||Pf)&&(Af=Date.now(),jf()),document.querySelector(`[data-started-at]`)&&bo(document);function Ff(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function If(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,If(t),fetch(N(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Af=Date.now(),jf()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Ff(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(N(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Vr,gf(t,`Could not start. Try again`,2500)}))});var Lf={send:async e=>{let t=await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{zu(`kiss`,e,t,`recommendation`,`decided`),zu(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){fa(r,da(n),Lf);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(N(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Rf=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=br(e.state)??xr(window.location.hash)??{kind:`view`,view:Rf},n=!F||!Tr(F,t),r=Fl;Fl=!1,r?Jl(t):Il(()=>Jl(t)),n&&Kl(t),Kf()});var zf=xr(window.location.hash),Bf=M.current().ui===null,Vf=window.matchMedia(`(max-width: 860px)`).matches,Hf=Bf&&!zf?.focus?Fr(Ll.expanded,vr(zf??{kind:`view`,view:Rf},ql),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Vf):null;if(Bf&&W?.dataset.ask===`open`&&Vf&&delete W.dataset.ask,Hf){let e=zf??{kind:`view`,view:Rf};zf||(F=e);let t={...e,focus:Hf};M.replace(pr(t),t),Jl(t)}else zf?Jl(zf):(F={kind:`view`,view:Rf},M.replace(``,F));Nl=!0;var Uf={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:z,panes:W};M.setCapturer(()=>xi(Uf));async function Wf(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=li(e),s=o?su.pending(o):void 0;if(!o||!mi(s?s.request:fi(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=au(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await cu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&sl(o,a.tall),t&&pi(o,t.top,t.offset))}function Gf(e){li(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Kf(){let e=++Gl,t=()=>Gl===e;await Si(Uf,M.current().ui,{setFold:(e,t)=>Il(()=>tu(e,t)),setAsk:e=>Il(()=>Hu(e)),clearAsk:()=>{W&&delete W.dataset.ask,Uu(Vu())},openPanel:(e,n)=>Wf(e,n,t),closePanel:Gf,stillCurrent:t})}Kf();var qf=B?ki(B,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=qf?.restoredStage??null,Gu(),iu();var Jf=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open], [data-range-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{Jf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Jf(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Ia({root:document,post:(e,t)=>fetch(N(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Xd,checkForUpdates:()=>$d()});function Yf(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&I.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Xf(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void I.closeAll();Yf(n.error)}}function Zf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Qf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&I.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}if(Q){let e=Q.querySelector(`[data-confirm-delete]`),t=()=>Ed(Q);Q.addEventListener(`click`,e=>{let i=e.target,a=i?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),le(a,a.dataset.copyId);return}let o=i?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),n(o);return}if(i?.closest(`[data-fresh-check], [data-fetch-remote]`)){I.closeAll();return}let s=i?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Xf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=i?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Xf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=i?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Xf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(i?.closest(`[data-delete]`)){e.stopPropagation(),Qf();return}if(i?.closest(`[data-cancel-delete]`)){e.stopPropagation(),t();return}i?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),r())});let n=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let n=null;try{let e=await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(n=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,n===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=s(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=s(n)},r=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:n}=await $.deleteReview();if(n===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),t(),Yf(n)}}function $f(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>L(e,{keepFocus:!0})}}function ep(){if(!F)return null;let e=F.focus??(F.kind===`section`?`guide`:F.view);return lr.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function tp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}h(`review`,{...Od.commands,...to(q,document),"review.section.review":{available:()=>oo(document)!==null,run:()=>{let e=oo(document);e&&L(e,{keepFocus:!0})}},"review.section.kiss":$f(`kiss`),"review.section.issues":$f(`issues`),"review.section.diagrams":$f(`map`),"review.section.questions":$f(`questions`),"review.section.files":$f(`files`),"review.buddy.open":{available:()=>Bu!==null,run:()=>{F?.focus?Er(F,`buddy`,Yl):Hu(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Bu!==null&&B!==null,panel:uo({prompts:()=>K,choose:md})},"review.focus.toggle":{available:()=>ep()!==null,run:()=>{let e=ep();e&&Zl(e)}},"review.leave":{available:e=>!!(e&&Or(e,document,e.target===B||q.state().selecting||!!F?.focus)),run:e=>{B&&e?.target===B?B.blur():q.state().selecting?q.exit():F?.focus&&Dr(F,Yl)}},"review.feedback.toggle":{available:()=>q.state().selecting||tp(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Xf(()=>$.setComplete(!0),Zf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Xf(()=>$.setLifecycle(`waiting`),Zf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Xf(()=>$.setLifecycle(`done`),Zf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Xf(()=>$.toggleQueued(),Zf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Fi(X,{actions:Dl!==``&&!Of.has(`update`)&&!bf,remote:Z}),run:()=>void xf()},"review.delete":{available:()=>$.offer().delete,run:()=>Qf({focusCancel:!0})}},{onOpen:()=>I.closeAll()}),te(),Dl&&Pc({markSeen:()=>fetch(N(`/seen`),{method:`POST`}),askUnread:()=>fetch(N(`/unread`))}),setTimeout(()=>{vl(ul([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),ne(window,()=>window.location.reload());var np=15e3,rp=6e4;function ip(){return Dl!==``&&document.visibilityState===`visible`&&!Of.has(`update`)}document.addEventListener(`visibilitychange`,()=>{ip()&&Date.now()-rf>=np&&nf()}),window.setInterval(()=>{ip()&&nf()},rp);export{uc as n,Wt as r,pc as t};
179
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Sd()}async function fd(e){try{let t=await(await fetch(P(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}dd()}function pd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),cd?.toggleAttribute(`data-collapsed`,e),ld&&(ld.hidden=e),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function md(e){let t=K.find(t=>t.id===e);!t||!B||(B.value=ii(B.value,t.prompt),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}var hd=document.querySelector(`.prb-doc`),gd=null,_d=null;function vd(){z&&(_d?.(),_d=yn(z,{layout:`flat`,actions:Sn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Cd(e,`selection`,t)}))}var yd=`reassess`;function bd(e){let t=xd();if(!e)return t;let n={id:yd,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function xd(){return[...bn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:rr(e.id),label:e.name,section:nr}))]}function Sd(){hd&&(gd?.(),gd=yn(hd,{triggerLabel:`Ask Buddy AI`,actions:xd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Cd(e,`selection`,t)}))}function Cd(e,t,n,r){Ir(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>wd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Wu(),gu(t,`finding`,Rn(e,r?.ref))}})}function wd(e,t,n){B&&(U={text:e,source:t,...n?{continues:n}:{}},qf?.stage(U),B.value=ii(B.value,e),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}function Td(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=ln(bd(Bn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(V||H)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Ed(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=En(n),a=Bn(n);if(I.close(n),r===yd){i&&a&&Dd(a,i);return}i&&Cd(r,`finding`,i,a?{ref:a}:void 0)});function Dd(e,t){if(V||H)return;let n=e.kind===`issue`?`severity`:`importance`;Wu(),gu(`${wn(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?er(t):null;n&&wd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=zn(t),r=En(t);n&&r&&Cd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Sd(),vd();var q=Ka({root:document,showView:e=>L(e)}),Od=to({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>I.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});Mt(document),Kt(document);var kd=document.querySelector(`[data-prompt-dialog]`),Ad=document.querySelector(`[data-prompt-name]`),jd=document.querySelector(`[data-prompt-text]`),Md=document.querySelector(`[data-prompt-delete]`),Nd=document.getElementById(`prb-prompt-title`),Pd=``;function Fd(e){let t=K.find(t=>t.id===e);Pd=t?.id??``,Nd&&(Nd.textContent=t?`Edit prompt`:`Save a prompt`),Ad&&(Ad.value=t?.name??``),jd&&(jd.value=t?.prompt??``),Md&&(Md.hidden=!t),kd?.showModal(),Ad?.focus()}async function Id(){let e=Ad?.value.trim()??``,t=jd?.value.trim()??``;if(!e||!t){(e?jd:Ad)?.focus();return}let n=Pd?K.map(n=>n.id===Pd?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];kd?.close(),await fd(n)}async function Ld(){if(!Pd)return;let e=K.filter(e=>e.id!==Pd);kd?.close(),await fd(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>kd?.close()),Md?.addEventListener(`click`,()=>void Ld()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Id());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),Rd=document.querySelector(`[data-fresh-check]`),X=Yd(J?.dataset.report),zd=`prb-fresh-reopen`,Bd=Gd(),Vd=J?.dataset.dismissedSha,Hd=Wd(J?.dataset.availability),Z=Ud(J?.dataset.remote);function Ud(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Wd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Gd(){try{return sessionStorage.getItem(zd)!==null&&(sessionStorage.removeItem(zd),!0)}catch{return!1}}Bd&&pf(),Rd?.addEventListener(`click`,()=>void $d());var Kd=document.querySelector(`[data-fetch-remote]`);Kd&&(fetch(P(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Kd.hidden=!1)}).catch(()=>{}),Kd.addEventListener(`click`,()=>void qd(Kd)));async function qd(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(P(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};ie(c(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:oe(n)}),n.fetched>0&&await $d()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Bd=!1,pf();let n=t.closest(`[data-fresh-dismiss]`);n&&(Vd=n.dataset.freshDismiss||void 0,Bd=!1,pf(),Jd())});function Jd(){fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Vd??null})}).catch(()=>{})}function Yd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Xd=ja(),Zd=!1,Qd=null;async function $d(){if(Zd)return;Zd=!0,of(!0),Qd&&await Qd;let e=sf(X,Z),t=await tf(!1);of(!1),t&&ff(),Zd=!1,t&&(X?.code.state===`changed`||Z!==null)&&Vd!==void 0&&(Vd=void 0,Jd()),pf(),ef(t?sf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function ef(e){Y&&(Y.textContent=e,window.setTimeout(mf,2600))}async function tf(e){let t=Xd.snapshot();try{let n=await(await fetch(`${P(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Hd=n.availability??null,Z=n.remote??null,lf=n.kiss??null,n.kissDismissedSha!==void 0&&(uf=n.kissDismissedSha??void 0),n.prState!==void 0&&af(n.prState);let r=Aa(n.standing);return r&&Xd.current(t)&&Sa(document,r),!0}catch{return!1}}async function nf(){if(Zd||Qd||!J)return;let e=sf(X,Z),t=JSON.stringify(lf);Qd=tf(!0);let n=await Qd;Qd=null,rf=Date.now(),n&&(sf(X,Z)!==e&&pf(),JSON.stringify(lf)!==t&&ff())}var rf=Date.now();function af(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=xa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function of(e){Rd&&(Rd.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function sf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var cf=document.querySelector(`[data-kiss-fresh-region]`),lf=df(cf?.dataset.freshness),uf=cf?.dataset.dismissedSha;function df(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ff(){ma(lf?.state===`changed`),cf&&(cf.innerHTML=oa(cf.dataset.reviewedSha??``,lf,{dismissedSha:uf,actions:El!==``}))}cf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(uf=t.dataset.kissFreshnessDismiss||void 0,ff(),fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:uf??null})}).catch(()=>{}))});function pf(){J&&(J.innerHTML=Ni(X,{dismissedSha:Vd,open:Bd,actions:El!==``,availability:Hd,remote:Z}),mf())}function mf(){if(Y&&(X||Z)){let{label:e,state:t}=ji(X,Z);Y.textContent=e,Y.dataset.state=t,Wi(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return hf(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void _f(i);if(t.closest(`[data-review-update]`))return void xf();let a=t.closest(`[data-update-cancel]`);if(a)return void Cf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void Cf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function hf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>gf(e,`Copied`),()=>gf(e,`Select it`))}function gf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function _f(e){let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t)e.disabled=!0;let n=Date.now(),r=()=>{let e=Math.max(1,Math.round((Date.now()-n)/1e3));for(let n of t){let t=vf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Ef}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=vf(e)?null:Df(e);try{await fetch(P(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}vf(e)&&yf(),window.location.reload()}function vf(e){return e.closest(`.prb-fresh-notes p`)}function yf(){try{sessionStorage.setItem(zd,`1`)}catch{}}var bf=!1;async function xf(){if(bf)return;bf=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(P(`/job`))).json();e.update&&e.update.phase!==`none`&&!Ji(e.update.phase)&&n()}catch{}},500);try{await fetch(P(`/update`),{method:`POST`})}catch{}n()}var Sf={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function Cf(e,t){let n=Sf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(P(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,Tf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Tf(e,n.tooLate),await vo({look:async()=>{let e=await fetch(P(`/job`),{signal:AbortSignal.timeout(wf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var wf=3e3;function Tf(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var Ef=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Df(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),n.textContent=Ef,t.appendChild(n),n}var Of=fo(document),kf=null,Af=Date.now();function jf(){kf===null&&(kf=window.setTimeout(()=>{kf=null,Mf()},le(Date.now()-Af)))}async function Mf(){try{let e=await(await fetch(P(`/job`))).json();if(H&&!e.ask||Pf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Of){let r=t[e];if(r){if(po(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?ho(n,r.phase,r.progress):Nf(n,r.progress)}}}catch{}jf()}function Nf(e,t){if(!t)return;let n=e.querySelector(`.prb-job-progress`);n||(n=document.createElement(`span`),n.className=`prb-job-progress`,e.querySelector(`p`)?.appendChild(n)),n.textContent=` ${t}`}var Pf=document.querySelector(`[data-diagram-running]`)!==null;(Of.size>0||H||Pf)&&(Af=Date.now(),jf()),document.querySelector(`[data-started-at]`)&&_o(document);function Ff(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function If(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,If(t),fetch(P(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Af=Date.now(),jf()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Ff(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(P(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Rr,gf(t,`Could not start. Try again`,2500)}))});var Lf={send:async e=>{let t=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{zu(`kiss`,e,t,`recommendation`,`decided`),zu(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){la(r,ca(n),Lf);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(P(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Rf=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_r(e.state)??vr(window.location.hash)??{kind:`view`,view:Rf},n=!F||!Sr(F,t),r=Pl;Pl=!1,r?Jl(t):Fl(()=>Jl(t)),n&&Kl(t),Kf()});var zf=vr(window.location.hash),Bf=N.current().ui===null,Vf=window.matchMedia(`(max-width: 860px)`).matches,Hf=Bf&&!zf?.focus?Mr(Il.expanded,hr(zf??{kind:`view`,view:Rf},ql),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Vf):null;if(Bf&&W?.dataset.ask===`open`&&Vf&&delete W.dataset.ask,Hf){let e=zf??{kind:`view`,view:Rf};zf||(F=e);let t={...e,focus:Hf};N.replace(w(t),t),Jl(t)}else zf?Jl(zf):(F={kind:`view`,view:Rf},N.replace(``,F));Ml=!0;var Uf={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:z,panes:W};N.setCapturer(()=>vi(Uf));async function Wf(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=oi(e),s=o?su.pending(o):void 0;if(!o||!di(s?s.request:li(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=au(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await cu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&ol(o,a.tall),t&&ui(o,t.top,t.offset))}function Gf(e){oi(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Kf(){let e=++Gl,t=()=>Gl===e;await yi(Uf,N.current().ui,{setFold:(e,t)=>Fl(()=>tu(e,t)),setAsk:e=>Fl(()=>Hu(e)),clearAsk:()=>{W&&delete W.dataset.ask,Uu(Vu())},openPanel:(e,n)=>Wf(e,n,t),closePanel:Gf,stillCurrent:t})}Kf();var qf=B?Ei(B,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=qf?.restoredStage??null,Gu(),iu();var Jf=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open], [data-range-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{Jf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Jf(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Na({root:document,post:(e,t)=>fetch(P(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Xd,checkForUpdates:()=>$d()});function Yf(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&I.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Xf(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void I.closeAll();Yf(n.error)}}function Zf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Qf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&I.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}if(Q){let e=Q.querySelector(`[data-confirm-delete]`),n=()=>Ed(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),se(a,a.dataset.copyId);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){I.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Xf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Xf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Xf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Qf();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async e=>{let n=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let r=null;try{let e=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,r===null){e.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=t(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(r)),e.textContent=t(r)},i=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:t}=await $.deleteReview();if(t===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),n(),Yf(t)}}function $f(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>L(e,{keepFocus:!0})}}function ep(){if(!F)return null;let e=F.focus??(F.kind===`section`?`guide`:F.view);return sr.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function tp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}u(`review`,{...Od.commands,...Qa(q,document),"review.section.review":{available:()=>ro(document)!==null,run:()=>{let e=ro(document);e&&L(e,{keepFocus:!0})}},"review.section.kiss":$f(`kiss`),"review.section.issues":$f(`issues`),"review.section.diagrams":$f(`map`),"review.section.questions":$f(`questions`),"review.section.files":$f(`files`),"review.buddy.open":{available:()=>Bu!==null,run:()=>{F?.focus?Cr(F,`buddy`,Yl):Hu(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Bu!==null&&B!==null,panel:so({prompts:()=>K,choose:md})},"review.focus.toggle":{available:()=>ep()!==null,run:()=>{let e=ep();e&&Zl(e)}},"review.leave":{available:e=>!!(e&&Tr(e,document,e.target===B||q.state().selecting||!!F?.focus)),run:e=>{B&&e?.target===B?B.blur():q.state().selecting?q.exit():F?.focus&&wr(F,Yl)}},"review.feedback.toggle":{available:()=>q.state().selecting||tp(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Xf(()=>$.setComplete(!0),Zf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Xf(()=>$.setLifecycle(`waiting`),Zf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Xf(()=>$.setLifecycle(`done`),Zf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Xf(()=>$.toggleQueued(),Zf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Mi(X,{actions:El!==``&&!Of.has(`update`)&&!bf,remote:Z}),run:()=>void xf()},"review.delete":{available:()=>$.offer().delete,run:()=>Qf({focusCancel:!0})}},{onOpen:()=>I.closeAll()}),p(),El&&Nc({markSeen:()=>fetch(P(`/seen`),{method:`POST`}),askUnread:()=>fetch(P(`/unread`))}),setTimeout(()=>{_l(ll([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),ee(window,()=>window.location.reload());var np=15e3,rp=6e4;function ip(){return El!==``&&document.visibilityState===`visible`&&!Of.has(`update`)}document.addEventListener(`visibilitychange`,()=>{ip()&&Date.now()-rf>=np&&nf()}),window.setInterval(()=>{ip()&&nf()},rp);export{lc as n,Ht as r,fc as t};