@nocturnium/svelte-ide 1.0.0-rc.1
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 +21 -0
- package/README.md +251 -0
- package/dist/components/agents/AgentActivityPanel.svelte +565 -0
- package/dist/components/agents/AgentActivityPanel.svelte.d.ts +24 -0
- package/dist/components/agents/AgentAvatar.svelte +417 -0
- package/dist/components/agents/AgentAvatar.svelte.d.ts +23 -0
- package/dist/components/agents/AgentCursor.svelte +224 -0
- package/dist/components/agents/AgentCursor.svelte.d.ts +35 -0
- package/dist/components/agents/AgentPresenceBar.svelte +261 -0
- package/dist/components/agents/AgentPresenceBar.svelte.d.ts +20 -0
- package/dist/components/agents/index.d.ts +4 -0
- package/dist/components/agents/index.js +5 -0
- package/dist/components/ai/AIConversationList.svelte +524 -0
- package/dist/components/ai/AIConversationList.svelte.d.ts +17 -0
- package/dist/components/ai/AIEditPreview.svelte +132 -0
- package/dist/components/ai/AIEditPreview.svelte.d.ts +8 -0
- package/dist/components/ai/AIInlineEdit.svelte +155 -0
- package/dist/components/ai/AIInlineEdit.svelte.d.ts +10 -0
- package/dist/components/ai/AIMessage.svelte +239 -0
- package/dist/components/ai/AIMessage.svelte.d.ts +13 -0
- package/dist/components/ai/AIMessageActions.svelte +176 -0
- package/dist/components/ai/AIMessageActions.svelte.d.ts +12 -0
- package/dist/components/ai/AIMessageContent.svelte +355 -0
- package/dist/components/ai/AIMessageContent.svelte.d.ts +7 -0
- package/dist/components/ai/AIPanel.svelte +561 -0
- package/dist/components/ai/AIPanel.svelte.d.ts +7 -0
- package/dist/components/ai/AISuggestionWidget.svelte +132 -0
- package/dist/components/ai/AISuggestionWidget.svelte.d.ts +10 -0
- package/dist/components/ai/AIToolCallDisplay.svelte +317 -0
- package/dist/components/ai/AIToolCallDisplay.svelte.d.ts +12 -0
- package/dist/components/ai/index.d.ts +9 -0
- package/dist/components/ai/index.js +10 -0
- package/dist/components/core/Avatar.svelte +110 -0
- package/dist/components/core/Avatar.svelte.d.ts +12 -0
- package/dist/components/core/Badge.svelte +98 -0
- package/dist/components/core/Badge.svelte.d.ts +11 -0
- package/dist/components/core/Button.svelte +175 -0
- package/dist/components/core/Button.svelte.d.ts +18 -0
- package/dist/components/core/ConnectionStatus.svelte +294 -0
- package/dist/components/core/ConnectionStatus.svelte.d.ts +20 -0
- package/dist/components/core/ContextMenu.svelte +176 -0
- package/dist/components/core/ContextMenu.svelte.d.ts +19 -0
- package/dist/components/core/ErrorBoundary.svelte +277 -0
- package/dist/components/core/ErrorBoundary.svelte.d.ts +23 -0
- package/dist/components/core/Icon.svelte +107 -0
- package/dist/components/core/Icon.svelte.d.ts +8 -0
- package/dist/components/core/Input.svelte +138 -0
- package/dist/components/core/Input.svelte.d.ts +20 -0
- package/dist/components/core/Kbd.svelte +34 -0
- package/dist/components/core/Kbd.svelte.d.ts +7 -0
- package/dist/components/core/ResizeHandle.svelte +200 -0
- package/dist/components/core/ResizeHandle.svelte.d.ts +23 -0
- package/dist/components/core/Spinner.svelte +35 -0
- package/dist/components/core/Spinner.svelte.d.ts +7 -0
- package/dist/components/core/Textarea.svelte +112 -0
- package/dist/components/core/Textarea.svelte.d.ts +18 -0
- package/dist/components/core/Tooltip.svelte +103 -0
- package/dist/components/core/Tooltip.svelte.d.ts +11 -0
- package/dist/components/core/index.d.ts +13 -0
- package/dist/components/core/index.js +14 -0
- package/dist/components/editor/AIFocusLayer.svelte +430 -0
- package/dist/components/editor/AIFocusLayer.svelte.d.ts +32 -0
- package/dist/components/editor/Breadcrumbs.svelte +435 -0
- package/dist/components/editor/Breadcrumbs.svelte.d.ts +33 -0
- package/dist/components/editor/BreakpointLayer.svelte +642 -0
- package/dist/components/editor/BreakpointLayer.svelte.d.ts +20 -0
- package/dist/components/editor/CognitiveLoadMeter.svelte +324 -0
- package/dist/components/editor/CognitiveLoadMeter.svelte.d.ts +18 -0
- package/dist/components/editor/CollaborativeEditor.svelte +218 -0
- package/dist/components/editor/CollaborativeEditor.svelte.d.ts +32 -0
- package/dist/components/editor/CommandPalette.svelte +434 -0
- package/dist/components/editor/CommandPalette.svelte.d.ts +11 -0
- package/dist/components/editor/ComplexityLayer.svelte +293 -0
- package/dist/components/editor/ComplexityLayer.svelte.d.ts +23 -0
- package/dist/components/editor/ConflictZoneLayer.svelte +441 -0
- package/dist/components/editor/ConflictZoneLayer.svelte.d.ts +25 -0
- package/dist/components/editor/ContextLens.svelte +262 -0
- package/dist/components/editor/ContextLens.svelte.d.ts +27 -0
- package/dist/components/editor/CustomEditor.svelte +1242 -0
- package/dist/components/editor/CustomEditor.svelte.d.ts +37 -0
- package/dist/components/editor/DebugConsole.svelte +646 -0
- package/dist/components/editor/DebugConsole.svelte.d.ts +41 -0
- package/dist/components/editor/EchoCursorLayer.svelte +363 -0
- package/dist/components/editor/EchoCursorLayer.svelte.d.ts +24 -0
- package/dist/components/editor/Editor.svelte +61 -0
- package/dist/components/editor/Editor.svelte.d.ts +22 -0
- package/dist/components/editor/EditorGutter.svelte +119 -0
- package/dist/components/editor/EditorGutter.svelte.d.ts +19 -0
- package/dist/components/editor/EditorLines.svelte +182 -0
- package/dist/components/editor/EditorLines.svelte.d.ts +43 -0
- package/dist/components/editor/EditorPane.svelte +134 -0
- package/dist/components/editor/EditorPane.svelte.d.ts +9 -0
- package/dist/components/editor/EditorSelections.svelte +186 -0
- package/dist/components/editor/EditorSelections.svelte.d.ts +25 -0
- package/dist/components/editor/EditorTabs.svelte +170 -0
- package/dist/components/editor/EditorTabs.svelte.d.ts +12 -0
- package/dist/components/editor/FileExplorer.svelte +811 -0
- package/dist/components/editor/FileExplorer.svelte.d.ts +67 -0
- package/dist/components/editor/FileIcon.svelte +110 -0
- package/dist/components/editor/FileIcon.svelte.d.ts +10 -0
- package/dist/components/editor/FindReplace.svelte +448 -0
- package/dist/components/editor/FindReplace.svelte.d.ts +40 -0
- package/dist/components/editor/GhostBracketLayer.svelte +391 -0
- package/dist/components/editor/GhostBracketLayer.svelte.d.ts +24 -0
- package/dist/components/editor/GitBlameLayer.svelte +436 -0
- package/dist/components/editor/GitBlameLayer.svelte.d.ts +18 -0
- package/dist/components/editor/InlineDiagnosticsLayer.svelte +540 -0
- package/dist/components/editor/InlineDiagnosticsLayer.svelte.d.ts +35 -0
- package/dist/components/editor/InlineDiffLayer.svelte +337 -0
- package/dist/components/editor/InlineDiffLayer.svelte.d.ts +31 -0
- package/dist/components/editor/MinimalEditor.svelte +75 -0
- package/dist/components/editor/MinimalEditor.svelte.d.ts +6 -0
- package/dist/components/editor/MinimalEditor2.svelte +84 -0
- package/dist/components/editor/MinimalEditor2.svelte.d.ts +6 -0
- package/dist/components/editor/Minimap.svelte +327 -0
- package/dist/components/editor/Minimap.svelte.d.ts +34 -0
- package/dist/components/editor/PluginPreviewSandbox.svelte +793 -0
- package/dist/components/editor/PluginPreviewSandbox.svelte.d.ts +49 -0
- package/dist/components/editor/ProblemsPanel.svelte +628 -0
- package/dist/components/editor/ProblemsPanel.svelte.d.ts +25 -0
- package/dist/components/editor/QuickActionsMenu.svelte +403 -0
- package/dist/components/editor/QuickActionsMenu.svelte.d.ts +18 -0
- package/dist/components/editor/SnippetPalette.svelte +530 -0
- package/dist/components/editor/SnippetPalette.svelte.d.ts +16 -0
- package/dist/components/editor/StructureMap.svelte +431 -0
- package/dist/components/editor/StructureMap.svelte.d.ts +37 -0
- package/dist/components/editor/SymbolOutline.svelte +722 -0
- package/dist/components/editor/SymbolOutline.svelte.d.ts +44 -0
- package/dist/components/editor/TimelineScrubber.svelte +470 -0
- package/dist/components/editor/TimelineScrubber.svelte.d.ts +40 -0
- package/dist/components/editor/TokenRenderer.svelte +69 -0
- package/dist/components/editor/TokenRenderer.svelte.d.ts +15 -0
- package/dist/components/editor/constants.d.ts +32 -0
- package/dist/components/editor/constants.js +36 -0
- package/dist/components/editor/core/ai-awareness.d.ts +176 -0
- package/dist/components/editor/core/ai-awareness.js +210 -0
- package/dist/components/editor/core/bracket-healer.d.ts +189 -0
- package/dist/components/editor/core/bracket-healer.js +406 -0
- package/dist/components/editor/core/breakpoints.d.ts +203 -0
- package/dist/components/editor/core/breakpoints.js +414 -0
- package/dist/components/editor/core/commands.d.ts +108 -0
- package/dist/components/editor/core/commands.js +246 -0
- package/dist/components/editor/core/complexity-analyzer.d.ts +123 -0
- package/dist/components/editor/core/complexity-analyzer.js +376 -0
- package/dist/components/editor/core/conflict-predictor.d.ts +135 -0
- package/dist/components/editor/core/conflict-predictor.js +316 -0
- package/dist/components/editor/core/crdt-binding.d.ts +118 -0
- package/dist/components/editor/core/crdt-binding.js +286 -0
- package/dist/components/editor/core/diagnostics.d.ts +210 -0
- package/dist/components/editor/core/diagnostics.js +335 -0
- package/dist/components/editor/core/echo-cursor.d.ts +201 -0
- package/dist/components/editor/core/echo-cursor.js +267 -0
- package/dist/components/editor/core/folding.d.ts +124 -0
- package/dist/components/editor/core/folding.js +672 -0
- package/dist/components/editor/core/ghost-pair.d.ts +122 -0
- package/dist/components/editor/core/ghost-pair.js +221 -0
- package/dist/components/editor/core/git-blame.d.ts +170 -0
- package/dist/components/editor/core/git-blame.js +324 -0
- package/dist/components/editor/core/index.d.ts +26 -0
- package/dist/components/editor/core/index.js +24 -0
- package/dist/components/editor/core/keybindings.d.ts +79 -0
- package/dist/components/editor/core/keybindings.js +357 -0
- package/dist/components/editor/core/multi-cursor.d.ts +196 -0
- package/dist/components/editor/core/multi-cursor.js +521 -0
- package/dist/components/editor/core/navigation.d.ts +107 -0
- package/dist/components/editor/core/navigation.js +408 -0
- package/dist/components/editor/core/quick-actions.d.ts +189 -0
- package/dist/components/editor/core/quick-actions.js +427 -0
- package/dist/components/editor/core/search.d.ts +88 -0
- package/dist/components/editor/core/search.js +192 -0
- package/dist/components/editor/core/semantic-analyzer.d.ts +77 -0
- package/dist/components/editor/core/semantic-analyzer.js +424 -0
- package/dist/components/editor/core/snippet-manager.d.ts +202 -0
- package/dist/components/editor/core/snippet-manager.js +565 -0
- package/dist/components/editor/core/state.d.ts +367 -0
- package/dist/components/editor/core/state.js +900 -0
- package/dist/components/editor/core/timeline.d.ts +204 -0
- package/dist/components/editor/core/timeline.js +349 -0
- package/dist/components/editor/editor-find.d.ts +56 -0
- package/dist/components/editor/editor-find.js +148 -0
- package/dist/components/editor/editor-input.d.ts +77 -0
- package/dist/components/editor/editor-input.js +445 -0
- package/dist/components/editor/editor-multicursor.d.ts +21 -0
- package/dist/components/editor/editor-multicursor.js +196 -0
- package/dist/components/editor/editor-scroll.d.ts +14 -0
- package/dist/components/editor/editor-scroll.js +34 -0
- package/dist/components/editor/index.d.ts +15 -0
- package/dist/components/editor/index.js +21 -0
- package/dist/components/editor/languages.d.ts +62 -0
- package/dist/components/editor/languages.js +285 -0
- package/dist/components/editor/theme.d.ts +88 -0
- package/dist/components/editor/theme.js +139 -0
- package/dist/components/editor/tokenizer/base.d.ts +40 -0
- package/dist/components/editor/tokenizer/base.js +203 -0
- package/dist/components/editor/tokenizer/index.d.ts +56 -0
- package/dist/components/editor/tokenizer/index.js +215 -0
- package/dist/components/editor/tokenizer/languages/css.d.ts +17 -0
- package/dist/components/editor/tokenizer/languages/css.js +194 -0
- package/dist/components/editor/tokenizer/languages/go.d.ts +17 -0
- package/dist/components/editor/tokenizer/languages/go.js +220 -0
- package/dist/components/editor/tokenizer/languages/html.d.ts +24 -0
- package/dist/components/editor/tokenizer/languages/html.js +145 -0
- package/dist/components/editor/tokenizer/languages/javascript.d.ts +56 -0
- package/dist/components/editor/tokenizer/languages/javascript.js +452 -0
- package/dist/components/editor/tokenizer/languages/json.d.ts +12 -0
- package/dist/components/editor/tokenizer/languages/json.js +91 -0
- package/dist/components/editor/tokenizer/languages/markdown.d.ts +16 -0
- package/dist/components/editor/tokenizer/languages/markdown.js +156 -0
- package/dist/components/editor/tokenizer/languages/python.d.ts +20 -0
- package/dist/components/editor/tokenizer/languages/python.js +227 -0
- package/dist/components/editor/tokenizer/languages/svelte.d.ts +40 -0
- package/dist/components/editor/tokenizer/languages/svelte.js +326 -0
- package/dist/components/editor/tokenizer/types.d.ts +86 -0
- package/dist/components/editor/tokenizer/types.js +4 -0
- package/dist/components/layout/IDELayout.svelte +274 -0
- package/dist/components/layout/IDELayout.svelte.d.ts +29 -0
- package/dist/components/layout/StatusBar.svelte +511 -0
- package/dist/components/layout/StatusBar.svelte.d.ts +47 -0
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +3 -0
- package/dist/components/lsp/AutocompleteWidget.svelte +364 -0
- package/dist/components/lsp/AutocompleteWidget.svelte.d.ts +33 -0
- package/dist/components/lsp/DiagnosticMarker.svelte +166 -0
- package/dist/components/lsp/DiagnosticMarker.svelte.d.ts +19 -0
- package/dist/components/lsp/DiagnosticsPanel.svelte +388 -0
- package/dist/components/lsp/DiagnosticsPanel.svelte.d.ts +21 -0
- package/dist/components/lsp/HoverTooltip.svelte +274 -0
- package/dist/components/lsp/HoverTooltip.svelte.d.ts +24 -0
- package/dist/components/lsp/LSPEditor.svelte +486 -0
- package/dist/components/lsp/LSPEditor.svelte.d.ts +39 -0
- package/dist/components/lsp/SignatureHelpWidget.svelte +216 -0
- package/dist/components/lsp/SignatureHelpWidget.svelte.d.ts +22 -0
- package/dist/components/lsp/index.d.ts +6 -0
- package/dist/components/lsp/index.js +7 -0
- package/dist/components/plugins/PluginCard.svelte +153 -0
- package/dist/components/plugins/PluginCard.svelte.d.ts +19 -0
- package/dist/components/plugins/PluginPanel.svelte +280 -0
- package/dist/components/plugins/PluginPanel.svelte.d.ts +8 -0
- package/dist/components/plugins/PluginProposalForm.svelte +250 -0
- package/dist/components/plugins/PluginProposalForm.svelte.d.ts +6 -0
- package/dist/components/plugins/PluginStatusBadge.svelte +14 -0
- package/dist/components/plugins/PluginStatusBadge.svelte.d.ts +8 -0
- package/dist/components/plugins/index.d.ts +4 -0
- package/dist/components/plugins/index.js +5 -0
- package/dist/components/vfs/LockConflictDialog.svelte +705 -0
- package/dist/components/vfs/LockConflictDialog.svelte.d.ts +21 -0
- package/dist/components/vfs/LockIndicator.svelte +194 -0
- package/dist/components/vfs/LockIndicator.svelte.d.ts +29 -0
- package/dist/components/vfs/LockOverlay.svelte +344 -0
- package/dist/components/vfs/LockOverlay.svelte.d.ts +17 -0
- package/dist/components/vfs/VersionConflictDialog.svelte +549 -0
- package/dist/components/vfs/VersionConflictDialog.svelte.d.ts +24 -0
- package/dist/components/vfs/index.d.ts +4 -0
- package/dist/components/vfs/index.js +5 -0
- package/dist/crdt/awareness.d.ts +42 -0
- package/dist/crdt/awareness.js +109 -0
- package/dist/crdt/document.d.ts +101 -0
- package/dist/crdt/document.js +187 -0
- package/dist/crdt/index.d.ts +9 -0
- package/dist/crdt/index.js +8 -0
- package/dist/crdt/provider.d.ts +85 -0
- package/dist/crdt/provider.js +150 -0
- package/dist/crdt/types.d.ts +61 -0
- package/dist/crdt/types.js +4 -0
- package/dist/crdt/undo.d.ts +34 -0
- package/dist/crdt/undo.js +70 -0
- package/dist/index.d.ts +277 -0
- package/dist/index.js +280 -0
- package/dist/plugins/index.d.ts +103 -0
- package/dist/plugins/index.js +153 -0
- package/dist/services/error-handling.d.ts +95 -0
- package/dist/services/error-handling.js +413 -0
- package/dist/services/ide-integration.d.ts +83 -0
- package/dist/services/ide-integration.js +367 -0
- package/dist/services/lsp-client.d.ts +69 -0
- package/dist/services/lsp-client.js +667 -0
- package/dist/services/mock-ai.d.ts +37 -0
- package/dist/services/mock-ai.js +318 -0
- package/dist/services/optimistic.d.ts +141 -0
- package/dist/services/optimistic.js +367 -0
- package/dist/services/vfs-client.d.ts +81 -0
- package/dist/services/vfs-client.js +348 -0
- package/dist/stores/agents.svelte.d.ts +85 -0
- package/dist/stores/agents.svelte.js +459 -0
- package/dist/stores/ai-persistence.svelte.d.ts +76 -0
- package/dist/stores/ai-persistence.svelte.js +334 -0
- package/dist/stores/ai.svelte.d.ts +140 -0
- package/dist/stores/ai.svelte.js +383 -0
- package/dist/stores/collaboration.svelte.d.ts +164 -0
- package/dist/stores/collaboration.svelte.js +334 -0
- package/dist/stores/editor.svelte.d.ts +131 -0
- package/dist/stores/editor.svelte.js +250 -0
- package/dist/stores/index.d.ts +10 -0
- package/dist/stores/index.js +29 -0
- package/dist/stores/layout.svelte.d.ts +171 -0
- package/dist/stores/layout.svelte.js +351 -0
- package/dist/stores/plugin.svelte.d.ts +121 -0
- package/dist/stores/plugin.svelte.js +410 -0
- package/dist/stores/vfs.svelte.d.ts +123 -0
- package/dist/stores/vfs.svelte.js +680 -0
- package/dist/styles/theme.css +623 -0
- package/dist/types/agents.d.ts +127 -0
- package/dist/types/agents.js +5 -0
- package/dist/types/ai.d.ts +137 -0
- package/dist/types/ai.js +4 -0
- package/dist/types/crdt.d.ts +222 -0
- package/dist/types/crdt.js +5 -0
- package/dist/types/editor.d.ts +52 -0
- package/dist/types/editor.js +18 -0
- package/dist/types/events.d.ts +133 -0
- package/dist/types/events.js +4 -0
- package/dist/types/filesystem.d.ts +77 -0
- package/dist/types/filesystem.js +4 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.js +12 -0
- package/dist/types/lsp.d.ts +691 -0
- package/dist/types/lsp.js +108 -0
- package/dist/types/plugin.d.ts +239 -0
- package/dist/types/plugin.js +5 -0
- package/dist/types/vfs.d.ts +191 -0
- package/dist/types/vfs.js +18 -0
- package/dist/utils/format.d.ts +55 -0
- package/dist/utils/format.js +152 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/keybindings.d.ts +33 -0
- package/dist/utils/keybindings.js +171 -0
- package/dist/utils/language.d.ts +27 -0
- package/dist/utils/language.js +222 -0
- package/package.json +178 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core editor state management
|
|
3
|
+
*
|
|
4
|
+
* This module provides the fundamental state management for the custom editor,
|
|
5
|
+
* handling document content, cursor positions, selections, and history.
|
|
6
|
+
* Supports multi-cursor editing with automatic cursor merging.
|
|
7
|
+
*/
|
|
8
|
+
import type { TokenizedLine } from '../tokenizer/types';
|
|
9
|
+
import { CursorManager, type Cursor } from './multi-cursor';
|
|
10
|
+
/**
|
|
11
|
+
* Position in the document
|
|
12
|
+
*/
|
|
13
|
+
export interface Position {
|
|
14
|
+
/** Line number (0-based) */
|
|
15
|
+
line: number;
|
|
16
|
+
/** Column number (0-based, represents character index in line) */
|
|
17
|
+
column: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A selection range in the document
|
|
21
|
+
*/
|
|
22
|
+
export interface Selection {
|
|
23
|
+
/** Start of selection (anchor) */
|
|
24
|
+
anchor: Position;
|
|
25
|
+
/** End of selection (head/cursor position) */
|
|
26
|
+
head: Position;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A single line in the document
|
|
30
|
+
*/
|
|
31
|
+
export interface Line {
|
|
32
|
+
/** Line number (0-based) */
|
|
33
|
+
number: number;
|
|
34
|
+
/** Raw text content */
|
|
35
|
+
text: string;
|
|
36
|
+
/** Tokenized content for syntax highlighting */
|
|
37
|
+
tokens?: TokenizedLine;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* History entry for undo/redo
|
|
41
|
+
*/
|
|
42
|
+
export interface HistoryEntry {
|
|
43
|
+
/** Document content before this change */
|
|
44
|
+
content: string;
|
|
45
|
+
/** Selection state before this change (deprecated, use cursors) */
|
|
46
|
+
selection: Selection;
|
|
47
|
+
/** All cursors state before this change */
|
|
48
|
+
cursors?: Cursor[];
|
|
49
|
+
/** Primary cursor ID */
|
|
50
|
+
primaryCursorId?: string;
|
|
51
|
+
/** Timestamp of the change */
|
|
52
|
+
timestamp: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Editor state configuration
|
|
56
|
+
*/
|
|
57
|
+
export interface EditorStateConfig {
|
|
58
|
+
/** Initial document content */
|
|
59
|
+
content?: string;
|
|
60
|
+
/** Language for syntax highlighting */
|
|
61
|
+
language?: string;
|
|
62
|
+
/** Maximum history entries */
|
|
63
|
+
maxHistorySize?: number;
|
|
64
|
+
/** Tab size in spaces */
|
|
65
|
+
tabSize?: number;
|
|
66
|
+
/** Insert spaces instead of tabs */
|
|
67
|
+
insertSpaces?: boolean;
|
|
68
|
+
/** Maximum number of cursors (default: 100) */
|
|
69
|
+
maxCursors?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Change event for document updates
|
|
73
|
+
*/
|
|
74
|
+
export interface ChangeEvent {
|
|
75
|
+
/** Type of change */
|
|
76
|
+
type: 'insert' | 'delete' | 'replace';
|
|
77
|
+
/** Start position of change */
|
|
78
|
+
from: Position;
|
|
79
|
+
/** End position of change (for delete/replace) */
|
|
80
|
+
to?: Position;
|
|
81
|
+
/** Inserted text (for insert/replace) */
|
|
82
|
+
text?: string;
|
|
83
|
+
/** Removed text (for delete/replace) */
|
|
84
|
+
removed?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Core editor state class
|
|
88
|
+
*/
|
|
89
|
+
export declare class EditorState {
|
|
90
|
+
/** Document lines */
|
|
91
|
+
private _lines;
|
|
92
|
+
/** Multi-cursor manager */
|
|
93
|
+
private _cursorManager;
|
|
94
|
+
/** Language for syntax highlighting */
|
|
95
|
+
private _language;
|
|
96
|
+
/** Tokenizer state for incremental tokenization */
|
|
97
|
+
private _tokenizerStates;
|
|
98
|
+
/** Undo history */
|
|
99
|
+
private _undoStack;
|
|
100
|
+
/** Redo history */
|
|
101
|
+
private _redoStack;
|
|
102
|
+
/** Maximum history size */
|
|
103
|
+
private maxHistorySize;
|
|
104
|
+
/** Tab settings */
|
|
105
|
+
private tabSize;
|
|
106
|
+
private insertSpaces;
|
|
107
|
+
/** Maximum listeners per type to prevent memory leaks */
|
|
108
|
+
private static readonly MAX_LISTENERS;
|
|
109
|
+
/** Change listeners */
|
|
110
|
+
private changeListeners;
|
|
111
|
+
/** Selection change listeners */
|
|
112
|
+
private selectionListeners;
|
|
113
|
+
/** Cursor change listeners (for multi-cursor) */
|
|
114
|
+
private cursorListeners;
|
|
115
|
+
/** Undo grouping: timestamp of last history save */
|
|
116
|
+
private lastHistoryTimestamp;
|
|
117
|
+
/** Undo grouping: type of last change */
|
|
118
|
+
private lastHistoryType;
|
|
119
|
+
/** Undo grouping: time window in ms for grouping consecutive edits */
|
|
120
|
+
private readonly historyGroupTimeout;
|
|
121
|
+
/** Cached content string (invalidated on changes) */
|
|
122
|
+
private _contentCache;
|
|
123
|
+
/** Flag to suppress notifications during atomic operations (e.g., CRDT sync) */
|
|
124
|
+
private _suppressNotifications;
|
|
125
|
+
constructor(config?: EditorStateConfig);
|
|
126
|
+
/**
|
|
127
|
+
* Get all lines
|
|
128
|
+
*/
|
|
129
|
+
get lines(): readonly Line[];
|
|
130
|
+
/**
|
|
131
|
+
* Get line count
|
|
132
|
+
*/
|
|
133
|
+
get lineCount(): number;
|
|
134
|
+
/**
|
|
135
|
+
* Get a specific line
|
|
136
|
+
*/
|
|
137
|
+
getLine(lineNumber: number): Line | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Get document content as string (cached for performance)
|
|
140
|
+
*/
|
|
141
|
+
getContent(): string;
|
|
142
|
+
/**
|
|
143
|
+
* Invalidate content cache (call when lines change)
|
|
144
|
+
*/
|
|
145
|
+
private invalidateContentCache;
|
|
146
|
+
/**
|
|
147
|
+
* Set document content (replaces everything)
|
|
148
|
+
*/
|
|
149
|
+
setContent(content: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Get current language
|
|
152
|
+
*/
|
|
153
|
+
get language(): string;
|
|
154
|
+
/**
|
|
155
|
+
* Set language (triggers re-tokenization)
|
|
156
|
+
*/
|
|
157
|
+
setLanguage(language: string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Get current selection (primary cursor)
|
|
160
|
+
*/
|
|
161
|
+
get selection(): Selection;
|
|
162
|
+
/**
|
|
163
|
+
* Get cursor position (primary cursor head)
|
|
164
|
+
*/
|
|
165
|
+
get cursor(): Position;
|
|
166
|
+
/**
|
|
167
|
+
* Check if primary cursor has a selection
|
|
168
|
+
*/
|
|
169
|
+
get hasSelection(): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Get normalized selection (start before end) for primary cursor
|
|
172
|
+
*/
|
|
173
|
+
get normalizedSelection(): {
|
|
174
|
+
start: Position;
|
|
175
|
+
end: Position;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Set cursor position (clears selection, affects primary cursor only)
|
|
179
|
+
*/
|
|
180
|
+
setCursor(position: Position): void;
|
|
181
|
+
/**
|
|
182
|
+
* Set selection range (affects primary cursor only, clears secondary cursors)
|
|
183
|
+
*/
|
|
184
|
+
setSelection(anchor: Position, head: Position): void;
|
|
185
|
+
/**
|
|
186
|
+
* Extend selection to position (keeps anchor, primary cursor only)
|
|
187
|
+
*/
|
|
188
|
+
extendSelection(head: Position): void;
|
|
189
|
+
/**
|
|
190
|
+
* Select all
|
|
191
|
+
*/
|
|
192
|
+
selectAll(): void;
|
|
193
|
+
/**
|
|
194
|
+
* Get selected text (primary cursor)
|
|
195
|
+
*/
|
|
196
|
+
getSelectedText(): string;
|
|
197
|
+
/**
|
|
198
|
+
* Get selected text from all cursors
|
|
199
|
+
* Joins multiple selections with newlines (VS Code behavior)
|
|
200
|
+
*/
|
|
201
|
+
getSelectedTextFromAllCursors(): string;
|
|
202
|
+
/**
|
|
203
|
+
* Check if any cursor has a selection
|
|
204
|
+
*/
|
|
205
|
+
get hasAnySelection(): boolean;
|
|
206
|
+
/**
|
|
207
|
+
* Get text within a selection range
|
|
208
|
+
*/
|
|
209
|
+
getTextInSelection(selection: Selection): string;
|
|
210
|
+
/**
|
|
211
|
+
* Get cursor manager for advanced multi-cursor operations
|
|
212
|
+
*/
|
|
213
|
+
get cursorManager(): CursorManager;
|
|
214
|
+
/**
|
|
215
|
+
* Get all cursors
|
|
216
|
+
*/
|
|
217
|
+
get allCursors(): readonly Cursor[];
|
|
218
|
+
/**
|
|
219
|
+
* Get primary cursor
|
|
220
|
+
*/
|
|
221
|
+
get primaryCursor(): Cursor;
|
|
222
|
+
/**
|
|
223
|
+
* Check if there are multiple cursors
|
|
224
|
+
*/
|
|
225
|
+
get hasMultipleCursors(): boolean;
|
|
226
|
+
/**
|
|
227
|
+
* Add a new cursor at position
|
|
228
|
+
*/
|
|
229
|
+
addCursor(position: Position, makePrimary?: boolean): Cursor;
|
|
230
|
+
/**
|
|
231
|
+
* Add a cursor with selection
|
|
232
|
+
*/
|
|
233
|
+
addCursorWithSelection(anchor: Position, head: Position, makePrimary?: boolean): Cursor;
|
|
234
|
+
/**
|
|
235
|
+
* Add cursor above primary cursor
|
|
236
|
+
*/
|
|
237
|
+
addCursorAbove(): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Add cursor below primary cursor
|
|
240
|
+
*/
|
|
241
|
+
addCursorBelow(): boolean;
|
|
242
|
+
/**
|
|
243
|
+
* Remove last added secondary cursor
|
|
244
|
+
*/
|
|
245
|
+
removeLastCursor(): boolean;
|
|
246
|
+
/**
|
|
247
|
+
* Clear all secondary cursors
|
|
248
|
+
*/
|
|
249
|
+
clearSecondaryCursors(): void;
|
|
250
|
+
/**
|
|
251
|
+
* Insert text at all cursor positions
|
|
252
|
+
*/
|
|
253
|
+
insert(text: string): void;
|
|
254
|
+
/**
|
|
255
|
+
* Insert text at a specific position (internal, doesn't update cursor)
|
|
256
|
+
* @returns New position after insert
|
|
257
|
+
*/
|
|
258
|
+
private insertAtInternal;
|
|
259
|
+
/**
|
|
260
|
+
* Insert text at a specific position (public API - single cursor)
|
|
261
|
+
*/
|
|
262
|
+
insertAt(position: Position, text: string): void;
|
|
263
|
+
/**
|
|
264
|
+
* Delete the current selection (all cursors)
|
|
265
|
+
*/
|
|
266
|
+
deleteSelection(): void;
|
|
267
|
+
/**
|
|
268
|
+
* Delete a range of text (internal, doesn't update cursor)
|
|
269
|
+
*/
|
|
270
|
+
private deleteRangeInternal;
|
|
271
|
+
/**
|
|
272
|
+
* Delete a range of text (public API - single cursor)
|
|
273
|
+
*/
|
|
274
|
+
deleteRange(from: Position, to: Position): void;
|
|
275
|
+
/**
|
|
276
|
+
* Delete character before all cursors (backspace)
|
|
277
|
+
*/
|
|
278
|
+
deleteBackward(): void;
|
|
279
|
+
/**
|
|
280
|
+
* Delete character after all cursors (delete key)
|
|
281
|
+
*/
|
|
282
|
+
deleteForward(): void;
|
|
283
|
+
/**
|
|
284
|
+
* Insert a new line (enter key)
|
|
285
|
+
*/
|
|
286
|
+
insertNewline(): void;
|
|
287
|
+
/**
|
|
288
|
+
* Insert tab
|
|
289
|
+
*/
|
|
290
|
+
insertTab(): void;
|
|
291
|
+
/**
|
|
292
|
+
* Save current state to history with optional grouping
|
|
293
|
+
* @param changeType - Type of change for grouping consecutive edits
|
|
294
|
+
*/
|
|
295
|
+
private saveHistory;
|
|
296
|
+
/**
|
|
297
|
+
* Undo last change
|
|
298
|
+
*/
|
|
299
|
+
undo(): boolean;
|
|
300
|
+
/**
|
|
301
|
+
* Redo last undone change
|
|
302
|
+
*/
|
|
303
|
+
redo(): boolean;
|
|
304
|
+
/**
|
|
305
|
+
* Deep copy a selection to prevent reference issues in history
|
|
306
|
+
*/
|
|
307
|
+
private deepCopySelection;
|
|
308
|
+
/**
|
|
309
|
+
* Check if undo is available
|
|
310
|
+
*/
|
|
311
|
+
get canUndo(): boolean;
|
|
312
|
+
/**
|
|
313
|
+
* Check if redo is available
|
|
314
|
+
*/
|
|
315
|
+
get canRedo(): boolean;
|
|
316
|
+
/**
|
|
317
|
+
* Compare two tokenizer states for equality
|
|
318
|
+
*/
|
|
319
|
+
private tokenizerStatesEqual;
|
|
320
|
+
/**
|
|
321
|
+
* Re-tokenize a range of lines with early-exit optimization
|
|
322
|
+
*/
|
|
323
|
+
private retokenize;
|
|
324
|
+
/**
|
|
325
|
+
* Clamp a position to valid document bounds
|
|
326
|
+
*/
|
|
327
|
+
private clampPosition;
|
|
328
|
+
/**
|
|
329
|
+
* Get end position of document
|
|
330
|
+
*/
|
|
331
|
+
private endPosition;
|
|
332
|
+
/**
|
|
333
|
+
* Renumber lines from a starting point
|
|
334
|
+
*/
|
|
335
|
+
private renumberLines;
|
|
336
|
+
/**
|
|
337
|
+
* Helper to add a listener with overflow protection
|
|
338
|
+
* In development mode, throws an error to catch memory leaks early.
|
|
339
|
+
* In production, warns and evicts the oldest listener.
|
|
340
|
+
*/
|
|
341
|
+
private addListener;
|
|
342
|
+
/**
|
|
343
|
+
* Add change listener
|
|
344
|
+
*/
|
|
345
|
+
onContentChange(callback: (event: ChangeEvent) => void): () => void;
|
|
346
|
+
/**
|
|
347
|
+
* Add selection change listener
|
|
348
|
+
*/
|
|
349
|
+
onSelectionChange(callback: (selection: Selection) => void): () => void;
|
|
350
|
+
/**
|
|
351
|
+
* Add cursor change listener (for multi-cursor updates)
|
|
352
|
+
*/
|
|
353
|
+
onCursorChange(callback: (cursors: readonly Cursor[]) => void): () => void;
|
|
354
|
+
private emitChange;
|
|
355
|
+
private emitSelectionChange;
|
|
356
|
+
private emitCursorChange;
|
|
357
|
+
/**
|
|
358
|
+
* Run a function with notifications suppressed.
|
|
359
|
+
* Useful for atomic operations like CRDT sync where we want to
|
|
360
|
+
* update content and selection without triggering intermediate events.
|
|
361
|
+
*/
|
|
362
|
+
runWithoutNotifications<T>(fn: () => T): T;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Create editor state
|
|
366
|
+
*/
|
|
367
|
+
export declare function createEditorState(config?: EditorStateConfig): EditorState;
|