@promptctl/rich-js 0.1.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 +418 -0
- package/dist/core/box.d.ts +91 -0
- package/dist/core/box.d.ts.map +1 -0
- package/dist/core/box.js +534 -0
- package/dist/core/box.js.map +1 -0
- package/dist/core/cells.d.ts +24 -0
- package/dist/core/cells.d.ts.map +1 -0
- package/dist/core/cells.js +114 -0
- package/dist/core/cells.js.map +1 -0
- package/dist/core/color.d.ts +158 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +825 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/console.d.ts +100 -0
- package/dist/core/console.d.ts.map +1 -0
- package/dist/core/console.js +353 -0
- package/dist/core/console.js.map +1 -0
- package/dist/core/emoji.d.ts +25 -0
- package/dist/core/emoji.d.ts.map +1 -0
- package/dist/core/emoji.js +392 -0
- package/dist/core/emoji.js.map +1 -0
- package/dist/core/highlighter.d.ts +33 -0
- package/dist/core/highlighter.d.ts.map +1 -0
- package/dist/core/highlighter.js +103 -0
- package/dist/core/highlighter.js.map +1 -0
- package/dist/core/markup.d.ts +69 -0
- package/dist/core/markup.d.ts.map +1 -0
- package/dist/core/markup.js +401 -0
- package/dist/core/markup.js.map +1 -0
- package/dist/core/measure.d.ts +17 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +50 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/protocol.d.ts +32 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +17 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/render.d.ts +51 -0
- package/dist/core/render.d.ts.map +1 -0
- package/dist/core/render.js +69 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/segment.d.ts +104 -0
- package/dist/core/segment.d.ts.map +1 -0
- package/dist/core/segment.js +364 -0
- package/dist/core/segment.js.map +1 -0
- package/dist/core/spinnerData.d.ts +11 -0
- package/dist/core/spinnerData.d.ts.map +1 -0
- package/dist/core/spinnerData.js +116 -0
- package/dist/core/spinnerData.js.map +1 -0
- package/dist/core/strip.d.ts +159 -0
- package/dist/core/strip.d.ts.map +1 -0
- package/dist/core/strip.js +237 -0
- package/dist/core/strip.js.map +1 -0
- package/dist/core/style.d.ts +115 -0
- package/dist/core/style.d.ts.map +1 -0
- package/dist/core/style.js +662 -0
- package/dist/core/style.js.map +1 -0
- package/dist/core/text.d.ts +91 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +610 -0
- package/dist/core/text.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/renderables/align.d.ts +17 -0
- package/dist/renderables/align.d.ts.map +1 -0
- package/dist/renderables/align.js +47 -0
- package/dist/renderables/align.js.map +1 -0
- package/dist/renderables/columns.d.ts +28 -0
- package/dist/renderables/columns.d.ts.map +1 -0
- package/dist/renderables/columns.js +92 -0
- package/dist/renderables/columns.js.map +1 -0
- package/dist/renderables/constrain.d.ts +16 -0
- package/dist/renderables/constrain.d.ts.map +1 -0
- package/dist/renderables/constrain.js +38 -0
- package/dist/renderables/constrain.js.map +1 -0
- package/dist/renderables/flexStrip.d.ts +42 -0
- package/dist/renderables/flexStrip.d.ts.map +1 -0
- package/dist/renderables/flexStrip.js +201 -0
- package/dist/renderables/flexStrip.js.map +1 -0
- package/dist/renderables/group.d.ts +12 -0
- package/dist/renderables/group.d.ts.map +1 -0
- package/dist/renderables/group.js +16 -0
- package/dist/renderables/group.js.map +1 -0
- package/dist/renderables/json.d.ts +23 -0
- package/dist/renderables/json.d.ts.map +1 -0
- package/dist/renderables/json.js +49 -0
- package/dist/renderables/json.js.map +1 -0
- package/dist/renderables/layout.d.ts +37 -0
- package/dist/renderables/layout.d.ts.map +1 -0
- package/dist/renderables/layout.js +151 -0
- package/dist/renderables/layout.js.map +1 -0
- package/dist/renderables/live.d.ts +48 -0
- package/dist/renderables/live.d.ts.map +1 -0
- package/dist/renderables/live.js +131 -0
- package/dist/renderables/live.js.map +1 -0
- package/dist/renderables/markdown.d.ts +25 -0
- package/dist/renderables/markdown.d.ts.map +1 -0
- package/dist/renderables/markdown.js +190 -0
- package/dist/renderables/markdown.js.map +1 -0
- package/dist/renderables/padding.d.ts +26 -0
- package/dist/renderables/padding.d.ts.map +1 -0
- package/dist/renderables/padding.js +92 -0
- package/dist/renderables/padding.js.map +1 -0
- package/dist/renderables/panel.d.ts +42 -0
- package/dist/renderables/panel.d.ts.map +1 -0
- package/dist/renderables/panel.js +202 -0
- package/dist/renderables/panel.js.map +1 -0
- package/dist/renderables/pretty.d.ts +29 -0
- package/dist/renderables/pretty.d.ts.map +1 -0
- package/dist/renderables/pretty.js +141 -0
- package/dist/renderables/pretty.js.map +1 -0
- package/dist/renderables/progress.d.ts +91 -0
- package/dist/renderables/progress.d.ts.map +1 -0
- package/dist/renderables/progress.js +234 -0
- package/dist/renderables/progress.js.map +1 -0
- package/dist/renderables/progressBar.d.ts +32 -0
- package/dist/renderables/progressBar.d.ts.map +1 -0
- package/dist/renderables/progressBar.js +59 -0
- package/dist/renderables/progressBar.js.map +1 -0
- package/dist/renderables/prompt.d.ts +25 -0
- package/dist/renderables/prompt.d.ts.map +1 -0
- package/dist/renderables/prompt.js +109 -0
- package/dist/renderables/prompt.js.map +1 -0
- package/dist/renderables/rule.d.ts +25 -0
- package/dist/renderables/rule.d.ts.map +1 -0
- package/dist/renderables/rule.js +96 -0
- package/dist/renderables/rule.js.map +1 -0
- package/dist/renderables/spinner.d.ts +30 -0
- package/dist/renderables/spinner.d.ts.map +1 -0
- package/dist/renderables/spinner.js +70 -0
- package/dist/renderables/spinner.js.map +1 -0
- package/dist/renderables/status.d.ts +24 -0
- package/dist/renderables/status.d.ts.map +1 -0
- package/dist/renderables/status.js +67 -0
- package/dist/renderables/status.js.map +1 -0
- package/dist/renderables/syntax.d.ts +36 -0
- package/dist/renderables/syntax.d.ts.map +1 -0
- package/dist/renderables/syntax.js +115 -0
- package/dist/renderables/syntax.js.map +1 -0
- package/dist/renderables/table.d.ts +109 -0
- package/dist/renderables/table.d.ts.map +1 -0
- package/dist/renderables/table.js +434 -0
- package/dist/renderables/table.js.map +1 -0
- package/dist/renderables/traceback.d.ts +26 -0
- package/dist/renderables/traceback.d.ts.map +1 -0
- package/dist/renderables/traceback.js +108 -0
- package/dist/renderables/traceback.js.map +1 -0
- package/dist/renderables/tree.d.ts +30 -0
- package/dist/renderables/tree.d.ts.map +1 -0
- package/dist/renderables/tree.js +107 -0
- package/dist/renderables/tree.js.map +1 -0
- package/dist/template-bindings/index.d.ts +61 -0
- package/dist/template-bindings/index.d.ts.map +1 -0
- package/dist/template-bindings/index.js +70 -0
- package/dist/template-bindings/index.js.map +1 -0
- package/dist/template-bindings/style-funcs.d.ts +30 -0
- package/dist/template-bindings/style-funcs.d.ts.map +1 -0
- package/dist/template-bindings/style-funcs.js +172 -0
- package/dist/template-bindings/style-funcs.js.map +1 -0
- package/dist/themes/buildPalette.d.ts +31 -0
- package/dist/themes/buildPalette.d.ts.map +1 -0
- package/dist/themes/buildPalette.js +43 -0
- package/dist/themes/buildPalette.js.map +1 -0
- package/dist/themes/colorMath.d.ts +23 -0
- package/dist/themes/colorMath.d.ts.map +1 -0
- package/dist/themes/colorMath.js +99 -0
- package/dist/themes/colorMath.js.map +1 -0
- package/dist/themes/data/atom-one-dark.d.ts +4 -0
- package/dist/themes/data/atom-one-dark.d.ts.map +1 -0
- package/dist/themes/data/atom-one-dark.js +159 -0
- package/dist/themes/data/atom-one-dark.js.map +1 -0
- package/dist/themes/data/atom-one-light.d.ts +4 -0
- package/dist/themes/data/atom-one-light.d.ts.map +1 -0
- package/dist/themes/data/atom-one-light.js +159 -0
- package/dist/themes/data/atom-one-light.js.map +1 -0
- package/dist/themes/data/catppuccin-latte.d.ts +4 -0
- package/dist/themes/data/catppuccin-latte.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-latte.js +159 -0
- package/dist/themes/data/catppuccin-latte.js.map +1 -0
- package/dist/themes/data/catppuccin-mocha.d.ts +4 -0
- package/dist/themes/data/catppuccin-mocha.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-mocha.js +159 -0
- package/dist/themes/data/catppuccin-mocha.js.map +1 -0
- package/dist/themes/data/dracula.d.ts +4 -0
- package/dist/themes/data/dracula.d.ts.map +1 -0
- package/dist/themes/data/dracula.js +159 -0
- package/dist/themes/data/dracula.js.map +1 -0
- package/dist/themes/data/flexoki.d.ts +4 -0
- package/dist/themes/data/flexoki.d.ts.map +1 -0
- package/dist/themes/data/flexoki.js +159 -0
- package/dist/themes/data/flexoki.js.map +1 -0
- package/dist/themes/data/gruvbox.d.ts +4 -0
- package/dist/themes/data/gruvbox.d.ts.map +1 -0
- package/dist/themes/data/gruvbox.js +159 -0
- package/dist/themes/data/gruvbox.js.map +1 -0
- package/dist/themes/data/index.d.ts +29 -0
- package/dist/themes/data/index.d.ts.map +1 -0
- package/dist/themes/data/index.js +48 -0
- package/dist/themes/data/index.js.map +1 -0
- package/dist/themes/data/monokai.d.ts +4 -0
- package/dist/themes/data/monokai.d.ts.map +1 -0
- package/dist/themes/data/monokai.js +159 -0
- package/dist/themes/data/monokai.js.map +1 -0
- package/dist/themes/data/nord.d.ts +4 -0
- package/dist/themes/data/nord.d.ts.map +1 -0
- package/dist/themes/data/nord.js +159 -0
- package/dist/themes/data/nord.js.map +1 -0
- package/dist/themes/data/rose-pine-dawn.d.ts +4 -0
- package/dist/themes/data/rose-pine-dawn.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-dawn.js +159 -0
- package/dist/themes/data/rose-pine-dawn.js.map +1 -0
- package/dist/themes/data/rose-pine-moon.d.ts +4 -0
- package/dist/themes/data/rose-pine-moon.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-moon.js +159 -0
- package/dist/themes/data/rose-pine-moon.js.map +1 -0
- package/dist/themes/data/rose-pine.d.ts +4 -0
- package/dist/themes/data/rose-pine.d.ts.map +1 -0
- package/dist/themes/data/rose-pine.js +159 -0
- package/dist/themes/data/rose-pine.js.map +1 -0
- package/dist/themes/data/solarized-dark.d.ts +4 -0
- package/dist/themes/data/solarized-dark.d.ts.map +1 -0
- package/dist/themes/data/solarized-dark.js +159 -0
- package/dist/themes/data/solarized-dark.js.map +1 -0
- package/dist/themes/data/solarized-light.d.ts +4 -0
- package/dist/themes/data/solarized-light.d.ts.map +1 -0
- package/dist/themes/data/solarized-light.js +159 -0
- package/dist/themes/data/solarized-light.js.map +1 -0
- package/dist/themes/data/textual-ansi.d.ts +4 -0
- package/dist/themes/data/textual-ansi.d.ts.map +1 -0
- package/dist/themes/data/textual-ansi.js +159 -0
- package/dist/themes/data/textual-ansi.js.map +1 -0
- package/dist/themes/data/textual-dark.d.ts +4 -0
- package/dist/themes/data/textual-dark.d.ts.map +1 -0
- package/dist/themes/data/textual-dark.js +159 -0
- package/dist/themes/data/textual-dark.js.map +1 -0
- package/dist/themes/data/textual-light.d.ts +4 -0
- package/dist/themes/data/textual-light.d.ts.map +1 -0
- package/dist/themes/data/textual-light.js +159 -0
- package/dist/themes/data/textual-light.js.map +1 -0
- package/dist/themes/data/tokyo-night.d.ts +4 -0
- package/dist/themes/data/tokyo-night.d.ts.map +1 -0
- package/dist/themes/data/tokyo-night.js +159 -0
- package/dist/themes/data/tokyo-night.js.map +1 -0
- package/dist/themes/data/types.d.ts +15 -0
- package/dist/themes/data/types.d.ts.map +1 -0
- package/dist/themes/data/types.js +2 -0
- package/dist/themes/data/types.js.map +1 -0
- package/dist/themes/palette.d.ts +20 -0
- package/dist/themes/palette.d.ts.map +1 -0
- package/dist/themes/palette.js +27 -0
- package/dist/themes/palette.js.map +1 -0
- package/dist/themes/paletteResolver.d.ts +35 -0
- package/dist/themes/paletteResolver.d.ts.map +1 -0
- package/dist/themes/paletteResolver.js +88 -0
- package/dist/themes/paletteResolver.js.map +1 -0
- package/dist/themes/registry.d.ts +17 -0
- package/dist/themes/registry.d.ts.map +1 -0
- package/dist/themes/registry.js +33 -0
- package/dist/themes/registry.js.map +1 -0
- package/dist/themes/terminalThemes.d.ts +46 -0
- package/dist/themes/terminalThemes.d.ts.map +1 -0
- package/dist/themes/terminalThemes.js +268 -0
- package/dist/themes/terminalThemes.js.map +1 -0
- package/dist/widgets/button.d.ts +47 -0
- package/dist/widgets/button.d.ts.map +1 -0
- package/dist/widgets/button.js +183 -0
- package/dist/widgets/button.js.map +1 -0
- package/dist/widgets/checkbox.d.ts +43 -0
- package/dist/widgets/checkbox.d.ts.map +1 -0
- package/dist/widgets/checkbox.js +144 -0
- package/dist/widgets/checkbox.js.map +1 -0
- package/dist/widgets/dropdown.d.ts +67 -0
- package/dist/widgets/dropdown.d.ts.map +1 -0
- package/dist/widgets/dropdown.js +373 -0
- package/dist/widgets/dropdown.js.map +1 -0
- package/dist/widgets/event-router.d.ts +73 -0
- package/dist/widgets/event-router.d.ts.map +1 -0
- package/dist/widgets/event-router.js +479 -0
- package/dist/widgets/event-router.js.map +1 -0
- package/dist/widgets/focus-manager.d.ts +26 -0
- package/dist/widgets/focus-manager.d.ts.map +1 -0
- package/dist/widgets/focus-manager.js +179 -0
- package/dist/widgets/focus-manager.js.map +1 -0
- package/dist/widgets/index.d.ts +23 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +13 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/screen.d.ts +90 -0
- package/dist/widgets/screen.d.ts.map +1 -0
- package/dist/widgets/screen.js +440 -0
- package/dist/widgets/screen.js.map +1 -0
- package/dist/widgets/slider.d.ts +55 -0
- package/dist/widgets/slider.d.ts.map +1 -0
- package/dist/widgets/slider.js +248 -0
- package/dist/widgets/slider.js.map +1 -0
- package/dist/widgets/static-item.d.ts +41 -0
- package/dist/widgets/static-item.d.ts.map +1 -0
- package/dist/widgets/static-item.js +62 -0
- package/dist/widgets/static-item.js.map +1 -0
- package/dist/widgets/text-input.d.ts +50 -0
- package/dist/widgets/text-input.d.ts.map +1 -0
- package/dist/widgets/text-input.js +242 -0
- package/dist/widgets/text-input.js.map +1 -0
- package/dist/widgets/toggle.d.ts +46 -0
- package/dist/widgets/toggle.d.ts.map +1 -0
- package/dist/widgets/toggle.js +169 -0
- package/dist/widgets/toggle.js.map +1 -0
- package/dist/widgets/types.d.ts +92 -0
- package/dist/widgets/types.d.ts.map +1 -0
- package/dist/widgets/types.js +13 -0
- package/dist/widgets/types.js.map +1 -0
- package/dist/widgets/widget-base.d.ts +41 -0
- package/dist/widgets/widget-base.d.ts.map +1 -0
- package/dist/widgets/widget-base.js +159 -0
- package/dist/widgets/widget-base.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel — a bordered box that wraps content, with optional title and subtitle.
|
|
3
|
+
*/
|
|
4
|
+
import { cellLen } from "../core/cells.js";
|
|
5
|
+
import { Segment } from "../core/segment.js";
|
|
6
|
+
import { Style, NULL_STYLE } from "../core/style.js";
|
|
7
|
+
import { ROUNDED } from "../core/box.js";
|
|
8
|
+
import { Measurement } from "../core/measure.js";
|
|
9
|
+
import { RichText } from "../core/text.js";
|
|
10
|
+
import { isMeasurable } from "../core/protocol.js";
|
|
11
|
+
function normalizePadding(padding) {
|
|
12
|
+
if (padding === undefined)
|
|
13
|
+
return [0, 1, 0, 1];
|
|
14
|
+
if (typeof padding === "number")
|
|
15
|
+
return [padding, padding, padding, padding];
|
|
16
|
+
if (padding.length === 2)
|
|
17
|
+
return [padding[0], padding[1], padding[0], padding[1]];
|
|
18
|
+
return padding;
|
|
19
|
+
}
|
|
20
|
+
function resolveStyle(style) {
|
|
21
|
+
if (style === undefined)
|
|
22
|
+
return NULL_STYLE;
|
|
23
|
+
if (typeof style === "string")
|
|
24
|
+
return Style.parse(style);
|
|
25
|
+
return style;
|
|
26
|
+
}
|
|
27
|
+
function toRenderable(content) {
|
|
28
|
+
if (typeof content === "string")
|
|
29
|
+
return new RichText(content);
|
|
30
|
+
if (content instanceof RichText)
|
|
31
|
+
return content;
|
|
32
|
+
return content;
|
|
33
|
+
}
|
|
34
|
+
export class Panel {
|
|
35
|
+
renderable;
|
|
36
|
+
box;
|
|
37
|
+
title;
|
|
38
|
+
subtitle;
|
|
39
|
+
expand;
|
|
40
|
+
style;
|
|
41
|
+
borderStyle;
|
|
42
|
+
width;
|
|
43
|
+
padding;
|
|
44
|
+
constructor(content, options) {
|
|
45
|
+
this.renderable = toRenderable(content);
|
|
46
|
+
this.box = options?.box ?? ROUNDED;
|
|
47
|
+
this.title = options?.title;
|
|
48
|
+
this.subtitle = options?.subtitle;
|
|
49
|
+
this.expand = options?.expand !== false;
|
|
50
|
+
this.style = resolveStyle(options?.style);
|
|
51
|
+
this.borderStyle = resolveStyle(options?.borderStyle);
|
|
52
|
+
this.width = options?.width;
|
|
53
|
+
this.padding = normalizePadding(options?.padding);
|
|
54
|
+
}
|
|
55
|
+
*render(options) {
|
|
56
|
+
const box = options.asciiOnly ? this.box.substitute({ asciiOnly: true }) : this.box;
|
|
57
|
+
const border = this.borderStyle.isNull ? undefined : this.borderStyle;
|
|
58
|
+
const contentStyle = this.style.isNull ? undefined : this.style;
|
|
59
|
+
// Determine panel width
|
|
60
|
+
const panelWidth = this._getPanelWidth(options);
|
|
61
|
+
const [padTop, padRight, padBottom, padLeft] = this.padding;
|
|
62
|
+
const innerWidth = Math.max(1, panelWidth - 2 - padLeft - padRight); // 2 for border chars
|
|
63
|
+
// Render content
|
|
64
|
+
const innerOptions = {
|
|
65
|
+
...options,
|
|
66
|
+
maxWidth: innerWidth,
|
|
67
|
+
};
|
|
68
|
+
const contentSegments = [...this.renderable.render(innerOptions)];
|
|
69
|
+
const contentLines = Segment.splitLines(contentSegments);
|
|
70
|
+
// Top border (with optional title)
|
|
71
|
+
yield* this._renderTopBorder(box, panelWidth, border);
|
|
72
|
+
// Top padding
|
|
73
|
+
for (let i = 0; i < padTop; i++) {
|
|
74
|
+
yield* this._renderBlankLine(box, panelWidth, padLeft, padRight, innerWidth, border, contentStyle);
|
|
75
|
+
}
|
|
76
|
+
// Content lines
|
|
77
|
+
for (const line of contentLines) {
|
|
78
|
+
yield new Segment(box.left, border);
|
|
79
|
+
if (padLeft > 0)
|
|
80
|
+
yield new Segment(" ".repeat(padLeft), contentStyle);
|
|
81
|
+
yield* line;
|
|
82
|
+
// Pad to fill inner width
|
|
83
|
+
const lineWidth = Segment.getLineLength(line);
|
|
84
|
+
const rightPad = innerWidth - lineWidth + padRight;
|
|
85
|
+
if (rightPad > 0)
|
|
86
|
+
yield new Segment(" ".repeat(rightPad), contentStyle);
|
|
87
|
+
yield new Segment(box.right, border);
|
|
88
|
+
yield Segment.line();
|
|
89
|
+
}
|
|
90
|
+
// Bottom padding
|
|
91
|
+
for (let i = 0; i < padBottom; i++) {
|
|
92
|
+
yield* this._renderBlankLine(box, panelWidth, padLeft, padRight, innerWidth, border, contentStyle);
|
|
93
|
+
}
|
|
94
|
+
// Bottom border (with optional subtitle)
|
|
95
|
+
yield* this._renderBottomBorder(box, panelWidth, border);
|
|
96
|
+
}
|
|
97
|
+
measure(options) {
|
|
98
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
99
|
+
const borderWidth = 2; // left + right border chars
|
|
100
|
+
const horizontalPad = padLeft + padRight;
|
|
101
|
+
if (isMeasurable(this.renderable)) {
|
|
102
|
+
const innerOptions = {
|
|
103
|
+
...options,
|
|
104
|
+
maxWidth: Math.max(1, options.maxWidth - borderWidth - horizontalPad),
|
|
105
|
+
};
|
|
106
|
+
const measurement = Measurement.get(innerOptions, this.renderable);
|
|
107
|
+
return {
|
|
108
|
+
minimum: Math.max(borderWidth + horizontalPad, measurement.minimum + borderWidth + horizontalPad),
|
|
109
|
+
maximum: Math.min(options.maxWidth, measurement.maximum + borderWidth + horizontalPad),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return { minimum: borderWidth + horizontalPad, maximum: options.maxWidth };
|
|
113
|
+
}
|
|
114
|
+
_getPanelWidth(options) {
|
|
115
|
+
if (this.width !== undefined)
|
|
116
|
+
return Math.min(this.width, options.maxWidth);
|
|
117
|
+
if (this.expand)
|
|
118
|
+
return options.maxWidth;
|
|
119
|
+
// Fit mode: measure content
|
|
120
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
121
|
+
const borderWidth = 2;
|
|
122
|
+
const horizontalPad = padLeft + padRight;
|
|
123
|
+
if (isMeasurable(this.renderable)) {
|
|
124
|
+
const innerOptions = {
|
|
125
|
+
...options,
|
|
126
|
+
maxWidth: Math.max(1, options.maxWidth - borderWidth - horizontalPad),
|
|
127
|
+
};
|
|
128
|
+
const measurement = Measurement.get(innerOptions, this.renderable);
|
|
129
|
+
return Math.min(options.maxWidth, measurement.maximum + borderWidth + horizontalPad);
|
|
130
|
+
}
|
|
131
|
+
return options.maxWidth;
|
|
132
|
+
}
|
|
133
|
+
*_renderTopBorder(box, panelWidth, border) {
|
|
134
|
+
const innerBorderWidth = panelWidth - 2; // minus left/right corner
|
|
135
|
+
if (!this.title) {
|
|
136
|
+
yield new Segment(box.topLeft, border);
|
|
137
|
+
yield new Segment(box.top.repeat(innerBorderWidth), border);
|
|
138
|
+
yield new Segment(box.topRight, border);
|
|
139
|
+
yield Segment.line();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const titleText = typeof this.title === "string" ? this.title : this.title.plain;
|
|
143
|
+
const titleDisplay = ` ${titleText} `;
|
|
144
|
+
const titleWidth = cellLen(titleDisplay);
|
|
145
|
+
yield new Segment(box.topLeft, border);
|
|
146
|
+
if (titleWidth >= innerBorderWidth) {
|
|
147
|
+
// Title fills the border
|
|
148
|
+
yield new Segment(titleDisplay.slice(0, innerBorderWidth), border);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Center the title in the top border
|
|
152
|
+
const leftRuleWidth = Math.floor((innerBorderWidth - titleWidth) / 2);
|
|
153
|
+
const rightRuleWidth = innerBorderWidth - titleWidth - leftRuleWidth;
|
|
154
|
+
if (leftRuleWidth > 0)
|
|
155
|
+
yield new Segment(box.top.repeat(leftRuleWidth), border);
|
|
156
|
+
yield new Segment(titleDisplay, border);
|
|
157
|
+
if (rightRuleWidth > 0)
|
|
158
|
+
yield new Segment(box.top.repeat(rightRuleWidth), border);
|
|
159
|
+
}
|
|
160
|
+
yield new Segment(box.topRight, border);
|
|
161
|
+
yield Segment.line();
|
|
162
|
+
}
|
|
163
|
+
*_renderBottomBorder(box, panelWidth, border) {
|
|
164
|
+
const innerBorderWidth = panelWidth - 2;
|
|
165
|
+
if (!this.subtitle) {
|
|
166
|
+
yield new Segment(box.bottomLeft, border);
|
|
167
|
+
yield new Segment(box.bottom.repeat(innerBorderWidth), border);
|
|
168
|
+
yield new Segment(box.bottomRight, border);
|
|
169
|
+
yield Segment.line();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const subtitleText = typeof this.subtitle === "string" ? this.subtitle : this.subtitle.plain;
|
|
173
|
+
const subtitleDisplay = ` ${subtitleText} `;
|
|
174
|
+
const subtitleWidth = cellLen(subtitleDisplay);
|
|
175
|
+
yield new Segment(box.bottomLeft, border);
|
|
176
|
+
if (subtitleWidth >= innerBorderWidth) {
|
|
177
|
+
yield new Segment(subtitleDisplay.slice(0, innerBorderWidth), border);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const leftRuleWidth = Math.floor((innerBorderWidth - subtitleWidth) / 2);
|
|
181
|
+
const rightRuleWidth = innerBorderWidth - subtitleWidth - leftRuleWidth;
|
|
182
|
+
if (leftRuleWidth > 0)
|
|
183
|
+
yield new Segment(box.bottom.repeat(leftRuleWidth), border);
|
|
184
|
+
yield new Segment(subtitleDisplay, border);
|
|
185
|
+
if (rightRuleWidth > 0)
|
|
186
|
+
yield new Segment(box.bottom.repeat(rightRuleWidth), border);
|
|
187
|
+
}
|
|
188
|
+
yield new Segment(box.bottomRight, border);
|
|
189
|
+
yield Segment.line();
|
|
190
|
+
}
|
|
191
|
+
*_renderBlankLine(box, _panelWidth, padLeft, padRight, innerWidth, border, contentStyle) {
|
|
192
|
+
yield new Segment(box.left, border);
|
|
193
|
+
yield new Segment(" ".repeat(padLeft + innerWidth + padRight), contentStyle);
|
|
194
|
+
yield new Segment(box.right, border);
|
|
195
|
+
yield Segment.line();
|
|
196
|
+
}
|
|
197
|
+
// --- Static factory ---
|
|
198
|
+
static fit(content, options) {
|
|
199
|
+
return new Panel(content, { ...options, expand: false });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/renderables/panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretty — formats JavaScript data structures with highlighting.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
|
|
6
|
+
export interface PrettyOptions {
|
|
7
|
+
indent?: number;
|
|
8
|
+
expandAll?: boolean;
|
|
9
|
+
maxLength?: number;
|
|
10
|
+
maxString?: number;
|
|
11
|
+
indentGuides?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class Pretty implements Renderable, Measurable {
|
|
14
|
+
readonly data: unknown;
|
|
15
|
+
readonly indent: number;
|
|
16
|
+
readonly expandAll: boolean;
|
|
17
|
+
readonly maxLength: number | undefined;
|
|
18
|
+
readonly maxString: number | undefined;
|
|
19
|
+
readonly indentGuides: boolean;
|
|
20
|
+
constructor(data: unknown, options?: PrettyOptions);
|
|
21
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
22
|
+
measure(_options: RenderOptions): {
|
|
23
|
+
minimum: number;
|
|
24
|
+
maximum: number;
|
|
25
|
+
};
|
|
26
|
+
private _format;
|
|
27
|
+
private _addIndentGuides;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=pretty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../../src/renderables/pretty.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAID,qBAAa,MAAO,YAAW,UAAU,EAAE,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;gBAEnB,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa;IASjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAYlD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAUtE,OAAO,CAAC,OAAO;IA6Ff,OAAO,CAAC,gBAAgB;CAczB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretty — formats JavaScript data structures with highlighting.
|
|
3
|
+
*/
|
|
4
|
+
import { cellLen } from "../core/cells.js";
|
|
5
|
+
import { Style } from "../core/style.js";
|
|
6
|
+
import { RichText } from "../core/text.js";
|
|
7
|
+
import { ReprHighlighter } from "../core/highlighter.js";
|
|
8
|
+
const reprHighlighter = new ReprHighlighter();
|
|
9
|
+
export class Pretty {
|
|
10
|
+
data;
|
|
11
|
+
indent;
|
|
12
|
+
expandAll;
|
|
13
|
+
maxLength;
|
|
14
|
+
maxString;
|
|
15
|
+
indentGuides;
|
|
16
|
+
constructor(data, options) {
|
|
17
|
+
this.data = data;
|
|
18
|
+
this.indent = options?.indent ?? 4;
|
|
19
|
+
this.expandAll = options?.expandAll ?? false;
|
|
20
|
+
this.maxLength = options?.maxLength;
|
|
21
|
+
this.maxString = options?.maxString;
|
|
22
|
+
this.indentGuides = options?.indentGuides !== false;
|
|
23
|
+
}
|
|
24
|
+
*render(options) {
|
|
25
|
+
const formatted = this._format(this.data, 0, options.maxWidth);
|
|
26
|
+
const text = new RichText(formatted, { end: "" });
|
|
27
|
+
reprHighlighter.highlight(text);
|
|
28
|
+
if (this.indentGuides) {
|
|
29
|
+
this._addIndentGuides(text);
|
|
30
|
+
}
|
|
31
|
+
yield* text.render(options);
|
|
32
|
+
}
|
|
33
|
+
measure(_options) {
|
|
34
|
+
const formatted = this._format(this.data, 0, _options.maxWidth);
|
|
35
|
+
const lines = formatted.split("\n");
|
|
36
|
+
let max = 0;
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
max = Math.max(max, cellLen(line));
|
|
39
|
+
}
|
|
40
|
+
return { minimum: 1, maximum: Math.min(max, _options.maxWidth) };
|
|
41
|
+
}
|
|
42
|
+
_format(value, depth, maxWidth) {
|
|
43
|
+
const indentStr = " ".repeat(this.indent * depth);
|
|
44
|
+
const innerIndent = " ".repeat(this.indent * (depth + 1));
|
|
45
|
+
if (value === null)
|
|
46
|
+
return "null";
|
|
47
|
+
if (value === undefined)
|
|
48
|
+
return "undefined";
|
|
49
|
+
switch (typeof value) {
|
|
50
|
+
case "string": {
|
|
51
|
+
let str = value;
|
|
52
|
+
if (this.maxString !== undefined && str.length > this.maxString) {
|
|
53
|
+
str = str.slice(0, this.maxString) + `+${value.length - this.maxString}`;
|
|
54
|
+
}
|
|
55
|
+
return JSON.stringify(str);
|
|
56
|
+
}
|
|
57
|
+
case "number":
|
|
58
|
+
case "bigint":
|
|
59
|
+
return String(value);
|
|
60
|
+
case "boolean":
|
|
61
|
+
return String(value);
|
|
62
|
+
case "symbol":
|
|
63
|
+
return value.toString();
|
|
64
|
+
case "function":
|
|
65
|
+
return `[Function: ${value.name || "anonymous"}]`;
|
|
66
|
+
}
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
if (value.length === 0)
|
|
69
|
+
return "[]";
|
|
70
|
+
const items = this.maxLength !== undefined
|
|
71
|
+
? value.slice(0, this.maxLength)
|
|
72
|
+
: value;
|
|
73
|
+
const remaining = this.maxLength !== undefined
|
|
74
|
+
? Math.max(0, value.length - this.maxLength)
|
|
75
|
+
: 0;
|
|
76
|
+
// Try compact first
|
|
77
|
+
if (!this.expandAll) {
|
|
78
|
+
const compact = "[" + items.map((v) => this._format(v, 0, maxWidth)).join(", ") +
|
|
79
|
+
(remaining > 0 ? `, ... +${remaining}` : "") + "]";
|
|
80
|
+
if (cellLen(indentStr + compact) <= maxWidth)
|
|
81
|
+
return compact;
|
|
82
|
+
}
|
|
83
|
+
const parts = items.map((v) => innerIndent + this._format(v, depth + 1, maxWidth));
|
|
84
|
+
if (remaining > 0)
|
|
85
|
+
parts.push(innerIndent + `... +${remaining}`);
|
|
86
|
+
return "[\n" + parts.join(",\n") + "\n" + indentStr + "]";
|
|
87
|
+
}
|
|
88
|
+
if (value instanceof Map) {
|
|
89
|
+
if (value.size === 0)
|
|
90
|
+
return "Map {}";
|
|
91
|
+
const entries = [...value.entries()];
|
|
92
|
+
const items = this.maxLength !== undefined ? entries.slice(0, this.maxLength) : entries;
|
|
93
|
+
const parts = items.map(([k, v]) => innerIndent + this._format(k, depth + 1, maxWidth) + " => " + this._format(v, depth + 1, maxWidth));
|
|
94
|
+
return "Map {\n" + parts.join(",\n") + "\n" + indentStr + "}";
|
|
95
|
+
}
|
|
96
|
+
if (value instanceof Set) {
|
|
97
|
+
if (value.size === 0)
|
|
98
|
+
return "Set {}";
|
|
99
|
+
const items = [...value];
|
|
100
|
+
const bounded = this.maxLength !== undefined ? items.slice(0, this.maxLength) : items;
|
|
101
|
+
const parts = bounded.map((v) => innerIndent + this._format(v, depth + 1, maxWidth));
|
|
102
|
+
return "Set {\n" + parts.join(",\n") + "\n" + indentStr + "}";
|
|
103
|
+
}
|
|
104
|
+
// Plain objects
|
|
105
|
+
if (typeof value === "object") {
|
|
106
|
+
const obj = value;
|
|
107
|
+
const keys = Object.keys(obj);
|
|
108
|
+
if (keys.length === 0)
|
|
109
|
+
return "{}";
|
|
110
|
+
const items = this.maxLength !== undefined ? keys.slice(0, this.maxLength) : keys;
|
|
111
|
+
const remaining = this.maxLength !== undefined ? Math.max(0, keys.length - this.maxLength) : 0;
|
|
112
|
+
// Try compact
|
|
113
|
+
if (!this.expandAll) {
|
|
114
|
+
const compact = "{ " + items.map((k) => `${k}: ${this._format(obj[k], 0, maxWidth)}`).join(", ") +
|
|
115
|
+
(remaining > 0 ? `, ... +${remaining}` : "") + " }";
|
|
116
|
+
if (cellLen(indentStr + compact) <= maxWidth)
|
|
117
|
+
return compact;
|
|
118
|
+
}
|
|
119
|
+
const parts = items.map((k) => innerIndent + `${k}: ${this._format(obj[k], depth + 1, maxWidth)}`);
|
|
120
|
+
if (remaining > 0)
|
|
121
|
+
parts.push(innerIndent + `... +${remaining}`);
|
|
122
|
+
return "{\n" + parts.join(",\n") + "\n" + indentStr + "}";
|
|
123
|
+
}
|
|
124
|
+
return String(value);
|
|
125
|
+
}
|
|
126
|
+
_addIndentGuides(text) {
|
|
127
|
+
const guideStyle = Style.parse("repr.indent");
|
|
128
|
+
const lines = text.plain.split("\n");
|
|
129
|
+
let offset = 0;
|
|
130
|
+
for (const line of lines) {
|
|
131
|
+
const leadingSpaces = line.length - line.trimStart().length;
|
|
132
|
+
for (let i = 0; i < leadingSpaces; i += this.indent) {
|
|
133
|
+
if (i + offset < text.length) {
|
|
134
|
+
text.stylize(guideStyle, offset + i, offset + i + 1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
offset += line.length + 1; // +1 for newline
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=pretty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretty.js","sourceRoot":"","sources":["../../src/renderables/pretty.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress — displays continuously updated progress bars.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Console } from "../core/console.js";
|
|
6
|
+
import type { Renderable, RenderOptions } from "../core/protocol.js";
|
|
7
|
+
export interface TaskOptions {
|
|
8
|
+
total?: number;
|
|
9
|
+
start?: boolean;
|
|
10
|
+
visible?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface TaskUpdateOptions {
|
|
13
|
+
completed?: number;
|
|
14
|
+
advance?: number;
|
|
15
|
+
description?: string;
|
|
16
|
+
visible?: boolean;
|
|
17
|
+
refresh?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface Task {
|
|
20
|
+
id: number;
|
|
21
|
+
description: string;
|
|
22
|
+
total: number | undefined;
|
|
23
|
+
completed: number;
|
|
24
|
+
started: boolean;
|
|
25
|
+
visible: boolean;
|
|
26
|
+
startTime: number;
|
|
27
|
+
elapsed: number;
|
|
28
|
+
}
|
|
29
|
+
export interface ProgressColumn extends Renderable {
|
|
30
|
+
render(options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
31
|
+
}
|
|
32
|
+
export declare class TextColumn implements ProgressColumn {
|
|
33
|
+
readonly format: string;
|
|
34
|
+
constructor(format?: string);
|
|
35
|
+
render(options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
36
|
+
}
|
|
37
|
+
export declare class BarColumn implements ProgressColumn {
|
|
38
|
+
readonly barWidth: number;
|
|
39
|
+
constructor(barWidth?: number);
|
|
40
|
+
render(_options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
41
|
+
}
|
|
42
|
+
export declare class TaskProgressColumn implements ProgressColumn {
|
|
43
|
+
render(_options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
44
|
+
}
|
|
45
|
+
export declare class TimeRemainingColumn implements ProgressColumn {
|
|
46
|
+
render(_options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
47
|
+
}
|
|
48
|
+
export declare class TimeElapsedColumn implements ProgressColumn {
|
|
49
|
+
render(_options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
50
|
+
}
|
|
51
|
+
export declare class SpinnerColumn implements ProgressColumn {
|
|
52
|
+
private _spinner;
|
|
53
|
+
constructor(spinnerName?: string);
|
|
54
|
+
render(options: RenderOptions, _task?: Task): Iterable<Segment>;
|
|
55
|
+
}
|
|
56
|
+
export declare class MofNCompleteColumn implements ProgressColumn {
|
|
57
|
+
render(_options: RenderOptions, task?: Task): Iterable<Segment>;
|
|
58
|
+
}
|
|
59
|
+
export interface ProgressOptions {
|
|
60
|
+
refreshPerSecond?: number;
|
|
61
|
+
autoRefresh?: boolean;
|
|
62
|
+
transient?: boolean;
|
|
63
|
+
expand?: boolean;
|
|
64
|
+
console?: Console;
|
|
65
|
+
}
|
|
66
|
+
export declare class Progress implements Renderable {
|
|
67
|
+
private _columns;
|
|
68
|
+
private _tasks;
|
|
69
|
+
private _nextId;
|
|
70
|
+
private _live;
|
|
71
|
+
private _console;
|
|
72
|
+
readonly expand: boolean;
|
|
73
|
+
constructor(...columns: (ProgressColumn | ProgressOptions)[]);
|
|
74
|
+
get console(): Console;
|
|
75
|
+
get finished(): boolean;
|
|
76
|
+
static getDefaultColumns(): ProgressColumn[];
|
|
77
|
+
addTask(description: string, options?: TaskOptions): number;
|
|
78
|
+
updateTask(taskId: number, options: TaskUpdateOptions): void;
|
|
79
|
+
startTask(taskId: number): void;
|
|
80
|
+
start(): void;
|
|
81
|
+
stop(): void;
|
|
82
|
+
refresh(): void;
|
|
83
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
84
|
+
}
|
|
85
|
+
export declare function track<T>(iterable: Iterable<T>, options?: {
|
|
86
|
+
description?: string;
|
|
87
|
+
total?: number;
|
|
88
|
+
console?: Console;
|
|
89
|
+
}): Iterable<T>;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/renderables/progress.ts"],"names":[],"mappings":"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"}
|