@blit-sh/core 0.18.0 → 0.20.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.
Files changed (58) hide show
  1. package/dist/BlitConnection.d.ts +16 -2
  2. package/dist/BlitConnection.d.ts.map +1 -1
  3. package/dist/BlitConnection.js +185 -9
  4. package/dist/BlitConnection.js.map +1 -1
  5. package/dist/BlitSurfaceCanvas.d.ts +122 -0
  6. package/dist/BlitSurfaceCanvas.d.ts.map +1 -0
  7. package/dist/BlitSurfaceCanvas.js +582 -0
  8. package/dist/BlitSurfaceCanvas.js.map +1 -0
  9. package/dist/BlitTerminalSurface.d.ts +12 -0
  10. package/dist/BlitTerminalSurface.d.ts.map +1 -1
  11. package/dist/BlitTerminalSurface.js +51 -1
  12. package/dist/BlitTerminalSurface.js.map +1 -1
  13. package/dist/BlitWorkspace.d.ts +2 -0
  14. package/dist/BlitWorkspace.d.ts.map +1 -1
  15. package/dist/BlitWorkspace.js +27 -0
  16. package/dist/BlitWorkspace.js.map +1 -1
  17. package/dist/SurfaceStore.d.ts +69 -0
  18. package/dist/SurfaceStore.d.ts.map +1 -0
  19. package/dist/SurfaceStore.js +494 -0
  20. package/dist/SurfaceStore.js.map +1 -0
  21. package/dist/TerminalStore.d.ts.map +1 -1
  22. package/dist/TerminalStore.js +4 -1
  23. package/dist/TerminalStore.js.map +1 -1
  24. package/dist/bsp/index.d.ts +1 -1
  25. package/dist/bsp/index.d.ts.map +1 -1
  26. package/dist/bsp/index.js +1 -1
  27. package/dist/bsp/index.js.map +1 -1
  28. package/dist/bsp/layout.d.ts +9 -1
  29. package/dist/bsp/layout.d.ts.map +1 -1
  30. package/dist/bsp/layout.js +36 -4
  31. package/dist/bsp/layout.js.map +1 -1
  32. package/dist/gl-renderer.d.ts +6 -0
  33. package/dist/gl-renderer.d.ts.map +1 -1
  34. package/dist/gl-renderer.js +132 -0
  35. package/dist/gl-renderer.js.map +1 -1
  36. package/dist/index.d.ts +7 -2
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/keyboard.d.ts +6 -0
  41. package/dist/keyboard.d.ts.map +1 -1
  42. package/dist/keyboard.js +25 -0
  43. package/dist/keyboard.js.map +1 -1
  44. package/dist/protocol.d.ts +19 -0
  45. package/dist/protocol.d.ts.map +1 -1
  46. package/dist/protocol.js +124 -1
  47. package/dist/protocol.js.map +1 -1
  48. package/dist/transports/webrtc-share.d.ts.map +1 -1
  49. package/dist/transports/webrtc-share.js +162 -61
  50. package/dist/transports/webrtc-share.js.map +1 -1
  51. package/dist/transports/webtransport.d.ts.map +1 -1
  52. package/dist/transports/webtransport.js +6 -2
  53. package/dist/transports/webtransport.js.map +1 -1
  54. package/dist/types.d.ts +41 -0
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js +29 -0
  57. package/dist/types.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,582 @@
