linecraft 0.5.4 → 0.5.6
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 +21 -59
- package/README.md +30 -0
- package/lib/components/code-debug.d.ts +2 -0
- package/lib/components/code-debug.d.ts.map +1 -1
- package/lib/components/code-debug.js +104 -198
- package/lib/components/code-debug.js.map +1 -1
- package/lib/components/code-debug.test.d.ts +2 -0
- package/lib/components/code-debug.test.d.ts.map +1 -0
- package/lib/components/code-debug.test.js +245 -0
- package/lib/components/code-debug.test.js.map +1 -0
- package/lib/components/fill.d.ts +2 -1
- package/lib/components/fill.d.ts.map +1 -1
- package/lib/components/fill.js.map +1 -1
- package/lib/components/progress-bar-grid.d.ts.map +1 -1
- package/lib/components/progress-bar-grid.js +5 -3
- package/lib/components/progress-bar-grid.js.map +1 -1
- package/lib/components/prompt.js +1 -1
- package/lib/components/prompt.js.map +1 -1
- package/lib/components/section.js +1 -1
- package/lib/components/section.js.map +1 -1
- package/lib/components/segments.js +4 -4
- package/lib/components/segments.js.map +1 -1
- package/lib/components/spinner.d.ts +2 -1
- package/lib/components/spinner.d.ts.map +1 -1
- package/lib/components/spinner.js +1 -1
- package/lib/components/spinner.js.map +1 -1
- package/lib/components/styled.d.ts +3 -2
- package/lib/components/styled.d.ts.map +1 -1
- package/lib/components/styled.js +1 -1
- package/lib/components/styled.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/layout/grid.d.ts.map +1 -1
- package/lib/layout/grid.js +1 -2
- package/lib/layout/grid.js.map +1 -1
- package/lib/layout/grid.test.js +3 -3
- package/lib/layout/grid.test.js.map +1 -1
- package/lib/native/region.test.js +1 -1
- package/lib/native/region.test.js.map +1 -1
- package/lib/region-resize.test.js +3 -3
- package/lib/region-resize.test.js.map +1 -1
- package/lib/types.d.ts +6 -5
- package/lib/types.d.ts.map +1 -1
- package/lib/utils/colors.d.ts.map +1 -1
- package/lib/utils/colors.js +50 -8
- package/lib/utils/colors.js.map +1 -1
- package/lib/utils/colors.test.js.map +1 -1
- package/lib/utils/debug-log.js +1 -1
- package/lib/utils/debug-log.js.map +1 -1
- package/lib/utils/terminal-theme.d.ts +17 -28
- package/lib/utils/terminal-theme.d.ts.map +1 -1
- package/lib/utils/terminal-theme.js +66 -38
- package/lib/utils/terminal-theme.js.map +1 -1
- package/lib/utils/text.d.ts +62 -2
- package/lib/utils/text.d.ts.map +1 -1
- package/lib/utils/text.js +396 -37
- package/lib/utils/text.js.map +1 -1
- package/lib/utils/text.test.d.ts +2 -0
- package/lib/utils/text.test.d.ts.map +1 -0
- package/lib/utils/text.test.js +237 -0
- package/lib/utils/text.test.js.map +1 -0
- package/lib/utils/wait-for-spacebar.js +1 -1
- package/lib/utils/wait-for-spacebar.js.map +1 -1
- package/package.json +2 -8
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// Unit tests for text utilities
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import { truncateToWidth, truncateStart, truncateEnd, truncateMiddle, truncateFocusRange, mapColumnToDisplay, countVisibleChars, stripAnsi, splitAtVisiblePos } from './text.js';
|
|
4
|
+
import { applyStyle } from './colors.js';
|
|
5
|
+
describe('text utilities', () => {
|
|
6
|
+
describe('truncateToWidth', () => {
|
|
7
|
+
it('should preserve ANSI codes when truncating', () => {
|
|
8
|
+
const text = applyStyle('Hello World', { color: 'red' });
|
|
9
|
+
const result = truncateToWidth(text, 8);
|
|
10
|
+
const plain = stripAnsi(result);
|
|
11
|
+
expect(plain).toBe('Hello Wo');
|
|
12
|
+
expect(result).toContain('\x1b['); // Should contain ANSI codes
|
|
13
|
+
});
|
|
14
|
+
it('should close OSC 8 hyperlinks when truncating', () => {
|
|
15
|
+
const text = '\x1b]8;;file:///test\x1b\\Hello World\x1b]8;;\x1b\\';
|
|
16
|
+
const result = truncateToWidth(text, 8);
|
|
17
|
+
expect(result).toContain('\x1b]8;;\x1b\\'); // Should close hyperlink
|
|
18
|
+
const plain = stripAnsi(result);
|
|
19
|
+
expect(plain.length).toBeLessThanOrEqual(8);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('truncateEnd', () => {
|
|
23
|
+
it('should add ellipsis and preserve ANSI codes', () => {
|
|
24
|
+
const text = applyStyle('Hello World', { color: 'red' });
|
|
25
|
+
const result = truncateEnd(text, 8);
|
|
26
|
+
const plain = stripAnsi(result);
|
|
27
|
+
expect(plain).toMatch(/\.\.\.$/);
|
|
28
|
+
expect(plain.length).toBeLessThanOrEqual(8);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('truncateStart', () => {
|
|
32
|
+
it('should add ellipsis at start and preserve ANSI codes', () => {
|
|
33
|
+
const text = applyStyle('Hello World', { color: 'red' });
|
|
34
|
+
const result = truncateStart(text, 8);
|
|
35
|
+
const plain = stripAnsi(result);
|
|
36
|
+
expect(plain).toMatch(/^\.\.\./);
|
|
37
|
+
expect(plain.length).toBeLessThanOrEqual(8);
|
|
38
|
+
// Should preserve color on remaining text
|
|
39
|
+
expect(result).toContain('\x1b[');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('truncateMiddle', () => {
|
|
43
|
+
it('should add ellipsis in middle and preserve ANSI codes', () => {
|
|
44
|
+
const text = applyStyle('Hello World', { color: 'red' });
|
|
45
|
+
const result = truncateMiddle(text, 8);
|
|
46
|
+
const plain = stripAnsi(result);
|
|
47
|
+
expect(plain).toContain('...');
|
|
48
|
+
expect(plain.length).toBeLessThanOrEqual(8);
|
|
49
|
+
// Should preserve color on both parts
|
|
50
|
+
expect(result).toContain('\x1b[');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('splitAtVisiblePos', () => {
|
|
54
|
+
it('should split text and preserve ANSI codes', () => {
|
|
55
|
+
const text = applyStyle('Hello World', { color: 'red' });
|
|
56
|
+
const { before, after } = splitAtVisiblePos(text, 5);
|
|
57
|
+
const beforePlain = stripAnsi(before);
|
|
58
|
+
const afterPlain = stripAnsi(after);
|
|
59
|
+
expect(beforePlain).toBe('Hello');
|
|
60
|
+
expect(afterPlain).toBe(' World');
|
|
61
|
+
// Both parts should have ANSI codes
|
|
62
|
+
expect(before).toContain('\x1b[');
|
|
63
|
+
expect(after).toContain('\x1b[');
|
|
64
|
+
});
|
|
65
|
+
it('should not lose characters when splitting', () => {
|
|
66
|
+
const text = 'console.log(hello world")';
|
|
67
|
+
const { before, after } = splitAtVisiblePos(text, 12);
|
|
68
|
+
const combined = stripAnsi(before) + stripAnsi(after);
|
|
69
|
+
expect(combined).toBe(text);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('countVisibleChars', () => {
|
|
73
|
+
it('should count only visible characters, ignoring ANSI codes', () => {
|
|
74
|
+
const text = applyStyle('Hello', { color: 'red' });
|
|
75
|
+
expect(countVisibleChars(text)).toBe(5);
|
|
76
|
+
});
|
|
77
|
+
it('should handle OSC 8 hyperlinks', () => {
|
|
78
|
+
const text = '\x1b]8;;file:///test\x1b\\Hello\x1b]8;;\x1b\\';
|
|
79
|
+
expect(countVisibleChars(text)).toBe(5);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('truncateFocusRange', () => {
|
|
83
|
+
it('should return visible range information', () => {
|
|
84
|
+
const text = 'console.log("hello world");';
|
|
85
|
+
const result = truncateFocusRange(text, 20, 1, 11);
|
|
86
|
+
expect(result.text).toBeTruthy();
|
|
87
|
+
expect(result.visibleStartCol).toBeGreaterThan(0);
|
|
88
|
+
expect(result.visibleEndCol).toBeGreaterThanOrEqual(result.visibleStartCol);
|
|
89
|
+
});
|
|
90
|
+
it('should correctly show target range when code overflows', () => {
|
|
91
|
+
// Simulate the failing case: long line with target at the end
|
|
92
|
+
const longLine = '@media (tv) { .a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};';
|
|
93
|
+
// Target is .v which is near the end (around column 77)
|
|
94
|
+
const targetCol = 77;
|
|
95
|
+
const result = truncateFocusRange(longLine, 50, targetCol, targetCol);
|
|
96
|
+
// The visible range should include the target column
|
|
97
|
+
expect(result.visibleEndCol).toBeGreaterThanOrEqual(targetCol);
|
|
98
|
+
expect(result.visibleStartCol).toBeLessThanOrEqual(targetCol);
|
|
99
|
+
// The truncated text should contain the target character
|
|
100
|
+
const truncatedPlain = stripAnsi(result.text);
|
|
101
|
+
expect(truncatedPlain).toContain('.v');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('mapColumnToDisplay', () => {
|
|
105
|
+
it('should correctly map columns when code fits', () => {
|
|
106
|
+
const originalText = 'console.log("hello");';
|
|
107
|
+
const truncatedText = originalText;
|
|
108
|
+
const displayPos = mapColumnToDisplay(originalText, truncatedText, 1, originalText.length, 12);
|
|
109
|
+
expect(displayPos).toBe(12);
|
|
110
|
+
});
|
|
111
|
+
it('should correctly map columns with ellipsis at start', () => {
|
|
112
|
+
const originalText = 'console.log("hello world");';
|
|
113
|
+
const truncatedText = '...log("hello world");';
|
|
114
|
+
// If visible range starts at column 10, column 12 should map correctly
|
|
115
|
+
const displayPos = mapColumnToDisplay(originalText, truncatedText, 10, 25, 12);
|
|
116
|
+
// Column 12 in original should be at position 3 (ellipsis) + (12 - 10 + 1) = 6
|
|
117
|
+
expect(displayPos).toBe(6);
|
|
118
|
+
});
|
|
119
|
+
it('should correctly map columns with ellipsis at end', () => {
|
|
120
|
+
const originalText = 'console.log("hello world");';
|
|
121
|
+
const truncatedText = 'console.log("hello...';
|
|
122
|
+
// If visible range is 1-15, column 12 should map correctly
|
|
123
|
+
const displayPos = mapColumnToDisplay(originalText, truncatedText, 1, 15, 12);
|
|
124
|
+
expect(displayPos).toBe(12);
|
|
125
|
+
});
|
|
126
|
+
it('should correctly map target column when code overflows (failing case)', () => {
|
|
127
|
+
// This is the specific failing case from the user
|
|
128
|
+
const longLine = '@media (tv) { .a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};';
|
|
129
|
+
const targetCol = 77; // .v is at column 77
|
|
130
|
+
// Truncate to show the target
|
|
131
|
+
const result = truncateFocusRange(longLine, 50, targetCol, targetCol);
|
|
132
|
+
// Map the target column to display position
|
|
133
|
+
const displayPos = mapColumnToDisplay(longLine, result.text, result.visibleStartCol, result.visibleEndCol, targetCol);
|
|
134
|
+
// The display position should point to where .v appears in the truncated text
|
|
135
|
+
const truncatedPlain = stripAnsi(result.text);
|
|
136
|
+
const expectedChar = longLine[targetCol - 1]; // -1 because columns are 1-based
|
|
137
|
+
const actualChar = truncatedPlain[displayPos - 1]; // -1 because positions are 1-based
|
|
138
|
+
expect(actualChar).toBe(expectedChar);
|
|
139
|
+
});
|
|
140
|
+
it('should correctly map columns with start ellipsis (real-world code-debug case)', () => {
|
|
141
|
+
// Simulate a long line that gets truncated with ellipsis at start
|
|
142
|
+
// Original: " .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};"
|
|
143
|
+
// Truncated: "...b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};"
|
|
144
|
+
const originalLine = ' .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};';
|
|
145
|
+
const startCol = 77; // Column 77 is '.v'
|
|
146
|
+
const endCol = 78; // Column 78 is ')'
|
|
147
|
+
// Truncate to show columns around 77-78
|
|
148
|
+
const result = truncateFocusRange(originalLine, 50, startCol, endCol);
|
|
149
|
+
// Map both columns
|
|
150
|
+
const displayStart = mapColumnToDisplay(originalLine, result.text, result.visibleStartCol, result.visibleEndCol, startCol, result.rangeStartCol, result.rangeEndCol);
|
|
151
|
+
const displayEnd = mapColumnToDisplay(originalLine, result.text, result.visibleStartCol, result.visibleEndCol, endCol, result.rangeStartCol, result.rangeEndCol);
|
|
152
|
+
// Verify the mapped positions point to the correct characters
|
|
153
|
+
const truncatedPlain = stripAnsi(result.text);
|
|
154
|
+
const expectedStartChar = originalLine[startCol - 1]; // '.v' at position 77
|
|
155
|
+
const expectedEndChar = originalLine[endCol - 1]; // ')' at position 78
|
|
156
|
+
const actualStartChar = truncatedPlain[displayStart - 1];
|
|
157
|
+
const actualEndChar = truncatedPlain[displayEnd - 1];
|
|
158
|
+
expect(actualStartChar).toBe(expectedStartChar);
|
|
159
|
+
expect(actualEndChar).toBe(expectedEndChar);
|
|
160
|
+
// Also verify the positions are correct relative to each other
|
|
161
|
+
expect(displayEnd - displayStart).toBe(endCol - startCol);
|
|
162
|
+
});
|
|
163
|
+
it('should correctly map columns when visible range is at the end of a long line', () => {
|
|
164
|
+
// Test case where target is near the end and we have start ellipsis
|
|
165
|
+
const longLine = 'a'.repeat(20) + 'b'.repeat(20) + 'c'.repeat(20) + 'TARGET' + 'd'.repeat(20);
|
|
166
|
+
const targetStart = 61; // Start of "TARGET"
|
|
167
|
+
const targetEnd = 66; // End of "TARGET"
|
|
168
|
+
const result = truncateFocusRange(longLine, 30, targetStart, targetEnd);
|
|
169
|
+
const displayStart = mapColumnToDisplay(longLine, result.text, result.visibleStartCol, result.visibleEndCol, targetStart, result.rangeStartCol, result.rangeEndCol);
|
|
170
|
+
const displayEnd = mapColumnToDisplay(longLine, result.text, result.visibleStartCol, result.visibleEndCol, targetEnd, result.rangeStartCol, result.rangeEndCol);
|
|
171
|
+
const truncatedPlain = stripAnsi(result.text);
|
|
172
|
+
expect(truncatedPlain[displayStart - 1]).toBe('T');
|
|
173
|
+
expect(truncatedPlain[displayEnd - 1]).toBe('T'); // Last char of "TARGET"
|
|
174
|
+
expect(displayEnd - displayStart).toBe(5); // "TARGET" is 5 chars
|
|
175
|
+
});
|
|
176
|
+
it('should correctly map .v at columns 77-78 in real-world Less code example', () => {
|
|
177
|
+
// Real-world test case from code-debug component
|
|
178
|
+
const errorLine = ' .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};';
|
|
179
|
+
const startColumn = 77; // Should point to '.v'
|
|
180
|
+
const endColumn = 78; // Should point to 'v'
|
|
181
|
+
// Verify the original columns are correct
|
|
182
|
+
expect(errorLine[startColumn - 1]).toBe('.');
|
|
183
|
+
expect(errorLine[endColumn - 1]).toBe('v');
|
|
184
|
+
// Test with different widths to ensure mapping is correct
|
|
185
|
+
const widths = [30, 40, 50, 60, 70, 80, 90, 100];
|
|
186
|
+
for (const width of widths) {
|
|
187
|
+
const result = truncateFocusRange(errorLine, width, startColumn, endColumn);
|
|
188
|
+
// Map the columns to display positions
|
|
189
|
+
const displayStart = mapColumnToDisplay(errorLine, result.text, result.visibleStartCol, result.visibleEndCol, startColumn, result.rangeStartCol, result.rangeEndCol);
|
|
190
|
+
const displayEnd = mapColumnToDisplay(errorLine, result.text, result.visibleStartCol, result.visibleEndCol, endColumn, result.rangeStartCol, result.rangeEndCol);
|
|
191
|
+
// Verify the mapped positions point to the correct characters
|
|
192
|
+
const truncatedPlain = stripAnsi(result.text);
|
|
193
|
+
const actualStartChar = truncatedPlain[displayStart - 1];
|
|
194
|
+
const actualEndChar = truncatedPlain[displayEnd - 1];
|
|
195
|
+
expect(actualStartChar).toBe('.');
|
|
196
|
+
expect(actualEndChar).toBe('v');
|
|
197
|
+
expect(displayEnd - displayStart).toBe(1); // Should be exactly 1 character apart
|
|
198
|
+
// Also verify the visible range includes the target
|
|
199
|
+
expect(result.visibleStartCol).toBeLessThanOrEqual(startColumn);
|
|
200
|
+
expect(result.visibleEndCol).toBeGreaterThanOrEqual(endColumn);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
it('should correctly highlight .v at columns 77-78 when simulating code-debug highlighting', () => {
|
|
204
|
+
// Simulate the exact highlighting logic used in code-debug component
|
|
205
|
+
const errorLine = ' .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v) {};';
|
|
206
|
+
const startColumn = 77;
|
|
207
|
+
const endColumn = 78;
|
|
208
|
+
// Test with different widths
|
|
209
|
+
const widths = [30, 40, 50, 60, 70, 80, 90, 100];
|
|
210
|
+
for (const width of widths) {
|
|
211
|
+
// Step 1: Truncate (as code-debug does)
|
|
212
|
+
const truncateResult = truncateFocusRange(errorLine, width, startColumn, endColumn);
|
|
213
|
+
const truncatedErrorLine = truncateResult.text;
|
|
214
|
+
const visibleStartCol = truncateResult.visibleStartCol;
|
|
215
|
+
const visibleEndCol = truncateResult.visibleEndCol;
|
|
216
|
+
// Step 2: Map columns (as code-debug does)
|
|
217
|
+
const mapColumnToDisplayLocal = (originalCol) => {
|
|
218
|
+
return mapColumnToDisplay(errorLine, truncatedErrorLine, visibleStartCol, visibleEndCol, originalCol, truncateResult.rangeStartCol, truncateResult.rangeEndCol);
|
|
219
|
+
};
|
|
220
|
+
const highlightStart = mapColumnToDisplayLocal(startColumn);
|
|
221
|
+
const highlightEnd = mapColumnToDisplayLocal(endColumn);
|
|
222
|
+
// Step 3: Split and extract highlight range (as code-debug does)
|
|
223
|
+
const { before: _beforeHighlight, after: remainingAfterStart } = splitAtVisiblePos(truncatedErrorLine, highlightStart - 1);
|
|
224
|
+
const highlightLength = highlightEnd - highlightStart + 1;
|
|
225
|
+
const { before: highlightRange } = splitAtVisiblePos(remainingAfterStart, highlightLength);
|
|
226
|
+
// Step 4: Verify the highlighted range contains .v
|
|
227
|
+
const highlightPlain = stripAnsi(highlightRange);
|
|
228
|
+
expect(highlightPlain).toContain('.v');
|
|
229
|
+
// Step 5: Verify the exact characters
|
|
230
|
+
const truncatedPlain = stripAnsi(truncatedErrorLine);
|
|
231
|
+
expect(truncatedPlain[highlightStart - 1]).toBe('.');
|
|
232
|
+
expect(truncatedPlain[highlightEnd - 1]).toBe('v');
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
//# sourceMappingURL=text.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.test.js","sourceRoot":"","sources":["../../src/utils/text.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ export async function waitForSpacebar(region, message = 'Press SPACEBAR to conti
|
|
|
22
22
|
try {
|
|
23
23
|
process.stdin.setRawMode(true);
|
|
24
24
|
}
|
|
25
|
-
catch
|
|
25
|
+
catch {
|
|
26
26
|
// If setRawMode fails (e.g., stdin is closed or not available), just resolve
|
|
27
27
|
resolve();
|
|
28
28
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait-for-spacebar.js","sourceRoot":"","sources":["../../src/utils/wait-for-spacebar.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsB,EACtB,UAAkB,+BAA+B;IAEjD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,yDAAyD;QACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,yCAAyC;YACzC,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"wait-for-spacebar.js","sourceRoot":"","sources":["../../src/utils/wait-for-spacebar.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsB,EACtB,UAAkB,+BAA+B;IAEjD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,yDAAyD;QACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,yCAAyC;YACzC,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,6EAA6E;YAC7E,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;YACjC,0BAA0B;YAC1B,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC,CAAC,mBAAmB;gBAChD,4DAA4D;gBAC5D,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC;YACrD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,0DAA0D;YAC1D,4EAA4E;YAC5E,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE/B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "linecraft",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "High-performance terminal UI library for Node.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -22,13 +22,7 @@
|
|
|
22
22
|
"type": "git",
|
|
23
23
|
"url": "https://github.com/matthew-dean/linecraft.git"
|
|
24
24
|
},
|
|
25
|
-
"license": "
|
|
26
|
-
"licenses": [
|
|
27
|
-
{
|
|
28
|
-
"type": "LicenseRef-FLL-1.2",
|
|
29
|
-
"url": "https://fllicense.org"
|
|
30
|
-
}
|
|
31
|
-
],
|
|
25
|
+
"license": "MIT",
|
|
32
26
|
"scripts": {
|
|
33
27
|
"build:ts": "tsc -p tsconfig.build.json",
|
|
34
28
|
"build": "pnpm build:ts",
|