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/CHANGELOG.md +122 -0
- package/README.es.md +31 -2
- package/README.md +31 -2
- package/dist/index.d.mts +130 -2
- package/dist/index.d.ts +130 -2
- package/dist/index.js +149 -35
- package/dist/index.mjs +147 -35
- package/examples/all-in-one.cjs +1 -1
- package/examples/all-in-one.mjs +1 -1
- package/package.json +1 -1
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
|
|
1352
|
+
const frame2 = gradient(text, stops, { preserveAnsi, easing, phase });
|
|
1351
1353
|
if (onFrame) {
|
|
1352
|
-
onFrame(
|
|
1354
|
+
onFrame(frame2, phase);
|
|
1353
1355
|
} else {
|
|
1354
1356
|
try {
|
|
1355
1357
|
if (process?.stdout?.write) {
|
|
1356
|
-
process.stdout.write("\r" +
|
|
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,
|
|
1648
|
+
var fireFrame = (hooks, frame2) => {
|
|
1647
1649
|
try {
|
|
1648
|
-
hooks?.onFrame?.(
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
3033
|
-
const f = frames2[
|
|
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
|
|
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
|
-
|
|
3255
|
-
const f = frames2[
|
|
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
|
|
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[
|
|
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
|
-
|
|
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 = (
|
|
3545
|
-
if (typeof
|
|
3546
|
-
const normalized =
|
|
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 = (
|
|
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 = (
|
|
3620
|
+
const renderFrame = (frame2, idx) => {
|
|
3619
3621
|
if (lastLines > 0) clearLines(lastLines);
|
|
3620
3622
|
let rendered;
|
|
3621
3623
|
try {
|
|
3622
|
-
rendered = userOnFrame(
|
|
3624
|
+
rendered = userOnFrame(frame2, idx);
|
|
3623
3625
|
} catch {
|
|
3624
|
-
rendered =
|
|
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
|
|
3755
|
+
const frame2 = isColorless2() ? stripAnsi(currentFrame) : currentFrame;
|
|
3754
3756
|
try {
|
|
3755
|
-
write(
|
|
3757
|
+
write(frame2);
|
|
3756
3758
|
} catch {
|
|
3757
3759
|
}
|
|
3758
|
-
lastLines = lineCount(
|
|
3759
|
-
if (!
|
|
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 {
|
|
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
|
-
|
|
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,
|