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