@next_term/core 0.0.1-next.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/dist/buffer.d.ts +46 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +146 -0
- package/dist/buffer.js.map +1 -0
- package/dist/cell-grid.d.ts +102 -0
- package/dist/cell-grid.d.ts.map +1 -0
- package/dist/cell-grid.js +294 -0
- package/dist/cell-grid.js.map +1 -0
- package/dist/gesture-handler.d.ts +65 -0
- package/dist/gesture-handler.d.ts.map +1 -0
- package/dist/gesture-handler.js +186 -0
- package/dist/gesture-handler.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/index.d.ts +196 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +1952 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/states.d.ts +39 -0
- package/dist/parser/states.d.ts.map +1 -0
- package/dist/parser/states.js +240 -0
- package/dist/parser/states.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-agnostic touch gesture handling for terminal emulators.
|
|
3
|
+
*
|
|
4
|
+
* Pure-logic handler with zero platform dependencies — translates
|
|
5
|
+
* gesture coordinates and states into terminal actions. Used by
|
|
6
|
+
* both @next_term/web (DOM touch events) and @next_term/native
|
|
7
|
+
* (React Native gesture handler).
|
|
8
|
+
*/
|
|
9
|
+
import type { SelectionRange } from "./cell-grid.js";
|
|
10
|
+
export declare enum GestureState {
|
|
11
|
+
BEGAN = "began",
|
|
12
|
+
ACTIVE = "active",
|
|
13
|
+
END = "end",
|
|
14
|
+
CANCELLED = "cancelled"
|
|
15
|
+
}
|
|
16
|
+
export interface GestureConfig {
|
|
17
|
+
onScroll: (deltaRows: number) => void;
|
|
18
|
+
onTap: (row: number, col: number) => void;
|
|
19
|
+
onDoubleTap: (row: number, col: number) => void;
|
|
20
|
+
onLongPress: (row: number, col: number) => void;
|
|
21
|
+
onPinch: (scale: number) => void;
|
|
22
|
+
onSelectionChange: (selection: SelectionRange | null) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare class GestureHandler {
|
|
25
|
+
private cellWidth;
|
|
26
|
+
private cellHeight;
|
|
27
|
+
private config;
|
|
28
|
+
/** Accumulated sub-row scroll remainder for smooth scrolling. */
|
|
29
|
+
private scrollRemainder;
|
|
30
|
+
/** Whether a long-press selection is active. */
|
|
31
|
+
private selectionActive;
|
|
32
|
+
private selectionAnchor;
|
|
33
|
+
constructor(cellWidth: number, cellHeight: number, config: GestureConfig);
|
|
34
|
+
updateCellSize(width: number, height: number): void;
|
|
35
|
+
/**
|
|
36
|
+
* Convert pixel coordinates to cell coordinates.
|
|
37
|
+
* Clamps to non-negative values (caller is responsible for upper bounds).
|
|
38
|
+
*/
|
|
39
|
+
pixelToCell(x: number, y: number): {
|
|
40
|
+
row: number;
|
|
41
|
+
col: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Handle a pan gesture. Translation values are cumulative pixel offsets
|
|
45
|
+
* from the gesture start. velocityY is in pixels/ms.
|
|
46
|
+
*/
|
|
47
|
+
handlePan(_translationX: number, translationY: number, velocityY: number, state: GestureState): void;
|
|
48
|
+
/**
|
|
49
|
+
* Compute the number of rows a fling gesture should scroll based on
|
|
50
|
+
* initial velocity and deceleration.
|
|
51
|
+
*/
|
|
52
|
+
private computeFlingRows;
|
|
53
|
+
handleTap(x: number, y: number): void;
|
|
54
|
+
handleDoubleTap(x: number, y: number): void;
|
|
55
|
+
handleLongPress(x: number, y: number): void;
|
|
56
|
+
handlePinch(scale: number, state: GestureState): void;
|
|
57
|
+
/**
|
|
58
|
+
* Extend a selection during a drag gesture. Call this from the pan handler
|
|
59
|
+
* when `isSelectionActive` is true.
|
|
60
|
+
*/
|
|
61
|
+
extendSelection(x: number, y: number): void;
|
|
62
|
+
get isSelectionActive(): boolean;
|
|
63
|
+
clearSelection(): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=gesture-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gesture-handler.d.ts","sourceRoot":"","sources":["../src/gesture-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMrD,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,iBAAiB,EAAE,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/D;AAgBD,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAE9B,iEAAiE;IACjE,OAAO,CAAC,eAAe,CAAK;IAE5B,gDAAgD;IAChD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAA6C;gBAExD,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAUxE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASnD;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAc/D;;;OAGG;IACH,SAAS,CACP,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI;IA+BP;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAWxB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBrC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3C,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAoB3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAUrD;;;OAGG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAY3C,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,cAAc,IAAI,IAAI;CAKvB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-agnostic touch gesture handling for terminal emulators.
|
|
3
|
+
*
|
|
4
|
+
* Pure-logic handler with zero platform dependencies — translates
|
|
5
|
+
* gesture coordinates and states into terminal actions. Used by
|
|
6
|
+
* both @next_term/web (DOM touch events) and @next_term/native
|
|
7
|
+
* (React Native gesture handler).
|
|
8
|
+
*/
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Types
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export var GestureState;
|
|
13
|
+
(function (GestureState) {
|
|
14
|
+
GestureState["BEGAN"] = "began";
|
|
15
|
+
GestureState["ACTIVE"] = "active";
|
|
16
|
+
GestureState["END"] = "end";
|
|
17
|
+
GestureState["CANCELLED"] = "cancelled";
|
|
18
|
+
})(GestureState || (GestureState = {}));
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/** Deceleration factor for fling physics (pixels/ms^2). */
|
|
23
|
+
const FLING_DECELERATION = 0.003;
|
|
24
|
+
/** Minimum velocity (pixels/ms) to trigger a fling. */
|
|
25
|
+
const FLING_MIN_VELOCITY = 0.5;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// GestureHandler
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export class GestureHandler {
|
|
30
|
+
cellWidth;
|
|
31
|
+
cellHeight;
|
|
32
|
+
config;
|
|
33
|
+
/** Accumulated sub-row scroll remainder for smooth scrolling. */
|
|
34
|
+
scrollRemainder = 0;
|
|
35
|
+
/** Whether a long-press selection is active. */
|
|
36
|
+
selectionActive = false;
|
|
37
|
+
selectionAnchor = null;
|
|
38
|
+
constructor(cellWidth, cellHeight, config) {
|
|
39
|
+
this.cellWidth = cellWidth;
|
|
40
|
+
this.cellHeight = cellHeight;
|
|
41
|
+
this.config = config;
|
|
42
|
+
}
|
|
43
|
+
// -----------------------------------------------------------------------
|
|
44
|
+
// Cell size
|
|
45
|
+
// -----------------------------------------------------------------------
|
|
46
|
+
updateCellSize(width, height) {
|
|
47
|
+
this.cellWidth = width;
|
|
48
|
+
this.cellHeight = height;
|
|
49
|
+
}
|
|
50
|
+
// -----------------------------------------------------------------------
|
|
51
|
+
// Coordinate conversion
|
|
52
|
+
// -----------------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* Convert pixel coordinates to cell coordinates.
|
|
55
|
+
* Clamps to non-negative values (caller is responsible for upper bounds).
|
|
56
|
+
*/
|
|
57
|
+
pixelToCell(x, y) {
|
|
58
|
+
if (this.cellWidth <= 0 || this.cellHeight <= 0) {
|
|
59
|
+
return { row: 0, col: 0 };
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
row: Math.max(0, Math.floor(y / this.cellHeight)),
|
|
63
|
+
col: Math.max(0, Math.floor(x / this.cellWidth)),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// -----------------------------------------------------------------------
|
|
67
|
+
// Pan / Scroll
|
|
68
|
+
// -----------------------------------------------------------------------
|
|
69
|
+
/**
|
|
70
|
+
* Handle a pan gesture. Translation values are cumulative pixel offsets
|
|
71
|
+
* from the gesture start. velocityY is in pixels/ms.
|
|
72
|
+
*/
|
|
73
|
+
handlePan(_translationX, translationY, velocityY, state) {
|
|
74
|
+
if (this.cellHeight <= 0)
|
|
75
|
+
return;
|
|
76
|
+
if (state === GestureState.ACTIVE) {
|
|
77
|
+
// Convert pixel translation to row delta, keeping a fractional remainder
|
|
78
|
+
const totalPixels = translationY + this.scrollRemainder;
|
|
79
|
+
const deltaRows = Math.trunc(totalPixels / this.cellHeight);
|
|
80
|
+
this.scrollRemainder = totalPixels - deltaRows * this.cellHeight;
|
|
81
|
+
if (deltaRows !== 0) {
|
|
82
|
+
// Negate: dragging down means scrolling up (seeing older content)
|
|
83
|
+
this.config.onScroll(-deltaRows);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (state === GestureState.END) {
|
|
87
|
+
this.scrollRemainder = 0;
|
|
88
|
+
// Fling: apply velocity-based scroll
|
|
89
|
+
const absVelocity = Math.abs(velocityY);
|
|
90
|
+
if (absVelocity > FLING_MIN_VELOCITY) {
|
|
91
|
+
const flingRows = this.computeFlingRows(velocityY);
|
|
92
|
+
if (flingRows !== 0) {
|
|
93
|
+
this.config.onScroll(-flingRows);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (state === GestureState.CANCELLED) {
|
|
98
|
+
this.scrollRemainder = 0;
|
|
99
|
+
}
|
|
100
|
+
else if (state === GestureState.BEGAN) {
|
|
101
|
+
this.scrollRemainder = 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Compute the number of rows a fling gesture should scroll based on
|
|
106
|
+
* initial velocity and deceleration.
|
|
107
|
+
*/
|
|
108
|
+
computeFlingRows(velocityPxPerMs) {
|
|
109
|
+
// d = v^2 / (2 * a) — kinematic distance from constant deceleration
|
|
110
|
+
const distancePx = (velocityPxPerMs * velocityPxPerMs) / (2 * FLING_DECELERATION);
|
|
111
|
+
const sign = velocityPxPerMs > 0 ? 1 : -1;
|
|
112
|
+
return Math.round((sign * distancePx) / this.cellHeight);
|
|
113
|
+
}
|
|
114
|
+
// -----------------------------------------------------------------------
|
|
115
|
+
// Tap
|
|
116
|
+
// -----------------------------------------------------------------------
|
|
117
|
+
handleTap(x, y) {
|
|
118
|
+
if (this.selectionActive) {
|
|
119
|
+
// Tap clears an active selection
|
|
120
|
+
this.selectionActive = false;
|
|
121
|
+
this.selectionAnchor = null;
|
|
122
|
+
this.config.onSelectionChange(null);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const { row, col } = this.pixelToCell(x, y);
|
|
126
|
+
this.config.onTap(row, col);
|
|
127
|
+
}
|
|
128
|
+
// -----------------------------------------------------------------------
|
|
129
|
+
// Double-tap (word selection)
|
|
130
|
+
// -----------------------------------------------------------------------
|
|
131
|
+
handleDoubleTap(x, y) {
|
|
132
|
+
const { row, col } = this.pixelToCell(x, y);
|
|
133
|
+
this.config.onDoubleTap(row, col);
|
|
134
|
+
}
|
|
135
|
+
// -----------------------------------------------------------------------
|
|
136
|
+
// Long press (enter selection mode)
|
|
137
|
+
// -----------------------------------------------------------------------
|
|
138
|
+
handleLongPress(x, y) {
|
|
139
|
+
const { row, col } = this.pixelToCell(x, y);
|
|
140
|
+
this.selectionActive = true;
|
|
141
|
+
this.selectionAnchor = { row, col };
|
|
142
|
+
this.config.onLongPress(row, col);
|
|
143
|
+
// Initialize selection at the long-press point
|
|
144
|
+
this.config.onSelectionChange({
|
|
145
|
+
startRow: row,
|
|
146
|
+
startCol: col,
|
|
147
|
+
endRow: row,
|
|
148
|
+
endCol: col,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// -----------------------------------------------------------------------
|
|
152
|
+
// Pinch-to-zoom
|
|
153
|
+
// -----------------------------------------------------------------------
|
|
154
|
+
handlePinch(scale, state) {
|
|
155
|
+
if (state === GestureState.ACTIVE || state === GestureState.END) {
|
|
156
|
+
this.config.onPinch(scale);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// -----------------------------------------------------------------------
|
|
160
|
+
// Selection drag (called during pan when selection is active)
|
|
161
|
+
// -----------------------------------------------------------------------
|
|
162
|
+
/**
|
|
163
|
+
* Extend a selection during a drag gesture. Call this from the pan handler
|
|
164
|
+
* when `isSelectionActive` is true.
|
|
165
|
+
*/
|
|
166
|
+
extendSelection(x, y) {
|
|
167
|
+
if (!this.selectionActive || !this.selectionAnchor)
|
|
168
|
+
return;
|
|
169
|
+
const { row, col } = this.pixelToCell(x, y);
|
|
170
|
+
this.config.onSelectionChange({
|
|
171
|
+
startRow: this.selectionAnchor.row,
|
|
172
|
+
startCol: this.selectionAnchor.col,
|
|
173
|
+
endRow: row,
|
|
174
|
+
endCol: col,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
get isSelectionActive() {
|
|
178
|
+
return this.selectionActive;
|
|
179
|
+
}
|
|
180
|
+
clearSelection() {
|
|
181
|
+
this.selectionActive = false;
|
|
182
|
+
this.selectionAnchor = null;
|
|
183
|
+
this.config.onSelectionChange(null);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=gesture-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gesture-handler.js","sourceRoot":"","sources":["../src/gesture-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Buffer, BufferSet } from "./buffer.js";
|
|
2
|
+
export type { SelectionRange } from "./cell-grid.js";
|
|
3
|
+
export { CELL_SIZE, CellGrid, DEFAULT_CELL_W0, DEFAULT_CELL_W1, extractText, modPositive, normalizeSelection, } from "./cell-grid.js";
|
|
4
|
+
export type { GestureConfig } from "./gesture-handler.js";
|
|
5
|
+
export { GestureHandler, GestureState } from "./gesture-handler.js";
|
|
6
|
+
export type { MouseEncoding, MouseProtocol } from "./parser/index.js";
|
|
7
|
+
export { VTParser } from "./parser/index.js";
|
|
8
|
+
export { Action, State, TABLE, unpackAction, unpackState } from "./parser/states.js";
|
|
9
|
+
export type { CursorState, SelectionState, TerminalOptions, Theme } from "./types.js";
|
|
10
|
+
export { DEFAULT_THEME, DirtyState } from "./types.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Buffer, BufferSet } from "./buffer.js";
|
|
2
|
+
export { CELL_SIZE, CellGrid, DEFAULT_CELL_W0, DEFAULT_CELL_W1, extractText, modPositive, normalizeSelection, } from "./cell-grid.js";
|
|
3
|
+
export { GestureHandler, GestureState } from "./gesture-handler.js";
|
|
4
|
+
export { VTParser } from "./parser/index.js";
|
|
5
|
+
export { Action, State, TABLE, unpackAction, unpackState } from "./parser/states.js";
|
|
6
|
+
export { DEFAULT_THEME, DirtyState } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { BufferSet } from "../buffer.js";
|
|
2
|
+
import type { CursorState } from "../types.js";
|
|
3
|
+
/** Mouse tracking protocol. */
|
|
4
|
+
export type MouseProtocol = "none" | "x10" | "vt200" | "drag" | "any";
|
|
5
|
+
/** Mouse encoding format. */
|
|
6
|
+
export type MouseEncoding = "default" | "sgr";
|
|
7
|
+
export declare class VTParser {
|
|
8
|
+
private state;
|
|
9
|
+
private readonly bufferSet;
|
|
10
|
+
private static readonly MAX_PARAMS;
|
|
11
|
+
private readonly params;
|
|
12
|
+
private paramCount;
|
|
13
|
+
private currentParam;
|
|
14
|
+
private hasParam;
|
|
15
|
+
private intermediatesByte;
|
|
16
|
+
private prefixByte;
|
|
17
|
+
private fgIndex;
|
|
18
|
+
private bgIndex;
|
|
19
|
+
private attrs;
|
|
20
|
+
private fgIsRGB;
|
|
21
|
+
private bgIsRGB;
|
|
22
|
+
private fgRGB;
|
|
23
|
+
private bgRGB;
|
|
24
|
+
private static readonly MAX_OSC_LENGTH;
|
|
25
|
+
private readonly oscParts;
|
|
26
|
+
private oscLength;
|
|
27
|
+
private static readonly MAX_DCS_LENGTH;
|
|
28
|
+
private readonly dcsParts;
|
|
29
|
+
private dcsLength;
|
|
30
|
+
private dcsFinal;
|
|
31
|
+
private static readonly MAX_TMUX_LENGTH;
|
|
32
|
+
private readonly tmuxParts;
|
|
33
|
+
private tmuxLength;
|
|
34
|
+
private tmuxSeeking;
|
|
35
|
+
private inTmuxDcs;
|
|
36
|
+
private tmuxPrevWasEsc;
|
|
37
|
+
private tmuxDepth;
|
|
38
|
+
private utf8Bytes;
|
|
39
|
+
private utf8Codepoint;
|
|
40
|
+
private lineFeedMode;
|
|
41
|
+
private autoWrapMode;
|
|
42
|
+
private originMode;
|
|
43
|
+
applicationCursorKeys: boolean;
|
|
44
|
+
applicationKeypad: boolean;
|
|
45
|
+
bracketedPasteMode: boolean;
|
|
46
|
+
syncedOutput: boolean;
|
|
47
|
+
mouseProtocol: MouseProtocol;
|
|
48
|
+
mouseEncoding: MouseEncoding;
|
|
49
|
+
sendFocusEvents: boolean;
|
|
50
|
+
kittyFlags: number;
|
|
51
|
+
private readonly kittyFlagsStack;
|
|
52
|
+
private lastPrintedCodepoint;
|
|
53
|
+
private responseBuffer;
|
|
54
|
+
private titleStack;
|
|
55
|
+
private onTitleChange;
|
|
56
|
+
private onOsc52;
|
|
57
|
+
private onOsc4;
|
|
58
|
+
private onOsc7;
|
|
59
|
+
private onOsc10;
|
|
60
|
+
private onOsc11;
|
|
61
|
+
private onOsc12;
|
|
62
|
+
private onOsc104;
|
|
63
|
+
private onOsc8;
|
|
64
|
+
private onOsc133;
|
|
65
|
+
private onSyncOutput;
|
|
66
|
+
private onDcs;
|
|
67
|
+
private onDcsTmux;
|
|
68
|
+
private onKittyFlags;
|
|
69
|
+
constructor(bufferSet: BufferSet);
|
|
70
|
+
/** Register a callback for title changes (OSC 0/1/2). */
|
|
71
|
+
setTitleChangeCallback(cb: (title: string) => void): void;
|
|
72
|
+
/** Register a callback for OSC 52 clipboard sequences.
|
|
73
|
+
* `selection` is the clipboard selection string (e.g. "c" for clipboard).
|
|
74
|
+
* `data` is the base64-encoded payload, or null for a query request ("?").
|
|
75
|
+
*/
|
|
76
|
+
setOsc52Callback(cb: (selection: string, data: string | null) => void): void;
|
|
77
|
+
/** Register a callback for OSC 4 color palette sequences.
|
|
78
|
+
* Called once per index;spec pair in the sequence.
|
|
79
|
+
* `index` is the palette index (0-255).
|
|
80
|
+
* `spec` is the color specification string (e.g. "rgb:ff/00/00"), or null for a query ("?").
|
|
81
|
+
*/
|
|
82
|
+
setOsc4Callback(cb: (index: number, spec: string | null) => void): void;
|
|
83
|
+
/** Register a callback for OSC 7 current working directory sequences.
|
|
84
|
+
* Called with the URI payload (e.g. "file:///hostname/path").
|
|
85
|
+
*/
|
|
86
|
+
setOsc7Callback(cb: (uri: string) => void): void;
|
|
87
|
+
/** Register a callback for OSC 10 foreground color sequences.
|
|
88
|
+
* `spec` is the color specification string (e.g. "rgb:ffff/ffff/ffff"), or null for a query ("?").
|
|
89
|
+
*/
|
|
90
|
+
setOsc10Callback(cb: (spec: string | null) => void): void;
|
|
91
|
+
/** Register a callback for OSC 11 background color sequences.
|
|
92
|
+
* `spec` is the color specification string (e.g. "rgb:0000/0000/0000"), or null for a query ("?").
|
|
93
|
+
*/
|
|
94
|
+
setOsc11Callback(cb: (spec: string | null) => void): void;
|
|
95
|
+
/** Register a callback for OSC 12 cursor color sequences.
|
|
96
|
+
* `spec` is the color specification string, or null for a query ("?").
|
|
97
|
+
*/
|
|
98
|
+
setOsc12Callback(cb: (spec: string | null) => void): void;
|
|
99
|
+
/** Register a callback for OSC 104 reset color palette sequences.
|
|
100
|
+
* Called once per index to reset; `index` is 0-255 for a specific palette
|
|
101
|
+
* entry, or -1 when no index is given (reset the entire palette).
|
|
102
|
+
*/
|
|
103
|
+
setOsc104Callback(cb: (index: number) => void): void;
|
|
104
|
+
/** Register a callback for OSC 8 hyperlink sequences.
|
|
105
|
+
* `params` is the optional colon-separated key=value metadata string (may be "").
|
|
106
|
+
* `uri` is the hyperlink target URI (empty string closes the active link).
|
|
107
|
+
*/
|
|
108
|
+
setOsc8Callback(cb: (params: string, uri: string) => void): void;
|
|
109
|
+
/** Register a callback for OSC 133 shell integration (semantic prompt) sequences.
|
|
110
|
+
* `type` is the event letter: "A" (prompt start), "B" (command start),
|
|
111
|
+
* "C" (command output start), "D" (command end), "E" (command text), "P" (property), etc.
|
|
112
|
+
* `payload` is the string after the type letter and its optional semicolon separator
|
|
113
|
+
* (both `133;<type>;<payload>` and `133;<type><payload>` forms are accepted; empty string
|
|
114
|
+
* for A/B/C; exit-code digits for D; command text for E; key=value for P).
|
|
115
|
+
*/
|
|
116
|
+
setOsc133Callback(cb: (type: string, payload: string) => void): void;
|
|
117
|
+
/** Register a callback for synchronized output mode 2026 changes.
|
|
118
|
+
* Called with `true` when DECSET ?2026h activates the mode and `false`
|
|
119
|
+
* when DECRST ?2026l deactivates it. The web layer uses this to pause
|
|
120
|
+
* and resume the render loop (frame buffering).
|
|
121
|
+
*/
|
|
122
|
+
setSyncOutputCallback(cb: (active: boolean) => void): void;
|
|
123
|
+
/** Register a callback for DCS (Device Control String) sequences.
|
|
124
|
+
* Called when a DCS sequence is fully received (terminated by ST or C1 ST).
|
|
125
|
+
* `finalByte` identifies the DCS command (0x40–0x7E, e.g. 0x70 for 'p').
|
|
126
|
+
* `params` are the numeric params collected before the intermediate/final byte.
|
|
127
|
+
* `intermediate` is the single intermediate byte (0x20–0x2F), or 0 if none.
|
|
128
|
+
* `data` is the passthrough string collected between the final byte and ST.
|
|
129
|
+
*/
|
|
130
|
+
setDcsCallback(cb: (finalByte: number, params: readonly number[], intermediate: number, data: string) => void): void;
|
|
131
|
+
/** Register a callback for DCS tmux passthrough sequences.
|
|
132
|
+
* Called when the outer DCS tmux wrapper (ESC P tmux; ... ESC \) is received.
|
|
133
|
+
* `innerSeq` is the decoded inner escape sequence string (with doubled ESCs unescaped).
|
|
134
|
+
* The inner sequence is also automatically processed through the parser.
|
|
135
|
+
*/
|
|
136
|
+
setDcsTmuxCallback(cb: (innerSeq: string) => void): void;
|
|
137
|
+
/** Register a callback fired when kitty keyboard flags change (CSI =/>/</? u). */
|
|
138
|
+
setKittyFlagsCallback(cb: (flags: number) => void): void;
|
|
139
|
+
get cursor(): CursorState;
|
|
140
|
+
get cols(): number;
|
|
141
|
+
get rows(): number;
|
|
142
|
+
private get buf();
|
|
143
|
+
private get grid();
|
|
144
|
+
/** Check if there are pending responses to read. */
|
|
145
|
+
hasResponse(): boolean;
|
|
146
|
+
/** Read the next response from the response buffer. */
|
|
147
|
+
readResponse(): Uint8Array | null;
|
|
148
|
+
/** Process raw bytes from the PTY. */
|
|
149
|
+
write(data: Uint8Array): void;
|
|
150
|
+
private printCodepoint;
|
|
151
|
+
private execute;
|
|
152
|
+
private linefeed;
|
|
153
|
+
/**
|
|
154
|
+
* Fast-path scroll up: combines scrollUpWithHistory + scrollUp for the
|
|
155
|
+
* common full-screen case (rotateUp instead of copyWithin). Falls back
|
|
156
|
+
* to scrollUpWithHistory for partial scroll regions.
|
|
157
|
+
*/
|
|
158
|
+
private _scrollUpFull;
|
|
159
|
+
private clear;
|
|
160
|
+
private finalizeParams;
|
|
161
|
+
private csiDispatch;
|
|
162
|
+
private csiPrivate;
|
|
163
|
+
private decset;
|
|
164
|
+
/** SM - Set Mode (non-private) */
|
|
165
|
+
private setMode;
|
|
166
|
+
/** RM - Reset Mode (non-private) */
|
|
167
|
+
private resetMode;
|
|
168
|
+
private escDispatch;
|
|
169
|
+
private dcsDispatch;
|
|
170
|
+
private dispatchTmux;
|
|
171
|
+
private oscDispatch;
|
|
172
|
+
private cursorUp;
|
|
173
|
+
private cursorDown;
|
|
174
|
+
private cursorForward;
|
|
175
|
+
private cursorBackward;
|
|
176
|
+
private cursorPosition;
|
|
177
|
+
private setCursorStyle;
|
|
178
|
+
private reportCursorPosition;
|
|
179
|
+
private reportDeviceAttributes;
|
|
180
|
+
private windowManipulation;
|
|
181
|
+
private eraseInDisplay;
|
|
182
|
+
private eraseInLine;
|
|
183
|
+
private eraseCells;
|
|
184
|
+
private eraseChars;
|
|
185
|
+
private insertLines;
|
|
186
|
+
private deleteLines;
|
|
187
|
+
private insertChars;
|
|
188
|
+
private deleteChars;
|
|
189
|
+
private setScrollRegion;
|
|
190
|
+
private sgr;
|
|
191
|
+
/** Parse SGR 38/48 extended color. Returns updated index. */
|
|
192
|
+
private parseSgrColor;
|
|
193
|
+
private softReset;
|
|
194
|
+
private fullReset;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc/C,+BAA+B;AAC/B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AACtE,6BAA6B;AAC7B,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;AAE9C,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAGtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAS;IAOzB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,UAAU,CAAK;IAGvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAGlB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAK;IAMrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAK;IAG1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAS;IAG3B,qBAAqB,UAAS;IAC9B,iBAAiB,UAAS;IAC1B,kBAAkB,UAAS;IAC3B,YAAY,UAAS;IACrB,aAAa,EAAE,aAAa,CAAU;IACtC,aAAa,EAAE,aAAa,CAAa;IACzC,eAAe,UAAS;IAGxB,UAAU,SAAK;IACf,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAGhD,OAAO,CAAC,oBAAoB,CAAK;IAGjC,OAAO,CAAC,cAAc,CAAoB;IAG1C,OAAO,CAAC,UAAU,CAAgB;IAGlC,OAAO,CAAC,aAAa,CAA0C;IAI/D,OAAO,CAAC,OAAO,CAAmE;IAIlF,OAAO,CAAC,MAAM,CAA+D;IAG7E,OAAO,CAAC,MAAM,CAAwC;IAItD,OAAO,CAAC,OAAO,CAAgD;IAG/D,OAAO,CAAC,OAAO,CAAgD;IAG/D,OAAO,CAAC,OAAO,CAAgD;IAI/D,OAAO,CAAC,QAAQ,CAA0C;IAK1D,OAAO,CAAC,MAAM,CAAwD;IAOtE,OAAO,CAAC,QAAQ,CAA0D;IAI1E,OAAO,CAAC,YAAY,CAA4C;IAOhE,OAAO,CAAC,KAAK,CAEG;IAMhB,OAAO,CAAC,SAAS,CAA6C;IAG9D,OAAO,CAAC,YAAY,CAA0C;gBAElD,SAAS,EAAE,SAAS;IAIhC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIzD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAI5E;;;;OAIG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAIvE;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAIzD;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAIzD;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAIzD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpD;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhE;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpE;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI1D;;;;;;OAMG;IACH,cAAc,CACZ,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7F,IAAI;IAIP;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxD,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxD,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,IAAI,GAEf;IAED,oDAAoD;IACpD,WAAW,IAAI,OAAO;IAItB,uDAAuD;IACvD,YAAY,IAAI,UAAU,GAAG,IAAI;IAIjC,sCAAsC;IACtC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAge7B,OAAO,CAAC,cAAc;IAqDtB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,QAAQ;IAShB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;IAuOnB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,MAAM;IA4Ed,kCAAkC;IAClC,OAAO,CAAC,OAAO;IAQf,oCAAoC;IACpC,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IA+DnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,WAAW;IAsOnB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,GAAG;IAqIX,6DAA6D;IAC7D,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,SAAS;CAclB"}
|