@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.
- package/LICENSE +201 -0
- package/README.md +85 -0
- package/dist/TermaxEditor.d.ts +74 -0
- package/dist/TermaxEditor.d.ts.map +1 -0
- package/dist/TermaxEditor.js +728 -0
- package/dist/TermaxEditor.js.map +1 -0
- package/dist/adapter.d.ts +2 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +2 -0
- package/dist/adapter.js.map +1 -0
- package/dist/ai/GhostTextManager.d.ts +34 -0
- package/dist/ai/GhostTextManager.d.ts.map +1 -0
- package/dist/ai/GhostTextManager.js +116 -0
- package/dist/ai/GhostTextManager.js.map +1 -0
- package/dist/ai/StreamingDiffApplier.d.ts +28 -0
- package/dist/ai/StreamingDiffApplier.d.ts.map +1 -0
- package/dist/ai/StreamingDiffApplier.js +61 -0
- package/dist/ai/StreamingDiffApplier.js.map +1 -0
- package/dist/canvas.d.ts +2 -0
- package/dist/canvas.d.ts.map +1 -0
- package/dist/canvas.js +2 -0
- package/dist/canvas.js.map +1 -0
- package/dist/codelens/CodeLensProvider.d.ts +22 -0
- package/dist/codelens/CodeLensProvider.d.ts.map +1 -0
- package/dist/codelens/CodeLensProvider.js +36 -0
- package/dist/codelens/CodeLensProvider.js.map +1 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/diff/ConflictResolver.d.ts +27 -0
- package/dist/diff/ConflictResolver.d.ts.map +1 -0
- package/dist/diff/ConflictResolver.js +88 -0
- package/dist/diff/ConflictResolver.js.map +1 -0
- package/dist/diff/DiffEditor.d.ts +18 -0
- package/dist/diff/DiffEditor.d.ts.map +1 -0
- package/dist/diff/DiffEditor.js +212 -0
- package/dist/diff/DiffEditor.js.map +1 -0
- package/dist/diff/InlineDiffModel.d.ts +18 -0
- package/dist/diff/InlineDiffModel.d.ts.map +1 -0
- package/dist/diff/InlineDiffModel.js +78 -0
- package/dist/diff/InlineDiffModel.js.map +1 -0
- package/dist/element/TermaxEditorElement.d.ts +28 -0
- package/dist/element/TermaxEditorElement.d.ts.map +1 -0
- package/dist/element/TermaxEditorElement.js +123 -0
- package/dist/element/TermaxEditorElement.js.map +1 -0
- package/dist/fold/computeFoldRanges.d.ts +8 -0
- package/dist/fold/computeFoldRanges.d.ts.map +1 -0
- package/dist/fold/computeFoldRanges.js +109 -0
- package/dist/fold/computeFoldRanges.js.map +1 -0
- package/dist/format/formatter.d.ts +5 -0
- package/dist/format/formatter.d.ts.map +1 -0
- package/dist/format/formatter.js +89 -0
- package/dist/format/formatter.js.map +1 -0
- package/dist/git/GitGutterManager.d.ts +17 -0
- package/dist/git/GitGutterManager.d.ts.map +1 -0
- package/dist/git/GitGutterManager.js +50 -0
- package/dist/git/GitGutterManager.js.map +1 -0
- package/dist/git/InlineBlameManager.d.ts +18 -0
- package/dist/git/InlineBlameManager.d.ts.map +1 -0
- package/dist/git/InlineBlameManager.js +33 -0
- package/dist/git/InlineBlameManager.js.map +1 -0
- package/dist/gutter/FoldGutter.d.ts +12 -0
- package/dist/gutter/FoldGutter.d.ts.map +1 -0
- package/dist/gutter/FoldGutter.js +51 -0
- package/dist/gutter/FoldGutter.js.map +1 -0
- package/dist/gutter/LineNumbers.d.ts +11 -0
- package/dist/gutter/LineNumbers.d.ts.map +1 -0
- package/dist/gutter/LineNumbers.js +71 -0
- package/dist/gutter/LineNumbers.js.map +1 -0
- package/dist/highlight/microTokenizer.d.ts +20 -0
- package/dist/highlight/microTokenizer.d.ts.map +1 -0
- package/dist/highlight/microTokenizer.js +951 -0
- package/dist/highlight/microTokenizer.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/input/KeymapPresets.d.ts +10 -0
- package/dist/input/KeymapPresets.d.ts.map +1 -0
- package/dist/input/KeymapPresets.js +46 -0
- package/dist/input/KeymapPresets.js.map +1 -0
- package/dist/input/OffscreenInput.d.ts +27 -0
- package/dist/input/OffscreenInput.d.ts.map +1 -0
- package/dist/input/OffscreenInput.js +367 -0
- package/dist/input/OffscreenInput.js.map +1 -0
- package/dist/languages/GrammarRegistry.d.ts +55 -0
- package/dist/languages/GrammarRegistry.d.ts.map +1 -0
- package/dist/languages/GrammarRegistry.js +80 -0
- package/dist/languages/GrammarRegistry.js.map +1 -0
- package/dist/languages/LanguageAdapter.d.ts +11 -0
- package/dist/languages/LanguageAdapter.d.ts.map +1 -0
- package/dist/languages/LanguageAdapter.js +47 -0
- package/dist/languages/LanguageAdapter.js.map +1 -0
- package/dist/languages/TreeSitterAdapter.d.ts +29 -0
- package/dist/languages/TreeSitterAdapter.d.ts.map +1 -0
- package/dist/languages/TreeSitterAdapter.js +99 -0
- package/dist/languages/TreeSitterAdapter.js.map +1 -0
- package/dist/languages/index.d.ts +16 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +163 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/lsp/InlayHintProvider.d.ts +18 -0
- package/dist/lsp/InlayHintProvider.d.ts.map +1 -0
- package/dist/lsp/InlayHintProvider.js +26 -0
- package/dist/lsp/InlayHintProvider.js.map +1 -0
- package/dist/lsp/LspClient.d.ts +73 -0
- package/dist/lsp/LspClient.d.ts.map +1 -0
- package/dist/lsp/LspClient.js +261 -0
- package/dist/lsp/LspClient.js.map +1 -0
- package/dist/lsp/SemanticTokensDecoder.d.ts +26 -0
- package/dist/lsp/SemanticTokensDecoder.d.ts.map +1 -0
- package/dist/lsp/SemanticTokensDecoder.js +88 -0
- package/dist/lsp/SemanticTokensDecoder.js.map +1 -0
- package/dist/lsp/WorkspaceSymbolIndex.d.ts +32 -0
- package/dist/lsp/WorkspaceSymbolIndex.d.ts.map +1 -0
- package/dist/lsp/WorkspaceSymbolIndex.js +73 -0
- package/dist/lsp/WorkspaceSymbolIndex.js.map +1 -0
- package/dist/minimap/Minimap.d.ts +24 -0
- package/dist/minimap/Minimap.d.ts.map +1 -0
- package/dist/minimap/Minimap.js +31 -0
- package/dist/minimap/Minimap.js.map +1 -0
- package/dist/minimap/useMinimap.d.ts +75 -0
- package/dist/minimap/useMinimap.d.ts.map +1 -0
- package/dist/minimap/useMinimap.js +179 -0
- package/dist/minimap/useMinimap.js.map +1 -0
- package/dist/navigation/StickyScrollHeader.d.ts +16 -0
- package/dist/navigation/StickyScrollHeader.d.ts.map +1 -0
- package/dist/navigation/StickyScrollHeader.js +49 -0
- package/dist/navigation/StickyScrollHeader.js.map +1 -0
- package/dist/navigation/StickyScrollManager.d.ts +18 -0
- package/dist/navigation/StickyScrollManager.d.ts.map +1 -0
- package/dist/navigation/StickyScrollManager.js +32 -0
- package/dist/navigation/StickyScrollManager.js.map +1 -0
- package/dist/overlay/CompletionMenu.d.ts +15 -0
- package/dist/overlay/CompletionMenu.d.ts.map +1 -0
- package/dist/overlay/CompletionMenu.js +90 -0
- package/dist/overlay/CompletionMenu.js.map +1 -0
- package/dist/overlay/FindReplace.d.ts +6 -0
- package/dist/overlay/FindReplace.d.ts.map +1 -0
- package/dist/overlay/FindReplace.js +278 -0
- package/dist/overlay/FindReplace.js.map +1 -0
- package/dist/overlay/HoverTooltip.d.ts +12 -0
- package/dist/overlay/HoverTooltip.d.ts.map +1 -0
- package/dist/overlay/HoverTooltip.js +67 -0
- package/dist/overlay/HoverTooltip.js.map +1 -0
- package/dist/overlay/RemoteCursorsOverlay.d.ts +15 -0
- package/dist/overlay/RemoteCursorsOverlay.d.ts.map +1 -0
- package/dist/overlay/RemoteCursorsOverlay.js +50 -0
- package/dist/overlay/RemoteCursorsOverlay.js.map +1 -0
- package/dist/overlay/SignatureHelpTooltip.d.ts +11 -0
- package/dist/overlay/SignatureHelpTooltip.d.ts.map +1 -0
- package/dist/overlay/SignatureHelpTooltip.js +36 -0
- package/dist/overlay/SignatureHelpTooltip.js.map +1 -0
- package/dist/pairs/SelectionSurround.d.ts +14 -0
- package/dist/pairs/SelectionSurround.d.ts.map +1 -0
- package/dist/pairs/SelectionSurround.js +29 -0
- package/dist/pairs/SelectionSurround.js.map +1 -0
- package/dist/pairs/pairMatching.d.ts +6 -0
- package/dist/pairs/pairMatching.d.ts.map +1 -0
- package/dist/pairs/pairMatching.js +169 -0
- package/dist/pairs/pairMatching.js.map +1 -0
- package/dist/plugin/ViewPlugin.d.ts +20 -0
- package/dist/plugin/ViewPlugin.d.ts.map +1 -0
- package/dist/plugin/ViewPlugin.js +17 -0
- package/dist/plugin/ViewPlugin.js.map +1 -0
- package/dist/react.d.ts +2 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +2 -0
- package/dist/react.js.map +1 -0
- package/dist/renderer/CanvasViewport.d.ts +23 -0
- package/dist/renderer/CanvasViewport.d.ts.map +1 -0
- package/dist/renderer/CanvasViewport.js +134 -0
- package/dist/renderer/CanvasViewport.js.map +1 -0
- package/dist/renderer/VirtualizedLines.d.ts +30 -0
- package/dist/renderer/VirtualizedLines.d.ts.map +1 -0
- package/dist/renderer/VirtualizedLines.js +427 -0
- package/dist/renderer/VirtualizedLines.js.map +1 -0
- package/dist/renderer/windowing.d.ts +33 -0
- package/dist/renderer/windowing.d.ts.map +1 -0
- package/dist/renderer/windowing.js +50 -0
- package/dist/renderer/windowing.js.map +1 -0
- package/dist/snippet/SnippetEngine.d.ts +31 -0
- package/dist/snippet/SnippetEngine.d.ts.map +1 -0
- package/dist/snippet/SnippetEngine.js +119 -0
- package/dist/snippet/SnippetEngine.js.map +1 -0
- package/dist/themes/VSCodeThemeConverter.d.ts +24 -0
- package/dist/themes/VSCodeThemeConverter.d.ts.map +1 -0
- package/dist/themes/VSCodeThemeConverter.js +118 -0
- package/dist/themes/VSCodeThemeConverter.js.map +1 -0
- package/dist/themes/index.d.ts +9 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +128 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/vim/VimState.d.ts +32 -0
- package/dist/vim/VimState.d.ts.map +1 -0
- package/dist/vim/VimState.js +276 -0
- package/dist/vim/VimState.js.map +1 -0
- package/dist/vim/VimStatusBar.d.ts +9 -0
- package/dist/vim/VimStatusBar.d.ts.map +1 -0
- package/dist/vim/VimStatusBar.js +36 -0
- package/dist/vim/VimStatusBar.js.map +1 -0
- package/dist/widgets/ColorPickerWidget.d.ts +13 -0
- package/dist/widgets/ColorPickerWidget.d.ts.map +1 -0
- package/dist/widgets/ColorPickerWidget.js +49 -0
- package/dist/widgets/ColorPickerWidget.js.map +1 -0
- package/dist/worker/WorkerBridge.d.ts +36 -0
- package/dist/worker/WorkerBridge.d.ts.map +1 -0
- package/dist/worker/WorkerBridge.js +103 -0
- package/dist/worker/WorkerBridge.js.map +1 -0
- package/dist/workspace/WorkspaceTabManager.d.ts +25 -0
- package/dist/workspace/WorkspaceTabManager.d.ts.map +1 -0
- package/dist/workspace/WorkspaceTabManager.js +71 -0
- package/dist/workspace/WorkspaceTabManager.js.map +1 -0
- 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 @@
|
|
|
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"}
|