prreviewbuddy 0.71.2 → 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/dist/{delete_review-BgIZpcsP.js → delete_review-CqnTq6yF.js} +55 -11
- package/dist/main.js +1 -1
- package/dist/server.js +85 -42
- package/package.json +1 -1
- package/static/workspace.js +81 -81
package/static/workspace.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-D6oLtkSC.js","chunk-CvSN2dS5.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-DIEkEPeW.js","chunk-D7hFEgee.js","chunk-B2kMZj3m.js","chunk-BXful7fw.js","chunk-9OYdRhXM.js","chunk-DyBGMc4d.js","chunk-D71XVZIg.js","chunk-Dy-Kn_BL.js","chunk-B-Up-Dum.js","chunk-CCkeMk9N.js","chunk-DwHSAwhM.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-Baon_ihZ.js","chunk-CAnKkQXq.js","chunk-LbU1hoFO.js","chunk-BzbQS41l.js","chunk-BsjqnLg3.js","chunk-BtIQNnN0.js","chunk-D3KKoC5L.js","chunk-CP0rg-5b.js","chunk-j_1H8WHN.js","chunk-BOvsFOI6.js","chunk-CqHdAlCp.js","chunk-DijMHRDA.js","chunk-D2pwppYQ.js","chunk-Cjc271yU.js","chunk-B2PgDgse.js","chunk-D95j_xjm.js","chunk-Cv3JjNkX.js","chunk-EIJEcyW-.js","chunk-C3nvJp0N.js","chunk-D2NZorQR.js","chunk-NzFayA7r.js","chunk-AdYjtsZU.js","chunk-pNSm1SyV.js","chunk-c-cg1wCO.js","chunk-CBrdyqSx.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{B as e,D as t,E as n,F as r,G as i,H as a,I as o,K as s,L as c,N as l,P as u,R as d,V as f,W as ee,X as te,Y as p,a as m,i as ne,o as h,q as re,t as ie,u as g,w as ae,z as oe}from"./chunk-DqEA-C0S.js";import{c as
|
|
3
|
-
`)){let c=o;if(o+=s.length+1,r){let e=
|
|
4
|
-
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??
|
|
5
|
-
`),blocks:n}}function
|
|
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
|
|
7
|
-
`)){let e=o.trim();if(s){if(e){s.push(
|
|
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=
|
|
9
|
-
`)),n.join(``)}function
|
|
2
|
+
import{B as e,D as t,E as n,F as r,G as i,H as a,I as o,K as s,L as c,N as l,P as u,R as d,V as f,W as ee,X as te,Y as p,a as m,i as ne,o as h,q as re,t as ie,u as g,w as ae,z as oe}from"./chunk-DqEA-C0S.js";import{c as se,i as ce,o as le,s as ue}from"./chunk-BsU84lX4.js";import{t as _}from"./chunk-CvSN2dS5.js";import{t as de}from"./chunk-C8kkSv38.js";function v(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function fe(e){return v(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var pe=`pr-helper-code-block`,me=`pr-helper-code-copy`,he=/^\u0002(\d+)\u0002/,ge=/^(?:https?:\/\/|#)/i,_e=/^https:\/\//i,ve=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,ye=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function be(e){let t=(e??``).trim();return!t||ve.test(t)||ye.test(t)?`View attached image`:`View image: ${t}`}function xe(e,t){return _e.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Se(e,t){return xe(v((e??``).trim()),v(t))}var y=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Ce=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,we=e=>/^\d{1,9}$/.test(e)?e:null,Te=e=>e.slice(0,300),Ee=new Map(Object.entries({a:{href:e=>{let t=e.trim();return ge.test(t)?t:null},title:Te},abbr:{title:Te},b:{},blockquote:{},br:{},caption:{align:y},cite:{},code:{},dd:{},del:{},details:{},div:{align:y},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:we},p:{align:y},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:y},tbody:{},td:{align:y,colspan:Ce,rowspan:Ce},tfoot:{},th:{align:y,colspan:Ce,rowspan:Ce},thead:{},tr:{align:y},u:{},ul:{},var:{},h1:{align:y},h2:{align:y},h3:{align:y},h4:{align:y},h5:{align:y},h6:{align:y}}).map(([e,t])=>[e,new Map(Object.entries({title:Te,...t}))])),De=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Oe=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),ke=new Set(`picture.pre.source.track.input.form.label.button.option.optgroup.font.center.section.article.header.footer.nav.figure.figcaption.main.aside.html.body.meta.link.base.wbr.col.colgroup.area.map.param.fieldset.legend.dialog`.split(`.`)),Ae=new Set(`address.article.aside.blockquote.caption.center.dd.details.dialog.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),je=new RegExp(["`[^`\\n]+`",`<(\\/?)([A-Za-z][A-Za-z0-9-]*)((?:\\s+[^\\s"'<>\\/=]+(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s"'=<>\`]+))?)*)\\s*(\\/?)>`,`&(?:#\\d{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});`].join(`|`),`g`),Me=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Ne(e){return e.replace(/&(#\d{1,7}|#[xX][0-9a-fA-F]{1,6}|amp|lt|gt|quot|apos|nbsp);/g,(e,t)=>{if(t[0]===`#`){let e=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return e>0&&e<=1114111?String.fromCodePoint(e):``}return{amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:`\xA0`}[t]??``})}function Pe(e){let t=new Map;for(let n of e.matchAll(Me)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Ne(n[2]??n[3]??n[4]??``))}return t}function Fe(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Ie(e,t){let n=Fe(e),r=Ee.get(e),i=[];for(let[e,n]of Pe(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${v(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Le(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;je.lastIndex=0;for(let t;t=je.exec(e);){let[a,o,s,c,l]=t,u=null;if(a[0]===`&`)u=n({kind:`entity`,name:``,tag:``,markup:a});else if(s){let t=s.toLowerCase();if(t===`img`){let e=Pe(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Se(e.get(`src`),be(r))??v(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Pe(c).get(`src`);if(!o&&!l){let n=e.slice(je.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Pe(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(je.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Se(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Oe.has(t)){if(!o&&!l&&!De.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(je.lastIndex),i=r.search(n);i!==-1&&(je.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(ke.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(Ee.has(t)){let e=Fe(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):De.has(t)?n({kind:`void`,name:t,tag:e,markup:Ie(t,c)}):n({kind:`open`,name:t,tag:e,markup:Ie(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=je.lastIndex)}return{text:r+e.slice(i),tokens:t}}function Re(e,t){for(let n of e.matchAll(/\u0002(\d+)\u0002/g))if(t.tokens[Number(n[1])].kind!==`entity`)return!0;return!1}function ze(e,t){let n=e.match(he);return!!(n&&Ae.has(t.tokens[Number(n[1])].name))}function Be(e){let t=[];return e.replace(/<a\b[^>]*>|<\/a>/g,e=>{if(e===`</a>`)return t.pop()?``:e;let n=t.length>0;return t.push(n),n?``:e})}function Ve(e,t){let n=[],r=e=>{let r=t.tokens[e];if(r.kind===`open`)return n.push(r.tag),r.markup;if(r.kind===`close`){let e=n.lastIndexOf(r.tag);return e===-1?``:n.splice(e).reverse().map(e=>`</${e}>`).join(``)}return r.markup},i=``,a=0,o=!1;for(let n=0;n<e.length;n++){let s=e[n];if(s===`<`)o=!0;else if(s===`>`)o=!1;else if(s===``){let s=e.indexOf(``,n+1);if(s===-1)break;let c=Number(e.slice(n+1,s));i+=e.slice(a,n)+(o&&t.tokens[c].kind!==`entity`?``:r(c)),n=s,a=s+1}}return i+e.slice(a)+n.reverse().map(e=>`</${e}>`).join(``)}var He=`\0`,Ue=``,We=/\u0000(\d+)\u0000/g,Ge=/^\u0000\d+\u0000$/,Ke=/\u0001(\d+)\u0001/g;function qe(e,t={}){let{text:n,blocks:r}=$e(Qe(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return rt(ut(n),r);let i=Le(n);return Be(Ve(rt(ut(i.text,i),r),i))}function Je(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Ye(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Xe=/`[^`\n]+`|<!--/g;function Ze(e,t){Xe.lastIndex=t;for(let t;t=Xe.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function Qe(e,t={}){let n=[],r=null,i=!1,a=null,o=0;for(let s of e.split(`
|
|
3
|
+
`)){let c=o;if(o+=s.length+1,r){let e=Ye(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=Je(s),r)){n.push({raw:s,visible:s,code:`open`});continue}if(!t.hideHtmlComments){n.push({raw:s,visible:s});continue}let l=i?a:null,u=``,d=0;for(;d<s.length;){if(i){let e=s.indexOf(`-->`,d);if(e===-1)break;d=e+3,i=!1;continue}let t=Ze(s,d);if(t===-1||e.indexOf(`-->`,c+t+4)===-1){u+=s.slice(d);break}u+=s.slice(d,t),d=t+4,i=!0}if(l){l.visible+=u,n.push({raw:s,visible:``,absent:!0});continue}let f={raw:s,visible:u};i&&(a=u.trim()===``?null:f),n.push(f)}return n}function $e(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${He}${n.length}${He}`);let e=i.join(`
|
|
4
|
+
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??nt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&et(n.raw).toLowerCase()===`mermaid`?tt(r):void 0):n.code===`body`?i.push(n.raw):n.code===`close`?o():r.push(n.visible));return i&&o(),{text:r.join(`
|
|
5
|
+
`),blocks:n}}function et(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function tt(e){for(let t=e.length-1;t>=0;t--){let n=e[t].trim();if(!n)continue;let r=n.match(/^#{1,6}\s+(.+?)\s*#*$/)?.[1]??n.match(/^(\*\*|__)(.+)\1$/)?.[2];return r&&r.replace(/[`*_]/g,``).trim()||null}return null}function nt(e){let t=e.split(`
|
|
6
|
+
`).map(e=>e.trim()),n=0;if(t.find(e=>e)===`---`){let e=t.indexOf(`---`),r=t.indexOf(`---`,e+1);n=r===-1?t.length:r+1}return t.slice(n).find(e=>e&&!e.startsWith(`%%`))?.split(/\s+/)[0]||`diagram`}function rt(e,t){return e.replace(We,(e,n)=>{let r=t[Number(n)];return r.diagram?ot(r.code,r.diagram.label):it(r.code,`Copy`,`Copy code`)})}function it(e,t,n,r=``){return`<div class="${pe}"${r}><pre><code>${v(e)}</code></pre><button type="button" class="${me}" aria-label="${n}">${t}</button></div>`}var at=0;function ot(e,t){let n=`prb-md-mermaid-source-${++at}`;return`<figure class="prb-md-mermaid" data-md-mermaid data-state="source"><div class="prb-md-mermaid-canvas" data-md-mermaid-canvas role="img" aria-label="${v(t)}" hidden></div><p class="prb-md-mermaid-error" data-md-mermaid-error hidden>This diagram couldn\u2019t be displayed.</p><button type="button" class="prb-md-mermaid-toggle" data-md-mermaid-toggle aria-expanded="true" aria-controls="${n}" hidden>Hide source</button>`+it(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function st(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function ct(e){return st(e.match(/^[ \t]*/)[0])}function lt(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=st(n)+(r?1:i.length+1),c=st(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function ut(e,t){let n=[],r=[],i=[],a=null,o=e=>e.tag===`ol`&&e.start!==1?` start="${e.start}"`:``,s=null,c=()=>{if(r.length&&n.push(`<p>${dt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${dt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?dt(e[0],t):e.map(e=>`<p>${dt(e,t)}</p>`).join(``),r=t=>`<${t.tag}${o(t)}>${t.items.map(t=>`<li>${e(t.paras)}</li>`).join(``)}</${t.tag}>`,i=({blocks:e})=>{let n=e.filter(e=>typeof e==`string`).length===1;return e.map(e=>typeof e==`string`?n?dt(e,t):`<p>${dt(e,t)}</p>`:r(e)).join(``)};n.push(`<${a.tag}${o(a)}>${a.items.map(e=>`<li>${i(e)}</li>`).join(``)}</${a.tag}>`)}r=[],i=[],a=null};for(let o of e.split(`
|
|
7
|
+
`)){let e=o.trim();if(s){if(e){s.push(v(e));continue}n.push(s.join(`
|
|
8
|
+
`)),s=null}if(!e){a&&!r.length&&!i.length?a.gap=!0:c();continue}if(a?.items.length){let t=a.items[a.items.length-1],n=t.blocks[t.blocks.length-1],r=typeof n==`string`?null:n,i=r?.items[r.items.length-1]??null,s=ct(o),l=lt(o),u=a.gap;if(a.gap=!1,l&&s>=t.content){let e=r&&i&&(s>=i.content||r.tag===l.tag),n={paras:[l.text],content:l.content};e?r.items.push(n):t.blocks.push({tag:l.tag,start:l.start,items:[n]});continue}if(!l&&u){if(i&&s>=i.content){i.paras.push(e);continue}if(s>=t.content){t.blocks.push(e);continue}c()}else l&&u&&l.tag!==a.tag&&c()}if(t&&ze(e,t)){c(),s=[v(e)];continue}if(Ge.test(e)){c(),n.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){c(),n.push(`<hr>`);continue}let l=e.match(/^(#{1,6})\s+(.+)$/);if(l){c();let e=Math.min(l[1].length,3)+3;n.push(`<h${e}>${dt(l[2],t)}</h${e}>`);continue}let u=lt(o);if(u){let e=a;e?.tag!==u.tag&&(c(),e=a={tag:u.tag,start:u.start,items:[],gap:!1}),e.items.push({blocks:[u.text],content:u.content});continue}let d=e.match(/^>\s?(.*)$/);if(d){i.length||c(),i.push(d[1]);continue}if(a&&a.items.length){let{blocks:t}=a.items[a.items.length-1],n=t[t.length-1];if(typeof n==`string`)t[t.length-1]=`${n} ${e}`;else{let t=n.items[n.items.length-1].paras;t[t.length-1]+=` ${e}`}continue}if(i.length){i[i.length-1]+=` ${e}`;continue}r.push(e)}return c(),s&&n.push(s.join(`
|
|
9
|
+
`)),n.join(``)}function dt(e,t){let n=[];return v(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${Ue}${n.length-1}${Ue}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Re(r,t)?xe(r,be(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>ge.test(r)&&!(t&&Re(r,t))?`<a href="${r}" target="_blank" rel="noopener noreferrer">${n}</a>`:e).replace(/\*\*([^*\n]+)\*\*/g,`<strong>$1</strong>`).replace(/__([^_\n]+)__/g,`<strong>$1</strong>`).replace(/(^|[^*\w])\*([^*\n]+)\*/g,`$1<em>$2</em>`).replace(/(^|[^_\w])_([^_\n]+)_(?![\w_])/g,`$1<em>$2</em>`).replace(Ke,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function ft(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),pt(e)}}function pt(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch(e){return console.warn(`PR Helper: clipboard fallback failed`,e),!1}finally{t.remove()}}var mt=`pr-helper-msg-copy`,ht=`pr-helper-chat-actions`,gt=`data-message-id`,_t=`data-copy-source`,vt={idle:{icon:`<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>`,label:``,aria:`Copy message`},copied:{icon:`<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>`,label:`Copied`,aria:`Copied`},failed:{icon:`<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>`,label:`Copy failed`,aria:`Copy failed`}};function yt(e){return wt(`${_t}="${v(e)}"`)}var bt=`pr-helper-finding-copy`,xt=`data-copy-idle-label`,St=`data-copy-idle-aria`,Ct=`data-copy-idle-tip`;function wt(e,t){let{icon:n}=vt.idle,r=t?.label??vt.idle.label,i=t?.aria??vt.idle.aria,a=t?` ${xt}="${v(r)}" ${St}="${v(i)}" ${Ct}="${v(t.tip)}"`:``,o=`<button type="button" class="${t?`${mt} ${bt}`:mt}" ${e}${a}${t?` data-tip="${v(t.tip)}"`:``} aria-label="${v(i)}"><span class="${mt}-icon" aria-hidden="true">${Et(n)}</span><span class="${mt}-label"${r?``:` hidden`}>${v(r)}</span></button>`;return t?o:`<div class="${ht}">${o}</div>`}function Tt(e,t){let n=vt[t],r=t===`idle`?{...n,label:e.getAttribute(xt)??n.label,aria:e.getAttribute(St)??n.aria}:n,i=e.querySelector(`.${mt}-icon`),a=e.querySelector(`.${mt}-label`);i&&(i.innerHTML=Et(r.icon));let o=(e.getAttribute(xt)??``)!==``,s=e.classList.contains(`pr-helper-finding-copy`)&&!o;a instanceof HTMLElement&&(a.textContent=s?``:r.label,a.hidden=s||r.label===``),s&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(Ct)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Et(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Dt=1400,Ot=`Copy`,kt=`Copied`,At=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,jt=new WeakMap;function Mt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${me}`),i=r?null:n.closest(`.${mt}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Ft(r):i&&Nt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Nt(e,t){let n=Pt(e,t);Lt(e,n!==null&&await ft(n)?`copied`:`failed`)}function Pt(e,t){let n=e.getAttribute(_t);if(n!==null)return n;let r=e.getAttribute(gt);return r&&t?t(r):null}async function Ft(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await ft(t.textContent??``):!1;!n&&t&&It(t),Rt(e,n?kt:At,n)}function It(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Lt(e,t){let n=jt.get(e);n&&window.clearTimeout(n),Tt(e,t),jt.set(e,window.setTimeout(()=>{Tt(e,`idle`),jt.delete(e)},Dt))}function Rt(e,t,n){let r=jt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||Ot;e.textContent=t,e.classList.toggle(`copied`,n),jt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),jt.delete(e)},Dt))}var zt={startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`,suppressErrorRendering:!0,secure:[`secure`,`securityLevel`,`startOnLoad`,`maxTextSize`,`suppressErrorRendering`,`maxEdges`,`htmlLabels`,`flowchart`,`themeCSS`,`themeVariables`,`theme`,`darkMode`,`fontFamily`,`dompurifyConfig`,`arrowMarkerAbsolute`,`deterministicIds`,`deterministicIDSeed`]},Bt=null;function Vt(){return Bt??=_(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(zt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),Bt}async function Ht(e,t,n,r=Vt){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,Wt(e)}var Ut=`http://www.w3.org/2000/svg`;function Wt(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(Ut,`g`);for(let e of[...t.attributes])/^(?:xlink:)?href$|^target$|^rel$/i.test(e.name)||n.setAttribute(e.name,e.value);n.append(...t.childNodes),t.replaceWith(n)}for(let t of e.querySelectorAll(`.clickable`))t.classList.remove(`clickable`)}var Gt=0;function Kt(e,t={}){let n=t.engine??Vt,r=t.observe??qt,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),Jt(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&Xt(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function qt(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function Jt(e,t){let n=t=>e.querySelector(`[data-md-mermaid-${t}]`),r=n(`canvas`),i=n(`source`),a=n(`toggle`),o=i?.querySelector(`pre code`)?.textContent??``;if(!(!r||!i||!a))try{await Ht(r,`prb-md-mermaid-${++Gt}`,o,t),Yt(r.querySelector(`svg`)),r.hidden=!1,i.hidden=!0,a.hidden=!1,a.textContent=`View source`,a.setAttribute(`aria-expanded`,`false`),e.dataset.state=`diagram`}catch{e.dataset.state=`failed`;let t=n(`error`);t&&(t.hidden=!1)}}function Yt(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function Xt(e){let t=e.closest(`figure`)?.querySelector(`[data-md-mermaid-source]`);if(!t)return;let n=t.hidden;t.hidden=!n,e.textContent=n?`Hide source`:`View source`,e.setAttribute(`aria-expanded`,String(n))}var Zt=`pr-helper-selection-popover`,Qt=`pr-helper-selection-popover-expanded`,$t=`pr-helper-selection-copy-done`,en=8,tn=8,nn=1e3,rn=`Copy selected text`,an=`Copy`,on=`Copied`,sn=`pr-helper-selection-popover-flat`,b=null;function cn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${v(e.id)}">${v(e.label)}</button>`}function ln(e){let t=new Map;for(let n of e){if(!n.section)continue;let e=t.get(n.section);e?e.push(n):t.set(n.section,[n])}return`${e.filter(e=>!e.section).map(cn).join(``)}${[...t].map(([e,t])=>`
|
|
10
10
|
<div class="pr-helper-selection-menu-group">
|
|
11
|
-
<div class="pr-helper-selection-menu-heading">${
|
|
12
|
-
<div class="pr-helper-selection-menu-group-items">${t.map(
|
|
13
|
-
</div>`).join(``)}`}function
|
|
11
|
+
<div class="pr-helper-selection-menu-heading">${v(e)}</div>
|
|
12
|
+
<div class="pr-helper-selection-menu-group-items">${t.map(cn).join(``)}</div>
|
|
13
|
+
</div>`).join(``)}`}function un(e){if(e.layout===`flat`)return dn(e);let t=ln(e.actions);return`
|
|
14
14
|
<div class="pr-helper-selection-bar">
|
|
15
15
|
<button type="button" class="pr-helper-selection-trigger" data-selection-open>
|
|
16
16
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true">
|
|
17
17
|
<path d="M1.75 1h12.5A1.75 1.75 0 0 1 16 2.75v8.5A1.75 1.75 0 0 1 14.25 13H8.06l-3.5 2.63A.75.75 0 0 1 3.36 15v-2H1.75A1.75 1.75 0 0 1 0 11.25v-8.5A1.75 1.75 0 0 1 1.75 1Z"/>
|
|
18
18
|
</svg>
|
|
19
|
-
<span>${
|
|
19
|
+
<span>${v(e.triggerLabel??`Ask`)}</span>
|
|
20
20
|
</button>
|
|
21
|
-
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${
|
|
21
|
+
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${rn}" aria-describedby="pr-helper-selection-tip">
|
|
22
22
|
<svg class="pr-helper-selection-copy-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true">
|
|
23
23
|
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/>
|
|
24
24
|
<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/>
|
|
@@ -27,145 +27,145 @@ import{B as e,D as t,E as n,F as r,G as i,H as a,I as o,K as s,L as c,N as l,P a
|
|
|
27
27
|
<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L1.22 8.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"/>
|
|
28
28
|
</svg>
|
|
29
29
|
</button>
|
|
30
|
-
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${
|
|
30
|
+
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${rn}</span>
|
|
31
31
|
</div>
|
|
32
32
|
<div class="pr-helper-selection-menu">${t}</div>
|
|
33
|
-
`}function
|
|
34
|
-
${
|
|
35
|
-
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${
|
|
36
|
-
</div>`}function
|
|
33
|
+
`}function dn(e){return`<div class="pr-helper-selection-menu">
|
|
34
|
+
${ln(e.actions)}
|
|
35
|
+
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${an}</button>
|
|
36
|
+
</div>`}function fn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-en,a=i>=tn?i:Math.min(t.bottom+en,window.innerHeight-r-tn),o=Math.max(tn,Math.min(t.left,window.innerWidth-n-tn));e.style.top=`${Math.max(tn,a)}px`,e.style.left=`${o}px`}function x(){pn&&=(window.clearTimeout(pn),0),b?.popover.remove(),b=null}var pn=0;function mn(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add($t),t&&(t.textContent=on),n&&(n.textContent=on),pn&&window.clearTimeout(pn),pn=window.setTimeout(()=>hn(e),nn)}function hn(e){pn&&=(window.clearTimeout(pn),0),e.classList.remove($t);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=rn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=an)}async function gn(e,t){try{await navigator.clipboard.writeText(t)}catch(e){console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,e);let t=!1;try{t=document.execCommand(`copy`)}catch(e){console.warn(`PR Helper: clipboard fallback failed`,e)}if(!t)return}mn(e)}function _n(e,t){let n=window.getSelection();if(!n||n.isCollapsed||n.rangeCount===0)return null;let r=n.toString().trim();if(!r)return null;let i=n.getRangeAt(0);if(!e.contains(i.commonAncestorContainer))return null;if(t.onlyWithin||t.ignoreWithin){let e=i.commonAncestorContainer,n=e instanceof HTMLElement?e:e.parentElement;if(t.onlyWithin&&!n?.closest(t.onlyWithin)||t.ignoreWithin&&n?.closest(t.ignoreWithin))return null}let a=i.getBoundingClientRect();return a.width===0&&a.height===0?null:{text:r,rect:a}}function vn(e,t){let n={},r=()=>{let r=_n(e,t);if(!r){(!b||b.owner===n)&&x();return}if(b&&b.owner!==n&&x(),b)b.popover.classList.remove(Qt),hn(b.popover),b.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Zt} ${sn}`:Zt,i.innerHTML=un(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){b?.text&&gn(i,b.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(Qt);let n=_n(e,t);fn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!b)return;let o=b.text;x(),t.onChoose(a,o)}),document.body.appendChild(i),b={popover:i,text:r.text,owner:n}}fn(b.popover,r.rect)},i=e=>{b&&e.target instanceof Node&&b.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!b)return;let e=window.getSelection();(!e||e.isCollapsed)&&x()},s=e=>{e.key===`Escape`&&x()},c=()=>x();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),x()}}var yn=[{id:`explain-detail`,label:`Explain (technical)`,instruction:`Explain this, keeping the technical detail.`},{id:`explain`,label:`Explain (simple)`,instruction:`Explain this in simpler terms.`},{id:`is-problem`,label:`Is this actually a problem?`,instruction:`Is this actually a problem? Be specific about when it would and would not matter.`},{id:`why-matters`,label:`Why does this matter?`,instruction:`Why does this matter? Say who or what it affects, and when.`},{id:`better-implementation`,label:`Suggest a better implementation`,instruction:`Suggest a better implementation for this.`},{id:`author-question`,label:`Generate a question for the author`,instruction:`Generate a question I could ask the author about this.`},{id:`custom`,label:`Ask a question`}];function bn(e){return![...yn,...xn].find(t=>t.id===e)?.instruction}var xn=[{id:`add-to-chat`,label:`Add to chat`}],Sn=800;function Cn(e,t={}){let n=t.maxChars??Sn,r=e.replace(/\r\n/g,`
|
|
37
37
|
`).split(`
|
|
38
38
|
`).map(e=>e.replace(/\s+$/,``));for(;r.length&&!r[0].trim();)r.shift();for(;r.length&&!r[r.length-1].trim();)r.pop();let i=r.filter(e=>e.trim()).map(e=>e.match(/^[ \t]*/)[0].length),a=i.length?Math.min(...i):0,o=r.map(e=>e.slice(a)).join(`
|
|
39
39
|
`).replace(/\n{3,}/g,`
|
|
40
40
|
|
|
41
41
|
`);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
|
|
42
42
|
`).map(e=>`> ${e}`.trimEnd()).join(`
|
|
43
|
-
`):``}function
|
|
44
|
-
<summary class="pr-helper-simple-explanation-summary">${
|
|
43
|
+
`):``}function wn(e,t,n={}){let r=Cn(e,n);if(!r)return null;let i=[...yn,...xn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}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 Tn=`saved:`,En=`Your prompts`;function Dn(e){return`${Tn}${e}`}function On(e){return e.startsWith(`saved:`)?e.slice(6):null}function kn(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var An=[`explain-detail`,`explain`];function jn(e){return An.includes(e)}function Mn(e){return e.action??`explain`}var Nn=`Ask more →`,Pn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Fn(e){return Pn[Mn(e)]}function In(e,t={}){let n=qe(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Nn}</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">${Fn(e)}</summary>
|
|
45
45
|
<div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
|
|
46
|
-
</details>`}function Nn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Pn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Fn(e,t){return e===`explain`&&t?{explains:t}:{}}function In(e){let t=e.closest(`[data-finding-card]`),n=Pn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Ln(e,t){let n=e.querySelector(Nn(t.kind,t.id));if(!n)return;let r=Mn(t.text,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Rn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Rn(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;return r?.tagName===`H5`&&r.textContent===`Why this matters`?r.nextElementSibling:n??null}function zn(e,t){return e.closest(`[data-finding-card]`)?.querySelector(`[data-simple-explanation]`)?t.map(e=>e.id===`explain`?{...e,label:jn}:e):t}function Bn(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Vn=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],Hn=`#theme-`,Un=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],Wn=`&focus=`;function Gn(e){return`#${e}`}function Kn(e){return`${Hn}${encodeURIComponent(e)}`}function qn(e){let t=e.kind===`view`?Gn(e.view):Kn(e.sectionId);return e.focus?`${t}${Wn}${e.focus}`:t}var Jn=[`architecture`,`map`,`diagram`];function Yn(e,t){return Jn.includes(e)&&Jn.includes(t??``)?e:void 0}function Xn(e,t){let n=tr(e),r=n?.kind===`view`&&n.view===t?n.focus:Yn(t,n?.focus);return qn({kind:`view`,view:t,...r?{focus:r}:{}})}function Zn(e){let{focus:t,...n}=e;return n}function Qn(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function $n(e){return Un.includes(e)}function er(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&$n(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&Vn.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function tr(e){let t=e.indexOf(Wn);if(t===-1)return nr(e);let n=nr(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return $n(r)?{...n,focus:r}:n}function nr(e){if(e.startsWith(Hn)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return Vn.includes(t)?{kind:`view`,view:t}:null}var rr=`pushedFocus`;function ir(e){let{[rr]:t,...n}=e;return n}function ar(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function or(e,t,n){if(e.focus===t)return;let r={...Zn(ir(e)),focus:t};e.focus&&n.history.state?.[rr]?n.history.replaceState({...r,[rr]:!0},``,qn(r)):n.history.pushState({...r,[rr]:!0},``,qn(r)),n.apply(r)}function sr(e,t){if(!e.focus)return;if(t.history.state?.[rr]){t.history.back();return}let n=Zn(ir(e));t.history.replaceState(n,``,qn(n)),t.apply(n)}function cr(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&p(r)&&r.value!==``)}function lr(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}function ur(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=Dn(e);if(a===null)return Cn(t,e,i);let o=r(a);if(!o)return null;let s=Sn(t,i);return s?`${s}\n\n${o}`:null}function dr(e,t,n){if(n.busy?.())return null;let r=ur(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=yn(e)||Dn(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function fr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var pr=`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.`,mr=`Run review again`;function hr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function gr(e){let t=e.dataset.questionAnswered;t&&hr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var _r=`pr-helper-author-context-preview`,vr=`View full PR description`,yr=`Show less`;function br(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(_r);if(!n)return;let i=n.closest(`#${wr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=xr(n);if(!o){let e=-Sr(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?yr:vr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Cr(n,s,Sr(n,s)+e);return}i&&Sr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function xr(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 Sr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Cr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var wr=`pr-helper-author-context`;function Tr(e){let t=e.ownerDocument.getElementById(wr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&br(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function C(e,t=``){return typeof e==`string`?e:t}function Er(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Dr(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 Or(e){let t=e.done-e.reviewerClosed;return e.reviewerClosed===0?`Resolved by the new commits (${e.done})`:t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function kr(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">✓</span><span class="pr-helper-questions-progress-count">All ${e} questions answered</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} unanswered</span>`}function Ar(e){let t=[...document.querySelectorAll(`[data-guide-detail]`)],n=t.find(t=>t.dataset.guideDetail===e);if(!n)return null;for(let e of t)e.hidden=e!==n;return n}function jr(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Mr(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Nr(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Pr(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var Fr=50;function Ir(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function w(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function Lr(e){if(!e||typeof e!=`object`)return;let t=e,n=w(t.top);return{cited:w(t.cited),centre:w(t.centre),expand:w(t.expand,Fr),position:w(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function Rr(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 zr(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?Rr(n):{top:null,offset:0};return{cited:w(e.dataset.cited),centre:w(e.dataset.centre),expand:w(e.dataset.expand,Fr),position:w(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function Br(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 Vr(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function Hr(){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 Ur(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 Wr(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=Ir(e);return{host:Ur(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:zr(t)}:{}}})}function Gr(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function Kr(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&Ur(n)===t.host)return n;return null}function qr(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 Jr(e){let{doc:t,main:n,rail:r,log:i,panes:o}=e,s={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))s[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let c=o?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:c===`open`||c===`closed`?c:null,log:i?.scrollTop??0,folds:s,panels:Wr(t),focus:a(t.activeElement,t.body)}}async function Yr(e,t,n){if(!t)return!1;let{doc:r,main:a,rail:o,log:c}=e,l=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=l[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if((t.ask===`open`||t.ask===`closed`)&&n.setAsk(t.ask===`open`),Array.isArray(t.panels)){let e=t.panels.filter(qr).map(e=>({...e,state:Lr(e.state)}));for(let t of Wr(r))if(!e.some(e=>Gr(e,t))){let e=Kr(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=Kr(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let u=i(t,`main`);a&&u!==null&&(a.scrollTop=u);let d=i(t,`rail`);o&&d!==null&&(o.scrollTop=d);let f=i(t,`log`);return c&&f!==null&&(c.scrollTop=f),s(r,t.focus),!0}var Xr=`prb-ask-draft:`,Zr=`prb-ask-staged:`,Qr=300;function $r(e){return`${Xr}${e}`}function ei(e){return`${Zr}${e}`}function ti(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function ni(e,t){let{storage:n,win:r}=t,i=$r(t.path),a=ei(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=ti(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Qr)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function ri(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function ii(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var ai=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function oi(e){return`<details class="prb-update-alt">
|
|
46
|
+
</details>`}function Ln(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Rn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function zn(e,t){return jn(e)&&t?{explains:{...t,action:e}}:{}}function Bn(e){let t=Vn(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 Vn(e){let t=e.closest(`[data-finding-card]`),n=Rn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Hn(e,t){let n=e.querySelector(Ln(t.kind,t.id));if(!n)return;let r=In(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Un(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Un(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;return r?.tagName===`H5`&&r.textContent===`Why this matters`?r.nextElementSibling:n??null}function Wn(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Gn=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],Kn=`#theme-`,qn=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],Jn=`&focus=`;function Yn(e){return`#${e}`}function Xn(e){return`${Kn}${encodeURIComponent(e)}`}function Zn(e){let t=e.kind===`view`?Yn(e.view):Xn(e.sectionId);return e.focus?`${t}${Jn}${e.focus}`:t}var Qn=[`architecture`,`map`,`diagram`];function $n(e,t){return Qn.includes(e)&&Qn.includes(t??``)?e:void 0}function er(e,t){let n=ar(e),r=n?.kind===`view`&&n.view===t?n.focus:$n(t,n?.focus);return Zn({kind:`view`,view:t,...r?{focus:r}:{}})}function tr(e){let{focus:t,...n}=e;return n}function nr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function rr(e){return qn.includes(e)}function ir(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&rr(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&Gn.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function ar(e){let t=e.indexOf(Jn);if(t===-1)return or(e);let n=or(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return rr(r)?{...n,focus:r}:n}function or(e){if(e.startsWith(Kn)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return Gn.includes(t)?{kind:`view`,view:t}:null}var sr=`pushedFocus`;function cr(e){let{[sr]:t,...n}=e;return n}function lr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function ur(e,t,n){if(e.focus===t)return;let r={...tr(cr(e)),focus:t};e.focus&&n.history.state?.[sr]?n.history.replaceState({...r,[sr]:!0},``,Zn(r)):n.history.pushState({...r,[sr]:!0},``,Zn(r)),n.apply(r)}function dr(e,t){if(!e.focus)return;if(t.history.state?.[sr]){t.history.back();return}let n=tr(cr(e));t.history.replaceState(n,``,Zn(n)),t.apply(n)}function fr(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&p(r)&&r.value!==``)}function pr(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}function mr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=On(e);if(a===null)return wn(t,e,i);let o=r(a);if(!o)return null;let s=Cn(t,i);return s?`${s}\n\n${o}`:null}function hr(e,t,n){if(n.busy?.())return null;let r=mr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=bn(e)||On(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function gr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var _r=`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.`,vr=`Run review again`;function yr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function br(e){let t=e.dataset.questionAnswered;t&&yr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var xr=`pr-helper-author-context-preview`,Sr=`View full PR description`,Cr=`Show less`;function wr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(xr);if(!n)return;let i=n.closest(`#${Or}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Tr(n);if(!o){let e=-Er(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?Cr:Sr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Dr(n,s,Er(n,s)+e);return}i&&Er(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Tr(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 Er(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Dr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Or=`pr-helper-author-context`;function kr(e){let t=e.ownerDocument.getElementById(Or);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&wr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function S(e,t=``){return typeof e==`string`?e:t}function Ar(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function jr(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 Mr(e){let t=e.done-e.reviewerClosed;return e.reviewerClosed===0?`Resolved by the new commits (${e.done})`:t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function Nr(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 Pr(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 Fr(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Ir(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Lr(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Rr(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var zr=50;function Br(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function C(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function Vr(e){if(!e||typeof e!=`object`)return;let t=e,n=C(t.top);return{cited:C(t.cited),centre:C(t.centre),expand:C(t.expand,zr),position:C(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function Hr(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 Ur(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?Hr(n):{top:null,offset:0};return{cited:C(e.dataset.cited),centre:C(e.dataset.centre),expand:C(e.dataset.expand,zr),position:C(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function Wr(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 Gr(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function Kr(){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 qr(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 Jr(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=Br(e);return{host:qr(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:Ur(t)}:{}}})}function Yr(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function Xr(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&qr(n)===t.host)return n;return null}function Zr(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 Qr(e){let{doc:t,main:n,rail:r,log:i,panes:o}=e,s={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))s[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let c=o?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:c===`open`||c===`closed`?c:null,log:i?.scrollTop??0,folds:s,panels:Jr(t),focus:a(t.activeElement,t.body)}}async function $r(e,t,n){if(!t)return!1;let{doc:r,main:a,rail:o,log:c}=e,l=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=l[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if((t.ask===`open`||t.ask===`closed`)&&n.setAsk(t.ask===`open`),Array.isArray(t.panels)){let e=t.panels.filter(Zr).map(e=>({...e,state:Vr(e.state)}));for(let t of Jr(r))if(!e.some(e=>Yr(e,t))){let e=Xr(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=Xr(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let u=i(t,`main`);a&&u!==null&&(a.scrollTop=u);let d=i(t,`rail`);o&&d!==null&&(o.scrollTop=d);let f=i(t,`log`);return c&&f!==null&&(c.scrollTop=f),s(r,t.focus),!0}var ei=`prb-ask-draft:`,ti=`prb-ask-staged:`,ni=300;function ri(e){return`${ei}${e}`}function ii(e){return`${ti}${e}`}function ai(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 oi(e,t){let{storage:n,win:r}=t,i=ri(t.path),a=ii(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=ai(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(),ni)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function si(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function ci(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var li=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function ui(e){return`<details class="prb-update-alt">
|
|
47
47
|
<summary>Start a new review</summary>
|
|
48
|
-
<span>A brand new review, with its own findings and its own path through the change. Run <code>${
|
|
49
|
-
</details>`}var
|
|
48
|
+
<span>A brand new review, with its own findings and its own path through the change. Run <code>${v(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${v(e)}">Copy</button></span>
|
|
49
|
+
</details>`}var di=`prreviewbuddy review --fresh`;function fi(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 pi(e,t){if(!t.actions)return!1;let n=e??(t.remote?bi(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 mi(e,t={}){let n=e??(t.remote?bi(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?xi(n.code,r):yi(n.code,t.availability??null),u=e?[...l.facts,`checked ${v(si(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
|
|
50
50
|
<div class="prb-fresh-head">
|
|
51
51
|
<span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
|
|
52
|
-
<strong class="prb-fresh-title">${
|
|
52
|
+
<strong class="prb-fresh-title">${v(l.title)}</strong>
|
|
53
53
|
<span class="prb-fresh-facts">${u.join(` · `)}</span>
|
|
54
54
|
</div>
|
|
55
55
|
${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
|
|
56
|
-
${
|
|
57
|
-
</div>`}function
|
|
58
|
-
${r?
|
|
59
|
-
${r?
|
|
56
|
+
${hi(n,t,i||a,pi(e,t))}
|
|
57
|
+
</div>`}function hi(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
|
|
58
|
+
${r?ci():``}
|
|
59
|
+
${r?ui(di):``}
|
|
60
60
|
${i}
|
|
61
|
-
${
|
|
62
|
-
</div>`}function
|
|
61
|
+
${gi(e,t,n,r===!0)}
|
|
62
|
+
</div>`}function gi(e,t,n,r){let i=[r?v(li):``,t.remote?Si(e.code):Ci(e.code,e.checkout.reason!==`no-pull-request`),wi(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${v(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
|
|
63
63
|
<summary>More details</summary>
|
|
64
64
|
${a}
|
|
65
|
-
</details>`:a}function
|
|
65
|
+
</details>`:a}function _i(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function vi(e){return e?`<code title="${v(e)}">${v(e.slice(0,7))}</code>`:``}function w(e){return e?[`reviewed ${vi(e)}`]:[]}function yi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:w(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:w(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...w(e.reviewedSha),..._i(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...w(e.reviewedSha),...t,..._i(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:w(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:w(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:w(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function bi(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 xi(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...w(e.reviewedSha),...i,...n?_i(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${v(si(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 Si(e){return`This review is based on ${vi(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Ci(e,t){if(!e.comparison)return``;let n=`<code>${v(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${vi(e.reviewedSha)}.`:`This review is based on ${vi(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 wi(e,t){if(!e.conversation.attached)return``;let n=v(si(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 Ti(e,t){let n=Ar(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Ei(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${Oi(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
|
|
66
66
|
|
|
67
|
-
`)}function
|
|
67
|
+
`)}function Di(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Ei)].join(`
|
|
68
68
|
|
|
69
|
-
`)}function
|
|
69
|
+
`)}function Oi(e){return e.split(`
|
|
70
70
|
`).map(e=>e===``?`>`:`> ${e}`).join(`
|
|
71
|
-
`)}function
|
|
72
|
-
<h3 class="prb-doc-title">${
|
|
71
|
+
`)}function ki(e){return e===`done`||e===`failed`}function Ai(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function ji(e,t=``){return`<div class="prb-doc-head">
|
|
72
|
+
<h3 class="prb-doc-title">${v(e)}</h3>
|
|
73
73
|
${t}
|
|
74
|
-
</div>`}var
|
|
75
|
-
<p><strong>This KISS review describes commit ${
|
|
74
|
+
</div>`}var Mi=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,Ni=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function Pi(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 Fi(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${v(t)}" aria-pressed="false" aria-label="${v(n)}" title="${v(n)}">${Pi(Mi,`prb-focus-expand`)}${Pi(Ni,`prb-focus-collapse`)}</button>`}Fi(`kiss`,`KISS review`),ji(`Recommendations`,Fi(`kissrecs`,`Recommendations`));var Ii={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Li(e,t){return t===`undecided`?`Open`:Ii[e][t]}function Ri(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 Bi(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 Vi(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
|
|
75
|
+
<p><strong>This KISS review describes commit ${v(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
|
|
76
76
|
</div>`;let i=t.rewritten?`The branch has been rewritten since, so this report describes commits that are no longer on it.`:t.newCommits===null?`The branch has moved on since.`:`There ${t.newCommits===1?`has been 1 commit`:`have been ${t.newCommits} commits`} on the branch since.`;return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" role="status">
|
|
77
|
-
<p><strong>This KISS review describes commit ${
|
|
77
|
+
<p><strong>This KISS review describes commit ${v(e.slice(0,7))}.</strong> ${v(i)}</p>
|
|
78
78
|
<p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below and your decisions about it are kept either way.</p>
|
|
79
|
-
<p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${
|
|
80
|
-
</div>`}var
|
|
79
|
+
<p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${v(t.latestSha)}">Not now</button>`:``}</p>
|
|
80
|
+
</div>`}var Hi=new WeakMap;function Ui(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function Wi(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{ea(e);let i=e.contains(document.activeElement);Gi(e,t),Qi(e,!0),qi(n),i&&$i(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Qi(e,!1),a){qi(n);return}Gi(e,r),qi(n),ta(e,t,n)},a=(Hi.get(e)??Promise.resolve()).then(i,i);return Hi.set(e,a),a}function Gi(e,t){e.dataset.decision=t;let n=Zi(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Li(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=Ii[n][r.dataset.kissDecide];Ki(e,t!==`undecided`)}function Ki(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 qi(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=Ri(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),Ji(t)}function Ji(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=Xi(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=Bi(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?Di(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function Yi(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),Ji(t))}function Xi(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function Zi(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Qi(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function $i(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 ea(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function ta(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 Wi(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 na(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 ra(e,t){t.complete!==void 0&&oa(e,t.complete),t.activity!==void 0&&ia(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&sa(e,aa(e)):sa(e,t.lifecycle??void 0),t.queued!==void 0&&ca(e,t.queued)}function ia(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 aa(e){let t=e.querySelector(`[data-review-menu]`);return oe(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function oa(e,t){let n=t?`complete`:`in-progress`,r=e.querySelector(`[data-page-status]`);r&&(r.dataset.status=n,r.textContent=l(n));let i=e.querySelector(`[data-review-menu] [data-mark-status]`);if(i){let e=t?`in-progress`:`complete`;i.dataset.markStatus=e,i.textContent=ae(e)}}function sa(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?la(n):void 0,a=e.querySelector(`[data-page-lifecycle]`);if(a){let e=o(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=!c(e,t,i),n.textContent=r(e,t,i)}}function ca(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 la(e){return u(e.dataset)}function ua(e){return oe(e)??null}function da(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:ua(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=d(i);e&&(a.activity=e)}return a}function fa(){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 pa=`The workspace server did not answer. It may have stopped.`;function ma(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?(ra(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:pa}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:ua(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:ua(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:pa}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,a=i&&r?.hasAttribute(`data-branch-actions`)===!0,o=r?oe({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,s=r?u(r.dataset):void 0,l=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,d=!n;return{reviewed:d&&i&&!l,waiting:d&&a&&c(`waiting`,o,s),done:d&&a&&c(`done`,o,s),queue:d&&a,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function ha(e,t){return`${e} ${t}${e===1?``:`s`}`}function ga(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?ha(e,`issue`):``,questions:t?ha(t,`question`):``}}function _a(e,t){let n=ga(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function va(e){return e===0?``:`${e} chosen`}function ya(e){let t=(e,t)=>{let n=t.map(e=>e.trim()).filter(Boolean);return n.length===0?null:`## ${e}\n\n${n.map((e,t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
|
|
81
81
|
|
|
82
82
|
`)}).join(`
|
|
83
83
|
|
|
84
84
|
`)}`};return[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean).join(`
|
|
85
85
|
|
|
86
|
-
`)}var ga=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>`;ga(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),ga(`<path d="M20 6 9 17l-5-5"/>`);var E=[`preview`,`markdown`],_a={issue:`issues`,question:`questions`},va=`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`;function ya({root:e,showView:t}){let n=!1,r={issue:new Set,question:new Set},i=null,a=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,o=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function s(t){return[...e.querySelectorAll(`[data-view="${_a[t]}"] [data-finding-card]`)].filter(e=>r[t].has(e.getAttribute(`data-finding-card`)??``)).map(e=>e.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``)}function c(){let t=r.issue.size,i=r.question.size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,n);for(let t of e.querySelectorAll(`[data-feedback-select]`))t.setAttribute(`aria-pressed`,String(n));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=o(t);t.checked=e!==null&&r[e].has(a(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!n;let e=fa(t,i),r=s.querySelector(`[data-feedback-total]`);r&&(r.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 a=s.querySelector(`[data-feedback-prepare]`);a&&(a.disabled=t+i===0)}for(let[r,a]of[[`issues`,t],[`questions`,i]]){let t=e.querySelector(`[data-rail-selected="${r}"]`);t&&(t.textContent=ma(a),t.hidden=!n||a===0)}}function l(){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?Ge(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function u(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(ht,t)}let d={enter(){n=!0,c()},exit(){n=!1,r.issue.clear(),r.question.clear(),c()},clear(){r.issue.clear(),r.question.clear(),c()},toggle(e,t,n){!t||r[e].has(t)===n||(n?r[e].add(t):r[e].delete(t),i=null,c())},flip(e){let t=e.querySelector(`[data-feedback-pick]`),i=t?o(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n||!i||!a?!1:(d.toggle(i,a,!r[i].has(a)),!0)},compose(){return ha({issues:s(`issue`),questions:s(`question`)})},prepare(){if(r.issue.size+r.question.size===0)return;i??=d.compose(),u(i);let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=pa(r.issue.size,r.question.size));let n=e.querySelector(`[data-feedback-dialog]`);n&&!n.open&&n.showModal(),d.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){for(let n of E){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.getElementById(`prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return l();let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)},state(){return{selecting:n,issues:[...r.issue],questions:[...r.question]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?o(t):null;t&&n&&d.toggle(n,a(t),t.checked)}),e.addEventListener(`input`,t=>{let n=t.target.closest(`[data-feedback-text]`);n&&(i!==null&&(i=n.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(ht,n.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n?d.exit():d.enter();if(i.closest(`[data-feedback-clear]`))return d.clear();if(i.closest(`[data-feedback-done]`))return d.exit();if(i.closest(`[data-feedback-prepare]`))return d.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 d.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(va)||(e.getSelection()?.isCollapsed??!0)&&d.flip(s)}),e.addEventListener(`keydown`,t=>{let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=E.indexOf(n),i=t.key===`ArrowRight`?E[(r+1)%E.length]:t.key===`ArrowLeft`?E[(r+E.length-1)%E.length]:t.key===`Home`?E[0]:t.key===`End`?E[E.length-1]:null;i&&(t.preventDefault(),d.showDraftTab(i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}),c(),d}function ba(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 xa(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&&!ba(t),run:()=>n()?.click()}}}function Sa(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 Ca(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function wa(e){let{doc:t}=e,n=ue({doc:t,item:`[data-finding-card]`,walk:()=>Sa(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:()=>Sa(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>Sa(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:()=>!Ca(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 Ta=`prb-rail-review`;function Ea(e){return(e.getElementById(Ta)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function Da(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function Oa(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function ka(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function Aa(e){return{title:`Choose a prompt`,mount(t,n){let r=t.ownerDocument,i=e.prompts(),a=r.createElement(`input`);a.type=`search`,a.className=`prb-palette-input`,a.placeholder=`Filter prompts`,a.setAttribute(`aria-label`,`Filter prompts`),a.spellcheck=!1;let o=r.createElement(`p`);o.className=`prb-palette-summary`,o.setAttribute(`aria-live`,`polite`);let s=r.createElement(`div`);s.className=`prb-palette-results`,s.setAttribute(`role`,`group`),s.setAttribute(`aria-label`,`Prompts`);let c=[],l=()=>[...s.querySelectorAll(`[data-prompt-choice]`)],u=()=>{let e=r.activeElement===a;for(let[t,n]of l().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},d=()=>{c=Da(i,a.value),s.replaceChildren(...c.map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-prompt`,n.dataset.promptChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=Oa(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-prompt-text`;let s=r.createElement(`span`);s.className=`prb-palette-result-title`,s.textContent=e.name;let c=r.createElement(`span`);return c.className=`prb-palette-prompt-said`,c.textContent=e.prompt,o.append(s,c),n.append(i,o),n})),o.textContent=i.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:c.length===0?`No prompts match.`:c.length===i.length?`${i.length} ${i.length===1?`prompt`:`prompts`}`:`${c.length} of ${i.length} prompts`,u()},f=t=>{!t||!c.some(e=>e.id===t)||(n(),e.choose(t))},ee=e=>{a.value=e===`Backspace`?a.value.slice(0,-1):a.value+e,a.focus(),a.dispatchEvent(new Event(`input`,{bubbles:!0}))};a.addEventListener(`input`,d),a.addEventListener(`focus`,u),a.addEventListener(`blur`,u),s.addEventListener(`click`,e=>{f(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=l(),n=e.target===a,r=t.indexOf(e.target),i=ka(e.key);if(i!==null)return e.preventDefault(),f(t[i]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),f((n?t[0]:t[r])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?r<0?t[0]:t[r+1]:r<=0?a:t[r-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),ee(e.key))}),t.append(a,o,s),d(),a.focus()}}}function ja(e,t=Date.now()){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return`${n} second${n===1?``:`s`}`;let r=Math.round(n/60);return`${r} minute${r===1?``:`s`}`}ji(`progress`,`Review progress`);var Ma={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function Na(e){let t=new Map;for(let n of Object.keys(Ma)){let r=Ma[n],i=e.querySelector(`[${r}]`);i&&!Ti(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Pa(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Ti(t.phase):Fa(t.phase,n)}function Fa(e,t){return Ti(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Ia(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||Ei(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 La(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${ja(n)}.`)}async function Ra({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`||Ti(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function za(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${y(e.scope)}" data-diagram-card="${y(e.scope)}">
|
|
86
|
+
`)}var ba=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>`;ba(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),ba(`<path d="M20 6 9 17l-5-5"/>`);var T=[`preview`,`markdown`],xa={issue:`issues`,question:`questions`},Sa=`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`;function Ca({root:e,showView:t}){let n=!1,r={issue:new Set,question:new Set},i=null,a=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,o=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function s(t){return[...e.querySelectorAll(`[data-view="${xa[t]}"] [data-finding-card]`)].filter(e=>r[t].has(e.getAttribute(`data-finding-card`)??``)).map(e=>e.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``)}function c(){let t=r.issue.size,i=r.question.size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,n);for(let t of e.querySelectorAll(`[data-feedback-select]`))t.setAttribute(`aria-pressed`,String(n));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=o(t);t.checked=e!==null&&r[e].has(a(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!n;let e=ga(t,i),r=s.querySelector(`[data-feedback-total]`);r&&(r.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 a=s.querySelector(`[data-feedback-prepare]`);a&&(a.disabled=t+i===0)}for(let[r,a]of[[`issues`,t],[`questions`,i]]){let t=e.querySelector(`[data-rail-selected="${r}"]`);t&&(t.textContent=va(a),t.hidden=!n||a===0)}}function l(){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?qe(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function u(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,t)}let d={enter(){n=!0,c()},exit(){n=!1,r.issue.clear(),r.question.clear(),c()},clear(){r.issue.clear(),r.question.clear(),c()},toggle(e,t,n){!t||r[e].has(t)===n||(n?r[e].add(t):r[e].delete(t),i=null,c())},flip(e){let t=e.querySelector(`[data-feedback-pick]`),i=t?o(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n||!i||!a?!1:(d.toggle(i,a,!r[i].has(a)),!0)},compose(){return ya({issues:s(`issue`),questions:s(`question`)})},prepare(){if(r.issue.size+r.question.size===0)return;i??=d.compose(),u(i);let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=_a(r.issue.size,r.question.size));let n=e.querySelector(`[data-feedback-dialog]`);n&&!n.open&&n.showModal(),d.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){for(let n of T){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.getElementById(`prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return l();let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)},state(){return{selecting:n,issues:[...r.issue],questions:[...r.question]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?o(t):null;t&&n&&d.toggle(n,a(t),t.checked)}),e.addEventListener(`input`,t=>{let n=t.target.closest(`[data-feedback-text]`);n&&(i!==null&&(i=n.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,n.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n?d.exit():d.enter();if(i.closest(`[data-feedback-clear]`))return d.clear();if(i.closest(`[data-feedback-done]`))return d.exit();if(i.closest(`[data-feedback-prepare]`))return d.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 d.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(Sa)||(e.getSelection()?.isCollapsed??!0)&&d.flip(s)}),e.addEventListener(`keydown`,t=>{let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=T.indexOf(n),i=t.key===`ArrowRight`?T[(r+1)%T.length]:t.key===`ArrowLeft`?T[(r+T.length-1)%T.length]:t.key===`Home`?T[0]:t.key===`End`?T[T.length-1]:null;i&&(t.preventDefault(),d.showDraftTab(i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}),c(),d}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 Ta(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 Ea(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 Da(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function Oa(e){let{doc:t}=e,n=de({doc:t,item:`[data-finding-card]`,walk:()=>Ea(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:()=>Ea(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>Ea(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:()=>!Da(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 ka=`prb-rail-review`;function Aa(e){return(e.getElementById(ka)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function ja(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function Ma(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function Na(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function Pa(e){return{title:`Choose a prompt`,mount(t,n){let r=t.ownerDocument,i=e.prompts(),a=r.createElement(`input`);a.type=`search`,a.className=`prb-palette-input`,a.placeholder=`Filter prompts`,a.setAttribute(`aria-label`,`Filter prompts`),a.spellcheck=!1;let o=r.createElement(`p`);o.className=`prb-palette-summary`,o.setAttribute(`aria-live`,`polite`);let s=r.createElement(`div`);s.className=`prb-palette-results`,s.setAttribute(`role`,`group`),s.setAttribute(`aria-label`,`Prompts`);let c=[],l=()=>[...s.querySelectorAll(`[data-prompt-choice]`)],u=()=>{let e=r.activeElement===a;for(let[t,n]of l().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},d=()=>{c=ja(i,a.value),s.replaceChildren(...c.map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-prompt`,n.dataset.promptChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=Ma(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-prompt-text`;let s=r.createElement(`span`);s.className=`prb-palette-result-title`,s.textContent=e.name;let c=r.createElement(`span`);return c.className=`prb-palette-prompt-said`,c.textContent=e.prompt,o.append(s,c),n.append(i,o),n})),o.textContent=i.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:c.length===0?`No prompts match.`:c.length===i.length?`${i.length} ${i.length===1?`prompt`:`prompts`}`:`${c.length} of ${i.length} prompts`,u()},f=t=>{!t||!c.some(e=>e.id===t)||(n(),e.choose(t))},ee=e=>{a.value=e===`Backspace`?a.value.slice(0,-1):a.value+e,a.focus(),a.dispatchEvent(new Event(`input`,{bubbles:!0}))};a.addEventListener(`input`,d),a.addEventListener(`focus`,u),a.addEventListener(`blur`,u),s.addEventListener(`click`,e=>{f(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=l(),n=e.target===a,r=t.indexOf(e.target),i=Na(e.key);if(i!==null)return e.preventDefault(),f(t[i]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),f((n?t[0]:t[r])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?r<0?t[0]:t[r+1]:r<=0?a:t[r-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),ee(e.key))}),t.append(a,o,s),d(),a.focus()}}}function Fa(e,t=Date.now()){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return`${n} second${n===1?``:`s`}`;let r=Math.round(n/60);return`${r} minute${r===1?``:`s`}`}Fi(`progress`,`Review progress`);var Ia={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function La(e){let t=new Map;for(let n of Object.keys(Ia)){let r=Ia[n],i=e.querySelector(`[${r}]`);i&&!ki(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Ra(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||ki(t.phase):za(t.phase,n)}function za(e,t){return ki(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Ba(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||Ai(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 Va(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${Fa(n)}.`)}async function Ha({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`||ki(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function Ua(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${v(e.scope)}" data-diagram-card="${v(e.scope)}">
|
|
87
87
|
<header class="prb-diagram-head">
|
|
88
88
|
<div class="prb-diagram-heading">
|
|
89
89
|
<h4 class="prb-diagram-title">
|
|
90
90
|
<button type="button" class="prb-diagram-toggle" data-diagram-toggle aria-expanded="true">
|
|
91
91
|
<span class="prb-diagram-disclosure" aria-hidden="true">▼</span>
|
|
92
|
-
<span>${
|
|
92
|
+
<span>${v(e.title)}</span>
|
|
93
93
|
</button>
|
|
94
94
|
</h4>
|
|
95
|
-
<p class="prb-diagram-scope">${
|
|
95
|
+
<p class="prb-diagram-scope">${v(r)}</p>
|
|
96
96
|
</div>
|
|
97
97
|
<div class="prb-diagram-tools">
|
|
98
98
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="out" aria-label="Zoom out">−</button>
|
|
99
99
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="reset">Fit</button>
|
|
100
100
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="in" aria-label="Zoom in">+</button>
|
|
101
|
-
<button type="button" class="prb-diagram-redraw" data-diagram-request="${
|
|
101
|
+
<button type="button" class="prb-diagram-redraw" data-diagram-request="${v(i)}">Regenerate</button>
|
|
102
102
|
</div>
|
|
103
103
|
</header>
|
|
104
|
-
${e.caption?`<p class="prb-diagram-caption">${
|
|
105
|
-
${
|
|
104
|
+
${e.caption?`<p class="prb-diagram-caption">${v(e.caption)}</p>`:``}
|
|
105
|
+
${Wa(e,n)}
|
|
106
106
|
<div class="prb-diagram-canvas" data-diagram-canvas></div>
|
|
107
107
|
<details class="prb-diagram-source">
|
|
108
108
|
<summary>Diagram source</summary>
|
|
109
|
-
<div class="${
|
|
109
|
+
<div class="${pe}"><pre><code data-mermaid-source>${v(e.mermaid)}</code></pre><button type="button" class="${me}" aria-label="Copy code">Copy</button></div>
|
|
110
110
|
</details>
|
|
111
|
-
</article>`}function
|
|
111
|
+
</article>`}function Wa(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${v(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var Ga=.5,Ka=3,qa=1.25,Ja=new WeakSet,Ya=new WeakMap,Xa=new WeakMap,E=null;function Za(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{E?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){uo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){mo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?$a(e):o&&Qa(e,o.dataset.diagramRequest||null)}),ro(),eo(),{drawPane:fo}}async function Qa(e,t){if(E)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${So(n)}"]`)??null??oo(r,n,t);if(!i)return;io(),e.showDiagrams();let a=so(i);E=new AbortController,_o(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:E.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return co(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);lo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),io()):a.remove();return}co(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{E=null,_o(!0)}}async function $a(e){if(E)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=to(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),E=new AbortController,_o(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:E.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){no(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),io()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}no(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),E=null,_o(!0)}}function eo(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(to(e),_o(!1))}function to(e){e.parentElement?.querySelector(`[data-map-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-map-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the review and the change…</span>`;let n=document.createElement(`button`);return n.type=`button`,n.className=`prb-diagram-redraw`,n.setAttribute(`data-diagram-stop`,``),n.textContent=`Stop`,t.appendChild(n),e.before(t),t}function no(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function ro(){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="${So(n)}"]`)??oo(e,n,t);r&&(io(),so(r,{scroll:!1}),_o(!1))}function io(){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;ao(`map`,t>0),ao(`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 ao(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 oo(e,t,n){if(!e)return null;let r=document.createElement(`article`);return r.className=`prb-diagram`,r.dataset.diagramCard=t,r.setAttribute(`data-diagram-pending`,``),r.innerHTML=`<header class="prb-diagram-head">
|
|
112
112
|
<div class="prb-diagram-heading">
|
|
113
113
|
<h4 class="prb-diagram-title">Drawing…</h4>
|
|
114
|
-
<p class="prb-diagram-scope">${t===`change`?`Whole change`:
|
|
114
|
+
<p class="prb-diagram-scope">${t===`change`?`Whole change`:xo(vo(n))}</p>
|
|
115
115
|
</div>
|
|
116
|
-
</header>`,
|
|
116
|
+
</header>`,yo(e,r,n),r}function so(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:Co()?`auto`:`smooth`,block:`start`}),n}function co(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 lo(e,t,n){let r=Ua(t,new Map(n?[[n,vo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),io(),po(a))}function uo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||po(e))}function fo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))po(e)}async function po(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Ja.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Ja.add(e);try{await Ht(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{Ja.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 mo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Xa.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=ho(e,n);if(i<=0)return;let a=go((Xa.get(e)??1)*(t===`in`?qa:1/qa));Xa.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function ho(e,t){let n=Ya.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Ya.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function go(e){return Math.min(Ka,Math.max(Ga,e))}function _o(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function vo(e){return e?document.querySelector(`[data-goto-section="${So(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function yo(e,t,n){let r=bo(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(bo(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function bo(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${So(e)}"]`);return Number(t?.dataset.themeIndex??0)}function xo(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function So(e){return CSS.escape(e)}function Co(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var wo=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],To=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],D={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Eo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Do(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}=Oo(t.nodes);return{schemaVersion:1,title:Po(S(t.title).trim(),D.mapTitle)||`Change map`,intent:Ao(t.intent,D.intent)??{simple:``,technical:``},nodes:n,edges:ko(t.edges,r)}}function Oo(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=Ao(e.title,D.title);if(!a)continue;let o=S(e.id).trim()||a.technical;if(t.has(o))continue;let s=No(Mo(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=wo.includes(e.role)?e.role:`concept`,l=Ao(e.why,D.why),u=Po(S(e.anchor).trim(),D.anchor),d=S(e.sectionId).trim();r.push({id:s,role:c,stage:jo(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:Ao(e.body,D.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function ko(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=Ao(e.label,D.label),a=t.get(S(e.from).trim())??S(e.from).trim(),o=t.get(S(e.to).trim())??S(e.to).trim();if(!i||!a||!o)continue;let s=Ao(e.note,D.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function Ao(e,t){if(typeof e==`string`){let n=Po(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Po(S(n.simple).trim(),t),i=Po(S(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function jo(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Eo[t]}function Mo(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function No(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Po(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 Fo(e,t){try{return Io(Do(e),t).map}catch{return null}}function Io(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=zo(Lo(e.nodes,n).map(e=>Ro(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:Bo(r),edges:o},audit:n}}function Lo(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 Ro(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 zo(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function Bo(e){return[...e].sort((e,t)=>e.stage-t.stage)}function Vo(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?Fo(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Ho(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
|
|
117
117
|
<header class="prb-map-head">
|
|
118
118
|
<div class="prb-map-heading">
|
|
119
|
-
<h4 class="prb-map-title">${
|
|
120
|
-
${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${
|
|
119
|
+
<h4 class="prb-map-title">${v(a.title)}</h4>
|
|
120
|
+
${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${O(a.intent)}</p>`:``}
|
|
121
121
|
</div>
|
|
122
122
|
<div class="prb-map-tools">
|
|
123
|
-
${
|
|
123
|
+
${Uo(i)}
|
|
124
124
|
<button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
|
|
125
125
|
</div>
|
|
126
126
|
</header>
|
|
127
127
|
<p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
|
|
128
|
-
${
|
|
129
|
-
${
|
|
130
|
-
</div>`}function
|
|
128
|
+
${Wo(a,s)}
|
|
129
|
+
${Jo(a)}
|
|
130
|
+
</div>`}function Ho(e){return`<div class="prb-map-empty" data-change-map-empty>
|
|
131
131
|
${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
|
|
132
132
|
<h4 class="prb-map-empty-title">See the change as a map</h4>
|
|
133
133
|
<p>See how the main ideas in this change connect, what depends on what, and where the important risks are. Each idea links back to its theme in the Review Path.</p>
|
|
134
134
|
<p class="prb-map-empty-note">Buddy AI builds it from this review, in plain words and technical ones. It takes a minute or two.</p>
|
|
135
135
|
<button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
|
|
136
|
-
</div>`}function
|
|
137
|
-
<h5 class="prb-map-stage-title">${
|
|
138
|
-
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>
|
|
139
|
-
</div>`).join(``),i=e.edges.map((e,t)=>
|
|
136
|
+
</div>`}function Uo(e){let t=(t,n)=>`<button type="button" class="prb-map-register" data-map-register-option="${t}" aria-pressed="${e===t}">${n}</button>`;return`<div class="prb-map-registers" role="group" aria-label="Wording">${t(`simple`,`Simple`)}${t(`technical`,`Technical`)}</div>`}function Wo(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
|
|
137
|
+
<h5 class="prb-map-stage-title">${v(To[n]??``)}</h5>
|
|
138
|
+
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Ko(n,t,e)).join(``)}
|
|
139
|
+
</div>`).join(``),i=e.edges.map((e,t)=>qo(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
|
|
140
140
|
<svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
|
|
141
141
|
${r}
|
|
142
142
|
<div class="prb-map-labels" aria-hidden="true">${i}</div>
|
|
143
|
-
</div>`}var
|
|
144
|
-
<p class="prb-map-role">${
|
|
145
|
-
<h5 class="prb-map-node-title" id="prb-map-node-${r}">${
|
|
146
|
-
${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${
|
|
147
|
-
${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${
|
|
148
|
-
${e.anchor?`<code class="prb-map-anchor">${
|
|
143
|
+
</div>`}var Go={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Ko(e,t,n){let r=v(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${O(e.label)}</em> <span aria-hidden="true">→</span> ${O(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
|
|
144
|
+
<p class="prb-map-role">${Go[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
|
|
145
|
+
<h5 class="prb-map-node-title" id="prb-map-node-${r}">${O(e.title)}</h5>
|
|
146
|
+
${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${O(e.body)}</p>`:``}
|
|
147
|
+
${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${O(e.why)}</p>`:``}
|
|
148
|
+
${e.anchor?`<code class="prb-map-anchor">${v(e.anchor)}</code>`:``}
|
|
149
149
|
${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
|
|
150
|
-
${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${
|
|
151
|
-
</article>`}function
|
|
150
|
+
${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${v(e.sectionId)}" aria-label="Open ${v(i)} in the Review Path">Review Path: ${v(i)} <span aria-hidden="true">→</span></button>`:``}
|
|
151
|
+
</article>`}function qo(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${v(e.from)}" data-to="${v(e.to)}">${O(e.label)}</span>`}function Jo(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
|
|
152
152
|
<summary>Read as a list</summary>
|
|
153
|
-
<ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${
|
|
154
|
-
</details>`}function k(e){return e.simple===e.technical?de(e.simple):`<span data-reg="simple">${de(e.simple)}</span><span data-reg="technical">${de(e.technical)}</span>`}var Go=`http://www.w3.org/2000/svg`,Ko=new WeakSet,qo=new WeakMap;function Jo(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){ss(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:Yo,show:Xo}}function Yo(){for(let e of document.querySelectorAll(`[data-map-board]`))Zo(e),Qo(e)}function Xo(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Lo({stored:e,sections:ls(),reviewedSha:e.commitSha,register:cs()}),Yo())}function Zo(e){if(Ko.has(e)||typeof ResizeObserver>`u`)return;Ko.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Qo(e)}))}).observe(e)}function Qo(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(as());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?$o(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),te=[...o.values()],p=e.clientWidth,m=qo.get(e),ne=m&&m.width===p?m.edges:new Set;qo.set(e,{width:p,edges:ne});let h=(t,n)=>{n&&ne.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(ne.has(o)){e.hidden=!0,h(o,!0);return}let s=es(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=es(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ns(s,i.from,c,i.to),[u,p,m,re]=l,ie=te.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>rs(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,h(o,!0);return}let g=document.createElementNS(Go,`path`);g.setAttribute(`d`,`M${A(u.x)},${A(u.y)} C${A(p.x)},${A(p.y)} ${A(m.x)},${A(m.y)} ${A(re.x)},${A(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let ae=e.offsetWidth,oe=e.offsetHeight,_=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=rs(l,e);return{left:t.x-ae/2,top:t.y-oe/2,right:t.x+ae/2,bottom:t.y+oe/2}}).find(e=>![...te,...ee,...f].some(t=>is(e,t,2)));if(!_){g.remove(),e.hidden=!0,h(o,!0);return}h(o,!1),f.push(_),e.style.left=`${Math.round(_.left)}px`,e.style.top=`${Math.round(_.top)}px`}),e.setAttribute(`data-laid-out`,``)}function $o(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function es(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var ts={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ns(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=ts[t],s=ts[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 rs([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 is(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function A(e){return Math.round(e*10)/10}function as(){let e=document.createElementNS(Go,`defs`),t=document.createElementNS(Go,`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(Go,`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 ss(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));Yo(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function cs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function ls(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var us=`repository`,j={minCharacters:8,maxLines:3,maxCharacters:400},ds=[`app`,`service`,`component`,`store`,`external`,`group`],fs=/^[a-z][a-z0-9-]*$/;function ps(e){let t=[];if(!xs(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};Cs(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=Ss(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=ws(n.title,`architecture.title`,t),i=Ts(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=ms(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>xs(e)&&typeof e.id==`string`&&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)M(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=hs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(M(a,c).includes(d)||M(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function M(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function ms(e,t,n){if(!xs(e))return n.push(`${t} must be an object.`),null;Cs(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=Ss(e,[`parent`,`description`,`owns`],t,n),i=Es(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${us}": that name is kept for the whole repository. Choose another id.`);let a=ws(r.name,`${t}.name`,n),o=ds.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${ds.join(`, `)}.`);let s=r.parent===void 0?void 0:Es(r.parent,`${t}.parent`,n),c=Ts(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:gs(r.owns,`${t}.owns`,n),u=_s(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function hs(e,t,n){if(!xs(e))return n.push(`${t} must be an object.`),null;Cs(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=Ss(e,[`description`,`confidence`],t,n),i=Es(r.id,`${t}.id`,n),a=Es(r.source,`${t}.source`,n),o=Es(r.target,`${t}.target`,n),s=ws(r.label,`${t}.label`,n),c=Ts(r.description,`${t}.description`,n),l=_s(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function gs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=ws(e,`${t}[${i}]`,n);a!==null&&(!bs(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function _s(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!xs(e)){n.push(`${a} must be an object.`);return}Cs(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=Ss(e,[`symbol`,`line`,`note`],a,n);let o=ws(e.path,`${a}.path`,n);o!==null&&!bs(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=vs(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=Ds(e.line,`${a}.line`,n),u=Ts(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 vs(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${j.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=ys(r);return r.split(`
|
|
155
|
-
`).length>
|
|
156
|
-
`),nodes:r,edges:u}}function
|
|
153
|
+
<ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${O(n)}</strong> <em>${O(e.label)}</em> <strong>${O(r)}</strong>${e.note?`<span class="prb-map-note"> — ${O(e.note)}</span>`:``}</li>`}).join(``)}</ol>
|
|
154
|
+
</details>`}function O(e){return e.simple===e.technical?fe(e.simple):`<span data-reg="simple">${fe(e.simple)}</span><span data-reg="technical">${fe(e.technical)}</span>`}var Yo=`http://www.w3.org/2000/svg`,Xo=new WeakSet,Zo=new WeakMap;function Qo(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){ds(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&&us(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&&us(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`)&&(us(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:$o,show:es}}function $o(){for(let e of document.querySelectorAll(`[data-map-board]`))ts(e),ns(e)}function es(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Vo({stored:e,sections:ps(),reviewedSha:e.commitSha,register:fs()}),$o())}function ts(e){if(Xo.has(e)||typeof ResizeObserver>`u`)return;Xo.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,ns(e)}))}).observe(e)}function ns(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(ls());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?rs(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),te=[...o.values()],p=e.clientWidth,m=Zo.get(e),ne=m&&m.width===p?m.edges:new Set;Zo.set(e,{width:p,edges:ne});let h=(t,n)=>{n&&ne.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(ne.has(o)){e.hidden=!0,h(o,!0);return}let s=is(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=is(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=os(s,i.from,c,i.to),[u,p,m,re]=l,ie=te.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>ss(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,h(o,!0);return}let g=document.createElementNS(Yo,`path`);g.setAttribute(`d`,`M${k(u.x)},${k(u.y)} C${k(p.x)},${k(p.y)} ${k(m.x)},${k(m.y)} ${k(re.x)},${k(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let ae=e.offsetWidth,oe=e.offsetHeight,se=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=ss(l,e);return{left:t.x-ae/2,top:t.y-oe/2,right:t.x+ae/2,bottom:t.y+oe/2}}).find(e=>![...te,...ee,...f].some(t=>cs(e,t,2)));if(!se){g.remove(),e.hidden=!0,h(o,!0);return}h(o,!1),f.push(se),e.style.left=`${Math.round(se.left)}px`,e.style.top=`${Math.round(se.top)}px`}),e.setAttribute(`data-laid-out`,``)}function rs(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function is(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var as={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function os(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=as[t],s=as[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 ss([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 cs(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function k(e){return Math.round(e*10)/10}function ls(){let e=document.createElementNS(Yo,`defs`),t=document.createElementNS(Yo,`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(Yo,`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 us(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 ds(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));$o(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function fs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function ps(){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`,hs={minCharacters:8,maxLines:3,maxCharacters:400},gs=[`app`,`service`,`component`,`store`,`external`,`group`],_s=/^[a-z][a-z0-9-]*$/;function vs(e){let t=[];if(!Ds(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};ks(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=Os(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=As(n.title,`architecture.title`,t),i=js(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=bs(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>Ds(e)&&typeof e.id==`string`&&_s.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)ys(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=xs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(ys(a,c).includes(d)||ys(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 ys(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function bs(e,t,n){if(!Ds(e))return n.push(`${t} must be an object.`),null;ks(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=Os(e,[`parent`,`description`,`owns`],t,n),i=Ms(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=As(r.name,`${t}.name`,n),o=gs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${gs.join(`, `)}.`);let s=r.parent===void 0?void 0:Ms(r.parent,`${t}.parent`,n),c=js(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Ss(r.owns,`${t}.owns`,n),u=Cs(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function xs(e,t,n){if(!Ds(e))return n.push(`${t} must be an object.`),null;ks(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=Os(e,[`description`,`confidence`],t,n),i=Ms(r.id,`${t}.id`,n),a=Ms(r.source,`${t}.source`,n),o=Ms(r.target,`${t}.target`,n),s=As(r.label,`${t}.label`,n),c=js(r.description,`${t}.description`,n),l=Cs(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 Ss(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=As(e,`${t}[${i}]`,n);a!==null&&(!Es(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 Cs(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(!Ds(e)){n.push(`${a} must be an object.`);return}ks(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=Os(e,[`symbol`,`line`,`note`],a,n);let o=As(e.path,`${a}.path`,n);o!==null&&!Es(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=ws(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=Ns(e.line,`${a}.line`,n),u=js(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function ws(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${hs.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Ts(r);return r.split(`
|
|
155
|
+
`).length>hs.maxLines||r.length>hs.maxCharacters?(n.push(`${t} must be at most ${hs.maxLines} lines and ${hs.maxCharacters} characters.`),null):i.length<hs.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${hs.minCharacters} characters.`),null):r}function Ts(e){return e.replace(/\s+/g,` `).trim()}function Es(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function Ds(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Os(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 ks(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function As(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function js(e,t,n){if(e!==void 0)return As(e,t,n)??void 0}function Ms(e,t,n){if(typeof e==`string`&&_s.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 Ns(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 Ps(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,...ys(t,n)],i=e=>t!==null&&ys(e,n).includes(t),a=e=>{let a=[e,...ys(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 Fs={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function Is(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 Ls(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]=Fs[e.kind],r=e.detail?`${Is(e.name)}<br>${Is(e.detail)}`:Is(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["${Is(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}|"${Is(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
|
|
156
|
+
`),nodes:r,edges:u}}function Rs(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=Ps(e,t),a=r===0&&t===null?`# ${zs(e.title)}`:`## ${zs(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=Ls(i,{edgeIds:!1}).source;return[a,...o?[zs(o)]:[],["```mermaid",s,"```"].join(`
|
|
157
157
|
`)].join(`
|
|
158
158
|
|
|
159
159
|
`)}).join(`
|
|
160
160
|
|
|
161
|
-
`)}\n`}function
|
|
162
|
-
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var
|
|
161
|
+
`)}\n`}function zs(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var Bs={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 Vs(e){return Bs[e.stage]}var Hs={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},Us=5e3;function Ws(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&&Ks(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&qs(e,r,r.dataset.architectureStop||`repository`)}),Ys(e,()=>{r()?Gs():n=!0});async function i(){if(n)return Gs();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 ec(r,`The architecture could not be read.`)}let s=vs(o.architecture);if(!s.ok)return ec(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=vs(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Zs({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&&Xs(r,c,l)}),d}return{show:i}}function Gs(){let e=er(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function Ks(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 Gs();Js(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{Js(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function qs(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 Gs();Js(t,`Mapping could not be stopped.`)}catch{Js(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function Js(e,t){let n=A(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function Ys(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}=Vs(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(),Us)};window.setTimeout(()=>void r(),Us)}async function Xs(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=>Rs(e.architecture,[null,...r(e.architecture)])).join(`
|
|
162
|
+
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Zs=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await _(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return ec(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&&$s(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&$s(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),ec(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(...Qs(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(A(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;tc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(A(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=A(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Qs(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(A(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(A(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=A(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=A(`details`,`prb-arch-failure-details`,``),n=A(`ul`,``,``);for(let e of r.errors)n.append(A(`li`,``,e));e.append(A(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Qs(e,t,n){let r=t?[A(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,A(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=A(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[A(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function $s(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?[]:[...ys(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=A(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[A(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function ec(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function tc(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=A(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[A(`p`,`prb-arch-kind`,`${Hs[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),A(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(A(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=A(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(nc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(A(`h5`,`prb-arch-subhead`,`Relationships`));let e=A(`ul`,`prb-arch-related`,``);for(let t of d)e.append(A(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(A(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=A(`section`,`prb-arch-relationship`,``);n.append(A(`p`,`prb-arch-kind`,`Relationship`),A(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(A(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(A(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(nc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function nc(e,t=[]){let n=A(`div`,`prb-arch-evidence`,``);n.append(A(`h5`,`prb-arch-subhead`,`Evidence`));let r=A(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=A(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=A(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(A(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(A(`span`,`prb-arch-location`,e.path),A(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(A(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(A(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function A(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}function rc(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}var ic=1e3,ac=new WeakMap;function oc(e,t){return e.length<=1e3?rc(e)||` `:`${rc(e.slice(0,ic))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function sc(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 cc(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?sc(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(sc(a)),i.join(``)}function lc(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 uc(e,t){let n=new Map;for(let e of t.deletions??[])for(let t of e.lines)n.set(t.oldLine,t.text);for(let r of e.querySelectorAll(`[data-full-line]`)){let[e,i]=(r.dataset.fullLine??``).split(`:`),a=Number(i),o=e===`old`?n.get(a):t.lines[a-t.from];o!==void 0&&ac.set(r,o)}}function dc(e){let t=ac.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function fc(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 mc(e,t){if(e.length===0)return``;let n=e.map(fc),r=n.indexOf(t),i=n.some(e=>e<t),a=n.some(e=>e>t),o=e.length,s=r===-1?`${o} ${o===1?`change`:`changes`}`:`${r+1} of ${o}`;return`<span class="prb-code-nav" data-change-navigator data-change-keys="${n.join(`,`)}" data-change-position="${t}">
|
|
163
163
|
<button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
|
|
164
164
|
<span class="prb-code-nav-count" aria-live="polite">${s}</span>
|
|
165
165
|
<button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
|
|
166
|
-
</span>`}function
|
|
167
|
-
`),r);if(a()){o&&t.lines.forEach((e,n)=>{
|
|
168
|
-
`),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;
|
|
166
|
+
</span>`}function hc(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 gc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function _c(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(pc)}function vc(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 yc(e,t){return Math.max(e,+!t)+1}var bc=8;function xc(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 Sc(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Cc(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 wc(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Tc(e){if(!e.hasAttribute(`data-expanded`))return;let t=xc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=Sc({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Ec(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 Dc=!1;function Oc(){Dc||(Dc=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Tc(e)}))}function kc(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Cc(n):null;t?(e.setAttribute(`data-expanded`,``),Tc(e),Oc()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Ec(e),n&&r&&wc(n,r);let i=t?xc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-bc)}var Ac={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 jc(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Ac[t.slice(n+1).toLowerCase()]??null}function Mc(e){let t=new Set;for(let n of e){let e=jc(n);e&&t.add(e)}return[...t]}var Nc={ruby:()=>_(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>_(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>_(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>_(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>_(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>_(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>_(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>_(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>_(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>_(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>_(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>_(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>_(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>_(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>_(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>_(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>_(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>_(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>_(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>_(()=>import(`./chunk-DswuEJGm.js`),[])},Pc=`github-light-default`,Fc=null,Ic=new Map;function Lc(){return Fc??=Promise.all([_(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),_(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),_(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(_(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Fc}function Rc(e){let t=Ic.get(e);return t||(t=Lc().then(async t=>t?(await t.loadLanguage(Nc[e]),!0):!1).catch(()=>!1),Ic.set(e,t)),t.then(e=>e?Lc():null)}var zc={async preload(e){await Rc(e)},async tokenize(e,t){let n=await Rc(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Pc}),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 Bc(e,t=zc){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Vc=/^#[0-9a-f]{3,8}$/i;function Hc(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Vc.test(e.color)?`<span style="color:${e.color}">${rc(e.content)}</span>`:rc(e.content)).join(``)}function Uc(e){return e.length>1e3?e.slice(0,ic):e}function Wc(e,t,n){if(!e||t===``)return;let r=Hc(Uc(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 Gc(e,t,n=zc){let r=jc(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(Uc).join(`
|
|
167
|
+
`),r);if(a()){o&&t.lines.forEach((e,n)=>{Wc(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=>Uc(e.text)).join(`
|
|
168
|
+
`),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;Wc(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Kc(e,t=zc){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Nc)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Hc(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var qc=f({ownsRestore:!0}),j=document.body,Jc=j.dataset.apiBase??``,Yc=j.dataset.token??``,Xc=j.dataset.editorLabel??``,Zc=j.dataset.editorTemplate??``,Qc=j.dataset.repoPath??``,$c=j.dataset.explainPrompt??``,el=j.dataset.sessionId??``;function M(e){return`${Jc}${e}?t=${encodeURIComponent(Yc)}`}function N(e){fetch(M(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var tl=Za({endpoint:M,showDiagrams:()=>I(`diagram`),showMap:()=>I(`map`),showChangeMap:e=>nl.show(e)}),nl=Qo({endpoint:M,showView:e=>I(e)}),rl=Ws({endpoint:M}),il=null,al=`the whole change`;function ol(e){let t=nr(e,ll),n=qc.push(Zn(t),t);sl++,ul(t),n&&cl(t)}var sl=0;function cl(t){let n=(t.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(t.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(t.view)}"] .prb-rail-title`))?.textContent?.trim();n&&e(document,n)}var P=null,ll=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function ul(e){let t=nr(e,ll);if(t!==e){let{kind:e,view:n,focus:r,...i}=re(history.state);qc.replace(Zn(t),{...i,...t})}let n=!P||!lr(P,t);P=t,n&&(t.kind===`view`?hl(t.view):yl(t.sectionId)),fl(t.focus??null)}var dl={history:{get state(){return history.state},pushState:(e,t,n)=>{sl++,qc.push(n,re(e))},replaceState:(e,t,n)=>qc.replace(n,re(e)),back:()=>history.back()},apply:ul},F=ue(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Ru(e):zu(e),onClose:zu});function fl(e){pr(document.querySelector(`.prb-body`),document,e),F.closeAll(),e===`buddy`&&au()}function pl(e){P&&(P.focus===e?dr(P,dl):ur(P,e,dl))}function I(e,t={}){let n=t.keepFocus&&P?.focus?e:$n(e,P?.focus);ol({kind:`view`,view:e,...n?{focus:n}:{}})}function ml(e){ol({kind:`section`,sectionId:e,...P?.focus===`guide`?{focus:`guide`}:{}})}function hl(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`&&N({event:`view_opened`,view:e}),e===`diagram`&&tl.drawPane(),e===`map`&&nl.layout(),e===`architecture`&&rl.show(),gl(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function gl(){Lr(),il=null,al=`the whole change`,bl()}function _l(e,t){let n=document.getElementById(e.getAttribute(`aria-controls`)??``);n&&(e.setAttribute(`aria-expanded`,String(t)),e.setAttribute(`aria-label`,`${t?`Collapse`:`Expand`} ${e.dataset.railToggle??`this section`}`),n.hidden=!t)}function vl(){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`)&&_l(e,!0)}}function yl(e){hl(`guide`),vl(),Ir(e);let t=Pr(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);N({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),il=e,al=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,bl()}function bl(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=al)}function L(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function xl(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Sl(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}=xl(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),N({event:`file_opened`,fromFinding:i,targeted:r>0}),await wl(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var Cl=Kr();function wl(e,t,n){return Cl.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${M(`/file`)}${a}`),s=await o.json();return o.ok?()=>Tl(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${L(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function Tl(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=cc(t,r),s=Zc&&Qc?t.checkout===`absent`?`<button type="button" class="prb-code-open" disabled>Not in your working folder</button>`:`<button type="button" class="prb-code-open" data-open-editor="${L(t.path)}" data-open-line="${r||t.from}">${L(`Open in ${Xc||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${L(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${L(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${L(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${yc(a,i)}">Show more of this file</button>`:``,u=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,d=t.changes===`unavailable`?` · change details unavailable`:``,f=`<div class="prb-code-source"><span>${t.source===`commit`?`Viewing reviewed version${t.sourceSha?` <code>${L(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${mc(t.changeAnchors??[],n.position)}</div>`,ee=e.hasAttribute(`data-expanded`),te=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${ee}">${ee?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
|
|
169
169
|
<span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
|
|
170
170
|
${c}
|
|
171
171
|
${s}
|
|
@@ -173,7 +173,7 @@ import{B as e,D as t,E as n,F as r,G as i,H as a,I as o,K as s,L as c,N as l,P a
|
|
|
173
173
|
</div>
|
|
174
174
|
${f}
|
|
175
175
|
<div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
|
|
176
|
-
${l}`,ic(e,t),yc(e),bc(e),(n.focus?uc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),zc(e,t)}async function xl(e,t,n){let r=lc(t,n);if(!r)return;let i=uc(e,r.anchor);if(i)t.outerHTML=cc(dc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await yl(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function Sl(e,t,n){let r=`${qc.replace(/\/$/,``)}/${e}`,i=Kc.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&F({event:`editor_opened`,fromFinding:n}),window.location.href=i}var B=document.querySelector(`[data-ask-log]`);B&&B.querySelector(`.prb-msg`)&&B.scrollTo({top:B.scrollHeight});var Cl=document.querySelector(`[data-ask-form]`),V=Cl?.querySelector(`textarea`);function wl(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=Ge(t)+_t(t)):n.textContent=t,B?.appendChild(n),B?.scrollTo({top:B.scrollHeight}),n}function Tl(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight}),e}var H=null,El=!!B?.querySelector(`[data-ask-pending]`);function Dl(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function Ol(e,t=`free_text`,n={}){let r=e.trim();if(!r||H||El)return;document.querySelector(`.prb-ask-empty`)?.remove(),wl(`user`,r);let i=Tl();H=new AbortController,Al(!0);try{let e=await fetch(P(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:$c,source:t,...n}),signal:H.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){kl(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){Dl();return}if(!e.ok||!a?.answer){wl(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}wl(`assistant`,a.answer),a.explanation&&Ln(document,a.explanation)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(Dl(),kl(r,n.continuesExplanation)):(wl(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),kl(r,n.continuesExplanation))}finally{H=null,Al(!1)}}function kl(e,t){!V||V.value||(V.value=e,Qd?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},Qd?.stage(U)))}function Al(e){let t=Cl?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(jl))t.disabled=e;e&&L.closeAll(),e||V?.focus()}var jl=`[data-suggestion], .pr-helper-explain-simply-button`;function Ml(){let e=Cl?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(P(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{H?.abort()})}Cl?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||El)return Ml();let t=V?.value??``;V&&(V.value=``),Qd?.clear();let n=Bn(U,t);Ol(t,Nl(t),n?{continuesExplanation:n}:{})}),El&&Al(!0);var U=null;function Nl(e){return U&&e.includes(U.text)?U.source:`free_text`}V?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),H||El)return;Cl?.requestSubmit()}}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function Pl(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Fl(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Il(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&&Hl(n,t,`questions`),Jl()}function Ll(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Yc})).filter(e=>e.id)}async function Rl(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function zl(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Yc: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(Bl()),Hl(n,t||e.dataset.settled===`true`,`issues`),Xl())}function Bl(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=pr,e.textContent=`Dismissed by you`,e}var Vl=new WeakMap;function Hl(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Vl.set(e,{parent:t,before:e.nextElementSibling}),Kl(n).append(e),t&&Gl(t)}else Ul(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();ql(n)}}function Ul(e,t){let n=Vl.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Wl(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Wl(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Gl(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Kl(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 ql(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;if(t.toggleAttribute(`data-nothing-open`,r===i),e===`questions`){n.textContent=`Answered (${i})`;return}n.textContent=Or(Yl())}function Jl(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=kr(e.length,t)),Zl(`questions`,e.length,t,`question`,`answered`)}function Yl(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0;for(let r of e){let e=r.dataset.settled===`true`,i=r.dataset.dismissed===`true`&&r.dataset.stale!==`true`;!e&&!i?t+=1:!e&&i&&(n+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n}}function Xl(){let e=Yl();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=Dr(e.total,e.open,fr(e))),Zl(`issues`,e.total,e.open,`issue`,fr(e))}function Zl(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){fl(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!ee(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){R(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){br(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Tr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){R(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){ll(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){Sl(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){rc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&Cc(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&xl(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let te=t.closest(`[data-full-line]`);if(te){let e=ac(te);e&&Bc(e);return}let p=t.closest(`[data-expand-file]`);if(p?.dataset.expandFile){let e=p.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);yl(e,p.dataset.expandFile,{cited:Number(p.dataset.expandCited)||0,centre:Number(p.dataset.expandLine)||0,expand:Number(p.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:fc(t)})}return}let m=t.closest(`[data-focus-toggle]`);if(m?.dataset.focusToggle){cl(m.dataset.focusToggle);return}let ne=t.closest(`[data-prompt-toggle]`);if(ne){Tu(ne.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let h=t.closest(`[data-file]`);if(h?.dataset.file){_l(h);return}let re=jr(t);if(re){ll(re);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){Il(ie,ie.dataset.answered!==`true`),gr(ie);let e=Fl();Pl(e),F({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){zl(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Ll();Rl(e),F({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ae=t.closest(`[data-suggestion]`);if(ae){Ol(ae.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){nu(),Ol(Jc,`explain_simply`);return}let oe=t.closest(`[data-prompt-use]`);if(oe?.dataset.promptUse){Eu(oe.dataset.promptUse);return}let _=t.closest(`[data-prompt-edit]`);if(_?.dataset.promptEdit){Wu(_.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Wu(``);return}if(t.closest(`[data-ask-toggle]`)){let e=I?.focus;e?(sr(I,ol),eu(e!==`buddy`)):eu(!$l())}});var W=document.querySelector(`.prb-body`),Ql=document.querySelector(`.prb-ask`);function $l(){return!!Ql&&getComputedStyle(Ql).display!==`none`}function eu(e){W&&(W.dataset.ask=e?`open`:`closed`),tu(e)}function tu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function nu(){I?.focus&&I.focus!==`buddy`&&sr(I,ol),eu(!0)}function ru(){tu($l())}window.addEventListener(`resize`,ru),ie(P(`/restart`));var iu=document.querySelector(`[data-file-filter]`),au=document.querySelector(`[data-file-count]`),ou=document.querySelector(`[data-file-none]`);function su(){let e=(iu?.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}`}ou&&(ou.hidden=n>0),au&&(au.textContent=e?`${t} of ${cu} file${cu===1?``:`s`}`:`${cu} file${cu===1?``:`s`}`)}var cu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;iu?.addEventListener(`input`,su),iu?.addEventListener(`keydown`,e=>{e.key===`Escape`&&iu.value!==``&&(e.preventDefault(),iu.value=``,su())}),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(),_l(n))});var lu=320,uu=()=>Math.round(window.innerWidth/2),du=e=>Math.round(Math.min(uu(),Math.max(lu,e)));function fu(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function pu(){return Ql?Math.round(Ql.getBoundingClientRect().width):lu}function mu(e){fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!W||!Ql)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=pu(),r=e=>{fu(du(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,mu(pu())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=du(pu()+n);fu(r),mu(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),fu(null),mu(null))}),G?.addEventListener(`dblclick`,()=>{fu(null),mu(null)}),window.addEventListener(`resize`,()=>{$l()&&W?.style.getPropertyValue(`--ask-width`)&&fu(du(pu()))});var hu=3e4,gu=document.visibilityState===`visible`?Date.now():null,_u=0;function vu(){gu!==null&&(_u+=Date.now()-gu,gu=Date.now())}function yu(){vu();let e=Math.round(_u/1e3);return _u-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?gu=Date.now():(vu(),gu=null)}),setInterval(()=>{let e=yu();e>0&&F({event:`workspace_heartbeat`,visibleSeconds:e})},hu),window.addEventListener(`pagehide`,()=>{let e=P(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:yu()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var bu=document.querySelector(`[data-prompt-bank]`),xu=document.querySelector(`[data-prompt-list]`),K=Su();function Su(){try{let e=JSON.parse(bu?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Cu(){if(!xu)return;xu.innerHTML=K.map(e=>`<span class="prb-bank-item">
|
|
177
|
-
<button type="button" class="prb-bank-use" data-prompt-use="${
|
|
178
|
-
<button type="button" class="prb-bank-edit" data-prompt-edit="${
|
|
179
|
-
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Mu()}async function wu(e){try{let t=await(await fetch(P(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}Cu()}function Tu(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),bu?.toggleAttribute(`data-collapsed`,e),xu&&(xu.hidden=e),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Eu(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=Pr(V.value,t.prompt),nu(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var Du=document.querySelector(`.prb-doc`),Ou=null,ku=null;function Au(){B&&(ku?.(),ku=_n(B,{layout:`flat`,actions:bn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Nu(e,`selection`,t)}))}function ju(){return[...vn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:En(e.id),label:e.name,section:Tn}))]}function Mu(){Du&&(Ou?.(),Ou=_n(Du,{triggerLabel:`Ask Buddy AI`,actions:ju(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Nu(e,`selection`,t)}))}function Nu(e,t,n,r){dr(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>Pu(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{nu(),Ol(t,`finding`,Fn(e,r?.ref))}})}function Pu(e,t,n){V&&(U={text:e,source:t,...n?{continues:n}:{}},Qd?.stage(U),V.value=Pr(V.value,e),nu(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function Fu(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=sn(zn(e,ju()));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(H||El)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Iu(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=On(n),a=In(n);L.close(n),i&&Nu(r,`finding`,i,a?{ref:a}:void 0)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=In(t),r=On(t);n&&r&&Nu(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Mu(),Au();var q=ya({root:document,showView:e=>R(e)}),Lu=wa({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>L.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});At(document),Wt(document);var Ru=document.querySelector(`[data-prompt-dialog]`),zu=document.querySelector(`[data-prompt-name]`),Bu=document.querySelector(`[data-prompt-text]`),Vu=document.querySelector(`[data-prompt-delete]`),Hu=document.getElementById(`prb-prompt-title`),Uu=``;function Wu(e){let t=K.find(t=>t.id===e);Uu=t?.id??``,Hu&&(Hu.textContent=t?`Edit prompt`:`Save a prompt`),zu&&(zu.value=t?.name??``),Bu&&(Bu.value=t?.prompt??``),Vu&&(Vu.hidden=!t),Ru?.showModal(),zu?.focus()}async function Gu(){let e=zu?.value.trim()??``,t=Bu?.value.trim()??``;if(!e||!t){(e?Bu:zu)?.focus();return}let n=Uu?K.map(n=>n.id===Uu?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Ru?.close(),await wu(n)}async function Ku(){if(!Uu)return;let e=K.filter(e=>e.id!==Uu);Ru?.close(),await wu(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Ru?.close()),Vu?.addEventListener(`click`,()=>void Ku()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Gu());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),qu=document.querySelector(`[data-fresh-check]`),X=id(J?.dataset.report),Ju=`prb-fresh-reopen`,Yu=ed(),Xu=J?.dataset.dismissedSha,Zu=$u(J?.dataset.availability),Z=Qu(J?.dataset.remote);function Qu(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function $u(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ed(){try{return sessionStorage.getItem(Ju)!==null&&(sessionStorage.removeItem(Ju),!0)}catch{return!1}}Yu&&xd(),qu?.addEventListener(`click`,()=>void cd());var td=document.querySelector(`[data-fetch-remote]`);td&&(fetch(P(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(td.hidden=!1)}).catch(()=>{}),td.addEventListener(`click`,()=>void nd(td)));async function nd(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(P(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};ne(h(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:se(n)}),n.fetched>0&&await cd()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Yu=!1,xd();let n=t.closest(`[data-fresh-dismiss]`);n&&(Xu=n.dataset.freshDismiss||void 0,Yu=!1,xd(),rd())});function rd(){fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Xu??null})}).catch(()=>{})}function id(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var ad=ca(),od=!1,sd=null;async function cd(){if(od)return;od=!0,md(!0),sd&&await sd;let e=hd(X,Z),t=await ud(!1);md(!1),t&&bd(),od=!1,t&&(X?.code.state===`changed`||Z!==null)&&Xu!==void 0&&(Xu=void 0,rd()),xd(),ld(t?hd(X,Z)===e?`No change`:`Updated`:`Could not check`)}function ld(e){Y&&(Y.textContent=e,window.setTimeout(Sd,2600))}async function ud(e){let t=ad.snapshot();try{let n=await(await fetch(`${P(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Zu=n.availability??null,Z=n.remote??null,_d=n.kiss??null,n.kissDismissedSha!==void 0&&(vd=n.kissDismissedSha??void 0),n.prState!==void 0&&pd(n.prState);let r=sa(n.standing);return r&&ad.current(t)&&$i(document,r),!0}catch{return!1}}async function dd(){if(od||sd||!J)return;let e=hd(X,Z),t=JSON.stringify(_d);sd=ud(!0);let n=await sd;sd=null,fd=Date.now(),n&&(hd(X,Z)!==e&&xd(),JSON.stringify(_d)!==t&&bd())}var fd=Date.now();function pd(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Qi(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function md(e){qu&&(qu.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function hd(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var gd=document.querySelector(`[data-kiss-fresh-region]`),_d=yd(gd?.dataset.freshness),vd=gd?.dataset.dismissedSha;function yd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function bd(){Gi(_d?.state===`changed`),gd&&(gd.innerHTML=Li(gd.dataset.reviewedSha??``,_d,{dismissedSha:vd,actions:Wc!==``}))}gd?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(vd=t.dataset.kissFreshnessDismiss||void 0,bd(),fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:vd??null})}).catch(()=>{}))});function xd(){J&&(J.innerHTML=ui(X,{dismissedSha:Xu,open:Yu,actions:Wc!==``,availability:Zu,remote:Z}),Sd())}function Sd(){if(Y&&(X||Z)){let{label:e,state:t}=ci(X,Z);Y.textContent=e,Y.dataset.state=t,xi(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return Cd(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void Td(i);if(t.closest(`[data-review-update]`))return void kd();let a=t.closest(`[data-update-cancel]`);if(a)return void jd(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void jd(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function Cd(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>wd(e,`Copied`),()=>wd(e,`Select it`))}function wd(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Td(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=Ed(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Pd}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=Ed(e)?null:Fd(e);try{await fetch(P(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}Ed(e)&&Dd(),window.location.reload()}function Ed(e){return e.closest(`.prb-fresh-notes p`)}function Dd(){try{sessionStorage.setItem(Ju,`1`)}catch{}}var Od=!1;async function kd(){if(Od)return;Od=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(P(`/job`))).json();e.update&&e.update.phase!==`none`&&!Ti(e.update.phase)&&n()}catch{}},500);try{await fetch(P(`/update`),{method:`POST`})}catch{}n()}var Ad={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 jd(e,t){let n=Ad[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(P(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,Nd(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Nd(e,n.tooLate),await Ra({look:async()=>{let e=await fetch(P(`/job`),{signal:AbortSignal.timeout(Md)});return n.running(await e.json())},reload:()=>window.location.reload()})}var Md=3e3;function Nd(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 Pd=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Fd(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=Pd,t.appendChild(n),n}var Id=Na(document),Ld=null,Rd=Date.now();function zd(){Ld===null&&(Ld=window.setTimeout(()=>{Ld=null,Bd()},ce(Date.now()-Rd)))}async function Bd(){try{let e=await(await fetch(P(`/job`))).json();if(El&&!e.ask||Hd&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Id){let r=t[e];if(r){if(Pa(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(Ia(n,r.phase,r.progress),La(n)):Vd(n,r.progress)}}}catch{}zd()}function Vd(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 Hd=document.querySelector(`[data-diagram-running]`)!==null;(Id.size>0||El||Hd)&&(Rd=Date.now(),zd());function Ud(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function Wd(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,Wd(t),fetch(P(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Rd=Date.now(),zd()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Ud(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(P(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=mr,wd(t,`Could not start. Try again`,2500)}))});var Gd={send:async e=>{let t=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{Zl(`kiss`,e,t,`recommendation`,`decided`),Zl(`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){Bi(r,zi(n),Gd);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(P(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Kd=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=er(e.state)??tr(window.location.hash)??{kind:`view`,view:Kd},n=!I||!ar(I,t);al(t),n&&rl(t),Zd()});var qd=tr(window.location.hash);qd?al(qd):(I={kind:`view`,view:Kd},Vc.replace(``,I));var Jd={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:B,panes:W};Vc.setCapturer(()=>Jr(Jd));async function Yd(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=Ir(e),s=o?vl.pending(o):void 0;if(!o||!Vr(s?s.request:zr(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=gl(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await yl(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&Cc(o,a.tall),t&&Br(o,t.top,t.offset))}function Xd(e){Ir(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Zd(){let e=++nl,t=()=>nl===e;await Yr(Jd,Vc.current().ui,{setFold:fl,setAsk:eu,openPanel:(e,n)=>Yd(e,n,t),closePanel:Xd,stillCurrent:t})}Zd();var Qd=V?ni(V,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=Qd?.restoredStage??null,ru(),hl();var $d=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=>{$d(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&($d(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=ua({root:document,post:(e,t)=>fetch(P(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:ad,checkForUpdates:()=>cd()});function ef(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&L.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 tf(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 L.closeAll();ef(n.error)}}function nf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function rf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&L.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=()=>Iu(Q);Q.addEventListener(`click`,e=>{let n=e.target,a=n?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),_(a,a.dataset.copyId);return}let o=n?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(n?.closest(`[data-fresh-check], [data-fetch-remote]`)){L.closeAll();return}let s=n?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),tf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=n?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),tf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=n?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),tf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(n?.closest(`[data-delete]`)){e.stopPropagation(),rf();return}if(n?.closest(`[data-cancel-delete]`)){e.stopPropagation(),t();return}n?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let r=null;try{let e=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,r===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=n(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(r)),e.textContent=n(r)},i=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(),ef(n)}}function af(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>R(e,{keepFocus:!0})}}function of(){if(!I)return null;let e=I.focus??(I.kind===`section`?`guide`:I.view);return Un.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function sf(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}g(`review`,{...Lu.commands,...xa(q,document),"review.section.review":{available:()=>Ea(document)!==null,run:()=>{let e=Ea(document);e&&R(e,{keepFocus:!0})}},"review.section.kiss":af(`kiss`),"review.section.issues":af(`issues`),"review.section.diagrams":af(`map`),"review.section.questions":af(`questions`),"review.section.files":af(`files`),"review.buddy.open":{available:()=>Ql!==null,run:()=>{I?.focus?or(I,`buddy`,ol):eu(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Ql!==null&&V!==null,panel:Aa({prompts:()=>K,choose:Eu})},"review.focus.toggle":{available:()=>of()!==null,run:()=>{let e=of();e&&cl(e)}},"review.leave":{available:e=>!!(e&&cr(e,document,e.target===V||q.state().selecting||!!I?.focus)),run:e=>{V&&e?.target===V?V.blur():q.state().selecting?q.exit():I?.focus&&sr(I,ol)}},"review.feedback.toggle":{available:()=>q.state().selecting||sf(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void tf(()=>$.setComplete(!0),nf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void tf(()=>$.setLifecycle(`waiting`),nf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void tf(()=>$.setLifecycle(`done`),nf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void tf(()=>$.toggleQueued(),nf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>li(X,{actions:Wc!==``&&!Id.has(`update`)&&!Od,remote:Z}),run:()=>void kd()},"review.delete":{available:()=>$.offer().delete,run:()=>rf({focusCancel:!0})}},{onOpen:()=>L.closeAll()}),m(),setTimeout(()=>{Pc(Ec([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),te(window,()=>window.location.reload());var cf=15e3,lf=6e4;function uf(){return Wc!==``&&document.visibilityState===`visible`&&!Id.has(`update`)}document.addEventListener(`visibilitychange`,()=>{uf()&&Date.now()-fd>=cf&&dd()}),window.setInterval(()=>{uf()&&dd()},lf);export{Os as n,Bt as r,js as t};
|
|
176
|
+
${l}`,uc(e,t),Tc(e),Ec(e),(n.focus?gc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Gc(e,t)}async function El(e,t,n){let r=hc(t,n);if(!r)return;let i=gc(e,r.anchor);if(i)t.outerHTML=mc(_c(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await wl(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 Dl(e,t,n){let r=`${Qc.replace(/\/$/,``)}/${e}`,i=Zc.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&N({event:`editor_opened`,fromFinding:n}),window.location.href=i}var R=document.querySelector(`[data-ask-log]`);R&&R.querySelector(`.prb-msg`)&&R.scrollTo({top:R.scrollHeight});var Ol=document.querySelector(`[data-ask-form]`),z=Ol?.querySelector(`textarea`);function kl(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=qe(t)+yt(t)):n.textContent=t,R?.appendChild(n),R?.scrollTo({top:R.scrollHeight}),n}function Al(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,R?.appendChild(e),R?.scrollTo({top:R.scrollHeight}),e}var B=null,V=!!R?.querySelector(`[data-ask-pending]`);function jl(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,R?.appendChild(e),R?.scrollTo({top:R.scrollHeight})}async function Ml(e,t=`free_text`,n={}){let r=e.trim();if(!r||B||V)return;document.querySelector(`.prb-ask-empty`)?.remove(),kl(`user`,r);let i=Al();B=new AbortController,Pl(!0);try{let e=await fetch(M(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:il,source:t,...n}),signal:B.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Nl(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){jl();return}if(!e.ok||!a?.answer){kl(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}kl(`assistant`,a.answer),a.explanation&&Hn(document,a.explanation)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(jl(),Nl(r,n.continuesExplanation)):(kl(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Nl(r,n.continuesExplanation))}finally{B=null,Pl(!1)}}function Nl(e,t){!z||z.value||(z.value=e,tf?.save(),t&&(H=H?.continues&&e.includes(H.text)?H:{text:e,source:`finding`,continues:t},tf?.stage(H)))}function Pl(e){let t=Ol?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(Fl))t.disabled=e;e&&F.closeAll(),e||z?.focus()}var Fl=`[data-suggestion], .pr-helper-explain-simply-button`;function Il(){let e=Ol?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(M(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{B?.abort()})}Ol?.addEventListener(`submit`,e=>{if(e.preventDefault(),B||V)return Il();let t=z?.value??``;z&&(z.value=``),tf?.clear();let n=Wn(H,t);Ml(t,Ll(t),n?{continuesExplanation:n}:{})}),V&&Pl(!0);var H=null;function Ll(e){return H&&e.includes(H.text)?H.source:`free_text`}z?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),B||V)return;Ol?.requestSubmit()}}),z?.addEventListener(`input`,()=>{z&&(z.style.height=`auto`,z.style.height=`${Math.min(z.scrollHeight,140)}px`)});async function Rl(e){try{await fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function zl(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Bl(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&&Kl(n,t,`questions`),Ql()}function Vl(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||el})).filter(e=>e.id)}async function Hl(e){try{await fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Ul(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=el: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(Wl()),Kl(n,t||e.dataset.settled===`true`,`issues`),eu())}function Wl(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=_r,e.textContent=`Dismissed by you`,e}var Gl=new WeakMap;function Kl(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Gl.set(e,{parent:t,before:e.nextElementSibling}),Xl(n).append(e),t&&Yl(t)}else ql(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Zl(n)}}function ql(e,t){let n=Gl.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Jl(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Jl(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Yl(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Xl(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 Zl(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;if(t.toggleAttribute(`data-nothing-open`,r===i),e===`questions`){n.textContent=`Answered (${i})`;return}n.textContent=Mr($l())}function Ql(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=Nr(e.length,t)),tu(`questions`,e.length,t,`question`,`answered`)}function $l(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0;for(let r of e){let e=r.dataset.settled===`true`,i=r.dataset.dismissed===`true`&&r.dataset.stale!==`true`;!e&&!i?t+=1:!e&&i&&(n+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n}}function eu(){let e=$l();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=jr(e.total,e.open,gr(e))),tu(`issues`,e.total,e.open,`issue`,gr(e))}function tu(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){_l(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!ee(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){I(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){wr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){kr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){I(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){ml(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){Dl(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){lc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&kc(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&El(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let te=t.closest(`[data-full-line]`);if(te){let e=dc(te);e&&Kc(e);return}let p=t.closest(`[data-expand-file]`);if(p?.dataset.expandFile){let e=p.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);wl(e,p.dataset.expandFile,{cited:Number(p.dataset.expandCited)||0,centre:Number(p.dataset.expandLine)||0,expand:Number(p.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:vc(t)})}return}let m=t.closest(`[data-focus-toggle]`);if(m?.dataset.focusToggle){pl(m.dataset.focusToggle);return}let ne=t.closest(`[data-prompt-toggle]`);if(ne){Ou(ne.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let h=t.closest(`[data-file]`);if(h?.dataset.file){Sl(h);return}let re=Fr(t);if(re){ml(re);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){Bl(ie,ie.dataset.answered!==`true`),br(ie);let e=zl();Rl(e),N({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){Ul(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Vl();Hl(e),N({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ae=t.closest(`[data-suggestion]`);if(ae){Ml(ae.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){au(),Ml($c,`explain_simply`);return}let oe=t.closest(`[data-prompt-use]`);if(oe?.dataset.promptUse){ku(oe.dataset.promptUse);return}let se=t.closest(`[data-prompt-edit]`);if(se?.dataset.promptEdit){qu(se.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){qu(``);return}if(t.closest(`[data-ask-toggle]`)){let e=P?.focus;e?(dr(P,dl),ru(e!==`buddy`)):ru(!nu())}});var U=document.querySelector(`.prb-body`),W=document.querySelector(`.prb-ask`);function nu(){return!!W&&getComputedStyle(W).display!==`none`}function ru(e){U&&(U.dataset.ask=e?`open`:`closed`),iu(e)}function iu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function au(){P?.focus&&P.focus!==`buddy`&&dr(P,dl),ru(!0)}function ou(){iu(nu())}window.addEventListener(`resize`,ou),ie(M(`/restart`));var su=document.querySelector(`[data-file-filter]`),cu=document.querySelector(`[data-file-count]`),lu=document.querySelector(`[data-file-none]`);function uu(){let e=(su?.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}`}lu&&(lu.hidden=n>0),cu&&(cu.textContent=e?`${t} of ${du} file${du===1?``:`s`}`:`${du} file${du===1?``:`s`}`)}var du=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;su?.addEventListener(`input`,uu),su?.addEventListener(`keydown`,e=>{e.key===`Escape`&&su.value!==``&&(e.preventDefault(),su.value=``,uu())}),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(),Sl(n))});var fu=320,pu=()=>Math.round(window.innerWidth/2),mu=e=>Math.round(Math.min(pu(),Math.max(fu,e)));function hu(e){U&&(e===null?U.style.removeProperty(`--ask-width`):U.style.setProperty(`--ask-width`,`${e}px`))}function gu(){return W?Math.round(W.getBoundingClientRect().width):fu}function _u(e){fetch(M(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!U||!W)return;e.preventDefault(),G.setPointerCapture(e.pointerId),U.dataset.resizing=`true`;let t=e.clientX,n=gu(),r=e=>{hu(mu(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete U.dataset.resizing,_u(gu())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=mu(gu()+n);hu(r),_u(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),hu(null),_u(null))}),G?.addEventListener(`dblclick`,()=>{hu(null),_u(null)}),window.addEventListener(`resize`,()=>{nu()&&U?.style.getPropertyValue(`--ask-width`)&&hu(mu(gu()))});var vu=3e4,yu=document.visibilityState===`visible`?Date.now():null,bu=0;function xu(){yu!==null&&(bu+=Date.now()-yu,yu=Date.now())}function Su(){xu();let e=Math.round(bu/1e3);return bu-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?yu=Date.now():(xu(),yu=null)}),setInterval(()=>{let e=Su();e>0&&N({event:`workspace_heartbeat`,visibleSeconds:e})},vu),window.addEventListener(`pagehide`,()=>{let e=M(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Su()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Cu=document.querySelector(`[data-prompt-bank]`),wu=document.querySelector(`[data-prompt-list]`),K=Tu();function Tu(){try{let e=JSON.parse(Cu?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Eu(){if(!wu)return;wu.innerHTML=K.map(e=>`<span class="prb-bank-item">
|
|
177
|
+
<button type="button" class="prb-bank-use" data-prompt-use="${L(e.id)}" title="${L(e.prompt)}">${L(e.name)}</button>
|
|
178
|
+
<button type="button" class="prb-bank-edit" data-prompt-edit="${L(e.id)}" aria-label="Edit ${L(e.name)}">✎</button>
|
|
179
|
+
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Fu()}async function Du(e){try{let t=await(await fetch(M(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}Eu()}function Ou(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Cu?.toggleAttribute(`data-collapsed`,e),wu&&(wu.hidden=e),fetch(M(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function ku(e){let t=K.find(t=>t.id===e);!t||!z||(z.value=Rr(z.value,t.prompt),au(),z.focus(),z.setSelectionRange(z.value.length,z.value.length),z.dispatchEvent(new Event(`input`)))}var Au=document.querySelector(`.prb-doc`),ju=null,Mu=null;function Nu(){R&&(Mu?.(),Mu=vn(R,{layout:`flat`,actions:xn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Iu(e,`selection`,t)}))}function Pu(){return[...yn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:Dn(e.id),label:e.name,section:En}))]}function Fu(){Au&&(ju?.(),ju=vn(Au,{triggerLabel:`Ask Buddy AI`,actions:Pu(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Iu(e,`selection`,t)}))}function Iu(e,t,n,r){hr(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>Lu(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{au(),Ml(t,`finding`,zn(e,r?.ref))}})}function Lu(e,t,n){z&&(H={text:e,source:t,...n?{continues:n}:{}},tf?.stage(H),z.value=Rr(z.value,e),au(),z.focus(),z.setSelectionRange(z.value.length,z.value.length),z.dispatchEvent(new Event(`input`)))}function Ru(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=ln(Pu());for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(B||V)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function zu(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=kn(n),a=Vn(n);F.close(n),i&&Iu(r,`finding`,i,a?{ref:a}:void 0)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Bn(t),r=kn(t);n&&r&&Iu(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Fu(),Nu();var q=Ca({root:document,showView:e=>I(e)}),Bu=Oa({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>F.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});Mt(document),Kt(document);var Vu=document.querySelector(`[data-prompt-dialog]`),Hu=document.querySelector(`[data-prompt-name]`),Uu=document.querySelector(`[data-prompt-text]`),Wu=document.querySelector(`[data-prompt-delete]`),Gu=document.getElementById(`prb-prompt-title`),Ku=``;function qu(e){let t=K.find(t=>t.id===e);Ku=t?.id??``,Gu&&(Gu.textContent=t?`Edit prompt`:`Save a prompt`),Hu&&(Hu.value=t?.name??``),Uu&&(Uu.value=t?.prompt??``),Wu&&(Wu.hidden=!t),Vu?.showModal(),Hu?.focus()}async function Ju(){let e=Hu?.value.trim()??``,t=Uu?.value.trim()??``;if(!e||!t){(e?Uu:Hu)?.focus();return}let n=Ku?K.map(n=>n.id===Ku?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Vu?.close(),await Du(n)}async function Yu(){if(!Ku)return;let e=K.filter(e=>e.id!==Ku);Vu?.close(),await Du(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Vu?.close()),Wu?.addEventListener(`click`,()=>void Yu()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Ju());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),Xu=document.querySelector(`[data-fresh-check]`),X=sd(J?.dataset.report),Zu=`prb-fresh-reopen`,Qu=rd(),$u=J?.dataset.dismissedSha,ed=nd(J?.dataset.availability),Z=td(J?.dataset.remote);function td(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function nd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function rd(){try{return sessionStorage.getItem(Zu)!==null&&(sessionStorage.removeItem(Zu),!0)}catch{return!1}}Qu&&wd(),Xu?.addEventListener(`click`,()=>void dd());var id=document.querySelector(`[data-fetch-remote]`);id&&(fetch(M(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(id.hidden=!1)}).catch(()=>{}),id.addEventListener(`click`,()=>void ad(id)));async function ad(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(M(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};ne(h(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:ce(n)}),n.fetched>0&&await dd()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Qu=!1,wd();let n=t.closest(`[data-fresh-dismiss]`);n&&($u=n.dataset.freshDismiss||void 0,Qu=!1,wd(),od())});function od(){fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:$u??null})}).catch(()=>{})}function sd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var cd=fa(),ld=!1,ud=null;async function dd(){if(ld)return;ld=!0,_d(!0),ud&&await ud;let e=vd(X,Z),t=await pd(!1);_d(!1),t&&Cd(),ld=!1,t&&(X?.code.state===`changed`||Z!==null)&&$u!==void 0&&($u=void 0,od()),wd(),fd(t?vd(X,Z)===e?`No change`:`Updated`:`Could not check`)}function fd(e){Y&&(Y.textContent=e,window.setTimeout(Td,2600))}async function pd(e){let t=cd.snapshot();try{let n=await(await fetch(`${M(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,ed=n.availability??null,Z=n.remote??null,bd=n.kiss??null,n.kissDismissedSha!==void 0&&(xd=n.kissDismissedSha??void 0),n.prState!==void 0&&gd(n.prState);let r=da(n.standing);return r&&cd.current(t)&&ra(document,r),!0}catch{return!1}}async function md(){if(ld||ud||!J)return;let e=vd(X,Z),t=JSON.stringify(bd);ud=pd(!0);let n=await ud;ud=null,hd=Date.now(),n&&(vd(X,Z)!==e&&wd(),JSON.stringify(bd)!==t&&Cd())}var hd=Date.now();function gd(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=na(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function _d(e){Xu&&(Xu.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function vd(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var yd=document.querySelector(`[data-kiss-fresh-region]`),bd=Sd(yd?.dataset.freshness),xd=yd?.dataset.dismissedSha;function Sd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Cd(){Yi(bd?.state===`changed`),yd&&(yd.innerHTML=Vi(yd.dataset.reviewedSha??``,bd,{dismissedSha:xd,actions:Yc!==``}))}yd?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(xd=t.dataset.kissFreshnessDismiss||void 0,Cd(),fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:xd??null})}).catch(()=>{}))});function wd(){J&&(J.innerHTML=mi(X,{dismissedSha:$u,open:Qu,actions:Yc!==``,availability:ed,remote:Z}),Td())}function Td(){if(Y&&(X||Z)){let{label:e,state:t}=fi(X,Z);Y.textContent=e,Y.dataset.state=t,Ti(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return Ed(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(M(`/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 Od(i);if(t.closest(`[data-review-update]`))return void Md();let a=t.closest(`[data-update-cancel]`);if(a)return void Pd(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void Pd(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function Ed(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Dd(e,`Copied`),()=>Dd(e,`Select it`))}function Dd(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Od(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=kd(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Ld}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=kd(e)?null:Rd(e);try{await fetch(M(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}kd(e)&&Ad(),window.location.reload()}function kd(e){return e.closest(`.prb-fresh-notes p`)}function Ad(){try{sessionStorage.setItem(Zu,`1`)}catch{}}var jd=!1;async function Md(){if(jd)return;jd=!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(M(`/job`))).json();e.update&&e.update.phase!==`none`&&!ki(e.update.phase)&&n()}catch{}},500);try{await fetch(M(`/update`),{method:`POST`})}catch{}n()}var Nd={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 Pd(e,t){let n=Nd[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(M(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,Id(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Id(e,n.tooLate),await Ha({look:async()=>{let e=await fetch(M(`/job`),{signal:AbortSignal.timeout(Fd)});return n.running(await e.json())},reload:()=>window.location.reload()})}var Fd=3e3;function Id(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 Ld=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Rd(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=Ld,t.appendChild(n),n}var zd=La(document),Bd=null,Vd=Date.now();function Hd(){Bd===null&&(Bd=window.setTimeout(()=>{Bd=null,Ud()},le(Date.now()-Vd)))}async function Ud(){try{let e=await(await fetch(M(`/job`))).json();if(V&&!e.ask||Gd&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of zd){let r=t[e];if(r){if(Ra(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(Ba(n,r.phase,r.progress),Va(n)):Wd(n,r.progress)}}}catch{}Hd()}function Wd(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 Gd=document.querySelector(`[data-diagram-running]`)!==null;(zd.size>0||V||Gd)&&(Vd=Date.now(),Hd());function Kd(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function qd(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,qd(t),fetch(M(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Vd=Date.now(),Hd()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Kd(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(M(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=vr,Dd(t,`Could not start. Try again`,2500)}))});var Jd={send:async e=>{let t=await fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{tu(`kiss`,e,t,`recommendation`,`decided`),tu(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){Wi(r,Ui(n),Jd);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(M(`/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 Yd=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=ir(e.state)??ar(window.location.hash)??{kind:`view`,view:Yd},n=!P||!lr(P,t);ul(t),n&&cl(t),ef()});var Xd=ar(window.location.hash);Xd?ul(Xd):(P={kind:`view`,view:Yd},qc.replace(``,P));var Zd={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:R,panes:U};qc.setCapturer(()=>Qr(Zd));async function Qd(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=Br(e),s=o?Cl.pending(o):void 0;if(!o||!Gr(s?s.request:Ur(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}=xl(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await wl(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`)&&kc(o,a.tall),t&&Wr(o,t.top,t.offset))}function $d(e){Br(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function ef(){let e=++sl,t=()=>sl===e;await $r(Zd,qc.current().ui,{setFold:_l,setAsk:ru,openPanel:(e,n)=>Qd(e,n,t),closePanel:$d,stillCurrent:t})}ef();var tf=z?oi(z,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;H=tf?.restoredStage??null,ou(),bl();var nf=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=>{nf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(nf(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=ma({root:document,post:(e,t)=>fetch(M(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:cd,checkForUpdates:()=>dd()});function rf(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&F.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 af(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 F.closeAll();rf(n.error)}}function of(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function sf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&F.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=()=>zu(Q);Q.addEventListener(`click`,e=>{let n=e.target,a=n?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),se(a,a.dataset.copyId);return}let o=n?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(n?.closest(`[data-fresh-check], [data-fetch-remote]`)){F.closeAll();return}let s=n?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),af(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=n?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),af(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=n?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),af(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(n?.closest(`[data-delete]`)){e.stopPropagation(),sf();return}if(n?.closest(`[data-cancel-delete]`)){e.stopPropagation(),t();return}n?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let r=null;try{let e=await fetch(M(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,r===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=n(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(r)),e.textContent=n(r)},i=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(),rf(n)}}function cf(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>I(e,{keepFocus:!0})}}function lf(){if(!P)return null;let e=P.focus??(P.kind===`section`?`guide`:P.view);return qn.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function uf(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}g(`review`,{...Bu.commands,...Ta(q,document),"review.section.review":{available:()=>Aa(document)!==null,run:()=>{let e=Aa(document);e&&I(e,{keepFocus:!0})}},"review.section.kiss":cf(`kiss`),"review.section.issues":cf(`issues`),"review.section.diagrams":cf(`map`),"review.section.questions":cf(`questions`),"review.section.files":cf(`files`),"review.buddy.open":{available:()=>W!==null,run:()=>{P?.focus?ur(P,`buddy`,dl):ru(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>W!==null&&z!==null,panel:Pa({prompts:()=>K,choose:ku})},"review.focus.toggle":{available:()=>lf()!==null,run:()=>{let e=lf();e&&pl(e)}},"review.leave":{available:e=>!!(e&&fr(e,document,e.target===z||q.state().selecting||!!P?.focus)),run:e=>{z&&e?.target===z?z.blur():q.state().selecting?q.exit():P?.focus&&dr(P,dl)}},"review.feedback.toggle":{available:()=>q.state().selecting||uf(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void af(()=>$.setComplete(!0),of(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void af(()=>$.setLifecycle(`waiting`),of(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void af(()=>$.setLifecycle(`done`),of(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void af(()=>$.toggleQueued(),of(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>pi(X,{actions:Yc!==``&&!zd.has(`update`)&&!jd,remote:Z}),run:()=>void Md()},"review.delete":{available:()=>$.offer().delete,run:()=>sf({focusCancel:!0})}},{onOpen:()=>F.closeAll()}),m(),setTimeout(()=>{Bc(Mc([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),te(window,()=>window.location.reload());var df=15e3,ff=6e4;function pf(){return Yc!==``&&document.visibilityState===`visible`&&!zd.has(`update`)}document.addEventListener(`visibilitychange`,()=>{pf()&&Date.now()-hd>=df&&md()}),window.setInterval(()=>{pf()&&md()},ff);export{Ps as n,Ht as r,Ls as t};
|