@promptctl/rich-js 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +68 -1
  2. package/dist/core/box.d.ts +93 -39
  3. package/dist/core/box.d.ts.map +1 -1
  4. package/dist/core/box.js +348 -490
  5. package/dist/core/box.js.map +1 -1
  6. package/dist/core/color.d.ts.map +1 -1
  7. package/dist/core/color.js +22 -8
  8. package/dist/core/color.js.map +1 -1
  9. package/dist/core/console.d.ts +2 -4
  10. package/dist/core/console.d.ts.map +1 -1
  11. package/dist/core/console.js +35 -24
  12. package/dist/core/console.js.map +1 -1
  13. package/dist/core/highlighter.d.ts +2 -1
  14. package/dist/core/highlighter.d.ts.map +1 -1
  15. package/dist/core/highlighter.js +28 -6
  16. package/dist/core/highlighter.js.map +1 -1
  17. package/dist/{renderables → core}/json.d.ts +8 -3
  18. package/dist/core/json.d.ts.map +1 -0
  19. package/dist/{renderables → core}/json.js +7 -2
  20. package/dist/core/json.js.map +1 -0
  21. package/dist/core/markup.d.ts +6 -7
  22. package/dist/core/markup.d.ts.map +1 -1
  23. package/dist/core/markup.js +124 -32
  24. package/dist/core/markup.js.map +1 -1
  25. package/dist/core/pretty.d.ts +56 -21
  26. package/dist/core/pretty.d.ts.map +1 -1
  27. package/dist/core/pretty.js +210 -116
  28. package/dist/core/pretty.js.map +1 -1
  29. package/dist/core/protocol.d.ts +16 -0
  30. package/dist/core/protocol.d.ts.map +1 -1
  31. package/dist/core/protocol.js +13 -0
  32. package/dist/core/protocol.js.map +1 -1
  33. package/dist/core/segment.d.ts +5 -0
  34. package/dist/core/segment.d.ts.map +1 -1
  35. package/dist/core/segment.js +9 -3
  36. package/dist/core/segment.js.map +1 -1
  37. package/dist/core/strip.d.ts +9 -5
  38. package/dist/core/strip.d.ts.map +1 -1
  39. package/dist/core/strip.js +39 -41
  40. package/dist/core/strip.js.map +1 -1
  41. package/dist/core/style.d.ts +19 -0
  42. package/dist/core/style.d.ts.map +1 -1
  43. package/dist/core/style.js +46 -38
  44. package/dist/core/style.js.map +1 -1
  45. package/dist/core/text.d.ts +102 -4
  46. package/dist/core/text.d.ts.map +1 -1
  47. package/dist/core/text.js +322 -184
  48. package/dist/core/text.js.map +1 -1
  49. package/dist/core/wrap.d.ts +42 -0
  50. package/dist/core/wrap.d.ts.map +1 -0
  51. package/dist/core/wrap.js +128 -0
  52. package/dist/core/wrap.js.map +1 -0
  53. package/dist/index.d.ts +3 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +2 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/renderables/markdown.d.ts +1 -1
  58. package/dist/renderables/markdown.d.ts.map +1 -1
  59. package/dist/renderables/markdown.js +7 -14
  60. package/dist/renderables/markdown.js.map +1 -1
  61. package/dist/renderables/padding.d.ts +1 -1
  62. package/dist/renderables/padding.d.ts.map +1 -1
  63. package/dist/renderables/padding.js +5 -11
  64. package/dist/renderables/padding.js.map +1 -1
  65. package/dist/renderables/panel.d.ts +4 -4
  66. package/dist/renderables/panel.d.ts.map +1 -1
  67. package/dist/renderables/panel.js +39 -39
  68. package/dist/renderables/panel.js.map +1 -1
  69. package/dist/renderables/progress.d.ts +3 -3
  70. package/dist/renderables/progress.d.ts.map +1 -1
  71. package/dist/renderables/progress.js +11 -9
  72. package/dist/renderables/progress.js.map +1 -1
  73. package/dist/renderables/progressBar.d.ts +3 -3
  74. package/dist/renderables/progressBar.d.ts.map +1 -1
  75. package/dist/renderables/progressBar.js +9 -15
  76. package/dist/renderables/progressBar.js.map +1 -1
  77. package/dist/renderables/prompt.js +1 -1
  78. package/dist/renderables/prompt.js.map +1 -1
  79. package/dist/renderables/rule.d.ts +1 -1
  80. package/dist/renderables/rule.d.ts.map +1 -1
  81. package/dist/renderables/rule.js +5 -10
  82. package/dist/renderables/rule.js.map +1 -1
  83. package/dist/renderables/spinner.d.ts +2 -2
  84. package/dist/renderables/spinner.d.ts.map +1 -1
  85. package/dist/renderables/spinner.js +6 -11
  86. package/dist/renderables/spinner.js.map +1 -1
  87. package/dist/renderables/status.d.ts.map +1 -1
  88. package/dist/renderables/status.js +5 -11
  89. package/dist/renderables/status.js.map +1 -1
  90. package/dist/renderables/table.d.ts +54 -16
  91. package/dist/renderables/table.d.ts.map +1 -1
  92. package/dist/renderables/table.js +239 -99
  93. package/dist/renderables/table.js.map +1 -1
  94. package/dist/renderables/traceback.d.ts +1 -1
  95. package/dist/renderables/traceback.d.ts.map +1 -1
  96. package/dist/renderables/traceback.js +9 -8
  97. package/dist/renderables/traceback.js.map +1 -1
  98. package/dist/renderables/tree.d.ts +2 -2
  99. package/dist/renderables/tree.d.ts.map +1 -1
  100. package/dist/renderables/tree.js +16 -22
  101. package/dist/renderables/tree.js.map +1 -1
  102. package/dist/template-bindings/helpers.d.ts.map +1 -1
  103. package/dist/template-bindings/helpers.js +19 -1
  104. package/dist/template-bindings/helpers.js.map +1 -1
  105. package/dist/widgets/button.d.ts.map +1 -1
  106. package/dist/widgets/button.js +4 -5
  107. package/dist/widgets/button.js.map +1 -1
  108. package/dist/widgets/checkbox.d.ts.map +1 -1
  109. package/dist/widgets/checkbox.js +3 -4
  110. package/dist/widgets/checkbox.js.map +1 -1
  111. package/dist/widgets/dropdown.d.ts.map +1 -1
  112. package/dist/widgets/dropdown.js +4 -5
  113. package/dist/widgets/dropdown.js.map +1 -1
  114. package/dist/widgets/focus-manager.d.ts +0 -1
  115. package/dist/widgets/focus-manager.d.ts.map +1 -1
  116. package/dist/widgets/focus-manager.js +3 -7
  117. package/dist/widgets/focus-manager.js.map +1 -1
  118. package/dist/widgets/screen.d.ts.map +1 -1
  119. package/dist/widgets/screen.js +2 -4
  120. package/dist/widgets/screen.js.map +1 -1
  121. package/dist/widgets/slider.d.ts.map +1 -1
  122. package/dist/widgets/slider.js +7 -8
  123. package/dist/widgets/slider.js.map +1 -1
  124. package/dist/widgets/text-input.d.ts.map +1 -1
  125. package/dist/widgets/text-input.js +5 -6
  126. package/dist/widgets/text-input.js.map +1 -1
  127. package/dist/widgets/toggle.d.ts.map +1 -1
  128. package/dist/widgets/toggle.js +4 -5
  129. package/dist/widgets/toggle.js.map +1 -1
  130. package/dist/widgets/widget-base.d.ts +3 -3
  131. package/dist/widgets/widget-base.d.ts.map +1 -1
  132. package/dist/widgets/widget-base.js +4 -6
  133. package/dist/widgets/widget-base.js.map +1 -1
  134. package/package.json +26 -10
  135. package/dist/renderables/json.d.ts.map +0 -1
  136. package/dist/renderables/json.js.map +0 -1
  137. package/dist/renderables/pretty.d.ts +0 -29
  138. package/dist/renderables/pretty.d.ts.map +0 -1
  139. package/dist/renderables/pretty.js +0 -141
  140. package/dist/renderables/pretty.js.map +0 -1
  141. package/dist/themes/paletteResolver.d.ts +0 -35
  142. package/dist/themes/paletteResolver.d.ts.map +0 -1
  143. package/dist/themes/paletteResolver.js +0 -88
  144. package/dist/themes/paletteResolver.js.map +0 -1
  145. package/dist/widgets/host-stream.d.ts +0 -31
  146. package/dist/widgets/host-stream.d.ts.map +0 -1
  147. package/dist/widgets/host-stream.js +0 -36
  148. package/dist/widgets/host-stream.js.map +0 -1
  149. package/dist/widgets/terminal-host.d.ts +0 -138
  150. package/dist/widgets/terminal-host.d.ts.map +0 -1
  151. package/dist/widgets/terminal-host.js +0 -127
  152. package/dist/widgets/terminal-host.js.map +0 -1
