prreviewbuddy 0.50.1 → 0.52.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,21 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-BeqgAIrQ.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-CN9Gw02i.js","chunk-DJ4Pz6CG.js","chunk-B2kMZj3m.js","chunk-DN473Oml.js","chunk-DwZ_OKDV.js","chunk-CFLfawWY.js","chunk-Wc3Sd0cy.js","chunk-Dy-Kn_BL.js","chunk-CUxm3YXF.js","chunk-tz4nb_gp.js","chunk-BsaS8BTP.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-nU5620mN.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{c as e,i as t,t as n}from"./chunk-BeL0x-wt.js";import{C as r,S as i,_ as a,f as o,i as s,m as c,n as l,r as u,w as d,x as f}from"./chunk-vvGSmhmc.js";function p(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function m(e){return p(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var h=`pr-helper-code-block`,g=`pr-helper-code-copy`,_=`\0`,v=``,ee=/\u0000(\d+)\u0000/g,te=/^\u0000\d+\u0000$/,y=/\u0001(\d+)\u0001/g,ne=/^(?:https?:\/\/|#)/i;function re(e){let{text:t,blocks:n}=ie(e.replace(/[\u0000\u0001]/g,``));return ae(oe(t),n)}function ie(e){let t=[],n=e.split(`
3
- `),r=[],i=0;for(;i<n.length;){let e=n[i].match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/);if(!e){r.push(n[i]),i+=1;continue}let a=RegExp(`^\\s*${e[1][0]}{3,}\\s*$`),o=[];for(i+=1;i<n.length&&!a.test(n[i]);)o.push(n[i]),i+=1;i+=1,r.push(`${_}${t.length}${_}`),t.push(o.join(`
2
+ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as a,D as o,E as s,O as c,T as l,g as u,i as d,j as f,k as p,v as m,y as h}from"./chunk-CofqJ-Qn.js";function g(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function _(e){return g(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var v=`pr-helper-code-block`,y=`pr-helper-code-copy`,ee=`\0`,b=``,te=/\u0000(\d+)\u0000/g,ne=/^\u0000\d+\u0000$/,re=/\u0001(\d+)\u0001/g,ie=/^(?:https?:\/\/|#)/i;function ae(e){let{text:t,blocks:n}=oe(e.replace(/[\u0000\u0001]/g,``));return se(ce(t),n)}function oe(e){let t=[],n=e.split(`
3
+ `),r=[],i=0;for(;i<n.length;){let e=n[i].match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/);if(!e){r.push(n[i]),i+=1;continue}let a=RegExp(`^\\s*${e[1][0]}{3,}\\s*$`),o=[];for(i+=1;i<n.length&&!a.test(n[i]);)o.push(n[i]),i+=1;i+=1,r.push(`${ee}${t.length}${ee}`),t.push(o.join(`
4
4
  `))}return{text:r.join(`
5
- `),blocks:t}}function ae(e,t){return e.replace(ee,(e,n)=>`<div class="${h}"><pre><code>${p(t[Number(n)])}</code></pre><button type="button" class="${g}" aria-label="Copy code">Copy</button></div>`)}function oe(e){let t=[],n=[],r=[],i=null,a=()=>{n.length&&t.push(`<p>${se(n.join(` `))}</p>`),r.length&&t.push(`<blockquote>${se(r.join(` `))}</blockquote>`),i&&t.push(`<${i.tag}>${i.items.map(e=>`<li>${se(e)}</li>`).join(``)}</${i.tag}>`),n=[],r=[],i=null};for(let o of e.split(`
6
- `)){let e=o.trim();if(!e){a();continue}if(te.test(e)){a(),t.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){a(),t.push(`<hr>`);continue}let s=e.match(/^(#{1,6})\s+(.+)$/);if(s){a();let e=Math.min(s[1].length,3)+3;t.push(`<h${e}>${se(s[2])}</h${e}>`);continue}let c=e.match(/^[-*+]\s+(.+)$/);if(c){i?.tag!==`ul`&&(a(),i={tag:`ul`,items:[]}),i.items.push(c[1]);continue}let l=e.match(/^\d{1,9}[.)]\s+(.+)$/);if(l){i?.tag!==`ol`&&(a(),i={tag:`ol`,items:[]}),i.items.push(l[1]);continue}let u=e.match(/^>\s?(.*)$/);if(u){r.length||a(),r.push(u[1]);continue}if(i&&i.items.length){i.items[i.items.length-1]+=` ${e}`;continue}if(r.length){r[r.length-1]+=` ${e}`;continue}n.push(e)}return a(),t.join(``)}function se(e){let t=[];return p(e).replace(/`([^`\n]+)`/g,(e,n)=>(t.push(n),`${v}${t.length-1}${v}`)).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,t,n)=>ne.test(n)?`<a href="${n}" target="_blank" rel="noopener noreferrer">${t}</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(y,(e,n)=>`<code>${t[Number(n)]}</code>`)}async function ce(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),le(e)}}function le(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 b=`pr-helper-msg-copy`,ue=`pr-helper-chat-actions`,de=`data-message-id`,fe=`data-copy-source`,pe={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 me(e){return ye(`${fe}="${p(e)}"`)}var he=`pr-helper-finding-copy`,ge=`data-copy-idle-label`,_e=`data-copy-idle-aria`,ve=`data-copy-idle-tip`;function ye(e,t){let{icon:n}=pe.idle,r=t?.label??pe.idle.label,i=t?.aria??pe.idle.aria,a=t?` ${ge}="${p(r)}" ${_e}="${p(i)}" ${ve}="${p(t.tip)}"`:``,o=`<button type="button" class="${t?`${b} ${he}`:b}" ${e}${a}${t?` data-tip="${p(t.tip)}"`:``} aria-label="${p(i)}"><span class="${b}-icon" aria-hidden="true">${xe(n)}</span><span class="${b}-label"${r?``:` hidden`}>${p(r)}</span></button>`;return t?o:`<div class="${ue}">${o}</div>`}function be(e,t){let n=pe[t],r=t===`idle`?{...n,label:e.getAttribute(ge)??n.label,aria:e.getAttribute(_e)??n.aria}:n,i=e.querySelector(`.${b}-icon`),a=e.querySelector(`.${b}-label`);i&&(i.innerHTML=xe(r.icon));let o=e.classList.contains(he);a instanceof HTMLElement&&(a.textContent=o?``:r.label,a.hidden=o||r.label===``),o&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(ve)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function xe(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Se=1400,Ce=`Copy`,we=`Copied`,Te=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,x=new WeakMap;function Ee(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${g}`),i=r?null:n.closest(`.${b}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?ke(r):i&&De(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function De(e,t){let n=Oe(e,t);je(e,n!==null&&await ce(n)?`copied`:`failed`)}function Oe(e,t){let n=e.getAttribute(fe);if(n!==null)return n;let r=e.getAttribute(de);return r&&t?t(r):null}async function ke(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await ce(t.textContent??``):!1;!n&&t&&Ae(t),Me(e,n?we:Te,n)}function Ae(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function je(e,t){let n=x.get(e);n&&window.clearTimeout(n),be(e,t),x.set(e,window.setTimeout(()=>{be(e,`idle`),x.delete(e)},Se))}function Me(e,t,n){let r=x.get(e);r&&window.clearTimeout(r),e.textContent=t,e.classList.toggle(`copied`,n),x.set(e,window.setTimeout(()=>{e.textContent=Ce,e.classList.remove(`copied`),x.delete(e)},Se))}var Ne=`pr-helper-selection-popover`,Pe=`pr-helper-selection-popover-expanded`,Fe=`pr-helper-selection-copy-done`,Ie=8,Le=8,Re=1e3,ze=`Copy selected text`,Be=`Copy`,Ve=`Copied`,He=`pr-helper-selection-popover-flat`,S=null;function Ue(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${p(e.id)}">${p(e.label)}</button>`}function We(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(Ue).join(``)}${[...t].map(([e,t])=>`
5
+ `),blocks:t}}function se(e,t){return e.replace(te,(e,n)=>`<div class="${v}"><pre><code>${g(t[Number(n)])}</code></pre><button type="button" class="${y}" aria-label="Copy code">Copy</button></div>`)}function ce(e){let t=[],n=[],r=[],i=null,a=()=>{n.length&&t.push(`<p>${le(n.join(` `))}</p>`),r.length&&t.push(`<blockquote>${le(r.join(` `))}</blockquote>`),i&&t.push(`<${i.tag}>${i.items.map(e=>`<li>${le(e)}</li>`).join(``)}</${i.tag}>`),n=[],r=[],i=null};for(let o of e.split(`
6
+ `)){let e=o.trim();if(!e){a();continue}if(ne.test(e)){a(),t.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){a(),t.push(`<hr>`);continue}let s=e.match(/^(#{1,6})\s+(.+)$/);if(s){a();let e=Math.min(s[1].length,3)+3;t.push(`<h${e}>${le(s[2])}</h${e}>`);continue}let c=e.match(/^[-*+]\s+(.+)$/);if(c){i?.tag!==`ul`&&(a(),i={tag:`ul`,items:[]}),i.items.push(c[1]);continue}let l=e.match(/^\d{1,9}[.)]\s+(.+)$/);if(l){i?.tag!==`ol`&&(a(),i={tag:`ol`,items:[]}),i.items.push(l[1]);continue}let u=e.match(/^>\s?(.*)$/);if(u){r.length||a(),r.push(u[1]);continue}if(i&&i.items.length){i.items[i.items.length-1]+=` ${e}`;continue}if(r.length){r[r.length-1]+=` ${e}`;continue}n.push(e)}return a(),t.join(``)}function le(e){let t=[];return g(e).replace(/`([^`\n]+)`/g,(e,n)=>(t.push(n),`${b}${t.length-1}${b}`)).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,t,n)=>ie.test(n)?`<a href="${n}" target="_blank" rel="noopener noreferrer">${t}</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(re,(e,n)=>`<code>${t[Number(n)]}</code>`)}async function ue(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),de(e)}}function de(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 x=`pr-helper-msg-copy`,fe=`pr-helper-chat-actions`,pe=`data-message-id`,me=`data-copy-source`,he={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 ge(e){return xe(`${me}="${g(e)}"`)}var _e=`pr-helper-finding-copy`,ve=`data-copy-idle-label`,ye=`data-copy-idle-aria`,be=`data-copy-idle-tip`;function xe(e,t){let{icon:n}=he.idle,r=t?.label??he.idle.label,i=t?.aria??he.idle.aria,a=t?` ${ve}="${g(r)}" ${ye}="${g(i)}" ${be}="${g(t.tip)}"`:``,o=`<button type="button" class="${t?`${x} ${_e}`:x}" ${e}${a}${t?` data-tip="${g(t.tip)}"`:``} aria-label="${g(i)}"><span class="${x}-icon" aria-hidden="true">${Ce(n)}</span><span class="${x}-label"${r?``:` hidden`}>${g(r)}</span></button>`;return t?o:`<div class="${fe}">${o}</div>`}function Se(e,t){let n=he[t],r=t===`idle`?{...n,label:e.getAttribute(ve)??n.label,aria:e.getAttribute(ye)??n.aria}:n,i=e.querySelector(`.${x}-icon`),a=e.querySelector(`.${x}-label`);i&&(i.innerHTML=Ce(r.icon));let o=e.classList.contains(_e);a instanceof HTMLElement&&(a.textContent=o?``:r.label,a.hidden=o||r.label===``),o&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(be)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Ce(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var we=1400,Te=`Copy`,Ee=`Copied`,De=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,S=new WeakMap;function Oe(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${y}`),i=r?null:n.closest(`.${x}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?je(r):i&&ke(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function ke(e,t){let n=Ae(e,t);Ne(e,n!==null&&await ue(n)?`copied`:`failed`)}function Ae(e,t){let n=e.getAttribute(me);if(n!==null)return n;let r=e.getAttribute(pe);return r&&t?t(r):null}async function je(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await ue(t.textContent??``):!1;!n&&t&&Me(t),Pe(e,n?Ee:De,n)}function Me(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Ne(e,t){let n=S.get(e);n&&window.clearTimeout(n),Se(e,t),S.set(e,window.setTimeout(()=>{Se(e,`idle`),S.delete(e)},we))}function Pe(e,t,n){let r=S.get(e);r&&window.clearTimeout(r),e.textContent=t,e.classList.toggle(`copied`,n),S.set(e,window.setTimeout(()=>{e.textContent=Te,e.classList.remove(`copied`),S.delete(e)},we))}var Fe=`pr-helper-selection-popover`,Ie=`pr-helper-selection-popover-expanded`,Le=`pr-helper-selection-copy-done`,Re=8,ze=8,Be=1e3,Ve=`Copy selected text`,He=`Copy`,Ue=`Copied`,We=`pr-helper-selection-popover-flat`,C=null;function Ge(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${g(e.id)}">${g(e.label)}</button>`}function Ke(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(Ge).join(``)}${[...t].map(([e,t])=>`
7
7
  <div class="pr-helper-selection-menu-group">
8
- <div class="pr-helper-selection-menu-heading">${p(e)}</div>
9
- <div class="pr-helper-selection-menu-group-items">${t.map(Ue).join(``)}</div>
10
- </div>`).join(``)}`}function Ge(e){if(e.layout===`flat`)return Ke(e);let t=We(e.actions);return`
8
+ <div class="pr-helper-selection-menu-heading">${g(e)}</div>
9
+ <div class="pr-helper-selection-menu-group-items">${t.map(Ge).join(``)}</div>
10
+ </div>`).join(``)}`}function qe(e){if(e.layout===`flat`)return Je(e);let t=Ke(e.actions);return`
11
11
  <div class="pr-helper-selection-bar">
12
12
  <button type="button" class="pr-helper-selection-trigger" data-selection-open>
13
13
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true">
14
14
  <path d="M1.75 1h12.5A1.75 1.75 0 0 1 16 2.75v8.5A1.75 1.75 0 0 1 14.25 13H8.06l-3.5 2.63A.75.75 0 0 1 3.36 15v-2H1.75A1.75 1.75 0 0 1 0 11.25v-8.5A1.75 1.75 0 0 1 1.75 1Z"/>
15
15
  </svg>
16
- <span>${p(e.triggerLabel??`Ask`)}</span>
16
+ <span>${g(e.triggerLabel??`Ask`)}</span>
17
17
  </button>
18
- <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${ze}" aria-describedby="pr-helper-selection-tip">
18
+ <button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${Ve}" aria-describedby="pr-helper-selection-tip">
19
19
  <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">
20
20
  <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"/>
21
21
  <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"/>
@@ -24,120 +24,120 @@ import{c as e,i as t,t as n}from"./chunk-BeL0x-wt.js";import{C as r,S as i,_ as
24
24
  <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"/>
25
25
  </svg>
26
26
  </button>
27
- <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${ze}</span>
27
+ <span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${Ve}</span>
28
28
  </div>
29
29
  <div class="pr-helper-selection-menu">${t}</div>
30
- `}function Ke(e){return`<div class="pr-helper-selection-menu">
31
- ${We(e.actions)}
32
- <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${Be}</button>
33
- </div>`}function qe(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-Ie,a=i>=Le?i:Math.min(t.bottom+Ie,window.innerHeight-r-Le),o=Math.max(Le,Math.min(t.left,window.innerWidth-n-Le));e.style.top=`${Math.max(Le,a)}px`,e.style.left=`${o}px`}function C(){w&&=(window.clearTimeout(w),0),S?.popover.remove(),S=null}var w=0;function Je(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(Fe),t&&(t.textContent=Ve),n&&(n.textContent=Ve),w&&window.clearTimeout(w),w=window.setTimeout(()=>Ye(e),Re)}function Ye(e){w&&=(window.clearTimeout(w),0),e.classList.remove(Fe);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=ze);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=Be)}async function Xe(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}Je(e)}function Ze(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 Qe(e,t){let n={},r=()=>{let r=Ze(e,t);if(!r){(!S||S.owner===n)&&C();return}if(S&&S.owner!==n&&C(),S)S.popover.classList.remove(Pe),Ye(S.popover),S.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Ne} ${He}`:Ne,i.innerHTML=Ge(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){S?.text&&Xe(i,S.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(Pe);let n=Ze(e,t);qe(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!S)return;let o=S.text;C(),t.onChoose(a,o)}),document.body.appendChild(i),S={popover:i,text:r.text,owner:n}}qe(S.popover,r.rect)},i=e=>{S&&e.target instanceof Node&&S.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!S)return;let e=window.getSelection();(!e||e.isCollapsed)&&C()},s=e=>{e.key===`Escape`&&C()},c=()=>C();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),C()}}var $e=[{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 et(e){return![...$e,...tt].find(t=>t.id===e)?.instruction}var tt=[{id:`add-to-chat`,label:`Add to chat`}],nt=800;function rt(e,t={}){let n=t.maxChars??nt,r=e.replace(/\r\n/g,`
30
+ `}function Je(e){return`<div class="pr-helper-selection-menu">
31
+ ${Ke(e.actions)}
32
+ <button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${He}</button>
33
+ </div>`}function Ye(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-Re,a=i>=ze?i:Math.min(t.bottom+Re,window.innerHeight-r-ze),o=Math.max(ze,Math.min(t.left,window.innerWidth-n-ze));e.style.top=`${Math.max(ze,a)}px`,e.style.left=`${o}px`}function w(){T&&=(window.clearTimeout(T),0),C?.popover.remove(),C=null}var T=0;function Xe(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(Le),t&&(t.textContent=Ue),n&&(n.textContent=Ue),T&&window.clearTimeout(T),T=window.setTimeout(()=>Ze(e),Be)}function Ze(e){T&&=(window.clearTimeout(T),0),e.classList.remove(Le);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=Ve);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=He)}async function Qe(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}Xe(e)}function $e(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 et(e,t){let n={},r=()=>{let r=$e(e,t);if(!r){(!C||C.owner===n)&&w();return}if(C&&C.owner!==n&&w(),C)C.popover.classList.remove(Ie),Ze(C.popover),C.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Fe} ${We}`:Fe,i.innerHTML=qe(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){C?.text&&Qe(i,C.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(Ie);let n=$e(e,t);Ye(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!C)return;let o=C.text;w(),t.onChoose(a,o)}),document.body.appendChild(i),C={popover:i,text:r.text,owner:n}}Ye(C.popover,r.rect)},i=e=>{C&&e.target instanceof Node&&C.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!C)return;let e=window.getSelection();(!e||e.isCollapsed)&&w()},s=e=>{e.key===`Escape`&&w()},c=()=>w();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),w()}}var tt=[{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 nt(e){return![...tt,...rt].find(t=>t.id===e)?.instruction}var rt=[{id:`add-to-chat`,label:`Add to chat`}],it=800;function at(e,t={}){let n=t.maxChars??it,r=e.replace(/\r\n/g,`
34
34
  `).split(`
35
35
  `).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(`
36
36
  `).replace(/\n{3,}/g,`
37
37
 
38
38
  `);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
39
39
  `).map(e=>`> ${e}`.trimEnd()).join(`
40
- `):``}function it(e,t,n={}){let r=rt(e,n);if(!r)return null;let i=[...$e,...tt].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 at=`saved:`,ot=`Your prompts`;function st(e){return`${at}${e}`}function ct(e){return e.startsWith(`saved:`)?e.slice(6):null}function lt(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var ut=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`map`,`diagram`,`kiss`,`kissrecs`],dt=`#theme-`,ft=[`buddy`,`overview`,`guide`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],pt=`&focus=`;function mt(e){return`#${e}`}function ht(e){return`${dt}${encodeURIComponent(e)}`}function gt(e){let t=e.kind===`view`?mt(e.view):ht(e.sectionId);return e.focus?`${t}${pt}${e.focus}`:t}function _t(e){let{focus:t,...n}=e;return n}function vt(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function yt(e){return ft.includes(e)}function bt(e){let t=e.indexOf(pt);if(t===-1)return xt(e);let n=xt(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return yt(r)?{...n,focus:r}:n}function xt(e){if(e.startsWith(dt)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ut.includes(t)?{kind:`view`,view:t}:null}var St=`pushedFocus`;function Ct(e){let{[St]:t,...n}=e;return n}function wt(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Tt(e,t,n){if(e.focus===t)return;let r={..._t(Ct(e)),focus:t};e.focus&&n.history.state?.[St]?n.history.replaceState({...r,[St]:!0},``,gt(r)):n.history.pushState({...r,[St]:!0},``,gt(r)),n.apply(r)}function Et(e,t){if(!e.focus)return;if(t.history.state?.[St]){t.history.back();return}let n=_t(Ct(e));t.history.replaceState(n,``,gt(n)),t.apply(n)}function Dt(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 Ot(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 kt(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ct(e);if(a===null)return it(t,e,i);let o=r(a);if(!o)return null;let s=rt(t,i);return s?`${s}\n\n${o}`:null}function At(e,t,n){if(n.busy?.())return null;let r=kt(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=et(e)||ct(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}var jt=`button:not([disabled])`;function Mt(e){return e.querySelector(`[data-menu-panel]`)}function Nt(e){return e.querySelector(`[data-menu-trigger]`)}function Pt(e){let t=Mt(e);return t?[...t.querySelectorAll(jt)].filter(e=>!e.closest(`[hidden]`)):[]}function Ft(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=Mt(e);if(!i||i.hidden)return;i.hidden=!0;let a=Nt(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=Mt(e);i&&(o(),t.onOpen?.(e),i.hidden=!1,Nt(e)?.setAttribute(`aria-expanded`,`true`),n=e,r&&Pt(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;Mt(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=Pt(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 It(e){return e.reviewerClosed>0?`dealt with`:`resolved`}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function T(e,t=``){return typeof e==`string`?e:t}var Lt=`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 Rt(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 zt(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 Bt(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 Vt(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 Ht(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Ut(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Wt(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function Gt(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}function Kt(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 qt(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Jt=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Yt(e){return`<details class="prb-update-alt">
40
+ `):``}function ot(e,t,n={}){let r=at(e,n);if(!r)return null;let i=[...tt,...rt].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 st=`saved:`,ct=`Your prompts`;function lt(e){return`${st}${e}`}function ut(e){return e.startsWith(`saved:`)?e.slice(6):null}function dt(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var ft=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`map`,`diagram`,`kiss`,`kissrecs`],pt=`#theme-`,mt=[`buddy`,`overview`,`guide`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],ht=`&focus=`;function gt(e){return`#${e}`}function _t(e){return`${pt}${encodeURIComponent(e)}`}function vt(e){let t=e.kind===`view`?gt(e.view):_t(e.sectionId);return e.focus?`${t}${ht}${e.focus}`:t}function yt(e){let{focus:t,...n}=e;return n}function bt(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function xt(e){return mt.includes(e)}function St(e){let t=e.indexOf(ht);if(t===-1)return Ct(e);let n=Ct(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return xt(r)?{...n,focus:r}:n}function Ct(e){if(e.startsWith(pt)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ft.includes(t)?{kind:`view`,view:t}:null}var wt=`pushedFocus`;function Tt(e){let{[wt]:t,...n}=e;return n}function Et(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Dt(e,t,n){if(e.focus===t)return;let r={...yt(Tt(e)),focus:t};e.focus&&n.history.state?.[wt]?n.history.replaceState({...r,[wt]:!0},``,vt(r)):n.history.pushState({...r,[wt]:!0},``,vt(r)),n.apply(r)}function Ot(e,t){if(!e.focus)return;if(t.history.state?.[wt]){t.history.back();return}let n=yt(Tt(e));t.history.replaceState(n,``,vt(n)),t.apply(n)}function kt(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 At(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 jt(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ut(e);if(a===null)return ot(t,e,i);let o=r(a);if(!o)return null;let s=at(t,i);return s?`${s}\n\n${o}`:null}function Mt(e,t,n){if(n.busy?.())return null;let r=jt(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=nt(e)||ut(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}var Nt=`button:not([disabled])`;function Pt(e){return e.querySelector(`[data-menu-panel]`)}function Ft(e){return e.querySelector(`[data-menu-trigger]`)}function It(e){let t=Pt(e);return t?[...t.querySelectorAll(Nt)].filter(e=>!e.closest(`[hidden]`)):[]}function Lt(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=Pt(e);if(!i||i.hidden)return;i.hidden=!0;let a=Ft(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=Pt(e);i&&(o(),t.onOpen?.(e),i.hidden=!1,Ft(e)?.setAttribute(`aria-expanded`,`true`),n=e,r&&It(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;Pt(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=It(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 Rt(e){return e.reviewerClosed>0?`dealt with`:`resolved`}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function E(e,t=``){return typeof e==`string`?e:t}var zt=`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 Bt(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 Vt(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 Ht(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 Ut(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 Wt(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Gt(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Kt(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function qt(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}function Jt(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 Yt(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Xt=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Zt(e){return`<details class="prb-update-alt">
41
41
  <summary>Start a new review</summary>
42
- <span>A brand new review, with its own findings and its own path through the change. Run <code>${p(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${p(e)}">Copy</button></span>
43
- </details>`}var Xt=`prreviewbuddy review --fresh`;function Zt(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 Qt(e,t={}){let n=e??(t.remote?an(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?on(n.code,r):rn(n.code,t.availability??null),u=e?[...l.facts,`checked ${p(Kt(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
42
+ <span>A brand new review, with its own findings and its own path through the change. Run <code>${g(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${g(e)}">Copy</button></span>
43
+ </details>`}var Qt=`prreviewbuddy review --fresh`;function $t(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 en(e,t={}){let n=e??(t.remote?sn(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?cn(n.code,r):on(n.code,t.availability??null),u=e?[...l.facts,`checked ${g(Jt(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
44
44
  <div class="prb-fresh-head">
45
45
  <span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
46
- <strong class="prb-fresh-title">${p(l.title)}</strong>
46
+ <strong class="prb-fresh-title">${g(l.title)}</strong>
47
47
  <span class="prb-fresh-facts">${u.join(` &middot; `)}</span>
48
48
  </div>
49
49
  ${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
50
- ${$t(n,t,i||a)}
51
- </div>`}function $t(e,t,n){let r=t.actions&&n,i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
52
- ${r?qt():``}
53
- ${r?Yt(Xt):``}
50
+ ${tn(n,t,i||a)}
51
+ </div>`}function tn(e,t,n){let r=t.actions&&n,i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
52
+ ${r?Yt():``}
53
+ ${r?Zt(Qt):``}
54
54
  ${i}
55
- ${en(e,t,n,r===!0)}
56
- </div>`}function en(e,t,n,r){let i=[r?p(Jt):``,t.remote?sn(e.code):cn(e.code,e.checkout.reason!==`no-pull-request`),ln(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${p(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">
55
+ ${nn(e,t,n,r===!0)}
56
+ </div>`}function nn(e,t,n,r){let i=[r?g(Xt):``,t.remote?ln(e.code):un(e.code,e.checkout.reason!==`no-pull-request`),dn(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${g(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">
57
57
  <summary>More details</summary>
58
58
  ${a}
59
- </details>`:a}function tn(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function nn(e){return e?`<code title="${p(e)}">${p(e.slice(0,7))}</code>`:``}function E(e){return e?[`reviewed ${nn(e)}`]:[]}function rn(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:E(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:E(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...E(e.reviewedSha),...tn(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...E(e.reviewedSha),...t,...tn(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:E(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:E(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:E(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function an(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 on(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...E(e.reviewedSha),...i,...n?tn(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${p(Kt(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 sn(e){return`This review is based on ${nn(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function cn(e,t){if(!e.comparison)return``;let n=`<code>${p(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${nn(e.reviewedSha)}.`:`This review is based on ${nn(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 ln(e,t){if(!e.conversation.attached)return``;let n=p(Kt(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 un(e){return e===`done`||e===`failed`}function dn(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function fn(e,t=``){return`<div class="prb-doc-head">
60
- <h3 class="prb-doc-title">${p(e)}</h3>
59
+ </details>`:a}function rn(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function an(e){return e?`<code title="${g(e)}">${g(e.slice(0,7))}</code>`:``}function D(e){return e?[`reviewed ${an(e)}`]:[]}function on(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:D(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:D(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...D(e.reviewedSha),...rn(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:[...D(e.reviewedSha),...t,...rn(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:D(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:D(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:D(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 sn(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 cn(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:[...D(e.reviewedSha),...i,...n?rn(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${g(Jt(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 ln(e){return`This review is based on ${an(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function un(e,t){if(!e.comparison)return``;let n=`<code>${g(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${an(e.reviewedSha)}.`:`This review is based on ${an(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 dn(e,t){if(!e.conversation.attached)return``;let n=g(Jt(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 fn(e){return e===`done`||e===`failed`}function pn(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function mn(e,t=``){return`<div class="prb-doc-head">
60
+ <h3 class="prb-doc-title">${g(e)}</h3>
61
61
  ${t}
62
- </div>`}var pn=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,mn=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function hn(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 gn(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${p(t)}" aria-pressed="false" aria-label="${p(n)}" title="${p(n)}">${hn(pn,`prb-focus-expand`)}${hn(mn,`prb-focus-collapse`)}</button>`}gn(`kiss`,`KISS review`),fn(`Recommendations`,gn(`kissrecs`,`Recommendations`));function _n(e,t,n={}){if(!t||t.state!==`changed`||n.dismissedSha&&n.dismissedSha===t.latestSha)return``;let r=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">
63
- <p><strong>This KISS review describes commit ${p(e.slice(0,7))}.</strong> ${p(r)}</p>
62
+ </div>`}var hn=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,gn=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function _n(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 vn(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${g(t)}" aria-pressed="false" aria-label="${g(n)}" title="${g(n)}">${_n(hn,`prb-focus-expand`)}${_n(gn,`prb-focus-collapse`)}</button>`}vn(`kiss`,`KISS review`),mn(`Recommendations`,vn(`kissrecs`,`Recommendations`));function yn(e,t,n={}){if(!t||t.state!==`changed`||n.dismissedSha&&n.dismissedSha===t.latestSha)return``;let r=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">
63
+ <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> ${g(r)}</p>
64
64
  <p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below is kept either way.</p>
65
- ${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${p(t.latestSha)}">Not now</button>`:``}
66
- </div>`}function vn(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 yn(e,t){t.complete!==void 0&&Sn(e,t.complete),t.activity!==void 0&&bn(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Cn(e,xn(e)):Cn(e,t.lifecycle??void 0),t.queued!==void 0&&wn(e,t.queued)}function bn(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind):(delete n.dataset.activityAt,delete n.dataset.activityKind))}function xn(e){let t=e.querySelector(`[data-review-menu]`);return s(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Sn(e,t){let n=t?`complete`:`in-progress`,r=e.querySelector(`[data-page-status]`);r&&(r.dataset.status=n,r.textContent=f(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=o(e)}}function Cn(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?Tn(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);if(i){let e=l(t,r);i.hidden=e===void 0,i.textContent=e?.text??``,i.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`))n.hidden=!u(n.dataset.lifecycleSet,t,r)}function wn(e,t){let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=c(t))}function Tn(e){let t=Number(e.dataset.activityAt),n=e.dataset.activityKind;return Number.isFinite(t)&&n?{at:t,kind:n}:void 0}function En(e){return s(e)??null}var Dn=[`created`,`updated`,`merged`,`closed`,`reopened`];function On(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:En(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else if(typeof i==`object`){let{at:e,kind:t}=i;typeof e==`number`&&Number.isFinite(e)&&Dn.includes(t)&&(a.activity={at:e,kind:t})}return a}function kn(){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)}}}}function An(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`}`}gn(`progress`,`Review progress`);var jn={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function Mn(e){let t=new Map;for(let n of Object.keys(jn)){let r=jn[n],i=e.querySelector(`[${r}]`);i&&!un(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Nn(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||un(t.phase):Pn(t.phase,n)}function Pn(e,t){return un(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Fn(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||dn(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 In(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${An(n)}.`)}function Ln(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-${p(e.scope)}" data-diagram-card="${p(e.scope)}">
65
+ ${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${g(t.latestSha)}">Not now</button>`:``}
66
+ </div>`}function bn(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 xn(e,t){t.complete!==void 0&&wn(e,t.complete),t.activity!==void 0&&Sn(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Tn(e,Cn(e)):Tn(e,t.lifecycle??void 0),t.queued!==void 0&&En(e,t.queued)}function Sn(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind):(delete n.dataset.activityAt,delete n.dataset.activityKind))}function Cn(e){let t=e.querySelector(`[data-review-menu]`);return c(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function wn(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=u(e)}}function Tn(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?Dn(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);if(i){let e=s(t,r);i.hidden=e===void 0,i.textContent=e?.text??``,i.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`))n.hidden=!o(n.dataset.lifecycleSet,t,r)}function En(e,t){let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=h(t))}function Dn(e){let t=Number(e.dataset.activityAt),n=e.dataset.activityKind;return Number.isFinite(t)&&n?{at:t,kind:n}:void 0}function On(e){return c(e)??null}var kn=[`created`,`updated`,`merged`,`closed`,`reopened`];function An(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:On(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else if(typeof i==`object`){let{at:e,kind:t}=i;typeof e==`number`&&Number.isFinite(e)&&kn.includes(t)&&(a.activity={at:e,kind:t})}return a}function jn(){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)}}}}function Mn(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`}`}vn(`progress`,`Review progress`);var Nn={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function Pn(e){let t=new Map;for(let n of Object.keys(Nn)){let r=Nn[n],i=e.querySelector(`[${r}]`);i&&!fn(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Fn(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||fn(t.phase):In(t.phase,n)}function In(e,t){return fn(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Ln(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||pn(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 Rn(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${Mn(n)}.`)}function zn(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-${g(e.scope)}" data-diagram-card="${g(e.scope)}">
67
67
  <header class="prb-diagram-head">
68
68
  <div class="prb-diagram-heading">
69
69
  <h4 class="prb-diagram-title">
70
70
  <button type="button" class="prb-diagram-toggle" data-diagram-toggle aria-expanded="true">
71
71
  <span class="prb-diagram-disclosure" aria-hidden="true">▼</span>
72
- <span>${p(e.title)}</span>
72
+ <span>${g(e.title)}</span>
73
73
  </button>
74
74
  </h4>
75
- <p class="prb-diagram-scope">${p(r)}</p>
75
+ <p class="prb-diagram-scope">${g(r)}</p>
76
76
  </div>
77
77
  <div class="prb-diagram-tools">
78
78
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="out" aria-label="Zoom out">&minus;</button>
79
79
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="reset">Fit</button>
80
80
  <button type="button" class="prb-diagram-zoom" data-diagram-zoom="in" aria-label="Zoom in">+</button>
81
- <button type="button" class="prb-diagram-redraw" data-diagram-request="${p(i)}">Regenerate</button>
81
+ <button type="button" class="prb-diagram-redraw" data-diagram-request="${g(i)}">Regenerate</button>
82
82
  </div>
83
83
  </header>
84
- ${e.caption?`<p class="prb-diagram-caption">${p(e.caption)}</p>`:``}
85
- ${Rn(e,n)}
84
+ ${e.caption?`<p class="prb-diagram-caption">${g(e.caption)}</p>`:``}
85
+ ${Bn(e,n)}
86
86
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
87
87
  <details class="prb-diagram-source">
88
88
  <summary>Diagram source</summary>
89
- <div class="${h}"><pre><code data-mermaid-source>${p(e.mermaid)}</code></pre><button type="button" class="${g}" aria-label="Copy code">Copy</button></div>
89
+ <div class="${v}"><pre><code data-mermaid-source>${g(e.mermaid)}</code></pre><button type="button" class="${y}" aria-label="Copy code">Copy</button></div>
90
90
  </details>
91
- </article>`}function Rn(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${p(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 zn=`modulepreload`,Bn=function(e){return`/`+e},Vn={},D=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Bn(t,n),t=s(t),t in Vn)return;Vn[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:zn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Hn=.5,Un=3,Wn=1.25,Gn=null;function Kn(){return Gn??=D(()=>import(`./chunk-BeqgAIrQ.js`).then(e=>(e.default.initialize({startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),Gn}var qn=new WeakSet,Jn=new WeakMap,Yn=new WeakMap,O=null;function Xn(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{O?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){lr(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){fr(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Qn(e):o&&Zn(e,o.dataset.diagramRequest||null)}),nr(),$n(),{drawPane:ur}}async function Zn(e,t){if(O)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${yr(n)}"]`)??null??ar(r,n,t);if(!i)return;rr(),e.showDiagrams();let a=or(i);O=new AbortController,k(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:O.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return sr(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);cr(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),rr()):a.remove();return}sr(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{O=null,k(!0)}}async function Qn(e){if(O)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=er(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),O=new AbortController,k(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:O.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){tr(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),rr()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}tr(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),O=null,k(!0)}}function $n(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(er(e),k(!1))}function er(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 tr(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function nr(){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="${yr(n)}"]`)??ar(e,n,t);r&&(rr(),or(r,{scroll:!1}),k(!1))}function rr(){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;ir(`map`,t>0),ir(`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 ir(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 ar(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">
91
+ </article>`}function Bn(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${g(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 Vn=`modulepreload`,Hn=function(e){return`/`+e},Un={},O=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Hn(t,n),t=s(t),t in Un)return;Un[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Vn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Wn=.5,Gn=3,Kn=1.25,qn=null;function Jn(){return qn??=O(()=>import(`./chunk-BeqgAIrQ.js`).then(e=>(e.default.initialize({startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),qn}var Yn=new WeakSet,Xn=new WeakMap,Zn=new WeakMap,k=null;function Qn(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(()=>{k?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){dr(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){mr(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?er(e):o&&$n(e,o.dataset.diagramRequest||null)}),ir(),tr(),{drawPane:fr}}async function $n(e,t){if(k)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${xr(n)}"]`)??null??sr(r,n,t);if(!i)return;ar(),e.showDiagrams();let a=cr(i);k=new AbortController,A(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:k.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 lr(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);ur(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),ar()):a.remove();return}lr(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{k=null,A(!0)}}async function er(e){if(k)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=nr(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),k=new AbortController,A(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:k.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){rr(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),ar()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}rr(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),k=null,A(!0)}}function tr(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(nr(e),A(!1))}function nr(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 rr(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function ir(){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="${xr(n)}"]`)??sr(e,n,t);r&&(ar(),cr(r,{scroll:!1}),A(!1))}function ar(){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;or(`map`,t>0),or(`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 or(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 sr(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">
92
92
  <div class="prb-diagram-heading">
93
93
  <h4 class="prb-diagram-title">Drawing…</h4>
94
- <p class="prb-diagram-scope">${t===`change`?`Whole change`:vr(hr(n))}</p>
94
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:br(_r(n))}</p>
95
95
  </div>
96
- </header>`,gr(e,r,n),r}function or(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:br()?`auto`:`smooth`,block:`start`}),n}function sr(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 cr(e,t,n){let r=Ln(t,new Map(n?[[n,hr(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),rr(),dr(a))}function lr(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||dr(e))}function ur(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))dr(e)}async function dr(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||qn.has(e)||e.hasAttribute(`data-diagram-collapsed`))){qn.add(e);try{let e=await Kn();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{qn.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 fr(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Yn.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=pr(e,n);if(i<=0)return;let a=mr((Yn.get(e)??1)*(t===`in`?Wn:1/Wn));Yn.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function pr(e,t){let n=Jn.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Jn.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function mr(e){return Math.min(Un,Math.max(Hn,e))}function k(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function hr(e){return e?document.querySelector(`[data-goto-section="${yr(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function gr(e,t,n){let r=_r(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(_r(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function _r(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${yr(e)}"]`);return Number(t?.dataset.themeIndex??0)}function vr(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function yr(e){return CSS.escape(e)}function br(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var xr=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Sr=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],A={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Cr={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function wr(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}=Tr(t.nodes);return{schemaVersion:1,title:Ar(T(t.title).trim(),A.mapTitle)||`Change map`,intent:j(t.intent,A.intent)??{simple:``,technical:``},nodes:n,edges:Er(t.edges,r)}}function Tr(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=j(e.title,A.title);if(!a)continue;let o=T(e.id).trim()||a.technical;if(t.has(o))continue;let s=kr(Or(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=xr.includes(e.role)?e.role:`concept`,l=j(e.why,A.why),u=Ar(T(e.anchor).trim(),A.anchor),d=T(e.sectionId).trim();r.push({id:s,role:c,stage:Dr(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:j(e.body,A.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function Er(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=j(e.label,A.label),a=t.get(T(e.from).trim())??T(e.from).trim(),o=t.get(T(e.to).trim())??T(e.to).trim();if(!i||!a||!o)continue;let s=j(e.note,A.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function j(e,t){if(typeof e==`string`){let n=Ar(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Ar(T(n.simple).trim(),t),i=Ar(T(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function Dr(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Cr[t]}function Or(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function kr(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Ar(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 jr(e,t){try{return Mr(wr(e),t).map}catch{return null}}function Mr(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=Fr(Nr(e.nodes,n).map(e=>Pr(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:Ir(r),edges:o},audit:n}}function Nr(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 Pr(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 Fr(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function Ir(e){return[...e].sort((e,t)=>e.stage-t.stage)}function Lr(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?jr(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Rr(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
96
+ </header>`,vr(e,r,n),r}function cr(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:Sr()?`auto`:`smooth`,block:`start`}),n}function lr(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 ur(e,t,n){let r=zn(t,new Map(n?[[n,_r(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),ar(),pr(a))}function dr(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||pr(e))}function fr(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))pr(e)}async function pr(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Yn.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Yn.add(e);try{let e=await Jn();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{Yn.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 mr(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Zn.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=hr(e,n);if(i<=0)return;let a=gr((Zn.get(e)??1)*(t===`in`?Kn:1/Kn));Zn.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function hr(e,t){let n=Xn.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Xn.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function gr(e){return Math.min(Gn,Math.max(Wn,e))}function A(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function _r(e){return e?document.querySelector(`[data-goto-section="${xr(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function vr(e,t,n){let r=yr(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(yr(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function yr(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${xr(e)}"]`);return Number(t?.dataset.themeIndex??0)}function br(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function xr(e){return CSS.escape(e)}function Sr(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Cr=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],wr=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],j={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Tr={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Er(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}=Dr(t.nodes);return{schemaVersion:1,title:Mr(E(t.title).trim(),j.mapTitle)||`Change map`,intent:M(t.intent,j.intent)??{simple:``,technical:``},nodes:n,edges:Or(t.edges,r)}}function Dr(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=M(e.title,j.title);if(!a)continue;let o=E(e.id).trim()||a.technical;if(t.has(o))continue;let s=jr(Ar(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Cr.includes(e.role)?e.role:`concept`,l=M(e.why,j.why),u=Mr(E(e.anchor).trim(),j.anchor),d=E(e.sectionId).trim();r.push({id:s,role:c,stage:kr(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:M(e.body,j.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function Or(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=M(e.label,j.label),a=t.get(E(e.from).trim())??E(e.from).trim(),o=t.get(E(e.to).trim())??E(e.to).trim();if(!i||!a||!o)continue;let s=M(e.note,j.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function M(e,t){if(typeof e==`string`){let n=Mr(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Mr(E(n.simple).trim(),t),i=Mr(E(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function kr(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Tr[t]}function Ar(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function jr(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Mr(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 Nr(e,t){try{return Pr(Er(e),t).map}catch{return null}}function Pr(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=Lr(Fr(e.nodes,n).map(e=>Ir(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:Rr(r),edges:o},audit:n}}function Fr(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 Ir(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 Lr(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function Rr(e){return[...e].sort((e,t)=>e.stage-t.stage)}function zr(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?Nr(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Br(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
97
97
  <header class="prb-map-head">
98
98
  <div class="prb-map-heading">
99
- <h4 class="prb-map-title">${p(a.title)}</h4>
100
- ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${M(a.intent)}</p>`:``}
99
+ <h4 class="prb-map-title">${g(a.title)}</h4>
100
+ ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${N(a.intent)}</p>`:``}
101
101
  </div>
102
102
  <div class="prb-map-tools">
103
- ${zr(i)}
103
+ ${Vr(i)}
104
104
  <button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
105
105
  </div>
106
106
  </header>
107
107
  <p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
108
- ${Br(a,s)}
109
- ${Wr(a)}
110
- </div>`}function Rr(e){return`<div class="prb-map-empty" data-change-map-empty>
108
+ ${Hr(a,s)}
109
+ ${Kr(a)}
110
+ </div>`}function Br(e){return`<div class="prb-map-empty" data-change-map-empty>
111
111
  ${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
112
112
  <h4 class="prb-map-empty-title">See the change as a map</h4>
113
113
  <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>
114
114
  <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>
115
115
  <button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
116
- </div>`}function zr(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 Br(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}">
117
- <h5 class="prb-map-stage-title">${p(Sr[n]??``)}</h5>
118
- ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Hr(n,t,e)).join(``)}
119
- </div>`).join(``),i=e.edges.map((e,t)=>Ur(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
116
+ </div>`}function Vr(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 Hr(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}">
117
+ <h5 class="prb-map-stage-title">${g(wr[n]??``)}</h5>
118
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Wr(n,t,e)).join(``)}
119
+ </div>`).join(``),i=e.edges.map((e,t)=>Gr(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
120
120
  <svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
121
121
  ${r}
122
122
  <div class="prb-map-labels" aria-hidden="true">${i}</div>
123
- </div>`}var Vr={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Hr(e,t,n){let r=p(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>${M(e.label)}</em> <span aria-hidden="true">→</span> ${M(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}">
124
- <p class="prb-map-role">${Vr[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
125
- <h5 class="prb-map-node-title" id="prb-map-node-${r}">${M(e.title)}</h5>
126
- ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${M(e.body)}</p>`:``}
127
- ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${M(e.why)}</p>`:``}
128
- ${e.anchor?`<code class="prb-map-anchor">${p(e.anchor)}</code>`:``}
123
+ </div>`}var Ur={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Wr(e,t,n){let r=g(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>${N(e.label)}</em> <span aria-hidden="true">→</span> ${N(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}">
124
+ <p class="prb-map-role">${Ur[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
125
+ <h5 class="prb-map-node-title" id="prb-map-node-${r}">${N(e.title)}</h5>
126
+ ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${N(e.body)}</p>`:``}
127
+ ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${N(e.why)}</p>`:``}
128
+ ${e.anchor?`<code class="prb-map-anchor">${g(e.anchor)}</code>`:``}
129
129
  ${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
130
- ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${p(e.sectionId)}" aria-label="Open ${p(i)} in the Review Path">Review Path: ${p(i)} <span aria-hidden="true">→</span></button>`:``}
131
- </article>`}function Ur(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${p(e.from)}" data-to="${p(e.to)}">${M(e.label)}</span>`}function Wr(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
130
+ ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${g(e.sectionId)}" aria-label="Open ${g(i)} in the Review Path">Review Path: ${g(i)} <span aria-hidden="true">→</span></button>`:``}
131
+ </article>`}function Gr(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${g(e.from)}" data-to="${g(e.to)}">${N(e.label)}</span>`}function Kr(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
132
132
  <summary>Read as a list</summary>
133
- <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${M(n)}</strong> <em>${M(e.label)}</em> <strong>${M(r)}</strong>${e.note?`<span class="prb-map-note"> — ${M(e.note)}</span>`:``}</li>`}).join(``)}</ol>
134
- </details>`}function M(e){return e.simple===e.technical?m(e.simple):`<span data-reg="simple">${m(e.simple)}</span><span data-reg="technical">${m(e.technical)}</span>`}var Gr=`http://www.w3.org/2000/svg`,Kr=new WeakSet,qr=new WeakMap;function Jr(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){si(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&&oi(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&&oi(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`)&&(oi(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=n.dataset.diagramMode===`map`?`diagram`:`map`;e.showView(r),document.querySelector(`.prb-view[data-view="${r}"] [data-diagram-mode="${r}"]`)?.focus()}}}),{layout:Yr,show:Xr}}function Yr(){for(let e of document.querySelectorAll(`[data-map-board]`))Zr(e),Qr(e)}function Xr(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Lr({stored:e,sections:li(),reviewedSha:e.commitSha,register:ci()}),Yr())}function Zr(e){if(Kr.has(e)||typeof ResizeObserver>`u`)return;Kr.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Qr(e)}))}).observe(e)}function Qr(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(ai());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?$r(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=qr.get(e),_=g&&g.width===h?g.edges:new Set;qr.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=ei(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=ei(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ni(s,i.from,c,i.to),[u,h,g,ee]=l,te=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>ri(l,.05+t*.05)).some(e=>te.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let y=document.createElementNS(Gr,`path`);y.setAttribute(`d`,`M${N(u.x)},${N(u.y)} C${N(h.x)},${N(h.y)} ${N(g.x)},${N(g.y)} ${N(ee.x)},${N(ee.y)}`),y.setAttribute(`class`,`prb-map-edge`),y.setAttribute(`marker-end`,`url(#prb-map-arrow)`),y.dataset.mapEdge=e.dataset.mapEdge??``,y.dataset.from=e.dataset.from??``,y.dataset.to=e.dataset.to??``,t.appendChild(y),e.hidden=!1;let ne=e.offsetWidth,re=e.offsetHeight,ie=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=ri(l,e);return{left:t.x-ne/2,top:t.y-re/2,right:t.x+ne/2,bottom:t.y+re/2}}).find(e=>![...m,...p,...f].some(t=>ii(e,t,2)));if(!ie){y.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(ie),e.style.left=`${Math.round(ie.left)}px`,e.style.top=`${Math.round(ie.top)}px`}),e.setAttribute(`data-laid-out`,``)}function $r(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 ei(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 ti={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ni(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=ti[t],s=ti[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 ri([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 ii(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 N(e){return Math.round(e*10)/10}function ai(){let e=document.createElementNS(Gr,`defs`),t=document.createElementNS(Gr,`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(Gr,`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 oi(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 si(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));Yr(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function ci(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function li(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}function ui(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var di=1e3,fi=new WeakMap;function pi(e,t){return e.length<=1e3?ui(e)||`&nbsp;`:`${ui(e.slice(0,di))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function mi(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">${pi(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function hi(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?mi(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${pi(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(mi(a)),i.join(``)}function gi(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 _i(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&&fi.set(r,o)}}function vi(e){let t=fi.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function yi(e){return e.deletion?2*e.line-1:2*e.line}function bi(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function xi(e,t){if(e.length===0)return``;let n=e.map(yi),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}">
133
+ <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${N(n)}</strong> <em>${N(e.label)}</em> <strong>${N(r)}</strong>${e.note?`<span class="prb-map-note"> — ${N(e.note)}</span>`:``}</li>`}).join(``)}</ol>
134
+ </details>`}function N(e){return e.simple===e.technical?_(e.simple):`<span data-reg="simple">${_(e.simple)}</span><span data-reg="technical">${_(e.technical)}</span>`}var qr=`http://www.w3.org/2000/svg`,Jr=new WeakSet,Yr=new WeakMap;function Xr(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){li(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&&ci(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&&ci(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`)&&(ci(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=n.dataset.diagramMode===`map`?`diagram`:`map`;e.showView(r),document.querySelector(`.prb-view[data-view="${r}"] [data-diagram-mode="${r}"]`)?.focus()}}}),{layout:Zr,show:Qr}}function Zr(){for(let e of document.querySelectorAll(`[data-map-board]`))$r(e),ei(e)}function Qr(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=zr({stored:e,sections:di(),reviewedSha:e.commitSha,register:ui()}),Zr())}function $r(e){if(Jr.has(e)||typeof ResizeObserver>`u`)return;Jr.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,ei(e)}))}).observe(e)}function ei(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(si());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?ti(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=Yr.get(e),_=g&&g.width===h?g.edges:new Set;Yr.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=ni(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=ni(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ii(s,i.from,c,i.to),[u,h,g,y]=l,ee=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>ai(l,.05+t*.05)).some(e=>ee.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let b=document.createElementNS(qr,`path`);b.setAttribute(`d`,`M${P(u.x)},${P(u.y)} C${P(h.x)},${P(h.y)} ${P(g.x)},${P(g.y)} ${P(y.x)},${P(y.y)}`),b.setAttribute(`class`,`prb-map-edge`),b.setAttribute(`marker-end`,`url(#prb-map-arrow)`),b.dataset.mapEdge=e.dataset.mapEdge??``,b.dataset.from=e.dataset.from??``,b.dataset.to=e.dataset.to??``,t.appendChild(b),e.hidden=!1;let te=e.offsetWidth,ne=e.offsetHeight,re=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=ai(l,e);return{left:t.x-te/2,top:t.y-ne/2,right:t.x+te/2,bottom:t.y+ne/2}}).find(e=>![...m,...p,...f].some(t=>oi(e,t,2)));if(!re){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(re),e.style.left=`${Math.round(re.left)}px`,e.style.top=`${Math.round(re.top)}px`}),e.setAttribute(`data-laid-out`,``)}function ti(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 ni(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 ri={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ii(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=ri[t],s=ri[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 ai([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 oi(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 P(e){return Math.round(e*10)/10}function si(){let e=document.createElementNS(qr,`defs`),t=document.createElementNS(qr,`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(qr,`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 ci(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 li(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));Zr(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function ui(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function di(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}function fi(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var pi=1e3,mi=new WeakMap;function hi(e,t){return e.length<=1e3?fi(e)||`&nbsp;`:`${fi(e.slice(0,pi))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function gi(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">${hi(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function _i(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?gi(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${hi(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(gi(a)),i.join(``)}function vi(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 yi(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&&mi.set(r,o)}}function bi(e){let t=mi.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function xi(e){return e.deletion?2*e.line-1:2*e.line}function Si(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Ci(e,t){if(e.length===0)return``;let n=e.map(xi),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}">
135
135
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
136
136
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
137
137
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
138
- </span>`}function Si(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:bi(i)}}function Ci(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function wi(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(bi)}function Ti(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?bi(t):void 0}function Ei(e,t){return Math.max(e,+!t)+1}var Di=8;function Oi(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 ki(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Ai(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 ji(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Mi(e){if(!e.hasAttribute(`data-expanded`))return;let t=Oi(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ki({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Ni(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 Pi=!1;function Fi(){Pi||(Pi=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Mi(e)}))}function Ii(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Ai(n):null;t?(e.setAttribute(`data-expanded`,``),Mi(e),Fi()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Ni(e),n&&r&&ji(n,r);let i=t?Oi(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Di)}var Li={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 Ri(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Li[t.slice(n+1).toLowerCase()]??null}function zi(e){let t=new Set;for(let n of e){let e=Ri(n);e&&t.add(e)}return[...t]}var Bi={ruby:()=>D(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([19,20,21,22,23,24,25,26,27,28,29])),javascript:()=>D(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([30,21])),typescript:()=>D(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([31,26])),jsx:()=>D(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([32,24])),tsx:()=>D(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([33,27])),json:()=>D(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>D(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([34,29])),markdown:()=>D(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>D(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([35,22,20,21])),css:()=>D(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([36,20])),scss:()=>D(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([37,20])),sql:()=>D(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([38,25])),python:()=>D(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>D(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([39,23])),kotlin:()=>D(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>D(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>D(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>D(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([40,28])),docker:()=>D(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>D(()=>import(`./chunk-DswuEJGm.js`),[])},Vi=`github-light-default`,Hi=null,Ui=new Map;function Wi(){return Hi??=Promise.all([D(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([41,3])),D(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([42,3])),D(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(D(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Hi}function Gi(e){let t=Ui.get(e);return t||(t=Wi().then(async t=>t?(await t.loadLanguage(Bi[e]),!0):!1).catch(()=>!1),Ui.set(e,t)),t.then(e=>e?Wi():null)}var Ki={async preload(e){await Gi(e)},async tokenize(e,t){let n=await Gi(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Vi}),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 qi(e,t=Ki){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Ji=/^#[0-9a-f]{3,8}$/i;function Yi(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Ji.test(e.color)?`<span style="color:${e.color}">${ui(e.content)}</span>`:ui(e.content)).join(``)}function Xi(e){return e.length>1e3?e.slice(0,di):e}function Zi(e,t,n){if(!e||t===``)return;let r=Yi(Xi(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 Qi(e,t,n=Ki){let r=Ri(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(Xi).join(`
139
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{Zi(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=>Xi(e.text)).join(`
140
- `),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;Zi(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function $i(e,t=Ki){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Bi)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Yi(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var P=document.body,ea=P.dataset.apiBase??``,ta=P.dataset.token??``,na=P.dataset.editorLabel??``,ra=P.dataset.editorTemplate??``,ia=P.dataset.repoPath??``,aa=P.dataset.explainPrompt??``,oa=P.dataset.sessionId??``;function F(e){return`${ea}${e}?t=${encodeURIComponent(ta)}`}function I(e){fetch(F(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var sa=Xn({endpoint:F,showDiagrams:()=>R(`diagram`),showMap:()=>R(`map`),showChangeMap:e=>ca.show(e)}),ca=Jr({endpoint:F,showView:e=>R(e)}),la=null,ua=`the whole change`;function da(e){let t=vt(e,fa),n=gt(t);window.location.hash!==n&&history.pushState(t,``,n),pa(t)}var L=null,fa=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function pa(e){let t=vt(e,fa);if(t!==e){let{kind:e,view:n,focus:r,...i}=history.state??{};history.replaceState({...i,...t},``,gt(t))}let n=!L||!wt(L,t);L=t,n&&(t.kind===`view`?ba(t.view):wa(t.sectionId)),ga(t.focus??null)}var ma={history,apply:pa},ha=Ft(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Wo(e):Go(e),onClose:Go});function ga(e){Ot(document.querySelector(`.prb-body`),document,e),ha.closeAll(),e===`buddy`&&uo()}function _a(e){L&&(L.focus===e?Et(L,ma):Tt(L,e,ma))}window.addEventListener(`keydown`,e=>{!L||!Dt(e,document,!!L.focus)||(e.preventDefault(),Et(L,ma))},!0);var va=[`map`,`diagram`];function R(e){da({kind:`view`,view:e,...va.includes(e)&&va.includes(L?.focus??``)?{focus:e}:{}})}function ya(e){da({kind:`section`,sectionId:e,...L?.focus===`guide`?{focus:`guide`}:{}})}function ba(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===e));I({event:`view_opened`,view:e}),e===`diagram`&&sa.drawPane(),e===`map`&&ca.layout(),xa(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function xa(){Wt(),la=null,ua=`the whole change`,Ta()}function Sa(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 Ca(){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`)&&Sa(e,!0)}}function wa(e){ba(`guide`),Ca(),Ut(e);let t=Vt(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`}),la=e,ua=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Ta()}function Ta(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=ua)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Ea(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Da(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}=Ea(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),I({event:`file_opened`,fromFinding:i,targeted:r>0}),await Oa(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}async function Oa(e,t,n){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();if(!o.ok){e.innerHTML=`<p class="prb-code-status">${z(s?.error??`Could not read that file.`)}</p>`;return}ka(e,s,n)}catch{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}function ka(e,t,n){let{cited:r,centre:i,expand:a}=n,o=hi(t,r),s=ra&&ia?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="${z(t.path)}" data-open-line="${r||t.from}">${z(`Open in ${na||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${z(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${z(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${z(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Ei(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>${z(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${xi(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
138
+ </span>`}function wi(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:Si(i)}}function Ti(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Ei(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Si)}function Di(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Si(t):void 0}function Oi(e,t){return Math.max(e,+!t)+1}var ki=8;function Ai(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 ji(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Mi(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 Ni(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Pi(e){if(!e.hasAttribute(`data-expanded`))return;let t=Ai(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ji({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Fi(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 Ii=!1;function Li(){Ii||(Ii=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Pi(e)}))}function Ri(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Mi(n):null;t?(e.setAttribute(`data-expanded`,``),Pi(e),Li()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Fi(e),n&&r&&Ni(n,r);let i=t?Ai(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-ki)}var zi={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 Bi(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:zi[t.slice(n+1).toLowerCase()]??null}function Vi(e){let t=new Set;for(let n of e){let e=Bi(n);e&&t.add(e)}return[...t]}var Hi={ruby:()=>O(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([19,20,21,22,23,24,25,26,27,28,29])),javascript:()=>O(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([30,21])),typescript:()=>O(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([31,26])),jsx:()=>O(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([32,24])),tsx:()=>O(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([33,27])),json:()=>O(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>O(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([34,29])),markdown:()=>O(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>O(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([35,22,20,21])),css:()=>O(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([36,20])),scss:()=>O(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([37,20])),sql:()=>O(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([38,25])),python:()=>O(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>O(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([39,23])),kotlin:()=>O(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>O(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>O(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>O(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([40,28])),docker:()=>O(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>O(()=>import(`./chunk-DswuEJGm.js`),[])},Ui=`github-light-default`,Wi=null,Gi=new Map;function Ki(){return Wi??=Promise.all([O(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([41,3])),O(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([42,3])),O(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(O(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Wi}function qi(e){let t=Gi.get(e);return t||(t=Ki().then(async t=>t?(await t.loadLanguage(Hi[e]),!0):!1).catch(()=>!1),Gi.set(e,t)),t.then(e=>e?Ki():null)}var Ji={async preload(e){await qi(e)},async tokenize(e,t){let n=await qi(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Ui}),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 Yi(e,t=Ji){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Xi=/^#[0-9a-f]{3,8}$/i;function Zi(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Xi.test(e.color)?`<span style="color:${e.color}">${fi(e.content)}</span>`:fi(e.content)).join(``)}function Qi(e){return e.length>1e3?e.slice(0,pi):e}function $i(e,t,n){if(!e||t===``)return;let r=Zi(Qi(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 ea(e,t,n=Ji){let r=Bi(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(Qi).join(`
139
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{$i(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=>Qi(e.text)).join(`
140
+ `),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;$i(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function ta(e,t=Ji){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Hi)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Zi(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var F=document.body,na=F.dataset.apiBase??``,ra=F.dataset.token??``,ia=F.dataset.editorLabel??``,aa=F.dataset.editorTemplate??``,oa=F.dataset.repoPath??``,sa=F.dataset.explainPrompt??``,ca=F.dataset.sessionId??``;function I(e){return`${na}${e}?t=${encodeURIComponent(ra)}`}function L(e){fetch(I(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var la=Qn({endpoint:I,showDiagrams:()=>xa(`diagram`),showMap:()=>xa(`map`),showChangeMap:e=>ua.show(e)}),ua=Xr({endpoint:I,showView:e=>xa(e)}),da=null,fa=`the whole change`;function pa(e){let t=bt(e,ma),n=vt(t);window.location.hash!==n&&history.pushState(t,``,n),ha(t)}var R=null,ma=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function ha(e){let t=bt(e,ma);if(t!==e){let{kind:e,view:n,focus:r,...i}=history.state??{};history.replaceState({...i,...t},``,vt(t))}let n=!R||!Et(R,t);R=t,n&&(t.kind===`view`?Ca(t.view):Da(t.sectionId)),va(t.focus??null)}var ga={history,apply:ha},_a=Lt(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?qo(e):Jo(e),onClose:Jo});function va(e){At(document.querySelector(`.prb-body`),document,e),_a.closeAll(),e===`buddy`&&mo()}function ya(e){R&&(R.focus===e?Ot(R,ga):Dt(R,e,ga))}window.addEventListener(`keydown`,e=>{!R||!kt(e,document,!!R.focus)||(e.preventDefault(),Ot(R,ga))},!0);var ba=[`map`,`diagram`];function xa(e){pa({kind:`view`,view:e,...ba.includes(e)&&ba.includes(R?.focus??``)?{focus:e}:{}})}function Sa(e){pa({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function Ca(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===e));L({event:`view_opened`,view:e}),e===`diagram`&&la.drawPane(),e===`map`&&ua.layout(),wa(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function wa(){Kt(),da=null,fa=`the whole change`,Oa()}function Ta(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 Ea(){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`)&&Ta(e,!0)}}function Da(e){Ca(`guide`),Ea(),Gt(e);let t=Ut(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);L({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),da=e,fa=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Oa()}function Oa(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=fa)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function ka(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Aa(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}=ka(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),L({event:`file_opened`,fromFinding:i,targeted:r>0}),await ja(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}async function ja(e,t,n){try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${I(`/file`)}${a}`),s=await o.json();if(!o.ok){e.innerHTML=`<p class="prb-code-status">${z(s?.error??`Could not read that file.`)}</p>`;return}Ma(e,s,n)}catch{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}function Ma(e,t,n){let{cited:r,centre:i,expand:a}=n,o=_i(t,r),s=aa&&oa?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="${z(t.path)}" data-open-line="${r||t.from}">${z(`Open in ${ia||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${z(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${z(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${z(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Oi(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>${z(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Ci(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
141
141
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
142
142
  ${c}
143
143
  ${s}
@@ -145,7 +145,7 @@ import{c as e,i as t,t as n}from"./chunk-BeL0x-wt.js";import{C as r,S as i,_ as
145
145
  </div>
146
146
  ${f}
147
147
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
148
- ${l}`,_i(e,t),Mi(e),Ni(e),(n.focus?Ci(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Qi(e,t)}async function Aa(e,t,n){let r=Si(t,n);if(!r)return;let i=Ci(e,r.anchor);if(i)t.outerHTML=xi(wi(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Oa(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 ja(e,t,n){let r=`${ia.replace(/\/$/,``)}/${e}`,i=ra.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));I({event:`editor_opened`,fromFinding:n}),window.location.href=i}var B=document.querySelector(`[data-ask-log]`);B&&B.querySelector(`.prb-msg`)&&B.scrollTo({top:B.scrollHeight});var Ma=document.querySelector(`[data-ask-form]`),V=Ma?.querySelector(`textarea`);function Na(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=re(t)+me(t)):n.textContent=t,B?.appendChild(n),B?.scrollTo({top:B.scrollHeight}),n}function Pa(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight}),e}var H=null,U=!!B?.querySelector(`[data-ask-pending]`);function Fa(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function Ia(e,t=`free_text`){let n=e.trim();if(!n||H||U)return;document.querySelector(`.prb-ask-empty`)?.remove(),Na(`user`,n);let r=Pa();H=new AbortController,La(!0);try{let e=await fetch(F(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:la,source:t}),signal:H.signal}),i=await e.json().catch(()=>null);if(e.status===409&&(i?.running||i?.updating)){window.location.reload();return}if(r.remove(),i?.stopped){Fa();return}if(!e.ok||!i?.answer){Na(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Na(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(Fa(),V&&!V.value&&(V.value=n)):Na(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{H=null,La(!1)}}function La(e){let t=Ma?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),V&&(V.disabled=e);for(let t of document.querySelectorAll(Ra))t.disabled=e;e&&ha.closeAll(),e||V?.focus()}var Ra=`[data-suggestion], .pr-helper-explain-simply-button`;function za(){let e=Ma?.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(()=>{H?.abort()})}Ma?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||U)return za();let t=V?.value??``;V&&(V.value=``),Ia(t,Va(t))}),U&&La(!0);var Ba=null;function Va(e){return Ba&&e.includes(Ba.text)?Ba.source:`free_text`}V?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Ma?.requestSubmit())}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function Ha(e){try{await fetch(F(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Ua(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Wa(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&&Xa(n,t,`questions`),no()}function Ga(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||oa})).filter(e=>e.id)}async function Ka(e){try{await fetch(F(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function qa(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=oa: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(Ja()),Xa(n,t||e.dataset.settled===`true`,`issues`),io())}function Ja(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Lt,e.textContent=`Dismissed by you`,e}var Ya=new WeakMap;function Xa(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Ya.set(e,{parent:t,before:e.nextElementSibling}),eo(n).append(e),t&&$a(t)}else Za(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();to(n)}}function Za(e,t){let n=Ya.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Qa(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Qa(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function $a(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function eo(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 to(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=zt(ro())}function no(){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=Bt(e.length,t)),ao(`questions`,e.length,t,`question`,`answered`)}function ro(){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 io(){let e=ro();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=Rt(e.total,e.open,It(e))),ao(`issues`,e.total,e.open,`issue`,It(e))}function ao(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){Sa(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){R(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){R(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){ya(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){ja(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-deletion-toggle]`);if(s){gi(s);return}let c=t.closest(`[data-code-expand]`);if(c){let e=c.closest(`.prb-code`);e&&Ii(e,!e.hasAttribute(`data-expanded`));return}let l=t.closest(`[data-change-step]`);if(l){let e=l.closest(`[data-change-navigator]`),t=l.closest(`.prb-code`);e&&t&&!l.disabled&&Aa(t,e,l.dataset.changeStep===`previous`?`previous`:`next`);return}let u=t.closest(`[data-full-line]`);if(u){let e=vi(u);e&&$i(e);return}let d=t.closest(`[data-expand-file]`);if(d?.dataset.expandFile){let e=d.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Oa(e,d.dataset.expandFile,{cited:Number(d.dataset.expandCited)||0,centre:Number(d.dataset.expandLine)||0,expand:Number(d.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Ti(t)})}return}let f=t.closest(`[data-focus-toggle]`);if(f?.dataset.focusToggle){_a(f.dataset.focusToggle);return}let p=t.closest(`[data-prompt-toggle]`);if(p){Po(p.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let m=t.closest(`[data-file]`);if(m?.dataset.file){Da(m);return}let h=Ht(t);if(h){ya(h);return}let g=t.closest(`[data-question-answered]`);if(g?.dataset.questionAnswered){Wa(g,g.dataset.answered!==`true`);let e=Ua();Ha(e),I({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let _=t.closest(`[data-issue-dismissed]`);if(_?.dataset.issueDismissed){qa(_,_.dataset.stale===`true`||_.dataset.dismissed!==`true`);let e=Ga();Ka(e),I({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let v=t.closest(`[data-suggestion]`);if(v){Ia(v.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){uo(),Ia(aa,`explain_simply`);return}let ee=t.closest(`[data-prompt-use]`);if(ee?.dataset.promptUse){Fo(ee.dataset.promptUse);return}let te=t.closest(`[data-prompt-edit]`);if(te?.dataset.promptEdit){Qo(te.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Qo(``);return}if(t.closest(`[data-ask-toggle]`)){let e=L?.focus;e?(Et(L,ma),co(e!==`buddy`)):co(!so())}});var W=document.querySelector(`.prb-body`),oo=document.querySelector(`.prb-ask`);function so(){return!!oo&&getComputedStyle(oo).display!==`none`}function co(e){W&&(W.dataset.ask=e?`open`:`closed`),lo(e)}function lo(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function uo(){L?.focus&&L.focus!==`buddy`&&Et(L,ma),co(!0)}function fo(){lo(so())}window.addEventListener(`resize`,fo),n(F(`/restart`));var po=document.querySelector(`[data-file-filter]`),mo=document.querySelector(`[data-file-count]`),ho=document.querySelector(`[data-file-none]`);function go(){let e=(po?.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}`}ho&&(ho.hidden=n>0),mo&&(mo.textContent=e?`${t} of ${_o} file${_o===1?``:`s`}`:`${_o} file${_o===1?``:`s`}`)}var _o=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;po?.addEventListener(`input`,go),po?.addEventListener(`keydown`,e=>{e.key===`Escape`&&po.value!==``&&(e.preventDefault(),po.value=``,go())}),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(),Da(n))});var vo=320,yo=()=>Math.round(window.innerWidth/2),bo=e=>Math.round(Math.min(yo(),Math.max(vo,e)));function xo(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function So(){return oo?Math.round(oo.getBoundingClientRect().width):vo}function Co(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||!oo)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=So(),r=e=>{xo(bo(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,Co(So())};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=bo(So()+n);xo(r),Co(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),xo(null),Co(null))}),G?.addEventListener(`dblclick`,()=>{xo(null),Co(null)}),window.addEventListener(`resize`,()=>{so()&&W?.style.getPropertyValue(`--ask-width`)&&xo(bo(So()))});var wo=3e4,To=document.visibilityState===`visible`?Date.now():null,Eo=0;function Do(){To!==null&&(Eo+=Date.now()-To,To=Date.now())}function Oo(){Do();let e=Math.round(Eo/1e3);return Eo-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?To=Date.now():(Do(),To=null)}),setInterval(()=>{let e=Oo();e>0&&I({event:`workspace_heartbeat`,visibleSeconds:e})},wo),window.addEventListener(`pagehide`,()=>{let e=F(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Oo()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var ko=document.querySelector(`[data-prompt-bank]`),Ao=document.querySelector(`[data-prompt-list]`),K=jo();function jo(){try{let e=JSON.parse(ko?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Mo(){if(!Ao)return;Ao.innerHTML=K.map(e=>`<span class="prb-bank-item">
148
+ ${l}`,yi(e,t),Pi(e),Fi(e),(n.focus?Ti(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),ea(e,t)}async function Na(e,t,n){let r=wi(t,n);if(!r)return;let i=Ti(e,r.anchor);if(i)t.outerHTML=Ci(Ei(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await ja(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 Pa(e,t,n){let r=`${oa.replace(/\/$/,``)}/${e}`,i=aa.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));L({event:`editor_opened`,fromFinding:n}),window.location.href=i}var B=document.querySelector(`[data-ask-log]`);B&&B.querySelector(`.prb-msg`)&&B.scrollTo({top:B.scrollHeight});var Fa=document.querySelector(`[data-ask-form]`),V=Fa?.querySelector(`textarea`);function Ia(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=ae(t)+ge(t)):n.textContent=t,B?.appendChild(n),B?.scrollTo({top:B.scrollHeight}),n}function La(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight}),e}var H=null,U=!!B?.querySelector(`[data-ask-pending]`);function Ra(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function za(e,t=`free_text`){let n=e.trim();if(!n||H||U)return;document.querySelector(`.prb-ask-empty`)?.remove(),Ia(`user`,n);let r=La();H=new AbortController,Ba(!0);try{let e=await fetch(I(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:da,source:t}),signal:H.signal}),i=await e.json().catch(()=>null);if(e.status===409&&(i?.running||i?.updating)){window.location.reload();return}if(r.remove(),i?.stopped){Ra();return}if(!e.ok||!i?.answer){Ia(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Ia(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(Ra(),V&&!V.value&&(V.value=n)):Ia(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{H=null,Ba(!1)}}function Ba(e){let t=Fa?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),V&&(V.disabled=e);for(let t of document.querySelectorAll(Va))t.disabled=e;e&&_a.closeAll(),e||V?.focus()}var Va=`[data-suggestion], .pr-helper-explain-simply-button`;function Ha(){let e=Fa?.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(()=>{H?.abort()})}Fa?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||U)return Ha();let t=V?.value??``;V&&(V.value=``),za(t,Wa(t))}),U&&Ba(!0);var Ua=null;function Wa(e){return Ua&&e.includes(Ua.text)?Ua.source:`free_text`}V?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Fa?.requestSubmit())}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function Ga(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Ka(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function qa(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&&$a(n,t,`questions`),ao()}function Ja(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||ca})).filter(e=>e.id)}async function Ya(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Xa(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=ca: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(Za()),$a(n,t||e.dataset.settled===`true`,`issues`),so())}function Za(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=zt,e.textContent=`Dismissed by you`,e}var Qa=new WeakMap;function $a(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Qa.set(e,{parent:t,before:e.nextElementSibling}),ro(n).append(e),t&&no(t)}else eo(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();io(n)}}function eo(e,t){let n=Qa.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=to(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function to(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function no(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function ro(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 io(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=Vt(oo())}function ao(){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=Ht(e.length,t)),co(`questions`,e.length,t,`question`,`answered`)}function oo(){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 so(){let e=oo();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=Bt(e.total,e.open,Rt(e))),co(`issues`,e.total,e.open,`issue`,Rt(e))}function co(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){Ta(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){xa(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){xa(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){Sa(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){Pa(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-deletion-toggle]`);if(s){vi(s);return}let c=t.closest(`[data-code-expand]`);if(c){let e=c.closest(`.prb-code`);e&&Ri(e,!e.hasAttribute(`data-expanded`));return}let l=t.closest(`[data-change-step]`);if(l){let e=l.closest(`[data-change-navigator]`),t=l.closest(`.prb-code`);e&&t&&!l.disabled&&Na(t,e,l.dataset.changeStep===`previous`?`previous`:`next`);return}let u=t.closest(`[data-full-line]`);if(u){let e=bi(u);e&&ta(e);return}let d=t.closest(`[data-expand-file]`);if(d?.dataset.expandFile){let e=d.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);ja(e,d.dataset.expandFile,{cited:Number(d.dataset.expandCited)||0,centre:Number(d.dataset.expandLine)||0,expand:Number(d.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Di(t)})}return}let f=t.closest(`[data-focus-toggle]`);if(f?.dataset.focusToggle){ya(f.dataset.focusToggle);return}let p=t.closest(`[data-prompt-toggle]`);if(p){Lo(p.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let m=t.closest(`[data-file]`);if(m?.dataset.file){Aa(m);return}let h=Wt(t);if(h){Sa(h);return}let g=t.closest(`[data-question-answered]`);if(g?.dataset.questionAnswered){qa(g,g.dataset.answered!==`true`);let e=Ka();Ga(e),L({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let _=t.closest(`[data-issue-dismissed]`);if(_?.dataset.issueDismissed){Xa(_,_.dataset.stale===`true`||_.dataset.dismissed!==`true`);let e=Ja();Ya(e),L({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let v=t.closest(`[data-suggestion]`);if(v){za(v.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){mo(),za(sa,`explain_simply`);return}let y=t.closest(`[data-prompt-use]`);if(y?.dataset.promptUse){Ro(y.dataset.promptUse);return}let ee=t.closest(`[data-prompt-edit]`);if(ee?.dataset.promptEdit){ts(ee.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){ts(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(Ot(R,ga),fo(e!==`buddy`)):fo(!uo())}});var W=document.querySelector(`.prb-body`),lo=document.querySelector(`.prb-ask`);function uo(){return!!lo&&getComputedStyle(lo).display!==`none`}function fo(e){W&&(W.dataset.ask=e?`open`:`closed`),po(e)}function po(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function mo(){R?.focus&&R.focus!==`buddy`&&Ot(R,ga),fo(!0)}function ho(){po(uo())}window.addEventListener(`resize`,ho),r(I(`/restart`));var go=document.querySelector(`[data-file-filter]`),_o=document.querySelector(`[data-file-count]`),vo=document.querySelector(`[data-file-none]`);function yo(){let e=(go?.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}`}vo&&(vo.hidden=n>0),_o&&(_o.textContent=e?`${t} of ${bo} file${bo===1?``:`s`}`:`${bo} file${bo===1?``:`s`}`)}var bo=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;go?.addEventListener(`input`,yo),go?.addEventListener(`keydown`,e=>{e.key===`Escape`&&go.value!==``&&(e.preventDefault(),go.value=``,yo())}),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(),Aa(n))});var xo=320,So=()=>Math.round(window.innerWidth/2),Co=e=>Math.round(Math.min(So(),Math.max(xo,e)));function wo(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function To(){return lo?Math.round(lo.getBoundingClientRect().width):xo}function Eo(e){fetch(I(`/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||!lo)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=To(),r=e=>{wo(Co(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,Eo(To())};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=Co(To()+n);wo(r),Eo(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),wo(null),Eo(null))}),G?.addEventListener(`dblclick`,()=>{wo(null),Eo(null)}),window.addEventListener(`resize`,()=>{uo()&&W?.style.getPropertyValue(`--ask-width`)&&wo(Co(To()))});var Do=3e4,Oo=document.visibilityState===`visible`?Date.now():null,ko=0;function Ao(){Oo!==null&&(ko+=Date.now()-Oo,Oo=Date.now())}function jo(){Ao();let e=Math.round(ko/1e3);return ko-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Oo=Date.now():(Ao(),Oo=null)}),setInterval(()=>{let e=jo();e>0&&L({event:`workspace_heartbeat`,visibleSeconds:e})},Do),window.addEventListener(`pagehide`,()=>{let e=I(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:jo()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Mo=document.querySelector(`[data-prompt-bank]`),No=document.querySelector(`[data-prompt-list]`),K=Po();function Po(){try{let e=JSON.parse(Mo?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Fo(){if(!No)return;No.innerHTML=K.map(e=>`<span class="prb-bank-item">
149
149
  <button type="button" class="prb-bank-use" data-prompt-use="${z(e.id)}" title="${z(e.prompt)}">${z(e.name)}</button>
150
150
  <button type="button" class="prb-bank-edit" data-prompt-edit="${z(e.id)}" aria-label="Edit ${z(e.name)}">&#9998;</button>
151
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Vo()}async function No(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{}Mo()}function Po(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),ko?.toggleAttribute(`data-collapsed`,e),Ao&&(Ao.hidden=e),fetch(F(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Fo(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=Gt(V.value,t.prompt),uo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var Io=document.querySelector(`.prb-doc`),Lo=null,Ro=null;function zo(){B&&(Ro?.(),Ro=Qe(B,{layout:`flat`,actions:tt.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Ho(e,`selection`,t)}))}function Bo(){return[...$e.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:st(e.id),label:e.name,section:ot}))]}function Vo(){Io&&(Lo?.(),Lo=Qe(Io,{triggerLabel:`Ask Buddy AI`,actions:Bo(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Ho(e,`selection`,t)}))}function Ho(e,t,n){At(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>Uo(e,t),send:e=>{uo(),Ia(e,`finding`)}})}function Uo(e,t){V&&(Ba={text:e,source:t},V.value=Gt(V.value,e),uo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function Wo(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=We(Bo());for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(H||U)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Go(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=lt(n);ha.close(n),i&&Ho(r,`finding`,i)}),Vo(),zo(),Ee(document);var Ko=document.querySelector(`[data-prompt-dialog]`),qo=document.querySelector(`[data-prompt-name]`),Jo=document.querySelector(`[data-prompt-text]`),Yo=document.querySelector(`[data-prompt-delete]`),Xo=document.getElementById(`prb-prompt-title`),Zo=``;function Qo(e){let t=K.find(t=>t.id===e);Zo=t?.id??``,Xo&&(Xo.textContent=t?`Edit prompt`:`Save a prompt`),qo&&(qo.value=t?.name??``),Jo&&(Jo.value=t?.prompt??``),Yo&&(Yo.hidden=!t),Ko?.showModal(),qo?.focus()}async function $o(){let e=qo?.value.trim()??``,t=Jo?.value.trim()??``;if(!e||!t){(e?Jo:qo)?.focus();return}let n=Zo?K.map(n=>n.id===Zo?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Ko?.close(),await No(n)}async function es(){if(!Zo)return;let e=K.filter(e=>e.id!==Zo);Ko?.close(),await No(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Ko?.close()),Yo?.addEventListener(`click`,()=>void es()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void $o());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),ts=document.querySelector(`[data-fresh-check]`),Y=us(q?.dataset.report),ns=`prb-fresh-reopen`,rs=cs(),is=q?.dataset.dismissedSha,as=ss(q?.dataset.availability),X=os(q?.dataset.remote);function os(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ss(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function cs(){try{return sessionStorage.getItem(ns)!==null&&(sessionStorage.removeItem(ns),!0)}catch{return!1}}rs&&Ts(),ts?.addEventListener(`click`,()=>void ps()),q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return rs=!1,Ts();let n=t.closest(`[data-fresh-dismiss]`);n&&(is=n.dataset.freshDismiss||void 0,rs=!1,Ts(),ls())});function ls(){fetch(F(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:is??null})}).catch(()=>{})}function us(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var ds=kn(),fs=!1,Z=null;async function ps(){if(fs)return;fs=!0,ys(!0),Z&&await Z;let e=bs(Y,X),t=await hs(!1);ys(!1),t&&ws(),fs=!1,t&&(Y?.code.state===`changed`||X!==null)&&is!==void 0&&(is=void 0,ls()),Ts(),ms(t?bs(Y,X)===e?`No change`:`Updated`:`Could not check`)}function ms(e){J&&(J.textContent=e,window.setTimeout(Es,2600))}async function hs(e){let t=ds.snapshot();try{let n=await(await fetch(`${F(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,as=n.availability??null,X=n.remote??null,xs=n.kiss??null,n.kissDismissedSha!==void 0&&(Ss=n.kissDismissedSha??void 0),n.prState!==void 0&&vs(n.prState);let r=On(n.standing);return r&&ds.current(t)&&yn(document,r),!0}catch{return!1}}async function gs(){if(fs||Z||!q)return;let e=bs(Y,X),t=JSON.stringify(xs);Z=hs(!0);let n=await Z;Z=null,_s=Date.now(),n&&(bs(Y,X)!==e&&Ts(),JSON.stringify(xs)!==t&&ws())}var _s=Date.now();function vs(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=vn(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function ys(e){ts&&(ts.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function bs(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Q=document.querySelector(`[data-kiss-fresh-region]`),xs=Cs(Q?.dataset.freshness),Ss=Q?.dataset.dismissedSha;function Cs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ws(){Q&&(Q.innerHTML=_n(Q.dataset.reviewedSha??``,xs,{dismissedSha:Ss,actions:ta!==``}))}Q?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Ss=t.dataset.kissFreshnessDismiss||void 0,ws(),fetch(F(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Ss??null})}).catch(()=>{}))});function Ts(){q&&(q.innerHTML=Qt(Y,{dismissedSha:is,open:rs,actions:ta!==``,availability:as,remote:X}),Es())}function Es(){if(J&&(Y||X)){let{label:e,state:t}=Zt(Y,X);J.textContent=e,J.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return Ds(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 ks(i);let a=t.closest(`[data-review-update]`);if(a)return void Ms(a);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function Ds(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Os(e,`Copied`),()=>Os(e,`Select it`))}function Os(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function ks(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=As(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Ns}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=As(e)?null:Ps(e);try{await fetch(F(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}As(e)&&js(),window.location.reload()}function As(e){return e.closest(`.prb-fresh-notes p`)}function js(){try{sessionStorage.setItem(ns,`1`)}catch{}}async function Ms(e){let t=[...document.querySelectorAll(`[data-review-update]`)];for(let e of t)e.disabled=!0,e.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let n=!1,r=()=>{n||(n=!0,window.clearInterval(i),window.location.reload())},i=window.setInterval(async()=>{try{let e=await(await fetch(F(`/job`))).json();e.update&&e.update.phase!==`none`&&!un(e.update.phase)&&r()}catch{}},500);try{await fetch(F(`/update`),{method:`POST`})}catch{}r()}var Ns=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Ps(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=Ns,t.appendChild(n),n}var Fs=Mn(document),Is=null,Ls=Date.now();function Rs(){Is===null&&(Is=window.setTimeout(()=>{Is=null,zs()},i(Date.now()-Ls)))}async function zs(){try{let e=await(await fetch(F(`/job`))).json();if(U&&!e.ask||Vs&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Fs){let r=t[e];if(r){if(Nn(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(Fn(n,r.phase,r.progress),In(n)):Bs(n,r.progress)}}}catch{}Rs()}function Bs(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 Vs=document.querySelector(`[data-diagram-running]`)!==null;(Fs.size>0||U||Vs)&&(Ls=Date.now(),Rs());function Hs(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 Us(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…`,Us(t),fetch(F(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Ls=Date.now(),Rs()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Hs(t)}))}),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;r&&(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=`Run KISS review`;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 Ws=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{pa(e.state??bt(window.location.hash)??{kind:`view`,view:Ws})});var Gs=bt(window.location.hash);Gs?pa(Gs):(L={kind:`view`,view:Ws},history.replaceState(L,``,window.location.pathname+window.location.search)),fo(),Ta();var Ks=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=>{Ks(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Ks(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let e=$.querySelector(`[data-menu-panel]`),t=$.querySelector(`[data-menu-items]`),n=$.querySelector(`[data-menu-confirm]`),i=$.querySelector(`[data-confirm-delete]`),o=()=>Go($);$.addEventListener(`click`,e=>{let i=e.target,a=i?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),r(a,a.dataset.copyId);return}let u=i?.closest(`[data-save-toggle]`);if(u){e.stopPropagation(),c(u);return}if(i?.closest(`[data-fresh-check]`)){ha.closeAll();return}let d=i?.closest(`[data-mark-status]`);if(d){e.stopPropagation(),s(d,`/state`,{complete:d.dataset.markStatus===`complete`},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0}));return}let f=i?.closest(`[data-lifecycle-set]`);if(f){e.stopPropagation(),s(f,`/lifecycle`,{state:f.dataset.lifecycleSet},e=>({lifecycle:En(e.lifecycle),queued:e.queued===!0}));return}let p=i?.closest(`[data-queue-action]`);if(p){e.stopPropagation(),s(p,`/queue`,{action:p.dataset.queueAction},e=>({lifecycle:En(e.lifecycle),queued:e.queued===!0}));return}if(i?.closest(`[data-delete]`)){e.stopPropagation(),t&&(t.hidden=!0),n&&(n.hidden=!1);return}if(i?.closest(`[data-cancel-delete]`)){e.stopPropagation(),o();return}i?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),l())});let s=async(t,n,r,i)=>{$.querySelector(`[data-menu-error]`)?.remove(),t.disabled=!0;let a=ds.begin(),o=null;try{let e=await fetch(F(n),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)}),t=await e.json().catch(()=>null);e.ok&&t?yn(document,i(t)):o=typeof t?.error==`string`?t.error:`That could not be changed.`}catch{o=`The workspace server did not answer. It may have stopped.`}finally{a()}if(t.disabled=!1,o===null)return void ha.closeAll();let s=document.createElement(`p`);s.className=`prb-menu-error`,s.setAttribute(`data-menu-error`,``),s.textContent=o,e?.append(s)},c=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let n=null;try{let e=await fetch(F(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(n=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,n===null){e.textContent=`Could not save`,window.setTimeout(()=>{e.textContent=a(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=a(n)},l=async()=>{i&&(i.disabled=!0,i.textContent=`Deleting`);let t;try{let e=await fetch(F(`/delete`),{method:`POST`});if(e.ok)return void window.location.replace(`/`);t=(await e.json().catch(()=>null))?.error??`That could not be deleted.`}catch{t=`The workspace server did not answer. It may have stopped.`}i&&(i.disabled=!1,i.textContent=`Delete`),o();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e?.append(n)}}t(),setTimeout(()=>{qi(zi([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),e(window,()=>window.location.reload()),d(window,document.querySelector(`main.prb-doc`));var qs=15e3,Js=6e4;function Ys(){return ta!==``&&document.visibilityState===`visible`&&!Fs.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Ys()&&Date.now()-_s>=qs&&gs()}),window.setInterval(()=>{Ys()&&gs()},Js);export{D as t};
151
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Wo()}async function Io(e){try{let t=await(await fetch(I(`/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{}Fo()}function Lo(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Mo?.toggleAttribute(`data-collapsed`,e),No&&(No.hidden=e),fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Ro(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=qt(V.value,t.prompt),mo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var zo=document.querySelector(`.prb-doc`),Bo=null,Vo=null;function Ho(){B&&(Vo?.(),Vo=et(B,{layout:`flat`,actions:rt.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Go(e,`selection`,t)}))}function Uo(){return[...tt.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:lt(e.id),label:e.name,section:ct}))]}function Wo(){zo&&(Bo?.(),Bo=et(zo,{triggerLabel:`Ask Buddy AI`,actions:Uo(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Go(e,`selection`,t)}))}function Go(e,t,n){Mt(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>Ko(e,t),send:e=>{mo(),za(e,`finding`)}})}function Ko(e,t){V&&(Ua={text:e,source:t},V.value=qt(V.value,e),mo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function qo(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Ke(Uo());for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(H||U)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Jo(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=dt(n);_a.close(n),i&&Go(r,`finding`,i)}),Wo(),Ho(),Oe(document);var Yo=document.querySelector(`[data-prompt-dialog]`),Xo=document.querySelector(`[data-prompt-name]`),Zo=document.querySelector(`[data-prompt-text]`),Qo=document.querySelector(`[data-prompt-delete]`),$o=document.getElementById(`prb-prompt-title`),es=``;function ts(e){let t=K.find(t=>t.id===e);es=t?.id??``,$o&&($o.textContent=t?`Edit prompt`:`Save a prompt`),Xo&&(Xo.value=t?.name??``),Zo&&(Zo.value=t?.prompt??``),Qo&&(Qo.hidden=!t),Yo?.showModal(),Xo?.focus()}async function ns(){let e=Xo?.value.trim()??``,t=Zo?.value.trim()??``;if(!e||!t){(e?Zo:Xo)?.focus();return}let n=es?K.map(n=>n.id===es?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Yo?.close(),await Io(n)}async function rs(){if(!es)return;let e=K.filter(e=>e.id!==es);Yo?.close(),await Io(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Yo?.close()),Qo?.addEventListener(`click`,()=>void rs()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void ns());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),is=document.querySelector(`[data-fresh-check]`),Y=hs(q?.dataset.report),as=`prb-fresh-reopen`,os=ds(),ss=q?.dataset.dismissedSha,cs=us(q?.dataset.availability),X=ls(q?.dataset.remote);function ls(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function us(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ds(){try{return sessionStorage.getItem(as)!==null&&(sessionStorage.removeItem(as),!0)}catch{return!1}}os&&As(),is?.addEventListener(`click`,()=>void vs());var fs=document.querySelector(`[data-fetch-remote]`);fs&&(fetch(I(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(fs.hidden=!1)}).catch(()=>{}),fs.addEventListener(`click`,()=>void ps(fs)));async function ps(e){if(e.disabled)return;e.disabled=!0;let r=null;try{let e=await fetch(I(`/fetch`),{method:`POST`});e.ok&&(r=await e.json())}catch{}e.disabled=!1;let i=r??{repositories:1,fetched:0,failed:[],moved:0};t(n(),{kind:i.fetched<i.repositories?`failed`:`ready`,text:d(i)}),i.fetched>0&&await vs()}q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return os=!1,As();let n=t.closest(`[data-fresh-dismiss]`);n&&(ss=n.dataset.freshDismiss||void 0,os=!1,As(),ms())});function ms(){fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:ss??null})}).catch(()=>{})}function hs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var gs=jn(),_s=!1,Z=null;async function vs(){if(_s)return;_s=!0,ws(!0),Z&&await Z;let e=Ts(Y,X),t=await bs(!1);ws(!1),t&&ks(),_s=!1,t&&(Y?.code.state===`changed`||X!==null)&&ss!==void 0&&(ss=void 0,ms()),As(),ys(t?Ts(Y,X)===e?`No change`:`Updated`:`Could not check`)}function ys(e){J&&(J.textContent=e,window.setTimeout(js,2600))}async function bs(e){let t=gs.snapshot();try{let n=await(await fetch(`${I(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,cs=n.availability??null,X=n.remote??null,Es=n.kiss??null,n.kissDismissedSha!==void 0&&(Ds=n.kissDismissedSha??void 0),n.prState!==void 0&&Cs(n.prState);let r=An(n.standing);return r&&gs.current(t)&&xn(document,r),!0}catch{return!1}}async function xs(){if(_s||Z||!q)return;let e=Ts(Y,X),t=JSON.stringify(Es);Z=bs(!0);let n=await Z;Z=null,Ss=Date.now(),n&&(Ts(Y,X)!==e&&As(),JSON.stringify(Es)!==t&&ks())}var Ss=Date.now();function Cs(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=bn(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function ws(e){is&&(is.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function Ts(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Q=document.querySelector(`[data-kiss-fresh-region]`),Es=Os(Q?.dataset.freshness),Ds=Q?.dataset.dismissedSha;function Os(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ks(){Q&&(Q.innerHTML=yn(Q.dataset.reviewedSha??``,Es,{dismissedSha:Ds,actions:ra!==``}))}Q?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Ds=t.dataset.kissFreshnessDismiss||void 0,ks(),fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Ds??null})}).catch(()=>{}))});function As(){q&&(q.innerHTML=en(Y,{dismissedSha:ss,open:os,actions:ra!==``,availability:cs,remote:X}),js())}function js(){if(J&&(Y||X)){let{label:e,state:t}=$t(Y,X);J.textContent=e,J.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return Ms(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 Ps(i);let a=t.closest(`[data-review-update]`);if(a)return void Ls(a);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function Ms(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Ns(e,`Copied`),()=>Ns(e,`Select it`))}function Ns(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Ps(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=Fs(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Rs}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=Fs(e)?null:zs(e);try{await fetch(I(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}Fs(e)&&Is(),window.location.reload()}function Fs(e){return e.closest(`.prb-fresh-notes p`)}function Is(){try{sessionStorage.setItem(as,`1`)}catch{}}async function Ls(e){let t=[...document.querySelectorAll(`[data-review-update]`)];for(let e of t)e.disabled=!0,e.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let n=!1,r=()=>{n||(n=!0,window.clearInterval(i),window.location.reload())},i=window.setInterval(async()=>{try{let e=await(await fetch(I(`/job`))).json();e.update&&e.update.phase!==`none`&&!fn(e.update.phase)&&r()}catch{}},500);try{await fetch(I(`/update`),{method:`POST`})}catch{}r()}var Rs=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function zs(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=Rs,t.appendChild(n),n}var Bs=Pn(document),Vs=null,Hs=Date.now();function Us(){Vs===null&&(Vs=window.setTimeout(()=>{Vs=null,Ws()},p(Date.now()-Hs)))}async function Ws(){try{let e=await(await fetch(I(`/job`))).json();if(U&&!e.ask||Ks&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Bs){let r=t[e];if(r){if(Fn(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(Ln(n,r.phase,r.progress),Rn(n)):Gs(n,r.progress)}}}catch{}Us()}function Gs(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 Ks=document.querySelector(`[data-diagram-running]`)!==null;(Bs.size>0||U||Ks)&&(Hs=Date.now(),Us());function qs(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 Js(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…`,Js(t),fetch(I(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Hs=Date.now(),Us()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,qs(t)}))}),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;r&&(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=`Run KISS review`;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 Ys=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{ha(e.state??St(window.location.hash)??{kind:`view`,view:Ys})});var Xs=St(window.location.hash);Xs?ha(Xs):(R={kind:`view`,view:Ys},history.replaceState(R,``,window.location.pathname+window.location.search)),ho(),Oa();var Zs=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=>{Zs(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Zs(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let e=$.querySelector(`[data-menu-panel]`),t=$.querySelector(`[data-menu-items]`),n=$.querySelector(`[data-menu-confirm]`),r=$.querySelector(`[data-confirm-delete]`),i=()=>Jo($);$.addEventListener(`click`,e=>{let r=e.target,l=r?.closest(`[data-copy-id]`);if(l?.dataset.copyId){e.stopPropagation(),a(l,l.dataset.copyId);return}let u=r?.closest(`[data-pin-toggle]`);if(u){e.stopPropagation(),s(u);return}if(r?.closest(`[data-fresh-check], [data-fetch-remote]`)){_a.closeAll();return}let d=r?.closest(`[data-mark-status]`);if(d){e.stopPropagation(),o(d,`/state`,{complete:d.dataset.markStatus===`complete`},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0}));return}let f=r?.closest(`[data-lifecycle-set]`);if(f){e.stopPropagation(),o(f,`/lifecycle`,{state:f.dataset.lifecycleSet},e=>({lifecycle:On(e.lifecycle),queued:e.queued===!0}));return}let p=r?.closest(`[data-queue-action]`);if(p){e.stopPropagation(),o(p,`/queue`,{action:p.dataset.queueAction},e=>({lifecycle:On(e.lifecycle),queued:e.queued===!0}));return}if(r?.closest(`[data-delete]`)){e.stopPropagation(),t&&(t.hidden=!0),n&&(n.hidden=!1);return}if(r?.closest(`[data-cancel-delete]`)){e.stopPropagation(),i();return}r?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),c())});let o=async(t,n,r,i)=>{$.querySelector(`[data-menu-error]`)?.remove(),t.disabled=!0;let a=gs.begin(),o=null;try{let e=await fetch(I(n),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)}),t=await e.json().catch(()=>null);e.ok&&t?xn(document,i(t)):o=typeof t?.error==`string`?t.error:`That could not be changed.`}catch{o=`The workspace server did not answer. It may have stopped.`}finally{a()}if(t.disabled=!1,o===null)return void _a.closeAll();let s=document.createElement(`p`);s.className=`prb-menu-error`,s.setAttribute(`data-menu-error`,``),s.textContent=o,e?.append(s)},s=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let n=null;try{let e=await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(n=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,n===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=m(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=m(n)},c=async()=>{r&&(r.disabled=!0,r.textContent=`Deleting`);let t;try{let e=await fetch(I(`/delete`),{method:`POST`});if(e.ok)return void window.location.replace(`/`);t=(await e.json().catch(()=>null))?.error??`That could not be deleted.`}catch{t=`The workspace server did not answer. It may have stopped.`}r&&(r.disabled=!1,r.textContent=`Delete`),i();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e?.append(n)}}e(),setTimeout(()=>{Yi(Vi([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),i(window,()=>window.location.reload()),f(window,document.querySelector(`main.prb-doc`));var Qs=15e3,$s=6e4;function ec(){return ra!==``&&document.visibilityState===`visible`&&!Bs.has(`update`)}document.addEventListener(`visibilitychange`,()=>{ec()&&Date.now()-Ss>=Qs&&xs()}),window.setInterval(()=>{ec()&&xs()},$s);export{O as t};