@cplieger/web-terminal-ui 3.2.0 → 3.3.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/css/02-app.css +15 -2
- package/package.json +2 -2
- package/src/kernel/kernel.ts +11 -0
package/css/02-app.css
CHANGED
|
@@ -247,13 +247,26 @@
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
/* Clickable URLs
|
|
250
|
+
/* Clickable URLs. OSC 8 hyperlinks (base .term-link) underline on HOVER only:
|
|
251
|
+
an application can attach one OSC 8 link to a whole padded/bordered region —
|
|
252
|
+
e.g. a markdown link whose URL wraps inside a table cell, where the terminal
|
|
253
|
+
keeps the link open across the cell padding, the borders and the empty
|
|
254
|
+
adjacent column — so a persistent underline would bleed across the whole cell
|
|
255
|
+
and, on wrap, the full row. Hover-only matches iTerm2 / VTE / kitty. The app's
|
|
256
|
+
own text colour (which the engine renders) keeps the link discoverable at rest.
|
|
257
|
+
Auto-detected bare URLs (.term-autolink) are tightly scoped to the URL text and
|
|
258
|
+
never bleed, so they keep a subtle persistent underline. (The engine also only
|
|
259
|
+
anchors runs with real link text, so the underline hugs the text either way.) */
|
|
251
260
|
.term-link {
|
|
252
261
|
color: inherit;
|
|
253
|
-
text-decoration:
|
|
262
|
+
text-decoration: none;
|
|
254
263
|
cursor: pointer;
|
|
255
264
|
}
|
|
256
265
|
|
|
266
|
+
.term-autolink {
|
|
267
|
+
text-decoration: underline dotted;
|
|
268
|
+
}
|
|
269
|
+
|
|
257
270
|
.term-link:hover {
|
|
258
271
|
text-decoration: underline solid;
|
|
259
272
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cplieger/web-terminal-ui",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Reference touch-first browser UI for @cplieger/web-terminal-engine: a composable kernel + feature modules (tabs, activity monitor, mobile toolbar, context menu, IME, predictive echo, viewport handling) and CSS. One createTerminal() call.",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"fast-check": "4.8.0",
|
|
36
36
|
"happy-dom": "20.10.6",
|
|
37
37
|
"html-validate": "11.5.5",
|
|
38
|
-
"knip": "6.
|
|
38
|
+
"knip": "6.24.0",
|
|
39
39
|
"prettier": "3.9.4",
|
|
40
40
|
"stylelint": "17.14.0",
|
|
41
41
|
"stylelint-config-standard": "40.0.0",
|
package/src/kernel/kernel.ts
CHANGED
|
@@ -156,6 +156,17 @@ export function createTerminal(
|
|
|
156
156
|
if (!connection.sendBinary(out)) {
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
|
+
// Classic-terminal behavior (GNOME/xterm): user input re-engages follow and
|
|
160
|
+
// snaps to the bottom, so typing while scrolled up jumps to the input line.
|
|
161
|
+
// Instant (not the jump-button's smooth scroll), so it isn't janky per
|
|
162
|
+
// keystroke. This is the ONLY thing that scrolls a held view down — program
|
|
163
|
+
// output never does (the scroll controller's follow/hold job is unchanged),
|
|
164
|
+
// so scrolling up to read while output streams is preserved. A no-op on the
|
|
165
|
+
// alt screen (no scrollback) and when already following. NOTE: every caller
|
|
166
|
+
// of sendBytes today is genuine user input (typed keys, paste, mobile
|
|
167
|
+
// toolbar); if mouse tracking is ever wired through ctx.send, its motion
|
|
168
|
+
// bytes must NOT come through here or the view would snap on every move.
|
|
169
|
+
scroll.scrollToBottom();
|
|
159
170
|
for (const obs of inputObservers) {
|
|
160
171
|
obs(out);
|
|
161
172
|
}
|