@promptctl/rich-js 0.7.0 → 0.8.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 +31 -30
- package/dist/core/box.d.ts +3 -3
- package/dist/core/box.d.ts.map +1 -1
- package/dist/core/box.js.map +1 -1
- package/dist/core/cells.d.ts +46 -1
- package/dist/core/cells.d.ts.map +1 -1
- package/dist/core/cells.js +55 -14
- package/dist/core/cells.js.map +1 -1
- package/dist/core/console.d.ts +28 -10
- package/dist/core/console.d.ts.map +1 -1
- package/dist/core/console.js +141 -80
- package/dist/core/console.js.map +1 -1
- package/dist/core/markup.d.ts +0 -2
- package/dist/core/markup.d.ts.map +1 -1
- package/dist/core/markup.js +31 -17
- package/dist/core/markup.js.map +1 -1
- package/dist/core/measure.d.ts +11 -0
- package/dist/core/measure.d.ts.map +1 -1
- package/dist/core/measure.js +15 -3
- package/dist/core/measure.js.map +1 -1
- package/dist/core/oklch.d.ts +22 -0
- package/dist/core/oklch.d.ts.map +1 -1
- package/dist/core/oklch.js +62 -18
- package/dist/core/oklch.js.map +1 -1
- package/dist/core/pretty.d.ts +87 -0
- package/dist/core/pretty.d.ts.map +1 -0
- package/dist/core/pretty.js +304 -0
- package/dist/core/pretty.js.map +1 -0
- package/dist/core/protocol.d.ts +64 -0
- package/dist/core/protocol.d.ts.map +1 -1
- package/dist/core/protocol.js +72 -0
- package/dist/core/protocol.js.map +1 -1
- package/dist/core/segment.d.ts +21 -0
- package/dist/core/segment.d.ts.map +1 -1
- package/dist/core/segment.js +40 -1
- package/dist/core/segment.js.map +1 -1
- package/dist/core/subscription.d.ts +13 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +13 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/text.d.ts.map +1 -1
- package/dist/core/text.js +45 -13
- package/dist/core/text.js.map +1 -1
- package/dist/host/host-stream.d.ts +31 -0
- package/dist/host/host-stream.d.ts.map +1 -0
- package/dist/host/host-stream.js +36 -0
- package/dist/host/host-stream.js.map +1 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +3 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/terminal-host.d.ts +144 -0
- package/dist/host/terminal-host.d.ts.map +1 -0
- package/dist/host/terminal-host.js +133 -0
- package/dist/host/terminal-host.js.map +1 -0
- package/dist/index.d.ts +10 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -21
- package/dist/index.js.map +1 -1
- package/dist/node/terminal-host.d.ts +85 -0
- package/dist/node/terminal-host.d.ts.map +1 -0
- package/dist/node/terminal-host.js +161 -0
- package/dist/node/terminal-host.js.map +1 -0
- package/dist/node/traceback.d.ts +28 -0
- package/dist/node/traceback.d.ts.map +1 -0
- package/dist/node/traceback.js +113 -0
- package/dist/node/traceback.js.map +1 -0
- package/dist/renderables/columns.d.ts +24 -2
- package/dist/renderables/columns.d.ts.map +1 -1
- package/dist/renderables/columns.js +91 -32
- package/dist/renderables/columns.js.map +1 -1
- package/dist/renderables/layout.d.ts +61 -5
- package/dist/renderables/layout.d.ts.map +1 -1
- package/dist/renderables/layout.js +191 -19
- package/dist/renderables/layout.js.map +1 -1
- package/dist/renderables/padding.d.ts +15 -2
- package/dist/renderables/padding.d.ts.map +1 -1
- package/dist/renderables/padding.js +92 -37
- package/dist/renderables/padding.js.map +1 -1
- package/dist/renderables/panel.d.ts +44 -3
- package/dist/renderables/panel.d.ts.map +1 -1
- package/dist/renderables/panel.js +149 -80
- package/dist/renderables/panel.js.map +1 -1
- package/dist/renderables/table.d.ts +40 -4
- package/dist/renderables/table.d.ts.map +1 -1
- package/dist/renderables/table.js +276 -158
- package/dist/renderables/table.js.map +1 -1
- package/dist/renderables/traceback.d.ts +6 -2
- package/dist/renderables/traceback.d.ts.map +1 -1
- package/dist/renderables/traceback.js +6 -10
- package/dist/renderables/traceback.js.map +1 -1
- package/dist/renderables/tree.d.ts +27 -2
- package/dist/renderables/tree.d.ts.map +1 -1
- package/dist/renderables/tree.js +82 -23
- package/dist/renderables/tree.js.map +1 -1
- package/dist/template-bindings/color-funcs.d.ts +3 -3
- package/dist/template-bindings/color-funcs.js +3 -3
- package/dist/template-bindings/index.d.ts +6 -7
- package/dist/template-bindings/index.d.ts.map +1 -1
- package/dist/template-bindings/index.js +6 -7
- package/dist/template-bindings/index.js.map +1 -1
- package/dist/template-bindings/palette-funcs.d.ts +17 -5
- package/dist/template-bindings/palette-funcs.d.ts.map +1 -1
- package/dist/template-bindings/palette-funcs.js +69 -6
- package/dist/template-bindings/palette-funcs.js.map +1 -1
- package/dist/template-bindings/style-funcs.d.ts +1 -1
- package/dist/template-bindings/style-funcs.js +1 -1
- package/dist/themes/ramp.d.ts +84 -0
- package/dist/themes/ramp.d.ts.map +1 -0
- package/dist/themes/ramp.js +123 -0
- package/dist/themes/ramp.js.map +1 -0
- package/dist/widgets/dropdown.d.ts +1 -1
- package/dist/widgets/dropdown.js +1 -1
- package/dist/widgets/event-router.d.ts +3 -2
- package/dist/widgets/event-router.d.ts.map +1 -1
- package/dist/widgets/focus-manager.d.ts +2 -1
- package/dist/widgets/focus-manager.d.ts.map +1 -1
- package/dist/widgets/index.d.ts +3 -6
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/index.js +4 -3
- package/dist/widgets/index.js.map +1 -1
- package/dist/widgets/screen.d.ts +1 -1
- package/dist/widgets/screen.d.ts.map +1 -1
- package/dist/widgets/terminal-host.d.ts +13 -63
- package/dist/widgets/terminal-host.d.ts.map +1 -1
- package/dist/widgets/terminal-host.js +11 -142
- package/dist/widgets/terminal-host.js.map +1 -1
- package/dist/widgets/text-input.d.ts +2 -3
- package/dist/widgets/text-input.d.ts.map +1 -1
- package/dist/widgets/text-input.js +4 -12
- package/dist/widgets/text-input.js.map +1 -1
- package/dist/widgets/types.d.ts +1 -1
- package/dist/widgets/types.d.ts.map +1 -1
- package/dist/widgets/types.js.map +1 -1
- package/dist/widgets/widget-base.d.ts +2 -1
- package/dist/widgets/widget-base.d.ts.map +1 -1
- package/package.json +20 -4
|
@@ -2,17 +2,70 @@
|
|
|
2
2
|
* Padding — wraps a renderable with whitespace padding on all four sides.
|
|
3
3
|
*/
|
|
4
4
|
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { cellCount } from "../core/cells.js";
|
|
5
6
|
import { Style, NULL_STYLE } from "../core/style.js";
|
|
6
7
|
import { Measurement } from "../core/measure.js";
|
|
7
|
-
import { isMeasurable } from "../core/protocol.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
import { isMeasurable, withBoundedWidth, withCellWidth } from "../core/protocol.js";
|
|
9
|
+
/**
|
|
10
|
+
* Parses the shapes a caller may write padding in — one number, a vertical/
|
|
11
|
+
* horizontal pair, or all four sides — into the four-sided form every
|
|
12
|
+
* renderable indexes by, flooring each side at zero.
|
|
13
|
+
*
|
|
14
|
+
* [LAW:parse-dont-validate] This is the one crossing between the public
|
|
15
|
+
* padding vocabulary and the internal tuple, which is why the floor lives
|
|
16
|
+
* here and nowhere downstream: past this point `" ".repeat(left)` is safe in
|
|
17
|
+
* any renderable without asking what the caller passed. A negative side used
|
|
18
|
+
* to reach the renderers, where `Panel` drew content rows wider than its own
|
|
19
|
+
* border and `Table` threw outright.
|
|
20
|
+
*/
|
|
21
|
+
export function normalizePadding(padding) {
|
|
22
|
+
// A padding side is a count of cells like any other, so it is parsed by the
|
|
23
|
+
// same rule rather than by a second copy of it: a fractional side reaches
|
|
24
|
+
// `" ".repeat`, which truncates, while the rows around it are measured
|
|
25
|
+
// arithmetically — so the padding and the border disagree and the frame
|
|
26
|
+
// breaks. `cellCount`'s header carries why the comparison, not `Math.max`.
|
|
27
|
+
//
|
|
28
|
+
// `Infinity` is where a side stops being an offer and the rule needs the one
|
|
29
|
+
// addition. An unbounded *offer* is a question a renderable can answer, so
|
|
30
|
+
// `cellCount` passes it through; an unbounded *side* is a quantity and there
|
|
31
|
+
// is nothing to draw. Unparsed it reached `budget -= got` as
|
|
32
|
+
// `Infinity - Infinity`, and `new Padding(text, Infinity).measure(...)`
|
|
33
|
+
// handed back `{NaN, NaN}` from a public API.
|
|
34
|
+
const side = (n) => (Number.isFinite(n) ? cellCount(n) : 0);
|
|
35
|
+
const sides = typeof padding === "number"
|
|
36
|
+
? [padding, padding, padding, padding]
|
|
37
|
+
: padding.length === 2
|
|
38
|
+
? [padding[0], padding[1], padding[0], padding[1]]
|
|
39
|
+
: padding;
|
|
40
|
+
return [side(sides[0]), side(sides[1]), side(sides[2]), side(sides[3])];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Divides the requested width once into the three spans a padded row is made
|
|
44
|
+
* of, in the order they are worth spending cells on.
|
|
45
|
+
*
|
|
46
|
+
* The three used to be derived separately and disagree where it matters:
|
|
47
|
+
* `render` took the canvas as `Math.max(1, maxWidth - left - right)`, which
|
|
48
|
+
* clamps *up*, so a padding of 1 inside a 2-cell request drew 3-cell content
|
|
49
|
+
* rows beside 2-cell blank rows — an open frame the terminal then soft-wraps.
|
|
50
|
+
* Content takes its first cell before padding takes any, for the reason
|
|
51
|
+
* `layoutPanel` gives: a squeeze should cost you the decoration, not the thing
|
|
52
|
+
* being decorated.
|
|
53
|
+
*/
|
|
54
|
+
function layoutPadding(outerWidth, leftWanted, rightWanted) {
|
|
55
|
+
let budget = cellCount(outerWidth);
|
|
56
|
+
const take = (want) => {
|
|
57
|
+
const got = Math.min(want, budget);
|
|
58
|
+
budget -= got;
|
|
59
|
+
return got;
|
|
60
|
+
};
|
|
61
|
+
const firstContentCell = take(1);
|
|
62
|
+
const left = take(leftWanted);
|
|
63
|
+
const right = take(rightWanted);
|
|
64
|
+
return { left, contentWidth: firstContentCell + budget, right };
|
|
65
|
+
}
|
|
66
|
+
/** The full width of a padded row — the division, added back up. */
|
|
67
|
+
function rowWidth(geometry) {
|
|
68
|
+
return geometry.left + geometry.contentWidth + geometry.right;
|
|
16
69
|
}
|
|
17
70
|
export class Padding {
|
|
18
71
|
renderable;
|
|
@@ -32,54 +85,56 @@ export class Padding {
|
|
|
32
85
|
this.style = resolveStyle(options?.style);
|
|
33
86
|
this.expand = options?.expand !== false;
|
|
34
87
|
}
|
|
35
|
-
*render(
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const innerWidth = Math.max(1, maxWidth - horizontalPad);
|
|
88
|
+
*render(rawOptions) {
|
|
89
|
+
const options = withBoundedWidth(rawOptions, this);
|
|
90
|
+
const geometry = layoutPadding(options.maxWidth, this.left, this.right);
|
|
39
91
|
const innerOptions = {
|
|
40
92
|
...options,
|
|
41
|
-
maxWidth:
|
|
93
|
+
maxWidth: geometry.contentWidth,
|
|
42
94
|
};
|
|
43
95
|
const segments = [...this.renderable.render(innerOptions)];
|
|
44
96
|
const lines = Segment.splitLines(segments);
|
|
45
97
|
const style = this.style.isNull ? undefined : this.style;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
98
|
+
// Zero-length spans need no branch to suppress: the wire boundary drops
|
|
99
|
+
// empty segments, so a padding the width could not afford emits nothing.
|
|
100
|
+
const leftPad = new Segment(" ".repeat(geometry.left), style);
|
|
101
|
+
const rightPad = new Segment(" ".repeat(geometry.right), style);
|
|
102
|
+
const blankLine = new Segment(" ".repeat(rowWidth(geometry)), style);
|
|
49
103
|
for (let i = 0; i < this.top; i++) {
|
|
50
|
-
yield
|
|
104
|
+
yield blankLine;
|
|
51
105
|
yield Segment.line();
|
|
52
106
|
}
|
|
53
|
-
// Content lines with left/right padding
|
|
54
107
|
for (const line of lines) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
? innerWidth - lineWidth + this.right
|
|
62
|
-
: this.right;
|
|
63
|
-
if (remaining > 0)
|
|
64
|
-
yield new Segment(" ".repeat(remaining), style);
|
|
108
|
+
yield leftPad;
|
|
109
|
+
// `expand` is the pad half of this call; the crop half is unconditional,
|
|
110
|
+
// because a child that ignored the canvas it was handed (a Table at its
|
|
111
|
+
// natural width) would otherwise burst the padding around it.
|
|
112
|
+
yield* Segment.adjustLineLength(line, geometry.contentWidth, style, this.expand);
|
|
113
|
+
yield rightPad;
|
|
65
114
|
yield Segment.line();
|
|
66
115
|
}
|
|
67
|
-
// Bottom padding
|
|
68
116
|
for (let i = 0; i < this.bottom; i++) {
|
|
69
|
-
yield
|
|
117
|
+
yield blankLine;
|
|
70
118
|
yield Segment.line();
|
|
71
119
|
}
|
|
72
120
|
}
|
|
73
|
-
measure(
|
|
74
|
-
const
|
|
121
|
+
measure(rawOptions) {
|
|
122
|
+
const options = withCellWidth(rawOptions);
|
|
123
|
+
const geometry = layoutPadding(options.maxWidth, this.left, this.right);
|
|
124
|
+
const overhead = geometry.left + geometry.right;
|
|
75
125
|
if (isMeasurable(this.renderable)) {
|
|
76
|
-
const measurement = Measurement.get(options, this.renderable);
|
|
126
|
+
const measurement = Measurement.get({ ...options, maxWidth: geometry.contentWidth }, this.renderable);
|
|
127
|
+
// The ceiling is what was offered, and it wins over what the child asks
|
|
128
|
+
// for: a range whose floor sits above its own ceiling — this returned
|
|
129
|
+
// {8, 8} for three cells of padding inside a two-cell offer — is one no
|
|
130
|
+
// parent layout can divide.
|
|
131
|
+
const maximum = Math.min(options.maxWidth, measurement.maximum + overhead);
|
|
77
132
|
return {
|
|
78
|
-
minimum: measurement.minimum +
|
|
79
|
-
maximum
|
|
133
|
+
minimum: Math.min(measurement.minimum + overhead, maximum),
|
|
134
|
+
maximum,
|
|
80
135
|
};
|
|
81
136
|
}
|
|
82
|
-
return { minimum:
|
|
137
|
+
return { minimum: overhead, maximum: options.maxWidth };
|
|
83
138
|
}
|
|
84
139
|
}
|
|
85
140
|
function resolveStyle(style) {
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"padding.js","sourceRoot":"","sources":["../../src/renderables/padding.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,16 +61,57 @@ export declare class Panel implements Renderable, Measurable {
|
|
|
61
61
|
readonly width: number | undefined;
|
|
62
62
|
readonly padding: [number, number, number, number];
|
|
63
63
|
constructor(content: string | RichText | Renderable, options?: PanelOptions);
|
|
64
|
-
render(
|
|
65
|
-
|
|
64
|
+
render(rawOptions: RenderOptions): Iterable<Segment>;
|
|
65
|
+
/**
|
|
66
|
+
* The wrapped renderable's lines, laid out on a canvas `contentWidth` cells
|
|
67
|
+
* wide. Below width 3 a panel is all frame and the canvas holds no lines —
|
|
68
|
+
* but the render still happens, because a `bottomRightAccessory` thunk
|
|
69
|
+
* fires at every width and reads state this render populates.
|
|
70
|
+
*/
|
|
71
|
+
private _renderContent;
|
|
72
|
+
/**
|
|
73
|
+
* One row of the panel body: frame column, span, frame column.
|
|
74
|
+
*
|
|
75
|
+
* [LAW:single-enforcer] `adjustLineLength` is the one place a width is
|
|
76
|
+
* decided here, and it runs twice against two different widths. The first
|
|
77
|
+
* pass crops content that rendered wider than the canvas it was handed (a
|
|
78
|
+
* `Table` at its natural width, say) back to the canvas, so an oversized
|
|
79
|
+
* child is trimmed rather than allowed to eat the right-hand padding. The
|
|
80
|
+
* second fills the rest of the span, which is the trailing padding and any
|
|
81
|
+
* shortfall in one stroke.
|
|
82
|
+
*/
|
|
83
|
+
private _renderRow;
|
|
84
|
+
measure(rawOptions: RenderOptions): {
|
|
66
85
|
minimum: number;
|
|
67
86
|
maximum: number;
|
|
68
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* The width this panel wants when nothing declared one for it: its content
|
|
90
|
+
* plus its own frame, both read off the division it will render against.
|
|
91
|
+
*
|
|
92
|
+
* [LAW:one-source-of-truth] `measure` and `_getPanelWidth` ask this same
|
|
93
|
+
* question, and each used to work it out itself — the same `layoutPanel`, the
|
|
94
|
+
* same `frameOverhead`, the same `Math.min(maxWidth, maximum + overhead)`,
|
|
95
|
+
* written twice. That is the pattern `_declaredWidth` below was extracted to
|
|
96
|
+
* stop, left standing for the fit case; changing how overhead is derived in
|
|
97
|
+
* one copy is all it would take to put `measure` and `render` back into the
|
|
98
|
+
* disagreement this epic spent itself closing.
|
|
99
|
+
*/
|
|
100
|
+
private _fitRange;
|
|
101
|
+
/**
|
|
102
|
+
* The width this panel was told to be, as a count of cells.
|
|
103
|
+
*
|
|
104
|
+
* [LAW:one-source-of-truth] `measure` and `_getPanelWidth` answer the same
|
|
105
|
+
* question about the same field, so they read it from here. Answered
|
|
106
|
+
* separately, `measure` reported nine cells of content while `render` drew the
|
|
107
|
+
* declared twelve, and the parent that divided space from the range got a
|
|
108
|
+
* panel three cells wider than the share it granted.
|
|
109
|
+
*/
|
|
110
|
+
private get _declaredWidth();
|
|
69
111
|
private _getPanelWidth;
|
|
70
112
|
private _renderTopBorder;
|
|
71
113
|
private _renderBottomBorder;
|
|
72
114
|
private _resolveAccessory;
|
|
73
|
-
private _renderBlankLine;
|
|
74
115
|
static fit(content: string | RichText | Renderable, options?: Omit<PanelOptions, "expand">): Panel;
|
|
75
116
|
}
|
|
76
117
|
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/renderables/panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Panel — a bordered box that wraps content, with optional title and subtitle.
|
|
3
3
|
*/
|
|
4
|
-
import { cellLen, setCellSize, asCellCol } from "../core/cells.js";
|
|
4
|
+
import { cellLen, setCellSize, asCellCol, cellCount } from "../core/cells.js";
|
|
5
5
|
import { Segment } from "../core/segment.js";
|
|
6
6
|
import { Style, NULL_STYLE } from "../core/style.js";
|
|
7
7
|
import { ROUNDED } from "../core/box.js";
|
|
8
8
|
import { Measurement } from "../core/measure.js";
|
|
9
9
|
import { RichText } from "../core/text.js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
import { normalizePadding } from "./padding.js";
|
|
11
|
+
import { isMeasurable, withBoundedWidth, withCellWidth } from "../core/protocol.js";
|
|
12
|
+
function layoutPanel(outerWidth, padding) {
|
|
13
|
+
const [, padRightWanted, , padLeftWanted] = padding;
|
|
14
|
+
// Panel's one division point, and the width reaching it is not always one
|
|
15
|
+
// this file produced: `_getPanelWidth` derives the fit-mode width from
|
|
16
|
+
// `Measurement.get` on an arbitrary `Measurable`, so a renderable reporting a
|
|
17
|
+
// negative maximum arrives here unparsed and reaches `repeat` as a negative
|
|
18
|
+
// count.
|
|
19
|
+
let budget = cellCount(outerWidth);
|
|
20
|
+
const take = (want) => {
|
|
21
|
+
const got = Math.min(want, budget);
|
|
22
|
+
budget -= got;
|
|
23
|
+
return got;
|
|
24
|
+
};
|
|
25
|
+
const left = take(1);
|
|
26
|
+
const right = take(1);
|
|
27
|
+
const firstContentCell = take(1);
|
|
28
|
+
const padLeft = take(padLeftWanted);
|
|
29
|
+
const padRight = take(padRightWanted);
|
|
30
|
+
const contentWidth = firstContentCell + budget;
|
|
31
|
+
return {
|
|
32
|
+
left,
|
|
33
|
+
right,
|
|
34
|
+
padLeft,
|
|
35
|
+
contentWidth,
|
|
36
|
+
padRight,
|
|
37
|
+
spanWidth: padLeft + contentWidth + padRight,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Every cell of a panel that is not content canvas. Read off the geometry
|
|
42
|
+
* rather than recomputed as `2 + padLeft + padRight`, because the two differ
|
|
43
|
+
* exactly where this panel is squeezed: a width that cannot afford its right
|
|
44
|
+
* frame column or its padding does not spend cells on them, and a measurement
|
|
45
|
+
* that assumed it did would report a minimum larger than its own maximum.
|
|
46
|
+
*/
|
|
47
|
+
function frameOverhead(geometry) {
|
|
48
|
+
return geometry.left + geometry.right + geometry.padLeft + geometry.padRight;
|
|
19
49
|
}
|
|
20
50
|
function resolveStyle(style) {
|
|
21
51
|
if (style === undefined)
|
|
@@ -56,92 +86,137 @@ export class Panel {
|
|
|
56
86
|
this.titleStyle = options?.titleStyle === undefined ? undefined : resolveStyle(options.titleStyle);
|
|
57
87
|
this.subtitleStyle = options?.subtitleStyle === undefined ? undefined : resolveStyle(options.subtitleStyle);
|
|
58
88
|
this.width = options?.width;
|
|
59
|
-
this.padding = normalizePadding(options?.padding);
|
|
89
|
+
this.padding = normalizePadding(options?.padding ?? [0, 1, 0, 1]);
|
|
60
90
|
}
|
|
61
|
-
*render(
|
|
91
|
+
*render(rawOptions) {
|
|
92
|
+
const options = withBoundedWidth(rawOptions, this);
|
|
62
93
|
const box = options.asciiOnly ? this.box.substitute({ asciiOnly: true }) : this.box;
|
|
63
94
|
const border = this.borderStyle.isNull ? undefined : this.borderStyle;
|
|
64
95
|
const contentStyle = this.style.isNull ? undefined : this.style;
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
const innerWidth = Math.max(1, panelWidth - 2 - padLeft - padRight); // 2 for border chars
|
|
69
|
-
// Render content
|
|
70
|
-
const innerOptions = {
|
|
71
|
-
...options,
|
|
72
|
-
maxWidth: innerWidth,
|
|
73
|
-
};
|
|
74
|
-
const contentSegments = [...this.renderable.render(innerOptions)];
|
|
75
|
-
const contentLines = Segment.splitLines(contentSegments);
|
|
96
|
+
const geometry = layoutPanel(this._getPanelWidth(options), this.padding);
|
|
97
|
+
const [padTop, , padBottom] = this.padding;
|
|
98
|
+
const contentLines = this._renderContent(options, geometry.contentWidth);
|
|
76
99
|
// Top border (with optional title)
|
|
77
|
-
yield* this._renderTopBorder(box,
|
|
78
|
-
// Top padding
|
|
100
|
+
yield* this._renderTopBorder(box, geometry, border);
|
|
101
|
+
// Top padding — a padding row is a content row whose content is nothing.
|
|
79
102
|
for (let i = 0; i < padTop; i++) {
|
|
80
|
-
yield* this.
|
|
103
|
+
yield* this._renderRow(box, geometry, [], border, contentStyle);
|
|
81
104
|
}
|
|
82
|
-
// Content lines
|
|
83
105
|
for (const line of contentLines) {
|
|
84
|
-
yield
|
|
85
|
-
if (padLeft > 0)
|
|
86
|
-
yield new Segment(" ".repeat(padLeft), contentStyle);
|
|
87
|
-
yield* line;
|
|
88
|
-
// Pad to fill inner width
|
|
89
|
-
const lineWidth = Segment.getLineLength(line);
|
|
90
|
-
const rightPad = innerWidth - lineWidth + padRight;
|
|
91
|
-
if (rightPad > 0)
|
|
92
|
-
yield new Segment(" ".repeat(rightPad), contentStyle);
|
|
93
|
-
yield new Segment(box.right, border);
|
|
94
|
-
yield Segment.line();
|
|
106
|
+
yield* this._renderRow(box, geometry, line, border, contentStyle);
|
|
95
107
|
}
|
|
96
|
-
// Bottom padding
|
|
97
108
|
for (let i = 0; i < padBottom; i++) {
|
|
98
|
-
yield* this.
|
|
109
|
+
yield* this._renderRow(box, geometry, [], border, contentStyle);
|
|
99
110
|
}
|
|
100
111
|
// Bottom border (with optional subtitle)
|
|
101
|
-
yield* this._renderBottomBorder(box,
|
|
112
|
+
yield* this._renderBottomBorder(box, geometry, border);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The wrapped renderable's lines, laid out on a canvas `contentWidth` cells
|
|
116
|
+
* wide. Below width 3 a panel is all frame and the canvas holds no lines —
|
|
117
|
+
* but the render still happens, because a `bottomRightAccessory` thunk
|
|
118
|
+
* fires at every width and reads state this render populates.
|
|
119
|
+
*/
|
|
120
|
+
_renderContent(options, contentWidth) {
|
|
121
|
+
const innerOptions = {
|
|
122
|
+
...options,
|
|
123
|
+
maxWidth: contentWidth,
|
|
124
|
+
};
|
|
125
|
+
const lines = Segment.splitLines([...this.renderable.render(innerOptions)]);
|
|
126
|
+
return contentWidth === 0 ? [] : lines;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* One row of the panel body: frame column, span, frame column.
|
|
130
|
+
*
|
|
131
|
+
* [LAW:single-enforcer] `adjustLineLength` is the one place a width is
|
|
132
|
+
* decided here, and it runs twice against two different widths. The first
|
|
133
|
+
* pass crops content that rendered wider than the canvas it was handed (a
|
|
134
|
+
* `Table` at its natural width, say) back to the canvas, so an oversized
|
|
135
|
+
* child is trimmed rather than allowed to eat the right-hand padding. The
|
|
136
|
+
* second fills the rest of the span, which is the trailing padding and any
|
|
137
|
+
* shortfall in one stroke.
|
|
138
|
+
*/
|
|
139
|
+
*_renderRow(box, geometry, line, border, contentStyle) {
|
|
140
|
+
yield new Segment(box.left.repeat(geometry.left), border);
|
|
141
|
+
const content = Segment.adjustLineLength(line, geometry.contentWidth, contentStyle, false);
|
|
142
|
+
const span = [new Segment(" ".repeat(geometry.padLeft), contentStyle), ...content];
|
|
143
|
+
yield* Segment.adjustLineLength(span, geometry.spanWidth, contentStyle);
|
|
144
|
+
yield new Segment(box.right.repeat(geometry.right), border);
|
|
145
|
+
yield Segment.line();
|
|
146
|
+
}
|
|
147
|
+
measure(rawOptions) {
|
|
148
|
+
const options = withCellWidth(rawOptions);
|
|
149
|
+
const declared = this._declaredWidth;
|
|
150
|
+
if (declared !== undefined) {
|
|
151
|
+
// A declared width is not a ceiling on the content, it is the answer:
|
|
152
|
+
// `_getPanelWidth` returns it before measuring anything, so the panel
|
|
153
|
+
// draws at this width whatever the content wants. Reported with a
|
|
154
|
+
// content-derived floor instead, `{width: 20}` around "hi" offered 100
|
|
155
|
+
// cells answered 6..20 and then drew 20 every time, and a parent
|
|
156
|
+
// dividing space from the floor under-provisioned it.
|
|
157
|
+
const width = Math.min(options.maxWidth, declared);
|
|
158
|
+
return { minimum: width, maximum: width };
|
|
159
|
+
}
|
|
160
|
+
return this._fitRange(options);
|
|
102
161
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
162
|
+
/**
|
|
163
|
+
* The width this panel wants when nothing declared one for it: its content
|
|
164
|
+
* plus its own frame, both read off the division it will render against.
|
|
165
|
+
*
|
|
166
|
+
* [LAW:one-source-of-truth] `measure` and `_getPanelWidth` ask this same
|
|
167
|
+
* question, and each used to work it out itself — the same `layoutPanel`, the
|
|
168
|
+
* same `frameOverhead`, the same `Math.min(maxWidth, maximum + overhead)`,
|
|
169
|
+
* written twice. That is the pattern `_declaredWidth` below was extracted to
|
|
170
|
+
* stop, left standing for the fit case; changing how overhead is derived in
|
|
171
|
+
* one copy is all it would take to put `measure` and `render` back into the
|
|
172
|
+
* disagreement this epic spent itself closing.
|
|
173
|
+
*/
|
|
174
|
+
_fitRange(options) {
|
|
175
|
+
const geometry = layoutPanel(options.maxWidth, this.padding);
|
|
176
|
+
const overhead = frameOverhead(geometry);
|
|
107
177
|
if (isMeasurable(this.renderable)) {
|
|
108
178
|
const innerOptions = {
|
|
109
179
|
...options,
|
|
110
|
-
maxWidth:
|
|
180
|
+
maxWidth: geometry.contentWidth,
|
|
111
181
|
};
|
|
112
182
|
const measurement = Measurement.get(innerOptions, this.renderable);
|
|
183
|
+
const maximum = Math.min(options.maxWidth, measurement.maximum + overhead);
|
|
113
184
|
return {
|
|
114
|
-
minimum: Math.
|
|
115
|
-
maximum
|
|
185
|
+
minimum: Math.min(measurement.minimum + overhead, maximum),
|
|
186
|
+
maximum,
|
|
116
187
|
};
|
|
117
188
|
}
|
|
118
|
-
|
|
189
|
+
// Content that cannot measure itself leaves the panel with nothing to want,
|
|
190
|
+
// so it wants the offer — unbounded included, which `withBoundedWidth`
|
|
191
|
+
// reports rather than turning into a number nobody can defend.
|
|
192
|
+
return { minimum: Math.min(overhead, options.maxWidth), maximum: options.maxWidth };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The width this panel was told to be, as a count of cells.
|
|
196
|
+
*
|
|
197
|
+
* [LAW:one-source-of-truth] `measure` and `_getPanelWidth` answer the same
|
|
198
|
+
* question about the same field, so they read it from here. Answered
|
|
199
|
+
* separately, `measure` reported nine cells of content while `render` drew the
|
|
200
|
+
* declared twelve, and the parent that divided space from the range got a
|
|
201
|
+
* panel three cells wider than the share it granted.
|
|
202
|
+
*/
|
|
203
|
+
get _declaredWidth() {
|
|
204
|
+
return this.width === undefined ? undefined : cellCount(this.width);
|
|
119
205
|
}
|
|
120
206
|
_getPanelWidth(options) {
|
|
121
|
-
|
|
122
|
-
|
|
207
|
+
const declared = this._declaredWidth;
|
|
208
|
+
if (declared !== undefined)
|
|
209
|
+
return Math.min(declared, options.maxWidth);
|
|
123
210
|
if (this.expand)
|
|
124
211
|
return options.maxWidth;
|
|
125
|
-
|
|
126
|
-
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
127
|
-
const borderWidth = 2;
|
|
128
|
-
const horizontalPad = padLeft + padRight;
|
|
129
|
-
if (isMeasurable(this.renderable)) {
|
|
130
|
-
const innerOptions = {
|
|
131
|
-
...options,
|
|
132
|
-
maxWidth: Math.max(1, options.maxWidth - borderWidth - horizontalPad),
|
|
133
|
-
};
|
|
134
|
-
const measurement = Measurement.get(innerOptions, this.renderable);
|
|
135
|
-
return Math.min(options.maxWidth, measurement.maximum + borderWidth + horizontalPad);
|
|
136
|
-
}
|
|
137
|
-
return options.maxWidth;
|
|
212
|
+
return this._fitRange(options).maximum;
|
|
138
213
|
}
|
|
139
|
-
*_renderTopBorder(box,
|
|
140
|
-
const innerBorderWidth =
|
|
214
|
+
*_renderTopBorder(box, geometry, border) {
|
|
215
|
+
const innerBorderWidth = geometry.spanWidth;
|
|
141
216
|
if (!this.title) {
|
|
142
|
-
yield new Segment(box.topLeft, border);
|
|
217
|
+
yield new Segment(box.topLeft.repeat(geometry.left), border);
|
|
143
218
|
yield new Segment(box.top.repeat(innerBorderWidth), border);
|
|
144
|
-
yield new Segment(box.topRight, border);
|
|
219
|
+
yield new Segment(box.topRight.repeat(geometry.right), border);
|
|
145
220
|
yield Segment.line();
|
|
146
221
|
return;
|
|
147
222
|
}
|
|
@@ -151,7 +226,7 @@ export class Panel {
|
|
|
151
226
|
// Title gets its own style when set, else inherits the border style —
|
|
152
227
|
// single source of truth for "what color is the title text in".
|
|
153
228
|
const titleSeg = this.titleStyle ?? border;
|
|
154
|
-
yield new Segment(box.topLeft, border);
|
|
229
|
+
yield new Segment(box.topLeft.repeat(geometry.left), border);
|
|
155
230
|
if (titleWidth >= innerBorderWidth) {
|
|
156
231
|
// Title fills the border. [LAW:one-source-of-truth] cellLen / setCellSize
|
|
157
232
|
// are the cell-width authority — plain .slice would miscount wide chars
|
|
@@ -168,11 +243,11 @@ export class Panel {
|
|
|
168
243
|
if (rightRuleWidth > 0)
|
|
169
244
|
yield new Segment(box.top.repeat(rightRuleWidth), border);
|
|
170
245
|
}
|
|
171
|
-
yield new Segment(box.topRight, border);
|
|
246
|
+
yield new Segment(box.topRight.repeat(geometry.right), border);
|
|
172
247
|
yield Segment.line();
|
|
173
248
|
}
|
|
174
|
-
*_renderBottomBorder(box,
|
|
175
|
-
const innerBorderWidth =
|
|
249
|
+
*_renderBottomBorder(box, geometry, border) {
|
|
250
|
+
const innerBorderWidth = geometry.spanWidth;
|
|
176
251
|
// Resolve the right accessory *now*. Function form evaluates after
|
|
177
252
|
// content has been rendered (Panel.render collects content segments
|
|
178
253
|
// before yielding any borders), so the thunk sees fresh widget state.
|
|
@@ -186,7 +261,7 @@ export class Panel {
|
|
|
186
261
|
const accessoryStyle = accessory instanceof RichText && !accessory.style.isNull
|
|
187
262
|
? accessory.style
|
|
188
263
|
: border;
|
|
189
|
-
yield new Segment(box.bottomLeft, border);
|
|
264
|
+
yield new Segment(box.bottomLeft.repeat(geometry.left), border);
|
|
190
265
|
// Space available for the centered subtitle / rule fill — the accessory
|
|
191
266
|
// (if any) hugs the right edge and the subtitle treats the remainder
|
|
192
267
|
// as its centering canvas.
|
|
@@ -221,7 +296,7 @@ export class Panel {
|
|
|
221
296
|
: accessoryDisplay;
|
|
222
297
|
yield new Segment(fit, accessoryStyle);
|
|
223
298
|
}
|
|
224
|
-
yield new Segment(box.bottomRight, border);
|
|
299
|
+
yield new Segment(box.bottomRight.repeat(geometry.right), border);
|
|
225
300
|
yield Segment.line();
|
|
226
301
|
}
|
|
227
302
|
_resolveAccessory(a) {
|
|
@@ -231,12 +306,6 @@ export class Panel {
|
|
|
231
306
|
return a();
|
|
232
307
|
return a;
|
|
233
308
|
}
|
|
234
|
-
*_renderBlankLine(box, _panelWidth, padLeft, padRight, innerWidth, border, contentStyle) {
|
|
235
|
-
yield new Segment(box.left, border);
|
|
236
|
-
yield new Segment(" ".repeat(padLeft + innerWidth + padRight), contentStyle);
|
|
237
|
-
yield new Segment(box.right, border);
|
|
238
|
-
yield Segment.line();
|
|
239
|
-
}
|
|
240
309
|
// --- Static factory ---
|
|
241
310
|
static fit(content, options) {
|
|
242
311
|
return new Panel(content, { ...options, expand: false });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/renderables/panel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/renderables/panel.ts"],"names":[],"mappings":"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"}
|