@simon_he/vue-tui 1.1.6 → 1.1.7

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 (39) hide show
  1. package/README.md +1 -0
  2. package/dist/TAgentTerminalGraphic-B8-YZfuP.js +1198 -0
  3. package/dist/{TSelect-CMBOOFwK.js → TSelect-CCsjjCOr.js} +41 -12
  4. package/dist/{TTree-kk8ntrpg.js → TTree-3W5A2_EH.js} +4 -3
  5. package/dist/TVideo-D9AOiyq2.js +948 -0
  6. package/dist/agent.cjs +4926 -4364
  7. package/dist/agent.js +11 -9
  8. package/dist/{block-source-DByORvKG.js → block-source-BhvdZomx.js} +3 -3
  9. package/dist/cli.cjs +8 -8
  10. package/dist/cli.js +15 -5
  11. package/dist/core.js +2 -2
  12. package/dist/experimental/browser.cjs +3705 -0
  13. package/dist/experimental/browser.d.cts +3 -0
  14. package/dist/experimental/browser.d.ts +3 -0
  15. package/dist/experimental/browser.js +413 -0
  16. package/dist/experimental.cjs +1 -1
  17. package/dist/experimental.js +9 -947
  18. package/dist/{linkify-CL9wwnZN.js → frame-mailbox-DaTrfyaF.js} +2 -297
  19. package/dist/index.cjs +25 -8
  20. package/dist/index.js +6 -5
  21. package/dist/linkify-CklfA1vp.js +298 -0
  22. package/dist/markdown.cjs +4907 -4362
  23. package/dist/markdown.js +4 -4
  24. package/dist/{mermaid-CWy4wtCL.js → mermaid-D0ov4_A1.js} +3 -3
  25. package/dist/mermaid.cjs +1 -1
  26. package/dist/mermaid.js +4 -4
  27. package/dist/{path-suggest-Dndu4dTi.js → path-suggest-fPzRsgPv.js} +1 -1
  28. package/dist/renderer/terminal-graphics.d.ts +1 -1
  29. package/dist/{terminal-graphics-D6KErRBY.js → terminal-graphics-DpSL29OQ.js} +1 -1
  30. package/dist/{tlog-theme-DIrlCw6m.js → tlog-theme-BnILsD3n.js} +10 -1203
  31. package/dist/vue/browser/types.d.ts +52 -0
  32. package/dist/vue/components/TBrowser.d.ts +231 -0
  33. package/dist/vue.cjs +25 -8
  34. package/dist/vue.js +8 -7
  35. package/package.json +16 -2
  36. /package/dist/{TMermaidText-wLnMMvVS.js → TMermaidText-C1akgJPU.js} +0 -0
  37. /package/dist/{math-image-BZhmfUeu.js → math-image-CcUpBnW0.js} +0 -0
  38. /package/dist/{path-mnSgEpCm.js → path-BI9W15Zt.js} +0 -0
  39. /package/dist/{wheel-scroll-DASkEZr-.js → wheel-scroll-CQ22Hcyj.js} +0 -0
package/dist/agent.js CHANGED
@@ -1,19 +1,21 @@
1
1
  import "./create-terminal-Db_-UGVQ.js";
2
2
  import "./hyperlink-clbb_ha_.js";
3
3
  import { forEachTextCellSegment, recordTerminalGraphicTrace, sanitizeInlineText, sanitizeTextBlock, sliceByCells, spaces, textCellWidth$1 as textCellWidth, useTerminal, withTextWidthProvider } from "./rect-JzWMJxxc.js";
4
- import { TText, TView } from "./linkify-CL9wwnZN.js";
4
+ import "./linkify-CklfA1vp.js";
5
5
  import "./frame-perf-CHpWhbC4.js";
6
6
  import "./env-Cl8qmNFN.js";
7
7
  import "./terminal-selection-4W1SJj4c.js";
8
8
  import "./debug-logger-CmsGI4of.js";
