linecraft 0.2.1 → 0.2.2
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 +0 -1
- package/README.md +3 -1
- package/lib/component.d.ts +34 -0
- package/lib/component.d.ts.map +1 -0
- package/lib/component.js +42 -0
- package/lib/component.js.map +1 -0
- package/lib/components/code-debug.d.ts +35 -0
- package/lib/components/code-debug.d.ts.map +1 -0
- package/lib/components/code-debug.js +294 -0
- package/lib/components/code-debug.js.map +1 -0
- package/lib/components/fill.d.ts +15 -0
- package/lib/components/fill.d.ts.map +1 -0
- package/lib/components/fill.js +37 -0
- package/lib/components/fill.js.map +1 -0
- package/lib/components/index.d.ts +2 -2
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js +2 -2
- package/lib/components/index.js.map +1 -1
- package/lib/components/progress-bar-grid.d.ts +1 -1
- package/lib/components/progress-bar-grid.d.ts.map +1 -1
- package/lib/components/progress-bar-grid.js +6 -6
- package/lib/components/progress-bar-grid.js.map +1 -1
- package/lib/components/prompt.d.ts +4 -5
- package/lib/components/prompt.d.ts.map +1 -1
- package/lib/components/prompt.js +17 -69
- package/lib/components/prompt.js.map +1 -1
- package/lib/components/section.d.ts +33 -0
- package/lib/components/section.d.ts.map +1 -0
- package/lib/components/section.js +178 -0
- package/lib/components/section.js.map +1 -0
- package/lib/components/segments.d.ts +26 -0
- package/lib/components/segments.d.ts.map +1 -0
- package/lib/components/segments.js +105 -0
- package/lib/components/segments.js.map +1 -0
- package/lib/components/spinner.d.ts +18 -16
- package/lib/components/spinner.d.ts.map +1 -1
- package/lib/components/spinner.js +63 -47
- package/lib/components/spinner.js.map +1 -1
- package/lib/components/style.test.js +11 -11
- package/lib/components/style.test.js.map +1 -1
- package/lib/components/styled.d.ts +17 -0
- package/lib/components/styled.d.ts.map +1 -0
- package/lib/components/styled.js +107 -0
- package/lib/components/styled.js.map +1 -0
- package/lib/components/styled.test.d.ts +2 -0
- package/lib/components/styled.test.d.ts.map +1 -0
- package/lib/components/styled.test.js +135 -0
- package/lib/components/styled.test.js.map +1 -0
- package/lib/index.d.ts +17 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -13
- package/lib/index.js.map +1 -1
- package/lib/index.test.js +17 -11
- package/lib/index.test.js.map +1 -1
- package/lib/layout/grid.d.ts +31 -35
- package/lib/layout/grid.d.ts.map +1 -1
- package/lib/layout/grid.js +437 -216
- package/lib/layout/grid.js.map +1 -1
- package/lib/layout/grid.test.js +332 -36
- package/lib/layout/grid.test.js.map +1 -1
- package/lib/native/ansi.d.ts +9 -0
- package/lib/native/ansi.d.ts.map +1 -1
- package/lib/native/ansi.js +9 -0
- package/lib/native/ansi.js.map +1 -1
- package/lib/native/diff.d.ts +5 -1
- package/lib/native/diff.d.ts.map +1 -1
- package/lib/native/diff.js +25 -7
- package/lib/native/diff.js.map +1 -1
- package/lib/native/region-renderer-debug.test.d.ts +2 -0
- package/lib/native/region-renderer-debug.test.d.ts.map +1 -0
- package/lib/native/region-renderer-debug.test.js +45 -0
- package/lib/native/region-renderer-debug.test.js.map +1 -0
- package/lib/native/region-renderer.d.ts +57 -148
- package/lib/native/region-renderer.d.ts.map +1 -1
- package/lib/native/region-renderer.js +455 -1124
- package/lib/native/region-renderer.js.map +1 -1
- package/lib/native/region.test.js +2 -20
- package/lib/native/region.test.js.map +1 -1
- package/lib/region-resize.test.d.ts +2 -0
- package/lib/region-resize.test.d.ts.map +1 -0
- package/lib/region-resize.test.js +124 -0
- package/lib/region-resize.test.js.map +1 -0
- package/lib/region.d.ts +97 -9
- package/lib/region.d.ts.map +1 -1
- package/lib/region.js +591 -185
- package/lib/region.js.map +1 -1
- package/lib/region.test.js +3 -3
- package/lib/region.test.js.map +1 -1
- package/lib/types.d.ts +9 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/utils/file-link.d.ts +16 -0
- package/lib/utils/file-link.d.ts.map +1 -0
- package/lib/utils/file-link.js +23 -0
- package/lib/utils/file-link.js.map +1 -0
- package/lib/utils/prompt.d.ts +15 -0
- package/lib/utils/prompt.d.ts.map +1 -0
- package/lib/utils/prompt.js +128 -0
- package/lib/utils/prompt.js.map +1 -0
- package/lib/utils/terminal-theme.d.ts +36 -0
- package/lib/utils/terminal-theme.d.ts.map +1 -0
- package/lib/utils/terminal-theme.js +61 -0
- package/lib/utils/terminal-theme.js.map +1 -0
- package/lib/utils/text.d.ts +53 -3
- package/lib/utils/text.d.ts.map +1 -1
- package/lib/utils/text.js +194 -36
- package/lib/utils/text.js.map +1 -1
- package/lib/utils/wait-for-spacebar.d.ts.map +1 -1
- package/lib/utils/wait-for-spacebar.js +9 -6
- package/lib/utils/wait-for-spacebar.js.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/components/spinner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/components/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { Styled } from './styled';
|
|
3
3
|
import { TerminalRegion } from '../region';
|
|
4
4
|
describe('Style Component', () => {
|
|
5
5
|
let region;
|
|
@@ -8,7 +8,7 @@ describe('Style Component', () => {
|
|
|
8
8
|
});
|
|
9
9
|
describe('basic styling', () => {
|
|
10
10
|
it('should apply color', () => {
|
|
11
|
-
const component =
|
|
11
|
+
const component = Styled({ color: 'red' }, 'Hello');
|
|
12
12
|
const result = component({
|
|
13
13
|
availableWidth: 80,
|
|
14
14
|
region: region,
|
|
@@ -19,7 +19,7 @@ describe('Style Component', () => {
|
|
|
19
19
|
expect(result).toContain('\x1b[31m'); // ANSI red
|
|
20
20
|
});
|
|
21
21
|
it('should apply backgroundColor', () => {
|
|
22
|
-
const component =
|
|
22
|
+
const component = Styled({ backgroundColor: 'blue' }, 'Hello');
|
|
23
23
|
const result = component({
|
|
24
24
|
availableWidth: 80,
|
|
25
25
|
region: region,
|
|
@@ -30,7 +30,7 @@ describe('Style Component', () => {
|
|
|
30
30
|
expect(result).toContain('\x1b[44m'); // ANSI blue background
|
|
31
31
|
});
|
|
32
32
|
it('should apply bold', () => {
|
|
33
|
-
const component =
|
|
33
|
+
const component = Styled({ bold: true }, 'Hello');
|
|
34
34
|
const result = component({
|
|
35
35
|
availableWidth: 80,
|
|
36
36
|
region: region,
|
|
@@ -42,7 +42,7 @@ describe('Style Component', () => {
|
|
|
42
42
|
});
|
|
43
43
|
describe('overflow handling', () => {
|
|
44
44
|
it('should truncate with ellipsis-end', () => {
|
|
45
|
-
const component =
|
|
45
|
+
const component = Styled({ overflow: 'ellipsis-end' }, 'This is a very long text');
|
|
46
46
|
const result = component({
|
|
47
47
|
availableWidth: 10,
|
|
48
48
|
region: region,
|
|
@@ -54,7 +54,7 @@ describe('Style Component', () => {
|
|
|
54
54
|
expect(plain.length).toBeLessThanOrEqual(10);
|
|
55
55
|
});
|
|
56
56
|
it('should truncate with ellipsis-start', () => {
|
|
57
|
-
const component =
|
|
57
|
+
const component = Styled({ overflow: 'ellipsis-start' }, 'This is a very long text');
|
|
58
58
|
const result = component({
|
|
59
59
|
availableWidth: 10,
|
|
60
60
|
region: region,
|
|
@@ -66,7 +66,7 @@ describe('Style Component', () => {
|
|
|
66
66
|
expect(plain.length).toBeLessThanOrEqual(10);
|
|
67
67
|
});
|
|
68
68
|
it('should wrap text', () => {
|
|
69
|
-
const component =
|
|
69
|
+
const component = Styled({ overflow: 'wrap' }, 'This is a very long text that should wrap');
|
|
70
70
|
const result = component({
|
|
71
71
|
availableWidth: 10,
|
|
72
72
|
region: region,
|
|
@@ -79,7 +79,7 @@ describe('Style Component', () => {
|
|
|
79
79
|
});
|
|
80
80
|
describe('when condition', () => {
|
|
81
81
|
it('should return null when condition is false', () => {
|
|
82
|
-
const component =
|
|
82
|
+
const component = Styled({ when: () => false }, 'Hello');
|
|
83
83
|
const result = component({
|
|
84
84
|
availableWidth: 80,
|
|
85
85
|
region: region,
|
|
@@ -89,7 +89,7 @@ describe('Style Component', () => {
|
|
|
89
89
|
expect(result).toBeNull();
|
|
90
90
|
});
|
|
91
91
|
it('should return content when condition is true', () => {
|
|
92
|
-
const component =
|
|
92
|
+
const component = Styled({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
|
|
93
93
|
const result = component({
|
|
94
94
|
availableWidth: 80,
|
|
95
95
|
region: region,
|
|
@@ -99,7 +99,7 @@ describe('Style Component', () => {
|
|
|
99
99
|
expect(result).toContain('Hello');
|
|
100
100
|
});
|
|
101
101
|
it('should check availableWidth in condition', () => {
|
|
102
|
-
const component =
|
|
102
|
+
const component = Styled({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
|
|
103
103
|
const result1 = component({
|
|
104
104
|
availableWidth: 40,
|
|
105
105
|
region: region,
|
|
@@ -118,7 +118,7 @@ describe('Style Component', () => {
|
|
|
118
118
|
});
|
|
119
119
|
describe('multi-line content', () => {
|
|
120
120
|
it('should apply styling to each line', () => {
|
|
121
|
-
const component =
|
|
121
|
+
const component = Styled({ color: 'red' }, ['Line 1', 'Line 2']);
|
|
122
122
|
const result = component({
|
|
123
123
|
availableWidth: 80,
|
|
124
124
|
region: region,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.test.js","sourceRoot":"","sources":["../../src/components/style.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"style.test.js","sourceRoot":"","sources":["../../src/components/style.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RenderContext, Component } from '../component';
|
|
2
|
+
import type { Color } from '../types';
|
|
3
|
+
export interface StyleOptions {
|
|
4
|
+
color?: Color;
|
|
5
|
+
backgroundColor?: Color;
|
|
6
|
+
bold?: boolean;
|
|
7
|
+
italic?: boolean;
|
|
8
|
+
underline?: boolean;
|
|
9
|
+
overflow?: 'none' | 'ellipsis-end' | 'ellipsis-start' | 'ellipsis-middle' | 'wrap';
|
|
10
|
+
align?: 'left' | 'right' | 'center';
|
|
11
|
+
when?: (ctx: RenderContext) => boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Styled component - applies styling and handles overflow
|
|
15
|
+
*/
|
|
16
|
+
export declare function Styled(options: StyleOptions, content: string | string[] | Component): Component;
|
|
17
|
+
//# sourceMappingURL=styled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.d.ts","sourceRoot":"","sources":["../../src/components/styled.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAItC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC;IACnF,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GACrC,SAAS,CAyEX"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// Style component for text styling and overflow handling
|
|
2
|
+
import { applyStyle } from '../utils/colors';
|
|
3
|
+
import { truncateEnd, truncateStart, truncateMiddle, wrapText } from '../utils/text';
|
|
4
|
+
/**
|
|
5
|
+
* Styled component - applies styling and handles overflow
|
|
6
|
+
*/
|
|
7
|
+
export function Styled(options, content) {
|
|
8
|
+
return (ctx) => {
|
|
9
|
+
// Check when condition
|
|
10
|
+
if (options.when && !options.when(ctx)) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
// Get content
|
|
14
|
+
let text;
|
|
15
|
+
if (typeof content === 'string' || Array.isArray(content)) {
|
|
16
|
+
text = content;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// It's a component - render it
|
|
20
|
+
const result = content(ctx);
|
|
21
|
+
if (result === null)
|
|
22
|
+
return null;
|
|
23
|
+
text = result;
|
|
24
|
+
}
|
|
25
|
+
// Handle overflow
|
|
26
|
+
const overflow = options.overflow ?? 'wrap';
|
|
27
|
+
const availableWidth = Math.max(0, ctx.availableWidth);
|
|
28
|
+
const alignMode = options.align ?? 'left';
|
|
29
|
+
const styleOptions = {
|
|
30
|
+
color: options.color,
|
|
31
|
+
backgroundColor: options.backgroundColor,
|
|
32
|
+
bold: options.bold,
|
|
33
|
+
italic: options.italic,
|
|
34
|
+
underline: options.underline,
|
|
35
|
+
};
|
|
36
|
+
const formatLines = (lines) => {
|
|
37
|
+
if (lines.length === 0) {
|
|
38
|
+
lines.push('');
|
|
39
|
+
}
|
|
40
|
+
const formatted = lines.map(line => {
|
|
41
|
+
const aligned = alignText(line, availableWidth, alignMode);
|
|
42
|
+
return applyStyle(aligned, styleOptions);
|
|
43
|
+
});
|
|
44
|
+
return formatted.length === 1 ? formatted[0] : formatted;
|
|
45
|
+
};
|
|
46
|
+
if (availableWidth === 0) {
|
|
47
|
+
return formatLines(['']);
|
|
48
|
+
}
|
|
49
|
+
if (typeof text === 'string') {
|
|
50
|
+
// Single line
|
|
51
|
+
let processed = text;
|
|
52
|
+
if (overflow === 'ellipsis-end' && processed.length > availableWidth) {
|
|
53
|
+
processed = truncateEnd(processed, availableWidth);
|
|
54
|
+
}
|
|
55
|
+
else if (overflow === 'ellipsis-start' && processed.length > availableWidth) {
|
|
56
|
+
processed = truncateStart(processed, availableWidth);
|
|
57
|
+
}
|
|
58
|
+
else if (overflow === 'ellipsis-middle' && processed.length > availableWidth) {
|
|
59
|
+
processed = truncateMiddle(processed, availableWidth);
|
|
60
|
+
}
|
|
61
|
+
else if (overflow === 'wrap' || overflow === 'none') {
|
|
62
|
+
const wrapped = wrapText(processed, availableWidth);
|
|
63
|
+
return formatLines(wrapped);
|
|
64
|
+
}
|
|
65
|
+
// Apply alignment
|
|
66
|
+
const aligned = alignText(processed, availableWidth, alignMode);
|
|
67
|
+
return applyStyle(aligned, styleOptions);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Array of strings - apply styling and alignment to each line
|
|
71
|
+
const lines = [];
|
|
72
|
+
for (const line of text) {
|
|
73
|
+
const wrapped = wrapText(line, availableWidth);
|
|
74
|
+
lines.push(...wrapped);
|
|
75
|
+
}
|
|
76
|
+
return formatLines(lines);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Align text within available width
|
|
82
|
+
*/
|
|
83
|
+
function alignText(text, width, align) {
|
|
84
|
+
// Get plain text length (without ANSI codes)
|
|
85
|
+
const plainText = text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
86
|
+
const textLength = plainText.length;
|
|
87
|
+
if (!Number.isFinite(width)) {
|
|
88
|
+
return text;
|
|
89
|
+
}
|
|
90
|
+
if (textLength >= width) {
|
|
91
|
+
return text; // No alignment needed if text is already at or exceeds width
|
|
92
|
+
}
|
|
93
|
+
const padding = width - textLength;
|
|
94
|
+
if (align === 'right') {
|
|
95
|
+
return ' '.repeat(padding) + text;
|
|
96
|
+
}
|
|
97
|
+
else if (align === 'center') {
|
|
98
|
+
const leftPad = Math.floor(padding / 2);
|
|
99
|
+
const rightPad = padding - leftPad;
|
|
100
|
+
return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// 'left' - default, no padding needed
|
|
104
|
+
return text + ' '.repeat(padding);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=styled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.js","sourceRoot":"","sources":["../../src/components/styled.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.test.d.ts","sourceRoot":"","sources":["../../src/components/styled.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { Styled } from './styled';
|
|
3
|
+
import { TerminalRegion } from '../region';
|
|
4
|
+
describe('Style Component', () => {
|
|
5
|
+
let region;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
region = new TerminalRegion({ disableRendering: true, width: 80 });
|
|
8
|
+
});
|
|
9
|
+
describe('basic styling', () => {
|
|
10
|
+
it('should apply color', () => {
|
|
11
|
+
const component = Styled({ color: 'red' }, 'Hello');
|
|
12
|
+
const result = component({
|
|
13
|
+
availableWidth: 80,
|
|
14
|
+
region: region,
|
|
15
|
+
columnIndex: 0,
|
|
16
|
+
rowIndex: 0,
|
|
17
|
+
});
|
|
18
|
+
expect(result).toContain('Hello');
|
|
19
|
+
expect(result).toContain('\x1b[31m'); // ANSI red
|
|
20
|
+
});
|
|
21
|
+
it('should apply backgroundColor', () => {
|
|
22
|
+
const component = Styled({ backgroundColor: 'blue' }, 'Hello');
|
|
23
|
+
const result = component({
|
|
24
|
+
availableWidth: 80,
|
|
25
|
+
region: region,
|
|
26
|
+
columnIndex: 0,
|
|
27
|
+
rowIndex: 0,
|
|
28
|
+
});
|
|
29
|
+
expect(result).toContain('Hello');
|
|
30
|
+
expect(result).toContain('\x1b[44m'); // ANSI blue background
|
|
31
|
+
});
|
|
32
|
+
it('should apply bold', () => {
|
|
33
|
+
const component = Styled({ bold: true }, 'Hello');
|
|
34
|
+
const result = component({
|
|
35
|
+
availableWidth: 80,
|
|
36
|
+
region: region,
|
|
37
|
+
columnIndex: 0,
|
|
38
|
+
rowIndex: 0,
|
|
39
|
+
});
|
|
40
|
+
expect(result).toContain('\x1b[1m'); // ANSI bold
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('overflow handling', () => {
|
|
44
|
+
it('should truncate with ellipsis-end', () => {
|
|
45
|
+
const component = Styled({ overflow: 'ellipsis-end' }, 'This is a very long text');
|
|
46
|
+
const result = component({
|
|
47
|
+
availableWidth: 10,
|
|
48
|
+
region: region,
|
|
49
|
+
columnIndex: 0,
|
|
50
|
+
rowIndex: 0,
|
|
51
|
+
});
|
|
52
|
+
const plain = result.replace(/\x1b\[[0-9;]*m/g, '');
|
|
53
|
+
expect(plain).toMatch(/\.\.\.$/);
|
|
54
|
+
expect(plain.length).toBeLessThanOrEqual(10);
|
|
55
|
+
});
|
|
56
|
+
it('should truncate with ellipsis-start', () => {
|
|
57
|
+
const component = Styled({ overflow: 'ellipsis-start' }, 'This is a very long text');
|
|
58
|
+
const result = component({
|
|
59
|
+
availableWidth: 10,
|
|
60
|
+
region: region,
|
|
61
|
+
columnIndex: 0,
|
|
62
|
+
rowIndex: 0,
|
|
63
|
+
});
|
|
64
|
+
const plain = result.replace(/\x1b\[[0-9;]*m/g, '');
|
|
65
|
+
expect(plain).toMatch(/^\.\.\./);
|
|
66
|
+
expect(plain.length).toBeLessThanOrEqual(10);
|
|
67
|
+
});
|
|
68
|
+
it('should wrap text', () => {
|
|
69
|
+
const component = Styled({ overflow: 'wrap' }, 'This is a very long text that should wrap');
|
|
70
|
+
const result = component({
|
|
71
|
+
availableWidth: 10,
|
|
72
|
+
region: region,
|
|
73
|
+
columnIndex: 0,
|
|
74
|
+
rowIndex: 0,
|
|
75
|
+
});
|
|
76
|
+
expect(Array.isArray(result)).toBe(true);
|
|
77
|
+
expect(result.length).toBeGreaterThan(1);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('when condition', () => {
|
|
81
|
+
it('should return null when condition is false', () => {
|
|
82
|
+
const component = Styled({ when: () => false }, 'Hello');
|
|
83
|
+
const result = component({
|
|
84
|
+
availableWidth: 80,
|
|
85
|
+
region: region,
|
|
86
|
+
columnIndex: 0,
|
|
87
|
+
rowIndex: 0,
|
|
88
|
+
});
|
|
89
|
+
expect(result).toBeNull();
|
|
90
|
+
});
|
|
91
|
+
it('should return content when condition is true', () => {
|
|
92
|
+
const component = Styled({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
|
|
93
|
+
const result = component({
|
|
94
|
+
availableWidth: 80,
|
|
95
|
+
region: region,
|
|
96
|
+
columnIndex: 0,
|
|
97
|
+
rowIndex: 0,
|
|
98
|
+
});
|
|
99
|
+
expect(result).toContain('Hello');
|
|
100
|
+
});
|
|
101
|
+
it('should check availableWidth in condition', () => {
|
|
102
|
+
const component = Styled({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
|
|
103
|
+
const result1 = component({
|
|
104
|
+
availableWidth: 40,
|
|
105
|
+
region: region,
|
|
106
|
+
columnIndex: 0,
|
|
107
|
+
rowIndex: 0,
|
|
108
|
+
});
|
|
109
|
+
expect(result1).toBeNull();
|
|
110
|
+
const result2 = component({
|
|
111
|
+
availableWidth: 60,
|
|
112
|
+
region: region,
|
|
113
|
+
columnIndex: 0,
|
|
114
|
+
rowIndex: 0,
|
|
115
|
+
});
|
|
116
|
+
expect(result2).toContain('Hello');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('multi-line content', () => {
|
|
120
|
+
it('should apply styling to each line', () => {
|
|
121
|
+
const component = Styled({ color: 'red' }, ['Line 1', 'Line 2']);
|
|
122
|
+
const result = component({
|
|
123
|
+
availableWidth: 80,
|
|
124
|
+
region: region,
|
|
125
|
+
columnIndex: 0,
|
|
126
|
+
rowIndex: 0,
|
|
127
|
+
});
|
|
128
|
+
expect(Array.isArray(result)).toBe(true);
|
|
129
|
+
expect(result.length).toBe(2);
|
|
130
|
+
expect(result[0]).toContain('Line 1');
|
|
131
|
+
expect(result[1]).toContain('Line 2');
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=styled.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.test.js","sourceRoot":"","sources":["../../src/components/styled.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,MAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,KAAK,GAAI,MAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,KAAK,GAAI,MAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAE,MAAmB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAE9E,MAAM,OAAO,GAAG,SAAS,CAAC;gBACxB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE3B,MAAM,OAAO,GAAG,SAAS,CAAC;gBACxB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,SAAS,CAAC;gBACvB,cAAc,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAE,MAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAE,MAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,CAAE,MAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
export { TerminalRegion } from './region';
|
|
1
|
+
export { TerminalRegion, SectionReference, ComponentReference } from './region';
|
|
2
2
|
export { getTerminalWidth, getTerminalHeight, isTTY, onResize } from './utils/terminal';
|
|
3
|
-
export { grid
|
|
3
|
+
export { grid as Grid } from './layout/grid';
|
|
4
|
+
export { Styled } from './components/styled';
|
|
4
5
|
export type { GridOptions } from './layout/grid';
|
|
5
|
-
export type { StyleOptions } from './components/
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export
|
|
6
|
+
export type { StyleOptions } from './components/styled';
|
|
7
|
+
export { fill } from './components/fill';
|
|
8
|
+
export type { FillOptions } from './components/fill';
|
|
9
|
+
export { Section, type SectionOptions } from './components/section';
|
|
10
|
+
export { Spinner, type SpinnerOptions } from './components/spinner';
|
|
11
|
+
export { Segments, type SegmentsOptions, type Segment } from './components/segments';
|
|
12
|
+
export { CodeDebug, type CodeDebugOptions, type CodeDebugType } from './components/code-debug';
|
|
13
|
+
export { prompt } from './utils/prompt';
|
|
14
|
+
export type { RegionOptions, LineContent, TextStyle, Color, ProgressBarOptions, } from './types';
|
|
9
15
|
import { TerminalRegion } from './region';
|
|
10
|
-
import {
|
|
11
|
-
import type { RegionOptions, SpinnerOptions } from './types';
|
|
16
|
+
import type { RegionOptions } from './types';
|
|
12
17
|
import type { ProgressBarOptions as ProgressBarGridOptions } from './components/progress-bar-grid';
|
|
13
|
-
export declare function
|
|
14
|
-
export declare const
|
|
15
|
-
export declare
|
|
18
|
+
export declare function Region(options?: RegionOptions): TerminalRegion;
|
|
19
|
+
export declare const region: typeof Region;
|
|
20
|
+
export declare const createRegion: typeof Region;
|
|
21
|
+
export declare function progressBar(options: ProgressBarGridOptions): import("./component").Component;
|
|
16
22
|
export declare const createProgressBar: typeof progressBar;
|
|
17
|
-
export declare function spinner(region: TerminalRegion, lineNumber: number, options?: SpinnerOptions): Spinner;
|
|
18
|
-
export declare const createSpinner: typeof spinner;
|
|
19
23
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,KAAK,EACL,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAE9D;AAGD,eAAO,MAAM,MAAM,eAAS,CAAC;AAC7B,eAAO,MAAM,YAAY,eAAS,CAAC;AAGnC,wBAAgB,WAAW,CAAC,OAAO,EAAE,sBAAsB,mCAE1D;AAGD,eAAO,MAAM,iBAAiB,oBAAc,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
export { TerminalRegion } from './region';
|
|
1
|
+
export { TerminalRegion, SectionReference, ComponentReference } from './region';
|
|
2
2
|
export { getTerminalWidth, getTerminalHeight, isTTY, onResize } from './utils/terminal';
|
|
3
3
|
// Grid system
|
|
4
|
-
export { grid
|
|
5
|
-
export {
|
|
4
|
+
export { grid as Grid } from './layout/grid';
|
|
5
|
+
export { Styled } from './components/styled';
|
|
6
|
+
export { fill } from './components/fill';
|
|
7
|
+
export { Section } from './components/section';
|
|
8
|
+
export { Spinner } from './components/spinner';
|
|
9
|
+
export { Segments } from './components/segments';
|
|
10
|
+
export { CodeDebug } from './components/code-debug';
|
|
6
11
|
// progressBar is exported below as a function
|
|
7
|
-
export {
|
|
12
|
+
export { prompt } from './utils/prompt';
|
|
8
13
|
import { TerminalRegion } from './region';
|
|
9
14
|
import { progressBar as progressBarGrid } from './components/progress-bar-grid';
|
|
10
|
-
|
|
11
|
-
export function region(options) {
|
|
15
|
+
export function Region(options) {
|
|
12
16
|
return new TerminalRegion(options);
|
|
13
17
|
}
|
|
14
|
-
// Keep createRegion as
|
|
15
|
-
export const
|
|
18
|
+
// Keep region and createRegion as aliases for backward compatibility
|
|
19
|
+
export const region = Region;
|
|
20
|
+
export const createRegion = Region;
|
|
16
21
|
// Grid-based progress bar (returns Component)
|
|
17
22
|
export function progressBar(options) {
|
|
18
23
|
return progressBarGrid(options);
|
|
19
24
|
}
|
|
20
25
|
// Keep createProgressBar as alias for backward compatibility
|
|
21
26
|
export const createProgressBar = progressBar;
|
|
22
|
-
export function spinner(region, lineNumber, options) {
|
|
23
|
-
return new Spinner(region, lineNumber, options);
|
|
24
|
-
}
|
|
25
|
-
// Keep createSpinner as alias for backward compatibility
|
|
26
|
-
export const createSpinner = spinner;
|
|
27
27
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxF,cAAc;AACd,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAuB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAuB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAsC,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,SAAS,EAA6C,MAAM,yBAAyB,CAAC;AAC/F,8CAA8C;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AASxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIhF,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC;AAC7B,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,8CAA8C;AAC9C,MAAM,UAAU,WAAW,CAAC,OAA+B;IACzD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC"}
|
package/lib/index.test.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { createRegion, createProgressBar,
|
|
2
|
+
import { createRegion, createProgressBar, Spinner } from './index';
|
|
3
3
|
import { TerminalRegion } from './region';
|
|
4
|
-
import { Spinner } from './components/spinner';
|
|
5
4
|
describe('createRegion', () => {
|
|
6
5
|
it('should create a TerminalRegion instance', () => {
|
|
7
6
|
const region = createRegion({
|
|
@@ -16,7 +15,7 @@ describe('createRegion', () => {
|
|
|
16
15
|
height: 5,
|
|
17
16
|
disableRendering: true,
|
|
18
17
|
});
|
|
19
|
-
expect(region.width).
|
|
18
|
+
expect(region.width).toBeGreaterThan(0);
|
|
20
19
|
expect(region.height).toBe(5);
|
|
21
20
|
region.destroy();
|
|
22
21
|
});
|
|
@@ -53,7 +52,7 @@ describe('createProgressBar', () => {
|
|
|
53
52
|
expect(typeof progressBar).toBe('function');
|
|
54
53
|
});
|
|
55
54
|
});
|
|
56
|
-
describe('
|
|
55
|
+
describe('spinner', () => {
|
|
57
56
|
let region;
|
|
58
57
|
beforeEach(() => {
|
|
59
58
|
region = createRegion({
|
|
@@ -63,18 +62,25 @@ describe('createSpinner', () => {
|
|
|
63
62
|
afterEach(() => {
|
|
64
63
|
region.destroy();
|
|
65
64
|
});
|
|
66
|
-
it('should create a
|
|
67
|
-
const
|
|
68
|
-
expect(
|
|
69
|
-
|
|
65
|
+
it('should create a spinner with render, start, and stop methods', () => {
|
|
66
|
+
const spinnerInstance = Spinner();
|
|
67
|
+
expect(spinnerInstance).toBeDefined();
|
|
68
|
+
expect(typeof spinnerInstance.render).toBe('function');
|
|
69
|
+
expect(typeof spinnerInstance.start).toBe('function');
|
|
70
|
+
expect(typeof spinnerInstance.stop).toBe('function');
|
|
71
|
+
spinnerInstance.stop();
|
|
70
72
|
});
|
|
71
73
|
it('should create a spinner with options', () => {
|
|
72
|
-
const
|
|
74
|
+
const spinnerInstance = Spinner({
|
|
73
75
|
frames: ['-', '\\', '|', '/'],
|
|
74
76
|
interval: 200,
|
|
77
|
+
color: 'yellow',
|
|
75
78
|
});
|
|
76
|
-
expect(
|
|
77
|
-
|
|
79
|
+
expect(spinnerInstance).toBeDefined();
|
|
80
|
+
expect(typeof spinnerInstance.render).toBe('function');
|
|
81
|
+
expect(typeof spinnerInstance.start).toBe('function');
|
|
82
|
+
expect(typeof spinnerInstance.stop).toBe('function');
|
|
83
|
+
spinnerInstance.stop();
|
|
78
84
|
});
|
|
79
85
|
});
|
|
80
86
|
//# sourceMappingURL=index.test.js.map
|
package/lib/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|