@opentui/core 0.1.30 → 0.1.32

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 (40) hide show
  1. package/3d.js +1 -1
  2. package/Renderable.d.ts +4 -4
  3. package/assets/markdown/highlights.scm +150 -0
  4. package/assets/markdown/injections.scm +27 -0
  5. package/assets/markdown/tree-sitter-markdown.wasm +0 -0
  6. package/assets/markdown_inline/highlights.scm +115 -0
  7. package/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  8. package/edit-buffer.d.ts +13 -12
  9. package/editor-view.d.ts +10 -0
  10. package/{index-0qmm1k4p.js → index-3f9h747j.js} +1424 -186
  11. package/index-3f9h747j.js.map +56 -0
  12. package/index.js +314 -83
  13. package/index.js.map +14 -14
  14. package/lib/KeyHandler.d.ts +4 -1
  15. package/lib/extmarks-history.d.ts +17 -0
  16. package/lib/extmarks.d.ts +88 -0
  17. package/lib/index.d.ts +2 -0
  18. package/lib/parse.keypress.d.ts +2 -1
  19. package/lib/stdin-buffer.d.ts +42 -0
  20. package/lib/tree-sitter/client.d.ts +1 -0
  21. package/lib/tree-sitter/parsers-config.d.ts +38 -0
  22. package/lib/tree-sitter/types.d.ts +18 -1
  23. package/lib/tree-sitter-styled-text.d.ts +9 -2
  24. package/package.json +9 -9
  25. package/parser.worker.js +250 -27
  26. package/parser.worker.js.map +3 -3
  27. package/renderables/Box.d.ts +1 -0
  28. package/renderables/Code.d.ts +14 -0
  29. package/renderables/EditBufferRenderable.d.ts +20 -4
  30. package/renderables/TextBufferRenderable.d.ts +10 -0
  31. package/renderables/Textarea.d.ts +21 -13
  32. package/renderer.d.ts +1 -0
  33. package/syntax-style.d.ts +2 -0
  34. package/testing/mock-keys.d.ts +22 -61
  35. package/testing.js +36 -78
  36. package/testing.js.map +3 -3
  37. package/text-buffer-view.d.ts +2 -0
  38. package/text-buffer.d.ts +3 -0
  39. package/zig.d.ts +29 -7
  40. package/index-0qmm1k4p.js.map +0 -53
package/3d.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  __export,
6
6
  __require,
7
7
  __toESM
8
- } from "./index-0qmm1k4p.js";
8
+ } from "./index-3f9h747j.js";
9
9
 
10
10
  // ../../node_modules/.bun/omggif@1.0.10/node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
package/Renderable.d.ts CHANGED
@@ -77,7 +77,7 @@ 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
- onPaste?: (this: T, text: string) => void;
80
+ onPaste?: (this: T, event: PasteEvent) => void;
81
81
  onKeyDown?: (key: KeyEvent) => void;
82
82
  onSizeChange?: (this: T) => void;
83
83
  }
