@termaxjs/editor 0.1.0

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 (215) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +85 -0
  3. package/dist/TermaxEditor.d.ts +74 -0
  4. package/dist/TermaxEditor.d.ts.map +1 -0
  5. package/dist/TermaxEditor.js +728 -0
  6. package/dist/TermaxEditor.js.map +1 -0
  7. package/dist/adapter.d.ts +2 -0
  8. package/dist/adapter.d.ts.map +1 -0
  9. package/dist/adapter.js +2 -0
  10. package/dist/adapter.js.map +1 -0
  11. package/dist/ai/GhostTextManager.d.ts +34 -0
  12. package/dist/ai/GhostTextManager.d.ts.map +1 -0
  13. package/dist/ai/GhostTextManager.js +116 -0
  14. package/dist/ai/GhostTextManager.js.map +1 -0
  15. package/dist/ai/StreamingDiffApplier.d.ts +28 -0
  16. package/dist/ai/StreamingDiffApplier.d.ts.map +1 -0
  17. package/dist/ai/StreamingDiffApplier.js +61 -0
  18. package/dist/ai/StreamingDiffApplier.js.map +1 -0
  19. package/dist/canvas.d.ts +2 -0
  20. package/dist/canvas.d.ts.map +1 -0
  21. package/dist/canvas.js +2 -0
  22. package/dist/canvas.js.map +1 -0
  23. package/dist/codelens/CodeLensProvider.d.ts +22 -0
  24. package/dist/codelens/CodeLensProvider.d.ts.map +1 -0
  25. package/dist/codelens/CodeLensProvider.js +36 -0
  26. package/dist/codelens/CodeLensProvider.js.map +1 -0
  27. package/dist/core.d.ts +2 -0
  28. package/dist/core.d.ts.map +1 -0
  29. package/dist/core.js +2 -0
  30. package/dist/core.js.map +1 -0
  31. package/dist/diff/ConflictResolver.d.ts +27 -0
  32. package/dist/diff/ConflictResolver.d.ts.map +1 -0
  33. package/dist/diff/ConflictResolver.js +88 -0
  34. package/dist/diff/ConflictResolver.js.map +1 -0
  35. package/dist/diff/DiffEditor.d.ts +18 -0
  36. package/dist/diff/DiffEditor.d.ts.map +1 -0
  37. package/dist/diff/DiffEditor.js +212 -0
  38. package/dist/diff/DiffEditor.js.map +1 -0
  39. package/dist/diff/InlineDiffModel.d.ts +18 -0
  40. package/dist/diff/InlineDiffModel.d.ts.map +1 -0
  41. package/dist/diff/InlineDiffModel.js +78 -0
  42. package/dist/diff/InlineDiffModel.js.map +1 -0
  43. package/dist/element/TermaxEditorElement.d.ts +28 -0
  44. package/dist/element/TermaxEditorElement.d.ts.map +1 -0
  45. package/dist/element/TermaxEditorElement.js +123 -0
  46. package/dist/element/TermaxEditorElement.js.map +1 -0
  47. package/dist/fold/computeFoldRanges.d.ts +8 -0
  48. package/dist/fold/computeFoldRanges.d.ts.map +1 -0
  49. package/dist/fold/computeFoldRanges.js +109 -0
  50. package/dist/fold/computeFoldRanges.js.map +1 -0
  51. package/dist/format/formatter.d.ts +5 -0
  52. package/dist/format/formatter.d.ts.map +1 -0
  53. package/dist/format/formatter.js +89 -0
  54. package/dist/format/formatter.js.map +1 -0
  55. package/dist/git/GitGutterManager.d.ts +17 -0
  56. package/dist/git/GitGutterManager.d.ts.map +1 -0
  57. package/dist/git/GitGutterManager.js +50 -0
  58. package/dist/git/GitGutterManager.js.map +1 -0
  59. package/dist/git/InlineBlameManager.d.ts +18 -0
  60. package/dist/git/InlineBlameManager.d.ts.map +1 -0
  61. package/dist/git/InlineBlameManager.js +33 -0
  62. package/dist/git/InlineBlameManager.js.map +1 -0
  63. package/dist/gutter/FoldGutter.d.ts +12 -0
  64. package/dist/gutter/FoldGutter.d.ts.map +1 -0
  65. package/dist/gutter/FoldGutter.js +51 -0
  66. package/dist/gutter/FoldGutter.js.map +1 -0
  67. package/dist/gutter/LineNumbers.d.ts +11 -0
  68. package/dist/gutter/LineNumbers.d.ts.map +1 -0
  69. package/dist/gutter/LineNumbers.js +71 -0
  70. package/dist/gutter/LineNumbers.js.map +1 -0
  71. package/dist/highlight/microTokenizer.d.ts +20 -0
  72. package/dist/highlight/microTokenizer.d.ts.map +1 -0
  73. package/dist/highlight/microTokenizer.js +951 -0
  74. package/dist/highlight/microTokenizer.js.map +1 -0
  75. package/dist/index.d.ts +46 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +46 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/input/KeymapPresets.d.ts +10 -0
  80. package/dist/input/KeymapPresets.d.ts.map +1 -0
  81. package/dist/input/KeymapPresets.js +46 -0
  82. package/dist/input/KeymapPresets.js.map +1 -0
  83. package/dist/input/OffscreenInput.d.ts +27 -0
  84. package/dist/input/OffscreenInput.d.ts.map +1 -0
  85. package/dist/input/OffscreenInput.js +367 -0
  86. package/dist/input/OffscreenInput.js.map +1 -0
  87. package/dist/languages/GrammarRegistry.d.ts +55 -0
  88. package/dist/languages/GrammarRegistry.d.ts.map +1 -0
  89. package/dist/languages/GrammarRegistry.js +80 -0
  90. package/dist/languages/GrammarRegistry.js.map +1 -0
  91. package/dist/languages/LanguageAdapter.d.ts +11 -0
  92. package/dist/languages/LanguageAdapter.d.ts.map +1 -0
  93. package/dist/languages/LanguageAdapter.js +47 -0
  94. package/dist/languages/LanguageAdapter.js.map +1 -0
  95. package/dist/languages/TreeSitterAdapter.d.ts +29 -0
  96. package/dist/languages/TreeSitterAdapter.d.ts.map +1 -0
  97. package/dist/languages/TreeSitterAdapter.js +99 -0
  98. package/dist/languages/TreeSitterAdapter.js.map +1 -0
  99. package/dist/languages/index.d.ts +16 -0
  100. package/dist/languages/index.d.ts.map +1 -0
  101. package/dist/languages/index.js +163 -0
  102. package/dist/languages/index.js.map +1 -0
  103. package/dist/lsp/InlayHintProvider.d.ts +18 -0
  104. package/dist/lsp/InlayHintProvider.d.ts.map +1 -0
  105. package/dist/lsp/InlayHintProvider.js +26 -0
  106. package/dist/lsp/InlayHintProvider.js.map +1 -0
  107. package/dist/lsp/LspClient.d.ts +73 -0
  108. package/dist/lsp/LspClient.d.ts.map +1 -0
  109. package/dist/lsp/LspClient.js +261 -0
  110. package/dist/lsp/LspClient.js.map +1 -0
  111. package/dist/lsp/SemanticTokensDecoder.d.ts +26 -0
  112. package/dist/lsp/SemanticTokensDecoder.d.ts.map +1 -0
  113. package/dist/lsp/SemanticTokensDecoder.js +88 -0
  114. package/dist/lsp/SemanticTokensDecoder.js.map +1 -0
  115. package/dist/lsp/WorkspaceSymbolIndex.d.ts +32 -0
  116. package/dist/lsp/WorkspaceSymbolIndex.d.ts.map +1 -0
  117. package/dist/lsp/WorkspaceSymbolIndex.js +73 -0
  118. package/dist/lsp/WorkspaceSymbolIndex.js.map +1 -0
  119. package/dist/minimap/Minimap.d.ts +24 -0
  120. package/dist/minimap/Minimap.d.ts.map +1 -0
  121. package/dist/minimap/Minimap.js +31 -0
  122. package/dist/minimap/Minimap.js.map +1 -0
  123. package/dist/minimap/useMinimap.d.ts +75 -0
  124. package/dist/minimap/useMinimap.d.ts.map +1 -0
  125. package/dist/minimap/useMinimap.js +179 -0
  126. package/dist/minimap/useMinimap.js.map +1 -0
  127. package/dist/navigation/StickyScrollHeader.d.ts +16 -0
  128. package/dist/navigation/StickyScrollHeader.d.ts.map +1 -0
  129. package/dist/navigation/StickyScrollHeader.js +49 -0
  130. package/dist/navigation/StickyScrollHeader.js.map +1 -0
  131. package/dist/navigation/StickyScrollManager.d.ts +18 -0
  132. package/dist/navigation/StickyScrollManager.d.ts.map +1 -0
  133. package/dist/navigation/StickyScrollManager.js +32 -0
  134. package/dist/navigation/StickyScrollManager.js.map +1 -0
  135. package/dist/overlay/CompletionMenu.d.ts +15 -0
  136. package/dist/overlay/CompletionMenu.d.ts.map +1 -0
  137. package/dist/overlay/CompletionMenu.js +90 -0
  138. package/dist/overlay/CompletionMenu.js.map +1 -0
  139. package/dist/overlay/FindReplace.d.ts +6 -0
  140. package/dist/overlay/FindReplace.d.ts.map +1 -0
  141. package/dist/overlay/FindReplace.js +278 -0
  142. package/dist/overlay/FindReplace.js.map +1 -0
  143. package/dist/overlay/HoverTooltip.d.ts +12 -0
  144. package/dist/overlay/HoverTooltip.d.ts.map +1 -0
  145. package/dist/overlay/HoverTooltip.js +67 -0
  146. package/dist/overlay/HoverTooltip.js.map +1 -0
  147. package/dist/overlay/RemoteCursorsOverlay.d.ts +15 -0
  148. package/dist/overlay/RemoteCursorsOverlay.d.ts.map +1 -0
  149. package/dist/overlay/RemoteCursorsOverlay.js +50 -0
  150. package/dist/overlay/RemoteCursorsOverlay.js.map +1 -0
  151. package/dist/overlay/SignatureHelpTooltip.d.ts +11 -0
  152. package/dist/overlay/SignatureHelpTooltip.d.ts.map +1 -0
  153. package/dist/overlay/SignatureHelpTooltip.js +36 -0
  154. package/dist/overlay/SignatureHelpTooltip.js.map +1 -0
  155. package/dist/pairs/SelectionSurround.d.ts +14 -0
  156. package/dist/pairs/SelectionSurround.d.ts.map +1 -0
  157. package/dist/pairs/SelectionSurround.js +29 -0
  158. package/dist/pairs/SelectionSurround.js.map +1 -0
  159. package/dist/pairs/pairMatching.d.ts +6 -0
  160. package/dist/pairs/pairMatching.d.ts.map +1 -0
  161. package/dist/pairs/pairMatching.js +169 -0
  162. package/dist/pairs/pairMatching.js.map +1 -0
  163. package/dist/plugin/ViewPlugin.d.ts +20 -0
  164. package/dist/plugin/ViewPlugin.d.ts.map +1 -0
  165. package/dist/plugin/ViewPlugin.js +17 -0
  166. package/dist/plugin/ViewPlugin.js.map +1 -0
  167. package/dist/react.d.ts +2 -0
  168. package/dist/react.d.ts.map +1 -0
  169. package/dist/react.js +2 -0
  170. package/dist/react.js.map +1 -0
  171. package/dist/renderer/CanvasViewport.d.ts +23 -0
  172. package/dist/renderer/CanvasViewport.d.ts.map +1 -0
  173. package/dist/renderer/CanvasViewport.js +134 -0
  174. package/dist/renderer/CanvasViewport.js.map +1 -0
  175. package/dist/renderer/VirtualizedLines.d.ts +30 -0
  176. package/dist/renderer/VirtualizedLines.d.ts.map +1 -0
  177. package/dist/renderer/VirtualizedLines.js +427 -0
  178. package/dist/renderer/VirtualizedLines.js.map +1 -0
  179. package/dist/renderer/windowing.d.ts +33 -0
  180. package/dist/renderer/windowing.d.ts.map +1 -0
  181. package/dist/renderer/windowing.js +50 -0
  182. package/dist/renderer/windowing.js.map +1 -0
  183. package/dist/snippet/SnippetEngine.d.ts +31 -0
  184. package/dist/snippet/SnippetEngine.d.ts.map +1 -0
  185. package/dist/snippet/SnippetEngine.js +119 -0
  186. package/dist/snippet/SnippetEngine.js.map +1 -0
  187. package/dist/themes/VSCodeThemeConverter.d.ts +24 -0
  188. package/dist/themes/VSCodeThemeConverter.d.ts.map +1 -0
  189. package/dist/themes/VSCodeThemeConverter.js +118 -0
  190. package/dist/themes/VSCodeThemeConverter.js.map +1 -0
  191. package/dist/themes/index.d.ts +9 -0
  192. package/dist/themes/index.d.ts.map +1 -0
  193. package/dist/themes/index.js +128 -0
  194. package/dist/themes/index.js.map +1 -0
  195. package/dist/vim/VimState.d.ts +32 -0
  196. package/dist/vim/VimState.d.ts.map +1 -0
  197. package/dist/vim/VimState.js +276 -0
  198. package/dist/vim/VimState.js.map +1 -0
  199. package/dist/vim/VimStatusBar.d.ts +9 -0
  200. package/dist/vim/VimStatusBar.d.ts.map +1 -0
  201. package/dist/vim/VimStatusBar.js +36 -0
  202. package/dist/vim/VimStatusBar.js.map +1 -0
  203. package/dist/widgets/ColorPickerWidget.d.ts +13 -0
  204. package/dist/widgets/ColorPickerWidget.d.ts.map +1 -0
  205. package/dist/widgets/ColorPickerWidget.js +49 -0
  206. package/dist/widgets/ColorPickerWidget.js.map +1 -0
  207. package/dist/worker/WorkerBridge.d.ts +36 -0
  208. package/dist/worker/WorkerBridge.d.ts.map +1 -0
  209. package/dist/worker/WorkerBridge.js +103 -0
  210. package/dist/worker/WorkerBridge.js.map +1 -0
  211. package/dist/workspace/WorkspaceTabManager.d.ts +25 -0
  212. package/dist/workspace/WorkspaceTabManager.d.ts.map +1 -0
  213. package/dist/workspace/WorkspaceTabManager.js +71 -0
  214. package/dist/workspace/WorkspaceTabManager.js.map +1 -0
  215. package/package.json +78 -0
