prreviewbuddy 0.78.1 → 0.79.0

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,D as r,G as i,H as a,I as o,J as s,L as c,Q as l,R as u,U as d,V as f,W as ee,X as p,Y as te,a as m,d as ne,i as re,k as h,o as ie,q as g,r as ae,t as oe,z as _}from"./chunk-BMAMO0Tf.js";import{c as se,i as ce,o as le,s as ue}from"./chunk-D8xJNBjR.js";import{t as v}from"./chunk-CvSN2dS5.js";import{t as de}from"./chunk-C8kkSv38.js";function y(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function fe(e){return y(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(y((e??``).trim()),y(t))}var b=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:b},cite:{},code:{},dd:{},del:{},details:{},div:{align:b},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:we},p:{align:b},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:b},tbody:{},td:{align:b,colspan:Ce,rowspan:Ce},tfoot:{},th:{align:b,colspan:Ce,rowspan:Ce},thead:{},tr:{align:b},u:{},ul:{},var:{},h1:{align:b},h2:{align:b},h3:{align:b},h4:{align:b},h5:{align:b},h6:{align:b}}).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}="${y(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))??y(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>${y(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="${y(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(y(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=[y(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 y(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}="${y(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}="${y(r)}" ${St}="${y(i)}" ${Ct}="${y(t.tip)}"`:``,o=`<button type="button" class="${t?`${mt} ${bt}`:mt}" ${e}${a}${t?` data-tip="${y(t.tip)}"`:``} aria-label="${y(i)}"><span class="${mt}-icon" aria-hidden="true">${Et(n)}</span><span class="${mt}-label"${r?``:` hidden`}>${y(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??=v(()=>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`,x=null;function cn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${y(e.id)}">${y(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])=>`
2
+ import{$ as e,A as t,B as n,G as r,H as i,J as a,K as o,L as s,O as c,R as l,U as u,V as d,W as f,X as p,Y as m,Z as h,a as g,d as ee,et as te,i as ne,j as re,o as _,r as ie,t as ae,z as v}from"./chunk-DYrelqtW.js";import{c as oe,i as se,o as ce,s as le}from"./chunk-B6LyLjZ7.js";import{t as y}from"./chunk-CvSN2dS5.js";import{t as ue}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 de(e){return b(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var fe=`pr-helper-code-block`,pe=`pr-helper-code-copy`,me=/^\u0002(\d+)\u0002/,he=/^(?:https?:\/\/|#)/i,ge=/^https:\/\//i,_e=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,ve=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function ye(e){let t=(e??``).trim();return!t||_e.test(t)||ve.test(t)?`View attached image`:`View image: ${t}`}function be(e,t){return ge.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function xe(e,t){return be(b((e??``).trim()),b(t))}var x=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Se=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Ce=e=>/^\d{1,9}$/.test(e)?e:null,we=e=>e.slice(0,300),Te=new Map(Object.entries({a:{href:e=>{let t=e.trim();return he.test(t)?t:null},title:we},abbr:{title:we},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:Ce},p:{align:x},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:x},tbody:{},td:{align:x,colspan:Se,rowspan:Se},tfoot:{},th:{align:x,colspan:Se,rowspan:Se},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:we,...t}))])),Ee=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),De=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),Oe=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(`.`)),ke=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(`.`)),Ae=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`),je=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Me(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 Ne(e){let t=new Map;for(let n of e.matchAll(je)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Me(n[2]??n[3]??n[4]??``))}return t}function Pe(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Fe(e,t){let n=Pe(e),r=Te.get(e),i=[];for(let[e,n]of Ne(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 Ie(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;Ae.lastIndex=0;for(let t;t=Ae.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=Ne(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:xe(e.get(`src`),ye(r))??b(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Ne(c).get(`src`);if(!o&&!l){let n=e.slice(Ae.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Ne(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(Ae.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:xe(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(De.has(t)){if(!o&&!l&&!Ee.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(Ae.lastIndex),i=r.search(n);i!==-1&&(Ae.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(Oe.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Te.has(t)){let e=Pe(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Ee.has(t)?n({kind:`void`,name:t,tag:e,markup:Fe(t,c)}):n({kind:`open`,name:t,tag:e,markup:Fe(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=Ae.lastIndex)}return{text:r+e.slice(i),tokens:t}}function Le(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 Re(e,t){let n=e.match(me);return!!(n&&ke.has(t.tokens[Number(n[1])].name))}function ze(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 Be(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 Ve=`\0`,He=``,Ue=/\u0000(\d+)\u0000/g,We=/^\u0000\d+\u0000$/,Ge=/\u0001(\d+)\u0001/g;function Ke(e,t={}){let{text:n,blocks:r}=Qe(Ze(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return nt(lt(n),r);let i=Ie(n);return ze(Be(nt(lt(i.text,i),r),i))}function qe(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Je(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Ye=/`[^`\n]+`|<!--/g;function Xe(e,t){Ye.lastIndex=t;for(let t;t=Ye.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function Ze(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=Je(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=qe(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=Xe(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 Qe(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${Ve}${n.length}${Ve}`);let e=i.join(`
4
+ `);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??tt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&$e(n.raw).toLowerCase()===`mermaid`?et(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 $e(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function et(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 tt(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 nt(e,t){return e.replace(Ue,(e,n)=>{let r=t[Number(n)];return r.diagram?at(r.code,r.diagram.label):rt(r.code,`Copy`,`Copy code`)})}function rt(e,t,n,r=``){return`<div class="${fe}"${r}><pre><code>${b(e)}</code></pre><button type="button" class="${pe}" aria-label="${n}">${t}</button></div>`}var it=0;function at(e,t){let n=`prb-md-mermaid-source-${++it}`;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>`+rt(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function ot(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function st(e){return ot(e.match(/^[ \t]*/)[0])}function ct(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=ot(n)+(r?1:i.length+1),c=ot(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function lt(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>${ut(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${ut(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?ut(e[0],t):e.map(e=>`<p>${ut(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?ut(e,t):`<p>${ut(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=st(o),l=ct(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&&Re(e,t)){c(),s=[b(e)];continue}if(We.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}>${ut(l[2],t)}</h${e}>`);continue}let u=ct(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 ut(e,t){let n=[];return b(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${He}${n.length-1}${He}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Le(r,t)?be(r,ye(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>he.test(r)&&!(t&&Le(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(Ge,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function dt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),ft(e)}}function ft(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 pt=`pr-helper-msg-copy`,mt=`pr-helper-chat-actions`,ht=`data-message-id`,gt=`data-copy-source`,_t={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 vt(e){return Ct(`${gt}="${b(e)}"`)}var yt=`pr-helper-finding-copy`,bt=`data-copy-idle-label`,xt=`data-copy-idle-aria`,St=`data-copy-idle-tip`;function Ct(e,t){let{icon:n}=_t.idle,r=t?.label??_t.idle.label,i=t?.aria??_t.idle.aria,a=t?` ${bt}="${b(r)}" ${xt}="${b(i)}" ${St}="${b(t.tip)}"`:``,o=`<button type="button" class="${t?`${pt} ${yt}`:pt}" ${e}${a}${t?` data-tip="${b(t.tip)}"`:``} aria-label="${b(i)}"><span class="${pt}-icon" aria-hidden="true">${Tt(n)}</span><span class="${pt}-label"${r?``:` hidden`}>${b(r)}</span></button>`;return t?o:`<div class="${mt}">${o}</div>`}function wt(e,t){let n=_t[t],r=t===`idle`?{...n,label:e.getAttribute(bt)??n.label,aria:e.getAttribute(xt)??n.aria}:n,i=e.querySelector(`.${pt}-icon`),a=e.querySelector(`.${pt}-label`);i&&(i.innerHTML=Tt(r.icon));let o=(e.getAttribute(bt)??``)!==``,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(St)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Tt(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Et=1400,Dt=`Copy`,Ot=`Copied`,kt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,At=new WeakMap;function jt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${pe}`),i=r?null:n.closest(`.${pt}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Pt(r):i&&Mt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Mt(e,t){let n=Nt(e,t);It(e,n!==null&&await dt(n)?`copied`:`failed`)}function Nt(e,t){let n=e.getAttribute(gt);if(n!==null)return n;let r=e.getAttribute(ht);return r&&t?t(r):null}async function Pt(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await dt(t.textContent??``):!1;!n&&t&&Ft(t),Lt(e,n?Ot:kt,n)}function Ft(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function It(e,t){let n=At.get(e);n&&window.clearTimeout(n),wt(e,t),At.set(e,window.setTimeout(()=>{wt(e,`idle`),At.delete(e)},Et))}function Lt(e,t,n){let r=At.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||Dt;e.textContent=t,e.classList.toggle(`copied`,n),At.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),At.delete(e)},Et))}var Rt={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`]},zt=null;function Bt(){return zt??=y(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(Rt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),zt}async function Vt(e,t,n,r=Bt){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,Ut(e)}var Ht=`http://www.w3.org/2000/svg`;function Ut(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(Ht,`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 Wt=0;function Gt(e,t={}){let n=t.engine??Bt,r=t.observe??Kt,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),qt(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&Yt(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function Kt(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function qt(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 Vt(r,`prb-md-mermaid-${++Wt}`,o,t),Jt(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 Jt(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function Yt(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 Xt=`pr-helper-selection-popover`,Zt=`pr-helper-selection-popover-expanded`,Qt=`pr-helper-selection-copy-done`,$t=8,en=8,tn=1e3,nn=`Copy selected text`,rn=`Copy`,an=`Copied`,on=`pr-helper-selection-popover-flat`,S=null;function sn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${b(e.id)}">${b(e.label)}</button>`}function cn(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(sn).join(``)}${[...t].map(([e,t])=>`
10
10
  <div class="pr-helper-selection-menu-group">
11
- <div class="pr-helper-selection-menu-heading">${y(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`
11
+ <div class="pr-helper-selection-menu-heading">${b(e)}</div>
12
+ <div class="pr-helper-selection-menu-group-items">${t.map(sn).join(``)}</div>
13
+ </div>`).join(``)}`}function ln(e){if(e.layout===`flat`)return un(e);let t=cn(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>${y(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="${rn}" aria-describedby="pr-helper-selection-tip">
21
+ <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${nn}" 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,153 +27,153 @@ import{$ as e,A as t,B as n,D as r,G as i,H as a,I as o,J as s,L as c,Q as l,R 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">${rn}</span>
30
+ <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${nn}</span>
31
31
  </div>
32
32
  <div class="pr-helper-selection-menu">${t}</div>
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),x?.popover.remove(),x=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){(!x||x.owner===n)&&pn();return}if(x&&x.owner!==n&&pn(),x)x.popover.classList.remove(Qt),gn(x.popover),x.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]`)){x?.text&&_n(i,x.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||!x)return;let o=x.text;pn(),t.onChoose(a,o)}),document.body.appendChild(i),x={popover:i,text:r.text,owner:n}}fn(x.popover,r.rect)},i=e=>{x&&e.target instanceof Node&&x.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!x)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,`
33
+ `}function un(e){return`<div class="pr-helper-selection-menu">
34
+ ${cn(e.actions)}
35
+ <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${rn}</button>
36
+ </div>`}function dn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-$t,a=i>=en?i:Math.min(t.bottom+$t,window.innerHeight-r-en),o=Math.max(en,Math.min(t.left,window.innerWidth-n-en));e.style.top=`${Math.max(en,a)}px`,e.style.left=`${o}px`}function fn(){pn&&=(window.clearTimeout(pn),0),S?.popover.remove(),S=null}var pn=0;function mn(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(Qt),t&&(t.textContent=an),n&&(n.textContent=an),pn&&window.clearTimeout(pn),pn=window.setTimeout(()=>hn(e),tn)}function hn(e){pn&&=(window.clearTimeout(pn),0),e.classList.remove(Qt);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=nn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=rn)}async function gn(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}mn(e)}function _n(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 vn(e,t){let n={},r=()=>{let r=_n(e,t);if(!r){(!S||S.owner===n)&&fn();return}if(S&&S.owner!==n&&fn(),S)S.popover.classList.remove(Zt),hn(S.popover),S.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Xt} ${on}`:Xt,i.innerHTML=ln(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){S?.text&&gn(i,S.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(Zt);let n=_n(e,t);dn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!S)return;let o=S.text;fn(),t.onChoose(a,o)}),document.body.appendChild(i),S={popover:i,text:r.text,owner:n}}dn(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)&&fn()},s=e=>{e.key===`Escape`&&fn()},c=()=>fn();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),fn()}}var yn=[{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 bn(e){return![...yn,...xn].find(t=>t.id===e)?.instruction}var xn=[{id:`add-to-chat`,label:`Add to chat`}],Sn=800;function Cn(e,t={}){let n=t.maxChars??Sn,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 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 S(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>
43
+ `):``}function wn(e,t,n={}){let r=Cn(e,n);if(!r)return null;let i=[...yn,...xn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function Tn(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 En=`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 Dn(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 On=[`explain-detail`,`explain`];function kn(e){return On.includes(e)}function An(e){return e.action??`explain`}var jn=`Ask more →`,Mn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Nn(e){return Mn[An(e)]}function Pn(e,t={}){let n=Ke(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${jn}</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">${Nn(e)}</summary>
45
45
  <div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
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 dr(e){let t=e.kind===`view`?lr(e.view):ur(e.sectionId);return e.focus?`${t}${cr}${e.focus}`:t}var fr=[`architecture`,`map`,`diagram`];function pr(e,t){return fr.includes(e)&&fr.includes(t??``)?e:void 0}function mr(e,t){let n=yr(e),r=n?.kind===`view`&&n.view===t?n.focus:pr(t,n?.focus);return dr({kind:`view`,view:t,...r?{focus:r}:{}})}function hr(e){let{focus:t,...n}=e;return n}function gr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function _r(e){return sr.includes(e)}function vr(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&_r(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 yr(e){let t=e.indexOf(cr);if(t===-1)return br(e);let n=br(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return _r(r)?{...n,focus:r}:n}function br(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 xr=`pushedFocus`;function Sr(e){let{[xr]:t,...n}=e;return n}function Cr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function wr(e,t,n){if(e.focus===t)return;let r={...hr(Sr(e)),focus:t};e.focus&&n.history.state?.[xr]?n.history.replaceState({...r,[xr]:!0},``,dr(r)):n.history.pushState({...r,[xr]:!0},``,dr(r)),n.apply(r)}function Tr(e,t){if(!e.focus)return;if(t.history.state?.[xr]){t.history.back();return}let n=hr(Sr(e));t.history.replaceState(n,``,dr(n)),t.apply(n)}function Er(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&&l(r)&&r.value!==``)}function Dr(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)}}function Or(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 kr(e,t,n){if(n.busy?.())return null;let r=Or(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 Ar(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var jr=`Run review again`;function Mr(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 Nr(e){let t=e.dataset.questionAnswered;t&&Mr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Pr=`pr-helper-author-context-preview`,Fr=`View full PR description`,Ir=`Show less`;function Lr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Pr);if(!n)return;let i=n.closest(`#${Vr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Rr(n);if(!o){let e=-zr(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?Ir:Fr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Br(n,s,zr(n,s)+e);return}i&&zr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Rr(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 zr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Br(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Vr=`pr-helper-author-context`;function Hr(e){let t=e.ownerDocument.getElementById(Vr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Lr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Ur(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Wr(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 Gr(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 Kr(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 qr(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 Jr(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Yr(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Xr(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Zr(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var Qr=50;function $r(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function C(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function ei(e){if(!e||typeof e!=`object`)return;let t=e,n=C(t.top);return{cited:C(t.cited),centre:C(t.centre),expand:C(t.expand,Qr),position:C(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function ti(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 ni(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?ti(n):{top:null,offset:0};return{cited:C(e.dataset.cited),centre:C(e.dataset.centre),expand:C(e.dataset.expand,Qr),position:C(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function ri(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 ii(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function ai(){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 oi(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 si(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=$r(e);return{host:oi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:ni(t)}:{}}})}function ci(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function li(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&oi(n)===t.host)return n;return null}function ui(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 di(e){let{doc:t,main:n,rail:r,log:a,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:a?.scrollTop??0,folds:s,panels:si(t),focus:i(t.activeElement,t.body)}}async function fi(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,c=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=c[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if((t.ask===`open`||t.ask===`closed`)&&n.setAsk(t.ask===`open`),Array.isArray(t.panels)){let e=t.panels.filter(ui).map(e=>({...e,state:ei(e.state)}));for(let t of si(r))if(!e.some(e=>ci(e,t))){let e=li(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=li(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let l=s(t,`main`);i&&l!==null&&(i.scrollTop=l);let u=s(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=s(t,`log`);return o&&d!==null&&(o.scrollTop=d),te(r,t.focus),!0}var pi=`prb-ask-draft:`,mi=`prb-ask-staged:`,hi=300;function gi(e){return`${pi}${e}`}function _i(e){return`${mi}${e}`}function vi(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 yi(e,t){let{storage:n,win:r}=t,i=gi(t.path),a=_i(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=vi(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(),hi)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function bi(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function xi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Si=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Ci(e){return`<details class="prb-update-alt">
46
+ </details>`}function Fn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function In(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Ln(e,t){return kn(e)&&t?{explains:{...t,action:e}}:{}}function Rn(e){let t=zn(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 zn(e){let t=e.closest(`[data-finding-card]`),n=In(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Bn(e,t){let n=e.querySelector(Fn(t.kind,t.id));if(!n)return;let r=Pn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Vn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Vn(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 Hn(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Un=/^pr-helper-severity-(critical|major|minor|nit)$/;function Wn(e,t){let n=e.querySelector(Fn(t.kind,t.id));if(!n)return null;if(t.kind===`issue`){for(let e of[...n.classList])Un.test(e)&&n.classList.remove(e);t.cardClass&&n.classList.add(t.cardClass)}return n.querySelector(`[data-grade-control]`)?.replaceWith(Kn(e,t.grade)),n.querySelector(`[data-assessment-region]`)?.replaceWith(Kn(e,t.region)),n.querySelector(`[${gt}]`)?.setAttribute(gt,t.copy),Gn(e),n}function Gn(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=Dn(r);i&&n.append(Kn(e,i))}}function Kn(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function qn(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 Jn=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function Yn(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return qn(t,Jn),!1}if(a===null)return!1;let o=a.body?.card?Wn(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):(qn(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function Xn(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=zn(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),Yn(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function Zn(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 Yn(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 Qn(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){Xn(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&Zn(i,t)})}function $n(e){let t=Tn(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`${Cn(t,{maxChars:1/0})}\n\n${Cn(`${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 er=`saved:`,tr=`Your prompts`;function nr(e){return`${er}${e}`}function rr(e){return e.startsWith(`saved:`)?e.slice(6):null}var ir=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],ar=`#theme-`,or=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],sr=`&focus=`;function cr(e){return`#${e}`}function lr(e){return`${ar}${encodeURIComponent(e)}`}function ur(e){let t=e.kind===`view`?cr(e.view):lr(e.sectionId);return e.focus?`${t}${sr}${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 ur({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 or.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`&&ir.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(sr);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(ar)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ir.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},``,ur(r)):n.history.pushState({...r,[br]:!0},``,ur(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,``,ur(n)),t.apply(n)}function Tr(t,n,r){if(!r||t.key!==`Escape`||t.defaultPrevented||n.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let i=t.target;return!(i?.closest?.(`[data-ask-resize]`)||i instanceof HTMLInputElement&&e(i)&&i.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)}}function Dr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=rr(e);if(a===null)return wn(t,e,i);let o=r(a);if(!o)return null;let s=Cn(t,i);return s?`${s}\n\n${o}`:null}function Or(e,t,n){if(n.busy?.())return null;let r=Dr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=bn(e)||rr(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function kr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Ar=`Run review again`;function jr(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 Mr(e){let t=e.dataset.questionAnswered;t&&jr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Nr=`pr-helper-author-context-preview`,Pr=`View full PR description`,Fr=`Show less`;function Ir(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Nr);if(!n)return;let i=n.closest(`#${Br}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Lr(n);if(!o){let e=-Rr(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?Fr:Pr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&zr(n,s,Rr(n,s)+e);return}i&&Rr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Lr(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 Rr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function zr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Br=`pr-helper-author-context`;function Vr(e){let t=e.ownerDocument.getElementById(Br);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Ir(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Hr(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Ur(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 Wr(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 Gr(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 Kr(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 qr(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Jr(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Yr(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Xr(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var Zr=50;function Qr(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function w(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function $r(e){if(!e||typeof e!=`object`)return;let t=e,n=w(t.top);return{cited:w(t.cited),centre:w(t.centre),expand:w(t.expand,Zr),position:w(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function ei(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 ti(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?ei(n):{top:null,offset:0};return{cited:w(e.dataset.cited),centre:w(e.dataset.centre),expand:w(e.dataset.expand,Zr),position:w(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function ni(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 ri(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function ii(){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 ai(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 oi(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=Qr(e);return{host:ai(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:ti(t)}:{}}})}function si(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function ci(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&ai(n)===t.host)return n;return null}function li(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 ui(e){let{doc:t,main:n,rail:r,log:i,panes:a}=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=a?.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:oi(t),focus:o(t.activeElement,t.body)}}async function di(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`),Array.isArray(t.panels)){let e=t.panels.filter(li).map(e=>({...e,state:$r(e.state)}));for(let t of oi(r))if(!e.some(e=>si(e,t))){let e=ci(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=ci(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=m(t,`main`);i&&c!==null&&(i.scrollTop=c);let l=m(t,`rail`);a&&l!==null&&(a.scrollTop=l);let u=m(t,`log`);return o&&u!==null&&(o.scrollTop=u),p(r,t.focus),!0}var fi=`prb-ask-draft:`,pi=`prb-ask-staged:`,mi=300;function hi(e){return`${fi}${e}`}function gi(e){return`${pi}${e}`}function _i(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 vi(e,t){let{storage:n,win:r}=t,i=hi(t.path),a=gi(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=_i(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(),mi)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function yi(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function bi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var xi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Si(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>${y(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${y(e)}">Copy</button></span>
49
- </details>`}var wi=`prreviewbuddy review --fresh`;function Ti(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 Ei(e,t){if(!t.actions)return!1;let n=e??(t.remote?Ni(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 Di(e,t={}){let n=e??(t.remote?Ni(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?Pi(n.code,r):Mi(n.code,t.availability??null),u=e?[...l.facts,`checked ${y(bi(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 Ci=`prreviewbuddy review --fresh`;function wi(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 Ti(e,t){if(!t.actions)return!1;let n=e??(t.remote?Mi(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 Ei(e,t={}){let n=e??(t.remote?Mi(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?Ni(n.code,r):ji(n.code,t.availability??null),u=e?[...l.facts,`checked ${b(yi(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">${y(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
- ${Oi(n,t,i||a,Ei(e,t))}
57
- </div>`}function Oi(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?xi():``}
59
- ${r?Ci(wi):``}
56
+ ${Di(n,t,i||a,Ti(e,t))}
57
+ </div>`}function Di(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?bi():``}
59
+ ${r?Si(Ci):``}
60
60
  ${i}
61
- ${ki(e,t,n,r===!0)}
62
- </div>`}function ki(e,t,n,r){let i=[r?y(Si):``,t.remote?Fi(e.code):Ii(e.code,e.checkout.reason!==`no-pull-request`),Li(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${y(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
+ ${Oi(e,t,n,r===!0)}
62
+ </div>`}function Oi(e,t,n,r){let i=[r?b(xi):``,t.remote?Pi(e.code):Fi(e.code,e.checkout.reason!==`no-pull-request`),Ii(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 Ai(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function ji(e){return e?`<code title="${y(e)}">${y(e.slice(0,7))}</code>`:``}function w(e){return e?[`reviewed ${ji(e)}`]:[]}function Mi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:w(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:w(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...w(e.reviewedSha),...Ai(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:[...w(e.reviewedSha),...t,...Ai(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:w(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:w(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:w(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 Ni(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 Pi(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:[...w(e.reviewedSha),...i,...n?Ai(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${y(bi(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 Fi(e){return`This review is based on ${ji(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Ii(e,t){if(!e.comparison)return``;let n=`<code>${y(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${ji(e.reviewedSha)}.`:`This review is based on ${ji(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 Li(e,t){if(!e.conversation.attached)return``;let n=y(bi(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 Ri(e,t){let n=Ur(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function zi(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${Vi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
65
+ </details>`:a}function ki(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Ai(e){return e?`<code title="${b(e)}">${b(e.slice(0,7))}</code>`:``}function T(e){return e?[`reviewed ${Ai(e)}`]:[]}function ji(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:T(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:T(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...T(e.reviewedSha),...ki(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:[...T(e.reviewedSha),...t,...ki(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:T(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:T(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:T(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 Mi(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 Ni(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:[...T(e.reviewedSha),...i,...n?ki(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${b(yi(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 Pi(e){return`This review is based on ${Ai(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Fi(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 ${Ai(e.reviewedSha)}.`:`This review is based on ${Ai(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 Ii(e,t){if(!e.conversation.attached)return``;let n=b(yi(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 Li(e,t){let n=Hr(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Ri(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${Bi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
66
66
 
67
- `)}function Bi(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(zi)].join(`
67
+ `)}function zi(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Ri)].join(`
68
68
 
69
- `)}function Vi(e){return e.split(`
69
+ `)}function Bi(e){return e.split(`
70
70
  `).map(e=>e===``?`>`:`> ${e}`).join(`
71
- `)}function Hi(e){return e===`done`||e===`failed`}function Ui(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Wi(e,t=``){return`<div class="prb-doc-head">
72
- <h3 class="prb-doc-title">${y(e)}</h3>
71
+ `)}function Vi(e){return e===`done`||e===`failed`}function Hi(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Ui(e,t=``){return`<div class="prb-doc-head">
72
+ <h3 class="prb-doc-title">${b(e)}</h3>
73
73
  ${t}
74
- </div>`}var Gi=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,Ki=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function qi(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 Ji(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${y(t)}" aria-pressed="false" aria-label="${y(n)}" title="${y(n)}">${qi(Gi,`prb-focus-expand`)}${qi(Ki,`prb-focus-collapse`)}</button>`}Ji(`kiss`,`KISS review`),Wi(`Recommendations`,Ji(`kissrecs`,`Recommendations`));var Yi={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Xi(e,t){return t===`undecided`?`Open`:Yi[e][t]}function Zi(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 Qi(e){return`Decided (${e})`}function $i(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 ea(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 ${y(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
74
+ </div>`}var Wi=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,Gi=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function Ki(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 qi(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)}">${Ki(Wi,`prb-focus-expand`)}${Ki(Gi,`prb-focus-collapse`)}</button>`}qi(`kiss`,`KISS review`),Ui(`Recommendations`,qi(`kissrecs`,`Recommendations`));var Ji={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Yi(e,t){return t===`undecided`?`Open`:Ji[e][t]}function Xi(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 Zi(e){return`Decided (${e})`}function Qi(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 $i(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 ${y(e.slice(0,7))}.</strong> ${y(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="${y(t.latestSha)}">Not now</button>`:``}</p>
80
- </div>`}var ta=new WeakMap;function na(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function ra(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{pa(e);let i=e.contains(document.activeElement);ia(e,t),da(e,!0),oa(n),i&&fa(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(da(e,!1),a){oa(n);return}ia(e,r),oa(n),ma(e,t,n)},a=(ta.get(e)??Promise.resolve()).then(i,i);return ta.set(e,a),a}function ia(e,t){e.dataset.decision=t;let n=ua(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Xi(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=Yi[n][r.dataset.kissDecide];aa(e,t!==`undecided`)}function aa(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 oa(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=Zi(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=Qi(r))}e.paintRail(n.length,i),sa(t)}function sa(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=la(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=$i(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?Bi(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function ca(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),sa(t))}function la(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ua(e){return e.dataset.audience===`author`?`author`:`reviewer`}function da(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function fa(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 pa(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function ma(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 ra(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 ha(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 ga(e,t){t.complete!==void 0&&ya(e,t.complete),t.activity!==void 0&&_a(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&ba(e,va(e)):ba(e,t.lifecycle??void 0),t.queued!==void 0&&xa(e,t.queued)}function _a(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 va(e){let t=e.querySelector(`[data-review-menu]`);return a(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function ya(e,t){let n=t?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&(i.dataset.status=n,i.textContent=o(n));let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=t?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=r(e)}}function ba(e,t){let r=e.querySelector(`[data-review-menu]`);r&&(t?(r.dataset.lifecycleState=t.state,r.dataset.lifecycleAt=String(t.at)):(delete r.dataset.lifecycleState,delete r.dataset.lifecycleAt));let i=r?Sa(r):void 0,a=e.querySelector(`[data-page-lifecycle]`);if(a){let e=_(t,i);a.hidden=e===void 0,a.textContent=e?.text??``,a.toggleAttribute(`data-changed`,e?.changed===!0)}for(let r of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!n(e,t,i),r.textContent=u(e,t,i)}}function xa(e,n){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,n);let r=e.querySelector(`[data-review-menu] [data-queue-action]`);r&&(r.dataset.queueAction=n?`remove`:`add`,r.textContent=t(n))}function Sa(e){return c(e.dataset)}function Ca(e){return a(e)??null}function wa(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Ca(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 Ta(){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 Ea=`The workspace server did not answer. It may have stopped.`;function Da(e){let t=()=>e.root.querySelector(`[data-review-menu]`),r=!1,i=async(t,n,i)=>{if(r)return{error:null,busy:!0};r=!0;let a=e.gate.begin();try{let r=await e.post(t,n),a=await r.json().catch(()=>null);return r.ok&&a?(ga(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Ea}}finally{r=!1,a()}},o=e=>i(`/queue`,{action:e},e=>({lifecycle:Ca(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:Ca(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:Ea}}},offer:()=>{let i=t(),o=i?.hasAttribute(`data-can-write`)===!0,s=o&&i?.hasAttribute(`data-branch-actions`)===!0,l=i?a({state:i.dataset.lifecycleState,at:Number(i.dataset.lifecycleAt)}):void 0,u=i?c(i.dataset):void 0,d=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,f=!r;return{reviewed:f&&o&&!d,waiting:f&&s&&n(`waiting`,l,u),done:f&&s&&n(`done`,l,u),queue:f&&s,checkForUpdates:o&&i?.hasAttribute(`data-checkable`)===!0,delete:o}},busy:()=>r}}function Oa(e,t){return`${e} ${t}${e===1?``:`s`}`}function ka(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Oa(e,`issue`):``,questions:t?Oa(t,`question`):``}}function Aa(e,t){let n=ka(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function ja(e){return e===0?``:`${e} chosen`}function Ma(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 ea=new WeakMap;function ta(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function na(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{fa(e);let i=e.contains(document.activeElement);ra(e,t),ua(e,!0),aa(n),i&&da(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(ua(e,!1),a){aa(n);return}ra(e,r),aa(n),pa(e,t,n)},a=(ea.get(e)??Promise.resolve()).then(i,i);return ea.set(e,a),a}function ra(e,t){e.dataset.decision=t;let n=la(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Yi(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=Ji[n][r.dataset.kissDecide];ia(e,t!==`undecided`)}function ia(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 aa(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=Xi(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=Zi(r))}e.paintRail(n.length,i),oa(t)}function oa(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=ca(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=Qi(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?zi(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function sa(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),oa(t))}function ca(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function la(e){return e.dataset.audience===`author`?`author`:`reviewer`}function ua(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function da(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 fa(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function pa(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 na(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 ma(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 ha(e,t){t.complete!==void 0&&va(e,t.complete),t.activity!==void 0&&ga(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&ya(e,_a(e)):ya(e,t.lifecycle??void 0),t.queued!==void 0&&ba(e,t.queued)}function ga(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 _a(e){let t=e.querySelector(`[data-review-menu]`);return u(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function va(e,t){let n=t?`complete`:`in-progress`,r=e.querySelector(`[data-page-status]`);r&&(r.dataset.status=n,r.textContent=s(n));let i=e.querySelector(`[data-review-menu] [data-mark-status]`);if(i){let e=t?`in-progress`:`complete`;i.dataset.markStatus=e,i.textContent=c(e)}}function ya(e,t){let r=e.querySelector(`[data-review-menu]`);r&&(t?(r.dataset.lifecycleState=t.state,r.dataset.lifecycleAt=String(t.at)):(delete r.dataset.lifecycleState,delete r.dataset.lifecycleAt));let i=r?xa(r):void 0,a=e.querySelector(`[data-page-lifecycle]`);if(a){let e=n(t,i);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=!d(e,t,i),n.textContent=v(e,t,i)}}function ba(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=re(t))}function xa(e){return l(e.dataset)}function Sa(e){return u(e)??null}function Ca(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:a}=e,o={lifecycle:Sa(n)};if(typeof t==`boolean`&&(o.complete=t),typeof r==`boolean`&&(o.queued=r),a===null)o.activity=null;else{let e=i(a);e&&(o.activity=e)}return o}function wa(){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 Ta=`The workspace server did not answer. It may have stopped.`;function Ea(e){let t=()=>e.root.querySelector(`[data-review-menu]`),n=!1,r=async(t,r,i)=>{if(n)return{error:null,busy:!0};n=!0;let a=e.gate.begin();try{let n=await e.post(t,r),a=await n.json().catch(()=>null);return n.ok&&a?(ha(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Ta}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:Sa(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>r(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>r(`/lifecycle`,{state:e},e=>({lifecycle:Sa(e.lifecycle),queued:e.queued===!0})),setQueued:i,toggleQueued:()=>i(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:Ta}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,a=i&&r?.hasAttribute(`data-branch-actions`)===!0,o=r?u({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,s=r?l(r.dataset):void 0,c=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,f=!n;return{reviewed:f&&i&&!c,waiting:f&&a&&d(`waiting`,o,s),done:f&&a&&d(`done`,o,s),queue:f&&a,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function Da(e,t){return`${e} ${t}${e===1?``:`s`}`}function Oa(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Da(e,`issue`):``,questions:t?Da(t,`question`):``}}function ka(e,t){let n=Oa(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Aa(e){return e===0?``:`${e} chosen`}function ja(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 Na=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>`;Na(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Na(`<path d="M20 6 9 17l-5-5"/>`);function Pa(e){return Ma({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Fa(){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=Ia(t);return n?.basis!==r&&(n={text:Pa(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(!Ra(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 Ia(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 La=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Ra(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!La(t.issues)||!La(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 T=[`preview`,`markdown`],za={issue:`issues`,question:`questions`};function Ba({root:e,showView:t}){let n=Fa(),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=ka(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=ja(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:Va(e,`issue`,n.ids(`issue`)),questions:Va(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 Pa(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Aa(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){Ha(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=>Wa(e,t)),a(),c}function Va(e,t,n){return[...e.querySelectorAll(`[data-view="${za[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 Ha(e,t){for(let n of T){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 Ua(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Ua(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 Wa(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=T.indexOf(n),i=t.key===`ArrowRight`?T[(r+1)%T.length]:t.key===`ArrowLeft`?T[(r+T.length-1)%T.length]:t.key===`Home`?T[0]:t.key===`End`?T[T.length-1]:null;i&&(t.preventDefault(),Ha(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Ga(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 Ka(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&&!Ga(t),run:()=>n()?.click()}}}function qa(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 Ja(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function Ya(e){let{doc:t}=e,n=de({doc:t,item:`[data-finding-card]`,walk:()=>qa(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:()=>qa(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>qa(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:()=>!Ja(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 Xa=`prb-rail-review`;function Za(e){return(e.getElementById(Xa)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function Qa(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 $a(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function eo(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function to(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=Qa(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=$a(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=eo(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()}}}Ji(`progress`,`Review progress`);function no(e,t=Date.now()){return`Running for ${ro(t-e)}`}function ro(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 io={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function ao(e){let t=new Map;for(let n of Object.keys(io)){let r=io[n],i=e.querySelector(`[${r}]`);i&&!Hi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function oo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Hi(t.phase):so(t.phase,n)}function so(e,t){return Hi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function co(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||Ui(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 lo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=no(e))}}function uo(e,t=1e3){let n=window.setInterval(()=>lo(e),t);return()=>window.clearInterval(n)}async function fo({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`||Hi(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function po(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-${y(e.scope)}" data-diagram-card="${y(e.scope)}">
86
+ `)}var Ma=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>`;Ma(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Ma(`<path d="M20 6 9 17l-5-5"/>`);function Na(e){return ja({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Pa(){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=Fa(t);return n?.basis!==r&&(n={text:Na(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(!La(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 Fa(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 Ia=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function La(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Ia(t.issues)||!Ia(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 E=[`preview`,`markdown`],Ra={issue:`issues`,question:`questions`};function za({root:e,showView:t}){let n=Pa(),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=Oa(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=Aa(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(gt,t)}let s=()=>({issues:Ba(e,`issue`,n.ids(`issue`)),questions:Ba(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 Na(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=ka(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){Va(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(gt,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=>Ua(e,t)),a(),c}function Ba(e,t,n){return[...e.querySelectorAll(`[data-view="${Ra[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 Va(e,t){for(let n of E){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 Ha(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Ha(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?Ke(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function Ua(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=E.indexOf(n),i=t.key===`ArrowRight`?E[(r+1)%E.length]:t.key===`ArrowLeft`?E[(r+E.length-1)%E.length]:t.key===`Home`?E[0]:t.key===`End`?E[E.length-1]:null;i&&(t.preventDefault(),Va(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Wa(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 Ga(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&&!Wa(t),run:()=>n()?.click()}}}function Ka(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 qa(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function Ja(e){let{doc:t}=e,n=ue({doc:t,item:`[data-finding-card]`,walk:()=>Ka(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:()=>Ka(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>Ka(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:()=>!qa(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 Ya=`prb-rail-review`;function Xa(e){return(e.getElementById(Ya)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function Za(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 Qa(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function $a(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function eo(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=Za(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=Qa(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))},p=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=$a(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(),p(e.key))}),t.append(a,o,s),d(),a.focus()}}}qi(`progress`,`Review progress`);function to(e,t=Date.now()){return`Running for ${no(t-e)}`}function no(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 ro={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function io(e){let t=new Map;for(let n of Object.keys(ro)){let r=ro[n],i=e.querySelector(`[${r}]`);i&&!Vi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function ao(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Vi(t.phase):oo(t.phase,n)}function oo(e,t){return Vi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function so(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||Hi(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 co(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=to(e))}}function lo(e,t=1e3){let n=window.setInterval(()=>co(e),t);return()=>window.clearInterval(n)}async function uo({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`||Vi(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function fo(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>${y(e.title)}</span>
92
+ <span>${b(e.title)}</span>
93
93
  </button>
94
94
  </h4>
95
- <p class="prb-diagram-scope">${y(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="${y(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">${y(e.caption)}</p>`:``}
105
- ${mo(e,n)}
104
+ ${e.caption?`<p class="prb-diagram-caption">${b(e.caption)}</p>`:``}
105
+ ${po(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="${pe}"><pre><code data-mermaid-source>${y(e.mermaid)}</code></pre><button type="button" class="${me}" aria-label="Copy code">Copy</button></div>
109
+ <div class="${fe}"><pre><code data-mermaid-source>${b(e.mermaid)}</code></pre><button type="button" class="${pe}" aria-label="Copy code">Copy</button></div>
110
110
  </details>
111
- </article>`}function mo(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${y(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 ho=.5,go=3,_o=1.25,vo=new WeakSet,yo=new WeakMap,bo=new WeakMap,E=null;function xo(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(()=>{E?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Po(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Lo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Co(e):o&&So(e,o.dataset.diagramRequest||null)}),Do(),wo(),{drawPane:Fo}}async function So(e,t){if(E)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${Go(n)}"]`)??null??Ao(r,n,t);if(!i)return;Oo(),e.showDiagrams();let a=jo(i);E=new AbortController,Bo(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:E.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 Mo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);No(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Oo()):a.remove();return}Mo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{E=null,Bo(!0)}}async function Co(e){if(E)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=To(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),E=new AbortController,Bo(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:E.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){Eo(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),Oo()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Eo(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),E=null,Bo(!0)}}function wo(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(To(e),Bo(!1))}function To(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 Eo(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Do(){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="${Go(n)}"]`)??Ao(e,n,t);r&&(Oo(),jo(r,{scroll:!1}),Bo(!1))}function Oo(){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;ko(`map`,t>0),ko(`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 ko(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 Ao(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 po(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 mo=.5,ho=3,go=1.25,_o=new WeakSet,vo=new WeakMap,yo=new WeakMap,D=null;function bo(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(()=>{D?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){No(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Io(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?So(e):o&&xo(e,o.dataset.diagramRequest||null)}),Eo(),Co(),{drawPane:Po}}async function xo(e,t){if(D)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${Wo(n)}"]`)??null??ko(r,n,t);if(!i)return;Do(),e.showDiagrams();let a=Ao(i);D=new AbortController,zo(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:D.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 jo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Mo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Do()):a.remove();return}jo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{D=null,zo(!0)}}async function So(e){if(D)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=wo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),D=new AbortController,zo(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:D.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){To(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),Do()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}To(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),D=null,zo(!0)}}function Co(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(wo(e),zo(!1))}function wo(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 To(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Eo(){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="${Wo(n)}"]`)??ko(e,n,t);r&&(Do(),Ao(r,{scroll:!1}),zo(!1))}function Do(){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;Oo(`map`,t>0),Oo(`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 Oo(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 ko(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`:Wo(Vo(n))}</p>
114
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:Uo(Bo(n))}</p>
115
115
  </div>
116
- </header>`,Ho(e,r,n),r}function jo(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:Ko()?`auto`:`smooth`,block:`start`}),n}function Mo(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 No(e,t,n){let r=po(t,new Map(n?[[n,Vo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Oo(),Io(a))}function Po(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Io(e))}function Fo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Io(e)}async function Io(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||vo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){vo.add(e);try{await Ht(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{vo.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 Lo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){bo.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Ro(e,n);if(i<=0)return;let a=zo((bo.get(e)??1)*(t===`in`?_o:1/_o));bo.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Ro(e,t){let n=yo.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return yo.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function zo(e){return Math.min(go,Math.max(ho,e))}function Bo(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Vo(e){return e?document.querySelector(`[data-goto-section="${Go(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Ho(e,t,n){let r=Uo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Uo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Uo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${Go(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Wo(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Go(e){return CSS.escape(e)}function Ko(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var qo=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Jo=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],D={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Yo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Xo(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}=Zo(t.nodes);return{schemaVersion:1,title:rs(S(t.title).trim(),D.mapTitle)||`Change map`,intent:$o(t.intent,D.intent)??{simple:``,technical:``},nodes:n,edges:Qo(t.edges,r)}}function Zo(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=$o(e.title,D.title);if(!a)continue;let o=S(e.id).trim()||a.technical;if(t.has(o))continue;let s=ns(ts(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=qo.includes(e.role)?e.role:`concept`,l=$o(e.why,D.why),u=rs(S(e.anchor).trim(),D.anchor),d=S(e.sectionId).trim();r.push({id:s,role:c,stage:es(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:$o(e.body,D.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function Qo(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=$o(e.label,D.label),a=t.get(S(e.from).trim())??S(e.from).trim(),o=t.get(S(e.to).trim())??S(e.to).trim();if(!i||!a||!o)continue;let s=$o(e.note,D.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function $o(e,t){if(typeof e==`string`){let n=rs(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=rs(S(n.simple).trim(),t),i=rs(S(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function es(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Yo[t]}function ts(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function ns(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function rs(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 is(e,t){try{return as(Xo(e),t).map}catch{return null}}function as(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=cs(os(e.nodes,n).map(e=>ss(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:ls(r),edges:o},audit:n}}function os(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 ss(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 cs(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function ls(e){return[...e].sort((e,t)=>e.stage-t.stage)}function us(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?is(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return ds(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>`,Vo(e,r,n),r}function Ao(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:Go()?`auto`:`smooth`,block:`start`}),n}function jo(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 Mo(e,t,n){let r=fo(t,new Map(n?[[n,Bo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Do(),Fo(a))}function No(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Fo(e))}function Po(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Fo(e)}async function Fo(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||_o.has(e)||e.hasAttribute(`data-diagram-collapsed`))){_o.add(e);try{await Vt(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{_o.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 Io(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){yo.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Lo(e,n);if(i<=0)return;let a=Ro((yo.get(e)??1)*(t===`in`?go:1/go));yo.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Lo(e,t){let n=vo.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return vo.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Ro(e){return Math.min(ho,Math.max(mo,e))}function zo(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Bo(e){return e?document.querySelector(`[data-goto-section="${Wo(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Vo(e,t,n){let r=Ho(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Ho(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Ho(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${Wo(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Uo(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Wo(e){return CSS.escape(e)}function Go(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Ko=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],qo=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],O={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Jo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Yo(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}=Xo(t.nodes);return{schemaVersion:1,title:ns(C(t.title).trim(),O.mapTitle)||`Change map`,intent:Qo(t.intent,O.intent)??{simple:``,technical:``},nodes:n,edges:Zo(t.edges,r)}}function Xo(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=Qo(e.title,O.title);if(!a)continue;let o=C(e.id).trim()||a.technical;if(t.has(o))continue;let s=ts(es(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Ko.includes(e.role)?e.role:`concept`,l=Qo(e.why,O.why),u=ns(C(e.anchor).trim(),O.anchor),d=C(e.sectionId).trim();r.push({id:s,role:c,stage:$o(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:Qo(e.body,O.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function Zo(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=Qo(e.label,O.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=Qo(e.note,O.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function Qo(e,t){if(typeof e==`string`){let n=ns(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=ns(C(n.simple).trim(),t),i=ns(C(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function $o(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Jo[t]}function es(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function ts(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ns(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 rs(e,t){try{return is(Yo(e),t).map}catch{return null}}function is(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=ss(as(e.nodes,n).map(e=>os(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:cs(r),edges:o},audit:n}}function as(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 os(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 ss(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function cs(e){return[...e].sort((e,t)=>e.stage-t.stage)}function ls(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?rs(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return us(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">${y(a.title)}</h4>
120
- ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${O(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">${k(a.intent)}</p>`:``}
121
121
  </div>
122
122
  <div class="prb-map-tools">
123
- ${fs(i)}
123
+ ${ds(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
- ${ps(a,s)}
129
- ${_s(a)}
130
- </div>`}function ds(e){return`<div class="prb-map-empty" data-change-map-empty>
128
+ ${fs(a,s)}
129
+ ${gs(a)}
130
+ </div>`}function us(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 fs(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 ps(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">${y(Jo[n]??``)}</h5>
138
- ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>hs(n,t,e)).join(``)}
139
- </div>`).join(``),i=e.edges.map((e,t)=>gs(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
136
+ </div>`}function ds(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 fs(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(qo[n]??``)}</h5>
138
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>ms(n,t,e)).join(``)}
139
+ </div>`).join(``),i=e.edges.map((e,t)=>hs(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 ms={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function hs(e,t,n){let r=y(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>${O(e.label)}</em> <span aria-hidden="true">→</span> ${O(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">${ms[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}">${O(e.title)}</h5>
146
- ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${O(e.body)}</p>`:``}
147
- ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${O(e.why)}</p>`:``}
148
- ${e.anchor?`<code class="prb-map-anchor">${y(e.anchor)}</code>`:``}
143
+ </div>`}var ps={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function ms(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>${k(e.label)}</em> <span aria-hidden="true">→</span> ${k(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">${ps[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}">${k(e.title)}</h5>
146
+ ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${k(e.body)}</p>`:``}
147
+ ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${k(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="${y(e.sectionId)}" aria-label="Open ${y(i)} in the Review Path">Review Path: ${y(i)} <span aria-hidden="true">→</span></button>`:``}
151
- </article>`}function gs(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${y(e.from)}" data-to="${y(e.to)}">${O(e.label)}</span>`}function _s(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 hs(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${b(e.from)}" data-to="${b(e.to)}">${k(e.label)}</span>`}function gs(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>${O(n)}</strong> <em>${O(e.label)}</em> <strong>${O(r)}</strong>${e.note?`<span class="prb-map-note"> — ${O(e.note)}</span>`:``}</li>`}).join(``)}</ol>
154
- </details>`}function O(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 vs=`http://www.w3.org/2000/svg`,ys=new WeakSet,bs=new WeakMap;function xs(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){Ps(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&&Ns(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&&Ns(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`)&&(Ns(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:Ss,show:Cs}}function Ss(){for(let e of document.querySelectorAll(`[data-map-board]`))ws(e),Ts(e)}function Cs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=us({stored:e,sections:Is(),reviewedSha:e.commitSha,register:Fs()}),Ss())}function ws(e){if(ys.has(e)||typeof ResizeObserver>`u`)return;ys.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Ts(e)}))}).observe(e)}function Ts(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(Ms());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?Es(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=bs.get(e),ne=m&&m.width===te?m.edges:new Set;bs.set(e,{width:te,edges:ne});let re=(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,re(o,!0);return}let s=Ds(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ds(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ks(s,i.from,c,i.to),[u,te,m,h]=l,ie=p.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>As(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,re(o,!0);return}let g=document.createElementNS(vs,`path`);g.setAttribute(`d`,`M${k(u.x)},${k(u.y)} C${k(te.x)},${k(te.y)} ${k(m.x)},${k(m.y)} ${k(h.x)},${k(h.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,_=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=As(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=>js(e,t,2)));if(!_){g.remove(),e.hidden=!0,re(o,!0);return}re(o,!1),f.push(_),e.style.left=`${Math.round(_.left)}px`,e.style.top=`${Math.round(_.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Es(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 Ds(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 Os={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ks(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=Os[t],s=Os[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 As([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 js(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 k(e){return Math.round(e*10)/10}function Ms(){let e=document.createElementNS(vs,`defs`),t=document.createElementNS(vs,`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(vs,`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 Ns(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 Ps(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));Ss(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Fs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Is(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Ls=`repository`,Rs={minCharacters:8,maxLines:3,maxCharacters:400},zs=[`app`,`service`,`component`,`store`,`external`,`group`],Bs=/^[a-z][a-z0-9-]*$/;function Vs(e){let t=[];if(!Xs(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};Qs(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=Zs(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=$s(n.title,`architecture.title`,t),i=ec(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=Us(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=>Xs(e)&&typeof e.id==`string`&&Bs.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)Hs(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=Ws(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)&&(Hs(a,c).includes(d)||Hs(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 Hs(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 Us(e,t,n){if(!Xs(e))return n.push(`${t} must be an object.`),null;Qs(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=Zs(e,[`parent`,`description`,`owns`],t,n),i=tc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Ls}": that name is kept for the whole repository. Choose another id.`);let a=$s(r.name,`${t}.name`,n),o=zs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${zs.join(`, `)}.`);let s=r.parent===void 0?void 0:tc(r.parent,`${t}.parent`,n),c=ec(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Gs(r.owns,`${t}.owns`,n),u=Ks(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 Ws(e,t,n){if(!Xs(e))return n.push(`${t} must be an object.`),null;Qs(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=Zs(e,[`description`,`confidence`],t,n),i=tc(r.id,`${t}.id`,n),a=tc(r.source,`${t}.source`,n),o=tc(r.target,`${t}.target`,n),s=$s(r.label,`${t}.label`,n),c=ec(r.description,`${t}.description`,n),l=Ks(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 Gs(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=$s(e,`${t}[${i}]`,n);a!==null&&(!Ys(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 Ks(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(!Xs(e)){n.push(`${a} must be an object.`);return}Qs(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=Zs(e,[`symbol`,`line`,`note`],a,n);let o=$s(e.path,`${a}.path`,n);o!==null&&!Ys(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=qs(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=nc(e.line,`${a}.line`,n),u=ec(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 qs(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Rs.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Js(r);return r.split(`
155
- `).length>Rs.maxLines||r.length>Rs.maxCharacters?(n.push(`${t} must be at most ${Rs.maxLines} lines and ${Rs.maxCharacters} characters.`),null):i.length<Rs.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Rs.minCharacters} characters.`),null):r}function Js(e){return e.replace(/\s+/g,` `).trim()}function Ys(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function Xs(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Zs(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 Qs(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function $s(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function ec(e,t,n){if(e!==void 0)return $s(e,t,n)??void 0}function tc(e,t,n){if(typeof e==`string`&&Bs.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 nc(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 rc(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,...Hs(t,n)],i=e=>t!==null&&Hs(e,n).includes(t),a=e=>{let a=[e,...Hs(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 ic={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function ac(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 oc(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]=ic[e.kind],r=e.detail?`${ac(e.name)}<br>${ac(e.detail)}`:ac(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["${ac(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}|"${ac(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 sc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=rc(e,t),a=r===0&&t===null?`# ${cc(e.title)}`:`## ${cc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=oc(i,{edgeIds:!1}).source;return[a,...o?[cc(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>${k(n)}</strong> <em>${k(e.label)}</em> <strong>${k(r)}</strong>${e.note?`<span class="prb-map-note"> — ${k(e.note)}</span>`:``}</li>`}).join(``)}</ol>
154
+ </details>`}function k(e){return e.simple===e.technical?de(e.simple):`<span data-reg="simple">${de(e.simple)}</span><span data-reg="technical">${de(e.technical)}</span>`}var _s=`http://www.w3.org/2000/svg`,vs=new WeakSet,ys=new WeakMap;function bs(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){Ns(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&&Ms(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&&Ms(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`)&&(Ms(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:xs,show:Ss}}function xs(){for(let e of document.querySelectorAll(`[data-map-board]`))Cs(e),ws(e)}function Ss(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=ls({stored:e,sections:Fs(),reviewedSha:e.commitSha,register:Ps()}),xs())}function Cs(e){if(vs.has(e)||typeof ResizeObserver>`u`)return;vs.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,ws(e)}))}).observe(e)}function ws(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(js());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?Ts(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=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=ys.get(e),ee=g&&g.width===h?g.edges:new Set;ys.set(e,{width:h,edges:ee});let te=(t,n)=>{n&&ee.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(ee.has(o)){e.hidden=!0,te(o,!0);return}let s=Es(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Es(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Os(s,i.from,c,i.to),[u,h,g,ne]=l,re=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>ks(l,.05+t*.05)).some(e=>re.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,te(o,!0);return}let _=document.createElementNS(_s,`path`);_.setAttribute(`d`,`M${A(u.x)},${A(u.y)} C${A(h.x)},${A(h.y)} ${A(g.x)},${A(g.y)} ${A(ne.x)},${A(ne.y)}`),_.setAttribute(`class`,`prb-map-edge`),_.setAttribute(`marker-end`,`url(#prb-map-arrow)`),_.dataset.mapEdge=e.dataset.mapEdge??``,_.dataset.from=e.dataset.from??``,_.dataset.to=e.dataset.to??``,t.appendChild(_),e.hidden=!1;let ie=e.offsetWidth,ae=e.offsetHeight,v=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=ks(l,e);return{left:t.x-ie/2,top:t.y-ae/2,right:t.x+ie/2,bottom:t.y+ae/2}}).find(e=>![...m,...p,...f].some(t=>As(e,t,2)));if(!v){_.remove(),e.hidden=!0,te(o,!0);return}te(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 Ts(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 Es(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 Ds={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Os(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=Ds[t],s=Ds[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 ks([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 As(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 A(e){return Math.round(e*10)/10}function js(){let e=document.createElementNS(_s,`defs`),t=document.createElementNS(_s,`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(_s,`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 Ms(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 Ns(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));xs(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Ps(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Fs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Is=`repository`,j={minCharacters:8,maxLines:3,maxCharacters:400},Ls=[`app`,`service`,`component`,`store`,`external`,`group`],Rs=/^[a-z][a-z0-9-]*$/;function zs(e){let t=[];if(!qs(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};Ys(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=Js(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=Xs(n.title,`architecture.title`,t),i=Zs(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=Bs(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=>qs(e)&&typeof e.id==`string`&&Rs.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)M(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=Vs(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)&&(M(a,c).includes(d)||M(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 M(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 Bs(e,t,n){if(!qs(e))return n.push(`${t} must be an object.`),null;Ys(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=Js(e,[`parent`,`description`,`owns`],t,n),i=Qs(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Is}": that name is kept for the whole repository. Choose another id.`);let a=Xs(r.name,`${t}.name`,n),o=Ls.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Ls.join(`, `)}.`);let s=r.parent===void 0?void 0:Qs(r.parent,`${t}.parent`,n),c=Zs(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Hs(r.owns,`${t}.owns`,n),u=Us(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 Vs(e,t,n){if(!qs(e))return n.push(`${t} must be an object.`),null;Ys(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=Js(e,[`description`,`confidence`],t,n),i=Qs(r.id,`${t}.id`,n),a=Qs(r.source,`${t}.source`,n),o=Qs(r.target,`${t}.target`,n),s=Xs(r.label,`${t}.label`,n),c=Zs(r.description,`${t}.description`,n),l=Us(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 Hs(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=Xs(e,`${t}[${i}]`,n);a!==null&&(!Ks(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 Us(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(!qs(e)){n.push(`${a} must be an object.`);return}Ys(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=Js(e,[`symbol`,`line`,`note`],a,n);let o=Xs(e.path,`${a}.path`,n);o!==null&&!Ks(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=Ws(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=$s(e.line,`${a}.line`,n),u=Zs(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 Ws(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${j.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Gs(r);return r.split(`
155
+ `).length>j.maxLines||r.length>j.maxCharacters?(n.push(`${t} must be at most ${j.maxLines} lines and ${j.maxCharacters} characters.`),null):i.length<j.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${j.minCharacters} characters.`),null):r}function Gs(e){return e.replace(/\s+/g,` `).trim()}function Ks(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function qs(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Js(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 Ys(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function Xs(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function Zs(e,t,n){if(e!==void 0)return Xs(e,t,n)??void 0}function Qs(e,t,n){if(typeof e==`string`&&Rs.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 $s(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 ec(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,...M(t,n)],i=e=>t!==null&&M(e,n).includes(t),a=e=>{let a=[e,...M(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 tc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function nc(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 rc(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]=tc[e.kind],r=e.detail?`${nc(e.name)}<br>${nc(e.detail)}`:nc(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["${nc(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}|"${nc(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 ic(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=ec(e,t),a=r===0&&t===null?`# ${ac(e.title)}`:`## ${ac(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=rc(i,{edgeIds:!1}).source;return[a,...o?[ac(o)]:[],["```mermaid",s,"```"].join(`
157
157
  `)].join(`
158
158
 
159
159
  `)}).join(`
160
160
 
161
- `)}\n`}function cc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var lc={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 uc(e){return lc[e.stage]}var dc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},fc=5e3;function pc(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&&hc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&gc(e,r,r.dataset.architectureStop||`repository`)}),vc(e,()=>{r()?mc():n=!0});async function i(){if(n)return mc();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 Cc(r,`The architecture could not be read.`)}let s=Vs(o.architecture);if(!s.ok)return Cc(r,`The architecture could not be read.`);let c={scope:Ls,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=Vs(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new bc({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&&yc(r,c,l)}),d}return{show:i}}function mc(){let e=mr(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function hc(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 mc();_c(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{_c(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function gc(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 mc();_c(t,`Mapping could not be stopped.`)}catch{_c(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function _c(e,t){let n=A(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function vc(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}=uc(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(),fc)};window.setTimeout(()=>void r(),fc)}async function yc(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=>sc(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 bc=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 v(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return Cc(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&&Sc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&Sc(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),Cc(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(...xc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(A(`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;wc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(A(`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=A(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=xc(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(A(`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(A(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=A(`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=A(`details`,`prb-arch-failure-details`,``),n=A(`ul`,``,``);for(let e of r.errors)n.append(A(`li`,``,e));e.append(A(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function xc(e,t,n){let r=t?[A(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,A(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=A(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[A(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function Sc(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?[]:[...Hs(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=A(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]:[A(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function Cc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function wc(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=A(`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=[A(`p`,`prb-arch-kind`,`${dc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),A(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(A(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=A(`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(Tc(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(A(`h5`,`prb-arch-subhead`,`Relationships`));let e=A(`ul`,`prb-arch-related`,``);for(let t of d)e.append(A(`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(A(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=A(`section`,`prb-arch-relationship`,``);n.append(A(`p`,`prb-arch-kind`,`Relationship`),A(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(A(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(A(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Tc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Tc(e,t=[]){let n=A(`div`,`prb-arch-evidence`,``);n.append(A(`h5`,`prb-arch-subhead`,`Evidence`));let r=A(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=A(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=A(`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(A(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(A(`span`,`prb-arch-location`,e.path),A(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(A(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(A(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function A(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}var Ec=5e3;function Dc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{ie(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():ie(t,n.unread)}}catch{}n.setTimeout(()=>void a(),Ec)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void a(),Ec)}function Oc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var kc=1e3,Ac=new WeakMap;function jc(e,t){return e.length<=1e3?Oc(e)||`&nbsp;`:`${Oc(e.slice(0,kc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Mc(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">${jc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Nc(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?Mc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${jc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Mc(a)),i.join(``)}function Pc(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 Fc(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&&Ac.set(r,o)}}function Ic(e){let t=Ac.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Lc(e){return e.deletion?2*e.line-1:2*e.line}function Rc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function zc(e,t){if(e.length===0)return``;let n=e.map(Lc),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 ac(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var oc={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 sc(e){return oc[e.stage]}var cc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},lc=5e3;function uc(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&&fc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&pc(e,r,r.dataset.architectureStop||`repository`)}),hc(e,()=>{r()?dc():n=!0});async function i(){if(n)return dc();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 bc(r,`The architecture could not be read.`)}let s=zs(o.architecture);if(!s.ok)return bc(r,`The architecture could not be read.`);let c={scope:Is,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=zs(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new _c({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&&gc(r,c,l)}),d}return{show:i}}function dc(){let e=pr(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function fc(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 dc();mc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{mc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function pc(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 dc();mc(t,`Mapping could not be stopped.`)}catch{mc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function mc(e,t){let n=N(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function hc(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}=sc(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(),lc)};window.setTimeout(()=>void r(),lc)}async function gc(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=>ic(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 _c=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 bc(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&&yc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&yc(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),bc(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(...vc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(N(`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;xc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(N(`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=N(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=vc(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(N(`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(N(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=N(`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=N(`details`,`prb-arch-failure-details`,``),n=N(`ul`,``,``);for(let e of r.errors)n.append(N(`li`,``,e));e.append(N(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function vc(e,t,n){let r=t?[N(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,N(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=N(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[N(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function yc(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?[]:[...M(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=N(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]:[N(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function bc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function xc(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=N(`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=[N(`p`,`prb-arch-kind`,`${cc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),N(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(N(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=N(`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(Sc(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(N(`h5`,`prb-arch-subhead`,`Relationships`));let e=N(`ul`,`prb-arch-related`,``);for(let t of d)e.append(N(`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(N(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=N(`section`,`prb-arch-relationship`,``);n.append(N(`p`,`prb-arch-kind`,`Relationship`),N(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(N(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(N(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Sc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Sc(e,t=[]){let n=N(`div`,`prb-arch-evidence`,``);n.append(N(`h5`,`prb-arch-subhead`,`Evidence`));let r=N(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=N(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=N(`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(N(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(N(`span`,`prb-arch-location`,e.path),N(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(N(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(N(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function N(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}var Cc=5e3;function wc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{_(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():_(t,n.unread)}}catch{}n.setTimeout(()=>void a(),Cc)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void a(),Cc)}function Tc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Ec=1e3,Dc=new WeakMap;function Oc(e,t){return e.length<=1e3?Tc(e)||`&nbsp;`:`${Tc(e.slice(0,Ec))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function kc(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">${Oc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Ac(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?kc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Oc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(kc(a)),i.join(``)}function jc(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 Mc(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&&Dc.set(r,o)}}function Nc(e){let t=Dc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Pc(e){return e.deletion?2*e.line-1:2*e.line}function Fc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Ic(e,t){if(e.length===0)return``;let n=e.map(Pc),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 Bc(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:Rc(i)}}function Vc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Hc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Rc)}function Uc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Rc(t):void 0}function Wc(e,t){return Math.max(e,+!t)+1}var Gc=8;function Kc(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 qc(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Jc(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 Yc(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Xc(e){if(!e.hasAttribute(`data-expanded`))return;let t=Kc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=qc({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Zc(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 Qc=!1;function $c(){Qc||(Qc=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Xc(e)}))}function el(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Jc(n):null;t?(e.setAttribute(`data-expanded`,``),Xc(e),$c()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Zc(e),n&&r&&Yc(n,r);let i=t?Kc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Gc)}var tl={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 nl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:tl[t.slice(n+1).toLowerCase()]??null}function rl(e){let t=new Set;for(let n of e){let e=nl(n);e&&t.add(e)}return[...t]}var il={ruby:()=>v(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>v(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>v(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>v(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>v(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>v(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>v(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>v(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>v(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>v(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>v(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>v(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>v(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>v(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>v(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>v(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>v(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>v(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>v(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>v(()=>import(`./chunk-DswuEJGm.js`),[])},al=`github-light-default`,ol=null,sl=new Map;function cl(){return ol??=Promise.all([v(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),v(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),v(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(v(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),ol}function ll(e){let t=sl.get(e);return t||(t=cl().then(async t=>t?(await t.loadLanguage(il[e]),!0):!1).catch(()=>!1),sl.set(e,t)),t.then(e=>e?cl():null)}var ul={async preload(e){await ll(e)},async tokenize(e,t){let n=await ll(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:al}),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 dl(e,t=ul){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var fl=/^#[0-9a-f]{3,8}$/i;function pl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&fl.test(e.color)?`<span style="color:${e.color}">${Oc(e.content)}</span>`:Oc(e.content)).join(``)}function ml(e){return e.length>1e3?e.slice(0,kc):e}function hl(e,t,n){if(!e||t===``)return;let r=pl(ml(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 gl(e,t,n=ul){let r=nl(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(ml).join(`
167
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{hl(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=>ml(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;hl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function _l(e,t=ul){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in il)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=pl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var j=ee({ownsRestore:!0}),M=document.body,vl=M.dataset.apiBase??``,yl=M.dataset.token??``,bl=M.dataset.editorLabel??``,xl=M.dataset.editorTemplate??``,Sl=M.dataset.repoPath??``,Cl=M.dataset.explainPrompt??``,wl=M.dataset.sessionId??``;function N(e){return`${vl}${e}?t=${encodeURIComponent(yl)}`}function Tl(e){fetch(N(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var El=xo({endpoint:N,showDiagrams:()=>I(`diagram`),showMap:()=>I(`map`),showChangeMap:e=>Dl.show(e)}),Dl=xs({endpoint:N,showView:e=>I(e)}),Ol=pc({endpoint:N}),kl=null,Al=`the whole change`;function jl(e){let t=gr(e,Pl),n=j.push(dr(t),t);Ml++,Fl(t),n&&Nl(t)}var Ml=0;function Nl(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&&d(document,t)}var P=null,Pl=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Fl(e){let t=gr(e,Pl);if(t!==e){let{kind:e,view:n,focus:r,...i}=p(history.state);j.replace(dr(t),{...i,...t})}let n=!P||!Cr(P,t);P=t,n&&(t.kind===`view`?Bl(t.view):Wl(t.sectionId)),Ll(t.focus??null)}var Il={history:{get state(){return history.state},pushState:(e,t,n)=>{Ml++,j.push(n,p(e))},replaceState:(e,t,n)=>j.replace(n,p(e)),back:()=>history.back()},apply:Fl},F=ue(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?fd(e):pd(e),onClose:pd});$n(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=>F.close(e)});function Ll(e){Dr(document.querySelector(`.prb-body`),document,e),F.closeAll(),e===`buddy`&&ju()}function Rl(e){P&&(P.focus===e?Tr(P,Il):wr(P,e,Il))}function I(e,t={}){let n=t.keepFocus&&P?.focus?e:pr(e,P?.focus);jl({kind:`view`,view:e,...n?{focus:n}:{}})}function zl(e){jl({kind:`section`,sectionId:e,...P?.focus===`guide`?{focus:`guide`}:{}})}function Bl(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`&&Tl({event:`view_opened`,view:e}),e===`diagram`&&El.drawPane(),e===`map`&&Dl.layout(),e===`architecture`&&Ol.show(),Vl(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Vl(){Xr(),kl=null,Al=`the whole change`,Gl()}function Hl(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)}function Ul(){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`)&&Hl(e,!0)}}function Wl(e){Bl(`guide`),Ul(),Yr(e);let t=qr(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);Tl({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),kl=e,Al=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Gl()}function Gl(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Al)}function L(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Kl(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function ql(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}=Kl(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),Tl({event:`file_opened`,fromFinding:i,targeted:r>0}),await Yl(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var Jl=ai();function Yl(e,t,n){return Jl.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?()=>Xl(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${L(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 Xl(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=Nc(t,r),s=xl&&Sl?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="${L(t.path)}" data-open-line="${r||t.from}">${L(`Open in ${bl||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${L(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${L(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${L(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Wc(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>${L(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${zc(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 Lc(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:Fc(i)}}function Rc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function zc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Fc)}function Bc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Fc(t):void 0}function Vc(e,t){return Math.max(e,+!t)+1}var Hc=8;function Uc(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 Wc(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Gc(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 Kc(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function qc(e){if(!e.hasAttribute(`data-expanded`))return;let t=Uc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=Wc({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Jc(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 Yc=!1;function Xc(){Yc||(Yc=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))qc(e)}))}function Zc(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Gc(n):null;t?(e.setAttribute(`data-expanded`,``),qc(e),Xc()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Jc(e),n&&r&&Kc(n,r);let i=t?Uc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Hc)}var Qc={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 $c(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Qc[t.slice(n+1).toLowerCase()]??null}function el(e){let t=new Set;for(let n of e){let e=$c(n);e&&t.add(e)}return[...t]}var tl={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`),[])},nl=`github-light-default`,rl=null,il=new Map;function al(){return rl??=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),rl}function ol(e){let t=il.get(e);return t||(t=al().then(async t=>t?(await t.loadLanguage(tl[e]),!0):!1).catch(()=>!1),il.set(e,t)),t.then(e=>e?al():null)}var sl={async preload(e){await ol(e)},async tokenize(e,t){let n=await ol(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:nl}),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 cl(e,t=sl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var ll=/^#[0-9a-f]{3,8}$/i;function ul(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&ll.test(e.color)?`<span style="color:${e.color}">${Tc(e.content)}</span>`:Tc(e.content)).join(``)}function dl(e){return e.length>1e3?e.slice(0,Ec):e}function fl(e,t,n){if(!e||t===``)return;let r=ul(dl(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 pl(e,t,n=sl){let r=$c(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(dl).join(`
167
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{fl(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=>dl(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;fl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function ml(e,t=sl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in tl)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=ul(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var hl=r({ownsRestore:!0}),gl=document.body,_l=gl.dataset.apiBase??``,vl=gl.dataset.token??``,yl=gl.dataset.editorLabel??``,bl=gl.dataset.editorTemplate??``,xl=gl.dataset.repoPath??``,Sl=gl.dataset.explainPrompt??``,Cl=gl.dataset.sessionId??``;function P(e){return`${_l}${e}?t=${encodeURIComponent(vl)}`}function wl(e){fetch(P(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Tl=bo({endpoint:P,showDiagrams:()=>L(`diagram`),showMap:()=>L(`map`),showChangeMap:e=>El.show(e)}),El=bs({endpoint:P,showView:e=>L(e)}),Dl=uc({endpoint:P}),Ol=null,kl=`the whole change`;function Al(e){let t=hr(e,Nl),n=hl.push(ur(t),t);jl++,Pl(t),n&&Ml(t)}var jl=0;function Ml(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&&f(document,t)}var F=null,Nl=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Pl(e){let t=hr(e,Nl);if(t!==e){let{kind:e,view:n,focus:r,...i}=h(history.state);hl.replace(ur(t),{...i,...t})}let n=!F||!Sr(F,t);F=t,n&&(t.kind===`view`?zl(t.view):Ul(t.sectionId)),Il(t.focus??null)}var Fl={history:{get state(){return history.state},pushState:(e,t,n)=>{jl++,hl.push(n,h(e))},replaceState:(e,t,n)=>hl.replace(n,h(e)),back:()=>history.back()},apply:Pl},I=le(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?dd(e):fd(e),onClose:fd});Qn(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 Il(e){Er(document.querySelector(`.prb-body`),document,e),I.closeAll(),e===`buddy`&&Au()}function Ll(e){F&&(F.focus===e?wr(F,Fl):Cr(F,e,Fl))}function L(e,t={}){let n=t.keepFocus&&F?.focus?e:fr(e,F?.focus);Al({kind:`view`,view:e,...n?{focus:n}:{}})}function Rl(e){Al({kind:`section`,sectionId:e,...F?.focus===`guide`?{focus:`guide`}:{}})}function zl(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`&&wl({event:`view_opened`,view:e}),e===`diagram`&&Tl.drawPane(),e===`map`&&El.layout(),e===`architecture`&&Dl.show(),Bl(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Bl(){Yr(),Ol=null,kl=`the whole change`,Wl()}function Vl(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)}function Hl(){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`)&&Vl(e,!0)}}function Ul(e){zl(`guide`),Hl(),Jr(e);let t=Kr(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);wl({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),Ol=e,kl=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Wl()}function Wl(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=kl)}function R(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Gl(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Kl(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}=Gl(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),wl({event:`file_opened`,fromFinding:i,targeted:r>0}),await Jl(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var ql=ii();function Jl(e,t,n){return ql.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?()=>Yl(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 Yl(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=Ac(t,r),s=bl&&xl?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 ${yl||`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="${Vc(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>${Ic(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`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}
172
- ${p}
172
+ ${m}
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}`,Fc(e,t),Xc(e),Zc(e),(n.focus?Vc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),gl(e,t)}async function Zl(e,t,n){let r=Bc(t,n);if(!r)return;let i=Vc(e,r.anchor);if(i)t.outerHTML=zc(Hc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Yl(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 Ql(e,t,n){let r=`${Sl.replace(/\/$/,``)}/${e}`,i=xl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Tl({event:`editor_opened`,fromFinding:n}),window.location.href=i}var R=document.querySelector(`[data-ask-log]`);R&&R.querySelector(`.prb-msg`)&&R.scrollTo({top:R.scrollHeight});var $l=document.querySelector(`[data-ask-form]`),z=$l?.querySelector(`textarea`);function eu(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,R?.appendChild(n),R?.scrollTo({top:R.scrollHeight}),n}function tu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,R?.appendChild(e),R?.scrollTo({top:R.scrollHeight}),e}var B=null,V=!!R?.querySelector(`[data-ask-pending]`);function nu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,R?.appendChild(e),R?.scrollTo({top:R.scrollHeight})}async function ru(e,t=`free_text`,n={}){let r=e.trim();if(!r||B||V)return;document.querySelector(`.prb-ask-empty`)?.remove(),eu(`user`,r);let i=tu();B=new AbortController,au(!0);try{let e=await fetch(N(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:kl,source:t,...n}),signal:B.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){iu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){nu();return}if(!e.ok||!a?.answer){eu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}eu(`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`?(nu(),iu(r,n.continuesExplanation)):(eu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),iu(r,n.continuesExplanation))}finally{B=null,au(!1)}}function iu(e,t){!z||z.value||(z.value=e,jf?.save(),t&&(H=H?.continues&&e.includes(H.text)?H:{text:e,source:`finding`,continues:t},jf?.stage(H)))}function au(e){let t=$l?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(ou))t.disabled=e;e&&F.closeAll(),e||z?.focus()}var ou=`[data-suggestion], .pr-helper-explain-simply-button`;function su(){let e=$l?.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(()=>{B?.abort()})}$l?.addEventListener(`submit`,e=>{if(e.preventDefault(),B||V)return su();let t=z?.value??``;z&&(z.value=``),jf?.clear();let n=Un(H,t);ru(t,cu(t),n?{continuesExplanation:n}:{})}),V&&au(!0);var H=null;function cu(e){return H&&e.includes(H.text)?H.source:`free_text`}z?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),B||V)return;$l?.requestSubmit()}}),z?.addEventListener(`input`,()=>{z&&(z.style.height=`auto`,z.style.height=`${Math.min(z.scrollHeight,140)}px`)});async function lu(e){try{await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function uu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function du(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&&_u(n,t,`questions`),Cu()}function fu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||wl})).filter(e=>e.id)}async function pu(e){try{await fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function mu(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=wl: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(hu()),_u(n,t||e.dataset.settled===`true`,`issues`),Tu())}function hu(){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 gu=new WeakMap;function _u(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&gu.set(e,{parent:t,before:e.nextElementSibling}),xu(n).append(e),t&&bu(t)}else vu(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Su(n)}}function vu(e,t){let n=gu.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=yu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function yu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function bu(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function xu(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 Su(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})`:Gr(wu()),Kn(document)}function Cu(){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=Kr(e.length,t)),Eu(`questions`,e.length,t,`question`,`answered`)}function wu(){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 Tu(){let e=wu();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=Wr(e.total,e.open,Ar(e))),Eu(`issues`,e.total,e.open,`issue`,Ar(e))}function Eu(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){Hl(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!g(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){I(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Lr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Hr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){I(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){zl(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){Ql(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){Pc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&el(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&&Zl(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let ee=t.closest(`[data-full-line]`);if(ee){let e=Ic(ee);e&&_l(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]`);Yl(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:Uc(t)})}return}let te=t.closest(`[data-focus-toggle]`);if(te?.dataset.focusToggle){Rl(te.dataset.focusToggle);return}let m=t.closest(`[data-prompt-toggle]`);if(m){ed(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){ql(ne);return}let re=Jr(t);if(re){zl(re);return}let h=t.closest(`[data-question-answered]`);if(h?.dataset.questionAnswered){du(h,h.dataset.answered!==`true`),Nr(h);let e=uu();lu(e),Tl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let ie=t.closest(`[data-issue-dismissed]`);if(ie?.dataset.issueDismissed){mu(ie,ie.dataset.stale===`true`||ie.dataset.dismissed!==`true`);let e=fu();pu(e),Tl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ae=t.closest(`[data-suggestion]`);if(ae){ru(ae.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){ju(),ru(Cl,`explain_simply`);return}let oe=t.closest(`[data-prompt-use]`);if(oe?.dataset.promptUse){td(oe.dataset.promptUse);return}let _=t.closest(`[data-prompt-edit]`);if(_?.dataset.promptEdit){Sd(_.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Sd(``);return}if(t.closest(`[data-ask-toggle]`)){let e=P?.focus;e?(Tr(P,Il),ku(e!==`buddy`)):ku(!Ou())}});var U=document.querySelector(`.prb-body`),Du=document.querySelector(`.prb-ask`);function Ou(){return!!Du&&getComputedStyle(Du).display!==`none`}function ku(e){U&&(U.dataset.ask=e?`open`:`closed`),Au(e)}function Au(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function ju(){P?.focus&&P.focus!==`buddy`&&Tr(P,Il),ku(!0)}function Mu(){Au(Ou())}window.addEventListener(`resize`,Mu),oe(N(`/restart`));var Nu=document.querySelector(`[data-file-filter]`),Pu=document.querySelector(`[data-file-count]`),Fu=document.querySelector(`[data-file-none]`);function Iu(){let e=(Nu?.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}`}Fu&&(Fu.hidden=n>0),Pu&&(Pu.textContent=e?`${t} of ${Lu} file${Lu===1?``:`s`}`:`${Lu} file${Lu===1?``:`s`}`)}var Lu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Nu?.addEventListener(`input`,Iu),Nu?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Nu.value!==``&&(e.preventDefault(),Nu.value=``,Iu())}),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(),ql(n))});var Ru=320,zu=()=>Math.round(window.innerWidth/2),Bu=e=>Math.round(Math.min(zu(),Math.max(Ru,e)));function Vu(e){U&&(e===null?U.style.removeProperty(`--ask-width`):U.style.setProperty(`--ask-width`,`${e}px`))}function Hu(){return Du?Math.round(Du.getBoundingClientRect().width):Ru}function Uu(e){fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var W=document.querySelector(`[data-ask-resize]`);W?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!U||!Du)return;e.preventDefault(),W.setPointerCapture(e.pointerId),U.dataset.resizing=`true`;let t=e.clientX,n=Hu(),r=e=>{Vu(Bu(n+(t-e.clientX)))},i=()=>{W.removeEventListener(`pointermove`,r),W.removeEventListener(`pointerup`,i),W.removeEventListener(`pointercancel`,i),delete U.dataset.resizing,Uu(Hu())};W.addEventListener(`pointermove`,r),W.addEventListener(`pointerup`,i),W.addEventListener(`pointercancel`,i)}),W?.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=Bu(Hu()+n);Vu(r),Uu(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Vu(null),Uu(null))}),W?.addEventListener(`dblclick`,()=>{Vu(null),Uu(null)}),window.addEventListener(`resize`,()=>{Ou()&&U?.style.getPropertyValue(`--ask-width`)&&Vu(Bu(Hu()))});var Wu=3e4,Gu=document.visibilityState===`visible`?Date.now():null,Ku=0;function qu(){Gu!==null&&(Ku+=Date.now()-Gu,Gu=Date.now())}function Ju(){qu();let e=Math.round(Ku/1e3);return Ku-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Gu=Date.now():(qu(),Gu=null)}),setInterval(()=>{let e=Ju();e>0&&Tl({event:`workspace_heartbeat`,visibleSeconds:e})},Wu),window.addEventListener(`pagehide`,()=>{let e=N(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Ju()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Yu=document.querySelector(`[data-prompt-bank]`),Xu=document.querySelector(`[data-prompt-list]`),G=Zu();function Zu(){try{let e=JSON.parse(Yu?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Qu(){if(!Xu)return;Xu.innerHTML=G.map(e=>`<span class="prb-bank-item">
177
- <button type="button" class="prb-bank-use" data-prompt-use="${L(e.id)}" title="${L(e.prompt)}">${L(e.name)}</button>
178
- <button type="button" class="prb-bank-edit" data-prompt-edit="${L(e.id)}" aria-label="Edit ${L(e.name)}">&#9998;</button>
179
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(G.length)),ld()}async function $u(e){try{let t=await(await fetch(N(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);G=Array.isArray(t?.prompts)?t.prompts:G}catch{}Qu()}function ed(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Yu?.toggleAttribute(`data-collapsed`,e),Xu&&(Xu.hidden=e),fetch(N(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function td(e){let t=G.find(t=>t.id===e);!t||!z||(z.value=Zr(z.value,t.prompt),ju(),z.focus(),z.setSelectionRange(z.value.length,z.value.length),z.dispatchEvent(new Event(`input`)))}var nd=document.querySelector(`.prb-doc`),rd=null,id=null;function ad(){R&&(id?.(),id=yn(R,{layout:`flat`,actions:Sn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>ud(e,`selection`,t)}))}var od=`reassess`;function sd(e){let t=cd();if(!e)return t;let n={id:od,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function cd(){return[...bn.map(e=>({id:e.id,label:e.label})),...G.map(e=>({id:rr(e.id),label:e.name,section:nr}))]}function ld(){nd&&(rd?.(),rd=yn(nd,{triggerLabel:`Ask Buddy AI`,actions:cd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>ud(e,`selection`,t)}))}function ud(e,t,n,r){kr(e,{context:t,text:n},{savedPrompt:e=>G.find(t=>t.id===e)?.prompt??null,stage:e=>dd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{ju(),ru(t,`finding`,Rn(e,r?.ref))}})}function dd(e,t,n){z&&(H={text:e,source:t,...n?{continues:n}:{}},jf?.stage(H),z.value=Zr(z.value,e),ju(),z.focus(),z.setSelectionRange(z.value.length,z.value.length),z.dispatchEvent(new Event(`input`)))}function fd(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=ln(sd(Bn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(B||V)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function pd(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(F.close(n),r===od){i&&a&&md(a,i);return}i&&ud(r,`finding`,i,a?{ref:a}:void 0)});function md(e,t){if(B||V)return;let n=e.kind===`issue`?`severity`:`importance`;ju(),ru(`${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&&dd(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&&ud(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),ld(),ad();var K=Ba({root:document,showView:e=>I(e)}),hd=Ya({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>F.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>K.state().selecting,flip:e=>void K.flip(e)});Mt(document),Kt(document);var gd=document.querySelector(`[data-prompt-dialog]`),_d=document.querySelector(`[data-prompt-name]`),vd=document.querySelector(`[data-prompt-text]`),yd=document.querySelector(`[data-prompt-delete]`),bd=document.getElementById(`prb-prompt-title`),xd=``;function Sd(e){let t=G.find(t=>t.id===e);xd=t?.id??``,bd&&(bd.textContent=t?`Edit prompt`:`Save a prompt`),_d&&(_d.value=t?.name??``),vd&&(vd.value=t?.prompt??``),yd&&(yd.hidden=!t),gd?.showModal(),_d?.focus()}async function Cd(){let e=_d?.value.trim()??``,t=vd?.value.trim()??``;if(!e||!t){(e?vd:_d)?.focus();return}let n=xd?G.map(n=>n.id===xd?{...n,name:e,prompt:t}:n):[...G,{id:crypto.randomUUID(),name:e,prompt:t}];gd?.close(),await $u(n)}async function wd(){if(!xd)return;let e=G.filter(e=>e.id!==xd);gd?.close(),await $u(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>gd?.close()),yd?.addEventListener(`click`,()=>void wd()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Cd());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),Td=document.querySelector(`[data-fresh-check]`),Y=Id(q?.dataset.report),Ed=`prb-fresh-reopen`,Dd=Md(),Od=q?.dataset.dismissedSha,kd=jd(q?.dataset.availability),X=Ad(q?.dataset.remote);function Ad(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function jd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Md(){try{return sessionStorage.getItem(Ed)!==null&&(sessionStorage.removeItem(Ed),!0)}catch{return!1}}Dd&&$d(),Td?.addEventListener(`click`,()=>void Bd());var Nd=document.querySelector(`[data-fetch-remote]`);Nd&&(fetch(N(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Nd.hidden=!1)}).catch(()=>{}),Nd.addEventListener(`click`,()=>void Pd(Nd)));async function Pd(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};ae(m(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:ce(n)}),n.fetched>0&&await Bd()}q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Dd=!1,$d();let n=t.closest(`[data-fresh-dismiss]`);n&&(Od=n.dataset.freshDismiss||void 0,Dd=!1,$d(),Fd())});function Fd(){fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Od??null})}).catch(()=>{})}function Id(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Ld=Ta(),Rd=!1,zd=null;async function Bd(){if(Rd)return;Rd=!0,Kd(!0),zd&&await zd;let e=qd(Y,X),t=await Hd(!1);Kd(!1),t&&Qd(),Rd=!1,t&&(Y?.code.state===`changed`||X!==null)&&Od!==void 0&&(Od=void 0,Fd()),$d(),Vd(t?qd(Y,X)===e?`No change`:`Updated`:`Could not check`)}function Vd(e){J&&(J.textContent=e,window.setTimeout(ef,2600))}async function Hd(e){let t=Ld.snapshot();try{let n=await(await fetch(`${N(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,kd=n.availability??null,X=n.remote??null,Yd=n.kiss??null,n.kissDismissedSha!==void 0&&(Xd=n.kissDismissedSha??void 0),n.prState!==void 0&&Gd(n.prState);let r=wa(n.standing);return r&&Ld.current(t)&&ga(document,r),!0}catch{return!1}}async function Ud(){if(Rd||zd||!q)return;let e=qd(Y,X),t=JSON.stringify(Yd);zd=Hd(!0);let n=await zd;zd=null,Wd=Date.now(),n&&(qd(Y,X)!==e&&$d(),JSON.stringify(Yd)!==t&&Qd())}var Wd=Date.now();function Gd(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=ha(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Kd(e){Td&&(Td.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function qd(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Jd=document.querySelector(`[data-kiss-fresh-region]`),Yd=Zd(Jd?.dataset.freshness),Xd=Jd?.dataset.dismissedSha;function Zd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Qd(){ca(Yd?.state===`changed`),Jd&&(Jd.innerHTML=ea(Jd.dataset.reviewedSha??``,Yd,{dismissedSha:Xd,actions:yl!==``}))}Jd?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Xd=t.dataset.kissFreshnessDismiss||void 0,Qd(),fetch(N(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Xd??null})}).catch(()=>{}))});function $d(){q&&(q.innerHTML=Di(Y,{dismissedSha:Od,open:Dd,actions:yl!==``,availability:kd,remote:X}),ef())}function ef(){if(J&&(Y||X)){let{label:e,state:t}=Ti(Y,X);J.textContent=e,J.dataset.state=t,Ri(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return tf(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 rf(i);if(t.closest(`[data-review-update]`))return void cf();let a=t.closest(`[data-update-cancel]`);if(a)return void uf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void uf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function tf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>nf(e,`Copied`),()=>nf(e,`Select it`))}function nf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function rf(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=af(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${pf}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=af(e)?null:mf(e);try{await fetch(N(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}af(e)&&of(),window.location.reload()}function af(e){return e.closest(`.prb-fresh-notes p`)}function of(){try{sessionStorage.setItem(Ed,`1`)}catch{}}var sf=!1;async function cf(){if(sf)return;sf=!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`&&!Hi(e.update.phase)&&n()}catch{}},500);try{await fetch(N(`/update`),{method:`POST`})}catch{}n()}var lf={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 uf(e,t){let n=lf[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,ff(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||ff(e,n.tooLate),await fo({look:async()=>{let e=await fetch(N(`/job`),{signal:AbortSignal.timeout(df)});return n.running(await e.json())},reload:()=>window.location.reload()})}var df=3e3;function ff(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 pf=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function mf(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=pf,t.appendChild(n),n}var hf=ao(document),gf=null,_f=Date.now();function vf(){gf===null&&(gf=window.setTimeout(()=>{gf=null,yf()},le(Date.now()-_f)))}async function yf(){try{let e=await(await fetch(N(`/job`))).json();if(V&&!e.ask||xf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of hf){let r=t[e];if(r){if(oo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?co(n,r.phase,r.progress):bf(n,r.progress)}}}catch{}vf()}function bf(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 xf=document.querySelector(`[data-diagram-running]`)!==null;(hf.size>0||V||xf)&&(_f=Date.now(),vf()),document.querySelector(`[data-started-at]`)&&uo(document);function Sf(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 Cf(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…`,Cf(t),fetch(N(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);_f=Date.now(),vf()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Sf(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=jr,nf(t,`Could not start. Try again`,2500)}))});var wf={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)=>{Eu(`kiss`,e,t,`recommendation`,`decided`),Eu(`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){ra(r,na(n),wf);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 Tf=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=vr(e.state)??yr(window.location.hash)??{kind:`view`,view:Tf},n=!P||!Cr(P,t);Fl(t),n&&Nl(t),Af()});var Ef=yr(window.location.hash);Ef?Fl(Ef):(P={kind:`view`,view:Tf},j.replace(``,P));var Df={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:R,panes:U};j.setCapturer(()=>di(Df));async function Of(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=$r(e),s=o?Jl.pending(o):void 0;if(!o||!ii(s?s.request:ni(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}=Kl(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Yl(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`)&&el(o,a.tall),t&&ri(o,t.top,t.offset))}function kf(e){$r(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Af(){let e=++Ml,t=()=>Ml===e;await fi(Df,j.current().ui,{setFold:Hl,setAsk:ku,openPanel:(e,n)=>Of(e,n,t),closePanel:kf,stillCurrent:t})}Af();var jf=z?yi(z,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;H=jf?.restoredStage??null,Mu(),Gl();var Mf=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=>{Mf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Mf(),t.querySelector(`summary`)?.focus())});var Z=document.querySelector(`.prb-header [data-menu]`),Q=Da({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:Ld,checkForUpdates:()=>Bd()});function Nf(e){if(!Z)return;let t=Z.querySelector(`[data-menu-panel]`);t?.hidden&&F.open(Z),Z.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 $(e,t){if(Q.busy())return;Z?.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 F.closeAll();Nf(n.error)}}function Pf(e){return Z?.querySelector(`[data-menu-items] ${e}`)??null}function Ff(e={}){if(!Z)return;Z.querySelector(`[data-menu-panel]`)?.hidden&&F.open(Z);let t=Z.querySelector(`[data-menu-items]`),n=Z.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Z.querySelector(`[data-cancel-delete]`)?.focus()}if(Z){let e=Z.querySelector(`[data-confirm-delete]`),t=()=>pd(Z);Z.addEventListener(`click`,e=>{let i=e.target,a=i?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),se(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]`)){F.closeAll();return}let s=i?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),$(()=>Q.setComplete(s.dataset.markStatus===`complete`),s);return}let c=i?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),$(()=>Q.setLifecycle(c.dataset.lifecycleSet),c);return}let l=i?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),$(()=>Q.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(i?.closest(`[data-delete]`)){e.stopPropagation(),Ff();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=h(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=h(n)},r=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:n}=await Q.deleteReview();if(n===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),t(),Nf(n)}}function If(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>I(e,{keepFocus:!0})}}function Lf(){if(!P)return null;let e=P.focus??(P.kind===`section`?`guide`:P.view);return sr.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Rf(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}ne(`review`,{...hd.commands,...Ka(K,document),"review.section.review":{available:()=>Za(document)!==null,run:()=>{let e=Za(document);e&&I(e,{keepFocus:!0})}},"review.section.kiss":If(`kiss`),"review.section.issues":If(`issues`),"review.section.diagrams":If(`map`),"review.section.questions":If(`questions`),"review.section.files":If(`files`),"review.buddy.open":{available:()=>Du!==null,run:()=>{P?.focus?wr(P,`buddy`,Il):ku(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Du!==null&&z!==null,panel:to({prompts:()=>G,choose:td})},"review.focus.toggle":{available:()=>Lf()!==null,run:()=>{let e=Lf();e&&Rl(e)}},"review.leave":{available:e=>!!(e&&Er(e,document,e.target===z||K.state().selecting||!!P?.focus)),run:e=>{z&&e?.target===z?z.blur():K.state().selecting?K.exit():P?.focus&&Tr(P,Il)}},"review.feedback.toggle":{available:()=>K.state().selecting||Rf(),label:()=>K.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>K.state().selecting?K.exit():K.enter()},"review.mark.reviewed":{available:()=>Q.offer().reviewed,run:()=>void $(()=>Q.setComplete(!0),Pf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>Q.offer().waiting,run:()=>void $(()=>Q.setLifecycle(`waiting`),Pf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>Q.offer().done,run:()=>void $(()=>Q.setLifecycle(`done`),Pf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>Q.offer().queue,run:()=>void $(()=>Q.toggleQueued(),Pf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>Q.offer().checkForUpdates,run:()=>void Q.checkForUpdates()},"review.update":{available:()=>Ei(Y,{actions:yl!==``&&!hf.has(`update`)&&!sf,remote:X}),run:()=>void cf()},"review.delete":{available:()=>Q.offer().delete,run:()=>Ff({focusCancel:!0})}},{onOpen:()=>F.closeAll()}),re(),yl&&Dc({markSeen:()=>fetch(N(`/seen`),{method:`POST`}),askUnread:()=>fetch(N(`/unread`))}),setTimeout(()=>{dl(rl([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),e(window,()=>window.location.reload());var zf=15e3,Bf=6e4;function Vf(){return yl!==``&&document.visibilityState===`visible`&&!hf.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Vf()&&Date.now()-Wd>=zf&&Ud()}),window.setInterval(()=>{Vf()&&Ud()},Bf);export{rc as n,Ht as r,oc as t};
176
+ ${l}`,Mc(e,t),qc(e),Jc(e),(n.focus?Rc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),pl(e,t)}async function Xl(e,t,n){let r=Lc(t,n);if(!r)return;let i=Rc(e,r.anchor);if(i)t.outerHTML=Ic(zc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Jl(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 Zl(e,t,n){let r=`${xl.replace(/\/$/,``)}/${e}`,i=bl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&wl({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 Ql=document.querySelector(`[data-ask-form]`),B=Ql?.querySelector(`textarea`);function $l(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=Ke(t)+vt(t)):n.textContent=t,z?.appendChild(n),z?.scrollTo({top:z.scrollHeight}),n}function eu(){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 tu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight})}async function nu(e,t=`free_text`,n={}){let r=e.trim();if(!r||V||H)return;document.querySelector(`.prb-ask-empty`)?.remove(),$l(`user`,r);let i=eu();V=new AbortController,iu(!0);try{let e=await fetch(P(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:Ol,source:t,...n}),signal:V.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){ru(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){tu();return}if(!e.ok||!a?.answer){$l(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}$l(`assistant`,a.answer),a.explanation&&Bn(document,a.explanation),a.reassessment?.card&&Wn(document,a.reassessment.card)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(tu(),ru(r,n.continuesExplanation)):($l(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),ru(r,n.continuesExplanation))}finally{V=null,iu(!1)}}function ru(e,t){!B||B.value||(B.value=e,Af?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},Af?.stage(U)))}function iu(e){let t=Ql?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(au))t.disabled=e;e&&I.closeAll(),e||B?.focus()}var au=`[data-suggestion], .pr-helper-explain-simply-button`;function ou(){let e=Ql?.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()})}Ql?.addEventListener(`submit`,e=>{if(e.preventDefault(),V||H)return ou();let t=B?.value??``;B&&(B.value=``),Af?.clear();let n=Hn(U,t);nu(t,su(t),n?{continuesExplanation:n}:{})}),H&&iu(!0);var U=null;function su(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;Ql?.requestSubmit()}}),B?.addEventListener(`input`,()=>{B&&(B.style.height=`auto`,B.style.height=`${Math.min(B.scrollHeight,140)}px`)});async function cu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function lu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function uu(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&&gu(n,t,`questions`),Su()}function du(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Cl})).filter(e=>e.id)}async function fu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function pu(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Cl: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(mu()),gu(n,t||e.dataset.settled===`true`,`issues`),wu())}function mu(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=En,e.textContent=`Dismissed by you`,e}var hu=new WeakMap;function gu(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&hu.set(e,{parent:t,before:e.nextElementSibling}),bu(n).append(e),t&&yu(t)}else _u(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();xu(n)}}function _u(e,t){let n=hu.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=vu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function vu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function yu(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function bu(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 xu(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})`:Wr(Cu()),Gn(document)}function Su(){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=Gr(e.length,t)),Tu(`questions`,e.length,t,`question`,`answered`)}function Cu(){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 wu(){let e=Cu();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=Ur(e.total,e.open,kr(e))),Tu(`issues`,e.total,e.open,`issue`,kr(e))}function Tu(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){Vl(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!a(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){L(i.dataset.viewNav);return}let o=t.closest(`[data-author-context-toggle]`);if(o){Ir(o);return}let s=t.closest(`[data-author-context-reveal]`);if(s){Vr(s);return}let c=t.closest(`[data-overview-nav]`);if(c?.dataset.overviewNav){L(c.dataset.overviewNav===`guide`?`guide`:c.dataset.overviewNav);return}let l=t.closest(`[data-goto-section]`);if(l?.dataset.gotoSection){Rl(l.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){Zl(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){jc(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&Zc(e,!e.hasAttribute(`data-expanded`));return}let p=t.closest(`[data-change-step]`);if(p){let e=p.closest(`[data-change-navigator]`),t=p.closest(`.prb-code`);e&&t&&!p.disabled&&Xl(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=Nc(m);e&&ml(e);return}let h=t.closest(`[data-expand-file]`);if(h?.dataset.expandFile){let e=h.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Jl(e,h.dataset.expandFile,{cited:Number(h.dataset.expandCited)||0,centre:Number(h.dataset.expandLine)||0,expand:Number(h.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Bc(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){Ll(g.dataset.focusToggle);return}let ee=t.closest(`[data-prompt-toggle]`);if(ee){$u(ee.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let te=t.closest(`[data-file]`);if(te?.dataset.file){Kl(te);return}let ne=qr(t);if(ne){Rl(ne);return}let re=t.closest(`[data-question-answered]`);if(re?.dataset.questionAnswered){uu(re,re.dataset.answered!==`true`),Mr(re);let e=lu();cu(e),wl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let _=t.closest(`[data-issue-dismissed]`);if(_?.dataset.issueDismissed){pu(_,_.dataset.stale===`true`||_.dataset.dismissed!==`true`);let e=du();fu(e),wl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ie=t.closest(`[data-suggestion]`);if(ie){nu(ie.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Au(),nu(Sl,`explain_simply`);return}let ae=t.closest(`[data-prompt-use]`);if(ae?.dataset.promptUse){ed(ae.dataset.promptUse);return}let v=t.closest(`[data-prompt-edit]`);if(v?.dataset.promptEdit){xd(v.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){xd(``);return}if(t.closest(`[data-ask-toggle]`)){let e=F?.focus;e?(wr(F,Fl),Ou(e!==`buddy`)):Ou(!Du())}});var W=document.querySelector(`.prb-body`),Eu=document.querySelector(`.prb-ask`);function Du(){return!!Eu&&getComputedStyle(Eu).display!==`none`}function Ou(e){W&&(W.dataset.ask=e?`open`:`closed`),ku(e)}function ku(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Au(){F?.focus&&F.focus!==`buddy`&&wr(F,Fl),Ou(!0)}function ju(){ku(Du())}window.addEventListener(`resize`,ju),ae(P(`/restart`));var Mu=document.querySelector(`[data-file-filter]`),Nu=document.querySelector(`[data-file-count]`),Pu=document.querySelector(`[data-file-none]`);function Fu(){let e=(Mu?.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}`}Pu&&(Pu.hidden=n>0),Nu&&(Nu.textContent=e?`${t} of ${Iu} file${Iu===1?``:`s`}`:`${Iu} file${Iu===1?``:`s`}`)}var Iu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Mu?.addEventListener(`input`,Fu),Mu?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Mu.value!==``&&(e.preventDefault(),Mu.value=``,Fu())}),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(),Kl(n))});var Lu=320,Ru=()=>Math.round(window.innerWidth/2),zu=e=>Math.round(Math.min(Ru(),Math.max(Lu,e)));function Bu(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function Vu(){return Eu?Math.round(Eu.getBoundingClientRect().width):Lu}function Hu(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||!Eu)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=Vu(),r=e=>{Bu(zu(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,Hu(Vu())};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=zu(Vu()+n);Bu(r),Hu(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Bu(null),Hu(null))}),G?.addEventListener(`dblclick`,()=>{Bu(null),Hu(null)}),window.addEventListener(`resize`,()=>{Du()&&W?.style.getPropertyValue(`--ask-width`)&&Bu(zu(Vu()))});var Uu=3e4,Wu=document.visibilityState===`visible`?Date.now():null,Gu=0;function Ku(){Wu!==null&&(Gu+=Date.now()-Wu,Wu=Date.now())}function qu(){Ku();let e=Math.round(Gu/1e3);return Gu-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Wu=Date.now():(Ku(),Wu=null)}),setInterval(()=>{let e=qu();e>0&&wl({event:`workspace_heartbeat`,visibleSeconds:e})},Uu),window.addEventListener(`pagehide`,()=>{let e=P(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:qu()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Ju=document.querySelector(`[data-prompt-bank]`),Yu=document.querySelector(`[data-prompt-list]`),K=Xu();function Xu(){try{let e=JSON.parse(Ju?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Zu(){if(!Yu)return;Yu.innerHTML=K.map(e=>`<span class="prb-bank-item">
177
+ <button type="button" class="prb-bank-use" data-prompt-use="${R(e.id)}" title="${R(e.prompt)}">${R(e.name)}</button>
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)),cd()}async function Qu(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{}Zu()}function $u(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Ju?.toggleAttribute(`data-collapsed`,e),Yu&&(Yu.hidden=e),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function ed(e){let t=K.find(t=>t.id===e);!t||!B||(B.value=Xr(B.value,t.prompt),Au(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}var td=document.querySelector(`.prb-doc`),nd=null,rd=null;function id(){z&&(rd?.(),rd=vn(z,{layout:`flat`,actions:xn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>ld(e,`selection`,t)}))}var ad=`reassess`;function od(e){let t=sd();if(!e)return t;let n={id:ad,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function sd(){return[...yn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:nr(e.id),label:e.name,section:tr}))]}function cd(){td&&(nd?.(),nd=vn(td,{triggerLabel:`Ask Buddy AI`,actions:sd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>ld(e,`selection`,t)}))}function ld(e,t,n,r){Or(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>ud(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Au(),nu(t,`finding`,Ln(e,r?.ref))}})}function ud(e,t,n){B&&(U={text:e,source:t,...n?{continues:n}:{}},Af?.stage(U),B.value=Xr(B.value,e),Au(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}function dd(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=cn(od(zn(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 fd(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=Tn(n),a=zn(n);if(I.close(n),r===ad){i&&a&&pd(a,i);return}i&&ld(r,`finding`,i,a?{ref:a}:void 0)});function pd(e,t){if(V||H)return;let n=e.kind===`issue`?`severity`:`importance`;Au(),nu(`${Cn(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?$n(t):null;n&&ud(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Rn(t),r=Tn(t);n&&r&&ld(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),cd(),id();var q=za({root:document,showView:e=>L(e)}),md=Ja({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)});jt(document),Gt(document);var hd=document.querySelector(`[data-prompt-dialog]`),gd=document.querySelector(`[data-prompt-name]`),_d=document.querySelector(`[data-prompt-text]`),vd=document.querySelector(`[data-prompt-delete]`),yd=document.getElementById(`prb-prompt-title`),bd=``;function xd(e){let t=K.find(t=>t.id===e);bd=t?.id??``,yd&&(yd.textContent=t?`Edit prompt`:`Save a prompt`),gd&&(gd.value=t?.name??``),_d&&(_d.value=t?.prompt??``),vd&&(vd.hidden=!t),hd?.showModal(),gd?.focus()}async function Sd(){let e=gd?.value.trim()??``,t=_d?.value.trim()??``;if(!e||!t){(e?_d:gd)?.focus();return}let n=bd?K.map(n=>n.id===bd?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];hd?.close(),await Qu(n)}async function Cd(){if(!bd)return;let e=K.filter(e=>e.id!==bd);hd?.close(),await Qu(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>hd?.close()),vd?.addEventListener(`click`,()=>void Cd()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Sd());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),wd=document.querySelector(`[data-fresh-check]`),X=Fd(J?.dataset.report),Td=`prb-fresh-reopen`,Ed=jd(),Dd=J?.dataset.dismissedSha,Od=Ad(J?.dataset.availability),Z=kd(J?.dataset.remote);function kd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Ad(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function jd(){try{return sessionStorage.getItem(Td)!==null&&(sessionStorage.removeItem(Td),!0)}catch{return!1}}Ed&&Qd(),wd?.addEventListener(`click`,()=>void zd());var Md=document.querySelector(`[data-fetch-remote]`);Md&&(fetch(P(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Md.hidden=!1)}).catch(()=>{}),Md.addEventListener(`click`,()=>void Nd(Md)));async function Nd(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(g(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:se(n)}),n.fetched>0&&await zd()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Ed=!1,Qd();let n=t.closest(`[data-fresh-dismiss]`);n&&(Dd=n.dataset.freshDismiss||void 0,Ed=!1,Qd(),Pd())});function Pd(){fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Dd??null})}).catch(()=>{})}function Fd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Id=wa(),Ld=!1,Rd=null;async function zd(){if(Ld)return;Ld=!0,Gd(!0),Rd&&await Rd;let e=Kd(X,Z),t=await Vd(!1);Gd(!1),t&&Zd(),Ld=!1,t&&(X?.code.state===`changed`||Z!==null)&&Dd!==void 0&&(Dd=void 0,Pd()),Qd(),Bd(t?Kd(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Bd(e){Y&&(Y.textContent=e,window.setTimeout($d,2600))}async function Vd(e){let t=Id.snapshot();try{let n=await(await fetch(`${P(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Od=n.availability??null,Z=n.remote??null,Jd=n.kiss??null,n.kissDismissedSha!==void 0&&(Yd=n.kissDismissedSha??void 0),n.prState!==void 0&&Wd(n.prState);let r=Ca(n.standing);return r&&Id.current(t)&&ha(document,r),!0}catch{return!1}}async function Hd(){if(Ld||Rd||!J)return;let e=Kd(X,Z),t=JSON.stringify(Jd);Rd=Vd(!0);let n=await Rd;Rd=null,Ud=Date.now(),n&&(Kd(X,Z)!==e&&Qd(),JSON.stringify(Jd)!==t&&Zd())}var Ud=Date.now();function Wd(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=ma(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Gd(e){wd&&(wd.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function Kd(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var qd=document.querySelector(`[data-kiss-fresh-region]`),Jd=Xd(qd?.dataset.freshness),Yd=qd?.dataset.dismissedSha;function Xd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Zd(){sa(Jd?.state===`changed`),qd&&(qd.innerHTML=$i(qd.dataset.reviewedSha??``,Jd,{dismissedSha:Yd,actions:vl!==``}))}qd?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Yd=t.dataset.kissFreshnessDismiss||void 0,Zd(),fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Yd??null})}).catch(()=>{}))});function Qd(){J&&(J.innerHTML=Ei(X,{dismissedSha:Dd,open:Ed,actions:vl!==``,availability:Od,remote:Z}),$d())}function $d(){if(Y&&(X||Z)){let{label:e,state:t}=wi(X,Z);Y.textContent=e,Y.dataset.state=t,Li(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return ef(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 nf(i);if(t.closest(`[data-review-update]`))return void sf();let a=t.closest(`[data-update-cancel]`);if(a)return void lf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void lf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function ef(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>tf(e,`Copied`),()=>tf(e,`Select it`))}function tf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function nf(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=rf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${ff}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=rf(e)?null:pf(e);try{await fetch(P(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}rf(e)&&af(),window.location.reload()}function rf(e){return e.closest(`.prb-fresh-notes p`)}function af(){try{sessionStorage.setItem(Td,`1`)}catch{}}var of=!1;async function sf(){if(of)return;of=!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`&&!Vi(e.update.phase)&&n()}catch{}},500);try{await fetch(P(`/update`),{method:`POST`})}catch{}n()}var cf={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 lf(e,t){let n=cf[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,df(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||df(e,n.tooLate),await uo({look:async()=>{let e=await fetch(P(`/job`),{signal:AbortSignal.timeout(uf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var uf=3e3;function df(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 ff=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function pf(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=ff,t.appendChild(n),n}var mf=io(document),hf=null,gf=Date.now();function _f(){hf===null&&(hf=window.setTimeout(()=>{hf=null,vf()},ce(Date.now()-gf)))}async function vf(){try{let e=await(await fetch(P(`/job`))).json();if(H&&!e.ask||bf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of mf){let r=t[e];if(r){if(ao(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?so(n,r.phase,r.progress):yf(n,r.progress)}}}catch{}_f()}function yf(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 bf=document.querySelector(`[data-diagram-running]`)!==null;(mf.size>0||H||bf)&&(gf=Date.now(),_f()),document.querySelector(`[data-started-at]`)&&lo(document);function xf(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 Sf(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…`,Sf(t),fetch(P(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);gf=Date.now(),_f()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,xf(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=Ar,tf(t,`Could not start. Try again`,2500)}))});var Cf={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)=>{Tu(`kiss`,e,t,`recommendation`,`decided`),Tu(`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){na(r,ta(n),Cf);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 wf=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_r(e.state)??vr(window.location.hash)??{kind:`view`,view:wf},n=!F||!Sr(F,t);Pl(t),n&&Ml(t),kf()});var Tf=vr(window.location.hash);Tf?Pl(Tf):(F={kind:`view`,view:wf},hl.replace(``,F));var Ef={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:z,panes:W};hl.setCapturer(()=>ui(Ef));async function Df(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=Qr(e),s=o?ql.pending(o):void 0;if(!o||!ri(s?s.request:ti(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}=Gl(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Jl(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`)&&Zc(o,a.tall),t&&ni(o,t.top,t.offset))}function Of(e){Qr(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function kf(){let e=++jl,t=()=>jl===e;await di(Ef,hl.current().ui,{setFold:Vl,setAsk:Ou,openPanel:(e,n)=>Df(e,n,t),closePanel:Of,stillCurrent:t})}kf();var Af=B?vi(B,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=Af?.restoredStage??null,ju(),Wl();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]`),$=Ea({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:Id,checkForUpdates:()=>zd()});function Mf(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 Nf(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();Mf(n.error)}}function Pf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Ff(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=()=>fd(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),oe(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(),Nf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Nf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Nf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Ff();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(),Mf(t)}}function If(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>L(e,{keepFocus:!0})}}function Lf(){if(!F)return null;let e=F.focus??(F.kind===`section`?`guide`:F.view);return or.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Rf(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}ee(`review`,{...md.commands,...Ga(q,document),"review.section.review":{available:()=>Xa(document)!==null,run:()=>{let e=Xa(document);e&&L(e,{keepFocus:!0})}},"review.section.kiss":If(`kiss`),"review.section.issues":If(`issues`),"review.section.diagrams":If(`map`),"review.section.questions":If(`questions`),"review.section.files":If(`files`),"review.buddy.open":{available:()=>Eu!==null,run:()=>{F?.focus?Cr(F,`buddy`,Fl):Ou(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Eu!==null&&B!==null,panel:eo({prompts:()=>K,choose:ed})},"review.focus.toggle":{available:()=>Lf()!==null,run:()=>{let e=Lf();e&&Ll(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,Fl)}},"review.feedback.toggle":{available:()=>q.state().selecting||Rf(),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 Nf(()=>$.setComplete(!0),Pf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Nf(()=>$.setLifecycle(`waiting`),Pf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Nf(()=>$.setLifecycle(`done`),Pf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Nf(()=>$.toggleQueued(),Pf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Ti(X,{actions:vl!==``&&!mf.has(`update`)&&!of,remote:Z}),run:()=>void sf()},"review.delete":{available:()=>$.offer().delete,run:()=>Ff({focusCancel:!0})}},{onOpen:()=>I.closeAll()}),ne(),vl&&wc({markSeen:()=>fetch(P(`/seen`),{method:`POST`}),askUnread:()=>fetch(P(`/unread`))}),setTimeout(()=>{cl(el([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),te(window,()=>window.location.reload());var zf=15e3,Bf=6e4;function Vf(){return vl!==``&&document.visibilityState===`visible`&&!mf.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Vf()&&Date.now()-Ud>=zf&&Hd()}),window.setInterval(()=>{Vf()&&Hd()},Bf);export{ec as n,Vt as r,rc as t};