@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,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":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAA6B,MAAM,uBAAuB,CAAC;AAOlF,SAAS,iBAAiB,CAAC,QAAgB,EAAE,WAAmB;IAC9D,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ;QAAE,OAAO,WAAW,CAAC;IAClD,IAAI,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE;QAAE,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC;IAC1E,IAAI,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE;QAAE,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC;IAC1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,cAAc,EAAoB;IACvE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,GACzF,gBAAgB,EAAE,CAAC;IAErB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEpD,uEAAuE;IACvE,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+DAA+D;IAC/D,MAAM,iBAAiB,GAAG,MAAM,CAAe,IAAI,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;YAC7B,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,0CAA0C;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,OAAO,GAA0E,EAAE,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YAC9E,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,GAAG,MAAM,OAAO,KAAK,CAAC;YAC/B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAEzC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;gBAClC,SAAS,CAAC;oBACR,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,IAAI,KAAK,KAAK,IAAI;wBAAE,MAAM;oBAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;oBACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAE3B,IAAI,WAAW,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;wBAC7C,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC;wBACtC,MAAM,QAAQ,GACZ,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI;4BACvB,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAC1D,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;wBACxF,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACd,IAAI,CAAC,KAAK,CAAC,MAAM;gCAAE,MAAM;4BACzB,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,GAAG;wBACX,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,SAAS;qBAChB,CAAC,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,MAAM;wBAAE,MAAM;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhE,2BAA2B;IAC3B,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,EAAE;QACd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,KAAK,GAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAEpE,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7B,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,EACD,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CACnD,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAEnD,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,KAAK,GAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpE,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE7B,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAChF,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAC3C,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAC9E,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,GAAG,MAAM,OAAO,KAAK,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YACpD,OAAO,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IAEjC,wNAAwN;IACxN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,gBACF,kBAAkB,EAC7B,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,EAAE;YACV,eAAe,EAAE,SAAS;YAC1B,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,gCAAgC;YAC3C,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,SAAS;SACjB,aAGD,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,gBACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,SAAS,gBACV,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4BACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gCACtB,IAAI,CAAC,CAAC,QAAQ;oCAAE,UAAU,EAAE,CAAC;;oCACxB,UAAU,EAAE,CAAC;4BACpB,CAAC;4BACD,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gCAAE,OAAO,EAAE,CAAC;wBACpC,CAAC,EACD,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,SAAS;4BAClB,KAAK,EAAE,OAAO;4BACd,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,WAAW;4BACvB,QAAQ,EAAE,MAAM;yBACjB,GACD,EAGF,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBACxB,SAAS,gBACZ,YAAY,EACvB,KAAK,EAAC,oBAAoB,EAC1B,KAAK,EAAE;oCACL,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;oCAC9D,MAAM,EAAE,aAAa,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;oCACxD,YAAY,EAAE,KAAK;oCACnB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCACxC,MAAM,EAAE,SAAS;oCACjB,OAAO,EAAE,SAAS;oCAClB,QAAQ,EAAE,MAAM;oCAChB,UAAU,EAAE,GAAG;iCAChB,mBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBACxB,SAAS,gBACZ,kBAAkB,EAC7B,KAAK,EAAC,0BAA0B,EAChC,KAAK,EAAE;oCACL,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;oCAC9D,MAAM,EAAE,aAAa,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;oCACxD,YAAY,EAAE,KAAK;oCACnB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCACxC,MAAM,EAAE,SAAS;oCACjB,OAAO,EAAE,SAAS;oCAClB,QAAQ,EAAE,MAAM;oCAChB,UAAU,EAAE,GAAG;iCAChB,oBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBACvB,QAAQ,gBACX,wBAAwB,EACnC,KAAK,EAAC,gCAAgC,EACtC,KAAK,EAAE;oCACL,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;oCAC7D,MAAM,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;oCACvD,YAAY,EAAE,KAAK;oCACnB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCACvC,MAAM,EAAE,SAAS;oCACjB,OAAO,EAAE,SAAS;oCAClB,QAAQ,EAAE,MAAM;oCAChB,UAAU,EAAE,GAAG;iCAChB,mBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBAC1B,WAAW,gBACd,mBAAmB,EAC9B,KAAK,EAAC,2BAA2B,EACjC,KAAK,EAAE;oCACL,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;oCAChE,MAAM,EAAE,aAAa,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;oCAC1D,YAAY,EAAE,KAAK;oCACnB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCAC1C,MAAM,EAAE,SAAS;oCACjB,OAAO,EAAE,SAAS;oCAClB,QAAQ,EAAE,MAAM;oCAChB,UAAU,EAAE,GAAG;iCAChB,uBAGM,IACL,EAEN,eACE,IAAI,EAAC,QAAQ,eACH,QAAQ,EAClB,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAEnF,OAAO,CAAC,MAAM,GAAG,CAAC;4BACjB,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE;4BAC1C,CAAC,CAAC,KAAK;gCACL,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,EAAE,GACH,EAEP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,gBACnB,gBAAgB,EAC3B,KAAK,EAAC,8BAA8B,EACpC,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;yBACnB,uBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,gBACnB,YAAY,EACvB,KAAK,EAAC,oBAAoB,EAC1B,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;yBACnB,uBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACL,wBAAwB,EACnC,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAE;4BACL,UAAU,EAAE,aAAa;4BACzB,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;4BACjB,UAAU,EAAE,MAAM;4BAClB,QAAQ,EAAE,MAAM;yBACjB,uBAGM,IACL,EAGN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,gBACE,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,YAAY,gBACb,SAAS,EACpB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4BACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;gCAAE,aAAa,EAAE,CAAC;4BACvC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gCAAE,OAAO,EAAE,CAAC;wBACpC,CAAC,EACD,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,SAAS;4BAClB,KAAK,EAAE,OAAO;4BACd,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,WAAW;4BACvB,QAAQ,EAAE,MAAM;yBACjB,GACD,EAEF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBAC3B,YAAY,gBACf,eAAe,EAC1B,KAAK,EAAC,0BAA0B,EAChC,KAAK,EAAE;4BACL,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;4BACjE,MAAM,EAAE,aAAa,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;4BAC3D,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;4BAC3C,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,MAAM;4BAChB,UAAU,EAAE,GAAG;yBAChB,mBAGM,EAET,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAC9B,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;yBACnB,wBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAC9B,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,mBAAmB;4BAC3B,YAAY,EAAE,KAAK;4BACnB,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;yBACnB,oBAGM,IACL,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -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"}