@opentui/core 0.2.15 → 0.2.16
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-yyyfmp8n.js → index-hzcw4q21.js} +84 -32
- package/{index-yyyfmp8n.js.map → index-hzcw4q21.js.map} +5 -5
- package/{index-pzzbb0f6.js → index-qe67qr6s.js} +3 -3
- package/{index-3fq5hq97.js → index-qfwqv8y3.js} +143 -19
- package/{index-3fq5hq97.js.map → index-qfwqv8y3.js.map} +8 -8
- package/{index-bdfngvbe.js → index-t1vzaxv4.js} +2 -2
- package/index.js +2 -2
- package/lib/extmarks.d.ts +1 -0
- package/package.json +7 -7
- package/renderables/Input.d.ts +5 -0
- package/renderables/Markdown.d.ts +2 -1
- package/renderables/ScrollBox.d.ts +1 -0
- package/renderer.d.ts +29 -9
- package/runtime-plugin-support-configure.js +4 -4
- package/runtime-plugin-support.js +4 -4
- package/runtime-plugin.js +3 -3
- package/testing/test-recorder.d.ts +4 -4
- package/testing/test-renderer.d.ts +34 -2
- package/testing.d.ts +1 -0
- package/testing.js +283 -17
- package/testing.js.map +6 -5
- package/zig-structs.d.ts +10 -0
- package/zig.d.ts +3 -2
- /package/{index-pzzbb0f6.js.map → index-qe67qr6s.js.map} +0 -0
- /package/{index-bdfngvbe.js.map → index-t1vzaxv4.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
createRuntimePlugin
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-qe67qr6s.js";
|
|
5
5
|
|
|
6
6
|
// src/runtime-plugin-support-configure.ts
|
|
7
7
|
var {plugin: registerBunPlugin } = globalThis.Bun;
|
|
@@ -41,4 +41,4 @@ function ensureRuntimePluginSupport(options = {}) {
|
|
|
41
41
|
export { ensureRuntimePluginSupport };
|
|
42
42
|
|
|
43
43
|
//# debugId=09C0597CB92E654F64756E2164756E21
|
|
44
|
-
//# sourceMappingURL=index-
|
|
44
|
+
//# sourceMappingURL=index-t1vzaxv4.js.map
|
package/index.js
CHANGED
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
resolveCoreSlot,
|
|
73
73
|
setupAudio,
|
|
74
74
|
vstyles
|
|
75
|
-
} from "./index-
|
|
75
|
+
} from "./index-hzcw4q21.js";
|
|
76
76
|
import {
|
|
77
77
|
ASCIIFontSelectionHelper,
|
|
78
78
|
ATTRIBUTE_BASE_BITS,
|
|
@@ -246,7 +246,7 @@ import {
|
|
|
246
246
|
white,
|
|
247
247
|
wrapWithDelegates,
|
|
248
248
|
yellow
|
|
249
|
-
} from "./index-
|
|
249
|
+
} from "./index-qfwqv8y3.js";
|
|
250
250
|
export {
|
|
251
251
|
yellow,
|
|
252
252
|
wrapWithDelegates,
|
package/lib/extmarks.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ export declare class ExtmarksController {
|
|
|
67
67
|
adjustExtmarksAfterDeletion(deleteOffset: number, length: number): void;
|
|
68
68
|
private offsetToPosition;
|
|
69
69
|
private positionToOffset;
|
|
70
|
+
private getNextCursorOffset;
|
|
70
71
|
private updateHighlights;
|
|
71
72
|
private offsetExcludingNewlines;
|
|
72
73
|
create(options: ExtmarkOptions): number;
|
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.2.
|
|
7
|
+
"version": "0.2.16",
|
|
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": {
|
|
@@ -69,11 +69,11 @@
|
|
|
69
69
|
"web-tree-sitter": "0.25.10"
|
|
70
70
|
},
|
|
71
71
|
"optionalDependencies": {
|
|
72
|
-
"@opentui/core-darwin-x64": "0.2.
|
|
73
|
-
"@opentui/core-darwin-arm64": "0.2.
|
|
74
|
-
"@opentui/core-linux-x64": "0.2.
|
|
75
|
-
"@opentui/core-linux-arm64": "0.2.
|
|
76
|
-
"@opentui/core-win32-x64": "0.2.
|
|
77
|
-
"@opentui/core-win32-arm64": "0.2.
|
|
72
|
+
"@opentui/core-darwin-x64": "0.2.16",
|
|
73
|
+
"@opentui/core-darwin-arm64": "0.2.16",
|
|
74
|
+
"@opentui/core-linux-x64": "0.2.16",
|
|
75
|
+
"@opentui/core-linux-arm64": "0.2.16",
|
|
76
|
+
"@opentui/core-win32-x64": "0.2.16",
|
|
77
|
+
"@opentui/core-win32-arm64": "0.2.16"
|
|
78
78
|
}
|
|
79
79
|
}
|
package/renderables/Input.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export type InputKeyBinding = TextareaKeyBinding;
|
|
|
6
6
|
export interface InputRenderableOptions extends Omit<TextareaOptions, "height" | "minHeight" | "maxHeight" | "initialValue"> {
|
|
7
7
|
/** Initial text value (newlines are stripped) */
|
|
8
8
|
value?: string;
|
|
9
|
+
/** Minimum number of characters allowed */
|
|
10
|
+
minLength?: number;
|
|
9
11
|
/** Maximum number of characters allowed */
|
|
10
12
|
maxLength?: number;
|
|
11
13
|
/** Placeholder text (Input only supports string, not StyledText) */
|
|
@@ -29,6 +31,7 @@ export declare enum InputRenderableEvents {
|
|
|
29
31
|
*/
|
|
30
32
|
export declare class InputRenderable extends TextareaRenderable {
|
|
31
33
|
private _maxLength;
|
|
34
|
+
private _minLength;
|
|
32
35
|
private _lastCommittedValue;
|
|
33
36
|
private static readonly defaultOptions;
|
|
34
37
|
constructor(ctx: RenderContext, options: InputRenderableOptions);
|
|
@@ -61,6 +64,8 @@ export declare class InputRenderable extends TextareaRenderable {
|
|
|
61
64
|
deleteCharacter(direction: "backward" | "forward"): void;
|
|
62
65
|
set maxLength(maxLength: number);
|
|
63
66
|
get maxLength(): number;
|
|
67
|
+
set minLength(minLength: number);
|
|
68
|
+
get minLength(): number;
|
|
64
69
|
set placeholder(placeholder: string);
|
|
65
70
|
get placeholder(): string;
|
|
66
71
|
set initialValue(value: string);
|
|
@@ -123,6 +123,7 @@ export interface BlockState {
|
|
|
123
123
|
marginTop?: number;
|
|
124
124
|
renderable: Renderable;
|
|
125
125
|
tableContentCache?: TableContentCache;
|
|
126
|
+
tracksInterBlockMargin?: boolean;
|
|
126
127
|
}
|
|
127
128
|
export type { ParseState };
|
|
128
129
|
export declare class MarkdownRenderable extends Renderable {
|
|
@@ -190,7 +191,6 @@ export declare class MarkdownRenderable extends Renderable {
|
|
|
190
191
|
private getRenderableListItemTokens;
|
|
191
192
|
private applyListChildRenderable;
|
|
192
193
|
private destroyListItemChildrenAfter;
|
|
193
|
-
private getListChildMarkdownRaw;
|
|
194
194
|
private applyListItemMarker;
|
|
195
195
|
private createListChildRenderable;
|
|
196
196
|
private createHorizontalRuleRenderable;
|
|
@@ -200,6 +200,7 @@ export declare class MarkdownRenderable extends Renderable {
|
|
|
200
200
|
private applyCodeBlockRenderable;
|
|
201
201
|
private shouldRenderSeparately;
|
|
202
202
|
private getInterBlockMargin;
|
|
203
|
+
private applyInterBlockMargin;
|
|
203
204
|
private createMarkdownBlockToken;
|
|
204
205
|
private normalizeMarkdownBlockRaw;
|
|
205
206
|
private normalizeScrollbackMarkdownBlockRaw;
|
|
@@ -86,6 +86,7 @@ export declare class ScrollBoxRenderable extends BoxRenderable {
|
|
|
86
86
|
y: number;
|
|
87
87
|
}): void;
|
|
88
88
|
private isAtStickyPosition;
|
|
89
|
+
private isAtStickyReengagePoint;
|
|
89
90
|
add(obj: Renderable | VNode<any, any[]>, index?: number): number;
|
|
90
91
|
insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number;
|
|
91
92
|
remove(id: string): void;
|
package/renderer.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, ty
|
|
|
3
3
|
import { RGBA, type ColorInput } from "./lib/RGBA.js";
|
|
4
4
|
import type { Pointer } from "./platform/ffi.js";
|
|
5
5
|
import { OptimizedBuffer } from "./buffer.js";
|
|
6
|
-
import { type RenderLib } from "./zig.js";
|
|
6
|
+
import { type NativeRenderStats, type RenderLib } from "./zig.js";
|
|
7
7
|
import { TerminalConsole, type ConsoleOptions } from "./console.js";
|
|
8
8
|
import { type MouseEventType, type RawMouseEvent, type ScrollInfo } from "./lib/parse.mouse.js";
|
|
9
9
|
import { Selection } from "./lib/selection.js";
|
|
@@ -48,11 +48,34 @@ export interface CliRendererConfig {
|
|
|
48
48
|
}
|
|
49
49
|
export type ScreenMode = "alternate-screen" | "main-screen" | "split-footer";
|
|
50
50
|
export type ExternalOutputMode = "capture-stdout" | "passthrough";
|
|
51
|
+
export interface CliRendererExternalOutputEvent {
|
|
52
|
+
snapshot: OptimizedBuffer;
|
|
53
|
+
rowColumns: number;
|
|
54
|
+
startOnNewLine: boolean;
|
|
55
|
+
trailingNewline: boolean;
|
|
56
|
+
}
|
|
51
57
|
export type ConsoleMode = "console-overlay" | "disabled";
|
|
52
58
|
export type PixelResolution = {
|
|
53
59
|
width: number;
|
|
54
60
|
height: number;
|
|
55
61
|
};
|
|
62
|
+
export interface CliRendererStats extends NativeRenderStats {
|
|
63
|
+
fps: number;
|
|
64
|
+
frameCount: number;
|
|
65
|
+
frameTimes: number[];
|
|
66
|
+
averageFrameTime: number;
|
|
67
|
+
minFrameTime: number;
|
|
68
|
+
maxFrameTime: number;
|
|
69
|
+
frameCallbackTime: number;
|
|
70
|
+
}
|
|
71
|
+
export interface CliRendererFrameEvent {
|
|
72
|
+
frameId: number;
|
|
73
|
+
}
|
|
74
|
+
export interface RendererSchedulerState {
|
|
75
|
+
isRunning: boolean;
|
|
76
|
+
isRendering: boolean;
|
|
77
|
+
hasScheduledRender: boolean;
|
|
78
|
+
}
|
|
56
79
|
export interface ScrollbackRenderContext {
|
|
57
80
|
width: number;
|
|
58
81
|
widthMethod: WidthMethod;
|
|
@@ -145,6 +168,8 @@ export declare enum MouseButton {
|
|
|
145
168
|
export declare function createCliRenderer(config?: CliRendererConfig): Promise<CliRenderer>;
|
|
146
169
|
export declare enum CliRenderEvents {
|
|
147
170
|
RESIZE = "resize",
|
|
171
|
+
FRAME = "frame",
|
|
172
|
+
EXTERNAL_OUTPUT = "external_output",
|
|
148
173
|
FOCUS = "focus",
|
|
149
174
|
BLUR = "blur",
|
|
150
175
|
FOCUSED_RENDERABLE = "focused_renderable",
|
|
@@ -322,6 +347,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
322
347
|
private isIdleNow;
|
|
323
348
|
private resolveIdleIfNeeded;
|
|
324
349
|
idle(): Promise<void>;
|
|
350
|
+
getSchedulerState(): RendererSchedulerState;
|
|
325
351
|
get resolution(): PixelResolution | null;
|
|
326
352
|
get console(): TerminalConsole;
|
|
327
353
|
get keyInput(): KeyHandler;
|
|
@@ -478,14 +504,8 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
478
504
|
intermediateRender(): void;
|
|
479
505
|
private renderNative;
|
|
480
506
|
private collectStatSample;
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
frameCount: number;
|
|
484
|
-
frameTimes: number[];
|
|
485
|
-
averageFrameTime: number;
|
|
486
|
-
minFrameTime: number;
|
|
487
|
-
maxFrameTime: number;
|
|
488
|
-
};
|
|
507
|
+
getNativeStats(): NativeRenderStats;
|
|
508
|
+
getStats(): CliRendererStats;
|
|
489
509
|
resetStats(): void;
|
|
490
510
|
setGatherStats(enabled: boolean): void;
|
|
491
511
|
getSelection(): Selection | null;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
ensureRuntimePluginSupport
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-t1vzaxv4.js";
|
|
5
5
|
import {
|
|
6
6
|
createRuntimePlugin,
|
|
7
7
|
runtimeModuleIdForSpecifier
|
|
8
|
-
} from "./index-
|
|
9
|
-
import"./index-
|
|
10
|
-
import"./index-
|
|
8
|
+
} from "./index-qe67qr6s.js";
|
|
9
|
+
import"./index-hzcw4q21.js";
|
|
10
|
+
import"./index-qfwqv8y3.js";
|
|
11
11
|
export {
|
|
12
12
|
runtimeModuleIdForSpecifier,
|
|
13
13
|
ensureRuntimePluginSupport,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
ensureRuntimePluginSupport
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-t1vzaxv4.js";
|
|
5
5
|
import {
|
|
6
6
|
createRuntimePlugin,
|
|
7
7
|
runtimeModuleIdForSpecifier
|
|
8
|
-
} from "./index-
|
|
9
|
-
import"./index-
|
|
10
|
-
import"./index-
|
|
8
|
+
} from "./index-qe67qr6s.js";
|
|
9
|
+
import"./index-hzcw4q21.js";
|
|
10
|
+
import"./index-qfwqv8y3.js";
|
|
11
11
|
// src/runtime-plugin-support.ts
|
|
12
12
|
ensureRuntimePluginSupport();
|
|
13
13
|
export {
|
package/runtime-plugin.js
CHANGED
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
createRuntimePlugin,
|
|
4
4
|
isCoreRuntimeModuleSpecifier,
|
|
5
5
|
runtimeModuleIdForSpecifier
|
|
6
|
-
} from "./index-
|
|
7
|
-
import"./index-
|
|
8
|
-
import"./index-
|
|
6
|
+
} from "./index-qe67qr6s.js";
|
|
7
|
+
import"./index-hzcw4q21.js";
|
|
8
|
+
import"./index-qfwqv8y3.js";
|
|
9
9
|
export {
|
|
10
10
|
runtimeModuleIdForSpecifier,
|
|
11
11
|
isCoreRuntimeModuleSpecifier,
|
|
@@ -20,7 +20,7 @@ export interface TestRecorderOptions {
|
|
|
20
20
|
now?: () => number;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* TestRecorder records frames from a TestRenderer by
|
|
23
|
+
* TestRecorder records frames from a TestRenderer by listening to rendered frame events.
|
|
24
24
|
* It captures the character frame after each native render pass.
|
|
25
25
|
*/
|
|
26
26
|
export declare class TestRecorder {
|
|
@@ -29,17 +29,17 @@ export declare class TestRecorder {
|
|
|
29
29
|
private recording;
|
|
30
30
|
private frameNumber;
|
|
31
31
|
private startTime;
|
|
32
|
-
private originalRenderNative?;
|
|
33
32
|
private decoder;
|
|
34
33
|
private recordBuffers;
|
|
35
34
|
private now;
|
|
35
|
+
private readonly onFrame;
|
|
36
36
|
constructor(renderer: TestRenderer, options?: TestRecorderOptions);
|
|
37
37
|
/**
|
|
38
|
-
* Start recording frames.
|
|
38
|
+
* Start recording frames.
|
|
39
39
|
*/
|
|
40
40
|
rec(): void;
|
|
41
41
|
/**
|
|
42
|
-
* Stop recording frames
|
|
42
|
+
* Stop recording frames.
|
|
43
43
|
*/
|
|
44
44
|
stop(): void;
|
|
45
45
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CliRenderer, type CliRendererConfig } from "../renderer.js";
|
|
2
|
+
import { type NativeRenderStats } from "../zig.js";
|
|
2
3
|
import { createMockKeys } from "./mock-keys.js";
|
|
3
4
|
import { createMockMouse } from "./mock-mouse.js";
|
|
4
5
|
import type { CapturedFrame } from "../types.js";
|
|
@@ -12,12 +13,43 @@ export interface TestRenderer extends CliRenderer {
|
|
|
12
13
|
}
|
|
13
14
|
export type MockInput = ReturnType<typeof createMockKeys>;
|
|
14
15
|
export type MockMouse = ReturnType<typeof createMockMouse>;
|
|
15
|
-
export
|
|
16
|
+
export interface TestFlushOptions {
|
|
17
|
+
maxPasses?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface TestVisualIdleOptions {
|
|
20
|
+
quietFrames?: number;
|
|
21
|
+
maxFrames?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface TestWaitForOptions {
|
|
24
|
+
maxPasses?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface TestExternalOutputCommit {
|
|
27
|
+
text: string;
|
|
28
|
+
rows: string[];
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
rowColumns: number;
|
|
32
|
+
startOnNewLine: boolean;
|
|
33
|
+
trailingNewline: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface TestExternalOutput {
|
|
36
|
+
take(): TestExternalOutputCommit[];
|
|
37
|
+
takeText(): string;
|
|
38
|
+
clear(): void;
|
|
39
|
+
}
|
|
40
|
+
export interface TestRendererSetup {
|
|
16
41
|
renderer: TestRenderer;
|
|
17
42
|
mockInput: MockInput;
|
|
18
43
|
mockMouse: MockMouse;
|
|
19
44
|
renderOnce: () => Promise<void>;
|
|
45
|
+
flush: (options?: TestFlushOptions) => Promise<void>;
|
|
46
|
+
waitFor: (predicate: () => boolean | Promise<boolean>, options?: TestWaitForOptions) => Promise<void>;
|
|
47
|
+
waitForFrame: (predicate: (frame: string) => boolean | Promise<boolean>, options?: TestWaitForOptions) => Promise<string>;
|
|
48
|
+
waitForVisualIdle: (options?: TestVisualIdleOptions) => Promise<void>;
|
|
49
|
+
externalOutput: TestExternalOutput;
|
|
50
|
+
getNativeStats: () => NativeRenderStats;
|
|
20
51
|
captureCharFrame: () => string;
|
|
21
52
|
captureSpans: () => CapturedFrame;
|
|
22
53
|
resize: (width: number, height: number) => void;
|
|
23
|
-
}
|
|
54
|
+
}
|
|
55
|
+
export declare function createTestRenderer(options: TestRendererOptions): Promise<TestRendererSetup>;
|
package/testing.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export * from "./testing/mock-mouse.js";
|
|
|
4
4
|
export * from "./testing/mock-tree-sitter-client.js";
|
|
5
5
|
export * from "./testing/terminal-capabilities.js";
|
|
6
6
|
export * from "./testing/spy.js";
|
|
7
|
+
export { ManualClock } from "./testing/manual-clock.js";
|
|
7
8
|
export { TestRecorder, type RecordedFrame } from "./testing/test-recorder.js";
|