@opentui/core 0.1.101 → 0.1.103

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/index.js CHANGED
@@ -6,11 +6,9 @@ import {
6
6
  ArrowRenderable,
7
7
  BloomEffect,
8
8
  Box,
9
- BoxRenderable,
10
9
  CRTRollingBarEffect,
11
10
  CloudsEffect,
12
11
  Code,
13
- CodeRenderable,
14
12
  DEUTERANOPIA_COMP_MATRIX,
15
13
  DEUTERANOPIA_SIM_MATRIX,
16
14
  DiffRenderable,
@@ -31,7 +29,6 @@ import {
31
29
  PROTANOPIA_COMP_MATRIX,
32
30
  PROTANOPIA_SIM_MATRIX,
33
31
  RainbowTextEffect,
34
- RootTextNodeRenderable,
35
32
  SEPIA_MATRIX,
36
33
  SOLARIZATION_MATRIX,
37
34
  SYNTHWAVE_MATRIX,
@@ -44,7 +41,6 @@ import {
44
41
  SliderRenderable,
45
42
  SlotRegistry,
46
43
  SlotRenderable,
47
- SyntaxStyle,
48
44
  TECHNICOLOR_MATRIX,
49
45
  TRITANOPIA_COMP_MATRIX,
50
46
  TRITANOPIA_SIM_MATRIX,
@@ -52,10 +48,6 @@ import {
52
48
  TabSelectRenderable,
53
49
  TabSelectRenderableEvents,
54
50
  Text,
55
- TextBufferRenderable,
56
- TextBufferView,
57
- TextNodeRenderable,
58
- TextRenderable,
59
51
  TextTableRenderable,
60
52
  TextareaRenderable,
61
53
  TimeToFirstDrawRenderable,
@@ -70,16 +62,14 @@ import {
70
62
  applyNoise,
71
63
  applySaturation,
72
64
  applyScanlines,
73
- convertThemeToStyles,
74
65
  createCoreSlotRegistry,
75
66
  createSlotRegistry,
76
67
  createTimeline,
77
68
  engine,
78
- isTextNodeRenderable,
79
69
  registerCorePlugin,
80
70
  resolveCoreSlot,
81
71
  vstyles
82
- } from "./index-ekbq0zm9.js";
72
+ } from "./index-gw3ynrc0.js";
83
73
  import {
84
74
  ASCIIFontSelectionHelper,
85
75
  ATTRIBUTE_BASE_BITS,
@@ -87,9 +77,15 @@ import {
87
77
  BaseRenderable,
88
78
  BorderCharArrays,
89
79
  BorderChars,
80
+ BoxRenderable,
81
+ COLOR_TAG_DEFAULT,
82
+ COLOR_TAG_RGB,
90
83
  CliRenderEvents,
91
84
  CliRenderer,
85
+ CodeRenderable,
92
86
  ConsolePosition,
87
+ DEFAULT_BACKGROUND_RGB,
88
+ DEFAULT_FOREGROUND_RGB,
93
89
  DataPathsManager,
94
90
  DebugOverlayCorner,
95
91
  EditBuffer,
@@ -114,17 +110,24 @@ import {
114
110
  RenderableEvents,
115
111
  RendererControlState,
116
112
  RootRenderable,
113
+ RootTextNodeRenderable,
117
114
  Selection,
118
115
  StdinParser,
119
116
  StyledText,
117
+ SyntaxStyle,
120
118
  SystemClock,
121
119
  TargetChannel,
122
120
  TerminalConsole,
123
121
  TerminalPalette,
124
122
  TextAttributes,
125
123
  TextBuffer,
124
+ TextBufferRenderable,
125
+ TextBufferView,
126
+ TextNodeRenderable,
127
+ TextRenderable,
126
128
  TreeSitterClient,
127
129
  addDefaultParsers,
130
+ ansi256IndexToRgb,
128
131
  attributesWithLink,
129
132
  basenameToFiletype,
130
133
  bg,
@@ -150,15 +153,18 @@ import {
150
153
  brightWhite,
151
154
  brightYellow,
152
155
  buildKittyKeyboardFlags,
156
+ buildTerminalPaletteSignature,
153
157
  capture,
154
158
  clearEnvCache,
155
159
  convertGlobalToLocalSelection,
160
+ convertThemeToStyles,
156
161
  coordinateToCharacterIndex,
157
162
  createCliRenderer,
158
163
  createExtmarksController,
159
164
  createTerminalPalette,
160
165
  createTextAttributes,
161
166
  cyan,
167
+ decodeColorTag,
162
168
  decodePasteBytes,
163
169
  delegate,
164
170
  detectLinks,
@@ -189,6 +195,7 @@ import {
189
195
  isEditBufferRenderable,
190
196
  isRenderable,
191
197
  isStyledText,
198
+ isTextNodeRenderable,
192
199
  isVNode,
193
200
  isValidBorderStyle,
194
201
  italic,
@@ -198,6 +205,9 @@ import {
198
205
  maybeMakeRenderable,
199
206
  measureText,
200
207
  nonAlphanumericKeys,
208
+ normalizeColorValue,
209
+ normalizeIndexedColorIndex,
210
+ normalizeTerminalPalette,
201
211
  parseAlign,
202
212
  parseAlignItems,
203
213
  parseBorderStyle,
@@ -236,7 +246,7 @@ import {
236
246
  white,
237
247
  wrapWithDelegates,
238
248
  yellow
239
- } from "./index-xsfpee0k.js";
249
+ } from "./index-4pvh4sbk.js";
240
250
  export {
241
251
  yellow,
242
252
  wrapWithDelegates,
@@ -280,6 +290,9 @@ export {
280
290
  parseBorderStyle,
281
291
  parseAlignItems,
282
292
  parseAlign,
293
+ normalizeTerminalPalette,
294
+ normalizeIndexedColorIndex,
295
+ normalizeColorValue,
283
296
  nonAlphanumericKeys,
284
297
  measureText,
285
298
  maybeMakeRenderable,
@@ -319,6 +332,7 @@ export {
319
332
  detectLinks,
320
333
  delegate,
321
334
  decodePasteBytes,
335
+ decodeColorTag,
322
336
  cyan,
323
337
  createTimeline,
324
338
  createTextAttributes,
@@ -332,6 +346,7 @@ export {
332
346
  convertGlobalToLocalSelection,
333
347
  clearEnvCache,
334
348
  capture,
349
+ buildTerminalPaletteSignature,
335
350
  buildKittyKeyboardFlags,
336
351
  brightYellow,
337
352
  brightWhite,
@@ -365,6 +380,7 @@ export {
365
380
  applyChromaticAberration,
366
381
  applyBrightness,
367
382
  applyAsciiArt,
383
+ ansi256IndexToRgb,
368
384
  addDefaultParsers,
369
385
  exports_src as Yoga,
370
386
  VignetteEffect,
@@ -452,6 +468,8 @@ export {
452
468
  DataPathsManager,
453
469
  DEUTERANOPIA_SIM_MATRIX,
454
470
  DEUTERANOPIA_COMP_MATRIX,
471
+ DEFAULT_FOREGROUND_RGB,
472
+ DEFAULT_BACKGROUND_RGB,
455
473
  ConsolePosition,
456
474
  CodeRenderable,
457
475
  Code,
@@ -459,6 +477,8 @@ export {
459
477
  CliRenderer,
460
478
  CliRenderEvents,
461
479
  CRTRollingBarEffect,
480
+ COLOR_TAG_RGB,
481
+ COLOR_TAG_DEFAULT,
462
482
  BoxRenderable,
463
483
  Box,
464
484
  BorderChars,
@@ -474,5 +494,5 @@ export {
474
494
  ACHROMATOPSIA_MATRIX
475
495
  };
476
496
 
477
- //# debugId=FD2591B7A1AB109264756E2164756E21
497
+ //# debugId=56BA2D9B78C8356A64756E2164756E21
478
498
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "FD2591B7A1AB109264756E2164756E21",
7
+ "debugId": "56BA2D9B78C8356A64756E2164756E21",
8
8
  "names": []
9
9
  }
package/lib/RGBA.d.ts CHANGED
@@ -1,10 +1,32 @@
1
+ export type RGBTriplet = readonly [number, number, number];
2
+ export type ColorKind = "rgb" | "indexed" | "default";
3
+ export type ColorInput = string | RGBA;
4
+ export declare const COLOR_TAG_RGB = 256;
5
+ export declare const COLOR_TAG_DEFAULT = 257;
6
+ export declare const DEFAULT_FOREGROUND_RGB: RGBTriplet;
7
+ export declare const DEFAULT_BACKGROUND_RGB: RGBTriplet;
8
+ export interface NormalizedColorValue {
9
+ rgba: RGBA;
10
+ tag: number;
11
+ }
12
+ export declare function normalizeIndexedColorIndex(index: number): number;
13
+ export declare function ansi256IndexToRgb(index: number): RGBTriplet;
14
+ export declare function decodeColorTag(tag: number): {
15
+ kind: ColorKind;
16
+ index?: number;
17
+ };
1
18
  export declare class RGBA {
2
19
  buffer: Float32Array;
3
20
  constructor(buffer: Float32Array);
4
21
  static fromArray(array: Float32Array): RGBA;
5
- static fromValues(r: number, g: number, b: number, a?: number): RGBA;
6
- static fromInts(r: number, g: number, b: number, a?: number): RGBA;
22
+ static fromValues(r: number, g: number, b: number, a?: number, tag?: number): RGBA;
23
+ static clone(rgba: RGBA): RGBA;
24
+ static fromInts(r: number, g: number, b: number, a?: number, tag?: number): RGBA;
7
25
  static fromHex(hex: string): RGBA;
26
+ static fromIndex(index: number, snapshot?: ColorInput): RGBA;
27
+ static defaultForeground(snapshot?: ColorInput): RGBA;
28
+ static defaultBackground(snapshot?: ColorInput): RGBA;
29
+ static getIntentTag(rgba: RGBA): number;
8
30
  toInts(): [number, number, number, number];
9
31
  get r(): number;
10
32
  set r(value: number);
@@ -14,11 +36,13 @@ export declare class RGBA {
14
36
  set b(value: number);
15
37
  get a(): number;
16
38
  set a(value: number);
39
+ get tag(): number;
40
+ set tag(value: number);
17
41
  map<R>(fn: (value: number) => R): R[];
18
42
  toString(): string;
19
43
  equals(other?: RGBA): boolean;
20
44
  }
21
- export type ColorInput = string | RGBA;
45
+ export declare function normalizeColorValue(value: ColorInput | null | undefined): NormalizedColorValue | null;
22
46
  export declare function hexToRgb(hex: string): RGBA;
23
47
  export declare function rgbToHex(rgb: RGBA): string;
24
48
  export declare function hsvToRgb(h: number, s: number, v: number): RGBA;
@@ -0,0 +1,8 @@
1
+ export type RenderGeometryScreenMode = "alternate-screen" | "main-screen" | "split-footer";
2
+ export interface RenderGeometry {
3
+ effectiveFooterHeight: number;
4
+ renderOffset: number;
5
+ renderWidth: number;
6
+ renderHeight: number;
7
+ }
8
+ export declare function calculateRenderGeometry(screenMode: RenderGeometryScreenMode, terminalWidth: number, terminalHeight: number, footerHeight: number): RenderGeometry;
@@ -3,7 +3,7 @@ import { type ParsedKey } from "./parse.keypress.js";
3
3
  import { type RawMouseEvent } from "./parse.mouse.js";
4
4
  import type { PasteMetadata } from "./paste.js";
5
5
  export { SystemClock, type Clock, type TimerHandle } from "./clock.js";
6
- export type StdinResponseProtocol = "csi" | "osc" | "dcs" | "apc" | "unknown";
6
+ export type StdinResponseProtocol = "csi" | "cpr" | "osc" | "dcs" | "apc" | "unknown";
7
7
  export type StdinEvent = {
8
8
  type: "key";
9
9
  raw: string;
@@ -27,6 +27,7 @@ export interface StdinParserProtocolContext {
27
27
  privateCapabilityRepliesActive: boolean;
28
28
  pixelResolutionQueryActive: boolean;
29
29
  explicitWidthCprActive: boolean;
30
+ startupCursorCprActive: boolean;
30
31
  }
31
32
  export interface StdinParserOptions {
32
33
  timeoutMs?: number;
@@ -1,3 +1,4 @@
1
+ import { RGBA } from "./RGBA.js";
1
2
  import { type Clock } from "./clock.js";
2
3
  type Hex = string | null;
3
4
  export type WriteFunction = (data: string | Buffer) => boolean;
@@ -22,6 +23,11 @@ export interface TerminalPaletteDetector {
22
23
  detectOSCSupport(timeoutMs?: number): Promise<boolean>;
23
24
  cleanup(): void;
24
25
  }
26
+ export interface NormalizedTerminalPalette {
27
+ palette: RGBA[];
28
+ defaultForeground: RGBA;
29
+ defaultBackground: RGBA;
30
+ }
25
31
  export type OscSubscriptionSource = {
26
32
  subscribeOsc(handler: (sequence: string) => void): () => void;
27
33
  };
@@ -47,4 +53,6 @@ export declare class TerminalPalette implements TerminalPaletteDetector {
47
53
  detect(options?: GetPaletteOptions): Promise<TerminalColors>;
48
54
  }
49
55
  export declare function createTerminalPalette(stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, writeFn?: WriteFunction, isLegacyTmux?: boolean, oscSource?: OscSubscriptionSource, clock?: Clock): TerminalPaletteDetector;
56
+ export declare function normalizeTerminalPalette(colors?: TerminalColors | null): NormalizedTerminalPalette;
57
+ export declare function buildTerminalPaletteSignature(colors?: TerminalColors | null): string;
50
58
  export {};
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.1.101",
7
+ "version": "0.1.103",
8
8
  "description": "OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -67,11 +67,11 @@
67
67
  "bun-webgpu": "0.1.5",
68
68
  "planck": "^1.4.2",
69
69
  "three": "0.177.0",
70
- "@opentui/core-darwin-x64": "0.1.101",
71
- "@opentui/core-darwin-arm64": "0.1.101",
72
- "@opentui/core-linux-x64": "0.1.101",
73
- "@opentui/core-linux-arm64": "0.1.101",
74
- "@opentui/core-win32-x64": "0.1.101",
75
- "@opentui/core-win32-arm64": "0.1.101"
70
+ "@opentui/core-darwin-x64": "0.1.103",
71
+ "@opentui/core-darwin-arm64": "0.1.103",
72
+ "@opentui/core-linux-x64": "0.1.103",
73
+ "@opentui/core-linux-arm64": "0.1.103",
74
+ "@opentui/core-win32-x64": "0.1.103",
75
+ "@opentui/core-win32-arm64": "0.1.103"
76
76
  }
77
77
  }
@@ -8,7 +8,16 @@ import { type TextTableColumnFitter, type TextTableColumnWidthMode, type TextTab
8
8
  import type { TreeSitterClient } from "../lib/tree-sitter/index.js";
9
9
  import { type ParseState } from "./markdown-parser.js";
10
10
  import type { OptimizedBuffer } from "../buffer.js";
11
+ export type MarkdownTableStyle = "grid" | "columns";
11
12
  export interface MarkdownTableOptions {
13
+ /**
14
+ * Visual style preset for markdown tables.
15
+ * - "grid": boxed table with visible borders.
16
+ * - "columns": borderless columns optimized for separated block output.
17
+ *
18
+ * Defaults to "columns" in `internalBlockMode: "top-level"`, otherwise "grid".
19
+ */
20
+ style?: MarkdownTableStyle;
12
21
  /**
13
22
  * Strategy for sizing table columns.
14
23
  * - "content": columns fit to intrinsic content width.
@@ -81,6 +90,12 @@ export interface MarkdownOptions extends RenderableOptions<MarkdownRenderable> {
81
90
  * or undefined/null to use default rendering.
82
91
  */
83
92
  renderNode?: (token: Token, context: RenderNodeContext) => Renderable | undefined | null;
93
+ /**
94
+ * Internal only.
95
+ * - "coalesced": combine ordinary markdown into larger render blocks.
96
+ * - "top-level": preserve top-level markdown blocks as separate render blocks.
97
+ */
98
+ internalBlockMode?: "coalesced" | "top-level";
84
99
  }
85
100
  export interface RenderNodeContext {
86
101
  syntaxStyle: SyntaxStyle;
@@ -97,6 +112,7 @@ interface TableContentCache {
97
112
  export interface BlockState {
98
113
  token: MarkedToken;
99
114
  tokenRaw: string;
115
+ marginTop?: number;
100
116
  renderable: Renderable;
101
117
  tableContentCache?: TableContentCache;
102
118
  }
@@ -111,9 +127,11 @@ export declare class MarkdownRenderable extends Renderable {
111
127
  private _treeSitterClient?;
112
128
  private _tableOptions?;
113
129
  private _renderNode?;
130
+ private _internalBlockMode;
114
131
  _parseState: ParseState | null;
115
132
  private _streaming;
116
133
  _blockStates: BlockState[];
134
+ _stableBlockCount: number;
117
135
  private _styleDirty;
118
136
  private _linkifyMarkdownChunks;
119
137
  protected _contentDefaultOptions: {
@@ -121,6 +139,7 @@ export declare class MarkdownRenderable extends Renderable {
121
139
  conceal: true;
122
140
  concealCode: false;
123
141
  streaming: false;
142
+ internalBlockMode: "coalesced";
124
143
  };
125
144
  constructor(ctx: RenderContext, options: MarkdownOptions);
126
145
  get content(): string;
@@ -145,6 +164,7 @@ export declare class MarkdownRenderable extends Renderable {
145
164
  private renderInlineContent;
146
165
  private renderInlineToken;
147
166
  private renderInlineTokenWithStyle;
167
+ private applyMargins;
148
168
  private createMarkdownCodeRenderable;
149
169
  private createCodeRenderable;
150
170
  private applyMarkdownCodeRenderable;
@@ -153,7 +173,9 @@ export declare class MarkdownRenderable extends Renderable {
153
173
  private getInterBlockMargin;
154
174
  private createMarkdownBlockToken;
155
175
  private normalizeMarkdownBlockRaw;
176
+ private normalizeScrollbackMarkdownBlockRaw;
156
177
  private buildRenderableTokens;
178
+ private buildTopLevelRenderBlocks;
157
179
  private getTableRowsToRender;
158
180
  private hashString;
159
181
  private hashTableToken;
@@ -161,13 +183,21 @@ export declare class MarkdownRenderable extends Renderable {
161
183
  private createTableDataCellChunks;
162
184
  private createTableHeaderCellChunks;
163
185
  private buildTableContentCache;
186
+ private resolveTableStyle;
187
+ private usesBorderlessColumnSpacing;
164
188
  private resolveTableRenderableOptions;
165
189
  private applyTableRenderableOptions;
166
190
  private applyTableOptionsToBlocks;
167
191
  private createTextTableRenderable;
168
192
  private createTableBlock;
193
+ private getStableBlockCount;
194
+ private syncTopLevelBlockState;
195
+ private getTopLevelBlockRaw;
196
+ private createTopLevelDefaultRenderable;
197
+ private createTopLevelRenderable;
169
198
  private createDefaultRenderable;
170
199
  private updateBlockRenderable;
200
+ private updateTopLevelBlocks;
171
201
  private updateBlocks;
172
202
  private clearBlockStates;
173
203
  /**
@@ -33,6 +33,7 @@ export declare abstract class TextBufferRenderable extends Renderable implements
33
33
  protected _scrollX: number;
34
34
  protected _scrollY: number;
35
35
  protected _truncate: boolean;
36
+ protected _firstLineOffset: number;
36
37
  protected textBuffer: TextBuffer;
37
38
  protected textBufferView: TextBufferView;
38
39
  protected _textBufferSyntaxStyle: SyntaxStyle;
@@ -15,6 +15,7 @@ export interface TextTableOptions extends RenderableOptions<TextTableRenderable>
15
15
  columnWidthMode?: TextTableColumnWidthMode;
16
16
  columnFitter?: TextTableColumnFitter;
17
17
  cellPadding?: number;
18
+ columnGap?: number;
18
19
  showBorders?: boolean;
19
20
  border?: boolean;
20
21
  outerBorder?: boolean;
@@ -35,6 +36,7 @@ export declare class TextTableRenderable extends Renderable {
35
36
  private _columnWidthMode;
36
37
  private _columnFitter;
37
38
  private _cellPadding;
39
+ private _columnGap;
38
40
  private _showBorders;
39
41
  private _border;
40
42
  private _outerBorder;
@@ -71,6 +73,8 @@ export declare class TextTableRenderable extends Renderable {
71
73
  set columnFitter(value: TextTableColumnFitter);
72
74
  get cellPadding(): number;
73
75
  set cellPadding(value: number);
76
+ get columnGap(): number;
77
+ set columnGap(value: number);
74
78
  get showBorders(): boolean;
75
79
  set showBorders(value: boolean);
76
80
  get outerBorder(): boolean;
@@ -109,6 +113,8 @@ export declare class TextTableRenderable extends Renderable {
109
113
  private allocateShrinkByWeight;
110
114
  private computeRowHeights;
111
115
  private computeOffsets;
116
+ private getInterColumnGap;
117
+ private getTotalInterColumnGap;
112
118
  private applyLayoutToViews;
113
119
  private resolveBorderLayout;
114
120
  private getVerticalBorderCount;
@@ -135,6 +141,7 @@ export declare class TextTableRenderable extends Renderable {
135
141
  private getVerticalCellPadding;
136
142
  private resolveColumnFitter;
137
143
  private resolveCellPadding;
144
+ private resolveColumnGap;
138
145
  private invalidateLayoutAndRaster;
139
146
  private invalidateRasterOnly;
140
147
  }
@@ -2,6 +2,7 @@ import { type MarkedToken } from "marked";
2
2
  export interface ParseState {
3
3
  content: string;
4
4
  tokens: MarkedToken[];
5
+ stableTokenCount?: number;
5
6
  }
6
7
  /**
7
8
  * Incrementally parse markdown, reusing unchanged tokens from previous parse.
@@ -0,0 +1,29 @@
1
+ import { type Clock } from "./lib/clock.js";
2
+ import type { ThemeMode } from "./types.js";
3
+ export interface RendererThemeModeHost {
4
+ queryThemeColors(): void;
5
+ }
6
+ export declare class RendererThemeMode {
7
+ private readonly host;
8
+ private readonly clock;
9
+ private static readonly QUERY_TIMEOUT_MS;
10
+ private _themeMode;
11
+ private themeQueryPending;
12
+ private themeOscForeground;
13
+ private themeOscBackground;
14
+ private themeRefreshTimeoutId;
15
+ private waiters;
16
+ constructor(host: RendererThemeModeHost, clock: Clock);
17
+ get themeMode(): ThemeMode | null;
18
+ waitForThemeMode(timeoutMs: number, isDestroyed: boolean): Promise<ThemeMode | null>;
19
+ cancelRefresh(): void;
20
+ dispose(): void;
21
+ handleSequence(sequence: string): {
22
+ handled: boolean;
23
+ changedMode: ThemeMode | null;
24
+ };
25
+ private clearThemeRefreshTimeout;
26
+ private completeThemeQuery;
27
+ private requestThemeOscColors;
28
+ private applyThemeMode;
29
+ }
package/renderer.d.ts CHANGED
@@ -20,6 +20,7 @@ export interface CliRendererConfig {
20
20
  testing?: boolean;
21
21
  exitOnCtrlC?: boolean;
22
22
  exitSignals?: NodeJS.Signals[];
23
+ clearOnShutdown?: boolean;
23
24
  forwardEnvKeys?: string[];
24
25
  debounceDelay?: number;
25
26
  targetFps?: number;
@@ -52,6 +53,40 @@ export type PixelResolution = {
52
53
  width: number;
53
54
  height: number;
54
55
  };
56
+ export interface ScrollbackRenderContext {
57
+ width: number;
58
+ widthMethod: WidthMethod;
59
+ tailColumn: number;
60
+ renderContext: RenderContext;
61
+ }
62
+ export interface ScrollbackSnapshot {
63
+ root: Renderable;
64
+ width?: number;
65
+ height?: number;
66
+ rowColumns?: number;
67
+ startOnNewLine?: boolean;
68
+ trailingNewline?: boolean;
69
+ teardown?: () => void;
70
+ }
71
+ export type ScrollbackWriter = (ctx: ScrollbackRenderContext) => ScrollbackSnapshot;
72
+ export interface ScrollbackSurfaceOptions {
73
+ startOnNewLine?: boolean;
74
+ }
75
+ export interface ScrollbackSurfaceCommitOptions {
76
+ rowColumns?: number;
77
+ trailingNewline?: boolean;
78
+ }
79
+ export interface ScrollbackSurface {
80
+ readonly renderContext: RenderContext;
81
+ readonly root: Renderable;
82
+ readonly width: number;
83
+ readonly height: number;
84
+ readonly isDestroyed: boolean;
85
+ render(): void;
86
+ settle(timeoutMs?: number): Promise<void>;
87
+ commitRows(startRow: number, endRowExclusive: number, options?: ScrollbackSurfaceCommitOptions): void;
88
+ destroy(): void;
89
+ }
55
90
  /**
56
91
  * Kitty Keyboard Protocol configuration options
57
92
  * See: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#progressive-enhancement
@@ -190,6 +225,8 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
190
225
  private animationRequest;
191
226
  private resizeTimeoutId;
192
227
  private capabilityTimeoutId;
228
+ private splitStartupSeedTimeoutId;
229
+ private pendingSplitStartupCursorSeed;
193
230
  private resizeDebounceDelay;
194
231
  private enableMouseMovement;
195
232
  private _useMouse;
@@ -197,6 +234,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
197
234
  private _screenMode;
198
235
  private _footerHeight;
199
236
  private _externalOutputMode;
237
+ private clearOnShutdown;
200
238
  private _suspendedMouseEnabled;
201
239
  private _previousControlState;
202
240
  private capturedRenderable?;
@@ -207,11 +245,15 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
207
245
  private clipboard;
208
246
  private _splitHeight;
209
247
  private renderOffset;
248
+ private splitTailColumn;
249
+ private pendingSplitFooterTransition;
250
+ private forceFullRepaintRequested;
251
+ private readonly maxSplitCommitsPerFrame;
210
252
  private _terminalWidth;
211
253
  private _terminalHeight;
212
254
  private _terminalIsSetup;
255
+ private externalOutputQueue;
213
256
  private realStdoutWrite;
214
- private captureCallback;
215
257
  private _useConsole;
216
258
  private sigwinchHandler;
217
259
  private _capabilities;
@@ -223,18 +265,20 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
223
265
  private lifecyclePasses;
224
266
  private _openConsoleOnError;
225
267
  private _paletteDetector;
268
+ private _paletteCache;
226
269
  private _cachedPalette;
227
270
  private _paletteDetectionPromise;
271
+ private _paletteDetectionSize;
272
+ private _paletteEpoch;
273
+ private _publishedPaletteSignature;
274
+ private _palettePublishGeneration;
228
275
  private _onDestroy?;
229
- private _themeMode;
230
- private _themeModeSource;
231
- private _themeFallbackPending;
232
- private _themeOscForeground;
233
- private _themeOscBackground;
276
+ private themeModeState;
234
277
  private _terminalFocusState;
235
278
  private sequenceHandlers;
236
279
  private prependedInputHandlers;
237
280
  private shouldRestoreModesOnNextFocus;
281
+ private themeModeHandler;
238
282
  private idleResolvers;
239
283
  private _debugInputs;
240
284
  private _debugModeEnabled;
@@ -302,7 +346,29 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
302
346
  }>;
303
347
  get useKittyKeyboard(): boolean;
304
348
  set useKittyKeyboard(use: boolean);
349
+ createScrollbackSurface(options?: ScrollbackSurfaceOptions): ScrollbackSurface;
350
+ writeToScrollback(write: ScrollbackWriter): void;
351
+ private getSnapshotWidth;
352
+ private getSnapshotHeight;
353
+ private getSnapshotRowWidths;
354
+ private publishSplitTailColumns;
355
+ private recordSplitCommit;
356
+ private enqueueRenderedScrollbackCommit;
357
+ private enqueueSplitCommit;
358
+ private createStdoutSnapshotCommit;
359
+ private splitStdoutRows;
360
+ private createStdoutSnapshotCommits;
361
+ private flushPendingSplitCommits;
305
362
  private interceptStdoutWrite;
363
+ private getSplitPinnedRenderOffset;
364
+ private getSplitCursorSeedRows;
365
+ private flushPendingSplitOutputBeforeTransition;
366
+ private resetSplitScrollback;
367
+ private syncSplitScrollback;
368
+ private clearPendingSplitFooterTransition;
369
+ private setPendingSplitFooterTransition;
370
+ private syncSplitFooterState;
371
+ private clearStaleSplitSurfaceRows;
306
372
  private applyScreenMode;
307
373
  private flushStdoutCache;
308
374
  private enableMouse;
@@ -317,10 +383,9 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
317
383
  removeInputHandler(handler: (sequence: string) => boolean): void;
318
384
  private updateStdinParserProtocolContext;
319
385
  subscribeOsc(handler: (sequence: string) => void): () => void;
386
+ private processCapabilitySequence;
320
387
  private capabilityHandler;
321
388
  private focusHandler;
322
- private themeModeHandler;
323
- private applyThemeMode;
324
389
  private dispatchSequenceHandlers;
325
390
  private drainStdinParser;
326
391
  private handleStdinEvent;
@@ -423,6 +488,10 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
423
488
  private notifySelectablesOfSelectionChange;
424
489
  private walkSelectableRenderables;
425
490
  get paletteDetectionStatus(): "idle" | "detecting" | "cached";
491
+ private getCachedPaletteBySize;
492
+ private ensurePaletteDetector;
493
+ private syncNativePaletteState;
494
+ private ensureNativePaletteState;
426
495
  clearPaletteCache(): void;
427
496
  /**
428
497
  * Detects the terminal's color palette
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createRuntimePlugin,
4
4
  runtimeModuleIdForSpecifier
5
- } from "./index-9qfn9g6r.js";
6
- import"./index-ekbq0zm9.js";
7
- import"./index-xsfpee0k.js";
5
+ } from "./index-bmcatvmp.js";
6
+ import"./index-gw3ynrc0.js";
7
+ import"./index-4pvh4sbk.js";
8
8
 
9
9
  // src/runtime-plugin-support.ts
10
10
  var {plugin: registerBunPlugin } = globalThis.Bun;