@cplieger/web-terminal-ui 5.2.2 → 5.2.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.
@@ -191,13 +191,14 @@
191
191
  display: block;
192
192
  }
193
193
 
194
- /* Clickable URLs. OSC 8 hyperlinks (base .term-link) underline on HOVER only:
195
- an application can attach one OSC 8 link to a whole padded/bordered region —
196
- e.g. a markdown link whose URL wraps inside a table cell, where the terminal
197
- keeps the link open across the cell padding, the borders and the empty
198
- adjacent column — so a persistent underline would bleed across the whole cell
199
- and, on wrap, the full row. Hover-only matches iTerm2 / VTE / kitty. The app's
200
- own text colour (which the engine renders) keeps the link discoverable at rest.
194
+ /* Clickable URLs. OSC 8 hyperlinks (base .term-link) underline on HOVER where a
195
+ pointer can hover: an application can attach one OSC 8 link to a whole
196
+ padded/bordered region — e.g. a markdown link whose URL wraps inside a table
197
+ cell, where the terminal keeps the link open across the cell padding, the
198
+ borders and the empty adjacent column — so a persistent underline risks
199
+ bleeding across the whole cell and, on wrap, the full row. Hover-only matches
200
+ iTerm2 / VTE / kitty. The app's own text colour (which the engine renders)
201
+ keeps the link discoverable at rest.
201
202
  Auto-detected bare URLs (.term-autolink) are tightly scoped to the URL text and
202
203
  never bleed, so they keep a subtle persistent underline. (The engine also only
203
204
  anchors runs with real link text, so the underline hugs the text either way.) */
@@ -215,6 +216,36 @@
215
216
  text-decoration: underline solid;
216
217
  }
217
218
 
219
+ /* Where nothing can hover, hover-only is no affordance at all: a touch user sees
220
+ an app-declared link as plain text and has to guess. Measured on kiro-cli at 41
221
+ columns: it emits OSC 8 for every markdown link (its hyperlink capability
222
+ unlocks on the TERM_PROGRAM=iTerm.app identity the engine advertises), so a
223
+ phone session is full of tappable, invisible links. Give them the same subtle
224
+ dotted underline the auto-detected ones carry.
225
+
226
+ The bleed risk above is what kept this off, and it is narrower than it reads:
227
+ the engine refuses to anchor a run with no real link text, so the padding, the
228
+ box-drawing borders and the indent cells a wrapped link leaks onto the next row
229
+ stay unanchored and unmarked (verified against a captured OSC 8 link that wraps
230
+ mid-URL: the three leaked indent cells carry the href on the wire and get no
231
+ anchor). What remains is an app leaving one link open across genuine text in an
232
+ adjacent column, which would be underlined too. On a device that cannot hover,
233
+ an occasional over-underline beats a link with no affordance.
234
+
235
+ `hover: none` is the pointing device's capability, not a viewport width, so a
236
+ narrow window on a desktop keeps hover styling and a tablet with a trackpad is
237
+ treated as hoverable. */
238
+ @media (hover: none) {
239
+ :where(.wt-root) .term-link {
240
+ text-decoration: underline dotted;
241
+ }
242
+
243
+ /* Keep the pressed/solid distinction reachable without hover. */
244
+ :where(.wt-root) .term-link:active {
245
+ text-decoration: underline solid;
246
+ }
247
+ }
248
+
218
249
  /* Inline cursor cell (xterm.js convention): the character at the cursor
219
250
  position gets the .term-cursor class. CSS gives it inverted colors;
220
251
  the blink is driven by a JS interval that toggles .cursor-blink-off on
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cplieger/web-terminal-ui",
3
- "version": "5.2.2",
3
+ "version": "5.2.3",
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",
@@ -56,7 +56,7 @@
56
56
  "eslint": "10.8.0",
57
57
  "fast-check": "4.9.0",
58
58
  "happy-dom": "20.11.1",
59
- "html-validate": "11.6.0",
59
+ "html-validate": "11.6.2",
60
60
  "knip": "6.31.0",
61
61
  "prettier": "3.9.6",
62
62
  "stylelint": "17.14.1",