@@ -7,13 +7,32 @@
7
7
  * are core primitives only. `Console.print` accepts `unknown` and must turn any
8
8
  * of it into something renderable, so the formatter has to sit where `console`
9
9
  * can reach it without an upward edge. [LAW:one-way-deps]
10
+ *
11
+ * Two traversals share this file, and the split is the whole design. `_format`
12
+ * lays a value out across lines; `_oneLine` answers only "does this fit on one
13
+ * line, and if so what is it?". They meet at `_shape`, which describes a
14
+ * container without committing to either layout. One traversal answering both
15
+ * questions is what made this formatter exponential: every child was rendered
16
+ * once to probe it and again to place it, so a node at depth d was visited 2^d
17
+ * times.
10
18
  */
11
19
  import { cellLen } from "./cells.js";
12
- import { Style } from "./style.js";
13
20
  import { RichText } from "./text.js";
14
21
  import { ReprHighlighter } from "./highlighter.js";
15
22
  const reprHighlighter = new ReprHighlighter();
16
23
  const rootFrame = (maxWidth) => ({ inset: 0, level: 0, maxWidth, open: new WeakSet() });
24
+ /**
25
+ * The text, when it is a single line no wider than `budget` — otherwise `null`.
26
+ *
27
+ * The one definition of "fits on one line" in this file, and it has to name
28
+ * both halves: `cellLen` scores a newline as zero cells, so a width check alone
29
+ * accepted multi-line text as compact. That is how a `Map` nested in an object
30
+ * used to render as `{ m: Map {` — a one-line object with an expansion wedged
31
+ * inside it and the closing brace back at column 0.
32
+ */
33
+ function fitOneLine(text, budget) {
34
+ return text.includes("\n") || cellLen(text) > budget ? null : text;
35
+ }
17
36
  /**
18
37
  * The elements of an indexed sequence, or `null` for anything that isn't one.
19
38
  *
@@ -90,6 +109,10 @@ function describesItself(value) {
90
109
  (typeof asRecord.toString === "function" &&
91
110
  asRecord.toString !== Object.prototype.toString));
92
111
  }
112
+ /** What joins a container's positions on one line. Its width is charged for, so it is named once. */
113
+ const SEPARATOR = ", ";
114
+ /** The marker for positions the bound dropped, or nothing when it dropped none. */
115
+ const elided = (dropped) => dropped > 0 ? [{ head: `... +${dropped}`, holes: [] }] : [];
93
116
  export class Pretty {
94
117
  data;
95
118
  indent;
@@ -128,23 +151,14 @@ export class Pretty {
128
151
  return { minimum: 1, maximum: Math.min(max, _options.maxWidth) };
129
152
  }
130
153
  /**
131
- * Where the traversal is, in the two senses that differ.
132
- *
133
- * `inset` is how far the output is indented; it resets to 0 whenever a value
134
- * is measured for a single line, because a compact form carries no
135
- * indentation. `level` is how deep in the data we are, and only ever
136
- * increases. Collapsing the two into one number is the mistake this pair
137
- * exists to make unrepresentable: the depth cap read the layout number, so
138
- * every compact probe reset it and the cap never fired at all.
154
+ * The text a value shows without being reflected on, or `null` when it is an
155
+ * object and the shape arms own it.
139
156
  *
140
- * `open` holds the objects between the root and here, not every object seen.
141
- * A value joins on the way down and leaves on the way back up, so a cycle is
142
- * caught while a DAG — one object reached twice through sibling positions —
143
- * still renders both times. A never-emptied set would call the second sibling
144
- * circular. [LAW:no-ambient-temporal-coupling] the traversal owns its state
145
- * explicitly; a field on the instance would leak between renders.
157
+ * Every kind answered here renders the same wherever it sits — no
158
+ * indentation, no width to fit — which is why one method serves both
159
+ * traversals.
146
160
  */
147
- _format(value, at) {
161
+ _scalar(value) {
148
162
  if (value === null)
149
163
  return "null";
150
164
  if (value === undefined)
@@ -159,7 +173,6 @@ export class Pretty {
159
173
  }
160
174
  case "number":
161
175
  case "bigint":
162
- return String(value);
163
176
  case "boolean":
164
177
  return String(value);
165
178
  case "symbol":
@@ -167,134 +180,215 @@ export class Pretty {
167
180
  case "function":
168
181
  return `[Function: ${value.name || "anonymous"}]`;
169
182
  }
170
- if (at.open.has(value))
183
+ return null;
184
+ }
185
+ /**
186
+ * A container, or the text standing in for one that is empty or past the
187
+ * depth cap.
188
+ *
189
+ * `positions` is a thunk because both of those answers are reachable from
190
+ * `size` alone, and reaching a position is not free: a `Map` or `Set` reaches
191
+ * its own through an iterator, so enumerating one only to elide it drains a
192
+ * container to print `Set {...}`. `size` also says how many positions were
193
+ * dropped, which is where the elision marker comes from — one derivation, so
194
+ * the count and the bound cannot disagree.
195
+ */
196
+ _container(open, close, pad, size, level, positions) {
197
+ if (size === 0)
198
+ return { kind: "text", text: open + close };
199
+ if (level >= this.maxDepth)
200
+ return { kind: "text", text: open + "..." + close };
201
+ const slots = positions();
202
+ return { kind: "container", open, close, pad, slots: [...slots, ...elided(size - slots.length)] };
203
+ }
204
+ /**
205
+ * The brackets and positions of an object, layout-free. See `Shape`.
206
+ *
207
+ * `bound` is the most positions the caller could ever use. Laying out passes
208
+ * `Infinity`, because it prints every position it is handed. A probe passes
209
+ * what is left of its line, which is already more positions than a fitting
210
+ * one could hold — `SEPARATOR` charges two cells apiece, so a container with
211
+ * more positions than `budget` overruns however narrow its contents are.
212
+ * Reaching past it only ever feeds a join that returns `null`, and reaching a
213
+ * position is what drains a `Map` or `Set`.
214
+ */
215
+ _shape(value, level, bound) {
216
+ // Clamped because a probe's budget goes negative once a line is overrun,
217
+ // and `slice` reads a negative end as counting from the far end — it would
218
+ // keep all but the last few keys where the other arms take none.
219
+ const cap = Math.max(0, Math.min(this.maxLength ?? Infinity, bound));
220
+ const elements = indexedElements(value);
221
+ if (elements !== null) {
222
+ return this._container("[", "]", "", elements.length, level, () => {
223
+ // Positions rather than values: each index is read in its own slot, so
224
+ // one throwing accessor costs its own slot, not the whole sequence.
225
+ const shown = Math.min(elements.length, cap);
226
+ return Array.from({ length: shown }, (_, i) => ({
227
+ head: "",
228
+ holes: [{ read: () => elements[i], tail: "" }],
229
+ }));
230
+ });
231
+ }
232
+ if (value instanceof Map) {
233
+ return this._container("Map {", "}", " ", value.size, level, () => take(value.entries(), cap).map(([k, v]) => ({
234
+ head: "",
235
+ holes: [{ read: () => k, tail: " => " }, { read: () => v, tail: "" }],
236
+ })));
237
+ }
238
+ if (value instanceof Set) {
239
+ return this._container("Set {", "}", " ", value.size, level, () => take(value, cap).map((v) => ({
240
+ head: "",
241
+ holes: [{ read: () => v, tail: "" }],
242
+ })));
243
+ }
244
+ // Objects that answer the display question themselves. Sits below the
245
+ // Array/Map/Set arms deliberately: an array also overrides `toString`, but
246
+ // "1,2,3" is a poorer answer than the structural form above.
247
+ if (describesItself(value))
248
+ return { kind: "text", text: String(value) };
249
+ // Plain objects — no self-description, so the keys are the whole story.
250
+ const obj = value;
251
+ const keys = Object.keys(obj);
252
+ return this._container("{", "}", " ", keys.length, level, () => keys.slice(0, cap).map((k) => ({
253
+ head: `${k}: `,
254
+ holes: [{ read: () => obj[k], tail: "" }],
255
+ })));
256
+ }
257
+ /** The laid-out form of a value, expanded across lines wherever one line will not do. */
258
+ _format(value, at) {
259
+ const scalar = this._scalar(value);
260
+ if (scalar !== null)
261
+ return scalar;
262
+ const object = value;
263
+ if (at.open.has(object))
171
264
  return "[Circular]";
172
- at.open.add(value);
265
+ at.open.add(object);
173
266
  try {
174
- return this._formatObject(value, at);
267
+ return this._formatObject(object, at);
175
268
  }
176
269
  catch (error) {
177
270
  // The container's *shape* would not be read — `Object.keys`, an iterator,
178
271
  // `toString`. Nothing can be enumerated, so the whole container degrades;
179
- // a value that merely would not be read degrades alone, in `_at`.
272
+ // a value that merely would not be read degrades alone, in its own slot.
180
273
  return threw(error);
181
274
  }
182
275
  finally {
183
- at.open.delete(value);
184
- }
185
- }
186
- /**
187
- * One position's value, or the marker for why reading it failed.
188
- *
189
- * A key and an index are the same job — read one slot of a container someone
190
- * else built — so they share one method rather than two that must agree.
191
- * [LAW:one-type-per-behavior] This is also the read that costs the least when
192
- * it fails: neighbours are unaffected, so `{ a: 1, b: [Threw: …], c: 3 }`
193
- * still shows everything that could be read.
194
- */
195
- _at(container, key, at) {
196
- try {
197
- return this._format(container[key], at);
198
- }
199
- catch (error) {
200
- return threw(error);
276
+ at.open.delete(object);
201
277
  }
202
278
  }
203
279
  /** The arms for a non-null object, with `value` already on the open path. */
204
280
  _formatObject(value, at) {
205
- const { maxWidth, open } = at;
281
+ const shape = this._shape(value, at.level, Infinity);
282
+ if (shape.kind === "text")
283
+ return shape.text;
206
284
  const indentStr = " ".repeat(this.indent * at.inset);
285
+ if (!this.expandAll) {
286
+ const compact = this._joinOneLine(shape, {
287
+ level: at.level + 1,
288
+ budget: at.maxWidth - cellLen(indentStr),
289
+ open: at.open,
290
+ });
291
+ if (compact !== null)
292
+ return compact;
293
+ }
207
294
  const innerIndent = " ".repeat(this.indent * (at.inset + 1));
208
- const deeper = { inset: at.inset + 1, level: at.level + 1, maxWidth, open };
209
- const onOneLine = { inset: 0, level: at.level + 1, maxWidth, open };
210
- const elements = indexedElements(value);
211
- if (elements !== null) {
212
- if (elements.length === 0)
213
- return "[]";
214
- if (at.level >= this.maxDepth)
215
- return "[...]";
216
- // Positions rather than values: each index is read through `_at`, so one
217
- // throwing accessor costs its own slot instead of the whole sequence.
218
- const shown = Math.min(elements.length, this.maxLength ?? elements.length);
219
- const positions = Array.from({ length: shown }, (_, i) => i);
220
- const remaining = elements.length - shown;
221
- // Try compact first
222
- if (!this.expandAll) {
223
- const pieces = positions.map((i) => this._at(elements, i, onOneLine));
224
- if (remaining > 0)
225
- pieces.push(`... +${remaining}`);
226
- const compact = "[" + pieces.join(", ") + "]";
227
- if (cellLen(indentStr + compact) <= maxWidth)
228
- return compact;
295
+ const deeper = { inset: at.inset + 1, level: at.level + 1, maxWidth: at.maxWidth, open: at.open };
296
+ const parts = shape.slots.map((slot) => innerIndent + this._expandSlot(slot, deeper));
297
+ return shape.open + "\n" + parts.join(",\n") + "\n" + indentStr + shape.close;
298
+ }
299
+ /** One position, with every value in it laid out. */
300
+ _expandSlot(slot, at) {
301
+ let out = slot.head;
302
+ for (const hole of slot.holes) {
303
+ // This is the read that costs the least when it fails: neighbours are
304
+ // unaffected, so `{ a: 1, b: [Threw: …], c: 3 }` still shows everything
305
+ // that could be read.
306
+ try {
307
+ out += this._format(hole.read(), at);
308
+ }
309
+ catch (error) {
310
+ out += threw(error);
229
311
  }
230
- const parts = positions.map((i) => innerIndent + this._at(elements, i, deeper));
231
- if (remaining > 0)
232
- parts.push(innerIndent + `... +${remaining}`);
233
- return "[\n" + parts.join(",\n") + "\n" + indentStr + "]";
312
+ out += hole.tail;
234
313
  }
235
- if (value instanceof Map) {
236
- if (value.size === 0)
237
- return "Map {}";
238
- if (at.level >= this.maxDepth)
239
- return "Map {...}";
240
- const items = take(value.entries(), this.maxLength ?? Infinity);
241
- const parts = items.map(([k, v]) => innerIndent + this._format(k, deeper) + " => " + this._format(v, deeper));
242
- const dropped = value.size - items.length;
243
- if (dropped > 0)
244
- parts.push(innerIndent + `... +${dropped}`);
245
- return "Map {\n" + parts.join(",\n") + "\n" + indentStr + "}";
314
+ return out;
315
+ }
316
+ /** The one-line form of a value, or `null` when it will not fit `at.budget`. */
317
+ _oneLine(value, at) {
318
+ const scalar = this._scalar(value);
319
+ if (scalar !== null)
320
+ return fitOneLine(scalar, at.budget);
321
+ const object = value;
322
+ if (at.open.has(object))
323
+ return fitOneLine("[Circular]", at.budget);
324
+ at.open.add(object);
325
+ try {
326
+ const shape = this._shape(object, at.level, at.budget);
327
+ if (shape.kind === "text")
328
+ return fitOneLine(shape.text, at.budget);
329
+ return this._joinOneLine(shape, { level: at.level + 1, budget: at.budget, open: at.open });
246
330
  }
247
- if (value instanceof Set) {
248
- if (value.size === 0)
249
- return "Set {}";
250
- if (at.level >= this.maxDepth)
251
- return "Set {...}";
252
- const items = take(value, this.maxLength ?? Infinity);
253
- const parts = items.map((v) => innerIndent + this._format(v, deeper));
254
- const dropped = value.size - items.length;
255
- if (dropped > 0)
256
- parts.push(innerIndent + `... +${dropped}`);
257
- return "Set {\n" + parts.join(",\n") + "\n" + indentStr + "}";
331
+ catch (error) {
332
+ return fitOneLine(threw(error), at.budget);
258
333
  }
259
- // Objects that answer the display question themselves. Sits below the
260
- // Array/Map/Set arms deliberately: an array also overrides `toString`, but
261
- // "1,2,3" is a poorer answer than the structural form above.
262
- if (describesItself(value))
263
- return String(value);
264
- // Plain objects — no self-description, so the keys are the whole story.
265
- {
266
- const obj = value;
267
- const keys = Object.keys(obj);
268
- if (keys.length === 0)
269
- return "{}";
270
- if (at.level >= this.maxDepth)
271
- return "{...}";
272
- const items = this.maxLength !== undefined ? keys.slice(0, this.maxLength) : keys;
273
- const remaining = this.maxLength !== undefined ? Math.max(0, keys.length - this.maxLength) : 0;
274
- // Try compact
275
- if (!this.expandAll) {
276
- const pieces = items.map((k) => `${k}: ${this._at(obj, k, onOneLine)}`);
277
- if (remaining > 0)
278
- pieces.push(`... +${remaining}`);
279
- const compact = "{ " + pieces.join(", ") + " }";
280
- if (cellLen(indentStr + compact) <= maxWidth)
281
- return compact;
334
+ finally {
335
+ at.open.delete(object);
336
+ }
337
+ }
338
+ /**
339
+ * A container's positions on one line, or `null` as soon as they overrun.
340
+ *
341
+ * The budget is spent as it goes and each position is asked for only what is
342
+ * left, so a subtree that has already outgrown the line is abandoned where it
343
+ * outgrew it rather than formatted in full and then measured.
344
+ *
345
+ * The brackets are charged before anything is read, and that ordering is what
346
+ * bounds the traversal: a budget checked only against the finished text still
347
+ * reads the whole subtree to produce text it then throws away. Charged first,
348
+ * every level costs at least the two cells of its own brackets, so a probe
349
+ * descends at most `budget / 2` levels however deep the data goes.
350
+ */
351
+ _joinOneLine(shape, at) {
352
+ let used = cellLen(shape.open) + cellLen(shape.close) + 2 * cellLen(shape.pad);
353
+ if (used > at.budget)
354
+ return null;
355
+ const pieces = [];
356
+ for (const slot of shape.slots) {
357
+ used += pieces.length > 0 ? cellLen(SEPARATOR) : 0;
358
+ const piece = this._slotOneLine(slot, { ...at, budget: at.budget - used });
359
+ if (piece === null)
360
+ return null;
361
+ used += cellLen(piece);
362
+ pieces.push(piece);
363
+ }
364
+ return shape.open + shape.pad + pieces.join(SEPARATOR) + shape.pad + shape.close;
365
+ }
366
+ /** One position on one line, or `null` when any value in it will not fit. */
367
+ _slotOneLine(slot, at) {
368
+ let out = slot.head;
369
+ for (const hole of slot.holes) {
370
+ const left = at.budget - cellLen(out);
371
+ let text;
372
+ try {
373
+ text = this._oneLine(hole.read(), { ...at, budget: left });
374
+ }
375
+ catch (error) {
376
+ text = fitOneLine(threw(error), left);
282
377
  }
283
- const parts = items.map((k) => innerIndent + `${k}: ${this._at(obj, k, deeper)}`);
284
- if (remaining > 0)
285
- parts.push(innerIndent + `... +${remaining}`);
286
- return "{\n" + parts.join(",\n") + "\n" + indentStr + "}";
378
+ if (text === null)
379
+ return null;
380
+ out += text + hole.tail;
287
381
  }
382
+ return fitOneLine(out, at.budget);
288
383
  }
289
384
  _addIndentGuides(text) {
290
- const guideStyle = Style.parse("repr.indent");
291
385
  const lines = text.plain.split("\n");
292
386
  let offset = 0;
293
387
  for (const line of lines) {
294
388
  const leadingSpaces = line.length - line.trimStart().length;
295
389
  for (let i = 0; i < leadingSpaces; i += this.indent) {
296
390
  if (i + offset < text.length) {
297
- text.stylize(guideStyle, offset + i, offset + i + 1);
391
+ text.stylize("repr.indent", offset + i, offset + i + 1);
298
392
  }
299
393
  }
300
394
  offset += line.length + 1; // +1 for newline
@@ -1 +1 @@
1
- {"version":3,"file":"pretty.js","sourceRoot":"","sources":["../../src/core/pretty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pretty.js","sourceRoot":"","sources":["../../src/core/pretty.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * [LAW:one-source-of-truth] These interfaces are the single authority for the rendering contract.
4
4
  */
5
5
  import type { Segment } from "./segment.js";
6
+ import { type Style, type Theme } from "./style.js";
6
7
  export interface RenderOptions {
7
8
  /**
8
9
  * The cells this renderable may occupy. A count of cells, so a non-negative
@@ -24,7 +25,22 @@ export interface RenderOptions {
24
25
  noWrap?: boolean;
25
26
  highlight?: unknown;
26
27
  markup?: unknown;
28
+ /**
29
+ * The names a style string may use. A `Console` passes its own; absent, the
30
+ * built-in defaults apply. Read it through `getStyle` rather than directly.
31
+ */
32
+ theme?: Theme;
27
33
  }
34
+ /**
35
+ * The style a `string | Style` stands for in this render.
36
+ *
37
+ * [LAW:single-enforcer] Every renderable resolves a style name here, at render
38
+ * time, because only the render knows whose theme it is drawing for. Resolved
39
+ * when a renderable was built instead, a name was fixed to the built-in
40
+ * defaults before any `Console` could offer its theme, and `new Console({
41
+ * theme })` changed nothing.
42
+ */
43
+ export declare function getStyle(options: RenderOptions, style: string | Style): Style;
28
44
  /**
29
45
  * The options a renderable should work from: the caller's, with `maxWidth`
30
46
  * parsed into an actual count of cells.
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAEnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,UAAU,GACf,aAAa,CAcf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAO5D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAO5D"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAiB,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAE7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAEnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,UAAU,GACf,aAAa,CAcf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAO5D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAO5D"}
@@ -3,6 +3,19 @@
3
3
  * [LAW:one-source-of-truth] These interfaces are the single authority for the rendering contract.
4
4
  */
5
5
  import { cellCount } from "./cells.js";
6
+ import { DEFAULT_THEME } from "./style.js";
7
+ /**
8
+ * The style a `string | Style` stands for in this render.
9
+ *
10
+ * [LAW:single-enforcer] Every renderable resolves a style name here, at render
11
+ * time, because only the render knows whose theme it is drawing for. Resolved
12
+ * when a renderable was built instead, a name was fixed to the built-in
13
+ * defaults before any `Console` could offer its theme, and `new Console({
14
+ * theme })` changed nothing.
15
+ */
16
+ export function getStyle(options, style) {
17
+ return (options.theme ?? DEFAULT_THEME).resolve(style);
18
+ }
6
19
  /**
7
20
  * The options a renderable should work from: the caller's, with `maxWidth`
8
21
  * parsed into an actual count of cells.
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyBvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAsB,EACtB,IAAgB;IAEhB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAClB,yEAAyE;YACvE,yEAAyE;YACzE,oEAAoE;YACpE,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AACrD,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,QAAQ,IAAI,GAAG;QACf,OAAQ,GAAkB,CAAC,MAAM,KAAK,UAAU,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,SAAS,IAAI,GAAG;QAChB,OAAQ,GAAkB,CAAC,OAAO,KAAK,UAAU,CAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAA0B,MAAM,YAAY,CAAC;AA8BnE;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAsB,EAAE,KAAqB;IACpE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAsB,EACtB,IAAgB;IAEhB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAClB,yEAAyE;YACvE,yEAAyE;YACzE,oEAAoE;YACpE,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AACrD,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,QAAQ,IAAI,GAAG;QACf,OAAQ,GAAkB,CAAC,MAAM,KAAK,UAAU,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,SAAS,IAAI,GAAG;QAChB,OAAQ,GAAkB,CAAC,OAAO,KAAK,UAAU,CAClD,CAAC;AACJ,CAAC"}
@@ -72,6 +72,11 @@ export declare class Segment {
72
72
  * running its guides into the next row; rebuilt to accumulate lines, it
73
73
  * dropped the zero-width-but-present line `RichText` emits at an offer of 0,
74
74
  * and a row split rendered nothing at all. A crop shortens; it does not count.
75
+ *
76
+ * A wide glyph the edge cuts through leaves a space in the cell it would have
77
+ * half-filled, so a cropped line still reaches the edge — the reference's
78
+ * `set_cell_size`, which `splitText` already is. An unbounded `width` crops
79
+ * nothing, and a segment the crop did not change leaves as itself.
75
80
  */
76
81
  static cropLines(segments: Iterable<Segment>, width: number): Iterable<Segment>;
77
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/core/segment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/core/segment.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Segment — the atomic rendering unit. Every piece of styled terminal output
3
3
  * is represented as a Segment: (text, style?, control?).
4
4
  */
5
- import { cellLen, cellFit, splitText, asCellCol } from "./cells.js";
5
+ import { cellLen, splitText, asCellCol } from "./cells.js";
6
6
  // --- ControlType ---
7
7
  export var ControlType;
8
8
  (function (ControlType) {
@@ -175,6 +175,11 @@ export class Segment {
175
175
  * running its guides into the next row; rebuilt to accumulate lines, it
176
176
  * dropped the zero-width-but-present line `RichText` emits at an offer of 0,
177
177
  * and a row split rendered nothing at all. A crop shortens; it does not count.
178
+ *
179
+ * A wide glyph the edge cuts through leaves a space in the cell it would have
180
+ * half-filled, so a cropped line still reaches the edge — the reference's
181
+ * `set_cell_size`, which `splitText` already is. An unbounded `width` crops
182
+ * nothing, and a segment the crop did not change leaves as itself.
178
183
  */
179
184
  static *cropLines(segments, width) {
180
185
  const cap = Math.max(0, width);
@@ -188,11 +193,12 @@ export class Segment {
188
193
  for (let i = 0; i < parts.length; i++) {
189
194
  if (i > 0)
190
195
  used = 0;
191
- const piece = cellFit(parts[i], asCellCol(cap - used));
196
+ const [piece] = splitText(parts[i], asCellCol(cap - used));
192
197
  used += cellLen(piece);
193
198
  parts[i] = piece;
194
199
  }
195
- yield new Segment(parts.join("\n"), segment.style);
200
+ const cropped = parts.join("\n");
201
+ yield cropped === segment.text ? segment : new Segment(cropped, segment.style);
196
202
  }
197
203
  }
198
204
  /**