prreviewbuddy 0.69.1 → 0.70.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/package.json +1 -1
- package/static/chunk-BsU84lX4.js +1 -0
- package/static/chunk-DqEA-C0S.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +8 -0
- package/static/workspace.js +62 -62
- package/static/chunk-2P5KTb9d.js +0 -1
- package/static/chunk-CndkgJPh.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.70.2
|
|
4
|
+
|
|
5
|
+
**Buddy AI's answers on cards of their own.** In the Buddy AI panel, your questions stay purple and
|
|
6
|
+
Buddy's answers now sit on a light card with a thin border, so a conversation reads as turns
|
|
7
|
+
between you and Buddy. In the dark theme the card is outlined. The copy button stays where it was,
|
|
8
|
+
at the foot of each answer.
|
|
9
|
+
|
|
10
|
+
## 0.70.1
|
|
11
|
+
|
|
12
|
+
**Selecting a review's ID by hand, with the keyboard.** When Copy review ID can't reach the
|
|
13
|
+
clipboard, the menu shows the ID in a box for you to select and copy yourself. In a review's `…`
|
|
14
|
+
menu, Home, End and the arrow keys in that box jumped to a menu item instead; they now move within
|
|
15
|
+
the box, with Shift selecting as usual. The same holds in the menus on the Reviews list. Escape
|
|
16
|
+
still closes the menu.
|
|
17
|
+
|
|
18
|
+
## 0.70.0
|
|
19
|
+
|
|
20
|
+
**A review's menu from the keyboard.** On the Reviews list, Space opens the menu of the review J
|
|
21
|
+
and K are on, with its first item ready. Move through it with J and K or the arrow keys, press
|
|
22
|
+
Enter to choose, or Escape to close it and carry on down the list from the same review. Space
|
|
23
|
+
still ticks a focused checkbox, presses a focused button and types in the search box. Space is
|
|
24
|
+
listed with the page's keys in the palette (⌘K, or Ctrl+K off a Mac) and in Keyboard shortcuts
|
|
25
|
+
(⌘K ?).
|
|
26
|
+
|
|
27
|
+
**J and K in every menu.** In any open menu (a review's on the list, the one in a review's header,
|
|
28
|
+
Ask Buddy on an issue or question) J and K move down and up as the arrow keys do.
|
|
29
|
+
|
|
30
|
+
**The Reviews list's menus behave like a review's.** They open above their button when there is
|
|
31
|
+
no room below it. Escape closes one and puts you back on its button, or on the review if Space
|
|
32
|
+
opened it. Choosing Delete from the keyboard puts you on Cancel, and Cancel puts you back on
|
|
33
|
+
Delete.
|
|
34
|
+
|
|
3
35
|
## 0.69.1
|
|
4
36
|
|
|
5
37
|
**Escape leaves the Buddy AI field.** With your cursor in the Buddy AI question box, Escape moves
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prreviewbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.2",
|
|
4
4
|
"description": "Review a branch or pull request in an isolated checkout, from your terminal, with the coding agent you already have installed.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"homepage": "https://prreviewbuddy.com",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e}from"./chunk-DqEA-C0S.js";async function t(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 n=`button:not([disabled])`;function r(e){return e.querySelector(`[data-menu-panel]`)}function i(e){return e.querySelector(`[data-menu-trigger]`)}function a(e){let t=r(e);return t?[...t.querySelectorAll(n)].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=r(e),n=i(e);if(!t||!n)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=n.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,n={}){let o=null,s=null,c=n.within?`${n.within} [data-menu]`:`[data-menu]`,l=e=>e&&(!n.within||e.closest(n.within))?e:null,f=(e,t={})=>{let a=r(e);if(!a||a.hidden)return;a.hidden=!0;let c=i(e);c?.setAttribute(`aria-expanded`,`false`);let l=o===e?s:null;o===e&&(o=null,s=null),n.onClose?.(e),t.returnFocus&&(l??(()=>c?.focus()))()},p=()=>{for(let e of t.querySelectorAll(c))f(e)},m=(e,t,c=null)=>{let l=r(e);l&&(p(),s=c,n.onOpen?.(e),l.hidden=!1,u(e),i(e)?.setAttribute(`aria-expanded`,`true`),o=e,t&&a(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,n=l(t?.closest?.(`[data-menu]`)??null);if(!n){p();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;r(n)?.hidden?m(n,t):f(n);return}o&&o!==n&&f(o)}),t.addEventListener(`keydown`,t=>{if(o&&!o.isConnected&&(o=null),!o)return;let n=o;if(t.key===`Escape`){t.preventDefault(),f(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){f(n);return}if(e(t.target))return;let r=a(n);if(r.length===0)return;let i=r.indexOf(t.target),s=d(t),c=s===`ArrowDown`?r[(i+1)%r.length]:s===`ArrowUp`?r[(i-1+r.length)%r.length]:s===`Home`?r[0]:s===`End`?r[r.length-1]:null;c&&(t.preventDefault(),c.focus(),c.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>m(e,t.focusFirst===!0,t.returnFocus??null),close:f,closeAll:p}}function p(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}var m=`Fetch selected`;function h(e){return`${e} ${e===1?`repository`:`repositories`}`}function g(e){return`Fetching ${h(e)}…`}function _(e){return e.fetched===0?`Could not fetch ${h(e.repositories)}`:e.fetched===e.repositories?`Fetched ${h(e.repositories)}`:`Fetched ${e.fetched} of ${h(e.repositories)}`}function v(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 y(e,t){return v(t,e).repositories>0}export{g as a,t as c,_ as i,y as n,p as o,v as r,f as s,m 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()},ee=()=>Number(h(n,o)??0)||0,j=()=>{try{let e=JSON.parse(h(n,c)??`{}`);return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{return{}}},M=(e,t)=>{if(!e||!n)return;let r=j();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?j()[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){M(w,e);return}(n!==x||JSON.stringify(i.ui)!==n)&&(x=n,M(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<ee()};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&&M(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 ee(e){try{return e.sessionStorage}catch{return null}}function j(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function M(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:ee(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=j(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||M(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 R=[`pinned`,`active`,`waiting`,`done`],ue=e=>N.find(t=>t.id===e).name,de={pinned:{title:`Pinned`,key:`p`},active:{title:ue(`active`),key:`a`},waiting:{title:ue(`waiting`),key:`w`},done:{title:ue(`done`),key:`d`}};function fe(e){return typeof e==`string`&&R.includes(e)}function pe(e,t,n,r){return e&&!he(r)?`pinned`:oe(t,n)}function me(e,t){let n=e=>R.indexOf(t(e));return[...e].sort((e,t)=>n(e)-n(t))}function he(e){return e===`queue`}function ge(e,t,n){return e?I(t,n)?.text:L(t,n)}var _e=[`all`,`queue`,`in-progress`,`complete`],ve=[`any`,`open`,`merged`,`closed`],ye=[`q`,`f`,`by`,`pr`,`page`];function be(e,t){let n=`${e} review${e===1?``:`s`}`;return e===t?n:`${n} · ${t} branch${t===1?``:`es`}`}function xe(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 Se(){return{pinned:15,active:15,waiting:15,done:15}}function Ce(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!ye.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:_e.includes(n)?n:`all`,author:t.get(`by`)??``,pr:ve.includes(r)?r:`any`,...a===``?{}:{extra:a}}}function we(e){let t=new URLSearchParams;e.query!==``&&t.set(`q`,e.query),e.filter!==`all`&&t.set(`f`,e.filter),e.author!==``&&t.set(`by`,e.author),e.pr!==`any`&&t.set(`pr`,e.pr);for(let[n,r]of new URLSearchParams(e.extra??``))ye.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Te(e,t){return t===`all`||t===`queue`?!0:t===`in-progress`?e.status!==`complete`:e.status===t}function Ee(e,t){return t===`any`||e.prState===t}function De(e,t){return t===``||e===t}function Oe(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function ke(e){return e?`Unpin review`:`Pin review`}function Ae(e){return e?`Remove from review queue`:`Add to review queue`}function je(e,t){let n=t.query.trim().toLowerCase();return Me(e.filter(e=>(!n||e.searchText.includes(n))&&Te(e,t.filter)&&De(e.author,t.author)&&Ee(e,t.pr)),t.filter)}function Me(e,t){return he(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function Ne(e){return e===0?`Queue`:`Queue (${e})`}function Pe(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function Fe(e,t){if(e===0)return`Nothing selected`;let n=`${e} selected`;return t>0?`${n} · ${t} not shown`:n}function Ie(e){return e===0?`Select all`:`Select all ${e}`}function Le(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function Re(e){return`${Le(e)}?`}function ze(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var Be=[{id:`global`,label:`Global`},{id:`reviews`,label:`Reviews list`},{id:`notifications`,label:`Notifications 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}:{}}),Ve=e=>({kind:`key`,key:e,primary:!0}),He=R.map(e=>({id:`reviews.section.${e}`,label:`${de[e].title} section`,group:`reviews`,page:`reviews`,binding:z(`l`,de[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.notifications`,label:`Go to Notifications`,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`)},...He,{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:`notifications.next`,label:`Next notification`,group:`notifications`,page:`notifications`,binding:B(`j`)},{id:`notifications.previous`,label:`Previous notification`,group:`notifications`,page:`notifications`,binding:B(`k`)},{id:`notifications.open`,label:`Open notification`,group:`notifications`,page:`notifications`,binding:B(`Enter`)},{id:`notifications.openInNewTab`,label:`Open notification 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:Ve(`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:Ve(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:Ve(`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`)}],Ue=[{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`}];function We(e,t=V){return t.filter(t=>t.page===`global`||t.page===e)}function Ge(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:Ue.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 We(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 Ke(e){return We(e).filter(e=>e.binding.kind===`key`)}var qe=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function Je(e){return qe.has(e.key)}function Ye(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 Xe=new Set(V.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function Ze(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=Ye(e);return i!==null&&Xe.has(i)?i:null}function Qe(e){return V.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function $e(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?Ye(t)===e.key:t.key===e.key}function et(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 tt={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function H(e){return tt[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=Ue.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 nt(e,t){return e.kind===`chord`?W(e.keys,t):[G(e,t)]}function rt(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 it(e){return Be.map(t=>({group:t.id,label:t.label,rows:V.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:nt(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 at(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 ot(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 st(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 ct(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),st(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 lt=/https?:\/\/[^\s<>()"'`]+/gi,ut=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,dt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,ft=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function pt(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=ut.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=ft.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=dt.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 mt(e){let t=[],n=new Set;for(let r of e.matchAll(lt)){let e=pt(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function ht(e){return`${e} isn't supported yet`}function gt(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var _t={waiting:`Waiting`,reviewing:`Reviewing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},vt=250,yt=1500;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(()=>({}));return r.ok?{ok:!0,value:i}:{ok:!1,status:r.status,error:typeof i.error==`string`?i.error:`Something went wrong. Try again.`}}catch{return{ok:!1,status:0,error:`The workspace server did not answer. Check it is still running.`}}}function bt(e,t,n){let r=null,i=!1,a=()=>{r=e.setTimeout(async()=>{let r=await J(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),r.value.finished||a()):r.status===404?n.lost(r.error):a())},yt)};return a(),()=>{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 X(e,t,n){let r=Y(e,`option`,void 0,t);return r.value=n,r}function Z(e,t,n){let r=Y(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function xt(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),n&&a(`Base`,c);let l=Y(e,`p`,`prb-addreview-error`);l.hidden=!0,r.append(l);let u=null,d=!1;return{element:r,base:c,loaded:J(t,`/add-review/options`).then(t=>{if(d=!0,!t.ok)return l.textContent=t.error,l.hidden=!1,r.open=!0,null;let{agents:n,agent:i}=t.value,a=n.filter(e=>e.installed);i.kind!==`resolved`&&o.append(X(e,`Choose an agent`,``));for(let t of a)o.append(X(e,t.displayName,t.id));return i.kind===`resolved`?(u=i.id,a.some(e=>e.id===i.id)||o.append(X(e,i.displayName,i.id)),o.value=i.id):(o.value=``,r.open=!0,i.kind===`refused`&&(l.textContent=i.error,l.hidden=!1)),t.value}),complete:()=>d&&o.value!==``,values:()=>({...o.value&&o.value!==u?{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`}}}function St(e){let t=Y(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function Ct(e){return{title:`Add review`,escape:`close`,mount(t){let n=e.defaultView,r=Y(e,`div`,`prb-addreview`);r.setAttribute(`data-addreview`,`pull-requests`);let i=Y(e,`label`,`prb-addreview-label`,`Paste PR links`),a=Y(e,`textarea`,`prb-palette-input prb-addreview-paste`);a.id=`prb-addreview-paste`,i.htmlFor=a.id,a.rows=4,a.spellcheck=!1,a.autocomplete=`off`,a.placeholder=`https://github.com/owner/repo/pull/123`;let o=Y(e,`p`,`prb-palette-summary`);o.setAttribute(`aria-live`,`polite`);let s=Y(e,`ul`,`prb-addreview-rows`),c=xt(e,n,!1),l=Y(e,`p`,`prb-addreview-error`);l.hidden=!0;let u=Y(e,`p`,`prb-palette-summary`,`You can close this: the reviews carry on and appear in your list.`);u.hidden=!0;let d=Y(e,`p`,`prb-addreview-error`);d.setAttribute(`data-addreview-limit`,``),d.hidden=!0;let f=Y(e,`div`,`prb-addreview-footer`),p=St(e);f.append(p),r.append(Y(e,`p`,`prb-addreview-mode`,`Pull request`),i,a,o,d,s,u,c.element,l,f),t.append(r);let m=[],h=new Map,g=!1,_=0,v=null,y=null,b=!1,x=null,S=!1,C=()=>m.filter(e=>(e.ok||e.needsFolder)&&!!h.get(e.key)),w=0,T=()=>{let e=C().length;p.textContent=e>1?`Review ${e} PRs`:`Review PR`,p.disabled=x!==null||b||g||w>0||e===0||!c.complete(),p.hidden=x!==null},E=()=>{x===null&&(d.hidden=w===0,d.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=()=>{s.replaceChildren(...m.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key;let r=t.ok||!!h.get(t.key);n.dataset.state=r?`ok`:`problem`;let i=Y(e,`div`,`prb-addreview-row-head`);if(i.append(Y(e,`span`,`prb-addreview-mark`,r?`✓`:`!`),Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(i),t.reviewed?.kept){let r=D(``,`muted`);r.append(Z(e,t.reviewed.reviewId,`Resumes where it stopped`)),n.append(r,D(gt(t.reviewed.kept),`muted`))}else if(t.reviewed){let r=D(``,`muted`);r.append(Z(e,t.reviewed.reviewId,`Already reviewed`)),n.append(r)}else t.ok?n.append(D(`Ready`,`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(X(e,n.branch?`${n.display} (${n.branch})`:n.display,n.path));r.value=h.get(t.key)??t.folder??``,r.addEventListener(`change`,()=>h.set(t.key,r.value)),n.append(r)}else if(t.folders.length===1)n.append(Y(e,`span`,`prb-addreview-path`,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=h.get(t.key)??``,r.addEventListener(`input`,()=>{r.value.trim()?h.set(t.key,r.value.trim()):h.delete(t.key),n.dataset.state=r.value.trim()?`ok`:`problem`,T()}),n.append(r)}return n}))},k=t=>{s.replaceChildren(...t.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key,n.dataset.status=t.status,n.dataset.state=t.status===`failed`?`problem`:`ok`;let r=Y(e,`div`,`prb-addreview-row-head`);return r.append(Y(e,`span`,`prb-addreview-mark`,t.status===`failed`?`!`:`✓`)),r.append(t.reviewId?Z(e,t.reviewId,t.label):Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(r),n.append(D(t.reason?`${_t[t.status]}: ${t.reason}`:_t[t.status],t.status===`failed`?`problem`:`muted`)),t.kept&&n.append(D(gt(t.kept),`muted`)),n})),o.textContent=A(t)},A=e=>{let t=[`reviewing`,`waiting`,`ready`,`already-reviewed`,`failed`].map(t=>[t,e.filter(e=>e.status===t).length]).filter(([,e])=>e>0);return[`${e.length} submitted`,...t.map(([e,t])=>`${t} ${_t[e].toLowerCase()}`)].join(` · `)},ee=()=>{let e=mt(a.value),t=e.filter(e=>e.kind===`github`).length;o.textContent=e.length===0?a.value.trim()?`No pull request links found.`:``:t===1?`1 pull request recognised`:`${t} pull requests recognised`,m=e.map(e=>e.kind===`github`?m.find(t=>t.key===e.key)??{key:e.key,label:`${e.owner}/${e.repo} #${e.number}`,url:e.url,ok:!1,folders:[]}:{key:e.key,label:`${e.provider} ${e.provider===`GitLab`?`merge request`:`pull request`}`,url:e.url,ok:!1,reason:ht(e.provider),folders:[]}),g=e.some(e=>e.kind===`github`),w=Math.max(0,t-20);let r=++_;O(),E(),T(),v!==null&&n.clearTimeout(v),g&&(v=n.setTimeout(async()=>{v=null;let e=await J(n,`/add-review/pull-requests/preview`,{text:a.value});if(!(S||r!==_)){if(g=!1,!e.ok)l.textContent=e.error,l.hidden=!1;else{l.hidden=!0,m=e.value.rows;for(let e of m)e.folder&&!h.has(e.key)&&h.set(e.key,e.folder)}O(),T()}},vt))},j=e=>{y=bt(n,e,{rows:e=>{x=e,k(e)},lost:e=>{l.textContent=e,l.hidden=!1,x&&k(x.map(e=>e.status===`waiting`?{...e,status:`failed`,reason:`Not started`}:e))}})},M=async()=>{if(T(),p.disabled)return;b=!0,T();let e=C().map(e=>({url:e.url,folder:h.get(e.key)})),t=await J(n,`/add-review/pull-requests`,{items:e,...c.values()});if(b=!1,!S){if(!t.ok){l.textContent=t.error,l.hidden=!1,T();return}l.hidden=!0,x=t.value.rows,a.readOnly=!0,c.element.open=!1,k(x),u.hidden=!1,T(),j(t.value.batchId)}};return a.addEventListener(`input`,ee),p.addEventListener(`click`,()=>void M()),r.addEventListener(`change`,()=>T()),r.addEventListener(`keydown`,e=>{if(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(),M())}),c.loaded.then(()=>T()),T(),a.focus(),()=>{S=!0,v!==null&&n.clearTimeout(v),y?.()}}}}function wt(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,`label`,`prb-addreview-label`,`Working folder`),o=Y(e,`div`,`prb-addreview-pathrow`),s=Y(e,`input`,`prb-palette-input`);s.id=`prb-addreview-folder`,a.htmlFor=s.id,s.type=`text`,s.spellcheck=!1,s.autocomplete=`off`,s.placeholder=`~/code/project`;let c=Y(e,`button`,`prb-addreview-browse`,`Browse…`);c.type=`button`,c.hidden=!0,o.append(s,c);let l=Y(e,`div`,`prb-addreview-detected`);l.setAttribute(`aria-live`,`polite`);let u=Y(e,`p`,`prb-palette-group`,`Recent`),d=Y(e,`div`,`prb-palette-results prb-addreview-recent`);d.setAttribute(`role`,`group`),d.setAttribute(`aria-label`,`Recent folders`),u.hidden=!0;let f=xt(e,r,!0),p=Y(e,`p`,`prb-addreview-error`);p.hidden=!0;let m=Y(e,`div`,`prb-addreview-footer`),h=Y(e,`p`,`prb-palette-summary`,`Waiting to start: two reviews are already running, and this one starts when one of them finishes. You can close this.`);h.hidden=!0,h.setAttribute(`data-addreview-waiting`,``);let g=St(e);g.textContent=`Review branch`,m.append(g),i.append(Y(e,`p`,`prb-addreview-mode`,`Branch`),a,o,l,u,d,f.element,p,h,m),t.append(i);let _=null,v=null,y=!1,b=!1,x=null,S=!1,C=(e,t)=>`${e}\n${t.trim()}`,w=()=>C(s.value,f.base.value),T=()=>{g.disabled=y||b||!_?.result.ok||_.key!==w()||!f.complete()},E=t=>{if(l.replaceChildren(),!t)return;if(!t.ok){l.append(Y(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`));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=Z(e,t.reviewed.reviewId,`Resumes where it stopped`),i=Y(e,`span`,`prb-addreview-kept`,gt(t.reviewed.kept)),a=Y(e,`span`);a.append(n,Y(e,`br`),i),r(`Review`,a)}else t.reviewed&&r(`Review`,Z(e,t.reviewed.reviewId,t.reviewed.inProgress?`Being reviewed now`:`Already reviewed`));l.append(n),f.setBasePlaceholder(t.base??null)},D=()=>{let e=s.value,t=f.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};return!S&&w()===n&&(_={key:n,result:t},E(t),T()),t}):(_=null,E(null),T(),Promise.resolve({ok:!1}))},O=e=>{s.value=e,v!==null&&r.clearTimeout(v),T(),D(),s.focus()},k=async()=>{if(y||b)return;y=!0;let e=w(),t=s.value,i=f.values();T(),v!==null&&(r.clearTimeout(v),v=null);let a=await D();if(S)return;if(!a.ok||!f.complete()||w()!==e)return y=!1,T();let o=await J(r,`/add-review/branch`,{path:t,...i});if(y=!1,!S){if(!o.ok){p.textContent=o.error,p.hidden=!1,T();return}if(o.value.outcome===`waiting`&&o.value.batchId){b=!0,h.hidden=!1,g.hidden=!0,T();let e=e=>{x?.(),x=null,b=!1,h.hidden=!0,g.hidden=!1,p.textContent=e,p.hidden=!1,T()};x=bt(r,o.value.batchId,{rows:([t])=>{if(!(!t||t.status===`waiting`)){if(t.status===`failed`)return e(t.reason??`The review could not be started.`);n()}},lost:e});return}n()}},A=()=>{T(),v!==null&&r.clearTimeout(v),v=r.setTimeout(()=>{v=null,D()},vt)};return s.addEventListener(`input`,A),f.base.addEventListener(`input`,A),c.addEventListener(`click`,async()=>{let e=await J(r,`/add-review/folder/choose`,{});if(!S){if(!e.ok){p.textContent=e.error,p.hidden=!1;return}e.value.path?O(e.value.path):s.focus()}}),d.addEventListener(`click`,e=>{let t=e.target.closest(`[data-folder-path]`);t?.dataset.folderPath&&O(t.dataset.folderDisplay??t.dataset.folderPath)}),g.addEventListener(`click`,()=>void k()),i.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=[...d.querySelectorAll(`[data-folder-path]`)],n=t.indexOf(e.target);if(e.key===`ArrowDown`||e.key===`ArrowUp`){let r=e.key===`ArrowDown`?e.target===s?t[0]:n>=0?t[n+1]:null:n===0?s: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(),k())}),i.addEventListener(`change`,()=>T()),f.loaded.then(e=>{S||(c.hidden=!e?.canChooseFolder,T())}),J(r,`/add-review/folders`).then(t=>{S||!t.ok||(d.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),Y(e,`span`,`prb-palette-result-where`,t.display)),n})),u.hidden=t.value.folders.length===0)}),T(),s.focus(),()=>{S=!0,x?.(),v!==null&&r.clearTimeout(v)}}}}function Tt(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function Et(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:Et(t);return`global`}function Dt(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=et(Ge(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=ct(a,it(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:Ct(a)},"add.branch":{panel:wt(a)},"navigate.reviews":{run:()=>l(`/`)},"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=at(a,e=>T(e),v),x=Ke(e).map(e=>({keys:G(e.binding,o),label:e.label})),S=Object.fromEntries(Be.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:Et(e)}),n=s.path.length===0?Be.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=Ke(e);return i.addEventListener(`keydown`,e=>{if(b.isOpen()){if(Je(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(m)return e.key===`Escape`&&!e.isComposing?(t(),h===`close`?v():D()):Ze(e,o)?(t(),v()):void 0;if(e.key===`Escape`||Ze(e,o))return t(),v();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),ot(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(Ye(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=Ze(e,o),r=t?Qe(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(!$e(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)||Tt(a)))continue;if(p(t,e)){e.preventDefault(),f(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{b.isOpen()&&v(`unloading`)}),Ot(a,e,o),{isOpen:()=>b.isOpen()||u.isOpen(),close:()=>v()}}function Ot(e,t,n){for(let r of We(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=rt(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 kt(e){return`${e} more`}function At(e){return e===0?`Nothing unread`:`${e} unread`}function jt(e){return e===`restarting`?`Workspace server restarting`:e===`unreachable`?`Workspace server not running`:`Workspace server running`}function Q(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=jt(t))}function Mt(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||Q(e,t?`running`:`unreachable`)}var Nt=6e3,Pt=5e3;function Ft(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 It(e,t,n=window){return Lt(e,{kind:t.kind,text:t.text},n)}function Lt(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(),Nt),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),Nt)};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 Rt(e,t,n=window){return Lt(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function zt(e,t,n=window){return Lt(e,{kind:`more`,text:kt(t),href:`/notifications`,link:`View all`},n)}function Bt(e=document,t=window){let n=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(n)||n<=0)return;let r=Ft(e),i=async()=>{try{let i=await t.fetch(`/notifications/recent?after=${n}`);if(Mt(e,!0),i.status===403)return;if(i.ok){let e=await i.json();typeof e.now==`number`&&(n=e.now);for(let n of[...e.notifications??[]].reverse())Rt(r,n,t);typeof e.more==`number`&&e.more>0&&zt(r,e.more,t)}}catch{Mt(e,!1)}t.setTimeout(()=>void i(),Pt)};t.setTimeout(()=>void i(),Pt)}function Vt(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:At(t)),n.hidden=t===0}function Ht(e,t){Vt(e,t.unread),typeof t.driving==`boolean`&&Ut(e,t.driving)}function Ut(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var Wt=`prb-server-restarted`;function Gt(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(Wt),t.sessionStorage.removeItem(Wt)}catch{}n!==null&&It(Ft(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var Kt=2e4,qt=300;function Jt(e){Gt();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,Yt(e,t,n)})}async function Yt(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){Ut(document,!0);return}if(!a.ok)return void $(t,n,await rn(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=tn(window.location.href,o.port)}catch{$(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,Q(document,`restarting`),i!==null){if(await $t(Number(new URL(i).port)))return void window.location.assign(i)}else if(await Xt(r)){try{window.sessionStorage.setItem(Wt,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await nn()){Q(document,`running`),$(t,n,`The server did not restart, and is still the one that was running.`);return}Q(document,`unreachable`),$(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function Xt(e){let t=Date.now()+Kt;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,qt));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 Zt=4,Qt={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function $t(e,t=()=>en(e),n=Qt){let r=n.now()+Kt,i=0;for(;n.now()<r;){await n.sleep(qt);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=Zt))return!0}for(let e=0;e<Zt;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(qt)}return!0}async function en(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function tn(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 nn(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function rn(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function $(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{xe as A,te as B,fe as C,Ae as D,ke as E,le as F,k as G,C as H,I,A as J,O as K,ce as L,Fe as M,Pe as N,Ne as O,ie as P,ae as R,Se as S,Ce as T,y as U,ne as V,v as W,e as X,n as Y,Re as _,Bt as a,me as b,Q as c,st as d,it as f,Le as g,be as h,It as i,Ie as j,ze as k,At as l,ge as m,Ht as n,Ft as o,R as p,p as q,Vt as r,Mt as s,Jt as t,Dt as u,je as v,Oe as w,pe as x,we as y,P as z};
|
package/static/help.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{U as e,V as t,X as n,d as r,f as i,t as a,u as o}from"./chunk-DqEA-C0S.js";t(),o(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(r(document,i(e(navigator)))),a(`/restart`),n(window,()=>window.location.reload());
|
package/static/notifications.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,X as t,l as n,r,t as i,u as a}from"./chunk-
|
|
1
|
+
import{V as e,X as t,l as n,r,t as i,u as a}from"./chunk-DqEA-C0S.js";import{t as o}from"./chunk-C8kkSv38.js";function s(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 c(e){let t=e.querySelector(`[data-notifications-more]`),n=15;s(e,t,n),t?.addEventListener(`click`,()=>{n+=15,s(e,t,n)})}e(),i(`/restart`),c(document);var l=o({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`)});a(`notifications`,{"notifications.next":{run:()=>l.move(1)},"notifications.previous":{run:()=>l.move(-1)},"notifications.open":{available:()=>l.enterOpens(),run:()=>l.open()},"notifications.openInNewTab":{available:()=>l.enterOpens(),run:()=>l.openInNewTab()}});var u=document.querySelector(`[data-notifications-count]`),d=document.querySelector(`[data-notifications-read-all]`);async function f(){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}}function p(e){e.setAttribute(`data-read`,`true`);let t=e.querySelector(`.prb-notification-open`),n=t?.getAttribute(`aria-label`);t&&n?.startsWith(`Unread. `)&&t.setAttribute(`aria-label`,n.slice(8))}d?.addEventListener(`click`,()=>{d.disabled=!0,f().then(e=>{if(e===null){d.disabled=!1;return}document.querySelectorAll(`[data-notification-id]`).forEach(p),u&&(u.textContent=n(e)),r(document,e),d.disabled=e===0})}),t(window,()=>window.location.reload());
|
package/static/reviews.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,F as r,H as i,K as a,L as o,M as s,N as c,O as ee,P as te,S as l,T as ne,V as re,X as ie,Y as ae,_ as oe,a as se,b as ce,g as le,h as ue,i as de,j as fe,k as pe,m as me,n as he,o as ge,p as u,q as _e,s as ve,t as ye,u as be,v as xe,w as Se,x as Ce,y as we,z as Te}from"./chunk-2P5KTb9d.js";import{a as Ee,i as De,n as Oe,o as ke,r as Ae,s as je,t as Me}from"./chunk-CndkgJPh.js";import{t as Ne}from"./chunk-C8kkSv38.js";function Pe(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Fe(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Ie(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Ie(e,!r);n(r)}function Ie(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Le(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Re(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:i(e.activeElement,e.body)}}function ze(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of u){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Be(e,t,n){if(!t)return;n.reveal(ze(t,n.limits));let r=new Set(ae(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Le(t,!0)}let i=a(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),_e(e,t.focus)}function Ve(e,n){let r=Promise.resolve();for(let i of e){let e=i.dataset.section;if(!t(e))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(()=>{})})}}var d=re({ownsRestore:!0});ye(`/restart`);var f=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),He=Object.fromEntries(u.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),p=document.querySelector(`.prb-index`);function Ue(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]`),We=document.querySelector(`[data-no-matches]`),v=document.querySelector(`[data-count]`),y=l();function Ge(e){return{stored:Te({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:te(e.dataset)??{at:0,kind:`created`}}}function Ke(e){return e.dataset.pinned===`true`}function b(e){let{stored:t,activity:n}=Ge(e);return Ce(Ke(e),t,n,E.filter)}var x=document.querySelector(`[data-bulk]`),qe=document.querySelector(`[data-bulk-count]`),Je=document.querySelector(`[data-bulk-delete]`),Ye=document.querySelector(`[data-bulk-question]`),S=document.querySelector(`[data-bulk-confirm]`),C=document.querySelector(`[data-bulk-actions]`),w=document.querySelector(`[data-bulk-error]`),T=document.querySelector(`[data-bulk-select-all]`),E=ne(window.location.hash),D=new Set,O=!1,k=document.querySelector(`[data-bulk-fetch]`),A={},j=[],M=!1;function N(){let t=E.query.trim().toLowerCase();E.author!==``&&![...g?.options??[]].some(e=>e.value===E.author)&&(E.author=``);let n=ce(xe(f.map(e=>({...Ue(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...E,query:t}).map(e=>e.card),b);j=n;let r=e(n,b,y),i=new Set(u.flatMap(e=>r[e].shown));for(let e of f)e.hidden=!i.has(e);for(let e of u){let t=He[e];t&&Pe(t,r[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=r[e].total<=r[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=r[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(r[e].total))}if(m&&m.value!==E.query&&(m.value=E.query),g&&(g.value=E.author,E.author===``?delete g.dataset.active:g.dataset.active=``),_||(E.pr=`any`),_&&(_.value=E.pr,E.pr===`any`?delete _.dataset.active:_.dataset.active=``),h&&(h.value=E.filter,E.filter===`all`?delete h.dataset.active:h.dataset.active=``),v){let e=n.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);v.textContent=ue(e,n.length)}We&&(We.hidden=n.length>0||f.length===0),tt(n)}var Xe=300,P=null;function F(){P!==null&&window.clearTimeout(P),P=null,d.replace(we(E),{})}function I(e,t){if(E={...E,...e},y=l(),N(),t===`now`)return F();P!==null&&window.clearTimeout(P),P=window.setTimeout(F,Xe)}window.addEventListener(`pagehide`,()=>{P!==null&&F()}),document.addEventListener(`click`,e=>{P!==null&&e.target?.closest?.(`a[href]`)&&F()},!0),m?.addEventListener(`input`,()=>I({query:m.value},`settled`)),m?.addEventListener(`keydown`,e=>{e.key===`Escape`&&m.value!==``&&(e.preventDefault(),I({query:``},`now`))}),h?.addEventListener(`change`,()=>{I({filter:h.value},`now`)}),g?.addEventListener(`change`,()=>{I({author:g.value},`now`)}),_?.addEventListener(`change`,()=>{I({pr:_.value},`now`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!u.includes(t)||(y={...y,[t]:y[t]+15},N())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{E=ne(window.location.hash),y=l(),N(),Qe()});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;Fe(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),J(n),N())})});async function Ze(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}L(n),N()}function L(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of f){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,J(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let r=t.has(e.dataset.queueId??``);e.dataset.queueAction=r?`remove`:`add`,e.textContent=n(r)}let r=document.querySelector(`[data-queue-option]`);r&&(r.textContent=ee(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&&Le(t,n.hidden!==!1)});var R=document.querySelector(`.prb-shell > main`);function Qe(){Be(document,d.current().ui,{cards:f,pane:R,limits:y,reveal:e=>{y=e,N()}})}d.setCapturer(()=>Re(document,f,y,R)),N(),Qe();function z(e){for(let t of document.querySelectorAll(`[data-menu]`)){if(t===e)continue;let n=t.querySelector(`[data-menu-panel]`),r=t.querySelector(`[data-menu-trigger]`);n&&(n.hidden=!0),r?.setAttribute(`aria-expanded`,`false`),B(t)}}function B(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(`keydown`,e=>{e.key===`Escape`&&z()}),document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return void z();let r=t.closest(`[data-menu-trigger]`);if(r){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-panel]`);if(!t)return;let i=t.hidden;z(n),B(n),t.hidden=!i,r.setAttribute(`aria-expanded`,String(i));return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),je(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),z();let t=a.closest(`[data-card]`);t&&St([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),z(),mt(o.dataset.markId,o.dataset.markStatus===`complete`);return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),z(),ht([s.dataset.lifecycleId],s.dataset.lifecycleSet);return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),z(),Ze(c.dataset.queueId,c.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);return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),B(n);return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),$e(n);return}e.preventDefault(),e.stopPropagation()});async function $e(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();et(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{et(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 et(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 V(e){O=e,e||D.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`);H(),N()}function H(){S&&(S.hidden=!0),C&&(C.hidden=!1),w&&(w.hidden=!0,w.textContent=``)}function tt(e){for(let e of f){let t=D.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!x||(x.hidden=!O,!O))return;let t=new Set(e.filter(nt).map(e=>e.dataset.id)),n=[...D].filter(e=>!t.has(e)).length;qe&&(qe.textContent=s(D.size,n)),T&&(T.textContent=fe(e.length),T.disabled=e.every(e=>D.has(e.dataset.id??``))),Je&&(Je.textContent=le(dt()));for(let e of x.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=D.size===0;k&&(k.hidden=!Oe(A,X(G())))}function nt(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>tt(j));Ve(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`,()=>{V(!O)}),T?.addEventListener(`click`,()=>{for(let e of j)e.dataset.id&&D.add(e.dataset.id);H(),N()});function U(e){D.has(e)?D.delete(e):D.add(e),H(),N()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&U(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!O)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(),U(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!O||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),U(t.dataset.id))});var W=Ne({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>j.filter(nt),enterAllowed:()=>!O,background:()=>R,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null}),rt=8;function it(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),P!==null&&F(),d.leaving(),at=!0,window.location.assign(t.href))}var at=!1,ot={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=j.slice(0,rt);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=j.length===0?`No reviews match.`:j.length>e.length?`The first ${e.length} of ${v?.textContent??j.length}`:v?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),it(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()}},st={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 ct(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 lt=Object.fromEntries(u.map(e=>[`reviews.section.${e}`,ct(e)])),ut=be(`reviews`,{...lt,"reviews.search":{available:()=>m!==null,panel:ot},"reviews.filters":{available:()=>h!==null,panel:st},"reviews.next":{run:()=>W.move(1)},"reviews.previous":{run:()=>W.move(-1)},"reviews.open":{available:()=>W.enterOpens(),run:()=>W.open()},"reviews.openInNewTab":{available:()=>W.enterOpens(),run:()=>W.openInNewTab()}},{onOpen:()=>z(),onSettle:()=>$()});function G(){return ce(f.filter(e=>D.has(e.dataset.id??``)),b)}function dt(){return G().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function K(e){w&&(w.textContent=e,w.hidden=!1)}function q(e){for(let t of x?.querySelectorAll(`button`)??[])t.disabled=e}async function ft(e){let t=[...D];if(t.length!==0){q(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return q(!1),K(`That could not be saved. The workspace server refused it.`)}catch{return q(!1),K(`The workspace server did not answer. It may have stopped.`)}pt(G(),e),q(!1),V(!1)}}function pt(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=c(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=Se(r))}}async function mt(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}pt(f.filter(t=>t.dataset.id===e),t),N()}async function ht(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),J(e));return L(n.queue),N(),!0}function J(e){let{stored:t,activity:n}=Ge(e),i=e.querySelector(`[data-lifecycle-chip]`);if(i){let r=me(Ke(e),t,n);i.textContent=r??``,i.hidden=r===void 0}for(let i of e.querySelectorAll(`[data-lifecycle-set]`)){let e=i.dataset.lifecycleSet;i.hidden=!o(e,t,n),i.textContent=r(e,t,n)}}async function gt(e){let t=[...D];if(t.length===0)return;q(!0);let n=await ht(t,e);if(q(!1),!n)return K(`That could not be saved. The workspace server refused it or did not answer.`);V(!1)}async function _t(){let e=[...D];if(e.length===0)return;q(!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 q(!1),H(),K(`Nothing was deleted. The workspace server refused it.`)}catch{return q(!1),H(),K(`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 G())r.has(e.dataset.id??``)||e.remove();f=f.filter(e=>e.isConnected),D.clear();for(let e of r)D.add(e);if(q(!1),H(),n.length===0)return V(!1);N(),K([...new Set(n.map(e=>e.error))].join(` `))}async function vt(){let e=G().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;q(!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 q(!1),H(),K(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return q(!1),H(),K(`Nothing was added. The workspace server refused it.`);L(t.queue);let n=t.refused??[];D.clear();for(let e of n)D.add(e.id);if(q(!1),H(),n.length===0)return V(!1);N(),K([...new Set(n.map(e=>e.error))].join(` `))}x?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void vt();let n=t.closest(`[data-bulk-mark]`);if(n)return void ft(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void gt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Ye&&(Ye.textContent=oe(dt())),C&&(C.hidden=!0),S&&(S.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void _t();if(t.closest(`[data-bulk-cancel-delete]`))return H();if(t.closest(`[data-bulk-cancel]`))return V(!1)}),ie(window,()=>window.location.reload());var Y=`prb-fetch-summary`;function X(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function yt(e){return Ae(X(e),A)}function bt(){for(let e of f){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Oe(A,X([e])))}}async function xt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;A=(await e.json()).targets??{}}catch{return}bt(),N()}async function St(e,t){let n=yt(e);if(M||n.repositories===0)return;M=!0;let r=[k,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Ee(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{}M=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Me),N();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:De(a)};if(a.moved>0||Q){try{window.sessionStorage.setItem(Y,JSON.stringify(o))}catch{}if(!wt())return void window.location.reload();Q=!0}de(ge(),o)}try{let e=window.sessionStorage.getItem(Y);if(e){window.sessionStorage.removeItem(Y);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&de(ge(),{kind:t.kind,text:t.text})}}catch{}k?.addEventListener(`click`,()=>void St(G(),k)),xt();var Ct=document.body.dataset.indexRevision??``,Z=document.body.dataset.live===`true`?Date.now():0,Q=!1;function wt(){return D.size>0||document.activeElement===m||M||ut.isOpen()||at}function $(){Q&&!wt()&&window.location.reload()}async function Tt(){try{let e=await fetch(`/revision`);if(e.ok){ve(document,!0);let t=await e.json();he(document,t),t.live&&Z===0&&(Z=Date.now()),t.live||(Z=0);let n=pe(Ct,t.revision??``,wt());if(n===`reload`)return void window.location.reload();n===`hold`&&(Q=!0)}}catch{ve(document,!1)}window.setTimeout(()=>void Tt(),ke(Z===0?2**53-1:Date.now()-Z))}Tt(),m?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),se();
|
|
1
|
+
import{A as e,C as t,D as n,F as r,G as i,H as a,J as o,K as s,L as ee,M as te,N as ne,O as re,P as ie,S as c,T as ae,V as oe,X as se,_ as ce,a as le,b as ue,g as de,h as fe,i as pe,j as me,k as he,m as ge,n as _e,o as ve,p as l,s as ye,t as be,u as xe,v as Se,w as Ce,x as we,y as Te,z as Ee}from"./chunk-DqEA-C0S.js";import{a as De,c as Oe,i as ke,n as Ae,o as je,r as Me,s as Ne,t as Pe}from"./chunk-BsU84lX4.js";import{t as Fe}from"./chunk-C8kkSv38.js";function Ie(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Le(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Re(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Re(e,!r);n(r)}function Re(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function ze(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Be(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:a(e.activeElement,e.body)}}function Ve(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of l){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function He(e,t,n){if(!t)return;n.reveal(Ve(t,n.limits));let r=new Set(o(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&ze(t,!0)}let a=i(t,`main`);n.pane&&a!==null&&(n.pane.scrollTop=a),s(e,t.focus)}function Ue(e,n){let r=Promise.resolve();for(let i of e){let e=i.dataset.section;if(!t(e))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(()=>{})})}}var u=oe({ownsRestore:!0});be(`/restart`);var d=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),We=Object.fromEntries(l.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),f=document.querySelector(`.prb-index`);function Ge(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 p=document.querySelector(`[data-search]`),m=document.querySelector(`[data-status-filter]`),h=document.querySelector(`[data-author-filter]`),g=document.querySelector(`[data-pr-filter]`),Ke=document.querySelector(`[data-no-matches]`),_=document.querySelector(`[data-count]`),v=c();function qe(e){return{stored:Ee({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:ie(e.dataset)??{at:0,kind:`created`}}}function Je(e){return e.dataset.pinned===`true`}function y(e){let{stored:t,activity:n}=qe(e);return we(Je(e),t,n,T.filter)}var b=document.querySelector(`[data-bulk]`),Ye=document.querySelector(`[data-bulk-count]`),Xe=document.querySelector(`[data-bulk-delete]`),Ze=document.querySelector(`[data-bulk-question]`),x=document.querySelector(`[data-bulk-confirm]`),S=document.querySelector(`[data-bulk-actions]`),C=document.querySelector(`[data-bulk-error]`),w=document.querySelector(`[data-bulk-select-all]`),T=ae(window.location.hash),E=new Set,D=!1,O=document.querySelector(`[data-bulk-fetch]`),k={},A=[],j=!1;function M(){let t=T.query.trim().toLowerCase();T.author!==``&&![...h?.options??[]].some(e=>e.value===T.author)&&(T.author=``);let n=ue(Se(d.map(e=>({...Ge(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...T,query:t}).map(e=>e.card),y);A=n;let r=e(n,y,v),i=new Set(l.flatMap(e=>r[e].shown));for(let e of d)e.hidden=!i.has(e);for(let e of l){let t=We[e];t&&Ie(t,r[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=r[e].total<=r[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=r[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(r[e].total))}if(p&&p.value!==T.query&&(p.value=T.query),h&&(h.value=T.author,T.author===``?delete h.dataset.active:h.dataset.active=``),g||(T.pr=`any`),g&&(g.value=T.pr,T.pr===`any`?delete g.dataset.active:g.dataset.active=``),m&&(m.value=T.filter,T.filter===`all`?delete m.dataset.active:m.dataset.active=``),_){let e=n.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);_.textContent=fe(e,n.length)}Ke&&(Ke.hidden=n.length>0||d.length===0),rt(n)}var Qe=300,N=null;function P(){N!==null&&window.clearTimeout(N),N=null,u.replace(Te(T),{})}function F(e,t){if(T={...T,...e},v=c(),M(),t===`now`)return P();N!==null&&window.clearTimeout(N),N=window.setTimeout(P,Qe)}window.addEventListener(`pagehide`,()=>{N!==null&&P()}),document.addEventListener(`click`,e=>{N!==null&&e.target?.closest?.(`a[href]`)&&P()},!0),p?.addEventListener(`input`,()=>F({query:p.value},`settled`)),p?.addEventListener(`keydown`,e=>{e.key===`Escape`&&p.value!==``&&(e.preventDefault(),F({query:``},`now`))}),m?.addEventListener(`change`,()=>{F({filter:m.value},`now`)}),h?.addEventListener(`change`,()=>{F({author:h.value},`now`)}),g?.addEventListener(`change`,()=>{F({pr:g.value},`now`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!l.includes(t)||(v={...v,[t]:v[t]+15},M())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{T=ae(window.location.hash),v=c(),M(),et()});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;Le(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),q(n),M())})});async function $e(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}I(n),M()}function I(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,q(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let r=t.has(e.dataset.queueId??``);e.dataset.queueAction=r?`remove`:`add`,e.textContent=n(r)}let r=document.querySelector(`[data-queue-option]`);r&&(r.textContent=re(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&&ze(t,n.hidden!==!1)});var L=document.querySelector(`.prb-shell > main`);function et(){He(document,u.current().ui,{cards:d,pane:L,limits:v,reveal:e=>{v=e,M()}})}u.setCapturer(()=>Be(document,d,v,L)),M(),et();var R=Ne(document,{onOpen:z,onClose:z});function z(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(),Oe(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),R.closeAll();let t=i.closest(`[data-card]`);t&&Tt([t]);return}let a=t.closest(`[data-mark-status]`);if(a?.dataset.markId){e.preventDefault(),e.stopPropagation(),R.closeAll(),_t(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),R.closeAll(),vt([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),R.closeAll(),$e(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(),z(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),tt(n);return}e.preventDefault(),e.stopPropagation()});async function tt(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();nt(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{nt(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 nt(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 B(e){D=e,e||E.clear(),f&&(e?f.dataset.selecting=``:delete f.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`);V(),M()}function V(){x&&(x.hidden=!0),S&&(S.hidden=!1),C&&(C.hidden=!0,C.textContent=``)}function rt(e){for(let e of d){let t=E.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!b||(b.hidden=!D,!D))return;let t=new Set(e.filter(it).map(e=>e.dataset.id)),n=[...E].filter(e=>!t.has(e)).length;Ye&&(Ye.textContent=te(E.size,n)),w&&(w.textContent=me(e.length),w.disabled=e.every(e=>E.has(e.dataset.id??``))),Xe&&(Xe.textContent=de(mt()));for(let e of b.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=E.size===0;O&&(O.hidden=!Ae(k,Y(W())))}function it(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>rt(A));Ue(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`,()=>{B(!D)}),w?.addEventListener(`click`,()=>{for(let e of A)e.dataset.id&&E.add(e.dataset.id);V(),M()});function H(e){E.has(e)?E.delete(e):E.add(e),V(),M()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&H(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!D)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(),H(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!D||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),H(t.dataset.id))});var U=Fe({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>A.filter(it),enterAllowed:()=>!D,background:()=>L,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function at(){return U.holdsKeys()?U.current()?.querySelector(`:scope > [data-menu]`)??null:null}var ot=8;function st(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),N!==null&&P(),u.leaving(),ct=!0,window.location.assign(t.href))}var ct=!1,lt={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=p?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=p?.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=A.slice(0,ot);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=A.length===0?`No reviews match.`:A.length>e.length?`The first ${e.length} of ${_?.textContent??A.length}`:_?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=d.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),st(n))};n.addEventListener(`input`,()=>{p&&(p.value=n.value,p.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()}},ut={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=_?.textContent??``},r=[m,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 dt(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 ft=Object.fromEntries(l.map(e=>[`reviews.section.${e}`,dt(e)])),pt=xe(`reviews`,{...ft,"reviews.search":{available:()=>p!==null,panel:lt},"reviews.filters":{available:()=>m!==null,panel:ut},"reviews.next":{run:()=>U.move(1)},"reviews.previous":{run:()=>U.move(-1)},"reviews.open":{available:()=>U.enterOpens(),run:()=>U.open()},"reviews.openInNewTab":{available:()=>U.enterOpens(),run:()=>U.openInNewTab()},"reviews.menu":{available:()=>at()!==null,run:()=>{let e=at();e&&R.open(e,{focusFirst:!0,returnFocus:()=>U.refocus()})}}},{onOpen:()=>R.closeAll(),onSettle:()=>$()});function W(){return ue(d.filter(e=>E.has(e.dataset.id??``)),y)}function mt(){return W().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function G(e){C&&(C.textContent=e,C.hidden=!1)}function K(e){for(let t of b?.querySelectorAll(`button`)??[])t.disabled=e}async function ht(e){let t=[...E];if(t.length!==0){K(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return K(!1),G(`That could not be saved. The workspace server refused it.`)}catch{return K(!1),G(`The workspace server did not answer. It may have stopped.`)}gt(W(),e),K(!1),B(!1)}}function gt(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=ne(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=Ce(r))}}async function _t(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}gt(d.filter(t=>t.dataset.id===e),t),M()}async function vt(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),q(e));return I(n.queue),M(),!0}function q(e){let{stored:t,activity:n}=qe(e),i=e.querySelector(`[data-lifecycle-chip]`);if(i){let r=ge(Je(e),t,n);i.textContent=r??``,i.hidden=r===void 0}for(let i of e.querySelectorAll(`[data-lifecycle-set]`)){let e=i.dataset.lifecycleSet;i.hidden=!ee(e,t,n),i.textContent=r(e,t,n)}}async function yt(e){let t=[...E];if(t.length===0)return;K(!0);let n=await vt(t,e);if(K(!1),!n)return G(`That could not be saved. The workspace server refused it or did not answer.`);B(!1)}async function bt(){let e=[...E];if(e.length===0)return;K(!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 K(!1),V(),G(`Nothing was deleted. The workspace server refused it.`)}catch{return K(!1),V(),G(`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 W())r.has(e.dataset.id??``)||e.remove();d=d.filter(e=>e.isConnected),E.clear();for(let e of r)E.add(e);if(K(!1),V(),n.length===0)return B(!1);M(),G([...new Set(n.map(e=>e.error))].join(` `))}async function xt(){let e=W().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;K(!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 K(!1),V(),G(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return K(!1),V(),G(`Nothing was added. The workspace server refused it.`);I(t.queue);let n=t.refused??[];E.clear();for(let e of n)E.add(e.id);if(K(!1),V(),n.length===0)return B(!1);M(),G([...new Set(n.map(e=>e.error))].join(` `))}b?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void xt();let n=t.closest(`[data-bulk-mark]`);if(n)return void ht(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void yt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Ze&&(Ze.textContent=ce(mt())),S&&(S.hidden=!0),x&&(x.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void bt();if(t.closest(`[data-bulk-cancel-delete]`))return V();if(t.closest(`[data-bulk-cancel]`))return B(!1)}),se(window,()=>window.location.reload());var J=`prb-fetch-summary`;function Y(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function St(e){return Me(Y(e),k)}function Ct(){for(let e of d){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Ae(k,Y([e])))}}async function wt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;k=(await e.json()).targets??{}}catch{return}Ct(),M()}async function Tt(e,t){let n=St(e);if(j||n.repositories===0)return;j=!0;let r=[O,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=De(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{}j=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Pe),M();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:ke(a)};if(a.moved>0||Z){try{window.sessionStorage.setItem(J,JSON.stringify(o))}catch{}if(!Q())return void window.location.reload();Z=!0}pe(ve(),o)}try{let e=window.sessionStorage.getItem(J);if(e){window.sessionStorage.removeItem(J);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&pe(ve(),{kind:t.kind,text:t.text})}}catch{}O?.addEventListener(`click`,()=>void Tt(W(),O)),wt();var Et=document.body.dataset.indexRevision??``,X=document.body.dataset.live===`true`?Date.now():0,Z=!1;function Q(){return E.size>0||document.activeElement===p||j||pt.isOpen()||ct}function $(){Z&&!Q()&&window.location.reload()}async function Dt(){try{let e=await fetch(`/revision`);if(e.ok){ye(document,!0);let t=await e.json();_e(document,t),t.live&&X===0&&(X=Date.now()),t.live||(X=0);let n=he(Et,t.revision??``,Q());if(n===`reload`)return void window.location.reload();n===`hold`&&(Z=!0)}}catch{ye(document,!1)}window.setTimeout(()=>void Dt(),je(X===0?2**53-1:Date.now()-X))}Dt(),p?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),le();
|
package/static/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,X as t,a as n,c as r,t as i,u as a}from"./chunk-
|
|
1
|
+
import{V as e,X as t,a as n,c as r,t as i,u as a}from"./chunk-DqEA-C0S.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(e){document.body.dataset.serverStopped=`true`,r(document,`unreachable`);let t=document.createElement(`div`);t.className=`prb-stopped-notice`,t.setAttribute(`role`,`status`);let n=document.body.dataset.wayBack;t.textContent=n?`Workspace server stopped. This page is no longer being served. Run ${n} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(t);for(let t of e)t.disabled=!0,t.classList.contains(`prb-strip-action`)||(t.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`),e(),a(`global`,{}),i(`/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(),t(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -1810,7 +1810,15 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1810
1810
|
background: var(--brand);
|
|
1811
1811
|
color: var(--on-brand);
|
|
1812
1812
|
}
|
|
1813
|
+
/* Buddy's answer on a card of its own, so the log reads as turns: purple for the reviewer, a
|
|
1814
|
+
neutral card for Buddy. Raised as cards are, white on the pane in the light theme; in the dark
|
|
1815
|
+
one --surface-raised is the pane's own colour, so the border is what draws it, as for every
|
|
1816
|
+
card there. The corner it hangs from mirrors the question's. */
|
|
1813
1817
|
.prb-msg-assistant {
|
|
1818
|
+
padding: 10px 14px;
|
|
1819
|
+
border: 1px solid var(--border);
|
|
1820
|
+
border-radius: 12px 12px 12px 2px;
|
|
1821
|
+
background: var(--surface-raised);
|
|
1814
1822
|
color: var(--text-secondary);
|
|
1815
1823
|
/* The assistant is asked to cite `path/to/file.rb:42`, and a long path is one unbreakable token.
|
|
1816
1824
|
Without this the panel scrolls sideways and the citation is cut off mid-path — which breaks
|