@jrichman/ink 6.6.8 → 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.
Files changed (78) hide show
  1. package/build/components/Box.js +7 -4
  2. package/build/components/Box.js.map +1 -1
  3. package/build/components/StaticRender.d.ts +1 -1
  4. package/build/components/StaticRender.js +19 -7
  5. package/build/components/StaticRender.js.map +1 -1
  6. package/build/dom.d.ts +8 -3
  7. package/build/dom.js +43 -13
  8. package/build/dom.js.map +1 -1
  9. package/build/get-max-width.js +1 -1
  10. package/build/get-max-width.js.map +1 -1
  11. package/build/ink.d.ts +1 -0
  12. package/build/ink.js +61 -5
  13. package/build/ink.js.map +1 -1
  14. package/build/measure-element.js +25 -16
  15. package/build/measure-element.js.map +1 -1
  16. package/build/measure-text.js +8 -3
  17. package/build/measure-text.js.map +1 -1
  18. package/build/output.d.ts +60 -2
  19. package/build/output.js +259 -66
  20. package/build/output.js.map +1 -1
  21. package/build/reconciler.js +36 -6
  22. package/build/reconciler.js.map +1 -1
  23. package/build/render-background.js +2 -2
  24. package/build/render-background.js.map +1 -1
  25. package/build/render-border.js +2 -2
  26. package/build/render-border.js.map +1 -1
  27. package/build/render-container.js +2 -4
  28. package/build/render-container.js.map +1 -1
  29. package/build/render-node-to-output.js +163 -40
  30. package/build/render-node-to-output.js.map +1 -1
  31. package/build/render-sticky.d.ts +3 -3
  32. package/build/render-sticky.js +18 -18
  33. package/build/render-sticky.js.map +1 -1
  34. package/build/renderer.d.ts +1 -0
  35. package/build/renderer.js +58 -14
  36. package/build/renderer.js.map +1 -1
  37. package/build/resize-observer.js +4 -4
  38. package/build/resize-observer.js.map +1 -1
  39. package/build/scroll.js +3 -3
  40. package/build/scroll.js.map +1 -1
  41. package/build/serialization.js +1 -1
  42. package/build/serialization.js.map +1 -1
  43. package/build/squash-text-nodes.js +15 -6
  44. package/build/squash-text-nodes.js.map +1 -1
  45. package/build/styled-line.d.ts +8 -0
  46. package/build/styled-line.js +438 -141
  47. package/build/styled-line.js.map +1 -1
  48. package/build/terminal-buffer.d.ts +1 -0
  49. package/build/terminal-buffer.js +198 -51
  50. package/build/terminal-buffer.js.map +1 -1
  51. package/build/tokenize.d.ts +1 -0
  52. package/build/tokenize.js +146 -0
  53. package/build/tokenize.js.map +1 -1
  54. package/build/worker/animation-controller.js +1 -1
  55. package/build/worker/animation-controller.js.map +1 -1
  56. package/build/worker/canvas.js +15 -3
  57. package/build/worker/canvas.js.map +1 -1
  58. package/build/worker/compositor.js +2 -1
  59. package/build/worker/compositor.js.map +1 -1
  60. package/build/worker/render-worker.d.ts +15 -5
  61. package/build/worker/render-worker.js +34 -28
  62. package/build/worker/render-worker.js.map +1 -1
  63. package/build/worker/scene-manager.d.ts +1 -1
  64. package/build/worker/scene-manager.js +28 -23
  65. package/build/worker/scene-manager.js.map +1 -1
  66. package/build/worker/scroll-optimizer.d.ts +1 -1
  67. package/build/worker/scroll-optimizer.js +3 -3
  68. package/build/worker/scroll-optimizer.js.map +1 -1
  69. package/build/worker/terminal-writer.d.ts +0 -1
  70. package/build/worker/terminal-writer.js +13 -8
  71. package/build/worker/terminal-writer.js.map +1 -1
  72. package/build/worker/worker-entry.js +1 -2
  73. package/build/worker/worker-entry.js.map +1 -1
  74. package/package.json +3 -3
  75. package/readme.md +27 -8
  76. package/build/wrap-text.d.ts +0 -6
  77. package/build/wrap-text.js +0 -120
  78. 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
- *(PRs welcome. Append new entries at the end. Repos must have 100+ stars and showcase Ink beyond a basic list picker.)*
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 backgroundColor="#FF8800" width={20} height={3} marginTop={1} alignSelf="flex-start">
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 backgroundColor="rgb(0, 255, 0)" width={20} height={3} marginTop={1} alignSelf="flex-start">
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 backgroundColor="cyan" borderStyle="round" padding={1} alignSelf="flex-start">
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)
@@ -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[][];
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrap-text.js","sourceRoot":"","sources":["../src/wrap-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,WAAyB,EACzB,KAAa,EACb,GAAY,EACG,EAAE;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;QAElC,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;YACxC,MAAM;QACP,CAAC;QAED,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,KAAK,IAAI,SAAS,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,WAAyB,EACzB,OAAe,EACf,UAAmD,EAAE,EACtC,EAAE;IACjB,MAAM,EAAC,QAAQ,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;IACnC,MAAM,mBAAmB,GAAG,GAAG,CAAC;IAChC,MAAM,oBAAoB,GAAe;QACxC,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,mBAAmB;QAC1B,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,EAAE;KACV,CAAC;IAEF,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAE/D,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,gBAAgB,CAC7B,WAAW,EACX,SAAS,GAAG,OAAO,GAAG,eAAe,EACrC,SAAS,CACT,CAAC;QACF,OAAO,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;QACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,gBAAgB,CAC7B,WAAW,EACX,SAAS,GAAG,UAAU,EACtB,SAAS,CACT,CAAC;QACF,OAAO,CAAC,GAAG,IAAI,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAChB,IAAoB,EACpB,IAAkB,EAClB,OAAe,EACd,EAAE;IACH,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE5C,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,OAAO,GAAG,eAAe,GAAG,OAAO,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;YAC3B,OAAO,GAAG,CAAC,CAAC;QACb,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,OAAO,IAAI,eAAe,CAAC;IAC5B,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,WAAyB,EACzB,OAAe,EACE,EAAE;IACnB,MAAM,IAAI,GAAmB,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,WAAW,GAAiB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,CAAC;YAED,WAAW,GAAG,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAe;QACzB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,EAAE;KACV,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAE9C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,QAAQ,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;YACzB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAElD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC;YACF,CAAC;YAED,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9B,SAAS;QACV,CAAC;QAED,IAAI,QAAQ,GAAG,SAAS,GAAG,OAAO,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}