ansimax 1.3.0 → 1.3.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.
package/dist/index.js CHANGED
@@ -56,6 +56,7 @@ __export(index_exports, {
56
56
  canAnimate: () => canAnimate,
57
57
  cancelTerminalFrame: () => cancelTerminalFrame,
58
58
  center: () => center,
59
+ centerBlock: () => center2,
59
60
  chain: () => chain,
60
61
  charWidth: () => charWidth,
61
62
  clamp: () => clamp,
@@ -86,6 +87,7 @@ __export(index_exports, {
86
87
  findInTree: () => findInTree,
87
88
  flipHorizontal: () => flipHorizontal,
88
89
  flipVertical: () => flipVertical,
90
+ frame: () => frame,
89
91
  frames: () => frames,
90
92
  fromImage: () => fromImage,
91
93
  getConfig: () => getConfig,
@@ -1347,13 +1349,13 @@ var animateGradient = (text, stops, opts = {}) => {
1347
1349
  const elapsed = Date.now() - startTime;
1348
1350
  let phase = elapsed / safeDuration2 % 1;
1349
1351
  if (direction === "reverse") phase = 1 - phase;
1350
- const frame = gradient(text, stops, { preserveAnsi, easing, phase });
1352
+ const frame2 = gradient(text, stops, { preserveAnsi, easing, phase });
1351
1353
  if (onFrame) {
1352
- onFrame(frame, phase);
1354
+ onFrame(frame2, phase);
1353
1355
  } else {
1354
1356
  try {
1355
1357
  if (process?.stdout?.write) {
1356
- process.stdout.write("\r" + frame);
1358
+ process.stdout.write("\r" + frame2);
1357
1359
  }
1358
1360
  } catch {
1359
1361
  }
@@ -1643,9 +1645,9 @@ var safeWrite = (data) => {
1643
1645
  } catch {
1644
1646
  }
1645
1647
  };
1646
- var fireFrame = (hooks, frame) => {
1648
+ var fireFrame = (hooks, frame2) => {
1647
1649
  try {
1648
- hooks?.onFrame?.(frame);
1650
+ hooks?.onFrame?.(frame2);
1649
1651
  } catch {
1650
1652
  }
1651
1653
  };
@@ -1677,7 +1679,7 @@ var typewriter = async (text, opts = {}) => {
1677
1679
  registerCrashHandlers();
1678
1680
  hideCursorSafe();
1679
1681
  let aborted = false;
1680
- let frame = 0;
1682
+ let frame2 = 0;
1681
1683
  try {
1682
1684
  for (const ch of text) {
1683
1685
  if (isAborted(signal)) {
@@ -1685,7 +1687,7 @@ var typewriter = async (text, opts = {}) => {
1685
1687
  break;
1686
1688
  }
1687
1689
  await safeWriteAsync(colorFn ? colorFn(ch) : ch);
1688
- fireFrame(hooks, frame++);
1690
+ fireFrame(hooks, frame2++);
1689
1691
  await sleep(ch === " " ? speed * 0.3 : speed, { signal });
1690
1692
  }
1691
1693
  } finally {
@@ -1856,7 +1858,7 @@ var pulse = async (text, opts = {}) => {
1856
1858
  registerCrashHandlers();
1857
1859
  hideCursorSafe();
1858
1860
  let aborted = false;
1859
- let frame = 0;
1861
+ let frame2 = 0;
1860
1862
  try {
1861
1863
  for (let t = 0; t < cycles; t++) {
1862
1864
  if (isAborted(signal)) {
@@ -1866,7 +1868,7 @@ var pulse = async (text, opts = {}) => {
1866
1868
  await safeWriteAsync(
1867
1869
  cursor.save() + fgRgb(c1.r, c1.g, c1.b) + text + reset() + cursor.restore()
1868
1870
  );
1869
- fireFrame(hooks, frame++);
1871
+ fireFrame(hooks, frame2++);
1870
1872
  await sleep(halfInterval, { signal });
1871
1873
  if (isAborted(signal)) {
1872
1874
  aborted = true;
@@ -1875,7 +1877,7 @@ var pulse = async (text, opts = {}) => {
1875
1877
  await safeWriteAsync(
1876
1878
  cursor.save() + fgRgb(c2.r, c2.g, c2.b) + text + reset() + cursor.restore()
1877
1879
  );
1878
- fireFrame(hooks, frame++);
1880
+ fireFrame(hooks, frame2++);
1879
1881
  await sleep(halfInterval, { signal });
1880
1882
  }
1881
1883
  if (!aborted) {
@@ -3020,7 +3022,7 @@ var spin = (text = "Loading", opts = {}) => {
3020
3022
  }
3021
3023
  };
3022
3024
  }
3023
- let frame = 0;
3025
+ let frame2 = 0;
3024
3026
  let stopped = false;
3025
3027
  let timer = null;
3026
3028
  const animInterval = Math.max(FRAME_MS, safeInterval);
@@ -3029,8 +3031,8 @@ var spin = (text = "Loading", opts = {}) => {
3029
3031
  const render = () => {
3030
3032
  if (stopped) return;
3031
3033
  const elapsed = Date.now() - startTime;
3032
- frame = Math.floor(elapsed / animInterval) % frames2.length;
3033
- const f = frames2[frame] ?? "";
3034
+ frame2 = Math.floor(elapsed / animInterval) % frames2.length;
3035
+ const f = frames2[frame2] ?? "";
3034
3036
  const colored = applyColor(f, hex);
3035
3037
  const line = padToTerminalWidth(`${safePrefix}${colored} ${safeText}${safeSuffix}`);
3036
3038
  const buf = createOutputBuffer().push("\r").push(screen.clearLine()).push(line).toString();
@@ -3243,7 +3245,7 @@ var custom = (frames2, text = "", opts = {}) => {
3243
3245
  }
3244
3246
  registerCrashHandlers2();
3245
3247
  acquireCursor();
3246
- let frame = 0;
3248
+ let frame2 = 0;
3247
3249
  let stopped = false;
3248
3250
  let timer = null;
3249
3251
  const safeInterval = Math.max(FRAME_MS, interval);
@@ -3251,8 +3253,8 @@ var custom = (frames2, text = "", opts = {}) => {
3251
3253
  const render = () => {
3252
3254
  if (stopped) return;
3253
3255
  const elapsed = Date.now() - startTime;
3254
- frame = Math.floor(elapsed / safeInterval) % frames2.length;
3255
- const f = frames2[frame] ?? "";
3256
+ frame2 = Math.floor(elapsed / safeInterval) % frames2.length;
3257
+ const f = frames2[frame2] ?? "";
3256
3258
  write("\r" + screen.clearLine() + applyColor(f, hex) + " " + text);
3257
3259
  };
3258
3260
  render();
@@ -3360,7 +3362,7 @@ var multi = (opts = {}) => {
3360
3362
  registerCrashHandlers2();
3361
3363
  let nextId = 0;
3362
3364
  const items = /* @__PURE__ */ new Map();
3363
- let frame = 0;
3365
+ let frame2 = 0;
3364
3366
  let timer = null;
3365
3367
  let lastLineCount = 0;
3366
3368
  const render = () => {
@@ -3374,13 +3376,13 @@ var multi = (opts = {}) => {
3374
3376
  let glyph;
3375
3377
  if (item.state === "success") glyph = applyColor("\u2713", "#00ff88");
3376
3378
  else if (item.state === "fail") glyph = applyColor("\u2717", "#ff6b6b");
3377
- else glyph = applyColor(frames2[frame % frames2.length] ?? "", item.color ?? null);
3379
+ else glyph = applyColor(frames2[frame2 % frames2.length] ?? "", item.color ?? null);
3378
3380
  const text = item.finalText ?? item.text;
3379
3381
  buf.pushln(padToTerminalWidth(`${glyph} ${text}`));
3380
3382
  }
3381
3383
  write(buf.toString());
3382
3384
  lastLineCount = itemsArr.length;
3383
- frame++;
3385
+ frame2++;
3384
3386
  };
3385
3387
  const start = () => {
3386
3388
  if (timer) return;
@@ -3541,9 +3543,9 @@ var registerCrashHandlers3 = () => {
3541
3543
  if (isTestEnv3()) return;
3542
3544
  installCrashHandlersImpl3();
3543
3545
  };
3544
- var lineCount = (frame) => {
3545
- if (typeof frame !== "string" || frame.length === 0) return 0;
3546
- const normalized = frame.replace(/\r\n/g, "\n").replace(/\r/g, "");
3546
+ var lineCount = (frame2) => {
3547
+ if (typeof frame2 !== "string" || frame2.length === 0) return 0;
3548
+ const normalized = frame2.replace(/\r\n/g, "\n").replace(/\r/g, "");
3547
3549
  return normalized.split("\n").length;
3548
3550
  };
3549
3551
  var clearLines = (n) => {
@@ -3554,7 +3556,7 @@ var clearLines = (n) => {
3554
3556
  }
3555
3557
  };
3556
3558
  var isColorless2 = () => supportsColor() === "none";
3557
- var defaultOnFrame = (frame) => isColorless2() ? stripAnsi(frame) : frame;
3559
+ var defaultOnFrame = (frame2) => isColorless2() ? stripAnsi(frame2) : frame2;
3558
3560
  var play = (frames2, opts = {}) => {
3559
3561
  if (!Array.isArray(frames2)) {
3560
3562
  const resolved = Promise.resolve();
@@ -3615,13 +3617,13 @@ var play = (frames2, opts = {}) => {
3615
3617
  const done = new Promise((r) => {
3616
3618
  resolveDone = r;
3617
3619
  });
3618
- const renderFrame = (frame, idx) => {
3620
+ const renderFrame = (frame2, idx) => {
3619
3621
  if (lastLines > 0) clearLines(lastLines);
3620
3622
  let rendered;
3621
3623
  try {
3622
- rendered = userOnFrame(frame, idx);
3624
+ rendered = userOnFrame(frame2, idx);
3623
3625
  } catch {
3624
- rendered = frame;
3626
+ rendered = frame2;
3625
3627
  }
3626
3628
  const safe = ensureString4(rendered);
3627
3629
  try {
@@ -3750,13 +3752,13 @@ var live = (opts = {}) => {
3750
3752
  let abortHandler = null;
3751
3753
  const render = () => {
3752
3754
  if (lastLines > 0) clearLines(lastLines);
3753
- const frame = isColorless2() ? stripAnsi(currentFrame) : currentFrame;
3755
+ const frame2 = isColorless2() ? stripAnsi(currentFrame) : currentFrame;
3754
3756
  try {
3755
- write(frame);
3757
+ write(frame2);
3756
3758
  } catch {
3757
3759
  }
3758
- lastLines = lineCount(frame);
3759
- if (!frame.endsWith("\n")) writeln();
3760
+ lastLines = lineCount(frame2);
3761
+ if (!frame2.endsWith("\n")) writeln();
3760
3762
  };
3761
3763
  const start = () => {
3762
3764
  if (running) return;
@@ -5700,9 +5702,82 @@ var hsplit = (blocks, opts = {}) => {
5700
5702
  }
5701
5703
  return parts.join("\n");
5702
5704
  };
5705
+ var center2 = (block, opts) => {
5706
+ if (!opts || typeof opts !== "object") return block;
5707
+ const width = Math.max(0, Math.floor(opts.width ?? 0));
5708
+ if (width === 0) return block;
5709
+ const { lines, maxWidth } = _splitBlock(block);
5710
+ const hCentered = lines.map((line) => {
5711
+ const w = visibleLen(line);
5712
+ const space = Math.max(0, width - w);
5713
+ if (space === 0) return line.slice(0, width);
5714
+ const left = Math.floor(space / 2);
5715
+ const right = space - left;
5716
+ return " ".repeat(left) + line + " ".repeat(right);
5717
+ });
5718
+ if (opts.height != null) {
5719
+ const targetH = Math.max(1, Math.floor(opts.height));
5720
+ return _alignVertical(hCentered, targetH, width, opts.align ?? "center").join("\n");
5721
+ }
5722
+ void maxWidth;
5723
+ return hCentered.join("\n");
5724
+ };
5725
+ var frame = (block, opts = {}) => {
5726
+ const {
5727
+ padding = 0,
5728
+ paddingY,
5729
+ paddingX,
5730
+ topChar = "\u2500",
5731
+ bottomChar,
5732
+ title
5733
+ } = opts;
5734
+ const safePadY = Math.max(0, Math.floor(paddingY ?? padding));
5735
+ const safePadX = Math.max(0, Math.floor(paddingX ?? padding));
5736
+ const safeTop = typeof topChar === "string" && topChar.length > 0 ? topChar.charAt(0) : "\u2500";
5737
+ const safeBot = typeof bottomChar === "string" && bottomChar.length > 0 ? bottomChar.charAt(0) : safeTop;
5738
+ const { lines, maxWidth } = _splitBlock(block);
5739
+ const contentInnerW = maxWidth + 2 * safePadX;
5740
+ let innerW = contentInnerW;
5741
+ let titleStr = "";
5742
+ let titleW = 0;
5743
+ if (typeof title === "string" && title.length > 0) {
5744
+ titleStr = ` ${title} `;
5745
+ titleW = visibleLen(titleStr);
5746
+ const titleNeededW = titleW + 2;
5747
+ if (titleNeededW > innerW) {
5748
+ innerW = titleNeededW;
5749
+ }
5750
+ }
5751
+ let topLine;
5752
+ if (titleStr.length > 0 && titleW < innerW) {
5753
+ const before = Math.floor((innerW - titleW) / 2);
5754
+ const after = innerW - titleW - before;
5755
+ topLine = safeTop.repeat(before) + titleStr + safeTop.repeat(after);
5756
+ } else {
5757
+ topLine = safeTop.repeat(innerW);
5758
+ }
5759
+ const bottomLine = safeBot.repeat(innerW);
5760
+ const padX = " ".repeat(safePadX);
5761
+ const padded = lines.map((line) => {
5762
+ const w = visibleLen(line);
5763
+ const tail = " ".repeat(Math.max(0, innerW - safePadX - w - safePadX));
5764
+ return padX + line + tail + padX;
5765
+ });
5766
+ const blank = " ".repeat(innerW);
5767
+ const out = [];
5768
+ out.push(topLine);
5769
+ for (let i = 0; i < safePadY; i++) out.push(blank);
5770
+ out.push(...padded);
5771
+ for (let i = 0; i < safePadY; i++) out.push(blank);
5772
+ out.push(bottomLine);
5773
+ return out.join("\n");
5774
+ };
5703
5775
  var panels = {
5704
5776
  vsplit,
5705
- hsplit
5777
+ hsplit,
5778
+ // v1.3.1
5779
+ center: center2,
5780
+ frame
5706
5781
  };
5707
5782
 
5708
5783
  // src/json/index.ts
@@ -5757,7 +5832,16 @@ var _formatPrimitive = (value, opts) => {
5757
5832
  return _c(String(value), COLORS.comment, useColor);
5758
5833
  };
5759
5834
  var _renderValue = (value, depth, config) => {
5760
- const { indent, maxDepth, maxItems, maxStringLength, useColor, seen } = config;
5835
+ const {
5836
+ indent,
5837
+ maxDepth,
5838
+ maxItems,
5839
+ maxStringLength,
5840
+ useColor,
5841
+ seen,
5842
+ sortKeys,
5843
+ inlineArrayMaxLength
5844
+ } = config;
5761
5845
  if (value === null || typeof value !== "object") {
5762
5846
  return _formatPrimitive(value, { useColor, maxStringLength });
5763
5847
  }
@@ -5777,6 +5861,25 @@ var _renderValue = (value, depth, config) => {
5777
5861
  if (value.length === 0) {
5778
5862
  return _c("[]", COLORS.bracket, useColor);
5779
5863
  }
5864
+ if (inlineArrayMaxLength > 0) {
5865
+ const allPrimitive = value.every((v) => v === null || typeof v !== "object");
5866
+ if (allPrimitive) {
5867
+ const displayCount2 = Math.min(value.length, maxItems);
5868
+ const inlineItems = [];
5869
+ for (let i = 0; i < displayCount2; i++) {
5870
+ inlineItems.push(_formatPrimitive(value[i], { useColor, maxStringLength }));
5871
+ }
5872
+ if (value.length > maxItems) {
5873
+ const remaining = value.length - maxItems;
5874
+ inlineItems.push(_c(`... (${remaining} more)`, COLORS.comment, useColor));
5875
+ }
5876
+ const candidate = _c("[", COLORS.bracket, useColor) + inlineItems.join(", ") + _c("]", COLORS.bracket, useColor);
5877
+ const visibleLen2 = candidate.replace(/\x1b\[[0-9;]*m/g, "").length;
5878
+ if (visibleLen2 <= inlineArrayMaxLength) {
5879
+ return candidate;
5880
+ }
5881
+ }
5882
+ }
5780
5883
  const items = [];
5781
5884
  const displayCount = Math.min(value.length, maxItems);
5782
5885
  for (let i = 0; i < displayCount; i++) {
@@ -5789,10 +5892,13 @@ var _renderValue = (value, depth, config) => {
5789
5892
  }
5790
5893
  return _c("[", COLORS.bracket, useColor) + "\n" + items.join(",\n") + "\n" + closePad + _c("]", COLORS.bracket, useColor);
5791
5894
  }
5792
- const keys = Object.keys(value);
5895
+ let keys = Object.keys(value);
5793
5896
  if (keys.length === 0) {
5794
5897
  return _c("{}", COLORS.bracket, useColor);
5795
5898
  }
5899
+ if (sortKeys) {
5900
+ keys = [...keys].sort((a, b) => a.localeCompare(b));
5901
+ }
5796
5902
  const entries = [];
5797
5903
  for (const key of keys) {
5798
5904
  const keyStr = JSON.stringify(key);
@@ -5812,12 +5918,16 @@ var pretty = (value, opts = {}) => {
5812
5918
  colors = true,
5813
5919
  maxDepth = Infinity,
5814
5920
  maxItems = Infinity,
5815
- maxStringLength = Infinity
5921
+ maxStringLength = Infinity,
5922
+ // v1.3.1
5923
+ sortKeys = false,
5924
+ inlineArrayMaxLength = 60
5816
5925
  } = opts;
5817
5926
  const safeIndent = Math.max(0, Math.floor(Number(indent) || 0));
5818
5927
  const safeMaxDepth = Number.isFinite(maxDepth) ? Math.max(0, Math.floor(maxDepth)) : Infinity;
5819
5928
  const safeMaxItems = Number.isFinite(maxItems) ? Math.max(0, Math.floor(maxItems)) : Infinity;
5820
5929
  const safeMaxStrLen = Number.isFinite(maxStringLength) ? Math.max(0, Math.floor(maxStringLength)) : Infinity;
5930
+ const safeInlineMax = Number.isFinite(inlineArrayMaxLength) ? Math.max(0, Math.floor(inlineArrayMaxLength)) : 60;
5821
5931
  const useColor = colors && !isNoColor();
5822
5932
  return _renderValue(value, 0, {
5823
5933
  indent: safeIndent,
@@ -5825,7 +5935,9 @@ var pretty = (value, opts = {}) => {
5825
5935
  maxItems: safeMaxItems,
5826
5936
  maxStringLength: safeMaxStrLen,
5827
5937
  useColor,
5828
- seen: /* @__PURE__ */ new WeakSet()
5938
+ seen: /* @__PURE__ */ new WeakSet(),
5939
+ sortKeys: Boolean(sortKeys),
5940
+ inlineArrayMaxLength: safeInlineMax
5829
5941
  });
5830
5942
  };
5831
5943
  var json = {
@@ -6076,6 +6188,7 @@ var index_default = ansimax;
6076
6188
  canAnimate,
6077
6189
  cancelTerminalFrame,
6078
6190
  center,
6191
+ centerBlock,
6079
6192
  chain,
6080
6193
  charWidth,
6081
6194
  clamp,
@@ -6105,6 +6218,7 @@ var index_default = ansimax;
6105
6218
  findInTree,
6106
6219
  flipHorizontal,
6107
6220
  flipVertical,
6221
+ frame,
6108
6222
  frames,
6109
6223
  fromImage,
6110
6224
  getConfig,