@opentui/core 0.1.24 → 0.1.26

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 (59) hide show
  1. package/3d.js +1 -1
  2. package/README.md +5 -1
  3. package/Renderable.d.ts +18 -8
  4. package/animation/Timeline.d.ts +2 -1
  5. package/ansi.d.ts +2 -17
  6. package/assets/javascript/highlights.scm +205 -0
  7. package/assets/javascript/tree-sitter-javascript.wasm +0 -0
  8. package/assets/typescript/highlights.scm +604 -0
  9. package/assets/typescript/tree-sitter-typescript.wasm +0 -0
  10. package/{index-0yx9rnxg.js → index-pxa2sv92.js} +1798 -258
  11. package/index-pxa2sv92.js.map +52 -0
  12. package/index.js +449 -246
  13. package/index.js.map +15 -13
  14. package/lib/KeyHandler.d.ts +51 -9
  15. package/lib/data-paths.d.ts +26 -0
  16. package/lib/debounce.d.ts +42 -0
  17. package/lib/env.d.ts +42 -0
  18. package/lib/hast-styled-text.d.ts +3 -23
  19. package/lib/index.d.ts +6 -0
  20. package/lib/parse.keypress.d.ts +2 -2
  21. package/lib/queue.d.ts +15 -0
  22. package/lib/scroll-acceleration.d.ts +43 -0
  23. package/{singleton.d.ts → lib/singleton.d.ts} +2 -0
  24. package/lib/styled-text.d.ts +0 -15
  25. package/lib/syntax-style.d.ts +36 -0
  26. package/lib/tree-sitter/assets/update.d.ts +11 -0
  27. package/lib/tree-sitter/client.d.ts +46 -0
  28. package/lib/tree-sitter/default-parsers.d.ts +2 -0
  29. package/lib/tree-sitter/download-utils.d.ts +21 -0
  30. package/lib/tree-sitter/index.d.ts +10 -0
  31. package/lib/tree-sitter/parser.worker.d.ts +1 -0
  32. package/lib/tree-sitter/resolve-ft.d.ts +2 -0
  33. package/lib/tree-sitter/types.d.ts +64 -0
  34. package/lib/tree-sitter-styled-text.d.ts +7 -0
  35. package/lib/validate-dir-name.d.ts +1 -0
  36. package/package.json +21 -8
  37. package/parser.worker.js +640 -0
  38. package/parser.worker.js.map +11 -0
  39. package/renderables/ASCIIFont.d.ts +1 -1
  40. package/renderables/Code.d.ts +31 -0
  41. package/renderables/Input.d.ts +4 -4
  42. package/renderables/ScrollBar.d.ts +2 -2
  43. package/renderables/ScrollBox.d.ts +7 -3
  44. package/renderables/Select.d.ts +2 -2
  45. package/renderables/TabSelect.d.ts +2 -2
  46. package/renderables/Text.d.ts +11 -65
  47. package/renderables/TextBufferRenderable.d.ts +81 -0
  48. package/renderables/TextNode.d.ts +1 -0
  49. package/renderables/index.d.ts +2 -0
  50. package/renderer.d.ts +5 -3
  51. package/testing/mock-keys.d.ts +1 -0
  52. package/testing/spy.d.ts +7 -0
  53. package/testing/test-renderer.d.ts +1 -0
  54. package/testing.d.ts +1 -0
  55. package/testing.js +31 -6
  56. package/testing.js.map +6 -5
  57. package/types.d.ts +2 -1
  58. package/zig.d.ts +1 -0
  59. package/index-0yx9rnxg.js.map +0 -38
package/3d.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  __export,
6
6
  __require,
7
7
  __toESM
8
- } from "./index-0yx9rnxg.js";
8
+ } from "./index-pxa2sv92.js";
9
9
 
10
10
  // ../../node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
package/README.md CHANGED
@@ -3,7 +3,11 @@
3
3
  OpenTUI Core is a TypeScript library for building terminal user interfaces (TUIs). It is currently in
4
4
  development and is not ready for production use.
5
5
 
6
- [Getting Started](docs/getting-started.md)
6
+ ## Documentation
7
+
8
+ - [Getting Started](docs/getting-started.md)
9
+ - [Tree-Sitter](docs/tree-sitter.md)
10
+ - [Environment Variables](docs/env-vars.md)
7
11
 
