@opentui/core 0.0.0-20250923-da12fb15 → 0.0.0-20250924-9d06e8e4

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.
@@ -1,18 +1,57 @@
1
1
  import { EventEmitter } from "events";
2
- import { type ParsedKey } from "./parse.keypress";
3
- export type { ParsedKey };
4
- type KeyHandlerEventMap = {
5
- keypress: [ParsedKey];
6
- keyrepeat: [ParsedKey];
7
- keyrelease: [ParsedKey];
8
- paste: [string];
2
+ import { type KeyEventType, type ParsedKey } from "./parse.keypress";
3
+ export declare class KeyEvent implements ParsedKey {
4
+ name: string;
5
+ ctrl: boolean;
6
+ meta: boolean;
7
+ shift: boolean;
8
+ option: boolean;
9
+ sequence: string;
10
+ number: boolean;
11
+ raw: string;
12
+ eventType: KeyEventType;
13
+ code?: string;
14
+ super?: boolean;
15
+ hyper?: boolean;
16
+ capsLock?: boolean;
17
+ numLock?: boolean;
18
+ baseCode?: number;
19
+ private _defaultPrevented;
20
+ constructor(key: ParsedKey);
21
+ get defaultPrevented(): boolean;
22
+ preventDefault(): void;
23
+ }
24
+ export declare class PasteEvent {
25
+ text: string;
26
+ private _defaultPrevented;
27
+ constructor(text: string);
28
+ get defaultPrevented(): boolean;
29
+ preventDefault(): void;
30
+ }
31
+ export type KeyHandlerEventMap = {
32
+ keypress: [KeyEvent];
33
+ keyrepeat: [KeyEvent];
34
+ keyrelease: [KeyEvent];
35
+ paste: [PasteEvent];
9
36
  };
10
37
  export declare class KeyHandler extends EventEmitter<KeyHandlerEventMap> {
11
- private stdin;
12
- private useKittyKeyboard;
13
- private listener;
14
- private pasteMode;
15
- private pasteBuffer;
38
+ protected stdin: NodeJS.ReadStream;
39
+ protected useKittyKeyboard: boolean;
40
+ protected listener: (key: Buffer) => void;
41
+ protected pasteMode: boolean;
42
+ protected pasteBuffer: string[];
16
43
  constructor(stdin?: NodeJS.ReadStream, useKittyKeyboard?: boolean);
17
44
  destroy(): void;
18
45
  }
46
+ /**
47
+ * This class is used internally by the renderer to ensure global handlers
48
+ * can preventDefault before renderable handlers process events.
49
+ */
50
+ export declare class InternalKeyHandler extends KeyHandler {
51
+ private renderableHandlers;
52
+ constructor(stdin?: NodeJS.ReadStream, useKittyKeyboard?: boolean);
53
+ emit<K extends keyof KeyHandlerEventMap>(event: K, ...args: KeyHandlerEventMap[K]): boolean;
54
+ private emitWithPriority;
55
+ onInternal<K extends keyof KeyHandlerEventMap>(event: K, handler: (...args: KeyHandlerEventMap[K]) => void): void;
56
+ offInternal<K extends keyof KeyHandlerEventMap>(event: K, handler: (...args: KeyHandlerEventMap[K]) => void): void;
57
+ }
package/lib/env.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Environment variable registry
3
+ *
4
+ * Usage:
5
+ * ```ts
6
+ * import { registerEnvVar, env } from "./lib/env.ts";
7
+ *
8
+ * // Register environment variables
9
+ * registerEnvVar({
10
+ * name: "DEBUG",
11
+ * description: "Enable debug logging",
12
+ * type: "boolean",
13
+ * default: false
14
+ * });
15
+ *
16
+ * registerEnvVar({
17
+ * name: "PORT",
18
+ * description: "Server port number",
19
+ * type: "number",
20
+ * default: 3000
21
+ * });
22
+ *
23
+ * // Access environment variables
24
+ * if (env.DEBUG) {
25
+ * console.log("Debug mode enabled");
26
+ * }
27
+ *
28
+ * const port = env.PORT; // number
29
+ * ```
30
+ */
31
+ export interface EnvVarConfig {
32
+ name: string;
33
+ description: string;
34
+ default?: string | boolean | number;
35
+ type?: "string" | "boolean" | "number";
36
+ }
37
+ export declare const envRegistry: Record<string, EnvVarConfig>;
38
+ export declare function registerEnvVar(config: EnvVarConfig): void;
39
+ export declare function generateEnvMarkdown(): string;
40
+ export declare function generateEnvColored(): string;
41
+ export declare const env: Record<string, string | number | boolean>;
package/lib/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from "./styled-text";
8
8
  export * from "./yoga.options";
9
9
  export * from "./parse.mouse";
10
10
  export * from "./selection";
11
+ export * from "./env";
@@ -1,7 +1,7 @@
1
1
  import { Buffer } from "node:buffer";
2
2
  export declare const nonAlphanumericKeys: string[];
3
3
  export type KeyEventType = "press" | "repeat" | "release";
4
- export type ParsedKey = {
4
+ export interface ParsedKey {
5
5
  name: string;
6
6
  ctrl: boolean;
7
7
  meta: boolean;
@@ -17,7 +17,7 @@ export type ParsedKey = {
17
17
  capsLock?: boolean;
18
18
  numLock?: boolean;
19
19
  baseCode?: number;
20
- };
20
+ }
21
21
  export type ParseKeypressOptions = {
22
22
  useKittyKeyboard?: boolean;
23
23
  };
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.0.0-20250923-da12fb15",
7
+ "version": "0.0.0-20250924-9d06e8e4",
8
8
  "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -40,11 +40,11 @@
40
40
  "bun-webgpu": "0.1.3",
41
41
  "planck": "^1.4.2",
42
42
  "three": "0.177.0",
43
- "@opentui/core-darwin-x64": "0.0.0-20250923-da12fb15",
44
- "@opentui/core-darwin-arm64": "0.0.0-20250923-da12fb15",
45
- "@opentui/core-linux-x64": "0.0.0-20250923-da12fb15",
46
- "@opentui/core-linux-arm64": "0.0.0-20250923-da12fb15",
47
- "@opentui/core-win32-x64": "0.0.0-20250923-da12fb15",
48
- "@opentui/core-win32-arm64": "0.0.0-20250923-da12fb15"
43
+ "@opentui/core-darwin-x64": "0.0.0-20250924-9d06e8e4",
44
+ "@opentui/core-darwin-arm64": "0.0.0-20250924-9d06e8e4",
45
+ "@opentui/core-linux-x64": "0.0.0-20250924-9d06e8e4",
46
+ "@opentui/core-linux-arm64": "0.0.0-20250924-9d06e8e4",
47
+ "@opentui/core-win32-x64": "0.0.0-20250924-9d06e8e4",
48
+ "@opentui/core-win32-arm64": "0.0.0-20250924-9d06e8e4"
49
49
  }
50
50
  }
