typebulb 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -229,6 +229,24 @@ body {
229
229
  border-radius: 10px;
230
230
  box-shadow: 0 8px 30px rgba(0, 0, 0, .45);
231
231
  }
232
+ /* Menu-list scrollbars: the channel is ALWAYS reserved (overflow-y: scroll on all three lists) and
233
+ the scrollbar is owned — no arrow buttons, transparent track, a floating thumb only when the list
234
+ actually overflows. Native auto scrollbars made a row band's right inset depend on list length: a
235
+ project with no bulbs of its own (one collapsed fold row) ran its band 15px nearer the popover
236
+ edge than the filter box under it, and bare overflow:scroll parked a vestigial arrow-stub beside
237
+ the short list. Width stays 15px, the native width .model-head's alignment padding hardcodes.
238
+ Chromium pseudos on purpose: setting the standard scrollbar-color would disable them. */
239
+ :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar { width: 15px; }
240
+ :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar-button { display: none; }
241
+ :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar-track { background: transparent; }
242
+ :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar-thumb {
243
+ background-color: color-mix(in srgb, var(--fg) 28%, transparent);
244
+ border-radius: 8px;
245
+ /* Transparent border + padding-box clip floats a slim pill in the 15px channel. */
246
+ border: 4px solid transparent;
247
+ background-clip: padding-box;
248
+ }
249
+ :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--fg) 45%, transparent); }
232
250
  /* Popover alignment — which edge of the pill the menu aligns to (floating-UI's start/center/end
233
251
  vocabulary; "end", right edges flush and growing left, is the unnamed default above). Tagged on
234
252
  the pill's WRAP, not each popover root: a menu with several drilled-in views (the model pill's
@@ -466,7 +484,7 @@ body {
466
484
  /* The filter (.bulb-filter-control) pins at the bottom — the popover's anchored edge, so it never
467
485
  jumps as the filtered list changes height; the row list scrolls inside the capped box, resting at
468
486
  its end (newest-at-bottom) — same shape as the launcher's .servers-pop / .bulb-list. */
469
- .picker-list { display: flex; flex-direction: column; gap: .15rem; flex: 1; min-height: 0; overflow-y: auto; padding-right: 4px; }
487
+ .picker-list { display: flex; flex-direction: column; gap: .15rem; flex: 1; min-height: 0; overflow-y: scroll; padding-right: 4px; }
470
488
  /* Positioned wrapper around just the list (not the filter) so the hover-peek card anchors to the
471
489
  list's bottom edge, sitting above the filter input. */
472
490
  .picker-body { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }
@@ -829,7 +847,12 @@ a.server-port:hover { text-decoration: underline; }
829
847
  the popover cap, plain auto rows compress to each row's min-height contribution, so a full-text
830
848
  row's snippet line bleeds under the next row as overlapping text. max-content tracks never
831
849
  compress; the list scrolls, rows keep their content height. */
832
- .bulb-list { display: grid; grid-template-columns: auto 1fr auto auto auto auto; grid-auto-rows: max-content; column-gap: .6rem; row-gap: .15rem; align-items: center; align-content: start; padding-right: 4px; flex: 1; min-height: 0; overflow-y: auto; }
850
+ /* overflow-y: scroll, not auto — the scrollbar channel is 15px of the row band's right inset, so a
851
+ list short enough not to scroll (a project with no bulbs of its own: one collapsed fold row) had
852
+ its rows run 15px nearer the edge than the filter box below them. Keeping the channel always
853
+ present makes that inset one number — the same "effectively always present" the model menu's
854
+ header padding already hardcodes. (scrollbar-gutter is the stated fix and is ignored here.) */
855
+ .bulb-list { display: grid; grid-template-columns: auto 1fr auto auto auto auto; grid-auto-rows: max-content; column-gap: .6rem; row-gap: .15rem; align-items: center; align-content: start; padding-right: 4px; flex: 1; min-height: 0; overflow-y: scroll; }
833
856
  /* The scope column (TB-Batch.md Invariant 7): a seventh track heading the control cluster (before
834
857
  trust — a launch scope is an execution concern, like a trust tier), present only while some row
835
858
  carries a scope (bulbsPill.ts anyScope — rows emit a matching cell, spacer included). The B
@@ -880,7 +903,6 @@ a.server-port:hover { text-decoration: underline; }
880
903
  background: linear-gradient(var(--veil), var(--veil)), var(--panel);
881
904
  }
882
905
  .fold-row:not(:has(+ .fold-row)) { border-radius: 0 0 6px 6px; }
883
- .sample-group .caret-tri { justify-self: center; }
884
906
  .sample-group-label { grid-column: 2 / -1; color: var(--accent); }
885
907
  /* The 1fr name column: name + (in full-text mode) its hit count read together, the badge
886
908
  right-aligned at the column's end by the name's flex:1 — the session row's preview/hits layout. */
