@jrichman/ink 6.6.9 → 7.0.0-beta
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/components/Box.js +7 -4
- package/build/components/Box.js.map +1 -1
- package/build/components/StaticRender.d.ts +1 -1
- package/build/components/StaticRender.js +19 -7
- package/build/components/StaticRender.js.map +1 -1
- package/build/dom.d.ts +8 -3
- package/build/dom.js +42 -12
- package/build/dom.js.map +1 -1
- package/build/get-max-width.js +1 -1
- package/build/get-max-width.js.map +1 -1
- package/build/ink.d.ts +1 -0
- package/build/ink.js +61 -5
- package/build/ink.js.map +1 -1
- package/build/measure-element.js +25 -16
- package/build/measure-element.js.map +1 -1
- package/build/measure-text.js +8 -3
- package/build/measure-text.js.map +1 -1
- package/build/output.d.ts +60 -2
- package/build/output.js +259 -66
- package/build/output.js.map +1 -1
- package/build/reconciler.js +36 -6
- package/build/reconciler.js.map +1 -1
- package/build/render-background.js +2 -2
- package/build/render-background.js.map +1 -1
- package/build/render-border.js +2 -2
- package/build/render-border.js.map +1 -1
- package/build/render-container.js +2 -4
- package/build/render-container.js.map +1 -1
- package/build/render-node-to-output.js +163 -40
- package/build/render-node-to-output.js.map +1 -1
- package/build/render-sticky.d.ts +3 -3
- package/build/render-sticky.js +18 -18
- package/build/render-sticky.js.map +1 -1
- package/build/renderer.d.ts +1 -0
- package/build/renderer.js +58 -14
- package/build/renderer.js.map +1 -1
- package/build/resize-observer.js +4 -4
- package/build/resize-observer.js.map +1 -1
- package/build/scroll.js +3 -3
- package/build/scroll.js.map +1 -1
- package/build/serialization.js +1 -1
- package/build/serialization.js.map +1 -1
- package/build/squash-text-nodes.js +15 -6
- package/build/squash-text-nodes.js.map +1 -1
- package/build/styled-line.d.ts +8 -0
- package/build/styled-line.js +438 -141
- package/build/styled-line.js.map +1 -1
- package/build/terminal-buffer.d.ts +1 -0
- package/build/terminal-buffer.js +198 -51
- package/build/terminal-buffer.js.map +1 -1
- package/build/tokenize.d.ts +1 -0
- package/build/tokenize.js +146 -0
- package/build/tokenize.js.map +1 -1
- package/build/worker/animation-controller.js +1 -1
- package/build/worker/animation-controller.js.map +1 -1
- package/build/worker/canvas.js +15 -3
- package/build/worker/canvas.js.map +1 -1
- package/build/worker/compositor.js +2 -1
- package/build/worker/compositor.js.map +1 -1
- package/build/worker/render-worker.d.ts +15 -5
- package/build/worker/render-worker.js +34 -28
- package/build/worker/render-worker.js.map +1 -1
- package/build/worker/scene-manager.d.ts +1 -1
- package/build/worker/scene-manager.js +28 -23
- package/build/worker/scene-manager.js.map +1 -1
- package/build/worker/scroll-optimizer.d.ts +1 -1
- package/build/worker/scroll-optimizer.js +3 -3
- package/build/worker/scroll-optimizer.js.map +1 -1
- package/build/worker/terminal-writer.d.ts +0 -1
- package/build/worker/terminal-writer.js +13 -8
- package/build/worker/terminal-writer.js.map +1 -1
- package/build/worker/worker-entry.js +1 -2
- package/build/worker/worker-entry.js.map +1 -1
- package/package.json +3 -3
- package/readme.md +27 -8
- package/build/wrap-text.d.ts +0 -6
- package/build/wrap-text.js +0 -120
- package/build/wrap-text.js.map +0 -1
package/readme.md
CHANGED
|
@@ -124,7 +124,7 @@ Feel free to play around with the code and fork this Repl at [https://repl.it/@v
|
|
|
124
124
|
- [Qodo Command](https://github.com/qodo-ai/command) - Build, run, and manage AI agents.
|
|
125
125
|
- [Nanocoder](https://github.com/nano-collective/nanocoder) - A community-built, local-first AI coding agent with multi-provider support.
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
_(PRs welcome. Append new entries at the end. Repos must have 100+ stars and showcase Ink beyond a basic list picker.)_
|
|
128
128
|
|
|
129
129
|
## Contents
|
|
130
130
|
|
|
@@ -979,7 +979,7 @@ Alternatively, pass a custom border style like so:
|
|
|
979
979
|
bottomLeft: '↗',
|
|
980
980
|
bottom: '↑',
|
|
981
981
|
bottomRight: '↖',
|
|
982
|
-
right: '←'
|
|
982
|
+
right: '←',
|
|
983
983
|
}}
|
|
984
984
|
>
|
|
985
985
|
<Text>Custom</Text>
|
|
@@ -1165,11 +1165,23 @@ Accepts the same values as [`color`](#color) in the `<Text>` component.
|
|
|
1165
1165
|
<Text>Red background</Text>
|
|
1166
1166
|
</Box>
|
|
1167
1167
|
|
|
1168
|
-
<Box
|
|
1168
|
+
<Box
|
|
1169
|
+
backgroundColor="#FF8800"
|
|
1170
|
+
width={20}
|
|
1171
|
+
height={3}
|
|
1172
|
+
marginTop={1}
|
|
1173
|
+
alignSelf="flex-start"
|
|
1174
|
+
>
|
|
1169
1175
|
<Text>Orange background</Text>
|
|
1170
1176
|
</Box>
|
|
1171
1177
|
|
|
1172
|
-
<Box
|
|
1178
|
+
<Box
|
|
1179
|
+
backgroundColor="rgb(0, 255, 0)"
|
|
1180
|
+
width={20}
|
|
1181
|
+
height={3}
|
|
1182
|
+
marginTop={1}
|
|
1183
|
+
alignSelf="flex-start"
|
|
1184
|
+
>
|
|
1173
1185
|
<Text>Green background</Text>
|
|
1174
1186
|
</Box>
|
|
1175
1187
|
</Box>
|
|
@@ -1188,7 +1200,12 @@ The background color fills the entire `<Box>` area and is inherited by child `<T
|
|
|
1188
1200
|
Background colors work with borders and padding:
|
|
1189
1201
|
|
|
1190
1202
|
```jsx
|
|
1191
|
-
<Box
|
|
1203
|
+
<Box
|
|
1204
|
+
backgroundColor="cyan"
|
|
1205
|
+
borderStyle="round"
|
|
1206
|
+
padding={1}
|
|
1207
|
+
alignSelf="flex-start"
|
|
1208
|
+
>
|
|
1192
1209
|
<Text>Background with border and padding</Text>
|
|
1193
1210
|
</Box>
|
|
1194
1211
|
```
|
|
@@ -1297,8 +1314,8 @@ const Example = () => {
|
|
|
1297
1314
|
...previousTests,
|
|
1298
1315
|
{
|
|
1299
1316
|
id: previousTests.length,
|
|
1300
|
-
title: `Test #${previousTests.length + 1}
|
|
1301
|
-
}
|
|
1317
|
+
title: `Test #${previousTests.length + 1}`,
|
|
1318
|
+
},
|
|
1302
1319
|
]);
|
|
1303
1320
|
|
|
1304
1321
|
timer = setTimeout(run, 100);
|
|
@@ -1437,7 +1454,7 @@ const text =
|
|
|
1437
1454
|
render(
|
|
1438
1455
|
<HangingIndent bold dimColor indent={4}>
|
|
1439
1456
|
{text}
|
|
1440
|
-
</HangingIndent
|
|
1457
|
+
</HangingIndent>,
|
|
1441
1458
|
);
|
|
1442
1459
|
```
|
|
1443
1460
|
|
|
@@ -2257,6 +2274,7 @@ Type: `string`
|
|
|
2257
2274
|
The role of the element.
|
|
2258
2275
|
|
|
2259
2276
|
Supported values:
|
|
2277
|
+
|
|
2260
2278
|
- `button`
|
|
2261
2279
|
- `checkbox`
|
|
2262
2280
|
- `radio`
|
|
@@ -2279,6 +2297,7 @@ Type: `object`
|
|
|
2279
2297
|
The state of the element.
|
|
2280
2298
|
|
|
2281
2299
|
Supported values:
|
|
2300
|
+
|
|
2282
2301
|
- `checked` (boolean)
|
|
2283
2302
|
- `disabled` (boolean)
|
|
2284
2303
|
- `expanded` (boolean)
|
package/build/wrap-text.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type StyledChar } from '@alcalzone/ansi-tokenize';
|
|
2
|
-
export declare const sliceStyledChars: (styledChars: StyledChar[], begin: number, end?: number) => StyledChar[];
|
|
3
|
-
export declare const truncateStyledChars: (styledChars: StyledChar[], columns: number, options?: {
|
|
4
|
-
position?: "start" | "middle" | "end";
|
|
5
|
-
}) => StyledChar[];
|
|
6
|
-
export declare const wrapStyledChars: (styledChars: StyledChar[], columns: number) => StyledChar[][];
|
package/build/wrap-text.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
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
|
package/build/wrap-text.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-text.js","sourceRoot":"","sources":["../src/wrap-text.ts"],"names":[],"mappings":"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"}
|