@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,278 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useEffect, useCallback, useRef } from "react";
|
|
3
|
+
import { useEditorContext } from "@termaxjs/editor-react";
|
|
4
|
+
import { normalizeRange } from "@termaxjs/editor-core";
|
|
5
|
+
function applyPreserveCase(original, replacement) {
|
|
6
|
+
if (!replacement || !original)
|
|
7
|
+
return replacement;
|
|
8
|
+
if (original === original.toUpperCase())
|
|
9
|
+
return replacement.toUpperCase();
|
|
10
|
+
if (original === original.toLowerCase())
|
|
11
|
+
return replacement.toLowerCase();
|
|
12
|
+
if (original.length > 0 && original[0] === original[0].toUpperCase()) {
|
|
13
|
+
return replacement.charAt(0).toUpperCase() + replacement.slice(1).toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
return replacement;
|
|
16
|
+
}
|
|
17
|
+
export function FindReplace({ onClose, onScrollToLine }) {
|
|
18
|
+
const { lines, selection, setCursor, setSelection, insertText, replaceContent, getContent } = useEditorContext();
|
|
19
|
+
const [query, setQuery] = useState("");
|
|
20
|
+
const [replaceText, setReplaceText] = useState("");
|
|
21
|
+
const [matchCase, setMatchCase] = useState(false);
|
|
22
|
+
const [wholeWord, setWholeWord] = useState(false);
|
|
23
|
+
const [useRegex, setUseRegex] = useState(false);
|
|
24
|
+
const [preserveCase, setPreserveCase] = useState(false);
|
|
25
|
+
const [inSelection, setInSelection] = useState(false);
|
|
26
|
+
const [matchIndex, setMatchIndex] = useState(0);
|
|
27
|
+
const findInputRef = useRef(null);
|
|
28
|
+
// Focus the find box when the dialog opens. Explicit effect instead of
|
|
29
|
+
// autoFocus so keyboard and screen-reader users land predictably.
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
findInputRef.current?.focus();
|
|
32
|
+
}, []);
|
|
33
|
+
// Locked selection range when "Find in Selection" is activated
|
|
34
|
+
const selectionRangeRef = useRef(null);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (inSelection && selection) {
|
|
37
|
+
selectionRangeRef.current = normalizeRange(selection);
|
|
38
|
+
}
|
|
39
|
+
else if (!inSelection) {
|
|
40
|
+
selectionRangeRef.current = null;
|
|
41
|
+
}
|
|
42
|
+
}, [inSelection, selection]);
|
|
43
|
+
// Compute all matches in current document
|
|
44
|
+
const matches = useMemo(() => {
|
|
45
|
+
if (!query)
|
|
46
|
+
return [];
|
|
47
|
+
const results = [];
|
|
48
|
+
try {
|
|
49
|
+
const flags = matchCase ? "g" : "gi";
|
|
50
|
+
let pattern = useRegex ? query : query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
51
|
+
if (wholeWord) {
|
|
52
|
+
pattern = `\\b${pattern}\\b`;
|
|
53
|
+
}
|
|
54
|
+
const regex = new RegExp(pattern, flags);
|
|
55
|
+
lines.forEach((lineText, lineIdx) => {
|
|
56
|
+
for (;;) {
|
|
57
|
+
const match = regex.exec(lineText);
|
|
58
|
+
if (match === null)
|
|
59
|
+
break;
|
|
60
|
+
const col = match.index;
|
|
61
|
+
const len = match[0].length;
|
|
62
|
+
const matchText = match[0];
|
|
63
|
+
if (inSelection && selectionRangeRef.current) {
|
|
64
|
+
const sel = selectionRangeRef.current;
|
|
65
|
+
const isInside = (lineIdx > sel.start.line ||
|
|
66
|
+
(lineIdx === sel.start.line && col >= sel.start.column)) &&
|
|
67
|
+
(lineIdx < sel.end.line || (lineIdx === sel.end.line && col + len <= sel.end.column));
|
|
68
|
+
if (!isInside) {
|
|
69
|
+
if (!regex.global)
|
|
70
|
+
break;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
results.push({
|
|
75
|
+
line: lineIdx,
|
|
76
|
+
column: col,
|
|
77
|
+
length: len,
|
|
78
|
+
text: matchText,
|
|
79
|
+
});
|
|
80
|
+
if (!regex.global)
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Invalid regex pattern
|
|
87
|
+
}
|
|
88
|
+
return results;
|
|
89
|
+
}, [lines, query, matchCase, wholeWord, useRegex, inSelection]);
|
|
90
|
+
// Navigate to active match
|
|
91
|
+
const goToMatch = useCallback((idx) => {
|
|
92
|
+
if (matches.length === 0)
|
|
93
|
+
return;
|
|
94
|
+
const bounded = (idx + matches.length) % matches.length;
|
|
95
|
+
setMatchIndex(bounded);
|
|
96
|
+
const m = matches[bounded];
|
|
97
|
+
if (!m)
|
|
98
|
+
return;
|
|
99
|
+
const start = { line: m.line, column: m.column };
|
|
100
|
+
const end = { line: m.line, column: m.column + m.length };
|
|
101
|
+
setCursor(end);
|
|
102
|
+
setSelection({ start, end });
|
|
103
|
+
onScrollToLine(m.line);
|
|
104
|
+
}, [matches, setCursor, setSelection, onScrollToLine]);
|
|
105
|
+
const handleNext = () => goToMatch(matchIndex + 1);
|
|
106
|
+
const handlePrev = () => goToMatch(matchIndex - 1);
|
|
107
|
+
const handleReplace = () => {
|
|
108
|
+
if (matches.length === 0)
|
|
109
|
+
return;
|
|
110
|
+
const m = matches[matchIndex];
|
|
111
|
+
if (!m)
|
|
112
|
+
return;
|
|
113
|
+
const start = { line: m.line, column: m.column };
|
|
114
|
+
const end = { line: m.line, column: m.column + m.length };
|
|
115
|
+
setCursor(start);
|
|
116
|
+
setSelection({ start, end });
|
|
117
|
+
const rep = preserveCase ? applyPreserveCase(m.text, replaceText) : replaceText;
|
|
118
|
+
insertText(rep);
|
|
119
|
+
};
|
|
120
|
+
const handleReplaceAll = () => {
|
|
121
|
+
if (matches.length === 0 || !query)
|
|
122
|
+
return;
|
|
123
|
+
const fullContent = getContent();
|
|
124
|
+
const flags = matchCase ? "g" : "gi";
|
|
125
|
+
let pattern = useRegex ? query : query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
126
|
+
if (wholeWord) {
|
|
127
|
+
pattern = `\\b${pattern}\\b`;
|
|
128
|
+
}
|
|
129
|
+
const regex = new RegExp(pattern, flags);
|
|
130
|
+
const replaced = fullContent.replace(regex, (match) => {
|
|
131
|
+
return preserveCase ? applyPreserveCase(match, replaceText) : replaceText;
|
|
132
|
+
});
|
|
133
|
+
replaceContent(replaced);
|
|
134
|
+
};
|
|
135
|
+
const goToMatchRef = useRef(goToMatch);
|
|
136
|
+
goToMatchRef.current = goToMatch;
|
|
137
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: the option flags are consumed through the ref on purpose; listing them re-navigates to the first match whenever an option toggles, which is the intended UX.
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
if (query) {
|
|
140
|
+
goToMatchRef.current(0);
|
|
141
|
+
}
|
|
142
|
+
}, [query, matchCase, wholeWord, useRegex, inSelection]);
|
|
143
|
+
return (_jsxs("div", { role: "dialog", "aria-label": "Find and replace", style: {
|
|
144
|
+
position: "absolute",
|
|
145
|
+
top: "8px",
|
|
146
|
+
right: "16px",
|
|
147
|
+
zIndex: 50,
|
|
148
|
+
backgroundColor: "#161b22",
|
|
149
|
+
border: "1px solid #30363d",
|
|
150
|
+
borderRadius: "6px",
|
|
151
|
+
padding: "8px 10px",
|
|
152
|
+
boxShadow: "0 8px 24px rgba(0, 0, 0, 0.55)",
|
|
153
|
+
display: "flex",
|
|
154
|
+
flexDirection: "column",
|
|
155
|
+
gap: "6px",
|
|
156
|
+
fontSize: "12px",
|
|
157
|
+
color: "#c9d1d9",
|
|
158
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [_jsx("input", { ref: findInputRef, type: "text", placeholder: "Find...", "aria-label": "Find", value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: (e) => {
|
|
159
|
+
if (e.key === "Enter") {
|
|
160
|
+
if (e.shiftKey)
|
|
161
|
+
handlePrev();
|
|
162
|
+
else
|
|
163
|
+
handleNext();
|
|
164
|
+
}
|
|
165
|
+
if (e.key === "Escape")
|
|
166
|
+
onClose();
|
|
167
|
+
}, style: {
|
|
168
|
+
background: "#0d1117",
|
|
169
|
+
border: "1px solid #30363d",
|
|
170
|
+
borderRadius: "4px",
|
|
171
|
+
color: "#e6edf3",
|
|
172
|
+
padding: "4px 8px",
|
|
173
|
+
width: "150px",
|
|
174
|
+
outline: "none",
|
|
175
|
+
fontFamily: "monospace",
|
|
176
|
+
fontSize: "12px",
|
|
177
|
+
} }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: "2px" }, children: [_jsx("button", { type: "button", onClick: () => setMatchCase((v) => !v), "aria-pressed": matchCase, "aria-label": "Match case", title: "Match Case (Alt+C)", style: {
|
|
178
|
+
background: matchCase ? "rgba(56, 139, 253, 0.25)" : "#21262d",
|
|
179
|
+
border: `1px solid ${matchCase ? "#388bfd" : "#30363d"}`,
|
|
180
|
+
borderRadius: "3px",
|
|
181
|
+
color: matchCase ? "#58a6ff" : "#8b949e",
|
|
182
|
+
cursor: "pointer",
|
|
183
|
+
padding: "2px 5px",
|
|
184
|
+
fontSize: "11px",
|
|
185
|
+
fontWeight: 600,
|
|
186
|
+
}, children: "Aa" }), _jsx("button", { type: "button", onClick: () => setWholeWord((v) => !v), "aria-pressed": wholeWord, "aria-label": "Match whole word", title: "Match Whole Word (Alt+W)", style: {
|
|
187
|
+
background: wholeWord ? "rgba(56, 139, 253, 0.25)" : "#21262d",
|
|
188
|
+
border: `1px solid ${wholeWord ? "#388bfd" : "#30363d"}`,
|
|
189
|
+
borderRadius: "3px",
|
|
190
|
+
color: wholeWord ? "#58a6ff" : "#8b949e",
|
|
191
|
+
cursor: "pointer",
|
|
192
|
+
padding: "2px 5px",
|
|
193
|
+
fontSize: "11px",
|
|
194
|
+
fontWeight: 600,
|
|
195
|
+
}, children: "\\b" }), _jsx("button", { type: "button", onClick: () => setUseRegex((v) => !v), "aria-pressed": useRegex, "aria-label": "Use regular expression", title: "Use Regular Expression (Alt+R)", style: {
|
|
196
|
+
background: useRegex ? "rgba(56, 139, 253, 0.25)" : "#21262d",
|
|
197
|
+
border: `1px solid ${useRegex ? "#388bfd" : "#30363d"}`,
|
|
198
|
+
borderRadius: "3px",
|
|
199
|
+
color: useRegex ? "#58a6ff" : "#8b949e",
|
|
200
|
+
cursor: "pointer",
|
|
201
|
+
padding: "2px 5px",
|
|
202
|
+
fontSize: "11px",
|
|
203
|
+
fontWeight: 600,
|
|
204
|
+
}, children: ".*" }), _jsx("button", { type: "button", onClick: () => setInSelection((v) => !v), "aria-pressed": inSelection, "aria-label": "Find in selection", title: "Find in Selection (Alt+L)", style: {
|
|
205
|
+
background: inSelection ? "rgba(56, 139, 253, 0.25)" : "#21262d",
|
|
206
|
+
border: `1px solid ${inSelection ? "#388bfd" : "#30363d"}`,
|
|
207
|
+
borderRadius: "3px",
|
|
208
|
+
color: inSelection ? "#58a6ff" : "#8b949e",
|
|
209
|
+
cursor: "pointer",
|
|
210
|
+
padding: "2px 5px",
|
|
211
|
+
fontSize: "11px",
|
|
212
|
+
fontWeight: 600,
|
|
213
|
+
}, children: "\u2261" })] }), _jsx("span", { role: "status", "aria-live": "polite", style: { fontSize: "11px", color: "#8b949e", minWidth: "65px", textAlign: "center" }, children: matches.length > 0
|
|
214
|
+
? `${matchIndex + 1} of ${matches.length}`
|
|
215
|
+
: query
|
|
216
|
+
? "No results"
|
|
217
|
+
: "" }), _jsx("button", { type: "button", onClick: handlePrev, disabled: matches.length === 0, "aria-label": "Previous match", title: "Previous Match (Shift+Enter)", style: {
|
|
218
|
+
background: "#21262d",
|
|
219
|
+
border: "1px solid #30363d",
|
|
220
|
+
borderRadius: "4px",
|
|
221
|
+
color: "#c9d1d9",
|
|
222
|
+
cursor: "pointer",
|
|
223
|
+
padding: "3px 6px",
|
|
224
|
+
}, children: "\u25B2" }), _jsx("button", { type: "button", onClick: handleNext, disabled: matches.length === 0, "aria-label": "Next match", title: "Next Match (Enter)", style: {
|
|
225
|
+
background: "#21262d",
|
|
226
|
+
border: "1px solid #30363d",
|
|
227
|
+
borderRadius: "4px",
|
|
228
|
+
color: "#c9d1d9",
|
|
229
|
+
cursor: "pointer",
|
|
230
|
+
padding: "3px 6px",
|
|
231
|
+
}, children: "\u25BC" }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close find and replace", title: "Close (Escape)", style: {
|
|
232
|
+
background: "transparent",
|
|
233
|
+
border: "none",
|
|
234
|
+
color: "#8b949e",
|
|
235
|
+
cursor: "pointer",
|
|
236
|
+
fontWeight: "bold",
|
|
237
|
+
fontSize: "14px",
|
|
238
|
+
}, children: "\u2715" })] }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [_jsx("input", { type: "text", placeholder: "Replace...", "aria-label": "Replace", value: replaceText, onChange: (e) => setReplaceText(e.target.value), onKeyDown: (e) => {
|
|
239
|
+
if (e.key === "Enter")
|
|
240
|
+
handleReplace();
|
|
241
|
+
if (e.key === "Escape")
|
|
242
|
+
onClose();
|
|
243
|
+
}, style: {
|
|
244
|
+
background: "#0d1117",
|
|
245
|
+
border: "1px solid #30363d",
|
|
246
|
+
borderRadius: "4px",
|
|
247
|
+
color: "#e6edf3",
|
|
248
|
+
padding: "4px 8px",
|
|
249
|
+
width: "150px",
|
|
250
|
+
outline: "none",
|
|
251
|
+
fontFamily: "monospace",
|
|
252
|
+
fontSize: "12px",
|
|
253
|
+
} }), _jsx("button", { type: "button", onClick: () => setPreserveCase((v) => !v), "aria-pressed": preserveCase, "aria-label": "Preserve case", title: "Preserve Case (AB -> ab)", style: {
|
|
254
|
+
background: preserveCase ? "rgba(56, 139, 253, 0.25)" : "#21262d",
|
|
255
|
+
border: `1px solid ${preserveCase ? "#388bfd" : "#30363d"}`,
|
|
256
|
+
borderRadius: "3px",
|
|
257
|
+
color: preserveCase ? "#58a6ff" : "#8b949e",
|
|
258
|
+
cursor: "pointer",
|
|
259
|
+
padding: "2px 5px",
|
|
260
|
+
fontSize: "11px",
|
|
261
|
+
fontWeight: 600,
|
|
262
|
+
}, children: "AB" }), _jsx("button", { type: "button", onClick: handleReplace, disabled: matches.length === 0, style: {
|
|
263
|
+
background: "#21262d",
|
|
264
|
+
border: "1px solid #30363d",
|
|
265
|
+
borderRadius: "4px",
|
|
266
|
+
color: "#c9d1d9",
|
|
267
|
+
cursor: "pointer",
|
|
268
|
+
padding: "3px 8px",
|
|
269
|
+
}, children: "Replace" }), _jsx("button", { type: "button", onClick: handleReplaceAll, disabled: matches.length === 0, style: {
|
|
270
|
+
background: "#21262d",
|
|
271
|
+
border: "1px solid #30363d",
|
|
272
|
+
borderRadius: "4px",
|
|
273
|
+
color: "#c9d1d9",
|
|
274
|
+
cursor: "pointer",
|
|
275
|
+
padding: "3px 8px",
|
|
276
|
+
}, children: "All" })] })] }));
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=FindReplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindReplace.js","sourceRoot":"","sources":["../../src/overlay/FindReplace.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Diagnostic, CodeAction } from "@termaxjs/editor-core";
|
|
2
|
+
export interface HoverTooltipProps {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
diagnostic?: Diagnostic | null;
|
|
7
|
+
documentation?: string | null;
|
|
8
|
+
onApplyCodeAction?: (action: CodeAction) => void;
|
|
9
|
+
onClose?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function HoverTooltip({ visible, x, y, diagnostic, documentation, onApplyCodeAction, }: HoverTooltipProps): import("react").JSX.Element | null;
|
|
12
|
+
//# sourceMappingURL=HoverTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HoverTooltip.d.ts","sourceRoot":"","sources":["../../src/overlay/HoverTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AASD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,CAAC,EACD,CAAC,EACD,UAAU,EACV,aAAa,EACb,iBAAiB,GAClB,EAAE,iBAAiB,sCAgHnB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const SEVERITY_COLORS = {
|
|
3
|
+
error: { bg: "rgba(248, 81, 73, 0.15)", text: "#f85149", label: "Error" },
|
|
4
|
+
warning: { bg: "rgba(210, 153, 34, 0.15)", text: "#d29922", label: "Warning" },
|
|
5
|
+
info: { bg: "rgba(88, 166, 255, 0.15)", text: "#58a6ff", label: "Info" },
|
|
6
|
+
hint: { bg: "rgba(139, 148, 158, 0.15)", text: "#8b949e", label: "Hint" },
|
|
7
|
+
};
|
|
8
|
+
export function HoverTooltip({ visible, x, y, diagnostic, documentation, onApplyCodeAction, }) {
|
|
9
|
+
if (!visible || (!diagnostic && !documentation))
|
|
10
|
+
return null;
|
|
11
|
+
const sevInfo = diagnostic ? SEVERITY_COLORS[diagnostic.severity] || SEVERITY_COLORS.info : null;
|
|
12
|
+
return (_jsxs("div", { style: {
|
|
13
|
+
position: "absolute",
|
|
14
|
+
top: `${y + 4}px`,
|
|
15
|
+
left: `${Math.max(8, x)}px`,
|
|
16
|
+
zIndex: 60,
|
|
17
|
+
maxWidth: "420px",
|
|
18
|
+
backgroundColor: "#161b22",
|
|
19
|
+
border: "1px solid #30363d",
|
|
20
|
+
borderRadius: "6px",
|
|
21
|
+
padding: "8px 12px",
|
|
22
|
+
boxShadow: "0 8px 24px rgba(0, 0, 0, 0.5)",
|
|
23
|
+
fontSize: "12px",
|
|
24
|
+
lineHeight: "18px",
|
|
25
|
+
color: "#c9d1d9",
|
|
26
|
+
pointerEvents: "auto",
|
|
27
|
+
userSelect: "text",
|
|
28
|
+
whiteSpace: "pre-wrap",
|
|
29
|
+
wordBreak: "break-word",
|
|
30
|
+
}, children: [diagnostic && (_jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [sevInfo && (_jsx("span", { style: {
|
|
31
|
+
fontSize: "10px",
|
|
32
|
+
fontWeight: 600,
|
|
33
|
+
textTransform: "uppercase",
|
|
34
|
+
padding: "1px 5px",
|
|
35
|
+
borderRadius: "3px",
|
|
36
|
+
backgroundColor: sevInfo.bg,
|
|
37
|
+
color: sevInfo.text,
|
|
38
|
+
}, children: sevInfo.label })), diagnostic.source && (_jsxs("span", { style: { fontSize: "11px", color: "#8b949e" }, children: ["(", diagnostic.source, ")"] })), diagnostic.code && (_jsxs("span", { style: { fontSize: "10px", color: "#8b949e" }, children: ["[", diagnostic.code, "]"] }))] }), _jsx("div", { style: { color: "#e6edf3" }, children: diagnostic.message }), diagnostic.actions && diagnostic.actions.length > 0 && (_jsxs("div", { style: {
|
|
39
|
+
display: "flex",
|
|
40
|
+
flexDirection: "column",
|
|
41
|
+
gap: "4px",
|
|
42
|
+
marginTop: "4px",
|
|
43
|
+
paddingTop: "6px",
|
|
44
|
+
borderTop: "1px solid #21262d",
|
|
45
|
+
}, children: [_jsx("div", { style: { fontSize: "11px", color: "#7ee787", fontWeight: 600 }, children: "Quick Fix:" }), diagnostic.actions.map((act) => (_jsxs("button", { type: "button", onClick: (e) => {
|
|
46
|
+
e.stopPropagation();
|
|
47
|
+
onApplyCodeAction?.(act);
|
|
48
|
+
}, style: {
|
|
49
|
+
textAlign: "left",
|
|
50
|
+
background: "rgba(56, 139, 253, 0.1)",
|
|
51
|
+
border: "1px solid rgba(56, 139, 253, 0.3)",
|
|
52
|
+
borderRadius: "4px",
|
|
53
|
+
color: "#58a6ff",
|
|
54
|
+
padding: "3px 8px",
|
|
55
|
+
fontSize: "11px",
|
|
56
|
+
cursor: "pointer",
|
|
57
|
+
display: "inline-block",
|
|
58
|
+
}, children: ["\uD83D\uDCA1 ", act.title] }, act.title)))] }))] })), documentation && (_jsx("div", { style: {
|
|
59
|
+
marginTop: diagnostic ? "6px" : 0,
|
|
60
|
+
paddingTop: diagnostic ? "6px" : 0,
|
|
61
|
+
borderTop: diagnostic ? "1px solid #21262d" : "none",
|
|
62
|
+
color: "#8b949e",
|
|
63
|
+
fontFamily: "monospace",
|
|
64
|
+
fontSize: "11px",
|
|
65
|
+
}, children: documentation }))] }));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=HoverTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HoverTooltip.js","sourceRoot":"","sources":["../../src/overlay/HoverTooltip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { PeerUser } from "@termaxjs/editor-core";
|
|
3
|
+
export interface RemoteCursorsOverlayProps {
|
|
4
|
+
peers: PeerUser[];
|
|
5
|
+
lineHeight: number;
|
|
6
|
+
charWidth: number;
|
|
7
|
+
scrollTop: number;
|
|
8
|
+
scrollLeft: number;
|
|
9
|
+
gutterWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Overlay rendering remote collaborative peer cursors and selection highlights.
|
|
13
|
+
*/
|
|
14
|
+
export declare function RemoteCursorsOverlay({ peers, lineHeight, charWidth, scrollTop, scrollLeft, gutterWidth, }: RemoteCursorsOverlayProps): React.JSX.Element;
|
|
15
|
+
//# sourceMappingURL=RemoteCursorsOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteCursorsOverlay.d.ts","sourceRoot":"","sources":["../../src/overlay/RemoteCursorsOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAe,GAChB,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAuE/C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Overlay rendering remote collaborative peer cursors and selection highlights.
|
|
4
|
+
*/
|
|
5
|
+
export function RemoteCursorsOverlay({ peers, lineHeight, charWidth, scrollTop, scrollLeft, gutterWidth = 0, }) {
|
|
6
|
+
const textStartX = gutterWidth + 8;
|
|
7
|
+
return (_jsx("div", { style: {
|
|
8
|
+
position: "absolute",
|
|
9
|
+
top: 0,
|
|
10
|
+
left: 0,
|
|
11
|
+
width: "100%",
|
|
12
|
+
height: "100%",
|
|
13
|
+
pointerEvents: "none",
|
|
14
|
+
zIndex: 5,
|
|
15
|
+
overflow: "hidden",
|
|
16
|
+
}, children: peers.map((peer) => {
|
|
17
|
+
const caretX = textStartX + peer.cursor.column * charWidth - scrollLeft;
|
|
18
|
+
const caretY = peer.cursor.line * lineHeight - scrollTop;
|
|
19
|
+
// Check if caret is within viewport
|
|
20
|
+
const isVisible = caretX >= textStartX - 20 && caretX <= 3000 && caretY >= -lineHeight && caretY <= 3000;
|
|
21
|
+
if (!isVisible)
|
|
22
|
+
return null;
|
|
23
|
+
return (_jsxs("div", { style: {
|
|
24
|
+
position: "absolute",
|
|
25
|
+
left: `${caretX}px`,
|
|
26
|
+
top: `${caretY}px`,
|
|
27
|
+
pointerEvents: "none",
|
|
28
|
+
}, children: [_jsx("div", { style: {
|
|
29
|
+
width: "2px",
|
|
30
|
+
height: `${lineHeight}px`,
|
|
31
|
+
backgroundColor: peer.color,
|
|
32
|
+
boxShadow: `0 0 4px ${peer.color}`,
|
|
33
|
+
} }), _jsx("div", { style: {
|
|
34
|
+
position: "absolute",
|
|
35
|
+
top: "-16px",
|
|
36
|
+
left: "-2px",
|
|
37
|
+
backgroundColor: peer.color,
|
|
38
|
+
color: "#ffffff",
|
|
39
|
+
fontSize: "10px",
|
|
40
|
+
fontFamily: "sans-serif",
|
|
41
|
+
fontWeight: 600,
|
|
42
|
+
padding: "1px 4px",
|
|
43
|
+
borderRadius: "2px 2px 2px 0",
|
|
44
|
+
whiteSpace: "nowrap",
|
|
45
|
+
userSelect: "none",
|
|
46
|
+
lineHeight: "12px",
|
|
47
|
+
}, children: peer.name })] }, peer.clientId));
|
|
48
|
+
}) }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=RemoteCursorsOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteCursorsOverlay.js","sourceRoot":"","sources":["../../src/overlay/RemoteCursorsOverlay.tsx"],"names":[],"mappings":";AAYA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,GAAG,CAAC,GACW;IAC1B,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;IAEnC,OAAO,CACL,cACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,MAAM;YACrB,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,QAAQ;SACnB,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;YAEzD,oCAAoC;YACpC,MAAM,SAAS,GACb,MAAM,IAAI,UAAU,GAAG,EAAE,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,UAAU,IAAI,MAAM,IAAI,IAAI,CAAC;YAEzF,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAE5B,OAAO,CACL,eAEE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,GAAG,MAAM,IAAI;oBACnB,GAAG,EAAE,GAAG,MAAM,IAAI;oBAClB,aAAa,EAAE,MAAM;iBACtB,aAGD,cACE,KAAK,EAAE;4BACL,KAAK,EAAE,KAAK;4BACZ,MAAM,EAAE,GAAG,UAAU,IAAI;4BACzB,eAAe,EAAE,IAAI,CAAC,KAAK;4BAC3B,SAAS,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE;yBACnC,GACD,EAGF,cACE,KAAK,EAAE;4BACL,QAAQ,EAAE,UAAU;4BACpB,GAAG,EAAE,OAAO;4BACZ,IAAI,EAAE,MAAM;4BACZ,eAAe,EAAE,IAAI,CAAC,KAAK;4BAC3B,KAAK,EAAE,SAAS;4BAChB,QAAQ,EAAE,MAAM;4BAChB,UAAU,EAAE,YAAY;4BACxB,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,eAAe;4BAC7B,UAAU,EAAE,QAAQ;4BACpB,UAAU,EAAE,MAAM;4BAClB,UAAU,EAAE,MAAM;yBACnB,YAEA,IAAI,CAAC,IAAI,GACN,KArCD,IAAI,CAAC,QAAQ,CAsCd,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { SignatureHelp } from "@termaxjs/editor-core";
|
|
3
|
+
export interface SignatureHelpTooltipProps {
|
|
4
|
+
visible: boolean;
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
signatureHelp?: SignatureHelp | null;
|
|
8
|
+
onClose?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function SignatureHelpTooltip({ visible, x, y, signatureHelp, }: SignatureHelpTooltipProps): React.JSX.Element | null;
|
|
11
|
+
//# sourceMappingURL=SignatureHelpTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureHelpTooltip.d.ts","sourceRoot":"","sources":["../../src/overlay/SignatureHelpTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,CAAC,EACD,CAAC,EACD,aAAa,GACd,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAyEtD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function SignatureHelpTooltip({ visible, x, y, signatureHelp, }) {
|
|
3
|
+
if (!visible || !signatureHelp || signatureHelp.signatures.length === 0) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
const activeSigIndex = Math.max(0, Math.min(signatureHelp.signatures.length - 1, signatureHelp.activeSignature || 0));
|
|
7
|
+
const activeSig = signatureHelp.signatures[activeSigIndex];
|
|
8
|
+
if (!activeSig)
|
|
9
|
+
return null;
|
|
10
|
+
const activeParamIndex = activeSig.activeParameter ?? signatureHelp.activeParameter ?? 0;
|
|
11
|
+
const activeParam = activeSig.parameters[activeParamIndex];
|
|
12
|
+
return (_jsxs("div", { style: {
|
|
13
|
+
position: "absolute",
|
|
14
|
+
top: `${Math.max(4, y - 48)}px`,
|
|
15
|
+
left: `${Math.max(8, x)}px`,
|
|
16
|
+
zIndex: 65,
|
|
17
|
+
maxWidth: "480px",
|
|
18
|
+
backgroundColor: "#161b22",
|
|
19
|
+
border: "1px solid #30363d",
|
|
20
|
+
borderRadius: "6px",
|
|
21
|
+
padding: "6px 10px",
|
|
22
|
+
boxShadow: "0 8px 24px rgba(0, 0, 0, 0.6)",
|
|
23
|
+
fontSize: "12px",
|
|
24
|
+
lineHeight: "18px",
|
|
25
|
+
fontFamily: "monospace",
|
|
26
|
+
color: "#c9d1d9",
|
|
27
|
+
pointerEvents: "auto",
|
|
28
|
+
userSelect: "text",
|
|
29
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px", flexWrap: "wrap" }, children: [_jsx("span", { style: { color: "#79c0ff", fontWeight: 600 }, children: activeSig.label }), signatureHelp.signatures.length > 1 && (_jsxs("span", { style: { color: "#8b949e", fontSize: "10px" }, children: ["(", activeSigIndex + 1, "/", signatureHelp.signatures.length, ")"] }))] }), activeParam && (_jsxs("div", { style: { marginTop: "4px", fontSize: "11px", color: "#e6edf3" }, children: [_jsx("span", { style: { color: "#ffa657", fontWeight: 600 }, children: typeof activeParam.label === "string" ? activeParam.label : "" }), activeParam.documentation && (_jsx("span", { style: { color: "#8b949e", marginLeft: "6px" }, children: activeParam.documentation }))] })), activeSig.documentation && (_jsx("div", { style: {
|
|
30
|
+
marginTop: "4px",
|
|
31
|
+
fontSize: "11px",
|
|
32
|
+
color: "#8b949e",
|
|
33
|
+
fontFamily: "system-ui, -apple-system, sans-serif",
|
|
34
|
+
}, children: activeSig.documentation }))] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=SignatureHelpTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureHelpTooltip.js","sourceRoot":"","sources":["../../src/overlay/SignatureHelpTooltip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const SURROUND_PAIR_MAP: Record<string, [string, string]>;
|
|
2
|
+
export interface SurroundEdit {
|
|
3
|
+
prefix: string;
|
|
4
|
+
suffix: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a typed character is an enclosure bracket or quote that should surround active selections.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSurroundPair(typedChar: string): [string, string] | null;
|
|
10
|
+
/**
|
|
11
|
+
* Wraps selected text with an open and close pair character.
|
|
12
|
+
*/
|
|
13
|
+
export declare function wrapSelectedText(text: string, typedChar: string): string;
|
|
14
|
+
//# sourceMappingURL=SelectionSurround.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionSurround.d.ts","sourceRoot":"","sources":["../../src/pairs/SelectionSurround.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAY9D,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const SURROUND_PAIR_MAP = {
|
|
2
|
+
"(": ["(", ")"],
|
|
3
|
+
")": ["(", ")"],
|
|
4
|
+
"[": ["[", "]"],
|
|
5
|
+
"]": ["[", "]"],
|
|
6
|
+
"{": ["{", "}"],
|
|
7
|
+
"}": ["{", "}"],
|
|
8
|
+
'"': ['"', '"'],
|
|
9
|
+
"'": ["'", "'"],
|
|
10
|
+
"`": ["`", "`"],
|
|
11
|
+
"<": ["<", ">"],
|
|
12
|
+
">": ["<", ">"],
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Checks if a typed character is an enclosure bracket or quote that should surround active selections.
|
|
16
|
+
*/
|
|
17
|
+
export function getSurroundPair(typedChar) {
|
|
18
|
+
return SURROUND_PAIR_MAP[typedChar] ?? null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wraps selected text with an open and close pair character.
|
|
22
|
+
*/
|
|
23
|
+
export function wrapSelectedText(text, typedChar) {
|
|
24
|
+
const pair = getSurroundPair(typedChar);
|
|
25
|
+
if (!pair)
|
|
26
|
+
return text;
|
|
27
|
+
return `${pair[0]}${text}${pair[1]}`;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=SelectionSurround.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionSurround.js","sourceRoot":"","sources":["../../src/pairs/SelectionSurround.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;CAChB,CAAC;AAOF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,iBAAiB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Position } from "@termaxjs/editor-core";
|
|
2
|
+
export declare const PAIRS: Record<string, string>;
|
|
3
|
+
export declare const REVERSE_PAIRS: Record<string, string>;
|
|
4
|
+
export declare function getAutoClosePair(char: string): string | null;
|
|
5
|
+
export declare function findMatchingBracket(lines: string[], cursor: Position): Position | null;
|
|
6
|
+
//# sourceMappingURL=pairMatching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairMatching.d.ts","sourceRoot":"","sources":["../../src/pairs/pairMatching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOxC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOhD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAmGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAoDtF"}
|