prreviewbuddy 0.52.2 → 0.53.1

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.
@@ -56,14 +56,22 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
56
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 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">
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){let t=e.gist||e.whyNotJustified,n=e.locations.find(e=>e.primary)??e.locations[0];return[`### ${e.title.trim()}`,t?`**Why it matters:** ${t.trim()}`:``,`**Simpler approach:** ${e.simplerDirection.trim()}`,n?`**Start here:** \`${n.line?`${n.path}:${n.line}`:n.path}\``:``,e.draftComment?.trim()?`**Draft comment:**\n\n${mn(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
60
+
61
+ `)}function pn(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(fn)].join(`
62
+
63
+ `)}function mn(e){return e.split(`
64
+ `).map(e=>e===``?`>`:`> ${e}`).join(`
65
+ `)}function hn(e){return e===`done`||e===`failed`}function gn(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function _n(e,t=``){return`<div class="prb-doc-head">
60
66
  <h3 class="prb-doc-title">${g(e)}</h3>
61
67
  ${t}
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
- <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="${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)}">
68
+ </div>`}var vn=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,yn=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function bn(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 xn(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)}">${bn(vn,`prb-focus-expand`)}${bn(yn,`prb-focus-collapse`)}</button>`}xn(`kiss`,`KISS review`),_n(`Recommendations`,xn(`kissrecs`,`Recommendations`));var Sn={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Cn(e,t){return t===`undecided`?`Open`:Sn[e][t]}function wn(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} decided</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} undecided</span>`}function Tn(e){return`Decided (${e})`}function En(e,t,n=!1){return n?{enabled:!1,note:`Saving your decision. You can copy once it is saved.`}:t?{enabled:!1,note:`Run KISS again before handing these recommendations off.`}:e===0?{enabled:!1,note:`Choose Raise with author on the recommendations you want to hand off.`}:{enabled:!0,note:`${e===1?`1 recommendation`:`${e} recommendations`} to raise with the author.`}}function Dn(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
69
+ <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
70
+ </div>`;let i=t.rewritten?`The branch has been rewritten since, so this report describes commits that are no longer on it.`:t.newCommits===null?`The branch has moved on since.`:`There ${t.newCommits===1?`has been 1 commit`:`have been ${t.newCommits} commits`} on the branch since.`;return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" role="status">
71
+ <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> ${g(i)}</p>
72
+ <p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below and your decisions about it are kept either way.</p>
73
+ <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${g(t.latestSha)}">Not now</button>`:``}</p>
74
+ </div>`}var On=new WeakMap;function kn(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function An(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Bn(e);let i=e.contains(document.activeElement);jn(e,t),Rn(e,!0),Nn(n),i&&zn(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Rn(e,!1),a){Nn(n);return}jn(e,r),Nn(n),Vn(e,t,n)},a=(On.get(e)??Promise.resolve()).then(i,i);return On.set(e,a),a}function jn(e,t){e.dataset.decision=t;let n=Ln(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Cn(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=Sn[n][r.dataset.kissDecide];Mn(e,t!==`undecided`)}function Mn(e,t){let n=(e.closest(`[data-view="kissrecs"]`)??document).querySelector(t?`[data-kiss-decided-list]`:`[data-kiss-open-list]`);if(!n||e.parentElement===n)return;let r=Number(e.dataset.rank),i=[...n.querySelectorAll(`:scope > [data-kiss-rec]`)].find(e=>Number(e.dataset.rank)>r);n.insertBefore(e,i??null)}function Nn(e,t=document){let n=[...t.querySelectorAll(`[data-kiss-rec]`)];if(n.length===0)return;let r=n.filter(e=>e.dataset.decision&&e.dataset.decision!==`undecided`).length,i=n.length-r,a=t.querySelector(`[data-kiss-progress]`);a&&(a.innerHTML=wn(n.length,i));let o=t.querySelector(`[data-kiss-decided]`);if(o){o.hidden=r===0,o.toggleAttribute(`data-nothing-open`,i===0);let e=o.querySelector(`[data-kiss-decided-summary]`);e&&(e.textContent=Tn(r))}e.paintRail(n.length,i),Pn(t)}function Pn(e=document){let t=e.querySelector(`[data-kiss-handoff]`);if(!t)return;let n=new Set([...e.querySelectorAll(`[data-kiss-rec][data-decision="accepted"]`)].map(e=>e.dataset.kissRec)),r=In(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=En(r.length,t.hasAttribute(`data-stale`),i),o=t.querySelector(`[data-kiss-handoff-copy]`);o&&(o.disabled=!a.enabled,o.setAttribute(`data-copy-source`,a.enabled?pn(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function Fn(e,t=document){for(let n of t.querySelectorAll(`[data-kiss-stale]`))n.hidden=!e;let n=t.querySelector(`[data-kiss-handoff]`);n&&(n.toggleAttribute(`data-stale`,e),Pn(t))}function In(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function Ln(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Rn(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function zn(e){if(!e.closest(`[data-kiss-decided-list]`)){e.querySelector(`[data-kiss-decide][aria-pressed="true"], [data-kiss-decide]`)?.focus();return}let t=e.closest(`[data-view="kissrecs"]`)??document;(t.querySelector(`[data-kiss-open-list] > [data-kiss-rec] .prb-kiss-rec-title`)??t.querySelector(`[data-kiss-decided-summary]`))?.focus()}function Bn(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function Vn(e,t,n){let r=document.createElement(`p`);r.className=`prb-kiss-decision-error`,r.dataset.kissDecisionError=``,r.setAttribute(`role`,`alert`),r.append(`Couldn't save that decision. `);let i=document.createElement(`button`);i.type=`button`,i.className=`prb-kiss-decision-retry`,i.textContent=`Try again`,i.addEventListener(`click`,()=>void An(e,t,n)),r.append(i),(e.querySelector(`[data-kiss-actions]`)??e).append(r);let a=e.closest(`[data-kiss-decided]`);a&&(a.open=!0),i.focus()}function Hn(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 Un(e,t){t.complete!==void 0&&Kn(e,t.complete),t.activity!==void 0&&Wn(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&qn(e,Gn(e)):qn(e,t.lifecycle??void 0),t.queued!==void 0&&Jn(e,t.queued)}function Wn(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 Gn(e){let t=e.querySelector(`[data-review-menu]`);return c(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Kn(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 qn(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?Yn(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 Jn(e,t){let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=h(t))}function Yn(e){let t=Number(e.dataset.activityAt),n=e.dataset.activityKind;return Number.isFinite(t)&&n?{at:t,kind:n}:void 0}function Xn(e){return c(e)??null}var Zn=[`created`,`updated`,`merged`,`closed`,`reopened`];function Qn(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Xn(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)&&Zn.includes(t)&&(a.activity={at:e,kind:t})}return a}function $n(){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 er(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`}`}xn(`progress`,`Review progress`);var tr={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function nr(e){let t=new Map;for(let n of Object.keys(tr)){let r=tr[n],i=e.querySelector(`[${r}]`);i&&!hn(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function rr(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||hn(t.phase):ir(t.phase,n)}function ir(e,t){return hn(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function ar(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||gn(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 or(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${er(n)}.`)}function sr(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
75
  <header class="prb-diagram-head">
