@jrichman/ink 6.4.1 → 6.4.3
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/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/ink.d.ts +4 -0
- package/build/ink.js +32 -6
- package/build/ink.js.map +1 -1
- package/build/log-update.d.ts +6 -2
- package/build/log-update.js +298 -35
- package/build/log-update.js.map +1 -1
- package/build/measure-element.d.ts +42 -0
- package/build/measure-element.js +122 -0
- package/build/measure-element.js.map +1 -1
- package/build/output.d.ts +1 -0
- package/build/output.js +1 -0
- package/build/output.js.map +1 -1
- package/build/render-node-to-output.js +18 -74
- package/build/render-node-to-output.js.map +1 -1
- package/build/render.d.ts +22 -0
- package/build/render.js +2 -0
- package/build/render.js.map +1 -1
- package/build/renderer.d.ts +2 -0
- package/build/renderer.js +4 -1
- package/build/renderer.js.map +1 -1
- package/build/wrap-text.d.ts +6 -0
- package/build/wrap-text.js +120 -0
- package/build/wrap-text.js.map +1 -0
- package/package.json +1 -1
- package/readme.md +8 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { inkCharacterWidth, styledCharsWidth } from './measure-text.js';
|
|
2
|
+
export const sliceStyledChars = (styledChars, begin, end) => {
|
|
3
|
+
let width = 0;
|
|
4
|
+
const result = [];
|
|
5
|
+
for (const char of styledChars) {
|
|
6
|
+
const charWidth = inkCharacterWidth(char.value);
|
|
7
|
+
const charStart = width;
|
|
8
|
+
const charEnd = width + charWidth;
|
|
9
|
+
if (end !== undefined && charEnd > end) {
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
if (charStart >= begin) {
|
|
13
|
+
result.push(char);
|
|
14
|
+
}
|
|
15
|
+
width += charWidth;
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
};
|
|
19
|
+
export const truncateStyledChars = (styledChars, columns, options = {}) => {
|
|
20
|
+
const { position = 'end' } = options;
|
|
21
|
+
const truncationCharacter = '…';
|
|
22
|
+
const truncationStyledChar = {
|
|
23
|
+
type: 'char',
|
|
24
|
+
value: truncationCharacter,
|
|
25
|
+
fullWidth: false,
|
|
26
|
+
styles: [],
|
|
27
|
+
};
|
|
28
|
+
if (columns < 1) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
if (columns === 1) {
|
|
32
|
+
return [truncationStyledChar];
|
|
33
|
+
}
|
|
34
|
+
const textWidth = styledCharsWidth(styledChars);
|
|
35
|
+
if (textWidth <= columns) {
|
|
36
|
+
return styledChars;
|
|
37
|
+
}
|
|
38
|
+
const truncationWidth = inkCharacterWidth(truncationCharacter);
|
|
39
|
+
if (position === 'start') {
|
|
40
|
+
const right = sliceStyledChars(styledChars, textWidth - columns + truncationWidth, textWidth);
|
|
41
|
+
return [truncationStyledChar, ...right];
|
|
42
|
+
}
|
|
43
|
+
if (position === 'middle') {
|
|
44
|
+
const leftWidth = Math.ceil(columns / 2);
|
|
45
|
+
const rightWidth = columns - leftWidth;
|
|
46
|
+
const left = sliceStyledChars(styledChars, 0, leftWidth - truncationWidth);
|
|
47
|
+
const right = sliceStyledChars(styledChars, textWidth - rightWidth, textWidth);
|
|
48
|
+
return [...left, truncationStyledChar, ...right];
|
|
49
|
+
}
|
|
50
|
+
const left = sliceStyledChars(styledChars, 0, columns - truncationWidth);
|
|
51
|
+
return [...left, truncationStyledChar];
|
|
52
|
+
};
|
|
53
|
+
const wrapWord = (rows, word, columns) => {
|
|
54
|
+
let currentLine = rows.at(-1);
|
|
55
|
+
let visible = styledCharsWidth(currentLine);
|
|
56
|
+
for (const character of word) {
|
|
57
|
+
const characterLength = inkCharacterWidth(character.value);
|
|
58
|
+
if (visible + characterLength > columns && visible > 0) {
|
|
59
|
+
rows.push([]);
|
|
60
|
+
currentLine = rows.at(-1);
|
|
61
|
+
visible = 0;
|
|
62
|
+
}
|
|
63
|
+
currentLine.push(character);
|
|
64
|
+
visible += characterLength;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const wrapStyledChars = (styledChars, columns) => {
|
|
68
|
+
const rows = [[]];
|
|
69
|
+
const words = [];
|
|
70
|
+
let currentWord = [];
|
|
71
|
+
for (const char of styledChars) {
|
|
72
|
+
if (char.value === ' ') {
|
|
73
|
+
if (currentWord.length > 0) {
|
|
74
|
+
words.push(currentWord);
|
|
75
|
+
}
|
|
76
|
+
currentWord = [];
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
currentWord.push(char);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (currentWord.length > 0) {
|
|
83
|
+
words.push(currentWord);
|
|
84
|
+
}
|
|
85
|
+
const space = {
|
|
86
|
+
type: 'char',
|
|
87
|
+
value: ' ',
|
|
88
|
+
fullWidth: false,
|
|
89
|
+
styles: [],
|
|
90
|
+
};
|
|
91
|
+
for (const [index, word] of words.entries()) {
|
|
92
|
+
const wordWidth = styledCharsWidth(word);
|
|
93
|
+
let rowWidth = styledCharsWidth(rows.at(-1));
|
|
94
|
+
if (index > 0) {
|
|
95
|
+
rows.at(-1).push(space);
|
|
96
|
+
rowWidth++;
|
|
97
|
+
}
|
|
98
|
+
if (wordWidth > columns) {
|
|
99
|
+
if (index > 0) {
|
|
100
|
+
rows[rows.length - 1] = rows.at(-1).slice(0, -1);
|
|
101
|
+
if (rows.at(-1).length > 0) {
|
|
102
|
+
rows.push([]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
wrapWord(rows, word, columns);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (rowWidth + wordWidth > columns && rowWidth > 0) {
|
|
109
|
+
if (index > 0) {
|
|
110
|
+
rows[rows.length - 1] = rows.at(-1).slice(0, -1);
|
|
111
|
+
}
|
|
112
|
+
rows.push(word);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
rows.at(-1).push(...word);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return rows;
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=wrap-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-text.js","sourceRoot":"","sources":["../src/wrap-text.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -2059,6 +2059,14 @@ This controls how frequently the UI can update to prevent excessive re-rendering
|
|
|
2059
2059
|
Higher values allow more frequent updates but may impact performance.
|
|
2060
2060
|
Setting it to a lower value may be useful for components that update very frequently, to reduce CPU usage.
|
|
2061
2061
|
|
|
2062
|
+
###### incrementalRendering
|
|
2063
|
+
|
|
2064
|
+
Type: `boolean`\
|
|
2065
|
+
Default: `false`
|
|
2066
|
+
|
|
2067
|
+
Enable incremental rendering mode which only updates changed lines instead of redrawing the entire output.
|
|
2068
|
+
This can reduce flickering and improve performance for frequently updating UIs.
|
|
2069
|
+
|
|
2062
2070
|
#### Instance
|
|
2063
2071
|
|
|
2064
2072
|
This is the object that `render()` returns.
|