prreviewbuddy 0.91.1 → 0.93.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/dist/main.js +9 -4
- package/dist/{mcp_tools-BR7_XprF.js → mcp_tools-DbFR9Z90.js} +311 -55
- package/dist/server.js +252 -71
- package/package.json +1 -1
- package/static/{chunk-DMxtqzNj.js → chunk-Cg4cN8Vk.js} +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -1
- package/static/shell.css +31 -10
- package/static/sidebar.css +25 -6
- package/static/workspace.js +76 -63
package/static/reviews.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as ee,L as te,M as ne,N as re,O as ie,P as ae,Q as oe,R as u,S as d,T as se,U as ce,V as le,W as ue,X as de,Y as fe,Z as pe,_t as me,a as he,ct as ge,ft as _e,g as ve,gt as ye,h as be,i as xe,it as Se,j as Ce,k as we,m as Te,n as Ee,nt as De,o as Oe,pt as ke,q as Ae,r as je,rt as Me,s as Ne,t as Pe,u as Fe,ut as Ie,w as Le,x as Re,xt as ze,yt as Be,z as Ve}from"./chunk-DRtin0n-.js";import{T as He,a as Ue,c as We,f as Ge,i as Ke,l as qe,m as Je,n as Ye,r as Xe,s as Ze,t as Qe,u as $e}from"./chunk-CIJm20ER.js";import{n as et,t as tt}from"./chunk-DMxtqzNj.js";import{t as nt}from"./chunk-C8kkSv38.js";import{n as rt,r as it}from"./chunk-Ahis0VaG.js";function at(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function ot(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;st(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return st(e,!r);n(r)}function st(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function ct(e){let t=e.querySelector(`[data-collections-registry]`)?.textContent??`[]`;try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(e=>!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}catch{return[]}}function lt(e){return(e.dataset.collections??``).split(` `).filter(Boolean)}async function ut(e,t,n){try{let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...t,snapshot:n})}),i=await r.json().catch(()=>null);return r.ok&&i&&(typeof i.area==`string`||i.stale===!0)?{ok:!0,answer:i}:{ok:!1,error:i?.error??`That could not be saved. The workspace server refused it.`}}catch{return{ok:!1,error:`The workspace server did not answer. It may have stopped.`}}}var dt=`prb-reviews-selection`;function ft(e,t){let n=new Set(e);return t.filter(e=>(e.dataset.lineage??e.dataset.id??``).split(` `).some(e=>n.has(e))).map(e=>e.dataset.id??``).filter(Boolean)}function pt(e,t){return t===``||e.name.toLowerCase().includes(t.trim().toLowerCase())}function mt(e,t){let n=e.trim().replace(/\s+/g,` `);if(n!==``)return t.some(e=>e.name.localeCompare(n,void 0,{sensitivity:`base`})===0)?void 0:n}function ht(e,t,n,r){let i=e.ownerDocument,a=(e,t)=>{let r=i.createElement(`label`);r.className=`prb-collections-option`;let a=i.createElement(`input`);return a.type=`checkbox`,a.value=e,a.checked=n.includes(e),a.setAttribute(`data-collections-filter-option`,``),r.append(a,i.createTextNode(` ${t}`)),r},o=t.filter(e=>pt(e,r)).map(e=>a(e.id,e.name));pt({id:`none`,name:`Uncollected`},r)&&o.unshift(a(Le,`Uncollected`)),e.replaceChildren(...o)}function gt(e,t,n,r){let i=e.ownerDocument,a=t.filter(e=>pt(e,r)).map(e=>{let t=ce(n,e.id),r=i.createElement(`label`);r.className=`prb-collections-option`;let a=i.createElement(`input`);a.type=`checkbox`,a.value=e.id,a.checked=t===`all`,a.indeterminate=t===`some`,a.dataset.membership=t,a.setAttribute(`data-collections-dialog-option`,``);let o=i.createElement(`span`);if(o.textContent=e.name,r.append(a,o),t===`some`){let t=i.createElement(`span`);t.className=`prb-collections-some`,t.textContent=`${n.filter(t=>t.includes(e.id)).length} of ${n.length}`,r.append(t)}return r});if(a.length===0&&t.length===0){let e=i.createElement(`p`);e.className=`prb-collections-none`,e.textContent=`No collections yet. Type a name to make one.`,a.push(e)}e.replaceChildren(...a)}function _t(e,t){return t?`For ${t}. Tick a collection to add it, untick to remove it.`:e===1?`For 1 selected review. Tick a collection to add it, untick to remove it.`:`For ${e} selected reviews. A part-filled box adds the rest; it never removes anything.`}function vt(e){return{title:`Expand or collapse a collection`,mount(t,n){let r=t.ownerDocument,i=r.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Collections`);let a=e.collections().map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-collection`,n.dataset.collectionChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=We(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-result-title`,o.textContent=e.name;let s=r.createElement(`span`);s.className=`prb-palette-collection-count`,s.textContent=e.count;let c=r.createElement(`span`);return c.className=`prb-palette-state`,c.textContent=e.open?`Expanded`:`Collapsed`,n.append(i,o,s,c),n});i.replaceChildren(...a);let o=t=>{t&&(n(),e.toggle(t))};i.addEventListener(`click`,e=>{o(e.target.closest(`[data-collection-choice]`)?.dataset.collectionChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=Ze(e.key);if(t!==null)return e.preventDefault(),o(a[t]?.dataset.collectionChoice);let n=a.indexOf(e.target),r=e.key===`ArrowDown`||e.key===`j`?a[Math.min(n+1,a.length-1)]:e.key===`ArrowUp`||e.key===`k`?a[Math.max(n-1,0)]:e.key===`Home`?a[0]:e.key===`End`?a[a.length-1]:void 0;r&&(e.preventDefault(),r.focus())}),t.append(i),a[0]?.focus()}}}function yt(e){let t=e.dataset.id??``,n=e.dataset.placement;return n===void 0||n===`home`?t:`${t}|${n}`}function bt(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function xt(e,t,n,r,i=new Map){return{limits:n,...i.size===0?{}:{collectionLimits:Object.fromEntries(i)},expanded:t.filter(e=>e.dataset.id&&e.querySelector(`[data-history-list]:not([hidden])`)).map(yt),main:r?.scrollTop??0,...ke(e)}}function St(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of d){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Ct(e){let t=e?.collectionLimits,n=new Map;if(!t||typeof t!=`object`||Array.isArray(t))return n;for(let[e,r]of Object.entries(t))e.startsWith(`collection`)&&Ve(e)&&typeof r==`number`&&Number.isInteger(r)&&r>15&&n.set(e,r);return n}function wt(e,t,n){if(!t)return;n.reveal(St(t,n.limits),Ct(t));let r=new Set(Be(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(yt(e))&&bt(t,!0)}let i=ye(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),me(e,t.focus,t.focusVisible)}var Tt=_e({ownsRestore:!0});Pe(`/restart`);var f=[...document.querySelectorAll(`[data-card][data-placement="home"]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),p=new Map;function Et(){p=new Map;for(let e of document.querySelectorAll(`[data-card]`)){let t=e.dataset.id??``;p.set(t,[...p.get(t)??[],e])}}Et();function Dt(e,t){for(let n of p.get(e)??[])t(n)}function m(){return[...p.values()].flat()}var h=ct(document),Ot=[...document.querySelectorAll(`[data-operation]`)],kt=document.querySelector(`[data-section="in-progress"]`),At=e=>e.dataset.inProgressOnly!==void 0,jt=Object.fromEntries(d.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),Mt=document.querySelector(`.prb-index`);function Nt(e){return{id:e.dataset.id??``,collections:lt(e),queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var g=document.querySelector(`[data-search]`),_=document.querySelector(`[data-status-filter]`),v=document.querySelector(`[data-author-filter]`),y=document.querySelector(`[data-pr-filter]`),Pt=document.querySelector(`[data-no-matches]`),b=document.querySelector(`[data-count]`),Ft=document.querySelector(`[data-clear-filters]`),x=document.querySelector(`[data-collections-filter]`),It=document.querySelector(`[data-collections-filter-search]`);function Lt(){if(!x)return;x.hidden=h.length===0;let e=x.querySelector(`[data-collections-filter-label]`);e&&(e.textContent=ie(D.collections,h)),D.collections.length===0?delete x.dataset.active:x.dataset.active=``;let t=x.querySelector(`[data-collections-filter-options]`);t&&ht(t,h,D.collections,It?.value??``)}var S=te();function Rt(e){return{stored:Ie({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:De(e.dataset)??{at:0,kind:`created`}}}function zt(e){return e.dataset.pinned===`true`}function Bt(e){let{stored:t,activity:n}=Rt(e);return l(zt(e),t,n,lt(e).length>0,D.filter)}function Vt(e){let t=Bt(e);return t===void 0?.5:d.indexOf(t)}function Ht(e){return[...e].sort((e,t)=>Vt(e)-Vt(t))}var C=new Map,w=document.querySelector(`[data-bulk]`),Ut=document.querySelector(`[data-bulk-count]`),Wt=document.querySelector(`[data-bulk-detail]`),Gt=document.querySelector(`[data-bulk-delete]`),Kt=document.querySelector(`[data-bulk-delete-label]`),qt=document.querySelector(`[data-bulk-exit]`),Jt=document.querySelector(`[data-bulk-more]`),Yt=document.querySelector(`[data-bulk-question]`),T=document.querySelector(`[data-bulk-confirm]`),Xt=document.querySelector(`[data-bulk-actions]`),E=document.querySelector(`[data-bulk-error]`),Zt=document.querySelector(`[data-bulk-select-all]`),D=s(window.location.hash),O=new Set,k=!1,A=document.querySelector(`[data-bulk-fetch]`),Qt={},j=[],$t=!1;function M(){let e=D.query.trim().toLowerCase();D.author!==``&&![...v?.options??[]].some(e=>e.value===D.author)&&(D.author=``),D.collections=D.collections.filter(e=>e===`none`||h.some(t=>t.id===e)),h.length===0&&(D.collections=[]);let t=Ht(ae(f.map(e=>({...Nt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...D,query:e}).map(e=>e.card)),n=t.filter(e=>!At(e));j=n;let r=new Set(ae(Ot.map(e=>({...Nt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...D,query:e}).map(e=>e.entry));for(let e of Ot)e.hidden=!r.has(e);if(kt){kt.hidden=r.size===0;let e=kt.querySelector(`[data-section-count]`);e&&(e.textContent=String(r.size))}let i=n.filter(e=>Bt(e)!==void 0),a=de(i,e=>Bt(e),S),o=new Set(d.flatMap(e=>a[e].shown));for(let e of d){let t=jt[e];t&&at(t,a[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=a[e].total<=a[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=a[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(a[e].total))}for(let e of en(n))o.add(e);for(let e of m())e.hidden=!o.has(e);if(g&&g.value!==D.query&&(g.value=D.query),v&&(v.value=D.author,D.author===``?delete v.dataset.active:v.dataset.active=``),y||(D.pr=`any`),y&&(y.value=D.pr,D.pr===`any`?delete y.dataset.active:y.dataset.active=``),_&&(_.value=D.filter,D.filter===`all`?delete _.dataset.active:_.dataset.active=``),Lt(),Ft&&(Ft.hidden=!u(D)),b){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);b.textContent=Ce(e(t),t.length,u(D)?e(f):void 0)}Pt&&(Pt.hidden=t.length>0||r.size>0||f.length===0),xn(n)}function en(e){let r=document.querySelector(`[data-collections-area]`);if(!r)return[];let o=ue(D.filter),s=u(D),c=e.flatMap(e=>lt(e).map(t=>({card:e,collection:t}))),l=e=>{let{stored:t,activity:n}=Rt(e);return i(zt(e),t,n,D.filter)},ee=n(c,({card:e,collection:t})=>{let n=l(e);return n===void 0?void 0:`${n===`completed`?`collection-done`:`collection`}:${t}`},e=>C.get(e)??15),te=(e,t)=>(p.get(e)??[]).find(e=>e.dataset.placement===`collection:${t}`),ne=[],re=!1;for(let e of r.querySelectorAll(`[data-collection]`)){let n=e.dataset.collection??``,r=ee.get(`collection:${n}`)??{shown:[],total:0},i=ee.get(`collection-done:${n}`)??{shown:[],total:0},l=c.filter(e=>e.collection===n),ie=l.filter(e=>zt(e.card)).length,ae=D.collections.length>0&&!D.collections.includes(n),oe=!o&&!ae&&(!s||l.length>0);if(e.hidden=!oe,!oe)continue;re=!0;for(let[t,a]of[[`collection:${n}`,r],[`collection-done:${n}`,i]]){let r=a.shown.map(e=>te(e.card.dataset.id??``,n)).filter(e=>e!==void 0),i=e.querySelector(`[data-cards="${t}"]`);i&&at(i,r),ne.push(...r);let o=e.querySelector(`[data-load-more="${t}"]`);o&&(o.hidden=a.total<=a.shown.length)}let u=e.querySelector(`[data-section="collection:${n}"] > summary [data-section-count]`);u&&(u.textContent=se(r.total,ie));let d=e.querySelector(`[data-collection-empty]`),ce=a({active:r.total,completed:i.total,pinned:ie,members:l.length},s);d&&(d.hidden=ce===void 0,d.textContent=ce??``);let le=e.querySelector(`[data-section="collection-done:${n}"]`);le&&(le.hidden=i.total===0);let ue=e.querySelector(`[data-completed-label]`);ue&&(ue.textContent=t(i.total))}return r.hidden=o||!re,ne}var tn=300,N=null;function P(){N!==null&&window.clearTimeout(N),N=null,Tt.replace(o(D),{})}function F(e,t){if(D={...D,...e},S=te(),C=new Map,M(),t===`now`)return P();N!==null&&window.clearTimeout(N),N=window.setTimeout(P,tn)}window.addEventListener(`pagehide`,()=>{N!==null&&P()}),document.addEventListener(`click`,e=>{N!==null&&e.target?.closest?.(`a[href]`)&&P()},!0),g?.addEventListener(`input`,()=>F({query:g.value},`settled`)),g?.addEventListener(`keydown`,e=>{e.key===`Escape`&&g.value!==``&&(e.preventDefault(),F({query:``},`now`))}),_?.addEventListener(`change`,()=>{F({filter:_.value},`now`)}),v?.addEventListener(`change`,()=>{F({author:v.value},`now`)}),y?.addEventListener(`change`,()=>{F({pr:y.value},`now`)}),Ft?.addEventListener(`click`,()=>{F({query:Re.query,filter:Re.filter,author:Re.author,pr:Re.pr,collections:Re.collections},`now`),g?.focus()}),it(),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;if(t&&t.startsWith(`collection`)&&Ve(t))return C.set(t,(C.get(t)??15)+15),M();!t||!d.includes(t)||(S={...S,[t]:S[t]+15},M())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{D=s(window.location.hash),S=te(),C=new Map,M(),ln()});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;ot(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{Dt(n,n=>{n.dataset.pinned=String(e);let r=n.querySelector(`[data-pin]`);r&&r!==t&&st(r,e),Kn(n)}),M()})});async function nn(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 I(await on(r));n=(await r.json()).queue}catch{return I(an)}sn(n),M()}var rn=`That could not be saved. The workspace server refused it.`,an=`The workspace server did not answer. It may have stopped.`;function I(e){he(Ne(),{kind:`failed`,text:e})}async function on(e){let t=await e.json().catch(()=>null);return typeof t?.error==`string`?t.error:rn}function sn(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of m()){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,Kn(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let n=t.has(e.dataset.queueId??``);e.dataset.queueAction=n?`remove`:`add`,e.textContent=Ae(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ee(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&bt(t,n.hidden!==!1)});var cn=document.querySelector(`.prb-shell > main`);function ln(){wt(document,Tt.current().ui,{cards:m(),pane:cn,limits:S,reveal:(e,t)=>{S=e,C=t,M()}})}Tt.setCapturer(()=>xt(document,m(),S,cn,C)),M(),ln();var L=et(document,{onOpen:vn,onClose:e=>{vn(e),window.setTimeout($,0)}});function un(){return document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null}var dn=0;async function fn(e){dn+=1;try{await e()}finally{--dn,$()}}var R=new Set,pn=`A change to this review is still being saved.`,mn=`A change to one of these reviews is still being saved. Try again once it is.`;async function hn(e,t){if(e.some(e=>R.has(e)))return!1;for(let t of e)R.add(t);gn(e);try{await t()}finally{for(let t of e)R.delete(t);gn(e)}return!0}function gn(e){let t=new Set(e);for(let e of m()){let n=e.dataset.id??``;if(!t.has(n))continue;let r=R.has(n);for(let t of e.querySelectorAll(`.prb-card-controls button.prb-state-pill`))r?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);for(let t of e.querySelectorAll(`.prb-card-controls :is([data-mark-status], [data-lifecycle-set], [data-queue-action])`))t.disabled=r}}async function _n(e,t){await hn([e],()=>fn(t))||I(pn)}function vn(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0);let r=e.querySelector(`[data-collection-rename-form]`);r&&(r.hidden=!0,X(r,void 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||n.closest(`[data-bulk]`)||n.matches(`[data-collections-filter]`))return;if(n.matches(`.prb-collection-menu`))return ur(e,t,n);if(n.matches(`[data-lifecycle-control]`))return Wn(e,t,n);let r=t.closest(`[data-collections-for]`);if(r?.dataset.collectionsFor){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=r.closest(`[data-card]`)?.querySelector(`[data-select]`)?.getAttribute(`aria-label`)?.replace(/^Select /,``);dr([r.dataset.collectionsFor],{card:t??`this review`});return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),He(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=a.closest(`[data-card]`);t&&xr([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=o.dataset.markId;_n(t,()=>Rn(t,o.dataset.markStatus===`complete`));return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=s.dataset.lifecycleId;_n(t,Un(t,s.dataset.lifecycleSet));return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=c.dataset.queueId;_n(t,()=>nn(t,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),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),vn(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),yn(n);return}e.preventDefault(),e.stopPropagation()});async function yn(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();bn(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{bn(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 bn(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function z(e){k=e,e||O.clear(),Mt&&(e?Mt.dataset.selecting=``:delete Mt.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e)),!e&&Jt&&L.close(Jt);for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);B(),M()}function B(){T&&(T.hidden=!0),Xt&&(Xt.hidden=!1),E&&(E.hidden=!0,E.textContent=``)}function xn(t){for(let e of m()){let t=O.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!w||(w.hidden=!k,!k))return;let n=new Set(m().filter(Sn).map(e=>e.dataset.id)),r=[...O].filter(e=>!n.has(e)).length,i=new Set(t.map(e=>e.dataset.id)),a=[...O].every(e=>i.has(e))?i.size:null;O.size===0?w.dataset.empty=``:delete w.dataset.empty,Ut&&(Ut.textContent=e(O.size)),Wt&&(Wt.textContent=oe(O.size,a,r)),Zt&&(Zt.textContent=pe(t.length,O.size>0&&a!==null),Zt.disabled=t.every(e=>O.has(e.dataset.id??``))),Kt&&(Kt.textContent=ne(Fn()));for(let e of w.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-collections], [data-bulk-delete]`))e.disabled=O.size===0;A&&(A.hidden=!Ye(Qt,_r(U())))}function Sn(e){return!e.hidden&&e.closest(`details:not([open]), [hidden]`)===null}function Cn(e){let t=[...e.querySelectorAll(`details[data-section]`)];for(let e of t)e.addEventListener(`toggle`,()=>xn(j));rt(t,(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}))}Cn(document),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{z(!k)}),Zt?.addEventListener(`click`,()=>{for(let e of j)e.dataset.id&&O.add(e.dataset.id);B(),M()});function wn(e){O.has(e)?O.delete(e):O.add(e),B(),M()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&wn(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!k)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], .prb-card-controls, [data-menu], [data-history-toggle]`)||(e.preventDefault(),wn(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!k||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),wn(t.dataset.id))});var V=nt({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>[...document.querySelectorAll(`[data-card]`)].filter(Sn),enterAllowed:()=>!k,background:()=>cn,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function Tn(){return V.holdsKeys()?V.current()?.querySelector(zn)??null:null}var En=8;function Dn(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),N!==null&&P(),Tt.leaving(),On=!0,window.location.assign(t.href))}var On=!1,kn={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=g?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=g?.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,En);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 ${b?.textContent??j.length}`:b?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),Dn(n))};n.addEventListener(`input`,()=>{g&&(g.value=n.value,g.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()}},An={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=b?.textContent??``},r=[_,v,y].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 jn(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 Mn=Object.fromEntries(r.map(e=>[`reviews.section.${e}`,jn(e)]));function Nn(){return[...document.querySelectorAll(`[data-collections-area]:not([hidden]) [data-collection]:not([hidden])`)].flatMap(e=>{let t=e.querySelector(`:scope > details[data-section]`);if(!t)return[];let n=t.querySelector(`[data-collection-name]`)?.textContent??``,r=t.querySelector(`:scope > summary [data-section-count]`)?.textContent??``;return[{id:e.dataset.collection??``,name:n,count:r,open:t.open}]})}var H=document.querySelector(`[data-collection-new]`),Pn=Te(`reviews`,{...Mn,"reviews.search":{available:()=>g!==null,panel:kn},"reviews.filters":{available:()=>_!==null,panel:An},"reviews.collection.new":{available:()=>H!==null&&!H.disabled,run:()=>H?.click()},"reviews.collection.fold":{available:()=>Nn().length>0,panel:vt({collections:Nn,toggle:e=>{let t=document.querySelector(`[data-collection="${CSS.escape(e)}"] > details[data-section]`);t&&(t.open=!t.open)}})},"reviews.next":{run:()=>V.move(1)},"reviews.previous":{run:()=>V.move(-1)},"reviews.open":{available:()=>V.enterOpens(),run:()=>V.open()},"reviews.openInNewTab":{available:()=>V.enterOpens(),run:()=>V.openInNewTab()},"reviews.selection.exit":{available:Qn,run:()=>T&&!T.hidden?Xn(w?.contains(document.activeElement)??!1):Zn()},"reviews.menu":{available:()=>Tn()!==null,run:()=>{let e=Tn();e&&L.open(e,{focusFirst:!0,returnFocus:()=>V.refocus()})}}},{onOpen:()=>L.closeAll(),onSettle:()=>$()});function U(){return Ht(f.filter(e=>O.has(e.dataset.id??``)))}function Fn(){return U().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function W(e){E&&(E.textContent=e,E.hidden=!1)}function G(e){for(let t of w?.querySelectorAll(`button`)??[])t.disabled=e}async function In(e){let t=[...O];if(t.length===0)return;G(!0);let n=null,r=await hn(t,async()=>{try{(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok||(n=`That could not be saved. The workspace server refused it.`)}catch{n=`The workspace server did not answer. It may have stopped.`}});if(!r||n!==null)return G(!1),W(r?n??``:mn);Ln(U(),e),G(!1),z(!1)}function Ln(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e.flatMap(e=>p.get(e.dataset.id??``)??[e])){t.dataset.status=n;for(let e of t.querySelectorAll(`.prb-card-status`))$e(e,n);let e=t.querySelector(`[data-mark-status]`);e&&(e.dataset.markStatus=r,e.textContent=le(r))}}async function Rn(e,t){try{let n=await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})});if(!n.ok)return I(await on(n))}catch{return I(an)}Ln(f.filter(t=>t.dataset.id===e),t),M()}var zn=`:scope > .prb-card-controls > [data-menu]:not([data-lifecycle-control])`;async function Bn(e,t){let n=e.closest(`[data-card]`),r=n?.dataset.id;if(!n||!r||R.has(r))return;let i=document.activeElement===e,a=Vn(n);Ge(e,!0);try{await _n(r,t)}finally{Ge(e,!1)}i&&Hn(e,a)}function Vn(e){let t=e=>e instanceof HTMLElement&&e.matches(`[data-card]`)&&e.checkVisibility();for(let n=e.nextElementSibling;n;n=n.nextElementSibling)if(t(n))return n;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)if(t(n))return n;return null}function Hn(e,t){if(document.activeElement===null||document.activeElement===document.body){if(e.isConnected&&e.checkVisibility())return e.focus({preventScroll:!0});t?.querySelector(`.prb-card-link`)?.focus({preventScroll:!0})}}function Un(e,t){return async()=>{await Gn([e],t)||I(`That could not be saved. The workspace server refused it or did not answer.`)}}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-card] button.prb-card-status`),n=t?.closest(`[data-card]`)?.dataset.id;!t||!n||(e.preventDefault(),Bn(t,()=>Rn(n,t.dataset.status!==`complete`)))});function Wn(e,t,n){let r=n.querySelector(`[data-lifecycle-pill]`),i=n.closest(`[data-card]`)?.dataset.id;if(!r||!i)return;let a=t.closest(`[data-lifecycle-set]`);if(a){e.preventDefault(),e.stopPropagation(),L.close(n,{returnFocus:!0}),Bn(r,Un(i,a.dataset.lifecycleSet));return}let o=r.dataset.lifecyclePress;!t.closest(`[data-lifecycle-pill]`)||!o||o===`menu`||(e.preventDefault(),Bn(r,Un(i,o)))}async function Gn(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 m())r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),Kn(e));return sn(n.queue),M(),!0}function Kn(e){let{stored:t,activity:n}=Rt(e),r=e.querySelector(`[data-lifecycle-pill]`);r&&qe(r,t,n);let i=e.querySelector(`[data-lifecycle-chip]`);if(i){let e=Me(t,n);i.textContent=e??``,i.hidden=e===void 0}for(let r of e.querySelectorAll(`[data-menu-items] [data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!ge(e,t,n),r.textContent=Se(e,t,n)}}async function qn(e){let t=[...O];if(t.length===0)return;G(!0);let n=!1,r=await hn(t,async()=>{n=await Gn(t,e)});if(G(!1),!r)return W(mn);if(!n)return W(`That could not be saved. The workspace server refused it or did not answer.`);z(!1)}async function Jn(){let e=[...O];if(e.length===0)return;G(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return G(!1),B(),W(`Nothing was deleted. The workspace server refused it.`)}catch{return G(!1),B(),W(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of U()){let t=e.dataset.id??``;r.has(t)||Dt(t,e=>e.remove())}f=f.filter(e=>e.isConnected),Et(),O.clear();for(let e of r)O.add(e);if(G(!1),B(),n.length===0)return z(!1);M(),W([...new Set(n.map(e=>e.error))].join(` `))}async function Yn(){let e=U().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;G(!0);let t=null,n=!1,r=await hn(e,async()=>{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{n=!0}});if(!r||n)return G(!1),B(),W(r?`The workspace server did not answer. It may have stopped.`:mn);if(!t?.queue)return G(!1),B(),W(`Nothing was added. The workspace server refused it.`);sn(t.queue);let i=t.refused??[];O.clear();for(let e of i)O.add(e.id);if(G(!1),B(),i.length===0)return z(!1);M(),W([...new Set(i.map(e=>e.error))].join(` `))}w?.addEventListener(`click`,e=>{let t=e.target;if(Jt&&t.closest(`[data-bulk-more] [data-menu-panel] button`)&&L.close(Jt),t.closest(`[data-bulk-queue]`))return void Yn();if(t.closest(`[data-bulk-collections]`))return dr(U().map(e=>e.dataset.id??``).filter(Boolean),{selection:!0});let n=t.closest(`[data-bulk-mark]`);if(n)return void In(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void qn(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Yt&&(Yt.textContent=re(Fn())),Xt&&(Xt.hidden=!0),T&&(T.hidden=!1),e.detail===0&&w.querySelector(`[data-bulk-cancel-delete]`)?.focus();return}if(t.closest(`[data-bulk-confirm-delete]`))return void Jn();if(t.closest(`[data-bulk-cancel-delete]`))return Xn(e.detail===0);if(t.closest(`[data-bulk-exit]`))return Zn()});function Xn(e){B(),e&&Gt?.focus()}function Zn(){let e=w?.contains(document.activeElement)??!1;z(!1),e&&document.querySelector(`[data-select-mode]`)?.focus()}function Qn(e){return!k||qt?.disabled?!1:e===void 0||Je(e,document,!0)}var K=document.querySelector(`[data-collections-dialog]`),$n=document.querySelector(`[data-collections-dialog-list]`),q=document.querySelector(`[data-collections-dialog-search]`),J=document.querySelector(`[data-collections-dialog-create]`),er=document.querySelector(`[data-collections-dialog-error]`),tr=document.querySelector(`[data-collections-dialog-for]`),Y=[],nr=!1,rr=!1,ir=document.body.dataset.cardsSnapshot??``;function ar(e,t){return ut(e,t,ir)}function or(e){if(e.stale||e.area===void 0){try{let e={ids:[...O],selecting:k};window.sessionStorage.setItem(dt,JSON.stringify(e))}catch{}K?.close(),window.location.reload();return}let t=e.area,n=document.querySelector(`[data-collections-area]`);if(n){let e=n.contains(document.activeElement)?ke(document):null,r=document.createElement(`template`);r.innerHTML=t.trim();let i=r.content.firstElementChild;if(i){if(n.replaceWith(i),Cn(i),k)for(let e of i.querySelectorAll(`.prb-card-link`))e.setAttribute(`aria-disabled`,`true`);e&&me(document,e.focus,e.focusVisible)}}h=e.collections;for(let t of f){let n=e.memberOf[t.dataset.id??``]??[];t.dataset.collections=n.join(` `);let r=t.querySelector(`[data-collections-line]`),i=we(n,h);r&&(r.textContent=i??``,r.hidden=i===void 0)}for(let t of Ot){let n=e.operations?.[t.dataset.key??``];n&&(t.dataset.collections=n.join(` `))}Et(),yr(),M()}function X(e,t){let n=e.querySelector(`[data-collection-error]`);n&&(n.textContent=t??``,n.hidden=t===void 0)}It?.addEventListener(`input`,()=>Lt()),x?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-filter-option]`);if(!t)return;let n=t.checked?[...D.collections,t.value]:D.collections.filter(e=>e!==t.value);F({collections:[...new Set(n)]},`now`),x.querySelector(`[data-collections-filter-option][value="${CSS.escape(t.value)}"]`)?.focus()});var Z=document.querySelector(`[data-collection-new-dialog]`),Q=Z?.querySelector(`[data-collection-name-input]`)??null,sr=Z?.querySelector(`[data-collection-create]`)??null,cr=!1;function lr(){H&&(H.disabled=cr),Q&&(Q.readOnly=cr),sr&&(sr.disabled=cr||(Q?.value.trim()??``)===``)}H?.addEventListener(`click`,()=>{Z&&(L.closeAll(),Q&&(Q.value=``),lr(),X(Z,void 0),Z.showModal(),Q?.focus())}),Q?.addEventListener(`input`,()=>{lr(),Z&&X(Z,void 0)}),Z?.querySelector(`[data-collection-cancel]`)?.addEventListener(`click`,()=>Z.close()),Z?.addEventListener(`close`,()=>$()),document.addEventListener(`submit`,e=>{let t=e.target;if(t.matches(`[data-collection-new-form]`)){e.preventDefault();let n=Q?.value??``;if(n.trim()===``)return;cr=!0,lr(),ar(`/collections`,{action:`create`,name:n}).then(e=>{cr=!1,lr();let n=Z?.open===!0;if(!e.ok)return X(t,e.error);Z?.close(),or(e.answer),n&&document.querySelector(`[data-collection="${CSS.escape(e.answer.id??``)}"] summary`)?.focus({focusVisible:!1})});return}let n=t.closest(`[data-collection-rename-form]`);if(n){e.preventDefault();let t=n.querySelector(`[data-collection-name-input]`)?.value??``,r=n.dataset.collectionRenameForm??``;ar(`/collections`,{action:`rename`,id:r,name:t}).then(e=>{if(!e.ok)return X(n,e.error);L.closeAll(),or(e.answer),document.querySelector(`[data-collection="${CSS.escape(r)}"] summary`)?.focus({focusVisible:!1})})}});function ur(e,t,n){let r=n.querySelector(`[data-menu-items]`),i=n.querySelector(`[data-collection-rename-form]`),a=n.querySelector(`[data-menu-confirm]`);if(t.closest(`[data-collection-rename]`)&&i){e.preventDefault(),r&&(r.hidden=!0),i.hidden=!1;let t=i.querySelector(`[data-collection-name-input]`);t?.focus(),t?.select();return}if(t.closest(`[data-collection-delete]`)&&a){e.preventDefault(),r&&(r.hidden=!0),a.hidden=!1,e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-collection-cancel], [data-cancel-delete]`)){e.preventDefault(),vn(n);return}let o=t.closest(`[data-collection-confirm-delete]`);if(o?.dataset.collectionConfirmDelete){e.preventDefault(),o.disabled=!0;let t=o.dataset.collectionConfirmDelete;ar(`/collections`,{action:`delete`,id:t}).then(e=>{if(o.disabled=!1,!e.ok)return bn(n,e.error);L.closeAll(),or(e.answer),D.collections.includes(t)&&P(),document.querySelector(`[data-collection-new]`)?.focus()})}}function dr(e,t){!K||e.length===0||(L.closeAll(),Y=[...e],nr=!1,rr=`selection`in t,tr&&(tr.textContent=_t(e.length,`card`in t?t.card:void 0)),q&&(q.value=``),mr(void 0),pr(),K.showModal(),q?.focus())}function fr(){return Y.map(e=>lt(f.find(t=>t.dataset.id===e)??document.createElement(`div`)))}function pr(){let e=q?.value??``;$n&>($n,h,fr(),e);let t=mt(e,h);J&&(J.hidden=t===void 0,J.textContent=t===void 0?``:`Create “${t}” and add ${Y.length===1?`this review`:`these ${Y.length}`}`)}function mr(e){er&&(er.textContent=e??``,er.hidden=e===void 0)}async function hr(e){mr(void 0);let t=await ar(`/collections/members`,{ids:Y,...e});if(!t.ok)return mr(t.error),pr();nr=!0,or(t.answer);let n=t.answer.refused??[];n.length>0&&(Y=Y.filter(e=>!n.some(t=>t.id===e)),mr([...new Set(n.map(e=>e.error))].join(` `))),pr()}q?.addEventListener(`input`,()=>pr()),q?.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),J&&!J.hidden&&J.click())}),J?.addEventListener(`click`,()=>{let e=mt(q?.value??``,h);e!==void 0&&hr({action:`add`,create:e}).then(()=>{q&&(q.value=``),pr(),q?.focus()})}),$n?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-dialog-option]`);if(!t)return;let n=c(t.dataset.membership??`none`),r=t.value;hr({action:n,collection:r}).then(()=>{$n.querySelector(`[data-collections-dialog-option][value="${CSS.escape(r)}"]`)?.focus()})}),document.querySelector(`[data-collections-dialog-close]`)?.addEventListener(`click`,()=>K?.close());try{let e=window.sessionStorage.getItem(dt);if(e){window.sessionStorage.removeItem(dt);let t=JSON.parse(e),n=Array.isArray(t.ids)?t.ids.filter(e=>typeof e==`string`):[];if(t.selecting===!0||n.length>0){z(!0);for(let e of ft(n,f))O.add(e);M()}}}catch{}K?.addEventListener(`close`,()=>{nr&&k&&rr&&z(!1),Y=[],$()}),ze(window,()=>window.location.reload());var gr=`prb-fetch-summary`;function _r(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function vr(e){return Xe(_r(e),Qt)}function yr(){for(let e of m()){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Ye(Qt,_r([e])))}}async function br(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;Qt=(await e.json()).targets??{}}catch{return}yr(),M()}async function xr(e,t){let n=vr(e);if($t||n.repositories===0)return;$t=!0;let r=[A,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Ue(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{}$t=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Qe),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||wr){try{window.sessionStorage.setItem(gr,JSON.stringify(o))}catch{}if(!Tr())return void window.location.reload();wr=!0}he(Ne(),o)}try{let e=window.sessionStorage.getItem(gr);if(e){window.sessionStorage.removeItem(gr);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&he(Ne(),{kind:t.kind,text:t.text})}}catch{}A?.addEventListener(`click`,()=>void xr(U(),A)),xe(),br();var Sr=document.body.dataset.indexRevision??``,Cr=document.body.dataset.live===`true`?Date.now():0,wr=!1;function Tr(){let e=K?.open===!0||Z?.open===!0||document.activeElement?.closest(`[data-collections-area], [data-collections-filter]`)!=null;return O.size>0||document.activeElement===g||$t||Pn.isOpen()||On||e||un()||dn>0}function $(){wr&&!Tr()&&je()}async function Er(){try{let e=await fetch(`/revision`);if(e.ok){Fe(document,!0);let t=await e.json();Ee(document,t),t.live&&Cr===0&&(Cr=Date.now()),t.live||(Cr=0);let n=fe(Sr,t.revision??``,Tr());if(n===`reload`)return je(),null;n===`hold`&&(wr=!0)}}catch{Fe(document,!1)}return tt(Cr===0?2**53-1:Date.now()-Cr)}var Dr=ve(window,Er);be(document,()=>Dr.now()),g?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),Oe();
|
|
1
|
+
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as ee,L as te,M as ne,N as re,O as ie,P as ae,Q as oe,R as u,S as d,T as se,U as ce,V as le,W as ue,X as de,Y as fe,Z as pe,_t as me,a as he,ct as ge,ft as _e,g as ve,gt as ye,h as be,i as xe,it as Se,j as Ce,k as we,m as Te,n as Ee,nt as De,o as Oe,pt as ke,q as Ae,r as je,rt as Me,s as Ne,t as Pe,u as Fe,ut as Ie,w as Le,x as Re,xt as ze,yt as Be,z as Ve}from"./chunk-DRtin0n-.js";import{T as He,a as Ue,c as We,f as Ge,i as Ke,l as qe,m as Je,n as Ye,r as Xe,s as Ze,t as Qe,u as $e}from"./chunk-CIJm20ER.js";import{i as et,t as tt}from"./chunk-Cg4cN8Vk.js";import{t as nt}from"./chunk-C8kkSv38.js";import{n as rt,r as it}from"./chunk-Ahis0VaG.js";function at(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function ot(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;st(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return st(e,!r);n(r)}function st(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`★`:`☆`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function ct(e){let t=e.querySelector(`[data-collections-registry]`)?.textContent??`[]`;try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(e=>!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}catch{return[]}}function lt(e){return(e.dataset.collections??``).split(` `).filter(Boolean)}async function ut(e,t,n){try{let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...t,snapshot:n})}),i=await r.json().catch(()=>null);return r.ok&&i&&(typeof i.area==`string`||i.stale===!0)?{ok:!0,answer:i}:{ok:!1,error:i?.error??`That could not be saved. The workspace server refused it.`}}catch{return{ok:!1,error:`The workspace server did not answer. It may have stopped.`}}}var dt=`prb-reviews-selection`;function ft(e,t){let n=new Set(e);return t.filter(e=>(e.dataset.lineage??e.dataset.id??``).split(` `).some(e=>n.has(e))).map(e=>e.dataset.id??``).filter(Boolean)}function pt(e,t){return t===``||e.name.toLowerCase().includes(t.trim().toLowerCase())}function mt(e,t){let n=e.trim().replace(/\s+/g,` `);if(n!==``)return t.some(e=>e.name.localeCompare(n,void 0,{sensitivity:`base`})===0)?void 0:n}function ht(e,t,n,r){let i=e.ownerDocument,a=(e,t)=>{let r=i.createElement(`label`);r.className=`prb-collections-option`;let a=i.createElement(`input`);return a.type=`checkbox`,a.value=e,a.checked=n.includes(e),a.setAttribute(`data-collections-filter-option`,``),r.append(a,i.createTextNode(` ${t}`)),r},o=t.filter(e=>pt(e,r)).map(e=>a(e.id,e.name));pt({id:`none`,name:`Uncollected`},r)&&o.unshift(a(Le,`Uncollected`)),e.replaceChildren(...o)}function gt(e,t,n,r){let i=e.ownerDocument,a=t.filter(e=>pt(e,r)).map(e=>{let t=ce(n,e.id),r=i.createElement(`label`);r.className=`prb-collections-option`;let a=i.createElement(`input`);a.type=`checkbox`,a.value=e.id,a.checked=t===`all`,a.indeterminate=t===`some`,a.dataset.membership=t,a.setAttribute(`data-collections-dialog-option`,``);let o=i.createElement(`span`);if(o.textContent=e.name,r.append(a,o),t===`some`){let t=i.createElement(`span`);t.className=`prb-collections-some`,t.textContent=`${n.filter(t=>t.includes(e.id)).length} of ${n.length}`,r.append(t)}return r});if(a.length===0&&t.length===0){let e=i.createElement(`p`);e.className=`prb-collections-none`,e.textContent=`No collections yet. Type a name to make one.`,a.push(e)}e.replaceChildren(...a)}function _t(e,t){return t?`For ${t}. Tick a collection to add it, untick to remove it.`:e===1?`For 1 selected review. Tick a collection to add it, untick to remove it.`:`For ${e} selected reviews. A part-filled box adds the rest; it never removes anything.`}function vt(e){return{title:`Expand or collapse a collection`,mount(t,n){let r=t.ownerDocument,i=r.createElement(`div`);i.className=`prb-palette-results`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,`Collections`);let a=e.collections().map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-collection`,n.dataset.collectionChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=We(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-result-title`,o.textContent=e.name;let s=r.createElement(`span`);s.className=`prb-palette-collection-count`,s.textContent=e.count;let c=r.createElement(`span`);return c.className=`prb-palette-state`,c.textContent=e.open?`Expanded`:`Collapsed`,n.append(i,o,s,c),n});i.replaceChildren(...a);let o=t=>{t&&(n(),e.toggle(t))};i.addEventListener(`click`,e=>{o(e.target.closest(`[data-collection-choice]`)?.dataset.collectionChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=Ze(e.key);if(t!==null)return e.preventDefault(),o(a[t]?.dataset.collectionChoice);let n=a.indexOf(e.target),r=e.key===`ArrowDown`||e.key===`j`?a[Math.min(n+1,a.length-1)]:e.key===`ArrowUp`||e.key===`k`?a[Math.max(n-1,0)]:e.key===`Home`?a[0]:e.key===`End`?a[a.length-1]:void 0;r&&(e.preventDefault(),r.focus())}),t.append(i),a[0]?.focus()}}}function yt(e){let t=e.dataset.id??``,n=e.dataset.placement;return n===void 0||n===`home`?t:`${t}|${n}`}function bt(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function xt(e,t,n,r,i=new Map){return{limits:n,...i.size===0?{}:{collectionLimits:Object.fromEntries(i)},expanded:t.filter(e=>e.dataset.id&&e.querySelector(`[data-history-list]:not([hidden])`)).map(yt),main:r?.scrollTop??0,...ke(e)}}function St(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of d){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function Ct(e){let t=e?.collectionLimits,n=new Map;if(!t||typeof t!=`object`||Array.isArray(t))return n;for(let[e,r]of Object.entries(t))e.startsWith(`collection`)&&Ve(e)&&typeof r==`number`&&Number.isInteger(r)&&r>15&&n.set(e,r);return n}function wt(e,t,n){if(!t)return;n.reveal(St(t,n.limits),Ct(t));let r=new Set(Be(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(yt(e))&&bt(t,!0)}let i=ye(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),me(e,t.focus,t.focusVisible)}var Tt=_e({ownsRestore:!0});Pe(`/restart`);var f=[...document.querySelectorAll(`[data-card][data-placement="home"]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),p=new Map;function Et(){p=new Map;for(let e of document.querySelectorAll(`[data-card]`)){let t=e.dataset.id??``;p.set(t,[...p.get(t)??[],e])}}Et();function Dt(e,t){for(let n of p.get(e)??[])t(n)}function m(){return[...p.values()].flat()}var h=ct(document),Ot=[...document.querySelectorAll(`[data-operation]`)],kt=document.querySelector(`[data-section="in-progress"]`),At=e=>e.dataset.inProgressOnly!==void 0,jt=Object.fromEntries(d.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),Mt=document.querySelector(`.prb-index`);function Nt(e){return{id:e.dataset.id??``,collections:lt(e),queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var g=document.querySelector(`[data-search]`),_=document.querySelector(`[data-status-filter]`),v=document.querySelector(`[data-author-filter]`),y=document.querySelector(`[data-pr-filter]`),Pt=document.querySelector(`[data-no-matches]`),b=document.querySelector(`[data-count]`),Ft=document.querySelector(`[data-clear-filters]`),x=document.querySelector(`[data-collections-filter]`),It=document.querySelector(`[data-collections-filter-search]`);function Lt(){if(!x)return;x.hidden=h.length===0;let e=x.querySelector(`[data-collections-filter-label]`);e&&(e.textContent=ie(D.collections,h)),D.collections.length===0?delete x.dataset.active:x.dataset.active=``;let t=x.querySelector(`[data-collections-filter-options]`);t&&ht(t,h,D.collections,It?.value??``)}var S=te();function Rt(e){return{stored:Ie({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:De(e.dataset)??{at:0,kind:`created`}}}function zt(e){return e.dataset.pinned===`true`}function Bt(e){let{stored:t,activity:n}=Rt(e);return l(zt(e),t,n,lt(e).length>0,D.filter)}function Vt(e){let t=Bt(e);return t===void 0?.5:d.indexOf(t)}function Ht(e){return[...e].sort((e,t)=>Vt(e)-Vt(t))}var C=new Map,w=document.querySelector(`[data-bulk]`),Ut=document.querySelector(`[data-bulk-count]`),Wt=document.querySelector(`[data-bulk-detail]`),Gt=document.querySelector(`[data-bulk-delete]`),Kt=document.querySelector(`[data-bulk-delete-label]`),qt=document.querySelector(`[data-bulk-exit]`),Jt=document.querySelector(`[data-bulk-more]`),Yt=document.querySelector(`[data-bulk-question]`),T=document.querySelector(`[data-bulk-confirm]`),Xt=document.querySelector(`[data-bulk-actions]`),E=document.querySelector(`[data-bulk-error]`),Zt=document.querySelector(`[data-bulk-select-all]`),D=s(window.location.hash),O=new Set,k=!1,A=document.querySelector(`[data-bulk-fetch]`),Qt={},j=[],$t=!1;function M(){let e=D.query.trim().toLowerCase();D.author!==``&&![...v?.options??[]].some(e=>e.value===D.author)&&(D.author=``),D.collections=D.collections.filter(e=>e===`none`||h.some(t=>t.id===e)),h.length===0&&(D.collections=[]);let t=Ht(ae(f.map(e=>({...Nt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...D,query:e}).map(e=>e.card)),n=t.filter(e=>!At(e));j=n;let r=new Set(ae(Ot.map(e=>({...Nt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...D,query:e}).map(e=>e.entry));for(let e of Ot)e.hidden=!r.has(e);if(kt){kt.hidden=r.size===0;let e=kt.querySelector(`[data-section-count]`);e&&(e.textContent=String(r.size))}let i=n.filter(e=>Bt(e)!==void 0),a=de(i,e=>Bt(e),S),o=new Set(d.flatMap(e=>a[e].shown));for(let e of d){let t=jt[e];t&&at(t,a[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=a[e].total<=a[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=a[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(a[e].total))}for(let e of en(n))o.add(e);for(let e of m())e.hidden=!o.has(e);if(g&&g.value!==D.query&&(g.value=D.query),v&&(v.value=D.author,D.author===``?delete v.dataset.active:v.dataset.active=``),y||(D.pr=`any`),y&&(y.value=D.pr,D.pr===`any`?delete y.dataset.active:y.dataset.active=``),_&&(_.value=D.filter,D.filter===`all`?delete _.dataset.active:_.dataset.active=``),Lt(),Ft&&(Ft.hidden=!u(D)),b){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);b.textContent=Ce(e(t),t.length,u(D)?e(f):void 0)}Pt&&(Pt.hidden=t.length>0||r.size>0||f.length===0),xn(n)}function en(e){let r=document.querySelector(`[data-collections-area]`);if(!r)return[];let o=ue(D.filter),s=u(D),c=e.flatMap(e=>lt(e).map(t=>({card:e,collection:t}))),l=e=>{let{stored:t,activity:n}=Rt(e);return i(zt(e),t,n,D.filter)},ee=n(c,({card:e,collection:t})=>{let n=l(e);return n===void 0?void 0:`${n===`completed`?`collection-done`:`collection`}:${t}`},e=>C.get(e)??15),te=(e,t)=>(p.get(e)??[]).find(e=>e.dataset.placement===`collection:${t}`),ne=[],re=!1;for(let e of r.querySelectorAll(`[data-collection]`)){let n=e.dataset.collection??``,r=ee.get(`collection:${n}`)??{shown:[],total:0},i=ee.get(`collection-done:${n}`)??{shown:[],total:0},l=c.filter(e=>e.collection===n),ie=l.filter(e=>zt(e.card)).length,ae=D.collections.length>0&&!D.collections.includes(n),oe=!o&&!ae&&(!s||l.length>0);if(e.hidden=!oe,!oe)continue;re=!0;for(let[t,a]of[[`collection:${n}`,r],[`collection-done:${n}`,i]]){let r=a.shown.map(e=>te(e.card.dataset.id??``,n)).filter(e=>e!==void 0),i=e.querySelector(`[data-cards="${t}"]`);i&&at(i,r),ne.push(...r);let o=e.querySelector(`[data-load-more="${t}"]`);o&&(o.hidden=a.total<=a.shown.length)}let u=e.querySelector(`[data-section="collection:${n}"] > summary [data-section-count]`);u&&(u.textContent=se(r.total,ie));let d=e.querySelector(`[data-collection-empty]`),ce=a({active:r.total,completed:i.total,pinned:ie,members:l.length},s);d&&(d.hidden=ce===void 0,d.textContent=ce??``);let le=e.querySelector(`[data-section="collection-done:${n}"]`);le&&(le.hidden=i.total===0);let ue=e.querySelector(`[data-completed-label]`);ue&&(ue.textContent=t(i.total))}return r.hidden=o||!re,ne}var tn=300,N=null;function P(){N!==null&&window.clearTimeout(N),N=null,Tt.replace(o(D),{})}function F(e,t){if(D={...D,...e},S=te(),C=new Map,M(),t===`now`)return P();N!==null&&window.clearTimeout(N),N=window.setTimeout(P,tn)}window.addEventListener(`pagehide`,()=>{N!==null&&P()}),document.addEventListener(`click`,e=>{N!==null&&e.target?.closest?.(`a[href]`)&&P()},!0),g?.addEventListener(`input`,()=>F({query:g.value},`settled`)),g?.addEventListener(`keydown`,e=>{e.key===`Escape`&&g.value!==``&&(e.preventDefault(),F({query:``},`now`))}),_?.addEventListener(`change`,()=>{F({filter:_.value},`now`)}),v?.addEventListener(`change`,()=>{F({author:v.value},`now`)}),y?.addEventListener(`change`,()=>{F({pr:y.value},`now`)}),Ft?.addEventListener(`click`,()=>{F({query:Re.query,filter:Re.filter,author:Re.author,pr:Re.pr,collections:Re.collections},`now`),g?.focus()}),it(),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;if(t&&t.startsWith(`collection`)&&Ve(t))return C.set(t,(C.get(t)??15)+15),M();!t||!d.includes(t)||(S={...S,[t]:S[t]+15},M())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{D=s(window.location.hash),S=te(),C=new Map,M(),ln()});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;ot(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{Dt(n,n=>{n.dataset.pinned=String(e);let r=n.querySelector(`[data-pin]`);r&&r!==t&&st(r,e),Kn(n)}),M()})});async function nn(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 I(await on(r));n=(await r.json()).queue}catch{return I(an)}sn(n),M()}var rn=`That could not be saved. The workspace server refused it.`,an=`The workspace server did not answer. It may have stopped.`;function I(e){he(Ne(),{kind:`failed`,text:e})}async function on(e){let t=await e.json().catch(()=>null);return typeof t?.error==`string`?t.error:rn}function sn(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of m()){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,Kn(e))}for(let e of document.querySelectorAll(`[data-queue-action][data-queue-id]`)){let n=t.has(e.dataset.queueId??``);e.dataset.queueAction=n?`remove`:`add`,e.textContent=Ae(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ee(e.length))}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-history-toggle]`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=t.parentElement?.querySelector(`[data-history-list]`);n&&bt(t,n.hidden!==!1)});var cn=document.querySelector(`.prb-shell > main`);function ln(){wt(document,Tt.current().ui,{cards:m(),pane:cn,limits:S,reveal:(e,t)=>{S=e,C=t,M()}})}Tt.setCapturer(()=>xt(document,m(),S,cn,C)),M(),ln();var L=et(document,{onOpen:vn,onClose:e=>{vn(e),window.setTimeout($,0)}});function un(){return document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null}var dn=0;async function fn(e){dn+=1;try{await e()}finally{--dn,$()}}var R=new Set,pn=`A change to this review is still being saved.`,mn=`A change to one of these reviews is still being saved. Try again once it is.`;async function hn(e,t){if(e.some(e=>R.has(e)))return!1;for(let t of e)R.add(t);gn(e);try{await t()}finally{for(let t of e)R.delete(t);gn(e)}return!0}function gn(e){let t=new Set(e);for(let e of m()){let n=e.dataset.id??``;if(!t.has(n))continue;let r=R.has(n);for(let t of e.querySelectorAll(`.prb-card-controls button.prb-state-pill`))r?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);for(let t of e.querySelectorAll(`.prb-card-controls :is([data-mark-status], [data-lifecycle-set], [data-queue-action])`))t.disabled=r}}async function _n(e,t){await hn([e],()=>fn(t))||I(pn)}function vn(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0);let r=e.querySelector(`[data-collection-rename-form]`);r&&(r.hidden=!0,X(r,void 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||n.closest(`[data-bulk]`)||n.matches(`[data-collections-filter]`))return;if(n.matches(`.prb-collection-menu`))return ur(e,t,n);if(n.matches(`[data-lifecycle-control]`))return Wn(e,t,n);let r=t.closest(`[data-collections-for]`);if(r?.dataset.collectionsFor){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=r.closest(`[data-card]`)?.querySelector(`[data-select]`)?.getAttribute(`aria-label`)?.replace(/^Select /,``);dr([r.dataset.collectionsFor],{card:t??`this review`});return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),He(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=a.closest(`[data-card]`);t&&xr([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=o.dataset.markId;_n(t,()=>Rn(t,o.dataset.markStatus===`complete`));return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=s.dataset.lifecycleId;_n(t,Un(t,s.dataset.lifecycleSet));return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),L.closeAll();let t=c.dataset.queueId;_n(t,()=>nn(t,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),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),vn(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),yn(n);return}e.preventDefault(),e.stopPropagation()});async function yn(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();bn(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{bn(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 bn(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function z(e){k=e,e||O.clear(),Mt&&(e?Mt.dataset.selecting=``:delete Mt.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e)),!e&&Jt&&L.close(Jt);for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);B(),M()}function B(){T&&(T.hidden=!0),Xt&&(Xt.hidden=!1),E&&(E.hidden=!0,E.textContent=``)}function xn(t){for(let e of m()){let t=O.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!w||(w.hidden=!k,!k))return;let n=new Set(m().filter(Sn).map(e=>e.dataset.id)),r=[...O].filter(e=>!n.has(e)).length,i=new Set(t.map(e=>e.dataset.id)),a=[...O].every(e=>i.has(e))?i.size:null;O.size===0?w.dataset.empty=``:delete w.dataset.empty,Ut&&(Ut.textContent=e(O.size)),Wt&&(Wt.textContent=oe(O.size,a,r)),Zt&&(Zt.textContent=pe(t.length,O.size>0&&a!==null),Zt.disabled=t.every(e=>O.has(e.dataset.id??``))),Kt&&(Kt.textContent=ne(Fn()));for(let e of w.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-collections], [data-bulk-delete]`))e.disabled=O.size===0;A&&(A.hidden=!Ye(Qt,_r(U())))}function Sn(e){return!e.hidden&&e.closest(`details:not([open]), [hidden]`)===null}function Cn(e){let t=[...e.querySelectorAll(`details[data-section]`)];for(let e of t)e.addEventListener(`toggle`,()=>xn(j));rt(t,(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}))}Cn(document),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{z(!k)}),Zt?.addEventListener(`click`,()=>{for(let e of j)e.dataset.id&&O.add(e.dataset.id);B(),M()});function wn(e){O.has(e)?O.delete(e):O.add(e),B(),M()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&wn(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!k)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], .prb-card-controls, [data-menu], [data-history-toggle]`)||(e.preventDefault(),wn(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!k||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),wn(t.dataset.id))});var V=nt({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>[...document.querySelectorAll(`[data-card]`)].filter(Sn),enterAllowed:()=>!k,background:()=>cn,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function Tn(){return V.holdsKeys()?V.current()?.querySelector(zn)??null:null}var En=8;function Dn(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),N!==null&&P(),Tt.leaving(),On=!0,window.location.assign(t.href))}var On=!1,kn={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=g?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=g?.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,En);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 ${b?.textContent??j.length}`:b?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=f.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),Dn(n))};n.addEventListener(`input`,()=>{g&&(g.value=n.value,g.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()}},An={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=b?.textContent??``},r=[_,v,y].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 jn(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 Mn=Object.fromEntries(r.map(e=>[`reviews.section.${e}`,jn(e)]));function Nn(){return[...document.querySelectorAll(`[data-collections-area]:not([hidden]) [data-collection]:not([hidden])`)].flatMap(e=>{let t=e.querySelector(`:scope > details[data-section]`);if(!t)return[];let n=t.querySelector(`[data-collection-name]`)?.textContent??``,r=t.querySelector(`:scope > summary [data-section-count]`)?.textContent??``;return[{id:e.dataset.collection??``,name:n,count:r,open:t.open}]})}var H=document.querySelector(`[data-collection-new]`),Pn=Te(`reviews`,{...Mn,"reviews.search":{available:()=>g!==null,panel:kn},"reviews.filters":{available:()=>_!==null,panel:An},"reviews.collection.new":{available:()=>H!==null&&!H.disabled,run:()=>H?.click()},"reviews.collection.fold":{available:()=>Nn().length>0,panel:vt({collections:Nn,toggle:e=>{let t=document.querySelector(`[data-collection="${CSS.escape(e)}"] > details[data-section]`);t&&(t.open=!t.open)}})},"reviews.next":{run:()=>V.move(1)},"reviews.previous":{run:()=>V.move(-1)},"reviews.open":{available:()=>V.enterOpens(),run:()=>V.open()},"reviews.openInNewTab":{available:()=>V.enterOpens(),run:()=>V.openInNewTab()},"reviews.selection.exit":{available:Qn,run:()=>T&&!T.hidden?Xn(w?.contains(document.activeElement)??!1):Zn()},"reviews.menu":{available:()=>Tn()!==null,run:()=>{let e=Tn();e&&L.open(e,{focusFirst:!0,returnFocus:()=>V.refocus()})}}},{onOpen:()=>L.closeAll(),onSettle:()=>$()});function U(){return Ht(f.filter(e=>O.has(e.dataset.id??``)))}function Fn(){return U().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function W(e){E&&(E.textContent=e,E.hidden=!1)}function G(e){for(let t of w?.querySelectorAll(`button`)??[])t.disabled=e}async function In(e){let t=[...O];if(t.length===0)return;G(!0);let n=null,r=await hn(t,async()=>{try{(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok||(n=`That could not be saved. The workspace server refused it.`)}catch{n=`The workspace server did not answer. It may have stopped.`}});if(!r||n!==null)return G(!1),W(r?n??``:mn);Ln(U(),e),G(!1),z(!1)}function Ln(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e.flatMap(e=>p.get(e.dataset.id??``)??[e])){t.dataset.status=n;for(let e of t.querySelectorAll(`.prb-card-status`))$e(e,n);let e=t.querySelector(`[data-mark-status]`);e&&(e.dataset.markStatus=r,e.textContent=le(r))}}async function Rn(e,t){try{let n=await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})});if(!n.ok)return I(await on(n))}catch{return I(an)}Ln(f.filter(t=>t.dataset.id===e),t),M()}var zn=`:scope > .prb-card-controls > [data-menu]:not([data-lifecycle-control])`;async function Bn(e,t){let n=e.closest(`[data-card]`),r=n?.dataset.id;if(!n||!r||R.has(r))return;let i=document.activeElement===e,a=Vn(n);Ge(e,!0);try{await _n(r,t)}finally{Ge(e,!1)}i&&Hn(e,a)}function Vn(e){let t=e=>e instanceof HTMLElement&&e.matches(`[data-card]`)&&e.checkVisibility();for(let n=e.nextElementSibling;n;n=n.nextElementSibling)if(t(n))return n;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)if(t(n))return n;return null}function Hn(e,t){if(document.activeElement===null||document.activeElement===document.body){if(e.isConnected&&e.checkVisibility())return e.focus({preventScroll:!0});t?.querySelector(`.prb-card-link`)?.focus({preventScroll:!0})}}function Un(e,t){return async()=>{await Gn([e],t)||I(`That could not be saved. The workspace server refused it or did not answer.`)}}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-card] button.prb-card-status`),n=t?.closest(`[data-card]`)?.dataset.id;!t||!n||(e.preventDefault(),Bn(t,()=>Rn(n,t.dataset.status!==`complete`)))});function Wn(e,t,n){let r=n.querySelector(`[data-lifecycle-pill]`),i=n.closest(`[data-card]`)?.dataset.id;if(!r||!i)return;let a=t.closest(`[data-lifecycle-set]`);if(a){e.preventDefault(),e.stopPropagation(),L.close(n,{returnFocus:!0}),Bn(r,Un(i,a.dataset.lifecycleSet));return}let o=r.dataset.lifecyclePress;!t.closest(`[data-lifecycle-pill]`)||!o||o===`menu`||(e.preventDefault(),Bn(r,Un(i,o)))}async function Gn(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 m())r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),Kn(e));return sn(n.queue),M(),!0}function Kn(e){let{stored:t,activity:n}=Rt(e),r=e.querySelector(`[data-lifecycle-pill]`);r&&qe(r,t,n);let i=e.querySelector(`[data-lifecycle-chip]`);if(i){let e=Me(t,n);i.textContent=e??``,i.hidden=e===void 0}for(let r of e.querySelectorAll(`[data-menu-items] [data-lifecycle-set]`)){let e=r.dataset.lifecycleSet;r.hidden=!ge(e,t,n),r.textContent=Se(e,t,n)}}async function qn(e){let t=[...O];if(t.length===0)return;G(!0);let n=!1,r=await hn(t,async()=>{n=await Gn(t,e)});if(G(!1),!r)return W(mn);if(!n)return W(`That could not be saved. The workspace server refused it or did not answer.`);z(!1)}async function Jn(){let e=[...O];if(e.length===0)return;G(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return G(!1),B(),W(`Nothing was deleted. The workspace server refused it.`)}catch{return G(!1),B(),W(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of U()){let t=e.dataset.id??``;r.has(t)||Dt(t,e=>e.remove())}f=f.filter(e=>e.isConnected),Et(),O.clear();for(let e of r)O.add(e);if(G(!1),B(),n.length===0)return z(!1);M(),W([...new Set(n.map(e=>e.error))].join(` `))}async function Yn(){let e=U().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;G(!0);let t=null,n=!1,r=await hn(e,async()=>{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{n=!0}});if(!r||n)return G(!1),B(),W(r?`The workspace server did not answer. It may have stopped.`:mn);if(!t?.queue)return G(!1),B(),W(`Nothing was added. The workspace server refused it.`);sn(t.queue);let i=t.refused??[];O.clear();for(let e of i)O.add(e.id);if(G(!1),B(),i.length===0)return z(!1);M(),W([...new Set(i.map(e=>e.error))].join(` `))}w?.addEventListener(`click`,e=>{let t=e.target;if(Jt&&t.closest(`[data-bulk-more] [data-menu-panel] button`)&&L.close(Jt),t.closest(`[data-bulk-queue]`))return void Yn();if(t.closest(`[data-bulk-collections]`))return dr(U().map(e=>e.dataset.id??``).filter(Boolean),{selection:!0});let n=t.closest(`[data-bulk-mark]`);if(n)return void In(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void qn(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){Yt&&(Yt.textContent=re(Fn())),Xt&&(Xt.hidden=!0),T&&(T.hidden=!1),e.detail===0&&w.querySelector(`[data-bulk-cancel-delete]`)?.focus();return}if(t.closest(`[data-bulk-confirm-delete]`))return void Jn();if(t.closest(`[data-bulk-cancel-delete]`))return Xn(e.detail===0);if(t.closest(`[data-bulk-exit]`))return Zn()});function Xn(e){B(),e&&Gt?.focus()}function Zn(){let e=w?.contains(document.activeElement)??!1;z(!1),e&&document.querySelector(`[data-select-mode]`)?.focus()}function Qn(e){return!k||qt?.disabled?!1:e===void 0||Je(e,document,!0)}var K=document.querySelector(`[data-collections-dialog]`),$n=document.querySelector(`[data-collections-dialog-list]`),q=document.querySelector(`[data-collections-dialog-search]`),J=document.querySelector(`[data-collections-dialog-create]`),er=document.querySelector(`[data-collections-dialog-error]`),tr=document.querySelector(`[data-collections-dialog-for]`),Y=[],nr=!1,rr=!1,ir=document.body.dataset.cardsSnapshot??``;function ar(e,t){return ut(e,t,ir)}function or(e){if(e.stale||e.area===void 0){try{let e={ids:[...O],selecting:k};window.sessionStorage.setItem(dt,JSON.stringify(e))}catch{}K?.close(),window.location.reload();return}let t=e.area,n=document.querySelector(`[data-collections-area]`);if(n){let e=n.contains(document.activeElement)?ke(document):null,r=document.createElement(`template`);r.innerHTML=t.trim();let i=r.content.firstElementChild;if(i){if(n.replaceWith(i),Cn(i),k)for(let e of i.querySelectorAll(`.prb-card-link`))e.setAttribute(`aria-disabled`,`true`);e&&me(document,e.focus,e.focusVisible)}}h=e.collections;for(let t of f){let n=e.memberOf[t.dataset.id??``]??[];t.dataset.collections=n.join(` `);let r=t.querySelector(`[data-collections-line]`),i=we(n,h);r&&(r.textContent=i??``,r.hidden=i===void 0)}for(let t of Ot){let n=e.operations?.[t.dataset.key??``];n&&(t.dataset.collections=n.join(` `))}Et(),yr(),M()}function X(e,t){let n=e.querySelector(`[data-collection-error]`);n&&(n.textContent=t??``,n.hidden=t===void 0)}It?.addEventListener(`input`,()=>Lt()),x?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-filter-option]`);if(!t)return;let n=t.checked?[...D.collections,t.value]:D.collections.filter(e=>e!==t.value);F({collections:[...new Set(n)]},`now`),x.querySelector(`[data-collections-filter-option][value="${CSS.escape(t.value)}"]`)?.focus()});var Z=document.querySelector(`[data-collection-new-dialog]`),Q=Z?.querySelector(`[data-collection-name-input]`)??null,sr=Z?.querySelector(`[data-collection-create]`)??null,cr=!1;function lr(){H&&(H.disabled=cr),Q&&(Q.readOnly=cr),sr&&(sr.disabled=cr||(Q?.value.trim()??``)===``)}H?.addEventListener(`click`,()=>{Z&&(L.closeAll(),Q&&(Q.value=``),lr(),X(Z,void 0),Z.showModal(),Q?.focus())}),Q?.addEventListener(`input`,()=>{lr(),Z&&X(Z,void 0)}),Z?.querySelector(`[data-collection-cancel]`)?.addEventListener(`click`,()=>Z.close()),Z?.addEventListener(`close`,()=>$()),document.addEventListener(`submit`,e=>{let t=e.target;if(t.matches(`[data-collection-new-form]`)){e.preventDefault();let n=Q?.value??``;if(n.trim()===``)return;cr=!0,lr(),ar(`/collections`,{action:`create`,name:n}).then(e=>{cr=!1,lr();let n=Z?.open===!0;if(!e.ok)return X(t,e.error);Z?.close(),or(e.answer),n&&document.querySelector(`[data-collection="${CSS.escape(e.answer.id??``)}"] summary`)?.focus({focusVisible:!1})});return}let n=t.closest(`[data-collection-rename-form]`);if(n){e.preventDefault();let t=n.querySelector(`[data-collection-name-input]`)?.value??``,r=n.dataset.collectionRenameForm??``;ar(`/collections`,{action:`rename`,id:r,name:t}).then(e=>{if(!e.ok)return X(n,e.error);L.closeAll(),or(e.answer),document.querySelector(`[data-collection="${CSS.escape(r)}"] summary`)?.focus({focusVisible:!1})})}});function ur(e,t,n){let r=n.querySelector(`[data-menu-items]`),i=n.querySelector(`[data-collection-rename-form]`),a=n.querySelector(`[data-menu-confirm]`);if(t.closest(`[data-collection-rename]`)&&i){e.preventDefault(),r&&(r.hidden=!0),i.hidden=!1;let t=i.querySelector(`[data-collection-name-input]`);t?.focus(),t?.select();return}if(t.closest(`[data-collection-delete]`)&&a){e.preventDefault(),r&&(r.hidden=!0),a.hidden=!1,e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-collection-cancel], [data-cancel-delete]`)){e.preventDefault(),vn(n);return}let o=t.closest(`[data-collection-confirm-delete]`);if(o?.dataset.collectionConfirmDelete){e.preventDefault(),o.disabled=!0;let t=o.dataset.collectionConfirmDelete;ar(`/collections`,{action:`delete`,id:t}).then(e=>{if(o.disabled=!1,!e.ok)return bn(n,e.error);L.closeAll(),or(e.answer),D.collections.includes(t)&&P(),document.querySelector(`[data-collection-new]`)?.focus()})}}function dr(e,t){!K||e.length===0||(L.closeAll(),Y=[...e],nr=!1,rr=`selection`in t,tr&&(tr.textContent=_t(e.length,`card`in t?t.card:void 0)),q&&(q.value=``),mr(void 0),pr(),K.showModal(),q?.focus())}function fr(){return Y.map(e=>lt(f.find(t=>t.dataset.id===e)??document.createElement(`div`)))}function pr(){let e=q?.value??``;$n&>($n,h,fr(),e);let t=mt(e,h);J&&(J.hidden=t===void 0,J.textContent=t===void 0?``:`Create “${t}” and add ${Y.length===1?`this review`:`these ${Y.length}`}`)}function mr(e){er&&(er.textContent=e??``,er.hidden=e===void 0)}async function hr(e){mr(void 0);let t=await ar(`/collections/members`,{ids:Y,...e});if(!t.ok)return mr(t.error),pr();nr=!0,or(t.answer);let n=t.answer.refused??[];n.length>0&&(Y=Y.filter(e=>!n.some(t=>t.id===e)),mr([...new Set(n.map(e=>e.error))].join(` `))),pr()}q?.addEventListener(`input`,()=>pr()),q?.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),J&&!J.hidden&&J.click())}),J?.addEventListener(`click`,()=>{let e=mt(q?.value??``,h);e!==void 0&&hr({action:`add`,create:e}).then(()=>{q&&(q.value=``),pr(),q?.focus()})}),$n?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-dialog-option]`);if(!t)return;let n=c(t.dataset.membership??`none`),r=t.value;hr({action:n,collection:r}).then(()=>{$n.querySelector(`[data-collections-dialog-option][value="${CSS.escape(r)}"]`)?.focus()})}),document.querySelector(`[data-collections-dialog-close]`)?.addEventListener(`click`,()=>K?.close());try{let e=window.sessionStorage.getItem(dt);if(e){window.sessionStorage.removeItem(dt);let t=JSON.parse(e),n=Array.isArray(t.ids)?t.ids.filter(e=>typeof e==`string`):[];if(t.selecting===!0||n.length>0){z(!0);for(let e of ft(n,f))O.add(e);M()}}}catch{}K?.addEventListener(`close`,()=>{nr&&k&&rr&&z(!1),Y=[],$()}),ze(window,()=>window.location.reload());var gr=`prb-fetch-summary`;function _r(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function vr(e){return Xe(_r(e),Qt)}function yr(){for(let e of m()){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Ye(Qt,_r([e])))}}async function br(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;Qt=(await e.json()).targets??{}}catch{return}yr(),M()}async function xr(e,t){let n=vr(e);if($t||n.repositories===0)return;$t=!0;let r=[A,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Ue(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{}$t=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Qe),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||wr){try{window.sessionStorage.setItem(gr,JSON.stringify(o))}catch{}if(!Tr())return void window.location.reload();wr=!0}he(Ne(),o)}try{let e=window.sessionStorage.getItem(gr);if(e){window.sessionStorage.removeItem(gr);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&he(Ne(),{kind:t.kind,text:t.text})}}catch{}A?.addEventListener(`click`,()=>void xr(U(),A)),xe(),br();var Sr=document.body.dataset.indexRevision??``,Cr=document.body.dataset.live===`true`?Date.now():0,wr=!1;function Tr(){let e=K?.open===!0||Z?.open===!0||document.activeElement?.closest(`[data-collections-area], [data-collections-filter]`)!=null;return O.size>0||document.activeElement===g||$t||Pn.isOpen()||On||e||un()||dn>0}function $(){wr&&!Tr()&&je()}async function Er(){try{let e=await fetch(`/revision`);if(e.ok){Fe(document,!0);let t=await e.json();Ee(document,t),t.live&&Cr===0&&(Cr=Date.now()),t.live||(Cr=0);let n=fe(Sr,t.revision??``,Tr());if(n===`reload`)return je(),null;n===`hold`&&(wr=!0)}}catch{Fe(document,!1)}return tt(Cr===0?2**53-1:Date.now()-Cr)}var Dr=ve(window,Er);be(document,()=>Dr.now()),g?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),Oe();
|
package/static/runs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as e,a as t,b as n,ft as r,g as i,h as a,i as o,m as s,n as c,r as l,s as ee,t as te,u,xt as d,y as f}from"./chunk-DRtin0n-.js";import{
|
|
1
|
+
import{Y as e,a as t,b as n,ft as r,g as i,h as a,i as o,m as s,n as c,r as l,s as ee,t as te,u,xt as d,y as f}from"./chunk-DRtin0n-.js";import{i as p,t as m}from"./chunk-Cg4cN8Vk.js";import{t as h}from"./chunk-Dv0Wowan.js";import{t as g}from"./chunk-C8kkSv38.js";import{r as ne,t as re}from"./chunk-Ahis0VaG.js";var _=[`all`,`in-progress`,`completed`,`failed`,`cancelled`,`not-responding`],v=[`all`,`review`,`update`,`re-run`,`kiss`,`ask`,`diagram`];function y(e,t){let n=0;return{visible:e.map(e=>e&&n++<t),matched:e.filter(Boolean).length}}function b(e,t){return e.status!==`all`&&t.status!==e.status||e.kind!==`all`&&t.kind!==e.kind?!1:e.query.toLowerCase().split(/\s+/).filter(Boolean).every(e=>t.searchText.includes(e))}function x(e){return e.status!==`all`||e.kind!==`all`||e.query.trim()!==``}function S(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`status`),r=t.get(`kind`);return{status:_.includes(n??``)?n:`all`,kind:v.includes(r??``)?r:`all`,query:t.get(`q`)??``}}function C(e){let t=new URLSearchParams;e.status!==`all`&&t.set(`status`,e.status),e.kind!==`all`&&t.set(`kind`,e.kind),e.query.trim()!==``&&t.set(`q`,e.query);let n=t.toString();return n===``?``:`#${n}`}var w=r();te(`/restart`);var T=document.querySelector(`[data-search]`),E=document.querySelector(`[data-run-status-filter]`),D=document.querySelector(`[data-run-kind-filter]`),O=document.querySelector(`[data-clear-filters]`),k=document.querySelector(`[data-no-matches]`),A=[...document.querySelectorAll(`[data-run]`)],j=S(window.location.hash);E&&![...E.options].some(e=>e.value===j.status)&&(j={...j,status:`all`});function M(){T&&(T.value=j.query),E&&(E.value=j.status),D&&(D.value=j.kind)}var N=50,P=document.querySelector(`[data-runs-more-row]`),F=document.querySelector(`[data-runs-more]`),I=document.querySelector(`[data-runs-more-note]`),L=e=>({status:e.dataset.runStatus??``,kind:e.dataset.runKind??``,searchText:e.dataset.searchText??``});function R(){let e=0;for(let t of document.querySelectorAll(`[data-runs-section]`)){let n=[...t.querySelectorAll(`[data-run]`)],r=n.map(e=>b(j,L(e))),i=t.dataset.runsSection===`recent`,{visible:a,matched:o}=i?y(r,N):{visible:r,matched:r.filter(Boolean).length};n.forEach((e,t)=>e.hidden=!a[t]),e+=o;let s=t.querySelector(`[data-section-count]`);if(s&&(s.textContent=String(o)),i&&P){let e=Math.min(o,N);P.hidden=o<=N,I&&(I.textContent=`Showing the newest ${e} of ${o}.`)}}let t=x(j);O&&(O.hidden=!t),k&&(k.hidden=!(t&&e===0&&A.length>0))}F?.addEventListener(`click`,()=>{N+=50,R()});function z(e){j={...j,...e},N=50,R(),w.replace(C(j),{})}T?.addEventListener(`input`,()=>z({query:T.value})),E?.addEventListener(`change`,()=>z({status:E.value})),D?.addEventListener(`change`,()=>z({kind:D.value})),ne(),re(document.querySelectorAll(`details[data-runs-section]`),e=>n(e.dataset.runsSection)?e.dataset.runsSection:void 0,(e,t)=>fetch(`/runs/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}));for(let e of document.querySelectorAll(`[data-clear-filters], [data-clear-filters-inline]`))e.addEventListener(`click`,()=>{z({status:`all`,kind:`all`,query:``}),M()});M(),R();var B=3e4;function V(){for(let e of document.querySelectorAll(`time[data-since]`)){let t=Number(e.dataset.since);Number.isFinite(t)&&(e.textContent=`${e.dataset.sincePrefix??``} ${h(t)}`.trim())}}window.setInterval(V,B);var H=p(document,{onClose:()=>$()}),U=()=>document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null,W=!1;for(let e of document.querySelectorAll(`[data-run-remove]`))e.addEventListener(`click`,()=>{let n=e.dataset.runRemove,r=e.closest(`[data-run]`);if(!n||!r)return;H.closeAll(),e.disabled=!0,W=!0;let i=n=>{e.disabled=!1,t(ee(),{kind:`failed`,text:n})};fetch(`/runs/remove`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:n})}).then(async e=>{if(e.ok||e.status===404)r.remove(),A.splice(A.indexOf(r),1),R();else{let t=await e.json().catch(()=>null);i(typeof t?.error==`string`?t.error:`That run could not be removed. The workspace server refused it.`)}}).catch(()=>i(`The workspace server did not answer. It may have stopped.`)).finally(()=>{W=!1,$()})});var G=g({doc:document,item:`[data-run]`,link:`a.prb-card-link`,walk:()=>A.filter(e=>!e.hidden&&e.closest(`details`)?.open!==!1&&e.querySelector(`a.prb-card-link`)),background:()=>document.querySelector(`.prb-shell > main`)});function K(e){let t=()=>document.querySelector(`details[data-runs-section="${e}"]`);return{available:()=>t()!==null,state:()=>{let e=t();return e?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}function q(){return G.holdsKeys()?G.current()?.querySelector(`:scope > [data-menu]`)??null:null}var J=Object.fromEntries(f.map(e=>[`runs.section.${e}`,K(e)])),Y=s(`runs`,{"runs.search":{run:()=>T?.focus()},"runs.next":{run:()=>G.move(1)},"runs.previous":{run:()=>G.move(-1)},"runs.open":{available:()=>G.enterOpens(),run:()=>G.open()},"runs.openInNewTab":{available:()=>G.enterOpens(),run:()=>G.openInNewTab()},"runs.menu":{available:()=>q()!==null,run:()=>{let e=q();e&&H.open(e,{focusFirst:!0,returnFocus:()=>G.refocus()})}},...J},{onSettle:()=>$()}),ie=document.body.dataset.runsRevision??``,X=document.body.dataset.live===`true`?Date.now():0,Z=!1;function Q(){return document.activeElement===T||W||Y.isOpen()||U()}function $(){Z&&!Q()&&l()}T?.addEventListener(`blur`,()=>$());async function ae(){try{let t=await fetch(`/runs/revision`);if(t.ok){u(document,!0);let n=await t.json();c(document,n),n.live&&X===0&&(X=Date.now()),n.live||(X=0);let r=e(ie,n.revision??``,Q());if(r===`reload`)return l(),null;r===`hold`&&(Z=!0)}}catch{u(document,!1)}return m(X===0?2**53-1:Date.now()-X)}var oe=i(window,ae);a(document,()=>oe.now()),o(),d(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -2386,10 +2386,6 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
2386
2386
|
line-height: var(--lh-body);
|
|
2387
2387
|
}
|
|
2388
2388
|
|
|
2389
|
-
/* A caveat above a list, in the light pane. Pane literals, not shell tokens — see
|
|
2390
|
-
pane_palette.test.ts for why this is a rule and not a preference. */
|
|
2391
|
-
/* Full width, because it introduces the cards below it and a narrower block reads as a floating
|
|
2392
|
-
aside rather than as the heading note it is. */
|
|
2393
2389
|
/* The control named in the note, as the control rather than as bold text. It goes to the view that
|
|
2394
2390
|
holds it, because a sentence that tells the reviewer where something is and cannot take them
|
|
2395
2391
|
there is asking them to do the navigating twice. */
|
|
@@ -2405,16 +2401,41 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
2405
2401
|
}
|
|
2406
2402
|
.prb-doc-note-link:hover { color: var(--pane-ink); }
|
|
2407
2403
|
|
|
2408
|
-
.
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2404
|
+
/* The age of the "already raised" claims, as one quiet line above the Issues orientation. */
|
|
2405
|
+
.prb-discussion-age {
|
|
2406
|
+
display: flex;
|
|
2407
|
+
flex-wrap: wrap;
|
|
2408
|
+
align-items: baseline;
|
|
2409
|
+
column-gap: 6px;
|
|
2410
|
+
margin: 0 0 12px;
|
|
2414
2411
|
color: var(--pane-ink-muted);
|
|
2415
2412
|
font-size: var(--t-meta);
|
|
2416
2413
|
line-height: var(--lh-body);
|
|
2417
2414
|
}
|
|
2415
|
+
.prb-discussion-age-summary {
|
|
2416
|
+
cursor: pointer;
|
|
2417
|
+
list-style: none;
|
|
2418
|
+
}
|
|
2419
|
+
.prb-discussion-age-summary::-webkit-details-marker { display: none; }
|
|
2420
|
+
.prb-discussion-age-summary::before {
|
|
2421
|
+
content: '';
|
|
2422
|
+
display: inline-block;
|
|
2423
|
+
margin-right: 6px;
|
|
2424
|
+
vertical-align: 1px;
|
|
2425
|
+
border-left: 5px solid currentColor;
|
|
2426
|
+
border-top: 4px solid transparent;
|
|
2427
|
+
border-bottom: 4px solid transparent;
|
|
2428
|
+
}
|
|
2429
|
+
.prb-discussion-age-detail[open] > .prb-discussion-age-summary::before { transform: rotate(90deg); }
|
|
2430
|
+
.prb-discussion-age-summary:hover { color: var(--pane-ink); }
|
|
2431
|
+
/* Open, the explanation takes the row, and the re-check follows it on its own line. */
|
|
2432
|
+
.prb-discussion-age-detail[open] { flex-basis: 100%; }
|
|
2433
|
+
.prb-discussion-age-detail[open] ~ .prb-discussion-age-sep { display: none; }
|
|
2434
|
+
.prb-discussion-age-body {
|
|
2435
|
+
margin: 6px 0 4px;
|
|
2436
|
+
padding-left: 11px;
|
|
2437
|
+
border-left: 2px solid var(--pane-line);
|
|
2438
|
+
}
|
|
2418
2439
|
|
|
2419
2440
|
.prb-pr-asof {
|
|
2420
2441
|
flex-basis: 100%;
|
package/static/sidebar.css
CHANGED
|
@@ -1068,7 +1068,7 @@
|
|
|
1068
1068
|
.pr-helper-issue-card {
|
|
1069
1069
|
border: 1px solid var(--color-border-default, #d0d7de);
|
|
1070
1070
|
border-radius: 8px;
|
|
1071
|
-
padding:
|
|
1071
|
+
padding: 12px 14px;
|
|
1072
1072
|
margin-bottom: 12px;
|
|
1073
1073
|
/* Stated rather than inherited: the surface behind this is now the grey canvas. */
|
|
1074
1074
|
background: #ffffff;
|
|
@@ -1437,7 +1437,7 @@
|
|
|
1437
1437
|
.pr-helper-question-card {
|
|
1438
1438
|
border: 1px solid var(--color-border-default, #d0d7de);
|
|
1439
1439
|
border-radius: 8px;
|
|
1440
|
-
padding:
|
|
1440
|
+
padding: 12px 14px;
|
|
1441
1441
|
margin-bottom: 12px;
|
|
1442
1442
|
/* Stated rather than inherited: the surface behind this is now the grey canvas. */
|
|
1443
1443
|
background: #ffffff;
|
|
@@ -1447,6 +1447,9 @@
|
|
|
1447
1447
|
card would throw away the reviewer's own record that they resolved it. The check mark is the
|
|
1448
1448
|
whole "done" signal; nothing else about the card recedes. */
|
|
1449
1449
|
.pr-helper-question-card-answered { box-shadow: inset 3px 0 0 #1a7f37; }
|
|
1450
|
+
/* What an answer still needs is moot once the question is settled, and a tick moves the card here
|
|
1451
|
+
without a redraw, so the drawer is what decides it. */
|
|
1452
|
+
.pr-helper-closed-findings .pr-helper-question-needed { display: none; }
|
|
1450
1453
|
|
|
1451
1454
|
.pr-helper-question-card h5 {
|
|
1452
1455
|
font-size: 10px;
|
|
@@ -1598,14 +1601,15 @@
|
|
|
1598
1601
|
}
|
|
1599
1602
|
|
|
1600
1603
|
.pr-helper-issues-orientation-text {
|
|
1601
|
-
font-size:
|
|
1604
|
+
font-size: 14px;
|
|
1605
|
+
color: var(--color-fg-default, #1f2328);
|
|
1602
1606
|
line-height: 1.5;
|
|
1603
1607
|
margin: 0 0 4px;
|
|
1604
1608
|
overflow-wrap: anywhere;
|
|
1605
1609
|
}
|
|
1606
1610
|
|
|
1607
1611
|
.pr-helper-issues-attention {
|
|
1608
|
-
font-size:
|
|
1612
|
+
font-size: 13px;
|
|
1609
1613
|
font-weight: 600;
|
|
1610
1614
|
color: var(--color-fg-muted, #57606a);
|
|
1611
1615
|
margin: 0;
|
|
@@ -1713,6 +1717,21 @@
|
|
|
1713
1717
|
drawer, smaller and muted, because it belongs to one card rather than to the pane. */
|
|
1714
1718
|
.pr-helper-issue-technical { margin-top: 8px; }
|
|
1715
1719
|
|
|
1720
|
+
/* A framed card's disclosure and actions share a row: closed, the summary sits left and the actions
|
|
1721
|
+
right; opened, the disclosure takes the row and the actions wrap below its body. */
|
|
1722
|
+
.pr-helper-card-footer {
|
|
1723
|
+
display: flex;
|
|
1724
|
+
flex-wrap: wrap;
|
|
1725
|
+
align-items: center;
|
|
1726
|
+
column-gap: 12px;
|
|
1727
|
+
row-gap: 8px;
|
|
1728
|
+
margin-top: 8px;
|
|
1729
|
+
}
|
|
1730
|
+
.pr-helper-card-footer > .pr-helper-issue-technical { flex: 1 1 auto; min-width: 0; margin-top: 0; }
|
|
1731
|
+
.pr-helper-card-footer > .pr-helper-issue-technical[open] { flex-basis: 100%; }
|
|
1732
|
+
.pr-helper-card-footer > .pr-helper-issue-actions,
|
|
1733
|
+
.pr-helper-card-footer > .pr-helper-question-actions { margin-top: 0; margin-left: auto; }
|
|
1734
|
+
|
|
1716
1735
|
.pr-helper-issue-technical-summary {
|
|
1717
1736
|
display: inline-flex;
|
|
1718
1737
|
align-items: center;
|
|
@@ -1769,7 +1788,7 @@
|
|
|
1769
1788
|
justify-content: space-between;
|
|
1770
1789
|
flex-wrap: wrap;
|
|
1771
1790
|
gap: 12px;
|
|
1772
|
-
margin-top:
|
|
1791
|
+
margin-top: 8px;
|
|
1773
1792
|
}
|
|
1774
1793
|
|
|
1775
1794
|
/* Deliberately not a filled button, matching .pr-helper-guide-start-cta: this is "here's the
|
|
@@ -5000,7 +5019,7 @@
|
|
|
5000
5019
|
align-items: center;
|
|
5001
5020
|
justify-content: flex-end;
|
|
5002
5021
|
gap: 12px;
|
|
5003
|
-
margin-top:
|
|
5022
|
+
margin-top: 8px;
|
|
5004
5023
|
}
|
|
5005
5024
|
|
|
5006
5025
|
/* margin-left:auto rather than relying on the row's space-between: the jump link beside it is
|