@orz/ui-ansi 0.0.0-stage → 0.0.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/LICENSE +29 -0
- package/README.md +232 -2
- package/dist/content.d.ts +20 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +90 -0
- package/dist/content.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/parse/index.d.ts +6 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +5 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/parse/level-tracker.d.ts +14 -0
- package/dist/parse/level-tracker.d.ts.map +1 -0
- package/dist/parse/level-tracker.js +87 -0
- package/dist/parse/level-tracker.js.map +1 -0
- package/dist/parse/levels.d.ts +19 -0
- package/dist/parse/levels.d.ts.map +1 -0
- package/dist/parse/levels.js +167 -0
- package/dist/parse/levels.js.map +1 -0
- package/dist/parse/line.d.ts +49 -0
- package/dist/parse/line.d.ts.map +1 -0
- package/dist/parse/line.js +289 -0
- package/dist/parse/line.js.map +1 -0
- package/dist/parse/palette.d.ts +12 -0
- package/dist/parse/palette.d.ts.map +1 -0
- package/dist/parse/palette.js +40 -0
- package/dist/parse/palette.js.map +1 -0
- package/dist/parse/parser.d.ts +18 -0
- package/dist/parse/parser.d.ts.map +1 -0
- package/dist/parse/parser.js +178 -0
- package/dist/parse/parser.js.map +1 -0
- package/dist/parse/sgr.d.ts +7 -0
- package/dist/parse/sgr.d.ts.map +1 -0
- package/dist/parse/sgr.js +179 -0
- package/dist/parse/sgr.js.map +1 -0
- package/dist/parse/styles.d.ts +15 -0
- package/dist/parse/styles.d.ts.map +1 -0
- package/dist/parse/styles.js +75 -0
- package/dist/parse/styles.js.map +1 -0
- package/dist/parse/tokenizer.d.ts +36 -0
- package/dist/parse/tokenizer.d.ts.map +1 -0
- package/dist/parse/tokenizer.js +287 -0
- package/dist/parse/tokenizer.js.map +1 -0
- package/dist/parse/types.d.ts +50 -0
- package/dist/parse/types.d.ts.map +1 -0
- package/dist/parse/types.js +2 -0
- package/dist/parse/types.js.map +1 -0
- package/dist/view/ansi-view.d.ts +27 -0
- package/dist/view/ansi-view.d.ts.map +1 -0
- package/dist/view/ansi-view.js +675 -0
- package/dist/view/ansi-view.js.map +1 -0
- package/dist/view/geometry.d.ts +30 -0
- package/dist/view/geometry.d.ts.map +1 -0
- package/dist/view/geometry.js +125 -0
- package/dist/view/geometry.js.map +1 -0
- package/dist/view/metrics.d.ts +17 -0
- package/dist/view/metrics.d.ts.map +1 -0
- package/dist/view/metrics.js +69 -0
- package/dist/view/metrics.js.map +1 -0
- package/dist/view/row.d.ts +41 -0
- package/dist/view/row.d.ts.map +1 -0
- package/dist/view/row.js +113 -0
- package/dist/view/row.js.map +1 -0
- package/dist/view/run-style.d.ts +11 -0
- package/dist/view/run-style.d.ts.map +1 -0
- package/dist/view/run-style.js +87 -0
- package/dist/view/run-style.js.map +1 -0
- package/dist/view/search.d.ts +28 -0
- package/dist/view/search.d.ts.map +1 -0
- package/dist/view/search.js +76 -0
- package/dist/view/search.js.map +1 -0
- package/dist/view/shown-lines.d.ts +15 -0
- package/dist/view/shown-lines.d.ts.map +1 -0
- package/dist/view/shown-lines.js +50 -0
- package/dist/view/shown-lines.js.map +1 -0
- package/dist/view/time-slices.d.ts +9 -0
- package/dist/view/time-slices.d.ts.map +1 -0
- package/dist/view/time-slices.js +35 -0
- package/dist/view/time-slices.js.map +1 -0
- package/dist/view/toolbar.d.ts +47 -0
- package/dist/view/toolbar.d.ts.map +1 -0
- package/dist/view/toolbar.js +58 -0
- package/dist/view/toolbar.js.map +1 -0
- package/dist/view/use-ansi-lines.d.ts +28 -0
- package/dist/view/use-ansi-lines.d.ts.map +1 -0
- package/dist/view/use-ansi-lines.js +103 -0
- package/dist/view/use-ansi-lines.js.map +1 -0
- package/dist/view/use-search.d.ts +37 -0
- package/dist/view/use-search.d.ts.map +1 -0
- package/dist/view/use-search.js +205 -0
- package/dist/view/use-search.js.map +1 -0
- package/dist/view/virtual-rows.d.ts +36 -0
- package/dist/view/virtual-rows.d.ts.map +1 -0
- package/dist/view/virtual-rows.js +156 -0
- package/dist/view/virtual-rows.js.map +1 -0
- package/package.json +58 -3
- package/styles.css +110 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { codePointCells } from "./line.js";
|
|
2
|
+
/** How long an OSC or DCS/SOS/PM/APC body may grow before it is abandoned. */
|
|
3
|
+
export const STRING_MAX = 4096;
|
|
4
|
+
/** How long CSI parameters may grow before the sequence is dropped. */
|
|
5
|
+
export const CSI_PARAMS_MAX = 256;
|
|
6
|
+
const State = {
|
|
7
|
+
Ground: 0,
|
|
8
|
+
Escape: 1,
|
|
9
|
+
EscapeIntermediate: 2,
|
|
10
|
+
Csi: 3,
|
|
11
|
+
Osc: 4,
|
|
12
|
+
OscEscape: 5,
|
|
13
|
+
/** DCS, SOS, PM or APC: dropped, so only its length is kept. */
|
|
14
|
+
Str: 6,
|
|
15
|
+
StrEscape: 7,
|
|
16
|
+
};
|
|
17
|
+
const BEL = 0x07;
|
|
18
|
+
const ESC = 0x1b;
|
|
19
|
+
const CAN = 0x18;
|
|
20
|
+
const SUB = 0x1a;
|
|
21
|
+
function isExecuted(c) {
|
|
22
|
+
return c === 0x0a || c === 0x0d || c === 0x08 || c === 0x09;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A VT500-style escape-sequence state machine. Its state survives between
|
|
26
|
+
* `push` calls, so the input may be split anywhere, even inside a surrogate
|
|
27
|
+
* pair.
|
|
28
|
+
*/
|
|
29
|
+
export class Tokenizer {
|
|
30
|
+
state = State.Ground;
|
|
31
|
+
params = "";
|
|
32
|
+
csiDropped = false;
|
|
33
|
+
body = "";
|
|
34
|
+
bodyLength = 0;
|
|
35
|
+
highSurrogate = "";
|
|
36
|
+
sink;
|
|
37
|
+
constructor(sink) {
|
|
38
|
+
this.sink = sink;
|
|
39
|
+
}
|
|
40
|
+
push(input) {
|
|
41
|
+
let chunk = input;
|
|
42
|
+
if (this.highSurrogate !== "") {
|
|
43
|
+
chunk = this.highSurrogate + chunk;
|
|
44
|
+
this.highSurrogate = "";
|
|
45
|
+
}
|
|
46
|
+
const len = chunk.length;
|
|
47
|
+
const sink = this.sink;
|
|
48
|
+
let i = 0;
|
|
49
|
+
while (i < len) {
|
|
50
|
+
const c = chunk.charCodeAt(i);
|
|
51
|
+
switch (this.state) {
|
|
52
|
+
case State.Ground: {
|
|
53
|
+
const start = i;
|
|
54
|
+
let cells = 0;
|
|
55
|
+
while (i < len) {
|
|
56
|
+
const d = chunk.charCodeAt(i);
|
|
57
|
+
if ((d >= 0x20 && d < 0x7f) || (d >= 0xa0 && d < 0x300)) {
|
|
58
|
+
cells++;
|
|
59
|
+
i++;
|
|
60
|
+
}
|
|
61
|
+
else if (d < 0x20 || (d >= 0x7f && d < 0xa0)) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
else if (d >= 0xd800 && d <= 0xdbff) {
|
|
65
|
+
if (i + 1 === len)
|
|
66
|
+
break;
|
|
67
|
+
const e = chunk.charCodeAt(i + 1);
|
|
68
|
+
if (e >= 0xdc00 && e <= 0xdfff) {
|
|
69
|
+
cells += codePointCells(((d - 0xd800) << 10) + (e - 0xdc00) + 0x10000);
|
|
70
|
+
i += 2;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
cells++;
|
|
74
|
+
i++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
cells += codePointCells(d);
|
|
79
|
+
i++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (i > start)
|
|
83
|
+
sink.print(chunk, start, i, cells);
|
|
84
|
+
if (i === len)
|
|
85
|
+
break;
|
|
86
|
+
const d = chunk.charCodeAt(i);
|
|
87
|
+
if (d >= 0xd800 && d <= 0xdbff) {
|
|
88
|
+
// A high surrogate at the very end: its pair is in the next push.
|
|
89
|
+
this.highSurrogate = chunk[i];
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (d === ESC)
|
|
94
|
+
this.state = State.Escape;
|
|
95
|
+
else if (isExecuted(d))
|
|
96
|
+
sink.control(d);
|
|
97
|
+
i++;
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case State.Escape:
|
|
102
|
+
i = this.escape(c, i);
|
|
103
|
+
break;
|
|
104
|
+
case State.EscapeIntermediate:
|
|
105
|
+
if (c >= 0x20 && c <= 0x2f)
|
|
106
|
+
i++;
|
|
107
|
+
else if (c >= 0x30 && c <= 0x7e) {
|
|
108
|
+
this.state = State.Ground;
|
|
109
|
+
i++;
|
|
110
|
+
}
|
|
111
|
+
else if (c === ESC) {
|
|
112
|
+
this.state = State.Escape;
|
|
113
|
+
i++;
|
|
114
|
+
}
|
|
115
|
+
else
|
|
116
|
+
this.state = State.Ground;
|
|
117
|
+
break;
|
|
118
|
+
case State.Csi:
|
|
119
|
+
if (c >= 0x30 && c <= 0x3f) {
|
|
120
|
+
if (c >= 0x3c)
|
|
121
|
+
this.csiDropped = true;
|
|
122
|
+
else if (this.params.length >= CSI_PARAMS_MAX)
|
|
123
|
+
this.csiDropped = true;
|
|
124
|
+
else if (!this.csiDropped)
|
|
125
|
+
this.params += chunk[i];
|
|
126
|
+
i++;
|
|
127
|
+
}
|
|
128
|
+
else if (c >= 0x20 && c <= 0x2f) {
|
|
129
|
+
this.csiDropped = true;
|
|
130
|
+
i++;
|
|
131
|
+
}
|
|
132
|
+
else if (c >= 0x40 && c <= 0x7e) {
|
|
133
|
+
this.state = State.Ground;
|
|
134
|
+
if (!this.csiDropped)
|
|
135
|
+
sink.csi(this.params, c);
|
|
136
|
+
i++;
|
|
137
|
+
}
|
|
138
|
+
else if (c === ESC) {
|
|
139
|
+
this.state = State.Escape;
|
|
140
|
+
i++;
|
|
141
|
+
}
|
|
142
|
+
else if (c === CAN || c === SUB) {
|
|
143
|
+
this.state = State.Ground;
|
|
144
|
+
i++;
|
|
145
|
+
}
|
|
146
|
+
else if (c < 0x20) {
|
|
147
|
+
// VT500 runs C0 controls met inside a CSI and carries on with it.
|
|
148
|
+
if (isExecuted(c))
|
|
149
|
+
sink.control(c);
|
|
150
|
+
i++;
|
|
151
|
+
}
|
|
152
|
+
else if (c === 0x7f) {
|
|
153
|
+
i++;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
this.state = State.Ground;
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
case State.Osc: {
|
|
160
|
+
const start = i;
|
|
161
|
+
const room = STRING_MAX - this.body.length;
|
|
162
|
+
const stop = Math.min(len, i + room);
|
|
163
|
+
while (i < stop) {
|
|
164
|
+
const d = chunk.charCodeAt(i);
|
|
165
|
+
if (d === BEL || d === ESC || d === CAN || d === SUB)
|
|
166
|
+
break;
|
|
167
|
+
i++;
|
|
168
|
+
}
|
|
169
|
+
if (i > start)
|
|
170
|
+
this.body += chunk.slice(start, i);
|
|
171
|
+
if (i === len)
|
|
172
|
+
break;
|
|
173
|
+
const d = chunk.charCodeAt(i);
|
|
174
|
+
if (d === BEL) {
|
|
175
|
+
this.state = State.Ground;
|
|
176
|
+
sink.osc(this.body);
|
|
177
|
+
this.body = "";
|
|
178
|
+
i++;
|
|
179
|
+
}
|
|
180
|
+
else if (d === ESC) {
|
|
181
|
+
this.state = State.OscEscape;
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
else if (d === CAN || d === SUB) {
|
|
185
|
+
this.state = State.Ground;
|
|
186
|
+
this.body = "";
|
|
187
|
+
i++;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Past STRING_MAX: a stray `ESC ]` must not swallow the rest of a log.
|
|
191
|
+
this.state = State.Ground;
|
|
192
|
+
this.body = "";
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case State.OscEscape:
|
|
197
|
+
if (c === 0x5c) {
|
|
198
|
+
this.state = State.Ground;
|
|
199
|
+
sink.osc(this.body);
|
|
200
|
+
this.body = "";
|
|
201
|
+
i++;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.body = "";
|
|
205
|
+
i = this.escape(c, i);
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
208
|
+
case State.Str: {
|
|
209
|
+
while (i < len) {
|
|
210
|
+
const d = chunk.charCodeAt(i);
|
|
211
|
+
if (d === ESC || d === CAN || d === SUB)
|
|
212
|
+
break;
|
|
213
|
+
if (this.bodyLength >= STRING_MAX)
|
|
214
|
+
break;
|
|
215
|
+
this.bodyLength++;
|
|
216
|
+
i++;
|
|
217
|
+
}
|
|
218
|
+
if (i === len)
|
|
219
|
+
break;
|
|
220
|
+
const d = chunk.charCodeAt(i);
|
|
221
|
+
if (d === ESC) {
|
|
222
|
+
this.state = State.StrEscape;
|
|
223
|
+
i++;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.state = State.Ground;
|
|
227
|
+
if (d === CAN || d === SUB)
|
|
228
|
+
i++;
|
|
229
|
+
}
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
case State.StrEscape:
|
|
233
|
+
if (c === 0x5c) {
|
|
234
|
+
this.state = State.Ground;
|
|
235
|
+
i++;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
i = this.escape(c, i);
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** Flushes a carried high surrogate and drops an unfinished sequence. */
|
|
245
|
+
end() {
|
|
246
|
+
if (this.highSurrogate !== "") {
|
|
247
|
+
this.sink.print(this.highSurrogate, 0, 1, 1);
|
|
248
|
+
this.highSurrogate = "";
|
|
249
|
+
}
|
|
250
|
+
this.state = State.Ground;
|
|
251
|
+
this.params = "";
|
|
252
|
+
this.body = "";
|
|
253
|
+
}
|
|
254
|
+
/** The character after an ESC; returns the index to read next. */
|
|
255
|
+
escape(c, i) {
|
|
256
|
+
switch (c) {
|
|
257
|
+
case 0x5b:
|
|
258
|
+
this.state = State.Csi;
|
|
259
|
+
this.params = "";
|
|
260
|
+
this.csiDropped = false;
|
|
261
|
+
return i + 1;
|
|
262
|
+
case 0x5d:
|
|
263
|
+
this.state = State.Osc;
|
|
264
|
+
this.body = "";
|
|
265
|
+
return i + 1;
|
|
266
|
+
case 0x50:
|
|
267
|
+
case 0x58:
|
|
268
|
+
case 0x5e:
|
|
269
|
+
case 0x5f:
|
|
270
|
+
this.state = State.Str;
|
|
271
|
+
this.bodyLength = 0;
|
|
272
|
+
return i + 1;
|
|
273
|
+
case ESC:
|
|
274
|
+
this.state = State.Escape;
|
|
275
|
+
return i + 1;
|
|
276
|
+
}
|
|
277
|
+
if (c >= 0x20 && c <= 0x2f) {
|
|
278
|
+
this.state = State.EscapeIntermediate;
|
|
279
|
+
return i + 1;
|
|
280
|
+
}
|
|
281
|
+
this.state = State.Ground;
|
|
282
|
+
// ESC and a final byte is a sequence we do not draw. Anything else ends
|
|
283
|
+
// the lone ESC and is read again as ordinary input.
|
|
284
|
+
return c >= 0x30 && c <= 0x7e ? i + 1 : i;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parse/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type AnsiColor =
|
|
2
|
+
/** 0–15 follow the theme's `--ansi-*`; 16–255 are xterm's fixed values. */
|
|
3
|
+
{
|
|
4
|
+
kind: "palette";
|
|
5
|
+
index: number;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "rgb";
|
|
8
|
+
r: number;
|
|
9
|
+
g: number;
|
|
10
|
+
b: number;
|
|
11
|
+
};
|
|
12
|
+
export type UnderlineStyle = "single" | "double" | "curly" | "dotted" | "dashed";
|
|
13
|
+
export interface AnsiStyle {
|
|
14
|
+
fg?: AnsiColor;
|
|
15
|
+
bg?: AnsiColor;
|
|
16
|
+
underlineColor?: AnsiColor;
|
|
17
|
+
bold?: true;
|
|
18
|
+
dim?: true;
|
|
19
|
+
italic?: true;
|
|
20
|
+
underline?: UnderlineStyle;
|
|
21
|
+
blink?: true;
|
|
22
|
+
inverse?: true;
|
|
23
|
+
hidden?: true;
|
|
24
|
+
strike?: true;
|
|
25
|
+
overline?: true;
|
|
26
|
+
/** An OSC 8 link target, already checked against the scheme allow-list. */
|
|
27
|
+
href?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface AnsiLine {
|
|
30
|
+
/** The line's visible characters, escapes removed. */
|
|
31
|
+
text: string;
|
|
32
|
+
/** Flat `[startOffsetInText, styleId]` pairs, ascending; style 0 is the empty style. */
|
|
33
|
+
runs: Uint32Array;
|
|
34
|
+
/** Display width in terminal cells. */
|
|
35
|
+
cells: number;
|
|
36
|
+
}
|
|
37
|
+
export interface AnsiParse {
|
|
38
|
+
readonly lines: readonly AnsiLine[];
|
|
39
|
+
/** Interned; a run's style id indexes this. */
|
|
40
|
+
readonly styles: readonly AnsiStyle[];
|
|
41
|
+
/** The widest line, for the no-wrap scroll width. */
|
|
42
|
+
readonly maxCells: number;
|
|
43
|
+
}
|
|
44
|
+
export interface AnsiParser extends AnsiParse {
|
|
45
|
+
/** Takes the text split anywhere: an escape cut in half is carried over to the next push. */
|
|
46
|
+
push(chunk: string): void;
|
|
47
|
+
/** Flushes the last line; the text needs no trailing newline. */
|
|
48
|
+
end(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parse/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS;AACnB,2EAA2E;AACzE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,IAAI,EAAE,WAAW,CAAC;IAClB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,6FAA6F;IAC7F,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iEAAiE;IACjE,GAAG,IAAI,IAAI,CAAC;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parse/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type LevelDetector } from "../parse/levels.ts";
|
|
2
|
+
export interface AnsiViewProps {
|
|
3
|
+
text: string;
|
|
4
|
+
/** "pane": the terminal pane. "file": header, line numbers, Download. */
|
|
5
|
+
chrome: "pane" | "file";
|
|
6
|
+
/** Shown in the header with chrome="file". */
|
|
7
|
+
filename?: string;
|
|
8
|
+
/** Download link in the header. */
|
|
9
|
+
downloadUrl?: string;
|
|
10
|
+
/** Bold text in palette colours 0–7 is drawn in 8–15. Default false. */
|
|
11
|
+
boldIsBright?: boolean;
|
|
12
|
+
/** Initial wrap state; the Wrap button toggles it. Default false. */
|
|
13
|
+
wrap?: boolean;
|
|
14
|
+
/** How tall the view may grow before it scrolls. Default: grows to fit. */
|
|
15
|
+
maxHeight?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Detects each line's log level, colours rows by it and, with
|
|
18
|
+
* chrome="file", offers a filter by level. `true` uses `detectLevel`; a
|
|
19
|
+
* function replaces it, and should keep its identity across renders, since
|
|
20
|
+
* a new one parses the text again. Default false.
|
|
21
|
+
*/
|
|
22
|
+
levels?: boolean | LevelDetector;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Text with ANSI escapes drawn in the theme's terminal colours. */
|
|
26
|
+
export declare function AnsiView({ text, chrome, filename, downloadUrl, boldIsBright, wrap: initialWrap, maxHeight, levels, className, }: AnsiViewProps): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=ansi-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi-view.d.ts","sourceRoot":"","sources":["../../src/view/ansi-view.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAC;AAoB5B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2PD,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,WAAW,EACX,YAAoB,EACpB,IAAI,EAAE,WAAmB,EACzB,SAAS,EACT,MAAc,EACd,SAAS,GACV,EAAE,aAAa,+BA4pBf"}
|