@@ -172,7 +172,7 @@ export declare abstract class Renderable extends BaseRenderable {
172
172
  set live(value: boolean);
173
173
  protected propagateLiveCount(delta: number): void;
174
174
  handleKeyPress?(key: KeyEvent | string): boolean;
175
- handlePaste?(text: string): void;
175
+ handlePaste?(event: PasteEvent): void;
176
176
  findDescendantById(id: string): Renderable | undefined;
177
177
  requestRender(): void;
178
178
  get translateX(): number;
@@ -276,8 +276,8 @@ export declare abstract class Renderable extends BaseRenderable {
276
276
  set onMouseOver(handler: ((event: MouseEvent) => void) | undefined);
277
277
  set onMouseOut(handler: ((event: MouseEvent) => void) | undefined);
278
278
  set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined);
279
- set onPaste(handler: ((text: string) => void) | undefined);
280
- get onPaste(): ((text: string) => void) | undefined;
279
+ set onPaste(handler: ((event: PasteEvent) => void) | undefined);
280
+ get onPaste(): ((event: PasteEvent) => void) | undefined;
281
281
  set onKeyDown(handler: ((key: KeyEvent) => void) | undefined);
282
282
  get onKeyDown(): ((key: KeyEvent) => void) | undefined;
283
283
  set onSizeChange(handler: (() => void) | undefined);
@@ -0,0 +1,150 @@
1
+ ; Query from: https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/markdown/highlights.scm
2
+ ;From MDeiml/tree-sitter-markdown & Helix
3
+ (setext_heading
4
+ (paragraph) @markup.heading.1
5
+ (setext_h1_underline) @markup.heading.1)
6
+
7
+ (setext_heading
8
+ (paragraph) @markup.heading.2
9
+ (setext_h2_underline) @markup.heading.2)
10
+
11
+ ; Capture the entire heading node first based on the marker it contains
12
+ ((atx_heading (atx_h1_marker)) @markup.heading.1
13
+ (#set! priority 90))
14
+
15
+ ((atx_heading (atx_h2_marker)) @markup.heading.2
16
+ (#set! priority 90))
17
+
18
+ ((atx_heading (atx_h3_marker)) @markup.heading.3
19
+ (#set! priority 90))
20
+
21
+ ((atx_heading (atx_h4_marker)) @markup.heading.4
22
+ (#set! priority 90))
23
+
24
+ ((atx_heading (atx_h5_marker)) @markup.heading.5
25
+ (#set! priority 90))
26
+
27
+ ((atx_heading (atx_h6_marker)) @markup.heading.6
28
+ (#set! priority 90))
29
+
30
+ ; Then capture and conceal just the markers (they don't need special styling)
31
+ (atx_heading
32
+ (atx_h1_marker) @conceal
33
+ (#set! conceal ""))
34
+
35
+ (atx_heading
36
+ (atx_h2_marker) @conceal
37
+ (#set! conceal ""))
38
+
39
+ (atx_heading
40
+ (atx_h3_marker) @conceal
41
+ (#set! conceal ""))
42
+
43
+ (atx_heading
44
+ (atx_h4_marker) @conceal
45
+ (#set! conceal ""))
46
+
47
+ (atx_heading
48
+ (atx_h5_marker) @conceal
49
+ (#set! conceal ""))
50
+
51
+ (atx_heading
52
+ (atx_h6_marker) @conceal
53
+ (#set! conceal ""))
54
+
55
+ (info_string) @label
56
+
57
+ (pipe_table_header
58
+ (pipe_table_cell) @markup.heading)
59
+
60
+ (pipe_table_header
61
+ "|" @punctuation.special)
62
+
63
+ (pipe_table_row
64
+ "|" @punctuation.special)
65
+
66
+ (pipe_table_delimiter_row
67
+ "|" @punctuation.special)
68
+
69
+ (pipe_table_delimiter_cell) @punctuation.special
70
+
71
+ ; Code blocks (conceal backticks and language annotation)
72
+ (indented_code_block) @markup.raw.block
73
+
74
+ ((fenced_code_block) @markup.raw.block
75
+ (#set! priority 90))
76
+
77
+ (fenced_code_block
78
+ (fenced_code_block_delimiter) @markup.raw.block
79
+ (#set! conceal "")
80
+ (#set! conceal_lines ""))
81
+
82
+ (fenced_code_block
83
+ (info_string
84
+ (language) @label
85
+ (#set! conceal "")
86
+ (#set! conceal_lines "")))
87
+
88
+ (link_destination) @markup.link.url
89
+
90
+ [
91
+ (link_title)
92
+ (link_label)
93
+ ] @markup.link.label
94
+
95
+ ((link_label)
96
+ .
97
+ ":" @punctuation.delimiter)
98
+
99
+ [
100
+ (list_marker_plus)
101
+ (list_marker_minus)
102
+ (list_marker_star)
103
+ (list_marker_dot)
104
+ (list_marker_parenthesis)
105
+ ] @markup.list
106
+
107
+ ; NOTE: The following has been commented out due to issues with spaces in the
108
+ ; list marker nodes generated by the parser. If those spaces ever get captured
109
+ ; by a different node (e.g. block_continuation) we can safely re-add these
110
+ ; conceals.
111
+ ; ;; Conceal bullet points
112
+ ; ([(list_marker_plus) (list_marker_star)]
113
+ ; @punctuation.special
114
+ ; (#offset! @punctuation.special 0 0 0 -1)
115
+ ; (#set! conceal "•"))
116
+ ; ([(list_marker_plus) (list_marker_star)]
117
+ ; @punctuation.special
118
+ ; (#any-of? @punctuation.special "+" "*")
119
+ ; (#set! conceal "•"))
120
+ ; ((list_marker_minus)
121
+ ; @punctuation.special
122
+ ; (#offset! @punctuation.special 0 0 0 -1)
123
+ ; (#set! conceal "—"))
124
+ ; ((list_marker_minus)
125
+ ; @punctuation.special
126
+ ; (#eq? @punctuation.special "-")
127
+ ; (#set! conceal "—"))
128
+ (thematic_break) @punctuation.special
129
+
130
+ (task_list_marker_unchecked) @markup.list.unchecked
131
+
132
+ (task_list_marker_checked) @markup.list.checked
133
+
134
+ ((block_quote) @markup.quote
135
+ (#set! priority 90))
136
+
137
+ ([
138
+ (plus_metadata)
139
+ (minus_metadata)
140
+ ] @keyword.directive
141
+ (#set! priority 90))
142
+
143
+ [
144
+ (block_continuation)
145
+ (block_quote_marker)
146
+ ] @punctuation.special
147
+
148
+ (backslash_escape) @string.escape
149
+
150
+ (inline) @spell
@@ -0,0 +1,27 @@
1
+ ; Query from: https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/markdown/injections.scm
2
+ (fenced_code_block
3
+ (info_string
4
+ (language) @_lang)
5
+ (code_fence_content) @injection.content
6
+ (#set-lang-from-info-string! @_lang))
7
+
8
+ ((html_block) @injection.content
9
+ (#set! injection.language "html")
10
+ (#set! injection.combined)
11
+ (#set! injection.include-children))
12
+
13
+ ((minus_metadata) @injection.content
14
+ (#set! injection.language "yaml")
15
+ (#offset! @injection.content 1 0 -1 0)
16
+ (#set! injection.include-children))
17
+
18
+ ((plus_metadata) @injection.content
19
+ (#set! injection.language "toml")
20
+ (#offset! @injection.content 1 0 -1 0)
21
+ (#set! injection.include-children))
22
+
23
+ ([
24
+ (inline)
25
+ (pipe_table_cell)
26
+ ] @injection.content
27
+ (#set! injection.language "markdown_inline"))
@@ -0,0 +1,115 @@
1
+ ; Query from: https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/99ddf573531c4dbe53f743ecbc1595af5eb1d32f/queries/markdown_inline/highlights.scm
2
+ ; From MDeiml/tree-sitter-markdown
3
+ (code_span) @markup.raw @nospell
4
+
5
+ (emphasis) @markup.italic
6
+
7
+ (strong_emphasis) @markup.strong
8
+
9
+ (strikethrough) @markup.strikethrough
10
+
11
+ (shortcut_link
12
+ (link_text) @nospell)
13
+
14
+ [
15
+ (backslash_escape)
16
+ (hard_line_break)
17
+ ] @string.escape
18
+
19
+ ; Conceal codeblock and text style markers
20
+ ([
21
+ (code_span_delimiter)
22
+ (emphasis_delimiter)
23
+ ] @conceal
24
+ (#set! conceal ""))
25
+
26
+ ; Inline links - style all parts
27
+ (inline_link
28
+ ["[" "(" ")"] @markup.link)
29
+
30
+ (inline_link
31
+ "]" @markup.link.bracket.close)
32
+
33
+ ; Conceal opening bracket
34
+ ((inline_link
35
+ "[" @conceal)
36
+ (#set! conceal ""))
37
+
38
+ ; Conceal closing bracket with space replacement
39
+ ((inline_link
40
+ "]" @conceal)
41
+ (#set! conceal " "))
42
+
43
+ ; Conceal image links
44
+ (image
45
+ [
46
+ "!"
47
+ "["
48
+ "]"
49
+ "("
50
+ (link_destination)
51
+ ")"
52
+ ] @markup.link
53
+ (#set! conceal ""))
54
+
55
+ ; Conceal full reference links
56
+ (full_reference_link
57
+ [
58
+ "["
59
+ "]"
60
+ (link_label)
61
+ ] @markup.link
62
+ (#set! conceal ""))
63
+
64
+ ; Conceal collapsed reference links
65
+ (collapsed_reference_link
66
+ [
67
+ "["
68
+ "]"
69
+ ] @markup.link
70
+ (#set! conceal ""))
71
+
72
+ ; Conceal shortcut links
73
+ (shortcut_link
74
+ [
75
+ "["
76
+ "]"
77
+ ] @markup.link
78
+ (#set! conceal ""))
79
+
80
+ [
81
+ (link_destination)
82
+ (uri_autolink)
83
+ ] @markup.link.url @nospell
84
+
85
+ [
86
+ (link_label)
87
+ (link_text)
88
+ (link_title)
89
+ (image_description)
90
+ ] @markup.link.label
91
+
92
+ ; Replace common HTML entities.
93
+ ((entity_reference) @character.special
94
+ (#eq? @character.special "&nbsp;")
95
+ (#set! conceal ""))
96
+
97
+ ((entity_reference) @character.special
98
+ (#eq? @character.special "&lt;")
99
+ (#set! conceal "<"))
100
+
101
+ ((entity_reference) @character.special
102
+ (#eq? @character.special "&gt;")
103
+ (#set! conceal ">"))
104
+
105
+ ((entity_reference) @character.special
106
+ (#eq? @character.special "&amp;")
107
+ (#set! conceal "&"))
108
+
109
+ ((entity_reference) @character.special
110
+ (#eq? @character.special "&quot;")
111
+ (#set! conceal "\""))
112
+
113
+ ((entity_reference) @character.special
114
+ (#any-of? @character.special "&ensp;" "&emsp;")
115
+ (#set! conceal " "))
package/edit-buffer.d.ts CHANGED
@@ -1,14 +1,10 @@
1
- import { type RenderLib } from "./zig";
1
+ import { type LogicalCursor, type RenderLib } from "./zig";
2
2
  import { type Pointer } from "bun:ffi";
3
3
  import { type WidthMethod, type Highlight } from "./types";
4
4
  import { RGBA } from "./lib/RGBA";
5
5
  import { EventEmitter } from "events";
6
6
  import type { SyntaxStyle } from "./syntax-style";
7
- export interface CursorPosition {
8
- line: number;
9
- visualColumn: number;
10
- offset: number;
11
- }
7
+ export type { LogicalCursor };
12
8
  /**
13
9
  * EditBuffer provides a text editing buffer with cursor management,
14
10
  * incremental editing, and grapheme-aware operations.
@@ -52,10 +48,16 @@ export declare class EditBuffer extends EventEmitter {
52
48
  setCursor(line: number, col: number): void;
53
49
  setCursorToLineCol(line: number, col: number): void;
54
50
  setCursorByOffset(offset: number): void;
55
- getCursorPosition(): CursorPosition;
56
- getNextWordBoundary(): CursorPosition;
57
- getPrevWordBoundary(): CursorPosition;
58
- getEOL(): CursorPosition;
51
+ getCursorPosition(): LogicalCursor;
52
+ getNextWordBoundary(): LogicalCursor;
53
+ getPrevWordBoundary(): LogicalCursor;
54
+ getEOL(): LogicalCursor;
55
+ offsetToPosition(offset: number): {
56
+ row: number;
57
+ col: number;
58
+ } | null;
59
+ positionToOffset(row: number, col: number): number;
60
+ getLineStartOffset(row: number): number;
59
61
  debugLogRope(): void;
60
62
  undo(): string | null;
61
63
  redo(): string | null;
@@ -66,8 +68,6 @@ export declare class EditBuffer extends EventEmitter {
66
68
  setDefaultBg(bg: RGBA | null): void;
67
69
  setDefaultAttributes(attributes: number | null): void;
68
70
  resetDefaults(): void;
69
- setPlaceholder(text: string | null): void;
70
- setPlaceholderColor(color: RGBA): void;
71
71
  setSyntaxStyle(style: SyntaxStyle | null): void;
72
72
  getSyntaxStyle(): SyntaxStyle | null;
73
73
  addHighlight(lineIdx: number, highlight: Highlight): void;
@@ -76,5 +76,6 @@ export declare class EditBuffer extends EventEmitter {
76
76
  clearLineHighlights(lineIdx: number): void;
77
77
  clearAllHighlights(): void;
78
78
  getLineHighlights(lineIdx: number): Array<Highlight>;
79
+ clear(): void;
79
80
  destroy(): void;
80
81
  }
package/editor-view.d.ts CHANGED
@@ -14,6 +14,7 @@ export declare class EditorView {
14
14
  private viewPtr;
15
15
  private editBuffer;
16
16
  private _destroyed;
17
+ private _extmarksController?;
17
18
  constructor(lib: RenderLib, ptr: Pointer, editBuffer: EditBuffer);
18
19
  static create(editBuffer: EditBuffer, viewportWidth: number, viewportHeight: number): EditorView;
19
20
  private guard;
@@ -49,5 +50,14 @@ export declare class EditorView {
49
50
  getEOL(): VisualCursor;
50
51
  getLineInfo(): LineInfo;
51
52
  getLogicalLineInfo(): LineInfo;
53
+ get extmarks(): any;
54
+ setPlaceholderStyledText(chunks: {
55
+ text: string;
56
+ fg?: RGBA;
57
+ bg?: RGBA;
58
+ attributes?: number;
59
+ }[]): void;
60
+ setTabIndicator(indicator: string | number): void;
61
+ setTabIndicatorColor(color: RGBA): void;
52
62
  destroy(): void;
53
63
  }