@@ -0,0 +1,212 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useCallback } from "react";
3
+ import { computeLineDiff } from "@termaxjs/editor-core";
4
+ import { THEMES, githubDark } from "../themes/index.js";
5
+ import { tokenizeLine } from "../highlight/microTokenizer.js";
6
+ export function DiffEditor({ original, modified, language = "typescript", mode = "split", theme = "githubDark", lineHeight = 20, charWidth = 7.8, onAcceptChunk, onRevertChunk, className, style, }) {
7
+ const activeTheme = typeof theme === "string" ? THEMES[theme] || githubDark : theme || githubDark;
8
+ const diffResult = useMemo(() => {
9
+ return computeLineDiff(original, modified);
10
+ }, [original, modified]);
11
+ const leftScrollRef = useRef(null);
12
+ const rightScrollRef = useRef(null);
13
+ const isSyncingScroll = useRef(false);
14
+ const handleLeftScroll = useCallback(() => {
15
+ if (isSyncingScroll.current)
16
+ return;
17
+ isSyncingScroll.current = true;
18
+ if (leftScrollRef.current && rightScrollRef.current) {
19
+ rightScrollRef.current.scrollTop = leftScrollRef.current.scrollTop;
20
+ rightScrollRef.current.scrollLeft = leftScrollRef.current.scrollLeft;
21
+ }
22
+ requestAnimationFrame(() => {
23
+ isSyncingScroll.current = false;
24
+ });
25
+ }, []);
26
+ const handleRightScroll = useCallback(() => {
27
+ if (isSyncingScroll.current)
28
+ return;
29
+ isSyncingScroll.current = true;
30
+ if (leftScrollRef.current && rightScrollRef.current) {
31
+ leftScrollRef.current.scrollTop = rightScrollRef.current.scrollTop;
32
+ leftScrollRef.current.scrollLeft = rightScrollRef.current.scrollLeft;
33
+ }
34
+ requestAnimationFrame(() => {
35
+ isSyncingScroll.current = false;
36
+ });
37
+ }, []);
38
+ // Construct aligned side-by-side lines
39
+ const { leftRows, rightRows, unifiedRows } = useMemo(() => {
40
+ let origLineCount = 1;
41
+ let modLineCount = 1;
42
+ let rowSeq = 0;
43
+ const left = [];
44
+ const right = [];
45
+ const unified = [];
46
+ diffResult.chunks.forEach((chunk, chunkIdx) => {
47
+ if (chunk.type === "equal") {
48
+ chunk.originalLines.forEach((text) => {
49
+ const rowId = `row-${rowSeq++}`;
50
+ left.push({ id: `l-${rowId}`, lineNum: origLineCount++, text, type: "equal", chunkIdx });
51
+ right.push({ id: `r-${rowId}`, lineNum: modLineCount++, text, type: "equal", chunkIdx });
52
+ unified.push({ id: `u-${rowId}`, text, prefix: " " });
53
+ });
54
+ }
55
+ else if (chunk.type === "modify") {
56
+ const maxLen = Math.max(chunk.originalLines.length, chunk.modifiedLines.length);
57
+ for (let i = 0; i < maxLen; i++) {
58
+ const origText = chunk.originalLines[i];
59
+ const modText = chunk.modifiedLines[i];
60
+ const rowId = `row-${rowSeq++}`;
61
+ left.push({
62
+ id: `l-${rowId}`,
63
+ lineNum: origText !== undefined ? origLineCount++ : null,
64
+ text: origText ?? "",
65
+ type: origText !== undefined ? "delete" : "equal",
66
+ chunkIdx,
67
+ charChanges: chunk.charChanges,
68
+ });
69
+ right.push({
70
+ id: `r-${rowId}`,
71
+ lineNum: modText !== undefined ? modLineCount++ : null,
72
+ text: modText ?? "",
73
+ type: modText !== undefined ? "add" : "equal",
74
+ chunkIdx,
75
+ charChanges: chunk.charChanges,
76
+ });
77
+ }
78
+ chunk.originalLines.forEach((text) => {
79
+ unified.push({
80
+ id: `u-${rowSeq++}`,
81
+ text,
82
+ prefix: "-",
83
+ color: "#ffa198",
84
+ bgColor: "rgba(248, 81, 73, 0.15)",
85
+ });
86
+ });
87
+ chunk.modifiedLines.forEach((text) => {
88
+ unified.push({
89
+ id: `u-${rowSeq++}`,
90
+ text,
91
+ prefix: "+",
92
+ color: "#7ee787",
93
+ bgColor: "rgba(46, 160, 67, 0.15)",
94
+ });
95
+ });
96
+ }
97
+ else if (chunk.type === "delete") {
98
+ chunk.originalLines.forEach((text) => {
99
+ const rowId = `row-${rowSeq++}`;
100
+ left.push({ id: `l-${rowId}`, lineNum: origLineCount++, text, type: "delete", chunkIdx });
101
+ right.push({ id: `r-${rowId}`, lineNum: null, text: "", type: "equal", chunkIdx });
102
+ unified.push({
103
+ id: `u-${rowId}`,
104
+ text,
105
+ prefix: "-",
106
+ color: "#ffa198",
107
+ bgColor: "rgba(248, 81, 73, 0.15)",
108
+ });
109
+ });
110
+ }
111
+ else if (chunk.type === "add") {
112
+ chunk.modifiedLines.forEach((text) => {
113
+ const rowId = `row-${rowSeq++}`;
114
+ left.push({ id: `l-${rowId}`, lineNum: null, text: "", type: "equal", chunkIdx });
115
+ right.push({ id: `r-${rowId}`, lineNum: modLineCount++, text, type: "add", chunkIdx });
116
+ unified.push({
117
+ id: `u-${rowId}`,
118
+ text,
119
+ prefix: "+",
120
+ color: "#7ee787",
121
+ bgColor: "rgba(46, 160, 67, 0.15)",
122
+ });
123
+ });
124
+ }
125
+ });
126
+ return { leftRows: left, rightRows: right, unifiedRows: unified };
127
+ }, [diffResult]);
128
+ return (_jsxs("div", { className: ["termax-diff-editor", className].filter(Boolean).join(" "), style: {
129
+ display: "flex",
130
+ flexDirection: "column",
131
+ width: "100%",
132
+ height: "100%",
133
+ backgroundColor: activeTheme.background,
134
+ color: activeTheme.foreground,
135
+ fontFamily: "monospace",
136
+ fontSize: "13px",
137
+ border: `1px solid ${activeTheme.border || "#30363d"}`,
138
+ borderRadius: "6px",
139
+ overflow: "hidden",
140
+ ...style,
141
+ }, children: [_jsxs("div", { style: {
142
+ display: "flex",
143
+ alignItems: "center",
144
+ justifyContent: "space-between",
145
+ padding: "6px 12px",
146
+ backgroundColor: "#161b22",
147
+ borderBottom: `1px solid ${activeTheme.border || "#30363d"}`,
148
+ fontSize: "12px",
149
+ }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [_jsx("span", { style: { fontWeight: 600, color: "#e6edf3" }, children: "Diff View" }), _jsxs("span", { style: { color: "#7ee787" }, children: ["+", diffResult.additions] }), _jsxs("span", { style: { color: "#f85149" }, children: ["-", diffResult.deletions] })] }), _jsxs("div", { style: { color: "#8b949e", fontSize: "11px" }, children: [diffResult.chunks.filter((c) => c.type !== "equal").length, " changed chunks"] })] }), mode === "split" ? (_jsxs("div", { style: { display: "flex", flex: 1, overflow: "hidden" }, children: [_jsx("div", { ref: leftScrollRef, onScroll: handleLeftScroll, style: {
150
+ flex: 1,
151
+ overflow: "auto",
152
+ borderRight: `1px solid ${activeTheme.border || "#30363d"}`,
153
+ }, children: _jsx("div", { style: { minWidth: "100%", width: "max-content" }, children: leftRows.map((row) => {
154
+ const isDel = row.type === "delete";
155
+ const bgColor = isDel ? "rgba(248, 81, 73, 0.15)" : "transparent";
156
+ const tokens = row.text ? tokenizeLine(row.text, language) : [];
157
+ return (_jsxs("div", { style: {
158
+ display: "flex",
159
+ height: `${lineHeight}px`,
160
+ lineHeight: `${lineHeight}px`,
161
+ backgroundColor: bgColor,
162
+ whiteSpace: "pre",
163
+ }, children: [_jsx("div", { style: {
164
+ width: "48px",
165
+ textAlign: "right",
166
+ paddingRight: "8px",
167
+ color: isDel ? "#f85149" : "#6e7681",
168
+ userSelect: "none",
169
+ backgroundColor: isDel
170
+ ? "rgba(248, 81, 73, 0.2)"
171
+ : "rgba(110, 118, 129, 0.05)",
172
+ }, children: row.lineNum ?? "" }), _jsx("div", { style: { paddingLeft: "8px", paddingRight: "16px", flex: 1 }, children: tokens.map((tok, tIdx) => (
173
+ // biome-ignore lint/suspicious/noArrayIndexKey: token positional offset
174
+ _jsx("span", { children: tok.text }, `${tIdx}-${tok.text}`))) })] }, row.id));
175
+ }) }) }), _jsx("div", { ref: rightScrollRef, onScroll: handleRightScroll, style: { flex: 1, overflow: "auto" }, children: _jsx("div", { style: { minWidth: "100%", width: "max-content" }, children: rightRows.map((row) => {
176
+ const isAdd = row.type === "add";
177
+ const bgColor = isAdd ? "rgba(46, 160, 67, 0.15)" : "transparent";
178
+ const tokens = row.text ? tokenizeLine(row.text, language) : [];
179
+ return (_jsxs("div", { style: {
180
+ display: "flex",
181
+ height: `${lineHeight}px`,
182
+ lineHeight: `${lineHeight}px`,
183
+ backgroundColor: bgColor,
184
+ whiteSpace: "pre",
185
+ }, children: [_jsx("div", { style: {
186
+ width: "48px",
187
+ textAlign: "right",
188
+ paddingRight: "8px",
189
+ color: isAdd ? "#7ee787" : "#6e7681",
190
+ userSelect: "none",
191
+ backgroundColor: isAdd
192
+ ? "rgba(46, 160, 67, 0.2)"
193
+ : "rgba(110, 118, 129, 0.05)",
194
+ }, children: row.lineNum ?? "" }), _jsx("div", { style: { paddingLeft: "8px", paddingRight: "16px", flex: 1 }, children: tokens.map((tok, tIdx) => (
195
+ // biome-ignore lint/suspicious/noArrayIndexKey: token positional offset
196
+ _jsx("span", { children: tok.text }, `${tIdx}-${tok.text}`))) })] }, row.id));
197
+ }) }) })] })) : (
198
+ /* Unified Mode */
199
+ _jsx("div", { style: { flex: 1, overflow: "auto" }, children: _jsx("div", { style: { minWidth: "100%", width: "max-content" }, children: unifiedRows.map((row) => (_jsxs("div", { style: {
200
+ display: "flex",
201
+ height: `${lineHeight}px`,
202
+ lineHeight: `${lineHeight}px`,
203
+ backgroundColor: row.bgColor ?? "transparent",
204
+ whiteSpace: "pre",
205
+ }, children: [_jsx("div", { style: {
206
+ width: "32px",
207
+ textAlign: "center",
208
+ color: row.color ?? "#6e7681",
209
+ userSelect: "none",
210
+ }, children: row.prefix }), _jsx("div", { style: { paddingLeft: "8px", color: row.color ?? "inherit" }, children: row.text })] }, row.id))) }) }))] }));
211
+ }
212
+ //# sourceMappingURL=DiffEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiffEditor.js","sourceRoot":"","sources":["../../src/diff/DiffEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface InlineDiffLine {
2
+ id: string;
3
+ type: "add" | "delete" | "equal";
4
+ originalLineNumber?: number;
5
+ modifiedLineNumber?: number;
6
+ text: string;
7
+ highlights?: Array<{
8
+ start: number;
9
+ length: number;
10
+ }>;
11
+ }
12
+ export declare class InlineDiffModel {
13
+ /**
14
+ * Generates sequential unified inline diff lines from original and modified texts.
15
+ */
16
+ static computeInlineLines(originalText: string, modifiedText: string): InlineDiffLine[];
17
+ }
18
+ //# sourceMappingURL=InlineDiffModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineDiffModel.d.ts","sourceRoot":"","sources":["../../src/diff/InlineDiffModel.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,qBAAa,eAAe;IAC1B;;OAEG;WACW,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,EAAE;CAsE/F"}
@@ -0,0 +1,78 @@
1
+ import { computeLineDiff } from "@termaxjs/editor-core";
2
+ export class InlineDiffModel {
3
+ /**
4
+ * Generates sequential unified inline diff lines from original and modified texts.
5
+ */
6
+ static computeInlineLines(originalText, modifiedText) {
7
+ const diff = computeLineDiff(originalText, modifiedText);
8
+ const lines = [];
9
+ let origLine = 1;
10
+ let modLine = 1;
11
+ let lineCounter = 0;
12
+ for (const chunk of diff.chunks) {
13
+ if (chunk.type === "equal") {
14
+ for (const line of chunk.originalLines) {
15
+ lines.push({
16
+ id: `line-${lineCounter++}`,
17
+ type: "equal",
18
+ originalLineNumber: origLine++,
19
+ modifiedLineNumber: modLine++,
20
+ text: line,
21
+ });
22
+ }
23
+ }
24
+ else if (chunk.type === "delete") {
25
+ for (const line of chunk.originalLines) {
26
+ lines.push({
27
+ id: `line-${lineCounter++}`,
28
+ type: "delete",
29
+ originalLineNumber: origLine++,
30
+ text: line,
31
+ });
32
+ }
33
+ }
34
+ else if (chunk.type === "add") {
35
+ for (const line of chunk.modifiedLines) {
36
+ lines.push({
37
+ id: `line-${lineCounter++}`,
38
+ type: "add",
39
+ modifiedLineNumber: modLine++,
40
+ text: line,
41
+ });
42
+ }
43
+ }
44
+ else if (chunk.type === "modify") {
45
+ // Deletions first
46
+ for (let i = 0; i < chunk.originalLines.length; i++) {
47
+ const line = chunk.originalLines[i];
48
+ const charChange = chunk.charChanges?.[i];
49
+ lines.push({
50
+ id: `line-${lineCounter++}`,
51
+ type: "delete",
52
+ originalLineNumber: origLine++,
53
+ text: line,
54
+ highlights: charChange
55
+ ? [{ start: charChange.origCol, length: charChange.origLen }]
56
+ : undefined,
57
+ });
58
+ }
59
+ // Additions next
60
+ for (let i = 0; i < chunk.modifiedLines.length; i++) {
61
+ const line = chunk.modifiedLines[i];
62
+ const charChange = chunk.charChanges?.[i];
63
+ lines.push({
64
+ id: `line-${lineCounter++}`,
65
+ type: "add",
66
+ modifiedLineNumber: modLine++,
67
+ text: line,
68
+ highlights: charChange
69
+ ? [{ start: charChange.modCol, length: charChange.modLen }]
70
+ : undefined,
71
+ });
72
+ }
73
+ }
74
+ }
75
+ return lines;
76
+ }
77
+ }
78
+ //# sourceMappingURL=InlineDiffModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineDiffModel.js","sourceRoot":"","sources":["../../src/diff/InlineDiffModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ declare const TermaxEditorElement_base: ObjectConstructor | {
2
+ new (): HTMLElement;
3
+ prototype: HTMLElement;
4
+ };
5
+ /**
6
+ * Standalone Framework-Agnostic Web Component `<termax-editor>`.
7
+ * Usable in Vanilla JS, Vue 3, Svelte, Angular, and HTML pages.
8
+ */
9
+ export declare class TermaxEditorElement extends TermaxEditorElement_base {
10
+ private root;
11
+ private mountContainer;
12
+ private editorRef;
13
+ private internalValue;
14
+ static get observedAttributes(): string[];
15
+ connectedCallback(): void;
16
+ disconnectedCallback(): void;
17
+ attributeChangedCallback(_name: string, oldValue: string | null, newValue: string | null): void;
18
+ private render;
19
+ getValue(): string;
20
+ setValue(val: string): void;
21
+ focus(): void;
22
+ format(): Promise<void>;
23
+ undo(): void;
24
+ redo(): void;
25
+ gotoLine(line: number): void;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=TermaxEditorElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TermaxEditorElement.d.ts","sourceRoot":"","sources":["../../src/element/TermaxEditorElement.ts"],"names":[],"mappings":";;;;AAIA;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,wBAE9B;IACT,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,aAAa,CAAM;IAE3B,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAYxC;IAED,iBAAiB,IAAI,IAAI;IAmBzB,oBAAoB,IAAI,IAAI;IAQ5B,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAS/F,OAAO,CAAC,MAAM;IAoCP,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU3B,KAAK,IAAI,IAAI;IAIP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGpC"}
@@ -0,0 +1,123 @@
1
+ import React from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import { TermaxEditor } from "../TermaxEditor.js";
4
+ /**
5
+ * Standalone Framework-Agnostic Web Component `<termax-editor>`.
6
+ * Usable in Vanilla JS, Vue 3, Svelte, Angular, and HTML pages.
7
+ */
8
+ export class TermaxEditorElement extends (typeof HTMLElement !== "undefined"
9
+ ? HTMLElement
10
+ : Object) {
11
+ root = null;
12
+ mountContainer = null;
13
+ editorRef = React.createRef();
14
+ internalValue = "";
15
+ static get observedAttributes() {
16
+ return [
17
+ "value",
18
+ "language",
19
+ "theme",
20
+ "vim-mode",
21
+ "renderer-mode",
22
+ "read-only",
23
+ "line-numbers",
24
+ "foldable",
25
+ "minimap",
26
+ ];
27
+ }
28
+ connectedCallback() {
29
+ if (!this.mountContainer && typeof document !== "undefined") {
30
+ const shadow = this.attachShadow?.({ mode: "open" }) ||
31
+ this;
32
+ const container = document.createElement("div");
33
+ container.style.width = "100%";
34
+ container.style.height = "100%";
35
+ container.style.display = "flex";
36
+ container.style.position = "relative";
37
+ shadow.appendChild(container);
38
+ this.mountContainer = container;
39
+ this.root = createRoot(container);
40
+ this.internalValue = this.getAttribute("value") || "";
41
+ this.render();
42
+ }
43
+ }
44
+ disconnectedCallback() {
45
+ if (this.root) {
46
+ this.root.unmount();
47
+ this.root = null;
48
+ this.mountContainer = null;
49
+ }
50
+ }
51
+ attributeChangedCallback(_name, oldValue, newValue) {
52
+ if (oldValue !== newValue) {
53
+ if (_name === "value" && newValue !== null) {
54
+ this.internalValue = newValue;
55
+ }
56
+ this.render();
57
+ }
58
+ }
59
+ render() {
60
+ if (!this.root)
61
+ return;
62
+ const el = this;
63
+ const language = el.getAttribute("language") || "typescript";
64
+ const theme = el.getAttribute("theme") || "githubDark";
65
+ const vimMode = el.hasAttribute("vim-mode") && el.getAttribute("vim-mode") !== "false";
66
+ const readOnly = el.hasAttribute("read-only") && el.getAttribute("read-only") !== "false";
67
+ const showLineNumbers = el.getAttribute("line-numbers") !== "false";
68
+ const foldable = el.getAttribute("foldable") !== "false";
69
+ const showMinimap = el.hasAttribute("minimap") && el.getAttribute("minimap") !== "false";
70
+ const rendererMode = el.getAttribute("renderer-mode") || "canvas";
71
+ this.root.render(React.createElement(TermaxEditor, {
72
+ ref: this.editorRef,
73
+ value: this.internalValue,
74
+ language,
75
+ theme,
76
+ vimMode,
77
+ readOnly,
78
+ showLineNumbers,
79
+ foldable,
80
+ showMinimap,
81
+ rendererMode,
82
+ onChange: (val) => {
83
+ this.internalValue = val;
84
+ el.dispatchEvent(new CustomEvent("change", { detail: { value: val }, bubbles: true }));
85
+ el.dispatchEvent(new CustomEvent("input", { detail: { value: val }, bubbles: true }));
86
+ },
87
+ }));
88
+ }
89
+ // --- Imperative Public API ---
90
+ getValue() {
91
+ return this.editorRef.current ? this.editorRef.current.getValue() : this.internalValue;
92
+ }
93
+ setValue(val) {
94
+ this.internalValue = val;
95
+ this.setAttribute?.("value", val);
96
+ if (this.editorRef.current) {
97
+ this.editorRef.current.setValue(val);
98
+ }
99
+ else {
100
+ this.render();
101
+ }
102
+ }
103
+ focus() {
104
+ this.editorRef.current?.focus();
105
+ }
106
+ async format() {
107
+ await this.editorRef.current?.format();
108
+ }
109
+ undo() {
110
+ this.editorRef.current?.undo();
111
+ }
112
+ redo() {
113
+ this.editorRef.current?.redo();
114
+ }
115
+ gotoLine(line) {
116
+ this.editorRef.current?.gotoLine(line);
117
+ }
118
+ }
119
+ // Auto-register custom element in browser environment
120
+ if (typeof customElements !== "undefined" && !customElements.get("termax-editor")) {
121
+ customElements.define("termax-editor", TermaxEditorElement);
122
+ }
123
+ //# sourceMappingURL=TermaxEditorElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TermaxEditorElement.js","sourceRoot":"","sources":["../../src/element/TermaxEditorElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * String/comment-aware bracket scanner for `{...}` fold ranges.
3
+ *
4
+ * Pure function with no React dependency so headless consumers (language
5
+ * adapters, tests) can share the exact logic the gutter renders.
6
+ */
7
+ export declare function computeFoldRanges(lines: string[]): Map<number, number>;
8
+ //# sourceMappingURL=computeFoldRanges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeFoldRanges.d.ts","sourceRoot":"","sources":["../../src/fold/computeFoldRanges.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsGtE"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * String/comment-aware bracket scanner for `{...}` fold ranges.
3
+ *
4
+ * Pure function with no React dependency so headless consumers (language
5
+ * adapters, tests) can share the exact logic the gutter renders.
6
+ */
7
+ export function computeFoldRanges(lines) {
8
+ const foldMap = new Map();
9
+ // Limit fold bracket scanning to 50,000 lines for high performance on large files
10
+ const scanLimit = Math.min(lines.length, 50000);
11
+ const stack = [];
12
+ const MATCH = {
13
+ "}": "{",
14
+ ")": "(",
15
+ "]": "[",
16
+ };
17
+ // Block comments and template literals can span lines, so this state
18
+ // carries across lines. Single/double-quoted strings do not.
19
+ let inBlockComment = false;
20
+ let inTemplate = false;
21
+ for (let l = 0; l < scanLimit; l++) {
22
+ const line = lines[l];
23
+ let inStr = null;
24
+ let i = 0;
25
+ while (i < line.length) {
26
+ const ch = line[i];
27
+ const next = line[i + 1];
28
+ if (inBlockComment) {
29
+ if (ch === "*" && next === "/") {
30
+ inBlockComment = false;
31
+ i += 2;
32
+ }
33
+ else {
34
+ i++;
35
+ }
36
+ continue;
37
+ }
38
+ if (inTemplate) {
39
+ if (ch === "\\") {
40
+ i += 2;
41
+ continue;
42
+ }
43
+ if (ch === "`")
44
+ inTemplate = false;
45
+ i++;
46
+ continue;
47
+ }
48
+ if (inStr) {
49
+ if (ch === "\\") {
50
+ i += 2;
51
+ continue;
52
+ }
53
+ if (ch === inStr)
54
+ inStr = null;
55
+ i++;
56
+ continue;
57
+ }
58
+ if (ch === "/" && next === "*") {
59
+ inBlockComment = true;
60
+ i += 2;
61
+ continue;
62
+ }
63
+ if (ch === "/" && next === "/")
64
+ break;
65
+ if (ch === "<" && line.startsWith("<!--", i))
66
+ break;
67
+ if (ch === "#") {
68
+ let onlyWhitespaceBefore = true;
69
+ for (let k = 0; k < i; k++) {
70
+ const c = line[k];
71
+ if (c !== " " && c !== "\t") {
72
+ onlyWhitespaceBefore = false;
73
+ break;
74
+ }
75
+ }
76
+ if (onlyWhitespaceBefore)
77
+ break;
78
+ i++;
79
+ continue;
80
+ }
81
+ if (ch === '"' || ch === "'") {
82
+ inStr = ch;
83
+ i++;
84
+ continue;
85
+ }
86
+ if (ch === "`") {
87
+ inTemplate = true;
88
+ i++;
89
+ continue;
90
+ }
91
+ if (ch === "{" || ch === "(" || ch === "[") {
92
+ stack.push({ char: ch, line: l });
93
+ }
94
+ else if (ch === "}" || ch === ")" || ch === "]") {
95
+ const expected = MATCH[ch];
96
+ const top = stack.length > 0 ? stack[stack.length - 1] : undefined;
97
+ if (top !== undefined && top.char === expected) {
98
+ const matched = stack.pop();
99
+ if (matched !== undefined && l > matched.line && ch === "}") {
100
+ foldMap.set(matched.line, l);
101
+ }
102
+ }
103
+ }
104
+ i++;
105
+ }
106
+ }
107
+ return foldMap;
108
+ }
109
+ //# sourceMappingURL=computeFoldRanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeFoldRanges.js","sourceRoot":"","sources":["../../src/fold/computeFoldRanges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Format code using Prettier or built-in formatters.
3
+ */
4
+ export declare function formatCode(code: string, language?: string): Promise<string>;
5
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/format/formatter.ts"],"names":[],"mappings":"AAkDA;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCvF"}