@simon_he/vue-tui 1.0.2 → 1.1.1

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 (104) hide show
  1. package/README.md +44 -26
  2. package/dist/TMermaidText-CXm_L969.js +885 -0
  3. package/dist/{TSelect-DR0FomSu.js → TSelect-CiyMvwl-.js} +60 -81
  4. package/dist/{TTree-kzhlB5P0.js → TTree-DKGiuIcM.js} +140 -103
  5. package/dist/agent/mermaid.cjs +2 -0
  6. package/dist/agent/mermaid.d.cts +2 -0
  7. package/dist/agent/mermaid.d.ts +2 -0
  8. package/dist/agent/mermaid.js +1 -0
  9. package/dist/agent.cjs +31184 -24907
  10. package/dist/agent.d.cts +11 -1
  11. package/dist/agent.d.ts +11 -1
  12. package/dist/agent.js +1700 -13
  13. package/dist/block-source-5CQp4tF8.js +3230 -0
  14. package/dist/cli/stdin-buffer.d.ts +1 -1
  15. package/dist/cli.cjs +5037 -6767
  16. package/dist/cli.d.cts +4 -0
  17. package/dist/cli.d.ts +4 -0
  18. package/dist/cli.js +2733 -148
  19. package/dist/core/buffer/eaw-ranges-unicode-17.d.ts +14 -0
  20. package/dist/core/perf/instrumentation-noop.d.ts +48 -0
  21. package/dist/core/perf/instrumentation.d.ts +136 -0
  22. package/dist/core/terminal/create-terminal.d.ts +1 -0
  23. package/dist/core.cjs +843 -1469
  24. package/dist/core.js +6 -6
  25. package/dist/{create-terminal-DBFNYr8f.js → create-terminal-DXuZ2fci.js} +39 -13
  26. package/dist/debug-logger-ChY_PXVk.js +74 -0
  27. package/dist/{dom-renderer-BniJSQyX.js → dom-renderer-DNzmg2As.js} +2 -2
  28. package/dist/experimental.cjs +4115 -5928
  29. package/dist/experimental.d.cts +2 -0
  30. package/dist/experimental.d.ts +2 -0
  31. package/dist/experimental.js +1490 -9
  32. package/dist/frame-perf-BBhE-iuS.js +111 -0
  33. package/dist/{sgr-BmzxEjAO.js → hyperlink-B35-O-cW.js} +100 -1
  34. package/dist/index.cjs +5017 -10339
  35. package/dist/index.js +16 -14
  36. package/dist/{linkify-D_gzn9Xq.js → linkify-CuuquMQT.js} +32 -3
  37. package/dist/markdown.cjs +21295 -12691
  38. package/dist/markdown.d.cts +1 -1
  39. package/dist/markdown.d.ts +1 -1
  40. package/dist/markdown.js +211 -51
  41. package/dist/mermaid-CWto52Wk.js +123 -0
  42. package/dist/mermaid.cjs +1707 -0
  43. package/dist/mermaid.d.cts +3 -0
  44. package/dist/mermaid.d.ts +3 -0
  45. package/dist/mermaid.js +6 -0
  46. package/dist/observability/frame-perf-store.d.ts +2 -1
  47. package/dist/observability/frame-perf.d.ts +33 -0
  48. package/dist/observability.cjs +106 -107
  49. package/dist/observability.d.cts +2 -2
  50. package/dist/observability.d.ts +2 -2
  51. package/dist/observability.js +3 -3
  52. package/dist/{path-suggest-BNqcuE3-.js → path-suggest-fPzRsgPv.js} +1 -1
  53. package/dist/{wheel-scroll-vBRaQ7p-.js → rect-Ng-3eKzF.js} +253 -117
  54. package/dist/renderer/cli/stdout-metrics.d.ts +10 -0
  55. package/dist/renderer/cli/stdout-renderer.d.ts +3 -0
  56. package/dist/renderer/terminal-graphic-render-queue.d.ts +50 -0
  57. package/dist/renderer/terminal-graphics-trace.d.ts +53 -0
  58. package/dist/renderer/terminal-graphics.d.ts +146 -0
  59. package/dist/renderer-dom.cjs +364 -903
  60. package/dist/renderer-dom.js +4 -4
  61. package/dist/runtime/index.d.ts +2 -0
  62. package/dist/{runtime-rfcZCyJq.js → runtime-D77C03RM.js} +28 -15
  63. package/dist/runtime.cjs +427 -889
  64. package/dist/runtime.js +2 -2
  65. package/dist/{terminal-selection-DBinO6p5.js → terminal-selection-CQYr--26.js} +4 -1
  66. package/dist/{tlog-theme-CvLFNMwk.js → tlog-theme-CopRt9SC.js} +37 -6
  67. package/dist/{trace-CjzYeIxN.js → trace-CYHDKM1m.js} +5 -0
  68. package/dist/vue/agent/create-png-terminal-graphic-renderer.d.ts +19 -0
  69. package/dist/vue/components/TAgentTerminalGraphic.d.ts +481 -0
  70. package/dist/vue/components/TCharts.d.ts +1121 -0
  71. package/dist/vue/components/TFeedback.d.ts +1 -1
  72. package/dist/vue/components/TFlex.d.ts +389 -0
  73. package/dist/vue/components/TForm.d.ts +4 -4
  74. package/dist/vue/components/TLogSearchBar.d.ts +3 -3
  75. package/dist/vue/components/TLogSearchPager.d.ts +2 -2
  76. package/dist/vue/components/TMarkdownText.d.ts +162 -4
  77. package/dist/vue/components/TMermaidText.d.ts +900 -0
  78. package/dist/vue/components/TVirtualList.d.ts +9 -0
  79. package/dist/vue/components/TVirtualMarkdown.d.ts +170 -9
  80. package/dist/vue/components/TVirtualRows.d.ts +9 -0
  81. package/dist/vue/components/TerminalProvider.d.ts +2 -0
  82. package/dist/vue/context.d.ts +24 -0
  83. package/dist/vue/index.d.ts +5 -0
  84. package/dist/vue/layout/flex.d.ts +67 -0
  85. package/dist/vue/markdown/ast.d.ts +5 -2
  86. package/dist/vue/markdown/document.d.ts +5 -0
  87. package/dist/vue/markdown/image-actions.d.ts +14 -0
  88. package/dist/vue/markdown/image.d.ts +11 -0
  89. package/dist/vue/markdown/link-actions.d.ts +14 -0
  90. package/dist/vue/markdown/math-actions.d.ts +14 -0
  91. package/dist/vue/markdown/math.d.ts +6 -0
  92. package/dist/vue/markdown/render.d.ts +28 -0
  93. package/dist/vue/markdown/types.d.ts +78 -0
  94. package/dist/vue/mermaid/beautiful-mermaid.d.ts +1436 -0
  95. package/dist/vue/render/render-manager.d.ts +7 -0
  96. package/dist/vue.cjs +7207 -12437
  97. package/dist/vue.js +706 -39
  98. package/dist/wheel-scroll-CQ22Hcyj.js +106 -0
  99. package/dist/{hyperlink-Bn02UXJb.js → width-GqllnV8C.js} +166 -111
  100. package/package.json +85 -14
  101. package/dist/block-source-CKUOnkgT.js +0 -1663
  102. package/dist/frame-perf-C6Xfg85O.js +0 -24
  103. /package/dist/{env-Cl8qmNFN.js → env-DNCzvX8b.js} +0 -0
  104. /package/dist/{path-mnSgEpCm.js → path-BI9W15Zt.js} +0 -0
