typebulb 0.44.2 → 0.45.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.
- package/README.md +5 -3
- package/SKILL.md +7 -5
- package/dist/agents/claude/client.js +204 -178
- package/dist/agents/claude/styles.css +53 -23
- package/dist/agents/pi/client.js +198 -172
- package/dist/agents/pi/matchu-patchu.ts +1 -1
- package/dist/agents/pi/styles.css +53 -23
- package/dist/index.js +36 -7
- package/dist/render.js +89 -63
- package/dist/servers.js +28 -2
- package/package.json +1 -1
|
@@ -229,25 +229,55 @@ body {
|
|
|
229
229
|
border-radius: 10px;
|
|
230
230
|
box-shadow: 0 8px 30px rgba(0, 0, 0, .45);
|
|
231
231
|
}
|
|
232
|
-
/*
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
Native auto scrollbars made a row band's right inset depend on list length: a
|
|
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
|
|
236
235
|
project with no bulbs of its own (one collapsed fold row) ran its band 15px nearer the popover
|
|
237
236
|
edge than the filter box under it, and bare overflow:scroll parked a vestigial arrow-stub beside
|
|
238
237
|
the short list. Width stays 15px, the native width .model-head's alignment padding hardcodes.
|
|
239
238
|
Chromium pseudos on purpose: setting the standard scrollbar-color would disable them. */
|
|
240
|
-
:is(.picker-list, .bulb-list, .gitdiff-list
|
|
241
|
-
:is(.picker-list, .bulb-list, .gitdiff-list
|
|
242
|
-
:is(.picker-list, .bulb-list, .gitdiff-list
|
|
243
|
-
:is(.picker-list, .bulb-list, .gitdiff-list
|
|
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 {
|
|
244
243
|
background-color: color-mix(in srgb, var(--fg) 28%, transparent);
|
|
245
244
|
border-radius: 8px;
|
|
246
245
|
/* Transparent border + padding-box clip floats a slim pill in the 15px channel. */
|
|
247
246
|
border: 4px solid transparent;
|
|
248
247
|
background-clip: padding-box;
|
|
249
248
|
}
|
|
250
|
-
:is(.picker-list, .bulb-list, .gitdiff-list
|
|
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
|
+
}
|
|
251
281
|
/* Popover alignment — which edge of the pill the menu aligns to (floating-UI's start/center/end
|
|
252
282
|
vocabulary; "end", right edges flush and growing left, is the unnamed default above). Tagged on
|
|
253
283
|
the pill's WRAP, not each popover root: a menu with several drilled-in views (the model pill's
|
|
@@ -1082,11 +1112,17 @@ a.server-port:hover { text-decoration: underline; }
|
|
|
1082
1112
|
.diff-doc { flex: 1; min-height: 0; display: flex; flex-direction: column; outline: none; }
|
|
1083
1113
|
.diff-doc-body {
|
|
1084
1114
|
flex: 1; min-height: 0; overflow: auto;
|
|
1085
|
-
scrollbar-gutter:
|
|
1086
|
-
|
|
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;
|
|
1087
1118
|
font: .78rem/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
1088
1119
|
white-space: pre-wrap; word-break: break-word;
|
|
1089
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); }
|
|
1090
1126
|
.diff-doc-empty, .diff-doc-trunc { color: var(--muted); padding: .4rem 0; }
|
|
1091
1127
|
/* The wrong-cwd empty state (Root.#cwdHint): centered over the empty transcript. */
|
|
1092
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; }
|
|
@@ -1099,19 +1135,13 @@ a.server-port:hover { text-decoration: underline; }
|
|
|
1099
1135
|
camouflage against red tint more than anything does against green. */
|
|
1100
1136
|
.diff-doc-body .udiff-add { background: color-mix(in srgb, var(--diff-add) 15%, transparent); }
|
|
1101
1137
|
.diff-doc-body .udiff-del { background: color-mix(in srgb, var(--err) 18%, transparent); }
|
|
1102
|
-
/* The
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
position, min-height so a one-line change stays visible. It spans the pane edge to edge, which is
|
|
1106
|
-
the thumb's track exactly once the arrow buttons are gone — that's why the doc's bar is owned.
|
|
1107
|
-
What drift is left on a tall doc is Chromium clamping the thumb to a minimum height, shortening
|
|
1108
|
-
its travel; a static ruler can't follow that. The wrapper keeps it overlaid rather than scrolling
|
|
1109
|
-
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. */
|
|
1110
1141
|
.diff-doc-scroll { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }
|
|
1111
|
-
.diff-ruler {
|
|
1112
|
-
.diff-ruler-mark {
|
|
1113
|
-
.diff-ruler-mark.
|
|
1114
|
-
.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; }
|
|
1115
1145
|
/* messages */
|
|
1116
1146
|
.messages {
|
|
1117
1147
|
flex: 1;
|