prreviewbuddy 0.86.6 → 0.87.2

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,16 +1,16 @@
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{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as l,it as u,lt as d,mt as f,nt as p,o as m,ot as h,p as g,pt as _,q as v,rt as y,s as b,st as x,t as ee,tt as S}from"./chunk-D9x9bcKf.js";import{_ as te,b as ne,d as re,f as ie,g as ae,h as oe,i as se,l as ce,m as le,o as ue,p as de,u as fe,v as pe,x as me,y as he}from"./chunk-huqt-B16.js";import{t as C}from"./chunk-CvSN2dS5.js";import{n as ge,t as _e}from"./chunk-BUD1RoN4.js";import{t as ve}from"./chunk-Dv0Wowan.js";import{t as ye}from"./chunk-C8kkSv38.js";function w(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function be(e){return w(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var xe=`pr-helper-code-block`,Se=`pr-helper-code-copy`,Ce=/^\u0002(\d+)\u0002/,we=/^(?:https?:\/\/|#)/i,Te=/^https:\/\//i,Ee=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,De=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function Oe(e){let t=(e??``).trim();return!t||Ee.test(t)||De.test(t)?`View attached image`:`View image: ${t}`}function ke(e,t){return Te.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Ae(e,t){return ke(w((e??``).trim()),w(t))}var T=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,je=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Me=e=>/^\d{1,9}$/.test(e)?e:null,Ne=e=>e.slice(0,300),Pe=new Map(Object.entries({a:{href:e=>{let t=e.trim();return we.test(t)?t:null},title:Ne},abbr:{title:Ne},b:{},blockquote:{},br:{},caption:{align:T},cite:{},code:{},dd:{},del:{},details:{},div:{align:T},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Me},p:{align:T},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:T},tbody:{},td:{align:T,colspan:je,rowspan:je},tfoot:{},th:{align:T,colspan:je,rowspan:je},thead:{},tr:{align:T},u:{},ul:{},var:{},h1:{align:T},h2:{align:T},h3:{align:T},h4:{align:T},h5:{align:T},h6:{align:T}}).map(([e,t])=>[e,new Map(Object.entries({title:Ne,...t}))])),Fe=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Ie=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),Le=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(`.`)),Re=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(`.`)),ze=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`),Be=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Ve(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 He(e){let t=new Map;for(let n of e.matchAll(Be)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Ve(n[2]??n[3]??n[4]??``))}return t}function Ue(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function We(e,t){let n=Ue(e),r=Pe.get(e),i=[];for(let[e,n]of He(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${w(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Ge(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;ze.lastIndex=0;for(let t;t=ze.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=He(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Ae(e.get(`src`),Oe(r))??w(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:He(c).get(`src`);if(!o&&!l){let n=e.slice(ze.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=He(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(ze.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Ae(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Ie.has(t)){if(!o&&!l&&!Fe.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(ze.lastIndex),i=r.search(n);i!==-1&&(ze.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(Le.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Pe.has(t)){let e=Ue(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Fe.has(t)?n({kind:`void`,name:t,tag:e,markup:We(t,c)}):n({kind:`open`,name:t,tag:e,markup:We(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=ze.lastIndex)}return{text:r+e.slice(i),tokens:t}}function Ke(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 qe(e,t){let n=e.match(Ce);return!!(n&&Re.has(t.tokens[Number(n[1])].name))}function Je(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 Ye(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 Xe=`\0`,Ze=``,Qe=/\u0000(\d+)\u0000/g,$e=/^\u0000\d+\u0000$/,et=/\u0001(\d+)\u0001/g;function tt(e,t={}){let{text:n,blocks:r}=st(ot(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return dt(vt(n),r);let i=Ge(n);return Je(Ye(dt(vt(i.text,i),r),i))}function nt(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function rt(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var it=/`[^`\n]+`|<!--/g;function at(e,t){it.lastIndex=t;for(let t;t=it.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function ot(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=rt(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=nt(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=at(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 st(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${Xe}${n.length}${Xe}`);let e=i.join(`
4
- `);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??ut(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&ct(n.raw).toLowerCase()===`mermaid`?lt(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 ct(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function lt(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 ut(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 dt(e,t){return e.replace(Qe,(e,n)=>{let r=t[Number(n)];return r.diagram?mt(r.code,r.diagram.label):ft(r.code,`Copy`,`Copy code`)})}function ft(e,t,n,r=``){return`<div class="${xe}"${r}><pre><code>${w(e)}</code></pre><button type="button" class="${Se}" aria-label="${n}">${t}</button></div>`}var pt=0;function mt(e,t){let n=`prb-md-mermaid-source-${++pt}`;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="${w(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>`+ft(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function ht(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function gt(e){return ht(e.match(/^[ \t]*/)[0])}function _t(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=ht(n)+(r?1:i.length+1),c=ht(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function vt(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>${yt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${yt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?yt(e[0],t):e.map(e=>`<p>${yt(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?yt(e,t):`<p>${yt(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(`
2
+ import{H as e,J as t,a as n,at as r,c as i,ct as a,ft as o,ht as s,it as c,l,lt as u,m as d,mt as f,nt as p,o as m,ot as h,pt as g,q as _,rt as v,s as y,st as b,t as x,tt as ee,ut as S,vt as te}from"./chunk-CMC5F4_t.js";import{_ as ne,b as re,d as ie,f as ae,g as oe,h as se,i as ce,l as le,m as ue,o as de,p as fe,u as pe,v as me,x as he,y as ge}from"./chunk-BmIk8Mrb.js";import{t as C}from"./chunk-CvSN2dS5.js";import{n as _e,t as ve}from"./chunk-DDm8oQLU.js";import{t as ye}from"./chunk-Dv0Wowan.js";import{t as be}from"./chunk-C8kkSv38.js";function w(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function xe(e){return w(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var Se=`pr-helper-code-block`,Ce=`pr-helper-code-copy`,we=/^\u0002(\d+)\u0002/,Te=/^(?:https?:\/\/|#)/i,Ee=/^https:\/\//i,De=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,Oe=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function ke(e){let t=(e??``).trim();return!t||De.test(t)||Oe.test(t)?`View attached image`:`View image: ${t}`}function Ae(e,t){return Ee.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function je(e,t){return Ae(w((e??``).trim()),w(t))}var T=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Me=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Ne=e=>/^\d{1,9}$/.test(e)?e:null,Pe=e=>e.slice(0,300),Fe=new Map(Object.entries({a:{href:e=>{let t=e.trim();return Te.test(t)?t:null},title:Pe},abbr:{title:Pe},b:{},blockquote:{},br:{},caption:{align:T},cite:{},code:{},dd:{},del:{},details:{},div:{align:T},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Ne},p:{align:T},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:T},tbody:{},td:{align:T,colspan:Me,rowspan:Me},tfoot:{},th:{align:T,colspan:Me,rowspan:Me},thead:{},tr:{align:T},u:{},ul:{},var:{},h1:{align:T},h2:{align:T},h3:{align:T},h4:{align:T},h5:{align:T},h6:{align:T}}).map(([e,t])=>[e,new Map(Object.entries({title:Pe,...t}))])),Ie=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Le=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),Re=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(`.`)),ze=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(`.`)),Be=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`),Ve=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function He(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 Ue(e){let t=new Map;for(let n of e.matchAll(Ve)){let e=n[1].toLowerCase();t.has(e)||t.set(e,He(n[2]??n[3]??n[4]??``))}return t}function We(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Ge(e,t){let n=We(e),r=Fe.get(e),i=[];for(let[e,n]of Ue(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${w(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Ke(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;Be.lastIndex=0;for(let t;t=Be.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=Ue(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:je(e.get(`src`),ke(r))??w(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Ue(c).get(`src`);if(!o&&!l){let n=e.slice(Be.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Ue(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(Be.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:je(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Le.has(t)){if(!o&&!l&&!Ie.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(Be.lastIndex),i=r.search(n);i!==-1&&(Be.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(Re.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Fe.has(t)){let e=We(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Ie.has(t)?n({kind:`void`,name:t,tag:e,markup:Ge(t,c)}):n({kind:`open`,name:t,tag:e,markup:Ge(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=Be.lastIndex)}return{text:r+e.slice(i),tokens:t}}function qe(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 Je(e,t){let n=e.match(we);return!!(n&&ze.has(t.tokens[Number(n[1])].name))}function Ye(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 Xe(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 Ze=`\0`,Qe=``,$e=/\u0000(\d+)\u0000/g,et=/^\u0000\d+\u0000$/,tt=/\u0001(\d+)\u0001/g;function nt(e,t={}){let{text:n,blocks:r}=ct(st(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return ft(yt(n),r);let i=Ke(n);return Ye(Xe(ft(yt(i.text,i),r),i))}function rt(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function it(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var at=/`[^`\n]+`|<!--/g;function ot(e,t){at.lastIndex=t;for(let t;t=at.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function st(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=it(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=rt(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=ot(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 ct(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${Ze}${n.length}${Ze}`);let e=i.join(`
4
+ `);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??dt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&lt(n.raw).toLowerCase()===`mermaid`?ut(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 lt(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function ut(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 dt(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 ft(e,t){return e.replace($e,(e,n)=>{let r=t[Number(n)];return r.diagram?ht(r.code,r.diagram.label):pt(r.code,`Copy`,`Copy code`)})}function pt(e,t,n,r=``){return`<div class="${Se}"${r}><pre><code>${w(e)}</code></pre><button type="button" class="${Ce}" aria-label="${n}">${t}</button></div>`}var mt=0;function ht(e,t){let n=`prb-md-mermaid-source-${++mt}`;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="${w(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>`+pt(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function gt(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function _t(e){return gt(e.match(/^[ \t]*/)[0])}function vt(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=gt(n)+(r?1:i.length+1),c=gt(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function yt(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>${bt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${bt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?bt(e[0],t):e.map(e=>`<p>${bt(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?bt(e,t):`<p>${bt(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
7
  `)){let e=o.trim();if(s){if(e){s.push(w(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=gt(o),l=_t(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&&qe(e,t)){c(),s=[w(e)];continue}if($e.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}>${yt(l[2],t)}</h${e}>`);continue}let u=_t(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 yt(e,t){let n=[];return w(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${Ze}${n.length-1}${Ze}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Ke(r,t)?ke(r,Oe(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>we.test(r)&&!(t&&Ke(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(et,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function bt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),xt(e)}}function xt(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 St=`pr-helper-msg-copy`,Ct=`pr-helper-chat-actions`,wt=`data-message-id`,Tt=`data-copy-source`,Et=`data-feedback-source`,Dt=`data-feedback-ref`,Ot={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 kt(e){return Pt(`${Tt}="${w(e)}"`)}var At=`pr-helper-finding-copy`,jt=`data-copy-idle-label`,Mt=`data-copy-idle-aria`,Nt=`data-copy-idle-tip`;function Pt(e,t){let{icon:n}=Ot.idle,r=t?.label??Ot.idle.label,i=t?.aria??Ot.idle.aria,a=t?` ${jt}="${w(r)}" ${Mt}="${w(i)}" ${Nt}="${w(t.tip)}"`:``,o=`<button type="button" class="${t?`${St} ${At}`:St}" ${e}${a}${t?` data-tip="${w(t.tip)}"`:``} aria-label="${w(i)}"><span class="${St}-icon" aria-hidden="true">${It(n)}</span><span class="${St}-label"${r?``:` hidden`}>${w(r)}</span></button>`;return t?o:`<div class="${Ct}">${o}</div>`}function Ft(e,t){let n=Ot[t],r=t===`idle`?{...n,label:e.getAttribute(jt)??n.label,aria:e.getAttribute(Mt)??n.aria}:n,i=e.querySelector(`.${St}-icon`),a=e.querySelector(`.${St}-label`);i&&(i.innerHTML=It(r.icon));let o=(e.getAttribute(jt)??``)!==``,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(Nt)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function It(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Lt=1400,Rt=`Copy`,zt=`Copied`,Bt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,Vt=new WeakMap;function Ht(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${Se}`),i=r?null:n.closest(`.${St}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Gt(r):i&&Ut(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Ut(e,t){let n=Wt(e,t);qt(e,n!==null&&await bt(n)?`copied`:`failed`)}function Wt(e,t){let n=e.getAttribute(Tt);if(n!==null)return n;let r=e.getAttribute(wt);return r&&t?t(r):null}async function Gt(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await bt(t.textContent??``):!1;!n&&t&&Kt(t),Jt(e,n?zt:Bt,n)}function Kt(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function qt(e,t){let n=Vt.get(e);n&&window.clearTimeout(n),Ft(e,t),Vt.set(e,window.setTimeout(()=>{Ft(e,`idle`),Vt.delete(e)},Lt))}function Jt(e,t,n){let r=Vt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||Rt;e.textContent=t,e.classList.toggle(`copied`,n),Vt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),Vt.delete(e)},Lt))}var Yt={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`]},Xt=null;function Zt(){return Xt??=C(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(Yt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),Xt}async function Qt(e,t,n,r=Zt){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,en(e)}var $t=`http://www.w3.org/2000/svg`;function en(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS($t,`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 tn=0;function nn(e,t={}){let n=t.engine??Zt,r=t.observe??rn,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),an(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&sn(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function rn(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function an(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 Qt(r,`prb-md-mermaid-${++tn}`,o,t),on(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 on(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function sn(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 cn=`pr-helper-selection-popover`,ln=`pr-helper-selection-popover-expanded`,un=`pr-helper-selection-copy-done`,dn=8,fn=8,pn=1e3,mn=`Copy selected text`,hn=`Copy`,gn=`Copied`,_n=`pr-helper-selection-popover-flat`,E=null;function vn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${w(e.id)}">${w(e.label)}</button>`}function yn(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(vn).join(``)}${[...t].map(([e,t])=>`
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=_t(o),l=vt(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&&Je(e,t)){c(),s=[w(e)];continue}if(et.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}>${bt(l[2],t)}</h${e}>`);continue}let u=vt(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 bt(e,t){let n=[];return w(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${Qe}${n.length-1}${Qe}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!qe(r,t)?Ae(r,ke(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>Te.test(r)&&!(t&&qe(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(tt,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function xt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),St(e)}}function St(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 Ct=`pr-helper-msg-copy`,wt=`pr-helper-chat-actions`,Tt=`data-message-id`,Et=`data-copy-source`,Dt=`data-feedback-source`,Ot=`data-feedback-ref`,kt={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 At(e){return Ft(`${Et}="${w(e)}"`)}var jt=`pr-helper-finding-copy`,Mt=`data-copy-idle-label`,Nt=`data-copy-idle-aria`,Pt=`data-copy-idle-tip`;function Ft(e,t){let{icon:n}=kt.idle,r=t?.label??kt.idle.label,i=t?.aria??kt.idle.aria,a=t?` ${Mt}="${w(r)}" ${Nt}="${w(i)}" ${Pt}="${w(t.tip)}"`:``,o=`<button type="button" class="${t?`${Ct} ${jt}`:Ct}" ${e}${a}${t?` data-tip="${w(t.tip)}"`:``} aria-label="${w(i)}"><span class="${Ct}-icon" aria-hidden="true">${Lt(n)}</span><span class="${Ct}-label"${r?``:` hidden`}>${w(r)}</span></button>`;return t?o:`<div class="${wt}">${o}</div>`}function It(e,t){let n=kt[t],r=t===`idle`?{...n,label:e.getAttribute(Mt)??n.label,aria:e.getAttribute(Nt)??n.aria}:n,i=e.querySelector(`.${Ct}-icon`),a=e.querySelector(`.${Ct}-label`);i&&(i.innerHTML=Lt(r.icon));let o=(e.getAttribute(Mt)??``)!==``,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(Pt)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Lt(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Rt=1400,zt=`Copy`,Bt=`Copied`,Vt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,Ht=new WeakMap;function Ut(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${Ce}`),i=r?null:n.closest(`.${Ct}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Kt(r):i&&Wt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Wt(e,t){let n=Gt(e,t);Jt(e,n!==null&&await xt(n)?`copied`:`failed`)}function Gt(e,t){let n=e.getAttribute(Et);if(n!==null)return n;let r=e.getAttribute(Tt);return r&&t?t(r):null}async function Kt(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await xt(t.textContent??``):!1;!n&&t&&qt(t),Yt(e,n?Bt:Vt,n)}function qt(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Jt(e,t){let n=Ht.get(e);n&&window.clearTimeout(n),It(e,t),Ht.set(e,window.setTimeout(()=>{It(e,`idle`),Ht.delete(e)},Rt))}function Yt(e,t,n){let r=Ht.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||zt;e.textContent=t,e.classList.toggle(`copied`,n),Ht.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),Ht.delete(e)},Rt))}var Xt={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 Qt(){return Zt??=C(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(Xt),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 $t(e,t,n,r=Qt){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,tn(e)}var en=`http://www.w3.org/2000/svg`;function tn(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(en,`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 nn=0;function rn(e,t={}){let n=t.engine??Qt,r=t.observe??an,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),on(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&cn(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function an(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function on(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 $t(r,`prb-md-mermaid-${++nn}`,o,t),sn(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 sn(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function cn(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 ln=`pr-helper-selection-popover`,un=`pr-helper-selection-popover-expanded`,dn=`pr-helper-selection-copy-done`,fn=8,pn=8,mn=1e3,hn=`Copy selected text`,gn=`Copy`,_n=`Copied`,vn=`pr-helper-selection-popover-flat`,E=null;function yn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${w(e.id)}">${w(e.label)}</button>`}function bn(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(yn).join(``)}${[...t].map(([e,t])=>`
10
10
  <div class="pr-helper-selection-menu-group">
11
11
  <div class="pr-helper-selection-menu-heading">${w(e)}</div>
12
- <div class="pr-helper-selection-menu-group-items">${t.map(vn).join(``)}</div>
13
- </div>`).join(``)}`}function bn(e){if(e.layout===`flat`)return xn(e);let t=yn(e.actions);return`
12
+ <div class="pr-helper-selection-menu-group-items">${t.map(yn).join(``)}</div>
13
+ </div>`).join(``)}`}function xn(e){if(e.layout===`flat`)return Sn(e);let t=bn(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">
@@ -18,7 +18,7 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
18
18
  </svg>
19
19
  <span>${w(e.triggerLabel??`Ask`)}</span>
20
20
  </button>
21
- <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${mn}" aria-describedby="pr-helper-selection-tip">
21
+ <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${hn}" 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,62 +27,62 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
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">${mn}</span>
30
+ <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${hn}</span>
31
31
  </div>
32
32
  <div class="pr-helper-selection-menu">${t}</div>
33
- `}function xn(e){return`<div class="pr-helper-selection-menu">
34
- ${yn(e.actions)}
35
- <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${hn}</button>
36
- </div>`}function Sn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-dn,a=i>=fn?i:Math.min(t.bottom+dn,window.innerHeight-r-fn),o=Math.max(fn,Math.min(t.left,window.innerWidth-n-fn));e.style.top=`${Math.max(fn,a)}px`,e.style.left=`${o}px`}function Cn(){wn&&=(window.clearTimeout(wn),0),E?.popover.remove(),E=null}var wn=0;function Tn(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(un),t&&(t.textContent=gn),n&&(n.textContent=gn),wn&&window.clearTimeout(wn),wn=window.setTimeout(()=>En(e),pn)}function En(e){wn&&=(window.clearTimeout(wn),0),e.classList.remove(un);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=mn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=hn)}async function Dn(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}Tn(e)}function On(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 kn(e,t){let n={},r=()=>{let r=On(e,t);if(!r){(!E||E.owner===n)&&Cn();return}if(E&&E.owner!==n&&Cn(),E)E.popover.classList.remove(ln),En(E.popover),E.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${cn} ${_n}`:cn,i.innerHTML=bn(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){E?.text&&Dn(i,E.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(ln);let n=On(e,t);Sn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!E)return;let o=E.text;Cn(),t.onChoose(a,o)}),document.body.appendChild(i),E={popover:i,text:r.text,owner:n}}Sn(E.popover,r.rect)},i=e=>{E&&e.target instanceof Node&&E.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!E)return;let e=window.getSelection();(!e||e.isCollapsed)&&Cn()},s=e=>{e.key===`Escape`&&Cn()},c=()=>Cn();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),Cn()}}var An=[{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 jn(e){return![...An,...Mn].find(t=>t.id===e)?.instruction}var Mn=[{id:`add-to-chat`,label:`Add to chat`}],Nn=800;function Pn(e,t={}){let n=t.maxChars??Nn,r=e.replace(/\r\n/g,`
33
+ `}function Sn(e){return`<div class="pr-helper-selection-menu">
34
+ ${bn(e.actions)}
35
+ <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${gn}</button>
36
+ </div>`}function Cn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-fn,a=i>=pn?i:Math.min(t.bottom+fn,window.innerHeight-r-pn),o=Math.max(pn,Math.min(t.left,window.innerWidth-n-pn));e.style.top=`${Math.max(pn,a)}px`,e.style.left=`${o}px`}function wn(){Tn&&=(window.clearTimeout(Tn),0),E?.popover.remove(),E=null}var Tn=0;function En(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(dn),t&&(t.textContent=_n),n&&(n.textContent=_n),Tn&&window.clearTimeout(Tn),Tn=window.setTimeout(()=>Dn(e),mn)}function Dn(e){Tn&&=(window.clearTimeout(Tn),0),e.classList.remove(dn);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=hn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=gn)}async function On(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}En(e)}function kn(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 An(e,t){let n={},r=()=>{let r=kn(e,t);if(!r){(!E||E.owner===n)&&wn();return}if(E&&E.owner!==n&&wn(),E)E.popover.classList.remove(un),Dn(E.popover),E.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${ln} ${vn}`:ln,i.innerHTML=xn(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){E?.text&&On(i,E.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(un);let n=kn(e,t);Cn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!E)return;let o=E.text;wn(),t.onChoose(a,o)}),document.body.appendChild(i),E={popover:i,text:r.text,owner:n}}Cn(E.popover,r.rect)},i=e=>{E&&e.target instanceof Node&&E.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!E)return;let e=window.getSelection();(!e||e.isCollapsed)&&wn()},s=e=>{e.key===`Escape`&&wn()},c=()=>wn();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),wn()}}var jn=[{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 Mn(e){return![...jn,...Nn].find(t=>t.id===e)?.instruction}var Nn=[{id:`add-to-chat`,label:`Add to chat`}],Pn=800;function Fn(e,t={}){let n=t.maxChars??Pn,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 Fn(e,t,n={}){let r=Pn(e,n);if(!r)return null;let i=[...An,...Mn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function In(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function D(e,t=``){return typeof e==`string`?e:t}var Ln=`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 Rn(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 zn=[`explain-detail`,`explain`];function Bn(e){return zn.includes(e)}function Vn(e){return e.action??`explain`}var Hn=`Ask more →`,Un={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Wn(e){return Un[Vn(e)]}function Gn(e,t={}){let n=tt(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Hn}</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">${Wn(e)}</summary>
43
+ `):``}function In(e,t,n={}){let r=Fn(e,n);if(!r)return null;let i=[...jn,...Nn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function Ln(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function D(e,t=``){return typeof e==`string`?e:t}var Rn=`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 zn(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 Bn=[`explain-detail`,`explain`];function Vn(e){return Bn.includes(e)}function Hn(e){return e.action??`explain`}var Un=`Ask more →`,Wn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Gn(e){return Wn[Hn(e)]}function Kn(e,t={}){let n=nt(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Un}</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">${Gn(e)}</summary>
45
45
  <div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
46
- </details>`}function Kn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function qn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Jn(e,t){return Bn(e)&&t?{explains:{...t,action:e}}:{}}function Yn(e){let t=Xn(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 Xn(e){let t=e.closest(`[data-finding-card]`),n=qn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Zn(e,t){let n=e.querySelector(Kn(t.kind,t.id));if(!n)return;let r=Gn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Qn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Qn(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 $n(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var er=/^pr-helper-severity-(critical|major|minor|nit)$/;function tr(e,t,n){let r=e.querySelector(Kn(t.kind,t.id));if(!r)return null;if(t.kind===`issue`){for(let e of[...r.classList])er.test(e)&&r.classList.remove(e);t.cardClass&&r.classList.add(t.cardClass)}r.querySelector(`[data-grade-control]`)?.replaceWith(rr(e,t.grade)),r.querySelector(`[data-assessment-region]`)?.replaceWith(rr(e,t.region)),r.querySelector(`[${Tt}]`)?.setAttribute(Tt,t.copy);let i=r.querySelector(`[data-question-answered], [data-issue-dismissed]`),a=t.verdictClosed===!0;return i&&i.dataset.verdictClosed===`true`!==a&&(a?i.dataset.verdictClosed=`true`:delete i.dataset.verdictClosed,n?.(r,a)),nr(e),r}function nr(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=Rn(r);i&&n.append(rr(e,i))}}function rr(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function ir(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 ar=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function or(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return ir(t,ar),!1}if(a===null)return!1;let o=a.body?.card?tr(e,a.body.card,r.onVerdictClosed):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):(ir(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function sr(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=Xn(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),or(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function cr(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 or(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 lr(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){sr(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&cr(i,t)})}function ur(e){let t=In(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`${Pn(t,{maxChars:1/0})}\n\n${Pn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}var dr=`Reassesses existing issues and questions using only your message in this turn.`;function fr(e,t=[]){return e.reconciles?pr(t):`<div class="prb-turn-actions" data-turn-actions="${e.askedAt}">
46
+ </details>`}function qn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Jn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Yn(e,t){return Vn(e)&&t?{explains:{...t,action:e}}:{}}function Xn(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=Jn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Qn(e,t){let n=e.querySelector(qn(t.kind,t.id));if(!n)return;let r=Kn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}$n(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function $n(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 er(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var tr=/^pr-helper-severity-(critical|major|minor|nit)$/;function nr(e,t,n){let r=e.querySelector(qn(t.kind,t.id));if(!r)return null;if(t.kind===`issue`){for(let e of[...r.classList])tr.test(e)&&r.classList.remove(e);t.cardClass&&r.classList.add(t.cardClass)}r.querySelector(`[data-grade-control]`)?.replaceWith(ir(e,t.grade)),r.querySelector(`[data-assessment-region]`)?.replaceWith(ir(e,t.region)),r.querySelector(`[${Et}]`)?.setAttribute(Et,t.copy);let i=r.querySelector(`[data-question-answered], [data-issue-dismissed]`),a=t.verdictClosed===!0;return i&&i.dataset.verdictClosed===`true`!==a&&(a?i.dataset.verdictClosed=`true`:delete i.dataset.verdictClosed,n?.(r,a)),rr(e),r}function rr(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=zn(r);i&&n.append(ir(e,i))}}function ir(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function ar(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 or=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function sr(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return ar(t,or),!1}if(a===null)return!1;let o=a.body?.card?nr(e,a.body.card,r.onVerdictClosed):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):(ar(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function cr(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),sr(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function lr(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 sr(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 ur(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){cr(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&lr(i,t)})}function dr(e){let t=Ln(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`${Fn(t,{maxChars:1/0})}\n\n${Fn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}var fr=`Reassesses existing issues and questions using only your message in this turn.`;function pr(e,t=[]){return e.reconciles?mr(t):`<div class="prb-turn-actions" data-turn-actions="${e.askedAt}">
47
47
  <button type="button" class="prb-turn-reconcile" data-reconcile-turn="${e.askedAt}">Reconcile with findings</button>
48
- <span class="prb-turn-help">${w(dr)}</span>
49
- </div>`}function pr(e){if(!e.length)return``;let t=e.length===1?`Accept the suggestion`:`Accept all ${e.length} suggestions`;return`<div class="prb-turn-actions">
48
+ <span class="prb-turn-help">${w(fr)}</span>
49
+ </div>`}function mr(e){if(!e.length)return``;let t=e.length===1?`Accept the suggestion`:`Accept all ${e.length} suggestions`;return`<div class="prb-turn-actions">
50
50
  <button type="button" class="prb-turn-accept-all" data-reconcile-accept-all="${w(e.join(` `))}">${w(t)}</button>
51
- </div>`}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 mr=`saved:`,hr=`Your prompts`;function gr(e){return`${mr}${e}`}function _r(e){return e.startsWith(`saved:`)?e.slice(6):null}var vr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function yr(e){return vr.includes(e)}function br(e){if(!e||typeof e!=`object`)return;let t={};for(let n of vr){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function xr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=br(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function Sr(e){return e?e===`buddy`?`buddy`:`document`:null}function Cr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return le.includes(i)&&n(i)?i:null}function wr(e){if(!e)return{};try{return xr(JSON.parse(e))}catch{return{}}}function Tr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Sr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!yr(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Er(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=_r(e);if(a===null)return Fn(t,e,i);let o=r(a);if(!o)return null;let s=Pn(t,i);return s?`${s}\n\n${o}`:null}function Dr(e,t,n){if(n.busy?.())return null;let r=Er(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=jn(e)||_r(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Or(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var kr=`Run review again`;function Ar(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 jr(e){let t=e.dataset.questionAnswered;t&&Ar(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Mr=`pr-helper-author-context-preview`,Nr=`View full PR description`,Pr=`Show less`;function Fr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Mr);if(!n)return;let i=n.closest(`#${zr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Ir(n);if(!o){let e=-Lr(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?Pr:Nr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Rr(n,s,Lr(n,s)+e);return}i&&Lr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Ir(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 Lr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Rr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var zr=`pr-helper-author-context`;function Br(e){let t=e.ownerDocument.getElementById(zr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Fr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Vr(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Hr(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 Ur(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})`}let n=e.byVerdict??0;return t===0&&n===0?`Dismissed by you (${e.done})`:t===0&&n===e.done?`Accepted as resolved (${e.done})`:`Dealt with (${e.done})`}function Wr(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 Gr(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 Kr(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function qr(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Jr(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Yr(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var Xr=50;function Zr(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function O(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function Qr(e){if(!e||typeof e!=`object`)return;let t=e,n=O(t.top);return{cited:O(t.cited),centre:O(t.centre),expand:O(t.expand,Xr),position:O(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function $r(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 ei(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?$r(n):{top:null,offset:0};return{cited:O(e.dataset.cited),centre:O(e.dataset.centre),expand:O(e.dataset.expand,Xr),position:O(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function ti(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 ni(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function ri(){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 ii(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 ai(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=Zr(e);return{host:ii(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:ei(t)}:{}}})}function oi(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function si(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&ii(n)===t.host)return n;return null}function ci(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 li(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:ai(t),...d(t)}}async function ui(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,s=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=s[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?n.setAsk(t.ask===`open`):t.ask===null&&n.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(ci).map(e=>({...e,state:Qr(e.state)}));for(let t of ai(r))if(!e.some(e=>oi(e,t))){let e=si(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=si(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=l(t,`main`);i&&c!==null&&(i.scrollTop=c);let u=l(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=l(t,`log`);return o&&d!==null&&(o.scrollTop=d),_(r,t.focus,t.focusVisible),!0}var di=`prb-ask-draft:`,fi=`prb-ask-staged:`,pi=300;function mi(e){return`${di}${e}`}function hi(e){return`${fi}${e}`}function gi(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 _i(e,t){let{storage:n,win:r}=t,i=mi(t.path),a=hi(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=gi(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(),pi)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function vi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var yi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function bi(e){return`<details class="prb-update-alt">
51
+ </div>`}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 hr=`saved:`,gr=`Your prompts`;function _r(e){return`${hr}${e}`}function vr(e){return e.startsWith(`saved:`)?e.slice(6):null}var yr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function br(e){return yr.includes(e)}function xr(e){if(!e||typeof e!=`object`)return;let t={};for(let n of yr){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function Sr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=xr(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function Cr(e){return e?e===`buddy`?`buddy`:`document`:null}function wr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return ue.includes(i)&&n(i)?i:null}function Tr(e){if(!e)return{};try{return Sr(JSON.parse(e))}catch{return{}}}function Er(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Cr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!br(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Dr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=vr(e);if(a===null)return In(t,e,i);let o=r(a);if(!o)return null;let s=Fn(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=Mn(e)||vr(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})`}let n=e.byVerdict??0;return t===0&&n===0?`Dismissed by you (${e.done})`:t===0&&n===e.done?`Accepted as resolved (${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 O(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=O(t.top);return{cited:O(t.cited),centre:O(t.centre),expand:O(t.expand,Zr),position:O(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:O(e.dataset.cited),centre:O(e.dataset.centre),expand:O(e.dataset.expand,Zr),position:O(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,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:oi(t),...S(t)}}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`):t.ask===null&&n.clearAsk(),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=g(t,`main`);i&&c!==null&&(i.scrollTop=c);let l=g(t,`rail`);a&&l!==null&&(a.scrollTop=l);let u=g(t,`log`);return o&&u!==null&&(o.scrollTop=u),f(r,t.focus,t.focusVisible),!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(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var bi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function xi(e){return`<details class="prb-update-alt">
52
52
  <summary>Start a new review</summary>
53
53
  <span>A brand new review, with its own findings and its own path through the change. Run <code>${w(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${w(e)}">Copy</button></span>
54
- </details>`}var xi=`prreviewbuddy review --fresh`;function Si(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 Ci(e,t){if(!t.actions)return!1;let n=e??(t.remote?ji(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 wi(e,t={}){let n=e??(t.remote?ji(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?Mi(n.code,r):Ai(n.code,t.availability??null),u=e?[...l.facts,`checked ${w(ve(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
54
+ </details>`}var Si=`prreviewbuddy review --fresh`;function Ci(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 wi(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 Ti(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 ${w(ye(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
55
55
  <div class="prb-fresh-head">
56
56
  <span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
57
57
  <strong class="prb-fresh-title">${w(l.title)}</strong>
58
58
  <span class="prb-fresh-facts">${u.join(` &middot; `)}</span>
59
59
  </div>
60
60
  ${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
61
- ${Ti(n,t,i||a,Ci(e,t))}
62
- </div>`}function Ti(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">
63
- ${r?vi():``}
64
- ${r?bi(xi):``}
61
+ ${Ei(n,t,i||a,wi(e,t))}
62
+ </div>`}function Ei(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">
63
+ ${r?yi():``}
64
+ ${r?xi(Si):``}
65
65
  ${i}
66
- ${Ei(e,t,n,r===!0)}
67
- </div>`}function Ei(e,t,n,r){let i=[r?w(yi):``,t.remote?Ni(e.code):Pi(e.code,e.checkout.reason!==`no-pull-request`),Fi(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${w(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">
66
+ ${Di(e,t,n,r===!0)}
67
+ </div>`}function Di(e,t,n,r){let i=[r?w(bi):``,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="${w(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">
68
68
  <summary>More details</summary>
69
69
  ${a}
70
- </details>`:a}function Di(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Oi(e){return e?`<code title="${w(e)}">${w(e.slice(0,7))}</code>`:``}function ki(e){return e?[`reviewed ${Oi(e)}`]:[]}function Ai(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:ki(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:ki(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...ki(e.reviewedSha),...Di(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:[...ki(e.reviewedSha),...t,...Di(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:ki(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:ki(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:ki(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 ji(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 Mi(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:[...ki(e.reviewedSha),...i,...n?Di(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${w(ve(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 Ni(e){return`This review is based on ${Oi(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Pi(e,t){if(!e.comparison)return``;let n=`<code>${w(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Oi(e.reviewedSha)}.`:`This review is based on ${Oi(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 Fi(e,t){if(!e.conversation.attached)return``;let n=w(ve(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 Ii(e,t){let n=Vr(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Li(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${zi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
70
+ </details>`:a}function Oi(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function ki(e){return e?`<code title="${w(e)}">${w(e.slice(0,7))}</code>`:``}function Ai(e){return e?[`reviewed ${ki(e)}`]:[]}function ji(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:Ai(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:Ai(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...Ai(e.reviewedSha),...Oi(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:[...Ai(e.reviewedSha),...t,...Oi(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:Ai(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:Ai(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:Ai(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:[...Ai(e.reviewedSha),...i,...n?Oi(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${w(ye(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 ${ki(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>${w(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${ki(e.reviewedSha)}.`:`This review is based on ${ki(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=w(ye(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(`
71
71
 
72
- `)}function Ri(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Li)].join(`
72
+ `)}function zi(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Ri)].join(`
73
73
 
74
- `)}function zi(e){return e.split(`
74
+ `)}function Bi(e){return e.split(`
75
75
  `).map(e=>e===``?`>`:`> ${e}`).join(`
76
- `)}function Bi(e){return e===`done`||e===`failed`}function Vi(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Hi(e,t=``){return`<div class="prb-doc-head">
76
+ `)}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">
77
77
  <h3 class="prb-doc-title">${w(e)}</h3>
78
78
  ${t}
79
- </div>`}var Ui=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,Wi=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function Gi(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 Ki(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${w(t)}" aria-pressed="false" aria-label="${w(n)}" title="${w(n)}">${Gi(Ui,`prb-focus-expand`)}${Gi(Wi,`prb-focus-collapse`)}</button>`}Ki(`kiss`,`KISS review`),Hi(`Recommendations`,Ki(`kissrecs`,`Recommendations`));var qi={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Ji(e,t){return t===`undecided`?`Open`:qi[e][t]}function Yi(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 Xi(e){return`Decided (${e})`}function Zi(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 Qi(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">
79
+ </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="${w(t)}" aria-pressed="false" aria-label="${w(n)}" title="${w(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">
80
80
  <p><strong>This KISS review describes commit ${w(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
81
81
  </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">
82
82
  <p><strong>This KISS review describes commit ${w(e.slice(0,7))}.</strong> ${w(i)}</p>
83
83
  <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>
84
84
  <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${w(t.latestSha)}">Not now</button>`:``}</p>
85
- </div>`}var $i=new WeakMap;function ea(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function ta(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{da(e);let i=e.contains(document.activeElement);na(e,t),la(e,!0),ia(n),i&&ua(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(la(e,!1),a){ia(n);return}na(e,r),ia(n),fa(e,t,n)},a=($i.get(e)??Promise.resolve()).then(i,i);return $i.set(e,a),a}function na(e,t){e.dataset.decision=t;let n=ca(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Ji(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=qi[n][r.dataset.kissDecide];ra(e,t!==`undecided`)}function ra(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 ia(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=Yi(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=Xi(r))}e.paintRail(n.length,i),aa(t)}function aa(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=sa(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=Zi(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?Ri(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function oa(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),aa(t))}function sa(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ca(e){return e.dataset.audience===`author`?`author`:`reviewer`}function la(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function ua(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 da(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function fa(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 ta(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 pa(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 ma(e,t){t.complete!==void 0&&_a(e,t.complete),t.activity!==void 0&&ha(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&va(e,ga(e)):va(e,t.lifecycle??void 0),t.queued!==void 0&&ya(e,t.queued)}function ha(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 ga(e){let t=e.querySelector(`[data-review-menu]`);return h(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function _a(e,n){let r=n?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&(i.dataset.status=r,i.textContent=c(r));let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=n?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=t(e)}}function va(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?ba(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);if(i){let e=y(t,r);i.hidden=e===void 0,i.textContent=e?.text??``,i.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=n.dataset.lifecycleSet;n.hidden=!u(e,t,r),n.textContent=p(e,t,r)}}function ya(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=v(t))}function ba(e){return S(e.dataset)}function xa(e){return h(e)??null}function Sa(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:a}=e,o={lifecycle:xa(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 Ca(){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 wa=`The workspace server did not answer. It may have stopped.`;function Ta(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?(ma(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:wa}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:xa(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:xa(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:wa}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,a=i&&r?.hasAttribute(`data-branch-actions`)===!0,o=r?h({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,s=r?S(r.dataset):void 0,c=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,l=!n;return{reviewed:l&&i&&!c,waiting:l&&a&&u(`waiting`,o,s),done:l&&a&&u(`done`,o,s),queue:l&&a,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function Ea(e,t){return`${e} ${t}${e===1?``:`s`}`}function Da(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Ea(e,`issue`):``,questions:t?Ea(t,`question`):``}}function Oa(e,t){let n=Da(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function ka(e){return e===0?``:`${e} chosen`}function Aa(e){let t=(e,t)=>{let n=t.map(e=>typeof e==`string`?{text:e.trim()}:{text:e.text.trim(),ref:e.ref}).filter(e=>e.text);return n.length===0?null:n.every(e=>e.ref)?`## ${e}\n\n${n.map(e=>`**${e.ref}.** ${e.text}`).join(`
85
+ </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 b(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function va(t,n){let r=n?`complete`:`in-progress`,i=t.querySelector(`[data-page-status]`);i&&(i.dataset.status=r,i.textContent=ee(r));let a=t.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let t=n?`in-progress`:`complete`;a.dataset.markStatus=t,a.textContent=e(t)}}function ya(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let i=n?xa(n):void 0,a=e.querySelector(`[data-page-lifecycle]`);if(a){let e=c(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=!r(e,t,i),n.textContent=v(e,t,i)}}function ba(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 xa(e){return p(e.dataset)}function Sa(e){return b(e)??null}function Ca(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Sa(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=h(i);e&&(a.activity=e)}return a}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,i=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()}},a=e=>i(`/queue`,{action:e},e=>({lifecycle:Sa(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:Sa(e.lifecycle),queued:e.queued===!0})),setQueued:a,toggleQueued:()=>a(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 i=t(),a=i?.hasAttribute(`data-can-write`)===!0,o=a&&i?.hasAttribute(`data-branch-actions`)===!0,s=i?b({state:i.dataset.lifecycleState,at:Number(i.dataset.lifecycleAt)}):void 0,c=i?p(i.dataset):void 0,l=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,u=!n;return{reviewed:u&&a&&!l,waiting:u&&o&&r(`waiting`,s,c),done:u&&o&&r(`done`,s,c),queue:u&&o,checkForUpdates:a&&i?.hasAttribute(`data-checkable`)===!0,delete:a}},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=>typeof e==`string`?{text:e.trim()}:{text:e.text.trim(),ref:e.ref}).filter(e=>e.text);return n.length===0?null:n.every(e=>e.ref)?`## ${e}\n\n${n.map(e=>`**${e.ref}.** ${e.text}`).join(`
86
86
 
87
87
  `)}`:`## ${e}\n\n${n.map(({text:e},t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
88
88
 
@@ -90,7 +90,7 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
90
90
 
91
91
  `)}`},n=[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean),r=e.reviewTag&&n.length&&[...e.issues,...e.questions].some(e=>typeof e!=`string`&&e.ref)?[`_References from review ${e.reviewTag}. Please keep them, and this line, in your reply._`]:[];return[...n,...r].join(`
92
92
 
93
- `)}var ja=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>`;ja(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),ja(`<path d="M20 6 9 17l-5-5"/>`);function Ma(e){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return Aa({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}function Na(){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=Pa(t);return n?.basis!==r&&(n={text:Ma(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(!Ia(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 Pa(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify([e.reviewTag??``,...t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1)])}var Fa=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Ia(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Fa(t.issues)||!Fa(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 k=[`preview`,`markdown`],La={issue:`issues`,question:`questions`};function Ra({root:e,showView:t}){let n=Na(),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=Da(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=ka(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(Tt,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:za(e,`issue`,n.ids(`issue`)),questions:za(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},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 Ma(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Oa(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){Ba(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(Tt,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=>Ha(e,t)),a(),c}function za(e,t,n){return[...e.querySelectorAll(`[data-view="${La[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})=>{let n=t.querySelector(`[${Et}]`),r=n?.getAttribute(Dt);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function Ba(e,t){for(let n of k){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 Va(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Va(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?tt(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function Ha(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=k.indexOf(n),i=t.key===`ArrowRight`?k[(r+1)%k.length]:t.key===`ArrowLeft`?k[(r+k.length-1)%k.length]:t.key===`Home`?k[0]:t.key===`End`?k[k.length-1]:null;i&&(t.preventDefault(),Ba(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Ua(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 Wa(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&&!Ua(t),run:()=>n()?.click()}}}function Ga(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 Ka(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function qa(e){let{doc:t}=e,n=ye({doc:t,item:`[data-finding-card]`,walk:()=>Ga(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:()=>Ga(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>Ga(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:()=>!Ka(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 Ja=`prb-rail-review`;function Ya(e){return(e.getElementById(Ja)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}Ki(`progress`,`Review progress`);function Xa(e,t=Date.now()){return`Running for ${Za(t-e)}`}function Za(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 Qa={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function $a(e){let t=new Map;for(let n of Object.keys(Qa)){let r=Qa[n],i=e.querySelector(`[${r}]`);i&&!Bi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function eo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Bi(t.phase):to(t.phase,n)}function to(e,t){return Bi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function no(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||Vi(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 ro(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=Xa(e))}}function io(e,t=1e3){let n=window.setInterval(()=>ro(e),t);return()=>window.clearInterval(n)}async function ao({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`||Bi(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function oo(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-${w(e.scope)}" data-diagram-card="${w(e.scope)}">
93
+ `)}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){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return ja({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}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([e.reviewTag??``,...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 k=[`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(Et,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:Ba(e,`issue`,n.ids(`issue`)),questions:Ba(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},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(Et,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})=>{let n=t.querySelector(`[${Dt}]`),r=n?.getAttribute(Ot);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function Va(e,t){for(let n of k){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()?nt(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=k.indexOf(n),i=t.key===`ArrowRight`?k[(r+1)%k.length]:t.key===`ArrowLeft`?k[(r+k.length-1)%k.length]:t.key===`Home`?k[0]:t.key===`End`?k[k.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=be({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)}}}}}function Ya(e){return e.querySelector(`[data-review-home]`)?.dataset.viewNav??null}qi(`progress`,`Review progress`);function Xa(e,t=Date.now()){return`Running for ${Za(t-e)}`}function Za(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 Qa={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function $a(e){let t=new Map;for(let n of Object.keys(Qa)){let r=Qa[n],i=e.querySelector(`[${r}]`);i&&!Vi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function eo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Vi(t.phase):to(t.phase,n)}function to(e,t){return Vi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function no(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 ro(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=Xa(e))}}function io(e,t=1e3){let n=window.setInterval(()=>ro(e),t);return()=>window.clearInterval(n)}async function ao({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 oo(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-${w(e.scope)}" data-diagram-card="${w(e.scope)}">
94
94
  <header class="prb-diagram-head">
95
95
  <div class="prb-diagram-heading">
96
96
  <h4 class="prb-diagram-title">
@@ -113,14 +113,14 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
113
113
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
114
114
  <details class="prb-diagram-source">
115
115
  <summary>Diagram source</summary>
116
- <div class="${xe}"><pre><code data-mermaid-source>${w(e.mermaid)}</code></pre><button type="button" class="${Se}" aria-label="Copy code">Copy</button></div>
116
+ <div class="${Se}"><pre><code data-mermaid-source>${w(e.mermaid)}</code></pre><button type="button" class="${Ce}" aria-label="Copy code">Copy</button></div>
117
117
  </details>
118
118
  </article>`}function so(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${w(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 co=.5,lo=3,uo=1.25,fo=new WeakSet,po=new WeakMap,mo=new WeakMap,A=null;function ho(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(()=>{A?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Oo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){jo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?_o(e):o&&go(e,o.dataset.diagramRequest||null)}),xo(),vo(),{drawPane:ko}}async function go(e,t){if(A)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${zo(n)}"]`)??null??wo(r,n,t);if(!i)return;So(),e.showDiagrams();let a=To(i);A=new AbortController,Po(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:A.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 Eo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Do(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),So()):a.remove();return}Eo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{A=null,Po(!0)}}async function _o(e){if(A)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=yo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),A=new AbortController,Po(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:A.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){bo(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),So()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}bo(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),A=null,Po(!0)}}function vo(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(yo(e),Po(!1))}function yo(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 bo(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function xo(){let e=document.querySelector(`[data-diagram-pane][data-diagram-running]`);if(!e)return;let t=e.dataset.diagramRunning||null,n=t??`change`,r=e.querySelector(`[data-diagram-card="${zo(n)}"]`)??wo(e,n,t);r&&(So(),To(r,{scroll:!1}),Po(!1))}function So(){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;Co(`map`,t>0),Co(`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 Co(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 wo(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">
119
119
  <div class="prb-diagram-heading">
120
120
  <h4 class="prb-diagram-title">Drawing…</h4>
121
121
  <p class="prb-diagram-scope">${t===`change`?`Whole change`:Ro(Fo(n))}</p>
122
122
  </div>
123
- </header>`,Io(e,r,n),r}function To(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:Bo()?`auto`:`smooth`,block:`start`}),n}function Eo(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 Do(e,t,n){let r=oo(t,new Map(n?[[n,Fo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),So(),Ao(a))}function Oo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Ao(e))}function ko(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Ao(e)}async function Ao(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||fo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){fo.add(e);try{await Qt(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{fo.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 jo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){mo.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Mo(e,n);if(i<=0)return;let a=No((mo.get(e)??1)*(t===`in`?uo:1/uo));mo.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Mo(e,t){let n=po.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return po.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function No(e){return Math.min(lo,Math.max(co,e))}function Po(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Fo(e){return e?document.querySelector(`[data-goto-section="${zo(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Io(e,t,n){let r=Lo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Lo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Lo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${zo(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Ro(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function zo(e){return CSS.escape(e)}function Bo(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Vo=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Ho=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],Uo={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Wo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Go(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}=Ko(t.nodes);return{schemaVersion:1,title:Qo(D(t.title).trim(),Uo.mapTitle)||`Change map`,intent:Jo(t.intent,Uo.intent)??{simple:``,technical:``},nodes:n,edges:qo(t.edges,r)}}function Ko(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=Jo(e.title,Uo.title);if(!a)continue;let o=D(e.id).trim()||a.technical;if(t.has(o))continue;let s=Zo(Xo(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Vo.includes(e.role)?e.role:`concept`,l=Jo(e.why,Uo.why),u=Qo(D(e.anchor).trim(),Uo.anchor),d=D(e.sectionId).trim();r.push({id:s,role:c,stage:Yo(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:Jo(e.body,Uo.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=Jo(e.label,Uo.label),a=t.get(D(e.from).trim())??D(e.from).trim(),o=t.get(D(e.to).trim())??D(e.to).trim();if(!i||!a||!o)continue;let s=Jo(e.note,Uo.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function Jo(e,t){if(typeof e==`string`){let n=Qo(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Qo(D(n.simple).trim(),t),i=Qo(D(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function Yo(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Wo[t]}function Xo(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function Zo(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Qo(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 $o(e,t){try{return es(Go(e),t).map}catch{return null}}function es(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=rs(ts(e.nodes,n).map(e=>ns(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:is(r),edges:o},audit:n}}function ts(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 ns(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 rs(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function is(e){return[...e].sort((e,t)=>e.stage-t.stage)}function as(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?$o(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return os(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
123
+ </header>`,Io(e,r,n),r}function To(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:Bo()?`auto`:`smooth`,block:`start`}),n}function Eo(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 Do(e,t,n){let r=oo(t,new Map(n?[[n,Fo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),So(),Ao(a))}function Oo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Ao(e))}function ko(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Ao(e)}async function Ao(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||fo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){fo.add(e);try{await $t(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{fo.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 jo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){mo.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Mo(e,n);if(i<=0)return;let a=No((mo.get(e)??1)*(t===`in`?uo:1/uo));mo.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Mo(e,t){let n=po.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return po.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function No(e){return Math.min(lo,Math.max(co,e))}function Po(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Fo(e){return e?document.querySelector(`[data-goto-section="${zo(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Io(e,t,n){let r=Lo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Lo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Lo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${zo(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Ro(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function zo(e){return CSS.escape(e)}function Bo(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Vo=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Ho=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],Uo={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Wo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Go(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}=Ko(t.nodes);return{schemaVersion:1,title:Qo(D(t.title).trim(),Uo.mapTitle)||`Change map`,intent:Jo(t.intent,Uo.intent)??{simple:``,technical:``},nodes:n,edges:qo(t.edges,r)}}function Ko(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=Jo(e.title,Uo.title);if(!a)continue;let o=D(e.id).trim()||a.technical;if(t.has(o))continue;let s=Zo(Xo(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Vo.includes(e.role)?e.role:`concept`,l=Jo(e.why,Uo.why),u=Qo(D(e.anchor).trim(),Uo.anchor),d=D(e.sectionId).trim();r.push({id:s,role:c,stage:Yo(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:Jo(e.body,Uo.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=Jo(e.label,Uo.label),a=t.get(D(e.from).trim())??D(e.from).trim(),o=t.get(D(e.to).trim())??D(e.to).trim();if(!i||!a||!o)continue;let s=Jo(e.note,Uo.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function Jo(e,t){if(typeof e==`string`){let n=Qo(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Qo(D(n.simple).trim(),t),i=Qo(D(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function Yo(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Wo[t]}function Xo(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function Zo(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Qo(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 $o(e,t){try{return es(Go(e),t).map}catch{return null}}function es(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=rs(ts(e.nodes,n).map(e=>ns(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:is(r),edges:o},audit:n}}function ts(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 ns(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 rs(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function is(e){return[...e].sort((e,t)=>e.stage-t.stage)}function as(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?$o(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return os(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
124
124
  <header class="prb-map-head">
125
125
  <div class="prb-map-heading">
126
126
  <h4 class="prb-map-title">${w(a.title)}</h4>
@@ -158,21 +158,21 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
158
158
  </article>`}function ds(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${w(e.from)}" data-to="${w(e.to)}">${j(e.label)}</span>`}function fs(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
159
159
  <summary>Read as a list</summary>
160
160
  <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${j(n)}</strong> <em>${j(e.label)}</em> <strong>${j(r)}</strong>${e.note?`<span class="prb-map-note"> — ${j(e.note)}</span>`:``}</li>`}).join(``)}</ol>
161
- </details>`}function j(e){return e.simple===e.technical?be(e.simple):`<span data-reg="simple">${be(e.simple)}</span><span data-reg="technical">${be(e.technical)}</span>`}var ps=`http://www.w3.org/2000/svg`,ms=new WeakSet,hs=new WeakMap;function gs(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){As(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&&ks(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&&ks(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`)&&(ks(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:_s,show:vs}}function _s(){for(let e of document.querySelectorAll(`[data-map-board]`))ys(e),bs(e)}function vs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=as({stored:e,sections:Ms(),reviewedSha:e.commitSha,register:js()}),_s())}function ys(e){if(ms.has(e)||typeof ResizeObserver>`u`)return;ms.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,bs(e)}))}).observe(e)}function bs(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(Os());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?xs(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=hs.get(e),_=g&&g.width===h?g.edges:new Set;hs.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.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(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Ss(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ss(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ws(s,i.from,c,i.to),[u,h,g,y]=l,b=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Ts(l,.05+t*.05)).some(e=>b.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let x=document.createElementNS(ps,`path`);x.setAttribute(`d`,`M${Ds(u.x)},${Ds(u.y)} C${Ds(h.x)},${Ds(h.y)} ${Ds(g.x)},${Ds(g.y)} ${Ds(y.x)},${Ds(y.y)}`),x.setAttribute(`class`,`prb-map-edge`),x.setAttribute(`marker-end`,`url(#prb-map-arrow)`),x.dataset.mapEdge=e.dataset.mapEdge??``,x.dataset.from=e.dataset.from??``,x.dataset.to=e.dataset.to??``,t.appendChild(x),e.hidden=!1;let ee=e.offsetWidth,S=e.offsetHeight,te=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Ts(l,e);return{left:t.x-ee/2,top:t.y-S/2,right:t.x+ee/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Es(e,t,2)));if(!te){x.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(te),e.style.left=`${Math.round(te.left)}px`,e.style.top=`${Math.round(te.top)}px`}),e.setAttribute(`data-laid-out`,``)}function xs(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 Ss(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 Cs={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ws(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=Cs[t],s=Cs[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 Ts([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 Es(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 Ds(e){return Math.round(e*10)/10}function Os(){let e=document.createElementNS(ps,`defs`),t=document.createElementNS(ps,`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(ps,`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 ks(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 As(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));_s(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function js(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Ms(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Ns=`repository`,Ps={minCharacters:8,maxLines:3,maxCharacters:400},Fs=[`app`,`service`,`component`,`store`,`external`,`group`],Is=/^[a-z][a-z0-9-]*$/;function Ls(e){let t=[];if(!Ks(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};Js(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=qs(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=Ys(n.title,`architecture.title`,t),i=Xs(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=zs(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=>Ks(e)&&typeof e.id==`string`&&Is.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)Rs(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=Bs(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)&&(Rs(a,c).includes(d)||Rs(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 Rs(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 zs(e,t,n){if(!Ks(e))return n.push(`${t} must be an object.`),null;Js(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=qs(e,[`parent`,`description`,`owns`],t,n),i=Zs(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Ns}": that name is kept for the whole repository. Choose another id.`);let a=Ys(r.name,`${t}.name`,n),o=Fs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Fs.join(`, `)}.`);let s=r.parent===void 0?void 0:Zs(r.parent,`${t}.parent`,n),c=Xs(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Vs(r.owns,`${t}.owns`,n),u=Hs(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 Bs(e,t,n){if(!Ks(e))return n.push(`${t} must be an object.`),null;Js(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=qs(e,[`description`,`confidence`],t,n),i=Zs(r.id,`${t}.id`,n),a=Zs(r.source,`${t}.source`,n),o=Zs(r.target,`${t}.target`,n),s=Ys(r.label,`${t}.label`,n),c=Xs(r.description,`${t}.description`,n),l=Hs(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 Vs(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=Ys(e,`${t}[${i}]`,n);a!==null&&(!Gs(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 Hs(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(!Ks(e)){n.push(`${a} must be an object.`);return}Js(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=qs(e,[`symbol`,`line`,`note`],a,n);let o=Ys(e.path,`${a}.path`,n);o!==null&&!Gs(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=Us(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=Qs(e.line,`${a}.line`,n),u=Xs(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 Us(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Ps.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Ws(r);return r.split(`
162
- `).length>Ps.maxLines||r.length>Ps.maxCharacters?(n.push(`${t} must be at most ${Ps.maxLines} lines and ${Ps.maxCharacters} characters.`),null):i.length<Ps.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Ps.minCharacters} characters.`),null):r}function Ws(e){return e.replace(/\s+/g,` `).trim()}function Gs(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function Ks(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function qs(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 Js(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function Ys(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function Xs(e,t,n){if(e!==void 0)return Ys(e,t,n)??void 0}function Zs(e,t,n){if(typeof e==`string`&&Is.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 Qs(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 $s(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,...Rs(t,n)],i=e=>t!==null&&Rs(e,n).includes(t),a=e=>{let a=[e,...Rs(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 ec={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function tc(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 nc(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]=ec[e.kind],r=e.detail?`${tc(e.name)}<br>${tc(e.detail)}`:tc(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["${tc(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}|"${tc(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(`
163
- `),nodes:r,edges:u}}function rc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=$s(e,t),a=r===0&&t===null?`# ${ic(e.title)}`:`## ${ic(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=nc(i,{edgeIds:!1}).source;return[a,...o?[ic(o)]:[],["```mermaid",s,"```"].join(`
161
+ </details>`}function j(e){return e.simple===e.technical?xe(e.simple):`<span data-reg="simple">${xe(e.simple)}</span><span data-reg="technical">${xe(e.technical)}</span>`}var ps=`http://www.w3.org/2000/svg`,ms=new WeakSet,hs=new WeakMap;function gs(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){ks(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&&Os(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&&Os(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`)&&(Os(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:_s,show:vs}}function _s(){for(let e of document.querySelectorAll(`[data-map-board]`))ys(e),bs(e)}function vs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=as({stored:e,sections:js(),reviewedSha:e.commitSha,register:As()}),_s())}function ys(e){if(ms.has(e)||typeof ResizeObserver>`u`)return;ms.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,bs(e)}))}).observe(e)}function bs(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(Ds());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?xs(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=hs.get(e),_=g&&g.width===h?g.edges:new Set;hs.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.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(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Ss(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ss(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ws(s,i.from,c,i.to),[u,h,g,y]=l,b=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Ts(l,.05+t*.05)).some(e=>b.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let x=document.createElementNS(ps,`path`);x.setAttribute(`d`,`M${M(u.x)},${M(u.y)} C${M(h.x)},${M(h.y)} ${M(g.x)},${M(g.y)} ${M(y.x)},${M(y.y)}`),x.setAttribute(`class`,`prb-map-edge`),x.setAttribute(`marker-end`,`url(#prb-map-arrow)`),x.dataset.mapEdge=e.dataset.mapEdge??``,x.dataset.from=e.dataset.from??``,x.dataset.to=e.dataset.to??``,t.appendChild(x),e.hidden=!1;let ee=e.offsetWidth,S=e.offsetHeight,te=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Ts(l,e);return{left:t.x-ee/2,top:t.y-S/2,right:t.x+ee/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Es(e,t,2)));if(!te){x.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(te),e.style.left=`${Math.round(te.left)}px`,e.style.top=`${Math.round(te.top)}px`}),e.setAttribute(`data-laid-out`,``)}function xs(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 Ss(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 Cs={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ws(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=Cs[t],s=Cs[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 Ts([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 Es(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 M(e){return Math.round(e*10)/10}function Ds(){let e=document.createElementNS(ps,`defs`),t=document.createElementNS(ps,`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(ps,`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 Os(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 ks(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));_s(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function As(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function js(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Ms=`repository`,Ns={minCharacters:8,maxLines:3,maxCharacters:400},Ps=[`app`,`service`,`component`,`store`,`external`,`group`],Fs=/^[a-z][a-z0-9-]*$/;function Is(e){let t=[];if(!Gs(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};qs(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=Ks(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=Js(n.title,`architecture.title`,t),i=Ys(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=Rs(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=>Gs(e)&&typeof e.id==`string`&&Fs.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)Ls(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=zs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(Ls(a,c).includes(d)||Ls(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 Ls(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 Rs(e,t,n){if(!Gs(e))return n.push(`${t} must be an object.`),null;qs(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=Ks(e,[`parent`,`description`,`owns`],t,n),i=Xs(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Ms}": that name is kept for the whole repository. Choose another id.`);let a=Js(r.name,`${t}.name`,n),o=Ps.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Ps.join(`, `)}.`);let s=r.parent===void 0?void 0:Xs(r.parent,`${t}.parent`,n),c=Ys(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Bs(r.owns,`${t}.owns`,n),u=Vs(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function zs(e,t,n){if(!Gs(e))return n.push(`${t} must be an object.`),null;qs(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=Ks(e,[`description`,`confidence`],t,n),i=Xs(r.id,`${t}.id`,n),a=Xs(r.source,`${t}.source`,n),o=Xs(r.target,`${t}.target`,n),s=Js(r.label,`${t}.label`,n),c=Ys(r.description,`${t}.description`,n),l=Vs(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 Bs(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=Js(e,`${t}[${i}]`,n);a!==null&&(!Ws(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 Vs(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(!Gs(e)){n.push(`${a} must be an object.`);return}qs(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=Ks(e,[`symbol`,`line`,`note`],a,n);let o=Js(e.path,`${a}.path`,n);o!==null&&!Ws(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=Hs(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=Zs(e.line,`${a}.line`,n),u=Ys(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 Hs(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Ns.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Us(r);return r.split(`
162
+ `).length>Ns.maxLines||r.length>Ns.maxCharacters?(n.push(`${t} must be at most ${Ns.maxLines} lines and ${Ns.maxCharacters} characters.`),null):i.length<Ns.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Ns.minCharacters} characters.`),null):r}function Us(e){return e.replace(/\s+/g,` `).trim()}function Ws(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function Gs(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ks(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 Js(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function Ys(e,t,n){if(e!==void 0)return Js(e,t,n)??void 0}function Xs(e,t,n){if(typeof e==`string`&&Fs.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 Zs(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 Qs(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,...Ls(t,n)],i=e=>t!==null&&Ls(e,n).includes(t),a=e=>{let a=[e,...Ls(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 $s={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function ec(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 tc(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]=$s[e.kind],r=e.detail?`${ec(e.name)}<br>${ec(e.detail)}`:ec(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["${ec(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}|"${ec(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(`
163
+ `),nodes:r,edges:u}}function nc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=Qs(e,t),a=r===0&&t===null?`# ${rc(e.title)}`:`## ${rc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=tc(i,{edgeIds:!1}).source;return[a,...o?[rc(o)]:[],["```mermaid",s,"```"].join(`
164
164
  `)].join(`
165
165
 
166
166
  `)}).join(`
167
167
 
168
- `)}\n`}function ic(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var ac={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 oc(e){return ac[e.stage]}var sc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},cc=5e3;function lc(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&&dc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&fc(e,r,r.dataset.architectureStop||`repository`)}),mc(e,()=>{r()?uc():n=!0});async function i(){if(n)return uc();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 yc(r,`The architecture could not be read.`)}let s=Ls(o.architecture);if(!s.ok)return yc(r,`The architecture could not be read.`);let c={scope:Ns,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=Ls(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new gc({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&&hc(r,c,l)}),d}return{show:i}}function uc(){let e=ne(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function dc(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 uc();pc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{pc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function fc(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 uc();pc(t,`Mapping could not be stopped.`)}catch{pc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function pc(e,t){let n=M(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function mc(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}=oc(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(),cc)};window.setTimeout(()=>void r(),cc)}async function hc(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=>rc(e.architecture,[null,...r(e.architecture)])).join(`
169
- `),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 gc=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 C(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return yc(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&&vc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&vc(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),yc(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(..._c(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;bc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(M(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=M(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=_c(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(M(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(M(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=M(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=M(`details`,`prb-arch-failure-details`,``),n=M(`ul`,``,``);for(let e of r.errors)n.append(M(`li`,``,e));e.append(M(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function _c(e,t,n){let r=t?[M(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,M(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=M(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[M(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function vc(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?[]:[...Rs(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=M(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[M(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function yc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function bc(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[M(`p`,`prb-arch-kind`,`${sc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),M(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(M(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=M(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(xc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(M(`h5`,`prb-arch-subhead`,`Relationships`));let e=M(`ul`,`prb-arch-related`,``);for(let t of d)e.append(M(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(M(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=M(`section`,`prb-arch-relationship`,``);n.append(M(`p`,`prb-arch-kind`,`Relationship`),M(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(M(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(M(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(xc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function xc(e,t=[]){let n=M(`div`,`prb-arch-evidence`,``);n.append(M(`h5`,`prb-arch-subhead`,`Evidence`));let r=M(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=M(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=M(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(M(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(M(`span`,`prb-arch-location`,e.path),M(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(M(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(M(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function M(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}function Sc(e,t){let n=t,r=null,i=!1,a=async()=>{let t=null;do{i=!1;let r=e.current(),a=await e.send(r);a===null&&(n=r),t=a}while(i);if(t===null)return;let r=await e.read();if(r!==null&&(n=r),i)return a();e.paint(n),e.fail(t)};return{changed:()=>{if(r){i=!0;return}r=a().finally(()=>{r=null})},idle:async()=>{for(;r;)await r}}}var Cc=5e3;function wc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{a(t,(await(await e.markSeen()).json()).unread)}catch{}},o=async()=>{try{if(r()){let n=await(await e.askUnread()).json();typeof n.here==`number`&&n.here>0&&r()?await i():a(t,n.unread)}}catch{}n.setTimeout(()=>void o(),Cc)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void o(),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}">
168
+ `)}\n`}function rc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var ic={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 ac(e){return ic[e.stage]}var oc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},sc=5e3;function cc(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&&uc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&dc(e,r,r.dataset.architectureStop||`repository`)}),pc(e,()=>{r()?lc():n=!0});async function i(){if(n)return lc();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 vc(r,`The architecture could not be read.`)}let s=Is(o.architecture);if(!s.ok)return vc(r,`The architecture could not be read.`);let c={scope:Ms,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=Is(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new hc({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=new URLSearchParams(window.location.search).get(`part`),f=u.draw(c).then(()=>d?u.reveal(d):void 0);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&&mc(r,c,l)}),f}return{show:i}}function lc(){let e=re(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function uc(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 lc();fc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{fc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function dc(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 lc();fc(t,`Mapping could not be stopped.`)}catch{fc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function fc(e,t){let n=N(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function pc(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}=ac(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(),sc)};window.setTimeout(()=>void r(),sc)}async function mc(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=>nc(e.architecture,[null,...r(e.architecture)])).join(`
169
+ `),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 hc=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 C(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return vc(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&&_c(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&_c(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),vc(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(...gc(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;yc(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=gc(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 gc(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 _c(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?[]:[...Ls(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 vc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function yc(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`,`${oc[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(bc(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(bc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function bc(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}function xc(e,t){let n=t,r=null,i=!1,a=async()=>{let t=null;do{i=!1;let r=e.current(),a=await e.send(r);a===null&&(n=r),t=a}while(i);if(t===null)return;let r=await e.read();if(r!==null&&(n=r),i)return a();e.paint(n),e.fail(t)};return{changed:()=>{if(r){i=!0;return}r=a().finally(()=>{r=null})},idle:async()=>{for(;r;)await r}}}var Sc=5e3;function Cc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,a=async()=>{try{let n=await(await e.markSeen()).json();l(t,n.unread),i(t,n.running)}catch{}},o=async()=>{try{if(r()){let n=await(await e.askUnread()).json();i(t,n.running),typeof n.here==`number`&&n.here>0&&r()?await a():l(t,n.unread)}}catch{}n.setTimeout(()=>void o(),Sc)};t.addEventListener(`visibilitychange`,()=>{r()&&a()}),r()&&a(),n.setTimeout(()=>void o(),Sc)}function wc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Tc=1e3,Ec=new WeakMap;function Dc(e,t){return e.length<=1e3?wc(e)||`&nbsp;`:`${wc(e.slice(0,Tc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Oc(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">${Dc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function kc(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?Oc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Dc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Oc(a)),i.join(``)}function Ac(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 jc(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&&Ec.set(r,o)}}function Mc(e){let t=Ec.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Nc(e){return e.deletion?2*e.line-1:2*e.line}function Pc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Fc(e,t){if(e.length===0)return``;let n=e.map(Nc),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}">
170
170
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
171
171
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
172
172
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
173
- </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={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},$c=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],el=`#tour`,N=16,P=6,tl=380,nl=260;function rl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:$c.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function il(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,N,i-n-N),left:a((r-t)/2,N,r-t-N)};if(!e)return o;let s=a(e.top,N,i-n-N);if(e.right+N+t<=r-N)return{top:s,left:e.right+N};if(e.left-N-t>=N)return{top:s,left:e.left-N-t};let c=a(e.left,N,r-t-N);return e.bottom+N+n<=i-N?{top:e.bottom+N,left:c}:e.top-N-n>=N?{top:e.top-N-n,left:c}:{top:a(i-n-N,N,i-n-N),left:o.left}}function al(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function ol(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function sl(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(ol(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``);let r=e.getElementById(`prb-rail-review`);r?.hidden&&(n.push(()=>{r.hidden=!0}),r.hidden=!1)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(ol(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function cl(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function ll(e,t,n){let r=rl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=cl(e,`prb-tour-skip`,`Skip tour`),h=cl(e,`prb-tour-back`,`Back`),g=cl(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},b=!1,x=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?al(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-P,0),t=Math.max(o.left-P,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+P,u)-t}px`,c.style.height=`${Math.min(o.bottom+P,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-P-32,u-o.right-P-32):0;l.style.width=`${f>=nl?Math.min(tl,f):Math.min(tl,u-32)}px`;let p=l.getBoundingClientRect(),m=il(o&&{top:o.top-P,left:o.left-P,bottom:o.bottom+P,right:o.right+P},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},ee=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=sl(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:Qc.title,p.replaceChildren(...(i?i.body:Qc.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,x(),g.focus({focusVisible:n})},S=r=>{if(!b){b=!0,y(),t.removeEventListener(`resize`,x),e.removeEventListener(`scroll`,x,!0),e.removeEventListener(`transitionend`,x,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):ee(v+1,e.detail===0)),h.addEventListener(`click`,e=>ee(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,x),e.addEventListener(`scroll`,x,!0),e.addEventListener(`transitionend`,x,!0),s.showModal(),ee(-1,!1),{close:()=>S(`dismissed`)}}var ul={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function dl(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=ul[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=cl(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function fl(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:ll(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(dl(e,r),r):`started`}var pl={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 ml(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:pl[t.slice(n+1).toLowerCase()]??null}function hl(e){let t=new Set;for(let n of e){let e=ml(n);e&&t.add(e)}return[...t]}var gl={ruby:()=>C(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>C(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>C(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>C(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>C(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>C(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>C(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>C(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>C(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>C(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>C(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>C(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>C(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>C(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>C(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>C(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>C(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>C(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>C(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>C(()=>import(`./chunk-DswuEJGm.js`),[])},_l=`github-light-default`,vl=null,yl=new Map;function bl(){return vl??=Promise.all([C(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),C(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),C(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(C(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),vl}function xl(e){let t=yl.get(e);return t||(t=bl().then(async t=>t?(await t.loadLanguage(gl[e]),!0):!1).catch(()=>!1),yl.set(e,t)),t.then(e=>e?bl():null)}var Sl={async preload(e){await xl(e)},async tokenize(e,t){let n=await xl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:_l}),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 wl=/^#[0-9a-f]{3,8}$/i;function Tl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&wl.test(e.color)?`<span style="color:${e.color}">${Tc(e.content)}</span>`:Tc(e.content)).join(``)}function El(e){return e.length>1e3?e.slice(0,Ec):e}function Dl(e,t,n){if(!e||t===``)return;let r=Tl(El(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 Ol(e,t,n=Sl){let r=ml(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(El).join(`
174
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{Dl(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=>El(e.text)).join(`
175
- `),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;Dl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function kl(e,t=Sl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in gl)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Tl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var F=o({ownsRestore:!0}),I=document.body,Al=I.dataset.apiBase??``,jl=I.dataset.token??``,Ml=I.dataset.editorLabel??``,Nl=I.dataset.editorTemplate??``,Pl=I.dataset.repoPath??``,Fl=I.dataset.explainPrompt??``,Il=I.dataset.sessionId??``;function L(e){return`${Al}${e}?t=${encodeURIComponent(jl)}`}var Ll=!1,Rl=0,zl=!1;function Bl(e){Rl++;try{e()}finally{Rl--}}var Vl=wr(document.querySelector(`.prb-body`)?.dataset.reviewLayout),Hl=Tr(Vl,e=>{fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>Ll&&Rl===0);function Ul(e){fetch(L(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Wl=ho({endpoint:L,showDiagrams:()=>ru(`diagram`),showMap:()=>ru(`map`),showChangeMap:e=>Gl.show(e)}),Gl=gs({endpoint:L,showView:e=>ru(e)}),Kl=lc({endpoint:L}),ql=null,Jl=`the whole change`;function Yl(e){let t=he(e,Ql),n=F.push(ae(t),t);Xl++,z(t),n&&Zl(t)}var Xl=0;function Zl(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&&x(document,t)}var R=null,Ql=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function z(e){let t=he(e,Ql);if(t!==e){let{kind:e,view:n,focus:r,...i}=f(history.state);F.replace(ae(t),{...i,...t})}let n=!R||!de(R,t);R=t,n&&(t.kind===`view`?au(t.view):lu(t.sectionId)),tu(t.focus??null)}var $l={history:{get state(){return history.state},pushState:(e,t,n)=>{Xl++,F.push(n,f(e))},replaceState:(e,t,n)=>F.replace(n,f(e)),back:()=>{zl=!0,history.back()}},apply:z},B=ge(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Ud(e):Wd(e),onClose:Wd}),eu={post:async e=>{let t=await fetch(L(`/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=>B.close(e),onVerdictClosed:(e,t)=>{let n=e.querySelector(`[data-question-answered], [data-issue-dismissed]`);if(n){if(n.dataset.questionAnswered!==void 0)Uu(e,t||n.dataset.answered===`true`,`questions`),Yu();else{let r=n.dataset.dismissed===`true`&&n.dataset.stale!==`true`;Uu(e,t||r||n.dataset.settled===`true`,`issues`),Zu()}}}};lr(document,eu);function tu(e){ie(document.querySelector(`.prb-body`),document,e),Hl.focus(e),B.closeAll(),e===`buddy`&&cd()}function nu(e){R&&(R.focus===e?re(R,$l):ce(R,e,$l))}function ru(e,t={}){let n=t.keepFocus&&R?.focus?e:oe(e,R?.focus);Yl({kind:`view`,view:e,...n?{focus:n}:{}})}function iu(e){Yl({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function au(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`&&Ul({event:`view_opened`,view:e}),e===`diagram`&&Wl.drawPane(),e===`map`&&Gl.layout(),e===`architecture`&&Kl.show(),ou(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function ou(){Jr(),ql=null,Jl=`the whole change`,uu()}function su(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,Hl.fold(n.id,t))}function cu(){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`)&&su(e,!0)}}function lu(e){au(`guide`),cu(),qr(e);let t=Gr(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);Ul({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),ql=e,Jl=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,uu()}function uu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Jl)}function V(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function du(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function fu(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}=du(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),Ul({event:`file_opened`,fromFinding:i,targeted:r>0}),await mu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var pu=ri();function mu(e,t,n){return pu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${L(`/file`)}${a}`),s=await o.json();return o.ok?()=>hu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${V(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 hu(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=Nl&&Pl?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="${V(t.path)}" data-open-line="${r||t.from}">${V(`Open in ${Ml||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${V(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${V(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${V(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>${V(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">
173
+ </span>`}function Ic(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:Pc(i)}}function Lc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Rc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Pc)}function zc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Pc(t):void 0}function Bc(e,t){return Math.max(e,+!t)+1}var Vc=8;function Hc(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 Uc(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Wc(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 Gc(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Kc(e){if(!e.hasAttribute(`data-expanded`))return;let t=Hc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=Uc({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function qc(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 Jc=!1;function Yc(){Jc||(Jc=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Kc(e)}))}function Xc(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Wc(n):null;t?(e.setAttribute(`data-expanded`,``),Kc(e),Yc()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),qc(e),n&&r&&Gc(n,r);let i=t?Hc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Vc)}var Zc={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},Qc=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],$c=`#tour`,P=16,F=6,el=380,tl=260;function nl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:Qc.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function rl(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,P,i-n-P),left:a((r-t)/2,P,r-t-P)};if(!e)return o;let s=a(e.top,P,i-n-P);if(e.right+P+t<=r-P)return{top:s,left:e.right+P};if(e.left-P-t>=P)return{top:s,left:e.left-P-t};let c=a(e.left,P,r-t-P);return e.bottom+P+n<=i-P?{top:e.bottom+P,left:c}:e.top-P-n>=P?{top:e.top-P-n,left:c}:{top:a(i-n-P,P,i-n-P),left:o.left}}function il(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function al(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function ol(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(al(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(al(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function sl(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function cl(e,t,n){let r=nl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=sl(e,`prb-tour-skip`,`Skip tour`),h=sl(e,`prb-tour-back`,`Back`),g=sl(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},b=!1,x=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?il(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-F,0),t=Math.max(o.left-F,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+F,u)-t}px`,c.style.height=`${Math.min(o.bottom+F,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-F-32,u-o.right-F-32):0;l.style.width=`${f>=tl?Math.min(el,f):Math.min(el,u-32)}px`;let p=l.getBoundingClientRect(),m=rl(o&&{top:o.top-F,left:o.left-F,bottom:o.bottom+F,right:o.right+F},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},ee=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=ol(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:Zc.title,p.replaceChildren(...(i?i.body:Zc.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,x(),g.focus({focusVisible:n})},S=r=>{if(!b){b=!0,y(),t.removeEventListener(`resize`,x),e.removeEventListener(`scroll`,x,!0),e.removeEventListener(`transitionend`,x,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):ee(v+1,e.detail===0)),h.addEventListener(`click`,e=>ee(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,x),e.addEventListener(`scroll`,x,!0),e.addEventListener(`transitionend`,x,!0),s.showModal(),ee(-1,!1),{close:()=>S(`dismissed`)}}var ll={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function ul(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=ll[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=sl(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function dl(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:cl(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(ul(e,r),r):`started`}var fl={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 pl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:fl[t.slice(n+1).toLowerCase()]??null}function ml(e){let t=new Set;for(let n of e){let e=pl(n);e&&t.add(e)}return[...t]}var hl={ruby:()=>C(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>C(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>C(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>C(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>C(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>C(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>C(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>C(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>C(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>C(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>C(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>C(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>C(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>C(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>C(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>C(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>C(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>C(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>C(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>C(()=>import(`./chunk-DswuEJGm.js`),[])},gl=`github-light-default`,_l=null,vl=new Map;function yl(){return _l??=Promise.all([C(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),C(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),C(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(C(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),_l}function bl(e){let t=vl.get(e);return t||(t=yl().then(async t=>t?(await t.loadLanguage(hl[e]),!0):!1).catch(()=>!1),vl.set(e,t)),t.then(e=>e?yl():null)}var xl={async preload(e){await bl(e)},async tokenize(e,t){let n=await bl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:gl}),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 Sl(e,t=xl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Cl=/^#[0-9a-f]{3,8}$/i;function wl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Cl.test(e.color)?`<span style="color:${e.color}">${wc(e.content)}</span>`:wc(e.content)).join(``)}function Tl(e){return e.length>1e3?e.slice(0,Tc):e}function El(e,t,n){if(!e||t===``)return;let r=wl(Tl(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 Dl(e,t,n=xl){let r=pl(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(Tl).join(`
174
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{El(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=>Tl(e.text)).join(`
175
+ `),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;El(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Ol(e,t=xl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in hl)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=wl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var I=u({ownsRestore:!0}),L=document.body,kl=L.dataset.apiBase??``,Al=L.dataset.token??``,jl=L.dataset.editorLabel??``,Ml=L.dataset.editorTemplate??``,Nl=L.dataset.repoPath??``,Pl=L.dataset.explainPrompt??``,Fl=L.dataset.sessionId??``;function R(e){return`${kl}${e}?t=${encodeURIComponent(Al)}`}var Il=!1,Ll=0,Rl=!1;function zl(e){Ll++;try{e()}finally{Ll--}}var Bl=Tr(document.querySelector(`.prb-body`)?.dataset.reviewLayout),Vl=Er(Bl,e=>{fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>Il&&Ll===0);function Hl(e){fetch(R(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Ul=ho({endpoint:R,showDiagrams:()=>ru(`diagram`),showMap:()=>ru(`map`),showChangeMap:e=>Wl.show(e)}),Wl=gs({endpoint:R,showView:e=>ru(e)}),Gl=cc({endpoint:R}),Kl=null,ql=`the whole change`;function Jl(e){let t=ge(e,Zl),n=I.push(oe(t),t);Yl++,Ql(t),n&&Xl(t)}var Yl=0;function Xl(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&&a(document,t)}var z=null,Zl=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Ql(e){let t=ge(e,Zl);if(t!==e){let{kind:e,view:n,focus:r,...i}=s(history.state);I.replace(oe(t),{...i,...t})}let n=!z||!fe(z,t);z=t,n&&(t.kind===`view`?au(t.view):lu(t.sectionId)),tu(t.focus??null)}var $l={history:{get state(){return history.state},pushState:(e,t,n)=>{Yl++,I.push(n,s(e))},replaceState:(e,t,n)=>I.replace(n,s(e)),back:()=>{Rl=!0,history.back()}},apply:Ql},B=_e(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Ud(e):Wd(e),onClose:Wd}),eu={post:async e=>{let t=await fetch(R(`/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=>B.close(e),onVerdictClosed:(e,t)=>{let n=e.querySelector(`[data-question-answered], [data-issue-dismissed]`);if(n){if(n.dataset.questionAnswered!==void 0)Uu(e,t||n.dataset.answered===`true`,`questions`),Yu();else{let r=n.dataset.dismissed===`true`&&n.dataset.stale!==`true`;Uu(e,t||r||n.dataset.settled===`true`,`issues`),Zu()}}}};ur(document,eu);function tu(e){ae(document.querySelector(`.prb-body`),document,e),Vl.focus(e),B.closeAll(),e===`buddy`&&cd()}function nu(e){z&&(z.focus===e?ie(z,$l):le(z,e,$l))}function ru(e,t={}){let n=t.keepFocus&&z?.focus?e:se(e,z?.focus);Jl({kind:`view`,view:e,...n?{focus:n}:{}})}function iu(e){Jl({kind:`section`,sectionId:e,...z?.focus===`guide`?{focus:`guide`}:{}})}function au(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`&&Hl({event:`view_opened`,view:e}),e===`diagram`&&Ul.drawPane(),e===`map`&&Wl.layout(),e===`architecture`&&Gl.show(),ou(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function ou(){Yr(),Kl=null,ql=`the whole change`,uu()}function su(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,Vl.fold(n.id,t))}function cu(){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`)&&su(e,!0)}}function lu(e){au(`guide`),cu(),Jr(e);let t=Kr(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);Hl({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),Kl=e,ql=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,uu()}function uu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=ql)}function V(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function du(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function fu(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}=du(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),Hl({event:`file_opened`,fromFinding:i,targeted:r>0}),await mu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var pu=ii();function mu(e,t,n){return pu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${R(`/file`)}${a}`),s=await o.json();return o.ok?()=>hu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${V(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 hu(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=kc(t,r),s=Ml&&Nl?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="${V(t.path)}" data-open-line="${r||t.from}">${V(`Open in ${jl||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${V(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${V(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${V(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Bc(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>${V(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Fc(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">
176
176
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
177
177
  ${c}
178
178
  ${s}
@@ -180,7 +180,7 @@ import{K as e,V as t,_t as n,a as r,at as i,c as a,ct as o,dt as s,et as c,ft as
180
180
  </div>
181
181
  ${f}
182
182
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
183
- ${l}`,Mc(e,t),qc(e),Jc(e),(n.focus?Rc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Ol(e,t)}async function gu(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 mu(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 _u(e,t,n){let r=`${Pl.replace(/\/$/,``)}/${e}`,i=Nl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Ul({event:`editor_opened`,fromFinding:n}),window.location.href=i}var H=document.querySelector(`[data-ask-log]`);H&&H.querySelector(`.prb-msg`)&&H.scrollTo({top:H.scrollHeight});var vu=document.querySelector(`[data-ask-form]`),U=vu?.querySelector(`textarea`);function yu(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=tt(t)+kt(t)):n.textContent=t,H?.appendChild(n),H?.scrollTo({top:H.scrollHeight}),n}function bu(e){if(!e||!H)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),H.appendChild(t.content)}async function xu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await cr(t,eu)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Tu(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&xu(r)});function Su(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight}),e}var W=null,Cu=!!H?.querySelector(`[data-ask-pending]`);function wu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight})}async function Tu(e,t=`free_text`,n={}){let r=e.trim();if(!r||W||Cu)return;document.querySelector(`.prb-ask-empty`)?.remove(),yu(`user`,r);let i=Su();W=new AbortController,Du(!0);try{let e=await fetch(L(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:ql,source:t,...n}),signal:W.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Eu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){wu();return}if(!e.ok||!a?.answer){yu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}yu(`assistant`,a.answer),typeof a.askedAt==`number`&&bu(fr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&Zn(document,a.explanation),a.reassessment?.card&&tr(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])tr(document,e,eu.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(wu(),Eu(r,n.continuesExplanation)):(yu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Eu(r,n.continuesExplanation))}finally{W=null,Du(!1)}}function Eu(e,t){!U||U.value||(U.value=e,yp?.save(),t&&(G=G?.continues&&e.includes(G.text)?G:{text:e,source:`finding`,continues:t},yp?.stage(G)))}function Du(e){let t=vu?.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&&B.closeAll(),e||U?.focus()}var Ou=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function ku(){let e=vu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(L(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{W?.abort()})}vu?.addEventListener(`submit`,e=>{if(e.preventDefault(),W||Cu)return ku();let t=U?.value??``;U&&(U.value=``),yp?.clear();let n=$n(G,t);Tu(t,Au(t),n?{continuesExplanation:n}:{})}),Cu&&Du(!0);var G=null;function Au(e){return G&&e.includes(G.text)?G.source:`free_text`}U?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),W||Cu)return;vu?.requestSubmit()}}),U?.addEventListener(`input`,()=>{U&&(U.style.height=`auto`,U.style.height=`${Math.min(U.scrollHeight,140)}px`)});async function ju(e){try{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function Mu(e){return ju({answeredQuestionIds:e})}async function Nu(){try{let e=await fetch(L(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function Pu(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(Iu(e,n),jr(e))}}function Fu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Iu(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&&Uu(n,t||e.dataset.verdictClosed===`true`,`questions`),Yu()}function Lu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Il})).filter(e=>e.id)}function Ru(e){return ju({dismissedIssues:e})}function zu(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;Uu(t,s,`issues`),Zu()}}function Bu(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Il: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(Vu()),Uu(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),Zu())}function Vu(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Ln,e.textContent=`Dismissed by you`,e}var Hu=new WeakMap;function Uu(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}),qu(n).append(e),t&&Ku(t)}else Wu(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Ju(n)}}function Wu(e,t){let n=Hu.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=Hu.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=Gu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Gu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Ku(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function qu(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 Ju(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})`:Ur(Xu()),nr(document)}function Yu(){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`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=Wr(e.length,t)),Qu(`questions`,e.length,t,`question`,`answered`)}function Xu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function Zu(){let e=Xu();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=Hr(e.total,e.open,Or(e))),Qu(`issues`,e.total,e.open,`issue`,Or(e))}function Qu(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}`))}var $u=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:zu(e)}]));function ed(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of $u){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&Bu(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??Il)!==r)&&(Bu(e,!0),e.dataset.dismissedIn=r)}}var td=e=>void r(b(),{kind:`failed`,text:e}),nd=Sc({current:Fu,send:Mu,read:async()=>(await Nu())?.answered??null,paint:Pu,fail:td},Fu()),rd=Sc({current:Lu,send:Ru,read:async()=>(await Nu())?.dismissed??null,paint:ed,fail:td},Lu());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){su(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!s(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){ru(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Fr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Br(o);return}let c=t.closest(`[data-overview-nav]`);if(c?.dataset.overviewNav){ru(c.dataset.overviewNav===`guide`?`guide`:c.dataset.overviewNav);return}let l=t.closest(`[data-goto-section]`);if(l?.dataset.gotoSection){iu(l.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){_u(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&&gu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=Nc(m);e&&kl(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]`);mu(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){nu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){jd(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){fu(v);return}let y=Kr(t);if(y){iu(y);return}let b=t.closest(`[data-question-answered]`);if(b?.dataset.questionAnswered){Iu(b,b.dataset.answered!==`true`),jr(b);let e=Fu();nd.changed(),Ul({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let x=t.closest(`[data-issue-dismissed]`);if(x?.dataset.issueDismissed){Bu(x,x.dataset.stale===`true`||x.dataset.dismissed!==`true`);let e=Lu();rd.changed(),Ul({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ee=t.closest(`[data-suggestion]`);if(ee){Tu(ee.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){cd(),Tu(Fl,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){Md(S.dataset.promptUse);return}let te=t.closest(`[data-prompt-edit]`);if(te?.dataset.promptEdit){nf(te.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){nf(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(re(R,$l),od(e!==`buddy`)):od(!ad())}});var K=document.querySelector(`.prb-body`),id=document.querySelector(`.prb-ask`);function ad(){return!!id&&getComputedStyle(id).display!==`none`}function od(e){K&&(K.dataset.ask=e?`open`:`closed`),sd(e),Hl.ask(e)}function sd(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function cd(){R?.focus&&R.focus!==`buddy`&&re(R,$l),od(!0)}function ld(){sd(ad())}window.addEventListener(`resize`,ld),ee(L(`/restart`));var ud=document.querySelector(`[data-file-filter]`),dd=document.querySelector(`[data-file-count]`),fd=document.querySelector(`[data-file-none]`);function pd(){let e=(ud?.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}`}fd&&(fd.hidden=n>0),dd&&(dd.textContent=e?`${t} of ${md} file${md===1?``:`s`}`:`${md} file${md===1?``:`s`}`)}var md=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;ud?.addEventListener(`input`,pd),ud?.addEventListener(`keydown`,e=>{e.key===`Escape`&&ud.value!==``&&(e.preventDefault(),ud.value=``,pd())}),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(),fu(n))});var hd=320,gd=()=>Math.round(window.innerWidth/2),_d=e=>Math.round(Math.min(gd(),Math.max(hd,e)));function vd(e){K&&(e===null?K.style.removeProperty(`--ask-width`):K.style.setProperty(`--ask-width`,`${e}px`))}function yd(){return id?Math.round(id.getBoundingClientRect().width):hd}function bd(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var q=document.querySelector(`[data-ask-resize]`);q?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!K||!id)return;e.preventDefault(),q.setPointerCapture(e.pointerId),K.dataset.resizing=`true`;let t=e.clientX,n=yd(),r=e=>{vd(_d(n+(t-e.clientX)))},i=()=>{q.removeEventListener(`pointermove`,r),q.removeEventListener(`pointerup`,i),q.removeEventListener(`pointercancel`,i),delete K.dataset.resizing,bd(yd())};q.addEventListener(`pointermove`,r),q.addEventListener(`pointerup`,i),q.addEventListener(`pointercancel`,i)}),q?.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=_d(yd()+n);vd(r),bd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),vd(null),bd(null))}),q?.addEventListener(`dblclick`,()=>{vd(null),bd(null)}),window.addEventListener(`resize`,()=>{ad()&&K?.style.getPropertyValue(`--ask-width`)&&vd(_d(yd()))});var xd=3e4,Sd=document.visibilityState===`visible`?Date.now():null,Cd=0;function wd(){Sd!==null&&(Cd+=Date.now()-Sd,Sd=Date.now())}function Td(){wd();let e=Math.round(Cd/1e3);return Cd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Sd=Date.now():(wd(),Sd=null)}),setInterval(()=>{let e=Td();e>0&&Ul({event:`workspace_heartbeat`,visibleSeconds:e})},xd),window.addEventListener(`pagehide`,()=>{let e=L(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Td()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Ed=document.querySelector(`[data-prompt-bank]`),Dd=document.querySelector(`[data-prompt-list]`),J=Od();function Od(){try{let e=JSON.parse(Ed?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function kd(){if(!Dd)return;Dd.innerHTML=J.map(e=>`<span class="prb-bank-item">
183
+ ${l}`,jc(e,t),Kc(e),qc(e),(n.focus?Lc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Dl(e,t)}async function gu(e,t,n){let r=Ic(t,n);if(!r)return;let i=Lc(e,r.anchor);if(i)t.outerHTML=Fc(Rc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await mu(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 _u(e,t,n){let r=`${Nl.replace(/\/$/,``)}/${e}`,i=Ml.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Hl({event:`editor_opened`,fromFinding:n}),window.location.href=i}var H=document.querySelector(`[data-ask-log]`);H&&H.querySelector(`.prb-msg`)&&H.scrollTo({top:H.scrollHeight});var vu=document.querySelector(`[data-ask-form]`),U=vu?.querySelector(`textarea`);function yu(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=nt(t)+At(t)):n.textContent=t,H?.appendChild(n),H?.scrollTo({top:H.scrollHeight}),n}function bu(e){if(!e||!H)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),H.appendChild(t.content)}async function xu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await lr(t,eu)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Tu(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&xu(r)});function Su(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight}),e}var W=null,Cu=!!H?.querySelector(`[data-ask-pending]`);function wu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight})}async function Tu(e,t=`free_text`,n={}){let r=e.trim();if(!r||W||Cu)return;document.querySelector(`.prb-ask-empty`)?.remove(),yu(`user`,r);let i=Su();W=new AbortController,Du(!0);try{let e=await fetch(R(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:Kl,source:t,...n}),signal:W.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Eu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){wu();return}if(!e.ok||!a?.answer){yu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}yu(`assistant`,a.answer),typeof a.askedAt==`number`&&bu(pr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&Qn(document,a.explanation),a.reassessment?.card&&nr(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])nr(document,e,eu.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(wu(),Eu(r,n.continuesExplanation)):(yu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Eu(r,n.continuesExplanation))}finally{W=null,Du(!1)}}function Eu(e,t){!U||U.value||(U.value=e,yp?.save(),t&&(G=G?.continues&&e.includes(G.text)?G:{text:e,source:`finding`,continues:t},yp?.stage(G)))}function Du(e){let t=vu?.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&&B.closeAll(),e||U?.focus()}var Ou=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function ku(){let e=vu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(R(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{W?.abort()})}vu?.addEventListener(`submit`,e=>{if(e.preventDefault(),W||Cu)return ku();let t=U?.value??``;U&&(U.value=``),yp?.clear();let n=er(G,t);Tu(t,Au(t),n?{continuesExplanation:n}:{})}),Cu&&Du(!0);var G=null;function Au(e){return G&&e.includes(G.text)?G.source:`free_text`}U?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),W||Cu)return;vu?.requestSubmit()}}),U?.addEventListener(`input`,()=>{U&&(U.style.height=`auto`,U.style.height=`${Math.min(U.scrollHeight,140)}px`)});async function ju(e){try{let t=await fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function Mu(e){return ju({answeredQuestionIds:e})}async function Nu(){try{let e=await fetch(R(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function Pu(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(Iu(e,n),Mr(e))}}function Fu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Iu(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&&Uu(n,t||e.dataset.verdictClosed===`true`,`questions`),Yu()}function Lu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Fl})).filter(e=>e.id)}function Ru(e){return ju({dismissedIssues:e})}function zu(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;Uu(t,s,`issues`),Zu()}}function Bu(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Fl: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(Vu()),Uu(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),Zu())}function Vu(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Rn,e.textContent=`Dismissed by you`,e}var Hu=new WeakMap;function Uu(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}),qu(n).append(e),t&&Ku(t)}else Wu(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Ju(n)}}function Wu(e,t){let n=Hu.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=Hu.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=Gu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Gu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Ku(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function qu(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 Ju(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(Xu()),rr(document)}function Yu(){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`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=Gr(e.length,t)),Qu(`questions`,e.length,t,`question`,`answered`)}function Xu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function Zu(){let e=Xu();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))),Qu(`issues`,e.total,e.open,`issue`,kr(e))}function Qu(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}`))}var $u=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:zu(e)}]));function ed(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of $u){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&Bu(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??Fl)!==r)&&(Bu(e,!0),e.dataset.dismissedIn=r)}}var td=e=>void n(y(),{kind:`failed`,text:e}),nd=xc({current:Fu,send:Mu,read:async()=>(await Nu())?.answered??null,paint:Pu,fail:td},Fu()),rd=xc({current:Lu,send:Ru,read:async()=>(await Nu())?.dismissed??null,paint:ed,fail:td},Lu());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){su(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!o(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){ru(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Ir(a);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){ru(c.dataset.overviewNav===`guide`?`guide`:c.dataset.overviewNav);return}let l=t.closest(`[data-goto-section]`);if(l?.dataset.gotoSection){iu(l.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){_u(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){Ac(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&Xc(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&&gu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=Mc(m);e&&Ol(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]`);mu(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:zc(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){nu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){jd(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){fu(v);return}let y=qr(t);if(y){iu(y);return}let b=t.closest(`[data-question-answered]`);if(b?.dataset.questionAnswered){Iu(b,b.dataset.answered!==`true`),Mr(b);let e=Fu();nd.changed(),Hl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let x=t.closest(`[data-issue-dismissed]`);if(x?.dataset.issueDismissed){Bu(x,x.dataset.stale===`true`||x.dataset.dismissed!==`true`);let e=Lu();rd.changed(),Hl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ee=t.closest(`[data-suggestion]`);if(ee){Tu(ee.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){cd(),Tu(Pl,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){Md(S.dataset.promptUse);return}let te=t.closest(`[data-prompt-edit]`);if(te?.dataset.promptEdit){nf(te.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){nf(``);return}if(t.closest(`[data-ask-toggle]`)){let e=z?.focus;e?(ie(z,$l),od(e!==`buddy`)):od(!ad())}});var K=document.querySelector(`.prb-body`),id=document.querySelector(`.prb-ask`);function ad(){return!!id&&getComputedStyle(id).display!==`none`}function od(e){K&&(K.dataset.ask=e?`open`:`closed`),sd(e),Vl.ask(e)}function sd(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function cd(){z?.focus&&z.focus!==`buddy`&&ie(z,$l),od(!0)}function ld(){sd(ad())}window.addEventListener(`resize`,ld),x(R(`/restart`));var ud=document.querySelector(`[data-file-filter]`),dd=document.querySelector(`[data-file-count]`),fd=document.querySelector(`[data-file-none]`);function pd(){let e=(ud?.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}`}fd&&(fd.hidden=n>0),dd&&(dd.textContent=e?`${t} of ${md} file${md===1?``:`s`}`:`${md} file${md===1?``:`s`}`)}var md=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;ud?.addEventListener(`input`,pd),ud?.addEventListener(`keydown`,e=>{e.key===`Escape`&&ud.value!==``&&(e.preventDefault(),ud.value=``,pd())}),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(),fu(n))});var hd=320,gd=()=>Math.round(window.innerWidth/2),_d=e=>Math.round(Math.min(gd(),Math.max(hd,e)));function vd(e){K&&(e===null?K.style.removeProperty(`--ask-width`):K.style.setProperty(`--ask-width`,`${e}px`))}function yd(){return id?Math.round(id.getBoundingClientRect().width):hd}function bd(e){fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var q=document.querySelector(`[data-ask-resize]`);q?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!K||!id)return;e.preventDefault(),q.setPointerCapture(e.pointerId),K.dataset.resizing=`true`;let t=e.clientX,n=yd(),r=e=>{vd(_d(n+(t-e.clientX)))},i=()=>{q.removeEventListener(`pointermove`,r),q.removeEventListener(`pointerup`,i),q.removeEventListener(`pointercancel`,i),delete K.dataset.resizing,bd(yd())};q.addEventListener(`pointermove`,r),q.addEventListener(`pointerup`,i),q.addEventListener(`pointercancel`,i)}),q?.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=_d(yd()+n);vd(r),bd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),vd(null),bd(null))}),q?.addEventListener(`dblclick`,()=>{vd(null),bd(null)}),window.addEventListener(`resize`,()=>{ad()&&K?.style.getPropertyValue(`--ask-width`)&&vd(_d(yd()))});var xd=3e4,Sd=document.visibilityState===`visible`?Date.now():null,Cd=0;function wd(){Sd!==null&&(Cd+=Date.now()-Sd,Sd=Date.now())}function Td(){wd();let e=Math.round(Cd/1e3);return Cd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Sd=Date.now():(wd(),Sd=null)}),setInterval(()=>{let e=Td();e>0&&Hl({event:`workspace_heartbeat`,visibleSeconds:e})},xd),window.addEventListener(`pagehide`,()=>{let e=R(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Td()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Ed=document.querySelector(`[data-prompt-bank]`),Dd=document.querySelector(`[data-prompt-list]`),J=Od();function Od(){try{let e=JSON.parse(Ed?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function kd(){if(!Dd)return;Dd.innerHTML=J.map(e=>`<span class="prb-bank-item">
184
184
  <button type="button" class="prb-bank-use" data-prompt-use="${V(e.id)}" title="${V(e.prompt)}">${V(e.name)}</button>
185
185
  <button type="button" class="prb-bank-edit" data-prompt-edit="${V(e.id)}" aria-label="Edit ${V(e.name)}">&#9998;</button>
186
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(J.length)),Bd()}async function Ad(e){let t=null;try{let n=await fetch(L(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);J=Array.isArray(r?.prompts)?r.prompts:J,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return kd(),t}function jd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Ed?.toggleAttribute(`data-collapsed`,e),Dd&&(Dd.hidden=e),fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Md(e){let t=J.find(t=>t.id===e);!t||!U||(U.value=Yr(U.value,t.prompt),cd(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}var Nd=document.querySelector(`.prb-doc`),Pd=null,Fd=null;function Id(){H&&(Fd?.(),Fd=kn(H,{layout:`flat`,actions:Mn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Vd(e,`selection`,t)}))}var Ld=`reassess`;function Rd(e){let t=zd();if(!e)return t;let n={id:Ld,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function zd(){return[...An.map(e=>({id:e.id,label:e.label})),...J.map(e=>({id:gr(e.id),label:e.name,section:hr}))]}function Bd(){Nd&&(Pd?.(),Pd=kn(Nd,{triggerLabel:`Ask Buddy AI`,actions:zd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Vd(e,`selection`,t)}))}function Vd(e,t,n,r){Dr(e,{context:t,text:n},{savedPrompt:e=>J.find(t=>t.id===e)?.prompt??null,stage:e=>Hd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{cd(),Tu(t,`finding`,Jn(e,r?.ref))}})}function Hd(e,t,n){U&&(G={text:e,source:t,...n?{continues:n}:{}},yp?.stage(G),U.value=Yr(U.value,e),cd(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}function Ud(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=yn(Rd(Xn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(W||Cu)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Wd(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=In(n),a=Xn(n);if(B.close(n),r===Ld){i&&a&&Gd(a,i);return}i&&Vd(r,`finding`,i,a?{ref:a}:void 0)});function Gd(e,t){if(W||Cu)return;let n=e.kind===`issue`?`severity`:`importance`;cd(),Tu(`${Pn(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?ur(t):null;n&&Hd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Yn(t),r=In(t);n&&r&&Vd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Bd(),Id();var Y=Ra({root:document,showView:e=>ru(e)}),Kd=qa({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>B.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>Y.state().selecting,flip:e=>void Y.flip(e)});Ht(document),nn(document);var qd=document.querySelector(`[data-prompt-dialog]`),Jd=document.querySelector(`[data-prompt-name]`),Yd=document.querySelector(`[data-prompt-text]`),Xd=document.querySelector(`[data-prompt-delete]`),Zd=document.getElementById(`prb-prompt-title`),Qd=document.querySelector(`[data-prompt-error]`),$d=document.querySelector(`[data-prompt-save]`);function ef(e){Qd&&(Qd.textContent=e??``,Qd.hidden=e===null)}var tf=``;function nf(e){let t=J.find(t=>t.id===e);tf=t?.id??``,Zd&&(Zd.textContent=t?`Edit prompt`:`Save a prompt`),Jd&&(Jd.value=t?.name??``),Yd&&(Yd.value=t?.prompt??``),Xd&&(Xd.hidden=!t),ef(null),qd?.showModal(),Jd?.focus()}async function rf(){let e=Jd?.value.trim()??``,t=Yd?.value.trim()??``;if(!e||!t){(e?Yd:Jd)?.focus();return}await of(tf?J.map(n=>n.id===tf?{...n,name:e,prompt:t}:n):[...J,{id:crypto.randomUUID(),name:e,prompt:t}])}async function af(){tf&&await of(J.filter(e=>e.id!==tf))}async function of(e){ef(null);let t=[$d,Xd].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await Ad(e);for(let e of t)e.disabled=!1;if(n)return ef(n);qd?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>qd?.close()),Xd?.addEventListener(`click`,()=>void af()),$d?.addEventListener(`click`,()=>void rf());var sf=document.querySelector(`[data-fresh-region]`),cf=document.querySelector(`[data-fresh-status]`),lf=document.querySelector(`[data-fresh-check]`),X=bf(sf?.dataset.report),uf=`prb-fresh-reopen`,df=gf(),ff=sf?.dataset.dismissedSha,pf=hf(sf?.dataset.availability),Z=mf(sf?.dataset.remote);function mf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function hf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function gf(){try{return sessionStorage.getItem(uf)!==null&&(sessionStorage.removeItem(uf),!0)}catch{return!1}}df&&Lf(),lf?.addEventListener(`click`,()=>void wf());var _f=document.querySelector(`[data-fetch-remote]`);_f&&(fetch(L(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(_f.hidden=!1)}).catch(()=>{}),_f.addEventListener(`click`,()=>void vf(_f)));async function vf(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(L(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};r(b(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:se(n)}),n.fetched>0&&await wf()}sf?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return df=!1,Lf();let n=t.closest(`[data-fresh-dismiss]`);n&&(ff=n.dataset.freshDismiss||void 0,df=!1,Lf(),yf())});function yf(){fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:ff??null})}).catch(()=>{})}function bf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var xf=Ca(),Sf=!1,Cf=null;async function wf(){if(Sf)return;Sf=!0,Af(!0),Cf&&await Cf;let e=jf(X,Z),t=await Ef(!1);Af(!1),t&&If(),Sf=!1,t&&(X?.code.state===`changed`||Z!==null)&&ff!==void 0&&(ff=void 0,yf()),Lf(),Tf(t?jf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Tf(e){cf&&(cf.textContent=e,window.setTimeout(Rf,2600))}async function Ef(e){let t=xf.snapshot();try{let n=await(await fetch(`${L(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,pf=n.availability??null,Z=n.remote??null,Nf=n.kiss??null,n.kissDismissedSha!==void 0&&(Pf=n.kissDismissedSha??void 0),n.prState!==void 0&&kf(n.prState);let r=Sa(n.standing);return r&&xf.current(t)&&ma(document,r),!0}catch{return!1}}async function Df(){if(Sf||Cf||!sf)return;let e=jf(X,Z),t=JSON.stringify(Nf);Cf=Ef(!0);let n=await Cf;Cf=null,Of=Date.now(),n&&(jf(X,Z)!==e&&Lf(),JSON.stringify(Nf)!==t&&If())}var Of=Date.now();function kf(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=pa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Af(e){lf&&(lf.disabled=e),cf&&e&&(cf.textContent=`Checking…`,cf.dataset.state=`checking`)}function jf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Mf=document.querySelector(`[data-kiss-fresh-region]`),Nf=Ff(Mf?.dataset.freshness),Pf=Mf?.dataset.dismissedSha;function Ff(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function If(){oa(Nf?.state===`changed`),Mf&&(Mf.innerHTML=Qi(Mf.dataset.reviewedSha??``,Nf,{dismissedSha:Pf,actions:jl!==``}))}Mf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Pf=t.dataset.kissFreshnessDismiss||void 0,If(),fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Pf??null})}).catch(()=>{}))});function Lf(){sf&&(sf.innerHTML=wi(X,{dismissedSha:ff,open:df,actions:jl!==``,availability:pf,remote:Z}),Rf())}function Rf(){if(cf&&(X||Z)){let{label:e,state:t}=Si(X,Z);cf.textContent=e,cf.dataset.state=t,Ii(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return zf(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(L(`/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 Vf(i);if(t.closest(`[data-review-update]`))return void Gf();let a=t.closest(`[data-update-cancel]`);if(a)return void qf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void qf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function zf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Bf(e,`Copied`),()=>Bf(e,`Select it`))}function Bf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Vf(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=Hf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Xf}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=Hf(e)?null:Zf(e);try{await fetch(L(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}Hf(e)&&Uf(),window.location.reload()}function Hf(e){return e.closest(`.prb-fresh-notes p`)}function Uf(){try{sessionStorage.setItem(uf,`1`)}catch{}}var Wf=!1;async function Gf(){if(Wf)return;Wf=!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(L(`/job`))).json();e.update&&e.update.phase!==`none`&&!Bi(e.update.phase)&&n()}catch{}},500);try{await fetch(L(`/update`),{method:`POST`})}catch{}n()}var Kf={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 qf(e,t){let n=Kf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(L(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,Yf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Yf(e,n.tooLate),await ao({look:async()=>{let e=await fetch(L(`/job`),{signal:AbortSignal.timeout(Jf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var Jf=3e3;function Yf(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 Xf=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Zf(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=Xf,t.appendChild(n),n}var Qf=$a(document),$f=null,ep=Date.now();function tp(){$f===null&&($f=window.setTimeout(()=>{$f=null,np()},_e(Date.now()-ep)))}async function np(){try{let e=await(await fetch(L(`/job`))).json();if(Cu&&!e.ask||ip&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Qf){let r=t[e];if(r){if(eo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?no(n,r.phase,r.progress):rp(n,r.progress)}}}catch{}tp()}function rp(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 ip=document.querySelector(`[data-diagram-running]`)!==null;(Qf.size>0||Cu||ip)&&(ep=Date.now(),tp()),document.querySelector(`[data-started-at]`)&&io(document);function ap(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function op(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,op(t);let r=e=>{t.disabled=!1,t.textContent=n,ap(t,e)};fetch(L(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(L(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=kr,Bf(t,`Could not start. Try again`,2500)}))});var sp={send:async e=>{let t=await fetch(L(`/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)=>{Qu(`kiss`,e,t,`recommendation`,`decided`),Qu(`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){ta(r,ea(n),sp);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(L(`/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 cp=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=te(e.state)??pe(window.location.hash)??{kind:`view`,view:cp},n=!R||!de(R,t),r=zl;zl=!1,r?z(t):Bl(()=>z(t)),n&&Zl(t),vp()});var lp=pe(window.location.hash),up=window.location.hash===el,dp=F.current().ui===null,fp=window.matchMedia(`(max-width: 860px)`).matches,pp=dp&&!lp?.focus?Cr(Vl.expanded,he(lp??{kind:`view`,view:cp},Ql),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,fp):null;if(dp&&K?.dataset.ask===`open`&&fp&&delete K.dataset.ask,pp){let e=lp??{kind:`view`,view:cp};lp||(R=e);let t={...e,focus:pp};F.replace(ae(t),t),z(t)}else lp?z(lp):(R={kind:`view`,view:cp},F.replace(``,R));Ll=!0;var mp={enterTour(){let e=R,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||Bl(()=>z({kind:`view`,view:`overview`})),()=>{!t&&e&&Bl(()=>z(e))}},save(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};up?fl(document,window,mp):I.dataset.guidedTour===`offer`&&ll(document,window,{mode:`first`,host:mp});var hp={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:H,panes:K};F.setCapturer(()=>li(hp));async function gp(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=Zr(e),s=o?pu.pending(o):void 0;if(!o||!ni(s?s.request:ei(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}=du(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await mu(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&&ti(o,t.top,t.offset))}function _p(e){Zr(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function vp(){let e=++Xl,t=()=>Xl===e;await ui(hp,F.current().ui,{setFold:(e,t)=>Bl(()=>su(e,t)),setAsk:e=>Bl(()=>od(e)),clearAsk:()=>{K&&delete K.dataset.ask,sd(ad())},openPanel:(e,n)=>gp(e,n,t),closePanel:_p,stillCurrent:t})}vp();var yp=U?_i(U,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;G=yp?.restoredStage??null,ld(),uu();var bp=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=>{bp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(bp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Ta({root:document,post:(e,t)=>fetch(L(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:xf,checkForUpdates:()=>wf()});function xp(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&B.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 Sp(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 B.closeAll();xp(n.error)}}function Cp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function wp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&B.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 t=Q.querySelector(`[data-confirm-delete]`),n=()=>Wd(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),me(a,a.dataset.copyId);return}if(t?.closest(`[data-tour-replay]`)){e.stopPropagation(),B.closeAll(),fl(document,window,mp);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){B.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Sp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Sp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Sp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),wp();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async t=>{let n=t.getAttribute(`aria-pressed`)!==`true`;t.disabled=!0;let r=null;try{let e=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(t.disabled=!1,r===null){t.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{t.textContent=e(t.getAttribute(`aria-pressed`)===`true`)},1600);return}t.setAttribute(`aria-pressed`,String(r)),t.textContent=e(r)},i=async()=>{t&&(t.disabled=!0,t.textContent=`Deleting`);let{error:e}=await $.deleteReview();if(e===null)return void window.location.replace(`/`);t&&(t.disabled=!1,t.textContent=`Delete`),n(),xp(e)}}function Tp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>ru(e,{keepFocus:!0})}}function Ep(){if(!R)return null;let e=R.focus??(R.kind===`section`?`guide`:R.view);return le.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Dp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}g(`review`,{...Kd.commands,...Wa(Y,document),"review.section.review":{available:()=>Ya(document)!==null,run:()=>{let e=Ya(document);e&&ru(e,{keepFocus:!0})}},"review.section.kiss":Tp(`kiss`),"review.section.issues":Tp(`issues`),"review.section.diagrams":Tp(`map`),"review.section.questions":Tp(`questions`),"review.section.files":Tp(`files`),"review.buddy.open":{available:()=>id!==null,run:()=>{R?.focus?ce(R,`buddy`,$l):od(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>id!==null&&U!==null,panel:ue({prompts:()=>J,choose:Md})},"review.focus.toggle":{available:()=>Ep()!==null,run:()=>{let e=Ep();e&&nu(e)}},"review.leave":{available:e=>!!(e&&fe(e,document,e.target===U||Y.state().selecting||!!R?.focus)),run:e=>{U&&e?.target===U?U.blur():Y.state().selecting?Y.exit():R?.focus&&re(R,$l)}},"review.feedback.toggle":{available:()=>Y.state().selecting||Dp(),label:()=>Y.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>Y.state().selecting?Y.exit():Y.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Sp(()=>$.setComplete(!0),Cp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Sp(()=>$.setLifecycle(`waiting`),Cp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Sp(()=>$.setLifecycle(`done`),Cp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Sp(()=>$.toggleQueued(),Cp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Ci(X,{actions:jl!==``&&!Qf.has(`update`)&&!Wf,remote:Z}),run:()=>void Gf()},"review.delete":{available:()=>$.offer().delete,run:()=>wp({focusCancel:!0})}},{onOpen:()=>B.closeAll()}),m(),jl&&wc({markSeen:()=>fetch(L(`/seen`),{method:`POST`}),askUnread:()=>fetch(L(`/unread`))}),setTimeout(()=>{Cl(hl([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),n(window,()=>window.location.reload());var Op=15e3,kp=6e4;function Ap(){return jl!==``&&document.visibilityState===`visible`&&!Qf.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Ap()&&Date.now()-Of>=Op&&Df()}),window.setInterval(()=>{Ap()&&Df()},kp);export{$s as n,Qt as r,nc as t};
186
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(J.length)),Bd()}async function Ad(e){let t=null;try{let n=await fetch(R(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);J=Array.isArray(r?.prompts)?r.prompts:J,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return kd(),t}function jd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Ed?.toggleAttribute(`data-collapsed`,e),Dd&&(Dd.hidden=e),fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Md(e){let t=J.find(t=>t.id===e);!t||!U||(U.value=Xr(U.value,t.prompt),cd(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}var Nd=document.querySelector(`.prb-doc`),Pd=null,Fd=null;function Id(){H&&(Fd?.(),Fd=An(H,{layout:`flat`,actions:Nn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Vd(e,`selection`,t)}))}var Ld=`reassess`;function Rd(e){let t=zd();if(!e)return t;let n={id:Ld,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function zd(){return[...jn.map(e=>({id:e.id,label:e.label})),...J.map(e=>({id:_r(e.id),label:e.name,section:gr}))]}function Bd(){Nd&&(Pd?.(),Pd=An(Nd,{triggerLabel:`Ask Buddy AI`,actions:zd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Vd(e,`selection`,t)}))}function Vd(e,t,n,r){Or(e,{context:t,text:n},{savedPrompt:e=>J.find(t=>t.id===e)?.prompt??null,stage:e=>Hd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{cd(),Tu(t,`finding`,Yn(e,r?.ref))}})}function Hd(e,t,n){U&&(G={text:e,source:t,...n?{continues:n}:{}},yp?.stage(G),U.value=Xr(U.value,e),cd(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}function Ud(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=bn(Rd(Zn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(W||Cu)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Wd(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=Ln(n),a=Zn(n);if(B.close(n),r===Ld){i&&a&&Gd(a,i);return}i&&Vd(r,`finding`,i,a?{ref:a}:void 0)});function Gd(e,t){if(W||Cu)return;let n=e.kind===`issue`?`severity`:`importance`;cd(),Tu(`${Fn(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?dr(t):null;n&&Hd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Xn(t),r=Ln(t);n&&r&&Vd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Bd(),Id();var Y=za({root:document,showView:e=>ru(e)}),Kd=Ja({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>B.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>Y.state().selecting,flip:e=>void Y.flip(e)});Ut(document),rn(document);var qd=document.querySelector(`[data-prompt-dialog]`),Jd=document.querySelector(`[data-prompt-name]`),Yd=document.querySelector(`[data-prompt-text]`),Xd=document.querySelector(`[data-prompt-delete]`),Zd=document.getElementById(`prb-prompt-title`),Qd=document.querySelector(`[data-prompt-error]`),$d=document.querySelector(`[data-prompt-save]`);function ef(e){Qd&&(Qd.textContent=e??``,Qd.hidden=e===null)}var tf=``;function nf(e){let t=J.find(t=>t.id===e);tf=t?.id??``,Zd&&(Zd.textContent=t?`Edit prompt`:`Save a prompt`),Jd&&(Jd.value=t?.name??``),Yd&&(Yd.value=t?.prompt??``),Xd&&(Xd.hidden=!t),ef(null),qd?.showModal(),Jd?.focus()}async function rf(){let e=Jd?.value.trim()??``,t=Yd?.value.trim()??``;if(!e||!t){(e?Yd:Jd)?.focus();return}await of(tf?J.map(n=>n.id===tf?{...n,name:e,prompt:t}:n):[...J,{id:crypto.randomUUID(),name:e,prompt:t}])}async function af(){tf&&await of(J.filter(e=>e.id!==tf))}async function of(e){ef(null);let t=[$d,Xd].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await Ad(e);for(let e of t)e.disabled=!1;if(n)return ef(n);qd?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>qd?.close()),Xd?.addEventListener(`click`,()=>void af()),$d?.addEventListener(`click`,()=>void rf());var sf=document.querySelector(`[data-fresh-region]`),cf=document.querySelector(`[data-fresh-status]`),lf=document.querySelector(`[data-fresh-check]`),X=bf(sf?.dataset.report),uf=`prb-fresh-reopen`,df=gf(),ff=sf?.dataset.dismissedSha,pf=hf(sf?.dataset.availability),Z=mf(sf?.dataset.remote);function mf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function hf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function gf(){try{return sessionStorage.getItem(uf)!==null&&(sessionStorage.removeItem(uf),!0)}catch{return!1}}df&&Lf(),lf?.addEventListener(`click`,()=>void wf());var _f=document.querySelector(`[data-fetch-remote]`);_f&&(fetch(R(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(_f.hidden=!1)}).catch(()=>{}),_f.addEventListener(`click`,()=>void vf(_f)));async function vf(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(R(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let r=t??{repositories:1,fetched:0,failed:[],moved:0};n(y(),{kind:r.fetched<r.repositories?`failed`:`ready`,text:ce(r)}),r.fetched>0&&await wf()}sf?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return df=!1,Lf();let n=t.closest(`[data-fresh-dismiss]`);n&&(ff=n.dataset.freshDismiss||void 0,df=!1,Lf(),yf())});function yf(){fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:ff??null})}).catch(()=>{})}function bf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var xf=wa(),Sf=!1,Cf=null;async function wf(){if(Sf)return;Sf=!0,Af(!0),Cf&&await Cf;let e=jf(X,Z),t=await Ef(!1);Af(!1),t&&If(),Sf=!1,t&&(X?.code.state===`changed`||Z!==null)&&ff!==void 0&&(ff=void 0,yf()),Lf(),Tf(t?jf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Tf(e){cf&&(cf.textContent=e,window.setTimeout(Rf,2600))}async function Ef(e){let t=xf.snapshot();try{let n=await(await fetch(`${R(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,pf=n.availability??null,Z=n.remote??null,Nf=n.kiss??null,n.kissDismissedSha!==void 0&&(Pf=n.kissDismissedSha??void 0),n.prState!==void 0&&kf(n.prState);let r=Ca(n.standing);return r&&xf.current(t)&&ha(document,r),!0}catch{return!1}}async function Df(){if(Sf||Cf||!sf)return;let e=jf(X,Z),t=JSON.stringify(Nf);Cf=Ef(!0);let n=await Cf;Cf=null,Of=Date.now(),n&&(jf(X,Z)!==e&&Lf(),JSON.stringify(Nf)!==t&&If())}var Of=Date.now();function kf(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 Af(e){lf&&(lf.disabled=e),cf&&e&&(cf.textContent=`Checking…`,cf.dataset.state=`checking`)}function jf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Mf=document.querySelector(`[data-kiss-fresh-region]`),Nf=Ff(Mf?.dataset.freshness),Pf=Mf?.dataset.dismissedSha;function Ff(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function If(){sa(Nf?.state===`changed`),Mf&&(Mf.innerHTML=$i(Mf.dataset.reviewedSha??``,Nf,{dismissedSha:Pf,actions:Al!==``}))}Mf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Pf=t.dataset.kissFreshnessDismiss||void 0,If(),fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Pf??null})}).catch(()=>{}))});function Lf(){sf&&(sf.innerHTML=Ti(X,{dismissedSha:ff,open:df,actions:Al!==``,availability:pf,remote:Z}),Rf())}function Rf(){if(cf&&(X||Z)){let{label:e,state:t}=Ci(X,Z);cf.textContent=e,cf.dataset.state=t,Li(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return zf(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(R(`/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 Vf(i);if(t.closest(`[data-review-update]`))return void Gf();let a=t.closest(`[data-update-cancel]`);if(a)return void qf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void qf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function zf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Bf(e,`Copied`),()=>Bf(e,`Select it`))}function Bf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Vf(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=Hf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Xf}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=Hf(e)?null:Zf(e);try{await fetch(R(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}Hf(e)&&Uf(),window.location.reload()}function Hf(e){return e.closest(`.prb-fresh-notes p`)}function Uf(){try{sessionStorage.setItem(uf,`1`)}catch{}}var Wf=!1;async function Gf(){if(Wf)return;Wf=!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(R(`/job`))).json();e.update&&e.update.phase!==`none`&&!Vi(e.update.phase)&&n()}catch{}},500);try{await fetch(R(`/update`),{method:`POST`})}catch{}n()}var Kf={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 qf(e,t){let n=Kf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(R(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,Yf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Yf(e,n.tooLate),await ao({look:async()=>{let e=await fetch(R(`/job`),{signal:AbortSignal.timeout(Jf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var Jf=3e3;function Yf(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 Xf=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Zf(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=Xf,t.appendChild(n),n}var Qf=$a(document),$f=null,ep=Date.now();function tp(){$f===null&&($f=window.setTimeout(()=>{$f=null,np()},ve(Date.now()-ep)))}async function np(){try{let e=await(await fetch(R(`/job`))).json();if(Cu&&!e.ask||ip&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Qf){let r=t[e];if(r){if(eo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?no(n,r.phase,r.progress):rp(n,r.progress)}}}catch{}tp()}function rp(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 ip=document.querySelector(`[data-diagram-running]`)!==null;(Qf.size>0||Cu||ip)&&(ep=Date.now(),tp()),document.querySelector(`[data-started-at]`)&&io(document);function ap(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function op(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,op(t);let r=e=>{t.disabled=!1,t.textContent=n,ap(t,e)};fetch(R(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(R(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Ar,Bf(t,`Could not start. Try again`,2500)}))});var sp={send:async e=>{let t=await fetch(R(`/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)=>{Qu(`kiss`,e,t,`recommendation`,`decided`),Qu(`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),sp);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(R(`/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 cp=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=ne(e.state)??me(window.location.hash)??{kind:`view`,view:cp},n=!z||!fe(z,t),r=Rl;Rl=!1,r?Ql(t):zl(()=>Ql(t)),n&&Xl(t),vp()});var lp=me(window.location.hash),up=window.location.hash===$c,dp=I.current().ui===null,fp=window.matchMedia(`(max-width: 860px)`).matches,pp=dp&&!lp?.focus?wr(Bl.expanded,ge(lp??{kind:`view`,view:cp},Zl),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,fp):null;if(dp&&K?.dataset.ask===`open`&&fp&&delete K.dataset.ask,pp){let e=lp??{kind:`view`,view:cp};lp||(z=e);let t={...e,focus:pp};I.replace(oe(t),t),Ql(t)}else lp?Ql(lp):(z={kind:`view`,view:cp},I.replace(``,z));Il=!0;var mp={enterTour(){let e=z,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||zl(()=>Ql({kind:`view`,view:`overview`})),()=>{!t&&e&&zl(()=>Ql(e))}},save(e){fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};up?dl(document,window,mp):L.dataset.guidedTour===`offer`&&cl(document,window,{mode:`first`,host:mp});var hp={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:H,panes:K};I.setCapturer(()=>ui(hp));async function gp(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?pu.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}=du(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await mu(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`)&&Xc(o,a.tall),t&&ni(o,t.top,t.offset))}function _p(e){Qr(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function vp(){let e=++Yl,t=()=>Yl===e;await di(hp,I.current().ui,{setFold:(e,t)=>zl(()=>su(e,t)),setAsk:e=>zl(()=>od(e)),clearAsk:()=>{K&&delete K.dataset.ask,sd(ad())},openPanel:(e,n)=>gp(e,n,t),closePanel:_p,stillCurrent:t})}vp();var yp=U?vi(U,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;G=yp?.restoredStage??null,ld(),uu();var bp=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=>{bp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(bp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Ea({root:document,post:(e,t)=>fetch(R(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:xf,checkForUpdates:()=>wf()});function xp(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&B.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 Sp(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 B.closeAll();xp(n.error)}}function Cp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function wp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&B.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}if(Q){let e=Q.querySelector(`[data-confirm-delete]`),t=()=>Wd(Q);Q.addEventListener(`click`,e=>{let i=e.target,a=i?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),he(a,a.dataset.copyId);return}if(i?.closest(`[data-tour-replay]`)){e.stopPropagation(),B.closeAll(),dl(document,window,mp);return}let o=i?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),n(o);return}if(i?.closest(`[data-fresh-check], [data-fetch-remote]`)){B.closeAll();return}let s=i?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Sp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=i?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Sp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=i?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Sp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(i?.closest(`[data-delete]`)){e.stopPropagation(),wp();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(R(`/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=_(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=_(n)},r=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:n}=await $.deleteReview();if(n===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),t(),xp(n)}}function Tp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>ru(e,{keepFocus:!0})}}function Ep(){if(!z)return null;let e=z.focus??(z.kind===`section`?`guide`:z.view);return ue.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Dp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}d(`review`,{...Kd.commands,...Ga(Y,document),"review.section.review":{available:()=>Ya(document)!==null,run:()=>{let e=Ya(document);e&&ru(e,{keepFocus:!0})}},"review.section.kiss":Tp(`kiss`),"review.section.issues":Tp(`issues`),"review.section.diagrams":Tp(`map`),"review.section.questions":Tp(`questions`),"review.section.files":Tp(`files`),"review.buddy.open":{available:()=>id!==null,run:()=>{z?.focus?le(z,`buddy`,$l):od(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>id!==null&&U!==null,panel:de({prompts:()=>J,choose:Md})},"review.focus.toggle":{available:()=>Ep()!==null,run:()=>{let e=Ep();e&&nu(e)}},"review.leave":{available:e=>!!(e&&pe(e,document,e.target===U||Y.state().selecting||!!z?.focus)),run:e=>{U&&e?.target===U?U.blur():Y.state().selecting?Y.exit():z?.focus&&ie(z,$l)}},"review.feedback.toggle":{available:()=>Y.state().selecting||Dp(),label:()=>Y.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>Y.state().selecting?Y.exit():Y.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Sp(()=>$.setComplete(!0),Cp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Sp(()=>$.setLifecycle(`waiting`),Cp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Sp(()=>$.setLifecycle(`done`),Cp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Sp(()=>$.toggleQueued(),Cp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>wi(X,{actions:Al!==``&&!Qf.has(`update`)&&!Wf,remote:Z}),run:()=>void Gf()},"review.delete":{available:()=>$.offer().delete,run:()=>wp({focusCancel:!0})}},{onOpen:()=>B.closeAll()}),m(),Al&&Cc({markSeen:()=>fetch(R(`/seen`),{method:`POST`}),askUnread:()=>fetch(R(`/unread`))}),setTimeout(()=>{Sl(ml([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),te(window,()=>window.location.reload());var Op=15e3,kp=6e4;function Ap(){return Al!==``&&document.visibilityState===`visible`&&!Qf.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Ap()&&Date.now()-Of>=Op&&Df()}),window.setInterval(()=>{Ap()&&Df()},kp);export{Qs as n,$t as r,tc as t};