prreviewbuddy 0.78.1 → 0.80.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 +98 -0
- package/dist/{delete_review-BHOzMQ0_.js → delete_review-BXfGCvQ1.js} +295 -21
- package/dist/main.js +17 -12
- package/dist/server.js +2364 -1305
- package/package.json +1 -1
- package/static/chunk-C3E91izb.js +1 -0
- package/static/chunk-C8d9FvLk.js +1 -0
- package/static/chunk-DnOyRP8m.js +1 -0
- package/static/chunk-Dv0Wowan.js +1 -0
- package/static/chunk-h55PfL_M.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -0
- package/static/settings.js +1 -1
- package/static/shell.css +90 -6
- package/static/sidebar.css +7 -1
- package/static/workspace.js +81 -81
- package/static/chunk-BMAMO0Tf.js +0 -1
- package/static/chunk-D8xJNBjR.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prreviewbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.2",
|
|
4
4
|
"description": "Understand code changes before you approve them. Local branch and pull request reviews with Claude Code, Codex or Gemini CLI.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"homepage": "https://prreviewbuddy.com",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{tt as e}from"./chunk-C8d9FvLk.js";var t=`button:not([disabled])`;function n(e){return e.querySelector(`[data-menu-panel]`)}function r(e){return e.querySelector(`[data-menu-trigger]`)}function i(e){let t=n(e);return t?[...t.querySelectorAll(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)].filter(e=>!e.closest(`[hidden]`)):[]}function a(e){let r=n(e);return r?[...r.querySelectorAll(t)].filter(e=>!e.closest(`[hidden]`)):[]}var o=`data-menu-placement`;function s(e){let t=e.ownerDocument.defaultView,n=0,r=t?.innerHeight??1/0;for(let i=e.parentElement;i&&t;i=i.parentElement){let e=t.getComputedStyle(i).overflowY;if(e===`visible`||e===``)continue;let a=i.getBoundingClientRect();n=Math.max(n,a.top),r=Math.min(r,a.bottom)}return{top:n,bottom:r}}var c=8,l=120;function u(e){let t=n(e),i=r(e);if(!t||!i)return;t.removeAttribute(o),t.style.removeProperty(`max-height`),t.style.removeProperty(`overflow-y`),t.style.removeProperty(`box-sizing`),t.scrollTop=0;let a=t.getBoundingClientRect(),u=i.getBoundingClientRect(),d=s(e),f=Math.max(0,a.top-u.bottom),p=d.bottom-u.bottom-f-c,m=u.top-d.top-f-c,h=a.height,g=h<=p?`below`:h<=m||m>p?`above`:`below`;g===`above`&&t.setAttribute(o,`above`);let _=g===`above`?m:p;h<=_||(t.style.boxSizing=`border-box`,t.style.maxHeight=`${Math.max(Math.floor(_),l)}px`,t.style.overflowY=`auto`)}function d(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey?e.key===`j`?`ArrowDown`:e.key===`k`?`ArrowUp`:e.key:e.key}function f(t,o={}){let s=null,c=null,l=o.within?`${o.within} [data-menu]`:`[data-menu]`,f=e=>e&&(!o.within||e.closest(o.within))?e:null,p=(e,t={})=>{let i=n(e);if(!i||i.hidden)return;i.hidden=!0;let a=r(e);a?.setAttribute(`aria-expanded`,`false`);let l=s===e?c:null;s===e&&(s=null,c=null),o.onClose?.(e),t.returnFocus&&(l??(()=>a?.focus()))()},m=()=>{for(let e of t.querySelectorAll(l))p(e)},h=(e,t,i=null)=>{let l=n(e);l&&(m(),c=i,o.onOpen?.(e),l.hidden=!1,u(e),r(e)?.setAttribute(`aria-expanded`,`true`),s=e,t&&a(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,r=f(t?.closest?.(`[data-menu]`)??null);if(!r){m();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;n(r)?.hidden?h(r,t):p(r);return}s&&s!==r&&p(s)}),t.addEventListener(`keydown`,t=>{if(s&&!s.isConnected&&(s=null),!s)return;let n=s;if(t.key===`Escape`){t.preventDefault(),p(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){if(n.hasAttribute(`data-menu-form`)){let e=i(n),r=e.indexOf(t.target);if(e.length>0){t.preventDefault(),e[(r+(t.shiftKey?-1:1)+e.length)%e.length].focus();return}}p(n);return}if(e(t.target))return;let r=a(n);if(r.length===0)return;let o=r.indexOf(t.target),c=d(t),l=c===`ArrowDown`?r[(o+1)%r.length]:c===`ArrowUp`?r[(o-1+r.length)%r.length]:c===`Home`?r[0]:c===`End`?r[r.length-1]:null;l&&(t.preventDefault(),l.focus(),l.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>h(e,t.focusFirst===!0,t.returnFocus??null),close:p,closeAll:m}}function p(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}export{f as n,p as t};
|
|
@@ -0,0 +1 @@
|
|
|
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}},N=()=>{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})},P=()=>f(t.state)??{v:1,owner:`prb-workspace`,session:T,idx:0,ui:null},F=()=>{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}}))},I=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()};N();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;F();let c=P().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]:P()},D(e))},setCapturer(e){b=e},captureNow:F,scheduleCapture(){C(()=>e.setTimeout(F,250))},leaving(){F(),g(n,s,JSON.stringify({session:T,idx:P().idx,at:e.now()}))},canGoBack:()=>I(-1),canGoForward:()=>I(1),back(){return I(-1)?(F(),t.back(),!0):!1},forward(){return I(1)?(F(),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?N():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-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,t){let n=D(e,t);if(n){if(n.tabIndex<0&&!n.matches(`a[href], button, input, select, textarea, summary`)){n.querySelector(`a[href], button:not([disabled]), input, select, textarea, [tabindex="0"]`)?.focus({preventScroll:!0});return}n.focus({preventScroll:!0})}}function k(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)&&n>=0?n:null}function A(e,t){let n=e?.[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function j(e){try{return e.sessionStorage}catch{return null}}function M(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function ee(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 te(e,t){let n=e.querySelector(`[data-nav-announce]`);!n||!t||(n.textContent=``,e.defaultView?.setTimeout(()=>{n.textContent=t},50))}function ne(e={},t=window,n=document){let r=t.navigation??null,i=_({history:t.history,navigation:r,storage:j(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=M(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||ee(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,focus:C(n.activeElement,n.body)}));let{ui:t}=i.current(),r=k(t,`main`);e&&r!==null&&(e.scrollTop=r),t&&O(n,t.focus)}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 I(e,t){if(!e)return;let n=L(e,t);return n===void 0?{text:N.find(t=>t.id===e.state).name,changed:!1}:{text:n,changed:!0}}var re=[`created`,`updated`,`merged`,`closed`,`reopened`];function ie(e){return ae({at:Number(e.activityAt),kind:e.activityKind,...e.activityMovedAt===void 0?{}:{movedAt:Number(e.activityMovedAt)}})}function ae(e){if(typeof e!=`object`||!e)return;let{at:t,kind:n,movedAt:r}=e;if(!(typeof t!=`number`||!Number.isFinite(t)||!re.includes(n)))return{at:t,kind:n,...typeof r==`number`&&Number.isFinite(r)?{movedAt:r}:{}}}function oe(e,t){return!e||e.state===`waiting`&&se(e,t)?`active`:e.state}function L(e,t){if(!e||!t)return;if(e.state===`waiting`)return se(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 se(e,t){return t!==void 0&&t.kind!==`created`&&t.at>e.at}function ce(e,t,n){return L(t,n)!==void 0||e!==(t?.state??`active`)}function le(e,t,n){return e===`done`&&t?.state===`done`&&L(t,n)!==void 0?`Keep done`:F(e)}var ue=[`pinned`,`active`,`waiting`,`done`],de=[`in-progress`,...ue],fe=e=>N.find(t=>t.id===e).name,pe={"in-progress":{title:`In progress`,key:`i`},pinned:{title:`Pinned`,key:`p`},active:{title:fe(`active`),key:`a`},waiting:{title:fe(`waiting`),key:`w`},done:{title:fe(`done`),key:`d`}};function me(e){return typeof e==`string`&&de.includes(e)}function he(e,t,n,r){return e&&!_e(r)?`pinned`:oe(t,n)}function ge(e,t){let n=e=>ue.indexOf(t(e));return[...e].sort((e,t)=>n(e)-n(t))}function _e(e){return e===`queue`}function ve(e,t,n){return e?I(t,n)?.text:L(t,n)}var ye=[`all`,`queue`,`in-progress`,`complete`],be=[`any`,`open`,`merged`,`closed`],xe=[`q`,`f`,`by`,`pr`,`page`],R={query:``,filter:`all`,author:``,pr:`any`};function Se(e){return e.query.trim()!==``||e.filter!==R.filter||e.author!==R.author||e.pr!==R.pr}function Ce(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 we(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 Te(){return{pinned:15,active:15,waiting:15,done:15}}function Ee(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!xe.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:ye.includes(n)?n:`all`,author:t.get(`by`)??``,pr:be.includes(r)?r:`any`,...a===``?{}:{extra:a}}}function De(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);for(let[n,r]of new URLSearchParams(e.extra??``))xe.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Oe(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 Ae(e,t){return t===``||e===t}function je(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function Me(e){return e?`Unpin review`:`Pin review`}function Ne(e){return e?`Remove from review queue`:`Add to review queue`}function Pe(e,t){let n=t.query.trim().toLowerCase();return Fe(e.filter(e=>(!n||e.searchText.includes(n))&&Oe(e,t.filter)&&Ae(e.author,t.author)&&ke(e,t.pr)),t.filter)}function Fe(e,t){return _e(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function Ie(e){return e===0?`Queue`:`Queue (${e})`}function Le(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function Re(e,t){if(e===0)return`Nothing selected`;let n=`${e} selected`;return t>0?`${n} · ${t} not shown`:n}function ze(e){return e===0?`Select all`:`Select all ${e}`}function Be(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function Ve(e){return`${Be(e)}?`}function He(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var Ue=[`in-progress`,`recent`],We={"in-progress":{title:`In progress`,key:`i`},recent:{title:`Recent runs and issues`,key:`r`}};function Ge(e){return typeof e==`string`&&Ue.includes(e)}var Ke=[{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`}],z=(...e)=>({kind:`chord`,keys:e}),B=(e,t)=>({kind:`key`,key:e,...t?{shift:t}:{}}),qe=e=>({kind:`key`,key:e,primary:!0}),Je=de.map(e=>({id:`reviews.section.${e}`,label:`${pe[e].title} section`,group:`reviews`,page:`reviews`,binding:z(`l`,pe[e].key)})),Ye=Ue.map(e=>({id:`runs.section.${e}`,label:`${We[e].title} section`,group:`runs`,page:`runs`,binding:z(`l`,We[e].key)})),V=[{id:`palette.open`,label:`Command palette`,group:`global`,page:`global`,binding:{kind:`combo`,key:`k`}},{id:`add.open`,label:`Add review`,group:`global`,page:`global`,binding:{kind:`combo`,key:`p`}},{id:`add.pullRequest`,label:`Review pull requests`,group:`global`,page:`global`,binding:z(`p`,`p`)},{id:`add.branch`,label:`Review branch`,group:`global`,page:`global`,binding:z(`p`,`b`)},{id:`navigate.reviews`,label:`Go to Reviews`,group:`global`,page:`global`,binding:z(`r`)},{id:`navigate.runs`,label:`Go to Runs`,group:`global`,page:`global`,binding:z(`e`)},{id:`navigate.notifications`,label:`Go to Activity`,group:`global`,page:`global`,binding:z(`n`)},{id:`help.shortcuts`,label:`Keyboard shortcuts`,group:`global`,page:`global`,binding:z(`?`)},{id:`reviews.search`,label:`Search reviews`,group:`reviews`,page:`reviews`,binding:z(`s`)},{id:`reviews.filters`,label:`Filters`,group:`reviews`,page:`reviews`,binding:z(`f`)},...Je,{id:`reviews.next`,label:`Next review`,group:`reviews`,page:`reviews`,binding:B(`j`)},{id:`reviews.previous`,label:`Previous review`,group:`reviews`,page:`reviews`,binding:B(`k`)},{id:`reviews.open`,label:`Open review`,group:`reviews`,page:`reviews`,binding:B(`Enter`)},{id:`reviews.openInNewTab`,label:`Open review in new tab`,group:`reviews`,page:`reviews`,binding:B(`Enter`,!0)},{id:`reviews.menu`,label:`Open review menu`,group:`reviews`,page:`reviews`,binding:B(` `)},{id:`runs.search`,label:`Search runs`,group:`runs`,page:`runs`,binding:z(`s`)},{id:`runs.next`,label:`Next run`,group:`runs`,page:`runs`,binding:B(`j`)},{id:`runs.previous`,label:`Previous run`,group:`runs`,page:`runs`,binding:B(`k`)},{id:`runs.open`,label:`Open run’s review`,group:`runs`,page:`runs`,binding:B(`Enter`)},{id:`runs.openInNewTab`,label:`Open run’s review in new tab`,group:`runs`,page:`runs`,binding:B(`Enter`,!0)},{id:`runs.menu`,label:`Open run menu`,group:`runs`,page:`runs`,binding:B(` `)},...Ye,{id:`notifications.next`,label:`Next activity`,group:`notifications`,page:`notifications`,binding:B(`j`)},{id:`notifications.previous`,label:`Previous activity`,group:`notifications`,page:`notifications`,binding:B(`k`)},{id:`notifications.open`,label:`Open activity`,group:`notifications`,page:`notifications`,binding:B(`Enter`)},{id:`notifications.openInNewTab`,label:`Open activity in new tab`,group:`notifications`,page:`notifications`,binding:B(`Enter`,!0)},{id:`review.findings.next`,label:`Next card`,group:`findings`,page:`review`,binding:B(`j`)},{id:`review.findings.previous`,label:`Previous card`,group:`findings`,page:`review`,binding:B(`k`)},{id:`review.findings.askBuddy`,label:`Ask Buddy about the card`,group:`findings`,page:`review`,binding:B(` `)},{id:`review.findings.copy`,label:`Copy the card`,group:`findings`,page:`review`,binding:qe(`c`)},{id:`review.findings.choose`,label:`Include in feedback, or leave out`,group:`findings`,page:`review`,binding:B(`Enter`)},{id:`review.feedback.prepare`,label:`Prepare feedback from the chosen cards`,group:`findings`,page:`review`,binding:qe(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:qe(`c`),within:`[data-feedback-dialog]`,hint:`[data-feedback-copy]`,showHint:!0},{id:`review.section.review`,label:`Review overview`,group:`sections`,page:`review`,binding:z(`s`,`r`)},{id:`review.section.kiss`,label:`KISS`,group:`sections`,page:`review`,binding:z(`s`,`k`)},{id:`review.section.issues`,label:`Issues`,group:`sections`,page:`review`,binding:z(`s`,`i`)},{id:`review.section.diagrams`,label:`Diagrams`,group:`sections`,page:`review`,binding:z(`s`,`g`)},{id:`review.section.questions`,label:`Questions`,group:`sections`,page:`review`,binding:z(`s`,`q`)},{id:`review.section.files`,label:`Files`,group:`sections`,page:`review`,binding:z(`s`,`f`)},{id:`review.buddy.open`,label:`Open Buddy AI`,group:`buddy`,page:`review`,binding:z(`b`,`o`)},{id:`review.buddy.prompt`,label:`Choose a prompt`,group:`buddy`,page:`review`,binding:z(`b`,`p`)},{id:`review.mark.reviewed`,label:`Mark reviewed`,group:`actions`,page:`review`,binding:z(`m`,`r`),hint:`[data-review-menu] [data-mark-status]`},{id:`review.mark.waiting`,label:`Mark waiting`,group:`actions`,page:`review`,binding:z(`m`,`w`),hint:`[data-review-menu] [data-lifecycle-set="waiting"]`},{id:`review.mark.done`,label:`Mark done`,group:`actions`,page:`review`,binding:z(`m`,`d`),hint:`[data-review-menu] [data-lifecycle-set="done"]`},{id:`review.checkUpdates`,label:`Check for updates`,group:`actions`,page:`review`,binding:z(`a`,`c`),hint:`[data-review-menu] [data-fresh-check]`},{id:`review.update`,label:`Update review`,group:`actions`,page:`review`,binding:z(`a`,`u`)},{id:`review.queue.toggle`,label:`Queue`,group:`actions`,page:`review`,binding:z(`a`,`q`),hint:`[data-review-menu] [data-queue-action]`},{id:`review.feedback.toggle`,label:`Start or exit Prepare feedback`,group:`actions`,page:`review`,binding:z(`a`,`p`)},{id:`review.delete`,label:`Delete`,group:`actions`,page:`review`,binding:z(`a`,`d`),hint:`[data-review-menu] [data-delete]`},{id:`review.focus.toggle`,label:`Expand or collapse this section`,group:`workspace`,page:`review`,binding:B(`\\`),hint:`[data-focus-toggle]`},{id:`review.leave`,label:`Leave the Buddy AI field, Prepare feedback, or focus mode`,group:`workspace`,page:`review`,binding:B(`Escape`)}],Xe=[{page:`global`,keys:[`p`],label:`Add 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 Ze(e,t=V){return t.filter(t=>t.page===`global`||t.page===e)}function Qe(e,t=V){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:Xe.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 Ze(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 $e(e){return Ze(e).filter(e=>e.binding.kind===`key`)}var et=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function tt(e){return et.has(e.key)}function nt(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 rt=new Set(V.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function it(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=nt(e);return i!==null&&rt.has(i)?i:null}function at(e){return V.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function ot(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?nt(t)===e.key:t.key===e.key}function st(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 ct={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function H(e){return ct[e]??(e.length===1?e.toUpperCase():e)}function U(e,t=`k`){let n=t.toUpperCase();return e?`⌘${n}`:`Ctrl+${n}`}function W(e,t){let n=Xe.find(t=>t.combo!==void 0&&t.keys.every((t,n)=>e[n]===t));return n?[U(t,n.combo),...e.slice(n.keys.length).map(H)]:[U(t),...e.map(H)]}function G(e,t){return e.kind===`combo`?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.kind===`chord`?W(e.keys,t).join(` `):e.primary?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.shift?`Shift+${H(e.key)}`:H(e.key)}function lt(e,t){return e.kind===`chord`?W(e.keys,t):[G(e,t)]}function ut(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 dt(e){return Ke.map(t=>({group:t.id,label:t.label,rows:V.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:lt(t.binding,e),label:t.label}))})).filter(e=>e.rows.length>0)}function K(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function q(e,t){return K(e,`kbd`,`prb-kbd`,t)}function ft(e,t,n){let r=K(e,`dialog`,`prb-palette`);r.setAttribute(`data-command-palette`,``),r.setAttribute(`aria-labelledby`,`prb-palette-title`);let i=K(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=K(e,`div`,`prb-palette-head`),i=K(e,`span`,`prb-palette-trail`);for(let[n,r]of t.entries())n>0&&i.append(K(e,`span`,`prb-palette-sep`,`›`)),i.append(q(e,r));let a=K(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=K(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(K(e,`p`,`prb-palette-group`,t.groupLabels[r.group]??r.group)),o=r.group);let i=K(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(q(e,r.keyLabel),K(e,`span`,`prb-palette-label`,r.namespace?`${r.label}…`:r.label)),r.state&&i.append(K(e,`span`,`prb-palette-state`,r.state)),n.append(i)}if(t.rows.length===0&&n.append(K(e,`p`,`prb-palette-empty`,`Nothing here on this page.`)),i.append(n),t.footer.length>0){let n=K(e,`div`,`prb-palette-footer`);n.append(K(e,`p`,`prb-palette-group`,`Keys on this page`));let r=K(e,`ul`,`prb-palette-keys`);for(let n of t.footer){let t=K(e,`li`);t.append(q(e,n.keys),K(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=K(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 pt(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 mt(e,t){let n=K(e,`div`,`prb-shortcuts-table`);for(let r of t){let t=K(e,`section`,`prb-shortcuts-group`);t.append(K(e,`h3`,`prb-shortcuts-heading`,r.label));let i=K(e,`dl`,`prb-shortcuts-list`);for(let t of r.rows){let n=K(e,`dt`,`prb-shortcuts-keys`);n.dataset.commandId=t.id;for(let r of t.keys)n.append(q(e,r));i.append(n,K(e,`dd`,`prb-shortcuts-label`,t.label))}t.append(i),n.append(t)}return n}function ht(e,t,n,r){let i=K(e,`dialog`,`prb-dialog prb-shortcuts`);i.setAttribute(`data-shortcuts-dialog`,``),i.setAttribute(`aria-labelledby`,`prb-shortcuts-title`);let a=K(e,`div`,`prb-shortcuts-head`),o=K(e,`h2`,void 0,`Keyboard shortcuts`);o.id=`prb-shortcuts-title`;let s=K(e,`button`,`prb-shortcuts-close`,`Close`);s.type=`button`,s.setAttribute(`data-shortcuts-close`,``),a.append(o,s),i.append(a,K(e,`p`,`prb-shortcuts-hint`,n),mt(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 gt=/https?:\/\/[^\s<>()"'`]+/gi,_t=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,vt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,yt=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function bt(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=_t.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=yt.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=vt.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 xt(e){let t=[],n=new Set;for(let r of e.matchAll(gt)){let e=bt(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function St(e){return`${e} isn't supported yet`}function Ct(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var wt={waiting:`Queued`,reviewing:`Analysing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},Tt={waiting:`○`,reviewing:`◐`,"already-reviewed":`✓`,ready:`✓`,failed:`!`},Et=250,Dt=1500,Ot=6e4;async function J(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 kt(e,t,n){let r=null,i=!1,a=o=>{r=e.setTimeout(async()=>{let r=await J(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),a(r.value.finished?Ot:Dt)):r.status===404?n.lost(r.error):a(Dt))},o)};return a(Dt),()=>{i=!0,r!==null&&e.clearTimeout(r)}}function Y(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function At(e,t,n){let r=Y(e,`option`,void 0,t);return r.value=n,r}function X(e,t,n){let r=Y(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function jt(e,t){let n=Y(e,`details`,`prb-addreview-technical`);return n.append(Y(e,`summary`,void 0,`Technical details`),Y(e,`pre`,void 0,t)),n}function Mt(e){let t=Y(e,`div`,`prb-addreview-problemblock`);t.setAttribute(`role`,`alert`);let n=Y(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(jt(e,r.detail))},hide(){n.hidden=!0,t.querySelector(`.prb-addreview-technical`)?.remove()}}}function Nt(e,t,n=`prb-addreview-path`){let r=Y(e,`span`,n),i=t.replace(/\/+$/,``).lastIndexOf(`/`);return i<=0?r.textContent=t:r.append(Y(e,`span`,`prb-addreview-path-parent`,t.slice(0,i+1)),Y(e,`span`,`prb-addreview-path-name`,t.slice(i+1))),r}function Z(e,t){return Y(e,`code`,void 0,t)}var Q=e=>`${e} commit${e===1?``:`s`}`;function Pt(e,t){let n=t.options.find(e=>e.where===`remote`)?.display??`origin/${t.name}`,r=Y(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 Ft(e,t,n){let r=t.baseChoice,i=Y(e,`div`,`prb-addreview-choice`);i.setAttribute(`data-addreview-base-choice`,``);let a=Y(e,`p`,`prb-addreview-choice-title`,`Choose a base branch`);a.id=`prb-addreview-choice-title`;let o=Y(e,`div`,`prb-addreview-choice-options`);o.setAttribute(`role`,`radiogroup`),o.setAttribute(`aria-labelledby`,a.id);for(let t of r.options){let i=Y(e,`label`,`prb-addreview-choice-option`),a=Y(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),Y(e,`span`,`prb-addreview-choice-what`,` ${s}${c}`)),o.append(i)}return i.append(a,Pt(e,r),Y(e,`p`,`prb-addreview-choice-text`,`Select which branch to compare against:`),o),t.detail&&i.append(jt(e,t.detail)),i}function It(e,t){return t&&e.status===`waiting`?`Not started`:t&&e.status===`reviewing`?`Started`:wt[e.status]}function Lt(e,t){let n=e.filter(e=>e.status===`ready`||e.status===`already-reviewed`).length,r=[`reviewing`,`waiting`,`failed`].map(n=>[It({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 Rt(e,t,n,r,i){let a=Y(e,`div`,`prb-addreview-progress`);a.setAttribute(`data-addreview-progress`,``);let o=Y(e,`p`,`prb-addreview-summary`);o.setAttribute(`aria-live`,`polite`);let s=Y(e,`ul`,`prb-addreview-rows`);s.setAttribute(`aria-label`,`Started reviews`);let c=Y(e,`p`,`prb-palette-summary`),l=Mt(e),u=Y(e,`div`,`prb-addreview-footer`),d=Y(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=Y(e,`div`,`prb-addreview-row-head`),o=Y(e,`span`,`prb-addreview-mark`,Tt[t.status]);if(o.setAttribute(`aria-hidden`,`true`),a.append(o,t.reviewId?X(e,t.reviewId,t.label):Y(e,`span`,`prb-addreview-row-label`,t.label)),a.append(Y(e,`span`,`prb-addreview-badge`,It(t,h))),n.append(a),t.reason&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-${t.status===`failed`?`problem`:`muted`}`,t.reason)),t.kept&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-muted`,Ct(t.kept))),t.detail){let r=jt(e,t.detail);r.open=i,n.append(r)}if(t.status===`failed`&&!h){let r=t.stale===!0,i=Y(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=Y(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=Lt(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=kt(t,n,{rows:e=>{f=e,v()},lost:e=>{l.show({error:e}),h=!0,v()}})},b=async(e,r,i)=>{r.disabled=!0;let a=await J(t,`/add-review/batches/${n}/retry`,{key:e,...i?{fresh:!0}:{}});if(!m){if(!a.ok){r.disabled=!1,l.show(a),a.status===404&&(h=!0,p?.(),v());return}l.hide(),f=a.value.rows,v(),y()}};return v(),y(),{element:a,focus:()=>d.focus(),stop:()=>{m=!0,p?.()}}}function zt(e,t,n){let r=Y(e,`details`,`prb-addreview-options`);r.append(Y(e,`summary`,void 0,`Review options`));let i=Y(e,`div`,`prb-addreview-grid`);r.append(i);let a=(t,n)=>{let r=Y(e,`label`,`prb-addreview-key`,t),a=`prb-addreview-${t.toLowerCase()}`;n.id=a,r.htmlFor=a,i.append(r,n)},o=Y(e,`select`,`prb-addreview-control`);o.setAttribute(`data-addreview-agent`,``);let s=Y(e,`input`,`prb-addreview-control`);s.type=`text`,s.placeholder=`Default`,s.spellcheck=!1,s.autocomplete=`off`,s.setAttribute(`data-addreview-model`,``);let c=Y(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=Y(e,`div`,`prb-addreview-modelhelp`),u=Y(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=Y(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=Mt(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:J(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(At(e,`Choose an agent`,``));for(let t of i)o.append(At(e,t.displayName,t.id));return n.kind===`resolved`?(h=n.id,i.some(e=>e.id===n.id)||o.append(At(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 Bt(e){let t=Y(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function Vt(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`pull-requests`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Paste PR links`),s=Y(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=Y(e,`p`,`prb-palette-summary`);c.setAttribute(`aria-live`,`polite`);let l=Y(e,`ul`,`prb-addreview-rows`),u=zt(e,r,!1),d=Mt(e),f=Y(e,`p`,`prb-addreview-error`);f.setAttribute(`data-addreview-limit`,``),f.hidden=!0;let p=Y(e,`div`,`prb-addreview-footer`),m=Bt(e);p.append(m),a.append(o,s,c,f,l,u.element,d.element,p),i.append(Y(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)=>Y(e,`span`,`prb-addreview-status prb-addreview-${n}`,t),O=()=>{l.replaceChildren(...h.map(t=>{let n=Y(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=Y(e,`div`,`prb-addreview-row-head`),a=Y(e,`span`,`prb-addreview-mark`,r?`✓`:`!`);if(a.setAttribute(`aria-hidden`,`true`),i.append(a,Y(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(Ct(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=Y(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(At(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(Nt(e,t.folders[0].display));else if(t.needsFolder){let r=Y(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=xt(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:St(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 J(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()}},Et))},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 J(r,`/add-review/pull-requests`,{items:t,...u.values()});if(x=!1,!S){if(!i.ok){i.field?(d.hide(),u.showProblem(i)):(u.hideProblem(),d.show(i)),T();return}b=Rt(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 Ht(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`branch`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Working folder`),s=Y(e,`div`,`prb-addreview-pathrow`),c=Y(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=Y(e,`button`,`prb-addreview-browse`,`Browse…`);l.type=`button`,l.hidden=!0,s.append(c,l);let u=Y(e,`div`,`prb-addreview-detected`);u.setAttribute(`aria-live`,`polite`);let d=Y(e,`p`,`prb-palette-group`,`Recent`),f=Y(e,`div`,`prb-palette-results prb-addreview-recent`);f.setAttribute(`role`,`group`),f.setAttribute(`aria-label`,`Recent folders`),d.hidden=!0;let p=zt(e,r,!0),m=Mt(e),h=Y(e,`div`,`prb-addreview-footer`),g=Bt(e);g.textContent=`Review branch`,h.append(g),a.append(o,s,u,d,f,p.element,m.element,h),i.append(Y(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(Ft(e,{error:t.error??``,...t.detail?{detail:t.detail}:{},baseChoice:t.baseChoice},E));return}u.append(Y(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`)),t.detail&&u.append(jt(e,t.detail));return}let n=Y(e,`dl`,`prb-addreview-grid prb-addreview-facts`),r=(t,r)=>{let i=Y(e,`dd`);i.append(r),n.append(Y(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=Y(e,`span`,`prb-addreview-kept`,Ct(t.reviewed.kept)),a=Y(e,`span`);a.append(n,Y(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()?J(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 J(r,`/add-review/branch`,{path:i,...o});if(y=!1,!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=Rt(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()},Et)};return c.addEventListener(`input`,()=>{A(),M()}),p.base.addEventListener(`input`,M),l.addEventListener(`click`,async()=>{let e=await J(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())}),J(r,`/add-review/folders`).then(t=>{x||!t.ok||(f.replaceChildren(...t.value.folders.map(t=>{let n=Y(e,`button`,`prb-palette-result`);return n.type=`button`,n.dataset.folderPath=t.path,n.dataset.folderDisplay=t.display,n.append(Y(e,`span`,`prb-palette-result-title`,t.branch?`${t.repo} · ${t.branch}`:t.repo),Nt(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 Ut(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function Wt(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:Wt(t);return`global`}function Gt(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=st(Qe(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=ht(a,dt(o),`${U(o)} opens the command palette and ${U(o,`p`)} adds a review, from anywhere in the workspace. Single keys never act while you are typing.`,()=>r.onSettle?.()),d={"palette.open":{run:()=>w()},"add.open":{run:()=>w([`p`])},"add.pullRequest":{panel:Vt(a)},"add.branch":{panel:Ht(a)},"navigate.reviews":{run:()=>l(`/`)},"navigate.runs":{run:()=>l(`/runs`)},"navigate.notifications":{run:()=>l(`/notifications`)},"help.shortcuts":{run:()=>u.open()}},f=e=>d[e.id]??t[e.id],p=(e,t)=>{let n=f(e);return!!n&&(n.available?.(t)??!0)},m=null,h=`back`,g=[],_=()=>{m?.(),m=null},v=(e=`dismissed`)=>{_(),s.reset(),b.close();let t=c;c=null,t?.isConnected&&t.focus(),e===`dismissed`&&r.onSettle?.()},b=ft(a,e=>T(e),v),x=$e(e).map(e=>({keys:G(e.binding,o),label:e.label})),S=Object.fromEntries(Ke.map(e=>[e.id,e.label])),C=()=>{let e=s.at;if(!e)return;let t=e.children.map(e=>e.kind===`leaf`?{key:e.key,keyLabel:e.key.toUpperCase(),label:f(e.command)?.label?.()??e.command.label,namespace:!1,available:p(e.command),group:e.command.group,state:f(e.command)?.state?.()??null}:{key:e.key,keyLabel:e.key.toUpperCase(),label:e.label,namespace:!0,available:!0,group:Wt(e)}),n=s.path.length===0?Ke.flatMap(e=>t.filter(t=>t.group===e.id)):t;b.show({trail:W(s.path,o),title:e.label,rows:n,groupLabels:s.path.length===0?S:null,footer:x})};function w(e=[]){if(b.isOpen())return v();r.onOpen?.();let t=a.activeElement;c=t instanceof HTMLElement&&t!==a.body?t:null,s.start(e),C()}function T(e){let t=s.press(e);if(t.kind===`descend`)return C();let n=t.kind===`run`&&p(t.command)?f(t.command):null;if(n?.panel&&t.kind===`run`)return E(t.command,n.panel);v(n?`running`:`dismissed`),n?.run?.()}function E(e,t){g=e.binding.kind===`chord`?e.binding.keys.slice(0,-1):[],h=t.escape??`back`;let n=e.binding.kind===`chord`?W(e.binding.keys,o):[U(o)];m=b.showPanel(n,t,()=>v(`running`))}function D(){_(),s.start();for(let e of g)s.press(e);C()}let O=$e(e);return i.addEventListener(`keydown`,e=>{if(b.isOpen()){if(tt(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(m)return e.key===`Escape`&&!e.isComposing?(t(),h===`close`?v():D()):it(e,o)?(t(),v()):void 0;if(e.key===`Escape`||it(e,o))return t(),v();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),pt(b.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(),T(nt(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=it(e,o),r=t?at(t):void 0;if(r){if(a.querySelector(`dialog[open]`))return;e.preventDefault(),e.stopPropagation(),f(r)?.run?.(e);return}for(let t of O){if(!ot(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)||Ut(a)))continue;if(p(t,e)){e.preventDefault(),f(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{b.isOpen()&&v(`unloading`)}),Kt(a,e,o),{isOpen:()=>b.isOpen()||u.isOpen(),close:()=>v()}}function Kt(e,t,n){for(let r of Ze(t)){let t=r.hint;if(t)for(let i of e.querySelectorAll(t))if(r.binding.kind===`chord`)i.dataset.shortcutHint=G(r.binding,n);else{let e=ut(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=G(r.binding,n),i.append(e)}}}}function qt(e){return`${e} more`}function Jt(e){return e===0?`Nothing unread`:`${e} unread`}function Yt(e){return e===`moved-again`?`replaced by a later move`:`replaced when the review caught up`}function Xt(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=Xt(t))}function Zt(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||$(e,t?`running`:`unreachable`)}function Qt(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:Jt(t)),n.hidden=t===0}var $t=6e3,en=5e3;function tn(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 nn(e,t,n=window){return rn(e,{kind:t.kind,text:t.text},n)}function rn(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(),$t),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),$t)};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}function an(e,t,n=window){return rn(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function on(e,t,n=window){return rn(e,{kind:`more`,text:qt(t),href:`/notifications`,link:`View all`},n)}function sn(e=document,t=window,n={}){let r=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(r)||r<=0)return;let i=tn(e),a=async()=>{try{let a=await t.fetch(`/notifications/recent?after=${r}`);if(Zt(e,!0),a.status===403)return;if(a.ok){let o=await a.json();n.paintUnread&&Qt(e,o.unread),typeof o.now==`number`&&(r=o.now);for(let e of[...o.notifications??[]].reverse())an(i,e,t);typeof o.more==`number`&&o.more>0&&on(i,o.more,t)}}catch{Zt(e,!1)}t.setTimeout(()=>void a(),en)};t.setTimeout(()=>void a(),en)}function cn(e,t){Qt(e,t.unread),typeof t.driving==`boolean`&&ln(e,t.driving)}function ln(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var un=`prb-server-restarted`;function dn(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(un),t.sessionStorage.removeItem(un)}catch{}n!==null&&nn(tn(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var fn=2e4,pn=300;function mn(e){dn();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,hn(e,t,n)})}async function hn(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){ln(document,!0);return}if(!a.ok)return void wn(t,n,await Cn(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=xn(window.location.href,o.port)}catch{wn(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,$(document,`restarting`),i!==null){if(await yn(Number(new URL(i).port)))return void window.location.assign(i)}else if(await gn(r)){try{window.sessionStorage.setItem(un,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await Sn()){$(document,`running`),wn(t,n,`The server did not restart, and is still the one that was running.`);return}$(document,`unreachable`),wn(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function gn(e){let t=Date.now()+fn;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,pn));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 _n=4,vn={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function yn(e,t=()=>bn(e),n=vn){let r=n.now()+fn,i=0;for(;n.now()<r;){await n.sleep(pn);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=_n))return!0}for(let e=0;e<_n;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(pn)}return!0}async function bn(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function xn(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 Sn(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function Cn(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function wn(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{p as $,je as A,ie as B,Pe as C,Te as D,he as E,He as F,P as G,I as H,we as I,C as J,te as K,ze as L,Me as M,Ne as N,Se as O,Ie as P,O as Q,Re as R,Ve as S,ge as T,ce as U,le as V,ae as W,v as X,y as Y,k as Z,ue as _,tn as a,Ce as b,$ as c,Gt as d,A as et,mt as f,R as g,Ge as h,sn as i,Ee as j,me as k,Yt as l,Ue as m,cn as n,e as nt,Qt as o,dt as p,ne as q,nn as r,Zt as s,mn as t,n as tt,Jt as u,de as v,De as w,Be as x,ve as y,Le as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as e}from"./chunk-C8d9FvLk.js";function t(e=document){for(let t of e.querySelectorAll(`.prb-index-status`))t.addEventListener(`click`,e=>{let n=t.querySelector(`select`);if(!(!n||e.target instanceof Node&&n.contains(e.target))){e.preventDefault(),n.focus();try{n.showPicker()}catch{}}})}function n(t,n){r(t,t=>e(t.dataset.section)?t.dataset.section:void 0,n)}function r(e,t,n){let r=Promise.resolve();for(let i of e){let e=t(i);if(e===void 0)continue;let a=i.open;i.addEventListener(`toggle`,()=>{if(i.open===a)return;a=i.open;let t=!i.open;r=r.then(()=>n(e,t)).catch(()=>{})})}}export{n,t as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}export{e as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function e(e,t){try{await navigator.clipboard.writeText(t);let n=e.textContent;e.textContent=`Copied`,window.setTimeout(()=>{e.textContent=n},1200)}catch{let n=document.createElement(`input`);n.type=`text`,n.readOnly=!0,n.value=t,n.className=`prb-menu-id`,n.setAttribute(`data-id-field`,``),e.after(n),n.select()}}var t=`Fetch selected`;function n(e){return`${e} ${e===1?`repository`:`repositories`}`}function r(e){return`Fetching ${n(e)}…`}function i(e){return e.fetched===0?`Could not fetch ${n(e.repositories)}`:e.fetched===e.repositories?`Fetched ${n(e.repositories)}`:`Fetched ${e.fetched} of ${n(e.repositories)}`}function a(e,t){let n=new Set,r=new Set;for(let i of e)for(let e of i.lineage){let i=t[e];i!==void 0&&(n.add(e),r.add(i))}return{ids:[...n],repositories:r.size}}function o(e,t){return a(t,e).repositories>0}export{r as a,i,o as n,e as o,a as r,t};
|
package/static/help.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Y as e,d as t,f as n,nt as r,p as i,q as a,t as o}from"./chunk-C8d9FvLk.js";a(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(n(document,i(e(navigator)))),o(`/restart`),r(window,()=>window.location.reload());
|
package/static/notifications.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as e,l as t,nt as n,o as r,q as i,t as a,u as o}from"./chunk-C8d9FvLk.js";import{t as s}from"./chunk-C8kkSv38.js";var c=5e3;function l(e){let t=[],n=[],r=0;for(let i of e){let e=encodeURIComponent(i).length+1;n.length>0&&r+e>4e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}var u=`Unread. `;function d(e,n){if(e.dataset.rowState===n||n===`unread`)return;e.dataset.rowState=n,e.dataset.read=`true`;let r=e.querySelector(`.prb-notification-open`),i=r?.getAttribute(`aria-label`)??``;if(i.startsWith(u)&&(i=i.slice(8)),n===`moved-again`||n===`caught-up`){let r=t(n);i=`${i}, ${r}`;let a=e.querySelector(`.prb-notification-meta`);if(a&&!a.querySelector(`[data-notification-replaced]`)){let t=e.ownerDocument.createElement(`span`);t.className=`prb-notification-replaced`,t.dataset.notificationReplaced=``,t.textContent=` · ${r}`,a.append(t)}}r?.setAttribute(`aria-label`,i)}function f(e,t){let n=e.querySelector(`[data-notifications-count]`);n&&(n.textContent=o(t));let i=e.querySelector(`[data-notifications-read-all]`);i&&(i.disabled=t===0),r(e,t)}function p(e,t){let n=Number(e.dataset.createdAt),r=Number(t.dataset.createdAt);return n>r||n===r&&(e.dataset.notificationId??``)<(t.dataset.notificationId??``)}function m(e,t){let n=[...e.querySelectorAll(`[data-notification-id]`)].find(e=>p(t,e));n?n.before(t):e.append(t)}function h(e,t){let n=new Set([...e.querySelectorAll(`[data-notification-id]`)].map(e=>e.dataset.notificationId));return Object.keys(t).filter(e=>!n.has(e))}function g(e,t,n=()=>{}){let r=Array.isArray(t.rows)?t.rows.filter(e=>typeof e==`string`):[],i=e.querySelector(`[data-notifications]`);if(r.length>0&&!i)return!1;let a=!1;if(i){for(let t of r){let n=e.createElement(`template`);n.innerHTML=t.trim();let r=n.content.firstElementChild,o=r?.dataset.notificationId;!r||!o||[...i.querySelectorAll(`[data-notification-id]`)].some(e=>e.dataset.notificationId===o)||(m(i,r),a=!0)}a&&n()}let o=t.states&&typeof t.states==`object`?t.states:{};for(let t of e.querySelectorAll(`[data-notification-id]`)){let e=o[t.dataset.notificationId??``];e&&d(t,e)}return typeof t.unread==`number`&&f(e,t.unread),!0}function _(e=document,t=window,n=e=>t.fetch(`/notifications/live${e.length>0?`?ids=${e.map(encodeURIComponent).join(`,`)}`:``}`),r=()=>{}){if(!e.querySelector(`[data-notifications], [data-notifications-empty]`))return;let i,a=!1,o=()=>e.visibilityState===`visible`,s=async e=>{let t=await n(e);return t.ok?await t.json():null},u=async()=>{if(!(a||!o())){a=!0;try{let n=await s([]);if(n){if(!g(e,{...n,rows:[]},r)){t.location.reload();return}let i=n.states?h(e,n.states):[];for(let n of l(i)){let i=null;try{i=await s(n)}catch{continue}if(i&&!g(e,i,r)){t.location.reload();return}}}}catch{}finally{a=!1}t.clearTimeout(i),i=t.setTimeout(()=>void u(),c)}};e.addEventListener(`visibilitychange`,()=>{o()&&(t.clearTimeout(i),u())}),i=t.setTimeout(()=>void u(),c)}function v(e,t,n){let r=[...e.querySelectorAll(`[data-notification-id]`)];r.forEach((e,t)=>{e.hidden=t>=n}),t&&(t.hidden=r.length<=n)}function y(e){let t=e.querySelector(`[data-notifications-more]`),n=15;return v(e,t,n),t?.addEventListener(`click`,()=>{n+=15,v(e,t,n)}),{refresh:()=>v(e,e.querySelector(`[data-notifications-more]`),n)}}i(),a(`/restart`);var b=y(document),x=s({doc:document,item:`[data-notification-id]`,link:`a.prb-notification-open`,walk:()=>[...document.querySelectorAll(`[data-notification-id]:not([hidden])`)].filter(e=>e.querySelector(`a.prb-notification-open`)),background:()=>document.querySelector(`.prb-shell > main`)});e(`notifications`,{"notifications.next":{run:()=>x.move(1)},"notifications.previous":{run:()=>x.move(-1)},"notifications.open":{available:()=>x.enterOpens(),run:()=>x.open()},"notifications.openInNewTab":{available:()=>x.enterOpens(),run:()=>x.openInNewTab()}});var S=document.querySelector(`[data-notifications-read-all]`);async function C(){try{let e=await fetch(`/notifications`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`read-all`})});if(!e.ok)return null;let t=await e.json();return typeof t.unread==`number`?t.unread:null}catch{return null}}S?.addEventListener(`click`,()=>{S.disabled=!0,C().then(e=>{if(e===null){S.disabled=!1;return}document.querySelectorAll(`[data-notification-id][data-row-state="unread"]`).forEach(e=>d(e,`seen`)),f(document,e)})}),_(document,window,void 0,()=>b.refresh()),n(window,()=>window.location.reload());
|
package/static/reviews.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as ee,I as te,J as ne,L as re,M as ie,N as ae,O as oe,P as se,R as ce,S as le,T as ue,W as de,Y as fe,Z as pe,_ as me,a as he,b as ge,d as _e,g as ve,h as c,i as ye,j as be,m as l,n as xe,r as Se,s as Ce,t as we,v as Te,w as u,x as Ee,y as De}from"./chunk-BMAMO0Tf.js";import{a as Oe,c as ke,i as Ae,n as je,o as Me,r as Ne,s as Pe,t as Fe}from"./chunk-D8xJNBjR.js";import{t as Ie}from"./chunk-C8kkSv38.js";function Le(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Re(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;ze(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return ze(e,!r);n(r)}function ze(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Be(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Ve(e,t,n,r){return{limits:n,expanded:t.filter(e=>e.querySelector(`[data-history-list]:not([hidden])`)).map(e=>e.dataset.id??``).filter(e=>e!==``),main:r?.scrollTop??0,focus:s(e.activeElement,e.body)}}function He(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of c){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Ue(e,t,n){if(!t)return;n.reveal(He(t,n.limits));let r=new Set(pe(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Be(t,!0)}let i=ne(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),fe(e,t.focus)}function We(e,t){let n=Promise.resolve();for(let r of e){let e=r.dataset.section;if(!a(e))continue;let i=r.open;r.addEventListener(`toggle`,()=>{if(r.open===i)return;i=r.open;let a=!r.open;n=n.then(()=>t(e,a)).catch(()=>{})})}}var d=de({ownsRestore:!0});we(`/restart`);var f=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),Ge=Object.fromEntries(c.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),p=document.querySelector(`.prb-index`);function Ke(e){return{id:e.dataset.id??``,queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var m=document.querySelector(`[data-search]`),h=document.querySelector(`[data-status-filter]`),g=document.querySelector(`[data-author-filter]`),_=document.querySelector(`[data-pr-filter]`),qe=document.querySelector(`[data-no-matches]`),v=document.querySelector(`[data-count]`),y=document.querySelector(`[data-clear-filters]`),b=u();function Je(e){return{stored:ee({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:re(e.dataset)??{at:0,kind:`created`}}}function Ye(e){return e.dataset.pinned===`true`}function x(e){let{stored:t,activity:n}=Je(e);return r(Ye(e),t,n,D.filter)}var S=document.querySelector(`[data-bulk]`),Xe=document.querySelector(`[data-bulk-count]`),Ze=document.querySelector(`[data-bulk-delete]`),Qe=document.querySelector(`[data-bulk-question]`),C=document.querySelector(`[data-bulk-confirm]`),w=document.querySelector(`[data-bulk-actions]`),T=document.querySelector(`[data-bulk-error]`),E=document.querySelector(`[data-bulk-select-all]`),D=oe(window.location.hash),O=new Set,k=!1,A=document.querySelector(`[data-bulk-fetch]`),j={},M=[],N=!1;function P(){let e=D.query.trim().toLowerCase();D.author!==``&&![...g?.options??[]].some(e=>e.value===D.author)&&(D.author=``);let t=le(ge(f.map(e=>({...Ke(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...D,query:e}).map(e=>e.card),x);M=t;let n=ae(t,x,b),r=new Set(c.flatMap(e=>n[e].shown));for(let e of f)e.hidden=!r.has(e);for(let e of c){let t=Ge[e];t&&Le(t,n[e].shown);let r=document.querySelector(`[data-load-more="${e}"]`);r&&(r.hidden=n[e].total<=n[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=n[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(n[e].total))}if(m&&m.value!==D.query&&(m.value=D.query),g&&(g.value=D.author,D.author===``?delete g.dataset.active:g.dataset.active=``),_||(D.pr=`any`),_&&(_.value=D.pr,D.pr===`any`?delete _.dataset.active:_.dataset.active=``),h&&(h.value=D.filter,D.filter===`all`?delete h.dataset.active:h.dataset.active=``),y&&(y.hidden=!ue(D)),v){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);v.textContent=me(e(t),t.length,ue(D)?e(f):void 0)}qe&&(qe.hidden=t.length>0||f.length===0),it(t)}var $e=300,F=null;function I(){F!==null&&window.clearTimeout(F),F=null,d.replace(Ee(D),{})}function L(e,t){if(D={...D,...e},b=u(),P(),t===`now`)return I();F!==null&&window.clearTimeout(F),F=window.setTimeout(I,$e)}window.addEventListener(`pagehide`,()=>{F!==null&&I()}),document.addEventListener(`click`,e=>{F!==null&&e.target?.closest?.(`a[href]`)&&I()},!0),m?.addEventListener(`input`,()=>L({query:m.value},`settled`)),m?.addEventListener(`keydown`,e=>{e.key===`Escape`&&m.value!==``&&(e.preventDefault(),L({query:``},`now`))}),h?.addEventListener(`change`,()=>{L({filter:h.value},`now`)}),g?.addEventListener(`change`,()=>{L({author:g.value},`now`)}),_?.addEventListener(`change`,()=>{L({pr:_.value},`now`)}),y?.addEventListener(`click`,()=>{L({query:l.query,filter:l.filter,author:l.author,pr:l.pr},`now`),m?.focus()});for(let e of document.querySelectorAll(`.prb-index-status`))e.addEventListener(`click`,t=>{let n=e.querySelector(`select`);if(!(!n||t.target instanceof Node&&n.contains(t.target))){t.preventDefault(),n.focus();try{n.showPicker()}catch{}}});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!c.includes(t)||(b={...b,[t]:b[t]+15},P())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{D=oe(window.location.hash),b=u(),P(),tt()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Re(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),Y(n),P())})});async function et(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}R(n),P()}function R(e){let n=new Map(e.map((e,t)=>[e,t]));for(let e of f){let t=n.get(e.dataset.id??``);t===void 0?delete e.dataset.queue:e.dataset.queue=String(t),t!==void 0&&e.dataset.lifecycle!==`active`&&(e.dataset.lifecycle=`active`,delete e.dataset.lifecycleAt,Y(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let r=n.has(e.dataset.queueId??``);e.dataset.queueAction=r?`remove`:`add`,e.textContent=t(r)}let r=document.querySelector(`[data-queue-option]`);r&&(r.textContent=be(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&Be(t,n.hidden!==!1)});var z=document.querySelector(`.prb-shell > main`);function tt(){Ue(document,d.current().ui,{cards:f,pane:z,limits:b,reveal:e=>{b=e,P()}})}d.setCapturer(()=>Ve(document,f,b,z)),P(),tt();var B=Pe(document,{onOpen:V,onClose:V});function V(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(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return;let r=t.closest(`[data-copy-id]`);if(r?.dataset.copyId){e.preventDefault(),e.stopPropagation(),ke(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),B.closeAll();let t=i.closest(`[data-card]`);t&&Et([t]);return}let a=t.closest(`[data-mark-status]`);if(a?.dataset.markId){e.preventDefault(),e.stopPropagation(),B.closeAll(),vt(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),B.closeAll(),yt([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),B.closeAll(),et(s.dataset.queueId,s.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),V(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),nt(n);return}e.preventDefault(),e.stopPropagation()});async function nt(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();rt(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{rt(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function rt(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function H(e){k=e,e||O.clear(),p&&(e?p.dataset.selecting=``:delete p.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);U(),P()}function U(){C&&(C.hidden=!0),w&&(w.hidden=!1),T&&(T.hidden=!0,T.textContent=``)}function it(e){for(let e of f){let t=O.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!S||(S.hidden=!k,!k))return;let t=new Set(e.filter(at).map(e=>e.dataset.id)),n=[...O].filter(e=>!t.has(e)).length;Xe&&(Xe.textContent=o(O.size,n)),E&&(E.textContent=se(e.length),E.disabled=e.every(e=>O.has(e.dataset.id??``))),Ze&&(Ze.textContent=Te(ht()));for(let e of S.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=O.size===0;A&&(A.hidden=!je(j,Z(K())))}function at(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>it(M));We(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{H(!k)}),E?.addEventListener(`click`,()=>{for(let e of M)e.dataset.id&&O.add(e.dataset.id);U(),P()});function W(e){O.has(e)?O.delete(e):O.add(e),U(),P()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&W(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!k)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),W(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!k||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),W(t.dataset.id))});var G=Ie({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>M.filter(at),enterAllowed:()=>!k,background:()=>z,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function ot(){return G.holdsKeys()?G.current()?.querySelector(`:scope > [data-menu]`)??null:null}var st=8;function ct(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),F!==null&&I(),d.leaving(),lt=!0,window.location.assign(t.href))}var lt=!1,ut={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=m?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=m?.value??``;let r=document.createElement(`p`);r.className=`prb-palette-summary`,r.setAttribute(`aria-live`,`polite`);let i=document.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Matching reviews`);let a=()=>{let e=M.slice(0,st);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=M.length===0?`No reviews match.`:M.length>e.length?`The first ${e.length} of ${v?.textContent??M.length}`:v?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),ct(n))};n.addEventListener(`input`,()=>{m&&(m.value=n.value,m.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},dt={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=v?.textContent??``},r=[h,g,_].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function ft(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var pt=Object.fromEntries(c.map(e=>[`reviews.section.${e}`,ft(e)])),mt=_e(`reviews`,{...pt,"reviews.search":{available:()=>m!==null,panel:ut},"reviews.filters":{available:()=>h!==null,panel:dt},"reviews.next":{run:()=>G.move(1)},"reviews.previous":{run:()=>G.move(-1)},"reviews.open":{available:()=>G.enterOpens(),run:()=>G.open()},"reviews.openInNewTab":{available:()=>G.enterOpens(),run:()=>G.openInNewTab()},"reviews.menu":{available:()=>ot()!==null,run:()=>{let e=ot();e&&B.open(e,{focusFirst:!0,returnFocus:()=>G.refocus()})}}},{onOpen:()=>B.closeAll(),onSettle:()=>kt()});function K(){return le(f.filter(e=>O.has(e.dataset.id??``)),x)}function ht(){return K().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function q(e){T&&(T.textContent=e,T.hidden=!1)}function J(e){for(let t of S?.querySelectorAll(`button`)??[])t.disabled=e}async function gt(e){let t=[...O];if(t.length!==0){J(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return J(!1),q(`That could not be saved. The workspace server refused it.`)}catch{return J(!1),q(`The workspace server did not answer. It may have stopped.`)}_t(K(),e),J(!1),H(!1)}}function _t(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=te(n));let a=t.querySelector(`[data-mark-status]`);a&&(a.dataset.markStatus=r,a.textContent=i(r))}}async function vt(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}_t(f.filter(t=>t.dataset.id===e),t),P()}async function yt(e,t){let n;try{let r=await fetch(`/lifecycle`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,state:t})});n=r.ok?await r.json().catch(()=>null):null}catch{n=null}if(!n)return!1;let r=new Set(e);for(let e of f)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),Y(e));return R(n.queue),P(),!0}function Y(e){let{stored:t,activity:r}=Je(e),i=e.querySelector(`[data-lifecycle-chip]`);if(i){let n=ve(Ye(e),t,r);i.textContent=n??``,i.hidden=n===void 0}for(let i of e.querySelectorAll(`[data-lifecycle-set]`)){let e=i.dataset.lifecycleSet;i.hidden=!n(e,t,r),i.textContent=ce(e,t,r)}}async function bt(e){let t=[...O];if(t.length===0)return;J(!0);let n=await yt(t,e);if(J(!1),!n)return q(`That could not be saved. The workspace server refused it or did not answer.`);H(!1)}async function xt(){let e=[...O];if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return J(!1),U(),q(`Nothing was deleted. The workspace server refused it.`)}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of K())r.has(e.dataset.id??``)||e.remove();f=f.filter(e=>e.isConnected),O.clear();for(let e of r)O.add(e);if(J(!1),U(),n.length===0)return H(!1);P(),q([...new Set(n.map(e=>e.error))].join(` `))}async function St(){let e=K().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return J(!1),U(),q(`Nothing was added. The workspace server refused it.`);R(t.queue);let n=t.refused??[];O.clear();for(let e of n)O.add(e.id);if(J(!1),U(),n.length===0)return H(!1);P(),q([...new Set(n.map(e=>e.error))].join(` `))}S?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void St();let n=t.closest(`[data-bulk-mark]`);if(n)return void gt(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void bt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Qe&&(Qe.textContent=De(ht())),w&&(w.hidden=!0),C&&(C.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void xt();if(t.closest(`[data-bulk-cancel-delete]`))return U();if(t.closest(`[data-bulk-cancel]`))return H(!1)}),e(window,()=>window.location.reload());var X=`prb-fetch-summary`;function Z(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function Ct(e){return Ne(Z(e),j)}function wt(){for(let e of f){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!je(j,Z([e])))}}async function Tt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;j=(await e.json()).targets??{}}catch{return}wt(),P()}async function Et(e,t){let n=Ct(e);if(N||n.repositories===0)return;N=!0;let r=[A,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Oe(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}N=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Fe),P();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:Ae(a)};if(a.moved>0||$){try{window.sessionStorage.setItem(X,JSON.stringify(o))}catch{}if(!Ot())return void window.location.reload();$=!0}Se(he(),o)}try{let e=window.sessionStorage.getItem(X);if(e){window.sessionStorage.removeItem(X);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&Se(he(),{kind:t.kind,text:t.text})}}catch{}A?.addEventListener(`click`,()=>void Et(K(),A)),Tt();var Dt=document.body.dataset.indexRevision??``,Q=document.body.dataset.live===`true`?Date.now():0,$=!1;function Ot(){return O.size>0||document.activeElement===m||N||mt.isOpen()||lt}function kt(){$&&!Ot()&&window.location.reload()}async function At(){try{let e=await fetch(`/revision`);if(e.ok){Ce(document,!0);let t=await e.json();xe(document,t),t.live&&Q===0&&(Q=Date.now()),t.live||(Q=0);let n=ie(Dt,t.revision??``,Ot());if(n===`reload`)return void window.location.reload();n===`hold`&&($=!0)}}catch{Ce(document,!1)}window.setTimeout(()=>void At(),Me(Q===0?2**53-1:Date.now()-Q))}At(),m?.addEventListener(`blur`,kt),document.addEventListener(`click`,()=>window.setTimeout(kt,0)),ye();
|
|
1
|
+
import{A as e,B as t,C as n,D as r,E as i,F as a,G as o,I as s,J as ee,L as te,N as ne,O as re,P as ie,Q as ae,R as oe,S as se,T as ce,U as le,V as ue,Z as de,_ as c,a as fe,b as pe,d as me,et as he,g as l,i as ge,j as _e,n as ve,nt as ye,q as be,r as xe,s as Se,t as Ce,v as we,w as Te,x as Ee,y as De,z as Oe}from"./chunk-C8d9FvLk.js";import{a as ke,i as Ae,n as je,o as Me,r as Ne,t as Pe}from"./chunk-h55PfL_M.js";import{n as Fe,t as Ie}from"./chunk-C3E91izb.js";import{t as Le}from"./chunk-C8kkSv38.js";import{n as Re,r as ze}from"./chunk-DnOyRP8m.js";function Be(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Ve(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;He(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return He(e,!r);n(r)}function He(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Ue(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function We(e,t,n,r){return{limits:n,expanded:t.filter(e=>e.querySelector(`[data-history-list]:not([hidden])`)).map(e=>e.dataset.id??``).filter(e=>e!==``),main:r?.scrollTop??0,focus:ee(e.activeElement,e.body)}}function Ge(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of c){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Ke(e,t,n){if(!t)return;n.reveal(Ge(t,n.limits));let r=new Set(he(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Ue(t,!0)}let i=de(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),ae(e,t.focus)}var u=be({ownsRestore:!0});Ce(`/restart`);var d=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),qe=[...document.querySelectorAll(`[data-operation]`)],f=document.querySelector(`[data-section="in-progress"]`),Je=e=>e.dataset.inProgressOnly!==void 0,Ye=Object.fromEntries(c.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),p=document.querySelector(`.prb-index`);function Xe(e){return{id:e.dataset.id??``,queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var m=document.querySelector(`[data-search]`),h=document.querySelector(`[data-status-filter]`),g=document.querySelector(`[data-author-filter]`),_=document.querySelector(`[data-pr-filter]`),Ze=document.querySelector(`[data-no-matches]`),v=document.querySelector(`[data-count]`),y=document.querySelector(`[data-clear-filters]`),b=r();function Qe(e){return{stored:o({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:t(e.dataset)??{at:0,kind:`created`}}}function $e(e){return e.dataset.pinned===`true`}function x(e){let{stored:t,activity:n}=Qe(e);return i($e(e),t,n,D.filter)}var S=document.querySelector(`[data-bulk]`),et=document.querySelector(`[data-bulk-count]`),tt=document.querySelector(`[data-bulk-delete]`),nt=document.querySelector(`[data-bulk-question]`),C=document.querySelector(`[data-bulk-confirm]`),w=document.querySelector(`[data-bulk-actions]`),T=document.querySelector(`[data-bulk-error]`),E=document.querySelector(`[data-bulk-select-all]`),D=_e(window.location.hash),O=new Set,k=!1,A=document.querySelector(`[data-bulk-fetch]`),j={},M=[],N=!1;function P(){let e=D.query.trim().toLowerCase();D.author!==``&&![...g?.options??[]].some(e=>e.value===D.author)&&(D.author=``);let t=ce(n(d.map(e=>({...Xe(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...D,query:e}).map(e=>e.card),x),r=t.filter(e=>!Je(e));M=r;let i=new Set(n(qe.map(e=>({...Xe(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...D,query:e}).map(e=>e.entry));for(let e of qe)e.hidden=!i.has(e);if(f){f.hidden=i.size===0;let e=f.querySelector(`[data-section-count]`);e&&(e.textContent=String(i.size))}let a=s(r,x,b),o=new Set(c.flatMap(e=>a[e].shown));for(let e of d)e.hidden=!o.has(e);for(let e of c){let t=Ye[e];t&&Be(t,a[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=a[e].total<=a[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=a[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(a[e].total))}if(m&&m.value!==D.query&&(m.value=D.query),g&&(g.value=D.author,D.author===``?delete g.dataset.active:g.dataset.active=``),_||(D.pr=`any`),_&&(_.value=D.pr,D.pr===`any`?delete _.dataset.active:_.dataset.active=``),h&&(h.value=D.filter,D.filter===`all`?delete h.dataset.active:h.dataset.active=``),y&&(y.hidden=!re(D)),v){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);v.textContent=pe(e(t),t.length,re(D)?e(d):void 0)}Ze&&(Ze.hidden=t.length>0||i.size>0||d.length===0),ct(r)}var rt=300,F=null;function I(){F!==null&&window.clearTimeout(F),F=null,u.replace(Te(D),{})}function L(e,t){if(D={...D,...e},b=r(),P(),t===`now`)return I();F!==null&&window.clearTimeout(F),F=window.setTimeout(I,rt)}window.addEventListener(`pagehide`,()=>{F!==null&&I()}),document.addEventListener(`click`,e=>{F!==null&&e.target?.closest?.(`a[href]`)&&I()},!0),m?.addEventListener(`input`,()=>L({query:m.value},`settled`)),m?.addEventListener(`keydown`,e=>{e.key===`Escape`&&m.value!==``&&(e.preventDefault(),L({query:``},`now`))}),h?.addEventListener(`change`,()=>{L({filter:h.value},`now`)}),g?.addEventListener(`change`,()=>{L({author:g.value},`now`)}),_?.addEventListener(`change`,()=>{L({pr:_.value},`now`)}),y?.addEventListener(`click`,()=>{L({query:l.query,filter:l.filter,author:l.author,pr:l.pr},`now`),m?.focus()}),ze(),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!c.includes(t)||(b={...b,[t]:b[t]+15},P())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{D=_e(window.location.hash),b=r(),P(),at()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Ve(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),Y(n),P())})});async function it(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}R(n),P()}function R(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of d){let n=t.get(e.dataset.id??``);n===void 0?delete e.dataset.queue:e.dataset.queue=String(n),n!==void 0&&e.dataset.lifecycle!==`active`&&(e.dataset.lifecycle=`active`,delete e.dataset.lifecycleAt,Y(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let n=t.has(e.dataset.queueId??``);e.dataset.queueAction=n?`remove`:`add`,e.textContent=ne(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ie(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&Ue(t,n.hidden!==!1)});var z=document.querySelector(`.prb-shell > main`);function at(){Ke(document,u.current().ui,{cards:d,pane:z,limits:b,reveal:e=>{b=e,P()}})}u.setCapturer(()=>We(document,d,b,z)),P(),at();var B=Fe(document,{onOpen:V,onClose:V});function V(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(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return;let r=t.closest(`[data-copy-id]`);if(r?.dataset.copyId){e.preventDefault(),e.stopPropagation(),Me(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),B.closeAll();let t=i.closest(`[data-card]`);t&&jt([t]);return}let a=t.closest(`[data-mark-status]`);if(a?.dataset.markId){e.preventDefault(),e.stopPropagation(),B.closeAll(),St(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),B.closeAll(),Ct([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),B.closeAll(),it(s.dataset.queueId,s.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),V(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),ot(n);return}e.preventDefault(),e.stopPropagation()});async function ot(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();st(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{st(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function st(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function H(e){k=e,e||O.clear(),p&&(e?p.dataset.selecting=``:delete p.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);U(),P()}function U(){C&&(C.hidden=!0),w&&(w.hidden=!1),T&&(T.hidden=!0,T.textContent=``)}function ct(e){for(let e of d){let t=O.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!S||(S.hidden=!k,!k))return;let t=new Set(e.filter(lt).map(e=>e.dataset.id)),n=[...O].filter(e=>!t.has(e)).length;et&&(et.textContent=oe(O.size,n)),E&&(E.textContent=te(e.length),E.disabled=e.every(e=>O.has(e.dataset.id??``))),tt&&(tt.textContent=Ee(yt()));for(let e of S.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=O.size===0;A&&(A.hidden=!je(j,Dt(K())))}function lt(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>ct(M));Re(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{H(!k)}),E?.addEventListener(`click`,()=>{for(let e of M)e.dataset.id&&O.add(e.dataset.id);U(),P()});function W(e){O.has(e)?O.delete(e):O.add(e),U(),P()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&W(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!k)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),W(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!k||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),W(t.dataset.id))});var G=Le({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>M.filter(lt),enterAllowed:()=>!k,background:()=>z,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function ut(){return G.holdsKeys()?G.current()?.querySelector(`:scope > [data-menu]`)??null:null}var dt=8;function ft(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),F!==null&&I(),u.leaving(),pt=!0,window.location.assign(t.href))}var pt=!1,mt={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=m?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=m?.value??``;let r=document.createElement(`p`);r.className=`prb-palette-summary`,r.setAttribute(`aria-live`,`polite`);let i=document.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Matching reviews`);let a=()=>{let e=M.slice(0,dt);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=M.length===0?`No reviews match.`:M.length>e.length?`The first ${e.length} of ${v?.textContent??M.length}`:v?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=d.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),ft(n))};n.addEventListener(`input`,()=>{m&&(m.value=n.value,m.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},ht={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=v?.textContent??``},r=[h,g,_].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function gt(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var _t=Object.fromEntries(we.map(e=>[`reviews.section.${e}`,gt(e)])),vt=me(`reviews`,{..._t,"reviews.search":{available:()=>m!==null,panel:mt},"reviews.filters":{available:()=>h!==null,panel:ht},"reviews.next":{run:()=>G.move(1)},"reviews.previous":{run:()=>G.move(-1)},"reviews.open":{available:()=>G.enterOpens(),run:()=>G.open()},"reviews.openInNewTab":{available:()=>G.enterOpens(),run:()=>G.openInNewTab()},"reviews.menu":{available:()=>ut()!==null,run:()=>{let e=ut();e&&B.open(e,{focusFirst:!0,returnFocus:()=>G.refocus()})}}},{onOpen:()=>B.closeAll(),onSettle:()=>$()});function K(){return ce(d.filter(e=>O.has(e.dataset.id??``)),x)}function yt(){return K().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function q(e){T&&(T.textContent=e,T.hidden=!1)}function J(e){for(let t of S?.querySelectorAll(`button`)??[])t.disabled=e}async function bt(e){let t=[...O];if(t.length!==0){J(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return J(!1),q(`That could not be saved. The workspace server refused it.`)}catch{return J(!1),q(`The workspace server did not answer. It may have stopped.`)}xt(K(),e),J(!1),H(!1)}}function xt(t,n){let r=n?`complete`:`in-progress`,i=n?`in-progress`:`complete`;for(let n of t){n.dataset.status=r;let t=n.querySelector(`.prb-card-status`);t&&(t.dataset.status=r,t.textContent=Oe(r));let a=n.querySelector(`[data-mark-status]`);a&&(a.dataset.markStatus=i,a.textContent=e(i))}}async function St(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}xt(d.filter(t=>t.dataset.id===e),t),P()}async function Ct(e,t){let n;try{let r=await fetch(`/lifecycle`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,state:t})});n=r.ok?await r.json().catch(()=>null):null}catch{n=null}if(!n)return!1;let r=new Set(e);for(let e of d)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),Y(e));return R(n.queue),P(),!0}function Y(e){let{stored:t,activity:n}=Qe(e),r=e.querySelector(`[data-lifecycle-chip]`);if(r){let i=De($e(e),t,n);r.textContent=i??``,r.hidden=i===void 0}for(let r of e.querySelectorAll(`[data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!le(e,t,n),r.textContent=ue(e,t,n)}}async function wt(e){let t=[...O];if(t.length===0)return;J(!0);let n=await Ct(t,e);if(J(!1),!n)return q(`That could not be saved. The workspace server refused it or did not answer.`);H(!1)}async function Tt(){let e=[...O];if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return J(!1),U(),q(`Nothing was deleted. The workspace server refused it.`)}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of K())r.has(e.dataset.id??``)||e.remove();d=d.filter(e=>e.isConnected),O.clear();for(let e of r)O.add(e);if(J(!1),U(),n.length===0)return H(!1);P(),q([...new Set(n.map(e=>e.error))].join(` `))}async function Et(){let e=K().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return J(!1),U(),q(`Nothing was added. The workspace server refused it.`);R(t.queue);let n=t.refused??[];O.clear();for(let e of n)O.add(e.id);if(J(!1),U(),n.length===0)return H(!1);P(),q([...new Set(n.map(e=>e.error))].join(` `))}S?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void Et();let n=t.closest(`[data-bulk-mark]`);if(n)return void bt(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void wt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){nt&&(nt.textContent=se(yt())),w&&(w.hidden=!0),C&&(C.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void Tt();if(t.closest(`[data-bulk-cancel-delete]`))return U();if(t.closest(`[data-bulk-cancel]`))return H(!1)}),ye(window,()=>window.location.reload());var X=`prb-fetch-summary`;function Dt(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function Ot(e){return Ne(Dt(e),j)}function kt(){for(let e of d){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!je(j,Dt([e])))}}async function At(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;j=(await e.json()).targets??{}}catch{return}kt(),P()}async function jt(e,t){let n=Ot(e);if(N||n.repositories===0)return;N=!0;let r=[A,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=ke(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}N=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Pe),P();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:Ae(a)};if(a.moved>0||Q){try{window.sessionStorage.setItem(X,JSON.stringify(o))}catch{}if(!Nt())return void window.location.reload();Q=!0}xe(fe(),o)}try{let e=window.sessionStorage.getItem(X);if(e){window.sessionStorage.removeItem(X);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&xe(fe(),{kind:t.kind,text:t.text})}}catch{}A?.addEventListener(`click`,()=>void jt(K(),A)),At();var Mt=document.body.dataset.indexRevision??``,Z=document.body.dataset.live===`true`?Date.now():0,Q=!1;function Nt(){return O.size>0||document.activeElement===m||N||vt.isOpen()||pt}function $(){Q&&!Nt()&&window.location.reload()}async function Pt(){try{let e=await fetch(`/revision`);if(e.ok){Se(document,!0);let t=await e.json();ve(document,t),t.live&&Z===0&&(Z=Date.now()),t.live||(Z=0);let n=a(Mt,t.revision??``,Nt());if(n===`reload`)return void window.location.reload();n===`hold`&&(Q=!0)}}catch{Se(document,!1)}window.setTimeout(()=>void Pt(),Ie(Z===0?2**53-1:Date.now()-Z))}Pt(),m?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),ge();
|
package/static/runs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{F as e,d as t,h as n,m as r,n as i,nt as a,q as o,s,t as c}from"./chunk-C8d9FvLk.js";import{n as l,t as u}from"./chunk-C3E91izb.js";import{t as d}from"./chunk-Dv0Wowan.js";import{t as f}from"./chunk-C8kkSv38.js";import{r as p,t as m}from"./chunk-DnOyRP8m.js";var h=[`all`,`in-progress`,`completed`,`failed`,`cancelled`,`not-responding`],g=[`all`,`review`,`update`,`re-run`,`kiss`];function _(e,t){let n=0;return{visible:e.map(e=>e&&n++<t),matched:e.filter(Boolean).length}}function v(e,t){return e.status!==`all`&&t.status!==e.status||e.kind!==`all`&&t.kind!==e.kind?!1:e.query.toLowerCase().split(/\s+/).filter(Boolean).every(e=>t.searchText.includes(e))}function y(e){return e.status!==`all`||e.kind!==`all`||e.query.trim()!==``}function b(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`status`),r=t.get(`kind`);return{status:h.includes(n??``)?n:`all`,kind:g.includes(r??``)?r:`all`,query:t.get(`q`)??``}}function x(e){let t=new URLSearchParams;e.status!==`all`&&t.set(`status`,e.status),e.kind!==`all`&&t.set(`kind`,e.kind),e.query.trim()!==``&&t.set(`q`,e.query);let n=t.toString();return n===``?``:`#${n}`}var S=o();c(`/restart`);var C=document.querySelector(`[data-search]`),w=document.querySelector(`[data-run-status-filter]`),T=document.querySelector(`[data-run-kind-filter]`),E=document.querySelector(`[data-clear-filters]`),D=document.querySelector(`[data-no-matches]`),O=[...document.querySelectorAll(`[data-run]`)],k=b(window.location.hash);w&&![...w.options].some(e=>e.value===k.status)&&(k={...k,status:`all`});function A(){C&&(C.value=k.query),w&&(w.value=k.status),T&&(T.value=k.kind)}var j=50,M=document.querySelector(`[data-runs-more-row]`),N=document.querySelector(`[data-runs-more]`),P=document.querySelector(`[data-runs-more-note]`),F=e=>({status:e.dataset.runStatus??``,kind:e.dataset.runKind??``,searchText:e.dataset.searchText??``});function I(){let e=0;for(let t of document.querySelectorAll(`[data-runs-section]`)){let n=[...t.querySelectorAll(`[data-run]`)],r=n.map(e=>v(k,F(e))),i=t.dataset.runsSection===`recent`,{visible:a,matched:o}=i?_(r,j):{visible:r,matched:r.filter(Boolean).length};n.forEach((e,t)=>e.hidden=!a[t]),e+=o;let s=t.querySelector(`[data-section-count]`);if(s&&(s.textContent=String(o)),i&&M){let e=Math.min(o,j);M.hidden=o<=j,P&&(P.textContent=`Showing the newest ${e} of ${o}.`)}}let t=y(k);E&&(E.hidden=!t),D&&(D.hidden=!(t&&e===0&&O.length>0))}N?.addEventListener(`click`,()=>{j+=50,I()});function L(e){k={...k,...e},j=50,I(),S.replace(x(k),{})}C?.addEventListener(`input`,()=>L({query:C.value})),w?.addEventListener(`change`,()=>L({status:w.value})),T?.addEventListener(`change`,()=>L({kind:T.value})),p(),m(document.querySelectorAll(`details[data-runs-section]`),e=>n(e.dataset.runsSection)?e.dataset.runsSection:void 0,(e,t)=>fetch(`/runs/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}));for(let e of document.querySelectorAll(`[data-clear-filters], [data-clear-filters-inline]`))e.addEventListener(`click`,()=>{L({status:`all`,kind:`all`,query:``}),A()});A(),I();var R=3e4;function z(){for(let e of document.querySelectorAll(`time[data-since]`)){let t=Number(e.dataset.since);Number.isFinite(t)&&(e.textContent=`${e.dataset.sincePrefix??``} ${d(t)}`.trim())}}window.setInterval(z,R);var B=l(document,{onClose:()=>Q()}),V=()=>document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null,H=!1;for(let e of document.querySelectorAll(`[data-run-remove]`))e.addEventListener(`click`,()=>{let t=e.dataset.runRemove,n=e.closest(`[data-run]`);!t||!n||(B.closeAll(),e.disabled=!0,H=!0,fetch(`/runs/remove`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:t})}).then(t=>{t.ok||t.status===404?(n.remove(),O.splice(O.indexOf(n),1),I()):e.disabled=!1}).catch(()=>{e.disabled=!1}).finally(()=>{H=!1,Q()}))});var U=f({doc:document,item:`[data-run]`,link:`a.prb-card-link`,walk:()=>O.filter(e=>!e.hidden&&e.closest(`details`)?.open!==!1&&e.querySelector(`a.prb-card-link`)),background:()=>document.querySelector(`.prb-shell > main`)});function W(e){let t=()=>document.querySelector(`details[data-runs-section="${e}"]`);return{available:()=>t()!==null,state:()=>{let e=t();return e?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}function G(){return U.holdsKeys()?U.current()?.querySelector(`:scope > [data-menu]`)??null:null}var K=Object.fromEntries(r.map(e=>[`runs.section.${e}`,W(e)])),q=t(`runs`,{"runs.search":{run:()=>C?.focus()},"runs.next":{run:()=>U.move(1)},"runs.previous":{run:()=>U.move(-1)},"runs.open":{available:()=>U.enterOpens(),run:()=>U.open()},"runs.openInNewTab":{available:()=>U.enterOpens(),run:()=>U.openInNewTab()},"runs.menu":{available:()=>G()!==null,run:()=>{let e=G();e&&B.open(e,{focusFirst:!0,returnFocus:()=>U.refocus()})}},...K},{onSettle:()=>Q()}),J=document.body.dataset.runsRevision??``,Y=document.body.dataset.live===`true`?Date.now():0,X=!1;function Z(){return document.activeElement===C||H||q.isOpen()||V()}function Q(){X&&!Z()&&window.location.reload()}C?.addEventListener(`blur`,()=>Q());async function $(){try{let t=await fetch(`/runs/revision`);if(t.ok){s(document,!0);let n=await t.json();i(document,n),n.live&&Y===0&&(Y=Date.now()),n.live||(Y=0);let r=e(J,n.revision??``,Z());if(r===`reload`)return void window.location.reload();r===`hold`&&(X=!0)}}catch{s(document,!1)}window.setTimeout(()=>void $(),u(Y===0?2**53-1:Date.now()-Y))}$(),a(window,()=>window.location.reload());
|
package/static/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as e,d as t,i as n,nt as r,q as i,t as a}from"./chunk-C8d9FvLk.js";function o(e,t){if(e===``)return null;try{let n=new URL(e);return n.origin===t&&/^\/r\/[^/]+$/.test(n.pathname)?n.href:null}catch{return null}}function s(e){let t=[...document.querySelectorAll(`[data-shutdown]`)],n=document.querySelector(`[data-shutdown-dialog]`),r=document.querySelector(`[data-shutdown-confirm]`);for(let e of t)e.addEventListener(`click`,()=>n?.showModal());document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>n?.close()),r?.addEventListener(`click`,()=>{r.disabled=!0,r.textContent=`Stopping…`,fetch(e,{method:`POST`}).then(e=>{if(!e.ok)throw Error(`Shutdown refused: ${e.status}`);n?.close(),c(t)}).catch(()=>{r.disabled=!1,r.textContent=`Stop server`})})}function c(t){document.body.dataset.serverStopped=`true`,e(document,`unreachable`);let n=document.createElement(`div`);n.className=`prb-stopped-notice`,n.setAttribute(`role`,`status`);let r=document.body.dataset.wayBack;n.textContent=r?`Workspace server stopped. This page is no longer being served. Run ${r} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(n);for(let e of t)e.disabled=!0,e.classList.contains(`prb-strip-action`)||(e.textContent=`Server stopped`)}var l=[{id:`system`,label:`System`,help:`Follow your device setting`},{id:`light`,label:`Light`,help:`Always use light mode`},{id:`dark`,label:`Dark`,help:`Always use dark mode`}];function u(e){return l.some(t=>t.id===e)}function d(e){let t=e.querySelector(`[data-settings-theme]:checked`)?.value;return u(t)?t:void 0}function f(e,t){e.documentElement.dataset.theme=t}function p(e){for(let t of e.querySelectorAll(`[data-settings-theme]`))t.addEventListener(`change`,()=>{let t=d(e);t&&f(e,t)})}s(`/shutdown`),i(),t(`global`,{}),a(`/restart`);function m(){let e=document.querySelector(`[data-settings-back]`),t=o(document.referrer,window.location.origin);if(!e||t===null)return;e.href=t,e.textContent=``;let n=document.createElement(`span`);n.setAttribute(`aria-hidden`,`true`),n.textContent=`‹`,e.append(n,` Back to the review`)}m(),p(document);var h=document.querySelector(`[data-settings-save]`),g=document.querySelector(`[data-settings-status]`),_=document.querySelector(`[data-settings-port]`),v=document.querySelector(`[data-settings-port-error]`),y=document.querySelector(`[data-settings-agent]`);function b(){let e=document.querySelector(`[data-settings-usage]:checked`);return e?e.value===`on`:void 0}function x(e,t){g&&(g.textContent=e,g.dataset.kind=t)}function S(e){v&&(v.textContent=e??``),_&&(e?(_.setAttribute(`aria-invalid`,`true`),_.focus(),_.select()):_.removeAttribute(`aria-invalid`))}async function C(){if(!h)return;let e=b(),t=d(document),n={..._?{port:_.value.trim()}:{},...y?{agent:y.value}:{},...e===void 0?{}:{usageCounts:e},...t===void 0?{}:{theme:t}};h.disabled=!0,h.textContent=`Saving`;try{let e=await(await fetch(`/settings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).json().catch(()=>null);if(!e){x(`Nothing was saved. The workspace server did not answer.`,`error`);return}if(e.error){S(e.error),x(`Nothing was saved.`,`error`);return}S(null),_&&(_.value=String(e.port.configured)),f(document,e.theme),x(e.restartRequired?`Saved. This page is served on port ${e.port.current}; the workspace moves to ${e.port.configured} the next time it starts.`:`Saved.`,`saved`)}catch{x(`Nothing was saved. The workspace server could not be reached.`,`error`)}finally{h.disabled=!1,h.textContent=`Save changes`}}h?.addEventListener(`click`,()=>void C()),n(document,window,{paintUnread:!0}),r(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -3089,10 +3089,6 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3089
3089
|
margin: 0;
|
|
3090
3090
|
padding-inline: max(24px, calc((100% - 960px) / 2 + 24px));
|
|
3091
3091
|
}
|
|
3092
|
-
/* Activity takes the whole column. Its rows are single lines that ellipse (the meta and the facts),
|
|
3093
|
-
so a reading measure only cut off what changed; the extra width is spent showing the line, not
|
|
3094
|
-
lengthening paragraphs. The same 24px gutter as every other page, at every width. */
|
|
3095
|
-
.prb-shell > .prb-index.prb-notifications-page { padding-inline: 24px; }
|
|
3096
3092
|
.prb-index {
|
|
3097
3093
|
max-width: 960px;
|
|
3098
3094
|
margin: 0 auto;
|
|
@@ -3107,6 +3103,14 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3107
3103
|
color: var(--text-secondary);
|
|
3108
3104
|
}
|
|
3109
3105
|
.prb-index-none { padding: 24px 2px; }
|
|
3106
|
+
/* A page's content in one bordered box, as Activity's list is: Settings' fields, Help's topics. The
|
|
3107
|
+
dividers that separated the sections become rows inside it. */
|
|
3108
|
+
.prb-page-panel {
|
|
3109
|
+
padding: 0 20px;
|
|
3110
|
+
border: 1px solid var(--border);
|
|
3111
|
+
border-radius: 10px;
|
|
3112
|
+
}
|
|
3113
|
+
.prb-index-note + .prb-page-panel { margin-top: 20px; }
|
|
3110
3114
|
.prb-index-note {
|
|
3111
3115
|
margin-top: 36px;
|
|
3112
3116
|
font-size: var(--t-meta);
|
|
@@ -3569,6 +3573,19 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3569
3573
|
and can be scanned without reading anything to their left. */
|
|
3570
3574
|
.prb-card-when { margin-left: auto; padding-left: 8px; }
|
|
3571
3575
|
|
|
3576
|
+
/* ── In progress ──
|
|
3577
|
+
Entries wear the card but carry none of its controls: no pin or menu to make room for at the top
|
|
3578
|
+
right, and no box to make room for while selecting, since work is not something to tick. */
|
|
3579
|
+
.prb-card[data-operation] .prb-card-head { padding-right: 0; }
|
|
3580
|
+
.prb-index[data-selecting] .prb-card[data-operation] .prb-card-link { padding-left: 16px; }
|
|
3581
|
+
/* Waiting for a slot: a ring that holds still beside the pulsing dot of work under way, so Queued
|
|
3582
|
+
reads as not yet moving without a word of its own. */
|
|
3583
|
+
.prb-card-analysis[data-analysis='queued'] i {
|
|
3584
|
+
animation: none;
|
|
3585
|
+
background: transparent;
|
|
3586
|
+
box-shadow: inset 0 0 0 1px currentColor;
|
|
3587
|
+
}
|
|
3588
|
+
|
|
3572
3589
|
/* Which questions were asked of this change, not how it went. Quieter than the risk and status
|
|
3573
3590
|
chips beside it: those grade the change, this one only says which analyses exist to read, and a
|
|
3574
3591
|
label with no verdict in it must not compete with two that have one. */
|
|
@@ -5219,6 +5236,7 @@ span.prb-arch-location:hover { text-decoration: none; }
|
|
|
5219
5236
|
/* The rule between sections is a separator, so the last one has nothing to separate from. It ends
|
|
5220
5237
|
the page now that Server sits below the note rather than above it. */
|
|
5221
5238
|
.prb-settings-section:last-of-type { border-bottom: 0; }
|
|
5239
|
+
.prb-page-panel > .prb-settings-section:first-of-type { padding-top: 20px; }
|
|
5222
5240
|
.prb-settings-section h2 {
|
|
5223
5241
|
margin: 0 0 14px;
|
|
5224
5242
|
font-size: var(--t-section);
|
|
@@ -5364,7 +5382,6 @@ select.prb-addreview-control {
|
|
|
5364
5382
|
Reading, not settings: prose at a readable measure, one topic per section, each with an anchor a
|
|
5365
5383
|
place elsewhere in the product can link to. */
|
|
5366
5384
|
.prb-help-topic {
|
|
5367
|
-
max-width: 46rem;
|
|
5368
5385
|
padding: 20px 0;
|
|
5369
5386
|
border-bottom: 1px solid var(--border);
|
|
5370
5387
|
font-size: var(--t-body);
|
|
@@ -5383,7 +5400,7 @@ select.prb-addreview-control {
|
|
|
5383
5400
|
.prb-help-topic code { font-size: var(--t-code); color: var(--text-primary); }
|
|
5384
5401
|
.prb-help-topic a { color: var(--link); }
|
|
5385
5402
|
/* The topic index: links in a wrapping row, above the first topic and ruled off from it. */
|
|
5386
|
-
.prb-help-contents { padding:
|
|
5403
|
+
.prb-help-contents { padding: 16px 0; border-bottom: 1px solid var(--border); }
|
|
5387
5404
|
.prb-help-contents ul { display: flex; flex-wrap: wrap; gap: 6px 20px; margin: 0; padding: 0; list-style: none; }
|
|
5388
5405
|
.prb-help-contents a { font-size: var(--t-body); color: var(--text-secondary); text-decoration: none; }
|
|
5389
5406
|
.prb-help-contents a:hover { color: var(--text-primary); text-decoration: underline; }
|
|
@@ -6399,3 +6416,70 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6399
6416
|
.prb-draft-dialog .pr-helper-finding-copy::after { display: none; }
|
|
6400
6417
|
.prb-draft-dialog .pr-helper-msg-copy .pr-helper-msg-copy-label[hidden] { display: none; }
|
|
6401
6418
|
.prb-draft-dialog .pr-helper-msg-copy.pr-helper-finding-copy:is(:hover, .copied, .failed) { background: var(--brand-hover); color: var(--on-brand); }
|
|
6419
|
+
|
|
6420
|
+
/* ── Runs ──
|
|
6421
|
+
An execution monitor in the Reviews page's clothes: the same card, the same section heads and
|
|
6422
|
+
the same dot of work under way, so a run reads as the sibling of the review it made. What is new
|
|
6423
|
+
here is only what a run has and a review does not: an outcome, a duration, who asked. */
|
|
6424
|
+
.prb-runs-lede { margin: 0 2px 14px; font-size: var(--t-body); color: var(--text-secondary); }
|
|
6425
|
+
/* Understated on purpose: three facts beside the lists, not a dashboard above them. */
|
|
6426
|
+
.prb-runs-summary {
|
|
6427
|
+
display: grid;
|
|
6428
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
6429
|
+
gap: 10px;
|
|
6430
|
+
margin: 0 0 24px;
|
|
6431
|
+
}
|
|
6432
|
+
.prb-runs-count {
|
|
6433
|
+
padding: 10px 14px;
|
|
6434
|
+
border: 1px solid var(--border);
|
|
6435
|
+
border-radius: 12px;
|
|
6436
|
+
background: var(--surface-raised);
|
|
6437
|
+
}
|
|
6438
|
+
.prb-runs-count dt { font-size: var(--t-meta); color: var(--text-secondary); }
|
|
6439
|
+
.prb-runs-count dd { margin: 2px 0 0; font-size: var(--t-title); font-weight: 600; font-variant-numeric: tabular-nums; color: var(--text-primary); }
|
|
6440
|
+
/* Folded and opened as the Reviews page's sections are, with the same .prb-index-section rules. */
|
|
6441
|
+
.prb-runs-idle,
|
|
6442
|
+
.prb-runs-scope { margin: 0 2px; font-size: var(--t-meta); color: var(--text-muted); }
|
|
6443
|
+
.prb-runs-scope { margin-top: 10px; }
|
|
6444
|
+
.prb-runs-more { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; margin: 12px 2px 0; font-size: var(--t-meta); color: var(--text-muted); }
|
|
6445
|
+
.prb-runs-more .prb-index-more { display: inline-block; margin: 0; }
|
|
6446
|
+
/* The display above outranks the browser's own rule for `hidden`, so it is said again here. */
|
|
6447
|
+
.prb-runs-more[hidden] { display: none; }
|
|
6448
|
+
|
|
6449
|
+
/* No pin and no selection box on a run, so the room the card keeps for them is given back; an ended
|
|
6450
|
+
run's menu takes the pin's corner, and its title stops short of it. */
|
|
6451
|
+
.prb-run .prb-card-head { padding-right: 0; }
|
|
6452
|
+
.prb-run > .prb-menu { right: 10px; }
|
|
6453
|
+
.prb-run:has(> .prb-menu) .prb-card-head { padding-right: 28px; }
|
|
6454
|
+
.prb-run .prb-card-head h3 {
|
|
6455
|
+
margin: 0 auto 0 0;
|
|
6456
|
+
font-size: var(--t-section);
|
|
6457
|
+
font-weight: 600;
|
|
6458
|
+
color: var(--text-primary);
|
|
6459
|
+
overflow: hidden;
|
|
6460
|
+
text-overflow: ellipsis;
|
|
6461
|
+
white-space: nowrap;
|
|
6462
|
+
}
|
|
6463
|
+
.prb-run[hidden] { display: none; }
|
|
6464
|
+
/* A run whose review is gone links nowhere, so it does not answer the pointer as a link would. */
|
|
6465
|
+
.prb-run:not(:has(> a.prb-card-link)):hover { border-color: var(--border); }
|
|
6466
|
+
|
|
6467
|
+
/* The outcome, in a word and a mark that holds still. Colour is never the only carrier: the word is
|
|
6468
|
+
always there. Failed and Not responding are things to go and look at, not alarms, so the mark is
|
|
6469
|
+
coloured and the word stays in the line's own ink. */
|
|
6470
|
+
.prb-run-status { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; color: var(--text-primary); }
|
|
6471
|
+
.prb-run-status i { width: 7px; height: 7px; border-radius: 50%; background: var(--text-muted); }
|
|
6472
|
+
.prb-run-status[data-run-mark='completed'] i { background: var(--success); }
|
|
6473
|
+
.prb-run-status[data-run-mark='failed'] i { background: var(--danger); }
|
|
6474
|
+
.prb-run-status[data-run-mark='cancelled'] i { background: transparent; box-shadow: inset 0 0 0 1px var(--text-muted); }
|
|
6475
|
+
/* A warning, shaped differently from Failed as well as coloured differently. */
|
|
6476
|
+
.prb-run-status[data-run-mark='not-responding'] i { border-radius: 1px; transform: rotate(45deg); background: var(--warning); }
|
|
6477
|
+
.prb-run-provenance { color: var(--text-secondary); }
|
|
6478
|
+
.prb-run-detail { margin: 8px 0 0; font-size: var(--t-body); color: var(--text-secondary); overflow-wrap: anywhere; }
|
|
6479
|
+
.prb-run-gone { margin: 8px 0 0; font-size: var(--t-meta); color: var(--text-muted); }
|
|
6480
|
+
|
|
6481
|
+
@media (max-width: 560px) {
|
|
6482
|
+
.prb-runs-summary { gap: 6px; }
|
|
6483
|
+
.prb-runs-count { padding: 8px 10px; }
|
|
6484
|
+
.prb-runs-count dd { font-size: var(--t-section); }
|
|
6485
|
+
}
|
package/static/sidebar.css
CHANGED
|
@@ -4481,6 +4481,9 @@
|
|
|
4481
4481
|
display: flex;
|
|
4482
4482
|
flex-direction: column;
|
|
4483
4483
|
min-width: 220px;
|
|
4484
|
+
/* The popover is fixed and sized to its content, so without a cap a long prompt would widen it
|
|
4485
|
+
toward the window's edge. 16px is position()'s two viewport margins. */
|
|
4486
|
+
max-width: min(320px, calc(100vw - 16px));
|
|
4484
4487
|
padding: 4px;
|
|
4485
4488
|
/* With the saved prompts the list is about 375px. position() keeps it inside the window, but a
|
|
4486
4489
|
window shorter than the list would cut it off, so there it scrolls instead. 16px is the two
|
|
@@ -4503,7 +4506,10 @@
|
|
|
4503
4506
|
font-size: 12px;
|
|
4504
4507
|
text-align: left;
|
|
4505
4508
|
cursor: pointer;
|
|
4506
|
-
|
|
4509
|
+
/* A saved prompt can be a sentence, and the reviewer needs to read all of it before choosing.
|
|
4510
|
+
It wraps onto further lines; anywhere covers a long unbroken token such as a path. */
|
|
4511
|
+
white-space: normal;
|
|
4512
|
+
overflow-wrap: anywhere;
|
|
4507
4513
|
}
|
|
4508
4514
|
|
|
4509
4515
|
.pr-helper-selection-menu-item:hover {
|