@@ -1,5 +1,5 @@
1
1
  import { OptimizedBuffer } from "../buffer";
2
- import type { ParsedKey } from "../lib/parse.keypress";
2
+ import type { KeyEvent } from "../lib/KeyHandler";
3
3
  import { type ColorInput } from "../lib/RGBA";
4
4
  import { Renderable, type RenderableOptions } from "../Renderable";
5
5
  import type { RenderContext } from "../types";
@@ -56,7 +56,7 @@ export declare class InputRenderable extends Renderable {
56
56
  set cursorPosition(position: number);
57
57
  insertText(text: string): void;
58
58
  deleteCharacter(direction: "backward" | "forward"): void;
59
- handleKeyPress(key: ParsedKey | string): boolean;
59
+ handleKeyPress(key: KeyEvent | string): boolean;
60
60
  set maxLength(maxLength: number);
61
61
  set backgroundColor(value: ColorInput);
62
62
  set textColor(value: ColorInput);
@@ -1,6 +1,6 @@
1
1
  import type { OptimizedBuffer } from "../buffer";
2
2
  import { RGBA, type ColorInput } from "../lib";
3
- import type { ParsedKey } from "../lib/parse.keypress";
3
+ import type { KeyEvent } from "../lib/KeyHandler";
4
4
  import { Renderable, type RenderableOptions } from "../Renderable";
5
5
  import type { RenderContext } from "../types";
6
6
  import { SliderRenderable, type SliderOptions } from "./Slider";
@@ -42,7 +42,7 @@ export declare class ScrollBarRenderable extends Renderable {
42
42
  private updateSliderFromScrollState;
43
43
  scrollBy(delta: number, unit?: ScrollUnit): void;
44
44
  private recalculateVisibility;
45
- handleKeyPress(key: ParsedKey | string): boolean;
45
+ handleKeyPress(key: KeyEvent | string): boolean;
46
46
  }
47
47
  export interface ArrowOptions extends RenderableOptions<ArrowRenderable> {
48
48
  direction: "up" | "down" | "left" | "right";
@@ -1,4 +1,4 @@
1
- import { type ParsedKey } from "../lib";
1
+ import { type KeyEvent } from "../lib";
2
2
  import type { Renderable, RenderableOptions } from "../Renderable";
3
3
  import type { MouseEvent } from "../renderer";
4
4
  import type { RenderContext } from "../types";
@@ -77,7 +77,7 @@ export declare class ScrollBoxRenderable extends BoxRenderable {
77
77
  remove(id: string): void;
78
78
  getChildren(): Renderable[];
79
79
  protected onMouseEvent(event: MouseEvent): void;
80
- handleKeyPress(key: ParsedKey | string): boolean;
80
+ handleKeyPress(key: KeyEvent | string): boolean;
81
81
  startAutoScroll(mouseX: number, mouseY: number): void;
82
82
  updateAutoScroll(mouseX: number, mouseY: number): void;
83
83
  stopAutoScroll(): void;
@@ -1,6 +1,6 @@
1
1
  import { OptimizedBuffer } from "../buffer";
2
2
  import { fonts } from "../lib/ascii.font";
3
- import type { ParsedKey } from "../lib/parse.keypress";
3
+ import type { KeyEvent } from "../lib/KeyHandler";
4
4
  import { type ColorInput } from "../lib/RGBA";
5
5
  import { Renderable, type RenderableOptions } from "../Renderable";
6
6
  import type { RenderContext } from "../types";
@@ -81,7 +81,7 @@ export declare class SelectRenderable extends Renderable {
81
81
  setSelectedIndex(index: number): void;
82
82
  private updateScrollOffset;
83
83
  protected onResize(width: number, height: number): void;
84
- handleKeyPress(key: ParsedKey | string): boolean;
84
+ handleKeyPress(key: KeyEvent | string): boolean;
85
85
  get showScrollIndicator(): boolean;
86
86
  set showScrollIndicator(show: boolean);
87
87
  get showDescription(): boolean;
@@ -1,7 +1,7 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { OptimizedBuffer } from "../buffer";
3
3
  import { type ColorInput } from "../lib/RGBA";
4
- import type { ParsedKey } from "../lib/parse.keypress";
4
+ import type { KeyEvent } from "../lib/KeyHandler";
5
5
  import type { RenderContext } from "../types";
6
6
  export interface TabSelectOption {
7
7
  name: string;
@@ -63,7 +63,7 @@ export declare class TabSelectRenderable extends Renderable {
63
63
  protected onResize(width: number, height: number): void;
64
64
  setTabWidth(tabWidth: number): void;
65
65
  getTabWidth(): number;
66
- handleKeyPress(key: ParsedKey | string): boolean;
66
+ handleKeyPress(key: KeyEvent | string): boolean;
67
67
  get options(): TabSelectOption[];
68
68
  set options(options: TabSelectOption[]);
69
69
  set backgroundColor(color: ColorInput);
package/renderer.d.ts CHANGED
@@ -8,7 +8,7 @@ import { TerminalConsole, type ConsoleOptions } from "./console";
8
8
  import { type MouseEventType, type RawMouseEvent, type ScrollInfo } from "./lib/parse.mouse";
9
9
  import { Selection } from "./lib/selection";
10
10
  import { EventEmitter } from "events";
11
- import { KeyHandler } from "./lib/KeyHandler";
11
+ import { KeyHandler, InternalKeyHandler } from "./lib/KeyHandler";
12
12
  export interface CliRendererConfig {
13
13
  stdin?: NodeJS.ReadStream;
14
14
  stdout?: NodeJS.WriteStream;
@@ -160,6 +160,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
160
160
  get resolution(): PixelResolution | null;
161
161
  get console(): TerminalConsole;
162
162
  get keyInput(): KeyHandler;
163
+ get _internalKeyInput(): InternalKeyHandler;
163
164
  get terminalWidth(): number;
164
165
  get terminalHeight(): number;
165
166
  get useThread(): boolean;
package/testing.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  ANSI,
4
4
  CliRenderer,
5
5
  resolveRenderLib
6
- } from "./index-ce0mn4wa.js";
6
+ } from "./index-bq6h36ne.js";
7
7
 
8
8
  // src/testing/mock-keys.ts
9
9
  var KeyCodes = {
package/types.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { RGBA } from "./lib/RGBA";
2
2
  import type { EventEmitter } from "events";
3
3
  import type { Selection } from "./lib/selection";
4
4
  import type { Renderable } from "./Renderable";
5
- import type { KeyHandler } from "./lib";
5
+ import type { InternalKeyHandler, KeyHandler } from "./lib/KeyHandler";
6
6
  export declare const TextAttributes: {
7
7
  NONE: number;
8
8
  BOLD: number;
@@ -54,6 +54,7 @@ export interface RenderContext extends EventEmitter {
54
54
  unregisterLifecyclePass: (renderable: Renderable) => void;
55
55
  getLifecyclePasses: () => Set<Renderable>;
56
56
  keyInput: KeyHandler;
57
+ _internalKeyInput: InternalKeyHandler;
57
58
  }
58
59
  export type Timeout = ReturnType<typeof setTimeout> | undefined;
59
60
  export interface ViewportBounds {