prreviewbuddy 0.82.1 → 0.82.4

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 CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.82.4
4
+
5
+ **⌘K L C lists your collections, to expand or collapse one.** Each row shows the collection's
6
+ name, its count and whether it is expanded. Move with J and K or the arrows and press Enter, or
7
+ press a row's number. Expanding a collection from here also lets J and K walk into its reviews.
8
+ New collection moves to ⌘K L N.
9
+
10
+ ## 0.82.3
11
+
12
+ **⌘K L C makes a new collection.** It opens the same New collection dialog as the button beside
13
+ Select. After you create or rename a collection, its heading takes focus without the keyboard ring
14
+ the name field had; Tab brings the ring back. While a new collection is being made, its name is
15
+ locked and the dialog cannot be opened again, so a slow answer can never close or change the next
16
+ one you start.
17
+
18
+ ## 0.82.2
19
+
20
+ **Collections sit in the list like any other section.** Each collection is now a section between
21
+ Pinned and Active, with no Collections heading above them, and nothing is drawn for collections
22
+ until you make one. New collection moves up beside Select and opens a small dialog that says what a
23
+ collection is for, with Cancel and Create. A collection whose reviews are all Done now says "No
24
+ active reviews".
25
+
3
26
  ## 0.82.1
4
27
 
5
28
  **Back no longer draws a focus ring you never had.** Going Back or Forward puts focus where you
package/dist/server.js CHANGED
@@ -376,7 +376,7 @@ function collectionEmptyText(counts, filtered) {
376
376
  if (filtered) return "Nothing in this collection matches the filters.";
377
377
  if (counts.members === 0) return "Nothing here yet. Add reviews from a card’s menu, or select several and choose Manage collections.";
378
378
  if (counts.pinned > 0 && counts.completed === 0) return "Its reviews are pinned, so they are listed under Pinned.";
379
- return "Nothing here needs attention.";
379
+ return "No active reviews";
380
380
  }
381
381
  /** Said under a collection whose oldest members are not drawn, so it never looks smaller than it is. */