package/dist/core.js CHANGED
@@ -1,10 +1,10 @@
1
- import { TERMINAL_RENDER_PLANES, createTerminal } from "./create-terminal-DBFNYr8f.js";
2
- import { charCellWidth, isSafeRelativeHref, sanitizeDomHref, sanitizeTerminalHref } from "./hyperlink-Bn02UXJb.js";
3
- import { parseAnsiSgr } from "./sgr-BmzxEjAO.js";
1
+ import { TERMINAL_RENDER_PLANES, createTerminal } from "./create-terminal-DXuZ2fci.js";
2
+ import { charCellWidth } from "./width-GqllnV8C.js";
3
+ import { isSafeRelativeHref, parseAnsiSgr, sanitizeDomHref, sanitizeTerminalHref } from "./hyperlink-B35-O-cW.js";
4
4
  import { ansiColorRgb } from "./ansi-palette-CNXqFciC.js";
5
- import { firstNonEmptyEnv } from "./env-Cl8qmNFN.js";
6
- import { normalizeNewlines } from "./path-mnSgEpCm.js";
7
- import { parsePathQuery, resolveUserPath, suggestParentHint, suggestPaths } from "./path-suggest-BNqcuE3-.js";
5
+ import { firstNonEmptyEnv } from "./env-DNCzvX8b.js";
6
+ import { normalizeNewlines } from "./path-BI9W15Zt.js";
7
+ import { parsePathQuery, resolveUserPath, suggestParentHint, suggestPaths } from "./path-suggest-fPzRsgPv.js";
8
8
 
