typebulb 0.44.1 → 0.44.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.
@@ -247,6 +247,37 @@ body {
247
247
  background-clip: padding-box;
248
248
  }
249
249
  :is(.picker-list, .bulb-list, .gitdiff-list)::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--fg) 45%, transparent); }
250
+
251
+ /* The overview ruler (overviewRuler.ts): a scroll container's bar, replaced. .oruler-host is applied
252
+ by the widget at mount — never statically — so the native bar only disappears once its replacement
253
+ is painted. BOTH hiding routes: the standard property covers Gecko, the pseudo covers WebKit, and
254
+ Blink honours either, so no engine is left showing two scrollbars. Window and marks are % of a track
255
+ that spans the pane, so they share the container's content space. Marks are pointer-inert; the track
256
+ takes the press, the drag and the wheel. Colour and the track's inset are the host's (.diff-ruler).
257
+ Cursor stays the plain arrow — that's what a scrollbar shows, and `grab` would claim otherwise. */
258
+ .oruler-host { scrollbar-width: none; }
259
+ .oruler-host::-webkit-scrollbar { width: 0; height: 0; }
260
+ .oruler { position: absolute; inset-block: 0; width: 6px; z-index: 5; cursor: default; touch-action: none; }
261
+ .oruler-mark { position: absolute; left: 0; right: 0; min-height: 3px; border-radius: 1px; pointer-events: none; }
262
+ /* Wider than the track and above the marks, so what's on screen reads as a thumb laid over the map. */
263
+ .oruler-win {
264
+ position: absolute; left: -3px; right: -3px; z-index: 1; min-height: 6px; border-radius: 3px;
265
+ pointer-events: none; background: color-mix(in srgb, var(--fg) 28%, transparent);
266
+ }
267
+ /* The menu thumbs' own two steps (28/45) — same surface, same weights. Still a wash rather than a
268
+ solid fill: the marks it covers are the ones you're about to read. */
269
+ .oruler:hover .oruler-win { background: color-mix(in srgb, var(--fg) 45%, transparent); }
270
+ /* A finger needs a target a 6px track can't give; the map is worth more widened than dropped. */
271
+ @media (pointer: coarse) {
272
+ .oruler { width: 14px; }
273
+ .oruler-win { left: -2px; right: -2px; }
274
+ }
275
+ /* Forced colours drop our tints — the window would vanish outright, and the marks' red/green IS the
276
+ information, so it keeps its own palette rather than collapsing to one system colour. */
277
+ @media (forced-colors: active) {
278
+ .oruler-win { background: transparent; border: 1px solid Highlight; }
279
+ .oruler-mark { forced-color-adjust: none; }
280
+ }
250
281
  /* Popover alignment — which edge of the pill the menu aligns to (floating-UI's start/center/end
251
282
  vocabulary; "end", right edges flush and growing left, is the unnamed default above). Tagged on
252
283
  the pill's WRAP, not each popover root: a menu with several drilled-in views (the model pill's
@@ -1081,11 +1112,17 @@ a.server-port:hover { text-decoration: underline; }
1081
1112
  .diff-doc { flex: 1; min-height: 0; display: flex; flex-direction: column; outline: none; }
1082
1113
  .diff-doc-body {
1083
1114
  flex: 1; min-height: 0; overflow: auto;
1084
- scrollbar-gutter: stable both-edges;
1085
- padding: .75rem 1.75rem 2.5rem;
1115
+ /* No scrollbar-gutter: the native bar is hidden (.oruler-host), so the 15px it used to reserve on
1116
+ each edge rides in the padding instead — same metrics, and the right one is the ruler's channel. */
1117
+ padding: .75rem calc(1.75rem + 15px) 2.5rem;
1086
1118
  font: .78rem/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1087
1119
  white-space: pre-wrap; word-break: break-word;
1088
1120
  }
1121
+ /* The scroller is the focusable element (it owns the paging keys), but a ring round a full-bleed pane
1122
+ is a box round the whole screen. Keyboard focus shows on the ruler's window instead — the thing the
1123
+ paging keys actually move, and a real indicator rather than none at all. */
1124
+ .diff-doc-body:focus { outline: none; }
1125
+ .diff-doc-body:focus-visible ~ .diff-ruler .oruler-win { background: color-mix(in srgb, var(--accent) 55%, transparent); }
1089
1126
  .diff-doc-empty, .diff-doc-trunc { color: var(--muted); padding: .4rem 0; }
1090
1127
  /* The wrong-cwd empty state (Root.#cwdHint): centered over the empty transcript. */
1091
1128
  .cwd-hint { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; gap: .5rem; padding: 2rem; color: var(--muted); font-size: .9rem; max-width: 40rem; margin-inline: auto; }
@@ -1098,16 +1135,13 @@ a.server-port:hover { text-decoration: underline; }
1098
1135
  camouflage against red tint more than anything does against green. */
1099
1136
  .diff-doc-body .udiff-add { background: color-mix(in srgb, var(--diff-add) 15%, transparent); }
1100
1137
  .diff-doc-body .udiff-del { background: color-mix(in srgb, var(--err) 18%, transparent); }
1101
- /* The overview ruler — VS Code's scrollbar change-marks, owned since the native scrollbar can't be
1102
- painted: a thin track beside the scrollbar (17px clears Windows Chromium's classic bar — plain px
1103
- on a desktop-only surface, the menus' own stance), red/green marks at each change run's fractional
1104
- position, min-height so a one-line change stays visible. The wrapper keeps it overlaid rather than
1105
- scrolling with the body. Marks are pointer-inert so a click anywhere on the track jumps. */
1138
+ /* The ruler's diff clothing — red/green per change run; it rides in the channel the body's right
1139
+ padding reserves, where the scrollbar it replaces used to be. Geometry, the window and the click
1140
+ are the shared widget's. The wrapper keeps it overlaid rather than scrolling with the body. */
1106
1141
  .diff-doc-scroll { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }
1107
- .diff-ruler { position: absolute; top: 2px; bottom: 2px; right: 17px; width: 6px; cursor: pointer; z-index: 5; }
1108
- .diff-ruler-mark { position: absolute; left: 0; right: 0; min-height: 3px; border-radius: 1px; pointer-events: none; }
1109
- .diff-ruler-mark.add { background: var(--diff-add); opacity: .8; }
1110
- .diff-ruler-mark.del { background: var(--err); opacity: .8; }
1142
+ .diff-ruler { right: 4px; }
1143
+ .diff-ruler .oruler-mark.add { background: var(--diff-add); opacity: .8; }
1144
+ .diff-ruler .oruler-mark.del { background: var(--err); opacity: .8; }
1111
1145
  /* messages */
1112
1146
  .messages {
1113
1147
  flex: 1;