9
- import { TBox, TCommandPalette, TDialog, TInput, TRenderPlane, TSelect, computeCommandPaletteMatchRanges } from "./TSelect-CMBOOFwK.js";
10
- import "./path-mnSgEpCm.js";
11
- import "./wheel-scroll-DASkEZr-.js";
12
- import { TMermaid$1 as TMermaid, TMermaidText$1 as TMermaidText, isSimpleMermaidFlowchartSource, markMermaidRenderErrorFatal } from "./TMermaidText-wLnMMvVS.js";
13
- import { createIterm2InlineImageSequence, createKittyDeleteGraphicsSequence, createKittyGraphicsSequence, createKittyPlacementSequence, createTerminalGraphicPngSequence, detectTerminalGraphicsCapabilities, getTerminalGraphicsOutput, getTerminalGraphicsOutputVersion, hashTerminalGraphicsString, isSafeTerminalGraphicsSequence, normalizeTerminalGraphicSize, sanitizeTerminalFallbackText, subscribeTerminalGraphicsOutput } from "./terminal-graphics-D6KErRBY.js";
14
- import { TVirtualMarkdown, createMarkdownBlockSource } from "./block-source-DByORvKG.js";
15
- import "./math-image-BZhmfUeu.js";
16
- import { TAgentTerminalGraphic, TLogLinksPanel, TLogMinimap, TLogScrollbar, TLogSearchBar, TLogSearchPager, TLogSearchResults, TLogView, TLogVirtualLinksPanel, TLogVirtualSearchResults, TTranscriptView, TVirtualList, createAppendOnlyLogStore, createTLogDensityBucketsFromMarkers, createTLogLevelPlugin, createTLogLineMatcherPlugin, createTLogLinkActionPlugin, createTLogOsc8LinkPlugin, createTLogUrlPlugin, detectTLogUrls, dispatchTLogPluginLinkAction, getTLogPluginMetadata, parseTLogAnnotatedText, resolveTLogLinksPanelTheme, resolveTLogMinimapTheme, resolveTLogScrollbarTheme, resolveTLogSearchBarTheme, resolveTLogSearchPagerTheme, resolveTLogSearchResultsTheme, resolveTLogViewTheme, stripTLogAnsiText, tlogDarkPreset, tlogDarkTheme, tlogDefaultPreset, tlogDefaultTheme, tlogHighContrastPreset, tlogHighContrastTheme, toTLogExternalLinkFromVisibleLink, useTLogLinkController, useTLogRetainedIndex, useTLogSearchController, useTLogSearchResultsPage, useTLogVirtualSearchResults } from "./tlog-theme-DIrlCw6m.js";
9
+ import { TBox, TCommandPalette, TDialog, TInput, TRenderPlane, TSelect, computeCommandPaletteMatchRanges } from "./TSelect-CCsjjCOr.js";
10
+ import { TText, TView } from "./frame-mailbox-DaTrfyaF.js";
11
+ import "./path-BI9W15Zt.js";
12
+ import "./wheel-scroll-CQ22Hcyj.js";
13
+ import { TMermaid$1 as TMermaid, TMermaidText$1 as TMermaidText, isSimpleMermaidFlowchartSource, markMermaidRenderErrorFatal } from "./TMermaidText-C1akgJPU.js";
14
+ import { createIterm2InlineImageSequence, createKittyDeleteGraphicsSequence, createKittyGraphicsSequence, createKittyPlacementSequence, createTerminalGraphicPngSequence, detectTerminalGraphicsCapabilities, getTerminalGraphicsOutput, getTerminalGraphicsOutputVersion, hashTerminalGraphicsString, isSafeTerminalGraphicsSequence, normalizeTerminalGraphicSize, sanitizeTerminalFallbackText, subscribeTerminalGraphicsOutput } from "./terminal-graphics-DpSL29OQ.js";
15
+ import { TVirtualMarkdown, createMarkdownBlockSource } from "./block-source-BhvdZomx.js";
16
+ import "./math-image-CcUpBnW0.js";
17
+ import { TLogLinksPanel, TLogMinimap, TLogScrollbar, TLogSearchBar, TLogSearchPager, TLogSearchResults, TLogView, TLogVirtualLinksPanel, TLogVirtualSearchResults, TTranscriptView, TVirtualList, createAppendOnlyLogStore, createTLogDensityBucketsFromMarkers, createTLogLevelPlugin, createTLogLineMatcherPlugin, createTLogLinkActionPlugin, createTLogOsc8LinkPlugin, createTLogUrlPlugin, detectTLogUrls, dispatchTLogPluginLinkAction, getTLogPluginMetadata, parseTLogAnnotatedText, resolveTLogLinksPanelTheme, resolveTLogMinimapTheme, resolveTLogScrollbarTheme, resolveTLogSearchBarTheme, resolveTLogSearchPagerTheme, resolveTLogSearchResultsTheme, resolveTLogViewTheme, stripTLogAnsiText, tlogDarkPreset, tlogDarkTheme, tlogDefaultPreset, tlogDefaultTheme, tlogHighContrastPreset, tlogHighContrastTheme, toTLogExternalLinkFromVisibleLink, useTLogLinkController, useTLogRetainedIndex, useTLogSearchController, useTLogSearchResultsPage, useTLogVirtualSearchResults } from "./tlog-theme-BnILsD3n.js";
18
+ import { TAgentTerminalGraphic } from "./TAgentTerminalGraphic-B8-YZfuP.js";
17
19
  import { computed, defineComponent, h } from "vue";
