@promptctl/rich-js 0.8.0 → 0.10.0
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/README.md +68 -1
- package/dist/core/box.d.ts +93 -39
- package/dist/core/box.d.ts.map +1 -1
- package/dist/core/box.js +348 -490
- package/dist/core/box.js.map +1 -1
- package/dist/core/color.d.ts.map +1 -1
- package/dist/core/color.js +22 -8
- package/dist/core/color.js.map +1 -1
- package/dist/core/console.d.ts +2 -4
- package/dist/core/console.d.ts.map +1 -1
- package/dist/core/console.js +35 -24
- package/dist/core/console.js.map +1 -1
- package/dist/core/highlighter.d.ts +2 -1
- package/dist/core/highlighter.d.ts.map +1 -1
- package/dist/core/highlighter.js +28 -6
- package/dist/core/highlighter.js.map +1 -1
- package/dist/{renderables → core}/json.d.ts +8 -3
- package/dist/core/json.d.ts.map +1 -0
- package/dist/{renderables → core}/json.js +7 -2
- package/dist/core/json.js.map +1 -0
- package/dist/core/markup.d.ts +6 -7
- package/dist/core/markup.d.ts.map +1 -1
- package/dist/core/markup.js +124 -32
- package/dist/core/markup.js.map +1 -1
- package/dist/core/pretty.d.ts +56 -21
- package/dist/core/pretty.d.ts.map +1 -1
- package/dist/core/pretty.js +210 -116
- package/dist/core/pretty.js.map +1 -1
- package/dist/core/protocol.d.ts +16 -0
- package/dist/core/protocol.d.ts.map +1 -1
- package/dist/core/protocol.js +13 -0
- package/dist/core/protocol.js.map +1 -1
- package/dist/core/segment.d.ts +5 -0
- package/dist/core/segment.d.ts.map +1 -1
- package/dist/core/segment.js +9 -3
- package/dist/core/segment.js.map +1 -1
- package/dist/core/strip.d.ts +9 -5
- package/dist/core/strip.d.ts.map +1 -1
- package/dist/core/strip.js +39 -41
- package/dist/core/strip.js.map +1 -1
- package/dist/core/style.d.ts +19 -0
- package/dist/core/style.d.ts.map +1 -1
- package/dist/core/style.js +46 -38
- package/dist/core/style.js.map +1 -1
- package/dist/core/text.d.ts +102 -4
- package/dist/core/text.d.ts.map +1 -1
- package/dist/core/text.js +322 -184
- package/dist/core/text.js.map +1 -1
- package/dist/core/wrap.d.ts +42 -0
- package/dist/core/wrap.d.ts.map +1 -0
- package/dist/core/wrap.js +128 -0
- package/dist/core/wrap.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/renderables/markdown.d.ts +1 -1
- package/dist/renderables/markdown.d.ts.map +1 -1
- package/dist/renderables/markdown.js +7 -14
- package/dist/renderables/markdown.js.map +1 -1
- package/dist/renderables/padding.d.ts +1 -1
- package/dist/renderables/padding.d.ts.map +1 -1
- package/dist/renderables/padding.js +5 -11
- package/dist/renderables/padding.js.map +1 -1
- package/dist/renderables/panel.d.ts +4 -4
- package/dist/renderables/panel.d.ts.map +1 -1
- package/dist/renderables/panel.js +39 -39
- package/dist/renderables/panel.js.map +1 -1
- package/dist/renderables/progress.d.ts +3 -3
- package/dist/renderables/progress.d.ts.map +1 -1
- package/dist/renderables/progress.js +11 -9
- package/dist/renderables/progress.js.map +1 -1
- package/dist/renderables/progressBar.d.ts +3 -3
- package/dist/renderables/progressBar.d.ts.map +1 -1
- package/dist/renderables/progressBar.js +9 -15
- package/dist/renderables/progressBar.js.map +1 -1
- package/dist/renderables/prompt.js +1 -1
- package/dist/renderables/prompt.js.map +1 -1
- package/dist/renderables/rule.d.ts +1 -1
- package/dist/renderables/rule.d.ts.map +1 -1
- package/dist/renderables/rule.js +5 -10
- package/dist/renderables/rule.js.map +1 -1
- package/dist/renderables/spinner.d.ts +2 -2
- package/dist/renderables/spinner.d.ts.map +1 -1
- package/dist/renderables/spinner.js +6 -11
- package/dist/renderables/spinner.js.map +1 -1
- package/dist/renderables/status.d.ts.map +1 -1
- package/dist/renderables/status.js +5 -11
- package/dist/renderables/status.js.map +1 -1
- package/dist/renderables/table.d.ts +54 -16
- package/dist/renderables/table.d.ts.map +1 -1
- package/dist/renderables/table.js +239 -99
- package/dist/renderables/table.js.map +1 -1
- package/dist/renderables/traceback.d.ts +1 -1
- package/dist/renderables/traceback.d.ts.map +1 -1
- package/dist/renderables/traceback.js +9 -8
- package/dist/renderables/traceback.js.map +1 -1
- package/dist/renderables/tree.d.ts +2 -2
- package/dist/renderables/tree.d.ts.map +1 -1
- package/dist/renderables/tree.js +16 -22
- package/dist/renderables/tree.js.map +1 -1
- package/dist/template-bindings/helpers.d.ts.map +1 -1
- package/dist/template-bindings/helpers.js +19 -1
- package/dist/template-bindings/helpers.js.map +1 -1
- package/dist/widgets/button.d.ts.map +1 -1
- package/dist/widgets/button.js +4 -5
- package/dist/widgets/button.js.map +1 -1
- package/dist/widgets/checkbox.d.ts.map +1 -1
- package/dist/widgets/checkbox.js +3 -4
- package/dist/widgets/checkbox.js.map +1 -1
- package/dist/widgets/dropdown.d.ts.map +1 -1
- package/dist/widgets/dropdown.js +4 -5
- package/dist/widgets/dropdown.js.map +1 -1
- package/dist/widgets/focus-manager.d.ts +0 -1
- package/dist/widgets/focus-manager.d.ts.map +1 -1
- package/dist/widgets/focus-manager.js +3 -7
- package/dist/widgets/focus-manager.js.map +1 -1
- package/dist/widgets/screen.d.ts.map +1 -1
- package/dist/widgets/screen.js +2 -4
- package/dist/widgets/screen.js.map +1 -1
- package/dist/widgets/slider.d.ts.map +1 -1
- package/dist/widgets/slider.js +7 -8
- package/dist/widgets/slider.js.map +1 -1
- package/dist/widgets/text-input.d.ts.map +1 -1
- package/dist/widgets/text-input.js +5 -6
- package/dist/widgets/text-input.js.map +1 -1
- package/dist/widgets/toggle.d.ts.map +1 -1
- package/dist/widgets/toggle.js +4 -5
- package/dist/widgets/toggle.js.map +1 -1
- package/dist/widgets/widget-base.d.ts +3 -3
- package/dist/widgets/widget-base.d.ts.map +1 -1
- package/dist/widgets/widget-base.js +4 -6
- package/dist/widgets/widget-base.js.map +1 -1
- package/package.json +26 -10
- package/dist/renderables/json.d.ts.map +0 -1
- package/dist/renderables/json.js.map +0 -1
- package/dist/renderables/pretty.d.ts +0 -29
- package/dist/renderables/pretty.d.ts.map +0 -1
- package/dist/renderables/pretty.js +0 -141
- package/dist/renderables/pretty.js.map +0 -1
- package/dist/themes/paletteResolver.d.ts +0 -35
- package/dist/themes/paletteResolver.d.ts.map +0 -1
- package/dist/themes/paletteResolver.js +0 -88
- package/dist/themes/paletteResolver.js.map +0 -1
- package/dist/widgets/host-stream.d.ts +0 -31
- package/dist/widgets/host-stream.d.ts.map +0 -1
- package/dist/widgets/host-stream.js +0 -36
- package/dist/widgets/host-stream.js.map +0 -1
- package/dist/widgets/terminal-host.d.ts +0 -138
- package/dist/widgets/terminal-host.d.ts.map +0 -1
- package/dist/widgets/terminal-host.js +0 -127
- package/dist/widgets/terminal-host.js.map +0 -1
package/README.md
CHANGED
|
@@ -16,6 +16,25 @@ Works on Linux, macOS, and Windows. Requires Node.js >= 20. ESM-only.
|
|
|
16
16
|
npm install @promptctl/rich-js
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
### Entry points
|
|
20
|
+
|
|
21
|
+
Most of the library comes from the package name itself — `Console`, `Table`, `Panel`, `Tree`, and everything else in the snippets below. Four areas sit behind package subpaths instead — worth knowing before you go looking for one of them in the main entry point and find nothing there:
|
|
22
|
+
|
|
23
|
+
| Import from | What lives there | What you install yourself | Why it's separate |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| `@promptctl/rich-js/widgets` | Button, Checkbox, Toggle, TextInput, Dropdown, Slider, and the screen that mounts them | `mobx` | Carries a third-party runtime dependency of its own — MobX, for widget state |
|
|
26
|
+
| `@promptctl/rich-js/template-bindings` | The styling vocabulary as Go-template functions, so styled text can be authored as a template | `@promptctl/go-template-js` | Carries a third-party runtime dependency of its own — the Go-template engine, for parsing and evaluating the templates |
|
|
27
|
+
| `@promptctl/rich-js/host` | `TerminalHost`, `BrowserTerminalHost`, `hostStream` — the seam between rendering and a terminal | Nothing | A program that just wants to write bytes through a host shouldn't pay for the widget set to do it |
|
|
28
|
+
| `@promptctl/rich-js/node/save`, `/node/prompt`, `/node/traceback`, `/node/terminal-host` | File export, readline input, the crash handler, and the node TTY host | Nothing | Each one reads node built-ins, and keeping them off the main entry point is what keeps that entry point browser-safe |
|
|
29
|
+
|
|
30
|
+
Those two peer dependencies are yours to install — `npm install @promptctl/rich-js` deliberately fetches neither, because a program that prints a table shouldn't acquire a state library or a template engine to do it. Add the ones you need:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
npm install @promptctl/rich-js mobx @promptctl/go-template-js
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Import `@promptctl/rich-js/widgets` without MobX, or `@promptctl/rich-js/template-bindings` without the engine, and the import itself fails, with `ERR_MODULE_NOT_FOUND`. The main entry point is unaffected — every snippet on this page that imports from `@promptctl/rich-js` runs on the plain install.
|
|
37
|
+
|
|
19
38
|
## Using the Console
|
|
20
39
|
|
|
21
40
|
Import and construct a `Console` object:
|
|
@@ -145,7 +164,7 @@ await progress.run(async () => {
|
|
|
145
164
|
For situations where it is hard to calculate progress, use `Status` to display a spinner animation with a message:
|
|
146
165
|
|
|
147
166
|
```typescript
|
|
148
|
-
import { Console } from "@promptctl/rich-js";
|
|
167
|
+
import { Console, Status } from "@promptctl/rich-js";
|
|
149
168
|
|
|
150
169
|
const console = new Console();
|
|
151
170
|
|
|
@@ -268,6 +287,54 @@ installTraceback();
|
|
|
268
287
|
|
|
269
288
|
</details>
|
|
270
289
|
|
|
290
|
+
<details>
|
|
291
|
+
<summary>Interactive Widgets</summary>
|
|
292
|
+
|
|
293
|
+
Everything above draws once and returns. Widgets stay on screen and respond — a button that highlights under the cursor, a text field with a cursor you can move, a dropdown you filter by typing. They come from the `widgets` subpath and need MobX installed alongside the package (see [Entry points](#entry-points)).
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
import { Button, TextInput, DefaultScreen, EventRouter } from "@promptctl/rich-js/widgets";
|
|
297
|
+
import { NodeTerminalHost } from "@promptctl/rich-js/node/terminal-host";
|
|
298
|
+
|
|
299
|
+
const host = new NodeTerminalHost();
|
|
300
|
+
const screen = new DefaultScreen({ host });
|
|
301
|
+
const router = new EventRouter({ screen, host });
|
|
302
|
+
|
|
303
|
+
const name = new TextInput({ placeholder: "your name" });
|
|
304
|
+
const submit = new Button({ label: "Submit", variant: "primary" });
|
|
305
|
+
|
|
306
|
+
const quit = (): void => {
|
|
307
|
+
router.stop();
|
|
308
|
+
screen.stop();
|
|
309
|
+
host.write("\n");
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
submit.onSubmit(() => {
|
|
313
|
+
quit();
|
|
314
|
+
host.write(`hello, ${name.value}\n`);
|
|
315
|
+
process.exit(0);
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
// Raw mode swallows Ctrl+C, so the app has to handle it itself.
|
|
319
|
+
router.onKey(
|
|
320
|
+
(event) => {
|
|
321
|
+
if (event.ctrl && event.key === "c") {
|
|
322
|
+
quit();
|
|
323
|
+
process.exit(0);
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
{ priority: "high" },
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
screen.mount(name, submit);
|
|
330
|
+
screen.start();
|
|
331
|
+
router.start();
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
`DefaultScreen` builds a focus manager when you don't pass one, so the `TextInput` has focus before the user touches anything and Tab moves between the two widgets. The screen re-renders through a MobX reaction: change a widget's state and the frame redraws itself, with no explicit repaint call anywhere. See [docs/widgets.md](docs/widgets.md) for the full widget set, key dispatch, layout placements, and how to write your own.
|
|
335
|
+
|
|
336
|
+
</details>
|
|
337
|
+
|
|
271
338
|
## Custom Renderables
|
|
272
339
|
|
|
273
340
|
All Rich renderables use the `Renderable` protocol. You can implement your own:
|
package/dist/core/box.d.ts
CHANGED
|
@@ -1,27 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Box-drawing character sets for borders and table grids.
|
|
3
|
+
*
|
|
4
|
+
* A style is declared as an 8x4 character grid — one line per row a table can
|
|
5
|
+
* draw, one column per position within that row:
|
|
6
|
+
*
|
|
7
|
+
* ┌─┬┐ top border
|
|
8
|
+
* │ ││ header content
|
|
9
|
+
* ├─┼┤ header separator
|
|
10
|
+
* │ ││ body content
|
|
11
|
+
* ├─┼┤ row separator
|
|
12
|
+
* ├─┼┤ footer separator
|
|
13
|
+
* │ ││ footer content
|
|
14
|
+
* └─┴┘ bottom border
|
|
15
|
+
*
|
|
16
|
+
* [LAW:one-source-of-truth] The grid is the shape the reference implementation
|
|
17
|
+
* (Python Rich's `box.py`) publishes these glyphs in, so a constant below can
|
|
18
|
+
* be diffed against it character for character. The eighteen named fields this
|
|
19
|
+
* replaced were a second, differently-shaped map of the same territory, and it
|
|
20
|
+
* had drifted: seven of the nineteen constants carried wrong glyphs, and the
|
|
21
|
+
* field named `mid` held the reference's line 3 while the reference's `mid_*`
|
|
22
|
+
* is line 4 — so reading the reference name-for-name swapped a separator for a
|
|
23
|
+
* content row. Named row fields are gone for that reason; a row is reached by
|
|
24
|
+
* what it is (`getRow`, `getContentChars`), never by a name that can be
|
|
25
|
+
* mismatched to a line.
|
|
3
26
|
*/
|
|
4
27
|
import { Segment } from "./segment.js";
|
|
5
28
|
import type { Style } from "./style.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
top: string;
|
|
9
|
-
topDivider: string;
|
|
10
|
-
topRight: string;
|
|
11
|
-
headLeft: string;
|
|
12
|
-
headVertical: string;
|
|
13
|
-
headRight: string;
|
|
14
|
-
midLeft: string;
|
|
15
|
-
mid: string;
|
|
16
|
-
midVertical: string;
|
|
17
|
-
midRight: string;
|
|
18
|
-
bottomLeft: string;
|
|
19
|
-
bottom: string;
|
|
20
|
-
bottomDivider: string;
|
|
21
|
-
bottomRight: string;
|
|
29
|
+
/** A rule spanning the table: the top and bottom borders, and every separator. */
|
|
30
|
+
export interface EdgeChars {
|
|
22
31
|
left: string;
|
|
32
|
+
horizontal: string;
|
|
33
|
+
cross: string;
|
|
23
34
|
right: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The verticals framing a row of cells. A content line of the grid has no
|
|
38
|
+
* horizontal of its own — its fill column is a placeholder the cells occupy.
|
|
39
|
+
*/
|
|
40
|
+
export interface ContentChars {
|
|
41
|
+
left: string;
|
|
24
42
|
vertical: string;
|
|
43
|
+
right: string;
|
|
25
44
|
}
|
|
26
45
|
export type RowLevel = "head" | "row" | "foot" | "mid";
|
|
27
46
|
export interface SubstituteOptions {
|
|
@@ -29,44 +48,79 @@ export interface SubstituteOptions {
|
|
|
29
48
|
safe?: boolean;
|
|
30
49
|
}
|
|
31
50
|
export declare class Box {
|
|
32
|
-
readonly
|
|
33
|
-
readonly
|
|
34
|
-
readonly
|
|
35
|
-
readonly
|
|
36
|
-
readonly
|
|
37
|
-
readonly
|
|
38
|
-
readonly
|
|
39
|
-
readonly
|
|
40
|
-
readonly
|
|
41
|
-
readonly
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
readonly right: string;
|
|
49
|
-
readonly vertical: string;
|
|
50
|
-
constructor(chars: BoxChars);
|
|
51
|
+
readonly top: EdgeChars;
|
|
52
|
+
readonly bottom: EdgeChars;
|
|
53
|
+
private readonly grid;
|
|
54
|
+
private readonly ascii;
|
|
55
|
+
private readonly headContent;
|
|
56
|
+
private readonly headSeparator;
|
|
57
|
+
private readonly bodyContent;
|
|
58
|
+
private readonly rowSeparator;
|
|
59
|
+
private readonly footSeparator;
|
|
60
|
+
private readonly footContent;
|
|
61
|
+
/**
|
|
62
|
+
* [LAW:parse-dont-validate] The one crossing between a grid string and box
|
|
63
|
+
* glyphs. A `Box` cannot exist without eight rows of four characters, so no
|
|
64
|
+
* consumer below ever re-checks the shape of the data it reads.
|
|
65
|
+
*/
|
|
66
|
+
constructor(grid: string);
|
|
51
67
|
/**
|
|
52
68
|
* Renders the top border row for given column widths.
|
|
53
69
|
*/
|
|
54
70
|
getTop(widths: readonly number[], style?: Style, edge?: boolean): Segment[];
|
|
55
71
|
/**
|
|
56
|
-
* Renders
|
|
72
|
+
* Renders the separator drawn *above* a row at `level` — the head separator
|
|
73
|
+
* under the header, the row separator between body rows, the foot separator
|
|
74
|
+
* above the footer.
|
|
57
75
|
*/
|
|
58
76
|
getRow(widths: readonly number[], level: RowLevel, style?: Style, edge?: boolean): Segment[];
|
|
77
|
+
/**
|
|
78
|
+
* The verticals that frame a content row at `level` — the counterpart to
|
|
79
|
+
* `getRow`, which draws the separator between two such rows.
|
|
80
|
+
*/
|
|
81
|
+
getContentChars(level: RowLevel): ContentChars;
|
|
59
82
|
/**
|
|
60
83
|
* Renders the bottom border row.
|
|
61
84
|
*/
|
|
62
85
|
getBottom(widths: readonly number[], style?: Style, edge?: boolean): Segment[];
|
|
63
86
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
87
|
+
* The box to draw with when the platform cannot render this one as written.
|
|
88
|
+
*
|
|
89
|
+
* `asciiOnly` gives up a box that spends non-ASCII glyphs for `ASCII`, and
|
|
90
|
+
* leaves the four already-ASCII styles as they are — a caller that chose
|
|
91
|
+
* MARKDOWN or ASCII_DOUBLE_HEAD asked for that frame and it is already
|
|
92
|
+
* drawable, so answering with `ASCII` would trade a frame the terminal
|
|
93
|
+
* supports for a different one it equally supports. `safe` squares off the
|
|
94
|
+
* rounded corners a legacy Windows terminal draws as blanks.
|
|
67
95
|
*/
|
|
68
96
|
substitute(options?: SubstituteOptions): Box;
|
|
69
97
|
private safeSubstitute;
|
|
98
|
+
/**
|
|
99
|
+
* The nearest box that spends no special glyphs on a header — what a table
|
|
100
|
+
* with `showHeader: false` draws with. A box whose head row already matches
|
|
101
|
+
* its body is its own answer, so this is the identity for fourteen of the
|
|
102
|
+
* nineteen shipped styles.
|
|
103
|
+
*
|
|
104
|
+
* It stands beside `substitute` rather than joining it because the two ask
|
|
105
|
+
* unrelated questions: `substitute` asks what the *platform* can draw, this
|
|
106
|
+
* asks what the *table* contains. Nothing correlates them, so a caller that
|
|
107
|
+
* wants both wants both, and a shared options bag would only multiply the
|
|
108
|
+
* combinations either one has to reason about. [LAW:no-mode-explosion]
|
|
109
|
+
*
|
|
110
|
+
* [LAW:types-are-the-program] The relation is keyed on the grid, not on
|
|
111
|
+
* object identity as the reference's dict is. A `Box` is wholly determined by
|
|
112
|
+
* its grid — that is what the constructor takes and all eight rows derive
|
|
113
|
+
* from — so two boxes with one grid must answer this alike. Identity keying
|
|
114
|
+
* would say otherwise the moment a box arrived by any route but the shipped
|
|
115
|
+
* constant, and `safeSubstitute` above builds exactly such a box: a fresh
|
|
116
|
+
* instance carrying an unchanged grid.
|
|
117
|
+
*/
|
|
118
|
+
plainHeaded(): Box;
|
|
119
|
+
/**
|
|
120
|
+
* [LAW:dataflow-not-control-flow] Every full-width rule the box can draw is
|
|
121
|
+
* this one loop; which rule it is arrives as four characters, not a branch.
|
|
122
|
+
*/
|
|
123
|
+
private getEdge;
|
|
70
124
|
private getRowChars;
|
|
71
125
|
}
|
|
72
126
|
export declare const ASCII: Box;
|
package/dist/core/box.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/core/box.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/core/box.ts"],"names":[],"mappings":"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"}
|