prreviewbuddy 0.92.0 → 0.95.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +101 -0
- package/dist/main.js +597 -136
- package/dist/{mcp_tools-BKPpd9dN.js → mcp_tools-DDbcXys2.js} +1274 -571
- package/dist/server.js +317 -413
- package/package.json +1 -1
- package/static/{chunk-CIJm20ER.js → chunk-CQIPqX7U.js} +1 -1
- package/static/chunk-Cs33-tV3.js +1 -0
- package/static/{chunk-Ahis0VaG.js → chunk-Cum6sHaC.js} +1 -1
- package/static/{chunk-DMxtqzNj.js → chunk-D1LBeOJc.js} +1 -1
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +11 -0
- package/static/workspace.js +64 -64
- package/static/chunk-DRtin0n-.js +0 -1
package/static/chunk-DRtin0n-.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(e,t){e.addEventListener(`pageshow`,e=>{e.persisted&&t()})}var t=[`checkbox`,`radio`,`button`,`submit`,`reset`].map(e=>`:not([type="${e}"])`).join(``);function n(e){if(!e||typeof e.closest!=`function`)return!1;let n=e;return n.isContentEditable?!0:n.closest(`input${t}, textarea, select, [contenteditable=""], [contenteditable="true"]`)!==null}var r=`prbNav`,i=`prb-workspace`,a=`prb-nav-session`,o=`prb-nav-head`,s=`prb-nav-handoff`,c=`prb-nav-places`,l=200,u=15e3,d=`unstored`;function f(e){if(!e||typeof e!=`object`)return null;let t=e[r];if(!t||typeof t!=`object`)return null;let{v:n,owner:i,session:a,idx:o,id:s,ui:c}=t;if(n!==1||i!==`prb-workspace`||typeof a!=`string`||a===``||typeof o!=`number`||!Number.isInteger(o)||o<0)return null;let l=c&&typeof c==`object`&&!Array.isArray(c)?c:null;return{v:n,owner:i,session:a,idx:o,...typeof s==`string`&&s!==``?{id:s}:{},ui:l}}function p(e){if(!e||typeof e!=`object`)return{};let{[r]:t,...n}=e;return n}function m(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.owner===`prb-workspace`&&n.session===t}function h(e,t){try{return e?.getItem(t)??null}catch{return null}}function g(e,t,n){try{n===null?e?.removeItem(t):e?.setItem(t,n)}catch{}}function _(e){let{history:t,storage:n,location:_}=e,v=e.navigation??null,y=[],b=null,x=null,S=null,C=t=>{S!==null&&e.clearTimeout(S),S=t?t():null,e.capturePending(S!==null)},w=null,T=(()=>{if(!n)return d;let t=h(n,a);if(t)return t;let r=e.uuid();return g(n,a,r),h(n,a)===r?r:d})(),E=()=>`${_.pathname}${_.search}`,D=e=>`${E()}${e}`,O=()=>{try{v?.updateCurrentEntry({state:{owner:i,session:T}})}catch{}},k=()=>{for(let e of y)e()},A=(e,n)=>{n===void 0?t.replaceState(e,``):t.replaceState(e,``,n),O()},j=()=>Number(h(n,o)??0)||0,M=()=>{try{let e=JSON.parse(h(n,c)??`{}`);return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{return{}}},ee=(e,t)=>{if(!e||!n)return;let r=M();delete r[e],r[e]=t;let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-l)))delete r[e];g(n,c,JSON.stringify(r))},te=e=>{if(!e)return null;let t=e.id?M()[e.id]:void 0;return t&&typeof t==`object`&&!Array.isArray(t)?t:e.ui},ne=()=>{if(!b)return null;try{return b()}catch{return null}},re=()=>{let a=f(t.state);if(a&&a.session===T&&a.id){w=a.id,O();return}let c=a?.idx??0;if(!a){let t=h(n,s);g(n,s,null),c=0;try{let n=t?JSON.parse(t):null,r=e.referrer!==``&&new URL(e.referrer).origin===_.origin;n&&r&&n.session===T&&typeof n.idx==`number`&&typeof n.at==`number`&&e.now()-n.at<u&&(c=n.idx+1)}catch{c=0}g(n,o,String(c))}let l=a?.id??e.uuid();w=l;let d={v:1,owner:i,session:T,idx:c,id:l,ui:a?.ui??null};A({...p(t.state),[r]:d})},N=()=>f(t.state)??{v:1,owner:`prb-workspace`,session:T,idx:0,ui:null},P=()=>{S!==null&&C(null);let e=ne();if(!e||!w)return;let n=JSON.stringify(e),i=f(t.state);if(!i||i.id!==w){ee(w,e);return}(n!==x||JSON.stringify(i.ui)!==n)&&(x=n,ee(w,e),A({...p(t.state),[r]:{...i,ui:e}}))},F=e=>{if(v){let t=v.currentEntry?.index;if(typeof t!=`number`||t<0)return!1;let n=v.entries()[t+e];if(!n)return!1;try{return m(n.getState(),T)}catch{return!1}}let n=f(t.state);return!n||n.session!==T||t.length<2?!1:e===-1?n.idx>0:n.idx<j()};re();try{t.scrollRestoration=`manual`}catch{}return{session:T,current(){return{route:p(t.state),ui:te(f(t.state))}},push(a,s){if(a!==``&&!a.startsWith(`#`))throw Error(`Workspace history pushes within this document only; "${a}" is not a fragment.`);if(D(a)===`${E()}${_.hash}`)return!1;P();let c=N().idx+1;g(n,o,String(c));let l=e.uuid(),u={v:1,owner:i,session:T,idx:c,id:l,ui:null};return w=l,t.pushState({...p(s),[r]:u},``,D(a)),x=null,O(),k(),!0},replace(e,t){if(e!==``&&!e.startsWith(`#`))throw Error(`Workspace history replaces within this document only; "${e}" is not a fragment.`);A({...p(t),[r]:N()},D(e))},setCapturer(e){b=e},captureNow:P,scheduleCapture(){C(()=>e.setTimeout(P,250))},leaving(){P(),g(n,s,JSON.stringify({session:T,idx:N().idx,at:e.now()}))},canGoBack:()=>F(-1),canGoForward:()=>F(1),back(){return F(-1)?(P(),t.back(),!0):!1},forward(){return F(1)?(P(),t.forward(),!0):!1},moved(){S!==null&&C(null);let e=ne();e&&ee(w,e),x=null,w=f(t.state)?.id??null;let n=f(t.state);!n||!n.id||n.session!==T?re():O(),k()},onAvailability(e){y.push(e)}}}function v(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function y(e){let t=e?.userAgentData?.platform??e?.platform??``;return/mac|iphone|ipad/i.test(t)}function b(e,t,r){if(e.defaultPrevented||e.isComposing)return null;let i=t?e.metaKey:e.ctrlKey,a=t?e.ctrlKey:e.metaKey;if(!i||a||e.altKey||e.shiftKey)return null;let o=e.key===`[`||e.key!==`]`&&e.code===`BracketLeft`?`back`:e.key===`]`||e.code===`BracketRight`?`forward`:null;return!o||n(e.target)||r.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)?null:o}var x=[`data-id`,`data-finding-card`,`data-goto-section`,`data-view-nav`,`data-file`,`data-line`,`data-history`,`data-history-toggle`,`data-load-more`,`data-select`,`data-pin`,`data-focus-toggle`,`data-ask-toggle`,`data-rail-toggle`,`data-search`,`data-status-filter`,`data-author-filter`,`data-pr-filter`,`data-card`,`data-placement`,`data-collection`,`data-notification-id`,`data-guide-section`,`data-guide-detail`,`data-view`];function S(e){if(e.id)return{attrs:[[`id`,e.id]]};let t=x.filter(t=>e.hasAttribute(t)).map(t=>[t,e.getAttribute(t)??``]);return t.length>0?{attrs:t}:null}function C(e,t){if(!e||e===t||!t.contains(e))return null;let n=[],r=e;for(;r&&r!==t&&n.length<3;){let t=S(r);t?n.unshift(t):r===e&&n.unshift({tag:r.tagName.toLowerCase(),...r.classList[0]?{cls:r.classList[0]}:{}}),r=r.parentElement}return n.length>0?n:null}function w(e){if(!e||typeof e!=`object`)return!1;let{attrs:t,tag:n,cls:r}=e;return t===void 0?typeof n==`string`&&/^[a-z][a-z0-9-]*$/.test(n)&&(r===void 0||typeof r==`string`):Array.isArray(t)&&t.length>0&&t.every(e=>Array.isArray(e)&&e.length===2&&x.concat(`id`).includes(e[0])&&typeof e[1]==`string`)}function T(e,t){return t.attrs?t.attrs.every(([t,n])=>e.getAttribute(t)===n):e.tagName.toLowerCase()===t.tag&&(t.cls===void 0||e.classList.contains(t.cls))}function E(e,t){let n=t.attrs?`[${t.attrs[0][0]}]`:t.tag;for(let r of e.querySelectorAll(n))if(T(r,t))return r;return null}function D(e,t){if(!Array.isArray(t)||t.length===0||!t.every(w))return null;let n=null,r=e;for(let e of t){let t=E(r,e);if(!t)return n;n=t,r=t}return n}function O(e){let t=e.activeElement;return{focus:C(t,e.body),focusVisible:t!==null&&t!==e.body&&t.matches(`:focus-visible`)}}function k(e,t,n){let r=D(e,t);if(!r)return;let i={preventScroll:!0,focusVisible:n===!0};if(r.tabIndex<0&&!r.matches(`a[href], button, input, select, textarea, summary`)){r.querySelector(`a[href], button:not([disabled]), input, select, textarea, [tabindex="0"]`)?.focus(i);return}r.focus(i)}function A(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)&&n>=0?n:null}function j(e,t){let n=e?.[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function M(e){try{return e.sessionStorage}catch{return null}}function ee(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function te(e,t){if(e.target&&e.target!==`_self`||e.hasAttribute(`download`))return!1;let n;try{n=new URL(e.getAttribute(`href`)??``,t.href)}catch{return!1}return n.origin===t.origin?n.pathname!==t.pathname||n.search!==t.search:!1}function ne(e,t){let n=e.querySelector(`[data-nav-announce]`);!n||!t||(n.textContent=``,e.defaultView?.setTimeout(()=>{n.textContent=t},50))}function re(e={},t=window,n=document){let r=t.navigation??null,i=_({history:t.history,navigation:r,storage:M(t),location:t.location,referrer:n.referrer,now:()=>Date.now(),uuid:()=>t.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,setTimeout:(e,n)=>t.setTimeout(e,n),clearTimeout:e=>t.clearTimeout(e),capturePending:e=>n.documentElement.toggleAttribute(`data-nav-capture-pending`,e)}),a=y(t.navigator),o=[...n.querySelectorAll(`[data-history]`)],s=()=>{for(let e of o)e.disabled=!((e.dataset.history===`forward`?`forward`:`back`)==`back`?i.canGoBack():i.canGoForward())};for(let e of o){let t=e.dataset.history===`forward`?`forward`:`back`;e.dataset.tip=ee(t,a),e.addEventListener(`click`,()=>{t===`back`?i.back():i.forward()})}s(),i.onAvailability(s),r?.addEventListener?.(`currententrychange`,s),t.addEventListener(`keydown`,e=>{let t=b(e,a,n);t&&(e.preventDefault(),t===`back`?i.back():i.forward())}),t.addEventListener(`popstate`,()=>i.moved()),t.addEventListener(`pagehide`,()=>i.captureNow()),n.addEventListener(`visibilitychange`,()=>{n.visibilityState===`hidden`&&i.captureNow()}),n.addEventListener(`click`,e=>{let n=e.target?.closest?.(`a[href]`);!n||!v(e)||e.defaultPrevented||te(n,t.location)&&i.leaving()},!0),n.addEventListener(`pointerdown`,e=>{(e.button===3||e.button===4)&&i.captureNow()},!0);let c=()=>i.scheduleCapture();for(let e of[`scroll`,`click`,`input`,`toggle`,`focusin`])n.addEventListener(e,c,{capture:!0,passive:!0});if(!e.ownsRestore){let e=n.querySelector(`.prb-shell > main`);i.setCapturer(()=>({main:e?.scrollTop??0,...O(n)}));let{ui:t}=i.current(),r=A(t,`main`);e&&r!==null&&(e.scrollTop=r),t&&k(n,t.focus,t.focusVisible)}return i}var N=[{id:`active`,name:`Active`,action:`Move to active`},{id:`waiting`,name:`Waiting`,action:`Mark waiting`},{id:`done`,name:`Done`,action:`Mark done`}];function P(e){if(typeof e!=`object`||!e)return;let{state:t,at:n}=e;if(!(t!==`waiting`&&t!==`done`||typeof n!=`number`||!Number.isFinite(n)))return{state:t,at:n}}function F(e){return N.find(t=>t.id===e).action}function ie(e){return N.find(t=>t.id===(e?.state??`active`)).name}function ae(e){return e?.state===`waiting`?`menu`:e?.state===`done`?`active`:`done`}function oe(e){let t=ae(e);return`${ie(e)}. ${t===`menu`?`Choose what happens next`:F(t)}`}var se=[`created`,`updated`,`merged`,`closed`,`reopened`];function ce(e){return le({at:Number(e.activityAt),kind:e.activityKind,...e.activityMovedAt===void 0?{}:{movedAt:Number(e.activityMovedAt)}})}function le(e){if(typeof e!=`object`||!e)return;let{at:t,kind:n,movedAt:r}=e;if(!(typeof t!=`number`||!Number.isFinite(t)||!se.includes(n)))return{at:t,kind:n,...typeof r==`number`&&Number.isFinite(r)?{movedAt:r}:{}}}function ue(e,t){return!e||e.state===`waiting`&&fe(e,t)?`active`:e.state}function de(e,t){if(!e||!t)return;if(e.state===`waiting`)return fe(e,t)?`Changed while waiting`:void 0;if(t.kind===`reopened`&&t.at>e.at)return`Reopened since done`;let n=t.movedAt??(t.kind===`updated`?t.at:void 0);return n!==void 0&&n>e.at?`Changed since done`:void 0}function fe(e,t){return t!==void 0&&t.kind!==`created`&&t.at>e.at}function pe(e,t,n){return de(t,n)!==void 0||e!==(t?.state??`active`)}function me(e,t,n){return e===`done`&&t?.state===`done`&&de(t,n)!==void 0?`Keep done`:F(e)}var he=[`pinned`,`active`,`waiting`,`done`],ge=[`in-progress`,...he],_e=e=>N.find(t=>t.id===e).name,ve={"in-progress":{title:`In progress`,key:`i`},pinned:{title:`Pinned`,key:`p`},active:{title:_e(`active`),key:`a`},waiting:{title:_e(`waiting`),key:`w`},done:{title:_e(`done`),key:`d`}};function ye(e){return typeof e==`string`&&ge.includes(e)}function be(e){if(ye(e))return!0;if(typeof e!=`string`)return!1;let t=/^collection(?:-done)?:(.*)$/.exec(e);return t!==null&&Se(t[1])}var xe=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function Se(e){return typeof e==`string`&&xe.test(e)}function Ce(e,t,n,r){return e&&!I(r)?`pinned`:ue(t,n)}function we(e,t,n,r,i){if(!(r&&!e&&!I(i)))return Ce(e,t,n,i)}function Te(e,t,n,r){if(!(e||I(r)))return ue(t,n)===`done`?`completed`:`active`}function Ee(e,t){let n=`${e} active`;return t===0?n:`${n} · ${t} pinned`}function De(e,t,n){let r=t.filter(t=>t.id!==n&&e.includes(t.id)).map(e=>e.name);if(r.length!==0)return`${n===void 0?`In`:`Also in`} ${r.join(`, `)}`}function Oe(e,t){if(!(e.active>0))return t?`Nothing in this collection matches the filters.`:e.members===0?`Nothing here yet. Add reviews from a card’s menu, or select several and choose Manage collections.`:e.pinned>0&&e.completed===0?`Its reviews are pinned, so they are listed under Pinned.`:`No active reviews`}function ke(e){return`Show completed (${e})`}function Ae(e,t,n){let r=new Map;for(let i of e){let e=t(i);if(e===void 0)continue;let a=r.get(e)??{shown:[],total:0};a.total<n(e)&&a.shown.push(i),a.total+=1,r.set(e,a)}return r}function je(e,t){let n=e.filter(e=>e.includes(t)).length;return n===0?`none`:n===e.length?`all`:`some`}function Me(e){return e===`all`?`remove`:`add`}var Ne=`none`;function Pe(e,t){if(t.length===0)return!0;let n=e??[];return n.length===0?t.includes(Ne):n.some(e=>t.includes(e))}function Fe(e,t){return e.length===0?`All`:e.length>1?`${e.length} chosen`:e[0]===`none`?`Uncollected`:t.find(t=>t.id===e[0])?.name??`All`}function I(e){return e===`queue`}var Ie=[`all`,`queue`,`in-progress`,`complete`],Le=[`any`,`open`,`merged`,`closed`],Re=[`q`,`f`,`by`,`pr`,`col`,`page`],L={query:``,filter:`all`,author:``,pr:`any`,collections:[]};function ze(e){return e.query.trim()!==``||e.filter!==L.filter||e.author!==L.author||e.pr!==L.pr||e.collections.length>0}function Be(e,t,n){let r=n===void 0?`${e} review${e===1?``:`s`}`:`${e} of ${n} review${n===1?``:`s`}`;return e===t?r:`${r} · ${t} branch${t===1?``:`es`}`}function Ve(e,t,n){let r={pinned:{shown:[],total:0},active:{shown:[],total:0},waiting:{shown:[],total:0},done:{shown:[],total:0}};for(let i of e){let e=t(i),a=r[e];a.total<n[e]&&a.shown.push(i),a.total+=1}return r}function He(){return{pinned:15,active:15,waiting:15,done:15}}function Ue(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!Re.includes(e)&&/^[a-z][a-z0-9_-]*$/i.test(e)&&n!==``&&i.append(e,n);let a=i.toString();return{query:t.get(`q`)??``,filter:Ie.includes(n)?n:`all`,author:t.get(`by`)??``,pr:Le.includes(r)?r:`any`,collections:[...new Set((t.get(`col`)??``).split(`,`).filter(e=>e===`none`||Se(e)))],...a===``?{}:{extra:a}}}function We(e){let t=new URLSearchParams;e.query!==``&&t.set(`q`,e.query),e.filter!==`all`&&t.set(`f`,e.filter),e.author!==``&&t.set(`by`,e.author),e.pr!==`any`&&t.set(`pr`,e.pr),e.collections.length>0&&t.set(`col`,e.collections.join(`,`));for(let[n,r]of new URLSearchParams(e.extra??``))Re.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Ge(e,t){return t===`all`||t===`queue`?!0:t===`in-progress`?e.status!==`complete`:e.status===t}function Ke(e,t){return t===`any`||e.prState===t}function qe(e,t){return t===``||e===t}function Je(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function Ye(e){return e?`Unpin review`:`Pin review`}function Xe(e){return e?`Remove from review queue`:`Add to review queue`}function Ze(e,t){let n=t.query.trim().toLowerCase();return Qe(e.filter(e=>(!n||e.searchText.includes(n))&&Ge(e,t.filter)&&qe(e.author,t.author)&&Ke(e,t.pr)&&Pe(e.collections,t.collections??[])),t.filter)}function Qe(e,t){return I(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function $e(e){return e===0?`Queue`:`Queue (${e})`}function et(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function tt(e){return`${et(e)}. Mark as ${e===`complete`?`not reviewed`:`reviewed`}`}function nt(e){return e===0?`Select reviews to take action`:`${e} review${e===1?``:`s`} selected`}var rt=`Use the checkboxes or choose Select all.`;function it(e,t,n){return e===0?rt:[t===null?``:`of ${t}`,n>0?`${n} not shown`:``].filter(Boolean).join(` · `)}function at(e,t=!1){return e===0||t?`Select all`:`Select all ${e}`}function ot(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function st(e){return`${ot(e)}?`}function ct(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var lt=[`in-progress`,`recent`],ut={"in-progress":{title:`In progress`,key:`i`},recent:{title:`Recent runs and issues`,key:`r`}};function dt(e){return typeof e==`string`&<.includes(e)}var ft=[{id:`global`,label:`Global`},{id:`reviews`,label:`Reviews list`},{id:`runs`,label:`Runs list`},{id:`notifications`,label:`Activity list`},{id:`findings`,label:`Issues and Questions`},{id:`sections`,label:`Review sections`},{id:`buddy`,label:`Buddy AI`},{id:`actions`,label:`Review actions`},{id:`workspace`,label:`Workspace and focus`}],R=(...e)=>({kind:`chord`,keys:e}),z=(e,t)=>({kind:`key`,key:e,...t?{shift:t}:{}}),pt=e=>({kind:`key`,key:e,primary:!0}),mt=ge.map(e=>({id:`reviews.section.${e}`,label:`${ve[e].title} section`,group:`reviews`,page:`reviews`,binding:R(`l`,ve[e].key)})),ht=lt.map(e=>({id:`runs.section.${e}`,label:`${ut[e].title} section`,group:`runs`,page:`runs`,binding:R(`l`,ut[e].key)})),B=[{id:`palette.open`,label:`Command palette`,group:`global`,page:`global`,binding:{kind:`combo`,key:`k`}},{id:`add.open`,label:`New review`,group:`global`,page:`global`,binding:{kind:`combo`,key:`p`}},{id:`add.pullRequest`,label:`Review pull requests`,group:`global`,page:`global`,binding:R(`p`,`p`)},{id:`add.branch`,label:`Review branch`,group:`global`,page:`global`,binding:R(`p`,`b`)},{id:`navigate.reviews`,label:`Go to Reviews`,group:`global`,page:`global`,binding:R(`r`)},{id:`navigate.runs`,label:`Go to Runs`,group:`global`,page:`global`,binding:R(`e`)},{id:`navigate.notifications`,label:`Go to Activity`,group:`global`,page:`global`,binding:R(`n`)},{id:`sidebar.hide`,label:`Hide or show the sidebar`,group:`global`,page:`global`,binding:R(`h`)},{id:`help.shortcuts`,label:`Keyboard shortcuts`,group:`global`,page:`global`,binding:R(`?`)},{id:`reviews.search`,label:`Search reviews`,group:`reviews`,page:`reviews`,binding:R(`s`)},{id:`reviews.filters`,label:`Filters`,group:`reviews`,page:`reviews`,binding:R(`f`)},...mt,{id:`reviews.collection.new`,label:`New collection`,group:`reviews`,page:`reviews`,binding:R(`l`,`n`)},{id:`reviews.collection.fold`,label:`Expand or collapse a collection`,group:`reviews`,page:`reviews`,binding:R(`l`,`c`)},{id:`reviews.next`,label:`Next review`,group:`reviews`,page:`reviews`,binding:z(`j`)},{id:`reviews.previous`,label:`Previous review`,group:`reviews`,page:`reviews`,binding:z(`k`)},{id:`reviews.open`,label:`Open review`,group:`reviews`,page:`reviews`,binding:z(`Enter`)},{id:`reviews.openInNewTab`,label:`Open review in new tab`,group:`reviews`,page:`reviews`,binding:z(`Enter`,!0)},{id:`reviews.menu`,label:`Open review menu`,group:`reviews`,page:`reviews`,binding:z(` `)},{id:`reviews.selection.exit`,label:`Exit selection`,group:`reviews`,page:`reviews`,binding:z(`Escape`),hint:`[data-bulk-exit]`,showHint:!0},{id:`runs.search`,label:`Search runs`,group:`runs`,page:`runs`,binding:R(`s`)},{id:`runs.next`,label:`Next run`,group:`runs`,page:`runs`,binding:z(`j`)},{id:`runs.previous`,label:`Previous run`,group:`runs`,page:`runs`,binding:z(`k`)},{id:`runs.open`,label:`Open run’s review`,group:`runs`,page:`runs`,binding:z(`Enter`)},{id:`runs.openInNewTab`,label:`Open run’s review in new tab`,group:`runs`,page:`runs`,binding:z(`Enter`,!0)},{id:`runs.menu`,label:`Open run menu`,group:`runs`,page:`runs`,binding:z(` `)},...ht,{id:`notifications.next`,label:`Next activity`,group:`notifications`,page:`notifications`,binding:z(`j`)},{id:`notifications.previous`,label:`Previous activity`,group:`notifications`,page:`notifications`,binding:z(`k`)},{id:`notifications.open`,label:`Open activity`,group:`notifications`,page:`notifications`,binding:z(`Enter`)},{id:`notifications.openInNewTab`,label:`Open activity in new tab`,group:`notifications`,page:`notifications`,binding:z(`Enter`,!0)},{id:`review.findings.next`,label:`Next card`,group:`findings`,page:`review`,binding:z(`j`)},{id:`review.findings.previous`,label:`Previous card`,group:`findings`,page:`review`,binding:z(`k`)},{id:`review.findings.askBuddy`,label:`Ask Buddy about the card`,group:`findings`,page:`review`,binding:z(` `)},{id:`review.findings.copy`,label:`Copy the card`,group:`findings`,page:`review`,binding:pt(`c`)},{id:`review.findings.choose`,label:`Include in feedback, or leave out`,group:`findings`,page:`review`,binding:z(`Enter`)},{id:`review.feedback.prepare`,label:`Prepare feedback from the chosen cards`,group:`findings`,page:`review`,binding:pt(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:pt(`c`),within:`[data-feedback-dialog]`,hint:`[data-feedback-copy]`,showHint:!0},{id:`review.section.review`,label:`Review overview`,group:`sections`,page:`review`,binding:R(`s`,`r`)},{id:`review.section.kiss`,label:`KISS`,group:`sections`,page:`review`,binding:R(`s`,`k`)},{id:`review.section.issues`,label:`Issues`,group:`sections`,page:`review`,binding:R(`s`,`i`)},{id:`review.section.diagrams`,label:`Diagrams`,group:`sections`,page:`review`,binding:R(`s`,`g`)},{id:`review.section.questions`,label:`Questions`,group:`sections`,page:`review`,binding:R(`s`,`q`)},{id:`review.section.files`,label:`Files`,group:`sections`,page:`review`,binding:R(`s`,`f`)},{id:`review.buddy.open`,label:`Open Buddy AI`,group:`buddy`,page:`review`,binding:R(`b`,`o`)},{id:`review.buddy.prompt`,label:`Choose a prompt`,group:`buddy`,page:`review`,binding:R(`b`,`p`)},{id:`review.mark.reviewed`,label:`Mark reviewed`,group:`actions`,page:`review`,binding:R(`m`,`r`),hint:`[data-review-menu] [data-mark-status]`},{id:`review.mark.waiting`,label:`Mark waiting`,group:`actions`,page:`review`,binding:R(`m`,`w`),hint:`[data-review-menu] [data-lifecycle-set="waiting"]`},{id:`review.mark.done`,label:`Mark done`,group:`actions`,page:`review`,binding:R(`m`,`d`),hint:`[data-review-menu] [data-lifecycle-set="done"]`},{id:`review.checkUpdates`,label:`Check for updates`,group:`actions`,page:`review`,binding:R(`a`,`c`),hint:`[data-review-menu] [data-fresh-check]`},{id:`review.update`,label:`Update review`,group:`actions`,page:`review`,binding:R(`a`,`u`)},{id:`review.queue.toggle`,label:`Queue`,group:`actions`,page:`review`,binding:R(`a`,`q`),hint:`[data-review-menu] [data-queue-action]`},{id:`review.feedback.toggle`,label:`Start or exit Prepare feedback`,group:`actions`,page:`review`,binding:R(`a`,`p`)},{id:`review.delete`,label:`Delete`,group:`actions`,page:`review`,binding:R(`a`,`d`),hint:`[data-review-menu] [data-delete]`},{id:`review.focus.toggle`,label:`Expand or collapse this section`,group:`workspace`,page:`review`,binding:z(`\\`),hint:`[data-focus-toggle]`},{id:`review.leave`,label:`Leave the Buddy AI field, Prepare feedback, or focus mode`,group:`workspace`,page:`review`,binding:z(`Escape`)}],gt=[{page:`global`,keys:[`p`],label:`New review`,combo:`p`},{page:`review`,keys:[`s`],label:`Sections`},{page:`review`,keys:[`m`],label:`Mark`},{page:`review`,keys:[`a`],label:`Actions`},{page:`review`,keys:[`b`],label:`Buddy AI`},{page:`reviews`,keys:[`l`],label:`List sections`},{page:`runs`,keys:[`l`],label:`List sections`}];function _t(e,t=B){return t.filter(t=>t.page===`global`||t.page===e)}function vt(e,t=B){let n={kind:`node`,key:``,label:`Commands`,children:[]},r=(t,r)=>{let i=n;for(let[n,a]of t.entries()){let o=i.children.find(e=>e.key===a);if(o?.kind===`leaf`)throw Error(`Chord ${t.slice(0,n+1).join(` `)} is a command and a namespace on ${e}`);if(o){i=o;continue}let s={kind:`node`,key:a,label:gt.find(r=>(r.page===e||r.page===`global`)&&r.keys.join(` `)===t.slice(0,n+1).join(` `))?.label??r??a.toUpperCase(),children:[]};i.children.push(s),i=s}return i};for(let n of _t(e,t)){if(n.binding.kind!==`chord`)continue;let t=n.binding.keys,i=r(t.slice(0,-1)),a=t[t.length-1];if(i.children.some(e=>e.key===a))throw Error(`Chord ${t.join(` `)} is bound twice on ${e}`);i.children.push({kind:`leaf`,key:a,command:n})}return n}function yt(e){return _t(e).filter(e=>e.binding.kind===`key`)}var bt=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function xt(e){return bt.has(e.key)}function St(e){let t=e.key;if(t.length===1){if(/^[a-z]$/i.test(t))return t.toLowerCase();let n=/^Key([A-Z])$/.exec(e.code??``);return n&&/\p{L}/u.test(t)?n[1].toLowerCase():t}return null}var Ct=new Set(B.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function wt(e,t){let n=t?e.metaKey:e.ctrlKey,r=t?e.ctrlKey:e.metaKey;if(!n||r||e.altKey||e.shiftKey||e.isComposing)return null;let i=St(e);return i!==null&&Ct.has(i)?i:null}function Tt(e){return B.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function Et(e,t,n=!1){if(e.kind!==`key`||t.altKey||t.isComposing)return!1;let r=n?t.metaKey:t.ctrlKey;return(n?t.ctrlKey:t.metaKey)||r!==(e.primary===!0)||t.shiftKey!==(e.shift===!0)?!1:e.key===`\\`?t.key===`\\`||t.code===`Backslash`:e.key.length===1?St(t)===e.key:t.key===e.key}function Dt(e){let t=null,n=[];return{get at(){return t},get path(){return n},start(r=[]){let i=e,a=[];for(let e of r){let t=i.children.find(t=>t.key===e);if(t?.kind!==`node`)break;i=t,a.push(e)}t=i,n=a},press(e){let r=t?.children.find(t=>t.key===e);return r?r.kind===`leaf`?(t=null,n=[],{kind:`run`,command:r.command}):(t=r,n=[...n,e],{kind:`descend`,node:r}):(t=null,n=[],{kind:`cancel`})},reset(){t=null,n=[]}}}var Ot={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function V(e){return Ot[e]??(e.length===1?e.toUpperCase():e)}function H(e,t=`k`){let n=t.toUpperCase();return e?`⌘${n}`:`Ctrl+${n}`}function U(e,t){let n=gt.find(t=>t.combo!==void 0&&t.keys.every((t,n)=>e[n]===t));return n?[H(t,n.combo),...e.slice(n.keys.length).map(V)]:[H(t),...e.map(V)]}function W(e,t){return e.kind===`combo`?t?`⌘${V(e.key)}`:`Ctrl+${V(e.key)}`:e.kind===`chord`?U(e.keys,t).join(` `):e.primary?t?`⌘${V(e.key)}`:`Ctrl+${V(e.key)}`:e.shift?`Shift+${V(e.key)}`:V(e.key)}function kt(e,t){return e.kind===`chord`?U(e.keys,t):[W(e,t)]}function At(e,t){if(e.kind===`chord`)return null;if(e.kind===`combo`)return`${t?`Meta`:`Control`}+${e.key.toUpperCase()}`;let n=e.key===` `?`Space`:e.key.length===1?e.key.toUpperCase():e.key;return e.primary?`${t?`Meta`:`Control`}+${n}`:e.shift?`Shift+${n}`:n}function jt(e){return ft.map(t=>({group:t.id,label:t.label,rows:B.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:kt(t.binding,e),label:t.label}))})).filter(e=>e.rows.length>0)}function G(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function K(e,t){return G(e,`kbd`,`prb-kbd`,t)}function Mt(e,t,n){let r=G(e,`dialog`,`prb-palette`);r.setAttribute(`data-command-palette`,``),r.setAttribute(`aria-labelledby`,`prb-palette-title`);let i=G(e,`div`,`prb-palette-panel`);i.tabIndex=-1,r.append(i),e.body.append(r),r.addEventListener(`click`,e=>{if(e.stopPropagation(),e.target===r)return n();let i=e.target?.closest?.(`[data-palette-key]`);i?.dataset.paletteKey!==void 0&&i.getAttribute(`aria-disabled`)!==`true`&&t(i.dataset.paletteKey)}),r.addEventListener(`cancel`,e=>{e.preventDefault(),n()});let a=(t,n)=>{let r=G(e,`div`,`prb-palette-head`),i=G(e,`span`,`prb-palette-trail`);for(let[n,r]of t.entries())n>0&&i.append(G(e,`span`,`prb-palette-sep`,`›`)),i.append(K(e,r));let a=G(e,`h2`,`prb-palette-title`,n);return a.id=`prb-palette-title`,r.append(i,a),r};return{dialog:r,show:t=>{i.replaceChildren(a(t.trail,t.title));let n=G(e,`div`,`prb-palette-list`);n.setAttribute(`role`,`group`),n.setAttribute(`aria-labelledby`,`prb-palette-title`);let o=null;for(let r of t.rows){t.groupLabels&&r.group!==o&&(n.append(G(e,`p`,`prb-palette-group`,t.groupLabels[r.group]??r.group)),o=r.group);let i=G(e,`button`,`prb-palette-row`);i.type=`button`,i.dataset.paletteKey=r.key,r.available||i.setAttribute(`aria-disabled`,`true`),r.namespace&&i.setAttribute(`aria-haspopup`,`true`),i.append(K(e,r.keyLabel),G(e,`span`,`prb-palette-label`,r.namespace?`${r.label}…`:r.label)),r.state&&i.append(G(e,`span`,`prb-palette-state`,r.state)),n.append(i)}if(t.rows.length===0&&n.append(G(e,`p`,`prb-palette-empty`,`Nothing here on this page.`)),i.append(n),t.footer.length>0){let n=G(e,`div`,`prb-palette-footer`);n.append(G(e,`p`,`prb-palette-group`,`Keys on this page`));let r=G(e,`ul`,`prb-palette-keys`);for(let n of t.footer){let t=G(e,`li`);t.append(K(e,n.keys),G(e,`span`,void 0,n.label)),r.append(t)}n.append(r),i.append(n)}r.open||r.showModal(),i.focus()},showPanel:(t,n,o)=>{i.replaceChildren(a(t,n.title));let s=G(e,`div`,`prb-palette-body`);i.append(s),r.open||r.showModal(),i.dataset.mode=n.title;let c=n.mount(s,o);return()=>{delete i.dataset.mode,c?.()}},close:()=>{r.open&&r.close()},isOpen:()=>r.open}}function Nt(e,t,n){let r=[...e.querySelectorAll(`[data-palette-key]`)];if(r.length===0)return!1;let i=r.indexOf(n),a=t===`ArrowDown`?r[i<0?0:(i+1)%r.length]:t===`ArrowUp`?r[i<0?r.length-1:(i-1+r.length)%r.length]:t===`Home`?r[0]:t===`End`?r[r.length-1]:null;return a?(a.focus(),!0):!1}function Pt(e,t){let n=G(e,`div`,`prb-shortcuts-table`);for(let r of t){let t=G(e,`section`,`prb-shortcuts-group`);t.append(G(e,`h3`,`prb-shortcuts-heading`,r.label));let i=G(e,`dl`,`prb-shortcuts-list`);for(let t of r.rows){let n=G(e,`dt`,`prb-shortcuts-keys`);n.dataset.commandId=t.id;for(let r of t.keys)n.append(K(e,r));i.append(n,G(e,`dd`,`prb-shortcuts-label`,t.label))}t.append(i),n.append(t)}return n}function Ft(e,t,n,r){let i=G(e,`dialog`,`prb-dialog prb-shortcuts`);i.setAttribute(`data-shortcuts-dialog`,``),i.setAttribute(`aria-labelledby`,`prb-shortcuts-title`);let a=G(e,`div`,`prb-shortcuts-head`),o=G(e,`h2`,void 0,`Keyboard shortcuts`);o.id=`prb-shortcuts-title`;let s=G(e,`button`,`prb-shortcuts-close`,`Close`);s.type=`button`,s.setAttribute(`data-shortcuts-close`,``),a.append(o,s),i.append(a,G(e,`p`,`prb-shortcuts-hint`,n),Pt(e,t)),e.body.append(i);let c=null;return s.addEventListener(`click`,()=>i.close()),i.addEventListener(`click`,e=>{e.target===i&&i.close()}),i.addEventListener(`close`,()=>{c?.isConnected&&c.focus(),c=null,r?.()}),{dialog:i,open:()=>{if(i.open)return;let t=e.activeElement;c=t instanceof HTMLElement&&t!==e.body?t:null,i.showModal(),s.focus()},isOpen:()=>i.open}}var It=/https?:\/\/[^\s<>()"'`]+/gi,Lt=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,Rt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,zt=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function Bt(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=Lt.exec(t);if(n){let[,e,t,r]=n,i=t.replace(/\.git$/i,``),a=Number(r);return{kind:`github`,owner:e,repo:i,number:a,url:`https://github.com/${e}/${i}/pull/${a}`,key:`${e}/${i}#${a}`.toLowerCase()}}let r=zt.exec(t);if(r){let[,e,n,i]=r;return{kind:`unsupported`,provider:`Bitbucket`,label:`${e}/${n} #${i}`,url:t,key:`bitbucket:${e}/${n}#${i}`.toLowerCase()}}let i=Rt.exec(t);if(i){let[,e,n,r]=i,a=n.replace(/\/$/,``);return{kind:`unsupported`,provider:`GitLab`,label:`${a} !${r}`,url:t,key:`gitlab:${e}/${a}!${r}`.toLowerCase()}}return null}function Vt(e){let t=[],n=new Set;for(let r of e.matchAll(It)){let e=Bt(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function Ht(e){return`${e} isn't supported yet`}var Ut=`prb:review-started`;function Wt(e){e.dispatchEvent(new(e.defaultView??window).Event(Ut))}function Gt(e,t){e.addEventListener(Ut,t)}function Kt(e,t){let n=null,r=!1,i=!1,a=!1,o=async()=>{n=null,r=!0;let s=await t();if(r=!1,s===null){a=!0;return}let c=i?0:s;i=!1,n=e.setTimeout(()=>void o(),c)};return o(),{now:()=>{if(!a){if(r){i=!0;return}n!==null&&e.clearTimeout(n),o()}}}}function qt(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var Jt={waiting:`Queued`,reviewing:`Analysing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},Yt={waiting:`○`,reviewing:`◐`,"already-reviewed":`✓`,ready:`✓`,failed:`!`},Xt=250,Zt=1500,Qt=6e4;async function q(e,t,n){try{let r=await e.fetch(t,n===void 0?{}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)}),i=await r.json().catch(()=>({}));if(!r.ok){let e=i;return{...e,ok:!1,status:r.status,error:typeof e.error==`string`?e.error:`Something went wrong. Try again.`}}return{ok:!0,value:i}}catch{return{ok:!1,status:0,error:`The workspace server did not answer. Check it is still running.`}}}function $t(e,t,n){let r=null,i=!1,a=o=>{r=e.setTimeout(async()=>{let r=await q(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),a(r.value.finished?Qt:Zt)):r.status===404?n.lost(r.error):a(Zt))},o)};return a(Zt),()=>{i=!0,r!==null&&e.clearTimeout(r)}}function J(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function Y(e,t,n){let r=J(e,`option`,void 0,t);return r.value=n,r}function X(e,t,n){let r=J(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function en(e,t){let n=J(e,`details`,`prb-addreview-technical`);return n.append(J(e,`summary`,void 0,`Technical details`),J(e,`pre`,void 0,t)),n}function tn(e){let t=J(e,`div`,`prb-addreview-problemblock`);t.setAttribute(`role`,`alert`);let n=J(e,`p`,`prb-addreview-error`);return n.hidden=!0,t.append(n),{element:t,show(r){n.textContent=r.error,n.hidden=!1,t.querySelector(`.prb-addreview-technical`)?.remove(),r.detail&&t.append(en(e,r.detail))},hide(){n.hidden=!0,t.querySelector(`.prb-addreview-technical`)?.remove()}}}function nn(e,t,n=`prb-addreview-path`){let r=J(e,`span`,n),i=t.replace(/\/+$/,``).lastIndexOf(`/`);return i<=0?r.textContent=t:r.append(J(e,`span`,`prb-addreview-path-parent`,t.slice(0,i+1)),J(e,`span`,`prb-addreview-path-name`,t.slice(i+1))),r}function Z(e,t){return J(e,`code`,void 0,t)}var Q=e=>`${e} commit${e===1?``:`s`}`;function rn(e,t){let n=t.options.find(e=>e.where===`remote`)?.display??`origin/${t.name}`,r=J(e,`p`,`prb-addreview-choice-text`),i=t.divergence,a=i&&i.ahead>0&&i.behind>0?[`Your local `,Z(e,t.name),` and `,Z(e,n),` have diverged: ${Q(i.ahead)} on the local side, ${Q(i.behind)} on the remote.`]:i&&i.ahead>0?[`Your local `,Z(e,t.name),` is ${Q(i.ahead)} ahead of `,Z(e,n),`.`]:i&&i.behind>0?[`Your local `,Z(e,t.name),` is ${Q(i.behind)} behind `,Z(e,n),`.`]:[`Your local `,Z(e,t.name),` and `,Z(e,n),` are different commits.`];return r.append(...a),r}function an(e,t,n){let r=t.baseChoice,i=J(e,`div`,`prb-addreview-choice`);i.setAttribute(`data-addreview-base-choice`,``);let a=J(e,`p`,`prb-addreview-choice-title`,`Choose a base branch`);a.id=`prb-addreview-choice-title`;let o=J(e,`div`,`prb-addreview-choice-options`);o.setAttribute(`role`,`radiogroup`),o.setAttribute(`aria-labelledby`,a.id);for(let t of r.options){let i=J(e,`label`,`prb-addreview-choice-option`),a=J(e,`input`);a.type=`radio`,a.name=`prb-addreview-base-choice`,a.value=t.base,a.addEventListener(`change`,()=>{a.checked&&n(t.base)});let s=`${t.where===`remote`?`Remote`:`Local`} ${r.name}`,c=t.commits===void 0?``:t.commits===0?` (no new changes)`:` (${Q(t.commits)} to review)`;i.append(a,Z(e,t.display),J(e,`span`,`prb-addreview-choice-what`,` ${s}${c}`)),o.append(i)}return i.append(a,rn(e,r),J(e,`p`,`prb-addreview-choice-text`,`Select which branch to compare against:`),o),t.detail&&i.append(en(e,t.detail)),i}function on(e,t){return t&&e.status===`waiting`?`Not started`:t&&e.status===`reviewing`?`Started`:Jt[e.status]}function sn(e,t){let n=e.filter(e=>e.status===`ready`||e.status===`already-reviewed`).length,r=[`reviewing`,`waiting`,`failed`].map(n=>[on({status:n},t).toLowerCase(),e.filter(e=>e.status===n).length]).filter(([,e])=>e>0);return[`${n} of ${e.length} ${e.length===1?`review`:`reviews`} ready`,...r.map(([e,t])=>`${t} ${e}`)].join(` · `)}function cn(e,t,n,r,i){let a=J(e,`div`,`prb-addreview-progress`);a.setAttribute(`data-addreview-progress`,``);let o=J(e,`p`,`prb-addreview-summary`);o.setAttribute(`aria-live`,`polite`);let s=J(e,`ul`,`prb-addreview-rows`);s.setAttribute(`aria-label`,`Started reviews`);let c=J(e,`p`,`prb-palette-summary`),l=tn(e),u=J(e,`div`,`prb-addreview-footer`),d=J(e,`button`,`prb-addreview-start`,`Close`);d.type=`button`,d.setAttribute(`data-addreview-close`,``),d.addEventListener(`click`,i),u.append(d),a.append(o,s,c,l.element,u);let f=r,p=null,m=!1,h=!1,g=new Map,_=(t,n)=>{let r=n.contains(e.activeElement),i=n.querySelector(`.prb-addreview-technical`)?.open??!1;n.replaceChildren(),n.dataset.status=h&&t.status===`waiting`?`not-started`:t.status,n.dataset.state=t.status===`failed`?`problem`:`ok`;let a=J(e,`div`,`prb-addreview-row-head`),o=J(e,`span`,`prb-addreview-mark`,Yt[t.status]);if(o.setAttribute(`aria-hidden`,`true`),a.append(o,t.reviewId?X(e,t.reviewId,t.label):J(e,`span`,`prb-addreview-row-label`,t.label)),a.append(J(e,`span`,`prb-addreview-badge`,on(t,h))),n.append(a),t.reason&&n.append(J(e,`span`,`prb-addreview-status prb-addreview-${t.status===`failed`?`problem`:`muted`}`,t.reason)),t.kept&&n.append(J(e,`span`,`prb-addreview-status prb-addreview-muted`,qt(t.kept))),t.detail){let r=en(e,t.detail);r.open=i,n.append(r)}if(t.status===`failed`&&!h){let r=t.stale===!0,i=J(e,`button`,`prb-addreview-retry`,r?`Start fresh review`:`Retry`);i.type=`button`,i.setAttribute(r?`data-addreview-fresh`:`data-addreview-retry`,``),i.setAttribute(`aria-label`,`${r?`Start a fresh review of`:`Retry`} ${t.label}`),i.addEventListener(`click`,()=>void b(t.key,i,r)),n.append(i)}r&&n.focus()},v=()=>{let t=f.map(t=>{let n=JSON.stringify([t,h]),r=g.get(t.key);if(!r){let n=J(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key,n.tabIndex=-1,r={item:n,json:``},g.set(t.key,r)}return r.json!==n&&(_(t,r.item),r.json=n),r.item});(t.some((e,t)=>s.children[t]!==e)||s.children.length!==t.length)&&s.replaceChildren(...t),o.textContent=sn(f,h),c.textContent=!h&&f.some(e=>e.status===`waiting`)?`Queued reviews start as running ones finish. Reviews carry on in the background, so you can close this; they appear in your reviews list.`:`Reviews carry on in the background, so you can close this; they appear in your reviews list.`},y=()=>{p?.(),p=$t(t,n,{rows:e=>{f=e,v()},lost:e=>{l.show({error:e}),h=!0,v()}})},b=async(r,i,a)=>{i.disabled=!0;let o=await q(t,`/add-review/batches/${n}/retry`,{key:r,...a?{fresh:!0}:{}});if(o.ok&&Wt(e),!m){if(!o.ok){i.disabled=!1,l.show(o),o.status===404&&(h=!0,p?.(),v());return}l.hide(),f=o.value.rows,v(),y()}};return v(),y(),{element:a,focus:()=>d.focus(),stop:()=>{m=!0,p?.()}}}function ln(e,t,n){let r=J(e,`details`,`prb-addreview-options`);r.append(J(e,`summary`,void 0,`Review options`));let i=J(e,`div`,`prb-addreview-grid`);r.append(i);let a=(t,n)=>{let r=J(e,`label`,`prb-addreview-key`,t),a=`prb-addreview-${t.toLowerCase()}`;n.id=a,r.htmlFor=a,i.append(r,n)},o=J(e,`select`,`prb-addreview-control`);o.setAttribute(`data-addreview-agent`,``);let s=J(e,`input`,`prb-addreview-control`);s.type=`text`,s.placeholder=`Default`,s.spellcheck=!1,s.autocomplete=`off`,s.setAttribute(`data-addreview-model`,``);let c=J(e,`input`,`prb-addreview-control`);c.type=`text`,c.placeholder=`Auto`,c.spellcheck=!1,c.autocomplete=`off`,c.setAttribute(`data-addreview-base`,``),a(`Agent`,o),a(`Model`,s);let l=J(e,`div`,`prb-addreview-modelhelp`),u=J(e,`button`,`prb-addreview-helplink`,`How do I find model names?`);u.type=`button`,u.setAttribute(`aria-expanded`,`false`),u.setAttribute(`data-addreview-model-help`,``);let d=J(e,`p`,`prb-addreview-help`);d.id=`prb-addreview-model-help`,d.hidden=!0,u.setAttribute(`aria-controls`,d.id),l.append(u,d),i.append(l),n&&a(`Base`,c);let f=tn(e);r.append(f.element);let p=[],m=()=>{let t=p.find(e=>e.id===o.value);if(!t){d.replaceChildren(`Choose an agent to see how to find its model names.`);return}let n=t.displayName,r=t.modelHelp;d.replaceChildren(...r?.command?[`To see the models ${n} offers, run `,Z(e,r.command),` in a terminal.`]:r?.note?[`To see the models ${n} offers, ${r.note}.`]:[`${n} does not say how to list its models. Use a name from its own documentation.`],` Leave Model empty to use ${n}'s default.`)};u.addEventListener(`click`,()=>{d.hidden=!d.hidden,u.setAttribute(`aria-expanded`,String(!d.hidden)),d.hidden?s.removeAttribute(`aria-describedby`):s.setAttribute(`aria-describedby`,d.id),m()}),o.addEventListener(`change`,m);let h=null,g=!1;return{element:r,base:c,loaded:q(t,`/add-review/options`).then(t=>{if(g=!0,!t.ok)return f.show(t),r.open=!0,null;p=t.value.agents;let{agent:n}=t.value,i=p.filter(e=>e.installed);n.kind!==`resolved`&&o.append(Y(e,`Choose an agent`,``));for(let t of i)o.append(Y(e,t.displayName,t.id));return n.kind===`resolved`?(h=n.id,i.some(e=>e.id===n.id)||o.append(Y(e,n.displayName,n.id)),o.value=n.id):(o.value=``,r.open=!0,n.kind===`refused`&&f.show({error:n.error})),m(),t.value}),complete:()=>g&&o.value!==``,values:()=>({...o.value&&o.value!==h?{agent:o.value}:{},...s.value.trim()?{model:s.value.trim()}:{},...n&&c.value.trim()?{base:c.value.trim()}:{}}),setBasePlaceholder:e=>{c.placeholder=e?`Auto (${e})`:`Auto`},showProblem:e=>{r.open=!0,f.show(e),(e.field===`model`?s:o).focus()},hideProblem:()=>f.hide()}}function un(e){let t=J(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function dn(e){return{title:`New review`,escape:`close`,mount(t,n){let r=e.defaultView,i=J(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`pull-requests`);let a=J(e,`div`,`prb-addreview-config`),o=J(e,`label`,`prb-addreview-label`,`Paste PR links`),s=J(e,`textarea`,`prb-palette-input prb-addreview-paste`);s.id=`prb-addreview-paste`,o.htmlFor=s.id,s.rows=3,s.spellcheck=!1,s.autocomplete=`off`,s.placeholder=`https://github.com/owner/repo/pull/123`;let c=J(e,`p`,`prb-palette-summary`);c.setAttribute(`aria-live`,`polite`);let l=J(e,`ul`,`prb-addreview-rows`),u=ln(e,r,!1),d=tn(e),f=J(e,`p`,`prb-addreview-error`);f.setAttribute(`data-addreview-limit`,``),f.hidden=!0;let p=J(e,`div`,`prb-addreview-footer`),m=un(e);p.append(m),a.append(o,s,c,f,l,u.element,d.element,p),i.append(J(e,`p`,`prb-addreview-mode`,`Pull request`),a),t.append(i);let h=[],g=new Map,_=!1,v=0,y=null,b=null,x=!1,S=!1,C=()=>h.filter(e=>(e.ok||e.needsFolder)&&!!g.get(e.key)),w=0,T=()=>{let e=C().length;m.textContent=e>1?`Review ${e} PRs`:`Review PR`,m.disabled=b!==null||x||_||w>0||e===0||!u.complete()},E=()=>{f.hidden=w===0,f.textContent=`At most 20 pull requests can be reviewed at once. Remove ${w} to continue.`},D=(t,n)=>J(e,`span`,`prb-addreview-status prb-addreview-${n}`,t),O=()=>{l.replaceChildren(...h.map(t=>{let n=J(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key;let r=t.ok||!!g.get(t.key);n.dataset.state=r?`ok`:`problem`;let i=J(e,`div`,`prb-addreview-row-head`),a=J(e,`span`,`prb-addreview-mark`,r?`✓`:`!`);if(a.setAttribute(`aria-hidden`,`true`),i.append(a,J(e,`span`,`prb-addreview-row-label`,t.label)),n.append(i),t.reviewed?.kept){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Resumes where it stopped`)),n.append(r,D(qt(t.reviewed.kept),`muted`))}else if(t.reviewed){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Already reviewed`)),n.append(r)}else t.ok?n.append(D(`Ready to start`,`muted`)):t.reason&&n.append(D(t.reason,`problem`));if(t.folders.length>1){let r=J(e,`select`,`prb-addreview-control prb-addreview-folder`);r.setAttribute(`aria-label`,`Local folder for ${t.label}`);for(let n of t.folders)r.append(Y(e,n.branch?`${n.display} (${n.branch})`:n.display,n.path));r.value=g.get(t.key)??t.folder??``,r.addEventListener(`change`,()=>g.set(t.key,r.value)),n.append(r)}else if(t.folders.length===1)n.append(nn(e,t.folders[0].display));else if(t.needsFolder){let r=J(e,`input`,`prb-addreview-control prb-addreview-folder`);r.type=`text`,r.placeholder=`Local folder for this repository, e.g. ~/code/repo`,r.setAttribute(`aria-label`,`Local folder for ${t.label}`),r.spellcheck=!1,r.autocomplete=`off`,r.value=g.get(t.key)??``,r.addEventListener(`input`,()=>{r.value.trim()?g.set(t.key,r.value.trim()):g.delete(t.key),n.dataset.state=r.value.trim()?`ok`:`problem`,T()}),n.append(r)}return n}))},k=()=>{let e=Vt(s.value),t=e.filter(e=>e.kind===`github`).length;c.textContent=e.length===0?s.value.trim()?`No pull request links found.`:``:t===1?`1 pull request recognised`:`${t} pull requests recognised`,h=e.map(e=>e.kind===`github`?h.find(t=>t.key===e.key)??{key:e.key,label:`${e.owner}/${e.repo} #${e.number}`,url:e.url,ok:!1,folders:[]}:{key:e.key,label:`${e.provider} ${e.provider===`GitLab`?`merge request`:`pull request`}`,url:e.url,ok:!1,reason:Ht(e.provider),folders:[]}),_=e.some(e=>e.kind===`github`),w=Math.max(0,t-20);let n=++v;O(),E(),T(),y!==null&&r.clearTimeout(y),_&&(y=r.setTimeout(async()=>{y=null;let e=await q(r,`/add-review/pull-requests/preview`,{text:s.value});if(!(S||n!==v)){if(_=!1,!e.ok)d.show(e);else{d.hide(),h=e.value.rows;for(let e of h)e.folder&&!g.has(e.key)&&g.set(e.key,e.folder)}O(),T()}},Xt))},A=async()=>{if(T(),m.disabled)return;x=!0,T();let t=C().map(e=>({url:e.url,folder:g.get(e.key)})),i=await q(r,`/add-review/pull-requests`,{items:t,...u.values()});if(x=!1,i.ok&&Wt(e),!S){if(!i.ok){i.field?(d.hide(),u.showProblem(i)):(u.hideProblem(),d.show(i)),T();return}b=cn(e,r,i.value.batchId,i.value.rows,n),a.replaceWith(b.element),b.focus()}};return s.addEventListener(`input`,k),m.addEventListener(`click`,()=>void A()),i.addEventListener(`change`,()=>T()),i.addEventListener(`keydown`,e=>{if(b||e.key!==`Enter`||e.shiftKey||e.isComposing)return;let t=e.target;t.tagName!==`SELECT`&&t.tagName!==`BUTTON`&&t.tagName!==`A`&&t.tagName!==`SUMMARY`&&(e.preventDefault(),A())}),u.loaded.then(()=>T()),T(),s.focus(),()=>{S=!0,y!==null&&r.clearTimeout(y),b?.stop()}}}}function fn(e){return{title:`New review`,escape:`close`,mount(t,n){let r=e.defaultView,i=J(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`branch`);let a=J(e,`div`,`prb-addreview-config`),o=J(e,`label`,`prb-addreview-label`,`Working folder`),s=J(e,`div`,`prb-addreview-pathrow`),c=J(e,`input`,`prb-palette-input`);c.id=`prb-addreview-folder`,o.htmlFor=c.id,c.type=`text`,c.spellcheck=!1,c.autocomplete=`off`,c.placeholder=`~/code/project`;let l=J(e,`button`,`prb-addreview-browse`,`Browse…`);l.type=`button`,l.hidden=!0,s.append(c,l);let u=J(e,`div`,`prb-addreview-detected`);u.setAttribute(`aria-live`,`polite`);let d=J(e,`p`,`prb-palette-group`,`Recent`),f=J(e,`div`,`prb-palette-results prb-addreview-recent`);f.setAttribute(`role`,`group`),f.setAttribute(`aria-label`,`Recent folders`),d.hidden=!0;let p=ln(e,r,!0),m=tn(e),h=J(e,`div`,`prb-addreview-footer`),g=un(e);g.textContent=`Review branch`,h.append(g),a.append(o,s,u,d,f,p.element,m.element,h),i.append(J(e,`p`,`prb-addreview-mode`,`Branch`),a),t.append(i);let _=null,v=null,y=!1,b=null,x=!1,S=null,C=(e,t)=>`${e}\n${t.trim()}`,w=()=>C(c.value,p.base.value),T=()=>{g.disabled=y||b!==null||!_?.result.ok||_.key!==w()||!p.complete()},E=e=>{S={base:e,path:c.value},p.base.value=e,v!==null&&r.clearTimeout(v),T(),O().then(e=>{!x&&e.ok&&g.focus()})},D=t=>{if(u.replaceChildren(),!t)return;if(!t.ok){if(t.baseChoice){u.append(an(e,{error:t.error??``,...t.detail?{detail:t.detail}:{},baseChoice:t.baseChoice},E));return}u.append(J(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`)),t.detail&&u.append(en(e,t.detail));return}let n=J(e,`dl`,`prb-addreview-grid prb-addreview-facts`),r=(t,r)=>{let i=J(e,`dd`);i.append(r),n.append(J(e,`dt`,`prb-addreview-key`,t),i)};if(r(`Repository`,t.repo??``),r(`Branch`,t.branch??``),r(`Base`,t.base??`Not found`),t.reviewed?.kept){let n=X(e,t.reviewed.reviewId,`Resumes where it stopped`),i=J(e,`span`,`prb-addreview-kept`,qt(t.reviewed.kept)),a=J(e,`span`);a.append(n,J(e,`br`),i),r(`Review`,a)}else t.reviewed&&r(`Review`,X(e,t.reviewed.reviewId,t.reviewed.inProgress?`Being reviewed now`:`Already reviewed`));u.append(n),p.setBasePlaceholder(t.base??null)},O=()=>{let e=c.value,t=p.base.value.trim(),n=C(e,t);return _?.key===n?Promise.resolve(_.result):e.trim()?q(r,`/add-review/folder/inspect`,{path:e,...t?{base:t}:{}}).then(e=>{let t=e.ok?e.value:{ok:!1,error:e.error,...e.detail?{detail:e.detail}:{}};return!x&&w()===n&&(_={key:n,result:t},D(t),T()),t}):(_=null,D(null),T(),Promise.resolve({ok:!1}))},k=e=>{c.value=e,A(),v!==null&&r.clearTimeout(v),T(),O(),c.focus()},A=()=>{!S||S.path===c.value||(p.base.value===S.base&&(p.base.value=``),S=null)},j=async()=>{if(y||b)return;y=!0;let t=w(),i=c.value,o=p.values();T(),v!==null&&(r.clearTimeout(v),v=null);let s=await O();if(x)return;if(!s.ok||!p.complete()||w()!==t)return y=!1,T();let l=await q(r,`/add-review/branch`,{path:i,...o});if(y=!1,l.ok&&Wt(e),!x){if(!l.ok){l.baseChoice?(_={key:t,result:{...l,ok:!1}},D(_.result),m.hide()):l.field?p.showProblem(l):m.show(l),T();return}b=cn(e,r,l.value.batchId,l.value.rows,n),a.replaceWith(b.element),b.focus()}},M=()=>{T(),v!==null&&r.clearTimeout(v),v=r.setTimeout(()=>{v=null,O()},Xt)};return c.addEventListener(`input`,()=>{A(),M()}),p.base.addEventListener(`input`,M),l.addEventListener(`click`,async()=>{let e=await q(r,`/add-review/folder/choose`,{});if(!x){if(!e.ok){m.show(e);return}e.value.path?k(e.value.path):c.focus()}}),f.addEventListener(`click`,e=>{let t=e.target.closest(`[data-folder-path]`);t?.dataset.folderPath&&k(t.dataset.folderDisplay??t.dataset.folderPath)}),g.addEventListener(`click`,()=>void j()),i.addEventListener(`keydown`,e=>{if(b||e.isComposing)return;let t=[...f.querySelectorAll(`[data-folder-path]`)],n=t.indexOf(e.target);if(e.key===`ArrowDown`||e.key===`ArrowUp`){let r=e.key===`ArrowDown`?e.target===c?t[0]:n>=0?t[n+1]:null:n===0?c:n>0?t[n-1]:null;if(!r)return;e.preventDefault(),r.focus();return}if(e.key!==`Enter`||e.shiftKey||n>=0)return;let r=e.target;r.tagName!==`SELECT`&&r.tagName!==`BUTTON`&&r.tagName!==`A`&&r.tagName!==`SUMMARY`&&(e.preventDefault(),j())}),i.addEventListener(`change`,()=>T()),p.loaded.then(e=>{x||(l.hidden=!e?.canChooseFolder,T())}),q(r,`/add-review/folders`).then(t=>{x||!t.ok||(f.replaceChildren(...t.value.folders.map(t=>{let n=J(e,`button`,`prb-palette-result`);return n.type=`button`,n.dataset.folderPath=t.path,n.dataset.folderDisplay=t.display,n.append(J(e,`span`,`prb-palette-result-title`,t.branch?`${t.repo} · ${t.branch}`:t.repo),nn(e,t.display,`prb-palette-result-where`)),n})),d.hidden=t.value.folders.length===0)}),T(),c.focus(),()=>{x=!0,b?.stop(),v!==null&&r.clearTimeout(v)}}}}function pn(e){return e?.compact?`Expand sidebar`:`Collapse sidebar`}function mn(e,t){let n=e.documentElement,r=()=>({compact:n.hasAttribute(`data-sidebar-compact`),hidden:n.hasAttribute(`data-sidebar-hidden`)}),i=()=>{let t=r();for(let n of e.querySelectorAll(`[data-sidebar-toggle="rail"]`)){let e=n.querySelector(`.prb-rail-title`);e&&(e.textContent=pn(t)),n.setAttribute(`aria-expanded`,String(!t.compact))}},a=n=>{let r=e.body,i=r?.dataset.token,a=i?`${r.dataset.apiBase??``}/prefs?t=${encodeURIComponent(i)}`:`/sidebar`;t.fetch(a,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sidebar:n})}).catch(()=>{})},o=e.querySelector(`.prb-rail`),s,c=!1,l=()=>{let e=r();return e.compact===!0&&!e.hidden},u=e=>{t.clearTimeout(s),s=void 0,n.toggleAttribute(`data-sidebar-peek`,e&&l())},d=e=>{try{return typeof e?.matches==`function`&&e.matches(`:focus-visible`)}catch{return!1}},f=()=>o?.contains(e.activeElement)===!0&&d(e.activeElement);o?.addEventListener(`pointerenter`,()=>{c=!0,l()&&(t.clearTimeout(s),s=t.setTimeout(()=>u(!0),150))}),o?.addEventListener(`pointerleave`,()=>{c=!1,f()||u(!1)}),o?.addEventListener(`focusin`,e=>{d(e.target)&&l()&&u(!0)}),o?.addEventListener(`focusout`,e=>{let t=e.relatedTarget;t&&o.contains(t)||c||u(!1)});let p=e=>{n.toggleAttribute(`data-sidebar-compact`,e),u(!1),i(),a({compact:e})},m=t=>{n.toggleAttribute(`data-sidebar-hidden`,t),u(!1);let r=e.activeElement;t&&r?.closest(`.prb-rail`)&&e.querySelector(`[data-sidebar-toggle="strip"]`)?.focus(),!t&&r?.matches(`[data-sidebar-toggle="strip"]`)&&e.querySelector(`[data-sidebar-toggle="rail"]`)?.focus(),i(),a({hidden:t})};for(let t of e.querySelectorAll(`[data-sidebar-toggle]`))t.addEventListener(`click`,()=>{r().hidden?m(!1):p(!r().compact)});return i(),{hidden:()=>r().hidden===!0,setHidden:m}}function hn(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function gn(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:gn(t);return`global`}function _n(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=Dt(vt(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=Ft(a,jt(o),`${H(o)} opens the command palette and ${H(o,`p`)} starts a new review, from anywhere in the workspace. Single keys never act while you are typing.`,()=>r.onSettle?.()),d=mn(a,i),f={"palette.open":{run:()=>D()},"add.open":{run:()=>D([`p`])},"add.pullRequest":{panel:dn(a)},"add.branch":{panel:fn(a)},"navigate.reviews":{run:()=>l(`/`)},"navigate.runs":{run:()=>l(`/runs`)},"navigate.notifications":{run:()=>l(`/notifications`)},"help.shortcuts":{run:()=>u.open()},"sidebar.hide":{run:()=>d.setHidden(!d.hidden()),label:()=>d.hidden()?`Show sidebar`:`Hide sidebar`}},p=B.find(e=>e.id===`add.open`),m=W(p.binding,o);for(let e of a.querySelectorAll(`[data-new-review]`)){e.setAttribute(`aria-keyshortcuts`,At(p.binding,o)??``),e.dataset.newReview===`strip`&&(e.dataset.tip=`New review (${m})`);let t=e.querySelector(`[data-new-review-key]`);t&&(t.textContent=m),e.addEventListener(`click`,()=>f[`add.open`].run?.())}let h=e=>f[e.id]??t[e.id],g=(e,t)=>{let n=h(e);return!!n&&(n.available?.(t)??!0)},_=null,v=`back`,b=[],x=()=>{_?.(),_=null},S=(e=`dismissed`)=>{x(),s.reset(),C.close();let t=c;c=null,t?.isConnected&&t.focus(),e===`dismissed`&&r.onSettle?.()},C=Mt(a,e=>O(e),S),w=yt(e).map(e=>({keys:W(e.binding,o),label:e.label})),T=Object.fromEntries(ft.map(e=>[e.id,e.label])),E=()=>{let e=s.at;if(!e)return;let t=e.children.map(e=>e.kind===`leaf`?{key:e.key,keyLabel:e.key.toUpperCase(),label:h(e.command)?.label?.()??e.command.label,namespace:!1,available:g(e.command),group:e.command.group,state:h(e.command)?.state?.()??null}:{key:e.key,keyLabel:e.key.toUpperCase(),label:e.label,namespace:!0,available:!0,group:gn(e)}),n=s.path.length===0?ft.flatMap(e=>t.filter(t=>t.group===e.id)):t;C.show({trail:U(s.path,o),title:e.label,rows:n,groupLabels:s.path.length===0?T:null,footer:w})};function D(e=[]){if(C.isOpen())return S();r.onOpen?.();let t=a.activeElement;c=t instanceof HTMLElement&&t!==a.body?t:null,s.start(e),E()}function O(e){let t=s.press(e);if(t.kind===`descend`)return E();let n=t.kind===`run`&&g(t.command)?h(t.command):null;if(n?.panel&&t.kind===`run`)return k(t.command,n.panel);S(n?`running`:`dismissed`),n?.run?.()}function k(e,t){b=e.binding.kind===`chord`?e.binding.keys.slice(0,-1):[],v=t.escape??`back`;let n=e.binding.kind===`chord`?U(e.binding.keys,o):[H(o)];_=C.showPanel(n,t,()=>S(`running`))}function A(){x(),s.start();for(let e of b)s.press(e);E()}let j=yt(e);return i.addEventListener(`keydown`,e=>{if(C.isOpen()){if(xt(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(_)return e.key===`Escape`&&!e.isComposing?(t(),v===`close`?S():A()):wt(e,o)?(t(),S()):void 0;if(e.key===`Escape`||wt(e,o))return t(),S();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),Nt(C.dialog,e.key,a.activeElement);return}if(e.target?.closest?.(`[data-palette-key]`)&&(e.key===`Enter`||e.key===` `)||e.key===`Tab`||e.metaKey||e.ctrlKey||e.altKey)return;t(),O(St(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=wt(e,o),r=t?Tt(t):void 0;if(r){if(a.querySelector(`dialog[open]`))return;e.preventDefault(),e.stopPropagation(),h(r)?.run?.(e);return}for(let t of j){if(!Et(t.binding,e,o))continue;let r=t.within;if(r){if(!a.querySelector(r)?.matches(`[open]`))continue}else if(t.binding.kind===`key`&&t.binding.key!==`Escape`&&(n(e.target)||hn(a)))continue;if(g(t,e)){e.preventDefault(),h(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{C.isOpen()&&S(`unloading`)}),vn(a,e,o),{isOpen:()=>C.isOpen()||u.isOpen(),close:()=>S()}}function vn(e,t,n){for(let r of _t(t)){let t=r.hint;if(t)for(let i of e.querySelectorAll(t))if(r.binding.kind===`chord`)i.dataset.shortcutHint=W(r.binding,n);else{let e=At(r.binding,n);if(e&&i.setAttribute(`aria-keyshortcuts`,e),r.showHint&&!i.querySelector(`:scope > .prb-key-hint`)){let e=i.ownerDocument.createElement(`kbd`);e.className=`prb-key-hint`,e.setAttribute(`aria-hidden`,`true`),e.textContent=W(r.binding,n),i.append(e)}}}}function yn(e){return`${e} more`}function bn(e){return e===0?`Nothing unread`:`${e} unread`}function xn(e){return e===`moved-again`?`replaced by a later move`:`replaced when the review caught up`}function Sn(e){return e===`restarting`?`Workspace server restarting`:e===`unreachable`?`Workspace server not running`:`Workspace server running`}function $(e,t){let n=e.querySelector(`[data-server-status]`);if(!n)return;n.dataset.serverStatus=t;let r=n.querySelector(`[data-server-status-label]`);r&&(r.textContent=Sn(t))}function Cn(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||$(e,t?`running`:`unreachable`)}function wn(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:bn(t)),n.hidden=t===0}function Tn(e){return e===0?`Nothing running`:`${e} ${e===1?`run`:`runs`} in progress`}function En(e){return e>9?`9+`:String(e)}function Dn(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-running-count]`)){let e=n.dataset.runningStyle;e===`rail`?(n.textContent=t===0?``:String(t),n.setAttribute(`aria-label`,Tn(t))):n.textContent=e===`digit`?t===0?``:En(t):t===0?``:Tn(t),e!==`words`&&(n.hidden=t===0)}}var On=6e3,kn=5e3;function An(e=document){let t=e.querySelector(`.prb-toasts`);if(t)return t;let n=e.createElement(`div`);return n.className=`prb-toasts`,n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),e.body.append(n),n}function jn(e,t,n=window){return Mn(e,{kind:t.kind,text:t.text},n)}function Mn(e,t,n){let r=e.ownerDocument,i=r.createElement(`div`);i.className=`prb-toast`,i.dataset.kind=t.kind;let a=r.createElement(`span`);a.className=`prb-toast-text`,a.textContent=t.text;let o=r.createElement(`a`);o.className=`prb-toast-open`,t.href!==void 0&&t.link!==void 0&&(o.href=t.href,o.textContent=t.link);let s=r.createElement(`button`);for(s.type=`button`,s.className=`prb-toast-close`,s.setAttribute(`aria-label`,`Dismiss: ${t.text}`),s.textContent=`×`,i.append(a,...t.href===void 0?[]:[o],s),e.append(i);e.children.length>3;)e.firstElementChild?.remove();let c=n.setTimeout(()=>i.remove(),On),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),On)};return i.addEventListener(`mouseenter`,l),i.addEventListener(`mouseleave`,u),i.addEventListener(`focusin`,l),i.addEventListener(`focusout`,u),s.addEventListener(`click`,()=>{n.clearTimeout(c),i.remove()}),i}var Nn=`prb-carried-notices`;function Pn(e=document,t=window){let n=[...e.querySelectorAll(`.prb-toast[data-kind="failed"] .prb-toast-text`)].map(e=>e.textContent??``).filter(Boolean);try{n.length>0&&t.sessionStorage.setItem(Nn,JSON.stringify(n))}catch{}t.location.reload()}function Fn(e=document,t=window){let n;try{n=JSON.parse(t.sessionStorage.getItem(Nn)??`null`),t.sessionStorage.removeItem(Nn)}catch{return}if(Array.isArray(n))for(let r of n)typeof r==`string`&&jn(An(e),{kind:`failed`,text:r},t)}function In(e,t,n=window){return Mn(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function Ln(e,t,n=window){return Mn(e,{kind:`more`,text:yn(t),href:`/notifications`,link:`View all`},n)}function Rn(e=document,t=window,n={}){let r=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(r)||r<=0)return;let i=An(e),a=async()=>{try{let a=await t.fetch(`/notifications/recent?after=${r}`);if(Cn(e,!0),a.status===403)return;if(a.ok){let o=await a.json();n.paintUnread&&(wn(e,o.unread),Dn(e,o.running)),typeof o.now==`number`&&(r=o.now);for(let e of[...o.notifications??[]].reverse())In(i,e,t);typeof o.more==`number`&&o.more>0&&Ln(i,o.more,t)}}catch{Cn(e,!1)}t.setTimeout(()=>void a(),kn)};t.setTimeout(()=>void a(),kn)}function zn(e,t){wn(e,t.unread),Dn(e,t.running),typeof t.driving==`boolean`&&Bn(e,t.driving)}function Bn(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var Vn=`prb-server-restarted`;function Hn(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(Vn),t.sessionStorage.removeItem(Vn)}catch{}n!==null&&jn(An(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var Un=2e4,Wn=300;function Gn(e){Hn();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,Kn(e,t,n)})}async function Kn(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){Bn(document,!0);return}if(!a.ok)return void tr(t,n,await er(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=Qn(window.location.href,o.port)}catch{tr(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,$(document,`restarting`),i!==null){if(await Xn(Number(new URL(i).port)))return void window.location.assign(i)}else if(await qn(r)){try{window.sessionStorage.setItem(Vn,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await $n()){$(document,`running`),tr(t,n,`The server did not restart, and is still the one that was running.`);return}$(document,`unreachable`),tr(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function qn(e){let t=Date.now()+Un;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,Wn));try{let t=await fetch(`/health`,{cache:`no-store`});if(!t.ok)continue;let n=await t.json();if(typeof n.startedAt==`number`&&n.startedAt!==e)return!0}catch{}}return!1}var Jn=4,Yn={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function Xn(e,t=()=>Zn(e),n=Yn){let r=n.now()+Un,i=0;for(;n.now()<r;){await n.sleep(Wn);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=Jn))return!0}for(let e=0;e<Jn;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(Wn)}return!0}async function Zn(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function Qn(e,t){if(typeof t!=`number`||!Number.isInteger(t))return null;let n=new URL(e);return t===(n.port===``?n.protocol===`https:`?443:80:Number(n.port))?null:(n.port=String(t),n.href)}async function $n(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function er(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function tr(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{nt as $,ke as A,Ae as B,ge as C,Te as D,Oe as E,We as F,Ue as G,Me as H,we as I,$e as J,Ye as K,He as L,ot as M,st as N,Fe as O,Ze as P,it as Q,ze as R,he as S,Ee as T,je as U,Je as V,I as W,Ve as X,ct as Y,at as Z,Pt as _,k as _t,jn as a,ie as at,dt as b,n as bt,Dn as c,pe as ct,$ as d,ne as dt,et,xn as f,re as ft,Kt as g,A as gt,Gt as h,v as ht,Fn as i,me as it,Be as j,De as k,wn as l,le as lt,_n as m,y as mt,zn as n,ce as nt,Rn as o,ae as ot,bn as p,O as pt,Xe as q,Pn as r,de as rt,An as s,oe as st,Gn as t,tt,Cn as u,P as ut,jt as v,p as vt,Ne as w,L as x,e as xt,lt as y,j as yt,be as z};
|