8
12
  ## Install
9
13
 
package/Renderable.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter } from "events";
2
2
  import { type Node as YogaNode } from "yoga-layout";
3
3
  import { OptimizedBuffer } from "./buffer";
4
- import type { ParsedKey } from "./lib/parse.keypress";
4
+ import type { KeyEvent, PasteEvent } from "./lib/KeyHandler";
5
5
  import type { Selection } from "./lib/selection";
6
6
  import { type AlignString, type FlexDirectionString, type JustifyString, type OverflowString, type PositionTypeString, type WrapString } from "./lib/yoga.options";
7
7
  import { type VNode } from "./renderables/composition/vnode";
@@ -77,7 +77,8 @@ export interface RenderableOptions<T extends BaseRenderable = BaseRenderable> ex
77
77
  onMouseOver?: (this: T, event: MouseEvent) => void;
78
78
  onMouseOut?: (this: T, event: MouseEvent) => void;
79
79
  onMouseScroll?: (this: T, event: MouseEvent) => void;
80
- onKeyDown?: (key: ParsedKey) => void;
80
+ onPaste?: (this: T, text: string) => void;
81
+ onKeyDown?: (key: KeyEvent) => void;
81
82
  onSizeChange?: (this: T) => void;
82
83
  }
83
84
  export declare function isRenderable(obj: any): obj is Renderable;
