@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 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: underline dotted;
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.2.0",
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.23.0",
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",
@@ -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
  }