18
20
 
19
21
  //#region src/vue/agent/view-models.ts
@@ -2,9 +2,9 @@ import { hasEncodedControl, sanitizeDomHref } from "./hyperlink-clbb_ha_.js";
2
2
  import { EventZIndexContextKey, RenderPlaneContextKey, currentTextWidthProvider, forEachTextCellSegment, intersectRect, normalizeCellRect, repeatChar, sanitizeInlineText, sanitizeTextBlock, sliceByCellsRange, spaces, textCellWidth$1 as textCellWidth, translateRect, useLayout, useRenderNode, useTerminal, useTerminalNode, useVisibility, withTextWidthProvider } from "./rect-JzWMJxxc.js";
3
3
  import { terminalSelectionRowSpans, terminalSelectionVisibleRowSpans } from "./terminal-selection-4W1SJj4c.js";
4
4
  import { createDebugLogger, isDebugEnabled } from "./debug-logger-CmsGI4of.js";
5
- import { applyWheelScroll, createWheelScrollState, resetWheelScrollState } from "./wheel-scroll-DASkEZr-.js";
6
- import { createIterm2InlineImageSequence, createKittyDeleteGraphicsSequence, createKittyGraphicsSequence, createKittyPlacementSequence, getTerminalGraphicsOutput, getTerminalGraphicsOutputVersion, isTerminalGraphicsProtocol, stableTerminalGraphicNumericId, subscribeTerminalGraphicsOutput } from "./terminal-graphics-D6KErRBY.js";
7
- import { enqueueMarkdownMathImages, getCachedMarkdownMathImage, isMarkdownMathImageRendererReady, loadMarkdownMathImageRenderer, resolveMarkdownMathColor, subscribeMarkdownMathImage } from "./math-image-BZhmfUeu.js";
5
+ import { applyWheelScroll, createWheelScrollState, resetWheelScrollState } from "./wheel-scroll-CQ22Hcyj.js";
6
+ import { createIterm2InlineImageSequence, createKittyDeleteGraphicsSequence, createKittyGraphicsSequence, createKittyPlacementSequence, getTerminalGraphicsOutput, getTerminalGraphicsOutputVersion, isTerminalGraphicsProtocol, stableTerminalGraphicNumericId, subscribeTerminalGraphicsOutput } from "./terminal-graphics-DpSL29OQ.js";
7
+ import { enqueueMarkdownMathImages, getCachedMarkdownMathImage, isMarkdownMathImageRendererReady, loadMarkdownMathImageRenderer, resolveMarkdownMathColor, subscribeMarkdownMathImage } from "./math-image-CcUpBnW0.js";
8
8
  import { computed, defineComponent, getCurrentInstance, h, inject, markRaw, onBeforeUnmount, ref, shallowRef, watch, watchEffect } from "vue";
9
9
  import { getMarkdown, parseMarkdownToStructure } from "stream-markdown-parser";
10
10
 