68
76
  <div class="prb-diagram-heading">
69
77
  <h4 class="prb-diagram-title">
@@ -82,62 +90,62 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
82
90
  </div>
83
91
  </header>
84
92
  ${e.caption?`<p class="prb-diagram-caption">${g(e.caption)}</p>`:``}
85
- ${Bn(e,n)}
93
+ ${cr(e,n)}
86
94
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
87
95
  <details class="prb-diagram-source">
88
96
  <summary>Diagram source</summary>
89
97
  <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
98
  </details>
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">
99
+ </article>`}function cr(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 lr=`modulepreload`,ur=function(e){return`/`+e},dr={},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=ur(t,n),t=s(t),t in dr)return;dr[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`:lr,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)})},fr=.5,pr=3,mr=1.25,hr=null;function gr(){return hr??=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])),hr}var _r=new WeakSet,vr=new WeakMap,yr=new WeakMap,k=null;function br(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){Nr(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Ir(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Sr(e):o&&xr(e,o.dataset.diagramRequest||null)}),Er(),Cr(),{drawPane:Pr}}async function xr(e,t){if(k)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${Ur(n)}"]`)??null??kr(r,n,t);if(!i)return;Dr(),e.showDiagrams();let a=Ar(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 jr(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Mr(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Dr()):a.remove();return}jr(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{k=null,A(!0)}}async function Sr(e){if(k)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=wr(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){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),Dr()}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`),k=null,A(!0)}}function Cr(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(wr(e),A(!1))}function wr(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 Er(){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="${Ur(n)}"]`)??kr(e,n,t);r&&(Dr(),Ar(r,{scroll:!1}),A(!1))}function Dr(){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 kr(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
100
  <div class="prb-diagram-heading">
93
101
  <h4 class="prb-diagram-title">Drawing…</h4>
94
- <p class="prb-diagram-scope">${t===`change`?`Whole change`:br(_r(n))}</p>
102
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:Hr(zr(n))}</p>
95
103
  </div>
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}">
104
+ </header>`,Br(e,r,n),r}function Ar(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:Wr()?`auto`:`smooth`,block:`start`}),n}function jr(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 Mr(e,t,n){let r=sr(t,new Map(n?[[n,zr(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Dr(),Fr(a))}function Nr(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Fr(e))}function Pr(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Fr(e)}async function Fr(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||_r.has(e)||e.hasAttribute(`data-diagram-collapsed`))){_r.add(e);try{let e=await gr();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{_r.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 Ir(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){yr.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Lr(e,n);if(i<=0)return;let a=Rr((yr.get(e)??1)*(t===`in`?mr:1/mr));yr.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Lr(e,t){let n=vr.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return vr.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Rr(e){return Math.min(pr,Math.max(fr,e))}function A(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function zr(e){return e?document.querySelector(`[data-goto-section="${Ur(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Br(e,t,n){let r=Vr(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Vr(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Vr(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${Ur(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Hr(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Ur(e){return CSS.escape(e)}function Wr(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Gr=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Kr=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],j={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},qr={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Jr(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}=Yr(t.nodes);return{schemaVersion:1,title:ei(E(t.title).trim(),j.mapTitle)||`Change map`,intent:M(t.intent,j.intent)??{simple:``,technical:``},nodes:n,edges:Xr(t.edges,r)}}function Yr(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=$r(Qr(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Gr.includes(e.role)?e.role:`concept`,l=M(e.why,j.why),u=ei(E(e.anchor).trim(),j.anchor),d=E(e.sectionId).trim();r.push({id:s,role:c,stage:Zr(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 Xr(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=ei(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=ei(E(n.simple).trim(),t),i=ei(E(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function Zr(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:qr[t]}function Qr(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function $r(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ei(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 ti(e,t){try{return ni(Jr(e),t).map}catch{return null}}function ni(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=ai(ri(e.nodes,n).map(e=>ii(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:oi(r),edges:o},audit:n}}function ri(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 ii(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 ai(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function oi(e){return[...e].sort((e,t)=>e.stage-t.stage)}function si(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?ti(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return ci(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
97
105
  <header class="prb-map-head">
98
106
  <div class="prb-map-heading">
99
107
  <h4 class="prb-map-title">${g(a.title)}</h4>
100
108
  ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${N(a.intent)}</p>`:``}
101
109
  </div>
102
110
  <div class="prb-map-tools">
103
- ${Vr(i)}
111
+ ${li(i)}
104
112
  <button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
105
113
  </div>
106
114
  </header>
107
115
  <p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
108
- ${Hr(a,s)}
109
- ${Kr(a)}
110
- </div>`}function Br(e){return`<div class="prb-map-empty" data-change-map-empty>
116
+ ${ui(a,s)}
117
+ ${mi(a)}
118
+ </div>`}function ci(e){return`<div class="prb-map-empty" data-change-map-empty>
111
119
  ${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
112
120
  <h4 class="prb-map-empty-title">See the change as a map</h4>
113
121
  <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
122
  <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
123
  <button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
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}">
124
+ </div>`}function li(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 ui(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}">
125
+ <h5 class="prb-map-stage-title">${g(Kr[n]??``)}</h5>
126
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>fi(n,t,e)).join(``)}
127
+ </div>`).join(``),i=e.edges.map((e,t)=>pi(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
120
128
  <svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
121
129
  ${r}
122
130
  <div class="prb-map-labels" aria-hidden="true">${i}</div>
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>
131
+ </div>`}var di={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function fi(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}">
132
+ <p class="prb-map-role">${di[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
125
133
  <h5 class="prb-map-node-title" id="prb-map-node-${r}">${N(e.title)}</h5>
126
134
  ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${N(e.body)}</p>`:``}
127
135
  ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${N(e.why)}</p>`:``}
128
136
  ${e.anchor?`<code class="prb-map-anchor">${g(e.anchor)}</code>`:``}
129
137
  ${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
130
138
  ${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">
139
+ </article>`}function pi(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 mi(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
132
140
  <summary>Read as a list</summary>
133
141
  <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}">
142
+ </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 hi=`http://www.w3.org/2000/svg`,gi=new WeakSet,_i=new WeakMap;function vi(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){ji(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&&Ai(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&&Ai(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`)&&(Ai(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:yi,show:bi}}function yi(){for(let e of document.querySelectorAll(`[data-map-board]`))xi(e),Si(e)}function bi(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=si({stored:e,sections:Ni(),reviewedSha:e.commitSha,register:Mi()}),yi())}function xi(e){if(gi.has(e)||typeof ResizeObserver>`u`)return;gi.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Si(e)}))}).observe(e)}function Si(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(ki());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?Ci(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=_i.get(e),_=g&&g.width===h?g.edges:new Set;_i.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=wi(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=wi(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ei(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)=>Di(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(hi,`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=Di(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 Ci(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 wi(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 Ei(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 Di([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 ki(){let e=document.createElementNS(hi,`defs`),t=document.createElementNS(hi,`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(hi,`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 Ai(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 ji(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));yi(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Mi(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Ni(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}function Pi(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Fi=1e3,Ii=new WeakMap;function Li(e,t){return e.length<=1e3?Pi(e)||`&nbsp;`:`${Pi(e.slice(0,Fi))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Ri(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">${Li(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function zi(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?Ri(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Li(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Ri(a)),i.join(``)}function Bi(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 Vi(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&&Ii.set(r,o)}}function Hi(e){let t=Ii.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Ui(e){return e.deletion?2*e.line-1:2*e.line}function Wi(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Gi(e,t){if(e.length===0)return``;let n=e.map(Ui),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
143
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
136
144
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
137
145
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
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">
146
+ </span>`}function Ki(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:Wi(i)}}function qi(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Ji(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Wi)}function Yi(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Wi(t):void 0}function Xi(e,t){return Math.max(e,+!t)+1}var Zi=8;function Qi(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 $i(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function ea(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 ta(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function na(e){if(!e.hasAttribute(`data-expanded`))return;let t=Qi(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=$i({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function ra(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 ia=!1;function aa(){ia||(ia=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))na(e)}))}function oa(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?ea(n):null;t?(e.setAttribute(`data-expanded`,``),na(e),aa()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),ra(e),n&&r&&ta(n,r);let i=t?Qi(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Zi)}var sa={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 ca(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:sa[t.slice(n+1).toLowerCase()]??null}function la(e){let t=new Set;for(let n of e){let e=ca(n);e&&t.add(e)}return[...t]}var ua={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`),[])},da=`github-light-default`,fa=null,pa=new Map;function ma(){return fa??=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),fa}function ha(e){let t=pa.get(e);return t||(t=ma().then(async t=>t?(await t.loadLanguage(ua[e]),!0):!1).catch(()=>!1),pa.set(e,t)),t.then(e=>e?ma():null)}var ga={async preload(e){await ha(e)},async tokenize(e,t){let n=await ha(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:da}),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 _a(e,t=ga){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var va=/^#[0-9a-f]{3,8}$/i;function ya(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&va.test(e.color)?`<span style="color:${e.color}">${Pi(e.content)}</span>`:Pi(e.content)).join(``)}function ba(e){return e.length>1e3?e.slice(0,Fi):e}function xa(e,t,n){if(!e||t===``)return;let r=ya(ba(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 Sa(e,t,n=ga){let r=ca(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(ba).join(`
147
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{xa(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=>ba(e.text)).join(`
148
+ `),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;xa(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Ca(e,t=ga){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in ua)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=ya(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var F=document.body,wa=F.dataset.apiBase??``,Ta=F.dataset.token??``,Ea=F.dataset.editorLabel??``,Da=F.dataset.editorTemplate??``,Oa=F.dataset.repoPath??``,ka=F.dataset.explainPrompt??``,Aa=F.dataset.sessionId??``;function I(e){return`${wa}${e}?t=${encodeURIComponent(Ta)}`}function L(e){fetch(I(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var ja=br({endpoint:I,showDiagrams:()=>Ua(`diagram`),showMap:()=>Ua(`map`),showChangeMap:e=>Ma.show(e)}),Ma=vi({endpoint:I,showView:e=>Ua(e)}),Na=null,Pa=`the whole change`;function Fa(e){let t=bt(e,Ia),n=vt(t);window.location.hash!==n&&history.pushState(t,``,n),La(t)}var R=null,Ia=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function La(e){let t=bt(e,Ia);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`?Ga(t.view):Ya(t.sectionId)),Ba(t.focus??null)}var Ra={history,apply:La},za=Lt(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?hs(e):gs(e),onClose:gs});function Ba(e){At(document.querySelector(`.prb-body`),document,e),za.closeAll(),e===`buddy`&&Io()}function Va(e){R&&(R.focus===e?Ot(R,Ra):Dt(R,e,Ra))}window.addEventListener(`keydown`,e=>{!R||!kt(e,document,!!R.focus)||(e.preventDefault(),Ot(R,Ra))},!0);var Ha=[`map`,`diagram`];function Ua(e){Fa({kind:`view`,view:e,...Ha.includes(e)&&Ha.includes(R?.focus??``)?{focus:e}:{}})}function Wa(e){Fa({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function Ga(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`&&ja.drawPane(),e===`map`&&Ma.layout(),Ka(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Ka(){Kt(),Na=null,Pa=`the whole change`,Xa()}function qa(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 Ja(){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`)&&qa(e,!0)}}function Ya(e){Ga(`guide`),Ja(),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`}),Na=e,Pa=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Xa()}function Xa(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Pa)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Za(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Qa(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}=Za(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),L({event:`file_opened`,fromFinding:i,targeted:r>0}),await $a(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}async function $a(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}eo(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 eo(e,t,n){let{cited:r,centre:i,expand:a}=n,o=zi(t,r),s=Da&&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 ${Ea||`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="${Xi(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>${Gi(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
149
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
142
150
  ${c}
143
151
  ${s}
@@ -145,7 +153,7 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
145
153
  </div>
146
154
  ${f}
147
155
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
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">
156
+ ${l}`,Vi(e,t),na(e),ra(e),(n.focus?qi(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Sa(e,t)}async function to(e,t,n){let r=Ki(t,n);if(!r)return;let i=qi(e,r.anchor);if(i)t.outerHTML=Gi(Ji(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await $a(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 no(e,t,n){let r=`${Oa.replace(/\/$/,``)}/${e}`,i=Da.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 ro=document.querySelector(`[data-ask-form]`),V=ro?.querySelector(`textarea`);function io(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 ao(){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 oo(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function so(e,t=`free_text`){let n=e.trim();if(!n||H||U)return;document.querySelector(`.prb-ask-empty`)?.remove(),io(`user`,n);let r=ao();H=new AbortController,co(!0);try{let e=await fetch(I(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:Na,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){oo();return}if(!e.ok||!i?.answer){io(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}io(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(oo(),V&&!V.value&&(V.value=n)):io(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{H=null,co(!1)}}function co(e){let t=ro?.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(lo))t.disabled=e;e&&za.closeAll(),e||V?.focus()}var lo=`[data-suggestion], .pr-helper-explain-simply-button`;function uo(){let e=ro?.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()})}ro?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||U)return uo();let t=V?.value??``;V&&(V.value=``),so(t,po(t))}),U&&co(!0);var fo=null;function po(e){return fo&&e.includes(fo.text)?fo.source:`free_text`}V?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),ro?.requestSubmit())}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function mo(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function ho(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function go(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&&So(n,t,`questions`),Oo()}function _o(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Aa})).filter(e=>e.id)}async function vo(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function yo(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Aa: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(bo()),So(n,t||e.dataset.settled===`true`,`issues`),Ao())}function bo(){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 xo=new WeakMap;function So(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&xo.set(e,{parent:t,before:e.nextElementSibling}),Eo(n).append(e),t&&To(t)}else Co(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Do(n)}}function Co(e,t){let n=xo.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=wo(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function wo(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function To(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 Do(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(ko())}function Oo(){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)),jo(`questions`,e.length,t,`question`,`answered`)}function ko(){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 Ao(){let e=ko();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))),jo(`issues`,e.total,e.open,`issue`,Rt(e))}function jo(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){qa(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){Ua(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){Ua(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){Wa(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){no(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-deletion-toggle]`);if(s){Bi(s);return}let c=t.closest(`[data-code-expand]`);if(c){let e=c.closest(`.prb-code`);e&&oa(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&&to(t,e,l.dataset.changeStep===`previous`?`previous`:`next`);return}let u=t.closest(`[data-full-line]`);if(u){let e=Hi(u);e&&Ca(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]`);$a(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:Yi(t)})}return}let f=t.closest(`[data-focus-toggle]`);if(f?.dataset.focusToggle){Va(f.dataset.focusToggle);return}let p=t.closest(`[data-prompt-toggle]`);if(p){as(p.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let m=t.closest(`[data-file]`);if(m?.dataset.file){Qa(m);return}let h=Wt(t);if(h){Wa(h);return}let g=t.closest(`[data-question-answered]`);if(g?.dataset.questionAnswered){go(g,g.dataset.answered!==`true`);let e=ho();mo(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){yo(_,_.dataset.stale===`true`||_.dataset.dismissed!==`true`);let e=_o();vo(e),L({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let v=t.closest(`[data-suggestion]`);if(v){so(v.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Io(),so(ka,`explain_simply`);return}let y=t.closest(`[data-prompt-use]`);if(y?.dataset.promptUse){os(y.dataset.promptUse);return}let ee=t.closest(`[data-prompt-edit]`);if(ee?.dataset.promptEdit){Cs(ee.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Cs(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(Ot(R,Ra),Po(e!==`buddy`)):Po(!No())}});var W=document.querySelector(`.prb-body`),Mo=document.querySelector(`.prb-ask`);function No(){return!!Mo&&getComputedStyle(Mo).display!==`none`}function Po(e){W&&(W.dataset.ask=e?`open`:`closed`),Fo(e)}function Fo(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Io(){R?.focus&&R.focus!==`buddy`&&Ot(R,Ra),Po(!0)}function Lo(){Fo(No())}window.addEventListener(`resize`,Lo),r(I(`/restart`));var Ro=document.querySelector(`[data-file-filter]`),zo=document.querySelector(`[data-file-count]`),Bo=document.querySelector(`[data-file-none]`);function Vo(){let e=(Ro?.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}`}Bo&&(Bo.hidden=n>0),zo&&(zo.textContent=e?`${t} of ${Ho} file${Ho===1?``:`s`}`:`${Ho} file${Ho===1?``:`s`}`)}var Ho=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Ro?.addEventListener(`input`,Vo),Ro?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Ro.value!==``&&(e.preventDefault(),Ro.value=``,Vo())}),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(),Qa(n))});var Uo=320,Wo=()=>Math.round(window.innerWidth/2),Go=e=>Math.round(Math.min(Wo(),Math.max(Uo,e)));function Ko(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function qo(){return Mo?Math.round(Mo.getBoundingClientRect().width):Uo}function Jo(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||!Mo)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=qo(),r=e=>{Ko(Go(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,Jo(qo())};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=Go(qo()+n);Ko(r),Jo(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Ko(null),Jo(null))}),G?.addEventListener(`dblclick`,()=>{Ko(null),Jo(null)}),window.addEventListener(`resize`,()=>{No()&&W?.style.getPropertyValue(`--ask-width`)&&Ko(Go(qo()))});var Yo=3e4,Xo=document.visibilityState===`visible`?Date.now():null,Zo=0;function Qo(){Xo!==null&&(Zo+=Date.now()-Xo,Xo=Date.now())}function $o(){Qo();let e=Math.round(Zo/1e3);return Zo-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Xo=Date.now():(Qo(),Xo=null)}),setInterval(()=>{let e=$o();e>0&&L({event:`workspace_heartbeat`,visibleSeconds:e})},Yo),window.addEventListener(`pagehide`,()=>{let e=I(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:$o()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var es=document.querySelector(`[data-prompt-bank]`),ts=document.querySelector(`[data-prompt-list]`),K=ns();function ns(){try{let e=JSON.parse(es?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function rs(){if(!ts)return;ts.innerHTML=K.map(e=>`<span class="prb-bank-item">
149
157
  <button type="button" class="prb-bank-use" data-prompt-use="${z(e.id)}" title="${z(e.prompt)}">${z(e.name)}</button>
150
158
  <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)),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};
159
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),fs()}async function is(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{}rs()}function as(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),es?.toggleAttribute(`data-collapsed`,e),ts&&(ts.hidden=e),fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function os(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=qt(V.value,t.prompt),Io(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var ss=document.querySelector(`.prb-doc`),cs=null,ls=null;function us(){B&&(ls?.(),ls=et(B,{layout:`flat`,actions:rt.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>ps(e,`selection`,t)}))}function ds(){return[...tt.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:lt(e.id),label:e.name,section:ct}))]}function fs(){ss&&(cs?.(),cs=et(ss,{triggerLabel:`Ask Buddy AI`,actions:ds(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>ps(e,`selection`,t)}))}function ps(e,t,n){Mt(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>ms(e,t),send:e=>{Io(),so(e,`finding`)}})}function ms(e,t){V&&(fo={text:e,source:t},V.value=qt(V.value,e),Io(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function hs(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Ke(ds());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 gs(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);za.close(n),i&&ps(r,`finding`,i)}),fs(),us(),Oe(document);var _s=document.querySelector(`[data-prompt-dialog]`),vs=document.querySelector(`[data-prompt-name]`),ys=document.querySelector(`[data-prompt-text]`),bs=document.querySelector(`[data-prompt-delete]`),xs=document.getElementById(`prb-prompt-title`),Ss=``;function Cs(e){let t=K.find(t=>t.id===e);Ss=t?.id??``,xs&&(xs.textContent=t?`Edit prompt`:`Save a prompt`),vs&&(vs.value=t?.name??``),ys&&(ys.value=t?.prompt??``),bs&&(bs.hidden=!t),_s?.showModal(),vs?.focus()}async function ws(){let e=vs?.value.trim()??``,t=ys?.value.trim()??``;if(!e||!t){(e?ys:vs)?.focus();return}let n=Ss?K.map(n=>n.id===Ss?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];_s?.close(),await is(n)}async function Ts(){if(!Ss)return;let e=K.filter(e=>e.id!==Ss);_s?.close(),await is(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>_s?.close()),bs?.addEventListener(`click`,()=>void Ts()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void ws());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),Es=document.querySelector(`[data-fresh-check]`),Y=Ls(q?.dataset.report),Ds=`prb-fresh-reopen`,Os=Ns(),ks=q?.dataset.dismissedSha,As=Ms(q?.dataset.availability),X=js(q?.dataset.remote);function js(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Ms(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Ns(){try{return sessionStorage.getItem(Ds)!==null&&(sessionStorage.removeItem(Ds),!0)}catch{return!1}}Os&&Qs(),Es?.addEventListener(`click`,()=>void Bs());var Ps=document.querySelector(`[data-fetch-remote]`);Ps&&(fetch(I(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Ps.hidden=!1)}).catch(()=>{}),Ps.addEventListener(`click`,()=>void Fs(Ps)));async function Fs(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 Bs()}q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Os=!1,Qs();let n=t.closest(`[data-fresh-dismiss]`);n&&(ks=n.dataset.freshDismiss||void 0,Os=!1,Qs(),Is())});function Is(){fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:ks??null})}).catch(()=>{})}function Ls(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Rs=$n(),zs=!1,Z=null;async function Bs(){if(zs)return;zs=!0,Ks(!0),Z&&await Z;let e=qs(Y,X),t=await Hs(!1);Ks(!1),t&&Zs(),zs=!1,t&&(Y?.code.state===`changed`||X!==null)&&ks!==void 0&&(ks=void 0,Is()),Qs(),Vs(t?qs(Y,X)===e?`No change`:`Updated`:`Could not check`)}function Vs(e){J&&(J.textContent=e,window.setTimeout($s,2600))}async function Hs(e){let t=Rs.snapshot();try{let n=await(await fetch(`${I(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,As=n.availability??null,X=n.remote??null,Js=n.kiss??null,n.kissDismissedSha!==void 0&&(Ys=n.kissDismissedSha??void 0),n.prState!==void 0&&Gs(n.prState);let r=Qn(n.standing);return r&&Rs.current(t)&&Un(document,r),!0}catch{return!1}}async function Us(){if(zs||Z||!q)return;let e=qs(Y,X),t=JSON.stringify(Js);Z=Hs(!0);let n=await Z;Z=null,Ws=Date.now(),n&&(qs(Y,X)!==e&&Qs(),JSON.stringify(Js)!==t&&Zs())}var Ws=Date.now();function Gs(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Hn(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Ks(e){Es&&(Es.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function qs(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]`),Js=Xs(Q?.dataset.freshness),Ys=Q?.dataset.dismissedSha;function Xs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Zs(){Fn(Js?.state===`changed`),Q&&(Q.innerHTML=Dn(Q.dataset.reviewedSha??``,Js,{dismissedSha:Ys,actions:Ta!==``}))}Q?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Ys=t.dataset.kissFreshnessDismiss||void 0,Zs(),fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Ys??null})}).catch(()=>{}))});function Qs(){q&&(q.innerHTML=en(Y,{dismissedSha:ks,open:Os,actions:Ta!==``,availability:As,remote:X}),$s())}function $s(){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 ec(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 nc(i);let a=t.closest(`[data-review-update]`);if(a)return void ac(a);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function ec(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>tc(e,`Copied`),()=>tc(e,`Select it`))}function tc(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function nc(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=rc(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${oc}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=rc(e)?null:sc(e);try{await fetch(I(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}rc(e)&&ic(),window.location.reload()}function rc(e){return e.closest(`.prb-fresh-notes p`)}function ic(){try{sessionStorage.setItem(Ds,`1`)}catch{}}async function ac(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`&&!hn(e.update.phase)&&r()}catch{}},500);try{await fetch(I(`/update`),{method:`POST`})}catch{}r()}var oc=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function sc(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=oc,t.appendChild(n),n}var cc=nr(document),lc=null,uc=Date.now();function dc(){lc===null&&(lc=window.setTimeout(()=>{lc=null,fc()},p(Date.now()-uc)))}async function fc(){try{let e=await(await fetch(I(`/job`))).json();if(U&&!e.ask||mc&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of cc){let r=t[e];if(r){if(rr(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(ar(n,r.phase,r.progress),or(n)):pc(n,r.progress)}}}catch{}dc()}function pc(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 mc=document.querySelector(`[data-diagram-running]`)!==null;(cc.size>0||U||mc)&&(uc=Date.now(),dc());function hc(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 gc(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…`,gc(t),fetch(I(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);uc=Date.now(),dc()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,hc(t)}))});var _c={send:async e=>{let t=await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{jo(`kiss`,e,t,`recommendation`,`decided`),jo(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){An(r,kn(n),_c);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(I(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var vc=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{La(e.state??St(window.location.hash)??{kind:`view`,view:vc})});var yc=St(window.location.hash);yc?La(yc):(R={kind:`view`,view:vc},history.replaceState(R,``,window.location.pathname+window.location.search)),Lo(),Xa();var bc=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=>{bc(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(bc(),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=()=>gs($);$.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]`)){za.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:Xn(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:Xn(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=Rs.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?Un(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 za.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(()=>{_a(la([...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 xc=15e3,Sc=6e4;function Cc(){return Ta!==``&&document.visibilityState===`visible`&&!cc.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Cc()&&Date.now()-Ws>=xc&&Us()}),window.setInterval(()=>{Cc()&&Us()},Sc);export{O as t};