@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,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `renderToString` — stateless one-shot emission of a `Renderable` to a string
|
|
3
|
+
* of ANSI-encoded text. Pure function: same inputs produce byte-identical
|
|
4
|
+
* output. Does not write to `process.stdout` and does not require a `Console`
|
|
5
|
+
* instance.
|
|
6
|
+
*
|
|
7
|
+
* Note on `colorSystem: "auto"`: the `"auto"` spec resolves via
|
|
8
|
+
* `detectColorSystem`, which reads `process.env` and `process.stdout?.isTTY`
|
|
9
|
+
* by default. Callers that want a fully deterministic render must either pass
|
|
10
|
+
* an explicit `ColorDepth` enum / non-`"auto"` spec, or supply `env` and
|
|
11
|
+
* `isTTY` in the options so detection does not consult ambient process state.
|
|
12
|
+
*
|
|
13
|
+
* [LAW:single-enforcer] The Segment-to-ANSI conversion lives in `segmentsToString`
|
|
14
|
+
* and is the single way segments become wire bytes. `Console._renderSegment`
|
|
15
|
+
* delegates here, so terminal output and string export agree by construction.
|
|
16
|
+
*
|
|
17
|
+
* [LAW:dataflow-not-control-flow] The same loop runs every render: walk the
|
|
18
|
+
* generator, drop control segments, encode each remaining segment with the
|
|
19
|
+
* configured color system. `colorSystem === null` is data — it makes
|
|
20
|
+
* `Style.render` skip codes — not a separate code path.
|
|
21
|
+
*/
|
|
22
|
+
import { ColorDepth, resolveColorSystem } from "./color.js";
|
|
23
|
+
const DEFAULT_WIDTH = 80;
|
|
24
|
+
export function segmentToString(segment, colorSystem) {
|
|
25
|
+
if (segment.isControl)
|
|
26
|
+
return "";
|
|
27
|
+
if (!segment.style || colorSystem === null)
|
|
28
|
+
return segment.text;
|
|
29
|
+
return segment.style.render(segment.text, colorSystem);
|
|
30
|
+
}
|
|
31
|
+
export function segmentsToString(segments, colorSystem) {
|
|
32
|
+
let out = "";
|
|
33
|
+
for (const s of segments)
|
|
34
|
+
out += segmentToString(s, colorSystem);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
export function renderToString(renderable, options) {
|
|
38
|
+
const width = options?.width ?? DEFAULT_WIDTH;
|
|
39
|
+
// [LAW:dataflow-not-control-flow] Distinguish "explicit null" from the
|
|
40
|
+
// defaulted case. `??` would collapse `null` into the default; `in` would
|
|
41
|
+
// accept an explicit `undefined` value as authoritative. Only an explicit
|
|
42
|
+
// `null` (or `noColor: true`) strips color; everything else — absent field,
|
|
43
|
+
// explicit `undefined` — falls back to truecolor.
|
|
44
|
+
// [LAW:single-enforcer] String specs route through `resolveColorSystem`;
|
|
45
|
+
// enum/null pass through unchanged.
|
|
46
|
+
const rawSpec = options?.colorSystem;
|
|
47
|
+
// [LAW:dataflow-not-control-flow] Build the detect options unconditionally;
|
|
48
|
+
// `resolveColorSystem` ignores them for non-`"auto"` specs.
|
|
49
|
+
const detectOptions = {};
|
|
50
|
+
if (options?.env !== undefined)
|
|
51
|
+
detectOptions.env = options.env;
|
|
52
|
+
if (options?.isTTY !== undefined)
|
|
53
|
+
detectOptions.isTTY = options.isTTY;
|
|
54
|
+
const colorSystem = options?.noColor
|
|
55
|
+
? null
|
|
56
|
+
: rawSpec === undefined
|
|
57
|
+
? ColorDepth.TRUECOLOR
|
|
58
|
+
: typeof rawSpec === "string"
|
|
59
|
+
? resolveColorSystem(rawSpec, detectOptions)
|
|
60
|
+
: rawSpec;
|
|
61
|
+
const renderOptions = {
|
|
62
|
+
maxWidth: width,
|
|
63
|
+
isTerminal: false,
|
|
64
|
+
encoding: "utf-8",
|
|
65
|
+
asciiOnly: false,
|
|
66
|
+
};
|
|
67
|
+
return segmentsToString(renderable.render(renderOptions), colorSystem);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/core/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6B5D,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,WAA8B;IAE9B,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAChE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA2B,EAC3B,WAA8B;IAE9B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAsB,EACtB,OAA+B;IAE/B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;IAC9C,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,kDAAkD;IAClD,yEAAyE;IACzE,oCAAoC;IACpC,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW,CAAC;IACrC,4EAA4E;IAC5E,4DAA4D;IAC5D,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,IAAI,OAAO,EAAE,GAAG,KAAK,SAAS;QAAE,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAChE,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;QAAE,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACtE,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,KAAK,SAAS;YACrB,CAAC,CAAC,UAAU,CAAC,SAAS;YACtB,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;gBAC3B,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC;gBAC5C,CAAC,CAAC,OAAO,CAAC;IAChB,MAAM,aAAa,GAAkB;QACnC,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,OAAO,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment — the atomic rendering unit. Every piece of styled terminal output
|
|
3
|
+
* is represented as a Segment: (text, style?, control?).
|
|
4
|
+
*/
|
|
5
|
+
import { Style } from "./style.js";
|
|
6
|
+
export declare enum ControlType {
|
|
7
|
+
BELL = "bell",
|
|
8
|
+
CARRIAGE_RETURN = "carriage_return",
|
|
9
|
+
HOME = "home",
|
|
10
|
+
CLEAR = "clear",
|
|
11
|
+
SHOW_CURSOR = "show_cursor",
|
|
12
|
+
HIDE_CURSOR = "hide_cursor",
|
|
13
|
+
ENABLE_ALT_SCREEN = "enable_alt_screen",
|
|
14
|
+
DISABLE_ALT_SCREEN = "disable_alt_screen",
|
|
15
|
+
CURSOR_UP = "cursor_up",
|
|
16
|
+
CURSOR_DOWN = "cursor_down",
|
|
17
|
+
CURSOR_FORWARD = "cursor_forward",
|
|
18
|
+
CURSOR_BACKWARD = "cursor_backward",
|
|
19
|
+
CURSOR_MOVE_TO_COLUMN = "cursor_move_to_column",
|
|
20
|
+
CURSOR_MOVE_TO = "cursor_move_to",
|
|
21
|
+
ERASE_IN_LINE = "erase_in_line",
|
|
22
|
+
SET_WINDOW_TITLE = "set_window_title"
|
|
23
|
+
}
|
|
24
|
+
export type ControlCode = [ControlType, ...unknown[]];
|
|
25
|
+
export declare class Segment {
|
|
26
|
+
readonly text: string;
|
|
27
|
+
readonly style: Style | undefined;
|
|
28
|
+
readonly control: ControlCode[] | undefined;
|
|
29
|
+
constructor(text: string, style?: Style, control?: ControlCode[]);
|
|
30
|
+
get cellLength(): number;
|
|
31
|
+
get hasText(): boolean;
|
|
32
|
+
get isControl(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Splits at a cell position. Returns [left, right].
|
|
35
|
+
*/
|
|
36
|
+
splitCells(position: number): [Segment, Segment];
|
|
37
|
+
private static _line;
|
|
38
|
+
static line(): Segment;
|
|
39
|
+
/**
|
|
40
|
+
* Yields segments with combined styles.
|
|
41
|
+
*/
|
|
42
|
+
static applyStyle(segments: Iterable<Segment>, style?: Style, postStyle?: Style): Iterable<Segment>;
|
|
43
|
+
/**
|
|
44
|
+
* Filters segments by control status.
|
|
45
|
+
*/
|
|
46
|
+
static filterControl(segments: Iterable<Segment>, isControl: boolean): Iterable<Segment>;
|
|
47
|
+
/**
|
|
48
|
+
* Splits segments at newlines. Yields arrays of segments per line.
|
|
49
|
+
*/
|
|
50
|
+
static splitLines(segments: Iterable<Segment>): Segment[][];
|
|
51
|
+
/**
|
|
52
|
+
* Adjusts a line of segments to exactly `width` cells.
|
|
53
|
+
*/
|
|
54
|
+
static adjustLineLength(line: Segment[], width: number, style?: Style, pad?: boolean): Segment[];
|
|
55
|
+
/**
|
|
56
|
+
* Returns total cell width of a line. Ignores control segments.
|
|
57
|
+
*/
|
|
58
|
+
static getLineLength(line: Segment[]): number;
|
|
59
|
+
/**
|
|
60
|
+
* Returns [width, height] of a set of lines.
|
|
61
|
+
*/
|
|
62
|
+
static getShape(lines: Segment[][]): [number, number];
|
|
63
|
+
/**
|
|
64
|
+
* Merges contiguous segments with the same style.
|
|
65
|
+
*/
|
|
66
|
+
static simplify(segments: Iterable<Segment>): Iterable<Segment>;
|
|
67
|
+
/**
|
|
68
|
+
* Yields segments with links removed.
|
|
69
|
+
*/
|
|
70
|
+
static stripLinks(segments: Iterable<Segment>): Iterable<Segment>;
|
|
71
|
+
/**
|
|
72
|
+
* Yields segments with all styles removed.
|
|
73
|
+
*/
|
|
74
|
+
static stripStyles(segments: Iterable<Segment>): Iterable<Segment>;
|
|
75
|
+
/**
|
|
76
|
+
* Yields segments with colors removed but attributes preserved.
|
|
77
|
+
*/
|
|
78
|
+
static removeColor(segments: Iterable<Segment>): Iterable<Segment>;
|
|
79
|
+
/**
|
|
80
|
+
* Divides segments at cell positions. Yields arrays of segments for each section.
|
|
81
|
+
*/
|
|
82
|
+
static divide(segments: Segment[], cuts: number[]): Segment[][];
|
|
83
|
+
/**
|
|
84
|
+
* Pads below to fill height.
|
|
85
|
+
*/
|
|
86
|
+
static alignTop(lines: Segment[][], width: number, height: number, style: Style): Segment[][];
|
|
87
|
+
/**
|
|
88
|
+
* Pads above to fill height. Content at bottom.
|
|
89
|
+
*/
|
|
90
|
+
static alignBottom(lines: Segment[][], width: number, height: number, style: Style): Segment[][];
|
|
91
|
+
/**
|
|
92
|
+
* Pads above and below. Content in middle.
|
|
93
|
+
*/
|
|
94
|
+
static alignMiddle(lines: Segment[][], width: number, height: number, style: Style): Segment[][];
|
|
95
|
+
/**
|
|
96
|
+
* Forces lines to exactly width x height.
|
|
97
|
+
*/
|
|
98
|
+
static setShape(lines: Segment[][], width: number, height: number, style?: Style): Segment[][];
|
|
99
|
+
/**
|
|
100
|
+
* Splits segments into lines and adjusts each to exactly `width` cells.
|
|
101
|
+
*/
|
|
102
|
+
static splitAndCropLines(segments: Iterable<Segment>, width: number, pad?: boolean, includeNewLines?: boolean, style?: Style): Segment[][];
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=segment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/core/segment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment — the atomic rendering unit. Every piece of styled terminal output
|
|
3
|
+
* is represented as a Segment: (text, style?, control?).
|
|
4
|
+
*/
|
|
5
|
+
import { cellLen, splitText } from "./cells.js";
|
|
6
|
+
// --- ControlType ---
|
|
7
|
+
export var ControlType;
|
|
8
|
+
(function (ControlType) {
|
|
9
|
+
ControlType["BELL"] = "bell";
|
|
10
|
+
ControlType["CARRIAGE_RETURN"] = "carriage_return";
|
|
11
|
+
ControlType["HOME"] = "home";
|
|
12
|
+
ControlType["CLEAR"] = "clear";
|
|
13
|
+
ControlType["SHOW_CURSOR"] = "show_cursor";
|
|
14
|
+
ControlType["HIDE_CURSOR"] = "hide_cursor";
|
|
15
|
+
ControlType["ENABLE_ALT_SCREEN"] = "enable_alt_screen";
|
|
16
|
+
ControlType["DISABLE_ALT_SCREEN"] = "disable_alt_screen";
|
|
17
|
+
ControlType["CURSOR_UP"] = "cursor_up";
|
|
18
|
+
ControlType["CURSOR_DOWN"] = "cursor_down";
|
|
19
|
+
ControlType["CURSOR_FORWARD"] = "cursor_forward";
|
|
20
|
+
ControlType["CURSOR_BACKWARD"] = "cursor_backward";
|
|
21
|
+
ControlType["CURSOR_MOVE_TO_COLUMN"] = "cursor_move_to_column";
|
|
22
|
+
ControlType["CURSOR_MOVE_TO"] = "cursor_move_to";
|
|
23
|
+
ControlType["ERASE_IN_LINE"] = "erase_in_line";
|
|
24
|
+
ControlType["SET_WINDOW_TITLE"] = "set_window_title";
|
|
25
|
+
})(ControlType || (ControlType = {}));
|
|
26
|
+
// --- Segment ---
|
|
27
|
+
export class Segment {
|
|
28
|
+
text;
|
|
29
|
+
style;
|
|
30
|
+
control;
|
|
31
|
+
constructor(text, style, control) {
|
|
32
|
+
this.text = text;
|
|
33
|
+
this.style = style;
|
|
34
|
+
this.control = control;
|
|
35
|
+
}
|
|
36
|
+
get cellLength() {
|
|
37
|
+
return this.control ? 0 : cellLen(this.text);
|
|
38
|
+
}
|
|
39
|
+
get hasText() {
|
|
40
|
+
return this.text.length > 0;
|
|
41
|
+
}
|
|
42
|
+
get isControl() {
|
|
43
|
+
return this.control !== undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Splits at a cell position. Returns [left, right].
|
|
47
|
+
*/
|
|
48
|
+
splitCells(position) {
|
|
49
|
+
const len = this.cellLength;
|
|
50
|
+
if (position >= len)
|
|
51
|
+
return [this, new Segment("")];
|
|
52
|
+
if (position <= 0)
|
|
53
|
+
return [new Segment(""), this];
|
|
54
|
+
const [leftText, rightText] = splitText(this.text, position);
|
|
55
|
+
return [
|
|
56
|
+
new Segment(leftText, this.style),
|
|
57
|
+
new Segment(rightText, this.style),
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
// --- Static factories ---
|
|
61
|
+
static _line;
|
|
62
|
+
static line() {
|
|
63
|
+
return (Segment._line ??= new Segment("\n"));
|
|
64
|
+
}
|
|
65
|
+
// --- Static transformations ---
|
|
66
|
+
/**
|
|
67
|
+
* Yields segments with combined styles.
|
|
68
|
+
*/
|
|
69
|
+
static *applyStyle(segments, style, postStyle) {
|
|
70
|
+
for (const segment of segments) {
|
|
71
|
+
if (segment.isControl) {
|
|
72
|
+
yield segment;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
let s = segment.style;
|
|
76
|
+
if (style)
|
|
77
|
+
s = style.add(s);
|
|
78
|
+
if (postStyle)
|
|
79
|
+
s = s ? s.add(postStyle) : postStyle;
|
|
80
|
+
yield new Segment(segment.text, s, segment.control);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Filters segments by control status.
|
|
85
|
+
*/
|
|
86
|
+
static *filterControl(segments, isControl) {
|
|
87
|
+
for (const segment of segments) {
|
|
88
|
+
if (segment.isControl === isControl)
|
|
89
|
+
yield segment;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Splits segments at newlines. Yields arrays of segments per line.
|
|
94
|
+
*/
|
|
95
|
+
static splitLines(segments) {
|
|
96
|
+
const lines = [];
|
|
97
|
+
let currentLine = [];
|
|
98
|
+
for (const segment of segments) {
|
|
99
|
+
if (segment.isControl) {
|
|
100
|
+
currentLine.push(segment);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const text = segment.text;
|
|
104
|
+
if (!text.includes("\n")) {
|
|
105
|
+
currentLine.push(segment);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const parts = text.split("\n");
|
|
109
|
+
for (let i = 0; i < parts.length; i++) {
|
|
110
|
+
if (i > 0) {
|
|
111
|
+
lines.push(currentLine);
|
|
112
|
+
currentLine = [];
|
|
113
|
+
}
|
|
114
|
+
const part = parts[i];
|
|
115
|
+
if (part.length > 0) {
|
|
116
|
+
currentLine.push(new Segment(part, segment.style));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (currentLine.length > 0) {
|
|
121
|
+
lines.push(currentLine);
|
|
122
|
+
}
|
|
123
|
+
return lines;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Adjusts a line of segments to exactly `width` cells.
|
|
127
|
+
*/
|
|
128
|
+
static adjustLineLength(line, width, style, pad = true) {
|
|
129
|
+
const currentWidth = Segment.getLineLength(line);
|
|
130
|
+
if (currentWidth === width)
|
|
131
|
+
return line;
|
|
132
|
+
if (currentWidth < width) {
|
|
133
|
+
if (!pad)
|
|
134
|
+
return line;
|
|
135
|
+
return [...line, new Segment(" ".repeat(width - currentWidth), style)];
|
|
136
|
+
}
|
|
137
|
+
// Crop to width
|
|
138
|
+
const result = [];
|
|
139
|
+
let remaining = width;
|
|
140
|
+
for (const segment of line) {
|
|
141
|
+
if (segment.isControl) {
|
|
142
|
+
result.push(segment);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const segWidth = segment.cellLength;
|
|
146
|
+
if (segWidth <= remaining) {
|
|
147
|
+
result.push(segment);
|
|
148
|
+
remaining -= segWidth;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const [left] = segment.splitCells(remaining);
|
|
152
|
+
result.push(left);
|
|
153
|
+
remaining = 0;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns total cell width of a line. Ignores control segments.
|
|
161
|
+
*/
|
|
162
|
+
static getLineLength(line) {
|
|
163
|
+
let width = 0;
|
|
164
|
+
for (const segment of line) {
|
|
165
|
+
if (!segment.isControl) {
|
|
166
|
+
width += segment.cellLength;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return width;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns [width, height] of a set of lines.
|
|
173
|
+
*/
|
|
174
|
+
static getShape(lines) {
|
|
175
|
+
if (lines.length === 0)
|
|
176
|
+
return [0, 0];
|
|
177
|
+
let maxWidth = 0;
|
|
178
|
+
for (const line of lines) {
|
|
179
|
+
const w = Segment.getLineLength(line);
|
|
180
|
+
if (w > maxWidth)
|
|
181
|
+
maxWidth = w;
|
|
182
|
+
}
|
|
183
|
+
return [maxWidth, lines.length];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Merges contiguous segments with the same style.
|
|
187
|
+
*/
|
|
188
|
+
static *simplify(segments) {
|
|
189
|
+
let pending;
|
|
190
|
+
for (const segment of segments) {
|
|
191
|
+
if (!pending) {
|
|
192
|
+
pending = segment;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (stylesEqual(pending.style, segment.style) && !segment.isControl && !pending.isControl) {
|
|
196
|
+
pending = new Segment(pending.text + segment.text, pending.style);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
yield pending;
|
|
200
|
+
pending = segment;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (pending)
|
|
204
|
+
yield pending;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Yields segments with links removed.
|
|
208
|
+
*/
|
|
209
|
+
static *stripLinks(segments) {
|
|
210
|
+
for (const segment of segments) {
|
|
211
|
+
if (segment.style?.link) {
|
|
212
|
+
yield new Segment(segment.text, segment.style.clearMetaAndLinks(), segment.control);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
yield segment;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Yields segments with all styles removed.
|
|
221
|
+
*/
|
|
222
|
+
static *stripStyles(segments) {
|
|
223
|
+
for (const segment of segments) {
|
|
224
|
+
yield new Segment(segment.text, undefined, segment.control);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Yields segments with colors removed but attributes preserved.
|
|
229
|
+
*/
|
|
230
|
+
static *removeColor(segments) {
|
|
231
|
+
for (const segment of segments) {
|
|
232
|
+
if (segment.style) {
|
|
233
|
+
yield new Segment(segment.text, segment.style.withoutColor, segment.control);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
yield segment;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Divides segments at cell positions. Yields arrays of segments for each section.
|
|
242
|
+
*/
|
|
243
|
+
static divide(segments, cuts) {
|
|
244
|
+
if (cuts.length === 0)
|
|
245
|
+
return [segments];
|
|
246
|
+
const result = [];
|
|
247
|
+
let segmentIndex = 0;
|
|
248
|
+
let cellOffset = 0;
|
|
249
|
+
let currentSegment = segments[segmentIndex];
|
|
250
|
+
for (const cut of cuts) {
|
|
251
|
+
const section = [];
|
|
252
|
+
while (currentSegment && cellOffset + currentSegment.cellLength <= cut) {
|
|
253
|
+
if (currentSegment.isControl) {
|
|
254
|
+
section.push(currentSegment);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
section.push(currentSegment);
|
|
258
|
+
cellOffset += currentSegment.cellLength;
|
|
259
|
+
}
|
|
260
|
+
segmentIndex++;
|
|
261
|
+
currentSegment = segments[segmentIndex];
|
|
262
|
+
}
|
|
263
|
+
if (currentSegment && !currentSegment.isControl && cellOffset < cut) {
|
|
264
|
+
const splitAt = cut - cellOffset;
|
|
265
|
+
const [left, right] = currentSegment.splitCells(splitAt);
|
|
266
|
+
if (left.hasText)
|
|
267
|
+
section.push(left);
|
|
268
|
+
cellOffset += left.cellLength;
|
|
269
|
+
currentSegment = right;
|
|
270
|
+
}
|
|
271
|
+
result.push(section);
|
|
272
|
+
}
|
|
273
|
+
// Remaining segments
|
|
274
|
+
const tail = [];
|
|
275
|
+
if (currentSegment?.hasText)
|
|
276
|
+
tail.push(currentSegment);
|
|
277
|
+
segmentIndex++;
|
|
278
|
+
while (segmentIndex < segments.length) {
|
|
279
|
+
tail.push(segments[segmentIndex]);
|
|
280
|
+
segmentIndex++;
|
|
281
|
+
}
|
|
282
|
+
if (tail.length > 0)
|
|
283
|
+
result.push(tail);
|
|
284
|
+
return result;
|
|
285
|
+
}
|
|
286
|
+
// --- Layout helpers ---
|
|
287
|
+
/**
|
|
288
|
+
* Pads below to fill height.
|
|
289
|
+
*/
|
|
290
|
+
static alignTop(lines, width, height, style) {
|
|
291
|
+
const result = lines.map((line) => Segment.adjustLineLength(line, width, style));
|
|
292
|
+
const blankLine = [new Segment(" ".repeat(width), style)];
|
|
293
|
+
while (result.length < height) {
|
|
294
|
+
result.push([...blankLine]);
|
|
295
|
+
}
|
|
296
|
+
return result.slice(0, height);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Pads above to fill height. Content at bottom.
|
|
300
|
+
*/
|
|
301
|
+
static alignBottom(lines, width, height, style) {
|
|
302
|
+
const adjusted = lines.map((line) => Segment.adjustLineLength(line, width, style));
|
|
303
|
+
const blankLine = [new Segment(" ".repeat(width), style)];
|
|
304
|
+
const padCount = Math.max(0, height - adjusted.length);
|
|
305
|
+
const result = [];
|
|
306
|
+
for (let i = 0; i < padCount; i++) {
|
|
307
|
+
result.push([...blankLine]);
|
|
308
|
+
}
|
|
309
|
+
result.push(...adjusted);
|
|
310
|
+
return result.slice(0, height);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Pads above and below. Content in middle.
|
|
314
|
+
*/
|
|
315
|
+
static alignMiddle(lines, width, height, style) {
|
|
316
|
+
const adjusted = lines.map((line) => Segment.adjustLineLength(line, width, style));
|
|
317
|
+
const blankLine = [new Segment(" ".repeat(width), style)];
|
|
318
|
+
const padAbove = Math.max(0, Math.floor((height - adjusted.length) / 2));
|
|
319
|
+
const result = [];
|
|
320
|
+
for (let i = 0; i < padAbove; i++) {
|
|
321
|
+
result.push([...blankLine]);
|
|
322
|
+
}
|
|
323
|
+
result.push(...adjusted);
|
|
324
|
+
while (result.length < height) {
|
|
325
|
+
result.push([...blankLine]);
|
|
326
|
+
}
|
|
327
|
+
return result.slice(0, height);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Forces lines to exactly width x height.
|
|
331
|
+
*/
|
|
332
|
+
static setShape(lines, width, height, style) {
|
|
333
|
+
const result = lines.map((line) => Segment.adjustLineLength(line, width, style));
|
|
334
|
+
const blankLine = [new Segment(" ".repeat(width), style)];
|
|
335
|
+
while (result.length < height) {
|
|
336
|
+
result.push([...blankLine]);
|
|
337
|
+
}
|
|
338
|
+
return result.slice(0, height);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Splits segments into lines and adjusts each to exactly `width` cells.
|
|
342
|
+
*/
|
|
343
|
+
static splitAndCropLines(segments, width, pad = true, includeNewLines = false, style) {
|
|
344
|
+
const rawLines = Segment.splitLines(segments);
|
|
345
|
+
const result = [];
|
|
346
|
+
for (const line of rawLines) {
|
|
347
|
+
const adjusted = Segment.adjustLineLength(line, width, style, pad);
|
|
348
|
+
result.push(adjusted);
|
|
349
|
+
if (includeNewLines) {
|
|
350
|
+
result[result.length - 1].push(Segment.line());
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return result;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// --- Internal helpers ---
|
|
357
|
+
function stylesEqual(a, b) {
|
|
358
|
+
if (a === b)
|
|
359
|
+
return true;
|
|
360
|
+
if (!a || !b)
|
|
361
|
+
return false;
|
|
362
|
+
return a.equals(b);
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=segment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment.js","sourceRoot":"","sources":["../../src/core/segment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in spinner frame data.
|
|
3
|
+
* [LAW:one-type-per-behavior] All spinners are instances of SpinnerData — differ only by frame data.
|
|
4
|
+
*/
|
|
5
|
+
export interface SpinnerData {
|
|
6
|
+
readonly frames: readonly string[];
|
|
7
|
+
readonly interval: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const SPINNERS: Record<string, SpinnerData>;
|
|
10
|
+
export declare const DEFAULT_SPINNER = "dots";
|
|
11
|
+
//# sourceMappingURL=spinnerData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinnerData.d.ts","sourceRoot":"","sources":["../../src/core/spinnerData.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAGD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4GhD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAS,CAAC"}
|