package/dist/cli.cjs CHANGED
@@ -7299,7 +7299,7 @@ var TERMINAL_GRAPHICS_PROTOCOL_PRIORITY = [
7299
7299
  "kitty",
7300
7300
  "iterm2",
7301
7301
  "sixel"
7302
- ], ESC4 = "\x1B", BEL = "\x07", ST = `${ESC4}\\`, ESC_RE = "\\u001B", BEL_RE = "\\u0007", CSI_RE = new RegExp(`${ESC_RE}\\[[0-?]*[ -/]*[@-~]`, "g"), OSC_RE = new RegExp(`${ESC_RE}\\][\\s\\S]*?(?:${BEL_RE}|${ESC_RE}\\\\)`, "g"), DCS_RE = new RegExp(`${ESC_RE}P[\\s\\S]*?${ESC_RE}\\\\`, "g"), APC_RE = new RegExp(`${ESC_RE}_[\\s\\S]*?${ESC_RE}\\\\`, "g"), C1_CSI_RE = new RegExp("\\u009B[0-?]*[ -/]*[@-~]", "g"), C1_OSC_RE = new RegExp(`\\u009D[\\s\\S]*?(?:${BEL_RE}|\\u009C)`, "g"), C1_DCS_RE = new RegExp("\\u0090[\\s\\S]*?\\u009C", "g"), C1_APC_RE = new RegExp("\\u009F[\\s\\S]*?\\u009C", "g"), MAX_TERMINAL_GRAPHICS_SEQUENCE_CHARS = 16 * 1024 * 1024, MAX_TERMINAL_GRAPHICS_FALLBACK_CHARS = 16384, MAX_TERMINAL_GRAPHIC_CELLS = 1e4, TERMINAL_GRAPHICS_REGISTRY = Symbol.for("@simon_he/vue-tui:v1:terminal-graphics"), terminalGraphicsGlobal = globalThis, terminalGraphicsRegistry = terminalGraphicsGlobal[TERMINAL_GRAPHICS_REGISTRY] ?? {
7302
+ ], ESC4 = "\x1B", BEL = "\x07", ST = `${ESC4}\\`, ESC_RE = "\\u001B", BEL_RE = "\\u0007", CSI_RE = new RegExp(`${ESC_RE}\\[[0-?]*[ -/]*[@-~]`, "g"), OSC_RE = new RegExp(`${ESC_RE}\\][\\s\\S]*?(?:${BEL_RE}|${ESC_RE}\\\\)`, "g"), DCS_RE = new RegExp(`${ESC_RE}P[\\s\\S]*?${ESC_RE}\\\\`, "g"), APC_RE = new RegExp(`${ESC_RE}_[\\s\\S]*?${ESC_RE}\\\\`, "g"), C1_CSI_RE = new RegExp("\\u009B[0-?]*[ -/]*[@-~]", "g"), C1_OSC_RE = new RegExp(`\\u009D[\\s\\S]*?(?:${BEL_RE}|\\u009C)`, "g"), C1_DCS_RE = new RegExp("\\u0090[\\s\\S]*?\\u009C", "g"), C1_APC_RE = new RegExp("\\u009F[\\s\\S]*?\\u009C", "g"), MAX_TERMINAL_GRAPHICS_SEQUENCE_CHARS = 16 * 1024 * 1024, MAX_TERMINAL_GRAPHICS_FALLBACK_CHARS = 16384, MAX_TERMINAL_GRAPHIC_CELLS = 1e5, TERMINAL_GRAPHICS_REGISTRY = Symbol.for("@simon_he/vue-tui:v1:terminal-graphics"), terminalGraphicsGlobal = globalThis, terminalGraphicsRegistry = terminalGraphicsGlobal[TERMINAL_GRAPHICS_REGISTRY] ?? {
7303
7303
  outputs: /* @__PURE__ */ new WeakMap(),
7304
7304
  outputVersions: /* @__PURE__ */ new WeakMap(),
7305
7305
  outputListeners: /* @__PURE__ */ new WeakMap()
@@ -9105,7 +9105,7 @@ function createStdoutRenderer(terminal, options) {
9105
9105
  }
9106
9106
  return end > start ? end : codePointEnd(data, start);
9107
9107
  };
