@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,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live — animates a portion of the terminal by continuously re-rendering.
|
|
3
|
+
*
|
|
4
|
+
* Two modes:
|
|
5
|
+
* - **Inline** (default): clears and redraws N lines in the current scroll
|
|
6
|
+
* region. Good for spinners/progress bars below other output.
|
|
7
|
+
* - **Alt-screen** (`altScreen: true`): enters the alternate screen buffer
|
|
8
|
+
* on start, cursor-homes on each refresh (no clear flicker), and restores
|
|
9
|
+
* the original buffer on stop. Good for full-screen TUI apps.
|
|
10
|
+
*/
|
|
11
|
+
import { Console } from "../core/console.js";
|
|
12
|
+
import { Segment } from "../core/segment.js";
|
|
13
|
+
export class Live {
|
|
14
|
+
_renderable;
|
|
15
|
+
_console;
|
|
16
|
+
_refreshPerSecond;
|
|
17
|
+
_autoRefresh;
|
|
18
|
+
_transient;
|
|
19
|
+
_verticalOverflow;
|
|
20
|
+
_altScreen;
|
|
21
|
+
_timer;
|
|
22
|
+
_lastLineCount;
|
|
23
|
+
_started;
|
|
24
|
+
_firstRefresh;
|
|
25
|
+
constructor(renderable, options) {
|
|
26
|
+
this._renderable = renderable;
|
|
27
|
+
this._console = options?.console ?? new Console({ forceTerminal: true });
|
|
28
|
+
this._refreshPerSecond = options?.refreshPerSecond ?? 4;
|
|
29
|
+
this._autoRefresh = options?.autoRefresh !== false;
|
|
30
|
+
this._transient = options?.transient ?? false;
|
|
31
|
+
this._verticalOverflow = options?.verticalOverflow ?? "ellipsis";
|
|
32
|
+
this._altScreen = options?.altScreen ?? false;
|
|
33
|
+
this._lastLineCount = 0;
|
|
34
|
+
this._started = false;
|
|
35
|
+
this._firstRefresh = true;
|
|
36
|
+
}
|
|
37
|
+
get console() {
|
|
38
|
+
return this._console;
|
|
39
|
+
}
|
|
40
|
+
get renderable() {
|
|
41
|
+
return this._renderable;
|
|
42
|
+
}
|
|
43
|
+
start() {
|
|
44
|
+
if (this._started)
|
|
45
|
+
return;
|
|
46
|
+
this._started = true;
|
|
47
|
+
this._firstRefresh = true;
|
|
48
|
+
const stream = this._console.file;
|
|
49
|
+
if (this._altScreen) {
|
|
50
|
+
stream.write("\x1b[?1049h"); // enter alt screen
|
|
51
|
+
}
|
|
52
|
+
this._writeCursorControl(false);
|
|
53
|
+
if (this._autoRefresh) {
|
|
54
|
+
const interval = Math.floor(1000 / this._refreshPerSecond);
|
|
55
|
+
this._timer = setInterval(() => this.refresh(), interval);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
stop() {
|
|
59
|
+
if (!this._started)
|
|
60
|
+
return;
|
|
61
|
+
this._started = false;
|
|
62
|
+
if (this._timer) {
|
|
63
|
+
clearInterval(this._timer);
|
|
64
|
+
this._timer = undefined;
|
|
65
|
+
}
|
|
66
|
+
if (!this._transient) {
|
|
67
|
+
this.refresh();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this._clearLast();
|
|
71
|
+
}
|
|
72
|
+
this._writeCursorControl(true);
|
|
73
|
+
if (this._altScreen) {
|
|
74
|
+
this._console.file.write("\x1b[0m\x1b[?1049l"); // reset attrs + exit alt screen
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
update(renderable, options) {
|
|
78
|
+
if (renderable !== undefined) {
|
|
79
|
+
this._renderable = renderable;
|
|
80
|
+
}
|
|
81
|
+
if (options?.refresh) {
|
|
82
|
+
this.refresh();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
refresh() {
|
|
86
|
+
if (!this._renderable)
|
|
87
|
+
return;
|
|
88
|
+
if (this._altScreen) {
|
|
89
|
+
// Alt-screen mode: cursor home (first refresh clears the buffer)
|
|
90
|
+
this._console.file.write(this._firstRefresh ? "\x1b[2J\x1b[H" : "\x1b[H");
|
|
91
|
+
this._firstRefresh = false;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Inline mode: erase previous output
|
|
95
|
+
this._clearLast();
|
|
96
|
+
}
|
|
97
|
+
const segments = [...this._renderable.render(this._console.options)];
|
|
98
|
+
const lines = Segment.splitLines(segments);
|
|
99
|
+
const maxHeight = this._console.height;
|
|
100
|
+
let displayLines = lines;
|
|
101
|
+
if (this._verticalOverflow !== "visible" && lines.length > maxHeight) {
|
|
102
|
+
displayLines = lines.slice(0, maxHeight);
|
|
103
|
+
if (this._verticalOverflow === "ellipsis" && displayLines.length > 0) {
|
|
104
|
+
displayLines[displayLines.length - 1] = [new Segment("...")];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Apply styles via the Console's color system. When colorSystem is null
|
|
108
|
+
// (NO_COLOR, dumb terminal), match Console._renderSegment and emit plain
|
|
109
|
+
// text — Style.render would otherwise still produce ANSI codes.
|
|
110
|
+
// [LAW:single-enforcer] Color-system gating mirrors Console's policy.
|
|
111
|
+
const colorSystem = this._console.colorSystem;
|
|
112
|
+
const output = displayLines.map((line) => line.map((s) => colorSystem !== null && s.style && !s.style.isNull
|
|
113
|
+
? s.style.render(s.text, colorSystem)
|
|
114
|
+
: s.text).join("")).join("\n");
|
|
115
|
+
this._console.file.write(output + "\n");
|
|
116
|
+
this._lastLineCount = displayLines.length;
|
|
117
|
+
}
|
|
118
|
+
_clearLast() {
|
|
119
|
+
if (this._lastLineCount > 0) {
|
|
120
|
+
const stream = this._console.file;
|
|
121
|
+
for (let i = 0; i < this._lastLineCount; i++) {
|
|
122
|
+
stream.write("\x1b[1A\x1b[2K");
|
|
123
|
+
}
|
|
124
|
+
this._lastLineCount = 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
_writeCursorControl(show) {
|
|
128
|
+
this._console.file.write(show ? "\x1b[?25h" : "\x1b[?25l");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/renderables/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown — renders Markdown content to the terminal.
|
|
3
|
+
* Uses built-in parsing (no external dependency).
|
|
4
|
+
*/
|
|
5
|
+
import { Segment } from "../core/segment.js";
|
|
6
|
+
import { Style } from "../core/style.js";
|
|
7
|
+
import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
|
|
8
|
+
export interface MarkdownOptions {
|
|
9
|
+
codeTheme?: string;
|
|
10
|
+
inlineCodeStyle?: string | Style;
|
|
11
|
+
hyperlinks?: boolean;
|
|
12
|
+
justify?: "left" | "center" | "right" | "full";
|
|
13
|
+
}
|
|
14
|
+
export declare class Markdown implements Renderable, Measurable {
|
|
15
|
+
readonly markdown: string;
|
|
16
|
+
readonly inlineCodeStyle: Style;
|
|
17
|
+
readonly hyperlinks: boolean;
|
|
18
|
+
constructor(markdown: string, options?: MarkdownOptions);
|
|
19
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
20
|
+
measure(options: RenderOptions): {
|
|
21
|
+
minimum: number;
|
|
22
|
+
maximum: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/renderables/markdown.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAc,MAAM,kBAAkB,CAAC;AAGrD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;CAChD;AA6ID,qBAAa,QAAS,YAAW,UAAU,EAAE,UAAU;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;gBAEjB,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAMtD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IA6DlD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAGtE"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown — renders Markdown content to the terminal.
|
|
3
|
+
* Uses built-in parsing (no external dependency).
|
|
4
|
+
*/
|
|
5
|
+
import { Segment } from "../core/segment.js";
|
|
6
|
+
import { Style, NULL_STYLE } from "../core/style.js";
|
|
7
|
+
import { RichText } from "../core/text.js";
|
|
8
|
+
import { Rule } from "./rule.js";
|
|
9
|
+
function resolveStyle(style) {
|
|
10
|
+
if (style === undefined)
|
|
11
|
+
return NULL_STYLE;
|
|
12
|
+
if (typeof style === "string")
|
|
13
|
+
return Style.parse(style);
|
|
14
|
+
return style;
|
|
15
|
+
}
|
|
16
|
+
function tokenize(markdown) {
|
|
17
|
+
const lines = markdown.split("\n");
|
|
18
|
+
const tokens = [];
|
|
19
|
+
let i = 0;
|
|
20
|
+
while (i < lines.length) {
|
|
21
|
+
const line = lines[i];
|
|
22
|
+
// Blank line
|
|
23
|
+
if (line.trim() === "") {
|
|
24
|
+
tokens.push({ type: "blank" });
|
|
25
|
+
i++;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// Heading
|
|
29
|
+
const headingMatch = /^(#{1,6})\s+(.+)$/.exec(line);
|
|
30
|
+
if (headingMatch) {
|
|
31
|
+
tokens.push({ type: "heading", level: headingMatch[1].length, text: headingMatch[2] });
|
|
32
|
+
i++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// Horizontal rule
|
|
36
|
+
if (/^(?:---+|===+|\*\*\*+)$/.test(line.trim())) {
|
|
37
|
+
tokens.push({ type: "hr" });
|
|
38
|
+
i++;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Fenced code block
|
|
42
|
+
const codeMatch = /^```(\w*)/.exec(line);
|
|
43
|
+
if (codeMatch) {
|
|
44
|
+
const lang = codeMatch[1] ?? "";
|
|
45
|
+
const codeLines = [];
|
|
46
|
+
i++;
|
|
47
|
+
while (i < lines.length && !lines[i].startsWith("```")) {
|
|
48
|
+
codeLines.push(lines[i]);
|
|
49
|
+
i++;
|
|
50
|
+
}
|
|
51
|
+
i++; // skip closing ```
|
|
52
|
+
tokens.push({ type: "code_block", language: lang, code: codeLines.join("\n") });
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// Blockquote
|
|
56
|
+
if (line.startsWith("> ")) {
|
|
57
|
+
const quoteLines = [];
|
|
58
|
+
while (i < lines.length && lines[i].startsWith("> ")) {
|
|
59
|
+
quoteLines.push(lines[i].slice(2));
|
|
60
|
+
i++;
|
|
61
|
+
}
|
|
62
|
+
tokens.push({ type: "blockquote", text: quoteLines.join("\n") });
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// Unordered list
|
|
66
|
+
const ulMatch = /^([*\-+])\s+(.+)$/.exec(line);
|
|
67
|
+
if (ulMatch) {
|
|
68
|
+
tokens.push({ type: "list_item", ordered: false, index: 0, text: ulMatch[2] });
|
|
69
|
+
i++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Ordered list
|
|
73
|
+
const olMatch = /^(\d+)\.\s+(.+)$/.exec(line);
|
|
74
|
+
if (olMatch) {
|
|
75
|
+
tokens.push({ type: "list_item", ordered: true, index: parseInt(olMatch[1], 10), text: olMatch[2] });
|
|
76
|
+
i++;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Paragraph (collect consecutive non-blank lines)
|
|
80
|
+
const paraLines = [];
|
|
81
|
+
while (i < lines.length && lines[i].trim() !== "" && !/^#{1,6}\s/.test(lines[i]) && !/^```/.test(lines[i])) {
|
|
82
|
+
paraLines.push(lines[i]);
|
|
83
|
+
i++;
|
|
84
|
+
}
|
|
85
|
+
tokens.push({ type: "paragraph", text: paraLines.join(" ") });
|
|
86
|
+
}
|
|
87
|
+
return tokens;
|
|
88
|
+
}
|
|
89
|
+
function applyInlineStyles(text) {
|
|
90
|
+
const result = new RichText("", { end: "" });
|
|
91
|
+
// Process inline patterns
|
|
92
|
+
const inlineRe = /(\*\*(.+?)\*\*|\*(.+?)\*|`(.+?)`|\[(.+?)\]\((.+?)\))/g;
|
|
93
|
+
let lastIdx = 0;
|
|
94
|
+
let match;
|
|
95
|
+
while ((match = inlineRe.exec(text)) !== null) {
|
|
96
|
+
// Add text before match
|
|
97
|
+
if (match.index > lastIdx) {
|
|
98
|
+
result.append(text.slice(lastIdx, match.index));
|
|
99
|
+
}
|
|
100
|
+
if (match[2]) {
|
|
101
|
+
// Bold: **text**
|
|
102
|
+
result.append(match[2], "bold");
|
|
103
|
+
}
|
|
104
|
+
else if (match[3]) {
|
|
105
|
+
// Italic: *text*
|
|
106
|
+
result.append(match[3], "italic");
|
|
107
|
+
}
|
|
108
|
+
else if (match[4]) {
|
|
109
|
+
// Inline code: `text`
|
|
110
|
+
result.append(match[4], Style.parse("markdown.code"));
|
|
111
|
+
}
|
|
112
|
+
else if (match[5] && match[6]) {
|
|
113
|
+
// Link: [text](url)
|
|
114
|
+
result.append(match[5], new Style({ link: match[6] }));
|
|
115
|
+
}
|
|
116
|
+
lastIdx = match.index + match[0].length;
|
|
117
|
+
}
|
|
118
|
+
// Remaining text
|
|
119
|
+
if (lastIdx < text.length) {
|
|
120
|
+
result.append(text.slice(lastIdx));
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
export class Markdown {
|
|
125
|
+
markdown;
|
|
126
|
+
inlineCodeStyle;
|
|
127
|
+
hyperlinks;
|
|
128
|
+
constructor(markdown, options) {
|
|
129
|
+
this.markdown = markdown;
|
|
130
|
+
this.inlineCodeStyle = resolveStyle(options?.inlineCodeStyle ?? "markdown.code");
|
|
131
|
+
this.hyperlinks = options?.hyperlinks !== false;
|
|
132
|
+
}
|
|
133
|
+
*render(options) {
|
|
134
|
+
const tokens = tokenize(this.markdown);
|
|
135
|
+
for (const token of tokens) {
|
|
136
|
+
switch (token.type) {
|
|
137
|
+
case "heading": {
|
|
138
|
+
const styleKey = `markdown.h${Math.min(token.level, 4)}`;
|
|
139
|
+
const style = Style.parse(styleKey);
|
|
140
|
+
const text = applyInlineStyles(token.text);
|
|
141
|
+
yield* Segment.applyStyle([...text.render(options)], style);
|
|
142
|
+
yield Segment.line();
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case "paragraph": {
|
|
146
|
+
const text = applyInlineStyles(token.text);
|
|
147
|
+
yield* text.render(options);
|
|
148
|
+
yield Segment.line();
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "code_block": {
|
|
152
|
+
const codeStyle = Style.parse("markdown.code");
|
|
153
|
+
const lines = token.code.split("\n");
|
|
154
|
+
for (const line of lines) {
|
|
155
|
+
yield new Segment(line, codeStyle);
|
|
156
|
+
yield Segment.line();
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
case "hr": {
|
|
161
|
+
const rule = new Rule(undefined, { style: "markdown.hr" });
|
|
162
|
+
yield* rule.render(options);
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "list_item": {
|
|
166
|
+
const bullet = token.ordered ? `${token.index}. ` : " • ";
|
|
167
|
+
yield new Segment(bullet);
|
|
168
|
+
const text = applyInlineStyles(token.text);
|
|
169
|
+
yield* text.render({ ...options, maxWidth: options.maxWidth - bullet.length });
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case "blockquote": {
|
|
173
|
+
const quoteStyle = Style.parse("dim italic");
|
|
174
|
+
yield new Segment("▎ ", Style.parse("markdown.hr"));
|
|
175
|
+
const text = applyInlineStyles(token.text);
|
|
176
|
+
yield* Segment.applyStyle([...text.render(options)], quoteStyle);
|
|
177
|
+
yield Segment.line();
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
case "blank":
|
|
181
|
+
yield Segment.line();
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
measure(options) {
|
|
187
|
+
return { minimum: 1, maximum: options.maxWidth };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/renderables/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Padding — wraps a renderable with whitespace padding on all four sides.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Style } from "../core/style.js";
|
|
6
|
+
import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
|
|
7
|
+
export type PaddingDimensions = number | [number, number] | [number, number, number, number];
|
|
8
|
+
export declare class Padding implements Renderable, Measurable {
|
|
9
|
+
readonly renderable: Renderable;
|
|
10
|
+
readonly top: number;
|
|
11
|
+
readonly right: number;
|
|
12
|
+
readonly bottom: number;
|
|
13
|
+
readonly left: number;
|
|
14
|
+
readonly style: Style;
|
|
15
|
+
readonly expand: boolean;
|
|
16
|
+
constructor(renderable: Renderable, padding: PaddingDimensions, options?: {
|
|
17
|
+
style?: string | Style;
|
|
18
|
+
expand?: boolean;
|
|
19
|
+
});
|
|
20
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
21
|
+
measure(options: RenderOptions): {
|
|
22
|
+
minimum: number;
|
|
23
|
+
maximum: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=padding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padding.d.ts","sourceRoot":"","sources":["../../src/renderables/padding.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAc,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,CAAC,MAAM,EAAE,MAAM,CAAC,GAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAcrC,qBAAa,OAAQ,YAAW,UAAU,EAAE,UAAU;IACpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBAGvB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAYvD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IA2ClD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAWtE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Padding — wraps a renderable with whitespace padding on all four sides.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Style, NULL_STYLE } from "../core/style.js";
|
|
6
|
+
import { Measurement } from "../core/measure.js";
|
|
7
|
+
import { isMeasurable } from "../core/protocol.js";
|
|
8
|
+
function normalizePadding(padding) {
|
|
9
|
+
if (typeof padding === "number") {
|
|
10
|
+
return [padding, padding, padding, padding];
|
|
11
|
+
}
|
|
12
|
+
if (padding.length === 2) {
|
|
13
|
+
return [padding[0], padding[1], padding[0], padding[1]];
|
|
14
|
+
}
|
|
15
|
+
return padding;
|
|
16
|
+
}
|
|
17
|
+
export class Padding {
|
|
18
|
+
renderable;
|
|
19
|
+
top;
|
|
20
|
+
right;
|
|
21
|
+
bottom;
|
|
22
|
+
left;
|
|
23
|
+
style;
|
|
24
|
+
expand;
|
|
25
|
+
constructor(renderable, padding, options) {
|
|
26
|
+
const [top, right, bottom, left] = normalizePadding(padding);
|
|
27
|
+
this.renderable = renderable;
|
|
28
|
+
this.top = top;
|
|
29
|
+
this.right = right;
|
|
30
|
+
this.bottom = bottom;
|
|
31
|
+
this.left = left;
|
|
32
|
+
this.style = resolveStyle(options?.style);
|
|
33
|
+
this.expand = options?.expand !== false;
|
|
34
|
+
}
|
|
35
|
+
*render(options) {
|
|
36
|
+
const maxWidth = options.maxWidth;
|
|
37
|
+
const horizontalPad = this.left + this.right;
|
|
38
|
+
const innerWidth = Math.max(1, maxWidth - horizontalPad);
|
|
39
|
+
const innerOptions = {
|
|
40
|
+
...options,
|
|
41
|
+
maxWidth: innerWidth,
|
|
42
|
+
};
|
|
43
|
+
const segments = [...this.renderable.render(innerOptions)];
|
|
44
|
+
const lines = Segment.splitLines(segments);
|
|
45
|
+
const style = this.style.isNull ? undefined : this.style;
|
|
46
|
+
const leftPadStr = " ".repeat(this.left);
|
|
47
|
+
const blankLine = " ".repeat(maxWidth);
|
|
48
|
+
// Top padding
|
|
49
|
+
for (let i = 0; i < this.top; i++) {
|
|
50
|
+
yield new Segment(blankLine, style);
|
|
51
|
+
yield Segment.line();
|
|
52
|
+
}
|
|
53
|
+
// Content lines with left/right padding
|
|
54
|
+
for (const line of lines) {
|
|
55
|
+
if (this.left > 0)
|
|
56
|
+
yield new Segment(leftPadStr, style);
|
|
57
|
+
yield* line;
|
|
58
|
+
// Pad to fill remaining width
|
|
59
|
+
const lineWidth = Segment.getLineLength(line);
|
|
60
|
+
const remaining = this.expand
|
|
61
|
+
? innerWidth - lineWidth + this.right
|
|
62
|
+
: this.right;
|
|
63
|
+
if (remaining > 0)
|
|
64
|
+
yield new Segment(" ".repeat(remaining), style);
|
|
65
|
+
yield Segment.line();
|
|
66
|
+
}
|
|
67
|
+
// Bottom padding
|
|
68
|
+
for (let i = 0; i < this.bottom; i++) {
|
|
69
|
+
yield new Segment(blankLine, style);
|
|
70
|
+
yield Segment.line();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
measure(options) {
|
|
74
|
+
const horizontalPad = this.left + this.right;
|
|
75
|
+
if (isMeasurable(this.renderable)) {
|
|
76
|
+
const measurement = Measurement.get(options, this.renderable);
|
|
77
|
+
return {
|
|
78
|
+
minimum: measurement.minimum + horizontalPad,
|
|
79
|
+
maximum: measurement.maximum + horizontalPad,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return { minimum: horizontalPad, maximum: options.maxWidth };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function resolveStyle(style) {
|
|
86
|
+
if (style === undefined)
|
|
87
|
+
return NULL_STYLE;
|
|
88
|
+
if (typeof style === "string")
|
|
89
|
+
return Style.parse(style);
|
|
90
|
+
return style;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=padding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padding.js","sourceRoot":"","sources":["../../src/renderables/padding.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,SAAS,gBAAgB,CACvB,OAA0B;IAE1B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,OAAO;IACT,UAAU,CAAa;IACvB,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,MAAM,CAAS;IACf,IAAI,CAAS;IACb,KAAK,CAAQ;IACb,MAAM,CAAU;IAEzB,YACE,UAAsB,EACtB,OAA0B,EAC1B,OAAsD;QAEtD,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;IAC1C,CAAC;IAED,CAAC,MAAM,CAAC,OAAsB;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAkB;YAClC,GAAG,OAAO;YACV,QAAQ,EAAE,UAAU;SACrB,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACzD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEvC,cAAc;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,wCAAwC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACxD,KAAK,CAAC,CAAC,IAAI,CAAC;YACZ,8BAA8B;YAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;gBAC3B,CAAC,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK;gBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACf,IAAI,SAAS,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,iBAAiB;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAsB;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,aAAa;gBAC5C,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,aAAa;aAC7C,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAiC;IACrD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel — a bordered box that wraps content, with optional title and subtitle.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Style } from "../core/style.js";
|
|
6
|
+
import { Box } from "../core/box.js";
|
|
7
|
+
import { RichText } from "../core/text.js";
|
|
8
|
+
import type { PaddingDimensions } from "./padding.js";
|
|
9
|
+
import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
|
|
10
|
+
export interface PanelOptions {
|
|
11
|
+
box?: Box;
|
|
12
|
+
title?: string | RichText;
|
|
13
|
+
subtitle?: string | RichText;
|
|
14
|
+
expand?: boolean;
|
|
15
|
+
style?: string | Style;
|
|
16
|
+
borderStyle?: string | Style;
|
|
17
|
+
width?: number;
|
|
18
|
+
padding?: PaddingDimensions;
|
|
19
|
+
}
|
|
20
|
+
export declare class Panel implements Renderable, Measurable {
|
|
21
|
+
readonly renderable: Renderable;
|
|
22
|
+
readonly box: Box;
|
|
23
|
+
readonly title: string | RichText | undefined;
|
|
24
|
+
readonly subtitle: string | RichText | undefined;
|
|
25
|
+
readonly expand: boolean;
|
|
26
|
+
readonly style: Style;
|
|
27
|
+
readonly borderStyle: Style;
|
|
28
|
+
readonly width: number | undefined;
|
|
29
|
+
readonly padding: [number, number, number, number];
|
|
30
|
+
constructor(content: string | RichText | Renderable, options?: PanelOptions);
|
|
31
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
32
|
+
measure(options: RenderOptions): {
|
|
33
|
+
minimum: number;
|
|
34
|
+
maximum: number;
|
|
35
|
+
};
|
|
36
|
+
private _getPanelWidth;
|
|
37
|
+
private _renderTopBorder;
|
|
38
|
+
private _renderBottomBorder;
|
|
39
|
+
private _renderBlankLine;
|
|
40
|
+
static fit(content: string | RichText | Renderable, options?: Omit<PanelOptions, "expand">): Panel;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/renderables/panel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAc,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAuBD,qBAAa,KAAM,YAAW,UAAU,EAAE,UAAU;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAGjD,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EACvC,OAAO,CAAC,EAAE,YAAY;IAavB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAmDlD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAyBrE,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAE,gBAAgB;IAsCzB,OAAO,CAAE,mBAAmB;IAqC5B,OAAO,CAAE,gBAAgB;IAiBzB,MAAM,CAAC,GAAG,CACR,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EACvC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GACrC,KAAK;CAGT"}
|