@simon_he/vue-tui 1.1.1 → 1.1.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.
Files changed (70) hide show
  1. package/README.md +68 -28
  2. package/dist/{TMermaidText-CXm_L969.js → TMermaidText-frVr8Ysb.js} +1 -1
  3. package/dist/{TSelect-CiyMvwl-.js → TSelect-Dx34M1pF.js} +6 -168
  4. package/dist/{TTree-DKGiuIcM.js → TTree-DdAjCPHu.js} +12 -13
  5. package/dist/agent.cjs +3405 -13393
  6. package/dist/agent.js +15 -1197
  7. package/dist/{block-source-5CQp4tF8.js → block-source-Crro3mxi.js} +191 -724
  8. package/dist/cli/input.d.ts +8 -0
  9. package/dist/cli/video/ffmpeg-frame-source.d.ts +10 -0
  10. package/dist/cli/video/png-frame-parser.d.ts +4 -0
  11. package/dist/cli/video/raw-frame-parser.d.ts +1 -0
  12. package/dist/cli/video/yt-dlp-frame-source.d.ts +11 -0
  13. package/dist/cli.cjs +142 -33
  14. package/dist/cli.d.cts +1 -1
  15. package/dist/cli.d.ts +1 -1
  16. package/dist/cli.js +167 -37
  17. package/dist/core.js +5 -6
  18. package/dist/create-terminal-app.d.ts +24 -1
  19. package/dist/{debug-logger-ChY_PXVk.js → debug-logger-CmsGI4of.js} +1 -1
  20. package/dist/{dom-renderer-DNzmg2As.js → dom-renderer-DXx8fWzD.js} +2 -3
  21. package/dist/experimental/3d/bun/contributor-avatar-atlas.d.ts +12 -0
  22. package/dist/experimental/3d/bun/png.d.ts +1 -0
  23. package/dist/experimental/3d/bun/terminal-badge-scene.d.ts +11 -0
  24. package/dist/experimental/3d/bun/terminal-badge.wgsl.d.ts +1 -0
  25. package/dist/experimental/3d/bun/webgpu-renderer.d.ts +26 -0
  26. package/dist/experimental/3d/bun.cjs +7271 -0
  27. package/dist/experimental/3d/bun.d.cts +4 -0
  28. package/dist/experimental/3d/bun.d.ts +4 -0
  29. package/dist/experimental/3d/bun.js +7390 -0
  30. package/dist/experimental/video/node.cjs +497 -0
  31. package/dist/experimental/video/node.d.cts +4 -0
  32. package/dist/experimental/video/node.d.ts +4 -0
  33. package/dist/experimental/video/node.js +610 -0
  34. package/dist/experimental.cjs +3064 -567
  35. package/dist/experimental.d.cts +5 -0
  36. package/dist/experimental.d.ts +5 -0
  37. package/dist/experimental.js +1524 -9
  38. package/dist/{create-terminal-DXuZ2fci.js → hyperlink-_1FAj7Wq.js} +403 -2
  39. package/dist/index.js +15 -16
  40. package/dist/{linkify-CuuquMQT.js → linkify-BjI4zVfY.js} +164 -3
  41. package/dist/markdown.cjs +2929 -12918
  42. package/dist/markdown.d.cts +1 -0
  43. package/dist/markdown.d.ts +1 -0
  44. package/dist/markdown.js +13 -9
  45. package/dist/{mermaid-CWto52Wk.js → mermaid-BNhM1jAZ.js} +1 -1
  46. package/dist/mermaid.js +3 -3
  47. package/dist/observability.js +2 -2
  48. package/dist/{path-suggest-fPzRsgPv.js → path-suggest-Dndu4dTi.js} +1 -1
  49. package/dist/renderer/terminal-graphics.d.ts +1 -0
  50. package/dist/renderer-dom.js +3 -4
  51. package/dist/runtime.js +2 -2
  52. package/dist/terminal-graphics-Bbe83wSr.js +597 -0
  53. package/dist/{tlog-theme-CopRt9SC.js → tlog-theme-i6S_Oftd.js} +1206 -12
  54. package/dist/{trace-CYHDKM1m.js → trace-Bh8WnoMo.js} +1 -1
  55. package/dist/vue/components/T3DViewport.d.ts +473 -0
  56. package/dist/vue/components/TAgentTerminalGraphic.d.ts +13 -0
  57. package/dist/vue/components/TVideo.d.ts +291 -0
  58. package/dist/vue/markdown/math.d.ts +2 -0
  59. package/dist/vue/video/types.d.ts +39 -0
  60. package/dist/vue.js +17 -18
  61. package/package.json +44 -3
  62. package/dist/hyperlink-B35-O-cW.js +0 -403
  63. /package/dist/{ansi-palette-CNXqFciC.js → ansi-palette-CH6jc2Z7.js} +0 -0
  64. /package/dist/{env-DNCzvX8b.js → env-Cl8qmNFN.js} +0 -0
  65. /package/dist/{frame-perf-BBhE-iuS.js → frame-perf-CHpWhbC4.js} +0 -0
  66. /package/dist/{path-BI9W15Zt.js → path-mnSgEpCm.js} +0 -0
  67. /package/dist/{rect-Ng-3eKzF.js → rect-DUpeDfBg.js} +0 -0
  68. /package/dist/{runtime-D77C03RM.js → runtime-Byf8XXOT.js} +0 -0
  69. /package/dist/{terminal-selection-CQYr--26.js → terminal-selection-4W1SJj4c.js} +0 -0
  70. /package/dist/{wheel-scroll-CQ22Hcyj.js → wheel-scroll-DASkEZr-.js} +0 -0