9108
- function writeChunked(data) {
9108
+ function writeChunked(data, pin) {
9109
9109
  if (import_node_buffer3.Buffer.byteLength(data, "utf8") <= chunkSize) {
9110
9110
  out.write(data);
9111
9111
  return;
@@ -9115,8 +9115,8 @@ function createStdoutRenderer(terminal, options) {
9115
9115
  );
9116
9116
  try {
9117
9117
  for (let start = 0; start < data.length; ) {
9118
- let end = safeChunkEnd(data, start, chunkSize);
9119
- out.write(data.slice(start, end)), start = end;
9118
+ let end = safeChunkEnd(data, start, chunkSize), chunk = data.slice(start, end);
9119
+ out.write(end >= data.length || !pin ? chunk : `${chunk}${pin}`), start = end;
9120
9120
  }
9121
9121
  isDebugEnabled() && getDebugLog().render("writeChunked: chunked write completed");
9122
9122
  } catch (e) {
@@ -9904,12 +9904,12 @@ function createStdoutRenderer(terminal, options) {
9904
9904
  `terminal graphics frame: draws=${terminalGraphicsDraws}, clears=${terminalGraphicsClears}, bytes=${terminalGraphicsBytes}, activeNext=${nextActiveGraphics.size}`
9905
9905
  );
9906
9906
  }
9907
- let emittedCursorPos = null;
9907
+ let emittedCursorPos = null, frameCursorPin = null;
9908
9908
  if (getImeAnchor) {
9909
9909
  let anchor = getImeAnchor();
9910
9910
  if (anchor) {
9911
- let { x, y } = clampCellToViewport(anchor, size);
9912
- (hasFrameOutput || x !== lastCursorX || y !== lastCursorY) && (hasFrameOutput = !0, emittedCursorPos = { x, y }, closeActiveHrefBeforeCursorMove(), frameParts.push(`\x1B[${y + 1 + rowOffset};${x + 1}H`));
9911
+ let { x, y } = clampCellToViewport(anchor, size), cursorSequence = `\x1B[${y + 1 + rowOffset};${x + 1}H`;
9912
+ frameCursorPin = cursorSequence, (hasFrameOutput || x !== lastCursorX || y !== lastCursorY) && (hasFrameOutput = !0, emittedCursorPos = { x, y }, closeActiveHrefBeforeCursorMove(), frameParts.push(cursorSequence));
9913
9913
  }
9914
9914
  }
9915
9915
  if (!hasFrameOutput) {
@@ -9972,7 +9972,7 @@ function createStdoutRenderer(terminal, options) {
9972
9972
  if (writeMode === "chunked")
9973
9973
  isDebugEnabled() && getDebugLog().render(
9974
9974
  ` Using chunked write (chunkSize=${chunkSize}, threshold=${chunkThresholdBytes}, emaMs=${writeEmaMs.toFixed(2)})`
9975
- ), writeChunked(frame);
9975
+ ), writeChunked(frame, frameCursorPin);
9976
9976
  else if (writeMode === "sync" && canUseSyncStdout) {
9977
9977
  isDebugEnabled() && getDebugLog().render(" Using writeSync");
9978
9978
  try {
package/dist/cli.js CHANGED
@@ -9267,7 +9267,7 @@ const C1_DCS_RE = new RegExp("\\u0090[\\s\\S]*?\\u009C", "g");
9267
9267
  const C1_APC_RE = new RegExp("\\u009F[\\s\\S]*?\\u009C", "g");
9268
9268
  const MAX_TERMINAL_GRAPHICS_SEQUENCE_CHARS = 16 * 1024 * 1024;
9269
9269
  const MAX_TERMINAL_GRAPHICS_FALLBACK_CHARS = 16384;
9270
- const MAX_TERMINAL_GRAPHIC_CELLS = 1e4;
9270
+ const MAX_TERMINAL_GRAPHIC_CELLS = 1e5;
9271
9271
  const TERMINAL_GRAPHICS_REGISTRY = Symbol.for("@simon_he/vue-tui:v1:terminal-graphics");
9272
9272
  const terminalGraphicsGlobal = globalThis;
9273
9273
  const terminalGraphicsRegistry = terminalGraphicsGlobal[TERMINAL_GRAPHICS_REGISTRY] ?? {
@@ -11546,8 +11546,14 @@ function createStdoutRenderer(terminal, options) {
11546
11546
  /**
11547
11547
  * Write data in chunks to avoid overwhelming terminal buffers.
11548
11548
  * This is especially important for ghostty which can hang on large writes.
11549
+ *
11550
+ * `pin` is appended after every chunk but the last. A host may observe the
11551
+ * terminal between two writes (macOS asks for the IME rect when the marked text
11552
+ * changes), and a chunk boundary would otherwise expose the cell of the last
11553
+ * painted row instead of the frame's IME cursor, while the preedit — rendered
11554
+ * only when the frame's synchronized output ends — stays on that cursor.
11549
11555
  */
11550
- function writeChunked(data) {
11556
+ function writeChunked(data, pin) {
11551
11557
  if (Buffer.byteLength(data, "utf8") <= chunkSize) {
11552
11558
  out.write(data);
11553
11559
  return;
@@ -11556,7 +11562,8 @@ function createStdoutRenderer(terminal, options) {
11556
11562
  try {
11557
11563
  for (let start = 0; start < data.length;) {
11558
11564
  const end = safeChunkEnd(data, start, chunkSize);
11559
- out.write(data.slice(start, end));
11565
+ const chunk = data.slice(start, end);
11566
+ out.write(end >= data.length || !pin ? chunk : `${chunk}${pin}`);
11560
11567
  start = end;
11561
11568
  }
11562
11569
  if (isDebugEnabled()) getDebugLog().render(`writeChunked: chunked write completed`);
@@ -12666,10 +12673,13 @@ function createStdoutRenderer(terminal, options) {
12666
12673
  if (isDebugEnabled()) getDebugLog().render(`terminal graphics frame: draws=${terminalGraphicsDraws}, clears=${terminalGraphicsClears}, bytes=${terminalGraphicsBytes}, activeNext=${nextActiveGraphics.size}`);
12667
12674
  }
12668
12675
  let emittedCursorPos = null;
12676
+ let frameCursorPin = null;
12669
12677
  if (getImeAnchor) {
12670
12678
  const anchor = getImeAnchor();
12671
12679
  if (anchor) {
12672
12680
  const { x, y } = clampCellToViewport(anchor, size);
12681
+ const cursorSequence = `\u001B[${y + 1 + rowOffset};${x + 1}H`;
12682
+ frameCursorPin = cursorSequence;
12673
12683
  if (hasFrameOutput || x !== lastCursorX || y !== lastCursorY) {
12674
12684
  hasFrameOutput = true;
12675
12685
  emittedCursorPos = {
@@ -12677,7 +12687,7 @@ function createStdoutRenderer(terminal, options) {
12677
12687
  y
12678
12688
  };
12679
12689
  closeActiveHrefBeforeCursorMove();
12680
- frameParts.push(`\u001B[${y + 1 + rowOffset};${x + 1}H`);
12690
+ frameParts.push(cursorSequence);
12681
12691
  }
12682
12692
  }
12683
12693
  }
@@ -12768,7 +12778,7 @@ function createStdoutRenderer(terminal, options) {
12768
12778
  try {
12769
12779
  if (writeMode === "chunked") {
12770
12780
  if (isDebugEnabled()) getDebugLog().render(` Using chunked write (chunkSize=${chunkSize}, threshold=${chunkThresholdBytes}, emaMs=${writeEmaMs.toFixed(2)})`);
12771
- writeChunked(frame);
12781
+ writeChunked(frame, frameCursorPin);
12772
12782
  } else if (writeMode === "sync" && canUseSyncStdout) {
12773
12783
  if (isDebugEnabled()) getDebugLog().render(` Using writeSync`);
12774
12784
  try {
package/dist/core.js CHANGED
@@ -2,8 +2,8 @@ import { TERMINAL_RENDER_PLANES, charCellWidth, createTerminal, parseAnsiSgr } f
2
2
  import { ansiColorRgb } from "./ansi-palette-BHF1rN7R.js";
3
3
  import { isSafeRelativeHref, sanitizeDomHref, sanitizeTerminalHref } from "./hyperlink-clbb_ha_.js";
4
4
  import { firstNonEmptyEnv } from "./env-Cl8qmNFN.js";
5
- import { normalizeNewlines } from "./path-mnSgEpCm.js";
6
- import { parsePathQuery, resolveUserPath, suggestParentHint, suggestPaths } from "./path-suggest-Dndu4dTi.js";
5
+ import { normalizeNewlines } from "./path-BI9W15Zt.js";
6
+ import { parsePathQuery, resolveUserPath, suggestParentHint, suggestPaths } from "./path-suggest-fPzRsgPv.js";
7
7
 
8
8
  //#region src/core/ansi/colors.ts
9
9
  const ANSI8_COLOR_NAMES = Object.freeze([