1
+ import { CODEC_SUPPORT_H264, CODEC_SUPPORT_AV1, CODEC_SUPPORT_H265, } from "./types";
2
+ import { SURFACE_POINTER_DOWN, SURFACE_POINTER_UP, SURFACE_POINTER_MOVE, } from "./protocol";
3
+ /** Cached codec support bitmask. Computed once, reused for all resize messages. */
4
+ let _codecSupport = null;
5
+ /**
6
+ * Probe which video codecs the browser can decode via WebCodecs and return
7
+ * a bitmask of CODEC_SUPPORT_* flags. Result is cached after first call.
8
+ */
9
+ export async function detectCodecSupport() {
10
+ if (_codecSupport !== null)
11
+ return _codecSupport;
12
+ if (typeof VideoDecoder === "undefined") {
13
+ _codecSupport = 0;
14
+ return 0;
15
+ }
16
+ let mask = 0;
17
+ const checks = [
18
+ ["avc1.42001f", CODEC_SUPPORT_H264],
19
+ ["av01.0.01M.08", CODEC_SUPPORT_AV1],
20
+ ["hev1.1.6.L93.B0", CODEC_SUPPORT_H265],
21
+ ];
22
+ await Promise.all(checks.map(async ([codec, bit]) => {
23
+ try {
24
+ const r = await VideoDecoder.isConfigSupported({
25
+ codec,
26
+ codedWidth: 1920,
27
+ codedHeight: 1080,
28
+ });
29
+ if (r.supported)
30
+ mask |= bit;
31
+ }
32
+ catch {
33
+ // not supported
34
+ }
35
+ }));
36
+ _codecSupport = mask;
37
+ return mask;
38
+ }
39
+ /** Return the cached codec support, or 0 if not yet probed. */
40
+ export function getCodecSupport() {
41
+ return _codecSupport ?? 0;
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // CapsLock state tracking
45
+ // ---------------------------------------------------------------------------
46
+ // Track the believed CapsLock state inside each connection's compositor.
47
+ // Keyed by connectionId. Defaults to false because XkbConfig::default()
48
+ // starts with all lock modifiers off. A module-level map is used so the
49
+ // state survives across BlitSurfaceCanvas instances that share the same
50
+ // connection (e.g. switching surfaces in a BSP layout).
51
+ const _compositorCapsLock = new Map();
52
+ // ---------------------------------------------------------------------------
53
+ // EVDEV keycode map (DOM KeyboardEvent.code → Linux evdev scancode)
54
+ // ---------------------------------------------------------------------------
55
+ const EVDEV_MAP = {
56
+ Escape: 1,
57
+ Digit1: 2,
58
+ Digit2: 3,
59
+ Digit3: 4,
60
+ Digit4: 5,
61
+ Digit5: 6,
62
+ Digit6: 7,
63
+ Digit7: 8,
64
+ Digit8: 9,
65
+ Digit9: 10,
66
+ Digit0: 11,
67
+ Minus: 12,
68
+ Equal: 13,
69
+ Backspace: 14,
70
+ Tab: 15,
71
+ KeyQ: 16,
72
+ KeyW: 17,
73
+ KeyE: 18,
74
+ KeyR: 19,
75
+ KeyT: 20,
76
+ KeyY: 21,
77
+ KeyU: 22,
78
+ KeyI: 23,
79
+ KeyO: 24,
80
+ KeyP: 25,
81
+ BracketLeft: 26,
82
+ BracketRight: 27,
83
+ Enter: 28,
84
+ ControlLeft: 29,
85
+ KeyA: 30,
86
+ KeyS: 31,
87
+ KeyD: 32,
88
+ KeyF: 33,
89
+ KeyG: 34,
90
+ KeyH: 35,
91
+ KeyJ: 36,
92
+ KeyK: 37,
93
+ KeyL: 38,
94
+ Semicolon: 39,
95
+ Quote: 40,
96
+ Backquote: 41,
97
+ ShiftLeft: 42,
98
+ Backslash: 43,
99
+ KeyZ: 44,
100
+ KeyX: 45,
101
+ KeyC: 46,
102
+ KeyV: 47,
103
+ KeyB: 48,
104
+ KeyN: 49,
105
+ KeyM: 50,
106
+ Comma: 51,
107
+ Period: 52,
108
+ Slash: 53,
109
+ ShiftRight: 54,
110
+ AltLeft: 56,
111
+ Space: 57,
112
+ CapsLock: 58,
113
+ F1: 59,
114
+ F2: 60,
115
+ F3: 61,
116
+ F4: 62,
117
+ F5: 63,
118
+ F6: 64,
119
+ F7: 65,
120
+ F8: 66,
121
+ F9: 67,
122
+ F10: 68,
123
+ F11: 87,
124
+ F12: 88,
125
+ ArrowUp: 103,
126
+ ArrowLeft: 105,
127
+ ArrowRight: 106,
128
+ ArrowDown: 108,
129
+ Home: 102,
130
+ End: 107,
131
+ PageUp: 104,
132
+ PageDown: 109,
133
+ Insert: 110,
134
+ Delete: 111,
135
+ ControlRight: 97,
136
+ AltRight: 100,
137
+ MetaLeft: 125,
138
+ MetaRight: 126,
139
+ };
140
+ function domKeyToEvdev(code) {
141
+ return EVDEV_MAP[code] ?? 0;
142
+ }
143
+ /**
144
+ * Framework-agnostic surface canvas. Manages a `<canvas>` element that renders
145
+ * decoded video frames from a Wayland-like surface, and forwards
146
+ * pointer / keyboard / wheel input back to the server.
147
+ *
148
+ * Framework bindings (React, Solid, etc.) attach this to a container element
149
+ * and forward option changes via setters.
150
+ */
151
+ export class BlitSurfaceCanvas {
152
+ constructor(options) {
153
+ this.container = null;
154
+ this.canvas = null;
155
+ this.ctx = null;
156
+ this.disposed = false;
157
+ /** Track which mouse buttons are currently pressed so we can send synthetic
158
+ * pointer-up events on dispose — preventing a dangling compositor grab. */
159
+ this.pressedButtons = new Set();
160
+ /** Track which keyboard keys are currently pressed (evdev keycodes) so we
161
+ * can release them when focus leaves or the canvas is disposed — preventing
162
+ * stuck modifiers and runaway key-repeat in the compositor. */
163
+ this.pressedKeys = new Set();
164
+ /**
165
+ * When non-null the canvas internal resolution is controlled externally
166
+ * (by the framework binding's ResizeObserver) and frames are drawn
167
+ * scaled to fill the canvas rather than the canvas being resized to
168
+ * match each frame.
169
+ */
170
+ this._displaySize = null;
171
+ // subscriptions
172
+ this.unsubFrame = null;
173
+ this.unsubChange = null;
174
+ // bound event handlers
175
+ this.boundMouseDown = null;
176
+ this.boundMouseUp = null;
177
+ this.boundMouseMove = null;
178
+ this.boundWheel = null;
179
+ this.boundKeyDown = null;
180
+ this.boundKeyUp = null;
181
+ this.boundFocus = null;
182
+ this.boundBlur = null;
183
+ this.boundContextMenu = null;
184
+ this._workspace = options.workspace;
185
+ this._connectionId = options.connectionId;
186
+ this._surfaceId = options.surfaceId;
187
+ }
188
+ // -----------------------------------------------------------------------
189
+ // Public API
190
+ // -----------------------------------------------------------------------
191
+ get surfaceInfo() {
192
+ return this.surface;
193
+ }
194
+ get canvasElement() {
195
+ return this.canvas;
196
+ }
197
+ attach(container) {
198
+ if (this.disposed)
199
+ return;
200
+ this.container = container;
201
+ const canvas = document.createElement("canvas");
202
+ canvas.tabIndex = 0;
203
+ canvas.style.display = "block";
204
+ canvas.style.outline = "none";
205
+ canvas.style.width = "100%";
206
+ canvas.style.height = "100%";
207
+ if (this._displaySize) {
208
+ // Resizable mode: canvas resolution is pinned by the framework
209
+ // binding. No object-fit needed since canvas.width/height matches
210
+ // the container's physical pixel size.
211
+ canvas.width = this._displaySize.width;
212
+ canvas.height = this._displaySize.height;
213
+ }
214
+ else {
215
+ // Non-resizable (thumbnail) mode: scale to fit.
216
+ canvas.style.objectFit = "contain";
217
+ canvas.width = this.surface?.width || 640;
218
+ canvas.height = this.surface?.height || 480;
219
+ }
220
+ container.appendChild(canvas);
221
+ this.canvas = canvas;
222
+ this.ctx = canvas.getContext("2d");
223
+ this.subscribe();
224
+ this.attachEvents();
225
+ }
226
+ dispose() {
227
+ if (this.disposed)
228
+ return;
229
+ this.disposed = true;
230
+ this.releaseAllKeys();
231
+ this.releaseAllButtons();
232
+ this.serverUnsubscribe();
233
+ this.detachEvents();
234
+ this.unsubFrame?.();
235
+ this.unsubChange?.();
236
+ this.unsubFrame = null;
237
+ this.unsubChange = null;
238
+ if (this.canvas && this.container) {
239
+ this.container.removeChild(this.canvas);
240
+ }
241
+ this.canvas = null;
242
+ this.ctx = null;
243
+ this.container = null;
244
+ }
245
+ setConnectionId(connectionId) {
246
+ if (this._connectionId === connectionId)
247
+ return;
248
+ this._connectionId = connectionId;
249
+ this.resubscribe();
250
+ }
251
+ setSurfaceId(surfaceId) {
252
+ if (this._surfaceId === surfaceId)
253
+ return;
254
+ this._surfaceId = surfaceId;
255
+ this.resubscribe();
256
+ }
257
+ /**
258
+ * Request the server to resize the surface to the given pixel dimensions.
259
+ * The server will respond with a SURFACE_RESIZED message that updates the
260
+ * surface metadata and canvas size via the normal onChange path.
261
+ */
262
+ requestResize(width, height, scale120 = 0, codecSupport = 0) {
263
+ const conn = this.getConn();
264
+ if (!conn || !this.surface)
265
+ return;
266
+ const w = Math.round(width);
267
+ const h = Math.round(height);
268
+ if (w <= 0 || h <= 0)
269
+ return;
270
+ conn.sendSurfaceResize(this.surface.sessionId, this._surfaceId, w, h, scale120, codecSupport);
271
+ }
272
+ /**
273
+ * Set the display (canvas backing-buffer) size in physical pixels.
274
+ * When set, the canvas resolution is pinned to these dimensions and frames
275
+ * are drawn scaled to fill rather than the canvas being resized to match
276
+ * each incoming frame. Call with `null` to revert to frame-tracking mode.
277
+ *
278
+ * This should be called by the framework binding's ResizeObserver so the
279
+ * canvas is immediately at the correct resolution — no CSS scaling needed.
280
+ */
281
+ setDisplaySize(width, height) {
282
+ if (width == null) {
283
+ this._displaySize = null;
284
+ if (this.canvas) {
285
+ this.canvas.style.objectFit = "contain";
286
+ }
287
+ return;
288
+ }
289
+ const w = Math.round(width);
290
+ const h = Math.round(height);
291
+ if (w <= 0 || h <= 0)
292
+ return;
293
+ this._displaySize = { width: w, height: h };
294
+ if (this.canvas) {
295
+ // Switch from object-fit scaling to display-size pinned mode.
296
+ this.canvas.style.objectFit = "";
297
+ if (this.canvas.width !== w || this.canvas.height !== h) {
298
+ this.canvas.width = w;
299
+ this.canvas.height = h;
300
+ }
301
+ // Re-blit the last frame at the new canvas size.
302
+ const conn = this.getConn();
303
+ if (conn)
304
+ this.blitFromStore(conn.surfaceStore);
305
+ }
306
+ }
307
+ // -----------------------------------------------------------------------
308
+ // Connection helper
309
+ // -----------------------------------------------------------------------
310
+ getConn() {
311
+ return this._workspace.getConnection(this._connectionId) ?? null;
312
+ }
313
+ // -----------------------------------------------------------------------
314
+ // Subscriptions
315
+ // -----------------------------------------------------------------------
316
+ subscribe() {
317
+ const conn = this.getConn();
318
+ if (!conn)
319
+ return;
320
+ const store = conn.surfaceStore;
321
+ this.surface = store.getSurface(this._surfaceId);
322
+ // Tell the server we want frames for this surface, but only if the
323
+ // browser can actually decode the video. Subscribing when WebCodecs
324
+ // is unavailable (non-secure context) drives the server encoder for
325
+ // nothing and can crash it.
326
+ if (this.surface && store.canDecodeVideo) {
327
+ conn.sendSurfaceSubscribe(this.surface.sessionId, this._surfaceId);
328
+ }
329
+ // Paint the latest frame immediately so newly-mounted views aren't blank.
330
+ this.blitFromStore(store);
331
+ this.unsubChange = store.onChange(() => {
332
+ const prev = this.surface;
333
+ this.surface = store.getSurface(this._surfaceId);
334
+ // Late-subscribe: the surface info may arrive after we attach.
335
+ if (!prev && this.surface && store.canDecodeVideo) {
336
+ conn.sendSurfaceSubscribe(this.surface.sessionId, this._surfaceId);
337
+ // Update canvas size to match actual surface dimensions,
338
+ // unless the display size is pinned by a ResizeObserver.
339
+ if (this.canvas && !this._displaySize) {
340
+ this.canvas.width = this.surface.width;
341
+ this.canvas.height = this.surface.height;
342
+ }
343
+ }
344
+ });
345
+ this.unsubFrame = store.onFrame((sid) => {
346
+ if (sid !== this._surfaceId)
347
+ return;
348
+ this.blitFromStore(store);
349
+ });
350
+ }
351
+ /** Copy the shared backing canvas onto our visible canvas. */
352
+ blitFromStore(store) {
353
+ const src = store.getCanvas(this._surfaceId);
354
+ const canvas = this.canvas;
355
+ const ctx = this.ctx;
356
+ if (!src || !canvas || !ctx)
357
+ return;
358
+ if (src.width === 0 || src.height === 0)
359
+ return;
360
+ if (this._displaySize) {
361
+ // Resizable mode: canvas resolution is pinned to the container's
362
+ // physical pixel size. Draw the source frame scaled to fill.
363
+ ctx.drawImage(src, 0, 0, canvas.width, canvas.height);
364
+ }
365
+ else {
366
+ // Frame-tracking mode: canvas resolution follows the source frame.
367
+ if (canvas.width !== src.width || canvas.height !== src.height) {
368
+ canvas.width = src.width;
369
+ canvas.height = src.height;
370
+ }
371
+ ctx.drawImage(src, 0, 0);
372
+ }
373
+ }
374
+ resubscribe() {
375
+ this.serverUnsubscribe();
376
+ this.unsubFrame?.();
377
+ this.unsubChange?.();
378
+ this.unsubFrame = null;
379
+ this.unsubChange = null;
380
+ if (!this.disposed)
381
+ this.subscribe();
382
+ }
383
+ serverUnsubscribe() {
384
+ const conn = this.getConn();
385
+ if (!conn || !this.surface)
386
+ return;
387
+ conn.sendSurfaceUnsubscribe(this.surface.sessionId, this._surfaceId);
388
+ }
389
+ // -----------------------------------------------------------------------
390
+ // Event handling
391
+ // -----------------------------------------------------------------------
392
+ attachEvents() {
393
+ const canvas = this.canvas;
394
+ if (!canvas)
395
+ return;
396
+ this.boundMouseDown = (e) => this.handleMouse(e, SURFACE_POINTER_DOWN);
397
+ this.boundMouseUp = (e) => this.handleMouse(e, SURFACE_POINTER_UP);
398
+ this.boundMouseMove = (e) => this.handleMouse(e, SURFACE_POINTER_MOVE);
399
+ this.boundWheel = (e) => this.handleWheel(e);
400
+ this.boundKeyDown = (e) => this.handleKey(e, true);
401
+ this.boundKeyUp = (e) => this.handleKey(e, false);
402
+ this.boundFocus = () => this.handleFocus();
403
+ this.boundBlur = () => this.handleBlur();
404
+ this.boundContextMenu = (e) => e.preventDefault();
405
+ canvas.addEventListener("mousedown", this.boundMouseDown);
406
+ canvas.addEventListener("mouseup", this.boundMouseUp);
407
+ canvas.addEventListener("mousemove", this.boundMouseMove);
408
+ canvas.addEventListener("wheel", this.boundWheel, { passive: false });
409
+ canvas.addEventListener("keydown", this.boundKeyDown);
410
+ canvas.addEventListener("keyup", this.boundKeyUp);
411
+ canvas.addEventListener("focus", this.boundFocus);
412
+ canvas.addEventListener("blur", this.boundBlur);
413
+ canvas.addEventListener("contextmenu", this.boundContextMenu);
414
+ }
415
+ detachEvents() {
416
+ const canvas = this.canvas;
417
+ if (!canvas)
418
+ return;
419
+ if (this.boundMouseDown)
420
+ canvas.removeEventListener("mousedown", this.boundMouseDown);
421
+ if (this.boundMouseUp)
422
+ canvas.removeEventListener("mouseup", this.boundMouseUp);
423
+ if (this.boundMouseMove)
424
+ canvas.removeEventListener("mousemove", this.boundMouseMove);
425
+ if (this.boundWheel)
426
+ canvas.removeEventListener("wheel", this.boundWheel);
427
+ if (this.boundKeyDown)
428
+ canvas.removeEventListener("keydown", this.boundKeyDown);
429
+ if (this.boundKeyUp)
430
+ canvas.removeEventListener("keyup", this.boundKeyUp);
431
+ if (this.boundFocus)
432
+ canvas.removeEventListener("focus", this.boundFocus);
433
+ if (this.boundBlur)
434
+ canvas.removeEventListener("blur", this.boundBlur);
435
+ if (this.boundContextMenu)
436
+ canvas.removeEventListener("contextmenu", this.boundContextMenu);
437
+ }
438
+ handleMouse(e, type) {
439
+ const conn = this.getConn();
440
+ if (!conn || !this.canvas || !this.surface || !this._displaySize)
441
+ return;
442
+ if (type === SURFACE_POINTER_DOWN) {
443
+ this.canvas.focus();
444
+ this.pressedButtons.add(e.button);
445
+ }
446
+ else if (type === SURFACE_POINTER_UP) {
447
+ this.pressedButtons.delete(e.button);
448
+ }
449
+ const rect = this.canvas.getBoundingClientRect();
450
+ // Send logical (CSS-pixel) coordinates — the compositor and CLI both
451
+ // operate in the Wayland surface's logical coordinate space.
452
+ const x = Math.round(e.clientX - rect.left);
453
+ const y = Math.round(e.clientY - rect.top);
454
+ conn.sendSurfacePointer(this.surface.sessionId, this._surfaceId, type, e.button, x, y);
455
+ }
456
+ /** Send synthetic pointer-up for any buttons still held. Prevents the
457
+ * compositor's implicit pointer grab from outliving this canvas. */
458
+ releaseAllButtons() {
459
+ if (this.pressedButtons.size === 0)
460
+ return;
461
+ const conn = this.getConn();
462
+ if (!conn || !this.surface)
463
+ return;
464
+ for (const button of this.pressedButtons) {
465
+ conn.sendSurfacePointer(this.surface.sessionId, this._surfaceId, SURFACE_POINTER_UP, button, 0, 0);
466
+ }
467
+ this.pressedButtons.clear();
468
+ }
469
+ handleWheel(e) {
470
+ const conn = this.getConn();
471
+ if (!conn || !this.surface || !this._displaySize)
472
+ return;
473
+ e.preventDefault();
474
+ const axis = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? 1 : 0;
475
+ const value = axis === 0 ? e.deltaY : e.deltaX;
476
+ conn.sendSurfaceAxis(this.surface.sessionId, this._surfaceId, axis, Math.round(value * 100));
477
+ }
478
+ handleKey(e, pressed) {
479
+ // If a global shortcut (capture-phase) already handled this event,
480
+ // don't forward it to the Wayland surface.
481
+ if (e.defaultPrevented)
482
+ return;
483
+ // Only forward input when interactive (resizable/focused mode).
484
+ // Sidebar previews should not intercept keyboard or send events.
485
+ if (!this._displaySize)
486
+ return;
487
+ // Always prevent default so keystrokes never leak to the terminal
488
+ // textarea, even when the surface info hasn't arrived yet.
489
+ e.preventDefault();
490
+ const conn = this.getConn();
491
+ if (!conn || !this.surface)
492
+ return;
493
+ // On keydown, sync CapsLock if the browser state drifted from the
494
+ // compositor's (e.g. the user toggled CapsLock while a different
495
+ // element or window was focused).
496
+ if (pressed) {
497
+ this.syncCapsLock(e, conn);
498
+ }
499
+ const keycode = domKeyToEvdev(e.code);
500
+ if (keycode !== 0) {
501
+ if (pressed) {
502
+ this.pressedKeys.add(keycode);
503
+ }
504
+ else {
505
+ this.pressedKeys.delete(keycode);
506
+ }
507
+ conn.sendSurfaceInput(this.surface.sessionId, this._surfaceId, keycode, pressed);
508
+ }
509
+ }
510
+ /** Send synthetic key-up for every key still held. Prevents stuck
511
+ * modifiers and runaway key-repeat when focus leaves the canvas. */
512
+ releaseAllKeys() {
513
+ if (this.pressedKeys.size === 0)
514
+ return;
515
+ const conn = this.getConn();
516
+ if (!conn || !this.surface)
517
+ return;
518
+ for (const kc of this.pressedKeys) {
519
+ conn.sendSurfaceInput(this.surface.sessionId, this._surfaceId, kc, false);
520
+ }
521
+ this.pressedKeys.clear();
522
+ }
523
+ handleBlur() {
524
+ this.releaseAllKeys();
525
+ }
526
+ /**
527
+ * Ensure the compositor's CapsLock state matches the browser before the
528
+ * current key event is forwarded.
529
+ *
530
+ * The browser's `getModifierState("CapsLock")` always reflects the OS
531
+ * state, but the compositor only sees key events forwarded through
532
+ * `handleKey`. If CapsLock was toggled while the surface was unfocused,
533
+ * the compositor's XKB state drifts. We detect the mismatch and inject
534
+ * a synthetic CapsLock press+release to bring it back in sync.
535
+ *
536
+ * For a regular key (not CapsLock itself) the rule is simple: if the
537
+ * browser and compositor disagree, inject a toggle.
538
+ *
539
+ * When the key IS CapsLock, `getModifierState` already shows the
540
+ * *post-toggle* value. The compositor will also toggle when it receives
541
+ * our forwarded keydown. For the end state to match we need the
542
+ * compositor's *pre-toggle* state to be the opposite of the browser's
543
+ * post-toggle value, i.e. `compositorCaps === !browserCaps`. If that
544
+ * doesn't hold we inject an extra toggle first so the real key lands
545
+ * correctly.
546
+ */
547
+ syncCapsLock(e, conn) {
548
+ const browserCaps = e.getModifierState("CapsLock");
549
+ const compositorCaps = _compositorCapsLock.get(this._connectionId) ?? false;
550
+ let needsSync;
551
+ if (e.code === "CapsLock") {
552
+ // Browser shows post-toggle. Compositor will toggle on our forwarded
553
+ // keydown. We need compositorCaps === !browserCaps for the toggle to
554
+ // land at browserCaps. If not, inject a corrective toggle first.
555
+ needsSync = compositorCaps === browserCaps;
556
+ }
557
+ else {
558
+ needsSync = compositorCaps !== browserCaps;
559
+ }
560
+ if (needsSync) {
561
+ const kc = EVDEV_MAP.CapsLock; // 58
562
+ conn.sendSurfaceInput(this.surface.sessionId, this._surfaceId, kc, true);
563
+ conn.sendSurfaceInput(this.surface.sessionId, this._surfaceId, kc, false);
564
+ }
565
+ // Update tracking to the expected compositor state after this event.
566
+ if (e.code === "CapsLock") {
567
+ // Compositor will toggle (possibly twice if synthetic was sent).
568
+ // Either way it ends at browserCaps.
569
+ _compositorCapsLock.set(this._connectionId, browserCaps);
570
+ }
571
+ else if (needsSync) {
572
+ _compositorCapsLock.set(this._connectionId, !compositorCaps);
573
+ }
574
+ }
575
+ handleFocus() {
576
+ const conn = this.getConn();
577
+ if (!conn || !this.surface)
578
+ return;
579
+ conn.sendSurfaceFocus(this.surface.sessionId, this._surfaceId);
580
+ }
581
+ }
582
+ //# sourceMappingURL=BlitSurfaceCanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlitSurfaceCanvas.js","sourceRoot":"","sources":["../src/BlitSurfaceCanvas.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,8 @@ export declare class BlitTerminalSurface {
73
73
  private predictedFromCol;
74
74
  private wasmReady;
75
75
  private disposed;
76
+ private _ctrlModifier;
77
+ private _ctrlModifierListeners;
76
78
  private dirtyUnsub;
77
79
  private readyUnsub;
78
80
  private resizeObserver;
@@ -91,6 +93,16 @@ export declare class BlitTerminalSurface {
91
93
  get currentTerminal(): Terminal | null;
92
94
  get status(): ConnectionStatus;
93
95
  focus(): void;
96
+ /**
97
+ * Set the Ctrl modifier state for the next typed character.
98
+ * When active, the next character typed via the soft keyboard will be
99
+ * converted to its Ctrl+char byte equivalent (e.g. 'c' → Ctrl+C = 0x03).
100
+ * The modifier auto-resets after one character is consumed.
101
+ */
102
+ setCtrlModifier(active: boolean): void;
103
+ get ctrlModifier(): boolean;
104
+ /** Subscribe to Ctrl modifier state changes. Returns unsubscribe function. */
105
+ onCtrlModifierChange(listener: (active: boolean) => void): () => void;
94
106
  /** Attach to a container element. Creates the canvas + textarea inside it. */
95
107
  attach(container: HTMLDivElement): void;
96
108
  /** Detach from the current container. Removes all DOM elements and listeners. */
@@ -1 +1 @@
1
- {"version":3,"file":"BlitTerminalSurface.d.ts","sourceRoot":"","sources":["../src/BlitTerminalSurface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlitTerminalSurface.d.ts","sourceRoot":"","sources":["../src/BlitTerminalSurface.ts"],"names":[],"mappings":"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"}