9
9
  //#region src/core/ansi/colors.ts
10
10
  const ANSI8_COLOR_NAMES = Object.freeze([
@@ -1,5 +1,5 @@
1
- import { charCellWidth, segmentedGraphemes } from "./hyperlink-Bn02UXJb.js";
2
- import { parseAnsiSgr } from "./sgr-BmzxEjAO.js";
1
+ import { charCellWidth, segmentedGraphemes } from "./width-GqllnV8C.js";
2
+ import { parseAnsiSgr } from "./hyperlink-B35-O-cW.js";
3
3
 
4
4
  //#region src/core/render-plane.ts
5
5
  const TERMINAL_RENDER_PLANES = [
@@ -427,9 +427,12 @@ function resizeBuffer(buffer, cols, rows) {
427
427
  const nextCols = Math.max(0, Math.floor(cols));
428
428
  const nextRows = Math.max(0, Math.floor(rows));
429
429
  if (nextCols === buffer.cols && nextRows === buffer.rows) return;
430
+ const prevRows = buffer.rows;
431
+ const prevDirtyAll = buffer.dirtyAll;
432
+ const prevDirtyBits = buffer.dirtyBits;
430
433
  const blank = createBlankCell();
431
434
  const nextGrid = Array.from({ length: nextRows }, () => Array.from({ length: nextCols }, () => blank));
432
- const copyRows = Math.min(buffer.rows, nextRows);
435
+ const copyRows = Math.min(prevRows, nextRows);
433
436
  const copyCols = Math.min(buffer.cols, nextCols);
434
437
  for (let y = 0; y < copyRows; y++) {
435
438
  const src = getBufferRow(buffer, y);
@@ -453,10 +456,21 @@ function resizeBuffer(buffer, cols, rows) {
453
456
  buffer.cols = nextCols;
454
457
  buffer.rows = nextRows;
455
458
  buffer.dirtyBits = new Uint8Array(nextRows);
456
- buffer.dirtyCount = nextRows || 0;
457
- buffer.dirtyMin = nextRows ? 0 : Number.POSITIVE_INFINITY;
458
- buffer.dirtyMax = nextRows ? nextRows - 1 : -1;
459
- buffer.dirtyAll = nextRows > 0;
459
+ buffer.dirtyCount = 0;
460
+ buffer.dirtyMin = Number.POSITIVE_INFINITY;
461
+ buffer.dirtyMax = -1;
462
+ buffer.dirtyAll = prevDirtyAll && nextRows > 0;
463
+ if (buffer.dirtyAll) {
464
+ buffer.dirtyCount = nextRows;
465
+ buffer.dirtyMin = 0;
466
+ buffer.dirtyMax = nextRows - 1;
467
+ } else for (let y = 0; y < copyRows; y++) {
468
+ if (prevDirtyBits[y] !== 1) continue;
469
+ buffer.dirtyBits[y] = 1;
470
+ buffer.dirtyCount++;
471
+ if (y < buffer.dirtyMin) buffer.dirtyMin = y;
472
+ if (y > buffer.dirtyMax) buffer.dirtyMax = y;
473
+ }
460
474
  buffer.cursorX = clamp(buffer.cursorX, 0, Math.max(0, nextCols));
461
475
  buffer.cursorY = clamp(buffer.cursorY, 0, Math.max(0, nextRows - 1));
462
476
  if (buffer.fingerprintFn) {
@@ -529,6 +543,10 @@ function mergePlanes(prev, next) {
529
543
  return Array.from(merged);
530
544
  }
531
545
  const TERMINAL_PLANE_INTERNALS = Symbol.for("@simon_he/vue-tui:v1:terminal-plane-internals");
546
+ const TERMINAL_ROOT = Symbol.for("@simon_he/vue-tui:v1:terminal-root");
547
+ function getRootTerminal(terminal) {
548
+ return terminal[TERMINAL_ROOT] ?? terminal;
549
+ }
532
550
  function createCoverage(cols, rows) {
533
551
  return Array.from({ length: rows }, () => new Uint8Array(cols));
534
552
  }
@@ -612,6 +630,8 @@ function markPlaneCoverageRange(state, x0, y0, x1, y1, value) {
612
630
  }
613
631
  }
614
632
  function markPlaneCoverageForPut(state, x, y, ch, prevCell) {
633
+ if (!Number.isSafeInteger(x) || !Number.isSafeInteger(y)) return;
634
+ if (x < 0 || x >= state.buffer.cols || y < 0 || y >= state.buffer.rows) return;
615
635
  const row = state.coverage[y];
616
636
  if (!row) return;
617
637
  if (prevCell?.continuation && x > 0) row[x - 1] = 1;
@@ -727,10 +747,14 @@ function createTerminal(opts) {
727
747
  }
728
748
  function putForPlane(plane, x, y, ch, style) {
729
749
  const state = getPlaneState(plane);
730
- if (y < 0 || y >= state.buffer.rows || x < 0 || x >= state.buffer.cols) return;
731
- const prevCell = getBufferCell(state.buffer, x, y);
732
- putCell(state.buffer, x, y, ch, style);
733
- markPlaneCoverageForPut(state, x, y, ch, prevCell);
750
+ if (typeof x !== "number" || typeof y !== "number") return;
751
+ const cellX = Math.floor(x);
752
+ const cellY = Math.floor(y);
753
+ if (!Number.isFinite(cellX) || !Number.isFinite(cellY)) return;
754
+ if (cellY < 0 || cellY >= state.buffer.rows || cellX < 0 || cellX >= state.buffer.cols) return;
755
+ const prevCell = getBufferCell(state.buffer, cellX, cellY);
756
+ putCell(state.buffer, cellX, cellY, ch, style);
757
+ markPlaneCoverageForPut(state, cellX, cellY, ch, prevCell);
734
758
  }
735
759
  function writeAtForPlane(plane, text, x, y, style) {
736
760
  const state = getPlaneState(plane);
@@ -1233,6 +1257,7 @@ function createTerminal(opts) {
1233
1257
  return getRowFingerprints(state.buffer, yy);
1234
1258
  }
1235
1259
  };
1260
+ api[TERMINAL_ROOT] = base;
1236
1261
  planeTerminals.set(plane, api);
1237
1262
  return api;
1238
1263
  }
@@ -1314,7 +1339,7 @@ function createTerminal(opts) {
1314
1339
  const rows = collectAndClearDirtyRows(state.buffer);
1315
1340
  if (rows === null) {
1316
1341
  composeAllRows = true;
1317
- break;
1342
+ continue;
1318
1343
  }
1319
1344
  for (const y of rows) dirtyRows.add(y);
1320
1345
  }
@@ -1436,8 +1461,9 @@ function createTerminal(opts) {
1436
1461
  scrollRowsForPlane(plane, startY, endY, lines);
1437
1462
  }
1438
1463
  };
1464
+ base[TERMINAL_ROOT] = base;
1439
1465
  return base;
1440
1466
  }
1441
1467
 
1442
1468
  //#endregion
1443
- export { TERMINAL_RENDER_PLANES, createTerminal, getPlaneTerminal, resetPlaneRowsForRender, scrollPlaneRows };
1469
+ export { TERMINAL_RENDER_PLANES, createTerminal, getPlaneTerminal, getRootTerminal, resetPlaneRowsForRender, scrollPlaneRows };
@@ -0,0 +1,74 @@
1
+ import { envFlag, envString } from "./env-DNCzvX8b.js";
2
+
3
+ //#region src/core/debug-logger.ts
4
+ const DEFAULT_LOG_FILE = "vue-tui-debug.log";
5
+ let debugFileWriter = null;
6
+ let debugLogDefaultPath = DEFAULT_LOG_FILE;
7
+ const initializedDebugLogPaths = new Set();
8
+ function getFileWriter() {
9
+ const writer = globalThis.__VT_DEBUG_FILE_WRITER__;
10
+ if (writer && typeof writer === "object") return writer;
11
+ return debugFileWriter;
12
+ }
13
+ function resolveDebugLogPath(env, fallback = DEFAULT_LOG_FILE) {
14
+ return envString(env, "VUE_TUI_DEBUG_LOG_PATH", "DIMCODE_DEBUG_LOG_PATH", fallback);
15
+ }
16
+ function debugLogPath() {
17
+ const env = globalThis.process?.env;
18
+ return resolveDebugLogPath(env, debugLogDefaultPath);
19
+ }
20
+ function safeJson(value) {
21
+ try {
22
+ return JSON.stringify(value);
23
+ } catch {
24
+ return "[unserializable]";
25
+ }
26
+ }
27
+ function createDebugLogger(enable = false) {
28
+ const enabled = enable;
29
+ const ensureHeader = () => {
30
+ if (!enabled) return;
31
+ const writer = getFileWriter();
32
+ if (!writer?.writeFileSync) return;
33
+ const path = debugLogPath();
34
+ if (initializedDebugLogPaths.has(path)) return;
35
+ try {
36
+ const data = `=== Vue TUI Debug Log Started at ${new Date().toISOString()} ===\n\n`;
37
+ writer.writeFileSync(path, data);
38
+ initializedDebugLogPaths.add(path);
39
+ } catch {}
40
+ };
41
+ const write = (data) => {
42
+ if (!enabled) return;
43
+ ensureHeader();
44
+ try {
45
+ getFileWriter()?.appendFileSync?.(debugLogPath(), data);
46
+ } catch {}
47
+ };
48
+ const log = (category, message) => {
49
+ if (!enabled) return;
50
+ const timestamp = new Date().toISOString().split("T")[1].slice(0, -1);
51
+ write(`[${timestamp}] ${category} ${message}\n`);
52
+ };
53
+ ensureHeader();
54
+ return {
55
+ render: (message) => log("[RENDER]", message),
56
+ stream: (message) => log("[STREAM]", message),
57
+ error: (message, ...args) => {
58
+ if (!enabled) return;
59
+ const timestamp = new Date().toISOString().split("T")[1].slice(0, -1);
60
+ const fullMessage = `[${timestamp}] [ERROR] ${message}${args.length ? ` ${safeJson(args)}` : ""}`;
61
+ write(`${fullMessage}\n`);
62
+ }
63
+ };
64
+ }
65
+ /**
66
+ * Check if debug logging is enabled via environment variable
67
+ */
68
+ function isDebugEnabled() {
69
+ const env = globalThis.process?.env;
70
+ return envFlag(env, "VUE_TUI_DEBUG", "DIMCODE_DEBUG") || env?.DEBUG === "1";
71
+ }
72
+
73
+ //#endregion
74
+ export { createDebugLogger, isDebugEnabled };
@@ -1,5 +1,5 @@
1
- import { TERMINAL_RENDER_PLANES, getPlaneTerminal } from "./create-terminal-DBFNYr8f.js";
2
- import { sanitizeDomHref } from "./hyperlink-Bn02UXJb.js";
1
+ import { TERMINAL_RENDER_PLANES, getPlaneTerminal } from "./create-terminal-DXuZ2fci.js";
2
+ import { sanitizeDomHref } from "./hyperlink-B35-O-cW.js";
3
3
  import { ansiColorHex, ansiCssVar, installAnsiPaletteCssVars, isAnsiColorName } from "./ansi-palette-CNXqFciC.js";
4
4
 
5
5
  //#region src/renderer/capabilities.ts