@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.
- package/3d.js +1 -1
- package/Renderable.d.ts +4 -4
- package/assets/markdown/highlights.scm +150 -0
- package/assets/markdown/injections.scm +27 -0
- package/assets/markdown/tree-sitter-markdown.wasm +0 -0
- package/assets/markdown_inline/highlights.scm +115 -0
- package/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- package/edit-buffer.d.ts +13 -12
- package/editor-view.d.ts +10 -0
- package/{index-0qmm1k4p.js → index-3f9h747j.js} +1424 -186
- package/index-3f9h747j.js.map +56 -0
- package/index.js +314 -83
- package/index.js.map +14 -14
- package/lib/KeyHandler.d.ts +4 -1
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +88 -0
- package/lib/index.d.ts +2 -0
- package/lib/parse.keypress.d.ts +2 -1
- package/lib/stdin-buffer.d.ts +42 -0
- package/lib/tree-sitter/client.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +38 -0
- package/lib/tree-sitter/types.d.ts +18 -1
- package/lib/tree-sitter-styled-text.d.ts +9 -2
- package/package.json +9 -9
- package/parser.worker.js +250 -27
- package/parser.worker.js.map +3 -3
- package/renderables/Box.d.ts +1 -0
- package/renderables/Code.d.ts +14 -0
- package/renderables/EditBufferRenderable.d.ts +20 -4
- package/renderables/TextBufferRenderable.d.ts +10 -0
- package/renderables/Textarea.d.ts +21 -13
- package/renderer.d.ts +1 -0
- package/syntax-style.d.ts +2 -0
- package/testing/mock-keys.d.ts +22 -61
- package/testing.js +36 -78
- package/testing.js.map +3 -3
- package/text-buffer-view.d.ts +2 -0
- package/text-buffer.d.ts +3 -0
- package/zig.d.ts +29 -7
- package/index-0qmm1k4p.js.map +0 -53
package/3d.js
CHANGED
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,
|
|
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?(
|
|
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: ((
|
|
280
|
-
get onPaste(): ((
|
|
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"))
|
|
Binary file
|
|
@@ -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 " ")
|
|
95
|
+
(#set! conceal ""))
|
|
96
|
+
|
|
97
|
+
((entity_reference) @character.special
|
|
98
|
+
(#eq? @character.special "<")
|
|
99
|
+
(#set! conceal "<"))
|
|
100
|
+
|
|
101
|
+
((entity_reference) @character.special
|
|
102
|
+
(#eq? @character.special ">")
|
|
103
|
+
(#set! conceal ">"))
|
|
104
|
+
|
|
105
|
+
((entity_reference) @character.special
|
|
106
|
+
(#eq? @character.special "&")
|
|
107
|
+
(#set! conceal "&"))
|
|
108
|
+
|
|
109
|
+
((entity_reference) @character.special
|
|
110
|
+
(#eq? @character.special """)
|
|
111
|
+
(#set! conceal "\""))
|
|
112
|
+
|
|
113
|
+
((entity_reference) @character.special
|
|
114
|
+
(#any-of? @character.special " " " ")
|
|
115
|
+
(#set! conceal " "))
|
|
Binary file
|
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
|
|
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():
|
|
56
|
-
getNextWordBoundary():
|
|
57
|
-
getPrevWordBoundary():
|
|
58
|
-
getEOL():
|
|
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
|
}
|