@@ -97,6 +98,7 @@ export declare abstract class BaseRenderable extends EventEmitter {
97
98
  abstract getChildrenCount(): number;
98
99
  abstract getRenderable(id: string): BaseRenderable | undefined;
99
100
  abstract requestRender(): void;
101
+ abstract findDescendantById(id: string): BaseRenderable | undefined;
100
102
  get id(): string;
101
103
  set id(value: string);
102
104
  get isDirty(): boolean;
@@ -125,12 +127,14 @@ export declare abstract class Renderable extends BaseRenderable {
125
127
  protected frameBuffer: OptimizedBuffer | null;
126
128
  protected _focusable: boolean;
127
129
  protected _focused: boolean;
128
- protected keypressHandler: ((key: ParsedKey) => void) | null;
130
+ protected keypressHandler: ((key: KeyEvent) => void) | null;
131
+ protected pasteHandler: ((event: PasteEvent) => void) | null;
129
132
  private _live;
130
133
  protected _liveCount: number;
131
134
  private _sizeChangeListener;
132
135
  private _mouseListener;
133
136
  private _mouseListeners;
137
+ private _pasteListener;
134
138
  private _keyListeners;
135
139
  protected yogaNode: YogaNode;
136
140
  protected _positionType: PositionTypeString;
@@ -166,7 +170,8 @@ export declare abstract class Renderable extends BaseRenderable {
166
170
  get liveCount(): number;
167
171
  set live(value: boolean);
168
172
  protected propagateLiveCount(delta: number): void;
169
- handleKeyPress?(key: ParsedKey | string): boolean;
173
+ handleKeyPress?(key: KeyEvent | string): boolean;
174
+ handlePaste?(text: string): void;
170
175
  findDescendantById(id: string): Renderable | undefined;
171
176
  requestRender(): void;
172
177
  get translateX(): number;
@@ -228,6 +233,11 @@ export declare abstract class Renderable extends BaseRenderable {
228
233
  protected onLayoutResize(width: number, height: number): void;
229
234
  protected handleFrameBufferResize(width: number, height: number): void;
230
235
  protected createFrameBuffer(): void;
236
+ /**
237
+ * This will be called during a render pass.
238
+ * Requesting a render during a render pass will drop the requested render.
239
+ * If you need to request a render during a render pass, use process.nextTick.
240
+ */
231
241
  protected onResize(width: number, height: number): void;
232
242
  private replaceParent;
233
243
  private _forceLayoutUpdateFor;
@@ -265,8 +275,10 @@ export declare abstract class Renderable extends BaseRenderable {
265
275
  set onMouseOver(handler: ((event: MouseEvent) => void) | undefined);
266
276
  set onMouseOut(handler: ((event: MouseEvent) => void) | undefined);
267
277
  set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined);
268
- set onKeyDown(handler: ((key: ParsedKey) => void) | undefined);
269
- get onKeyDown(): ((key: ParsedKey) => void) | undefined;
278
+ set onPaste(handler: ((text: string) => void) | undefined);
279
+ get onPaste(): ((text: string) => void) | undefined;
280
+ set onKeyDown(handler: ((key: KeyEvent) => void) | undefined);
281
+ get onKeyDown(): ((key: KeyEvent) => void) | undefined;
270
282
  set onSizeChange(handler: (() => void) | undefined);
271
283
  get onSizeChange(): (() => void) | undefined;
272
284
  private applyEventOptions;
@@ -290,13 +302,11 @@ interface RenderCommandRender extends RenderCommandBase {
290
302
  }
291
303
  export type RenderCommand = RenderCommandPushScissorRect | RenderCommandPopScissorRect | RenderCommandRender;
292
304
  export declare class RootRenderable extends Renderable {
293
- private yogaConfig;
294
305
  private renderList;
295
306
  constructor(ctx: RenderContext);
296
307
  render(buffer: OptimizedBuffer, deltaTime: number): void;
297
308
  protected propagateLiveCount(delta: number): void;
298
309
  calculateLayout(): void;
299
310
  resize(width: number, height: number): void;
300
- protected destroySelf(): void;
301
311
  }
302
312
  export {};
@@ -1,3 +1,4 @@
1
+ import type { CliRenderer } from "../renderer";
1
2
  export interface TimelineOptions {
2
3
  duration?: number;
3
4
  loop?: boolean;
@@ -111,7 +112,7 @@ declare class TimelineEngine {
111
112
  defaults: {
112
113
  frameRate: number;
113
114
  };
114
- attach(renderer: any): void;
115
+ attach(renderer: CliRenderer): void;
115
116
  detach(): void;
116
117
  private updateLiveState;
117
118
  private onTimelineStateChange;
package/ansi.d.ts CHANGED
@@ -2,27 +2,12 @@ export declare const ANSI: {
2
2
  switchToAlternateScreen: string;
3
3
  switchToMainScreen: string;
4
4
  reset: string;
5
- hideCursor: string;
6
- showCursor: string;
7
- resetCursorColor: string;
8
- saveCursorState: string;
9
- restoreCursorState: string;
10
- queryPixelSize: string;
11
5
  scrollDown: (lines: number) => string;
12
6
  scrollUp: (lines: number) => string;
13
7
  moveCursor: (row: number, col: number) => string;
14
8
  moveCursorAndClear: (row: number, col: number) => string;
15
- clearFromCursor: string;
16
9
  setRgbBackground: (r: number, g: number, b: number) => string;
17
10
  resetBackground: string;
18
- enableMouseTracking: string;
19
- disableMouseTracking: string;
20
- enableButtonEventTracking: string;
21
- disableButtonEventTracking: string;
22
- enableAnyEventTracking: string;
23
- disableAnyEventTracking: string;
24
- enableSGRMouseMode: string;
25
- disableSGRMouseMode: string;
26
- makeRoomForRenderer: (height: number) => string;
27
- clearRendererSpace: (height: number) => string;
11
+ bracketedPasteStart: string;
12
+ bracketedPasteEnd: string;
28
13
  };
@@ -0,0 +1,205 @@
1
+ ; Query from: https://raw.githubusercontent.com/tree-sitter/tree-sitter-javascript/refs/heads/master/queries/highlights.scm
2
+ ; Variables
3
+ ;----------
4
+
5
+ (identifier) @variable
6
+
7
+ ; Properties
8
+ ;-----------
9
+
10
+ (property_identifier) @property
11
+
12
+ ; Function and method definitions
13
+ ;--------------------------------
14
+
15
+ (function_expression
16
+ name: (identifier) @function)
17
+ (function_declaration
18
+ name: (identifier) @function)
19
+ (method_definition
20
+ name: (property_identifier) @function.method)
21
+
22
+ (pair
23
+ key: (property_identifier) @function.method
24
+ value: [(function_expression) (arrow_function)])
25
+
26
+ (assignment_expression
27
+ left: (member_expression
28
+ property: (property_identifier) @function.method)
29
+ right: [(function_expression) (arrow_function)])
30
+
31
+ (variable_declarator
32
+ name: (identifier) @function
33
+ value: [(function_expression) (arrow_function)])
34
+
35
+ (assignment_expression
36
+ left: (identifier) @function
37
+ right: [(function_expression) (arrow_function)])
38
+
39
+ ; Function and method calls
40
+ ;--------------------------
41
+
42
+ (call_expression
43
+ function: (identifier) @function)
44
+
45
+ (call_expression
46
+ function: (member_expression
47
+ property: (property_identifier) @function.method))
48
+
49
+ ; Special identifiers
50
+ ;--------------------
51
+
52
+ ((identifier) @constructor
53
+ (#match? @constructor "^[A-Z]"))
54
+
55
+ ([
56
+ (identifier)
57
+ (shorthand_property_identifier)
58
+ (shorthand_property_identifier_pattern)
59
+ ] @constant
60
+ (#match? @constant "^[A-Z_][A-Z\\d_]+$"))
61
+
62
+ ((identifier) @variable.builtin
63
+ (#match? @variable.builtin "^(arguments|module|console|window|document)$")
64
+ (#is-not? local))
65
+
66
+ ((identifier) @function.builtin
67
+ (#eq? @function.builtin "require")
68
+ (#is-not? local))
69
+
70
+ ; Literals
71
+ ;---------
72
+
73
+ (this) @variable.builtin
74
+ (super) @variable.builtin
75
+
76
+ [
77
+ (true)
78
+ (false)
79
+ (null)
80
+ (undefined)
81
+ ] @constant.builtin
82
+
83
+ (comment) @comment
84
+
85
+ [
86
+ (string)
87
+ (template_string)
88
+ ] @string
89
+
90
+ (regex) @string.special
91
+ (number) @number
92
+
93
+ ; Tokens
94
+ ;-------
95
+
96
+ [
97
+ ";"
98
+ (optional_chain)
99
+ "."
100
+ ","
101
+ ] @punctuation.delimiter
102
+
103
+ [
104
+ "-"
105
+ "--"
106
+ "-="
107
+ "+"
108
+ "++"
109
+ "+="
110
+ "*"
111
+ "*="
112
+ "**"
113
+ "**="
114
+ "/"
115
+ "/="
116
+ "%"
117
+ "%="
118
+ "<"
119
+ "<="
120
+ "<<"
121
+ "<<="
122
+ "="
123
+ "=="
124
+ "==="
125
+ "!"
126
+ "!="
127
+ "!=="
128
+ "=>"
129
+ ">"
130
+ ">="
131
+ ">>"
132
+ ">>="
133
+ ">>>"
134
+ ">>>="
135
+ "~"
136
+ "^"
137
+ "&"
138
+ "|"
139
+ "^="
140
+ "&="
141
+ "|="
142
+ "&&"
143
+ "||"
144
+ "??"
145
+ "&&="
146
+ "||="
147
+ "??="
148
+ ] @operator
149
+
150
+ [
151
+ "("
152
+ ")"
153
+ "["
154
+ "]"
155
+ "{"
156
+ "}"
157
+ ] @punctuation.bracket
158
+
159
+ (template_substitution
160
+ "${" @punctuation.special
161
+ "}" @punctuation.special) @embedded
162
+
163
+ [
164
+ "as"
165
+ "async"
166
+ "await"
167
+ "break"
168
+ "case"
169
+ "catch"
170
+ "class"
171
+ "const"
172
+ "continue"
173
+ "debugger"
174
+ "default"
175
+ "delete"
176
+ "do"
177
+ "else"
178
+ "export"
179
+ "extends"
180
+ "finally"
181
+ "for"
182
+ "from"
183
+ "function"
184
+ "get"
185
+ "if"
186
+ "import"
187
+ "in"
188
+ "instanceof"
189
+ "let"
190
+ "new"
191
+ "of"
192
+ "return"
193
+ "set"
194
+ "static"
195
+ "switch"
196
+ "target"
197
+ "throw"
198
+ "try"
199
+ "typeof"
200
+ "var"
201
+ "void"
202
+ "while"
203
+ "with"
204
+ "yield"
205
+ ] @keyword