@@ -1,403 +0,0 @@
1
- //#region src/core/ansi/sgr.ts
2
- const ESC = "\x1B";
3
- function ansi16ToColorName(code) {
4
- switch (code) {
5
- case 30: return "black";
6
- case 31: return "red";
7
- case 32: return "green";
8
- case 33: return "yellow";
9
- case 34: return "blue";
10
- case 35: return "magenta";
11
- case 36: return "cyan";
12
- case 37: return "white";
13
- case 90: return "blackBright";
14
- case 91: return "redBright";
15
- case 92: return "greenBright";
16
- case 93: return "yellowBright";
17
- case 94: return "blueBright";
18
- case 95: return "magentaBright";
19
- case 96: return "cyanBright";
20
- case 97: return "whiteBright";
21
- default: return void 0;
22
- }
23
- }
24
- function ansi16BgToColorName(code) {
25
- const fgCode = code >= 40 && code <= 47 ? code - 10 : code >= 100 && code <= 107 ? code - 10 : null;
26
- if (fgCode == null) return void 0;
27
- return ansi16ToColorName(fgCode);
28
- }
29
- const ANSI16_RGB = {
30
- black: {
31
- r: 0,
32
- g: 0,
33
- b: 0
34
- },
35
- red: {
36
- r: 201,
37
- g: 27,
38
- b: 0
39
- },
40
- green: {
41
- r: 0,
42
- g: 194,
43
- b: 0
44
- },
45
- yellow: {
46
- r: 199,
47
- g: 196,
48
- b: 0
49
- },
50
- blue: {
51
- r: 2,
52
- g: 37,
53
- b: 199
54
- },
55
- magenta: {
56
- r: 201,
57
- g: 48,
58
- b: 199
59
- },
60
- cyan: {
61
- r: 0,
62
- g: 197,
63
- b: 199
64
- },
65
- white: {
66
- r: 199,
67
- g: 199,
68
- b: 199
69
- },
70
- blackBright: {
71
- r: 104,
72
- g: 104,
73
- b: 104
74
- },
75
- redBright: {
76
- r: 255,
77
- g: 110,
78
- b: 103
79
- },
80
- greenBright: {
81
- r: 95,
82
- g: 250,
83
- b: 104
84
- },
85
- yellowBright: {
86
- r: 255,
87
- g: 252,
88
- b: 103
89
- },
90
- blueBright: {
91
- r: 104,
92
- g: 113,
93
- b: 255
94
- },
95
- magentaBright: {
96
- r: 255,
97
- g: 118,
98
- b: 255
99
- },
100
- cyanBright: {
101
- r: 95,
102
- g: 253,
103
- b: 255
104
- },
105
- whiteBright: {
106
- r: 255,
107
- g: 255,
108
- b: 255
109
- }
110
- };
111
- function nearestAnsi16(r, g, b) {
112
- let best = "white";
113
- let bestDist = Number.POSITIVE_INFINITY;
114
- for (const [name, rgb] of Object.entries(ANSI16_RGB)) {
115
- const dr = r - rgb.r;
116
- const dg = g - rgb.g;
117
- const db = b - rgb.b;
118
- const d = dr * dr + dg * dg + db * db;
119
- if (d < bestDist) {
120
- bestDist = d;
121
- best = name;
122
- }
123
- }
124
- return best;
125
- }
126
- function ansi256ToRgb(index) {
127
- const n = Math.max(0, Math.min(255, Math.trunc(index)));
128
- if (n < 16) {
129
- const map = [
130
- "black",
131
- "red",
132
- "green",
133
- "yellow",
134
- "blue",
135
- "magenta",
136
- "cyan",
137
- "white",
138
- "blackBright",
139
- "redBright",
140
- "greenBright",
141
- "yellowBright",
142
- "blueBright",
143
- "magentaBright",
144
- "cyanBright",
145
- "whiteBright"
146
- ];
147
- const name = map[n] ?? "white";
148
- return ANSI16_RGB[name];
149
- }
150
- if (n >= 232) {
151
- const c = 8 + (n - 232) * 10;
152
- return {
153
- r: c,
154
- g: c,
155
- b: c
156
- };
157
- }
158
- const i = n - 16;
159
- const rr = Math.floor(i / 36);
160
- const gg = Math.floor(i % 36 / 6);
161
- const bb = i % 6;
162
- const toComponent = (v) => v === 0 ? 0 : 55 + v * 40;
163
- return {
164
- r: toComponent(rr),
165
- g: toComponent(gg),
166
- b: toComponent(bb)
167
- };
168
- }
169
- function applyAnsiSgrStyle(current, codes) {
170
- let next = { ...current };
171
- for (let i = 0; i < codes.length; i++) {
172
- const code = codes[i];
173
- if (code === 0) {
174
- next = {};
175
- continue;
176
- }
177
- if (code === 1) next = {
178
- ...next,
179
- bold: true
180
- };
181
- else if (code === 2) next = {
182
- ...next,
183
- dim: true
184
- };
185
- else if (code === 3) next = {
186
- ...next,
187
- italic: true
188
- };
189
- else if (code === 4) next = {
190
- ...next,
191
- underline: true
192
- };
193
- else if (code === 7) next = {
194
- ...next,
195
- inverse: true
196
- };
197
- else if (code === 22) next = {
198
- ...next,
199
- bold: false,
200
- dim: false
201
- };
202
- else if (code === 23) next = {
203
- ...next,
204
- italic: false
205
- };
206
- else if (code === 24) next = {
207
- ...next,
208
- underline: false
209
- };
210
- else if (code === 27) next = {
211
- ...next,
212
- inverse: false
213
- };
214
- else if (code === 39) next = {
215
- ...next,
216
- fg: void 0
217
- };
218
- else if (code === 49) next = {
219
- ...next,
220
- bg: void 0
221
- };
222
- else if (code >= 30 && code <= 37 || code >= 90 && code <= 97) {
223
- const fg = ansi16ToColorName(code);
224
- next = {
225
- ...next,
226
- fg: fg ?? next.fg
227
- };
228
- } else if (code >= 40 && code <= 47 || code >= 100 && code <= 107) {
229
- const bg = ansi16BgToColorName(code);
230
- next = {
231
- ...next,
232
- bg: bg ?? next.bg
233
- };
234
- } else if (code === 38 || code === 48) {
235
- const mode = codes[i + 1];
236
- if (mode === 5) {
237
- const idx = codes[i + 2];
238
- if (idx != null) {
239
- const { r, g, b } = ansi256ToRgb(idx);
240
- const name = nearestAnsi16(r, g, b);
241
- next = code === 38 ? {
242
- ...next,
243
- fg: name
244
- } : {
245
- ...next,
246
- bg: name
247
- };
248
- }
249
- i += 2;
250
- } else if (mode === 2) {
251
- const r = codes[i + 2];
252
- const g = codes[i + 3];
253
- const b = codes[i + 4];
254
- if (r != null && g != null && b != null) {
255
- const name = nearestAnsi16(r, g, b);
256
- next = code === 38 ? {
257
- ...next,
258
- fg: name
259
- } : {
260
- ...next,
261
- bg: name
262
- };
263
- }
264
- i += 4;
265
- }
266
- }
267
- }
268
- return next;
269
- }
270
- function parseAnsiSgr(input, baseStyle = {}) {
271
- const segments = [];
272
- let style = { ...baseStyle };
273
- let lastIndex = 0;
274
- for (let i = 0; i < input.length; i++) {
275
- if (input[i] !== ESC || input[i + 1] !== "[") continue;
276
- let j = i + 2;
277
- while (j < input.length) {
278
- const c = input.charCodeAt(j);
279
- if (c >= 48 && c <= 57 || c === 59) {
280
- j++;
281
- continue;
282
- }
283
- break;
284
- }
285
- if (j >= input.length || input[j] !== "m") continue;
286
- if (i > lastIndex) segments.push({
287
- text: input.slice(lastIndex, i),
288
- style
289
- });
290
- const body = input.slice(i + 2, j);
291
- const codes = body.split(";").filter(Boolean).map((n) => Number.parseInt(n, 10)).filter((n) => Number.isFinite(n));
292
- style = applyAnsiSgrStyle(style, codes.length ? codes : [0]);
293
- lastIndex = j + 1;
294
- i = j;
295
- }
296
- if (lastIndex < input.length) segments.push({
297
- text: input.slice(lastIndex),
298
- style
299
- });
300
- return segments;
301
- }
302
-
303
- //#endregion
304
- //#region src/utils/url-safety.ts
305
- const ENCODED_ASCII_CONTROL_RE = /%(?:0[0-9a-f]|1[0-9a-f]|7f)/i;
306
- function hasControlCodePoint(value) {
307
- for (let i = 0; i < value.length; i++) {
308
- const code = value.charCodeAt(i);
309
- if (code <= 31 || code >= 127 && code <= 159) return true;
310
- }
311
- return false;
312
- }
313
- function hasEncodedControl(value) {
314
- let current = String(value ?? "");
315
- for (let depth = 0; depth < 3; depth++) {
316
- if (ENCODED_ASCII_CONTROL_RE.test(current)) return true;
317
- let decoded;
318
- try {
319
- decoded = decodeURIComponent(current);
320
- } catch {
321
- return true;
322
- }
323
- if (hasControlCodePoint(decoded)) return true;
324
- if (decoded === current) return false;
325
- current = decoded;
326
- }
327
- return ENCODED_ASCII_CONTROL_RE.test(current) || hasControlCodePoint(current);
328
- }
329
-
330
- //#endregion
331
- //#region src/core/hyperlink.ts
332
- const SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i;
333
- const BLOCKED_SCHEME_RE = /^(?:javascript|data|vbscript):/i;
334
- const SAFE_RELATIVE_HREF_RE = /^(?:[A-Za-z0-9._~!$&()*+,;=:@/?#-]|%[0-9A-Fa-f]{2})+$/u;
335
- function normalizeRawHref(value) {
336
- if (typeof value !== "string") return null;
337
- const raw = value.trim();
338
- if (!raw) return null;
339
- if (raw !== value) return null;
340
- for (let i = 0; i < value.length; i++) {
341
- const code = value.charCodeAt(i);
342
- if (code <= 31 || code >= 127 && code <= 159) return null;
343
- }
344
- if (/\s/u.test(raw)) return null;
345
- if (raw.startsWith("//")) return null;
346
- if (BLOCKED_SCHEME_RE.test(raw)) return null;
347
- if (hasEncodedControl(raw)) return null;
348
- return raw;
349
- }
350
- function hrefScheme(raw) {
351
- return raw.match(SCHEME_RE)?.[0].toLowerCase() ?? null;
352
- }
353
- function parseSafeAbsoluteUrl(raw) {
354
- if (raw.includes("\\")) return null;
355
- try {
356
- return new URL(raw);
357
- } catch {
358
- return null;
359
- }
360
- }
361
- function sanitizeAbsoluteHref(raw, options = {}) {
362
- const url = parseSafeAbsoluteUrl(raw);
363
- if (!url) return null;
364
- if (url.protocol === "http:" || url.protocol === "https:") {
365
- if (!/^https?:\/\//i.test(raw)) return null;
366
- return options.preserveHttpHref ? raw : url.toString();
367
- }
368
- if (url.protocol === "mailto:") return raw;
369
- return null;
370
- }
371
- function isSafeNormalizedRelativeHref(raw) {
372
- if (raw.includes("\\")) return false;
373
- if (raw.startsWith("//")) return false;
374
- if (SCHEME_RE.test(raw)) return false;
375
- if (hasEncodedControl(raw)) return false;
376
- if (!SAFE_RELATIVE_HREF_RE.test(raw)) return false;
377
- return raw.startsWith("#") || raw.startsWith("?") || raw.startsWith("/") || raw.startsWith("./") || raw.startsWith("../") || /^[A-Za-z0-9._~-]/u.test(raw);
378
- }
379
- function isSafeRelativeHref(value) {
380
- const raw = normalizeRawHref(value);
381
- return raw != null && isSafeNormalizedRelativeHref(raw);
382
- }
383
- function sanitizeTerminalHref(value, options = {}) {
384
- const raw = normalizeRawHref(value);
385
- if (!raw) return null;
386
- const sanitized = sanitizeAbsoluteHref(raw, { preserveHttpHref: true });
387
- if (sanitized) return sanitized;
388
- if (options.allowFileUrls) {
389
- const url = parseSafeAbsoluteUrl(raw);
390
- if (url?.protocol === "file:") return url.toString();
391
- }
392
- return null;
393
- }
394
- function sanitizeDomHref(value, options = {}) {
395
- const raw = normalizeRawHref(value);
396
- if (!raw) return null;
397
- const scheme = hrefScheme(raw);
398
- if (!scheme) return options.allowRelative !== false && isSafeNormalizedRelativeHref(raw) ? raw : null;
399
- return sanitizeAbsoluteHref(raw);
400
- }
401
-
402
- //#endregion
403
- export { applyAnsiSgrStyle, hasEncodedControl, isSafeRelativeHref, parseAnsiSgr, sanitizeDomHref, sanitizeTerminalHref };
File without changes
File without changes
File without changes