prreviewbuddy 0.64.2 → 0.70.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +128 -0
- package/dist/{delete_review-l4p_p6oh.js → delete_review-CRPRIRKg.js} +7013 -6596
- package/dist/main.js +2 -328
- package/dist/server.js +697 -7
- package/package.json +1 -1
- package/static/chunk-BsU84lX4.js +1 -0
- package/static/chunk-C8kkSv38.js +1 -0
- package/static/chunk-DqEA-C0S.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +84 -0
- package/static/sidebar.css +2 -0
- package/static/workspace.js +63 -63
- package/static/chunk-BadSI8AL.js +0 -1
- package/static/chunk-CXf6hwXL.js +0 -1
- package/static/chunk-CndkgJPh.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prreviewbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.2",
|
|
4
4
|
"description": "Review a branch or pull request in an isolated checkout, from your terminal, with the coding agent you already have installed.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"homepage": "https://prreviewbuddy.com",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e}from"./chunk-DqEA-C0S.js";async function t(e,t){try{await navigator.clipboard.writeText(t);let n=e.textContent;e.textContent=`Copied`,window.setTimeout(()=>{e.textContent=n},1200)}catch{let n=document.createElement(`input`);n.type=`text`,n.readOnly=!0,n.value=t,n.className=`prb-menu-id`,n.setAttribute(`data-id-field`,``),e.after(n),n.select()}}var n=`button:not([disabled])`;function r(e){return e.querySelector(`[data-menu-panel]`)}function i(e){return e.querySelector(`[data-menu-trigger]`)}function a(e){let t=r(e);return t?[...t.querySelectorAll(n)].filter(e=>!e.closest(`[hidden]`)):[]}var o=`data-menu-placement`;function s(e){let t=e.ownerDocument.defaultView,n=0,r=t?.innerHeight??1/0;for(let i=e.parentElement;i&&t;i=i.parentElement){let e=t.getComputedStyle(i).overflowY;if(e===`visible`||e===``)continue;let a=i.getBoundingClientRect();n=Math.max(n,a.top),r=Math.min(r,a.bottom)}return{top:n,bottom:r}}var c=8,l=120;function u(e){let t=r(e),n=i(e);if(!t||!n)return;t.removeAttribute(o),t.style.removeProperty(`max-height`),t.style.removeProperty(`overflow-y`),t.style.removeProperty(`box-sizing`),t.scrollTop=0;let a=t.getBoundingClientRect(),u=n.getBoundingClientRect(),d=s(e),f=Math.max(0,a.top-u.bottom),p=d.bottom-u.bottom-f-c,m=u.top-d.top-f-c,h=a.height,g=h<=p?`below`:h<=m||m>p?`above`:`below`;g===`above`&&t.setAttribute(o,`above`);let _=g===`above`?m:p;h<=_||(t.style.boxSizing=`border-box`,t.style.maxHeight=`${Math.max(Math.floor(_),l)}px`,t.style.overflowY=`auto`)}function d(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey?e.key===`j`?`ArrowDown`:e.key===`k`?`ArrowUp`:e.key:e.key}function f(t,n={}){let o=null,s=null,c=n.within?`${n.within} [data-menu]`:`[data-menu]`,l=e=>e&&(!n.within||e.closest(n.within))?e:null,f=(e,t={})=>{let a=r(e);if(!a||a.hidden)return;a.hidden=!0;let c=i(e);c?.setAttribute(`aria-expanded`,`false`);let l=o===e?s:null;o===e&&(o=null,s=null),n.onClose?.(e),t.returnFocus&&(l??(()=>c?.focus()))()},p=()=>{for(let e of t.querySelectorAll(c))f(e)},m=(e,t,c=null)=>{let l=r(e);l&&(p(),s=c,n.onOpen?.(e),l.hidden=!1,u(e),i(e)?.setAttribute(`aria-expanded`,`true`),o=e,t&&a(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,n=l(t?.closest?.(`[data-menu]`)??null);if(!n){p();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;r(n)?.hidden?m(n,t):f(n);return}o&&o!==n&&f(o)}),t.addEventListener(`keydown`,t=>{if(o&&!o.isConnected&&(o=null),!o)return;let n=o;if(t.key===`Escape`){t.preventDefault(),f(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){f(n);return}if(e(t.target))return;let r=a(n);if(r.length===0)return;let i=r.indexOf(t.target),s=d(t),c=s===`ArrowDown`?r[(i+1)%r.length]:s===`ArrowUp`?r[(i-1+r.length)%r.length]:s===`Home`?r[0]:s===`End`?r[r.length-1]:null;c&&(t.preventDefault(),c.focus(),c.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>m(e,t.focusFirst===!0,t.returnFocus??null),close:f,closeAll:p}}function p(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}var m=`Fetch selected`;function h(e){return`${e} ${e===1?`repository`:`repositories`}`}function g(e){return`Fetching ${h(e)}…`}function _(e){return e.fetched===0?`Could not fetch ${h(e.repositories)}`:e.fetched===e.repositories?`Fetched ${h(e.repositories)}`:`Fetched ${e.fetched} of ${h(e.repositories)}`}function v(e,t){let n=new Set,r=new Set;for(let i of e)for(let e of i.lineage){let i=t[e];i!==void 0&&(n.add(e),r.add(i))}return{ids:[...n],repositories:r.size}}function y(e,t){return v(t,e).repositories>0}export{g as a,t as c,_ as i,y as n,p as o,v as r,f as s,m as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t,n){if(e.length===0)return null;let r=t===null?-1:e.indexOf(t);return r<0?n===1?e[0]:e[e.length-1]:e[Math.min(Math.max(r+n,0),e.length-1)]}function t(e,t){for(let n of e.querySelectorAll(`[data-keyboard-current]`))n!==t&&delete n.dataset.keyboardCurrent;t&&(t.dataset.keyboardCurrent=``)}function n(n){let{doc:r}=n,i=null,a=null,o=e=>n.link?e?.querySelector(n.link)??null:null,s=e=>n.link?o(e):e,c=e=>(n.link?e?.closest?.(n.link):e)?.closest?.(n.item)??null,l=e=>{i=e,t(r,e)},u=()=>i&&n.walk().includes(i)?i:null;r.addEventListener(`focusin`,e=>{let t=c(e.target);t&&(n.link||i!==null)&&l(t)}),n.link||r.addEventListener(`pointerdown`,e=>{let t=e.target?.closest?.(n.item);t&&(i===null?a=t:l(t))}),r.addEventListener(`focusout`,e=>{let t=e.target;t.dataset?.cursorFocusable!==void 0&&(t.removeAttribute(`tabindex`),delete t.dataset.cursorFocusable)});let d=c(r.activeElement);d&&l(d);let f=(e,t)=>{let r=n.background?.()??null;if(t!==`between`&&r){r.scrollTo({top:t===`first`?0:r.scrollHeight}),e.scrollIntoView({block:`nearest`});return}e.scrollIntoView({block:`nearest`}),n.leadIn?.(e)?.scrollIntoView({block:`nearest`})},p=e=>{let t=o(e);return t?.focus({preventScroll:!0}),t},m=e=>{if(n.link)return void p(e);e.hasAttribute(`tabindex`)||(e.tabIndex=-1,e.dataset.cursorFocusable=``),e.focus({preventScroll:!0})},h=()=>{let e=s(u());if(!e)return!1;let t=r.activeElement;return t===e||t===null||t===r.body||t===(n.background?.()??null)};return{move(t){let i=n.walk(),o=e(i,u()??(n.link?null:c(r.activeElement)??a),t);!o||!s(o)||(a=null,l(o),m(o),f(o,o===i[0]?`first`:o===i[i.length-1]?`last`:`between`))},current:u,refocus(){let e=u();e&&m(e)},holdsKeys:h,enterOpens(){return n.enterAllowed&&!n.enterAllowed()?!1:o(u())!==null&&h()},open(){p(u())?.click()},openInNewTab(){let e=p(u());e&&(n.openTab??(e=>r.defaultView?.open(e,`_blank`,`noopener`)))(e.href)}}}export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){e.addEventListener(`pageshow`,e=>{e.persisted&&t()})}var t=[`checkbox`,`radio`,`button`,`submit`,`reset`].map(e=>`:not([type="${e}"])`).join(``);function n(e){if(!e||typeof e.closest!=`function`)return!1;let n=e;return n.isContentEditable?!0:n.closest(`input${t}, textarea, select, [contenteditable=""], [contenteditable="true"]`)!==null}var r=`prbNav`,i=`prb-workspace`,a=`prb-nav-session`,o=`prb-nav-head`,s=`prb-nav-handoff`,c=`prb-nav-places`,l=200,u=15e3,d=`unstored`;function f(e){if(!e||typeof e!=`object`)return null;let t=e[r];if(!t||typeof t!=`object`)return null;let{v:n,owner:i,session:a,idx:o,id:s,ui:c}=t;if(n!==1||i!==`prb-workspace`||typeof a!=`string`||a===``||typeof o!=`number`||!Number.isInteger(o)||o<0)return null;let l=c&&typeof c==`object`&&!Array.isArray(c)?c:null;return{v:n,owner:i,session:a,idx:o,...typeof s==`string`&&s!==``?{id:s}:{},ui:l}}function p(e){if(!e||typeof e!=`object`)return{};let{[r]:t,...n}=e;return n}function m(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.owner===`prb-workspace`&&n.session===t}function h(e,t){try{return e?.getItem(t)??null}catch{return null}}function g(e,t,n){try{n===null?e?.removeItem(t):e?.setItem(t,n)}catch{}}function _(e){let{history:t,storage:n,location:_}=e,v=e.navigation??null,y=[],b=null,x=null,S=null,C=t=>{S!==null&&e.clearTimeout(S),S=t?t():null,e.capturePending(S!==null)},w=null,T=(()=>{if(!n)return d;let t=h(n,a);if(t)return t;let r=e.uuid();return g(n,a,r),h(n,a)===r?r:d})(),E=()=>`${_.pathname}${_.search}`,D=e=>`${E()}${e}`,O=()=>{try{v?.updateCurrentEntry({state:{owner:i,session:T}})}catch{}},k=()=>{for(let e of y)e()},A=(e,n)=>{n===void 0?t.replaceState(e,``):t.replaceState(e,``,n),O()},ee=()=>Number(h(n,o)??0)||0,j=()=>{try{let e=JSON.parse(h(n,c)??`{}`);return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{return{}}},M=(e,t)=>{if(!e||!n)return;let r=j();delete r[e],r[e]=t;let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-l)))delete r[e];g(n,c,JSON.stringify(r))},te=e=>{if(!e)return null;let t=e.id?j()[e.id]:void 0;return t&&typeof t==`object`&&!Array.isArray(t)?t:e.ui},ne=()=>{if(!b)return null;try{return b()}catch{return null}},N=()=>{let a=f(t.state);if(a&&a.session===T&&a.id){w=a.id,O();return}let c=a?.idx??0;if(!a){let t=h(n,s);g(n,s,null),c=0;try{let n=t?JSON.parse(t):null,r=e.referrer!==``&&new URL(e.referrer).origin===_.origin;n&&r&&n.session===T&&typeof n.idx==`number`&&typeof n.at==`number`&&e.now()-n.at<u&&(c=n.idx+1)}catch{c=0}g(n,o,String(c))}let l=a?.id??e.uuid();w=l;let d={v:1,owner:i,session:T,idx:c,id:l,ui:a?.ui??null};A({...p(t.state),[r]:d})},P=()=>f(t.state)??{v:1,owner:`prb-workspace`,session:T,idx:0,ui:null},F=()=>{S!==null&&C(null);let e=ne();if(!e||!w)return;let n=JSON.stringify(e),i=f(t.state);if(!i||i.id!==w){M(w,e);return}(n!==x||JSON.stringify(i.ui)!==n)&&(x=n,M(w,e),A({...p(t.state),[r]:{...i,ui:e}}))},I=e=>{if(v){let t=v.currentEntry?.index;if(typeof t!=`number`||t<0)return!1;let n=v.entries()[t+e];if(!n)return!1;try{return m(n.getState(),T)}catch{return!1}}let n=f(t.state);return!n||n.session!==T||t.length<2?!1:e===-1?n.idx>0:n.idx<ee()};N();try{t.scrollRestoration=`manual`}catch{}return{session:T,current(){return{route:p(t.state),ui:te(f(t.state))}},push(a,s){if(a!==``&&!a.startsWith(`#`))throw Error(`Workspace history pushes within this document only; "${a}" is not a fragment.`);if(D(a)===`${E()}${_.hash}`)return!1;F();let c=P().idx+1;g(n,o,String(c));let l=e.uuid(),u={v:1,owner:i,session:T,idx:c,id:l,ui:null};return w=l,t.pushState({...p(s),[r]:u},``,D(a)),x=null,O(),k(),!0},replace(e,t){if(e!==``&&!e.startsWith(`#`))throw Error(`Workspace history replaces within this document only; "${e}" is not a fragment.`);A({...p(t),[r]:P()},D(e))},setCapturer(e){b=e},captureNow:F,scheduleCapture(){C(()=>e.setTimeout(F,250))},leaving(){F(),g(n,s,JSON.stringify({session:T,idx:P().idx,at:e.now()}))},canGoBack:()=>I(-1),canGoForward:()=>I(1),back(){return I(-1)?(F(),t.back(),!0):!1},forward(){return I(1)?(F(),t.forward(),!0):!1},moved(){S!==null&&C(null);let e=ne();e&&M(w,e),x=null,w=f(t.state)?.id??null;let n=f(t.state);!n||!n.id||n.session!==T?N():O(),k()},onAvailability(e){y.push(e)}}}function v(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function y(e){let t=e?.userAgentData?.platform??e?.platform??``;return/mac|iphone|ipad/i.test(t)}function b(e,t,r){if(e.defaultPrevented||e.isComposing)return null;let i=t?e.metaKey:e.ctrlKey,a=t?e.ctrlKey:e.metaKey;if(!i||a||e.altKey||e.shiftKey)return null;let o=e.key===`[`||e.key!==`]`&&e.code===`BracketLeft`?`back`:e.key===`]`||e.code===`BracketRight`?`forward`:null;return!o||n(e.target)||r.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)?null:o}var x=[`data-id`,`data-finding-card`,`data-goto-section`,`data-view-nav`,`data-file`,`data-line`,`data-history`,`data-history-toggle`,`data-load-more`,`data-select`,`data-pin`,`data-focus-toggle`,`data-ask-toggle`,`data-rail-toggle`,`data-search`,`data-status-filter`,`data-author-filter`,`data-pr-filter`,`data-card`,`data-notification-id`,`data-guide-section`,`data-guide-detail`,`data-view`];function S(e){if(e.id)return{attrs:[[`id`,e.id]]};let t=x.filter(t=>e.hasAttribute(t)).map(t=>[t,e.getAttribute(t)??``]);return t.length>0?{attrs:t}:null}function C(e,t){if(!e||e===t||!t.contains(e))return null;let n=[],r=e;for(;r&&r!==t&&n.length<3;){let t=S(r);t?n.unshift(t):r===e&&n.unshift({tag:r.tagName.toLowerCase(),...r.classList[0]?{cls:r.classList[0]}:{}}),r=r.parentElement}return n.length>0?n:null}function w(e){if(!e||typeof e!=`object`)return!1;let{attrs:t,tag:n,cls:r}=e;return t===void 0?typeof n==`string`&&/^[a-z][a-z0-9-]*$/.test(n)&&(r===void 0||typeof r==`string`):Array.isArray(t)&&t.length>0&&t.every(e=>Array.isArray(e)&&e.length===2&&x.concat(`id`).includes(e[0])&&typeof e[1]==`string`)}function T(e,t){return t.attrs?t.attrs.every(([t,n])=>e.getAttribute(t)===n):e.tagName.toLowerCase()===t.tag&&(t.cls===void 0||e.classList.contains(t.cls))}function E(e,t){let n=t.attrs?`[${t.attrs[0][0]}]`:t.tag;for(let r of e.querySelectorAll(n))if(T(r,t))return r;return null}function D(e,t){if(!Array.isArray(t)||t.length===0||!t.every(w))return null;let n=null,r=e;for(let e of t){let t=E(r,e);if(!t)return n;n=t,r=t}return n}function O(e,t){let n=D(e,t);if(n){if(n.tabIndex<0&&!n.matches(`a[href], button, input, select, textarea, summary`)){n.querySelector(`a[href], button:not([disabled]), input, select, textarea, [tabindex="0"]`)?.focus({preventScroll:!0});return}n.focus({preventScroll:!0})}}function k(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)&&n>=0?n:null}function A(e,t){let n=e?.[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function ee(e){try{return e.sessionStorage}catch{return null}}function j(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function M(e,t){if(e.target&&e.target!==`_self`||e.hasAttribute(`download`))return!1;let n;try{n=new URL(e.getAttribute(`href`)??``,t.href)}catch{return!1}return n.origin===t.origin?n.pathname!==t.pathname||n.search!==t.search:!1}function te(e,t){let n=e.querySelector(`[data-nav-announce]`);!n||!t||(n.textContent=``,e.defaultView?.setTimeout(()=>{n.textContent=t},50))}function ne(e={},t=window,n=document){let r=t.navigation??null,i=_({history:t.history,navigation:r,storage:ee(t),location:t.location,referrer:n.referrer,now:()=>Date.now(),uuid:()=>t.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,setTimeout:(e,n)=>t.setTimeout(e,n),clearTimeout:e=>t.clearTimeout(e),capturePending:e=>n.documentElement.toggleAttribute(`data-nav-capture-pending`,e)}),a=y(t.navigator),o=[...n.querySelectorAll(`[data-history]`)],s=()=>{for(let e of o)e.disabled=!((e.dataset.history===`forward`?`forward`:`back`)==`back`?i.canGoBack():i.canGoForward())};for(let e of o){let t=e.dataset.history===`forward`?`forward`:`back`;e.dataset.tip=j(t,a),e.addEventListener(`click`,()=>{t===`back`?i.back():i.forward()})}s(),i.onAvailability(s),r?.addEventListener?.(`currententrychange`,s),t.addEventListener(`keydown`,e=>{let t=b(e,a,n);t&&(e.preventDefault(),t===`back`?i.back():i.forward())}),t.addEventListener(`popstate`,()=>i.moved()),t.addEventListener(`pagehide`,()=>i.captureNow()),n.addEventListener(`visibilitychange`,()=>{n.visibilityState===`hidden`&&i.captureNow()}),n.addEventListener(`click`,e=>{let n=e.target?.closest?.(`a[href]`);!n||!v(e)||e.defaultPrevented||M(n,t.location)&&i.leaving()},!0),n.addEventListener(`pointerdown`,e=>{(e.button===3||e.button===4)&&i.captureNow()},!0);let c=()=>i.scheduleCapture();for(let e of[`scroll`,`click`,`input`,`toggle`,`focusin`])n.addEventListener(e,c,{capture:!0,passive:!0});if(!e.ownsRestore){let e=n.querySelector(`.prb-shell > main`);i.setCapturer(()=>({main:e?.scrollTop??0,focus:C(n.activeElement,n.body)}));let{ui:t}=i.current(),r=k(t,`main`);e&&r!==null&&(e.scrollTop=r),t&&O(n,t.focus)}return i}var N=[{id:`active`,name:`Active`,action:`Move to active`},{id:`waiting`,name:`Waiting`,action:`Mark waiting`},{id:`done`,name:`Done`,action:`Mark done`}];function P(e){if(typeof e!=`object`||!e)return;let{state:t,at:n}=e;if(!(t!==`waiting`&&t!==`done`||typeof n!=`number`||!Number.isFinite(n)))return{state:t,at:n}}function F(e){return N.find(t=>t.id===e).action}function I(e,t){if(!e)return;let n=L(e,t);return n===void 0?{text:N.find(t=>t.id===e.state).name,changed:!1}:{text:n,changed:!0}}var re=[`created`,`updated`,`merged`,`closed`,`reopened`];function ie(e){return ae({at:Number(e.activityAt),kind:e.activityKind,...e.activityMovedAt===void 0?{}:{movedAt:Number(e.activityMovedAt)}})}function ae(e){if(typeof e!=`object`||!e)return;let{at:t,kind:n,movedAt:r}=e;if(!(typeof t!=`number`||!Number.isFinite(t)||!re.includes(n)))return{at:t,kind:n,...typeof r==`number`&&Number.isFinite(r)?{movedAt:r}:{}}}function oe(e,t){return!e||e.state===`waiting`&&se(e,t)?`active`:e.state}function L(e,t){if(!e||!t)return;if(e.state===`waiting`)return se(e,t)?`Changed while waiting`:void 0;if(t.kind===`reopened`&&t.at>e.at)return`Reopened since done`;let n=t.movedAt??(t.kind===`updated`?t.at:void 0);return n!==void 0&&n>e.at?`Changed since done`:void 0}function se(e,t){return t!==void 0&&t.kind!==`created`&&t.at>e.at}function ce(e,t,n){return L(t,n)!==void 0||e!==(t?.state??`active`)}function le(e,t,n){return e===`done`&&t?.state===`done`&&L(t,n)!==void 0?`Keep done`:F(e)}var R=[`pinned`,`active`,`waiting`,`done`],ue=e=>N.find(t=>t.id===e).name,de={pinned:{title:`Pinned`,key:`p`},active:{title:ue(`active`),key:`a`},waiting:{title:ue(`waiting`),key:`w`},done:{title:ue(`done`),key:`d`}};function fe(e){return typeof e==`string`&&R.includes(e)}function pe(e,t,n,r){return e&&!he(r)?`pinned`:oe(t,n)}function me(e,t){let n=e=>R.indexOf(t(e));return[...e].sort((e,t)=>n(e)-n(t))}function he(e){return e===`queue`}function ge(e,t,n){return e?I(t,n)?.text:L(t,n)}var _e=[`all`,`queue`,`in-progress`,`complete`],ve=[`any`,`open`,`merged`,`closed`],ye=[`q`,`f`,`by`,`pr`,`page`];function be(e,t){let n=`${e} review${e===1?``:`s`}`;return e===t?n:`${n} · ${t} branch${t===1?``:`es`}`}function xe(e,t,n){let r={pinned:{shown:[],total:0},active:{shown:[],total:0},waiting:{shown:[],total:0},done:{shown:[],total:0}};for(let i of e){let e=t(i),a=r[e];a.total<n[e]&&a.shown.push(i),a.total+=1}return r}function Se(){return{pinned:15,active:15,waiting:15,done:15}}function Ce(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!ye.includes(e)&&/^[a-z][a-z0-9_-]*$/i.test(e)&&n!==``&&i.append(e,n);let a=i.toString();return{query:t.get(`q`)??``,filter:_e.includes(n)?n:`all`,author:t.get(`by`)??``,pr:ve.includes(r)?r:`any`,...a===``?{}:{extra:a}}}function we(e){let t=new URLSearchParams;e.query!==``&&t.set(`q`,e.query),e.filter!==`all`&&t.set(`f`,e.filter),e.author!==``&&t.set(`by`,e.author),e.pr!==`any`&&t.set(`pr`,e.pr);for(let[n,r]of new URLSearchParams(e.extra??``))ye.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Te(e,t){return t===`all`||t===`queue`?!0:t===`in-progress`?e.status!==`complete`:e.status===t}function Ee(e,t){return t===`any`||e.prState===t}function De(e,t){return t===``||e===t}function Oe(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function ke(e){return e?`Unpin review`:`Pin review`}function Ae(e){return e?`Remove from review queue`:`Add to review queue`}function je(e,t){let n=t.query.trim().toLowerCase();return Me(e.filter(e=>(!n||e.searchText.includes(n))&&Te(e,t.filter)&&De(e.author,t.author)&&Ee(e,t.pr)),t.filter)}function Me(e,t){return he(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function Ne(e){return e===0?`Queue`:`Queue (${e})`}function Pe(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function Fe(e,t){if(e===0)return`Nothing selected`;let n=`${e} selected`;return t>0?`${n} · ${t} not shown`:n}function Ie(e){return e===0?`Select all`:`Select all ${e}`}function Le(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function Re(e){return`${Le(e)}?`}function ze(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var Be=[{id:`global`,label:`Global`},{id:`reviews`,label:`Reviews list`},{id:`notifications`,label:`Notifications list`},{id:`findings`,label:`Issues and Questions`},{id:`sections`,label:`Review sections`},{id:`buddy`,label:`Buddy AI`},{id:`actions`,label:`Review actions`},{id:`workspace`,label:`Workspace and focus`}],z=(...e)=>({kind:`chord`,keys:e}),B=(e,t)=>({kind:`key`,key:e,...t?{shift:t}:{}}),Ve=e=>({kind:`key`,key:e,primary:!0}),He=R.map(e=>({id:`reviews.section.${e}`,label:`${de[e].title} section`,group:`reviews`,page:`reviews`,binding:z(`l`,de[e].key)})),V=[{id:`palette.open`,label:`Command palette`,group:`global`,page:`global`,binding:{kind:`combo`,key:`k`}},{id:`add.open`,label:`Add review`,group:`global`,page:`global`,binding:{kind:`combo`,key:`p`}},{id:`add.pullRequest`,label:`Review pull requests`,group:`global`,page:`global`,binding:z(`p`,`p`)},{id:`add.branch`,label:`Review branch`,group:`global`,page:`global`,binding:z(`p`,`b`)},{id:`navigate.reviews`,label:`Go to Reviews`,group:`global`,page:`global`,binding:z(`r`)},{id:`navigate.notifications`,label:`Go to Notifications`,group:`global`,page:`global`,binding:z(`n`)},{id:`help.shortcuts`,label:`Keyboard shortcuts`,group:`global`,page:`global`,binding:z(`?`)},{id:`reviews.search`,label:`Search reviews`,group:`reviews`,page:`reviews`,binding:z(`s`)},{id:`reviews.filters`,label:`Filters`,group:`reviews`,page:`reviews`,binding:z(`f`)},...He,{id:`reviews.next`,label:`Next review`,group:`reviews`,page:`reviews`,binding:B(`j`)},{id:`reviews.previous`,label:`Previous review`,group:`reviews`,page:`reviews`,binding:B(`k`)},{id:`reviews.open`,label:`Open review`,group:`reviews`,page:`reviews`,binding:B(`Enter`)},{id:`reviews.openInNewTab`,label:`Open review in new tab`,group:`reviews`,page:`reviews`,binding:B(`Enter`,!0)},{id:`reviews.menu`,label:`Open review menu`,group:`reviews`,page:`reviews`,binding:B(` `)},{id:`notifications.next`,label:`Next notification`,group:`notifications`,page:`notifications`,binding:B(`j`)},{id:`notifications.previous`,label:`Previous notification`,group:`notifications`,page:`notifications`,binding:B(`k`)},{id:`notifications.open`,label:`Open notification`,group:`notifications`,page:`notifications`,binding:B(`Enter`)},{id:`notifications.openInNewTab`,label:`Open notification in new tab`,group:`notifications`,page:`notifications`,binding:B(`Enter`,!0)},{id:`review.findings.next`,label:`Next card`,group:`findings`,page:`review`,binding:B(`j`)},{id:`review.findings.previous`,label:`Previous card`,group:`findings`,page:`review`,binding:B(`k`)},{id:`review.findings.askBuddy`,label:`Ask Buddy about the card`,group:`findings`,page:`review`,binding:B(` `)},{id:`review.findings.copy`,label:`Copy the card`,group:`findings`,page:`review`,binding:Ve(`c`)},{id:`review.findings.choose`,label:`Include in feedback, or leave out`,group:`findings`,page:`review`,binding:B(`Enter`)},{id:`review.feedback.prepare`,label:`Prepare feedback from the chosen cards`,group:`findings`,page:`review`,binding:Ve(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:Ve(`c`),within:`[data-feedback-dialog]`,hint:`[data-feedback-copy]`,showHint:!0},{id:`review.section.review`,label:`Review overview`,group:`sections`,page:`review`,binding:z(`s`,`r`)},{id:`review.section.kiss`,label:`KISS`,group:`sections`,page:`review`,binding:z(`s`,`k`)},{id:`review.section.issues`,label:`Issues`,group:`sections`,page:`review`,binding:z(`s`,`i`)},{id:`review.section.diagrams`,label:`Diagrams`,group:`sections`,page:`review`,binding:z(`s`,`g`)},{id:`review.section.questions`,label:`Questions`,group:`sections`,page:`review`,binding:z(`s`,`q`)},{id:`review.section.files`,label:`Files`,group:`sections`,page:`review`,binding:z(`s`,`f`)},{id:`review.buddy.open`,label:`Open Buddy AI`,group:`buddy`,page:`review`,binding:z(`b`,`o`)},{id:`review.buddy.prompt`,label:`Choose a prompt`,group:`buddy`,page:`review`,binding:z(`b`,`p`)},{id:`review.mark.reviewed`,label:`Mark reviewed`,group:`actions`,page:`review`,binding:z(`m`,`r`),hint:`[data-review-menu] [data-mark-status]`},{id:`review.mark.waiting`,label:`Mark waiting`,group:`actions`,page:`review`,binding:z(`m`,`w`),hint:`[data-review-menu] [data-lifecycle-set="waiting"]`},{id:`review.mark.done`,label:`Mark done`,group:`actions`,page:`review`,binding:z(`m`,`d`),hint:`[data-review-menu] [data-lifecycle-set="done"]`},{id:`review.checkUpdates`,label:`Check for updates`,group:`actions`,page:`review`,binding:z(`a`,`c`),hint:`[data-review-menu] [data-fresh-check]`},{id:`review.update`,label:`Update review`,group:`actions`,page:`review`,binding:z(`a`,`u`)},{id:`review.queue.toggle`,label:`Queue`,group:`actions`,page:`review`,binding:z(`a`,`q`),hint:`[data-review-menu] [data-queue-action]`},{id:`review.feedback.toggle`,label:`Start or exit Prepare feedback`,group:`actions`,page:`review`,binding:z(`a`,`p`)},{id:`review.delete`,label:`Delete`,group:`actions`,page:`review`,binding:z(`a`,`d`),hint:`[data-review-menu] [data-delete]`},{id:`review.focus.toggle`,label:`Expand or collapse this section`,group:`workspace`,page:`review`,binding:B(`\\`),hint:`[data-focus-toggle]`},{id:`review.leave`,label:`Leave the Buddy AI field, Prepare feedback, or focus mode`,group:`workspace`,page:`review`,binding:B(`Escape`)}],Ue=[{page:`global`,keys:[`p`],label:`Add review`,combo:`p`},{page:`review`,keys:[`s`],label:`Sections`},{page:`review`,keys:[`m`],label:`Mark`},{page:`review`,keys:[`a`],label:`Actions`},{page:`review`,keys:[`b`],label:`Buddy AI`},{page:`reviews`,keys:[`l`],label:`List sections`}];function We(e,t=V){return t.filter(t=>t.page===`global`||t.page===e)}function Ge(e,t=V){let n={kind:`node`,key:``,label:`Commands`,children:[]},r=(t,r)=>{let i=n;for(let[n,a]of t.entries()){let o=i.children.find(e=>e.key===a);if(o?.kind===`leaf`)throw Error(`Chord ${t.slice(0,n+1).join(` `)} is a command and a namespace on ${e}`);if(o){i=o;continue}let s={kind:`node`,key:a,label:Ue.find(r=>(r.page===e||r.page===`global`)&&r.keys.join(` `)===t.slice(0,n+1).join(` `))?.label??r??a.toUpperCase(),children:[]};i.children.push(s),i=s}return i};for(let n of We(e,t)){if(n.binding.kind!==`chord`)continue;let t=n.binding.keys,i=r(t.slice(0,-1)),a=t[t.length-1];if(i.children.some(e=>e.key===a))throw Error(`Chord ${t.join(` `)} is bound twice on ${e}`);i.children.push({kind:`leaf`,key:a,command:n})}return n}function Ke(e){return We(e).filter(e=>e.binding.kind===`key`)}var qe=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function Je(e){return qe.has(e.key)}function Ye(e){let t=e.key;if(t.length===1){if(/^[a-z]$/i.test(t))return t.toLowerCase();let n=/^Key([A-Z])$/.exec(e.code??``);return n&&/\p{L}/u.test(t)?n[1].toLowerCase():t}return null}var Xe=new Set(V.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function Ze(e,t){let n=t?e.metaKey:e.ctrlKey,r=t?e.ctrlKey:e.metaKey;if(!n||r||e.altKey||e.shiftKey||e.isComposing)return null;let i=Ye(e);return i!==null&&Xe.has(i)?i:null}function Qe(e){return V.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function $e(e,t,n=!1){if(e.kind!==`key`||t.altKey||t.isComposing)return!1;let r=n?t.metaKey:t.ctrlKey;return(n?t.ctrlKey:t.metaKey)||r!==(e.primary===!0)||t.shiftKey!==(e.shift===!0)?!1:e.key===`\\`?t.key===`\\`||t.code===`Backslash`:e.key.length===1?Ye(t)===e.key:t.key===e.key}function et(e){let t=null,n=[];return{get at(){return t},get path(){return n},start(r=[]){let i=e,a=[];for(let e of r){let t=i.children.find(t=>t.key===e);if(t?.kind!==`node`)break;i=t,a.push(e)}t=i,n=a},press(e){let r=t?.children.find(t=>t.key===e);return r?r.kind===`leaf`?(t=null,n=[],{kind:`run`,command:r.command}):(t=r,n=[...n,e],{kind:`descend`,node:r}):(t=null,n=[],{kind:`cancel`})},reset(){t=null,n=[]}}}var tt={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function H(e){return tt[e]??(e.length===1?e.toUpperCase():e)}function U(e,t=`k`){let n=t.toUpperCase();return e?`⌘${n}`:`Ctrl+${n}`}function W(e,t){let n=Ue.find(t=>t.combo!==void 0&&t.keys.every((t,n)=>e[n]===t));return n?[U(t,n.combo),...e.slice(n.keys.length).map(H)]:[U(t),...e.map(H)]}function G(e,t){return e.kind===`combo`?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.kind===`chord`?W(e.keys,t).join(` `):e.primary?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.shift?`Shift+${H(e.key)}`:H(e.key)}function nt(e,t){return e.kind===`chord`?W(e.keys,t):[G(e,t)]}function rt(e,t){if(e.kind===`chord`)return null;if(e.kind===`combo`)return`${t?`Meta`:`Control`}+${e.key.toUpperCase()}`;let n=e.key===` `?`Space`:e.key.length===1?e.key.toUpperCase():e.key;return e.primary?`${t?`Meta`:`Control`}+${n}`:e.shift?`Shift+${n}`:n}function it(e){return Be.map(t=>({group:t.id,label:t.label,rows:V.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:nt(t.binding,e),label:t.label}))})).filter(e=>e.rows.length>0)}function K(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function q(e,t){return K(e,`kbd`,`prb-kbd`,t)}function at(e,t,n){let r=K(e,`dialog`,`prb-palette`);r.setAttribute(`data-command-palette`,``),r.setAttribute(`aria-labelledby`,`prb-palette-title`);let i=K(e,`div`,`prb-palette-panel`);i.tabIndex=-1,r.append(i),e.body.append(r),r.addEventListener(`click`,e=>{if(e.stopPropagation(),e.target===r)return n();let i=e.target?.closest?.(`[data-palette-key]`);i?.dataset.paletteKey!==void 0&&i.getAttribute(`aria-disabled`)!==`true`&&t(i.dataset.paletteKey)}),r.addEventListener(`cancel`,e=>{e.preventDefault(),n()});let a=(t,n)=>{let r=K(e,`div`,`prb-palette-head`),i=K(e,`span`,`prb-palette-trail`);for(let[n,r]of t.entries())n>0&&i.append(K(e,`span`,`prb-palette-sep`,`›`)),i.append(q(e,r));let a=K(e,`h2`,`prb-palette-title`,n);return a.id=`prb-palette-title`,r.append(i,a),r};return{dialog:r,show:t=>{i.replaceChildren(a(t.trail,t.title));let n=K(e,`div`,`prb-palette-list`);n.setAttribute(`role`,`group`),n.setAttribute(`aria-labelledby`,`prb-palette-title`);let o=null;for(let r of t.rows){t.groupLabels&&r.group!==o&&(n.append(K(e,`p`,`prb-palette-group`,t.groupLabels[r.group]??r.group)),o=r.group);let i=K(e,`button`,`prb-palette-row`);i.type=`button`,i.dataset.paletteKey=r.key,r.available||i.setAttribute(`aria-disabled`,`true`),r.namespace&&i.setAttribute(`aria-haspopup`,`true`),i.append(q(e,r.keyLabel),K(e,`span`,`prb-palette-label`,r.namespace?`${r.label}…`:r.label)),r.state&&i.append(K(e,`span`,`prb-palette-state`,r.state)),n.append(i)}if(t.rows.length===0&&n.append(K(e,`p`,`prb-palette-empty`,`Nothing here on this page.`)),i.append(n),t.footer.length>0){let n=K(e,`div`,`prb-palette-footer`);n.append(K(e,`p`,`prb-palette-group`,`Keys on this page`));let r=K(e,`ul`,`prb-palette-keys`);for(let n of t.footer){let t=K(e,`li`);t.append(q(e,n.keys),K(e,`span`,void 0,n.label)),r.append(t)}n.append(r),i.append(n)}r.open||r.showModal(),i.focus()},showPanel:(t,n,o)=>{i.replaceChildren(a(t,n.title));let s=K(e,`div`,`prb-palette-body`);i.append(s),r.open||r.showModal(),i.dataset.mode=n.title;let c=n.mount(s,o);return()=>{delete i.dataset.mode,c?.()}},close:()=>{r.open&&r.close()},isOpen:()=>r.open}}function ot(e,t,n){let r=[...e.querySelectorAll(`[data-palette-key]`)];if(r.length===0)return!1;let i=r.indexOf(n),a=t===`ArrowDown`?r[i<0?0:(i+1)%r.length]:t===`ArrowUp`?r[i<0?r.length-1:(i-1+r.length)%r.length]:t===`Home`?r[0]:t===`End`?r[r.length-1]:null;return a?(a.focus(),!0):!1}function st(e,t){let n=K(e,`div`,`prb-shortcuts-table`);for(let r of t){let t=K(e,`section`,`prb-shortcuts-group`);t.append(K(e,`h3`,`prb-shortcuts-heading`,r.label));let i=K(e,`dl`,`prb-shortcuts-list`);for(let t of r.rows){let n=K(e,`dt`,`prb-shortcuts-keys`);n.dataset.commandId=t.id;for(let r of t.keys)n.append(q(e,r));i.append(n,K(e,`dd`,`prb-shortcuts-label`,t.label))}t.append(i),n.append(t)}return n}function ct(e,t,n,r){let i=K(e,`dialog`,`prb-dialog prb-shortcuts`);i.setAttribute(`data-shortcuts-dialog`,``),i.setAttribute(`aria-labelledby`,`prb-shortcuts-title`);let a=K(e,`div`,`prb-shortcuts-head`),o=K(e,`h2`,void 0,`Keyboard shortcuts`);o.id=`prb-shortcuts-title`;let s=K(e,`button`,`prb-shortcuts-close`,`Close`);s.type=`button`,s.setAttribute(`data-shortcuts-close`,``),a.append(o,s),i.append(a,K(e,`p`,`prb-shortcuts-hint`,n),st(e,t)),e.body.append(i);let c=null;return s.addEventListener(`click`,()=>i.close()),i.addEventListener(`click`,e=>{e.target===i&&i.close()}),i.addEventListener(`close`,()=>{c?.isConnected&&c.focus(),c=null,r?.()}),{dialog:i,open:()=>{if(i.open)return;let t=e.activeElement;c=t instanceof HTMLElement&&t!==e.body?t:null,i.showModal(),s.focus()},isOpen:()=>i.open}}var lt=/https?:\/\/[^\s<>()"'`]+/gi,ut=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,dt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,ft=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function pt(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=ut.exec(t);if(n){let[,e,t,r]=n,i=t.replace(/\.git$/i,``),a=Number(r);return{kind:`github`,owner:e,repo:i,number:a,url:`https://github.com/${e}/${i}/pull/${a}`,key:`${e}/${i}#${a}`.toLowerCase()}}let r=ft.exec(t);if(r){let[,e,n,i]=r;return{kind:`unsupported`,provider:`Bitbucket`,label:`${e}/${n} #${i}`,url:t,key:`bitbucket:${e}/${n}#${i}`.toLowerCase()}}let i=dt.exec(t);if(i){let[,e,n,r]=i,a=n.replace(/\/$/,``);return{kind:`unsupported`,provider:`GitLab`,label:`${a} !${r}`,url:t,key:`gitlab:${e}/${a}!${r}`.toLowerCase()}}return null}function mt(e){let t=[],n=new Set;for(let r of e.matchAll(lt)){let e=pt(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function ht(e){return`${e} isn't supported yet`}function gt(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var _t={waiting:`Waiting`,reviewing:`Reviewing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},vt=250,yt=1500;async function J(e,t,n){try{let r=await e.fetch(t,n===void 0?{}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)}),i=await r.json().catch(()=>({}));return r.ok?{ok:!0,value:i}:{ok:!1,status:r.status,error:typeof i.error==`string`?i.error:`Something went wrong. Try again.`}}catch{return{ok:!1,status:0,error:`The workspace server did not answer. Check it is still running.`}}}function bt(e,t,n){let r=null,i=!1,a=()=>{r=e.setTimeout(async()=>{let r=await J(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),r.value.finished||a()):r.status===404?n.lost(r.error):a())},yt)};return a(),()=>{i=!0,r!==null&&e.clearTimeout(r)}}function Y(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function X(e,t,n){let r=Y(e,`option`,void 0,t);return r.value=n,r}function Z(e,t,n){let r=Y(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function xt(e,t,n){let r=Y(e,`details`,`prb-addreview-options`);r.append(Y(e,`summary`,void 0,`Review options`));let i=Y(e,`div`,`prb-addreview-grid`);r.append(i);let a=(t,n)=>{let r=Y(e,`label`,`prb-addreview-key`,t),a=`prb-addreview-${t.toLowerCase()}`;n.id=a,r.htmlFor=a,i.append(r,n)},o=Y(e,`select`,`prb-addreview-control`);o.setAttribute(`data-addreview-agent`,``);let s=Y(e,`input`,`prb-addreview-control`);s.type=`text`,s.placeholder=`Default`,s.spellcheck=!1,s.autocomplete=`off`,s.setAttribute(`data-addreview-model`,``);let c=Y(e,`input`,`prb-addreview-control`);c.type=`text`,c.placeholder=`Auto`,c.spellcheck=!1,c.autocomplete=`off`,c.setAttribute(`data-addreview-base`,``),a(`Agent`,o),a(`Model`,s),n&&a(`Base`,c);let l=Y(e,`p`,`prb-addreview-error`);l.hidden=!0,r.append(l);let u=null,d=!1;return{element:r,base:c,loaded:J(t,`/add-review/options`).then(t=>{if(d=!0,!t.ok)return l.textContent=t.error,l.hidden=!1,r.open=!0,null;let{agents:n,agent:i}=t.value,a=n.filter(e=>e.installed);i.kind!==`resolved`&&o.append(X(e,`Choose an agent`,``));for(let t of a)o.append(X(e,t.displayName,t.id));return i.kind===`resolved`?(u=i.id,a.some(e=>e.id===i.id)||o.append(X(e,i.displayName,i.id)),o.value=i.id):(o.value=``,r.open=!0,i.kind===`refused`&&(l.textContent=i.error,l.hidden=!1)),t.value}),complete:()=>d&&o.value!==``,values:()=>({...o.value&&o.value!==u?{agent:o.value}:{},...s.value.trim()?{model:s.value.trim()}:{},...n&&c.value.trim()?{base:c.value.trim()}:{}}),setBasePlaceholder:e=>{c.placeholder=e?`Auto (${e})`:`Auto`}}}function St(e){let t=Y(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function Ct(e){return{title:`Add review`,escape:`close`,mount(t){let n=e.defaultView,r=Y(e,`div`,`prb-addreview`);r.setAttribute(`data-addreview`,`pull-requests`);let i=Y(e,`label`,`prb-addreview-label`,`Paste PR links`),a=Y(e,`textarea`,`prb-palette-input prb-addreview-paste`);a.id=`prb-addreview-paste`,i.htmlFor=a.id,a.rows=4,a.spellcheck=!1,a.autocomplete=`off`,a.placeholder=`https://github.com/owner/repo/pull/123`;let o=Y(e,`p`,`prb-palette-summary`);o.setAttribute(`aria-live`,`polite`);let s=Y(e,`ul`,`prb-addreview-rows`),c=xt(e,n,!1),l=Y(e,`p`,`prb-addreview-error`);l.hidden=!0;let u=Y(e,`p`,`prb-palette-summary`,`You can close this: the reviews carry on and appear in your list.`);u.hidden=!0;let d=Y(e,`p`,`prb-addreview-error`);d.setAttribute(`data-addreview-limit`,``),d.hidden=!0;let f=Y(e,`div`,`prb-addreview-footer`),p=St(e);f.append(p),r.append(Y(e,`p`,`prb-addreview-mode`,`Pull request`),i,a,o,d,s,u,c.element,l,f),t.append(r);let m=[],h=new Map,g=!1,_=0,v=null,y=null,b=!1,x=null,S=!1,C=()=>m.filter(e=>(e.ok||e.needsFolder)&&!!h.get(e.key)),w=0,T=()=>{let e=C().length;p.textContent=e>1?`Review ${e} PRs`:`Review PR`,p.disabled=x!==null||b||g||w>0||e===0||!c.complete(),p.hidden=x!==null},E=()=>{x===null&&(d.hidden=w===0,d.textContent=`At most 20 pull requests can be reviewed at once. Remove ${w} to continue.`)},D=(t,n)=>Y(e,`span`,`prb-addreview-status prb-addreview-${n}`,t),O=()=>{s.replaceChildren(...m.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key;let r=t.ok||!!h.get(t.key);n.dataset.state=r?`ok`:`problem`;let i=Y(e,`div`,`prb-addreview-row-head`);if(i.append(Y(e,`span`,`prb-addreview-mark`,r?`✓`:`!`),Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(i),t.reviewed?.kept){let r=D(``,`muted`);r.append(Z(e,t.reviewed.reviewId,`Resumes where it stopped`)),n.append(r,D(gt(t.reviewed.kept),`muted`))}else if(t.reviewed){let r=D(``,`muted`);r.append(Z(e,t.reviewed.reviewId,`Already reviewed`)),n.append(r)}else t.ok?n.append(D(`Ready`,`muted`)):t.reason&&n.append(D(t.reason,`problem`));if(t.folders.length>1){let r=Y(e,`select`,`prb-addreview-control prb-addreview-folder`);r.setAttribute(`aria-label`,`Local folder for ${t.label}`);for(let n of t.folders)r.append(X(e,n.branch?`${n.display} (${n.branch})`:n.display,n.path));r.value=h.get(t.key)??t.folder??``,r.addEventListener(`change`,()=>h.set(t.key,r.value)),n.append(r)}else if(t.folders.length===1)n.append(Y(e,`span`,`prb-addreview-path`,t.folders[0].display));else if(t.needsFolder){let r=Y(e,`input`,`prb-addreview-control prb-addreview-folder`);r.type=`text`,r.placeholder=`Local folder for this repository, e.g. ~/code/repo`,r.setAttribute(`aria-label`,`Local folder for ${t.label}`),r.spellcheck=!1,r.autocomplete=`off`,r.value=h.get(t.key)??``,r.addEventListener(`input`,()=>{r.value.trim()?h.set(t.key,r.value.trim()):h.delete(t.key),n.dataset.state=r.value.trim()?`ok`:`problem`,T()}),n.append(r)}return n}))},k=t=>{s.replaceChildren(...t.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key,n.dataset.status=t.status,n.dataset.state=t.status===`failed`?`problem`:`ok`;let r=Y(e,`div`,`prb-addreview-row-head`);return r.append(Y(e,`span`,`prb-addreview-mark`,t.status===`failed`?`!`:`✓`)),r.append(t.reviewId?Z(e,t.reviewId,t.label):Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(r),n.append(D(t.reason?`${_t[t.status]}: ${t.reason}`:_t[t.status],t.status===`failed`?`problem`:`muted`)),t.kept&&n.append(D(gt(t.kept),`muted`)),n})),o.textContent=A(t)},A=e=>{let t=[`reviewing`,`waiting`,`ready`,`already-reviewed`,`failed`].map(t=>[t,e.filter(e=>e.status===t).length]).filter(([,e])=>e>0);return[`${e.length} submitted`,...t.map(([e,t])=>`${t} ${_t[e].toLowerCase()}`)].join(` · `)},ee=()=>{let e=mt(a.value),t=e.filter(e=>e.kind===`github`).length;o.textContent=e.length===0?a.value.trim()?`No pull request links found.`:``:t===1?`1 pull request recognised`:`${t} pull requests recognised`,m=e.map(e=>e.kind===`github`?m.find(t=>t.key===e.key)??{key:e.key,label:`${e.owner}/${e.repo} #${e.number}`,url:e.url,ok:!1,folders:[]}:{key:e.key,label:`${e.provider} ${e.provider===`GitLab`?`merge request`:`pull request`}`,url:e.url,ok:!1,reason:ht(e.provider),folders:[]}),g=e.some(e=>e.kind===`github`),w=Math.max(0,t-20);let r=++_;O(),E(),T(),v!==null&&n.clearTimeout(v),g&&(v=n.setTimeout(async()=>{v=null;let e=await J(n,`/add-review/pull-requests/preview`,{text:a.value});if(!(S||r!==_)){if(g=!1,!e.ok)l.textContent=e.error,l.hidden=!1;else{l.hidden=!0,m=e.value.rows;for(let e of m)e.folder&&!h.has(e.key)&&h.set(e.key,e.folder)}O(),T()}},vt))},j=e=>{y=bt(n,e,{rows:e=>{x=e,k(e)},lost:e=>{l.textContent=e,l.hidden=!1,x&&k(x.map(e=>e.status===`waiting`?{...e,status:`failed`,reason:`Not started`}:e))}})},M=async()=>{if(T(),p.disabled)return;b=!0,T();let e=C().map(e=>({url:e.url,folder:h.get(e.key)})),t=await J(n,`/add-review/pull-requests`,{items:e,...c.values()});if(b=!1,!S){if(!t.ok){l.textContent=t.error,l.hidden=!1,T();return}l.hidden=!0,x=t.value.rows,a.readOnly=!0,c.element.open=!1,k(x),u.hidden=!1,T(),j(t.value.batchId)}};return a.addEventListener(`input`,ee),p.addEventListener(`click`,()=>void M()),r.addEventListener(`change`,()=>T()),r.addEventListener(`keydown`,e=>{if(e.key!==`Enter`||e.shiftKey||e.isComposing)return;let t=e.target;t.tagName!==`SELECT`&&t.tagName!==`BUTTON`&&t.tagName!==`A`&&t.tagName!==`SUMMARY`&&(e.preventDefault(),M())}),c.loaded.then(()=>T()),T(),a.focus(),()=>{S=!0,v!==null&&n.clearTimeout(v),y?.()}}}}function wt(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`branch`);let a=Y(e,`label`,`prb-addreview-label`,`Working folder`),o=Y(e,`div`,`prb-addreview-pathrow`),s=Y(e,`input`,`prb-palette-input`);s.id=`prb-addreview-folder`,a.htmlFor=s.id,s.type=`text`,s.spellcheck=!1,s.autocomplete=`off`,s.placeholder=`~/code/project`;let c=Y(e,`button`,`prb-addreview-browse`,`Browse…`);c.type=`button`,c.hidden=!0,o.append(s,c);let l=Y(e,`div`,`prb-addreview-detected`);l.setAttribute(`aria-live`,`polite`);let u=Y(e,`p`,`prb-palette-group`,`Recent`),d=Y(e,`div`,`prb-palette-results prb-addreview-recent`);d.setAttribute(`role`,`group`),d.setAttribute(`aria-label`,`Recent folders`),u.hidden=!0;let f=xt(e,r,!0),p=Y(e,`p`,`prb-addreview-error`);p.hidden=!0;let m=Y(e,`div`,`prb-addreview-footer`),h=Y(e,`p`,`prb-palette-summary`,`Waiting to start: two reviews are already running, and this one starts when one of them finishes. You can close this.`);h.hidden=!0,h.setAttribute(`data-addreview-waiting`,``);let g=St(e);g.textContent=`Review branch`,m.append(g),i.append(Y(e,`p`,`prb-addreview-mode`,`Branch`),a,o,l,u,d,f.element,p,h,m),t.append(i);let _=null,v=null,y=!1,b=!1,x=null,S=!1,C=(e,t)=>`${e}\n${t.trim()}`,w=()=>C(s.value,f.base.value),T=()=>{g.disabled=y||b||!_?.result.ok||_.key!==w()||!f.complete()},E=t=>{if(l.replaceChildren(),!t)return;if(!t.ok){l.append(Y(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`));return}let n=Y(e,`dl`,`prb-addreview-grid prb-addreview-facts`),r=(t,r)=>{let i=Y(e,`dd`);i.append(r),n.append(Y(e,`dt`,`prb-addreview-key`,t),i)};if(r(`Repository`,t.repo??``),r(`Branch`,t.branch??``),r(`Base`,t.base??`Not found`),t.reviewed?.kept){let n=Z(e,t.reviewed.reviewId,`Resumes where it stopped`),i=Y(e,`span`,`prb-addreview-kept`,gt(t.reviewed.kept)),a=Y(e,`span`);a.append(n,Y(e,`br`),i),r(`Review`,a)}else t.reviewed&&r(`Review`,Z(e,t.reviewed.reviewId,t.reviewed.inProgress?`Being reviewed now`:`Already reviewed`));l.append(n),f.setBasePlaceholder(t.base??null)},D=()=>{let e=s.value,t=f.base.value.trim(),n=C(e,t);return _?.key===n?Promise.resolve(_.result):e.trim()?J(r,`/add-review/folder/inspect`,{path:e,...t?{base:t}:{}}).then(e=>{let t=e.ok?e.value:{ok:!1,error:e.error};return!S&&w()===n&&(_={key:n,result:t},E(t),T()),t}):(_=null,E(null),T(),Promise.resolve({ok:!1}))},O=e=>{s.value=e,v!==null&&r.clearTimeout(v),T(),D(),s.focus()},k=async()=>{if(y||b)return;y=!0;let e=w(),t=s.value,i=f.values();T(),v!==null&&(r.clearTimeout(v),v=null);let a=await D();if(S)return;if(!a.ok||!f.complete()||w()!==e)return y=!1,T();let o=await J(r,`/add-review/branch`,{path:t,...i});if(y=!1,!S){if(!o.ok){p.textContent=o.error,p.hidden=!1,T();return}if(o.value.outcome===`waiting`&&o.value.batchId){b=!0,h.hidden=!1,g.hidden=!0,T();let e=e=>{x?.(),x=null,b=!1,h.hidden=!0,g.hidden=!1,p.textContent=e,p.hidden=!1,T()};x=bt(r,o.value.batchId,{rows:([t])=>{if(!(!t||t.status===`waiting`)){if(t.status===`failed`)return e(t.reason??`The review could not be started.`);n()}},lost:e});return}n()}},A=()=>{T(),v!==null&&r.clearTimeout(v),v=r.setTimeout(()=>{v=null,D()},vt)};return s.addEventListener(`input`,A),f.base.addEventListener(`input`,A),c.addEventListener(`click`,async()=>{let e=await J(r,`/add-review/folder/choose`,{});if(!S){if(!e.ok){p.textContent=e.error,p.hidden=!1;return}e.value.path?O(e.value.path):s.focus()}}),d.addEventListener(`click`,e=>{let t=e.target.closest(`[data-folder-path]`);t?.dataset.folderPath&&O(t.dataset.folderDisplay??t.dataset.folderPath)}),g.addEventListener(`click`,()=>void k()),i.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=[...d.querySelectorAll(`[data-folder-path]`)],n=t.indexOf(e.target);if(e.key===`ArrowDown`||e.key===`ArrowUp`){let r=e.key===`ArrowDown`?e.target===s?t[0]:n>=0?t[n+1]:null:n===0?s:n>0?t[n-1]:null;if(!r)return;e.preventDefault(),r.focus();return}if(e.key!==`Enter`||e.shiftKey||n>=0)return;let r=e.target;r.tagName!==`SELECT`&&r.tagName!==`BUTTON`&&r.tagName!==`A`&&r.tagName!==`SUMMARY`&&(e.preventDefault(),k())}),i.addEventListener(`change`,()=>T()),f.loaded.then(e=>{S||(c.hidden=!e?.canChooseFolder,T())}),J(r,`/add-review/folders`).then(t=>{S||!t.ok||(d.replaceChildren(...t.value.folders.map(t=>{let n=Y(e,`button`,`prb-palette-result`);return n.type=`button`,n.dataset.folderPath=t.path,n.dataset.folderDisplay=t.display,n.append(Y(e,`span`,`prb-palette-result-title`,t.branch?`${t.repo} · ${t.branch}`:t.repo),Y(e,`span`,`prb-palette-result-where`,t.display)),n})),u.hidden=t.value.folders.length===0)}),T(),s.focus(),()=>{S=!0,x?.(),v!==null&&r.clearTimeout(v)}}}}function Tt(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function Et(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:Et(t);return`global`}function Dt(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=et(Ge(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=ct(a,it(o),`${U(o)} opens the command palette and ${U(o,`p`)} adds a review, from anywhere in the workspace. Single keys never act while you are typing.`,()=>r.onSettle?.()),d={"palette.open":{run:()=>w()},"add.open":{run:()=>w([`p`])},"add.pullRequest":{panel:Ct(a)},"add.branch":{panel:wt(a)},"navigate.reviews":{run:()=>l(`/`)},"navigate.notifications":{run:()=>l(`/notifications`)},"help.shortcuts":{run:()=>u.open()}},f=e=>d[e.id]??t[e.id],p=(e,t)=>{let n=f(e);return!!n&&(n.available?.(t)??!0)},m=null,h=`back`,g=[],_=()=>{m?.(),m=null},v=(e=`dismissed`)=>{_(),s.reset(),b.close();let t=c;c=null,t?.isConnected&&t.focus(),e===`dismissed`&&r.onSettle?.()},b=at(a,e=>T(e),v),x=Ke(e).map(e=>({keys:G(e.binding,o),label:e.label})),S=Object.fromEntries(Be.map(e=>[e.id,e.label])),C=()=>{let e=s.at;if(!e)return;let t=e.children.map(e=>e.kind===`leaf`?{key:e.key,keyLabel:e.key.toUpperCase(),label:f(e.command)?.label?.()??e.command.label,namespace:!1,available:p(e.command),group:e.command.group,state:f(e.command)?.state?.()??null}:{key:e.key,keyLabel:e.key.toUpperCase(),label:e.label,namespace:!0,available:!0,group:Et(e)}),n=s.path.length===0?Be.flatMap(e=>t.filter(t=>t.group===e.id)):t;b.show({trail:W(s.path,o),title:e.label,rows:n,groupLabels:s.path.length===0?S:null,footer:x})};function w(e=[]){if(b.isOpen())return v();r.onOpen?.();let t=a.activeElement;c=t instanceof HTMLElement&&t!==a.body?t:null,s.start(e),C()}function T(e){let t=s.press(e);if(t.kind===`descend`)return C();let n=t.kind===`run`&&p(t.command)?f(t.command):null;if(n?.panel&&t.kind===`run`)return E(t.command,n.panel);v(n?`running`:`dismissed`),n?.run?.()}function E(e,t){g=e.binding.kind===`chord`?e.binding.keys.slice(0,-1):[],h=t.escape??`back`;let n=e.binding.kind===`chord`?W(e.binding.keys,o):[U(o)];m=b.showPanel(n,t,()=>v(`running`))}function D(){_(),s.start();for(let e of g)s.press(e);C()}let O=Ke(e);return i.addEventListener(`keydown`,e=>{if(b.isOpen()){if(Je(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(m)return e.key===`Escape`&&!e.isComposing?(t(),h===`close`?v():D()):Ze(e,o)?(t(),v()):void 0;if(e.key===`Escape`||Ze(e,o))return t(),v();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),ot(b.dialog,e.key,a.activeElement);return}if(e.target?.closest?.(`[data-palette-key]`)&&(e.key===`Enter`||e.key===` `)||e.key===`Tab`||e.metaKey||e.ctrlKey||e.altKey)return;t(),T(Ye(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=Ze(e,o),r=t?Qe(t):void 0;if(r){if(a.querySelector(`dialog[open]`))return;e.preventDefault(),e.stopPropagation(),f(r)?.run?.(e);return}for(let t of O){if(!$e(t.binding,e,o))continue;let r=t.within;if(r){if(!a.querySelector(r)?.matches(`[open]`))continue}else if(t.binding.kind===`key`&&t.binding.key!==`Escape`&&(n(e.target)||Tt(a)))continue;if(p(t,e)){e.preventDefault(),f(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{b.isOpen()&&v(`unloading`)}),Ot(a,e,o),{isOpen:()=>b.isOpen()||u.isOpen(),close:()=>v()}}function Ot(e,t,n){for(let r of We(t)){let t=r.hint;if(t)for(let i of e.querySelectorAll(t))if(r.binding.kind===`chord`)i.dataset.shortcutHint=G(r.binding,n);else{let e=rt(r.binding,n);if(e&&i.setAttribute(`aria-keyshortcuts`,e),r.showHint&&!i.querySelector(`:scope > .prb-key-hint`)){let e=i.ownerDocument.createElement(`kbd`);e.className=`prb-key-hint`,e.setAttribute(`aria-hidden`,`true`),e.textContent=G(r.binding,n),i.append(e)}}}}function kt(e){return`${e} more`}function At(e){return e===0?`Nothing unread`:`${e} unread`}function jt(e){return e===`restarting`?`Workspace server restarting`:e===`unreachable`?`Workspace server not running`:`Workspace server running`}function Q(e,t){let n=e.querySelector(`[data-server-status]`);if(!n)return;n.dataset.serverStatus=t;let r=n.querySelector(`[data-server-status-label]`);r&&(r.textContent=jt(t))}function Mt(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||Q(e,t?`running`:`unreachable`)}var Nt=6e3,Pt=5e3;function Ft(e=document){let t=e.querySelector(`.prb-toasts`);if(t)return t;let n=e.createElement(`div`);return n.className=`prb-toasts`,n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),e.body.append(n),n}function It(e,t,n=window){return Lt(e,{kind:t.kind,text:t.text},n)}function Lt(e,t,n){let r=e.ownerDocument,i=r.createElement(`div`);i.className=`prb-toast`,i.dataset.kind=t.kind;let a=r.createElement(`span`);a.className=`prb-toast-text`,a.textContent=t.text;let o=r.createElement(`a`);o.className=`prb-toast-open`,t.href!==void 0&&t.link!==void 0&&(o.href=t.href,o.textContent=t.link);let s=r.createElement(`button`);for(s.type=`button`,s.className=`prb-toast-close`,s.setAttribute(`aria-label`,`Dismiss: ${t.text}`),s.textContent=`×`,i.append(a,...t.href===void 0?[]:[o],s),e.append(i);e.children.length>3;)e.firstElementChild?.remove();let c=n.setTimeout(()=>i.remove(),Nt),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),Nt)};return i.addEventListener(`mouseenter`,l),i.addEventListener(`mouseleave`,u),i.addEventListener(`focusin`,l),i.addEventListener(`focusout`,u),s.addEventListener(`click`,()=>{n.clearTimeout(c),i.remove()}),i}function Rt(e,t,n=window){return Lt(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function zt(e,t,n=window){return Lt(e,{kind:`more`,text:kt(t),href:`/notifications`,link:`View all`},n)}function Bt(e=document,t=window){let n=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(n)||n<=0)return;let r=Ft(e),i=async()=>{try{let i=await t.fetch(`/notifications/recent?after=${n}`);if(Mt(e,!0),i.status===403)return;if(i.ok){let e=await i.json();typeof e.now==`number`&&(n=e.now);for(let n of[...e.notifications??[]].reverse())Rt(r,n,t);typeof e.more==`number`&&e.more>0&&zt(r,e.more,t)}}catch{Mt(e,!1)}t.setTimeout(()=>void i(),Pt)};t.setTimeout(()=>void i(),Pt)}function Vt(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:At(t)),n.hidden=t===0}function Ht(e,t){Vt(e,t.unread),typeof t.driving==`boolean`&&Ut(e,t.driving)}function Ut(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var Wt=`prb-server-restarted`;function Gt(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(Wt),t.sessionStorage.removeItem(Wt)}catch{}n!==null&&It(Ft(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var Kt=2e4,qt=300;function Jt(e){Gt();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,Yt(e,t,n)})}async function Yt(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){Ut(document,!0);return}if(!a.ok)return void $(t,n,await rn(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=tn(window.location.href,o.port)}catch{$(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,Q(document,`restarting`),i!==null){if(await $t(Number(new URL(i).port)))return void window.location.assign(i)}else if(await Xt(r)){try{window.sessionStorage.setItem(Wt,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await nn()){Q(document,`running`),$(t,n,`The server did not restart, and is still the one that was running.`);return}Q(document,`unreachable`),$(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function Xt(e){let t=Date.now()+Kt;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,qt));try{let t=await fetch(`/health`,{cache:`no-store`});if(!t.ok)continue;let n=await t.json();if(typeof n.startedAt==`number`&&n.startedAt!==e)return!0}catch{}}return!1}var Zt=4,Qt={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function $t(e,t=()=>en(e),n=Qt){let r=n.now()+Kt,i=0;for(;n.now()<r;){await n.sleep(qt);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=Zt))return!0}for(let e=0;e<Zt;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(qt)}return!0}async function en(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function tn(e,t){if(typeof t!=`number`||!Number.isInteger(t))return null;let n=new URL(e);return t===(n.port===``?n.protocol===`https:`?443:80:Number(n.port))?null:(n.port=String(t),n.href)}async function nn(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function rn(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function $(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{xe as A,te as B,fe as C,Ae as D,ke as E,le as F,k as G,C as H,I,A as J,O as K,ce as L,Fe as M,Pe as N,Ne as O,ie as P,ae as R,Se as S,Ce as T,y as U,ne as V,v as W,e as X,n as Y,Re as _,Bt as a,me as b,Q as c,st as d,it as f,Le as g,be as h,It as i,Ie as j,ze as k,At as l,ge as m,Ht as n,Ft as o,R as p,p as q,Vt as r,Mt as s,Jt as t,Dt as u,je as v,Oe as w,pe as x,we as y,P as z};
|
package/static/help.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{U as e,V as t,
|
|
1
|
+
import{U as e,V as t,X as n,d as r,f as i,t as a,u as o}from"./chunk-DqEA-C0S.js";t(),o(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(r(document,i(e(navigator)))),a(`/restart`),n(window,()=>window.location.reload());
|
package/static/notifications.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,
|
|
1
|
+
import{V as e,X as t,l as n,r,t as i,u as a}from"./chunk-DqEA-C0S.js";import{t as o}from"./chunk-C8kkSv38.js";function s(e,t,n){let r=[...e.querySelectorAll(`[data-notification-id]`)];r.forEach((e,t)=>{e.hidden=t>=n}),t&&(t.hidden=r.length<=n)}function c(e){let t=e.querySelector(`[data-notifications-more]`),n=15;s(e,t,n),t?.addEventListener(`click`,()=>{n+=15,s(e,t,n)})}e(),i(`/restart`),c(document);var l=o({doc:document,item:`[data-notification-id]`,link:`a.prb-notification-open`,walk:()=>[...document.querySelectorAll(`[data-notification-id]:not([hidden])`)].filter(e=>e.querySelector(`a.prb-notification-open`)),background:()=>document.querySelector(`.prb-shell > main`)});a(`notifications`,{"notifications.next":{run:()=>l.move(1)},"notifications.previous":{run:()=>l.move(-1)},"notifications.open":{available:()=>l.enterOpens(),run:()=>l.open()},"notifications.openInNewTab":{available:()=>l.enterOpens(),run:()=>l.openInNewTab()}});var u=document.querySelector(`[data-notifications-count]`),d=document.querySelector(`[data-notifications-read-all]`);async function f(){try{let e=await fetch(`/notifications`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`read-all`})});if(!e.ok)return null;let t=await e.json();return typeof t.unread==`number`?t.unread:null}catch{return null}}function p(e){e.setAttribute(`data-read`,`true`);let t=e.querySelector(`.prb-notification-open`),n=t?.getAttribute(`aria-label`);t&&n?.startsWith(`Unread. `)&&t.setAttribute(`aria-label`,n.slice(8))}d?.addEventListener(`click`,()=>{d.disabled=!0,f().then(e=>{if(e===null){d.disabled=!1;return}document.querySelectorAll(`[data-notification-id]`).forEach(p),u&&(u.textContent=n(e)),r(document,e),d.disabled=e===0})}),t(window,()=>window.location.reload());
|
package/static/reviews.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,F as r,G as i,H as a,J as o,K as s,L as c,M as ee,N as te,O as ne,P as re,S as l,T as ie,V as ae,Y as oe,_ as se,a as ce,b as le,g as ue,h as de,i as fe,j as pe,k as me,m as he,n as ge,o as _e,p as u,s as ve,t as ye,u as be,v as xe,w as Se,x as Ce,y as we,z as Te}from"./chunk-CXf6hwXL.js";import{a as Ee,i as De,n as Oe,o as ke,r as Ae,s as je,t as Me}from"./chunk-CndkgJPh.js";import{t as Ne}from"./chunk-BadSI8AL.js";function Pe(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Fe(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Ie(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Ie(e,!r);n(r)}function Ie(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Le(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Re(e,t,n,r){return{limits:n,expanded:t.filter(e=>e.querySelector(`[data-history-list]:not([hidden])`)).map(e=>e.dataset.id??``).filter(e=>e!==``),main:r?.scrollTop??0,focus:a(e.activeElement,e.body)}}function ze(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of u){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Be(e,t,n){if(!t)return;n.reveal(ze(t,n.limits));let r=new Set(o(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&Le(t,!0)}let a=i(t,`main`);n.pane&&a!==null&&(n.pane.scrollTop=a),s(e,t.focus)}function Ve(e,n){let r=Promise.resolve();for(let i of e){let e=i.dataset.section;if(!t(e))continue;let a=i.open;i.addEventListener(`toggle`,()=>{if(i.open===a)return;a=i.open;let t=!i.open;r=r.then(()=>n(e,t)).catch(()=>{})})}}var d=ae({ownsRestore:!0});ye(`/restart`);var f=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),He=Object.fromEntries(u.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),p=document.querySelector(`.prb-index`);function Ue(e){return{id:e.dataset.id??``,queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var m=document.querySelector(`[data-search]`),h=document.querySelector(`[data-status-filter]`),g=document.querySelector(`[data-author-filter]`),_=document.querySelector(`[data-pr-filter]`),We=document.querySelector(`[data-no-matches]`),v=document.querySelector(`[data-count]`),y=l();function Ge(e){return{stored:Te({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:re(e.dataset)??{at:0,kind:`created`}}}function Ke(e){return e.dataset.pinned===`true`}function b(e){let{stored:t,activity:n}=Ge(e);return Ce(Ke(e),t,n,E.filter)}var x=document.querySelector(`[data-bulk]`),qe=document.querySelector(`[data-bulk-count]`),Je=document.querySelector(`[data-bulk-delete]`),Ye=document.querySelector(`[data-bulk-question]`),S=document.querySelector(`[data-bulk-confirm]`),C=document.querySelector(`[data-bulk-actions]`),w=document.querySelector(`[data-bulk-error]`),T=document.querySelector(`[data-bulk-select-all]`),E=ie(window.location.hash),D=new Set,O=!1,k=document.querySelector(`[data-bulk-fetch]`),A={},j=[],M=!1;function N(){let t=E.query.trim().toLowerCase();E.author!==``&&![...g?.options??[]].some(e=>e.value===E.author)&&(E.author=``);let n=le(xe(f.map(e=>({...Ue(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...E,query:t}).map(e=>e.card),b);j=n;let r=e(n,b,y),i=new Set(u.flatMap(e=>r[e].shown));for(let e of f)e.hidden=!i.has(e);for(let e of u){let t=He[e];t&&Pe(t,r[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=r[e].total<=r[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=r[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(r[e].total))}if(m&&m.value!==E.query&&(m.value=E.query),g&&(g.value=E.author,E.author===``?delete g.dataset.active:g.dataset.active=``),_||(E.pr=`any`),_&&(_.value=E.pr,E.pr===`any`?delete _.dataset.active:_.dataset.active=``),h&&(h.value=E.filter,E.filter===`all`?delete h.dataset.active:h.dataset.active=``),v){let e=n.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);v.textContent=de(e,n.length)}We&&(We.hidden=n.length>0||f.length===0),tt(n)}var Xe=300,P=null;function F(){P!==null&&window.clearTimeout(P),P=null,d.replace(we(E),{})}function I(e,t){if(E={...E,...e},y=l(),N(),t===`now`)return F();P!==null&&window.clearTimeout(P),P=window.setTimeout(F,Xe)}window.addEventListener(`pagehide`,()=>{P!==null&&F()}),document.addEventListener(`click`,e=>{P!==null&&e.target?.closest?.(`a[href]`)&&F()},!0),m?.addEventListener(`input`,()=>I({query:m.value},`settled`)),m?.addEventListener(`keydown`,e=>{e.key===`Escape`&&m.value!==``&&(e.preventDefault(),I({query:``},`now`))}),h?.addEventListener(`change`,()=>{I({filter:h.value},`now`)}),g?.addEventListener(`change`,()=>{I({author:g.value},`now`)}),_?.addEventListener(`change`,()=>{I({pr:_.value},`now`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!u.includes(t)||(y={...y,[t]:y[t]+15},N())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{E=ie(window.location.hash),y=l(),N(),Qe()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Fe(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),J(n),N())})});async function Ze(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}L(n),N()}function L(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of f){let n=t.get(e.dataset.id??``);n===void 0?delete e.dataset.queue:e.dataset.queue=String(n),n!==void 0&&e.dataset.lifecycle!==`active`&&(e.dataset.lifecycle=`active`,delete e.dataset.lifecycleAt,J(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let r=t.has(e.dataset.queueId??``);e.dataset.queueAction=r?`remove`:`add`,e.textContent=n(r)}let r=document.querySelector(`[data-queue-option]`);r&&(r.textContent=ne(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&Le(t,n.hidden!==!1)});var R=document.querySelector(`.prb-shell > main`);function Qe(){Be(document,d.current().ui,{cards:f,pane:R,limits:y,reveal:e=>{y=e,N()}})}d.setCapturer(()=>Re(document,f,y,R)),N(),Qe();function z(e){for(let t of document.querySelectorAll(`[data-menu]`)){if(t===e)continue;let n=t.querySelector(`[data-menu-panel]`),r=t.querySelector(`[data-menu-trigger]`);n&&(n.hidden=!0),r?.setAttribute(`aria-expanded`,`false`),B(t)}}function B(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`keydown`,e=>{e.key===`Escape`&&z()}),document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return void z();let r=t.closest(`[data-menu-trigger]`);if(r){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-panel]`);if(!t)return;let i=t.hidden;z(n),B(n),t.hidden=!i,r.setAttribute(`aria-expanded`,String(i));return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),je(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),z();let t=a.closest(`[data-card]`);t&&St([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),z(),mt(o.dataset.markId,o.dataset.markStatus===`complete`);return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),z(),ht([s.dataset.lifecycleId],s.dataset.lifecycleSet);return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),z(),Ze(c.dataset.queueId,c.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1);return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),B(n);return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),$e(n);return}e.preventDefault(),e.stopPropagation()});async function $e(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();et(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{et(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function et(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function V(e){O=e,e||D.clear(),p&&(e?p.dataset.selecting=``:delete p.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);H(),N()}function H(){S&&(S.hidden=!0),C&&(C.hidden=!1),w&&(w.hidden=!0,w.textContent=``)}function tt(e){for(let e of f){let t=D.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!x||(x.hidden=!O,!O))return;let t=new Set(e.filter(nt).map(e=>e.dataset.id)),n=[...D].filter(e=>!t.has(e)).length;qe&&(qe.textContent=ee(D.size,n)),T&&(T.textContent=pe(e.length),T.disabled=e.every(e=>D.has(e.dataset.id??``))),Je&&(Je.textContent=ue(dt()));for(let e of x.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=D.size===0;k&&(k.hidden=!Oe(A,X(G())))}function nt(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>tt(j));Ve(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{V(!O)}),T?.addEventListener(`click`,()=>{for(let e of j)e.dataset.id&&D.add(e.dataset.id);H(),N()});function U(e){D.has(e)?D.delete(e):D.add(e),H(),N()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&U(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!O)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),U(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!O||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),U(t.dataset.id))});var W=Ne({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>j.filter(nt),enterAllowed:()=>!O,background:()=>R,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null}),rt=8;function it(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),P!==null&&F(),d.leaving(),at=!0,window.location.assign(t.href))}var at=!1,ot={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=m?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=m?.value??``;let r=document.createElement(`p`);r.className=`prb-palette-summary`,r.setAttribute(`aria-live`,`polite`);let i=document.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Matching reviews`);let a=()=>{let e=j.slice(0,rt);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=j.length===0?`No reviews match.`:j.length>e.length?`The first ${e.length} of ${v?.textContent??j.length}`:v?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),it(n))};n.addEventListener(`input`,()=>{m&&(m.value=n.value,m.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},st={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=v?.textContent??``},r=[h,g,_].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function ct(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var lt=Object.fromEntries(u.map(e=>[`reviews.section.${e}`,ct(e)])),ut=be(`reviews`,{...lt,"reviews.search":{available:()=>m!==null,panel:ot},"reviews.filters":{available:()=>h!==null,panel:st},"reviews.next":{run:()=>W.move(1)},"reviews.previous":{run:()=>W.move(-1)},"reviews.open":{available:()=>W.enterOpens(),run:()=>W.open()},"reviews.openInNewTab":{available:()=>W.enterOpens(),run:()=>W.openInNewTab()}},{onOpen:()=>z(),onSettle:()=>$()});function G(){return le(f.filter(e=>D.has(e.dataset.id??``)),b)}function dt(){return G().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function K(e){w&&(w.textContent=e,w.hidden=!1)}function q(e){for(let t of x?.querySelectorAll(`button`)??[])t.disabled=e}async function ft(e){let t=[...D];if(t.length!==0){q(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return q(!1),K(`That could not be saved. The workspace server refused it.`)}catch{return q(!1),K(`The workspace server did not answer. It may have stopped.`)}pt(G(),e),q(!1),V(!1)}}function pt(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=te(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=Se(r))}}async function mt(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}pt(f.filter(t=>t.dataset.id===e),t),N()}async function ht(e,t){let n;try{let r=await fetch(`/lifecycle`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,state:t})});n=r.ok?await r.json().catch(()=>null):null}catch{n=null}if(!n)return!1;let r=new Set(e);for(let e of f)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),J(e));return L(n.queue),N(),!0}function J(e){let{stored:t,activity:n}=Ge(e),i=e.querySelector(`[data-lifecycle-chip]`);if(i){let r=he(Ke(e),t,n);i.textContent=r??``,i.hidden=r===void 0}for(let i of e.querySelectorAll(`[data-lifecycle-set]`)){let e=i.dataset.lifecycleSet;i.hidden=!c(e,t,n),i.textContent=r(e,t,n)}}async function gt(e){let t=[...D];if(t.length===0)return;q(!0);let n=await ht(t,e);if(q(!1),!n)return K(`That could not be saved. The workspace server refused it or did not answer.`);V(!1)}async function _t(){let e=[...D];if(e.length===0)return;q(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return q(!1),H(),K(`Nothing was deleted. The workspace server refused it.`)}catch{return q(!1),H(),K(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of G())r.has(e.dataset.id??``)||e.remove();f=f.filter(e=>e.isConnected),D.clear();for(let e of r)D.add(e);if(q(!1),H(),n.length===0)return V(!1);N(),K([...new Set(n.map(e=>e.error))].join(` `))}async function vt(){let e=G().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;q(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return q(!1),H(),K(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return q(!1),H(),K(`Nothing was added. The workspace server refused it.`);L(t.queue);let n=t.refused??[];D.clear();for(let e of n)D.add(e.id);if(q(!1),H(),n.length===0)return V(!1);N(),K([...new Set(n.map(e=>e.error))].join(` `))}x?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void vt();let n=t.closest(`[data-bulk-mark]`);if(n)return void ft(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void gt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Ye&&(Ye.textContent=se(dt())),C&&(C.hidden=!0),S&&(S.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void _t();if(t.closest(`[data-bulk-cancel-delete]`))return H();if(t.closest(`[data-bulk-cancel]`))return V(!1)}),oe(window,()=>window.location.reload());var Y=`prb-fetch-summary`;function X(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function yt(e){return Ae(X(e),A)}function bt(){for(let e of f){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Oe(A,X([e])))}}async function xt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;A=(await e.json()).targets??{}}catch{return}bt(),N()}async function St(e,t){let n=yt(e);if(M||n.repositories===0)return;M=!0;let r=[k,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Ee(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}M=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Me),N();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:De(a)};if(a.moved>0||Q){try{window.sessionStorage.setItem(Y,JSON.stringify(o))}catch{}if(!wt())return void window.location.reload();Q=!0}fe(_e(),o)}try{let e=window.sessionStorage.getItem(Y);if(e){window.sessionStorage.removeItem(Y);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&fe(_e(),{kind:t.kind,text:t.text})}}catch{}k?.addEventListener(`click`,()=>void St(G(),k)),xt();var Ct=document.body.dataset.indexRevision??``,Z=document.body.dataset.live===`true`?Date.now():0,Q=!1;function wt(){return D.size>0||document.activeElement===m||M||ut.isOpen()||at}function $(){Q&&!wt()&&window.location.reload()}async function Tt(){try{let e=await fetch(`/revision`);if(e.ok){ve(document,!0);let t=await e.json();ge(document,t),t.live&&Z===0&&(Z=Date.now()),t.live||(Z=0);let n=me(Ct,t.revision??``,wt());if(n===`reload`)return void window.location.reload();n===`hold`&&(Q=!0)}}catch{ve(document,!1)}window.setTimeout(()=>void Tt(),ke(Z===0?2**53-1:Date.now()-Z))}Tt(),m?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),ce();
|
|
1
|
+
import{A as e,C as t,D as n,F as r,G as i,H as a,J as o,K as s,L as ee,M as te,N as ne,O as re,P as ie,S as c,T as ae,V as oe,X as se,_ as ce,a as le,b as ue,g as de,h as fe,i as pe,j as me,k as he,m as ge,n as _e,o as ve,p as l,s as ye,t as be,u as xe,v as Se,w as Ce,x as we,y as Te,z as Ee}from"./chunk-DqEA-C0S.js";import{a as De,c as Oe,i as ke,n as Ae,o as je,r as Me,s as Ne,t as Pe}from"./chunk-BsU84lX4.js";import{t as Fe}from"./chunk-C8kkSv38.js";function Ie(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Le(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Re(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Re(e,!r);n(r)}function Re(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function ze(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function Be(e,t,n,r){return{limits:n,expanded:t.filter(e=>e.querySelector(`[data-history-list]:not([hidden])`)).map(e=>e.dataset.id??``).filter(e=>e!==``),main:r?.scrollTop??0,focus:a(e.activeElement,e.body)}}function Ve(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of l){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function He(e,t,n){if(!t)return;n.reveal(Ve(t,n.limits));let r=new Set(o(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(e.dataset.id??``)&&ze(t,!0)}let a=i(t,`main`);n.pane&&a!==null&&(n.pane.scrollTop=a),s(e,t.focus)}function Ue(e,n){let r=Promise.resolve();for(let i of e){let e=i.dataset.section;if(!t(e))continue;let a=i.open;i.addEventListener(`toggle`,()=>{if(i.open===a)return;a=i.open;let t=!i.open;r=r.then(()=>n(e,t)).catch(()=>{})})}}var u=oe({ownsRestore:!0});be(`/restart`);var d=[...document.querySelectorAll(`[data-card]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),We=Object.fromEntries(l.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),f=document.querySelector(`.prb-index`);function Ge(e){return{id:e.dataset.id??``,queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var p=document.querySelector(`[data-search]`),m=document.querySelector(`[data-status-filter]`),h=document.querySelector(`[data-author-filter]`),g=document.querySelector(`[data-pr-filter]`),Ke=document.querySelector(`[data-no-matches]`),_=document.querySelector(`[data-count]`),v=c();function qe(e){return{stored:Ee({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:ie(e.dataset)??{at:0,kind:`created`}}}function Je(e){return e.dataset.pinned===`true`}function y(e){let{stored:t,activity:n}=qe(e);return we(Je(e),t,n,T.filter)}var b=document.querySelector(`[data-bulk]`),Ye=document.querySelector(`[data-bulk-count]`),Xe=document.querySelector(`[data-bulk-delete]`),Ze=document.querySelector(`[data-bulk-question]`),x=document.querySelector(`[data-bulk-confirm]`),S=document.querySelector(`[data-bulk-actions]`),C=document.querySelector(`[data-bulk-error]`),w=document.querySelector(`[data-bulk-select-all]`),T=ae(window.location.hash),E=new Set,D=!1,O=document.querySelector(`[data-bulk-fetch]`),k={},A=[],j=!1;function M(){let t=T.query.trim().toLowerCase();T.author!==``&&![...h?.options??[]].some(e=>e.value===T.author)&&(T.author=``);let n=ue(Se(d.map(e=>({...Ge(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...T,query:t}).map(e=>e.card),y);A=n;let r=e(n,y,v),i=new Set(l.flatMap(e=>r[e].shown));for(let e of d)e.hidden=!i.has(e);for(let e of l){let t=We[e];t&&Ie(t,r[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=r[e].total<=r[e].shown.length);let i=document.querySelector(`[data-section="${e}"]`);i&&(i.hidden=r[e].total===0);let a=i?.querySelector(`[data-section-count]`);a&&(a.textContent=String(r[e].total))}if(p&&p.value!==T.query&&(p.value=T.query),h&&(h.value=T.author,T.author===``?delete h.dataset.active:h.dataset.active=``),g||(T.pr=`any`),g&&(g.value=T.pr,T.pr===`any`?delete g.dataset.active:g.dataset.active=``),m&&(m.value=T.filter,T.filter===`all`?delete m.dataset.active:m.dataset.active=``),_){let e=n.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);_.textContent=fe(e,n.length)}Ke&&(Ke.hidden=n.length>0||d.length===0),rt(n)}var Qe=300,N=null;function P(){N!==null&&window.clearTimeout(N),N=null,u.replace(Te(T),{})}function F(e,t){if(T={...T,...e},v=c(),M(),t===`now`)return P();N!==null&&window.clearTimeout(N),N=window.setTimeout(P,Qe)}window.addEventListener(`pagehide`,()=>{N!==null&&P()}),document.addEventListener(`click`,e=>{N!==null&&e.target?.closest?.(`a[href]`)&&P()},!0),p?.addEventListener(`input`,()=>F({query:p.value},`settled`)),p?.addEventListener(`keydown`,e=>{e.key===`Escape`&&p.value!==``&&(e.preventDefault(),F({query:``},`now`))}),m?.addEventListener(`change`,()=>{F({filter:m.value},`now`)}),h?.addEventListener(`change`,()=>{F({author:h.value},`now`)}),g?.addEventListener(`change`,()=>{F({pr:g.value},`now`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;!t||!l.includes(t)||(v={...v,[t]:v[t]+15},M())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{T=ae(window.location.hash),v=c(),M(),et()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Le(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{let n=t.closest(`[data-card]`);n&&(n.dataset.pinned=String(e),q(n),M())})});async function $e(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}I(n),M()}function I(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of d){let n=t.get(e.dataset.id??``);n===void 0?delete e.dataset.queue:e.dataset.queue=String(n),n!==void 0&&e.dataset.lifecycle!==`active`&&(e.dataset.lifecycle=`active`,delete e.dataset.lifecycleAt,q(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let r=t.has(e.dataset.queueId??``);e.dataset.queueAction=r?`remove`:`add`,e.textContent=n(r)}let r=document.querySelector(`[data-queue-option]`);r&&(r.textContent=re(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&ze(t,n.hidden!==!1)});var L=document.querySelector(`.prb-shell > main`);function et(){He(document,u.current().ui,{cards:d,pane:L,limits:v,reveal:e=>{v=e,M()}})}u.setCapturer(()=>Be(document,d,v,L)),M(),et();var R=Ne(document,{onOpen:z,onClose:z});function z(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove(),e.querySelector(`[data-id-field]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-menu]`);if(!n)return;let r=t.closest(`[data-copy-id]`);if(r?.dataset.copyId){e.preventDefault(),e.stopPropagation(),Oe(r,r.dataset.copyId);return}let i=t.closest(`[data-fetch-review]`);if(i?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),R.closeAll();let t=i.closest(`[data-card]`);t&&Tt([t]);return}let a=t.closest(`[data-mark-status]`);if(a?.dataset.markId){e.preventDefault(),e.stopPropagation(),R.closeAll(),_t(a.dataset.markId,a.dataset.markStatus===`complete`);return}let o=t.closest(`[data-lifecycle-set]`);if(o?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),R.closeAll(),vt([o.dataset.lifecycleId],o.dataset.lifecycleSet);return}let s=t.closest(`[data-queue-action]`);if(s?.dataset.queueId){e.preventDefault(),e.stopPropagation(),R.closeAll(),$e(s.dataset.queueId,s.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),z(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),tt(n);return}e.preventDefault(),e.stopPropagation()});async function tt(e){let t=e.querySelector(`[data-delete]`),n=t?.dataset.delete;if(!n)return;let r=e.querySelector(`[data-menu-confirm]`),i=e.querySelector(`[data-confirm-delete]`);i&&(i.disabled=!0,i.textContent=`Deleting`);try{let r=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,scope:t?.dataset.scope??`review`})});if(r.ok)return void window.location.reload();nt(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{nt(e,`The workspace server did not answer. It may have stopped.`)}i&&(i.disabled=!1,i.textContent=`Delete`),r&&(r.hidden=!0);let a=e.querySelector(`[data-menu-items]`);a&&(a.hidden=!1)}function nt(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function B(e){D=e,e||E.clear(),f&&(e?f.dataset.selecting=``:delete f.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);V(),M()}function V(){x&&(x.hidden=!0),S&&(S.hidden=!1),C&&(C.hidden=!0,C.textContent=``)}function rt(e){for(let e of d){let t=E.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!b||(b.hidden=!D,!D))return;let t=new Set(e.filter(it).map(e=>e.dataset.id)),n=[...E].filter(e=>!t.has(e)).length;Ye&&(Ye.textContent=te(E.size,n)),w&&(w.textContent=me(e.length),w.disabled=e.every(e=>E.has(e.dataset.id??``))),Xe&&(Xe.textContent=de(mt()));for(let e of b.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-delete]`))e.disabled=E.size===0;O&&(O.hidden=!Ae(k,Y(W())))}function it(e){return!e.hidden&&e.closest(`details`)?.open!==!1}for(let e of document.querySelectorAll(`details[data-section]`))e.addEventListener(`toggle`,()=>rt(A));Ue(document.querySelectorAll(`details[data-section]`),(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})})),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{B(!D)}),w?.addEventListener(`click`,()=>{for(let e of A)e.dataset.id&&E.add(e.dataset.id);V(),M()});function H(e){E.has(e)?E.delete(e):E.add(e),V(),M()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&H(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!D)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),H(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!D||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),H(t.dataset.id))});var U=Fe({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>A.filter(it),enterAllowed:()=>!D,background:()=>L,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function at(){return U.holdsKeys()?U.current()?.querySelector(`:scope > [data-menu]`)??null:null}var ot=8;function st(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),N!==null&&P(),u.leaving(),ct=!0,window.location.assign(t.href))}var ct=!1,lt={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=p?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=p?.value??``;let r=document.createElement(`p`);r.className=`prb-palette-summary`,r.setAttribute(`aria-live`,`polite`);let i=document.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Matching reviews`);let a=()=>{let e=A.slice(0,ot);i.replaceChildren(...e.map(e=>{let t=document.createElement(`button`);t.type=`button`,t.className=`prb-palette-result`,t.dataset.resultId=e.dataset.id??``;let n=document.createElement(`span`);n.className=`prb-palette-result-title`,n.textContent=e.querySelector(`.prb-card-head h2`)?.textContent??``;let r=document.createElement(`span`);return r.className=`prb-palette-result-where`,r.textContent=[e.querySelector(`.prb-card-repo`)?.textContent,e.querySelector(`.prb-card-branch`)?.textContent].filter(Boolean).join(` · `),t.append(n,r),t})),r.textContent=A.length===0?`No reviews match.`:A.length>e.length?`The first ${e.length} of ${_?.textContent??A.length}`:_?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=d.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),st(n))};n.addEventListener(`input`,()=>{p&&(p.value=n.value,p.dispatchEvent(new Event(`input`,{bubbles:!0})),a())}),i.addEventListener(`click`,e=>s(e.target.closest(`.prb-palette-result`)??void 0)),e.addEventListener(`keydown`,e=>{if(e.isComposing)return;let t=o(),r=t.indexOf(e.target);if(e.key===`Enter`&&e.target===n)return e.preventDefault(),s(t[0]);let i=e.key===`ArrowDown`?r<0?t[0]:t[r+1]:e.key===`ArrowUp`?r<=0?n:t[r-1]:null;i&&(e.preventDefault(),i.focus())}),e.append(n,r,i),a(),n.focus(),n.select()}},ut={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=_?.textContent??``},r=[m,h,g].flatMap(e=>{if(!e)return[];let t=document.createElement(`label`);t.className=`prb-palette-field`;let r=document.createElement(`span`),i=(e.getAttribute(`aria-label`)??``).replace(/^Filter by /,``);r.textContent=i.charAt(0).toUpperCase()+i.slice(1);let a=document.createElement(`select`);for(let t of e.options)a.append(new Option(t.text,t.value));return a.value=e.value,a.addEventListener(`change`,()=>{e.value=a.value,e.dispatchEvent(new Event(`change`,{bubbles:!0})),n()}),t.append(r,a),[t]});e.append(...r,t),n(),r[0]?.querySelector(`select`)?.focus()}};function dt(e){let t=()=>document.querySelector(`details[data-section="${e}"]`);return{available:()=>!!(t()&&!t().hidden),state:()=>{let e=t();return e&&!e.hidden?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}var ft=Object.fromEntries(l.map(e=>[`reviews.section.${e}`,dt(e)])),pt=xe(`reviews`,{...ft,"reviews.search":{available:()=>p!==null,panel:lt},"reviews.filters":{available:()=>m!==null,panel:ut},"reviews.next":{run:()=>U.move(1)},"reviews.previous":{run:()=>U.move(-1)},"reviews.open":{available:()=>U.enterOpens(),run:()=>U.open()},"reviews.openInNewTab":{available:()=>U.enterOpens(),run:()=>U.openInNewTab()},"reviews.menu":{available:()=>at()!==null,run:()=>{let e=at();e&&R.open(e,{focusFirst:!0,returnFocus:()=>U.refocus()})}}},{onOpen:()=>R.closeAll(),onSettle:()=>$()});function W(){return ue(d.filter(e=>E.has(e.dataset.id??``)),y)}function mt(){return W().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function G(e){C&&(C.textContent=e,C.hidden=!1)}function K(e){for(let t of b?.querySelectorAll(`button`)??[])t.disabled=e}async function ht(e){let t=[...E];if(t.length!==0){K(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return K(!1),G(`That could not be saved. The workspace server refused it.`)}catch{return K(!1),G(`The workspace server did not answer. It may have stopped.`)}gt(W(),e),K(!1),B(!1)}}function gt(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=ne(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=Ce(r))}}async function _t(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}gt(d.filter(t=>t.dataset.id===e),t),M()}async function vt(e,t){let n;try{let r=await fetch(`/lifecycle`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,state:t})});n=r.ok?await r.json().catch(()=>null):null}catch{n=null}if(!n)return!1;let r=new Set(e);for(let e of d)r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),q(e));return I(n.queue),M(),!0}function q(e){let{stored:t,activity:n}=qe(e),i=e.querySelector(`[data-lifecycle-chip]`);if(i){let r=ge(Je(e),t,n);i.textContent=r??``,i.hidden=r===void 0}for(let i of e.querySelectorAll(`[data-lifecycle-set]`)){let e=i.dataset.lifecycleSet;i.hidden=!ee(e,t,n),i.textContent=r(e,t,n)}}async function yt(e){let t=[...E];if(t.length===0)return;K(!0);let n=await vt(t,e);if(K(!1),!n)return G(`That could not be saved. The workspace server refused it or did not answer.`);B(!1)}async function bt(){let e=[...E];if(e.length===0)return;K(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return K(!1),V(),G(`Nothing was deleted. The workspace server refused it.`)}catch{return K(!1),V(),G(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of W())r.has(e.dataset.id??``)||e.remove();d=d.filter(e=>e.isConnected),E.clear();for(let e of r)E.add(e);if(K(!1),V(),n.length===0)return B(!1);M(),G([...new Set(n.map(e=>e.error))].join(` `))}async function xt(){let e=W().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;K(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return K(!1),V(),G(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return K(!1),V(),G(`Nothing was added. The workspace server refused it.`);I(t.queue);let n=t.refused??[];E.clear();for(let e of n)E.add(e.id);if(K(!1),V(),n.length===0)return B(!1);M(),G([...new Set(n.map(e=>e.error))].join(` `))}b?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void xt();let n=t.closest(`[data-bulk-mark]`);if(n)return void ht(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void yt(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Ze&&(Ze.textContent=ce(mt())),S&&(S.hidden=!0),x&&(x.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void bt();if(t.closest(`[data-bulk-cancel-delete]`))return V();if(t.closest(`[data-bulk-cancel]`))return B(!1)}),se(window,()=>window.location.reload());var J=`prb-fetch-summary`;function Y(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function St(e){return Me(Y(e),k)}function Ct(){for(let e of d){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Ae(k,Y([e])))}}async function wt(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;k=(await e.json()).targets??{}}catch{return}Ct(),M()}async function Tt(e,t){let n=St(e);if(j||n.repositories===0)return;j=!0;let r=[O,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=De(n.repositories));let i=null;try{let e=await fetch(`/fetch-updates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:n.ids})});e.ok&&(i=await e.json())}catch{}j=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Pe),M();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:ke(a)};if(a.moved>0||Z){try{window.sessionStorage.setItem(J,JSON.stringify(o))}catch{}if(!Q())return void window.location.reload();Z=!0}pe(ve(),o)}try{let e=window.sessionStorage.getItem(J);if(e){window.sessionStorage.removeItem(J);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&pe(ve(),{kind:t.kind,text:t.text})}}catch{}O?.addEventListener(`click`,()=>void Tt(W(),O)),wt();var Et=document.body.dataset.indexRevision??``,X=document.body.dataset.live===`true`?Date.now():0,Z=!1;function Q(){return E.size>0||document.activeElement===p||j||pt.isOpen()||ct}function $(){Z&&!Q()&&window.location.reload()}async function Dt(){try{let e=await fetch(`/revision`);if(e.ok){ye(document,!0);let t=await e.json();_e(document,t),t.live&&X===0&&(X=Date.now()),t.live||(X=0);let n=he(Et,t.revision??``,Q());if(n===`reload`)return void window.location.reload();n===`hold`&&(Z=!0)}}catch{ye(document,!1)}window.setTimeout(()=>void Dt(),je(X===0?2**53-1:Date.now()-X))}Dt(),p?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),le();
|
package/static/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,
|
|
1
|
+
import{V as e,X as t,a as n,c as r,t as i,u as a}from"./chunk-DqEA-C0S.js";function o(e,t){if(e===``)return null;try{let n=new URL(e);return n.origin===t&&/^\/r\/[^/]+$/.test(n.pathname)?n.href:null}catch{return null}}function s(e){let t=[...document.querySelectorAll(`[data-shutdown]`)],n=document.querySelector(`[data-shutdown-dialog]`),r=document.querySelector(`[data-shutdown-confirm]`);for(let e of t)e.addEventListener(`click`,()=>n?.showModal());document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>n?.close()),r?.addEventListener(`click`,()=>{r.disabled=!0,r.textContent=`Stopping…`,fetch(e,{method:`POST`}).then(e=>{if(!e.ok)throw Error(`Shutdown refused: ${e.status}`);n?.close(),c(t)}).catch(()=>{r.disabled=!1,r.textContent=`Stop server`})})}function c(e){document.body.dataset.serverStopped=`true`,r(document,`unreachable`);let t=document.createElement(`div`);t.className=`prb-stopped-notice`,t.setAttribute(`role`,`status`);let n=document.body.dataset.wayBack;t.textContent=n?`Workspace server stopped. This page is no longer being served. Run ${n} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(t);for(let t of e)t.disabled=!0,t.classList.contains(`prb-strip-action`)||(t.textContent=`Server stopped`)}var l=[{id:`system`,label:`System`,help:`Follow your device setting`},{id:`light`,label:`Light`,help:`Always use light mode`},{id:`dark`,label:`Dark`,help:`Always use dark mode`}];function u(e){return l.some(t=>t.id===e)}function d(e){let t=e.querySelector(`[data-settings-theme]:checked`)?.value;return u(t)?t:void 0}function f(e,t){e.documentElement.dataset.theme=t}function p(e){for(let t of e.querySelectorAll(`[data-settings-theme]`))t.addEventListener(`change`,()=>{let t=d(e);t&&f(e,t)})}s(`/shutdown`),e(),a(`global`,{}),i(`/restart`);function m(){let e=document.querySelector(`[data-settings-back]`),t=o(document.referrer,window.location.origin);if(!e||t===null)return;e.href=t,e.textContent=``;let n=document.createElement(`span`);n.setAttribute(`aria-hidden`,`true`),n.textContent=`‹`,e.append(n,` Back to the review`)}m(),p(document);var h=document.querySelector(`[data-settings-save]`),g=document.querySelector(`[data-settings-status]`),_=document.querySelector(`[data-settings-port]`),v=document.querySelector(`[data-settings-port-error]`),y=document.querySelector(`[data-settings-agent]`);function b(){let e=document.querySelector(`[data-settings-usage]:checked`);return e?e.value===`on`:void 0}function x(e,t){g&&(g.textContent=e,g.dataset.kind=t)}function S(e){v&&(v.textContent=e??``),_&&(e?(_.setAttribute(`aria-invalid`,`true`),_.focus(),_.select()):_.removeAttribute(`aria-invalid`))}async function C(){if(!h)return;let e=b(),t=d(document),n={..._?{port:_.value.trim()}:{},...y?{agent:y.value}:{},...e===void 0?{}:{usageCounts:e},...t===void 0?{}:{theme:t}};h.disabled=!0,h.textContent=`Saving`;try{let e=await(await fetch(`/settings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).json().catch(()=>null);if(!e){x(`Nothing was saved. The workspace server did not answer.`,`error`);return}if(e.error){S(e.error),x(`Nothing was saved.`,`error`);return}S(null),_&&(_.value=String(e.port.configured)),f(document,e.theme),x(e.restartRequired?`Saved. This page is served on port ${e.port.current}; the workspace moves to ${e.port.configured} the next time it starts.`:`Saved.`,`saved`)}catch{x(`Nothing was saved. The workspace server could not be reached.`,`error`)}finally{h.disabled=!1,h.textContent=`Save changes`}}h?.addEventListener(`click`,()=>void C()),n(),t(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -1810,7 +1810,15 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1810
1810
|
background: var(--brand);
|
|
1811
1811
|
color: var(--on-brand);
|
|
1812
1812
|
}
|
|
1813
|
+
/* Buddy's answer on a card of its own, so the log reads as turns: purple for the reviewer, a
|
|
1814
|
+
neutral card for Buddy. Raised as cards are, white on the pane in the light theme; in the dark
|
|
1815
|
+
one --surface-raised is the pane's own colour, so the border is what draws it, as for every
|
|
1816
|
+
card there. The corner it hangs from mirrors the question's. */
|
|
1813
1817
|
.prb-msg-assistant {
|
|
1818
|
+
padding: 10px 14px;
|
|
1819
|
+
border: 1px solid var(--border);
|
|
1820
|
+
border-radius: 12px 12px 12px 2px;
|
|
1821
|
+
background: var(--surface-raised);
|
|
1814
1822
|
color: var(--text-secondary);
|
|
1815
1823
|
/* The assistant is asked to cite `path/to/file.rb:42`, and a long path is one unbreakable token.
|
|
1816
1824
|
Without this the panel scrolls sideways and the citation is cut off mid-path — which breaks
|
|
@@ -3662,6 +3670,8 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3662
3670
|
box-shadow: 0 10px 28px var(--shadow-float);
|
|
3663
3671
|
text-align: left;
|
|
3664
3672
|
}
|
|
3673
|
+
/* Above the trigger, the same gap away, when the whole panel would not show below it (menu.ts). */
|
|
3674
|
+
.prb-menu-panel[data-menu-placement='above'] { top: auto; bottom: 30px; }
|
|
3665
3675
|
.prb-menu-item {
|
|
3666
3676
|
display: block;
|
|
3667
3677
|
width: 100%;
|
|
@@ -5622,6 +5632,7 @@ body .prb-body[data-focus='buddy'] .prb-msg-user { max-width: min(90%, 78ch); }
|
|
|
5622
5632
|
box-shadow: 0 10px 28px rgba(15, 23, 42, 0.16);
|
|
5623
5633
|
color: var(--pane-ink);
|
|
5624
5634
|
}
|
|
5635
|
+
.prb-doc .prb-ask-buddy-panel[data-menu-placement='above'] { top: auto; bottom: 28px; }
|
|
5625
5636
|
.prb-doc .prb-ask-buddy-panel .pr-helper-selection-menu-item {
|
|
5626
5637
|
display: block;
|
|
5627
5638
|
width: 100%;
|
|
@@ -5817,6 +5828,14 @@ body .prb-body[data-focus]:not([data-focus='buddy']) .prb-ask-tab { top: 64px; }
|
|
|
5817
5828
|
.prb-notification[data-keyboard-current] .prb-notification-open { box-shadow: inset 0 0 0 2px var(--brand-hover); border-radius: 9px; }
|
|
5818
5829
|
.prb-notification[data-keyboard-current] a.prb-notification-open:focus-visible { outline: none; }
|
|
5819
5830
|
|
|
5831
|
+
/* A review's Issues and Questions cursor, the same ring on the card's own border, in the pane's
|
|
5832
|
+
focus colour: the pane is light in both themes. The card itself holds focus while the ring is on
|
|
5833
|
+
it, so the ring is its focus indicator. The scroll margin keeps a card J or K brings on screen
|
|
5834
|
+
off the pane's edge, and clear of the feedback tray while there is one at the foot. */
|
|
5835
|
+
.prb-doc [data-finding-card] { scroll-margin-block: 16px; }
|
|
5836
|
+
.prb-doc [data-finding-card][data-keyboard-current] { outline: 2px solid var(--pane-accent); outline-offset: -1px; }
|
|
5837
|
+
.prb-body[data-feedback-selecting] .prb-doc [data-finding-card] { scroll-margin-block-end: 88px; }
|
|
5838
|
+
|
|
5820
5839
|
/* The palette's modes (Search and Filters on the Reviews list): a field or two under the trail,
|
|
5821
5840
|
and what they find. Same tokens as the palette rows, so a mode reads as the palette, not a form. */
|
|
5822
5841
|
.prb-palette-body { display: flex; flex-direction: column; gap: 8px; padding-top: 10px; }
|
|
@@ -5877,6 +5896,66 @@ body .prb-body[data-focus]:not([data-focus='buddy']) .prb-ask-tab { top: 64px; }
|
|
|
5877
5896
|
}
|
|
5878
5897
|
.prb-palette-prompt[data-enter-target] { background: var(--surface-2); }
|
|
5879
5898
|
|
|
5899
|
+
/* Add review (⌘P P, ⌘P B): a palette mode with more to show than a search, so the palette is wider
|
|
5900
|
+
while it holds one. Rows say what each pasted link will do; the options stay folded unless there
|
|
5901
|
+
is a question in them. */
|
|
5902
|
+
.prb-palette:has(.prb-addreview) { width: min(600px, calc(100vw - 32px)); max-height: min(86vh, 760px); }
|
|
5903
|
+
.prb-addreview { display: flex; flex-direction: column; gap: 8px; }
|
|
5904
|
+
.prb-addreview-mode { margin: 0 2px; color: var(--text-secondary); font-size: var(--t-meta); font-weight: 600; }
|
|
5905
|
+
.prb-addreview-label { margin: 0 2px; color: var(--text-secondary); font-size: var(--t-micro); font-weight: 600; }
|
|
5906
|
+
.prb-addreview-paste { resize: vertical; min-height: 5.5em; font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; font-size: var(--t-meta); }
|
|
5907
|
+
.prb-addreview-rows { display: flex; flex-direction: column; gap: 6px; max-height: 32vh; margin: 0; padding: 0; overflow: auto; list-style: none; }
|
|
5908
|
+
.prb-addreview-rows:empty { display: none; }
|
|
5909
|
+
.prb-addreview-row { display: flex; flex-direction: column; gap: 3px; padding: 6px 8px; border-radius: 6px; background: var(--surface); }
|
|
5910
|
+
.prb-addreview-row-head { display: flex; align-items: baseline; gap: 8px; font-size: var(--t-meta); font-weight: 600; }
|
|
5911
|
+
.prb-addreview-mark { flex: none; width: 1em; text-align: center; color: var(--success); }
|
|
5912
|
+
.prb-addreview-row[data-state='problem'] .prb-addreview-mark { color: var(--danger); }
|
|
5913
|
+
.prb-addreview-status { padding-left: calc(1em + 8px); font-size: var(--t-micro); }
|
|
5914
|
+
.prb-addreview-muted { color: var(--text-muted); }
|
|
5915
|
+
.prb-addreview-problem { color: var(--danger-ink); }
|
|
5916
|
+
.prb-addreview-path { padding-left: calc(1em + 8px); color: var(--text-muted); font-size: var(--t-micro); font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; }
|
|
5917
|
+
.prb-addreview-row .prb-addreview-folder { margin-left: calc(1em + 8px); width: calc(100% - 1em - 8px); }
|
|
5918
|
+
.prb-addreview-link { color: inherit; }
|
|
5919
|
+
.prb-addreview-control {
|
|
5920
|
+
min-width: 0;
|
|
5921
|
+
padding: 5px 8px;
|
|
5922
|
+
border: 1px solid var(--border);
|
|
5923
|
+
border-radius: 6px;
|
|
5924
|
+
background: var(--surface);
|
|
5925
|
+
color: var(--text-primary);
|
|
5926
|
+
font: inherit;
|
|
5927
|
+
font-size: var(--t-meta);
|
|
5928
|
+
}
|
|
5929
|
+
.prb-addreview-control:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: -1px; }
|
|
5930
|
+
.prb-addreview-options summary { cursor: pointer; color: var(--text-secondary); font-size: var(--t-micro); font-weight: 600; }
|
|
5931
|
+
.prb-addreview-grid { display: grid; grid-template-columns: max-content 1fr; align-items: center; gap: 6px 12px; margin: 8px 0 0; }
|
|
5932
|
+
.prb-addreview-key { color: var(--text-muted); font-size: var(--t-micro); }
|
|
5933
|
+
.prb-addreview-facts dd { margin: 0; font-size: var(--t-meta); overflow-wrap: anywhere; }
|
|
5934
|
+
.prb-addreview-kept { color: var(--text-muted); font-size: var(--t-micro); }
|
|
5935
|
+
.prb-addreview-detected:empty { display: none; }
|
|
5936
|
+
.prb-addreview-pathrow { display: flex; gap: 6px; }
|
|
5937
|
+
.prb-addreview-pathrow .prb-palette-input { flex: 1; }
|
|
5938
|
+
.prb-addreview-browse,
|
|
5939
|
+
.prb-addreview-start {
|
|
5940
|
+
flex: none;
|
|
5941
|
+
padding: 6px 12px;
|
|
5942
|
+
border: 1px solid var(--border);
|
|
5943
|
+
border-radius: 8px;
|
|
5944
|
+
background: var(--surface);
|
|
5945
|
+
color: var(--text-primary);
|
|
5946
|
+
font: inherit;
|
|
5947
|
+
font-size: var(--t-meta);
|
|
5948
|
+
cursor: pointer;
|
|
5949
|
+
}
|
|
5950
|
+
.prb-addreview-start { border-color: var(--brand); background: var(--brand); color: var(--on-brand); font-weight: 600; }
|
|
5951
|
+
.prb-addreview-start:disabled { opacity: 0.5; cursor: default; }
|
|
5952
|
+
.prb-addreview-browse:focus-visible,
|
|
5953
|
+
.prb-addreview-start:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: 2px; }
|
|
5954
|
+
/* Pinned to the bottom of the palette as the rows scroll, so the button Enter presses is always in sight. */
|
|
5955
|
+
.prb-addreview-footer { position: sticky; bottom: -12px; display: flex; justify-content: flex-end; margin: 0 -12px -12px; padding: 8px 12px 12px; background: var(--surface-raised); }
|
|
5956
|
+
.prb-addreview-error { margin: 0 2px; color: var(--danger-ink); font-size: var(--t-micro); }
|
|
5957
|
+
.prb-addreview-recent { max-height: 30vh; }
|
|
5958
|
+
|
|
5880
5959
|
/* ── Feedback selection ──
|
|
5881
5960
|
Choosing the Issues and Questions to raise with the author. The checkboxes ship on every card
|
|
5882
5961
|
and show only while the body carries the mode, so entering it is a stylesheet change, as the
|
|
@@ -5969,6 +6048,11 @@ body .prb-body[data-focus]:not([data-focus='buddy']) .prb-ask-tab { top: 64px; }
|
|
|
5969
6048
|
.prb-selection-button:disabled { opacity: 0.5; cursor: default; }
|
|
5970
6049
|
.prb-selection-primary { border-color: var(--pane-accent); background: var(--pane-accent); color: #fff; font-weight: 600; }
|
|
5971
6050
|
.prb-selection-primary:hover:not(:disabled) { color: #fff; border-color: var(--pane-accent-ink); background: var(--pane-accent-ink); }
|
|
6051
|
+
/* A button's own key, drawn after its word (command_layer.ts paintHints): in the button's colour,
|
|
6052
|
+
quieter, so it reads as a hint on the action rather than a second label. */
|
|
6053
|
+
.prb-key-hint { margin-left: 8px; font: inherit; font-size: 0.85em; font-weight: 400; opacity: 0.75; white-space: nowrap; }
|
|
6054
|
+
/* Copy Markdown is a flex row with a 6px gap already; together they make the tray's 8px. */
|
|
6055
|
+
.prb-draft-dialog .pr-helper-msg-copy .prb-key-hint { margin-left: 2px; }
|
|
5972
6056
|
/* "2 selected" under Issues or Questions in the rail: the selection is a place's contents too. */
|
|
5973
6057
|
.prb-rail-selected { display: block; font-size: var(--t-micro); color: var(--text-muted); }
|
|
5974
6058
|
.prb-rail-selected[hidden] { display: none; }
|
package/static/sidebar.css
CHANGED
|
@@ -1244,6 +1244,8 @@
|
|
|
1244
1244
|
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
|
|
1245
1245
|
text-align: left;
|
|
1246
1246
|
}
|
|
1247
|
+
/* Above the trigger when the whole panel would not show below it (menu.ts). */
|
|
1248
|
+
.pr-helper-extension .prb-ask-buddy-panel[data-menu-placement='above'] { top: auto; bottom: 26px; }
|
|
1247
1249
|
/* The card whose menu is open comes forward. A dismissed card's opacity makes it its own layer,
|
|
1248
1250
|
where the panel's z-index counts only inside the card: the next card's Copy and sparkle painted
|
|
1249
1251
|
across the open menu, and the menu was drawn faded. */
|