@@ -904,7 +926,10 @@ a.server-port:hover { text-decoration: underline; }
904
926
  this drifts (measured: a per-control size is a per-control seating). */
905
927
  .trust-toggle { font-size: var(--pill-font); height: var(--pill-h); padding: 0 .5rem; color: var(--muted); justify-self: center; }
906
928
  .trust-toggle:hover, .trust-toggle.on { color: var(--accent); border-color: var(--accent); }
907
- .server-stop, .bulb-launch { display: inline-flex; align-items: center; justify-content: center; width: 1.7rem; padding: 0; border-radius: 50%; margin-left: .4rem; }
929
+ /* .fold-caret shares only this geometry line (not the bordered-button rule above): the fold header's
930
+ caret rides an invisible play-button-sized box, so a samples-only list sizes the button column
931
+ exactly as a list with real buttons does, and the caret centres where the play glyphs do. */
932
+ .server-stop, .bulb-launch, .fold-caret { display: inline-flex; align-items: center; justify-content: center; width: 1.7rem; padding: 0; border-radius: 50%; margin-left: .4rem; }
908
933
  .btn-icon { width: 16px; height: 16px; }
909
934
  /* A stopped bulb's play button is dormant — the title is the primary launch target — so it's
910
935
  hidden until the row is hovered or keyboard-selected. visibility (not display) reserves its slot,
@@ -1016,7 +1041,7 @@ a.server-port:hover { text-decoration: underline; }
1016
1041
  .gitdiff-pill .icon { width: 8px; height: 12px; }
1017
1042
  .gitdiff-count { font-size: var(--pill-font); font-variant-numeric: tabular-nums; }
1018
1043
  .gitdiff-pop { width: min(480px, calc(100vw - 2rem)); }
1019
- .gitdiff-list { display: flex; flex-direction: column; gap: .15rem; flex: 1; min-height: 0; overflow-y: auto; padding-right: 4px; }
1044
+ .gitdiff-list { display: flex; flex-direction: column; gap: .15rem; flex: 1; min-height: 0; overflow-y: scroll; padding-right: 4px; }
1020
1045
  .gitdiff-row { display: flex; align-items: center; gap: .55rem; flex: none; min-height: var(--menu-row-h); padding: .05rem .45rem; border-radius: 6px; font-size: .85rem; cursor: pointer; }
1021
1046
  .gitdiff-row:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); }
1022
1047
  .gitdiff-row.active { background: color-mix(in srgb, var(--accent) 16%, transparent); }
@@ -1782,11 +1807,13 @@ html[data-theme="dark"] .masthead-logo.dark { display: block; }
1782
1807
  color: var(--fg);
1783
1808
  }
1784
1809
 
1785
- /* Path link: plain accent, underline only on hover. skip-ink:none so the
1786
- underline stays solid under a path's descenders and slashes. */
1810
+ /* Path link: plain accent, underline only on hover. skip-ink:none so the underline stays solid
1811
+ under a path's descenders and slashes; the cursor is explicit because the anchor carries no href
1812
+ (the click is a server RPC, not navigation) and so defaults to the surrounding prose's caret. */
1787
1813
  .tool-sum.link {
1788
1814
  color: var(--accent);
1789
1815
  text-decoration: none;
1816
+ cursor: pointer;
1790
1817
  }
1791
1818
  .tool-sum.link:hover { text-decoration: underline; text-decoration-skip-ink: none; }
1792
1819