linecraft 0.1.0 → 0.2.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/LICENSE +1 -1
- package/README.md +337 -64
- package/lib/api/color.d.ts +6 -0
- package/lib/api/color.d.ts.map +1 -0
- package/lib/api/color.js +9 -0
- package/lib/api/color.js.map +1 -0
- package/lib/api/color.test.d.ts +2 -0
- package/lib/api/color.test.d.ts.map +1 -0
- package/lib/api/color.test.js +23 -0
- package/lib/api/color.test.js.map +1 -0
- package/lib/api/flex.d.ts +55 -0
- package/lib/api/flex.d.ts.map +1 -0
- package/lib/api/flex.js +86 -0
- package/lib/api/flex.js.map +1 -0
- package/lib/api/flex.test.d.ts +2 -0
- package/lib/api/flex.test.d.ts.map +1 -0
- package/lib/api/flex.test.js +82 -0
- package/lib/api/flex.test.js.map +1 -0
- package/lib/api/grid.d.ts +22 -0
- package/lib/api/grid.d.ts.map +1 -0
- package/lib/api/grid.js +65 -0
- package/lib/api/grid.js.map +1 -0
- package/lib/api/grid.test.d.ts +2 -0
- package/lib/api/grid.test.d.ts.map +1 -0
- package/lib/api/grid.test.js +48 -0
- package/lib/api/grid.test.js.map +1 -0
- package/lib/components/base.d.ts +53 -0
- package/lib/components/base.d.ts.map +1 -0
- package/lib/components/base.js +47 -0
- package/lib/components/base.js.map +1 -0
- package/lib/components/col.d.ts +35 -0
- package/lib/components/col.d.ts.map +1 -0
- package/lib/components/col.js +168 -0
- package/lib/components/col.js.map +1 -0
- package/lib/components/col.test.d.ts +2 -0
- package/lib/components/col.test.d.ts.map +1 -0
- package/lib/components/col.test.js +96 -0
- package/lib/components/col.test.js.map +1 -0
- package/lib/components/index.d.ts +3 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/index.js +5 -0
- package/lib/components/index.js.map +1 -0
- package/lib/components/progress-bar-grid.d.ts +20 -0
- package/lib/components/progress-bar-grid.d.ts.map +1 -0
- package/lib/components/progress-bar-grid.js +44 -0
- package/lib/components/progress-bar-grid.js.map +1 -0
- package/lib/components/progress-bar-grid.test.d.ts +2 -0
- package/lib/components/progress-bar-grid.test.d.ts.map +1 -0
- package/lib/components/progress-bar-grid.test.js +101 -0
- package/lib/components/progress-bar-grid.test.js.map +1 -0
- package/lib/components/progress-bar.d.ts +26 -3
- package/lib/components/progress-bar.d.ts.map +1 -1
- package/lib/components/progress-bar.js +62 -6
- package/lib/components/progress-bar.js.map +1 -1
- package/lib/components/progress-bar.test.d.ts +2 -0
- package/lib/components/progress-bar.test.d.ts.map +1 -0
- package/lib/components/progress-bar.test.js +153 -0
- package/lib/components/progress-bar.test.js.map +1 -0
- package/lib/components/prompt.d.ts +14 -0
- package/lib/components/prompt.d.ts.map +1 -0
- package/lib/components/prompt.js +77 -0
- package/lib/components/prompt.js.map +1 -0
- package/lib/components/renderable.d.ts +42 -0
- package/lib/components/renderable.d.ts.map +1 -0
- package/lib/components/renderable.js +225 -0
- package/lib/components/renderable.js.map +1 -0
- package/lib/components/spinner.d.ts +2 -2
- package/lib/components/spinner.d.ts.map +1 -1
- package/lib/components/spinner.js +3 -1
- package/lib/components/spinner.js.map +1 -1
- package/lib/components/spinner.test.d.ts +2 -0
- package/lib/components/spinner.test.d.ts.map +1 -0
- package/lib/components/spinner.test.js +168 -0
- package/lib/components/spinner.test.js.map +1 -0
- package/lib/components/style.d.ts +16 -0
- package/lib/components/style.d.ts.map +1 -0
- package/lib/components/style.js +72 -0
- package/lib/components/style.js.map +1 -0
- package/lib/components/style.test.d.ts +2 -0
- package/lib/components/style.test.d.ts.map +1 -0
- package/lib/components/style.test.js +135 -0
- package/lib/components/style.test.js.map +1 -0
- package/lib/components/text.d.ts +24 -0
- package/lib/components/text.d.ts.map +1 -0
- package/lib/components/text.js +65 -0
- package/lib/components/text.js.map +1 -0
- package/lib/drawing/boxes.d.ts +33 -0
- package/lib/drawing/boxes.d.ts.map +1 -0
- package/lib/drawing/boxes.js +76 -0
- package/lib/drawing/boxes.js.map +1 -0
- package/lib/index.d.ts +18 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +21 -10
- package/lib/index.js.map +1 -1
- package/lib/index.test.d.ts +2 -0
- package/lib/index.test.d.ts.map +1 -0
- package/lib/index.test.js +80 -0
- package/lib/index.test.js.map +1 -0
- package/lib/layout/flex.d.ts +39 -0
- package/lib/layout/flex.d.ts.map +1 -0
- package/lib/layout/flex.js +300 -0
- package/lib/layout/flex.js.map +1 -0
- package/lib/layout/flex.test.d.ts +2 -0
- package/lib/layout/flex.test.d.ts.map +1 -0
- package/lib/layout/flex.test.js +206 -0
- package/lib/layout/flex.test.js.map +1 -0
- package/lib/layout/grid.d.ts +53 -0
- package/lib/layout/grid.d.ts.map +1 -0
- package/lib/layout/grid.js +421 -0
- package/lib/layout/grid.js.map +1 -0
- package/lib/layout/grid.test.d.ts +2 -0
- package/lib/layout/grid.test.d.ts.map +1 -0
- package/lib/layout/grid.test.js +139 -0
- package/lib/layout/grid.test.js.map +1 -0
- package/lib/native/ansi.d.ts +104 -0
- package/lib/native/ansi.d.ts.map +1 -0
- package/lib/native/ansi.js +120 -0
- package/lib/native/ansi.js.map +1 -0
- package/lib/native/ansi.test.d.ts +2 -0
- package/lib/native/ansi.test.d.ts.map +1 -0
- package/lib/native/ansi.test.js +57 -0
- package/lib/native/ansi.test.js.map +1 -0
- package/lib/native/buffer.d.ts +32 -0
- package/lib/native/buffer.d.ts.map +1 -0
- package/lib/native/buffer.js +49 -0
- package/lib/native/buffer.js.map +1 -0
- package/lib/native/buffer.test.d.ts +2 -0
- package/lib/native/buffer.test.d.ts.map +1 -0
- package/lib/native/buffer.test.js +64 -0
- package/lib/native/buffer.test.js.map +1 -0
- package/lib/native/diff.d.ts +20 -0
- package/lib/native/diff.d.ts.map +1 -0
- package/lib/native/diff.js +33 -0
- package/lib/native/diff.js.map +1 -0
- package/lib/native/diff.test.d.ts +2 -0
- package/lib/native/diff.test.d.ts.map +1 -0
- package/lib/native/diff.test.js +106 -0
- package/lib/native/diff.test.js.map +1 -0
- package/lib/native/region-old.d.ts +117 -0
- package/lib/native/region-old.d.ts.map +1 -0
- package/lib/native/region-old.js +539 -0
- package/lib/native/region-old.js.map +1 -0
- package/lib/native/region-renderer.d.ts +167 -0
- package/lib/native/region-renderer.d.ts.map +1 -0
- package/lib/native/region-renderer.js +1238 -0
- package/lib/native/region-renderer.js.map +1 -0
- package/lib/native/region-simple.d.ts +44 -0
- package/lib/native/region-simple.d.ts.map +1 -0
- package/lib/native/region-simple.js +290 -0
- package/lib/native/region-simple.js.map +1 -0
- package/lib/native/region.d.ts +53 -0
- package/lib/native/region.d.ts.map +1 -0
- package/lib/native/region.js +426 -0
- package/lib/native/region.js.map +1 -0
- package/lib/native/region.test.d.ts +2 -0
- package/lib/native/region.test.d.ts.map +1 -0
- package/lib/native/region.test.js +248 -0
- package/lib/native/region.test.js.map +1 -0
- package/lib/native/throttle.d.ts +29 -0
- package/lib/native/throttle.d.ts.map +1 -0
- package/lib/native/throttle.js +57 -0
- package/lib/native/throttle.js.map +1 -0
- package/lib/native/throttle.test.d.ts +2 -0
- package/lib/native/throttle.test.d.ts.map +1 -0
- package/lib/native/throttle.test.js +86 -0
- package/lib/native/throttle.test.js.map +1 -0
- package/lib/native.d.ts +5 -11
- package/lib/native.d.ts.map +1 -1
- package/lib/native.js +8 -64
- package/lib/native.js.map +1 -1
- package/lib/region.d.ts +48 -5
- package/lib/region.d.ts.map +1 -1
- package/lib/region.js +474 -36
- package/lib/region.js.map +1 -1
- package/lib/region.test.d.ts +2 -0
- package/lib/region.test.d.ts.map +1 -0
- package/lib/region.test.js +227 -0
- package/lib/region.test.js.map +1 -0
- package/lib/region.visual.test.d.ts +2 -0
- package/lib/region.visual.test.d.ts.map +1 -0
- package/lib/region.visual.test.js +55 -0
- package/lib/region.visual.test.js.map +1 -0
- package/lib/test-helpers/capturable-terminal.d.ts +61 -0
- package/lib/test-helpers/capturable-terminal.d.ts.map +1 -0
- package/lib/test-helpers/capturable-terminal.js +113 -0
- package/lib/test-helpers/capturable-terminal.js.map +1 -0
- package/lib/test-helpers/capturable-terminal.test.d.ts +2 -0
- package/lib/test-helpers/capturable-terminal.test.d.ts.map +1 -0
- package/lib/test-helpers/capturable-terminal.test.js +45 -0
- package/lib/test-helpers/capturable-terminal.test.js.map +1 -0
- package/lib/test-helpers/mock-region.d.ts +21 -0
- package/lib/test-helpers/mock-region.d.ts.map +1 -0
- package/lib/test-helpers/mock-region.js +37 -0
- package/lib/test-helpers/mock-region.js.map +1 -0
- package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts +2 -0
- package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts.map +1 -0
- package/lib/test-helpers/virtual-terminal-diff-reflow.test.js +256 -0
- package/lib/test-helpers/virtual-terminal-diff-reflow.test.js.map +1 -0
- package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts +2 -0
- package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts.map +1 -0
- package/lib/test-helpers/virtual-terminal-flex-resize.test.js +438 -0
- package/lib/test-helpers/virtual-terminal-flex-resize.test.js.map +1 -0
- package/lib/test-helpers/virtual-terminal.d.ts +176 -0
- package/lib/test-helpers/virtual-terminal.d.ts.map +1 -0
- package/lib/test-helpers/virtual-terminal.js +492 -0
- package/lib/test-helpers/virtual-terminal.js.map +1 -0
- package/lib/test-helpers/virtual-terminal.test.d.ts +2 -0
- package/lib/test-helpers/virtual-terminal.test.d.ts.map +1 -0
- package/lib/test-helpers/virtual-terminal.test.js +219 -0
- package/lib/test-helpers/virtual-terminal.test.js.map +1 -0
- package/lib/ts/components/spinner.test.d.ts +2 -0
- package/lib/ts/components/spinner.test.d.ts.map +1 -0
- package/lib/ts/components/spinner.test.js +168 -0
- package/lib/ts/components/spinner.test.js.map +1 -0
- package/lib/ts/utils/colors.test.d.ts +2 -0
- package/lib/ts/utils/colors.test.d.ts.map +1 -0
- package/lib/ts/utils/colors.test.js +87 -0
- package/lib/ts/utils/colors.test.js.map +1 -0
- package/lib/types.d.ts +8 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/colors-simple.d.ts +51 -0
- package/lib/utils/colors-simple.d.ts.map +1 -0
- package/lib/utils/colors-simple.js +59 -0
- package/lib/utils/colors-simple.js.map +1 -0
- package/lib/utils/colors.d.ts +1 -1
- package/lib/utils/colors.d.ts.map +1 -1
- package/lib/utils/colors.js.map +1 -1
- package/lib/utils/colors.test.d.ts +2 -0
- package/lib/utils/colors.test.d.ts.map +1 -0
- package/lib/utils/colors.test.js +87 -0
- package/lib/utils/colors.test.js.map +1 -0
- package/lib/utils/cursor-position.d.ts +22 -0
- package/lib/utils/cursor-position.d.ts.map +1 -0
- package/lib/utils/cursor-position.js +139 -0
- package/lib/utils/cursor-position.js.map +1 -0
- package/lib/utils/debug-log.d.ts +2 -0
- package/lib/utils/debug-log.d.ts.map +1 -0
- package/lib/utils/debug-log.js +36 -0
- package/lib/utils/debug-log.js.map +1 -0
- package/lib/utils/terminal.d.ts +27 -0
- package/lib/utils/terminal.d.ts.map +1 -0
- package/lib/utils/terminal.js +116 -0
- package/lib/utils/terminal.js.map +1 -0
- package/lib/utils/text.d.ts +21 -0
- package/lib/utils/text.d.ts.map +1 -0
- package/lib/utils/text.js +82 -0
- package/lib/utils/text.js.map +1 -0
- package/lib/utils/wait-for-spacebar.d.ts +10 -0
- package/lib/utils/wait-for-spacebar.d.ts.map +1 -0
- package/lib/utils/wait-for-spacebar.js +71 -0
- package/lib/utils/wait-for-spacebar.js.map +1 -0
- package/package.json +35 -28
- package/.cursor/plan.md +0 -952
- package/TESTING.md +0 -102
- package/build.zig +0 -100
- package/examples/basic-progress.ts +0 -21
- package/examples/multi-lane.ts +0 -29
- package/examples/spinner.ts +0 -20
- package/examples/test-basic.ts +0 -23
- package/src/ts/components/progress-bar.ts +0 -53
- package/src/ts/components/spinner.ts +0 -56
- package/src/ts/index.ts +0 -37
- package/src/ts/native.ts +0 -86
- package/src/ts/region.ts +0 -89
- package/src/ts/types/ffi-napi.d.ts +0 -11
- package/src/ts/types/ref-napi.d.ts +0 -5
- package/src/ts/types.ts +0 -53
- package/src/ts/utils/colors.ts +0 -72
- package/src/zig/ansi.zig +0 -21
- package/src/zig/buffer.zig +0 -37
- package/src/zig/diff.zig +0 -43
- package/src/zig/region.zig +0 -292
- package/src/zig/renderer.zig +0 -92
- package/src/zig/test_ansi.zig +0 -66
- package/src/zig/test_buffer.zig +0 -82
- package/src/zig/test_diff.zig +0 -220
- package/src/zig/test_integration.zig +0 -76
- package/src/zig/test_region.zig +0 -191
- package/src/zig/test_runner.zig +0 -27
- package/src/zig/test_throttle.zig +0 -59
- package/src/zig/throttle.zig +0 -38
- package/tsconfig.json +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar.test.js","sourceRoot":"","sources":["../../src/ts/components/progress-bar.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TerminalRegion } from '../region';
|
|
2
|
+
import type { Color } from '../types';
|
|
3
|
+
export interface PromptOptions {
|
|
4
|
+
message: string;
|
|
5
|
+
key?: string;
|
|
6
|
+
color?: Color;
|
|
7
|
+
position?: 'below' | 'above';
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Show a prompt message (like "Press SPACEBAR to continue...")
|
|
11
|
+
* This is a better API than waitForSpacebar for general prompts
|
|
12
|
+
*/
|
|
13
|
+
export declare function showPrompt(region: TerminalRegion, options: PromptOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/components/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgFf"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Prompt component - improved API for prompts like "Press SPACEBAR"
|
|
2
|
+
import { color } from '../api/color';
|
|
3
|
+
/**
|
|
4
|
+
* Show a prompt message (like "Press SPACEBAR to continue...")
|
|
5
|
+
* This is a better API than waitForSpacebar for general prompts
|
|
6
|
+
*/
|
|
7
|
+
export async function showPrompt(region, options) {
|
|
8
|
+
const { message, key = 'SPACEBAR', color: promptColor = 'brightBlack', position = 'below', } = options;
|
|
9
|
+
const currentHeight = region.height;
|
|
10
|
+
const promptText = color(promptColor, `Press ${key} to ${message}...`);
|
|
11
|
+
if (position === 'below') {
|
|
12
|
+
// Add blank line, then prompt
|
|
13
|
+
region.setLine(currentHeight + 1, '');
|
|
14
|
+
region.setLine(currentHeight + 2, promptText);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// Add prompt above current content
|
|
18
|
+
// This would require shifting all content down, which is complex
|
|
19
|
+
// For now, just add below
|
|
20
|
+
region.setLine(currentHeight + 1, '');
|
|
21
|
+
region.setLine(currentHeight + 2, promptText);
|
|
22
|
+
}
|
|
23
|
+
region.flush();
|
|
24
|
+
// Wait for keypress
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
const stdin = process.stdin;
|
|
27
|
+
if (!stdin.isTTY) {
|
|
28
|
+
resolve();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let rawMode = false;
|
|
32
|
+
try {
|
|
33
|
+
rawMode = stdin.isRaw || false;
|
|
34
|
+
stdin.setRawMode(true);
|
|
35
|
+
stdin.resume();
|
|
36
|
+
stdin.setEncoding('utf8');
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
// EIO error - stdin not available
|
|
40
|
+
resolve();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const onData = (key) => {
|
|
44
|
+
// Handle spacebar, enter, or 'q'
|
|
45
|
+
if (key === ' ' || key === '\r' || key === '\n' || key === 'q' || key === 'Q') {
|
|
46
|
+
cleanup();
|
|
47
|
+
resolve();
|
|
48
|
+
}
|
|
49
|
+
// Handle Ctrl+C
|
|
50
|
+
if (key === '\u0003') {
|
|
51
|
+
cleanup();
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const onSIGINT = () => {
|
|
56
|
+
cleanup();
|
|
57
|
+
process.exit(0);
|
|
58
|
+
};
|
|
59
|
+
const cleanup = () => {
|
|
60
|
+
stdin.removeListener('data', onData);
|
|
61
|
+
// CRITICAL: Remove SIGINT listener to prevent memory leak
|
|
62
|
+
// Use removeListener instead of once to ensure we can clean it up
|
|
63
|
+
process.removeListener('SIGINT', onSIGINT);
|
|
64
|
+
try {
|
|
65
|
+
stdin.setRawMode(rawMode);
|
|
66
|
+
stdin.pause();
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
// Ignore errors
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
stdin.on('data', onData);
|
|
73
|
+
// Use on() instead of once() so we can remove it in cleanup
|
|
74
|
+
process.on('SIGINT', onSIGINT);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/components/prompt.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AASrC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAsB,EACtB,OAAsB;IAEtB,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,UAAU,EAChB,KAAK,EAAE,WAAW,GAAG,aAAa,EAClC,QAAQ,GAAG,OAAO,GACnB,GAAG,OAAO,CAAC;IAEZ,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,SAAS,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC;IAEvE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,8BAA8B;QAC9B,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,mCAAmC;QACnC,iEAAiE;QACjE,0BAA0B;QAC1B,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,oBAAoB;IACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;YAC/B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kCAAkC;YAClC,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;YAC7B,iCAAiC;YACjC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC9E,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,gBAAgB;YAChB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,0DAA0D;YAC1D,kEAAkE;YAClE,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gBAAgB;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,4DAA4D;QAC5D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { TerminalRegion } from '../region.js';
|
|
2
|
+
/**
|
|
3
|
+
* Interface for complex components that need measurement logic
|
|
4
|
+
* Simple strings don't need this - flex measures them directly
|
|
5
|
+
*/
|
|
6
|
+
export interface Renderable {
|
|
7
|
+
getPreferredWidth(): number;
|
|
8
|
+
getMinWidth(): number;
|
|
9
|
+
getMaxWidth(): number;
|
|
10
|
+
getHeight(): number;
|
|
11
|
+
render(x: number, y: number, width: number): void;
|
|
12
|
+
readonly flexGrow: number;
|
|
13
|
+
readonly flexShrink: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A flex child can be a string, Renderable, array of either (for functional components),
|
|
17
|
+
* or a descriptor (ColDescriptor, FlexDescriptor)
|
|
18
|
+
*/
|
|
19
|
+
export type FlexChild = string | Renderable | Array<string | Renderable>;
|
|
20
|
+
/**
|
|
21
|
+
* Helper to strip ANSI codes for width measurement
|
|
22
|
+
*/
|
|
23
|
+
export declare function stripAnsiCodes(text: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Measure a string (strips ANSI codes)
|
|
26
|
+
*/
|
|
27
|
+
export declare function measureString(text: string): number;
|
|
28
|
+
/**
|
|
29
|
+
* Flatten an array of flex children, handling nested arrays
|
|
30
|
+
*/
|
|
31
|
+
export declare function flattenChildren(children: FlexChild[]): Array<string | Renderable>;
|
|
32
|
+
/**
|
|
33
|
+
* Convert a flex child to a Renderable (strings become simple renderables)
|
|
34
|
+
*/
|
|
35
|
+
export declare function toRenderable(region: TerminalRegion, child: string | Renderable, options?: {
|
|
36
|
+
flexGrow?: number;
|
|
37
|
+
flexShrink?: number;
|
|
38
|
+
minWidth?: number;
|
|
39
|
+
maxWidth?: number;
|
|
40
|
+
overflow?: 'none' | 'ellipsis-end' | 'ellipsis-start' | 'ellipsis-middle' | 'wrap';
|
|
41
|
+
}): Renderable;
|
|
42
|
+
//# sourceMappingURL=renderable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderable.d.ts","sourceRoot":"","sources":["../../src/ts/components/renderable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;IACtB,SAAS,IAAI,MAAM,CAAC;IACpB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;AAEzE;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAUjF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAA;CAAO,GACjL,UAAU,CAsMZ"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Simple interface for renderable components
|
|
2
|
+
// Only complex components (with wrapping, nested flex, etc.) need to implement this
|
|
3
|
+
// Simple strings are handled directly by flex
|
|
4
|
+
import { wrapText, truncateEnd, truncateStart, truncateMiddle } from '../utils/text.js';
|
|
5
|
+
/**
|
|
6
|
+
* Helper to strip ANSI codes for width measurement
|
|
7
|
+
*/
|
|
8
|
+
export function stripAnsiCodes(text) {
|
|
9
|
+
return text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Measure a string (strips ANSI codes)
|
|
13
|
+
*/
|
|
14
|
+
export function measureString(text) {
|
|
15
|
+
return stripAnsiCodes(text).length;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Flatten an array of flex children, handling nested arrays
|
|
19
|
+
*/
|
|
20
|
+
export function flattenChildren(children) {
|
|
21
|
+
const result = [];
|
|
22
|
+
for (const child of children) {
|
|
23
|
+
if (Array.isArray(child)) {
|
|
24
|
+
result.push(...flattenChildren(child));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
result.push(child);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert a flex child to a Renderable (strings become simple renderables)
|
|
34
|
+
*/
|
|
35
|
+
export function toRenderable(region, child, options = {}) {
|
|
36
|
+
if (typeof child === 'string') {
|
|
37
|
+
// Simple string - create a lightweight renderable
|
|
38
|
+
// With auto-wrap disabled globally, we must handle wrapping ourselves
|
|
39
|
+
const text = child;
|
|
40
|
+
const textWidth = measureString(text);
|
|
41
|
+
const overflow = options.overflow ?? 'wrap'; // Default to wrap for strings in flex
|
|
42
|
+
return {
|
|
43
|
+
flexGrow: options.flexGrow ?? 0,
|
|
44
|
+
flexShrink: options.flexShrink ?? 1,
|
|
45
|
+
getPreferredWidth: () => textWidth,
|
|
46
|
+
getMinWidth: () => options.minWidth ?? textWidth,
|
|
47
|
+
getMaxWidth: () => options.maxWidth ?? Infinity,
|
|
48
|
+
getHeight: function () {
|
|
49
|
+
// If wrapping, calculate height based on width
|
|
50
|
+
// Note: width is only known during render, so we estimate based on maxWidth
|
|
51
|
+
if (overflow === 'wrap') {
|
|
52
|
+
const estimatedWidth = options.maxWidth ?? textWidth;
|
|
53
|
+
if (estimatedWidth > 0 && estimatedWidth < textWidth) {
|
|
54
|
+
const plainText = stripAnsiCodes(text);
|
|
55
|
+
const lines = wrapText(plainText, estimatedWidth);
|
|
56
|
+
return lines.length;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return 1;
|
|
60
|
+
},
|
|
61
|
+
render: function (x, y, width) {
|
|
62
|
+
// Handle wrapping for strings (since auto-wrap is disabled globally)
|
|
63
|
+
if (overflow === 'wrap') {
|
|
64
|
+
const plainText = stripAnsiCodes(text);
|
|
65
|
+
const lines = wrapText(plainText, width);
|
|
66
|
+
// Render each wrapped line, aligned at x position
|
|
67
|
+
for (let i = 0; i < lines.length; i++) {
|
|
68
|
+
const wrappedLine = lines[i];
|
|
69
|
+
const padded = wrappedLine.padEnd(width, ' ');
|
|
70
|
+
// Get existing line and merge at x position
|
|
71
|
+
const existingLine = region.getLine(y + i) || '';
|
|
72
|
+
const existingPlain = existingLine.replace(/\x1b\[[0-9;]*m/g, '');
|
|
73
|
+
const existingVisualWidth = existingPlain.length;
|
|
74
|
+
if (x === 0 && existingVisualWidth === 0) {
|
|
75
|
+
// Starting at beginning with empty line - just set it
|
|
76
|
+
region.setLine(y + i, padded);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Merge logic (same as col)
|
|
80
|
+
const findCharPosForVisual = (line, targetVisual) => {
|
|
81
|
+
let charPos = 0;
|
|
82
|
+
let visualPos = 0;
|
|
83
|
+
while (charPos < line.length && visualPos < targetVisual) {
|
|
84
|
+
if (line[charPos] === '\x1b') {
|
|
85
|
+
let ansiEnd = charPos + 1;
|
|
86
|
+
while (ansiEnd < line.length) {
|
|
87
|
+
if (line[ansiEnd] === 'm') {
|
|
88
|
+
ansiEnd++;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
if ((line[ansiEnd] >= '0' && line[ansiEnd] <= '9') ||
|
|
92
|
+
line[ansiEnd] === ';' ||
|
|
93
|
+
line[ansiEnd] === '[') {
|
|
94
|
+
ansiEnd++;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
charPos = ansiEnd;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
charPos++;
|
|
104
|
+
visualPos++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return charPos;
|
|
108
|
+
};
|
|
109
|
+
if (existingVisualWidth < x) {
|
|
110
|
+
const padding = x - existingVisualWidth;
|
|
111
|
+
const newLine = existingLine + ' '.repeat(padding) + padded;
|
|
112
|
+
region.setLine(y + i, newLine);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const beforeEnd = findCharPosForVisual(existingLine, x);
|
|
116
|
+
let afterStart;
|
|
117
|
+
if (existingVisualWidth <= x + width) {
|
|
118
|
+
afterStart = existingLine.length;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
afterStart = findCharPosForVisual(existingLine, x + width);
|
|
122
|
+
}
|
|
123
|
+
const before = existingLine.slice(0, beforeEnd);
|
|
124
|
+
const after = existingLine.slice(afterStart);
|
|
125
|
+
const newLine = before + padded + after;
|
|
126
|
+
const existingSection = existingLine.slice(beforeEnd, afterStart);
|
|
127
|
+
if (existingSection !== padded) {
|
|
128
|
+
region.setLine(y + i, newLine);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Handle non-wrapping overflow modes (ellipsis, etc.)
|
|
136
|
+
let displayText = text;
|
|
137
|
+
const plainText = stripAnsiCodes(text);
|
|
138
|
+
if (overflow === 'ellipsis-end' && plainText.length > width) {
|
|
139
|
+
displayText = truncateEnd(plainText, width);
|
|
140
|
+
}
|
|
141
|
+
else if (overflow === 'ellipsis-start' && plainText.length > width) {
|
|
142
|
+
displayText = truncateStart(plainText, width);
|
|
143
|
+
}
|
|
144
|
+
else if (overflow === 'ellipsis-middle' && plainText.length > width) {
|
|
145
|
+
displayText = truncateMiddle(plainText, width);
|
|
146
|
+
}
|
|
147
|
+
const padding = width - stripAnsiCodes(displayText).length;
|
|
148
|
+
const padded = padding > 0 ? displayText + ' '.repeat(padding) : displayText;
|
|
149
|
+
// Get existing line and merge at x position
|
|
150
|
+
const existingLine = region.getLine(y) || '';
|
|
151
|
+
const existingPlain = existingLine.replace(/\x1b\[[0-9;]*m/g, '');
|
|
152
|
+
const existingVisualWidth = existingPlain.length;
|
|
153
|
+
if (x === 0 && existingVisualWidth === 0) {
|
|
154
|
+
// Starting at beginning with empty line - just set it
|
|
155
|
+
region.setLine(y, padded);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Need to merge: before + text + after
|
|
159
|
+
// Helper to find character position for a visual column (accounting for ANSI codes)
|
|
160
|
+
const findCharPosForVisual = (line, targetVisual) => {
|
|
161
|
+
let charPos = 0;
|
|
162
|
+
let visualPos = 0;
|
|
163
|
+
while (charPos < line.length && visualPos < targetVisual) {
|
|
164
|
+
if (line[charPos] === '\x1b') {
|
|
165
|
+
// Found start of ANSI code, skip to end
|
|
166
|
+
let ansiEnd = charPos + 1;
|
|
167
|
+
while (ansiEnd < line.length) {
|
|
168
|
+
if (line[ansiEnd] === 'm') {
|
|
169
|
+
ansiEnd++;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
// Valid ANSI code characters
|
|
173
|
+
if ((line[ansiEnd] >= '0' && line[ansiEnd] <= '9') ||
|
|
174
|
+
line[ansiEnd] === ';' ||
|
|
175
|
+
line[ansiEnd] === '[') {
|
|
176
|
+
ansiEnd++;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
charPos = ansiEnd;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
charPos++;
|
|
186
|
+
visualPos++;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return charPos;
|
|
190
|
+
};
|
|
191
|
+
// If existing line is shorter than x, we need to pad it first
|
|
192
|
+
if (existingVisualWidth < x) {
|
|
193
|
+
// Pad existing line to x position, then append our text
|
|
194
|
+
const padding = x - existingVisualWidth;
|
|
195
|
+
const newLine = existingLine + ' '.repeat(padding) + padded;
|
|
196
|
+
region.setLine(y, newLine);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// Find where x + width starts in the existing line
|
|
200
|
+
let afterStart;
|
|
201
|
+
if (existingVisualWidth <= x + width) {
|
|
202
|
+
// Existing line ends before or at our end position - no "after" content
|
|
203
|
+
afterStart = existingLine.length;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Find where x + width starts in the existing line
|
|
207
|
+
afterStart = findCharPosForVisual(existingLine, x + width);
|
|
208
|
+
}
|
|
209
|
+
const beforeEnd = findCharPosForVisual(existingLine, x);
|
|
210
|
+
const before = existingLine.slice(0, beforeEnd);
|
|
211
|
+
const after = existingLine.slice(afterStart);
|
|
212
|
+
// Build new line
|
|
213
|
+
const newLine = before + padded + after;
|
|
214
|
+
// Only update if the section we're replacing actually changed
|
|
215
|
+
const existingSection = existingLine.slice(beforeEnd, afterStart);
|
|
216
|
+
if (existingSection !== padded) {
|
|
217
|
+
region.setLine(y, newLine);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return child;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=renderable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderable.js","sourceRoot":"","sources":["../../src/ts/components/renderable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TerminalRegion } from '../region
|
|
2
|
-
import type { SpinnerOptions } from '../types
|
|
1
|
+
import { TerminalRegion } from '../region';
|
|
2
|
+
import type { SpinnerOptions } from '../types';
|
|
3
3
|
export declare class Spinner {
|
|
4
4
|
private region;
|
|
5
5
|
private lineNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/components/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB;IAOpF,KAAK,IAAI,IAAI;IAWb,IAAI,IAAI,IAAI;IAUZ,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,MAAM;CAQf"}
|
|
@@ -18,9 +18,11 @@ export class Spinner {
|
|
|
18
18
|
if (this.isRunning)
|
|
19
19
|
return;
|
|
20
20
|
this.isRunning = true;
|
|
21
|
+
// Render immediately when starting
|
|
22
|
+
this.render();
|
|
21
23
|
this.interval = setInterval(() => {
|
|
22
|
-
this.render();
|
|
23
24
|
this.frameIndex = (this.frameIndex + 1) % this.frames.length;
|
|
25
|
+
this.render();
|
|
24
26
|
}, this.intervalMs);
|
|
25
27
|
}
|
|
26
28
|
stop() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/components/spinner.ts"],"names":[],"mappings":"AAGA,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAElF,MAAM,OAAO,OAAO;IACV,MAAM,CAAiB;IACvB,UAAU,CAAS,CAAC,UAAU;IAC9B,UAAU,GAAW,CAAC,CAAC;IACvB,IAAI,GAAW,EAAE,CAAC;IAClB,QAAQ,CAAkB;IAC1B,SAAS,GAAY,KAAK,CAAC;IAC3B,MAAM,CAAW;IACjB,UAAU,CAAS;IAE3B,YAAY,MAAsB,EAAE,UAAkB,EAAE,UAA0B,EAAE;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAsB,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;IAC5C,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,mCAAmC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEO,MAAM;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAErC,4DAA4D;QAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3C,+EAA+E;IACjF,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.test.d.ts","sourceRoot":"","sources":["../../src/components/spinner.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { Spinner } from './spinner';
|
|
3
|
+
// Mock the region
|
|
4
|
+
const createMockRegion = () => {
|
|
5
|
+
const setLineMock = vi.fn();
|
|
6
|
+
const mockRegion = {
|
|
7
|
+
setLine: setLineMock,
|
|
8
|
+
};
|
|
9
|
+
return { region: mockRegion, setLineMock };
|
|
10
|
+
};
|
|
11
|
+
describe('Spinner', () => {
|
|
12
|
+
let region;
|
|
13
|
+
let setLineMock;
|
|
14
|
+
let spinner;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
vi.useFakeTimers();
|
|
17
|
+
const mock = createMockRegion();
|
|
18
|
+
region = mock.region;
|
|
19
|
+
setLineMock = mock.setLineMock;
|
|
20
|
+
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
if (spinner) {
|
|
23
|
+
spinner.stop();
|
|
24
|
+
}
|
|
25
|
+
vi.useRealTimers();
|
|
26
|
+
vi.clearAllMocks();
|
|
27
|
+
});
|
|
28
|
+
describe('constructor', () => {
|
|
29
|
+
it('should create a spinner with default options', () => {
|
|
30
|
+
spinner = new Spinner(region, 1);
|
|
31
|
+
expect(spinner).toBeDefined();
|
|
32
|
+
});
|
|
33
|
+
it('should create a spinner with custom frames', () => {
|
|
34
|
+
const customFrames = ['-', '\\', '|', '/'];
|
|
35
|
+
spinner = new Spinner(region, 1, { frames: customFrames });
|
|
36
|
+
expect(spinner).toBeDefined();
|
|
37
|
+
});
|
|
38
|
+
it('should create a spinner with custom interval', () => {
|
|
39
|
+
spinner = new Spinner(region, 1, { interval: 200 });
|
|
40
|
+
expect(spinner).toBeDefined();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('start', () => {
|
|
44
|
+
it('should start the spinner and begin rendering', () => {
|
|
45
|
+
spinner = new Spinner(region, 1);
|
|
46
|
+
spinner.start();
|
|
47
|
+
expect(setLineMock).toHaveBeenCalled();
|
|
48
|
+
});
|
|
49
|
+
it('should not start multiple times if already running', () => {
|
|
50
|
+
spinner = new Spinner(region, 1);
|
|
51
|
+
spinner.start();
|
|
52
|
+
const callCount1 = setLineMock.mock.calls.length;
|
|
53
|
+
spinner.start();
|
|
54
|
+
const callCount2 = setLineMock.mock.calls.length;
|
|
55
|
+
expect(callCount2).toBe(callCount1);
|
|
56
|
+
});
|
|
57
|
+
it('should advance frames on interval', () => {
|
|
58
|
+
spinner = new Spinner(region, 1, { interval: 100 });
|
|
59
|
+
spinner.start();
|
|
60
|
+
const firstCall = setLineMock.mock.calls[0];
|
|
61
|
+
const firstFrame = firstCall[1];
|
|
62
|
+
vi.advanceTimersByTime(100);
|
|
63
|
+
expect(setLineMock).toHaveBeenCalledTimes(2);
|
|
64
|
+
const secondCall = setLineMock.mock.calls[1];
|
|
65
|
+
const secondFrame = secondCall[1];
|
|
66
|
+
// Frames should be different
|
|
67
|
+
expect(firstFrame).not.toBe(secondFrame);
|
|
68
|
+
});
|
|
69
|
+
it('should cycle through all frames', () => {
|
|
70
|
+
const frames = ['A', 'B', 'C'];
|
|
71
|
+
spinner = new Spinner(region, 1, { frames, interval: 100 });
|
|
72
|
+
spinner.start();
|
|
73
|
+
const seenFrames = [];
|
|
74
|
+
for (let i = 0; i < frames.length; i++) {
|
|
75
|
+
vi.advanceTimersByTime(100);
|
|
76
|
+
const call = setLineMock.mock.calls[i];
|
|
77
|
+
const content = typeof call[1] === 'string' ? call[1] : call[1].text;
|
|
78
|
+
seenFrames.push(content.charAt(0));
|
|
79
|
+
}
|
|
80
|
+
// Should have seen all frames
|
|
81
|
+
expect(seenFrames).toContain('A');
|
|
82
|
+
expect(seenFrames).toContain('B');
|
|
83
|
+
expect(seenFrames).toContain('C');
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('stop', () => {
|
|
87
|
+
it('should stop the spinner', () => {
|
|
88
|
+
spinner = new Spinner(region, 1);
|
|
89
|
+
spinner.start();
|
|
90
|
+
spinner.stop();
|
|
91
|
+
// Clear the interval
|
|
92
|
+
vi.advanceTimersByTime(200);
|
|
93
|
+
// Should have cleared the line
|
|
94
|
+
const calls = setLineMock.mock.calls;
|
|
95
|
+
const lastCall = calls[calls.length - 1];
|
|
96
|
+
expect(lastCall[1]).toBe('');
|
|
97
|
+
});
|
|
98
|
+
it('should not stop if not running', () => {
|
|
99
|
+
spinner = new Spinner(region, 1);
|
|
100
|
+
spinner.stop();
|
|
101
|
+
spinner.stop(); // Should not throw
|
|
102
|
+
});
|
|
103
|
+
it('should clear the spinner line when stopped', () => {
|
|
104
|
+
spinner = new Spinner(region, 1);
|
|
105
|
+
spinner.start();
|
|
106
|
+
spinner.stop();
|
|
107
|
+
const calls = setLineMock.mock.calls;
|
|
108
|
+
const lastCall = calls[calls.length - 1];
|
|
109
|
+
expect(lastCall[1]).toBe('');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('setText', () => {
|
|
113
|
+
it('should update text and render', () => {
|
|
114
|
+
spinner = new Spinner(region, 1);
|
|
115
|
+
spinner.setText('Loading...');
|
|
116
|
+
expect(setLineMock).toHaveBeenCalled();
|
|
117
|
+
const call = setLineMock.mock.calls[0];
|
|
118
|
+
const content = typeof call[1] === 'string' ? call[1] : call[1].text;
|
|
119
|
+
expect(content).toContain('Loading...');
|
|
120
|
+
});
|
|
121
|
+
it('should update text while running', () => {
|
|
122
|
+
spinner = new Spinner(region, 1);
|
|
123
|
+
spinner.start();
|
|
124
|
+
spinner.setText('Processing...');
|
|
125
|
+
const calls = setLineMock.mock.calls;
|
|
126
|
+
const lastCall = calls[calls.length - 1];
|
|
127
|
+
const content = typeof lastCall[1] === 'string' ? lastCall[1] : lastCall[1].text;
|
|
128
|
+
expect(content).toContain('Processing...');
|
|
129
|
+
});
|
|
130
|
+
it('should preserve text when frame advances', () => {
|
|
131
|
+
spinner = new Spinner(region, 1, { interval: 100 });
|
|
132
|
+
spinner.setText('Working');
|
|
133
|
+
spinner.start();
|
|
134
|
+
vi.advanceTimersByTime(100);
|
|
135
|
+
const calls = setLineMock.mock.calls;
|
|
136
|
+
const lastCall = calls[calls.length - 1];
|
|
137
|
+
const content = typeof lastCall[1] === 'string' ? lastCall[1] : lastCall[1].text;
|
|
138
|
+
expect(content).toContain('Working');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('custom frames', () => {
|
|
142
|
+
it('should use custom frames', () => {
|
|
143
|
+
const customFrames = ['-', '\\', '|', '/'];
|
|
144
|
+
spinner = new Spinner(region, 1, { frames: customFrames, interval: 100 });
|
|
145
|
+
spinner.start();
|
|
146
|
+
const firstCall = setLineMock.mock.calls[0];
|
|
147
|
+
const content = typeof firstCall[1] === 'string' ? firstCall[1] : firstCall[1].text;
|
|
148
|
+
const firstChar = content.charAt(0);
|
|
149
|
+
expect(customFrames).toContain(firstChar);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe('custom interval', () => {
|
|
153
|
+
it('should use custom interval', () => {
|
|
154
|
+
spinner = new Spinner(region, 1, { interval: 200 });
|
|
155
|
+
spinner.start();
|
|
156
|
+
const callCount1 = setLineMock.mock.calls.length;
|
|
157
|
+
vi.advanceTimersByTime(100);
|
|
158
|
+
const callCount2 = setLineMock.mock.calls.length;
|
|
159
|
+
// Should not have advanced yet
|
|
160
|
+
expect(callCount2).toBe(callCount1);
|
|
161
|
+
vi.advanceTimersByTime(100);
|
|
162
|
+
const callCount3 = setLineMock.mock.calls.length;
|
|
163
|
+
// Should have advanced now
|
|
164
|
+
expect(callCount3).toBeGreaterThan(callCount2);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=spinner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.test.js","sourceRoot":"","sources":["../../src/components/spinner.test.ts"],"names":[],"mappings":"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"}
|