382
382
  function omittedText(omitted) {
@@ -9704,7 +9704,10 @@ ${renderWorkspaceRail({
9704
9704
  <main class="prb-index">
9705
9705
  ${ordered.length === 0 ? "" : `<div class="prb-index-summary">
9706
9706
  <p class="prb-index-count" data-count>${escapeHtml$1(countLabel(storedReviews, ordered.length))}</p>
9707
- <button type="button" class="prb-index-select" data-select-mode aria-pressed="false">Select</button>
9707
+ <div class="prb-index-summary-actions">
9708
+ <button type="button" class="prb-index-select" data-collection-new><span aria-hidden="true">+</span> New collection</button>
9709
+ <button type="button" class="prb-index-select" data-select-mode aria-pressed="false">Select</button>
9710
+ </div>
9708
9711
  </div>`}
9709
9712
  ${renderInProgress$1(operations, ordered, positions, view.prStates, now, sectionOpen("in-progress", view.sectionsCollapsed), memberOf)}
9710
9713
  ${renderSectionAt("pinned")}
@@ -9713,6 +9716,7 @@ ${renderWorkspaceRail({
9713
9716
  ${ordered.length === 0 ? `<p class="prb-index-empty">No reviews stored yet. Ask Claude Code to review a change and one will appear here.</p>` : `<p class="prb-index-none" data-no-matches hidden>Nothing matches that.</p>`}
9714
9717
  ${ordered.length === 0 ? "" : renderBulkBar()}
9715
9718
  ${ordered.length === 0 ? "" : renderCollectionsDialog()}
9719
+ ${ordered.length === 0 ? "" : renderNewCollectionDialog()}
9716
9720
  <p class="prb-index-note">Reviews are kept for thirty days, on this machine only. Pinned, Done and queued reviews, and reviews in a collection, are kept for ninety days instead, counting from the last time you opened or marked them. Every review has a fixed address, so a link to one is worth keeping and still opens after a restart. Stopping the server deletes nothing; it only stops anything being served until the next review starts it again.</p>
9717
9721
  </main>
9718
9722
  </div>
@@ -9849,14 +9853,9 @@ function collectionsArea(context, collapsed) {
9849
9853
  completed: renderCards(completed, { collection: collection.id })
9850
9854
  });
9851
9855
  });
9852
- return `<section class="prb-collections" data-collections-area aria-label="Collections">
9856
+ return `<section class="prb-collections" data-collections-area aria-label="Collections"${collections.length === 0 ? " hidden" : ""}>
9853
9857
  <script type="application/json" data-collections-registry>${registry}<\/script>
9854
- <div class="prb-collections-head">
9855
- <h2 class="prb-collections-title">Collections</h2>
9856
- ${collections.length === 0 ? "<p class=\"prb-collections-hint\">Group reviews that belong together, such as one refactor or one release.</p>" : ""}
9857
- </div>
9858
9858
  ${blocks.join("\n ")}
9859
- ${renderNewCollection()}
9860
9859
  </section>`;
9861
9860
  }
9862
9861
  function renderCollection(collection, counts, omitted, collapsed, cards) {
@@ -9918,17 +9917,25 @@ function renderCollectionMenu(collection) {
9918
9917
  </div>
9919
9918
  </div>`;
9920
9919
  }
9921
- /** New collection, which opens a name field in place. */
9922
- function renderNewCollection() {
9923
- return `<div class="prb-collection-new">
9924
- <button type="button" class="prb-index-more prb-collection-new-button" data-collection-new><span aria-hidden="true">+</span> New collection</button>
9925
- <form class="prb-collection-new-form" data-collection-new-form hidden>
9926
- <input type="text" class="prb-collection-name" data-collection-name-input placeholder="Collection name" aria-label="New collection name" maxlength="60" autocomplete="off" spellcheck="false">
9927
- <button type="submit" class="prb-bulk-button">Create</button>
9928
- <button type="button" class="prb-bulk-button" data-collection-cancel>Cancel</button>
9929
- <p class="prb-collection-error" data-collection-error hidden role="alert"></p>
9930
- </form>
9931
- </div>`;
9920
+ /**
9921
+ * New collection, opened from beside Select. The description lives here, where somebody is deciding
9922
+ * what to make, rather than on the list for good.
9923
+ */
9924
+ function renderNewCollectionDialog() {
9925
+ return `<dialog class="prb-dialog prb-collection-new-dialog" data-collection-new-dialog aria-labelledby="prb-collection-new-title">
9926
+ <form method="dialog" data-collection-new-form>
9927
+ <h2 id="prb-collection-new-title">New collection</h2>
9928
+ <p>Group reviews that belong together, such as one refactor or one release.</p>
9929
+ <label class="prb-field"><span>Collection name</span>
9930
+ <input type="text" data-collection-name-input placeholder="e.g. Refactor" maxlength="60" autocomplete="off" spellcheck="false" required>
9931
+ </label>
9932
+ <p class="prb-collection-error" data-collection-error hidden role="alert"></p>
9933
+ <div class="prb-dialog-actions">
9934
+ <button type="button" data-collection-cancel>Cancel</button>
9935
+ <button type="submit" class="prb-dialog-primary" data-collection-create disabled>Create</button>
9936
+ </div>
9937
+ </form>
9938
+ </dialog>`;
9932
9939
  }
9933
9940
  /**
9934
9941
  * Manage collections, for one card or for a selection. Built once; the browser fills the list from
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prreviewbuddy",
3
- "version": "0.82.1",
3
+ "version": "0.82.4",
4
4
  "description": "Understand code changes before you approve them. Local branch and pull request reviews with Claude Code or Codex.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://prreviewbuddy.com",
@@ -1 +1 @@
1
- import{F as e}from"./chunk-CQNkZ9TG.js";function t(e=document){for(let t of e.querySelectorAll(`.prb-index-status`))t.addEventListener(`click`,e=>{let n=t.querySelector(`select`);if(!(!n||e.target instanceof Node&&n.contains(e.target))){e.preventDefault(),n.focus();try{n.showPicker()}catch{}}})}function n(t,n){r(t,t=>e(t.dataset.section)?t.dataset.section:void 0,n)}function r(e,t,n){let r=Promise.resolve();for(let i of e){let e=t(i);if(e===void 0)continue;let a=i.open;i.addEventListener(`toggle`,()=>{if(i.open===a)return;a=i.open;let t=!i.open;r=r.then(()=>n(e,t)).catch(()=>{})})}}export{n,t as r,r as t};
1
+ import{F as e}from"./chunk-CmdZYpyj.js";function t(e=document){for(let t of e.querySelectorAll(`.prb-index-status`))t.addEventListener(`click`,e=>{let n=t.querySelector(`select`);if(!(!n||e.target instanceof Node&&n.contains(e.target))){e.preventDefault(),n.focus();try{n.showPicker()}catch{}}})}function n(t,n){r(t,t=>e(t.dataset.section)?t.dataset.section:void 0,n)}function r(e,t,n){let r=Promise.resolve();for(let i of e){let e=t(i);if(e===void 0)continue;let a=i.open;i.addEventListener(`toggle`,()=>{if(i.open===a)return;a=i.open;let t=!i.open;r=r.then(()=>n(e,t)).catch(()=>{})})}}export{n,t as r,r as t};
@@ -0,0 +1 @@
1
+ function e(e,t){e.addEventListener(`pageshow`,e=>{e.persisted&&t()})}var t=[`checkbox`,`radio`,`button`,`submit`,`reset`].map(e=>`:not([type="${e}"])`).join(``);function n(e){if(!e||typeof e.closest!=`function`)return!1;let n=e;return n.isContentEditable?!0:n.closest(`input${t}, textarea, select, [contenteditable=""], [contenteditable="true"]`)!==null}var r=`prbNav`,i=`prb-workspace`,a=`prb-nav-session`,o=`prb-nav-head`,s=`prb-nav-handoff`,c=`prb-nav-places`,l=200,u=15e3,d=`unstored`;function f(e){if(!e||typeof e!=`object`)return null;let t=e[r];if(!t||typeof t!=`object`)return null;let{v:n,owner:i,session:a,idx:o,id:s,ui:c}=t;if(n!==1||i!==`prb-workspace`||typeof a!=`string`||a===``||typeof o!=`number`||!Number.isInteger(o)||o<0)return null;let l=c&&typeof c==`object`&&!Array.isArray(c)?c:null;return{v:n,owner:i,session:a,idx:o,...typeof s==`string`&&s!==``?{id:s}:{},ui:l}}function p(e){if(!e||typeof e!=`object`)return{};let{[r]:t,...n}=e;return n}function m(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.owner===`prb-workspace`&&n.session===t}function h(e,t){try{return e?.getItem(t)??null}catch{return null}}function g(e,t,n){try{n===null?e?.removeItem(t):e?.setItem(t,n)}catch{}}function _(e){let{history:t,storage:n,location:_}=e,v=e.navigation??null,y=[],b=null,x=null,S=null,C=t=>{S!==null&&e.clearTimeout(S),S=t?t():null,e.capturePending(S!==null)},w=null,T=(()=>{if(!n)return d;let t=h(n,a);if(t)return t;let r=e.uuid();return g(n,a,r),h(n,a)===r?r:d})(),E=()=>`${_.pathname}${_.search}`,D=e=>`${E()}${e}`,O=()=>{try{v?.updateCurrentEntry({state:{owner:i,session:T}})}catch{}},k=()=>{for(let e of y)e()},A=(e,n)=>{n===void 0?t.replaceState(e,``):t.replaceState(e,``,n),O()},j=()=>Number(h(n,o)??0)||0,M=()=>{try{let e=JSON.parse(h(n,c)??`{}`);return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{return{}}},ee=(e,t)=>{if(!e||!n)return;let r=M();delete r[e],r[e]=t;let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-l)))delete r[e];g(n,c,JSON.stringify(r))},te=e=>{if(!e)return null;let t=e.id?M()[e.id]:void 0;return t&&typeof t==`object`&&!Array.isArray(t)?t:e.ui},ne=()=>{if(!b)return null;try{return b()}catch{return null}},re=()=>{let a=f(t.state);if(a&&a.session===T&&a.id){w=a.id,O();return}let c=a?.idx??0;if(!a){let t=h(n,s);g(n,s,null),c=0;try{let n=t?JSON.parse(t):null,r=e.referrer!==``&&new URL(e.referrer).origin===_.origin;n&&r&&n.session===T&&typeof n.idx==`number`&&typeof n.at==`number`&&e.now()-n.at<u&&(c=n.idx+1)}catch{c=0}g(n,o,String(c))}let l=a?.id??e.uuid();w=l;let d={v:1,owner:i,session:T,idx:c,id:l,ui:a?.ui??null};A({...p(t.state),[r]:d})},N=()=>f(t.state)??{v:1,owner:`prb-workspace`,session:T,idx:0,ui:null},P=()=>{S!==null&&C(null);let e=ne();if(!e||!w)return;let n=JSON.stringify(e),i=f(t.state);if(!i||i.id!==w){ee(w,e);return}(n!==x||JSON.stringify(i.ui)!==n)&&(x=n,ee(w,e),A({...p(t.state),[r]:{...i,ui:e}}))},F=e=>{if(v){let t=v.currentEntry?.index;if(typeof t!=`number`||t<0)return!1;let n=v.entries()[t+e];if(!n)return!1;try{return m(n.getState(),T)}catch{return!1}}let n=f(t.state);return!n||n.session!==T||t.length<2?!1:e===-1?n.idx>0:n.idx<j()};re();try{t.scrollRestoration=`manual`}catch{}return{session:T,current(){return{route:p(t.state),ui:te(f(t.state))}},push(a,s){if(a!==``&&!a.startsWith(`#`))throw Error(`Workspace history pushes within this document only; "${a}" is not a fragment.`);if(D(a)===`${E()}${_.hash}`)return!1;P();let c=N().idx+1;g(n,o,String(c));let l=e.uuid(),u={v:1,owner:i,session:T,idx:c,id:l,ui:null};return w=l,t.pushState({...p(s),[r]:u},``,D(a)),x=null,O(),k(),!0},replace(e,t){if(e!==``&&!e.startsWith(`#`))throw Error(`Workspace history replaces within this document only; "${e}" is not a fragment.`);A({...p(t),[r]:N()},D(e))},setCapturer(e){b=e},captureNow:P,scheduleCapture(){C(()=>e.setTimeout(P,250))},leaving(){P(),g(n,s,JSON.stringify({session:T,idx:N().idx,at:e.now()}))},canGoBack:()=>F(-1),canGoForward:()=>F(1),back(){return F(-1)?(P(),t.back(),!0):!1},forward(){return F(1)?(P(),t.forward(),!0):!1},moved(){S!==null&&C(null);let e=ne();e&&ee(w,e),x=null,w=f(t.state)?.id??null;let n=f(t.state);!n||!n.id||n.session!==T?re():O(),k()},onAvailability(e){y.push(e)}}}function v(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function y(e){let t=e?.userAgentData?.platform??e?.platform??``;return/mac|iphone|ipad/i.test(t)}function b(e,t,r){if(e.defaultPrevented||e.isComposing)return null;let i=t?e.metaKey:e.ctrlKey,a=t?e.ctrlKey:e.metaKey;if(!i||a||e.altKey||e.shiftKey)return null;let o=e.key===`[`||e.key!==`]`&&e.code===`BracketLeft`?`back`:e.key===`]`||e.code===`BracketRight`?`forward`:null;return!o||n(e.target)||r.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)?null:o}var x=[`data-id`,`data-finding-card`,`data-goto-section`,`data-view-nav`,`data-file`,`data-line`,`data-history`,`data-history-toggle`,`data-load-more`,`data-select`,`data-pin`,`data-focus-toggle`,`data-ask-toggle`,`data-rail-toggle`,`data-search`,`data-status-filter`,`data-author-filter`,`data-pr-filter`,`data-card`,`data-placement`,`data-collection`,`data-notification-id`,`data-guide-section`,`data-guide-detail`,`data-view`];function S(e){if(e.id)return{attrs:[[`id`,e.id]]};let t=x.filter(t=>e.hasAttribute(t)).map(t=>[t,e.getAttribute(t)??``]);return t.length>0?{attrs:t}:null}function C(e,t){if(!e||e===t||!t.contains(e))return null;let n=[],r=e;for(;r&&r!==t&&n.length<3;){let t=S(r);t?n.unshift(t):r===e&&n.unshift({tag:r.tagName.toLowerCase(),...r.classList[0]?{cls:r.classList[0]}:{}}),r=r.parentElement}return n.length>0?n:null}function w(e){if(!e||typeof e!=`object`)return!1;let{attrs:t,tag:n,cls:r}=e;return t===void 0?typeof n==`string`&&/^[a-z][a-z0-9-]*$/.test(n)&&(r===void 0||typeof r==`string`):Array.isArray(t)&&t.length>0&&t.every(e=>Array.isArray(e)&&e.length===2&&x.concat(`id`).includes(e[0])&&typeof e[1]==`string`)}function T(e,t){return t.attrs?t.attrs.every(([t,n])=>e.getAttribute(t)===n):e.tagName.toLowerCase()===t.tag&&(t.cls===void 0||e.classList.contains(t.cls))}function E(e,t){let n=t.attrs?`[${t.attrs[0][0]}]`:t.tag;for(let r of e.querySelectorAll(n))if(T(r,t))return r;return null}function D(e,t){if(!Array.isArray(t)||t.length===0||!t.every(w))return null;let n=null,r=e;for(let e of t){let t=E(r,e);if(!t)return n;n=t,r=t}return n}function O(e){let t=e.activeElement;return{focus:C(t,e.body),focusVisible:t!==null&&t!==e.body&&t.matches(`:focus-visible`)}}function k(e,t,n){let r=D(e,t);if(!r)return;let i={preventScroll:!0,focusVisible:n===!0};if(r.tabIndex<0&&!r.matches(`a[href], button, input, select, textarea, summary`)){r.querySelector(`a[href], button:not([disabled]), input, select, textarea, [tabindex="0"]`)?.focus(i);return}r.focus(i)}function A(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)&&n>=0?n:null}function j(e,t){let n=e?.[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function M(e){try{return e.sessionStorage}catch{return null}}function ee(e,t){let n=e===`back`?`[`:`]`;return`${e===`back`?`Back`:`Forward`} (${t?`⌘${n}`:`Ctrl+${n}`})`}function te(e,t){if(e.target&&e.target!==`_self`||e.hasAttribute(`download`))return!1;let n;try{n=new URL(e.getAttribute(`href`)??``,t.href)}catch{return!1}return n.origin===t.origin?n.pathname!==t.pathname||n.search!==t.search:!1}function ne(e,t){let n=e.querySelector(`[data-nav-announce]`);!n||!t||(n.textContent=``,e.defaultView?.setTimeout(()=>{n.textContent=t},50))}function re(e={},t=window,n=document){let r=t.navigation??null,i=_({history:t.history,navigation:r,storage:M(t),location:t.location,referrer:n.referrer,now:()=>Date.now(),uuid:()=>t.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,setTimeout:(e,n)=>t.setTimeout(e,n),clearTimeout:e=>t.clearTimeout(e),capturePending:e=>n.documentElement.toggleAttribute(`data-nav-capture-pending`,e)}),a=y(t.navigator),o=[...n.querySelectorAll(`[data-history]`)],s=()=>{for(let e of o)e.disabled=!((e.dataset.history===`forward`?`forward`:`back`)==`back`?i.canGoBack():i.canGoForward())};for(let e of o){let t=e.dataset.history===`forward`?`forward`:`back`;e.dataset.tip=ee(t,a),e.addEventListener(`click`,()=>{t===`back`?i.back():i.forward()})}s(),i.onAvailability(s),r?.addEventListener?.(`currententrychange`,s),t.addEventListener(`keydown`,e=>{let t=b(e,a,n);t&&(e.preventDefault(),t===`back`?i.back():i.forward())}),t.addEventListener(`popstate`,()=>i.moved()),t.addEventListener(`pagehide`,()=>i.captureNow()),n.addEventListener(`visibilitychange`,()=>{n.visibilityState===`hidden`&&i.captureNow()}),n.addEventListener(`click`,e=>{let n=e.target?.closest?.(`a[href]`);!n||!v(e)||e.defaultPrevented||te(n,t.location)&&i.leaving()},!0),n.addEventListener(`pointerdown`,e=>{(e.button===3||e.button===4)&&i.captureNow()},!0);let c=()=>i.scheduleCapture();for(let e of[`scroll`,`click`,`input`,`toggle`,`focusin`])n.addEventListener(e,c,{capture:!0,passive:!0});if(!e.ownsRestore){let e=n.querySelector(`.prb-shell > main`);i.setCapturer(()=>({main:e?.scrollTop??0,...O(n)}));let{ui:t}=i.current(),r=A(t,`main`);e&&r!==null&&(e.scrollTop=r),t&&k(n,t.focus,t.focusVisible)}return i}var N=[{id:`active`,name:`Active`,action:`Move to active`},{id:`waiting`,name:`Waiting`,action:`Mark waiting`},{id:`done`,name:`Done`,action:`Mark done`}];function P(e){if(typeof e!=`object`||!e)return;let{state:t,at:n}=e;if(!(t!==`waiting`&&t!==`done`||typeof n!=`number`||!Number.isFinite(n)))return{state:t,at:n}}function F(e){return N.find(t=>t.id===e).action}function ie(e,t){if(!e)return;let n=I(e,t);return n===void 0?{text:N.find(t=>t.id===e.state).name,changed:!1}:{text:n,changed:!0}}var ae=[`created`,`updated`,`merged`,`closed`,`reopened`];function oe(e){return se({at:Number(e.activityAt),kind:e.activityKind,...e.activityMovedAt===void 0?{}:{movedAt:Number(e.activityMovedAt)}})}function se(e){if(typeof e!=`object`||!e)return;let{at:t,kind:n,movedAt:r}=e;if(!(typeof t!=`number`||!Number.isFinite(t)||!ae.includes(n)))return{at:t,kind:n,...typeof r==`number`&&Number.isFinite(r)?{movedAt:r}:{}}}function ce(e,t){return!e||e.state===`waiting`&&le(e,t)?`active`:e.state}function I(e,t){if(!e||!t)return;if(e.state===`waiting`)return le(e,t)?`Changed while waiting`:void 0;if(t.kind===`reopened`&&t.at>e.at)return`Reopened since done`;let n=t.movedAt??(t.kind===`updated`?t.at:void 0);return n!==void 0&&n>e.at?`Changed since done`:void 0}function le(e,t){return t!==void 0&&t.kind!==`created`&&t.at>e.at}function ue(e,t,n){return I(t,n)!==void 0||e!==(t?.state??`active`)}function de(e,t,n){return e===`done`&&t?.state===`done`&&I(t,n)!==void 0?`Keep done`:F(e)}var fe=[`pinned`,`active`,`waiting`,`done`],pe=[`in-progress`,...fe],me=e=>N.find(t=>t.id===e).name,he={"in-progress":{title:`In progress`,key:`i`},pinned:{title:`Pinned`,key:`p`},active:{title:me(`active`),key:`a`},waiting:{title:me(`waiting`),key:`w`},done:{title:me(`done`),key:`d`}};function ge(e){return typeof e==`string`&&pe.includes(e)}function _e(e){if(ge(e))return!0;if(typeof e!=`string`)return!1;let t=/^collection(?:-done)?:(.*)$/.exec(e);return t!==null&&ye(t[1])}var ve=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function ye(e){return typeof e==`string`&&ve.test(e)}function be(e,t,n,r){return e&&!L(r)?`pinned`:ce(t,n)}function xe(e,t,n,r,i){if(!(r&&!e&&!L(i)))return be(e,t,n,i)}function Se(e,t,n,r){if(!(e||L(r)))return ce(t,n)===`done`?`completed`:`active`}function Ce(e,t){let n=`${e} active`;return t===0?n:`${n} · ${t} pinned`}function we(e,t,n){let r=t.filter(t=>t.id!==n&&e.includes(t.id)).map(e=>e.name);if(r.length!==0)return`${n===void 0?`In`:`Also in`} ${r.join(`, `)}`}function Te(e,t){if(!(e.active>0))return t?`Nothing in this collection matches the filters.`:e.members===0?`Nothing here yet. Add reviews from a card’s menu, or select several and choose Manage collections.`:e.pinned>0&&e.completed===0?`Its reviews are pinned, so they are listed under Pinned.`:`No active reviews`}function Ee(e){return`Show completed (${e})`}function De(e,t,n){let r=new Map;for(let i of e){let e=t(i);if(e===void 0)continue;let a=r.get(e)??{shown:[],total:0};a.total<n(e)&&a.shown.push(i),a.total+=1,r.set(e,a)}return r}function Oe(e,t){let n=e.filter(e=>e.includes(t)).length;return n===0?`none`:n===e.length?`all`:`some`}function ke(e){return e===`all`?`remove`:`add`}var Ae=`none`;function je(e,t){if(t.length===0)return!0;let n=e??[];return n.length===0?t.includes(Ae):n.some(e=>t.includes(e))}function Me(e,t){return e.length===0?`All`:e.length>1?`${e.length} chosen`:e[0]===`none`?`Uncollected`:t.find(t=>t.id===e[0])?.name??`All`}function L(e){return e===`queue`}function Ne(e,t,n){return e?ie(t,n)?.text:I(t,n)}var Pe=[`all`,`queue`,`in-progress`,`complete`],Fe=[`any`,`open`,`merged`,`closed`],Ie=[`q`,`f`,`by`,`pr`,`col`,`page`],R={query:``,filter:`all`,author:``,pr:`any`,collections:[]};function Le(e){return e.query.trim()!==``||e.filter!==R.filter||e.author!==R.author||e.pr!==R.pr||e.collections.length>0}function Re(e,t,n){let r=n===void 0?`${e} review${e===1?``:`s`}`:`${e} of ${n} review${n===1?``:`s`}`;return e===t?r:`${r} · ${t} branch${t===1?``:`es`}`}function ze(e,t,n){let r={pinned:{shown:[],total:0},active:{shown:[],total:0},waiting:{shown:[],total:0},done:{shown:[],total:0}};for(let i of e){let e=t(i),a=r[e];a.total<n[e]&&a.shown.push(i),a.total+=1}return r}function Be(){return{pinned:15,active:15,waiting:15,done:15}}function Ve(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`f`)??``,r=t.get(`pr`)??``,i=new URLSearchParams;for(let[e,n]of t)!Ie.includes(e)&&/^[a-z][a-z0-9_-]*$/i.test(e)&&n!==``&&i.append(e,n);let a=i.toString();return{query:t.get(`q`)??``,filter:Pe.includes(n)?n:`all`,author:t.get(`by`)??``,pr:Fe.includes(r)?r:`any`,collections:[...new Set((t.get(`col`)??``).split(`,`).filter(e=>e===`none`||ye(e)))],...a===``?{}:{extra:a}}}function He(e){let t=new URLSearchParams;e.query!==``&&t.set(`q`,e.query),e.filter!==`all`&&t.set(`f`,e.filter),e.author!==``&&t.set(`by`,e.author),e.pr!==`any`&&t.set(`pr`,e.pr),e.collections.length>0&&t.set(`col`,e.collections.join(`,`));for(let[n,r]of new URLSearchParams(e.extra??``))Ie.includes(n)||t.append(n,r);let n=t.toString();return n===``?``:`#${n}`}function Ue(e,t){return t===`all`||t===`queue`?!0:t===`in-progress`?e.status!==`complete`:e.status===t}function We(e,t){return t===`any`||e.prState===t}function Ge(e,t){return t===``||e===t}function Ke(e){return e===`complete`?`Mark reviewed`:`Mark not reviewed`}function qe(e){return e?`Unpin review`:`Pin review`}function Je(e){return e?`Remove from review queue`:`Add to review queue`}function Ye(e,t){let n=t.query.trim().toLowerCase();return Xe(e.filter(e=>(!n||e.searchText.includes(n))&&Ue(e,t.filter)&&Ge(e.author,t.author)&&We(e,t.pr)&&je(e.collections,t.collections??[])),t.filter)}function Xe(e,t){return L(t)?e.filter(e=>e.queue!==void 0).sort((e,t)=>(e.queue??0)-(t.queue??0)):e}function Ze(e){return e===0?`Queue`:`Queue (${e})`}function Qe(e){return e===`complete`?`Reviewed`:e===`in-progress`?`Not reviewed`:`New`}function $e(e,t){if(e===0)return`Nothing selected`;let n=`${e} selected`;return t>0?`${n} · ${t} not shown`:n}function et(e){return e===0?`Select all`:`Select all ${e}`}function tt(e){return e===0?`Delete`:`Delete ${e} review${e===1?``:`s`}`}function nt(e){return`${tt(e)}?`}function rt(e,t,n){return e===``||t===``||t===e?`wait`:n?`hold`:`reload`}var it=[`in-progress`,`recent`],at={"in-progress":{title:`In progress`,key:`i`},recent:{title:`Recent runs and issues`,key:`r`}};function ot(e){return typeof e==`string`&&it.includes(e)}var st=[{id:`global`,label:`Global`},{id:`reviews`,label:`Reviews list`},{id:`runs`,label:`Runs list`},{id:`notifications`,label:`Activity list`},{id:`findings`,label:`Issues and Questions`},{id:`sections`,label:`Review sections`},{id:`buddy`,label:`Buddy AI`},{id:`actions`,label:`Review actions`},{id:`workspace`,label:`Workspace and focus`}],z=(...e)=>({kind:`chord`,keys:e}),B=(e,t)=>({kind:`key`,key:e,...t?{shift:t}:{}}),ct=e=>({kind:`key`,key:e,primary:!0}),lt=pe.map(e=>({id:`reviews.section.${e}`,label:`${he[e].title} section`,group:`reviews`,page:`reviews`,binding:z(`l`,he[e].key)})),ut=it.map(e=>({id:`runs.section.${e}`,label:`${at[e].title} section`,group:`runs`,page:`runs`,binding:z(`l`,at[e].key)})),V=[{id:`palette.open`,label:`Command palette`,group:`global`,page:`global`,binding:{kind:`combo`,key:`k`}},{id:`add.open`,label:`Add review`,group:`global`,page:`global`,binding:{kind:`combo`,key:`p`}},{id:`add.pullRequest`,label:`Review pull requests`,group:`global`,page:`global`,binding:z(`p`,`p`)},{id:`add.branch`,label:`Review branch`,group:`global`,page:`global`,binding:z(`p`,`b`)},{id:`navigate.reviews`,label:`Go to Reviews`,group:`global`,page:`global`,binding:z(`r`)},{id:`navigate.runs`,label:`Go to Runs`,group:`global`,page:`global`,binding:z(`e`)},{id:`navigate.notifications`,label:`Go to Activity`,group:`global`,page:`global`,binding:z(`n`)},{id:`help.shortcuts`,label:`Keyboard shortcuts`,group:`global`,page:`global`,binding:z(`?`)},{id:`reviews.search`,label:`Search reviews`,group:`reviews`,page:`reviews`,binding:z(`s`)},{id:`reviews.filters`,label:`Filters`,group:`reviews`,page:`reviews`,binding:z(`f`)},...lt,{id:`reviews.collection.new`,label:`New collection`,group:`reviews`,page:`reviews`,binding:z(`l`,`n`)},{id:`reviews.collection.fold`,label:`Expand or collapse a collection`,group:`reviews`,page:`reviews`,binding:z(`l`,`c`)},{id:`reviews.next`,label:`Next review`,group:`reviews`,page:`reviews`,binding:B(`j`)},{id:`reviews.previous`,label:`Previous review`,group:`reviews`,page:`reviews`,binding:B(`k`)},{id:`reviews.open`,label:`Open review`,group:`reviews`,page:`reviews`,binding:B(`Enter`)},{id:`reviews.openInNewTab`,label:`Open review in new tab`,group:`reviews`,page:`reviews`,binding:B(`Enter`,!0)},{id:`reviews.menu`,label:`Open review menu`,group:`reviews`,page:`reviews`,binding:B(` `)},{id:`runs.search`,label:`Search runs`,group:`runs`,page:`runs`,binding:z(`s`)},{id:`runs.next`,label:`Next run`,group:`runs`,page:`runs`,binding:B(`j`)},{id:`runs.previous`,label:`Previous run`,group:`runs`,page:`runs`,binding:B(`k`)},{id:`runs.open`,label:`Open run’s review`,group:`runs`,page:`runs`,binding:B(`Enter`)},{id:`runs.openInNewTab`,label:`Open run’s review in new tab`,group:`runs`,page:`runs`,binding:B(`Enter`,!0)},{id:`runs.menu`,label:`Open run menu`,group:`runs`,page:`runs`,binding:B(` `)},...ut,{id:`notifications.next`,label:`Next activity`,group:`notifications`,page:`notifications`,binding:B(`j`)},{id:`notifications.previous`,label:`Previous activity`,group:`notifications`,page:`notifications`,binding:B(`k`)},{id:`notifications.open`,label:`Open activity`,group:`notifications`,page:`notifications`,binding:B(`Enter`)},{id:`notifications.openInNewTab`,label:`Open activity in new tab`,group:`notifications`,page:`notifications`,binding:B(`Enter`,!0)},{id:`review.findings.next`,label:`Next card`,group:`findings`,page:`review`,binding:B(`j`)},{id:`review.findings.previous`,label:`Previous card`,group:`findings`,page:`review`,binding:B(`k`)},{id:`review.findings.askBuddy`,label:`Ask Buddy about the card`,group:`findings`,page:`review`,binding:B(` `)},{id:`review.findings.copy`,label:`Copy the card`,group:`findings`,page:`review`,binding:ct(`c`)},{id:`review.findings.choose`,label:`Include in feedback, or leave out`,group:`findings`,page:`review`,binding:B(`Enter`)},{id:`review.feedback.prepare`,label:`Prepare feedback from the chosen cards`,group:`findings`,page:`review`,binding:ct(`Enter`),hint:`[data-feedback-prepare]`,showHint:!0},{id:`review.feedback.copyDraft`,label:`Copy the feedback draft`,group:`findings`,page:`review`,binding:ct(`c`),within:`[data-feedback-dialog]`,hint:`[data-feedback-copy]`,showHint:!0},{id:`review.section.review`,label:`Review overview`,group:`sections`,page:`review`,binding:z(`s`,`r`)},{id:`review.section.kiss`,label:`KISS`,group:`sections`,page:`review`,binding:z(`s`,`k`)},{id:`review.section.issues`,label:`Issues`,group:`sections`,page:`review`,binding:z(`s`,`i`)},{id:`review.section.diagrams`,label:`Diagrams`,group:`sections`,page:`review`,binding:z(`s`,`g`)},{id:`review.section.questions`,label:`Questions`,group:`sections`,page:`review`,binding:z(`s`,`q`)},{id:`review.section.files`,label:`Files`,group:`sections`,page:`review`,binding:z(`s`,`f`)},{id:`review.buddy.open`,label:`Open Buddy AI`,group:`buddy`,page:`review`,binding:z(`b`,`o`)},{id:`review.buddy.prompt`,label:`Choose a prompt`,group:`buddy`,page:`review`,binding:z(`b`,`p`)},{id:`review.mark.reviewed`,label:`Mark reviewed`,group:`actions`,page:`review`,binding:z(`m`,`r`),hint:`[data-review-menu] [data-mark-status]`},{id:`review.mark.waiting`,label:`Mark waiting`,group:`actions`,page:`review`,binding:z(`m`,`w`),hint:`[data-review-menu] [data-lifecycle-set="waiting"]`},{id:`review.mark.done`,label:`Mark done`,group:`actions`,page:`review`,binding:z(`m`,`d`),hint:`[data-review-menu] [data-lifecycle-set="done"]`},{id:`review.checkUpdates`,label:`Check for updates`,group:`actions`,page:`review`,binding:z(`a`,`c`),hint:`[data-review-menu] [data-fresh-check]`},{id:`review.update`,label:`Update review`,group:`actions`,page:`review`,binding:z(`a`,`u`)},{id:`review.queue.toggle`,label:`Queue`,group:`actions`,page:`review`,binding:z(`a`,`q`),hint:`[data-review-menu] [data-queue-action]`},{id:`review.feedback.toggle`,label:`Start or exit Prepare feedback`,group:`actions`,page:`review`,binding:z(`a`,`p`)},{id:`review.delete`,label:`Delete`,group:`actions`,page:`review`,binding:z(`a`,`d`),hint:`[data-review-menu] [data-delete]`},{id:`review.focus.toggle`,label:`Expand or collapse this section`,group:`workspace`,page:`review`,binding:B(`\\`),hint:`[data-focus-toggle]`},{id:`review.leave`,label:`Leave the Buddy AI field, Prepare feedback, or focus mode`,group:`workspace`,page:`review`,binding:B(`Escape`)}],dt=[{page:`global`,keys:[`p`],label:`Add review`,combo:`p`},{page:`review`,keys:[`s`],label:`Sections`},{page:`review`,keys:[`m`],label:`Mark`},{page:`review`,keys:[`a`],label:`Actions`},{page:`review`,keys:[`b`],label:`Buddy AI`},{page:`reviews`,keys:[`l`],label:`List sections`},{page:`runs`,keys:[`l`],label:`List sections`}];function ft(e,t=V){return t.filter(t=>t.page===`global`||t.page===e)}function pt(e,t=V){let n={kind:`node`,key:``,label:`Commands`,children:[]},r=(t,r)=>{let i=n;for(let[n,a]of t.entries()){let o=i.children.find(e=>e.key===a);if(o?.kind===`leaf`)throw Error(`Chord ${t.slice(0,n+1).join(` `)} is a command and a namespace on ${e}`);if(o){i=o;continue}let s={kind:`node`,key:a,label:dt.find(r=>(r.page===e||r.page===`global`)&&r.keys.join(` `)===t.slice(0,n+1).join(` `))?.label??r??a.toUpperCase(),children:[]};i.children.push(s),i=s}return i};for(let n of ft(e,t)){if(n.binding.kind!==`chord`)continue;let t=n.binding.keys,i=r(t.slice(0,-1)),a=t[t.length-1];if(i.children.some(e=>e.key===a))throw Error(`Chord ${t.join(` `)} is bound twice on ${e}`);i.children.push({kind:`leaf`,key:a,command:n})}return n}function mt(e){return ft(e).filter(e=>e.binding.kind===`key`)}var ht=new Set([`Shift`,`Control`,`Alt`,`Meta`,`CapsLock`,`Fn`,`AltGraph`,`OS`]);function gt(e){return ht.has(e.key)}function _t(e){let t=e.key;if(t.length===1){if(/^[a-z]$/i.test(t))return t.toLowerCase();let n=/^Key([A-Z])$/.exec(e.code??``);return n&&/\p{L}/u.test(t)?n[1].toLowerCase():t}return null}var vt=new Set(V.flatMap(e=>e.binding.kind===`combo`?[e.binding.key]:[]));function yt(e,t){let n=t?e.metaKey:e.ctrlKey,r=t?e.ctrlKey:e.metaKey;if(!n||r||e.altKey||e.shiftKey||e.isComposing)return null;let i=_t(e);return i!==null&&vt.has(i)?i:null}function bt(e){return V.find(t=>t.binding.kind===`combo`&&t.binding.key===e)}function xt(e,t,n=!1){if(e.kind!==`key`||t.altKey||t.isComposing)return!1;let r=n?t.metaKey:t.ctrlKey;return(n?t.ctrlKey:t.metaKey)||r!==(e.primary===!0)||t.shiftKey!==(e.shift===!0)?!1:e.key===`\\`?t.key===`\\`||t.code===`Backslash`:e.key.length===1?_t(t)===e.key:t.key===e.key}function St(e){let t=null,n=[];return{get at(){return t},get path(){return n},start(r=[]){let i=e,a=[];for(let e of r){let t=i.children.find(t=>t.key===e);if(t?.kind!==`node`)break;i=t,a.push(e)}t=i,n=a},press(e){let r=t?.children.find(t=>t.key===e);return r?r.kind===`leaf`?(t=null,n=[],{kind:`run`,command:r.command}):(t=r,n=[...n,e],{kind:`descend`,node:r}):(t=null,n=[],{kind:`cancel`})},reset(){t=null,n=[]}}}var Ct={Escape:`Esc`,Enter:`Enter`,"\\":`\\`," ":`Space`};function H(e){return Ct[e]??(e.length===1?e.toUpperCase():e)}function U(e,t=`k`){let n=t.toUpperCase();return e?`⌘${n}`:`Ctrl+${n}`}function W(e,t){let n=dt.find(t=>t.combo!==void 0&&t.keys.every((t,n)=>e[n]===t));return n?[U(t,n.combo),...e.slice(n.keys.length).map(H)]:[U(t),...e.map(H)]}function G(e,t){return e.kind===`combo`?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.kind===`chord`?W(e.keys,t).join(` `):e.primary?t?`⌘${H(e.key)}`:`Ctrl+${H(e.key)}`:e.shift?`Shift+${H(e.key)}`:H(e.key)}function wt(e,t){return e.kind===`chord`?W(e.keys,t):[G(e,t)]}function Tt(e,t){if(e.kind===`chord`)return null;if(e.kind===`combo`)return`${t?`Meta`:`Control`}+${e.key.toUpperCase()}`;let n=e.key===` `?`Space`:e.key.length===1?e.key.toUpperCase():e.key;return e.primary?`${t?`Meta`:`Control`}+${n}`:e.shift?`Shift+${n}`:n}function Et(e){return st.map(t=>({group:t.id,label:t.label,rows:V.filter(e=>e.group===t.id).map(t=>({id:t.id,keys:wt(t.binding,e),label:t.label}))})).filter(e=>e.rows.length>0)}function K(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function q(e,t){return K(e,`kbd`,`prb-kbd`,t)}function Dt(e,t,n){let r=K(e,`dialog`,`prb-palette`);r.setAttribute(`data-command-palette`,``),r.setAttribute(`aria-labelledby`,`prb-palette-title`);let i=K(e,`div`,`prb-palette-panel`);i.tabIndex=-1,r.append(i),e.body.append(r),r.addEventListener(`click`,e=>{if(e.stopPropagation(),e.target===r)return n();let i=e.target?.closest?.(`[data-palette-key]`);i?.dataset.paletteKey!==void 0&&i.getAttribute(`aria-disabled`)!==`true`&&t(i.dataset.paletteKey)}),r.addEventListener(`cancel`,e=>{e.preventDefault(),n()});let a=(t,n)=>{let r=K(e,`div`,`prb-palette-head`),i=K(e,`span`,`prb-palette-trail`);for(let[n,r]of t.entries())n>0&&i.append(K(e,`span`,`prb-palette-sep`,`›`)),i.append(q(e,r));let a=K(e,`h2`,`prb-palette-title`,n);return a.id=`prb-palette-title`,r.append(i,a),r};return{dialog:r,show:t=>{i.replaceChildren(a(t.trail,t.title));let n=K(e,`div`,`prb-palette-list`);n.setAttribute(`role`,`group`),n.setAttribute(`aria-labelledby`,`prb-palette-title`);let o=null;for(let r of t.rows){t.groupLabels&&r.group!==o&&(n.append(K(e,`p`,`prb-palette-group`,t.groupLabels[r.group]??r.group)),o=r.group);let i=K(e,`button`,`prb-palette-row`);i.type=`button`,i.dataset.paletteKey=r.key,r.available||i.setAttribute(`aria-disabled`,`true`),r.namespace&&i.setAttribute(`aria-haspopup`,`true`),i.append(q(e,r.keyLabel),K(e,`span`,`prb-palette-label`,r.namespace?`${r.label}…`:r.label)),r.state&&i.append(K(e,`span`,`prb-palette-state`,r.state)),n.append(i)}if(t.rows.length===0&&n.append(K(e,`p`,`prb-palette-empty`,`Nothing here on this page.`)),i.append(n),t.footer.length>0){let n=K(e,`div`,`prb-palette-footer`);n.append(K(e,`p`,`prb-palette-group`,`Keys on this page`));let r=K(e,`ul`,`prb-palette-keys`);for(let n of t.footer){let t=K(e,`li`);t.append(q(e,n.keys),K(e,`span`,void 0,n.label)),r.append(t)}n.append(r),i.append(n)}r.open||r.showModal(),i.focus()},showPanel:(t,n,o)=>{i.replaceChildren(a(t,n.title));let s=K(e,`div`,`prb-palette-body`);i.append(s),r.open||r.showModal(),i.dataset.mode=n.title;let c=n.mount(s,o);return()=>{delete i.dataset.mode,c?.()}},close:()=>{r.open&&r.close()},isOpen:()=>r.open}}function Ot(e,t,n){let r=[...e.querySelectorAll(`[data-palette-key]`)];if(r.length===0)return!1;let i=r.indexOf(n),a=t===`ArrowDown`?r[i<0?0:(i+1)%r.length]:t===`ArrowUp`?r[i<0?r.length-1:(i-1+r.length)%r.length]:t===`Home`?r[0]:t===`End`?r[r.length-1]:null;return a?(a.focus(),!0):!1}function kt(e,t){let n=K(e,`div`,`prb-shortcuts-table`);for(let r of t){let t=K(e,`section`,`prb-shortcuts-group`);t.append(K(e,`h3`,`prb-shortcuts-heading`,r.label));let i=K(e,`dl`,`prb-shortcuts-list`);for(let t of r.rows){let n=K(e,`dt`,`prb-shortcuts-keys`);n.dataset.commandId=t.id;for(let r of t.keys)n.append(q(e,r));i.append(n,K(e,`dd`,`prb-shortcuts-label`,t.label))}t.append(i),n.append(t)}return n}function At(e,t,n,r){let i=K(e,`dialog`,`prb-dialog prb-shortcuts`);i.setAttribute(`data-shortcuts-dialog`,``),i.setAttribute(`aria-labelledby`,`prb-shortcuts-title`);let a=K(e,`div`,`prb-shortcuts-head`),o=K(e,`h2`,void 0,`Keyboard shortcuts`);o.id=`prb-shortcuts-title`;let s=K(e,`button`,`prb-shortcuts-close`,`Close`);s.type=`button`,s.setAttribute(`data-shortcuts-close`,``),a.append(o,s),i.append(a,K(e,`p`,`prb-shortcuts-hint`,n),kt(e,t)),e.body.append(i);let c=null;return s.addEventListener(`click`,()=>i.close()),i.addEventListener(`click`,e=>{e.target===i&&i.close()}),i.addEventListener(`close`,()=>{c?.isConnected&&c.focus(),c=null,r?.()}),{dialog:i,open:()=>{if(i.open)return;let t=e.activeElement;c=t instanceof HTMLElement&&t!==e.body?t:null,i.showModal(),s.focus()},isOpen:()=>i.open}}var jt=/https?:\/\/[^\s<>()"'`]+/gi,Mt=/^https?:\/\/(?:www\.)?github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)(?:[/?#]|$)/i,Nt=/^https?:\/\/([^/]+)\/((?:[^/?#]+\/)+?)(?:-\/)?merge_requests\/(\d+)(?:[/?#]|$)/i,Pt=/^https?:\/\/(?:www\.)?bitbucket\.org\/([^/?#]+)\/([^/?#]+)\/pull-requests\/(\d+)(?:[/?#]|$)/i;function Ft(e){let t=e.replace(/[.,;:!?)\]]+$/,``),n=Mt.exec(t);if(n){let[,e,t,r]=n,i=t.replace(/\.git$/i,``),a=Number(r);return{kind:`github`,owner:e,repo:i,number:a,url:`https://github.com/${e}/${i}/pull/${a}`,key:`${e}/${i}#${a}`.toLowerCase()}}let r=Pt.exec(t);if(r){let[,e,n,i]=r;return{kind:`unsupported`,provider:`Bitbucket`,label:`${e}/${n} #${i}`,url:t,key:`bitbucket:${e}/${n}#${i}`.toLowerCase()}}let i=Nt.exec(t);if(i){let[,e,n,r]=i,a=n.replace(/\/$/,``);return{kind:`unsupported`,provider:`GitLab`,label:`${a} !${r}`,url:t,key:`gitlab:${e}/${a}!${r}`.toLowerCase()}}return null}function It(e){let t=[],n=new Set;for(let r of e.matchAll(jt)){let e=Ft(r[0]);!e||n.has(e.key)||(n.add(e.key),t.push(e))}return t}function Lt(e){return`${e} isn't supported yet`}function Rt(e){return e.model?`Keeps its original agent and model: ${e.agent}, ${e.model}`:`Keeps its original agent: ${e.agent}`}var zt={waiting:`Queued`,reviewing:`Analysing`,"already-reviewed":`Already reviewed`,ready:`Ready`,failed:`Failed`},Bt={waiting:`○`,reviewing:`◐`,"already-reviewed":`✓`,ready:`✓`,failed:`!`},Vt=250,Ht=1500,Ut=6e4;async function J(e,t,n){try{let r=await e.fetch(t,n===void 0?{}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)}),i=await r.json().catch(()=>({}));if(!r.ok){let e=i;return{...e,ok:!1,status:r.status,error:typeof e.error==`string`?e.error:`Something went wrong. Try again.`}}return{ok:!0,value:i}}catch{return{ok:!1,status:0,error:`The workspace server did not answer. Check it is still running.`}}}function Wt(e,t,n){let r=null,i=!1,a=o=>{r=e.setTimeout(async()=>{let r=await J(e,`/add-review/batches/${t}`);i||(r.ok?(n.rows(r.value.rows,r.value.finished),a(r.value.finished?Ut:Ht)):r.status===404?n.lost(r.error):a(Ht))},o)};return a(Ht),()=>{i=!0,r!==null&&e.clearTimeout(r)}}function Y(e,t,n,r){let i=e.createElement(t);return n&&(i.className=n),r!==void 0&&(i.textContent=r),i}function Gt(e,t,n){let r=Y(e,`option`,void 0,t);return r.value=n,r}function X(e,t,n){let r=Y(e,`a`,`prb-addreview-link`,n);return r.href=`/open?id=${encodeURIComponent(t)}`,r}function Kt(e,t){let n=Y(e,`details`,`prb-addreview-technical`);return n.append(Y(e,`summary`,void 0,`Technical details`),Y(e,`pre`,void 0,t)),n}function qt(e){let t=Y(e,`div`,`prb-addreview-problemblock`);t.setAttribute(`role`,`alert`);let n=Y(e,`p`,`prb-addreview-error`);return n.hidden=!0,t.append(n),{element:t,show(r){n.textContent=r.error,n.hidden=!1,t.querySelector(`.prb-addreview-technical`)?.remove(),r.detail&&t.append(Kt(e,r.detail))},hide(){n.hidden=!0,t.querySelector(`.prb-addreview-technical`)?.remove()}}}function Jt(e,t,n=`prb-addreview-path`){let r=Y(e,`span`,n),i=t.replace(/\/+$/,``).lastIndexOf(`/`);return i<=0?r.textContent=t:r.append(Y(e,`span`,`prb-addreview-path-parent`,t.slice(0,i+1)),Y(e,`span`,`prb-addreview-path-name`,t.slice(i+1))),r}function Z(e,t){return Y(e,`code`,void 0,t)}var Q=e=>`${e} commit${e===1?``:`s`}`;function Yt(e,t){let n=t.options.find(e=>e.where===`remote`)?.display??`origin/${t.name}`,r=Y(e,`p`,`prb-addreview-choice-text`),i=t.divergence,a=i&&i.ahead>0&&i.behind>0?[`Your local `,Z(e,t.name),` and `,Z(e,n),` have diverged: ${Q(i.ahead)} on the local side, ${Q(i.behind)} on the remote.`]:i&&i.ahead>0?[`Your local `,Z(e,t.name),` is ${Q(i.ahead)} ahead of `,Z(e,n),`.`]:i&&i.behind>0?[`Your local `,Z(e,t.name),` is ${Q(i.behind)} behind `,Z(e,n),`.`]:[`Your local `,Z(e,t.name),` and `,Z(e,n),` are different commits.`];return r.append(...a),r}function Xt(e,t,n){let r=t.baseChoice,i=Y(e,`div`,`prb-addreview-choice`);i.setAttribute(`data-addreview-base-choice`,``);let a=Y(e,`p`,`prb-addreview-choice-title`,`Choose a base branch`);a.id=`prb-addreview-choice-title`;let o=Y(e,`div`,`prb-addreview-choice-options`);o.setAttribute(`role`,`radiogroup`),o.setAttribute(`aria-labelledby`,a.id);for(let t of r.options){let i=Y(e,`label`,`prb-addreview-choice-option`),a=Y(e,`input`);a.type=`radio`,a.name=`prb-addreview-base-choice`,a.value=t.base,a.addEventListener(`change`,()=>{a.checked&&n(t.base)});let s=`${t.where===`remote`?`Remote`:`Local`} ${r.name}`,c=t.commits===void 0?``:t.commits===0?` (no new changes)`:` (${Q(t.commits)} to review)`;i.append(a,Z(e,t.display),Y(e,`span`,`prb-addreview-choice-what`,` ${s}${c}`)),o.append(i)}return i.append(a,Yt(e,r),Y(e,`p`,`prb-addreview-choice-text`,`Select which branch to compare against:`),o),t.detail&&i.append(Kt(e,t.detail)),i}function Zt(e,t){return t&&e.status===`waiting`?`Not started`:t&&e.status===`reviewing`?`Started`:zt[e.status]}function Qt(e,t){let n=e.filter(e=>e.status===`ready`||e.status===`already-reviewed`).length,r=[`reviewing`,`waiting`,`failed`].map(n=>[Zt({status:n},t).toLowerCase(),e.filter(e=>e.status===n).length]).filter(([,e])=>e>0);return[`${n} of ${e.length} ${e.length===1?`review`:`reviews`} ready`,...r.map(([e,t])=>`${t} ${e}`)].join(` · `)}function $t(e,t,n,r,i){let a=Y(e,`div`,`prb-addreview-progress`);a.setAttribute(`data-addreview-progress`,``);let o=Y(e,`p`,`prb-addreview-summary`);o.setAttribute(`aria-live`,`polite`);let s=Y(e,`ul`,`prb-addreview-rows`);s.setAttribute(`aria-label`,`Started reviews`);let c=Y(e,`p`,`prb-palette-summary`),l=qt(e),u=Y(e,`div`,`prb-addreview-footer`),d=Y(e,`button`,`prb-addreview-start`,`Close`);d.type=`button`,d.setAttribute(`data-addreview-close`,``),d.addEventListener(`click`,i),u.append(d),a.append(o,s,c,l.element,u);let f=r,p=null,m=!1,h=!1,g=new Map,_=(t,n)=>{let r=n.contains(e.activeElement),i=n.querySelector(`.prb-addreview-technical`)?.open??!1;n.replaceChildren(),n.dataset.status=h&&t.status===`waiting`?`not-started`:t.status,n.dataset.state=t.status===`failed`?`problem`:`ok`;let a=Y(e,`div`,`prb-addreview-row-head`),o=Y(e,`span`,`prb-addreview-mark`,Bt[t.status]);if(o.setAttribute(`aria-hidden`,`true`),a.append(o,t.reviewId?X(e,t.reviewId,t.label):Y(e,`span`,`prb-addreview-row-label`,t.label)),a.append(Y(e,`span`,`prb-addreview-badge`,Zt(t,h))),n.append(a),t.reason&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-${t.status===`failed`?`problem`:`muted`}`,t.reason)),t.kept&&n.append(Y(e,`span`,`prb-addreview-status prb-addreview-muted`,Rt(t.kept))),t.detail){let r=Kt(e,t.detail);r.open=i,n.append(r)}if(t.status===`failed`&&!h){let r=t.stale===!0,i=Y(e,`button`,`prb-addreview-retry`,r?`Start fresh review`:`Retry`);i.type=`button`,i.setAttribute(r?`data-addreview-fresh`:`data-addreview-retry`,``),i.setAttribute(`aria-label`,`${r?`Start a fresh review of`:`Retry`} ${t.label}`),i.addEventListener(`click`,()=>void b(t.key,i,r)),n.append(i)}r&&n.focus()},v=()=>{let t=f.map(t=>{let n=JSON.stringify([t,h]),r=g.get(t.key);if(!r){let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key,n.tabIndex=-1,r={item:n,json:``},g.set(t.key,r)}return r.json!==n&&(_(t,r.item),r.json=n),r.item});(t.some((e,t)=>s.children[t]!==e)||s.children.length!==t.length)&&s.replaceChildren(...t),o.textContent=Qt(f,h),c.textContent=!h&&f.some(e=>e.status===`waiting`)?`Queued reviews start as running ones finish. Reviews carry on in the background, so you can close this; they appear in your reviews list.`:`Reviews carry on in the background, so you can close this; they appear in your reviews list.`},y=()=>{p?.(),p=Wt(t,n,{rows:e=>{f=e,v()},lost:e=>{l.show({error:e}),h=!0,v()}})},b=async(e,r,i)=>{r.disabled=!0;let a=await J(t,`/add-review/batches/${n}/retry`,{key:e,...i?{fresh:!0}:{}});if(!m){if(!a.ok){r.disabled=!1,l.show(a),a.status===404&&(h=!0,p?.(),v());return}l.hide(),f=a.value.rows,v(),y()}};return v(),y(),{element:a,focus:()=>d.focus(),stop:()=>{m=!0,p?.()}}}function en(e,t,n){let r=Y(e,`details`,`prb-addreview-options`);r.append(Y(e,`summary`,void 0,`Review options`));let i=Y(e,`div`,`prb-addreview-grid`);r.append(i);let a=(t,n)=>{let r=Y(e,`label`,`prb-addreview-key`,t),a=`prb-addreview-${t.toLowerCase()}`;n.id=a,r.htmlFor=a,i.append(r,n)},o=Y(e,`select`,`prb-addreview-control`);o.setAttribute(`data-addreview-agent`,``);let s=Y(e,`input`,`prb-addreview-control`);s.type=`text`,s.placeholder=`Default`,s.spellcheck=!1,s.autocomplete=`off`,s.setAttribute(`data-addreview-model`,``);let c=Y(e,`input`,`prb-addreview-control`);c.type=`text`,c.placeholder=`Auto`,c.spellcheck=!1,c.autocomplete=`off`,c.setAttribute(`data-addreview-base`,``),a(`Agent`,o),a(`Model`,s);let l=Y(e,`div`,`prb-addreview-modelhelp`),u=Y(e,`button`,`prb-addreview-helplink`,`How do I find model names?`);u.type=`button`,u.setAttribute(`aria-expanded`,`false`),u.setAttribute(`data-addreview-model-help`,``);let d=Y(e,`p`,`prb-addreview-help`);d.id=`prb-addreview-model-help`,d.hidden=!0,u.setAttribute(`aria-controls`,d.id),l.append(u,d),i.append(l),n&&a(`Base`,c);let f=qt(e);r.append(f.element);let p=[],m=()=>{let t=p.find(e=>e.id===o.value);if(!t){d.replaceChildren(`Choose an agent to see how to find its model names.`);return}let n=t.displayName,r=t.modelHelp;d.replaceChildren(...r?.command?[`To see the models ${n} offers, run `,Z(e,r.command),` in a terminal.`]:r?.note?[`To see the models ${n} offers, ${r.note}.`]:[`${n} does not say how to list its models. Use a name from its own documentation.`],` Leave Model empty to use ${n}'s default.`)};u.addEventListener(`click`,()=>{d.hidden=!d.hidden,u.setAttribute(`aria-expanded`,String(!d.hidden)),d.hidden?s.removeAttribute(`aria-describedby`):s.setAttribute(`aria-describedby`,d.id),m()}),o.addEventListener(`change`,m);let h=null,g=!1;return{element:r,base:c,loaded:J(t,`/add-review/options`).then(t=>{if(g=!0,!t.ok)return f.show(t),r.open=!0,null;p=t.value.agents;let{agent:n}=t.value,i=p.filter(e=>e.installed);n.kind!==`resolved`&&o.append(Gt(e,`Choose an agent`,``));for(let t of i)o.append(Gt(e,t.displayName,t.id));return n.kind===`resolved`?(h=n.id,i.some(e=>e.id===n.id)||o.append(Gt(e,n.displayName,n.id)),o.value=n.id):(o.value=``,r.open=!0,n.kind===`refused`&&f.show({error:n.error})),m(),t.value}),complete:()=>g&&o.value!==``,values:()=>({...o.value&&o.value!==h?{agent:o.value}:{},...s.value.trim()?{model:s.value.trim()}:{},...n&&c.value.trim()?{base:c.value.trim()}:{}}),setBasePlaceholder:e=>{c.placeholder=e?`Auto (${e})`:`Auto`},showProblem:e=>{r.open=!0,f.show(e),(e.field===`model`?s:o).focus()},hideProblem:()=>f.hide()}}function tn(e){let t=Y(e,`button`,`prb-addreview-start`);return t.type=`button`,t.setAttribute(`data-addreview-start`,``),t}function nn(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`pull-requests`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Paste PR links`),s=Y(e,`textarea`,`prb-palette-input prb-addreview-paste`);s.id=`prb-addreview-paste`,o.htmlFor=s.id,s.rows=3,s.spellcheck=!1,s.autocomplete=`off`,s.placeholder=`https://github.com/owner/repo/pull/123`;let c=Y(e,`p`,`prb-palette-summary`);c.setAttribute(`aria-live`,`polite`);let l=Y(e,`ul`,`prb-addreview-rows`),u=en(e,r,!1),d=qt(e),f=Y(e,`p`,`prb-addreview-error`);f.setAttribute(`data-addreview-limit`,``),f.hidden=!0;let p=Y(e,`div`,`prb-addreview-footer`),m=tn(e);p.append(m),a.append(o,s,c,f,l,u.element,d.element,p),i.append(Y(e,`p`,`prb-addreview-mode`,`Pull request`),a),t.append(i);let h=[],g=new Map,_=!1,v=0,y=null,b=null,x=!1,S=!1,C=()=>h.filter(e=>(e.ok||e.needsFolder)&&!!g.get(e.key)),w=0,T=()=>{let e=C().length;m.textContent=e>1?`Review ${e} PRs`:`Review PR`,m.disabled=b!==null||x||_||w>0||e===0||!u.complete()},E=()=>{f.hidden=w===0,f.textContent=`At most 20 pull requests can be reviewed at once. Remove ${w} to continue.`},D=(t,n)=>Y(e,`span`,`prb-addreview-status prb-addreview-${n}`,t),O=()=>{l.replaceChildren(...h.map(t=>{let n=Y(e,`li`,`prb-addreview-row`);n.dataset.rowKey=t.key;let r=t.ok||!!g.get(t.key);n.dataset.state=r?`ok`:`problem`;let i=Y(e,`div`,`prb-addreview-row-head`),a=Y(e,`span`,`prb-addreview-mark`,r?`✓`:`!`);if(a.setAttribute(`aria-hidden`,`true`),i.append(a,Y(e,`span`,`prb-addreview-row-label`,t.label)),n.append(i),t.reviewed?.kept){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Resumes where it stopped`)),n.append(r,D(Rt(t.reviewed.kept),`muted`))}else if(t.reviewed){let r=D(``,`muted`);r.append(X(e,t.reviewed.reviewId,`Already reviewed`)),n.append(r)}else t.ok?n.append(D(`Ready to start`,`muted`)):t.reason&&n.append(D(t.reason,`problem`));if(t.folders.length>1){let r=Y(e,`select`,`prb-addreview-control prb-addreview-folder`);r.setAttribute(`aria-label`,`Local folder for ${t.label}`);for(let n of t.folders)r.append(Gt(e,n.branch?`${n.display} (${n.branch})`:n.display,n.path));r.value=g.get(t.key)??t.folder??``,r.addEventListener(`change`,()=>g.set(t.key,r.value)),n.append(r)}else if(t.folders.length===1)n.append(Jt(e,t.folders[0].display));else if(t.needsFolder){let r=Y(e,`input`,`prb-addreview-control prb-addreview-folder`);r.type=`text`,r.placeholder=`Local folder for this repository, e.g. ~/code/repo`,r.setAttribute(`aria-label`,`Local folder for ${t.label}`),r.spellcheck=!1,r.autocomplete=`off`,r.value=g.get(t.key)??``,r.addEventListener(`input`,()=>{r.value.trim()?g.set(t.key,r.value.trim()):g.delete(t.key),n.dataset.state=r.value.trim()?`ok`:`problem`,T()}),n.append(r)}return n}))},k=()=>{let e=It(s.value),t=e.filter(e=>e.kind===`github`).length;c.textContent=e.length===0?s.value.trim()?`No pull request links found.`:``:t===1?`1 pull request recognised`:`${t} pull requests recognised`,h=e.map(e=>e.kind===`github`?h.find(t=>t.key===e.key)??{key:e.key,label:`${e.owner}/${e.repo} #${e.number}`,url:e.url,ok:!1,folders:[]}:{key:e.key,label:`${e.provider} ${e.provider===`GitLab`?`merge request`:`pull request`}`,url:e.url,ok:!1,reason:Lt(e.provider),folders:[]}),_=e.some(e=>e.kind===`github`),w=Math.max(0,t-20);let n=++v;O(),E(),T(),y!==null&&r.clearTimeout(y),_&&(y=r.setTimeout(async()=>{y=null;let e=await J(r,`/add-review/pull-requests/preview`,{text:s.value});if(!(S||n!==v)){if(_=!1,!e.ok)d.show(e);else{d.hide(),h=e.value.rows;for(let e of h)e.folder&&!g.has(e.key)&&g.set(e.key,e.folder)}O(),T()}},Vt))},A=async()=>{if(T(),m.disabled)return;x=!0,T();let t=C().map(e=>({url:e.url,folder:g.get(e.key)})),i=await J(r,`/add-review/pull-requests`,{items:t,...u.values()});if(x=!1,!S){if(!i.ok){i.field?(d.hide(),u.showProblem(i)):(u.hideProblem(),d.show(i)),T();return}b=$t(e,r,i.value.batchId,i.value.rows,n),a.replaceWith(b.element),b.focus()}};return s.addEventListener(`input`,k),m.addEventListener(`click`,()=>void A()),i.addEventListener(`change`,()=>T()),i.addEventListener(`keydown`,e=>{if(b||e.key!==`Enter`||e.shiftKey||e.isComposing)return;let t=e.target;t.tagName!==`SELECT`&&t.tagName!==`BUTTON`&&t.tagName!==`A`&&t.tagName!==`SUMMARY`&&(e.preventDefault(),A())}),u.loaded.then(()=>T()),T(),s.focus(),()=>{S=!0,y!==null&&r.clearTimeout(y),b?.stop()}}}}function rn(e){return{title:`Add review`,escape:`close`,mount(t,n){let r=e.defaultView,i=Y(e,`div`,`prb-addreview`);i.setAttribute(`data-addreview`,`branch`);let a=Y(e,`div`,`prb-addreview-config`),o=Y(e,`label`,`prb-addreview-label`,`Working folder`),s=Y(e,`div`,`prb-addreview-pathrow`),c=Y(e,`input`,`prb-palette-input`);c.id=`prb-addreview-folder`,o.htmlFor=c.id,c.type=`text`,c.spellcheck=!1,c.autocomplete=`off`,c.placeholder=`~/code/project`;let l=Y(e,`button`,`prb-addreview-browse`,`Browse…`);l.type=`button`,l.hidden=!0,s.append(c,l);let u=Y(e,`div`,`prb-addreview-detected`);u.setAttribute(`aria-live`,`polite`);let d=Y(e,`p`,`prb-palette-group`,`Recent`),f=Y(e,`div`,`prb-palette-results prb-addreview-recent`);f.setAttribute(`role`,`group`),f.setAttribute(`aria-label`,`Recent folders`),d.hidden=!0;let p=en(e,r,!0),m=qt(e),h=Y(e,`div`,`prb-addreview-footer`),g=tn(e);g.textContent=`Review branch`,h.append(g),a.append(o,s,u,d,f,p.element,m.element,h),i.append(Y(e,`p`,`prb-addreview-mode`,`Branch`),a),t.append(i);let _=null,v=null,y=!1,b=null,x=!1,S=null,C=(e,t)=>`${e}\n${t.trim()}`,w=()=>C(c.value,p.base.value),T=()=>{g.disabled=y||b!==null||!_?.result.ok||_.key!==w()||!p.complete()},E=e=>{S={base:e,path:c.value},p.base.value=e,v!==null&&r.clearTimeout(v),T(),O().then(e=>{!x&&e.ok&&g.focus()})},D=t=>{if(u.replaceChildren(),!t)return;if(!t.ok){if(t.baseChoice){u.append(Xt(e,{error:t.error??``,...t.detail?{detail:t.detail}:{},baseChoice:t.baseChoice},E));return}u.append(Y(e,`p`,`prb-addreview-error`,t.error??`This folder cannot be reviewed.`)),t.detail&&u.append(Kt(e,t.detail));return}let n=Y(e,`dl`,`prb-addreview-grid prb-addreview-facts`),r=(t,r)=>{let i=Y(e,`dd`);i.append(r),n.append(Y(e,`dt`,`prb-addreview-key`,t),i)};if(r(`Repository`,t.repo??``),r(`Branch`,t.branch??``),r(`Base`,t.base??`Not found`),t.reviewed?.kept){let n=X(e,t.reviewed.reviewId,`Resumes where it stopped`),i=Y(e,`span`,`prb-addreview-kept`,Rt(t.reviewed.kept)),a=Y(e,`span`);a.append(n,Y(e,`br`),i),r(`Review`,a)}else t.reviewed&&r(`Review`,X(e,t.reviewed.reviewId,t.reviewed.inProgress?`Being reviewed now`:`Already reviewed`));u.append(n),p.setBasePlaceholder(t.base??null)},O=()=>{let e=c.value,t=p.base.value.trim(),n=C(e,t);return _?.key===n?Promise.resolve(_.result):e.trim()?J(r,`/add-review/folder/inspect`,{path:e,...t?{base:t}:{}}).then(e=>{let t=e.ok?e.value:{ok:!1,error:e.error,...e.detail?{detail:e.detail}:{}};return!x&&w()===n&&(_={key:n,result:t},D(t),T()),t}):(_=null,D(null),T(),Promise.resolve({ok:!1}))},k=e=>{c.value=e,A(),v!==null&&r.clearTimeout(v),T(),O(),c.focus()},A=()=>{!S||S.path===c.value||(p.base.value===S.base&&(p.base.value=``),S=null)},j=async()=>{if(y||b)return;y=!0;let t=w(),i=c.value,o=p.values();T(),v!==null&&(r.clearTimeout(v),v=null);let s=await O();if(x)return;if(!s.ok||!p.complete()||w()!==t)return y=!1,T();let l=await J(r,`/add-review/branch`,{path:i,...o});if(y=!1,!x){if(!l.ok){l.baseChoice?(_={key:t,result:{...l,ok:!1}},D(_.result),m.hide()):l.field?p.showProblem(l):m.show(l),T();return}b=$t(e,r,l.value.batchId,l.value.rows,n),a.replaceWith(b.element),b.focus()}},M=()=>{T(),v!==null&&r.clearTimeout(v),v=r.setTimeout(()=>{v=null,O()},Vt)};return c.addEventListener(`input`,()=>{A(),M()}),p.base.addEventListener(`input`,M),l.addEventListener(`click`,async()=>{let e=await J(r,`/add-review/folder/choose`,{});if(!x){if(!e.ok){m.show(e);return}e.value.path?k(e.value.path):c.focus()}}),f.addEventListener(`click`,e=>{let t=e.target.closest(`[data-folder-path]`);t?.dataset.folderPath&&k(t.dataset.folderDisplay??t.dataset.folderPath)}),g.addEventListener(`click`,()=>void j()),i.addEventListener(`keydown`,e=>{if(b||e.isComposing)return;let t=[...f.querySelectorAll(`[data-folder-path]`)],n=t.indexOf(e.target);if(e.key===`ArrowDown`||e.key===`ArrowUp`){let r=e.key===`ArrowDown`?e.target===c?t[0]:n>=0?t[n+1]:null:n===0?c:n>0?t[n-1]:null;if(!r)return;e.preventDefault(),r.focus();return}if(e.key!==`Enter`||e.shiftKey||n>=0)return;let r=e.target;r.tagName!==`SELECT`&&r.tagName!==`BUTTON`&&r.tagName!==`A`&&r.tagName!==`SUMMARY`&&(e.preventDefault(),j())}),i.addEventListener(`change`,()=>T()),p.loaded.then(e=>{x||(l.hidden=!e?.canChooseFolder,T())}),J(r,`/add-review/folders`).then(t=>{x||!t.ok||(f.replaceChildren(...t.value.folders.map(t=>{let n=Y(e,`button`,`prb-palette-result`);return n.type=`button`,n.dataset.folderPath=t.path,n.dataset.folderDisplay=t.display,n.append(Y(e,`span`,`prb-palette-result-title`,t.branch?`${t.repo} · ${t.branch}`:t.repo),Jt(e,t.display,`prb-palette-result-where`)),n})),d.hidden=t.value.folders.length===0)}),T(),c.focus(),()=>{x=!0,b?.stop(),v!==null&&r.clearTimeout(v)}}}}function an(e){return e.querySelector(`dialog[open], [data-menu-panel]:not([hidden])`)!==null}function on(e){for(let t of e.children)return t.kind===`leaf`?t.command.group:on(t);return`global`}function sn(e,t,r={}){let i=r.win??window,a=r.doc??document,o=r.isMac??y(i.navigator),s=St(pt(e)),c=null,l=e=>{let t=a.querySelector(`a[href="${e}"]:not([target])`);t?t.click():i.location.assign(e)},u=At(a,Et(o),`${U(o)} opens the command palette and ${U(o,`p`)} adds a review, from anywhere in the workspace. Single keys never act while you are typing.`,()=>r.onSettle?.()),d={"palette.open":{run:()=>w()},"add.open":{run:()=>w([`p`])},"add.pullRequest":{panel:nn(a)},"add.branch":{panel:rn(a)},"navigate.reviews":{run:()=>l(`/`)},"navigate.runs":{run:()=>l(`/runs`)},"navigate.notifications":{run:()=>l(`/notifications`)},"help.shortcuts":{run:()=>u.open()}},f=e=>d[e.id]??t[e.id],p=(e,t)=>{let n=f(e);return!!n&&(n.available?.(t)??!0)},m=null,h=`back`,g=[],_=()=>{m?.(),m=null},v=(e=`dismissed`)=>{_(),s.reset(),b.close();let t=c;c=null,t?.isConnected&&t.focus(),e===`dismissed`&&r.onSettle?.()},b=Dt(a,e=>T(e),v),x=mt(e).map(e=>({keys:G(e.binding,o),label:e.label})),S=Object.fromEntries(st.map(e=>[e.id,e.label])),C=()=>{let e=s.at;if(!e)return;let t=e.children.map(e=>e.kind===`leaf`?{key:e.key,keyLabel:e.key.toUpperCase(),label:f(e.command)?.label?.()??e.command.label,namespace:!1,available:p(e.command),group:e.command.group,state:f(e.command)?.state?.()??null}:{key:e.key,keyLabel:e.key.toUpperCase(),label:e.label,namespace:!0,available:!0,group:on(e)}),n=s.path.length===0?st.flatMap(e=>t.filter(t=>t.group===e.id)):t;b.show({trail:W(s.path,o),title:e.label,rows:n,groupLabels:s.path.length===0?S:null,footer:x})};function w(e=[]){if(b.isOpen())return v();r.onOpen?.();let t=a.activeElement;c=t instanceof HTMLElement&&t!==a.body?t:null,s.start(e),C()}function T(e){let t=s.press(e);if(t.kind===`descend`)return C();let n=t.kind===`run`&&p(t.command)?f(t.command):null;if(n?.panel&&t.kind===`run`)return E(t.command,n.panel);v(n?`running`:`dismissed`),n?.run?.()}function E(e,t){g=e.binding.kind===`chord`?e.binding.keys.slice(0,-1):[],h=t.escape??`back`;let n=e.binding.kind===`chord`?W(e.binding.keys,o):[U(o)];m=b.showPanel(n,t,()=>v(`running`))}function D(){_(),s.start();for(let e of g)s.press(e);C()}let O=mt(e);return i.addEventListener(`keydown`,e=>{if(b.isOpen()){if(gt(e))return;let t=()=>{e.preventDefault(),e.stopPropagation()};if(m)return e.key===`Escape`&&!e.isComposing?(t(),h===`close`?v():D()):yt(e,o)?(t(),v()):void 0;if(e.key===`Escape`||yt(e,o))return t(),v();if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){t(),Ot(b.dialog,e.key,a.activeElement);return}if(e.target?.closest?.(`[data-palette-key]`)&&(e.key===`Enter`||e.key===` `)||e.key===`Tab`||e.metaKey||e.ctrlKey||e.altKey)return;t(),T(_t(e)??``);return}if(e.defaultPrevented||e.isComposing)return;let t=yt(e,o),r=t?bt(t):void 0;if(r){if(a.querySelector(`dialog[open]`))return;e.preventDefault(),e.stopPropagation(),f(r)?.run?.(e);return}for(let t of O){if(!xt(t.binding,e,o))continue;let r=t.within;if(r){if(!a.querySelector(r)?.matches(`[open]`))continue}else if(t.binding.kind===`key`&&t.binding.key!==`Escape`&&(n(e.target)||an(a)))continue;if(p(t,e)){e.preventDefault(),f(t).run?.(e);return}}},!0),i.addEventListener(`pagehide`,()=>{b.isOpen()&&v(`unloading`)}),cn(a,e,o),{isOpen:()=>b.isOpen()||u.isOpen(),close:()=>v()}}function cn(e,t,n){for(let r of ft(t)){let t=r.hint;if(t)for(let i of e.querySelectorAll(t))if(r.binding.kind===`chord`)i.dataset.shortcutHint=G(r.binding,n);else{let e=Tt(r.binding,n);if(e&&i.setAttribute(`aria-keyshortcuts`,e),r.showHint&&!i.querySelector(`:scope > .prb-key-hint`)){let e=i.ownerDocument.createElement(`kbd`);e.className=`prb-key-hint`,e.setAttribute(`aria-hidden`,`true`),e.textContent=G(r.binding,n),i.append(e)}}}}function ln(e){return`${e} more`}function un(e){return e===0?`Nothing unread`:`${e} unread`}function dn(e){return e===`moved-again`?`replaced by a later move`:`replaced when the review caught up`}function fn(e){return e===`restarting`?`Workspace server restarting`:e===`unreachable`?`Workspace server not running`:`Workspace server running`}function $(e,t){let n=e.querySelector(`[data-server-status]`);if(!n)return;n.dataset.serverStatus=t;let r=n.querySelector(`[data-server-status-label]`);r&&(r.textContent=fn(t))}function pn(e,t){let n=e.querySelector(`[data-server-status]`);!n||n.dataset.serverStatus===`restarting`||$(e,t?`running`:`unreachable`)}function mn(e,t){if(typeof t==`number`)for(let n of e.querySelectorAll(`[data-unread-count]`))n.dataset.unreadStyle===`rail`&&(n.textContent=t===0?``:un(t)),n.hidden=t===0}var hn=6e3,gn=5e3;function _n(e=document){let t=e.querySelector(`.prb-toasts`);if(t)return t;let n=e.createElement(`div`);return n.className=`prb-toasts`,n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),e.body.append(n),n}function vn(e,t,n=window){return yn(e,{kind:t.kind,text:t.text},n)}function yn(e,t,n){let r=e.ownerDocument,i=r.createElement(`div`);i.className=`prb-toast`,i.dataset.kind=t.kind;let a=r.createElement(`span`);a.className=`prb-toast-text`,a.textContent=t.text;let o=r.createElement(`a`);o.className=`prb-toast-open`,t.href!==void 0&&t.link!==void 0&&(o.href=t.href,o.textContent=t.link);let s=r.createElement(`button`);for(s.type=`button`,s.className=`prb-toast-close`,s.setAttribute(`aria-label`,`Dismiss: ${t.text}`),s.textContent=`×`,i.append(a,...t.href===void 0?[]:[o],s),e.append(i);e.children.length>3;)e.firstElementChild?.remove();let c=n.setTimeout(()=>i.remove(),hn),l=()=>n.clearTimeout(c),u=()=>{n.clearTimeout(c),c=n.setTimeout(()=>i.remove(),hn)};return i.addEventListener(`mouseenter`,l),i.addEventListener(`mouseleave`,u),i.addEventListener(`focusin`,l),i.addEventListener(`focusout`,u),s.addEventListener(`click`,()=>{n.clearTimeout(c),i.remove()}),i}function bn(e,t,n=window){return yn(e,{kind:t.tone,text:t.headline,href:`/notifications/open?id=${encodeURIComponent(t.id)}`,link:`Open`},n)}function xn(e,t,n=window){return yn(e,{kind:`more`,text:ln(t),href:`/notifications`,link:`View all`},n)}function Sn(e=document,t=window,n={}){let r=Number(e.body.dataset.notificationsSince);if(!Number.isFinite(r)||r<=0)return;let i=_n(e),a=async()=>{try{let a=await t.fetch(`/notifications/recent?after=${r}`);if(pn(e,!0),a.status===403)return;if(a.ok){let o=await a.json();n.paintUnread&&mn(e,o.unread),typeof o.now==`number`&&(r=o.now);for(let e of[...o.notifications??[]].reverse())bn(i,e,t);typeof o.more==`number`&&o.more>0&&xn(i,o.more,t)}}catch{pn(e,!1)}t.setTimeout(()=>void a(),gn)};t.setTimeout(()=>void a(),gn)}function Cn(e,t){mn(e,t.unread),typeof t.driving==`boolean`&&wn(e,t.driving)}function wn(e,t){let n=e.querySelector(`[data-restart]`),r=e.querySelector(`[data-restart-note]`);n&&(n.disabled=t),r&&(r.hidden=!t)}var Tn=`prb-server-restarted`;function En(e=document,t=window){let n=null;try{n=t.sessionStorage.getItem(Tn),t.sessionStorage.removeItem(Tn)}catch{}n!==null&&vn(_n(e),{kind:`ready`,text:`Server restarted. Workspace is back online.`},t)}var Dn=2e4,On=300;function kn(e){En();let t=document.querySelector(`[data-restart]`),n=document.querySelector(`[data-restart-note]`);t&&t.addEventListener(`click`,()=>{t.disabled=!0,An(e,t,n)})}async function An(e,t,n){let r,i=null;try{let a=await fetch(e,{method:`POST`});if(a.status===409){wn(document,!0);return}if(!a.ok)return void zn(t,n,await Rn(a));let o=await a.json();r=typeof o.startedAt==`number`?o.startedAt:null,i=In(window.location.href,o.port)}catch{zn(t,n,`The workspace server could not be reached.`);return}if(document.body.dataset.restarting=`true`,$(document,`restarting`),i!==null){if(await Pn(Number(new URL(i).port)))return void window.location.assign(i)}else if(await jn(r)){try{window.sessionStorage.setItem(Tn,`1`)}catch{}window.location.reload();return}if(delete document.body.dataset.restarting,await Ln()){$(document,`running`),zn(t,n,`The server did not restart, and is still the one that was running.`);return}$(document,`unreachable`),zn(t,n,`Server restart failed. Run prreviewbuddy open to start the workspace again.`)}async function jn(e){let t=Date.now()+Dn;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,On));try{let t=await fetch(`/health`,{cache:`no-store`});if(!t.ok)continue;let n=await t.json();if(typeof n.startedAt==`number`&&n.startedAt!==e)return!0}catch{}}return!1}var Mn=4,Nn={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function Pn(e,t=()=>Fn(e),n=Nn){let r=n.now()+Dn,i=0;for(;n.now()<r;){await n.sleep(On);let e=await t();if(e===`moved`||(i=e===`gone`?i+1:0,i>=Mn))return!0}for(let e=0;e<Mn;e+=1){let e=await t();if(e!==`gone`)return e===`moved`;await n.sleep(On)}return!0}async function Fn(e){try{let t=await fetch(`/health`,{cache:`no-store`});return t.ok&&(await t.json()).movedTo===e?`moved`:`here`}catch{return`gone`}}function In(e,t){if(typeof t!=`number`||!Number.isInteger(t))return null;let n=new URL(e);return t===(n.port===``?n.protocol===`https:`?443:80:Number(n.port))?null:(n.port=String(t),n.href)}async function Ln(){try{return(await fetch(`/health`,{cache:`no-store`})).ok}catch{return!1}}async function Rn(e){try{return(await e.json()).error??`The server could not be restarted.`}catch{return`The server could not be restarted.`}}function zn(e,t,n){e.disabled=!1,t&&(t.textContent=n,t.hidden=!1)}export{ue as $,Ye as A,L as B,Se as C,Re as D,Ee as E,_e as F,rt as G,qe as H,De as I,$e as J,ze as K,Ke as L,xe as M,Be as N,tt as O,Le as P,ie as Q,ke as R,Te as S,we as T,Je as U,Ve as V,Ze as W,oe as X,Qe as Y,de as Z,fe as _,_n as a,y as at,Ne as b,$ as c,k as ct,sn as d,n as dt,se as et,kt as f,e as ft,R as g,ot as h,Sn as i,O as it,He as j,nt as k,dn as l,p as lt,it as m,Cn as n,ne as nt,mn as o,v as ot,Et as p,et as q,vn as r,re as rt,pn as s,A as st,kn as t,P as tt,un as u,j as ut,pe as v,Me as w,Ce as x,Ae as y,Oe as z};
@@ -0,0 +1 @@
1
+ async function e(e,t){try{await navigator.clipboard.writeText(t);let n=e.textContent;e.textContent=`Copied`,window.setTimeout(()=>{e.textContent=n},1200)}catch{let n=document.createElement(`input`);n.type=`text`,n.readOnly=!0,n.value=t,n.className=`prb-menu-id`,n.setAttribute(`data-id-field`,``),e.after(n),n.select()}}function t(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function n(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function r(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function i(e){return{title:`Choose a prompt`,mount(i,a){let o=i.ownerDocument,s=e.prompts(),c=o.createElement(`input`);c.type=`search`,c.className=`prb-palette-input`,c.placeholder=`Filter prompts`,c.setAttribute(`aria-label`,`Filter prompts`),c.spellcheck=!1;let l=o.createElement(`p`);l.className=`prb-palette-summary`,l.setAttribute(`aria-live`,`polite`);let u=o.createElement(`div`);u.className=`prb-palette-results`,u.setAttribute(`role`,`group`),u.setAttribute(`aria-label`,`Prompts`);let d=[],f=()=>[...u.querySelectorAll(`[data-prompt-choice]`)],p=()=>{let e=o.activeElement===c;for(let[t,n]of f().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},m=()=>{d=t(s,c.value),u.replaceChildren(...d.map((e,t)=>{let r=o.createElement(`button`);r.type=`button`,r.className=`prb-palette-result prb-palette-prompt`,r.dataset.promptChoice=e.id;let i=o.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=n(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let s=o.createElement(`span`);s.className=`prb-palette-prompt-text`;let c=o.createElement(`span`);c.className=`prb-palette-result-title`,c.textContent=e.name;let l=o.createElement(`span`);return l.className=`prb-palette-prompt-said`,l.textContent=e.prompt,s.append(c,l),r.append(i,s),r})),l.textContent=s.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:d.length===0?`No prompts match.`:d.length===s.length?`${s.length} ${s.length===1?`prompt`:`prompts`}`:`${d.length} of ${s.length} prompts`,p()},h=t=>{!t||!d.some(e=>e.id===t)||(a(),e.choose(t))},g=e=>{c.value=e===`Backspace`?c.value.slice(0,-1):c.value+e,c.focus(),c.dispatchEvent(new Event(`input`,{bubbles:!0}))};c.addEventListener(`input`,m),c.addEventListener(`focus`,p),c.addEventListener(`blur`,p),u.addEventListener(`click`,e=>{h(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),i.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=f(),n=e.target===c,i=t.indexOf(e.target),a=r(e.key);if(a!==null)return e.preventDefault(),h(t[a]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),h((n?t[0]:t[i])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?i<0?t[0]:t[i+1]:i<=0?c:t[i-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),g(e.key))}),i.append(c,l,u),m(),c.focus()}}}var a=`Fetch selected`;function o(e){return`${e} ${e===1?`repository`:`repositories`}`}function s(e){return`Fetching ${o(e)}…`}function c(e){return e.fetched===0?`Could not fetch ${o(e.repositories)}`:e.fetched===e.repositories?`Fetched ${o(e.repositories)}`:`Fetched ${e.fetched} of ${o(e.repositories)}`}function l(e,t){let n=new Set,r=new Set;for(let i of e)for(let e of i.lineage){let i=t[e];i!==void 0&&(n.add(e),r.add(i))}return{ids:[...n],repositories:r.size}}function u(e,t){return l(t,e).repositories>0}export{s as a,n as c,c as i,e as l,u as n,i as o,l as r,r as s,a as t};
@@ -1 +1 @@
1
- import{dt as e}from"./chunk-CQNkZ9TG.js";var t=`button:not([disabled])`;function n(e){return e.querySelector(`[data-menu-panel]`)}function r(e){return e.querySelector(`[data-menu-trigger]`)}function i(e){let t=n(e);return t?[...t.querySelectorAll(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)].filter(e=>!e.closest(`[hidden]`)):[]}function a(e){let r=n(e);return r?[...r.querySelectorAll(t)].filter(e=>!e.closest(`[hidden]`)):[]}var o=`data-menu-placement`;function s(e){let t=e.ownerDocument.defaultView,n=0,r=t?.innerHeight??1/0;for(let i=e.parentElement;i&&t;i=i.parentElement){let e=t.getComputedStyle(i).overflowY;if(e===`visible`||e===``)continue;let a=i.getBoundingClientRect();n=Math.max(n,a.top),r=Math.min(r,a.bottom)}return{top:n,bottom:r}}var c=8,l=120;function u(e){let t=n(e),i=r(e);if(!t||!i)return;t.removeAttribute(o),t.style.removeProperty(`max-height`),t.style.removeProperty(`overflow-y`),t.style.removeProperty(`box-sizing`),t.scrollTop=0;let a=t.getBoundingClientRect(),u=i.getBoundingClientRect(),d=s(e),f=Math.max(0,a.top-u.bottom),p=d.bottom-u.bottom-f-c,m=u.top-d.top-f-c,h=a.height,g=h<=p?`below`:h<=m||m>p?`above`:`below`;g===`above`&&t.setAttribute(o,`above`);let _=g===`above`?m:p;h<=_||(t.style.boxSizing=`border-box`,t.style.maxHeight=`${Math.max(Math.floor(_),l)}px`,t.style.overflowY=`auto`)}function d(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey?e.key===`j`?`ArrowDown`:e.key===`k`?`ArrowUp`:e.key:e.key}function f(t,o={}){let s=null,c=null,l=o.within?`${o.within} [data-menu]`:`[data-menu]`,f=e=>e&&(!o.within||e.closest(o.within))?e:null,p=(e,t={})=>{let i=n(e);if(!i||i.hidden)return;i.hidden=!0;let a=r(e);a?.setAttribute(`aria-expanded`,`false`);let l=s===e?c:null;s===e&&(s=null,c=null),o.onClose?.(e),t.returnFocus&&(l??(()=>a?.focus()))()},m=()=>{for(let e of t.querySelectorAll(l))p(e)},h=(e,t,i=null)=>{let l=n(e);l&&(m(),c=i,o.onOpen?.(e),l.hidden=!1,u(e),r(e)?.setAttribute(`aria-expanded`,`true`),s=e,t&&a(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,r=f(t?.closest?.(`[data-menu]`)??null);if(!r){m();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;n(r)?.hidden?h(r,t):p(r);return}s&&s!==r&&p(s)}),t.addEventListener(`keydown`,t=>{if(s&&!s.isConnected&&(s=null),!s)return;let n=s;if(t.key===`Escape`){t.preventDefault(),p(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){if(n.hasAttribute(`data-menu-form`)){let e=i(n),r=e.indexOf(t.target);if(e.length>0){t.preventDefault(),e[(r+(t.shiftKey?-1:1)+e.length)%e.length].focus();return}}p(n);return}if(e(t.target))return;let r=a(n);if(r.length===0)return;let o=r.indexOf(t.target),c=d(t),l=c===`ArrowDown`?r[(o+1)%r.length]:c===`ArrowUp`?r[(o-1+r.length)%r.length]:c===`Home`?r[0]:c===`End`?r[r.length-1]:null;l&&(t.preventDefault(),l.focus(),l.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>h(e,t.focusFirst===!0,t.returnFocus??null),close:p,closeAll:m}}function p(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}export{f as n,p as t};
1
+ import{dt as e}from"./chunk-CmdZYpyj.js";var t=`button:not([disabled])`;function n(e){return e.querySelector(`[data-menu-panel]`)}function r(e){return e.querySelector(`[data-menu-trigger]`)}function i(e){let t=n(e);return t?[...t.querySelectorAll(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)].filter(e=>!e.closest(`[hidden]`)):[]}function a(e){let r=n(e);return r?[...r.querySelectorAll(t)].filter(e=>!e.closest(`[hidden]`)):[]}var o=`data-menu-placement`;function s(e){let t=e.ownerDocument.defaultView,n=0,r=t?.innerHeight??1/0;for(let i=e.parentElement;i&&t;i=i.parentElement){let e=t.getComputedStyle(i).overflowY;if(e===`visible`||e===``)continue;let a=i.getBoundingClientRect();n=Math.max(n,a.top),r=Math.min(r,a.bottom)}return{top:n,bottom:r}}var c=8,l=120;function u(e){let t=n(e),i=r(e);if(!t||!i)return;t.removeAttribute(o),t.style.removeProperty(`max-height`),t.style.removeProperty(`overflow-y`),t.style.removeProperty(`box-sizing`),t.scrollTop=0;let a=t.getBoundingClientRect(),u=i.getBoundingClientRect(),d=s(e),f=Math.max(0,a.top-u.bottom),p=d.bottom-u.bottom-f-c,m=u.top-d.top-f-c,h=a.height,g=h<=p?`below`:h<=m||m>p?`above`:`below`;g===`above`&&t.setAttribute(o,`above`);let _=g===`above`?m:p;h<=_||(t.style.boxSizing=`border-box`,t.style.maxHeight=`${Math.max(Math.floor(_),l)}px`,t.style.overflowY=`auto`)}function d(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey?e.key===`j`?`ArrowDown`:e.key===`k`?`ArrowUp`:e.key:e.key}function f(t,o={}){let s=null,c=null,l=o.within?`${o.within} [data-menu]`:`[data-menu]`,f=e=>e&&(!o.within||e.closest(o.within))?e:null,p=(e,t={})=>{let i=n(e);if(!i||i.hidden)return;i.hidden=!0;let a=r(e);a?.setAttribute(`aria-expanded`,`false`);let l=s===e?c:null;s===e&&(s=null,c=null),o.onClose?.(e),t.returnFocus&&(l??(()=>a?.focus()))()},m=()=>{for(let e of t.querySelectorAll(l))p(e)},h=(e,t,i=null)=>{let l=n(e);l&&(m(),c=i,o.onOpen?.(e),l.hidden=!1,u(e),r(e)?.setAttribute(`aria-expanded`,`true`),s=e,t&&a(e)[0]?.focus())};return t.addEventListener(`click`,e=>{let t=e.target,r=f(t?.closest?.(`[data-menu]`)??null);if(!r){m();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;n(r)?.hidden?h(r,t):p(r);return}s&&s!==r&&p(s)}),t.addEventListener(`keydown`,t=>{if(s&&!s.isConnected&&(s=null),!s)return;let n=s;if(t.key===`Escape`){t.preventDefault(),p(n,{returnFocus:!0});return}if(!n.contains(t.target))return;if(t.key===`Tab`){if(n.hasAttribute(`data-menu-form`)){let e=i(n),r=e.indexOf(t.target);if(e.length>0){t.preventDefault(),e[(r+(t.shiftKey?-1:1)+e.length)%e.length].focus();return}}p(n);return}if(e(t.target))return;let r=a(n);if(r.length===0)return;let o=r.indexOf(t.target),c=d(t),l=c===`ArrowDown`?r[(o+1)%r.length]:c===`ArrowUp`?r[(o-1+r.length)%r.length]:c===`Home`?r[0]:c===`End`?r[r.length-1]:null;l&&(t.preventDefault(),l.focus(),l.scrollIntoView({block:`nearest`}))}),{open:(e,t={})=>h(e,t.focusFirst===!0,t.returnFocus??null),close:p,closeAll:m}}function p(e){return e<3e4?1e3:e<12e4?3e3:e<6e5?8e3:15e3}export{f as n,p as t};
package/static/help.js CHANGED
@@ -1 +1 @@
1
- import{at as e,d as t,f as n,ft as r,p as i,rt as a,t as o}from"./chunk-CQNkZ9TG.js";a(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(n(document,i(e(navigator)))),o(`/restart`),r(window,()=>window.location.reload());
1
+ import{at as e,d as t,f as n,ft as r,p as i,rt as a,t as o}from"./chunk-CmdZYpyj.js";a(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(n(document,i(e(navigator)))),o(`/restart`),r(window,()=>window.location.reload());
@@ -1 +1 @@
1
- import{d as e,ft as t,l as n,o as r,rt as i,t as a,u as o}from"./chunk-CQNkZ9TG.js";import{t as s}from"./chunk-C8kkSv38.js";var c=5e3;function l(e){let t=[],n=[],r=0;for(let i of e){let e=encodeURIComponent(i).length+1;n.length>0&&r+e>4e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}var u=`Unread. `;function d(e,t){if(e.dataset.rowState===t||t===`unread`)return;e.dataset.rowState=t,e.dataset.read=`true`;let r=e.querySelector(`.prb-notification-open`),i=r?.getAttribute(`aria-label`)??``;if(i.startsWith(u)&&(i=i.slice(8)),t===`moved-again`||t===`caught-up`){let r=n(t);i=`${i}, ${r}`;let a=e.querySelector(`.prb-notification-meta`);if(a&&!a.querySelector(`[data-notification-replaced]`)){let t=e.ownerDocument.createElement(`span`);t.className=`prb-notification-replaced`,t.dataset.notificationReplaced=``,t.textContent=` · ${r}`,a.append(t)}}r?.setAttribute(`aria-label`,i)}function f(e,t){let n=e.querySelector(`[data-notifications-count]`);n&&(n.textContent=o(t));let i=e.querySelector(`[data-notifications-read-all]`);i&&(i.disabled=t===0),r(e,t)}function p(e,t){let n=Number(e.dataset.createdAt),r=Number(t.dataset.createdAt);return n>r||n===r&&(e.dataset.notificationId??``)<(t.dataset.notificationId??``)}function m(e,t){let n=[...e.querySelectorAll(`[data-notification-id]`)].find(e=>p(t,e));n?n.before(t):e.append(t)}function h(e,t){let n=new Set([...e.querySelectorAll(`[data-notification-id]`)].map(e=>e.dataset.notificationId));return Object.keys(t).filter(e=>!n.has(e))}function g(e,t,n=()=>{}){let r=Array.isArray(t.rows)?t.rows.filter(e=>typeof e==`string`):[],i=e.querySelector(`[data-notifications]`);if(r.length>0&&!i)return!1;let a=!1;if(i){for(let t of r){let n=e.createElement(`template`);n.innerHTML=t.trim();let r=n.content.firstElementChild,o=r?.dataset.notificationId;!r||!o||[...i.querySelectorAll(`[data-notification-id]`)].some(e=>e.dataset.notificationId===o)||(m(i,r),a=!0)}a&&n()}let o=t.states&&typeof t.states==`object`?t.states:{};for(let t of e.querySelectorAll(`[data-notification-id]`)){let e=o[t.dataset.notificationId??``];e&&d(t,e)}return typeof t.unread==`number`&&f(e,t.unread),!0}function _(e=document,t=window,n=e=>t.fetch(`/notifications/live${e.length>0?`?ids=${e.map(encodeURIComponent).join(`,`)}`:``}`),r=()=>{}){if(!e.querySelector(`[data-notifications], [data-notifications-empty]`))return;let i,a=!1,o=()=>e.visibilityState===`visible`,s=async e=>{let t=await n(e);return t.ok?await t.json():null},u=async()=>{if(!(a||!o())){a=!0;try{let n=await s([]);if(n){if(!g(e,{...n,rows:[]},r)){t.location.reload();return}let i=n.states?h(e,n.states):[];for(let n of l(i)){let i=null;try{i=await s(n)}catch{continue}if(i&&!g(e,i,r)){t.location.reload();return}}}}catch{}finally{a=!1}t.clearTimeout(i),i=t.setTimeout(()=>void u(),c)}};e.addEventListener(`visibilitychange`,()=>{o()&&(t.clearTimeout(i),u())}),i=t.setTimeout(()=>void u(),c)}function v(e,t,n){let r=[...e.querySelectorAll(`[data-notification-id]`)];r.forEach((e,t)=>{e.hidden=t>=n}),t&&(t.hidden=r.length<=n)}function y(e){let t=e.querySelector(`[data-notifications-more]`),n=15;return v(e,t,n),t?.addEventListener(`click`,()=>{n+=15,v(e,t,n)}),{refresh:()=>v(e,e.querySelector(`[data-notifications-more]`),n)}}i(),a(`/restart`);var b=y(document),x=s({doc:document,item:`[data-notification-id]`,link:`a.prb-notification-open`,walk:()=>[...document.querySelectorAll(`[data-notification-id]:not([hidden])`)].filter(e=>e.querySelector(`a.prb-notification-open`)),background:()=>document.querySelector(`.prb-shell > main`)});e(`notifications`,{"notifications.next":{run:()=>x.move(1)},"notifications.previous":{run:()=>x.move(-1)},"notifications.open":{available:()=>x.enterOpens(),run:()=>x.open()},"notifications.openInNewTab":{available:()=>x.enterOpens(),run:()=>x.openInNewTab()}});var S=document.querySelector(`[data-notifications-read-all]`);async function C(){try{let e=await fetch(`/notifications`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`read-all`})});if(!e.ok)return null;let t=await e.json();return typeof t.unread==`number`?t.unread:null}catch{return null}}S?.addEventListener(`click`,()=>{S.disabled=!0,C().then(e=>{if(e===null){S.disabled=!1;return}document.querySelectorAll(`[data-notification-id][data-row-state="unread"]`).forEach(e=>d(e,`seen`)),f(document,e)})}),_(document,window,void 0,()=>b.refresh()),t(window,()=>window.location.reload());
1
+ import{d as e,ft as t,l as n,o as r,rt as i,t as a,u as o}from"./chunk-CmdZYpyj.js";import{t as s}from"./chunk-C8kkSv38.js";var c=5e3;function l(e){let t=[],n=[],r=0;for(let i of e){let e=encodeURIComponent(i).length+1;n.length>0&&r+e>4e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}var u=`Unread. `;function d(e,t){if(e.dataset.rowState===t||t===`unread`)return;e.dataset.rowState=t,e.dataset.read=`true`;let r=e.querySelector(`.prb-notification-open`),i=r?.getAttribute(`aria-label`)??``;if(i.startsWith(u)&&(i=i.slice(8)),t===`moved-again`||t===`caught-up`){let r=n(t);i=`${i}, ${r}`;let a=e.querySelector(`.prb-notification-meta`);if(a&&!a.querySelector(`[data-notification-replaced]`)){let t=e.ownerDocument.createElement(`span`);t.className=`prb-notification-replaced`,t.dataset.notificationReplaced=``,t.textContent=` · ${r}`,a.append(t)}}r?.setAttribute(`aria-label`,i)}function f(e,t){let n=e.querySelector(`[data-notifications-count]`);n&&(n.textContent=o(t));let i=e.querySelector(`[data-notifications-read-all]`);i&&(i.disabled=t===0),r(e,t)}function p(e,t){let n=Number(e.dataset.createdAt),r=Number(t.dataset.createdAt);return n>r||n===r&&(e.dataset.notificationId??``)<(t.dataset.notificationId??``)}function m(e,t){let n=[...e.querySelectorAll(`[data-notification-id]`)].find(e=>p(t,e));n?n.before(t):e.append(t)}function h(e,t){let n=new Set([...e.querySelectorAll(`[data-notification-id]`)].map(e=>e.dataset.notificationId));return Object.keys(t).filter(e=>!n.has(e))}function g(e,t,n=()=>{}){let r=Array.isArray(t.rows)?t.rows.filter(e=>typeof e==`string`):[],i=e.querySelector(`[data-notifications]`);if(r.length>0&&!i)return!1;let a=!1;if(i){for(let t of r){let n=e.createElement(`template`);n.innerHTML=t.trim();let r=n.content.firstElementChild,o=r?.dataset.notificationId;!r||!o||[...i.querySelectorAll(`[data-notification-id]`)].some(e=>e.dataset.notificationId===o)||(m(i,r),a=!0)}a&&n()}let o=t.states&&typeof t.states==`object`?t.states:{};for(let t of e.querySelectorAll(`[data-notification-id]`)){let e=o[t.dataset.notificationId??``];e&&d(t,e)}return typeof t.unread==`number`&&f(e,t.unread),!0}function _(e=document,t=window,n=e=>t.fetch(`/notifications/live${e.length>0?`?ids=${e.map(encodeURIComponent).join(`,`)}`:``}`),r=()=>{}){if(!e.querySelector(`[data-notifications], [data-notifications-empty]`))return;let i,a=!1,o=()=>e.visibilityState===`visible`,s=async e=>{let t=await n(e);return t.ok?await t.json():null},u=async()=>{if(!(a||!o())){a=!0;try{let n=await s([]);if(n){if(!g(e,{...n,rows:[]},r)){t.location.reload();return}let i=n.states?h(e,n.states):[];for(let n of l(i)){let i=null;try{i=await s(n)}catch{continue}if(i&&!g(e,i,r)){t.location.reload();return}}}}catch{}finally{a=!1}t.clearTimeout(i),i=t.setTimeout(()=>void u(),c)}};e.addEventListener(`visibilitychange`,()=>{o()&&(t.clearTimeout(i),u())}),i=t.setTimeout(()=>void u(),c)}function v(e,t,n){let r=[...e.querySelectorAll(`[data-notification-id]`)];r.forEach((e,t)=>{e.hidden=t>=n}),t&&(t.hidden=r.length<=n)}function y(e){let t=e.querySelector(`[data-notifications-more]`),n=15;return v(e,t,n),t?.addEventListener(`click`,()=>{n+=15,v(e,t,n)}),{refresh:()=>v(e,e.querySelector(`[data-notifications-more]`),n)}}i(),a(`/restart`);var b=y(document),x=s({doc:document,item:`[data-notification-id]`,link:`a.prb-notification-open`,walk:()=>[...document.querySelectorAll(`[data-notification-id]:not([hidden])`)].filter(e=>e.querySelector(`a.prb-notification-open`)),background:()=>document.querySelector(`.prb-shell > main`)});e(`notifications`,{"notifications.next":{run:()=>x.move(1)},"notifications.previous":{run:()=>x.move(-1)},"notifications.open":{available:()=>x.enterOpens(),run:()=>x.open()},"notifications.openInNewTab":{available:()=>x.enterOpens(),run:()=>x.openInNewTab()}});var S=document.querySelector(`[data-notifications-read-all]`);async function C(){try{let e=await fetch(`/notifications`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`read-all`})});if(!e.ok)return null;let t=await e.json();return typeof t.unread==`number`?t.unread:null}catch{return null}}S?.addEventListener(`click`,()=>{S.disabled=!0,C().then(e=>{if(e===null){S.disabled=!1;return}document.querySelectorAll(`[data-notification-id][data-row-state="unread"]`).forEach(e=>d(e,`seen`)),f(document,e)})}),_(document,window,void 0,()=>b.refresh()),t(window,()=>window.location.reload());
package/static/reviews.js CHANGED
@@ -1 +1 @@
1
- import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,I as c,J as ee,K as te,L as ne,M as re,N as l,O as ie,P as u,R as ae,S as oe,T as d,U as se,V as f,W as ce,X as le,Y as ue,Z as de,_ as p,a as fe,b as pe,ct as me,d as he,ft as ge,g as m,i as _e,it as ve,j as ye,k as be,n as xe,q as Se,r as Ce,rt as we,s as Te,st as Ee,t as De,tt as Oe,ut as ke,v as Ae,w as je,x as Me,y as Ne,z as Pe}from"./chunk-CQNkZ9TG.js";import{a as Fe,i as Ie,n as Le,o as Re,r as ze,t as Be}from"./chunk-h55PfL_M.js";import{n as Ve,t as He}from"./chunk-CxFmUaBj.js";import{t as Ue}from"./chunk-C8kkSv38.js";import{n as We,r as Ge}from"./chunk-CWRKWlhO.js";function Ke(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function qe(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Je(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Je(e,!r);n(r)}function Je(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`&#9733;`:`&#9734;`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function Ye(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 Xe(e){return(e.dataset.collections??``).split(` `).filter(Boolean)}async function Ze(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 Qe=`prb-reviews-selection`;function $e(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 et(e,t){return t===``||e.name.toLowerCase().includes(t.trim().toLowerCase())}function tt(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 nt(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=>et(e,r)).map(e=>a(e.id,e.name));et({id:`none`,name:`Uncollected`},r)&&o.unshift(a(Ne,`Uncollected`)),e.replaceChildren(...o)}function rt(e,t,n,r){let i=e.ownerDocument,a=t.filter(e=>et(e,r)).map(e=>{let t=Pe(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 it(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 at(e){let t=e.dataset.id??``,n=e.dataset.placement;return n===void 0||n===`home`?t:`${t}|${n}`}function ot(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function st(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(at),main:r?.scrollTop??0,...ve(e)}}function ct(e,t){let n=e?.limits;if(!n||typeof n!=`object`)return t;let r={...t};for(let e of p){let t=n[e];typeof t==`number`&&Number.isInteger(t)&&t>r[e]&&(r[e]=t)}return r}function lt(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`)&&o(e)&&typeof r==`number`&&Number.isInteger(r)&&r>15&&n.set(e,r);return n}function ut(e,t,n){if(!t)return;n.reveal(ct(t,n.limits),lt(t));let r=new Set(ke(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(at(e))&&ot(t,!0)}let i=Ee(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),me(e,t.focus,t.focusVisible)}var dt=we({ownsRestore:!0});De(`/restart`);var h=[...document.querySelectorAll(`[data-card][data-placement="home"]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),g=new Map;function ft(){g=new Map;for(let e of document.querySelectorAll(`[data-card]`)){let t=e.dataset.id??``;g.set(t,[...g.get(t)??[],e])}}ft();function pt(e,t){for(let n of g.get(e)??[])t(n)}function _(){return[...g.values()].flat()}var v=Ye(document),mt=[...document.querySelectorAll(`[data-operation]`)],ht=document.querySelector(`[data-section="in-progress"]`),gt=e=>e.dataset.inProgressOnly!==void 0,_t=Object.fromEntries(p.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),vt=document.querySelector(`.prb-index`);function yt(e){return{id:e.dataset.id??``,collections:Xe(e),queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var y=document.querySelector(`[data-search]`),b=document.querySelector(`[data-status-filter]`),x=document.querySelector(`[data-author-filter]`),S=document.querySelector(`[data-pr-filter]`),bt=document.querySelector(`[data-no-matches]`),C=document.querySelector(`[data-count]`),xt=document.querySelector(`[data-clear-filters]`),w=document.querySelector(`[data-collections-filter]`),St=document.querySelector(`[data-collections-filter-search]`);function Ct(){if(!w)return;w.hidden=v.length===0;let e=w.querySelector(`[data-collections-filter-label]`);e&&(e.textContent=je(A.collections,v)),A.collections.length===0?delete w.dataset.active:w.dataset.active=``;let t=w.querySelector(`[data-collections-filter-options]`);t&&nt(t,v,A.collections,St?.value??``)}var T=l();function wt(e){return{stored:Oe({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:le(e.dataset)??{at:0,kind:`created`}}}function E(e){return e.dataset.pinned===`true`}function Tt(e){let{stored:t,activity:n}=wt(e);return re(E(e),t,n,Xe(e).length>0,A.filter)}function Et(e){let t=Tt(e);return t===void 0?.5:p.indexOf(t)}function Dt(e){return[...e].sort((e,t)=>Et(e)-Et(t))}var D=new Map,O=document.querySelector(`[data-bulk]`),Ot=document.querySelector(`[data-bulk-count]`),kt=document.querySelector(`[data-bulk-delete]`),At=document.querySelector(`[data-bulk-question]`),jt=document.querySelector(`[data-bulk-confirm]`),Mt=document.querySelector(`[data-bulk-actions]`),k=document.querySelector(`[data-bulk-error]`),Nt=document.querySelector(`[data-bulk-select-all]`),A=f(window.location.hash),j=new Set,M=!1,N=document.querySelector(`[data-bulk-fetch]`),Pt={},P=[],F=!1;function I(){let e=A.query.trim().toLowerCase();A.author!==``&&![...x?.options??[]].some(e=>e.value===A.author)&&(A.author=``),A.collections=A.collections.filter(e=>e===`none`||v.some(t=>t.id===e)),v.length===0&&(A.collections=[]);let n=Dt(t(h.map(e=>({...yt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...A,query:e}).map(e=>e.card)),r=n.filter(e=>!gt(e));P=r;let a=new Set(t(mt.map(e=>({...yt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...A,query:e}).map(e=>e.entry));for(let e of mt)e.hidden=!a.has(e);if(ht){ht.hidden=a.size===0;let e=ht.querySelector(`[data-section-count]`);e&&(e.textContent=String(a.size))}let o=r.filter(e=>Tt(e)!==void 0),s=te(o,e=>Tt(e),T),c=new Set(p.flatMap(e=>s[e].shown));for(let e of p){let t=_t[e];t&&Ke(t,s[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=s[e].total<=s[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=s[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(s[e].total))}for(let e of Ft(r))c.add(e);for(let e of _())e.hidden=!c.has(e);if(y&&y.value!==A.query&&(y.value=A.query),x&&(x.value=A.author,A.author===``?delete x.dataset.active:x.dataset.active=``),S||(A.pr=`any`),S&&(S.value=A.pr,A.pr===`any`?delete S.dataset.active:S.dataset.active=``),b&&(b.value=A.filter,A.filter===`all`?delete b.dataset.active:b.dataset.active=``),Ct(),xt&&(xt.hidden=!u(A)),C){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);C.textContent=i(e(n),n.length,u(A)?e(h):void 0)}bt&&(bt.hidden=n.length>0||a.size>0||h.length===0),Ut(r)}function Ft(e){let t=document.querySelector(`[data-collections-area]`);if(!t)return[];let i=n(A.filter),o=u(A),s=e.flatMap(e=>Xe(e).map(t=>({card:e,collection:t}))),ee=e=>{let{stored:t,activity:n}=wt(e);return r(E(e),t,n,A.filter)},te=c(s,({card:e,collection:t})=>{let n=ee(e);return n===void 0?void 0:`${n===`completed`?`collection-done`:`collection`}:${t}`},e=>D.get(e)??15),ne=(e,t)=>(g.get(e)??[]).find(e=>e.dataset.placement===`collection:${t}`),re=[],l=!1;for(let e of t.querySelectorAll(`[data-collection]`)){let t=e.dataset.collection??``,n=te.get(`collection:${t}`)??{shown:[],total:0},r=te.get(`collection-done:${t}`)??{shown:[],total:0},c=s.filter(e=>e.collection===t),ee=c.filter(e=>E(e.card)).length,ie=A.collections.length>0&&!A.collections.includes(t),u=!i&&!ie&&(!o||c.length>0);if(e.hidden=!u,!u)continue;l=!0;for(let[i,a]of[[`collection:${t}`,n],[`collection-done:${t}`,r]]){let n=a.shown.map(e=>ne(e.card.dataset.id??``,t)).filter(e=>e!==void 0),r=e.querySelector(`[data-cards="${i}"]`);r&&Ke(r,n),re.push(...n);let o=e.querySelector(`[data-load-more="${i}"]`);o&&(o.hidden=a.total<=a.shown.length)}let ae=e.querySelector(`[data-section="collection:${t}"] > summary [data-section-count]`);ae&&(ae.textContent=Me(n.total,ee));let d=e.querySelector(`[data-collection-empty]`),se=oe({active:n.total,completed:r.total,pinned:ee,members:c.length},o);d&&(d.hidden=se===void 0,d.textContent=se??``);let f=e.querySelector(`[data-section="collection-done:${t}"]`);f&&(f.hidden=r.total===0);let ce=e.querySelector(`[data-completed-label]`);ce&&(ce.textContent=a(r.total))}return t.hidden=i||o&&!l,re}var It=300,L=null;function R(){L!==null&&window.clearTimeout(L),L=null,dt.replace(ye(A),{})}function z(e,t){if(A={...A,...e},T=l(),D=new Map,I(),t===`now`)return R();L!==null&&window.clearTimeout(L),L=window.setTimeout(R,It)}window.addEventListener(`pagehide`,()=>{L!==null&&R()}),document.addEventListener(`click`,e=>{L!==null&&e.target?.closest?.(`a[href]`)&&R()},!0),y?.addEventListener(`input`,()=>z({query:y.value},`settled`)),y?.addEventListener(`keydown`,e=>{e.key===`Escape`&&y.value!==``&&(e.preventDefault(),z({query:``},`now`))}),b?.addEventListener(`change`,()=>{z({filter:b.value},`now`)}),x?.addEventListener(`change`,()=>{z({author:x.value},`now`)}),S?.addEventListener(`change`,()=>{z({pr:S.value},`now`)}),xt?.addEventListener(`click`,()=>{z({query:m.query,filter:m.filter,author:m.author,pr:m.pr,collections:m.collections},`now`),y?.focus()}),Ge(),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;if(t&&t.startsWith(`collection`)&&o(t))return D.set(t,(D.get(t)??15)+15),I();!t||!p.includes(t)||(T={...T,[t]:T[t]+15},I())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{A=f(window.location.hash),T=l(),D=new Map,I(),Bt()});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;qe(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{pt(n,n=>{n.dataset.pinned=String(e);let r=n.querySelector(`[data-pin]`);r&&r!==t&&Je(r,e),cn(n)}),I()})});async function Lt(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}Rt(n),I()}function Rt(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of _()){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,cn(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=se(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ce(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&&ot(t,n.hidden!==!1)});var zt=document.querySelector(`.prb-shell > main`);function Bt(){ut(document,dt.current().ui,{cards:_(),pane:zt,limits:T,reveal:(e,t)=>{T=e,D=t,I()}})}dt.setCapturer(()=>st(document,_(),T,zt,D)),I(),Bt();var B=Ve(document,{onOpen:V,onClose:V});function V(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0);let r=e.querySelector(`[data-collection-rename-form]`);r&&(r.hidden=!0,bn(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.matches(`[data-collections-filter]`))return;if(n.matches(`.prb-collection-menu`))return Sn(e,t,n);let r=t.closest(`[data-collections-for]`);if(r?.dataset.collectionsFor){e.preventDefault(),e.stopPropagation(),B.closeAll();let t=r.closest(`[data-card]`)?.querySelector(`[data-select]`)?.getAttribute(`aria-label`)?.replace(/^Select /,``);Cn([r.dataset.collectionsFor],{card:t??`this review`});return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),Re(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),B.closeAll();let t=a.closest(`[data-card]`);t&&Mn([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),B.closeAll(),on(o.dataset.markId,o.dataset.markStatus===`complete`);return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),B.closeAll(),sn([s.dataset.lifecycleId],s.dataset.lifecycleSet);return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),B.closeAll(),Lt(c.dataset.queueId,c.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),V(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),Vt(n);return}e.preventDefault(),e.stopPropagation()});async function Vt(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();Ht(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{Ht(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 Ht(e,t){e.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e.querySelector(`[data-menu-panel]`)?.append(n)}function H(e){M=e,e||j.clear(),vt&&(e?vt.dataset.selecting=``:delete vt.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);U(),I()}function U(){jt&&(jt.hidden=!0),Mt&&(Mt.hidden=!1),k&&(k.hidden=!0,k.textContent=``)}function Ut(e){for(let e of _()){let t=j.has(e.dataset.id??``),n=e.querySelector(`[data-select]`);n&&(n.checked=t),t?e.dataset.selected=``:delete e.dataset.selected}if(!O||(O.hidden=!M,!M))return;let t=new Set(_().filter(Wt).map(e=>e.dataset.id)),n=[...j].filter(e=>!t.has(e)).length;Ot&&(Ot.textContent=ee(j.size,n)),Nt&&(Nt.textContent=Se(e.length),Nt.disabled=e.every(e=>j.has(e.dataset.id??``))),kt&&(kt.textContent=ie(nn()));for(let e of O.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-collections], [data-bulk-delete]`))e.disabled=j.size===0;N&&(N.hidden=!Le(Pt,On(G())))}function Wt(e){return!e.hidden&&e.closest(`details:not([open]), [hidden]`)===null}function Gt(e){let t=[...e.querySelectorAll(`details[data-section]`)];for(let e of t)e.addEventListener(`toggle`,()=>Ut(P));We(t,(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}))}Gt(document),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{H(!M)}),Nt?.addEventListener(`click`,()=>{for(let e of P)e.dataset.id&&j.add(e.dataset.id);U(),I()});function Kt(e){j.has(e)?j.delete(e):j.add(e),U(),I()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&Kt(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!M)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),Kt(n.dataset.id)))}),document.addEventListener(`keydown`,e=>{if(!M||e.key!==`Enter`)return;let t=e.target.closest(`.prb-card-link`)?.closest(`[data-card]`);t?.dataset.id&&(e.preventDefault(),Kt(t.dataset.id))});var W=Ue({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>[...document.querySelectorAll(`[data-card]`)].filter(Wt),enterAllowed:()=>!M,background:()=>zt,leadIn:e=>[...e.closest(`[data-cards]`)?.querySelectorAll(`[data-card]:not([hidden])`)??[]][0]===e?e.closest(`details[data-section]`)?.querySelector(`summary`)??null:null});function qt(){return W.holdsKeys()?W.current()?.querySelector(`:scope > [data-menu]`)??null:null}var Jt=8;function Yt(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),L!==null&&R(),dt.leaving(),Xt=!0,window.location.assign(t.href))}var Xt=!1,Zt={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=y?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=y?.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=P.slice(0,Jt);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=P.length===0?`No reviews match.`:P.length>e.length?`The first ${e.length} of ${C?.textContent??P.length}`:C?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=h.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),Yt(n))};n.addEventListener(`input`,()=>{y&&(y.value=n.value,y.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()}},Qt={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=C?.textContent??``},r=[b,x,S].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 $t(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 en=Object.fromEntries(Ae.map(e=>[`reviews.section.${e}`,$t(e)])),tn=he(`reviews`,{...en,"reviews.search":{available:()=>y!==null,panel:Zt},"reviews.filters":{available:()=>b!==null,panel:Qt},"reviews.next":{run:()=>W.move(1)},"reviews.previous":{run:()=>W.move(-1)},"reviews.open":{available:()=>W.enterOpens(),run:()=>W.open()},"reviews.openInNewTab":{available:()=>W.enterOpens(),run:()=>W.openInNewTab()},"reviews.menu":{available:()=>qt()!==null,run:()=>{let e=qt();e&&B.open(e,{focusFirst:!0,returnFocus:()=>W.refocus()})}}},{onOpen:()=>B.closeAll(),onSettle:()=>In()});function G(){return Dt(h.filter(e=>j.has(e.dataset.id??``)))}function nn(){return G().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function K(e){k&&(k.textContent=e,k.hidden=!1)}function q(e){for(let t of O?.querySelectorAll(`button`)??[])t.disabled=e}async function rn(e){let t=[...j];if(t.length!==0){q(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return q(!1),K(`That could not be saved. The workspace server refused it.`)}catch{return q(!1),K(`The workspace server did not answer. It may have stopped.`)}an(G(),e),q(!1),H(!1)}}function an(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e.flatMap(e=>g.get(e.dataset.id??``)??[e])){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=ue(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=ne(r))}}async function on(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}an(h.filter(t=>t.dataset.id===e),t),I()}async function sn(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 _())r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),cn(e));return Rt(n.queue),I(),!0}function cn(t){let{stored:n,activity:r}=wt(t),i=t.querySelector(`[data-lifecycle-chip]`);if(i){let e=pe(E(t),n,r);i.textContent=e??``,i.hidden=e===void 0}for(let i of t.querySelectorAll(`[data-lifecycle-set]`)){let t=i.dataset.lifecycleSet;i.hidden=!e(t,n,r),i.textContent=de(t,n,r)}}async function ln(e){let t=[...j];if(t.length===0)return;q(!0);let n=await sn(t,e);if(q(!1),!n)return K(`That could not be saved. The workspace server refused it or did not answer.`);H(!1)}async function un(){let e=[...j];if(e.length===0)return;q(!0);let t=null;try{let n=await fetch(`/delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e})});if(t=n.ok?await n.json().catch(()=>null):null,!t)return q(!1),U(),K(`Nothing was deleted. The workspace server refused it.`)}catch{return q(!1),U(),K(`The workspace server did not answer. It may have stopped.`)}let n=t.blocked??[],r=new Set(n.map(e=>e.id));for(let e of G()){let t=e.dataset.id??``;r.has(t)||pt(t,e=>e.remove())}h=h.filter(e=>e.isConnected),ft(),j.clear();for(let e of r)j.add(e);if(q(!1),U(),n.length===0)return H(!1);I(),K([...new Set(n.map(e=>e.error))].join(` `))}async function dn(){let e=G().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;q(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return q(!1),U(),K(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return q(!1),U(),K(`Nothing was added. The workspace server refused it.`);Rt(t.queue);let n=t.refused??[];j.clear();for(let e of n)j.add(e.id);if(q(!1),U(),n.length===0)return H(!1);I(),K([...new Set(n.map(e=>e.error))].join(` `))}O?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void dn();if(t.closest(`[data-bulk-collections]`))return Cn(G().map(e=>e.dataset.id??``).filter(Boolean),{selection:!0});let n=t.closest(`[data-bulk-mark]`);if(n)return void rn(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void ln(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){At&&(At.textContent=be(nn())),Mt&&(Mt.hidden=!0),jt&&(jt.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void un();if(t.closest(`[data-bulk-cancel-delete]`))return U();if(t.closest(`[data-bulk-cancel]`))return H(!1)});var J=document.querySelector(`[data-collections-dialog]`),fn=document.querySelector(`[data-collections-dialog-list]`),Y=document.querySelector(`[data-collections-dialog-search]`),X=document.querySelector(`[data-collections-dialog-create]`),pn=document.querySelector(`[data-collections-dialog-error]`),mn=document.querySelector(`[data-collections-dialog-for]`),Z=[],hn=!1,gn=!1,_n=document.body.dataset.cardsSnapshot??``;function vn(e,t){return Ze(e,t,_n)}function yn(e){if(e.stale||e.area===void 0){try{let e={ids:[...j],selecting:M};window.sessionStorage.setItem(Qe,JSON.stringify(e))}catch{}J?.close(),window.location.reload();return}let t=e.area,n=document.querySelector(`[data-collections-area]`);if(n){let e=n.contains(document.activeElement)?ve(document):null,r=document.createElement(`template`);r.innerHTML=t.trim();let i=r.content.firstElementChild;if(i){if(n.replaceWith(i),Gt(i),M)for(let e of i.querySelectorAll(`.prb-card-link`))e.setAttribute(`aria-disabled`,`true`);e&&me(document,e.focus,e.focusVisible)}}v=e.collections;for(let t of h){let n=e.memberOf[t.dataset.id??``]??[];t.dataset.collections=n.join(` `);let r=t.querySelector(`[data-collections-line]`),i=d(n,v);r&&(r.textContent=i??``,r.hidden=i===void 0)}for(let t of mt){let n=e.operations?.[t.dataset.key??``];n&&(t.dataset.collections=n.join(` `))}ft(),An(),I()}function bn(e,t){let n=e.querySelector(`[data-collection-error]`);n&&(n.textContent=t??``,n.hidden=t===void 0)}St?.addEventListener(`input`,()=>Ct()),w?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-filter-option]`);if(!t)return;let n=t.checked?[...A.collections,t.value]:A.collections.filter(e=>e!==t.value);z({collections:[...new Set(n)]},`now`),w.querySelector(`[data-collections-filter-option][value="${CSS.escape(t.value)}"]`)?.focus()}),document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-collection-new]`),r=document.querySelector(`[data-collection-new-form]`);if(n&&r){n.hidden=!0,r.hidden=!1,r.querySelector(`[data-collection-name-input]`)?.focus();return}t.closest(`[data-collection-new-form] [data-collection-cancel]`)&&r&&xn(r)});function xn(e){e.hidden=!0,e.reset(),bn(e,void 0);let t=document.querySelector(`[data-collection-new]`);t&&(t.hidden=!1,t.focus())}document.addEventListener(`submit`,e=>{let t=e.target;if(t.matches(`[data-collection-new-form]`)){e.preventDefault(),vn(`/collections`,{action:`create`,name:t.querySelector(`[data-collection-name-input]`)?.value??``}).then(e=>{if(!e.ok)return bn(t,e.error);yn(e.answer),document.querySelector(`[data-collection="${CSS.escape(e.answer.id??``)}"] summary`)?.focus()});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??``;vn(`/collections`,{action:`rename`,id:r,name:t}).then(e=>{if(!e.ok)return bn(n,e.error);B.closeAll(),yn(e.answer),document.querySelector(`[data-collection="${CSS.escape(r)}"] summary`)?.focus()})}});function Sn(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(),V(n);return}let o=t.closest(`[data-collection-confirm-delete]`);if(o?.dataset.collectionConfirmDelete){e.preventDefault(),o.disabled=!0;let t=o.dataset.collectionConfirmDelete;vn(`/collections`,{action:`delete`,id:t}).then(e=>{if(o.disabled=!1,!e.ok)return Ht(n,e.error);B.closeAll(),yn(e.answer),A.collections.includes(t)&&R(),document.querySelector(`[data-collection-new]`)?.focus()})}}function Cn(e,t){!J||e.length===0||(B.closeAll(),Z=[...e],hn=!1,gn=`selection`in t,mn&&(mn.textContent=it(e.length,`card`in t?t.card:void 0)),Y&&(Y.value=``),Tn(void 0),Q(),J.showModal(),Y?.focus())}function wn(){return Z.map(e=>Xe(h.find(t=>t.dataset.id===e)??document.createElement(`div`)))}function Q(){let e=Y?.value??``;fn&&rt(fn,v,wn(),e);let t=tt(e,v);X&&(X.hidden=t===void 0,X.textContent=t===void 0?``:`Create “${t}” and add ${Z.length===1?`this review`:`these ${Z.length}`}`)}function Tn(e){pn&&(pn.textContent=e??``,pn.hidden=e===void 0)}async function En(e){Tn(void 0);let t=await vn(`/collections/members`,{ids:Z,...e});if(!t.ok)return Tn(t.error),Q();hn=!0,yn(t.answer);let n=t.answer.refused??[];n.length>0&&(Z=Z.filter(e=>!n.some(t=>t.id===e)),Tn([...new Set(n.map(e=>e.error))].join(` `))),Q()}Y?.addEventListener(`input`,()=>Q()),Y?.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),X&&!X.hidden&&X.click())}),X?.addEventListener(`click`,()=>{let e=tt(Y?.value??``,v);e!==void 0&&En({action:`add`,create:e}).then(()=>{Y&&(Y.value=``),Q(),Y?.focus()})}),fn?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-dialog-option]`);if(!t)return;let n=ae(t.dataset.membership??`none`),r=t.value;En({action:n,collection:r}).then(()=>{fn.querySelector(`[data-collections-dialog-option][value="${CSS.escape(r)}"]`)?.focus()})}),document.querySelector(`[data-collections-dialog-close]`)?.addEventListener(`click`,()=>J?.close());try{let e=window.sessionStorage.getItem(Qe);if(e){window.sessionStorage.removeItem(Qe);let t=JSON.parse(e),n=Array.isArray(t.ids)?t.ids.filter(e=>typeof e==`string`):[];if(t.selecting===!0||n.length>0){H(!0);for(let e of $e(n,h))j.add(e);I()}}}catch{}J?.addEventListener(`close`,()=>{hn&&M&&gn&&H(!1),Z=[],In()}),ge(window,()=>window.location.reload());var Dn=`prb-fetch-summary`;function On(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function kn(e){return ze(On(e),Pt)}function An(){for(let e of _()){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Le(Pt,On([e])))}}async function jn(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;Pt=(await e.json()).targets??{}}catch{return}An(),I()}async function Mn(e,t){let n=kn(e);if(F||n.repositories===0)return;F=!0;let r=[N,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Fe(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{}F=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=Be),I();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:Ie(a)};if(a.moved>0||Pn){try{window.sessionStorage.setItem(Dn,JSON.stringify(o))}catch{}if(!Fn())return void window.location.reload();Pn=!0}Ce(fe(),o)}try{let e=window.sessionStorage.getItem(Dn);if(e){window.sessionStorage.removeItem(Dn);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&Ce(fe(),{kind:t.kind,text:t.text})}}catch{}N?.addEventListener(`click`,()=>void Mn(G(),N)),jn();var Nn=document.body.dataset.indexRevision??``,$=document.body.dataset.live===`true`?Date.now():0,Pn=!1;function Fn(){let e=J?.open===!0||document.activeElement?.closest(`[data-collections-area], [data-collections-filter]`)!=null;return j.size>0||document.activeElement===y||F||tn.isOpen()||Xt||e}function In(){Pn&&!Fn()&&window.location.reload()}async function Ln(){try{let e=await fetch(`/revision`);if(e.ok){Te(document,!0);let t=await e.json();xe(document,t),t.live&&$===0&&($=Date.now()),t.live||($=0);let n=s(Nn,t.revision??``,Fn());if(n===`reload`)return void window.location.reload();n===`hold`&&(Pn=!0)}}catch{Te(document,!1)}window.setTimeout(()=>void Ln(),He($===0?2**53-1:Date.now()-$))}Ln(),y?.addEventListener(`blur`,In),document.addEventListener(`click`,()=>window.setTimeout(In,0)),_e();
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,I as c,J as ee,K as te,L as ne,M as re,N as l,O as ie,P as u,R as ae,S as oe,T as se,U as ce,V as le,W as ue,X as de,Y as fe,Z as pe,_ as d,a as me,b as he,ct as ge,d as _e,ft as ve,g as f,i as ye,it as be,j as xe,k as Se,n as Ce,q as we,r as Te,rt as Ee,s as De,st as Oe,t as ke,tt as Ae,ut as je,v as Me,w as Ne,x as Pe,y as Fe,z as Ie}from"./chunk-CmdZYpyj.js";import{a as Le,c as Re,i as ze,l as Be,n as Ve,r as He,s as Ue,t as We}from"./chunk-DWTt0jUK.js";import{n as Ge,t as Ke}from"./chunk-Dio1flWJ.js";import{t as qe}from"./chunk-C8kkSv38.js";import{n as Je,r as Ye}from"./chunk-C_KEGoSE.js";function Xe(e,t){t.forEach((t,n)=>{e.children[n]!==t&&e.insertBefore(t,e.children[n]??null)})}async function Ze(e,t,n){if(e.disabled)return;let r=e.getAttribute(`aria-pressed`)!==`true`;Qe(e,r),e.disabled=!0;let i=await t(r).catch(()=>!1);if(e.disabled=!1,!i)return Qe(e,!r);n(r)}function Qe(e,t){e.setAttribute(`aria-pressed`,String(t)),e.innerHTML=t?`&#9733;`:`&#9734;`,e.setAttribute(`aria-label`,`${t?`Unpin`:`Pin`} this review`)}function $e(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 et(e){return(e.dataset.collections??``).split(` `).filter(Boolean)}async function tt(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 nt=`prb-reviews-selection`;function rt(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 it(e,t){return t===``||e.name.toLowerCase().includes(t.trim().toLowerCase())}function at(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 ot(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=>it(e,r)).map(e=>a(e.id,e.name));it({id:`none`,name:`Uncollected`},r)&&o.unshift(a(Fe,`Uncollected`)),e.replaceChildren(...o)}function st(e,t,n,r){let i=e.ownerDocument,a=t.filter(e=>it(e,r)).map(e=>{let t=Ie(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 ct(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 lt(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=Re(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=Ue(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 ut(e){let t=e.dataset.id??``,n=e.dataset.placement;return n===void 0||n===`home`?t:`${t}|${n}`}function dt(e,t){let n=e.parentElement?.querySelector(`[data-history-list]`);n&&(n.hidden=!t,e.setAttribute(`aria-expanded`,String(t)))}function ft(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(ut),main:r?.scrollTop??0,...be(e)}}function pt(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 mt(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`)&&o(e)&&typeof r==`number`&&Number.isInteger(r)&&r>15&&n.set(e,r);return n}function ht(e,t,n){if(!t)return;n.reveal(pt(t,n.limits),mt(t));let r=new Set(je(t,`expanded`));for(let e of n.cards){let t=e.querySelector(`[data-history-toggle]`);t&&r.has(ut(e))&&dt(t,!0)}let i=Oe(t,`main`);n.pane&&i!==null&&(n.pane.scrollTop=i),ge(e,t.focus,t.focusVisible)}var gt=Ee({ownsRestore:!0});ke(`/restart`);var p=[...document.querySelectorAll(`[data-card][data-placement="home"]`)].sort((e,t)=>Number(e.dataset.rank)-Number(t.dataset.rank)),m=new Map;function _t(){m=new Map;for(let e of document.querySelectorAll(`[data-card]`)){let t=e.dataset.id??``;m.set(t,[...m.get(t)??[],e])}}_t();function vt(e,t){for(let n of m.get(e)??[])t(n)}function h(){return[...m.values()].flat()}var g=$e(document),yt=[...document.querySelectorAll(`[data-operation]`)],bt=document.querySelector(`[data-section="in-progress"]`),xt=e=>e.dataset.inProgressOnly!==void 0,St=Object.fromEntries(d.map(e=>[e,document.querySelector(`[data-cards="${e}"]`)])),Ct=document.querySelector(`.prb-index`);function wt(e){return{id:e.dataset.id??``,collections:et(e),queue:e.dataset.queue===void 0?void 0:Number(e.dataset.queue),status:e.dataset.status??`new`,prState:e.dataset.prState}}var _=document.querySelector(`[data-search]`),v=document.querySelector(`[data-status-filter]`),y=document.querySelector(`[data-author-filter]`),b=document.querySelector(`[data-pr-filter]`),Tt=document.querySelector(`[data-no-matches]`),x=document.querySelector(`[data-count]`),Et=document.querySelector(`[data-clear-filters]`),S=document.querySelector(`[data-collections-filter]`),Dt=document.querySelector(`[data-collections-filter-search]`);function Ot(){if(!S)return;S.hidden=g.length===0;let e=S.querySelector(`[data-collections-filter-label]`);e&&(e.textContent=Ne(D.collections,g)),D.collections.length===0?delete S.dataset.active:S.dataset.active=``;let t=S.querySelector(`[data-collections-filter-options]`);t&&ot(t,g,D.collections,Dt?.value??``)}var C=l();function kt(e){return{stored:Ae({state:e.dataset.lifecycle,at:Number(e.dataset.lifecycleAt)}),activity:de(e.dataset)??{at:0,kind:`created`}}}function At(e){return e.dataset.pinned===`true`}function jt(e){let{stored:t,activity:n}=kt(e);return re(At(e),t,n,et(e).length>0,D.filter)}function Mt(e){let t=jt(e);return t===void 0?.5:d.indexOf(t)}function Nt(e){return[...e].sort((e,t)=>Mt(e)-Mt(t))}var w=new Map,T=document.querySelector(`[data-bulk]`),Pt=document.querySelector(`[data-bulk-count]`),Ft=document.querySelector(`[data-bulk-delete]`),It=document.querySelector(`[data-bulk-question]`),Lt=document.querySelector(`[data-bulk-confirm]`),Rt=document.querySelector(`[data-bulk-actions]`),E=document.querySelector(`[data-bulk-error]`),zt=document.querySelector(`[data-bulk-select-all]`),D=le(window.location.hash),O=new Set,k=!1,A=document.querySelector(`[data-bulk-fetch]`),Bt={},j=[],Vt=!1;function M(){let e=D.query.trim().toLowerCase();D.author!==``&&![...y?.options??[]].some(e=>e.value===D.author)&&(D.author=``),D.collections=D.collections.filter(e=>e===`none`||g.some(t=>t.id===e)),g.length===0&&(D.collections=[]);let n=Nt(t(p.map(e=>({...wt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,card:e})),{...D,query:e}).map(e=>e.card)),r=n.filter(e=>!xt(e));j=r;let a=new Set(t(yt.map(e=>({...wt(e),searchText:e.dataset.searchText??``,author:e.dataset.author,entry:e})),{...D,query:e}).map(e=>e.entry));for(let e of yt)e.hidden=!a.has(e);if(bt){bt.hidden=a.size===0;let e=bt.querySelector(`[data-section-count]`);e&&(e.textContent=String(a.size))}let o=r.filter(e=>jt(e)!==void 0),s=te(o,e=>jt(e),C),c=new Set(d.flatMap(e=>s[e].shown));for(let e of d){let t=St[e];t&&Xe(t,s[e].shown);let n=document.querySelector(`[data-load-more="${e}"]`);n&&(n.hidden=s[e].total<=s[e].shown.length);let r=document.querySelector(`[data-section="${e}"]`);r&&(r.hidden=s[e].total===0);let i=r?.querySelector(`[data-section-count]`);i&&(i.textContent=String(s[e].total))}for(let e of Ht(r))c.add(e);for(let e of h())e.hidden=!c.has(e);if(_&&_.value!==D.query&&(_.value=D.query),y&&(y.value=D.author,D.author===``?delete y.dataset.active:y.dataset.active=``),b||(D.pr=`any`),b&&(b.value=D.pr,D.pr===`any`?delete b.dataset.active:b.dataset.active=``),v&&(v.value=D.filter,D.filter===`all`?delete v.dataset.active:v.dataset.active=``),Ot(),Et&&(Et.hidden=!u(D)),x){let e=e=>e.reduce((e,t)=>e+Number(t.dataset.reviews??1),0);x.textContent=i(e(n),n.length,u(D)?e(p):void 0)}Tt&&(Tt.hidden=n.length>0||a.size>0||p.length===0),Zt(r)}function Ht(e){let t=document.querySelector(`[data-collections-area]`);if(!t)return[];let i=n(D.filter),o=u(D),s=e.flatMap(e=>et(e).map(t=>({card:e,collection:t}))),ee=e=>{let{stored:t,activity:n}=kt(e);return r(At(e),t,n,D.filter)},te=c(s,({card:e,collection:t})=>{let n=ee(e);return n===void 0?void 0:`${n===`completed`?`collection-done`:`collection`}:${t}`},e=>w.get(e)??15),ne=(e,t)=>(m.get(e)??[]).find(e=>e.dataset.placement===`collection:${t}`),re=[],l=!1;for(let e of t.querySelectorAll(`[data-collection]`)){let t=e.dataset.collection??``,n=te.get(`collection:${t}`)??{shown:[],total:0},r=te.get(`collection-done:${t}`)??{shown:[],total:0},c=s.filter(e=>e.collection===t),ee=c.filter(e=>At(e.card)).length,ie=D.collections.length>0&&!D.collections.includes(t),u=!i&&!ie&&(!o||c.length>0);if(e.hidden=!u,!u)continue;l=!0;for(let[i,a]of[[`collection:${t}`,n],[`collection-done:${t}`,r]]){let n=a.shown.map(e=>ne(e.card.dataset.id??``,t)).filter(e=>e!==void 0),r=e.querySelector(`[data-cards="${i}"]`);r&&Xe(r,n),re.push(...n);let o=e.querySelector(`[data-load-more="${i}"]`);o&&(o.hidden=a.total<=a.shown.length)}let ae=e.querySelector(`[data-section="collection:${t}"] > summary [data-section-count]`);ae&&(ae.textContent=Pe(n.total,ee));let se=e.querySelector(`[data-collection-empty]`),ce=oe({active:n.total,completed:r.total,pinned:ee,members:c.length},o);se&&(se.hidden=ce===void 0,se.textContent=ce??``);let le=e.querySelector(`[data-section="collection-done:${t}"]`);le&&(le.hidden=r.total===0);let ue=e.querySelector(`[data-completed-label]`);ue&&(ue.textContent=a(r.total))}return t.hidden=i||!l,re}var Ut=300,N=null;function P(){N!==null&&window.clearTimeout(N),N=null,gt.replace(xe(D),{})}function F(e,t){if(D={...D,...e},C=l(),w=new Map,M(),t===`now`)return P();N!==null&&window.clearTimeout(N),N=window.setTimeout(P,Ut)}window.addEventListener(`pagehide`,()=>{N!==null&&P()}),document.addEventListener(`click`,e=>{N!==null&&e.target?.closest?.(`a[href]`)&&P()},!0),_?.addEventListener(`input`,()=>F({query:_.value},`settled`)),_?.addEventListener(`keydown`,e=>{e.key===`Escape`&&_.value!==``&&(e.preventDefault(),F({query:``},`now`))}),v?.addEventListener(`change`,()=>{F({filter:v.value},`now`)}),y?.addEventListener(`change`,()=>{F({author:y.value},`now`)}),b?.addEventListener(`change`,()=>{F({pr:b.value},`now`)}),Et?.addEventListener(`click`,()=>{F({query:f.query,filter:f.filter,author:f.author,pr:f.pr,collections:f.collections},`now`),_?.focus()}),Ye(),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-load-more]`)?.dataset.loadMore;if(t&&t.startsWith(`collection`)&&o(t))return w.set(t,(w.get(t)??15)+15),M();!t||!d.includes(t)||(C={...C,[t]:C[t]+15},M())});for(let e of[`popstate`,`hashchange`])window.addEventListener(e,()=>{D=le(window.location.hash),C=l(),w=new Map,M(),qt()});document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-pin]`);if(!t?.dataset.pin)return;e.preventDefault(),e.stopPropagation();let n=t.dataset.pin;Ze(t,e=>fetch(`/pin`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n,pinned:e})}).then(e=>e.ok),e=>{vt(n,n=>{n.dataset.pinned=String(e);let r=n.querySelector(`[data-pin]`);r&&r!==t&&Qe(r,e),_n(n)}),M()})});async function Wt(e,t){let n;try{let r=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,action:t})});if(!r.ok)return;n=(await r.json()).queue}catch{return}Gt(n),M()}function Gt(e){let t=new Map(e.map((e,t)=>[e,t]));for(let e of h()){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,_n(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=ce(n)}let n=document.querySelector(`[data-queue-option]`);n&&(n.textContent=ue(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&&dt(t,n.hidden!==!1)});var Kt=document.querySelector(`.prb-shell > main`);function qt(){ht(document,gt.current().ui,{cards:h(),pane:Kt,limits:C,reveal:(e,t)=>{C=e,w=t,M()}})}gt.setCapturer(()=>ft(document,h(),C,Kt,w)),M(),qt();var I=Ge(document,{onOpen:Jt,onClose:Jt});function Jt(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,J(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.matches(`[data-collections-filter]`))return;if(n.matches(`.prb-collection-menu`))return jn(e,t,n);let r=t.closest(`[data-collections-for]`);if(r?.dataset.collectionsFor){e.preventDefault(),e.stopPropagation(),I.closeAll();let t=r.closest(`[data-card]`)?.querySelector(`[data-select]`)?.getAttribute(`aria-label`)?.replace(/^Select /,``);Mn([r.dataset.collectionsFor],{card:t??`this review`});return}let i=t.closest(`[data-copy-id]`);if(i?.dataset.copyId){e.preventDefault(),e.stopPropagation(),Be(i,i.dataset.copyId);return}let a=t.closest(`[data-fetch-review]`);if(a?.dataset.fetchReview){e.preventDefault(),e.stopPropagation(),I.closeAll();let t=a.closest(`[data-card]`);t&&Vn([t]);return}let o=t.closest(`[data-mark-status]`);if(o?.dataset.markId){e.preventDefault(),e.stopPropagation(),I.closeAll(),hn(o.dataset.markId,o.dataset.markStatus===`complete`);return}let s=t.closest(`[data-lifecycle-set]`);if(s?.dataset.lifecycleId){e.preventDefault(),e.stopPropagation(),I.closeAll(),gn([s.dataset.lifecycleId],s.dataset.lifecycleSet);return}let c=t.closest(`[data-queue-action]`);if(c?.dataset.queueId){e.preventDefault(),e.stopPropagation(),I.closeAll(),Wt(c.dataset.queueId,c.dataset.queueAction===`remove`?`remove`:`add`);return}if(t.closest(`[data-delete]`)){e.preventDefault(),e.stopPropagation();let t=n.querySelector(`[data-menu-items]`),r=n.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),r&&(r.hidden=!1),e.detail===0&&n.querySelector(`[data-cancel-delete]`)?.focus();return}if(t.closest(`[data-cancel-delete]`)){e.preventDefault(),e.stopPropagation(),Jt(n),e.detail===0&&n.querySelector(`[data-delete]`)?.focus();return}if(t.closest(`[data-confirm-delete]`)){e.preventDefault(),e.stopPropagation(),Yt(n);return}e.preventDefault(),e.stopPropagation()});async function Yt(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();Xt(e,(await r.json().catch(()=>null))?.error??`That could not be deleted.`)}catch{Xt(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 Xt(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 L(e){k=e,e||O.clear(),Ct&&(e?Ct.dataset.selecting=``:delete Ct.dataset.selecting),document.querySelector(`[data-select-mode]`)?.setAttribute(`aria-pressed`,String(e));for(let t of document.querySelectorAll(`.prb-card-link`))e?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`);R(),M()}function R(){Lt&&(Lt.hidden=!0),Rt&&(Rt.hidden=!1),E&&(E.hidden=!0,E.textContent=``)}function Zt(e){for(let e of h()){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(!T||(T.hidden=!k,!k))return;let t=new Set(h().filter(Qt).map(e=>e.dataset.id)),n=[...O].filter(e=>!t.has(e)).length;Pt&&(Pt.textContent=ee(O.size,n)),zt&&(zt.textContent=we(e.length),zt.disabled=e.every(e=>O.has(e.dataset.id??``))),Ft&&(Ft.textContent=ie(fn()));for(let e of T.querySelectorAll(`[data-bulk-mark], [data-bulk-lifecycle], [data-bulk-queue], [data-bulk-collections], [data-bulk-delete]`))e.disabled=O.size===0;A&&(A.hidden=!Ve(Bt,Ln(V())))}function Qt(e){return!e.hidden&&e.closest(`details:not([open]), [hidden]`)===null}function $t(e){let t=[...e.querySelectorAll(`details[data-section]`)];for(let e of t)e.addEventListener(`toggle`,()=>Zt(j));Je(t,(e,t)=>fetch(`/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}))}$t(document),document.querySelector(`[data-select-mode]`)?.addEventListener(`click`,()=>{L(!k)}),zt?.addEventListener(`click`,()=>{for(let e of j)e.dataset.id&&O.add(e.dataset.id);R(),M()});function en(e){O.has(e)?O.delete(e):O.add(e),R(),M()}document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-select]`);t?.dataset.select&&en(t.dataset.select)}),document.addEventListener(`click`,e=>{if(!k)return;let t=e.target,n=t.closest(`[data-card]`);n?.dataset.id&&(t.closest(`[data-select], [data-pin], [data-menu], [data-history-toggle]`)||(e.preventDefault(),en(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(),en(t.dataset.id))});var z=qe({doc:document,item:`[data-card]`,link:`.prb-card-link`,walk:()=>[...document.querySelectorAll(`[data-card]`)].filter(Qt),enterAllowed:()=>!k,background:()=>Kt,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 z.holdsKeys()?z.current()?.querySelector(`:scope > [data-menu]`)??null:null}var nn=8;function rn(e){let t=e.querySelector(`.prb-card-link`);t&&(t.focus({preventScroll:!0}),document.activeElement!==t&&document.activeElement?.blur(),N!==null&&P(),gt.leaving(),an=!0,window.location.assign(t.href))}var an=!1,on={title:`Search reviews`,mount(e,t){let n=document.createElement(`input`);n.type=`search`,n.className=`prb-palette-input`,n.placeholder=_?.placeholder??``,n.setAttribute(`aria-label`,`Search reviews`),n.spellcheck=!1,n.value=_?.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,nn);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 ${x?.textContent??j.length}`:x?.textContent??``},o=()=>[...i.querySelectorAll(`.prb-palette-result`)],s=e=>{let n=p.find(t=>t.dataset.id===e?.dataset.resultId);n&&(t(),rn(n))};n.addEventListener(`input`,()=>{_&&(_.value=n.value,_.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()}},sn={title:`Filters`,mount(e){let t=document.createElement(`p`);t.className=`prb-palette-summary`,t.setAttribute(`aria-live`,`polite`);let n=()=>{t.textContent=x?.textContent??``},r=[v,y,b].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 cn(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 ln=Object.fromEntries(Me.map(e=>[`reviews.section.${e}`,cn(e)]));function un(){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 B=document.querySelector(`[data-collection-new]`),dn=_e(`reviews`,{...ln,"reviews.search":{available:()=>_!==null,panel:on},"reviews.filters":{available:()=>v!==null,panel:sn},"reviews.collection.new":{available:()=>B!==null&&!B.disabled,run:()=>B?.click()},"reviews.collection.fold":{available:()=>un().length>0,panel:lt({collections:un,toggle:e=>{let t=document.querySelector(`[data-collection="${CSS.escape(e)}"] > details[data-section]`);t&&(t.open=!t.open)}})},"reviews.next":{run:()=>z.move(1)},"reviews.previous":{run:()=>z.move(-1)},"reviews.open":{available:()=>z.enterOpens(),run:()=>z.open()},"reviews.openInNewTab":{available:()=>z.enterOpens(),run:()=>z.openInNewTab()},"reviews.menu":{available:()=>tn()!==null,run:()=>{let e=tn();e&&I.open(e,{focusFirst:!0,returnFocus:()=>z.refocus()})}}},{onOpen:()=>I.closeAll(),onSettle:()=>$()});function V(){return Nt(p.filter(e=>O.has(e.dataset.id??``)))}function fn(){return V().reduce((e,t)=>e+Number(t.dataset.reviews??1),0)}function H(e){E&&(E.textContent=e,E.hidden=!1)}function U(e){for(let t of T?.querySelectorAll(`button`)??[])t.disabled=e}async function pn(e){let t=[...O];if(t.length!==0){U(!0);try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:t,complete:e})})).ok)return U(!1),H(`That could not be saved. The workspace server refused it.`)}catch{return U(!1),H(`The workspace server did not answer. It may have stopped.`)}mn(V(),e),U(!1),L(!1)}}function mn(e,t){let n=t?`complete`:`in-progress`,r=t?`in-progress`:`complete`;for(let t of e.flatMap(e=>m.get(e.dataset.id??``)??[e])){t.dataset.status=n;let e=t.querySelector(`.prb-card-status`);e&&(e.dataset.status=n,e.textContent=fe(n));let i=t.querySelector(`[data-mark-status]`);i&&(i.dataset.markStatus=r,i.textContent=ne(r))}}async function hn(e,t){try{if(!(await fetch(`/status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:[e],complete:t})})).ok)return}catch{return}mn(p.filter(t=>t.dataset.id===e),t),M()}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 h())r.has(e.dataset.id??``)&&(e.dataset.lifecycle=t,t===`active`?delete e.dataset.lifecycleAt:e.dataset.lifecycleAt=String(n.at),_n(e));return Gt(n.queue),M(),!0}function _n(t){let{stored:n,activity:r}=kt(t),i=t.querySelector(`[data-lifecycle-chip]`);if(i){let e=he(At(t),n,r);i.textContent=e??``,i.hidden=e===void 0}for(let i of t.querySelectorAll(`[data-lifecycle-set]`)){let t=i.dataset.lifecycleSet;i.hidden=!e(t,n,r),i.textContent=pe(t,n,r)}}async function vn(e){let t=[...O];if(t.length===0)return;U(!0);let n=await gn(t,e);if(U(!1),!n)return H(`That could not be saved. The workspace server refused it or did not answer.`);L(!1)}async function yn(){let e=[...O];if(e.length===0)return;U(!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 U(!1),R(),H(`Nothing was deleted. The workspace server refused it.`)}catch{return U(!1),R(),H(`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 V()){let t=e.dataset.id??``;r.has(t)||vt(t,e=>e.remove())}p=p.filter(e=>e.isConnected),_t(),O.clear();for(let e of r)O.add(e);if(U(!1),R(),n.length===0)return L(!1);M(),H([...new Set(n.map(e=>e.error))].join(` `))}async function bn(){let e=V().map(e=>e.dataset.id??``).filter(Boolean);if(e.length===0)return;U(!0);let t=null;try{let n=await fetch(`/queue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({ids:e,action:`add`})});t=n.ok?await n.json().catch(()=>null):null}catch{return U(!1),R(),H(`The workspace server did not answer. It may have stopped.`)}if(!t?.queue)return U(!1),R(),H(`Nothing was added. The workspace server refused it.`);Gt(t.queue);let n=t.refused??[];O.clear();for(let e of n)O.add(e.id);if(U(!1),R(),n.length===0)return L(!1);M(),H([...new Set(n.map(e=>e.error))].join(` `))}T?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-bulk-queue]`))return void bn();if(t.closest(`[data-bulk-collections]`))return Mn(V().map(e=>e.dataset.id??``).filter(Boolean),{selection:!0});let n=t.closest(`[data-bulk-mark]`);if(n)return void pn(n.dataset.bulkMark===`complete`);let r=t.closest(`[data-bulk-lifecycle]`);if(r)return void vn(r.dataset.bulkLifecycle);if(t.closest(`[data-bulk-delete]`)){It&&(It.textContent=Se(fn())),Rt&&(Rt.hidden=!0),Lt&&(Lt.hidden=!1);return}if(t.closest(`[data-bulk-confirm-delete]`))return void yn();if(t.closest(`[data-bulk-cancel-delete]`))return R();if(t.closest(`[data-bulk-cancel]`))return L(!1)});var W=document.querySelector(`[data-collections-dialog]`),xn=document.querySelector(`[data-collections-dialog-list]`),G=document.querySelector(`[data-collections-dialog-search]`),K=document.querySelector(`[data-collections-dialog-create]`),Sn=document.querySelector(`[data-collections-dialog-error]`),Cn=document.querySelector(`[data-collections-dialog-for]`),q=[],wn=!1,Tn=!1,En=document.body.dataset.cardsSnapshot??``;function Dn(e,t){return tt(e,t,En)}function On(e){if(e.stale||e.area===void 0){try{let e={ids:[...O],selecting:k};window.sessionStorage.setItem(nt,JSON.stringify(e))}catch{}W?.close(),window.location.reload();return}let t=e.area,n=document.querySelector(`[data-collections-area]`);if(n){let e=n.contains(document.activeElement)?be(document):null,r=document.createElement(`template`);r.innerHTML=t.trim();let i=r.content.firstElementChild;if(i){if(n.replaceWith(i),$t(i),k)for(let e of i.querySelectorAll(`.prb-card-link`))e.setAttribute(`aria-disabled`,`true`);e&&ge(document,e.focus,e.focusVisible)}}g=e.collections;for(let t of p){let n=e.memberOf[t.dataset.id??``]??[];t.dataset.collections=n.join(` `);let r=t.querySelector(`[data-collections-line]`),i=se(n,g);r&&(r.textContent=i??``,r.hidden=i===void 0)}for(let t of yt){let n=e.operations?.[t.dataset.key??``];n&&(t.dataset.collections=n.join(` `))}_t(),zn(),M()}function J(e,t){let n=e.querySelector(`[data-collection-error]`);n&&(n.textContent=t??``,n.hidden=t===void 0)}Dt?.addEventListener(`input`,()=>Ot()),S?.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`),S.querySelector(`[data-collections-filter-option][value="${CSS.escape(t.value)}"]`)?.focus()});var Y=document.querySelector(`[data-collection-new-dialog]`),X=Y?.querySelector(`[data-collection-name-input]`)??null,kn=Y?.querySelector(`[data-collection-create]`)??null,Z=!1;function An(){B&&(B.disabled=Z),X&&(X.readOnly=Z),kn&&(kn.disabled=Z||(X?.value.trim()??``)===``)}B?.addEventListener(`click`,()=>{Y&&(I.closeAll(),X&&(X.value=``),An(),J(Y,void 0),Y.showModal(),X?.focus())}),X?.addEventListener(`input`,()=>{An(),Y&&J(Y,void 0)}),Y?.querySelector(`[data-collection-cancel]`)?.addEventListener(`click`,()=>Y.close()),Y?.addEventListener(`close`,()=>$()),document.addEventListener(`submit`,e=>{let t=e.target;if(t.matches(`[data-collection-new-form]`)){e.preventDefault();let n=X?.value??``;if(n.trim()===``)return;Z=!0,An(),Dn(`/collections`,{action:`create`,name:n}).then(e=>{Z=!1,An();let n=Y?.open===!0;if(!e.ok)return J(t,e.error);Y?.close(),On(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??``;Dn(`/collections`,{action:`rename`,id:r,name:t}).then(e=>{if(!e.ok)return J(n,e.error);I.closeAll(),On(e.answer),document.querySelector(`[data-collection="${CSS.escape(r)}"] summary`)?.focus({focusVisible:!1})})}});function jn(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(),Jt(n);return}let o=t.closest(`[data-collection-confirm-delete]`);if(o?.dataset.collectionConfirmDelete){e.preventDefault(),o.disabled=!0;let t=o.dataset.collectionConfirmDelete;Dn(`/collections`,{action:`delete`,id:t}).then(e=>{if(o.disabled=!1,!e.ok)return Xt(n,e.error);I.closeAll(),On(e.answer),D.collections.includes(t)&&P(),document.querySelector(`[data-collection-new]`)?.focus()})}}function Mn(e,t){!W||e.length===0||(I.closeAll(),q=[...e],wn=!1,Tn=`selection`in t,Cn&&(Cn.textContent=ct(e.length,`card`in t?t.card:void 0)),G&&(G.value=``),Pn(void 0),Q(),W.showModal(),G?.focus())}function Nn(){return q.map(e=>et(p.find(t=>t.dataset.id===e)??document.createElement(`div`)))}function Q(){let e=G?.value??``;xn&&st(xn,g,Nn(),e);let t=at(e,g);K&&(K.hidden=t===void 0,K.textContent=t===void 0?``:`Create “${t}” and add ${q.length===1?`this review`:`these ${q.length}`}`)}function Pn(e){Sn&&(Sn.textContent=e??``,Sn.hidden=e===void 0)}async function Fn(e){Pn(void 0);let t=await Dn(`/collections/members`,{ids:q,...e});if(!t.ok)return Pn(t.error),Q();wn=!0,On(t.answer);let n=t.answer.refused??[];n.length>0&&(q=q.filter(e=>!n.some(t=>t.id===e)),Pn([...new Set(n.map(e=>e.error))].join(` `))),Q()}G?.addEventListener(`input`,()=>Q()),G?.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),K&&!K.hidden&&K.click())}),K?.addEventListener(`click`,()=>{let e=at(G?.value??``,g);e!==void 0&&Fn({action:`add`,create:e}).then(()=>{G&&(G.value=``),Q(),G?.focus()})}),xn?.addEventListener(`change`,e=>{let t=e.target.closest(`[data-collections-dialog-option]`);if(!t)return;let n=ae(t.dataset.membership??`none`),r=t.value;Fn({action:n,collection:r}).then(()=>{xn.querySelector(`[data-collections-dialog-option][value="${CSS.escape(r)}"]`)?.focus()})}),document.querySelector(`[data-collections-dialog-close]`)?.addEventListener(`click`,()=>W?.close());try{let e=window.sessionStorage.getItem(nt);if(e){window.sessionStorage.removeItem(nt);let t=JSON.parse(e),n=Array.isArray(t.ids)?t.ids.filter(e=>typeof e==`string`):[];if(t.selecting===!0||n.length>0){L(!0);for(let e of rt(n,p))O.add(e);M()}}}catch{}W?.addEventListener(`close`,()=>{wn&&k&&Tn&&L(!1),q=[],$()}),ve(window,()=>window.location.reload());var In=`prb-fetch-summary`;function Ln(e){return e.map(e=>({lineage:(e.dataset.lineage??e.dataset.id??``).split(` `).filter(Boolean)}))}function Rn(e){return He(Ln(e),Bt)}function zn(){for(let e of h()){let t=e.querySelector(`[data-fetch-review]`);t&&(t.hidden=!Ve(Bt,Ln([e])))}}async function Bn(){try{let e=await fetch(`/fetch-updates`);if(!e.ok)return;Bt=(await e.json()).targets??{}}catch{return}zn(),M()}async function Vn(e,t){let n=Rn(e);if(Vt||n.repositories===0)return;Vt=!0;let r=[A,...document.querySelectorAll(`[data-fetch-review]`)];for(let e of r)e&&(e.disabled=!0);t&&(t.textContent=Le(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{}Vt=!1;for(let e of r)e&&(e.disabled=!1);t&&(t.textContent=We),M();let a=i??{repositories:n.repositories,fetched:0,failed:[],moved:0},o={kind:a.fetched<a.repositories?`failed`:`ready`,text:ze(a)};if(a.moved>0||Wn){try{window.sessionStorage.setItem(In,JSON.stringify(o))}catch{}if(!Gn())return void window.location.reload();Wn=!0}Te(me(),o)}try{let e=window.sessionStorage.getItem(In);if(e){window.sessionStorage.removeItem(In);let t=JSON.parse(e);typeof t.kind==`string`&&typeof t.text==`string`&&Te(me(),{kind:t.kind,text:t.text})}}catch{}A?.addEventListener(`click`,()=>void Vn(V(),A)),Bn();var Hn=document.body.dataset.indexRevision??``,Un=document.body.dataset.live===`true`?Date.now():0,Wn=!1;function Gn(){let e=W?.open===!0||Y?.open===!0||document.activeElement?.closest(`[data-collections-area], [data-collections-filter]`)!=null;return O.size>0||document.activeElement===_||Vt||dn.isOpen()||an||e}function $(){Wn&&!Gn()&&window.location.reload()}async function Kn(){try{let e=await fetch(`/revision`);if(e.ok){De(document,!0);let t=await e.json();Ce(document,t),t.live&&Un===0&&(Un=Date.now()),t.live||(Un=0);let n=s(Hn,t.revision??``,Gn());if(n===`reload`)return void window.location.reload();n===`hold`&&(Wn=!0)}}catch{De(document,!1)}window.setTimeout(()=>void Kn(),Ke(Un===0?2**53-1:Date.now()-Un))}Kn(),_?.addEventListener(`blur`,$),document.addEventListener(`click`,()=>window.setTimeout($,0)),ye();
package/static/runs.js CHANGED
@@ -1 +1 @@
1
- import{G as e,d as t,ft as n,h as r,m as i,n as a,rt as o,s,t as c}from"./chunk-CQNkZ9TG.js";import{n as l,t as u}from"./chunk-CxFmUaBj.js";import{t as d}from"./chunk-Dv0Wowan.js";import{t as f}from"./chunk-C8kkSv38.js";import{r as p,t as m}from"./chunk-CWRKWlhO.js";var h=[`all`,`in-progress`,`completed`,`failed`,`cancelled`,`not-responding`],g=[`all`,`review`,`update`,`re-run`,`kiss`];function _(e,t){let n=0;return{visible:e.map(e=>e&&n++<t),matched:e.filter(Boolean).length}}function v(e,t){return e.status!==`all`&&t.status!==e.status||e.kind!==`all`&&t.kind!==e.kind?!1:e.query.toLowerCase().split(/\s+/).filter(Boolean).every(e=>t.searchText.includes(e))}function y(e){return e.status!==`all`||e.kind!==`all`||e.query.trim()!==``}function b(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`status`),r=t.get(`kind`);return{status:h.includes(n??``)?n:`all`,kind:g.includes(r??``)?r:`all`,query:t.get(`q`)??``}}function x(e){let t=new URLSearchParams;e.status!==`all`&&t.set(`status`,e.status),e.kind!==`all`&&t.set(`kind`,e.kind),e.query.trim()!==``&&t.set(`q`,e.query);let n=t.toString();return n===``?``:`#${n}`}var S=o();c(`/restart`);var C=document.querySelector(`[data-search]`),w=document.querySelector(`[data-run-status-filter]`),T=document.querySelector(`[data-run-kind-filter]`),E=document.querySelector(`[data-clear-filters]`),D=document.querySelector(`[data-no-matches]`),O=[...document.querySelectorAll(`[data-run]`)],k=b(window.location.hash);w&&![...w.options].some(e=>e.value===k.status)&&(k={...k,status:`all`});function A(){C&&(C.value=k.query),w&&(w.value=k.status),T&&(T.value=k.kind)}var j=50,M=document.querySelector(`[data-runs-more-row]`),N=document.querySelector(`[data-runs-more]`),P=document.querySelector(`[data-runs-more-note]`),F=e=>({status:e.dataset.runStatus??``,kind:e.dataset.runKind??``,searchText:e.dataset.searchText??``});function I(){let e=0;for(let t of document.querySelectorAll(`[data-runs-section]`)){let n=[...t.querySelectorAll(`[data-run]`)],r=n.map(e=>v(k,F(e))),i=t.dataset.runsSection===`recent`,{visible:a,matched:o}=i?_(r,j):{visible:r,matched:r.filter(Boolean).length};n.forEach((e,t)=>e.hidden=!a[t]),e+=o;let s=t.querySelector(`[data-section-count]`);if(s&&(s.textContent=String(o)),i&&M){let e=Math.min(o,j);M.hidden=o<=j,P&&(P.textContent=`Showing the newest ${e} of ${o}.`)}}let t=y(k);E&&(E.hidden=!t),D&&(D.hidden=!(t&&e===0&&O.length>0))}N?.addEventListener(`click`,()=>{j+=50,I()});function L(e){k={...k,...e},j=50,I(),S.replace(x(k),{})}C?.addEventListener(`input`,()=>L({query:C.value})),w?.addEventListener(`change`,()=>L({status:w.value})),T?.addEventListener(`change`,()=>L({kind:T.value})),p(),m(document.querySelectorAll(`details[data-runs-section]`),e=>r(e.dataset.runsSection)?e.dataset.runsSection:void 0,(e,t)=>fetch(`/runs/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}));for(let e of document.querySelectorAll(`[data-clear-filters], [data-clear-filters-inline]`))e.addEventListener(`click`,()=>{L({status:`all`,kind:`all`,query:``}),A()});A(),I();var R=3e4;function z(){for(let e of document.querySelectorAll(`time[data-since]`)){let t=Number(e.dataset.since);Number.isFinite(t)&&(e.textContent=`${e.dataset.sincePrefix??``} ${d(t)}`.trim())}}window.setInterval(z,R);var B=l(document,{onClose:()=>Q()}),V=()=>document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null,H=!1;for(let e of document.querySelectorAll(`[data-run-remove]`))e.addEventListener(`click`,()=>{let t=e.dataset.runRemove,n=e.closest(`[data-run]`);!t||!n||(B.closeAll(),e.disabled=!0,H=!0,fetch(`/runs/remove`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:t})}).then(t=>{t.ok||t.status===404?(n.remove(),O.splice(O.indexOf(n),1),I()):e.disabled=!1}).catch(()=>{e.disabled=!1}).finally(()=>{H=!1,Q()}))});var U=f({doc:document,item:`[data-run]`,link:`a.prb-card-link`,walk:()=>O.filter(e=>!e.hidden&&e.closest(`details`)?.open!==!1&&e.querySelector(`a.prb-card-link`)),background:()=>document.querySelector(`.prb-shell > main`)});function W(e){let t=()=>document.querySelector(`details[data-runs-section="${e}"]`);return{available:()=>t()!==null,state:()=>{let e=t();return e?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}function G(){return U.holdsKeys()?U.current()?.querySelector(`:scope > [data-menu]`)??null:null}var K=Object.fromEntries(i.map(e=>[`runs.section.${e}`,W(e)])),q=t(`runs`,{"runs.search":{run:()=>C?.focus()},"runs.next":{run:()=>U.move(1)},"runs.previous":{run:()=>U.move(-1)},"runs.open":{available:()=>U.enterOpens(),run:()=>U.open()},"runs.openInNewTab":{available:()=>U.enterOpens(),run:()=>U.openInNewTab()},"runs.menu":{available:()=>G()!==null,run:()=>{let e=G();e&&B.open(e,{focusFirst:!0,returnFocus:()=>U.refocus()})}},...K},{onSettle:()=>Q()}),J=document.body.dataset.runsRevision??``,Y=document.body.dataset.live===`true`?Date.now():0,X=!1;function Z(){return document.activeElement===C||H||q.isOpen()||V()}function Q(){X&&!Z()&&window.location.reload()}C?.addEventListener(`blur`,()=>Q());async function $(){try{let t=await fetch(`/runs/revision`);if(t.ok){s(document,!0);let n=await t.json();a(document,n),n.live&&Y===0&&(Y=Date.now()),n.live||(Y=0);let r=e(J,n.revision??``,Z());if(r===`reload`)return void window.location.reload();r===`hold`&&(X=!0)}}catch{s(document,!1)}window.setTimeout(()=>void $(),u(Y===0?2**53-1:Date.now()-Y))}$(),n(window,()=>window.location.reload());
1
+ import{G as e,d as t,ft as n,h as r,m as i,n as a,rt as o,s,t as c}from"./chunk-CmdZYpyj.js";import{n as l,t as u}from"./chunk-Dio1flWJ.js";import{t as d}from"./chunk-Dv0Wowan.js";import{t as f}from"./chunk-C8kkSv38.js";import{r as p,t as m}from"./chunk-C_KEGoSE.js";var h=[`all`,`in-progress`,`completed`,`failed`,`cancelled`,`not-responding`],g=[`all`,`review`,`update`,`re-run`,`kiss`];function _(e,t){let n=0;return{visible:e.map(e=>e&&n++<t),matched:e.filter(Boolean).length}}function v(e,t){return e.status!==`all`&&t.status!==e.status||e.kind!==`all`&&t.kind!==e.kind?!1:e.query.toLowerCase().split(/\s+/).filter(Boolean).every(e=>t.searchText.includes(e))}function y(e){return e.status!==`all`||e.kind!==`all`||e.query.trim()!==``}function b(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=t.get(`status`),r=t.get(`kind`);return{status:h.includes(n??``)?n:`all`,kind:g.includes(r??``)?r:`all`,query:t.get(`q`)??``}}function x(e){let t=new URLSearchParams;e.status!==`all`&&t.set(`status`,e.status),e.kind!==`all`&&t.set(`kind`,e.kind),e.query.trim()!==``&&t.set(`q`,e.query);let n=t.toString();return n===``?``:`#${n}`}var S=o();c(`/restart`);var C=document.querySelector(`[data-search]`),w=document.querySelector(`[data-run-status-filter]`),T=document.querySelector(`[data-run-kind-filter]`),E=document.querySelector(`[data-clear-filters]`),D=document.querySelector(`[data-no-matches]`),O=[...document.querySelectorAll(`[data-run]`)],k=b(window.location.hash);w&&![...w.options].some(e=>e.value===k.status)&&(k={...k,status:`all`});function A(){C&&(C.value=k.query),w&&(w.value=k.status),T&&(T.value=k.kind)}var j=50,M=document.querySelector(`[data-runs-more-row]`),N=document.querySelector(`[data-runs-more]`),P=document.querySelector(`[data-runs-more-note]`),F=e=>({status:e.dataset.runStatus??``,kind:e.dataset.runKind??``,searchText:e.dataset.searchText??``});function I(){let e=0;for(let t of document.querySelectorAll(`[data-runs-section]`)){let n=[...t.querySelectorAll(`[data-run]`)],r=n.map(e=>v(k,F(e))),i=t.dataset.runsSection===`recent`,{visible:a,matched:o}=i?_(r,j):{visible:r,matched:r.filter(Boolean).length};n.forEach((e,t)=>e.hidden=!a[t]),e+=o;let s=t.querySelector(`[data-section-count]`);if(s&&(s.textContent=String(o)),i&&M){let e=Math.min(o,j);M.hidden=o<=j,P&&(P.textContent=`Showing the newest ${e} of ${o}.`)}}let t=y(k);E&&(E.hidden=!t),D&&(D.hidden=!(t&&e===0&&O.length>0))}N?.addEventListener(`click`,()=>{j+=50,I()});function L(e){k={...k,...e},j=50,I(),S.replace(x(k),{})}C?.addEventListener(`input`,()=>L({query:C.value})),w?.addEventListener(`change`,()=>L({status:w.value})),T?.addEventListener(`change`,()=>L({kind:T.value})),p(),m(document.querySelectorAll(`details[data-runs-section]`),e=>r(e.dataset.runsSection)?e.dataset.runsSection:void 0,(e,t)=>fetch(`/runs/sections`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({section:e,collapsed:t})}));for(let e of document.querySelectorAll(`[data-clear-filters], [data-clear-filters-inline]`))e.addEventListener(`click`,()=>{L({status:`all`,kind:`all`,query:``}),A()});A(),I();var R=3e4;function z(){for(let e of document.querySelectorAll(`time[data-since]`)){let t=Number(e.dataset.since);Number.isFinite(t)&&(e.textContent=`${e.dataset.sincePrefix??``} ${d(t)}`.trim())}}window.setInterval(z,R);var B=l(document,{onClose:()=>Q()}),V=()=>document.querySelector(`[data-menu-trigger][aria-expanded="true"]`)!==null,H=!1;for(let e of document.querySelectorAll(`[data-run-remove]`))e.addEventListener(`click`,()=>{let t=e.dataset.runRemove,n=e.closest(`[data-run]`);!t||!n||(B.closeAll(),e.disabled=!0,H=!0,fetch(`/runs/remove`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:t})}).then(t=>{t.ok||t.status===404?(n.remove(),O.splice(O.indexOf(n),1),I()):e.disabled=!1}).catch(()=>{e.disabled=!1}).finally(()=>{H=!1,Q()}))});var U=f({doc:document,item:`[data-run]`,link:`a.prb-card-link`,walk:()=>O.filter(e=>!e.hidden&&e.closest(`details`)?.open!==!1&&e.querySelector(`a.prb-card-link`)),background:()=>document.querySelector(`.prb-shell > main`)});function W(e){let t=()=>document.querySelector(`details[data-runs-section="${e}"]`);return{available:()=>t()!==null,state:()=>{let e=t();return e?e.open?`Expanded`:`Collapsed`:null},run:()=>{let e=t();e&&(e.open=!e.open)}}}function G(){return U.holdsKeys()?U.current()?.querySelector(`:scope > [data-menu]`)??null:null}var K=Object.fromEntries(i.map(e=>[`runs.section.${e}`,W(e)])),q=t(`runs`,{"runs.search":{run:()=>C?.focus()},"runs.next":{run:()=>U.move(1)},"runs.previous":{run:()=>U.move(-1)},"runs.open":{available:()=>U.enterOpens(),run:()=>U.open()},"runs.openInNewTab":{available:()=>U.enterOpens(),run:()=>U.openInNewTab()},"runs.menu":{available:()=>G()!==null,run:()=>{let e=G();e&&B.open(e,{focusFirst:!0,returnFocus:()=>U.refocus()})}},...K},{onSettle:()=>Q()}),J=document.body.dataset.runsRevision??``,Y=document.body.dataset.live===`true`?Date.now():0,X=!1;function Z(){return document.activeElement===C||H||q.isOpen()||V()}function Q(){X&&!Z()&&window.location.reload()}C?.addEventListener(`blur`,()=>Q());async function $(){try{let t=await fetch(`/runs/revision`);if(t.ok){s(document,!0);let n=await t.json();a(document,n),n.live&&Y===0&&(Y=Date.now()),n.live||(Y=0);let r=e(J,n.revision??``,Z());if(r===`reload`)return void window.location.reload();r===`hold`&&(X=!0)}}catch{s(document,!1)}window.setTimeout(()=>void $(),u(Y===0?2**53-1:Date.now()-Y))}$(),n(window,()=>window.location.reload());
@@ -1 +1 @@
1
- import{c as e,d as t,ft as n,i as r,rt as i,t as a}from"./chunk-CQNkZ9TG.js";function o(e,t){if(e===``)return null;try{let n=new URL(e);return n.origin===t&&/^\/r\/[^/]+$/.test(n.pathname)?n.href:null}catch{return null}}function s(e){let t=[...document.querySelectorAll(`[data-shutdown]`)],n=document.querySelector(`[data-shutdown-dialog]`),r=document.querySelector(`[data-shutdown-confirm]`);for(let e of t)e.addEventListener(`click`,()=>n?.showModal());document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>n?.close()),r?.addEventListener(`click`,()=>{r.disabled=!0,r.textContent=`Stopping…`,fetch(e,{method:`POST`}).then(e=>{if(!e.ok)throw Error(`Shutdown refused: ${e.status}`);n?.close(),c(t)}).catch(()=>{r.disabled=!1,r.textContent=`Stop server`})})}function c(t){document.body.dataset.serverStopped=`true`,e(document,`unreachable`);let n=document.createElement(`div`);n.className=`prb-stopped-notice`,n.setAttribute(`role`,`status`);let r=document.body.dataset.wayBack;n.textContent=r?`Workspace server stopped. This page is no longer being served. Run ${r} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(n);for(let e of t)e.disabled=!0,e.classList.contains(`prb-strip-action`)||(e.textContent=`Server stopped`)}var l=[{id:`system`,label:`System`,help:`Follow your device setting`},{id:`light`,label:`Light`,help:`Always use light mode`},{id:`dark`,label:`Dark`,help:`Always use dark mode`}];function u(e){return l.some(t=>t.id===e)}function d(e){let t=e.querySelector(`[data-settings-theme]:checked`)?.value;return u(t)?t:void 0}function f(e,t){e.documentElement.dataset.theme=t}function p(e){for(let t of e.querySelectorAll(`[data-settings-theme]`))t.addEventListener(`change`,()=>{let t=d(e);t&&f(e,t)})}s(`/shutdown`),i(),t(`global`,{}),a(`/restart`);function m(){let e=document.querySelector(`[data-settings-back]`),t=o(document.referrer,window.location.origin);if(!e||t===null)return;e.href=t,e.textContent=``;let n=document.createElement(`span`);n.setAttribute(`aria-hidden`,`true`),n.textContent=`‹`,e.append(n,` Back to the review`)}m(),p(document);var h=document.querySelector(`[data-settings-save]`),g=document.querySelector(`[data-settings-status]`),_=document.querySelector(`[data-settings-port]`),v=document.querySelector(`[data-settings-port-error]`),y=document.querySelector(`[data-settings-agent]`);function b(){let e=document.querySelector(`[data-settings-usage]:checked`);return e?e.value===`on`:void 0}function x(e,t){g&&(g.textContent=e,g.dataset.kind=t)}function S(e){v&&(v.textContent=e??``),_&&(e?(_.setAttribute(`aria-invalid`,`true`),_.focus(),_.select()):_.removeAttribute(`aria-invalid`))}async function C(){if(!h)return;let e=b(),t=d(document),n={..._?{port:_.value.trim()}:{},...y?{agent:y.value}:{},...e===void 0?{}:{usageCounts:e},...t===void 0?{}:{theme:t}};h.disabled=!0,h.textContent=`Saving`;try{let e=await(await fetch(`/settings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).json().catch(()=>null);if(!e){x(`Nothing was saved. The workspace server did not answer.`,`error`);return}if(e.error){S(e.error),x(`Nothing was saved.`,`error`);return}S(null),_&&(_.value=String(e.port.configured)),f(document,e.theme),x(e.restartRequired?`Saved. This page is served on port ${e.port.current}; the workspace moves to ${e.port.configured} the next time it starts.`:`Saved.`,`saved`)}catch{x(`Nothing was saved. The workspace server could not be reached.`,`error`)}finally{h.disabled=!1,h.textContent=`Save changes`}}h?.addEventListener(`click`,()=>void C()),r(document,window,{paintUnread:!0}),n(window,()=>window.location.reload());
1
+ import{c as e,d as t,ft as n,i as r,rt as i,t as a}from"./chunk-CmdZYpyj.js";function o(e,t){if(e===``)return null;try{let n=new URL(e);return n.origin===t&&/^\/r\/[^/]+$/.test(n.pathname)?n.href:null}catch{return null}}function s(e){let t=[...document.querySelectorAll(`[data-shutdown]`)],n=document.querySelector(`[data-shutdown-dialog]`),r=document.querySelector(`[data-shutdown-confirm]`);for(let e of t)e.addEventListener(`click`,()=>n?.showModal());document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>n?.close()),r?.addEventListener(`click`,()=>{r.disabled=!0,r.textContent=`Stopping…`,fetch(e,{method:`POST`}).then(e=>{if(!e.ok)throw Error(`Shutdown refused: ${e.status}`);n?.close(),c(t)}).catch(()=>{r.disabled=!1,r.textContent=`Stop server`})})}function c(t){document.body.dataset.serverStopped=`true`,e(document,`unreachable`);let n=document.createElement(`div`);n.className=`prb-stopped-notice`,n.setAttribute(`role`,`status`);let r=document.body.dataset.wayBack;n.textContent=r?`Workspace server stopped. This page is no longer being served. Run ${r} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(n);for(let e of t)e.disabled=!0,e.classList.contains(`prb-strip-action`)||(e.textContent=`Server stopped`)}var l=[{id:`system`,label:`System`,help:`Follow your device setting`},{id:`light`,label:`Light`,help:`Always use light mode`},{id:`dark`,label:`Dark`,help:`Always use dark mode`}];function u(e){return l.some(t=>t.id===e)}function d(e){let t=e.querySelector(`[data-settings-theme]:checked`)?.value;return u(t)?t:void 0}function f(e,t){e.documentElement.dataset.theme=t}function p(e){for(let t of e.querySelectorAll(`[data-settings-theme]`))t.addEventListener(`change`,()=>{let t=d(e);t&&f(e,t)})}s(`/shutdown`),i(),t(`global`,{}),a(`/restart`);function m(){let e=document.querySelector(`[data-settings-back]`),t=o(document.referrer,window.location.origin);if(!e||t===null)return;e.href=t,e.textContent=``;let n=document.createElement(`span`);n.setAttribute(`aria-hidden`,`true`),n.textContent=`‹`,e.append(n,` Back to the review`)}m(),p(document);var h=document.querySelector(`[data-settings-save]`),g=document.querySelector(`[data-settings-status]`),_=document.querySelector(`[data-settings-port]`),v=document.querySelector(`[data-settings-port-error]`),y=document.querySelector(`[data-settings-agent]`);function b(){let e=document.querySelector(`[data-settings-usage]:checked`);return e?e.value===`on`:void 0}function x(e,t){g&&(g.textContent=e,g.dataset.kind=t)}function S(e){v&&(v.textContent=e??``),_&&(e?(_.setAttribute(`aria-invalid`,`true`),_.focus(),_.select()):_.removeAttribute(`aria-invalid`))}async function C(){if(!h)return;let e=b(),t=d(document),n={..._?{port:_.value.trim()}:{},...y?{agent:y.value}:{},...e===void 0?{}:{usageCounts:e},...t===void 0?{}:{theme:t}};h.disabled=!0,h.textContent=`Saving`;try{let e=await(await fetch(`/settings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).json().catch(()=>null);if(!e){x(`Nothing was saved. The workspace server did not answer.`,`error`);return}if(e.error){S(e.error),x(`Nothing was saved.`,`error`);return}S(null),_&&(_.value=String(e.port.configured)),f(document,e.theme),x(e.restartRequired?`Saved. This page is served on port ${e.port.current}; the workspace moves to ${e.port.configured} the next time it starts.`:`Saved.`,`saved`)}catch{x(`Nothing was saved. The workspace server could not be reached.`,`error`)}finally{h.disabled=!1,h.textContent=`Save changes`}}h?.addEventListener(`click`,()=>void C()),r(document,window,{paintUnread:!0}),n(window,()=>window.location.reload());