prreviewbuddy 0.77.1 → 0.79.0
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 +43 -0
- package/dist/{delete_review-BHOzMQ0_.js → delete_review-DwF1NMJ4.js} +1 -1
- package/dist/main.js +1 -1
- package/dist/server.js +1368 -1076
- package/package.json +1 -1
- package/static/{chunk-BoQsVuYd.js → chunk-B6LyLjZ7.js} +1 -1
- package/static/chunk-DYrelqtW.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 +85 -4
- package/static/sidebar.css +7 -1
- package/static/workspace.js +80 -80
- package/static/chunk-CEQv4zVy.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prreviewbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.79.0",
|
|
4
4
|
"description": "Understand code changes before you approve them. Local branch and pull request reviews with Claude Code, Codex or Gemini CLI.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"homepage": "https://prreviewbuddy.com",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{$ as e}from"./chunk-DYrelqtW.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(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)].filter(e=>!e.closest(`[hidden]`)):[]}function o(e){let t=r(e);return t?[...t.querySelectorAll(n)].filter(e=>!e.closest(`[hidden]`)):[]}var s=`data-menu-placement`;function c(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 l=8,u=120;function d(e){let t=r(e),n=i(e);if(!t||!n)return;t.removeAttribute(s),t.style.removeProperty(`max-height`),t.style.removeProperty(`overflow-y`),t.style.removeProperty(`box-sizing`),t.scrollTop=0;let a=t.getBoundingClientRect(),o=n.getBoundingClientRect(),d=c(e),f=Math.max(0,a.top-o.bottom),p=d.bottom-o.bottom-f-l,m=o.top-d.top-f-l,h=a.height,g=h<=p?`below`:h<=m||m>p?`above`:`below`;g===`above`&&t.setAttribute(s,`above`);let _=g===`above`?m:p;h<=_||(t.style.boxSizing=`border-box`,t.style.maxHeight=`${Math.max(Math.floor(_),u)}px`,t.style.overflowY=`auto`)}function f(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey?e.key===`j`?`ArrowDown`:e.key===`k`?`ArrowUp`:e.key:e.key}function p(t,n={}){let s=null,c=null,l=n.within?`${n.within} [data-menu]`:`[data-menu]`,u=e=>e&&(!n.within||e.closest(n.within))?e:null,p=(e,t={})=>{let a=r(e);if(!a||a.hidden)return;a.hidden=!0;let o=i(e);o?.setAttribute(`aria-expanded`,`false`);let l=s===e?c:null;s===e&&(s=null,c=null),n.onClose?.(e),t.returnFocus&&(l??(()=>o?.focus()))()},m=()=>{for(let e of t.querySelectorAll(l))p(e)},h=(e,t,a=null)=>{let l=r(e);l&&(m(),c=a,n.onOpen?.(e),l.hidden=!1,d(e),i(e)?.setAttribute(`aria-expanded`,`true`),s=e,t&&o(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,n=u(t?.closest?.(`[data-menu]`)??null);if(!n){m();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;r(n)?.hidden?h(n,t):p(n);return}s&&s!==n&&p(s)}),t.addEventListener(`keydown`,t=>{if(s&&!s.isConnected&&(s=null),!s)return;let n=s;if(t.key===`Escape`){t.preventDefault(),p(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){if(n.hasAttribute(`data-menu-form`)){let e=a(n),r=e.indexOf(t.target);if(e.length>0){t.preventDefault(),e[(r+(t.shiftKey?-1:1)+e.length)%e.length].focus();return}}p(n);return}if(e(t.target))return;let r=o(n);if(r.length===0)return;let i=r.indexOf(t.target),c=f(t),l=c===`ArrowDown`?r[(i+1)%r.length]:c===`ArrowUp`?r[(i-1+r.length)%r.length]:c===`Home`?r[0]:c===`End`?r[r.length-1]:null;l&&(t.preventDefault(),l.focus(),l.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>h(e,t.focusFirst===!0,t.returnFocus??null),close:p,closeAll:m}}function m(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}var h=`Fetch selected`;function g(e){return`${e} ${e===1?`repository`:`repositories`}`}function _(e){return`Fetching ${g(e)}…`}function v(e){return e.fetched===0?`Could not fetch ${g(e.repositories)}`:e.fetched===e.repositories?`Fetched ${g(e.repositories)}`:`Fetched ${e.fetched} of ${g(e.repositories)}`}function y(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 b(e,t){return y(t,e).repositories>0}export{_ as a,t as c,v as i,b as n,m as o,y as r,p as s,h as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){e.addEventListener(`pageshow`,e=>{e.persisted&&t()})}var t=[`checkbox`,`radio`,`button`,`submit`,`reset`].map(e=>`:not([type="${e}"])`).join(``);function n(e){if(!e||typeof e.closest!=`function`)return!1;let n=e;return n.isContentEditable?!0:n.closest(`input${t}, textarea, select, [contenteditable=""], [contenteditable="true"]`)!==null}var r=`prbNav`,i=`prb-workspace`,a=`prb-nav-session`,o=`prb-nav-head`,s=`prb-nav-handoff`,c=`prb-nav-places`,l=200,u=15e3,d=`unstored`;function f(e){if(!e||typeof e!=`object`)return null;let t=e[r];if(!t||typeof t!=`object`)return null;let{v:n,owner:i,session:a,idx:o,id:s,ui:c}=t;if(n!==1||i!==`prb-workspace`||typeof a!=`string`||a===``||typeof o!=`number`||!Number.isInteger(o)||o<0)return null;let l=c&&typeof c==`object`&&!Array.isArray(c)?c:null;return{v:n,owner:i,session:a,idx:o,...typeof s==`string`&&s!==``?{id:s}:{},ui:l}}function p(e){if(!e||typeof e!=`object`)return{};let{[r]:t,...n}=e;return n}function m(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.owner===`prb-workspace`&&n.session===t}function h(e,t){try{return e?.getItem(t)??null}catch{return null}}function g(e,t,n){try{n===null?e?.removeItem(t):e?.setItem(t,n)}catch{}}function _(e){let{history:t,storage:n,location:_}=e,v=e.navigation??null,y=[],b=null,x=null,S=null,C=t=>{S!==null&&e.clearTimeout(S),S=t?t():null,e.capturePending(S!==null)},w=null,T=(()=>{if(!n)return d;let t=h(n,a);if(t)return t;let r=e.uuid();return g(n,a,r),h(n,a)===r?r:d})(),E=()=>`${_.pathname}${_.search}`,D=e=>`${E()}${e}`,O=()=>{try{v?.updateCurrentEntry({state:{owner:i,session:T}})}catch{}},k=()=>{for(let e of y)e()},A=(e,n)=>{n===void 0?t.replaceState(e,``):t.replaceState(e,``,n),O()},j=()=>Number(h(n,o)??0)||0,M=()=>{try{let e=JSON.parse(h(n,c)??`{}`);return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{return{}}},ee=(e,t)=>{if(!e||!n)return;let r=M();delete r[e],r[e]=t;let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-l)))delete r[e];g(n,c,JSON.stringify(r))},te=e=>{if(!e)return null;let t=e.id?M()[e.id]:void 0;return t&&typeof t==`object`&&!Array.isArray(t)?t:e.ui},ne=()=>{if(!b)return null;try{return b()}catch{return null}},N=()=>{let a=f(t.state);if(a&&a.session===T&&a.id){w=a.id,O();return}let c=a?.idx??0;if(!a){let t=h(n,s);g(n,s,null),c=0;try{let n=t?JSON.parse(t):null,r=e.referrer!==``&&new URL(e.referrer).origin===_.origin;n&&r&&n.session===T&&typeof n.idx==`number`&&typeof n.at==`number`&&e.now()-n.at<u&&(c=n.idx+1)}catch{c=0}g(n,o,String(c))}let l=a?.id??e.uuid();w=l;let d={v:1,owner:i,session:T,idx:c,id:l,ui:a?.ui??null};A({...p(t.state),[r]:d})},P=()=>f(t.state)??{v:1,owner:`prb-workspace`,session:T,idx:0,ui:null},F=()=>{S!==null&&C(null);let e=ne();if(!e||!w)return;let n=JSON.stringify(e),i=f(t.state);if(!i||i.id!==w){ee(w,e);return}(n!==x||JSON.stringify(i.ui)!==n)&&(x=n,ee(w,e),A({...p(t.state),[r]:{...i,ui:e}}))},I=e=>{if(v){let t=v.currentEntry?.index;if(typeof t!=`number`||t<0)return!1;let n=v.entries()[t+e];if(!n)return!1;try{return m(n.getState(),T)}catch{return!1}}let n=f(t.state);return!n||n.session!==T||t.length<2?!1:e===-1?n.idx>0:n.idx<j()};N();try{t.scrollRestoration=`manual`}catch{}return{session:T,current(){return{route:p(t.state),ui:te(f(t.state))}},push(a,s){if(a!==``&&!a.startsWith(`#`))throw Error(`Workspace history pushes within this document only; "${a}" is not a fragment.`);if(D(a)===`${E()}${_.hash}`)return!1;F();let c=P().idx+1;g(n,o,String(c));let l=e.uuid(),u={v:1,owner:i,session:T,idx:c,id:l,ui:null};return w=l,t.pushState({...p(s),[r]:u},``,D(a)),x=null,O(),k(),!0},replace(e,t){if(e!==``&&!e.startsWith(`#`))throw Error(`Workspace history replaces within this document only; "${e}" is not a fragment.`);A({...p(t),[r]:P()},D(e))},setCapturer(e){b=e},captureNow:F,scheduleCapture(){C(()=>e.setTimeout(F,250))},leaving(){F(),g(n,s,JSON.stringify({session:T,idx:P().idx,at:e.now()}))},canGoBack:()=>I(-1),canGoForward:()=>I(1),back(){return I(-1)?(F(),t.back(),!0):!1},forward(){return I(1)?(F(),t.forward(),!0):!1},moved(){S!==null&&C(null);let e=ne();e&&ee(w,e),x=null,w=f(t.state)?.id??null;let n=f(t.state);!n||!n.id||n.session!==T?N():O(),k()},onAvailability(e){y.push(e)}}}function v(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function y(e){let t=e?.userAgentData?.platform??e?.platform??``;return/mac|iphone|ipad/i.test(t)}function b(e,t,r){if(e.defaultPrevented||e.isComposing)return null;let i=t?e.metaKey:e.ctrlKey,a=t?e.ctrlKey:e.metaKey;if(!i||a||e.altKey||e.shiftKey)return null;let o=e.key===`[`||e.key!==`]`&&e.code===`BracketLeft`?`back`:e.key===`]`||e.code===`BracketRight`?`forward`:null;return!o||n(e.target)||r.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)?null:o}var x=[`data-id`,`data-finding-card`,`data-goto-section`,`data-view-nav`,`data-file`,`data-line`,`data-history`,`data-history-toggle`,`data-load-more`,`data-select`,`data-pin`,`data-focus-toggle`,`data-ask-toggle`,`data-rail-toggle`,`data-search`,`data-status-filter`,`data-author-filter`,`data-pr-filter`,`data-card`,`data-notification-id`,`data-guide-section`,`data-guide-detail`,`data-view`];function S(e){if(e.id)return{attrs:[[`id`,e.id]]};let t=x.filter(t=>e.hasAttribute(t)).map(t=>[t,e.getAttribute(t)??``]);return t.length>0?{attrs:t}:null}function C(e,t){if(!e||e===t||!t.contains(e))return null;let n=[],r=e;for(;r&&r!==t&&n.length<3;){let t=S(r);t?n.unshift(t):r===e&&n.unshift({tag:r.tagName.toLowerCase(),...r.classList[0]?{cls:r.classList[0]}:{}}),r=r.parentElement}return n.length>0?n:null}function w(e){if(!e||typeof e!=`object`)return!1;let{attrs:t,tag:n,cls:r}=e;return t===void 0?typeof n==`string`&&/^[a-z][a-z0-9-]*$/.test(n)&&(r===void 0||typeof r==`string`):Array.isArray(t)&&t.length>0&&t.every(e=>Array.isArray(e)&&e.length===2&&x.concat(`id`).includes(e[0])&&typeof e[1]==`string`)}function T(e,t){return t.attrs?t.attrs.every(([t,n])=>e.getAttribute(t)===n):e.tagName.toLowerCase()===t.tag&&(t.cls===void 0||e.classList.contains(t.cls))}function E(e,t){let n=t.attrs?`[${t.attrs[0][0]}]`:t.tag;for(let r of e.querySelectorAll(n))if(T(r,t))return r;return null}function D(e,t){if(!Array.isArray(t)||t.length===0||!t.every(w))return null;let n=null,r=e;for(let e of t){let t=E(r,e);if(!t)return n;n=t,r=t}return n}function O(e,t){let n=D(e,t);if(n){if(n.tabIndex<0&&!n.matches(`a[href], button, input, select, textarea, summary`)){n.querySelector(`a[href], button:not([disabled]), input, select, textarea, [tabindex="0"]`)?.focus({preventScroll:!0});return}n.focus({preventScroll:!0})}}function k(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)&&n>=0?n:null}function A(e,t){let n=e?.[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function j(e){try{return e.sessionStorage}catch{return null}}function M(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function ee(e,t){if(e.target&&e.target!==`_self`||e.hasAttribute(`download`))return!1;let n;try{n=new URL(e.getAttribute(`href`)??``,t.href)}catch{return!1}return n.origin===t.origin?n.pathname!==t.pathname||n.search!==t.search:!1}function te(e,t){let n=e.querySelector(`[data-nav-announce]`);!n||!t||(n.textContent=``,e.defaultView?.setTimeout(()=>{n.textContent=t},50))}function ne(e={},t=window,n=document){let r=t.navigation??null,i=_({history:t.history,navigation:r,storage:j(t),location:t.location,referrer:n.referrer,now:()=>Date.now(),uuid:()=>t.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,setTimeout:(e,n)=>t.setTimeout(e,n),clearTimeout:e=>t.clearTimeout(e),capturePending:e=>n.documentElement.toggleAttribute(`data-nav-capture-pending`,e)}),a=y(t.navigator),o=[...n.querySelectorAll(`[data-history]`)],s=()=>{for(let e of o)e.disabled=!((e.dataset.history===`forward`?`forward`:`back`)==`back`?i.canGoBack():i.canGoForward())};for(let e of o){let t=e.dataset.history===`forward`?`forward`:`back`;e.dataset.tip=M(t,a),e.addEventListener(`click`,()=>{t===`back`?i.back():i.forward()})}s(),i.onAvailability(s),r?.addEventListener?.(`currententrychange`,s),t.addEventListener(`keydown`,e=>{let t=b(e,a,n);t&&(e.preventDefault(),t===`back`?i.back():i.forward())}),t.addEventListener(`popstate`,()=>i.moved()),t.addEventListener(`pagehide`,()=>i.captureNow()),n.addEventListener(`visibilitychange`,()=>{n.visibilityState===`hidden`&&i.captureNow()}),n.addEventListener(`click`,e=>{let n=e.target?.closest?.(`a[href]`);!n||!v(e)||e.defaultPrevented||ee(n,t.location)&&i.leaving()},!0),n.addEventListener(`pointerdown`,e=>{(e.button===3||e.button===4)&&i.captureNow()},!0);let c=()=>i.scheduleCapture();for(let e of[`scroll`,`click`,`input`,`toggle`,`focusin`])n.addEventListener(e,c,{capture:!0,passive:!0});if(!e.ownsRestore){let e=n.querySelector(`.prb-shell > main`);i.setCapturer(()=>({main:e?.scrollTop??0,focus:C(n.activeElement,n.body)}));let{ui:t}=i.current(),r=k(t,`main`);e&&r!==null&&(e.scrollTop=r),t&&O(n,t.focus)}return i}var N=[{id:`active`,name:`Active`,action:`Move to active`},{id:`waiting`,name:`Waiting`,action:`Mark waiting`},{id:`done`,name:`Done`,action:`Mark done`}];function P(e){if(typeof e!=`object`||!e)return;let{state:t,at:n}=e;if(!(t!==`waiting`&&t!==`done`||typeof n!=`number`||!Number.isFinite(n)))return{state:t,at:n}}function F(e){return N.find(t=>t.id===e).action}function I(e,t){if(!e)return;let n=L(e,t);return n===void 0?{text:N.find(t=>t.id===e.state).name,changed:!1}:{text:n,changed:!0}}var re=[`created`,`updated`,`merged`,`closed`,`reopened`];function ie(e){return ae({at:Number(e.activityAt),kind:e.activityKind,...e.activityMovedAt===void 0?{}:{movedAt:Number(e.activityMovedAt)}})}function ae(e){if(typeof e!=`object`||!e)return;let{at:t,kind:n,movedAt:r}=e;if(!(typeof t!=`number`||!Number.isFinite(t)||!re.includes(n)))return{at:t,kind:n,...typeof r==`number`&&Number.isFinite(r)?{movedAt:r}:{}}}function oe(e,t){return!e||e.state===`waiting`&&se(e,t)?`active`:e.state}function L(e,t){if(!e||!t)return;if(e.state===`waiting`)return se(e,t)?`Changed while waiting`:void 0;if(t.kind===`reopened`&&t.at>e.at)return`Reopened since done`;let n=t.movedAt??(t.kind===`updated`?t.at:void 0);return n!==void 0&&n>e.at?`Changed since done`:void 0}function se(e,t){return t!==void 0&&t.kind!==`created`&&t.at>e.at}function ce(e,t,n){return L(t,n)!==void 0||e!==(t?.state??`active`)}function le(e,t,n){return e===`done`&&t?.state===`done`&&L(t,n)!==void 0?`Keep done`:F(e)}var ue=[`pinned`,`active`,`waiting`,`done`],de=[`in-progress`,...ue],fe=e=>N.find(t=>t.id===e).name,pe={"in-progress":{title:`In progress`,key:`i`},pinned:{title:`Pinned`,key:`p`},active:{title:fe(`active`),key:`a`},waiting:{title:fe(`waiting`),key:`w`},done:{title:fe(`done`),key:`d`}};function me(e){return typeof e==`string`&&de.includes(e)}function he(e,t,n,r){return e&&!_e(r)?`pinned`:oe(t,n)}function ge(e,t){let n=e=>ue.indexOf(t(e));return[...e].sort((e,t)=>n(e)-n(t))}function _e(e){return e===`queue`}function ve(e,t,n){return e?I(t,n)?.text:L(t,n)}var ye=[`all`,`queue`,`in-progress`,`complete`],be=[`any`,`open`,`merged`,`closed`],xe=[`q`,`f`,`by`,`pr`,`page`],R={query:``,filter:`all`,author:``,pr:`any`};function Se(e){return e.query.trim()!==``||e.filter!==R.filter||e.author!==R.author||e.pr!==R.pr}function Ce(e,t,n){let r=n===void 0?`${e} review${e===1?``:`s`}`:`${e} of ${n} review${n===1?``:`s`}`;return e===t?r:`${r} · ${t} branch${t===1?``:`es`}`}function we(e,t,n){let r={pinned:{shown:[],total:0},active:{shown:[],total:0},waiting:{shown:[],total:0},done:{shown:[],total:0}};for(let i of e){let e=t(i),a=r[e];a.total<n[e]&&a.shown.push(i),a.total+=1}return r}function Te(){return{pinned:15,active:15,waiting:15,done:15}}function Ee(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!xe.includes(e)&&/^[a-z][a-z0-9_-]*$/i.test(e)&&n!==``&&i.append(e,n);let a=i.toString();return{query:t.get(`q`)??``,filter:ye.includes(n)?n:`all`,author:t.get(`by`)??``,pr:be.includes(r)?r:`any`,...a===``?{}:{extra:a}}}function De(e){let t=new URLSearchParams;e.query!==``&&t.set(`q`,e.query),e.filter!==`all`&&t.set(`f`,e.filter),e.author!==``&&t.set(`by`,e.author),e.pr!==`any`&&t.set(`pr`,e.pr);for(let[n,r]of new URLSearchParams(e.extra??``))xe.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Oe(e,t){return t===`all`||t===`queue`?!0:t===`in-progress`?e.status!==`complete`:e.status===t}function ke(e,t){return t===`any`||e.prState===t}function Ae(e,t){return t===``||e===t}function je(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function Me(e){return e?`Unpin review`:`Pin review`}function Ne(e){return e?`Remove from review queue`:`Add to review queue`}function Pe(e,t){let n=t.query.trim().toLowerCase();return Fe(e.filter(e=>(!n||e.searchText.includes(n))&&Oe(e,t.filter)&&Ae(e.author,t.author)&&ke(e,t.pr)),t.filter)}function Fe(e,t){return _e(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function Ie(e){return e===0?`Queue`:`Queue (${e})`}function Le(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function Re(e,t){if(e===0)return`Nothing selected`;let n=`${e} selected`;return t>0?`${n} · ${t} not shown`:n}function ze(e){return e===0?`Select all`:`Select all ${e}`}function Be(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function Ve(e){return`${Be(e)}?`}function He(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var Ue=[{id:`global`,label:`Global`},{id:`reviews`,label:`Reviews list`},{id:`notifications`,label:`Activity list`},{id:`findings`,label:`Issues and Questions`},{id:`sections`,label:`Review sections`},{id:`buddy`,label:`Buddy AI`},{id:`actions`,label:`Review actions`},{id:`workspace`,label:`Workspace and focus`}],z=(...e)=>({kind:`chord`,keys:e}),B=(e,t)=>({kind:`key`,key:e,...t?{shift:t}:{}}),We=e=>({kind:`key`,key:e,primary:!0}),Ge=de.map(e=>({id:`reviews.section.${e}`,label:`${pe[e].title} section`,group:`reviews`,page:`reviews`,binding:z(`l`,pe[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 Activity`,group:`global`,page:`global`,binding:z(`n`)},{id:`help.shortcuts`,label:`Keyboard shortcuts`,group:`global`,page:`global`,binding:z(`?`)},{id:`reviews.search`,label:`Search reviews`,group:`reviews`,page:`reviews`,binding:z(`s`)},{id:`reviews.filters`,label:`Filters`,group:`reviews`,page:`reviews`,binding:z(`f`)},...Ge,{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 activity`,group:`notifications`,page:`notifications`,binding:B(`j`)},{id:`notifications.previous`,label:`Previous activity`,group:`notifications`,page:`notifications`,binding:B(`k`)},{id:`notifications.open`,label:`Open activity`,group:`notifications`,page:`notifications`,binding:B(`Enter`)},{id:`notifications.openInNewTab`,label:`Open activity in new tab`,group:`notifications`,page:`notifications`,binding:B(`Enter`,!0)},{id:`review.findings.next`,label:`Next card`,group:`findings`,page:`review`,binding:B(`j`)},{id:`review.findings.previous`,label:`Previous card`,group:`findings`,page:`review`,binding:B(`k`)},{id:`review.findings.askBuddy`,label:`Ask Buddy about the card`,group:`findings`,page:`review`,binding:B(` `)},{id:`review.findings.copy`,label:`Copy the card`,group:`findings`,page:`review`,binding:We(`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:We(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:We(`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`)}],Ke=[{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 qe(e,t=V){return t.filter(t=>t.page===`global`||t.page===e)}function Je(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:Ke.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 qe(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 Ye(e){return qe(e).filter(e=>e.binding.kind===`key`)}var Xe=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function Ze(e){return Xe.has(e.key)}function Qe(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 $e=new Set(V.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function et(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=Qe(e);return i!==null&&$e.has(i)?i:null}function tt(e){return V.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function nt(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?Qe(t)===e.key:t.key===e.key}function rt(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 it={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function H(e){return it[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=Ke.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 at(e,t){return e.kind===`chord`?W(e.keys,t):[G(e,t)]}function ot(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 st(e){return Ue.map(t=>({group:t.id,label:t.label,rows:V.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:at(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 ct(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 lt(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 ut(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 dt(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),ut(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 ft=/https?:\/\/[^\s<>()"'`]+/gi,pt=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,mt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,ht=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function gt(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=pt.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=ht.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=mt.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 _t(e){let t=[],n=new Set;for(let r of e.matchAll(ft)){let e=gt(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function vt(e){return`${e} isn't supported yet`}function yt(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var bt={waiting:`Queued`,reviewing:`Analysing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},xt={waiting:`○`,reviewing:`◐`,"already-reviewed":`✓`,ready:`✓`,failed:`!`},St=250,Ct=1500,wt=6e4;async function J(e,t,n){try{let r=await e.fetch(t,n===void 0?{}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)}),i=await r.json().catch(()=>({}));if(!r.ok){let e=i;return{...e,ok:!1,status:r.status,error:typeof e.error==`string`?e.error:`Something went wrong. Try again.`}}return{ok:!0,value:i}}catch{return{ok:!1,status:0,error:`The workspace server did not answer. Check it is still running.`}}}function Tt(e,t,n){let r=null,i=!1,a=o=>{r=e.setTimeout(async()=>{let r=await J(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),a(r.value.finished?wt:Ct)):r.status===404?n.lost(r.error):a(Ct))},o)};return a(Ct),()=>{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 Et(e,t,n){let r=Y(e,`option`,void 0,t);return r.value=n,r}function X(e,t,n){let r=Y(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function Dt(e,t){let n=Y(e,`details`,`prb-addreview-technical`);return n.append(Y(e,`summary`,void 0,`Technical details`),Y(e,`pre`,void 0,t)),n}function Ot(e){let t=Y(e,`div`,`prb-addreview-problemblock`);t.setAttribute(`role`,`alert`);let n=Y(e,`p`,`prb-addreview-error`);return n.hidden=!0,t.append(n),{element:t,show(r){n.textContent=r.error,n.hidden=!1,t.querySelector(`.prb-addreview-technical`)?.remove(),r.detail&&t.append(Dt(e,r.detail))},hide(){n.hidden=!0,t.querySelector(`.prb-addreview-technical`)?.remove()}}}function kt(e,t,n=`prb-addreview-path`){let r=Y(e,`span`,n),i=t.replace(/\/+$/,``).lastIndexOf(`/`);return i<=0?r.textContent=t:r.append(Y(e,`span`,`prb-addreview-path-parent`,t.slice(0,i+1)),Y(e,`span`,`prb-addreview-path-name`,t.slice(i+1))),r}function Z(e,t){return Y(e,`code`,void 0,t)}var Q=e=>`${e} commit${e===1?``:`s`}`;function At(e,t){let n=t.options.find(e=>e.where===`remote`)?.display??`origin/${t.name}`,r=Y(e,`p`,`prb-addreview-choice-text`),i=t.divergence,a=i&&i.ahead>0&&i.behind>0?[`Your local `,Z(e,t.name),` and `,Z(e,n),` have diverged: ${Q(i.ahead)} on the local side, ${Q(i.behind)} on the remote.`]:i&&i.ahead>0?[`Your local `,Z(e,t.name),` is ${Q(i.ahead)} ahead of `,Z(e,n),`.`]:i&&i.behind>0?[`Your local `,Z(e,t.name),` is ${Q(i.behind)} behind `,Z(e,n),`.`]:[`Your local `,Z(e,t.name),` and `,Z(e,n),` are different commits.`];return r.append(...a),r}function jt(e,t,n){let r=t.baseChoice,i=Y(e,`div`,`prb-addreview-choice`);i.setAttribute(`data-addreview-base-choice`,``);let a=Y(e,`p`,`prb-addreview-choice-title`,`Choose a base branch`);a.id=`prb-addreview-choice-title`;let o=Y(e,`div`,`prb-addreview-choice-options`);o.setAttribute(`role`,`radiogroup`),o.setAttribute(`aria-labelledby`,a.id);for(let t of r.options){let i=Y(e,`label`,`prb-addreview-choice-option`),a=Y(e,`input`);a.type=`radio`,a.name=`prb-addreview-base-choice`,a.value=t.base,a.addEventListener(`change`,()=>{a.checked&&n(t.base)});let s=`${t.where===`remote`?`Remote`:`Local`} ${r.name}`,c=t.commits===void 0?``:t.commits===0?` (no new changes)`:` (${Q(t.commits)} to review)`;i.append(a,Z(e,t.display),Y(e,`span`,`prb-addreview-choice-what`,` ${s}${c}`)),o.append(i)}return i.append(a,At(e,r),Y(e,`p`,`prb-addreview-choice-text`,`Select which branch to compare against:`),o),t.detail&&i.append(Dt(e,t.detail)),i}function Mt(e,t){return t&&e.status===`waiting`?`Not started`:t&&e.status===`reviewing`?`Started`:bt[e.status]}function Nt(e,t){let n=e.filter(e=>e.status===`ready`||e.status===`already-reviewed`).length,r=[`reviewing`,`waiting`,`failed`].map(n=>[Mt({status:n},t).toLowerCase(),e.filter(e=>e.status===n).length]).filter(([,e])=>e>0);return[`${n} of ${e.length} ${e.length===1?`review`:`reviews`} ready`,...r.map(([e,t])=>`${t} ${e}`)].join(` · `)}function Pt(e,t,n,r,i){let a=Y(e,`div`,`prb-addreview-progress`);a.setAttribute(`data-addreview-progress`,``);let o=Y(e,`p`,`prb-addreview-summary`);o.setAttribute(`aria-live`,`polite`);let s=Y(e,`ul`,`prb-addreview-rows`);s.setAttribute(`aria-label`,`Started reviews`);let c=Y(e,`p`,`prb-palette-summary`),l=Ot(e),u=Y(e,`div`,`prb-addreview-footer`),d=Y(e,`button`,`prb-addreview-start`,`Close`);d.type=`button`,d.setAttribute(`data-addreview-close`,``),d.addEventListener(`click`,i),u.append(d),a.append(o,s,c,l.element,u);let f=r,p=null,m=!1,h=!1,g=new Map,_=(t,n)=>{let r=n.contains(e.activeElement),i=n.querySelector(`.prb-addreview-technical`)?.open??!1;n.replaceChildren(),n.dataset.status=h&&t.status===`waiting`?`not-started`:t.status,n.dataset.state=t.status===`failed`?`problem`:`ok`;let a=Y(e,`div`,`prb-addreview-row-head`),o=Y(e,`span`,`prb-addreview-mark`,xt[t.status]);if(o.setAttribute(`aria-hidden`,`true`),a.append(o,t.reviewId?X(e,t.reviewId,t.label):Y(e,`span`,`prb-addreview-row-label`,t.label)),a.append(Y(e,`span`,`prb-addreview-badge`,Mt(t,h))),n.append(a),t.reason&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-${t.status===`failed`?`problem`:`muted`}`,t.reason)),t.kept&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-muted`,yt(t.kept))),t.detail){let r=Dt(e,t.detail);r.open=i,n.append(r)}if(t.status===`failed`&&!h){let r=t.stale===!0,i=Y(e,`button`,`prb-addreview-retry`,r?`Start fresh review`:`Retry`);i.type=`button`,i.setAttribute(r?`data-addreview-fresh`:`data-addreview-retry`,``),i.setAttribute(`aria-label`,`${r?`Start a fresh review of`:`Retry`} ${t.label}`),i.addEventListener(`click`,()=>void b(t.key,i,r)),n.append(i)}r&&n.focus()},v=()=>{let t=f.map(t=>{let n=JSON.stringify([t,h]),r=g.get(t.key);if(!r){let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key,n.tabIndex=-1,r={item:n,json:``},g.set(t.key,r)}return r.json!==n&&(_(t,r.item),r.json=n),r.item});(t.some((e,t)=>s.children[t]!==e)||s.children.length!==t.length)&&s.replaceChildren(...t),o.textContent=Nt(f,h),c.textContent=!h&&f.some(e=>e.status===`waiting`)?`Queued reviews start as running ones finish. Reviews carry on in the background, so you can close this; they appear in your reviews list.`:`Reviews carry on in the background, so you can close this; they appear in your reviews list.`},y=()=>{p?.(),p=Tt(t,n,{rows:e=>{f=e,v()},lost:e=>{l.show({error:e}),h=!0,v()}})},b=async(e,r,i)=>{r.disabled=!0;let a=await J(t,`/add-review/batches/${n}/retry`,{key:e,...i?{fresh:!0}:{}});if(!m){if(!a.ok){r.disabled=!1,l.show(a),a.status===404&&(h=!0,p?.(),v());return}l.hide(),f=a.value.rows,v(),y()}};return v(),y(),{element:a,focus:()=>d.focus(),stop:()=>{m=!0,p?.()}}}function Ft(e,t,n){let r=Y(e,`details`,`prb-addreview-options`);r.append(Y(e,`summary`,void 0,`Review options`));let i=Y(e,`div`,`prb-addreview-grid`);r.append(i);let a=(t,n)=>{let r=Y(e,`label`,`prb-addreview-key`,t),a=`prb-addreview-${t.toLowerCase()}`;n.id=a,r.htmlFor=a,i.append(r,n)},o=Y(e,`select`,`prb-addreview-control`);o.setAttribute(`data-addreview-agent`,``);let s=Y(e,`input`,`prb-addreview-control`);s.type=`text`,s.placeholder=`Default`,s.spellcheck=!1,s.autocomplete=`off`,s.setAttribute(`data-addreview-model`,``);let c=Y(e,`input`,`prb-addreview-control`);c.type=`text`,c.placeholder=`Auto`,c.spellcheck=!1,c.autocomplete=`off`,c.setAttribute(`data-addreview-base`,``),a(`Agent`,o),a(`Model`,s);let l=Y(e,`div`,`prb-addreview-modelhelp`),u=Y(e,`button`,`prb-addreview-helplink`,`How do I find model names?`);u.type=`button`,u.setAttribute(`aria-expanded`,`false`),u.setAttribute(`data-addreview-model-help`,``);let d=Y(e,`p`,`prb-addreview-help`);d.id=`prb-addreview-model-help`,d.hidden=!0,u.setAttribute(`aria-controls`,d.id),l.append(u,d),i.append(l),n&&a(`Base`,c);let f=Ot(e);r.append(f.element);let p=[],m=()=>{let t=p.find(e=>e.id===o.value);if(!t){d.replaceChildren(`Choose an agent to see how to find its model names.`);return}let n=t.displayName,r=t.modelHelp;d.replaceChildren(...r?.command?[`To see the models ${n} offers, run `,Z(e,r.command),` in a terminal.`]:r?.note?[`To see the models ${n} offers, ${r.note}.`]:[`${n} does not say how to list its models. Use a name from its own documentation.`],` Leave Model empty to use ${n}'s default.`)};u.addEventListener(`click`,()=>{d.hidden=!d.hidden,u.setAttribute(`aria-expanded`,String(!d.hidden)),d.hidden?s.removeAttribute(`aria-describedby`):s.setAttribute(`aria-describedby`,d.id),m()}),o.addEventListener(`change`,m);let h=null,g=!1;return{element:r,base:c,loaded:J(t,`/add-review/options`).then(t=>{if(g=!0,!t.ok)return f.show(t),r.open=!0,null;p=t.value.agents;let{agent:n}=t.value,i=p.filter(e=>e.installed);n.kind!==`resolved`&&o.append(Et(e,`Choose an agent`,``));for(let t of i)o.append(Et(e,t.displayName,t.id));return n.kind===`resolved`?(h=n.id,i.some(e=>e.id===n.id)||o.append(Et(e,n.displayName,n.id)),o.value=n.id):(o.value=``,r.open=!0,n.kind===`refused`&&f.show({error:n.error})),m(),t.value}),complete:()=>g&&o.value!==``,values:()=>({...o.value&&o.value!==h?{agent:o.value}:{},...s.value.trim()?{model:s.value.trim()}:{},...n&&c.value.trim()?{base:c.value.trim()}:{}}),setBasePlaceholder:e=>{c.placeholder=e?`Auto (${e})`:`Auto`},showProblem:e=>{r.open=!0,f.show(e),(e.field===`model`?s:o).focus()},hideProblem:()=>f.hide()}}function It(e){let t=Y(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function Lt(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`pull-requests`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Paste PR links`),s=Y(e,`textarea`,`prb-palette-input prb-addreview-paste`);s.id=`prb-addreview-paste`,o.htmlFor=s.id,s.rows=3,s.spellcheck=!1,s.autocomplete=`off`,s.placeholder=`https://github.com/owner/repo/pull/123`;let c=Y(e,`p`,`prb-palette-summary`);c.setAttribute(`aria-live`,`polite`);let l=Y(e,`ul`,`prb-addreview-rows`),u=Ft(e,r,!1),d=Ot(e),f=Y(e,`p`,`prb-addreview-error`);f.setAttribute(`data-addreview-limit`,``),f.hidden=!0;let p=Y(e,`div`,`prb-addreview-footer`),m=It(e);p.append(m),a.append(o,s,c,f,l,u.element,d.element,p),i.append(Y(e,`p`,`prb-addreview-mode`,`Pull request`),a),t.append(i);let h=[],g=new Map,_=!1,v=0,y=null,b=null,x=!1,S=!1,C=()=>h.filter(e=>(e.ok||e.needsFolder)&&!!g.get(e.key)),w=0,T=()=>{let e=C().length;m.textContent=e>1?`Review ${e} PRs`:`Review PR`,m.disabled=b!==null||x||_||w>0||e===0||!u.complete()},E=()=>{f.hidden=w===0,f.textContent=`At most 20 pull requests can be reviewed at once. Remove ${w} to continue.`},D=(t,n)=>Y(e,`span`,`prb-addreview-status prb-addreview-${n}`,t),O=()=>{l.replaceChildren(...h.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key;let r=t.ok||!!g.get(t.key);n.dataset.state=r?`ok`:`problem`;let i=Y(e,`div`,`prb-addreview-row-head`),a=Y(e,`span`,`prb-addreview-mark`,r?`✓`:`!`);if(a.setAttribute(`aria-hidden`,`true`),i.append(a,Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(i),t.reviewed?.kept){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Resumes where it stopped`)),n.append(r,D(yt(t.reviewed.kept),`muted`))}else if(t.reviewed){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Already reviewed`)),n.append(r)}else t.ok?n.append(D(`Ready to start`,`muted`)):t.reason&&n.append(D(t.reason,`problem`));if(t.folders.length>1){let r=Y(e,`select`,`prb-addreview-control prb-addreview-folder`);r.setAttribute(`aria-label`,`Local folder for ${t.label}`);for(let n of t.folders)r.append(Et(e,n.branch?`${n.display} (${n.branch})`:n.display,n.path));r.value=g.get(t.key)??t.folder??``,r.addEventListener(`change`,()=>g.set(t.key,r.value)),n.append(r)}else if(t.folders.length===1)n.append(kt(e,t.folders[0].display));else if(t.needsFolder){let r=Y(e,`input`,`prb-addreview-control prb-addreview-folder`);r.type=`text`,r.placeholder=`Local folder for this repository, e.g. ~/code/repo`,r.setAttribute(`aria-label`,`Local folder for ${t.label}`),r.spellcheck=!1,r.autocomplete=`off`,r.value=g.get(t.key)??``,r.addEventListener(`input`,()=>{r.value.trim()?g.set(t.key,r.value.trim()):g.delete(t.key),n.dataset.state=r.value.trim()?`ok`:`problem`,T()}),n.append(r)}return n}))},k=()=>{let e=_t(s.value),t=e.filter(e=>e.kind===`github`).length;c.textContent=e.length===0?s.value.trim()?`No pull request links found.`:``:t===1?`1 pull request recognised`:`${t} pull requests recognised`,h=e.map(e=>e.kind===`github`?h.find(t=>t.key===e.key)??{key:e.key,label:`${e.owner}/${e.repo} #${e.number}`,url:e.url,ok:!1,folders:[]}:{key:e.key,label:`${e.provider} ${e.provider===`GitLab`?`merge request`:`pull request`}`,url:e.url,ok:!1,reason:vt(e.provider),folders:[]}),_=e.some(e=>e.kind===`github`),w=Math.max(0,t-20);let n=++v;O(),E(),T(),y!==null&&r.clearTimeout(y),_&&(y=r.setTimeout(async()=>{y=null;let e=await J(r,`/add-review/pull-requests/preview`,{text:s.value});if(!(S||n!==v)){if(_=!1,!e.ok)d.show(e);else{d.hide(),h=e.value.rows;for(let e of h)e.folder&&!g.has(e.key)&&g.set(e.key,e.folder)}O(),T()}},St))},A=async()=>{if(T(),m.disabled)return;x=!0,T();let t=C().map(e=>({url:e.url,folder:g.get(e.key)})),i=await J(r,`/add-review/pull-requests`,{items:t,...u.values()});if(x=!1,!S){if(!i.ok){i.field?(d.hide(),u.showProblem(i)):(u.hideProblem(),d.show(i)),T();return}b=Pt(e,r,i.value.batchId,i.value.rows,n),a.replaceWith(b.element),b.focus()}};return s.addEventListener(`input`,k),m.addEventListener(`click`,()=>void A()),i.addEventListener(`change`,()=>T()),i.addEventListener(`keydown`,e=>{if(b||e.key!==`Enter`||e.shiftKey||e.isComposing)return;let t=e.target;t.tagName!==`SELECT`&&t.tagName!==`BUTTON`&&t.tagName!==`A`&&t.tagName!==`SUMMARY`&&(e.preventDefault(),A())}),u.loaded.then(()=>T()),T(),s.focus(),()=>{S=!0,y!==null&&r.clearTimeout(y),b?.stop()}}}}function Rt(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`branch`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Working folder`),s=Y(e,`div`,`prb-addreview-pathrow`),c=Y(e,`input`,`prb-palette-input`);c.id=`prb-addreview-folder`,o.htmlFor=c.id,c.type=`text`,c.spellcheck=!1,c.autocomplete=`off`,c.placeholder=`~/code/project`;let l=Y(e,`button`,`prb-addreview-browse`,`Browse…`);l.type=`button`,l.hidden=!0,s.append(c,l);let u=Y(e,`div`,`prb-addreview-detected`);u.setAttribute(`aria-live`,`polite`);let d=Y(e,`p`,`prb-palette-group`,`Recent`),f=Y(e,`div`,`prb-palette-results prb-addreview-recent`);f.setAttribute(`role`,`group`),f.setAttribute(`aria-label`,`Recent folders`),d.hidden=!0;let p=Ft(e,r,!0),m=Ot(e),h=Y(e,`div`,`prb-addreview-footer`),g=It(e);g.textContent=`Review branch`,h.append(g),a.append(o,s,u,d,f,p.element,m.element,h),i.append(Y(e,`p`,`prb-addreview-mode`,`Branch`),a),t.append(i);let _=null,v=null,y=!1,b=null,x=!1,S=null,C=(e,t)=>`${e}\n${t.trim()}`,w=()=>C(c.value,p.base.value),T=()=>{g.disabled=y||b!==null||!_?.result.ok||_.key!==w()||!p.complete()},E=e=>{S={base:e,path:c.value},p.base.value=e,v!==null&&r.clearTimeout(v),T(),O().then(e=>{!x&&e.ok&&g.focus()})},D=t=>{if(u.replaceChildren(),!t)return;if(!t.ok){if(t.baseChoice){u.append(jt(e,{error:t.error??``,...t.detail?{detail:t.detail}:{},baseChoice:t.baseChoice},E));return}u.append(Y(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`)),t.detail&&u.append(Dt(e,t.detail));return}let n=Y(e,`dl`,`prb-addreview-grid prb-addreview-facts`),r=(t,r)=>{let i=Y(e,`dd`);i.append(r),n.append(Y(e,`dt`,`prb-addreview-key`,t),i)};if(r(`Repository`,t.repo??``),r(`Branch`,t.branch??``),r(`Base`,t.base??`Not found`),t.reviewed?.kept){let n=X(e,t.reviewed.reviewId,`Resumes where it stopped`),i=Y(e,`span`,`prb-addreview-kept`,yt(t.reviewed.kept)),a=Y(e,`span`);a.append(n,Y(e,`br`),i),r(`Review`,a)}else t.reviewed&&r(`Review`,X(e,t.reviewed.reviewId,t.reviewed.inProgress?`Being reviewed now`:`Already reviewed`));u.append(n),p.setBasePlaceholder(t.base??null)},O=()=>{let e=c.value,t=p.base.value.trim(),n=C(e,t);return _?.key===n?Promise.resolve(_.result):e.trim()?J(r,`/add-review/folder/inspect`,{path:e,...t?{base:t}:{}}).then(e=>{let t=e.ok?e.value:{ok:!1,error:e.error,...e.detail?{detail:e.detail}:{}};return!x&&w()===n&&(_={key:n,result:t},D(t),T()),t}):(_=null,D(null),T(),Promise.resolve({ok:!1}))},k=e=>{c.value=e,A(),v!==null&&r.clearTimeout(v),T(),O(),c.focus()},A=()=>{!S||S.path===c.value||(p.base.value===S.base&&(p.base.value=``),S=null)},j=async()=>{if(y||b)return;y=!0;let t=w(),i=c.value,o=p.values();T(),v!==null&&(r.clearTimeout(v),v=null);let s=await O();if(x)return;if(!s.ok||!p.complete()||w()!==t)return y=!1,T();let l=await J(r,`/add-review/branch`,{path:i,...o});if(y=!1,!x){if(!l.ok){l.baseChoice?(_={key:t,result:{...l,ok:!1}},D(_.result),m.hide()):l.field?p.showProblem(l):m.show(l),T();return}b=Pt(e,r,l.value.batchId,l.value.rows,n),a.replaceWith(b.element),b.focus()}},M=()=>{T(),v!==null&&r.clearTimeout(v),v=r.setTimeout(()=>{v=null,O()},St)};return c.addEventListener(`input`,()=>{A(),M()}),p.base.addEventListener(`input`,M),l.addEventListener(`click`,async()=>{let e=await J(r,`/add-review/folder/choose`,{});if(!x){if(!e.ok){m.show(e);return}e.value.path?k(e.value.path):c.focus()}}),f.addEventListener(`click`,e=>{let t=e.target.closest(`[data-folder-path]`);t?.dataset.folderPath&&k(t.dataset.folderDisplay??t.dataset.folderPath)}),g.addEventListener(`click`,()=>void j()),i.addEventListener(`keydown`,e=>{if(b||e.isComposing)return;let t=[...f.querySelectorAll(`[data-folder-path]`)],n=t.indexOf(e.target);if(e.key===`ArrowDown`||e.key===`ArrowUp`){let r=e.key===`ArrowDown`?e.target===c?t[0]:n>=0?t[n+1]:null:n===0?c:n>0?t[n-1]:null;if(!r)return;e.preventDefault(),r.focus();return}if(e.key!==`Enter`||e.shiftKey||n>=0)return;let r=e.target;r.tagName!==`SELECT`&&r.tagName!==`BUTTON`&&r.tagName!==`A`&&r.tagName!==`SUMMARY`&&(e.preventDefault(),j())}),i.addEventListener(`change`,()=>T()),p.loaded.then(e=>{x||(l.hidden=!e?.canChooseFolder,T())}),J(r,`/add-review/folders`).then(t=>{x||!t.ok||(f.replaceChildren(...t.value.folders.map(t=>{let n=Y(e,`button`,`prb-palette-result`);return n.type=`button`,n.dataset.folderPath=t.path,n.dataset.folderDisplay=t.display,n.append(Y(e,`span`,`prb-palette-result-title`,t.branch?`${t.repo} · ${t.branch}`:t.repo),kt(e,t.display,`prb-palette-result-where`)),n})),d.hidden=t.value.folders.length===0)}),T(),c.focus(),()=>{x=!0,b?.stop(),v!==null&&r.clearTimeout(v)}}}}function zt(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function Bt(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:Bt(t);return`global`}function Vt(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=rt(Je(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=dt(a,st(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:Lt(a)},"add.branch":{panel:Rt(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=ct(a,e=>T(e),v),x=Ye(e).map(e=>({keys:G(e.binding,o),label:e.label})),S=Object.fromEntries(Ue.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:Bt(e)}),n=s.path.length===0?Ue.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=Ye(e);return i.addEventListener(`keydown`,e=>{if(b.isOpen()){if(Ze(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(m)return e.key===`Escape`&&!e.isComposing?(t(),h===`close`?v():D()):et(e,o)?(t(),v()):void 0;if(e.key===`Escape`||et(e,o))return t(),v();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),lt(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(Qe(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=et(e,o),r=t?tt(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(!nt(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)||zt(a)))continue;if(p(t,e)){e.preventDefault(),f(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{b.isOpen()&&v(`unloading`)}),Ht(a,e,o),{isOpen:()=>b.isOpen()||u.isOpen(),close:()=>v()}}function Ht(e,t,n){for(let r of qe(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=ot(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 Ut(e){return`${e} more`}function Wt(e){return e===0?`Nothing unread`:`${e} unread`}function Gt(e){return e===`moved-again`?`replaced by a later move`:`replaced when the review caught up`}function Kt(e){return e===`restarting`?`Workspace server restarting`:e===`unreachable`?`Workspace server not running`:`Workspace server running`}function $(e,t){let n=e.querySelector(`[data-server-status]`);if(!n)return;n.dataset.serverStatus=t;let r=n.querySelector(`[data-server-status-label]`);r&&(r.textContent=Kt(t))}function qt(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||$(e,t?`running`:`unreachable`)}function Jt(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:Wt(t)),n.hidden=t===0}var Yt=6e3,Xt=5e3;function Zt(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 Qt(e,t,n=window){return $t(e,{kind:t.kind,text:t.text},n)}function $t(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(),Yt),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),Yt)};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 en(e,t,n=window){return $t(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function tn(e,t,n=window){return $t(e,{kind:`more`,text:Ut(t),href:`/notifications`,link:`View all`},n)}function nn(e=document,t=window,n={}){let r=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(r)||r<=0)return;let i=Zt(e),a=async()=>{try{let a=await t.fetch(`/notifications/recent?after=${r}`);if(qt(e,!0),a.status===403)return;if(a.ok){let o=await a.json();n.paintUnread&&Jt(e,o.unread),typeof o.now==`number`&&(r=o.now);for(let e of[...o.notifications??[]].reverse())en(i,e,t);typeof o.more==`number`&&o.more>0&&tn(i,o.more,t)}}catch{qt(e,!1)}t.setTimeout(()=>void a(),Xt)};t.setTimeout(()=>void a(),Xt)}function rn(e,t){Jt(e,t.unread),typeof t.driving==`boolean`&&an(e,t.driving)}function an(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var on=`prb-server-restarted`;function sn(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(on),t.sessionStorage.removeItem(on)}catch{}n!==null&&Qt(Zt(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var cn=2e4,ln=300;function un(e){sn();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,dn(e,t,n)})}async function dn(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){an(document,!0);return}if(!a.ok)return void bn(t,n,await yn(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=_n(window.location.href,o.port)}catch{bn(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,$(document,`restarting`),i!==null){if(await hn(Number(new URL(i).port)))return void window.location.assign(i)}else if(await fn(r)){try{window.sessionStorage.setItem(on,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await vn()){$(document,`running`),bn(t,n,`The server did not restart, and is still the one that was running.`);return}$(document,`unreachable`),bn(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function fn(e){let t=Date.now()+cn;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,ln));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 pn=4,mn={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function hn(e,t=()=>gn(e),n=mn){let r=n.now()+cn,i=0;for(;n.now()<r;){await n.sleep(ln);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=pn))return!0}for(let e=0;e<pn;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(ln)}return!0}async function gn(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function _n(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 vn(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function yn(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function bn(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{n as $,Me as A,I as B,ge as C,me as D,Se as E,ze as F,ne as G,ae as H,Re as I,v as J,C as K,Le as L,Ie as M,He as N,je as O,we as P,A as Q,ie as R,De as S,Te as T,P as U,ce as V,te as W,O as X,k as Y,p as Z,ve as _,Zt as a,Ve as b,$ as c,Vt as d,e as et,ut as f,de as g,ue as h,nn as i,Ne as j,Ee as k,Gt as l,R as m,rn as n,Jt as o,st as p,y as q,Qt as r,qt as s,un as t,Wt as u,Ce as v,he as w,Pe as x,Be as y,le as z};
|
package/static/help.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{G as e,d as t,et as n,f as r,p as i,q as a,t as o}from"./chunk-DYrelqtW.js";e(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(r(document,i(a(navigator)))),o(`/restart`),n(window,()=>window.location.reload());
|
package/static/notifications.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{G as e,d as t,et as n,l as r,o as i,t as a,u as o}from"./chunk-DYrelqtW.js";import{t as s}from"./chunk-C8kkSv38.js";var c=5e3;function l(e){let t=[],n=[],r=0;for(let i of e){let e=encodeURIComponent(i).length+1;n.length>0&&r+e>4e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}var u=`Unread. `;function d(e,t){if(e.dataset.rowState===t||t===`unread`)return;e.dataset.rowState=t,e.dataset.read=`true`;let n=e.querySelector(`.prb-notification-open`),i=n?.getAttribute(`aria-label`)??``;if(i.startsWith(u)&&(i=i.slice(8)),t===`moved-again`||t===`caught-up`){let n=r(t);i=`${i}, ${n}`;let a=e.querySelector(`.prb-notification-meta`);if(a&&!a.querySelector(`[data-notification-replaced]`)){let t=e.ownerDocument.createElement(`span`);t.className=`prb-notification-replaced`,t.dataset.notificationReplaced=``,t.textContent=` · ${n}`,a.append(t)}}n?.setAttribute(`aria-label`,i)}function f(e,t){let n=e.querySelector(`[data-notifications-count]`);n&&(n.textContent=o(t));let r=e.querySelector(`[data-notifications-read-all]`);r&&(r.disabled=t===0),i(e,t)}function p(e,t){let n=Number(e.dataset.createdAt),r=Number(t.dataset.createdAt);return n>r||n===r&&(e.dataset.notificationId??``)<(t.dataset.notificationId??``)}function m(e,t){let n=[...e.querySelectorAll(`[data-notification-id]`)].find(e=>p(t,e));n?n.before(t):e.append(t)}function h(e,t){let n=new Set([...e.querySelectorAll(`[data-notification-id]`)].map(e=>e.dataset.notificationId));return Object.keys(t).filter(e=>!n.has(e))}function g(e,t,n=()=>{}){let r=Array.isArray(t.rows)?t.rows.filter(e=>typeof e==`string`):[],i=e.querySelector(`[data-notifications]`);if(r.length>0&&!i)return!1;let a=!1;if(i){for(let t of r){let n=e.createElement(`template`);n.innerHTML=t.trim();let r=n.content.firstElementChild,o=r?.dataset.notificationId;!r||!o||[...i.querySelectorAll(`[data-notification-id]`)].some(e=>e.dataset.notificationId===o)||(m(i,r),a=!0)}a&&n()}let o=t.states&&typeof t.states==`object`?t.states:{};for(let t of e.querySelectorAll(`[data-notification-id]`)){let e=o[t.dataset.notificationId??``];e&&d(t,e)}return typeof t.unread==`number`&&f(e,t.unread),!0}function _(e=document,t=window,n=e=>t.fetch(`/notifications/live${e.length>0?`?ids=${e.map(encodeURIComponent).join(`,`)}`:``}`),r=()=>{}){if(!e.querySelector(`[data-notifications], [data-notifications-empty]`))return;let i,a=!1,o=()=>e.visibilityState===`visible`,s=async e=>{let t=await n(e);return t.ok?await t.json():null},u=async()=>{if(!(a||!o())){a=!0;try{let n=await s([]);if(n){if(!g(e,{...n,rows:[]},r)){t.location.reload();return}let i=n.states?h(e,n.states):[];for(let n of l(i)){let i=null;try{i=await s(n)}catch{continue}if(i&&!g(e,i,r)){t.location.reload();return}}}}catch{}finally{a=!1}t.clearTimeout(i),i=t.setTimeout(()=>void u(),c)}};e.addEventListener(`visibilitychange`,()=>{o()&&(t.clearTimeout(i),u())}),i=t.setTimeout(()=>void u(),c)}function v(e,t,n){let r=[...e.querySelectorAll(`[data-notification-id]`)];r.forEach((e,t)=>{e.hidden=t>=n}),t&&(t.hidden=r.length<=n)}function y(e){let t=e.querySelector(`[data-notifications-more]`),n=15;return v(e,t,n),t?.addEventListener(`click`,()=>{n+=15,v(e,t,n)}),{refresh:()=>v(e,e.querySelector(`[data-notifications-more]`),n)}}e(),a(`/restart`);var b=y(document),x=s({doc:document,item:`[data-notification-id]`,link:`a.prb-notification-open`,walk:()=>[...document.querySelectorAll(`[data-notification-id]:not([hidden])`)].filter(e=>e.querySelector(`a.prb-notification-open`)),background:()=>document.querySelector(`.prb-shell > main`)});t(`notifications`,{"notifications.next":{run:()=>x.move(1)},"notifications.previous":{run:()=>x.move(-1)},"notifications.open":{available:()=>x.enterOpens(),run:()=>x.open()},"notifications.openInNewTab":{available:()=>x.enterOpens(),run:()=>x.openInNewTab()}});var S=document.querySelector(`[data-notifications-read-all]`);async function C(){try{let e=await fetch(`/notifications`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`read-all`})});if(!e.ok)return null;let t=await e.json();return typeof t.unread==`number`?t.unread:null}catch{return null}}S?.addEventListener(`click`,()=>{S.disabled=!0,C().then(e=>{if(e===null){S.disabled=!1;return}document.querySelectorAll(`[data-notification-id][data-row-state="unread"]`).forEach(e=>d(e,`seen`)),f(document,e)})}),_(document,window,void 0,()=>b.refresh()),n(window,()=>window.location.reload());
|
package/static/reviews.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,B as t,C as n,E as r,F as i,H as a,I as o,K as s,M as ee,N as te,O as ne,P as re,R as ie,S as ae,T as oe,U as se,Y as ce,Z as le,_ as ue,a as de,b as fe,d as pe,g as me,h as he,i as ge,j as _e,k as ve,m as c,n as ye,q as be,r as xe,s as Se,t as Ce,v as we,w as Te,x as Ee,y as De}from"./chunk-CEQv4zVy.js";import{a as Oe,c as ke,i as Ae,n as je,o as Me,r as Ne,s as Pe,t as Fe}from"./chunk-BoQsVuYd.js";import{t as Ie}from"./chunk-C8kkSv38.js";function Le(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Re(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;ze(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return ze(e,!r);n(r)}function ze(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Be(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Ve(e,t,n,r){return{limits:n,expanded:t.filter(e=>e.querySelector(`[data-history-list]:not([hidden])`)).map(e=>e.dataset.id??``).filter(e=>e!==``),main:r?.scrollTop??0,focus:se(e.activeElement,e.body)}}function He(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of c){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Ue(e,t,n){if(!t)return;n.reveal(He(t,n.limits));let r=new Set(ce(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Be(t,!0)}let i=s(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),be(e,t.focus)}function We(e,t){let n=Promise.resolve();for(let r of e){let e=r.dataset.section;if(!Te(e))continue;let i=r.open;r.addEventListener(`toggle`,()=>{if(r.open===i)return;i=r.open;let a=!r.open;n=n.then(()=>t(e,a)).catch(()=>{})})}}var l=a({ownsRestore:!0});Ce(`/restart`);var u=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),Ge=Object.fromEntries(c.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),d=document.querySelector(`.prb-index`);function Ke(e){return{id:e.dataset.id??``,queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var f=document.querySelector(`[data-search]`),p=document.querySelector(`[data-status-filter]`),m=document.querySelector(`[data-author-filter]`),h=document.querySelector(`[data-pr-filter]`),qe=document.querySelector(`[data-no-matches]`),g=document.querySelector(`[data-count]`),_=n();function Je(e){return{stored:t({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:i(e.dataset)??{at:0,kind:`created`}}}function Ye(e){return e.dataset.pinned===`true`}function v(e){let{stored:t,activity:n}=Je(e);return ae(Ye(e),t,n,w.filter)}var y=document.querySelector(`[data-bulk]`),Xe=document.querySelector(`[data-bulk-count]`),Ze=document.querySelector(`[data-bulk-delete]`),Qe=document.querySelector(`[data-bulk-question]`),b=document.querySelector(`[data-bulk-confirm]`),x=document.querySelector(`[data-bulk-actions]`),S=document.querySelector(`[data-bulk-error]`),C=document.querySelector(`[data-bulk-select-all]`),w=r(window.location.hash),T=new Set,E=!1,D=document.querySelector(`[data-bulk-fetch]`),O={},k=[],A=!1;function j(){let e=w.query.trim().toLowerCase();w.author!==``&&![...m?.options??[]].some(e=>e.value===w.author)&&(w.author=``);let t=Ee(De(u.map(e=>({...Ke(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...w,query:e}).map(e=>e.card),v);k=t;let n=_e(t,v,_),r=new Set(c.flatMap(e=>n[e].shown));for(let e of u)e.hidden=!r.has(e);for(let e of c){let t=Ge[e];t&&Le(t,n[e].shown);let r=document.querySelector(`[data-load-more="${e}"]`);r&&(r.hidden=n[e].total<=n[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=n[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(n[e].total))}if(f&&f.value!==w.query&&(f.value=w.query),m&&(m.value=w.author,w.author===``?delete m.dataset.active:m.dataset.active=``),h||(w.pr=`any`),h&&(h.value=w.pr,w.pr===`any`?delete h.dataset.active:h.dataset.active=``),p&&(p.value=w.filter,w.filter===`all`?delete p.dataset.active:p.dataset.active=``),g){let e=t.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);g.textContent=me(e,t.length)}qe&&(qe.hidden=t.length>0||u.length===0),it(t)}var $e=300,M=null;function N(){M!==null&&window.clearTimeout(M),M=null,l.replace(fe(w),{})}function P(e,t){if(w={...w,...e},_=n(),j(),t===`now`)return N();M!==null&&window.clearTimeout(M),M=window.setTimeout(N,$e)}window.addEventListener(`pagehide`,()=>{M!==null&&N()}),document.addEventListener(`click`,e=>{M!==null&&e.target?.closest?.(`a[href]`)&&N()},!0),f?.addEventListener(`input`,()=>P({query:f.value},`settled`)),f?.addEventListener(`keydown`,e=>{e.key===`Escape`&&f.value!==``&&(e.preventDefault(),P({query:``},`now`))}),p?.addEventListener(`change`,()=>{P({filter:p.value},`now`)}),m?.addEventListener(`change`,()=>{P({author:m.value},`now`)}),h?.addEventListener(`change`,()=>{P({pr:h.value},`now`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!c.includes(t)||(_={..._,[t]:_[t]+15},j())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{w=r(window.location.hash),_=n(),j(),tt()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Re(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),q(n),j())})});async function et(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}F(n),j()}function F(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of u){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 n=t.has(e.dataset.queueId??``);e.dataset.queueAction=n?`remove`:`add`,e.textContent=ne(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ve(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&Be(t,n.hidden!==!1)});var I=document.querySelector(`.prb-shell > main`);function tt(){Ue(document,l.current().ui,{cards:u,pane:I,limits:_,reveal:e=>{_=e,j()}})}l.setCapturer(()=>Ve(document,u,_,I)),j(),tt();var L=Pe(document,{onOpen:R,onClose:R});function R(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return;let r=t.closest(`[data-copy-id]`);if(r?.dataset.copyId){e.preventDefault(),e.stopPropagation(),ke(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),L.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(),L.closeAll(),vt(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),L.closeAll(),K([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),L.closeAll(),et(s.dataset.queueId,s.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),R(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),nt(n);return}e.preventDefault(),e.stopPropagation()});async function nt(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();rt(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{rt(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function rt(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function z(e){E=e,e||T.clear(),d&&(e?d.dataset.selecting=``:delete d.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`);B(),j()}function B(){b&&(b.hidden=!0),x&&(x.hidden=!1),S&&(S.hidden=!0,S.textContent=``)}function it(e){for(let e of u){let t=T.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!y||(y.hidden=!E,!E))return;let t=new Set(e.filter(at).map(e=>e.dataset.id)),n=[...T].filter(e=>!t.has(e)).length;Xe&&(Xe.textContent=te(T.size,n)),C&&(C.textContent=ee(e.length),C.disabled=e.every(e=>T.has(e.dataset.id??``))),Ze&&(Ze.textContent=ue(ht()));for(let e of y.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=T.size===0;D&&(D.hidden=!je(O,Y(U())))}function at(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>it(k));We(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{z(!E)}),C?.addEventListener(`click`,()=>{for(let e of k)e.dataset.id&&T.add(e.dataset.id);B(),j()});function V(e){T.has(e)?T.delete(e):T.add(e),B(),j()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&V(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!E)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(),V(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!E||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),V(t.dataset.id))});var H=Ie({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>k.filter(at),enterAllowed:()=>!E,background:()=>I,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function ot(){return H.holdsKeys()?H.current()?.querySelector(`:scope > [data-menu]`)??null:null}var st=8;function ct(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),M!==null&&N(),l.leaving(),lt=!0,window.location.assign(t.href))}var lt=!1,ut={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=f?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=f?.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=k.slice(0,st);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=k.length===0?`No reviews match.`:k.length>e.length?`The first ${e.length} of ${g?.textContent??k.length}`:g?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=u.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),ct(n))};n.addEventListener(`input`,()=>{f&&(f.value=n.value,f.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},dt={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=g?.textContent??``},r=[p,m,h].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function ft(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var pt=Object.fromEntries(c.map(e=>[`reviews.section.${e}`,ft(e)])),mt=pe(`reviews`,{...pt,"reviews.search":{available:()=>f!==null,panel:ut},"reviews.filters":{available:()=>p!==null,panel:dt},"reviews.next":{run:()=>H.move(1)},"reviews.previous":{run:()=>H.move(-1)},"reviews.open":{available:()=>H.enterOpens(),run:()=>H.open()},"reviews.openInNewTab":{available:()=>H.enterOpens(),run:()=>H.openInNewTab()},"reviews.menu":{available:()=>ot()!==null,run:()=>{let e=ot();e&&L.open(e,{focusFirst:!0,returnFocus:()=>H.refocus()})}}},{onOpen:()=>L.closeAll(),onSettle:()=>$()});function U(){return Ee(u.filter(e=>T.has(e.dataset.id??``)),v)}function ht(){return U().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function W(e){S&&(S.textContent=e,S.hidden=!1)}function G(e){for(let t of y?.querySelectorAll(`button`)??[])t.disabled=e}async function gt(e){let t=[...T];if(t.length!==0){G(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return G(!1),W(`That could not be saved. The workspace server refused it.`)}catch{return G(!1),W(`The workspace server did not answer. It may have stopped.`)}_t(U(),e),G(!1),z(!1)}}function _t(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=re(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=oe(r))}}async function vt(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}_t(u.filter(t=>t.dataset.id===e),t),j()}async function K(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 u)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),q(e));return F(n.queue),j(),!0}function q(e){let{stored:t,activity:n}=Je(e),r=e.querySelector(`[data-lifecycle-chip]`);if(r){let i=he(Ye(e),t,n);r.textContent=i??``,r.hidden=i===void 0}for(let r of e.querySelectorAll(`[data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!ie(e,t,n),r.textContent=o(e,t,n)}}async function yt(e){let t=[...T];if(t.length===0)return;G(!0);let n=await K(t,e);if(G(!1),!n)return W(`That could not be saved. The workspace server refused it or did not answer.`);z(!1)}async function bt(){let e=[...T];if(e.length===0)return;G(!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 G(!1),B(),W(`Nothing was deleted. The workspace server refused it.`)}catch{return G(!1),B(),W(`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 U())r.has(e.dataset.id??``)||e.remove();u=u.filter(e=>e.isConnected),T.clear();for(let e of r)T.add(e);if(G(!1),B(),n.length===0)return z(!1);j(),W([...new Set(n.map(e=>e.error))].join(` `))}async function xt(){let e=U().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;G(!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 G(!1),B(),W(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return G(!1),B(),W(`Nothing was added. The workspace server refused it.`);F(t.queue);let n=t.refused??[];T.clear();for(let e of n)T.add(e.id);if(G(!1),B(),n.length===0)return z(!1);j(),W([...new Set(n.map(e=>e.error))].join(` `))}y?.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 gt(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]`)){Qe&&(Qe.textContent=we(ht())),x&&(x.hidden=!0),b&&(b.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void bt();if(t.closest(`[data-bulk-cancel-delete]`))return B();if(t.closest(`[data-bulk-cancel]`))return z(!1)}),le(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 Ne(Y(e),O)}function Ct(){for(let e of u){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!je(O,Y([e])))}}async function wt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;O=(await e.json()).targets??{}}catch{return}Ct(),j()}async function Tt(e,t){let n=St(e);if(A||n.repositories===0)return;A=!0;let r=[D,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Oe(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}A=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Fe),j();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:Ae(a)};if(a.moved>0||Z){try{window.sessionStorage.setItem(J,JSON.stringify(o))}catch{}if(!Q())return void window.location.reload();Z=!0}xe(de(),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`&&xe(de(),{kind:t.kind,text:t.text})}}catch{}D?.addEventListener(`click`,()=>void Tt(U(),D)),wt();var Et=document.body.dataset.indexRevision??``,X=document.body.dataset.live===`true`?Date.now():0,Z=!1;function Q(){return T.size>0||document.activeElement===f||A||mt.isOpen()||lt}function $(){Z&&!Q()&&window.location.reload()}async function Dt(){try{let t=await fetch(`/revision`);if(t.ok){Se(document,!0);let n=await t.json();ye(document,n),n.live&&X===0&&(X=Date.now()),n.live||(X=0);let r=e(Et,n.revision??``,Q());if(r===`reload`)return void window.location.reload();r===`hold`&&(Z=!0)}}catch{Se(document,!1)}window.setTimeout(()=>void Dt(),Me(X===0?2**53-1:Date.now()-X))}Dt(),f?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),ge();
|
|
1
|
+
import{C as e,D as t,E as n,F as r,G as i,I as a,K as o,L as s,M as ee,N as te,O as ne,P as re,Q as ie,R as ae,S as oe,T as c,U as se,V as ce,X as le,Y as ue,_ as de,a as fe,b as pe,d as me,et as he,g as ge,h as l,i as _e,j as ve,k as ye,m as u,n as be,r as xe,s as Se,t as Ce,v as we,w as Te,x as Ee,y as De,z as Oe}from"./chunk-DYrelqtW.js";import{a as ke,c as Ae,i as je,n as Me,o as Ne,r as Pe,s as Fe,t as Ie}from"./chunk-B6LyLjZ7.js";import{t as Le}from"./chunk-C8kkSv38.js";function Re(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function ze(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Be(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Be(e,!r);n(r)}function Be(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Ve(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function He(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:o(e.activeElement,e.body)}}function Ue(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 We(e,t,n){if(!t)return;n.reveal(Ue(t,n.limits));let r=new Set(ie(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Ve(t,!0)}let i=ue(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),le(e,t.focus)}function Ge(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=i({ownsRestore:!0});Ce(`/restart`);var f=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),Ke=[...document.querySelectorAll(`[data-operation]`)],p=document.querySelector(`[data-section="in-progress"]`),qe=e=>e.dataset.inProgressOnly!==void 0,Je=Object.fromEntries(l.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),m=document.querySelector(`.prb-index`);function Ye(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 h=document.querySelector(`[data-search]`),g=document.querySelector(`[data-status-filter]`),_=document.querySelector(`[data-author-filter]`),v=document.querySelector(`[data-pr-filter]`),Xe=document.querySelector(`[data-no-matches]`),y=document.querySelector(`[data-count]`),b=document.querySelector(`[data-clear-filters]`),x=c();function Ze(e){return{stored:se({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:ae(e.dataset)??{at:0,kind:`created`}}}function Qe(e){return e.dataset.pinned===`true`}function S(e){let{stored:t,activity:n}=Ze(e);return Te(Qe(e),t,n,O.filter)}var C=document.querySelector(`[data-bulk]`),$e=document.querySelector(`[data-bulk-count]`),et=document.querySelector(`[data-bulk-delete]`),tt=document.querySelector(`[data-bulk-question]`),w=document.querySelector(`[data-bulk-confirm]`),T=document.querySelector(`[data-bulk-actions]`),E=document.querySelector(`[data-bulk-error]`),D=document.querySelector(`[data-bulk-select-all]`),O=ye(window.location.hash),k=new Set,A=!1,j=document.querySelector(`[data-bulk-fetch]`),M={},N=[],P=!1;function F(){let t=O.query.trim().toLowerCase();O.author!==``&&![..._?.options??[]].some(e=>e.value===O.author)&&(O.author=``);let r=e(Ee(f.map(e=>({...Ye(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...O,query:t}).map(e=>e.card),S),i=r.filter(e=>!qe(e));N=i;let a=new Set(Ee(Ke.map(e=>({...Ye(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...O,query:t}).map(e=>e.entry));for(let e of Ke)e.hidden=!a.has(e);if(p){p.hidden=a.size===0;let e=p.querySelector(`[data-section-count]`);e&&(e.textContent=String(a.size))}let o=re(i,S,x),s=new Set(l.flatMap(e=>o[e].shown));for(let e of f)e.hidden=!s.has(e);for(let e of l){let t=Je[e];t&&Re(t,o[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=o[e].total<=o[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=o[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(o[e].total))}if(h&&h.value!==O.query&&(h.value=O.query),_&&(_.value=O.author,O.author===``?delete _.dataset.active:_.dataset.active=``),v||(O.pr=`any`),v&&(v.value=O.pr,O.pr===`any`?delete v.dataset.active:v.dataset.active=``),g&&(g.value=O.filter,O.filter===`all`?delete g.dataset.active:g.dataset.active=``),b&&(b.hidden=!n(O)),y){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);y.textContent=we(e(r),r.length,n(O)?e(f):void 0)}Xe&&(Xe.hidden=r.length>0||a.size>0||f.length===0),ct(i)}var nt=300,I=null;function L(){I!==null&&window.clearTimeout(I),I=null,d.replace(oe(O),{})}function R(e,t){if(O={...O,...e},x=c(),F(),t===`now`)return L();I!==null&&window.clearTimeout(I),I=window.setTimeout(L,nt)}window.addEventListener(`pagehide`,()=>{I!==null&&L()}),document.addEventListener(`click`,e=>{I!==null&&e.target?.closest?.(`a[href]`)&&L()},!0),h?.addEventListener(`input`,()=>R({query:h.value},`settled`)),h?.addEventListener(`keydown`,e=>{e.key===`Escape`&&h.value!==``&&(e.preventDefault(),R({query:``},`now`))}),g?.addEventListener(`change`,()=>{R({filter:g.value},`now`)}),_?.addEventListener(`change`,()=>{R({author:_.value},`now`)}),v?.addEventListener(`change`,()=>{R({pr:v.value},`now`)}),b?.addEventListener(`click`,()=>{R({query:u.query,filter:u.filter,author:u.author,pr:u.pr},`now`),h?.focus()});for(let e of document.querySelectorAll(`.prb-index-status`))e.addEventListener(`click`,t=>{let n=e.querySelector(`select`);if(!(!n||t.target instanceof Node&&n.contains(t.target))){t.preventDefault(),n.focus();try{n.showPicker()}catch{}}});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!l.includes(t)||(x={...x,[t]:x[t]+15},F())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{O=ye(window.location.hash),x=c(),F(),at()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;ze(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),Y(n),F())})});async function rt(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}it(n),F()}function it(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,Y(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let n=t.has(e.dataset.queueId??``);e.dataset.queueAction=n?`remove`:`add`,e.textContent=ve(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.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&&Ve(t,n.hidden!==!1)});var z=document.querySelector(`.prb-shell > main`);function at(){We(document,d.current().ui,{cards:f,pane:z,limits:x,reveal:e=>{x=e,F()}})}d.setCapturer(()=>He(document,f,x,z)),F(),at();var B=Fe(document,{onOpen:V,onClose:V});function V(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return;let r=t.closest(`[data-copy-id]`);if(r?.dataset.copyId){e.preventDefault(),e.stopPropagation(),Ae(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),B.closeAll();let t=i.closest(`[data-card]`);t&&jt([t]);return}let a=t.closest(`[data-mark-status]`);if(a?.dataset.markId){e.preventDefault(),e.stopPropagation(),B.closeAll(),St(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),B.closeAll(),Ct([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),B.closeAll(),rt(s.dataset.queueId,s.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),V(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),ot(n);return}e.preventDefault(),e.stopPropagation()});async function ot(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();st(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{st(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function st(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function H(e){A=e,e||k.clear(),m&&(e?m.dataset.selecting=``:delete m.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);U(),F()}function U(){w&&(w.hidden=!0),T&&(T.hidden=!1),E&&(E.hidden=!0,E.textContent=``)}function ct(e){for(let e of f){let t=k.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!C||(C.hidden=!A,!A))return;let t=new Set(e.filter(lt).map(e=>e.dataset.id)),n=[...k].filter(e=>!t.has(e)).length;$e&&($e.textContent=a(k.size,n)),D&&(D.textContent=r(e.length),D.disabled=e.every(e=>k.has(e.dataset.id??``))),et&&(et.textContent=De(yt()));for(let e of C.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=k.size===0;j&&(j.hidden=!Me(M,Dt(K())))}function lt(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>ct(N));Ge(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{H(!A)}),D?.addEventListener(`click`,()=>{for(let e of N)e.dataset.id&&k.add(e.dataset.id);U(),F()});function W(e){k.has(e)?k.delete(e):k.add(e),U(),F()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&W(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!A)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),W(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!A||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),W(t.dataset.id))});var G=Le({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>N.filter(lt),enterAllowed:()=>!A,background:()=>z,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function ut(){return G.holdsKeys()?G.current()?.querySelector(`:scope > [data-menu]`)??null:null}var dt=8;function ft(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),I!==null&&L(),d.leaving(),pt=!0,window.location.assign(t.href))}var pt=!1,mt={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=h?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=h?.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=N.slice(0,dt);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=N.length===0?`No reviews match.`:N.length>e.length?`The first ${e.length} of ${y?.textContent??N.length}`:y?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),ft(n))};n.addEventListener(`input`,()=>{h&&(h.value=n.value,h.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},ht={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=y?.textContent??``},r=[g,_,v].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function gt(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var _t=Object.fromEntries(ge.map(e=>[`reviews.section.${e}`,gt(e)])),vt=me(`reviews`,{..._t,"reviews.search":{available:()=>h!==null,panel:mt},"reviews.filters":{available:()=>g!==null,panel:ht},"reviews.next":{run:()=>G.move(1)},"reviews.previous":{run:()=>G.move(-1)},"reviews.open":{available:()=>G.enterOpens(),run:()=>G.open()},"reviews.openInNewTab":{available:()=>G.enterOpens(),run:()=>G.openInNewTab()},"reviews.menu":{available:()=>ut()!==null,run:()=>{let e=ut();e&&B.open(e,{focusFirst:!0,returnFocus:()=>G.refocus()})}}},{onOpen:()=>B.closeAll(),onSettle:()=>$()});function K(){return e(f.filter(e=>k.has(e.dataset.id??``)),S)}function yt(){return K().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function q(e){E&&(E.textContent=e,E.hidden=!1)}function J(e){for(let t of C?.querySelectorAll(`button`)??[])t.disabled=e}async function bt(e){let t=[...k];if(t.length!==0){J(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return J(!1),q(`That could not be saved. The workspace server refused it.`)}catch{return J(!1),q(`The workspace server did not answer. It may have stopped.`)}xt(K(),e),J(!1),H(!1)}}function xt(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=s(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=ne(r))}}async function St(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}xt(f.filter(t=>t.dataset.id===e),t),F()}async function Ct(e,t){let n;try{let r=await fetch(`/lifecycle`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,state:t})});n=r.ok?await r.json().catch(()=>null):null}catch{n=null}if(!n)return!1;let r=new Set(e);for(let e of f)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),Y(e));return it(n.queue),F(),!0}function Y(e){let{stored:t,activity:n}=Ze(e),r=e.querySelector(`[data-lifecycle-chip]`);if(r){let i=de(Qe(e),t,n);r.textContent=i??``,r.hidden=i===void 0}for(let r of e.querySelectorAll(`[data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!ce(e,t,n),r.textContent=Oe(e,t,n)}}async function wt(e){let t=[...k];if(t.length===0)return;J(!0);let n=await Ct(t,e);if(J(!1),!n)return q(`That could not be saved. The workspace server refused it or did not answer.`);H(!1)}async function Tt(){let e=[...k];if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return J(!1),U(),q(`Nothing was deleted. The workspace server refused it.`)}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of K())r.has(e.dataset.id??``)||e.remove();f=f.filter(e=>e.isConnected),k.clear();for(let e of r)k.add(e);if(J(!1),U(),n.length===0)return H(!1);F(),q([...new Set(n.map(e=>e.error))].join(` `))}async function Et(){let e=K().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;J(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return J(!1),U(),q(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return J(!1),U(),q(`Nothing was added. The workspace server refused it.`);it(t.queue);let n=t.refused??[];k.clear();for(let e of n)k.add(e.id);if(J(!1),U(),n.length===0)return H(!1);F(),q([...new Set(n.map(e=>e.error))].join(` `))}C?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void Et();let n=t.closest(`[data-bulk-mark]`);if(n)return void bt(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void wt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){tt&&(tt.textContent=pe(yt())),T&&(T.hidden=!0),w&&(w.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void Tt();if(t.closest(`[data-bulk-cancel-delete]`))return U();if(t.closest(`[data-bulk-cancel]`))return H(!1)}),he(window,()=>window.location.reload());var X=`prb-fetch-summary`;function Dt(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function Ot(e){return Pe(Dt(e),M)}function kt(){for(let e of f){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Me(M,Dt([e])))}}async function At(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;M=(await e.json()).targets??{}}catch{return}kt(),F()}async function jt(e,t){let n=Ot(e);if(P||n.repositories===0)return;P=!0;let r=[j,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=ke(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}P=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Ie),F();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:je(a)};if(a.moved>0||Q){try{window.sessionStorage.setItem(X,JSON.stringify(o))}catch{}if(!Nt())return void window.location.reload();Q=!0}xe(fe(),o)}try{let e=window.sessionStorage.getItem(X);if(e){window.sessionStorage.removeItem(X);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&xe(fe(),{kind:t.kind,text:t.text})}}catch{}j?.addEventListener(`click`,()=>void jt(K(),j)),At();var Mt=document.body.dataset.indexRevision??``,Z=document.body.dataset.live===`true`?Date.now():0,Q=!1;function Nt(){return k.size>0||document.activeElement===h||P||vt.isOpen()||pt}function $(){Q&&!Nt()&&window.location.reload()}async function Pt(){try{let e=await fetch(`/revision`);if(e.ok){Se(document,!0);let t=await e.json();be(document,t),t.live&&Z===0&&(Z=Date.now()),t.live||(Z=0);let n=te(Mt,t.revision??``,Nt());if(n===`reload`)return void window.location.reload();n===`hold`&&(Q=!0)}}catch{Se(document,!1)}window.setTimeout(()=>void Pt(),Ne(Z===0?2**53-1:Date.now()-Z))}Pt(),h?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),_e();
|
package/static/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{G as e,c as t,d as n,et as r,i,t as a}from"./chunk-DYrelqtW.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`,t(document,`unreachable`);let n=document.createElement(`div`);n.className=`prb-stopped-notice`,n.setAttribute(`role`,`status`);let r=document.body.dataset.wayBack;n.textContent=r?`Workspace server stopped. This page is no longer being served. Run ${r} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(n);for(let 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(),n(`global`,{}),a(`/restart`);function m(){let e=document.querySelector(`[data-settings-back]`),t=o(document.referrer,window.location.origin);if(!e||t===null)return;e.href=t,e.textContent=``;let n=document.createElement(`span`);n.setAttribute(`aria-hidden`,`true`),n.textContent=`‹`,e.append(n,` Back to the review`)}m(),p(document);var h=document.querySelector(`[data-settings-save]`),g=document.querySelector(`[data-settings-status]`),_=document.querySelector(`[data-settings-port]`),v=document.querySelector(`[data-settings-port-error]`),y=document.querySelector(`[data-settings-agent]`);function b(){let e=document.querySelector(`[data-settings-usage]:checked`);return e?e.value===`on`:void 0}function x(e,t){g&&(g.textContent=e,g.dataset.kind=t)}function S(e){v&&(v.textContent=e??``),_&&(e?(_.setAttribute(`aria-invalid`,`true`),_.focus(),_.select()):_.removeAttribute(`aria-invalid`))}async function C(){if(!h)return;let e=b(),t=d(document),n={..._?{port:_.value.trim()}:{},...y?{agent:y.value}:{},...e===void 0?{}:{usageCounts:e},...t===void 0?{}:{theme:t}};h.disabled=!0,h.textContent=`Saving`;try{let e=await(await fetch(`/settings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).json().catch(()=>null);if(!e){x(`Nothing was saved. The workspace server did not answer.`,`error`);return}if(e.error){S(e.error),x(`Nothing was saved.`,`error`);return}S(null),_&&(_.value=String(e.port.configured)),f(document,e.theme),x(e.restartRequired?`Saved. This page is served on port ${e.port.current}; the workspace moves to ${e.port.configured} the next time it starts.`:`Saved.`,`saved`)}catch{x(`Nothing was saved. The workspace server could not be reached.`,`error`)}finally{h.disabled=!1,h.textContent=`Save changes`}}h?.addEventListener(`click`,()=>void C()),i(document,window,{paintUnread:!0}),r(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -649,8 +649,8 @@ body[data-restarting] .prb-body { opacity: 0.55; pointer-events: none; }
|
|
|
649
649
|
leaves is not the same thing either -- the title eats the left side, the rail shifts the column
|
|
650
650
|
right, and the group lands short of the list by half the rail.
|
|
651
651
|
So the title is given the rail's own width and the group the column's, from the same two numbers
|
|
652
|
-
the layout below already uses. The search
|
|
653
|
-
|
|
652
|
+
the layout below already uses. The search spans the column, so its edges are the cards' edges
|
|
653
|
+
at every width wide enough to have a rail. */
|
|
654
654
|
/* Scoped with :has() and not by a body class: all three workspace pages share `prb-index-body`,
|
|
655
655
|
and only this bar holds the list's controls. */
|
|
656
656
|
.prb-context:has(.prb-index-controls) { padding-left: 0; padding-right: 0; column-gap: 0; }
|
|
@@ -661,9 +661,11 @@ body[data-restarting] .prb-body { opacity: 0.55; pointer-events: none; }
|
|
|
661
661
|
max-width: 960px;
|
|
662
662
|
margin: 0 auto;
|
|
663
663
|
padding: 0 24px;
|
|
664
|
-
justify-content: flex-end;
|
|
665
664
|
}
|
|
666
|
-
|
|
665
|
+
/* Two rows: the search on its own, the filters below it. Search is how a reviewer finds a review and
|
|
666
|
+
the filters refine what it found, so the search takes the column's whole width rather than
|
|
667
|
+
competing with three dropdowns for it, and the filters sit together under its left edge. */
|
|
668
|
+
.prb-context .prb-index-search { flex: 1 1 100%; padding: 6px 10px; font-size: var(--t-meta); }
|
|
667
669
|
.prb-context-controls {
|
|
668
670
|
display: flex;
|
|
669
671
|
align-items: center;
|
|
@@ -3191,12 +3193,36 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3191
3193
|
font: inherit;
|
|
3192
3194
|
cursor: pointer;
|
|
3193
3195
|
}
|
|
3196
|
+
/* A select is as wide as its longest option. Review state and PR have a handful of short, fixed
|
|
3197
|
+
ones, so that width is already predictable; Author's are "Name · @login" for whoever opened a
|
|
3198
|
+
pull request, and one long name made the box wide enough to crowd the row. So Author's width is
|
|
3199
|
+
set, and a long name that is selected is cut short. */
|
|
3200
|
+
.prb-index-status select[data-author-filter] { width: 11em; text-overflow: ellipsis; }
|
|
3194
3201
|
.prb-index-status select:focus-visible { outline: none; }
|
|
3195
3202
|
.prb-index-status:has(select[data-active]) { border-color: var(--brand); background-color: var(--brand); color: var(--on-brand-quiet); }
|
|
3196
3203
|
.prb-index-status select[data-active] { color: var(--on-brand); }
|
|
3197
3204
|
/* The GitHub mark on Author and PR. currentColor, so it is muted beside "Author:" at rest and goes
|
|
3198
3205
|
light with it once the filter fills. */
|
|
3199
3206
|
.prb-index-forge-mark { flex: none; margin-right: 6px; }
|
|
3207
|
+
/* Clear filters: a quiet text action at the end of the filter row, not a fourth box beside three
|
|
3208
|
+
that are. No taller than the filters, so the row does not move when it appears or goes. */
|
|
3209
|
+
.prb-index-clear {
|
|
3210
|
+
display: inline-flex;
|
|
3211
|
+
align-items: center;
|
|
3212
|
+
gap: 5px;
|
|
3213
|
+
padding: 6px 8px;
|
|
3214
|
+
border: 0;
|
|
3215
|
+
border-radius: 6px;
|
|
3216
|
+
background: transparent;
|
|
3217
|
+
color: var(--text-muted);
|
|
3218
|
+
font: inherit;
|
|
3219
|
+
font-size: var(--t-meta);
|
|
3220
|
+
cursor: pointer;
|
|
3221
|
+
}
|
|
3222
|
+
.prb-index-clear:hover { background: var(--surface-2); color: var(--text-primary); }
|
|
3223
|
+
.prb-index-clear:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: -2px; }
|
|
3224
|
+
/* `display` above beats the `hidden` attribute. */
|
|
3225
|
+
.prb-index-clear[hidden] { display: none; }
|
|
3200
3226
|
|
|
3201
3227
|
.prb-cards {
|
|
3202
3228
|
display: flex;
|
|
@@ -3543,6 +3569,19 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3543
3569
|
and can be scanned without reading anything to their left. */
|
|
3544
3570
|
.prb-card-when { margin-left: auto; padding-left: 8px; }
|
|
3545
3571
|
|
|
3572
|
+
/* ── In progress ──
|
|
3573
|
+
Entries wear the card but carry none of its controls: no pin or menu to make room for at the top
|
|
3574
|
+
right, and no box to make room for while selecting, since work is not something to tick. */
|
|
3575
|
+
.prb-card[data-operation] .prb-card-head { padding-right: 0; }
|
|
3576
|
+
.prb-index[data-selecting] .prb-card[data-operation] .prb-card-link { padding-left: 16px; }
|
|
3577
|
+
/* Waiting for a slot: a ring that holds still beside the pulsing dot of work under way, so Queued
|
|
3578
|
+
reads as not yet moving without a word of its own. */
|
|
3579
|
+
.prb-card-analysis[data-analysis='queued'] i {
|
|
3580
|
+
animation: none;
|
|
3581
|
+
background: transparent;
|
|
3582
|
+
box-shadow: inset 0 0 0 1px currentColor;
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3546
3585
|
/* Which questions were asked of this change, not how it went. Quieter than the risk and status
|
|
3547
3586
|
chips beside it: those grade the change, this one only says which analyses exist to read, and a
|
|
3548
3587
|
label with no verdict in it must not compete with two that have one. */
|
|
@@ -5243,6 +5282,48 @@ select.prb-addreview-control {
|
|
|
5243
5282
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
|
|
5244
5283
|
}
|
|
5245
5284
|
|
|
5285
|
+
/* The filters' open menus, drawn as the workspace's own menus where the browser lets a page style
|
|
5286
|
+
a select's picker (Chrome 135 and later), and left to the operating system everywhere else. Still
|
|
5287
|
+
a native select either way, so the keyboard, the screen reader and the code reading its value are
|
|
5288
|
+
the browser's, not ours. The panel and its rows match the card menu's (.prb-menu-panel). */
|
|
5289
|
+
@supports (appearance: base-select) {
|
|
5290
|
+
.prb-index-status select,
|
|
5291
|
+
.prb-index-status select::picker(select) { appearance: base-select; }
|
|
5292
|
+
/* The caret above already draws the chevron. */
|
|
5293
|
+
.prb-index-status select::picker-icon { display: none; }
|
|
5294
|
+
/* Hung from the whole box, label and all, and at least as wide as it: the select is only the
|
|
5295
|
+
part after "Author:", so anchored to it the menu started part-way along the control. */
|
|
5296
|
+
.prb-index-status { anchor-name: --prb-filter; anchor-scope: --prb-filter; }
|
|
5297
|
+
.prb-index-status select::picker(select) {
|
|
5298
|
+
position-anchor: --prb-filter;
|
|
5299
|
+
position-area: bottom span-right;
|
|
5300
|
+
min-width: anchor-size(width);
|
|
5301
|
+
margin-top: 6px;
|
|
5302
|
+
padding: 5px;
|
|
5303
|
+
border: 1px solid var(--border);
|
|
5304
|
+
border-radius: 9px;
|
|
5305
|
+
background: var(--surface-raised);
|
|
5306
|
+
box-shadow: 0 10px 28px var(--shadow-float);
|
|
5307
|
+
}
|
|
5308
|
+
.prb-index-status option {
|
|
5309
|
+
gap: 8px;
|
|
5310
|
+
padding: 7px 9px;
|
|
5311
|
+
border-radius: 6px;
|
|
5312
|
+
color: var(--text-secondary);
|
|
5313
|
+
font-size: var(--t-meta);
|
|
5314
|
+
cursor: pointer;
|
|
5315
|
+
}
|
|
5316
|
+
.prb-index-status option:hover,
|
|
5317
|
+
.prb-index-status option:focus-visible { outline: none; background: var(--surface-2); color: var(--text-primary); }
|
|
5318
|
+
.prb-index-status option:checked { background: var(--brand-muted); color: var(--brand-ink); }
|
|
5319
|
+
.prb-index-status option::checkmark { color: var(--brand-ink); }
|
|
5320
|
+
/* Author's chosen name, cut short inside its fixed width. A base-select draws the value in a box
|
|
5321
|
+
of its own that wraps rather than truncates, so the page supplies that box (reviews_page.ts)
|
|
5322
|
+
and the ellipsis goes on it. */
|
|
5323
|
+
.prb-index-status select > button { all: unset; display: block; min-width: 0; width: 100%; }
|
|
5324
|
+
.prb-index-status selectedcontent { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
|
5325
|
+
}
|
|
5326
|
+
|
|
5246
5327
|
/* Outlined rather than filled: it is the destructive one, and a solid red block in a page of
|
|
5247
5328
|
settings would pull the eye to the only thing here nobody came to do. */
|
|
5248
5329
|
.prb-settings-danger {
|
package/static/sidebar.css
CHANGED
|
@@ -4481,6 +4481,9 @@
|
|
|
4481
4481
|
display: flex;
|
|
4482
4482
|
flex-direction: column;
|
|
4483
4483
|
min-width: 220px;
|
|
4484
|
+
/* The popover is fixed and sized to its content, so without a cap a long prompt would widen it
|
|
4485
|
+
toward the window's edge. 16px is position()'s two viewport margins. */
|
|
4486
|
+
max-width: min(320px, calc(100vw - 16px));
|
|
4484
4487
|
padding: 4px;
|
|
4485
4488
|
/* With the saved prompts the list is about 375px. position() keeps it inside the window, but a
|
|
4486
4489
|
window shorter than the list would cut it off, so there it scrolls instead. 16px is the two
|
|
@@ -4503,7 +4506,10 @@
|
|
|
4503
4506
|
font-size: 12px;
|
|
4504
4507
|
text-align: left;
|
|
4505
4508
|
cursor: pointer;
|
|
4506
|
-
|
|
4509
|
+
/* A saved prompt can be a sentence, and the reviewer needs to read all of it before choosing.
|
|
4510
|
+
It wraps onto further lines; anywhere covers a long unbroken token such as a path. */
|
|
4511
|
+
white-space: normal;
|
|
4512
|
+
overflow-wrap: anywhere;
|
|
4507
4513
|
}
|
|
4508
4514
|
|
|
4509
4515
|
.pr-helper-selection-menu-item:hover {
|