prreviewbuddy 0.82.4 → 0.83.3
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 +35 -0
- package/dist/server.js +154 -46
- package/package.json +1 -1
- package/static/{chunk-Dio1flWJ.js → chunk-B2vcrGTe.js} +1 -1
- package/static/{chunk-C_KEGoSE.js → chunk-BL6xJoZm.js} +1 -1
- package/static/chunk-DwdwtB9r.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +160 -35
- package/static/workspace.js +1 -1
- package/static/chunk-CmdZYpyj.js +0 -1
package/static/shell.css
CHANGED
|
@@ -154,7 +154,8 @@
|
|
|
154
154
|
--lh-body: 1.55;
|
|
155
155
|
--lh-tight: 1.3;
|
|
156
156
|
|
|
157
|
-
--rail-width: 268px;
|
|
157
|
+
--rail-full-width: 268px;
|
|
158
|
+
--rail-width: var(--rail-full-width);
|
|
158
159
|
/* A proportion, not a number: the assistant is part of the workspace rather than a widget
|
|
159
160
|
docked to its edge, so it should take a share of whatever room there is. The floor keeps it
|
|
160
161
|
wide enough for a code block; the ceiling keeps the review itself the larger pane. A width
|
|
@@ -416,15 +417,6 @@ body > * { flex: 0 0 auto; }
|
|
|
416
417
|
color: var(--text-tertiary, var(--text-secondary));
|
|
417
418
|
opacity: 0.75;
|
|
418
419
|
}
|
|
419
|
-
.prb-feedback {
|
|
420
|
-
color: inherit;
|
|
421
|
-
text-decoration: underline;
|
|
422
|
-
text-underline-offset: 2px;
|
|
423
|
-
}
|
|
424
|
-
.prb-feedback:hover { color: var(--text-primary); opacity: 1; }
|
|
425
|
-
/* The words, and only the words, above phone width. The icon is the phone-width form, where the
|
|
426
|
-
strip has no room for a text link; see the 600px block. */
|
|
427
|
-
.prb-feedback-icon { display: none; }
|
|
428
420
|
|
|
429
421
|
/* ── The global strip ──
|
|
430
422
|
*
|
|
@@ -459,17 +451,9 @@ body > * { flex: 0 0 auto; }
|
|
|
459
451
|
/* Quieter than the wordmark on a marketing page and quieter than the branch below it: at this size
|
|
460
452
|
it is a mark saying which product this is, not a title. */
|
|
461
453
|
.prb-strip .prb-wordmark { font-size: var(--t-body); }
|
|
462
|
-
/* The push comes from the wordmark, so everything after it packs to the far end
|
|
463
|
-
narrow-window places are in flow. A `margin-left: auto` on the bell instead would put the bell
|
|
464
|
-
beside the wordmark at every width the places are hidden, which is most of them. */
|
|
454
|
+
/* The push comes from the wordmark, so everything after it packs to the far end. */
|
|
465
455
|
.prb-strip .prb-wordmark { margin-right: auto; }
|
|
466
456
|
.prb-strip .prb-build { margin: 0; }
|
|
467
|
-
/* The workspace places in the strip exist for the width at which the rail is hidden, and only then.
|
|
468
|
-
Declared here, above the 860px block that reveals it: the two rules have the same specificity, so
|
|
469
|
-
whichever comes last wins, and while this one sat at the foot of the file the media query could
|
|
470
|
-
never take effect — the places were hidden at every width, including the only one that needed
|
|
471
|
-
them. */
|
|
472
|
-
.prb-header-nav { display: none; align-items: center; gap: 16px; font-size: var(--t-meta); }
|
|
473
457
|
|
|
474
458
|
/* The workspace pages that are not a review: the same rail and the same one-viewport shell as a
|
|
475
459
|
review page, with the content scrolling in its own pane beside it.
|
|
@@ -552,6 +536,17 @@ body > * { flex: 0 0 auto; }
|
|
|
552
536
|
background: var(--border-strong);
|
|
553
537
|
}
|
|
554
538
|
|
|
539
|
+
/* New review in the strip is the rail's labelled button standing in while the rail is hidden, so it
|
|
540
|
+
is drawn only then: below 860px and in a review's focus mode, both revealed further down. Declared
|
|
541
|
+
here, above the 860px block, so that block can win at equal specificity. Filled, as the rail's is:
|
|
542
|
+
wherever it is, it is the primary action. */
|
|
543
|
+
.prb-strip .prb-strip-new-review { display: none; background: var(--brand); color: var(--on-brand); }
|
|
544
|
+
.prb-strip .prb-strip-new-review:hover { background: var(--brand-hover); color: var(--on-brand); }
|
|
545
|
+
.prb-strip .prb-strip-new-review:focus-visible { outline-color: var(--brand-ink); }
|
|
546
|
+
/* Show sidebar: the way back from Hidden, and drawn only while the reader has hidden it. */
|
|
547
|
+
.prb-strip .prb-sidebar-restore { display: none; }
|
|
548
|
+
:root[data-sidebar-hidden] .prb-strip .prb-sidebar-restore { display: flex; }
|
|
549
|
+
|
|
555
550
|
/* Why a control cannot be pressed, beside the control rather than inside a `title` nobody hovers
|
|
556
551
|
and no keyboard reaches. Quiet as the strip is quiet: it is an explanation, not a warning. */
|
|
557
552
|
.prb-strip-note {
|
|
@@ -1082,6 +1077,144 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1082
1077
|
color: var(--text-primary);
|
|
1083
1078
|
}
|
|
1084
1079
|
.prb-rail-item:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: -2px; }
|
|
1080
|
+
|
|
1081
|
+
/* New review, at the head of the workspace rows: the primary action, and the one filled thing in
|
|
1082
|
+
the sidebar, as the Buddy AI send button is in its pane. Everything else there stays neutral, so
|
|
1083
|
+
nothing competes with it. Inset so its icon lines up with the rows' icons. The focus ring is the
|
|
1084
|
+
brand's ink rather than its hover colour, which would vanish against the fill. */
|
|
1085
|
+
.prb-rail-new { padding: 0 12px 10px; }
|
|
1086
|
+
.prb-new-review {
|
|
1087
|
+
display: flex;
|
|
1088
|
+
align-items: center;
|
|
1089
|
+
gap: 12px;
|
|
1090
|
+
width: 100%;
|
|
1091
|
+
min-height: 36px;
|
|
1092
|
+
padding: 0 8px;
|
|
1093
|
+
border: 0;
|
|
1094
|
+
border-radius: 8px;
|
|
1095
|
+
background: var(--brand);
|
|
1096
|
+
color: var(--on-brand);
|
|
1097
|
+
font: inherit;
|
|
1098
|
+
font-weight: 600;
|
|
1099
|
+
text-align: left;
|
|
1100
|
+
cursor: pointer;
|
|
1101
|
+
}
|
|
1102
|
+
.prb-new-review svg { width: 16px; height: 16px; flex: none; }
|
|
1103
|
+
.prb-new-review-label { flex: 1; min-width: 0; }
|
|
1104
|
+
.prb-new-review-key { font: 500 var(--t-micro) / 1 ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; color: var(--on-brand-quiet); }
|
|
1105
|
+
.prb-new-review:hover { background: var(--brand-hover); }
|
|
1106
|
+
.prb-new-review:focus-visible { outline: 2px solid var(--brand-ink); outline-offset: 2px; }
|
|
1107
|
+
|
|
1108
|
+
/* The sidebar's own toggle, the last row of its foot. Both drawings are on the page and the state
|
|
1109
|
+
says which shows, so pressing it changes nothing here but an attribute and its words. */
|
|
1110
|
+
.prb-sidebar-collapse-icon,
|
|
1111
|
+
.prb-sidebar-expand-icon { display: flex; }
|
|
1112
|
+
.prb-sidebar-expand-icon,
|
|
1113
|
+
:root[data-sidebar-compact] .prb-sidebar-collapse-icon { display: none; }
|
|
1114
|
+
:root[data-sidebar-compact] .prb-sidebar-expand-icon { display: flex; }
|
|
1115
|
+
|
|
1116
|
+
/* ── The sidebar's three states ──
|
|
1117
|
+
Expanded is the default and needs nothing. Compact and Hidden are attributes on <html>, drawn by
|
|
1118
|
+
the server from `ui.json` so the first paint is already right (see `sidebarAttributes`).
|
|
1119
|
+
|
|
1120
|
+
Both change only `--rail-width`, which every grid with a rail column reads, so the review page's
|
|
1121
|
+
three columns and the other pages' two follow without a template of their own. Hidden keeps the
|
|
1122
|
+
rail in grid flow at no width rather than `display: none`: out of flow, the next pane would drop
|
|
1123
|
+
into the rail's column, which is the defect the 860px block below had to be rewritten for. */
|
|
1124
|
+
:root[data-sidebar-compact] { --rail-width: 56px; }
|
|
1125
|
+
:root[data-sidebar-hidden] { --rail-width: 0px; }
|
|
1126
|
+
:root[data-sidebar-hidden] .prb-rail { visibility: hidden; overflow: hidden; padding: 0; border: 0; }
|
|
1127
|
+
|
|
1128
|
+
/* Compact is drawn by every rule below that waits on `:not([data-sidebar-peek])`. While the reader
|
|
1129
|
+
rests the pointer on it, or tabs into it, `client/sidebar.ts` sets `data-sidebar-peek` and those
|
|
1130
|
+
rules stop applying: the sidebar is drawn exactly as Expanded, at its full width, over the page
|
|
1131
|
+
rather than beside it. Its own column stays narrow, so nothing under it moves. It slides because
|
|
1132
|
+
its width is transitioned from the column's to the full one; the labels are clipped as it grows. */
|
|
1133
|
+
:root[data-sidebar-compact] .prb-rail {
|
|
1134
|
+
position: relative;
|
|
1135
|
+
z-index: 5;
|
|
1136
|
+
width: var(--rail-width);
|
|
1137
|
+
transition: width 0.16s ease, box-shadow 0.16s ease;
|
|
1138
|
+
}
|
|
1139
|
+
:root[data-sidebar-compact][data-sidebar-peek] .prb-rail {
|
|
1140
|
+
width: var(--rail-full-width);
|
|
1141
|
+
box-shadow: 8px 0 24px var(--shadow-float);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
/* Compact: every row is its icon, named in a tooltip beside it on hover and keyboard focus. The
|
|
1145
|
+
tooltip is the row's own label, moved out to the right, so the name a screen reader hears is
|
|
1146
|
+
the one it always heard. What has no icon (headings, the numbered review path, the folds, the
|
|
1147
|
+
counts) waits for Expanded. The rail lets the tooltips out past its edge, and sits above the
|
|
1148
|
+
pane beside it so they draw over it. */
|
|
1149
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail { overflow: visible; }
|
|
1150
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-item {
|
|
1151
|
+
position: relative;
|
|
1152
|
+
justify-content: center;
|
|
1153
|
+
align-items: center;
|
|
1154
|
+
gap: 0;
|
|
1155
|
+
padding: 9px 0;
|
|
1156
|
+
border-left-width: 0;
|
|
1157
|
+
}
|
|
1158
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-item .prb-rail-label {
|
|
1159
|
+
position: absolute;
|
|
1160
|
+
top: 50%;
|
|
1161
|
+
left: calc(100% + 6px);
|
|
1162
|
+
transform: translateY(-50%);
|
|
1163
|
+
padding: 5px 8px;
|
|
1164
|
+
border-radius: 6px;
|
|
1165
|
+
background: var(--text-primary);
|
|
1166
|
+
color: var(--bg);
|
|
1167
|
+
font-size: var(--t-micro);
|
|
1168
|
+
font-weight: 500;
|
|
1169
|
+
line-height: 1.4;
|
|
1170
|
+
white-space: nowrap;
|
|
1171
|
+
opacity: 0;
|
|
1172
|
+
pointer-events: none;
|
|
1173
|
+
z-index: 1;
|
|
1174
|
+
}
|
|
1175
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-item .prb-rail-label * { color: inherit; font: inherit; }
|
|
1176
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-item:hover .prb-rail-label,
|
|
1177
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-item:focus-visible .prb-rail-label { opacity: 1; transition: opacity 0.1s 0.35s; }
|
|
1178
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-count,
|
|
1179
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-selected,
|
|
1180
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-twisty,
|
|
1181
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-heading,
|
|
1182
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-subhead,
|
|
1183
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-path { display: none; }
|
|
1184
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-body { margin: 0; border-left: 0; }
|
|
1185
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-body .prb-rail-item { padding-left: 0; }
|
|
1186
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-group + .prb-rail-group { margin-top: 12px; padding-top: 12px; }
|
|
1187
|
+
/* New review is the square + at the top, its name and shortcut in the strip's own tooltip. */
|
|
1188
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-rail-new { padding: 0 10px 10px; }
|
|
1189
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review { position: relative; justify-content: center; width: 36px; padding: 0; }
|
|
1190
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review-label,
|
|
1191
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review-key { display: none; }
|
|
1192
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review[data-tip]::after {
|
|
1193
|
+
content: attr(data-tip);
|
|
1194
|
+
position: absolute;
|
|
1195
|
+
top: 50%;
|
|
1196
|
+
left: calc(100% + 6px);
|
|
1197
|
+
transform: translateY(-50%);
|
|
1198
|
+
padding: 5px 8px;
|
|
1199
|
+
border-radius: 6px;
|
|
1200
|
+
background: var(--text-primary);
|
|
1201
|
+
color: var(--bg);
|
|
1202
|
+
font-size: var(--t-micro);
|
|
1203
|
+
font-weight: 500;
|
|
1204
|
+
line-height: 1.4;
|
|
1205
|
+
white-space: nowrap;
|
|
1206
|
+
opacity: 0;
|
|
1207
|
+
pointer-events: none;
|
|
1208
|
+
z-index: 1;
|
|
1209
|
+
}
|
|
1210
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review[data-tip]:hover::after,
|
|
1211
|
+
:root[data-sidebar-compact]:not([data-sidebar-peek]) .prb-new-review[data-tip]:focus-visible::after { opacity: 1; transition: opacity 0.1s 0.35s; }
|
|
1212
|
+
|
|
1213
|
+
/* Hidden: the strip's square New review stands in, as it does whenever the rail is not drawn. Send
|
|
1214
|
+
feedback belongs to the sidebar and goes with it; the strip has no copy of it at any width. */
|
|
1215
|
+
:root[data-sidebar-hidden] .prb-strip .prb-strip-new-review { display: flex; }
|
|
1216
|
+
/* The page title is set in the rail's column, so it keeps its own width while that column narrows. */
|
|
1217
|
+
:root:is([data-sidebar-compact], [data-sidebar-hidden]) .prb-context:has(.prb-index-controls) .prb-page-title { width: auto; }
|
|
1085
1218
|
/* The pages under a review type (Issues, Questions, Files, PR context) and the links at the foot
|
|
1086
1219
|
share the group rows' white, so the grey themes in the review path read as their own list.
|
|
1087
1220
|
Weight still separates these from the group rows above them. Must come after `.prb-rail-item`:
|
|
@@ -2773,9 +2906,11 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
2773
2906
|
.prb-body:not([data-ask='open']),
|
|
2774
2907
|
.prb-body[data-ask='open'] { grid-template-columns: minmax(0, 1fr); }
|
|
2775
2908
|
.prb-rail { display: none; }
|
|
2909
|
+
.prb-strip .prb-strip-new-review { display: flex; }
|
|
2910
|
+
/* No sidebar fits at this width, so Show sidebar would bring back nothing. */
|
|
2911
|
+
:root[data-sidebar-hidden] .prb-strip .prb-sidebar-restore { display: none; }
|
|
2776
2912
|
.prb-guide-picker { display: flex; }
|
|
2777
2913
|
.prb-shell { grid-template-columns: minmax(0, 1fr); }
|
|
2778
|
-
.prb-header-nav { display: flex; }
|
|
2779
2914
|
/* The assistant is an overlay at this width, not a column, so there is no boundary to drag. */
|
|
2780
2915
|
.prb-ask-resize { display: none; }
|
|
2781
2916
|
/* Anchored to the body it covers, not to a sum of the bars above it. That sum assumed the header
|
|
@@ -2801,24 +2936,10 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
2801
2936
|
scrolled sideways. Placed after every base rule it overrides (the header, the strip, the change
|
|
2802
2937
|
ref, the stats), because at equal specificity the later rule wins. */
|
|
2803
2938
|
@media (max-width: 600px) {
|
|
2804
|
-
/* The strip keeps every control and the build; it gives up spacing
|
|
2805
|
-
The accessible name stays "Send feedback", from the visually hidden label. */
|
|
2939
|
+
/* The strip keeps every control and the build; it gives up spacing. */
|
|
2806
2940
|
.prb-strip { gap: 4px; padding: 0 16px; }
|
|
2807
2941
|
.prb-strip .prb-wordmark { min-width: 0; overflow: hidden; }
|
|
2808
2942
|
.prb-strip .prb-build { margin-left: 4px; }
|
|
2809
|
-
.prb-feedback { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 6px; color: var(--text-muted); opacity: 1; }
|
|
2810
|
-
.prb-feedback:hover { background: var(--surface-2); }
|
|
2811
|
-
.prb-feedback-icon { display: inline-flex; }
|
|
2812
|
-
.prb-feedback-icon svg { width: 16px; height: 16px; }
|
|
2813
|
-
.prb-feedback-label {
|
|
2814
|
-
position: absolute;
|
|
2815
|
-
width: 1px;
|
|
2816
|
-
height: 1px;
|
|
2817
|
-
margin: -1px;
|
|
2818
|
-
overflow: hidden;
|
|
2819
|
-
clip-path: inset(50%);
|
|
2820
|
-
white-space: nowrap;
|
|
2821
|
-
}
|
|
2822
2943
|
|
|
2823
2944
|
/* The review bar becomes two rows: what the review is of, then its facts and controls. It grows
|
|
2824
2945
|
with its content rather than clipping it; the panes below take what is left, and Buddy AI is
|
|
@@ -5723,6 +5844,10 @@ a.prb-notification-open:focus-visible { outline: 2px solid var(--brand-hover); o
|
|
|
5723
5844
|
and without depending on this block staying last. */
|
|
5724
5845
|
body .prb-body[data-focus] { grid-template-columns: minmax(0, 1fr); }
|
|
5725
5846
|
body .prb-body[data-focus] .prb-rail { display: none; }
|
|
5847
|
+
/* The rail's New review goes with it, so the strip's square one stands in, as below 860px. */
|
|
5848
|
+
body:has(.prb-body[data-focus]) .prb-strip .prb-strip-new-review { display: flex; }
|
|
5849
|
+
/* Focus is left from the pane it expanded, so Show sidebar would bring back nothing here. */
|
|
5850
|
+
body:has(.prb-body[data-focus]) .prb-strip .prb-sidebar-restore { display: none; }
|
|
5726
5851
|
|
|
5727
5852
|
/* A document surface, which is every view but the assistant: the review pane takes the width, and
|
|
5728
5853
|
gets more room to use it. Prose stays a readable measure; a diff and a drawing are the things here
|
package/static/workspace.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-D6oLtkSC.js","chunk-CvSN2dS5.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-DIEkEPeW.js","chunk-D7hFEgee.js","chunk-B2kMZj3m.js","chunk-BXful7fw.js","chunk-9OYdRhXM.js","chunk-DyBGMc4d.js","chunk-D71XVZIg.js","chunk-Dy-Kn_BL.js","chunk-B-Up-Dum.js","chunk-CCkeMk9N.js","chunk-DwHSAwhM.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-Baon_ihZ.js","chunk-CAnKkQXq.js","chunk-LbU1hoFO.js","chunk-BzbQS41l.js","chunk-BsjqnLg3.js","chunk-BtIQNnN0.js","chunk-D3KKoC5L.js","chunk-CP0rg-5b.js","chunk-j_1H8WHN.js","chunk-BOvsFOI6.js","chunk-CqHdAlCp.js","chunk-DijMHRDA.js","chunk-D2pwppYQ.js","chunk-Cjc271yU.js","chunk-B2PgDgse.js","chunk-D95j_xjm.js","chunk-Cv3JjNkX.js","chunk-EIJEcyW-.js","chunk-C3nvJp0N.js","chunk-D2NZorQR.js","chunk-NzFayA7r.js","chunk-AdYjtsZU.js","chunk-pNSm1SyV.js","chunk-c-cg1wCO.js","chunk-CBrdyqSx.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d as u,dt as d,et as f,ft as ee,i as p,it as te,lt as m,nt as ne,o as h,ot as re,r as ie,rt as g,st as _,t as ae,tt as v}from"./chunk-
|
|
2
|
+
import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d as u,dt as d,et as f,ft as ee,i as p,it as te,lt as m,nt as ne,o as h,ot as re,r as ie,rt as g,st as _,t as ae,tt as v}from"./chunk-DwdwtB9r.js";import{i as oe,l as se,o as ce}from"./chunk-DWTt0jUK.js";import{t as y}from"./chunk-CvSN2dS5.js";import{n as le,t as ue}from"./chunk-B2vcrGTe.js";import{t as de}from"./chunk-Dv0Wowan.js";import{t as fe}from"./chunk-C8kkSv38.js";function b(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function pe(e){return b(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var me=`pr-helper-code-block`,he=`pr-helper-code-copy`,ge=/^\u0002(\d+)\u0002/,_e=/^(?:https?:\/\/|#)/i,ve=/^https:\/\//i,ye=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,be=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function xe(e){let t=(e??``).trim();return!t||ye.test(t)||be.test(t)?`View attached image`:`View image: ${t}`}function Se(e,t){return ve.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Ce(e,t){return Se(b((e??``).trim()),b(t))}var x=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,we=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Te=e=>/^\d{1,9}$/.test(e)?e:null,Ee=e=>e.slice(0,300),De=new Map(Object.entries({a:{href:e=>{let t=e.trim();return _e.test(t)?t:null},title:Ee},abbr:{title:Ee},b:{},blockquote:{},br:{},caption:{align:x},cite:{},code:{},dd:{},del:{},details:{},div:{align:x},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Te},p:{align:x},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:x},tbody:{},td:{align:x,colspan:we,rowspan:we},tfoot:{},th:{align:x,colspan:we,rowspan:we},thead:{},tr:{align:x},u:{},ul:{},var:{},h1:{align:x},h2:{align:x},h3:{align:x},h4:{align:x},h5:{align:x},h6:{align:x}}).map(([e,t])=>[e,new Map(Object.entries({title:Ee,...t}))])),Oe=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),ke=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),Ae=new Set(`picture.pre.source.track.input.form.label.button.option.optgroup.font.center.section.article.header.footer.nav.figure.figcaption.main.aside.html.body.meta.link.base.wbr.col.colgroup.area.map.param.fieldset.legend.dialog`.split(`.`)),je=new Set(`address.article.aside.blockquote.caption.center.dd.details.dialog.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),Me=new RegExp(["`[^`\\n]+`",`<(\\/?)([A-Za-z][A-Za-z0-9-]*)((?:\\s+[^\\s"'<>\\/=]+(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s"'=<>\`]+))?)*)\\s*(\\/?)>`,`&(?:#\\d{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});`].join(`|`),`g`),Ne=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Pe(e){return e.replace(/&(#\d{1,7}|#[xX][0-9a-fA-F]{1,6}|amp|lt|gt|quot|apos|nbsp);/g,(e,t)=>{if(t[0]===`#`){let e=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return e>0&&e<=1114111?String.fromCodePoint(e):``}return{amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:`\xA0`}[t]??``})}function Fe(e){let t=new Map;for(let n of e.matchAll(Ne)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Pe(n[2]??n[3]??n[4]??``))}return t}function Ie(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Le(e,t){let n=Ie(e),r=De.get(e),i=[];for(let[e,n]of Fe(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${b(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Re(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;Me.lastIndex=0;for(let t;t=Me.exec(e);){let[a,o,s,c,l]=t,u=null;if(a[0]===`&`)u=n({kind:`entity`,name:``,tag:``,markup:a});else if(s){let t=s.toLowerCase();if(t===`img`){let e=Fe(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Ce(e.get(`src`),xe(r))??b(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Fe(c).get(`src`);if(!o&&!l){let n=e.slice(Me.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Fe(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(Me.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Ce(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(ke.has(t)){if(!o&&!l&&!Oe.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(Me.lastIndex),i=r.search(n);i!==-1&&(Me.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(Ae.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(De.has(t)){let e=Ie(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Oe.has(t)?n({kind:`void`,name:t,tag:e,markup:Le(t,c)}):n({kind:`open`,name:t,tag:e,markup:Le(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=Me.lastIndex)}return{text:r+e.slice(i),tokens:t}}function ze(e,t){for(let n of e.matchAll(/\u0002(\d+)\u0002/g))if(t.tokens[Number(n[1])].kind!==`entity`)return!0;return!1}function Be(e,t){let n=e.match(ge);return!!(n&&je.has(t.tokens[Number(n[1])].name))}function Ve(e){let t=[];return e.replace(/<a\b[^>]*>|<\/a>/g,e=>{if(e===`</a>`)return t.pop()?``:e;let n=t.length>0;return t.push(n),n?``:e})}function He(e,t){let n=[],r=e=>{let r=t.tokens[e];if(r.kind===`open`)return n.push(r.tag),r.markup;if(r.kind===`close`){let e=n.lastIndexOf(r.tag);return e===-1?``:n.splice(e).reverse().map(e=>`</${e}>`).join(``)}return r.markup},i=``,a=0,o=!1;for(let n=0;n<e.length;n++){let s=e[n];if(s===`<`)o=!0;else if(s===`>`)o=!1;else if(s===``){let s=e.indexOf(``,n+1);if(s===-1)break;let c=Number(e.slice(n+1,s));i+=e.slice(a,n)+(o&&t.tokens[c].kind!==`entity`?``:r(c)),n=s,a=s+1}}return i+e.slice(a)+n.reverse().map(e=>`</${e}>`).join(``)}var Ue=`\0`,We=``,Ge=/\u0000(\d+)\u0000/g,Ke=/^\u0000\d+\u0000$/,qe=/\u0001(\d+)\u0001/g;function Je(e,t={}){let{text:n,blocks:r}=et($e(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return it(dt(n),r);let i=Re(n);return Ve(He(it(dt(i.text,i),r),i))}function Ye(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Xe(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Ze=/`[^`\n]+`|<!--/g;function Qe(e,t){Ze.lastIndex=t;for(let t;t=Ze.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function $e(e,t={}){let n=[],r=null,i=!1,a=null,o=0;for(let s of e.split(`
|
|
3
3
|
`)){let c=o;if(o+=s.length+1,r){let e=Xe(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=Ye(s),r)){n.push({raw:s,visible:s,code:`open`});continue}if(!t.hideHtmlComments){n.push({raw:s,visible:s});continue}let l=i?a:null,u=``,d=0;for(;d<s.length;){if(i){let e=s.indexOf(`-->`,d);if(e===-1)break;d=e+3,i=!1;continue}let t=Qe(s,d);if(t===-1||e.indexOf(`-->`,c+t+4)===-1){u+=s.slice(d);break}u+=s.slice(d,t),d=t+4,i=!0}if(l){l.visible+=u,n.push({raw:s,visible:``,absent:!0});continue}let f={raw:s,visible:u};i&&(a=u.trim()===``?null:f),n.push(f)}return n}function et(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${Ue}${n.length}${Ue}`);let e=i.join(`
|
|
4
4
|
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??rt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&tt(n.raw).toLowerCase()===`mermaid`?nt(r):void 0):n.code===`body`?i.push(n.raw):n.code===`close`?o():r.push(n.visible));return i&&o(),{text:r.join(`
|
|
5
5
|
`),blocks:n}}function tt(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function nt(e){for(let t=e.length-1;t>=0;t--){let n=e[t].trim();if(!n)continue;let r=n.match(/^#{1,6}\s+(.+?)\s*#*$/)?.[1]??n.match(/^(\*\*|__)(.+)\1$/)?.[2];return r&&r.replace(/[`*_]/g,``).trim()||null}return null}function rt(e){let t=e.split(`
|
package/static/chunk-CmdZYpyj.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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};
|