prreviewbuddy 0.52.2 → 0.53.1
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 +38 -0
- package/dist/{delete_review-BiV1aBpx.js → delete_review-DMJXD3bf.js} +175 -82
- package/dist/main.js +1 -1
- package/dist/server.js +357 -57
- package/package.json +1 -1
- package/static/shell.css +145 -22
- package/static/workspace.js +35 -27
package/static/shell.css
CHANGED
|
@@ -3177,8 +3177,7 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
3177
3177
|
.prb-index[data-selecting] .prb-card-link { padding-left: 42px; }
|
|
3178
3178
|
/* A ticked row is legible without finding its box, which matters most on the rows a search has
|
|
3179
3179
|
just brought back into view. */
|
|
3180
|
-
.prb-card[data-selected] { border-color: var(--brand); }
|
|
3181
|
-
.prb-card[data-selected] .prb-card-link { background: var(--brand-muted); }
|
|
3180
|
+
.prb-card[data-selected] { border-color: var(--brand); background: var(--brand-muted); }
|
|
3182
3181
|
/* Nothing in the row navigates while selecting, so nothing in it should look like it might. */
|
|
3183
3182
|
.prb-index[data-selecting] .prb-card-link { cursor: default; }
|
|
3184
3183
|
|
|
@@ -4543,7 +4542,7 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
4543
4542
|
line-height: var(--lh-body);
|
|
4544
4543
|
color: var(--pane-ink-muted);
|
|
4545
4544
|
}
|
|
4546
|
-
.prb-kiss-kept-title {
|
|
4545
|
+
.prb-kiss-kept-title { font-weight: 600; color: var(--pane-ink); }
|
|
4547
4546
|
|
|
4548
4547
|
/* What validation withdrew, in the amber the disclosure strip already uses for exactly this. */
|
|
4549
4548
|
.prb-kiss-audit {
|
|
@@ -4668,29 +4667,153 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
4668
4667
|
.prb-kiss-evidence .prb-kiss-locations { margin-top: 4px; }
|
|
4669
4668
|
.prb-kiss-draft blockquote { margin: 0; font-size: var(--t-body); line-height: var(--lh-body); color: var(--pane-ink); }
|
|
4670
4669
|
|
|
4671
|
-
/*
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
.prb-kiss-
|
|
4675
|
-
.prb-kiss-
|
|
4676
|
-
|
|
4670
|
+
/* ── KISS decisions ──
|
|
4671
|
+
The card's title row holds Copy and Ask Buddy as a finding's does. The footer holds what acts on
|
|
4672
|
+
the recommendation: Open file and Copy draft comment on the left, the decision on the right. */
|
|
4673
|
+
.prb-kiss-rec-title-row { display: flex; align-items: flex-start; gap: 8px; }
|
|
4674
|
+
.prb-kiss-rec-title-row > .prb-kiss-rec-title { flex: 1; min-width: 0; }
|
|
4675
|
+
.prb-kiss-rec-title:focus { outline: none; }
|
|
4676
|
+
.prb-kiss-rec-title:focus-visible { outline: 2px solid var(--pane-accent); outline-offset: 2px; border-radius: 4px; }
|
|
4677
|
+
|
|
4678
|
+
.prb-kiss-decision-status {
|
|
4679
|
+
padding: 2px 8px;
|
|
4680
|
+
border-radius: 999px;
|
|
4681
|
+
font-size: var(--t-micro);
|
|
4682
|
+
white-space: nowrap;
|
|
4683
|
+
background: rgba(15, 23, 42, 0.05);
|
|
4684
|
+
color: var(--pane-ink-muted);
|
|
4685
|
+
}
|
|
4686
|
+
/* Accepted in the pane's accent, declined in neutral: two ordinary answers, neither of them a
|
|
4687
|
+
warning. Green would say "fixed", which a decision about a suggestion is not. */
|
|
4688
|
+
.prb-kiss-decision-status[data-kiss-status='accepted'] { background: rgba(147, 51, 234, 0.1); color: var(--pane-accent-ink); }
|
|
4689
|
+
.prb-kiss-decision-status[data-kiss-status='declined'] { background: rgba(15, 23, 42, 0.08); color: var(--pane-ink); }
|
|
4690
|
+
.prb-kiss-stale {
|
|
4691
|
+
padding: 1px 7px;
|
|
4692
|
+
border-radius: 999px;
|
|
4693
|
+
border: 1px solid rgba(180, 83, 9, 0.3);
|
|
4694
|
+
font-size: var(--t-micro);
|
|
4695
|
+
color: #9a3412;
|
|
4696
|
+
white-space: nowrap;
|
|
4697
|
+
}
|
|
4698
|
+
|
|
4699
|
+
.prb-kiss-rec-actions {
|
|
4700
|
+
display: flex;
|
|
4701
|
+
flex-wrap: wrap;
|
|
4677
4702
|
align-items: center;
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4703
|
+
justify-content: space-between;
|
|
4704
|
+
gap: 8px 12px;
|
|
4705
|
+
margin-top: 14px;
|
|
4706
|
+
padding-top: 12px;
|
|
4707
|
+
border-top: 1px solid var(--pane-line);
|
|
4708
|
+
}
|
|
4709
|
+
.prb-kiss-rec-actions-aside { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
|
|
4710
|
+
.prb-kiss-decide-group { display: inline-flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
|
|
4711
|
+
|
|
4712
|
+
.prb-kiss-open-file,
|
|
4713
|
+
.prb-kiss-decide,
|
|
4714
|
+
.prb-kiss-run-again,
|
|
4715
|
+
.prb-kiss-fresh-run,
|
|
4716
|
+
.prb-kiss-run-cancel,
|
|
4717
|
+
.prb-kiss-decision-retry {
|
|
4718
|
+
padding: 5px 12px;
|
|
4719
|
+
border-radius: 6px;
|
|
4720
|
+
border: 1px solid var(--pane-line);
|
|
4721
|
+
background: var(--pane-surface);
|
|
4722
|
+
font: inherit;
|
|
4723
|
+
font-size: var(--t-meta);
|
|
4724
|
+
font-weight: 600;
|
|
4683
4725
|
color: var(--pane-ink-muted);
|
|
4684
|
-
|
|
4685
|
-
|
|
4726
|
+
white-space: nowrap;
|
|
4727
|
+
cursor: pointer;
|
|
4728
|
+
}
|
|
4729
|
+
.prb-kiss-open-file:hover,
|
|
4730
|
+
.prb-kiss-decide:hover:not(:disabled),
|
|
4731
|
+
.prb-kiss-run-again:hover,
|
|
4732
|
+
.prb-kiss-fresh-run:hover,
|
|
4733
|
+
.prb-kiss-run-cancel:hover,
|
|
4734
|
+
.prb-kiss-decision-retry:hover { border-color: rgba(15, 23, 42, 0.3); color: var(--pane-ink); }
|
|
4735
|
+
.prb-kiss-decide[aria-pressed='true'] { border-color: rgba(147, 51, 234, 0.45); background: rgba(147, 51, 234, 0.08); color: var(--pane-accent-ink); }
|
|
4736
|
+
.prb-kiss-decide:disabled { cursor: progress; opacity: 0.6; }
|
|
4737
|
+
:is(.prb-kiss-open-file, .prb-kiss-decide, .prb-kiss-run-again, .prb-kiss-fresh-run, .prb-kiss-run-cancel, .prb-kiss-decision-retry):focus-visible {
|
|
4738
|
+
outline: 2px solid var(--pane-accent);
|
|
4739
|
+
outline-offset: 1px;
|
|
4740
|
+
}
|
|
4741
|
+
|
|
4742
|
+
/* Copy draft comment and Copy recommendations: the finding copy control with its word showing.
|
|
4743
|
+
The word is the label, so the hover bubble that repeats it is not drawn; after a click the
|
|
4744
|
+
word itself says Copied or Copy failed. */
|
|
4745
|
+
.prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.pr-helper-finding-copy {
|
|
4746
|
+
width: auto;
|
|
4747
|
+
height: auto;
|
|
4748
|
+
margin: 0;
|
|
4749
|
+
gap: 5px;
|
|
4750
|
+
padding: 5px 8px;
|
|
4751
|
+
font-size: var(--t-meta);
|
|
4686
4752
|
font-weight: 600;
|
|
4687
|
-
|
|
4753
|
+
color: var(--pane-ink-muted);
|
|
4754
|
+
}
|
|
4755
|
+
.prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-finding-copy::after { display: none; }
|
|
4756
|
+
.prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy .pr-helper-msg-copy-label[hidden] { display: none; }
|
|
4757
|
+
.prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.copied { color: var(--pane-success); }
|
|
4758
|
+
.prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.failed { color: var(--pane-danger); }
|
|
4759
|
+
.prb-doc .prb-kiss-handoff .pr-helper-msg-copy.pr-helper-finding-copy { border: 1px solid var(--pane-line); background: var(--pane-surface); }
|
|
4760
|
+
.prb-doc .prb-kiss-handoff .pr-helper-msg-copy:disabled { cursor: default; opacity: 0.5; }
|
|
4761
|
+
|
|
4762
|
+
.prb-kiss-decision-error { flex-basis: 100%; margin: 0; font-size: var(--t-meta); color: #9a3412; }
|
|
4763
|
+
.prb-kiss-decision-retry { margin-left: 6px; padding: 2px 8px; }
|
|
4764
|
+
|
|
4765
|
+
.prb-kiss-handoff {
|
|
4766
|
+
display: flex;
|
|
4767
|
+
flex-wrap: wrap;
|
|
4768
|
+
align-items: center;
|
|
4769
|
+
gap: 6px 12px;
|
|
4770
|
+
margin: 0 0 16px;
|
|
4771
|
+
}
|
|
4772
|
+
.prb-kiss-handoff-note { margin: 0; font-size: var(--t-meta); line-height: var(--lh-body); color: var(--pane-ink-muted); }
|
|
4773
|
+
.prb-kiss-progress { margin: 0 0 14px; }
|
|
4774
|
+
.prb-kiss-decided { margin-top: 8px; }
|
|
4775
|
+
|
|
4776
|
+
/* Whose code the run was about, as a fact of the run beside its other facts. */
|
|
4777
|
+
.prb-kiss-perspective { margin-left: auto; font-size: var(--t-meta); color: var(--pane-ink-muted); white-space: nowrap; }
|
|
4778
|
+
.prb-doc .prb-doc-head .prb-kiss-perspective + .prb-doc-provenance { margin-left: 12px; }
|
|
4779
|
+
.prb-doc .prb-doc-head .prb-kiss-run-again { align-self: center; margin-left: 8px; padding: 3px 10px; }
|
|
4780
|
+
.prb-doc .prb-doc-head .prb-kiss-run-again + .prb-focus-toggle { margin-left: 0; }
|
|
4781
|
+
|
|
4782
|
+
.prb-kiss-run-dialog {
|
|
4783
|
+
width: min(440px, calc(100vw - 32px));
|
|
4784
|
+
padding: 18px 20px;
|
|
4785
|
+
border: 1px solid var(--pane-line);
|
|
4786
|
+
border-radius: 12px;
|
|
4787
|
+
background: var(--pane-surface);
|
|
4788
|
+
color: var(--pane-ink);
|
|
4789
|
+
}
|
|
4790
|
+
.prb-kiss-run-dialog::backdrop { background: rgba(15, 23, 42, 0.35); }
|
|
4791
|
+
.prb-kiss-run-dialog-title { margin: 0 0 10px; font-size: var(--t-section); font-weight: 600; }
|
|
4792
|
+
.prb-kiss-run-dialog .prb-kiss-run { margin: 0; }
|
|
4793
|
+
.prb-kiss-run-cancel { margin-top: 10px; }
|
|
4794
|
+
|
|
4795
|
+
.prb-kiss-fresh-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px !important; }
|
|
4796
|
+
.prb-kiss-fresh-actions .prb-kiss-fresh-dismiss { margin-top: 0; }
|
|
4797
|
+
.prb-kiss-fresh[data-collapsed] { padding: 8px 12px; }
|
|
4798
|
+
.prb-kiss-fresh[data-collapsed] p { font-size: var(--t-meta); }
|
|
4799
|
+
.prb-kiss-fresh[data-collapsed] .prb-kiss-fresh-run { margin-left: 6px; padding: 2px 8px; }
|
|
4800
|
+
|
|
4801
|
+
/* Complexity worth keeping: folded twice. The heading says considered reasoning is here; opened,
|
|
4802
|
+
each item is its decision and its reason on one row; one more click is the rationale and files. */
|
|
4803
|
+
.prb-kiss-justified { margin: 22px 0 0; }
|
|
4804
|
+
.prb-kiss-justified-summary {
|
|
4805
|
+
font-size: var(--t-pill);
|
|
4806
|
+
font-weight: 700;
|
|
4807
|
+
letter-spacing: 0.07em;
|
|
4808
|
+
text-transform: uppercase;
|
|
4809
|
+
color: var(--pane-ink-muted);
|
|
4688
4810
|
cursor: pointer;
|
|
4689
4811
|
}
|
|
4690
|
-
.prb-kiss-
|
|
4691
|
-
.prb-kiss-
|
|
4692
|
-
.prb-kiss-
|
|
4693
|
-
.prb-kiss-
|
|
4812
|
+
.prb-kiss-justified[open] > .prb-kiss-justified-summary { margin-bottom: 10px; }
|
|
4813
|
+
.prb-kiss-kept > .prb-kiss-kept-summary { cursor: pointer; list-style-position: outside; }
|
|
4814
|
+
.prb-kiss-kept-summary .prb-kiss-kept-title { margin: 0; }
|
|
4815
|
+
.prb-kiss-kept-reason { display: block; margin-top: 2px; color: var(--pane-ink-muted); font-weight: 400; }
|
|
4816
|
+
.prb-kiss-kept[open] > .prb-kiss-kept-summary { margin-bottom: 8px; }
|
|
4694
4817
|
|
|
4695
4818
|
.prb-kiss-locations { margin: 12px 0 0; }
|
|
4696
4819
|
.prb-kiss-locations-list { margin: 0; padding: 0; list-style: none; }
|
|
@@ -5185,7 +5308,7 @@ body .prb-body[data-focus='buddy'] .prb-msg-user { max-width: min(90%, 78ch); }
|
|
|
5185
5308
|
Copy. Positioned as the flex child it is, the way `.prb-header .prb-menu` is, so the panel hangs
|
|
5186
5309
|
off the trigger rather than off a corner of the card. The panel is in the card's flow inside the
|
|
5187
5310
|
scrolling pane, so near the bottom it extends the scroll rather than being cut off. */
|
|
5188
|
-
.prb-doc .pr-helper-issue-title-row .prb-menu {
|
|
5311
|
+
.prb-doc :is(.pr-helper-issue-title-row, .prb-kiss-rec-title-row) .prb-menu {
|
|
5189
5312
|
position: relative;
|
|
5190
5313
|
top: auto;
|
|
5191
5314
|
right: auto;
|