@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.
Files changed (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/components/agents/AgentActivityPanel.svelte +565 -0
  4. package/dist/components/agents/AgentActivityPanel.svelte.d.ts +24 -0
  5. package/dist/components/agents/AgentAvatar.svelte +417 -0
  6. package/dist/components/agents/AgentAvatar.svelte.d.ts +23 -0
  7. package/dist/components/agents/AgentCursor.svelte +224 -0
  8. package/dist/components/agents/AgentCursor.svelte.d.ts +35 -0
  9. package/dist/components/agents/AgentPresenceBar.svelte +261 -0
  10. package/dist/components/agents/AgentPresenceBar.svelte.d.ts +20 -0
  11. package/dist/components/agents/index.d.ts +4 -0
  12. package/dist/components/agents/index.js +5 -0
  13. package/dist/components/ai/AIConversationList.svelte +524 -0
  14. package/dist/components/ai/AIConversationList.svelte.d.ts +17 -0
  15. package/dist/components/ai/AIEditPreview.svelte +132 -0
  16. package/dist/components/ai/AIEditPreview.svelte.d.ts +8 -0
  17. package/dist/components/ai/AIInlineEdit.svelte +155 -0
  18. package/dist/components/ai/AIInlineEdit.svelte.d.ts +10 -0
  19. package/dist/components/ai/AIMessage.svelte +239 -0
  20. package/dist/components/ai/AIMessage.svelte.d.ts +13 -0
  21. package/dist/components/ai/AIMessageActions.svelte +176 -0
  22. package/dist/components/ai/AIMessageActions.svelte.d.ts +12 -0
  23. package/dist/components/ai/AIMessageContent.svelte +355 -0
  24. package/dist/components/ai/AIMessageContent.svelte.d.ts +7 -0
  25. package/dist/components/ai/AIPanel.svelte +561 -0
  26. package/dist/components/ai/AIPanel.svelte.d.ts +7 -0
  27. package/dist/components/ai/AISuggestionWidget.svelte +132 -0
  28. package/dist/components/ai/AISuggestionWidget.svelte.d.ts +10 -0
  29. package/dist/components/ai/AIToolCallDisplay.svelte +317 -0
  30. package/dist/components/ai/AIToolCallDisplay.svelte.d.ts +12 -0
  31. package/dist/components/ai/index.d.ts +9 -0
  32. package/dist/components/ai/index.js +10 -0
  33. package/dist/components/core/Avatar.svelte +110 -0
  34. package/dist/components/core/Avatar.svelte.d.ts +12 -0
  35. package/dist/components/core/Badge.svelte +98 -0
  36. package/dist/components/core/Badge.svelte.d.ts +11 -0
  37. package/dist/components/core/Button.svelte +175 -0
  38. package/dist/components/core/Button.svelte.d.ts +18 -0
  39. package/dist/components/core/ConnectionStatus.svelte +294 -0
  40. package/dist/components/core/ConnectionStatus.svelte.d.ts +20 -0
  41. package/dist/components/core/ContextMenu.svelte +176 -0
  42. package/dist/components/core/ContextMenu.svelte.d.ts +19 -0
  43. package/dist/components/core/ErrorBoundary.svelte +277 -0
  44. package/dist/components/core/ErrorBoundary.svelte.d.ts +23 -0
  45. package/dist/components/core/Icon.svelte +107 -0
  46. package/dist/components/core/Icon.svelte.d.ts +8 -0
  47. package/dist/components/core/Input.svelte +138 -0
  48. package/dist/components/core/Input.svelte.d.ts +20 -0
  49. package/dist/components/core/Kbd.svelte +34 -0
  50. package/dist/components/core/Kbd.svelte.d.ts +7 -0
  51. package/dist/components/core/ResizeHandle.svelte +200 -0
  52. package/dist/components/core/ResizeHandle.svelte.d.ts +23 -0
  53. package/dist/components/core/Spinner.svelte +35 -0
  54. package/dist/components/core/Spinner.svelte.d.ts +7 -0
  55. package/dist/components/core/Textarea.svelte +112 -0
  56. package/dist/components/core/Textarea.svelte.d.ts +18 -0
  57. package/dist/components/core/Tooltip.svelte +103 -0
  58. package/dist/components/core/Tooltip.svelte.d.ts +11 -0
  59. package/dist/components/core/index.d.ts +13 -0
  60. package/dist/components/core/index.js +14 -0
  61. package/dist/components/editor/AIFocusLayer.svelte +430 -0
  62. package/dist/components/editor/AIFocusLayer.svelte.d.ts +32 -0
  63. package/dist/components/editor/Breadcrumbs.svelte +435 -0
  64. package/dist/components/editor/Breadcrumbs.svelte.d.ts +33 -0
  65. package/dist/components/editor/BreakpointLayer.svelte +642 -0
  66. package/dist/components/editor/BreakpointLayer.svelte.d.ts +20 -0
  67. package/dist/components/editor/CognitiveLoadMeter.svelte +324 -0
  68. package/dist/components/editor/CognitiveLoadMeter.svelte.d.ts +18 -0
  69. package/dist/components/editor/CollaborativeEditor.svelte +218 -0
  70. package/dist/components/editor/CollaborativeEditor.svelte.d.ts +32 -0
  71. package/dist/components/editor/CommandPalette.svelte +434 -0
  72. package/dist/components/editor/CommandPalette.svelte.d.ts +11 -0
  73. package/dist/components/editor/ComplexityLayer.svelte +293 -0
  74. package/dist/components/editor/ComplexityLayer.svelte.d.ts +23 -0
  75. package/dist/components/editor/ConflictZoneLayer.svelte +441 -0
  76. package/dist/components/editor/ConflictZoneLayer.svelte.d.ts +25 -0
  77. package/dist/components/editor/ContextLens.svelte +262 -0
  78. package/dist/components/editor/ContextLens.svelte.d.ts +27 -0
  79. package/dist/components/editor/CustomEditor.svelte +1242 -0
  80. package/dist/components/editor/CustomEditor.svelte.d.ts +37 -0
  81. package/dist/components/editor/DebugConsole.svelte +646 -0
  82. package/dist/components/editor/DebugConsole.svelte.d.ts +41 -0
  83. package/dist/components/editor/EchoCursorLayer.svelte +363 -0
  84. package/dist/components/editor/EchoCursorLayer.svelte.d.ts +24 -0
  85. package/dist/components/editor/Editor.svelte +61 -0
  86. package/dist/components/editor/Editor.svelte.d.ts +22 -0
  87. package/dist/components/editor/EditorGutter.svelte +119 -0
  88. package/dist/components/editor/EditorGutter.svelte.d.ts +19 -0
  89. package/dist/components/editor/EditorLines.svelte +182 -0
  90. package/dist/components/editor/EditorLines.svelte.d.ts +43 -0
  91. package/dist/components/editor/EditorPane.svelte +134 -0
  92. package/dist/components/editor/EditorPane.svelte.d.ts +9 -0
  93. package/dist/components/editor/EditorSelections.svelte +186 -0
  94. package/dist/components/editor/EditorSelections.svelte.d.ts +25 -0
  95. package/dist/components/editor/EditorTabs.svelte +170 -0
  96. package/dist/components/editor/EditorTabs.svelte.d.ts +12 -0
  97. package/dist/components/editor/FileExplorer.svelte +811 -0
  98. package/dist/components/editor/FileExplorer.svelte.d.ts +67 -0
  99. package/dist/components/editor/FileIcon.svelte +110 -0
  100. package/dist/components/editor/FileIcon.svelte.d.ts +10 -0
  101. package/dist/components/editor/FindReplace.svelte +448 -0
  102. package/dist/components/editor/FindReplace.svelte.d.ts +40 -0
  103. package/dist/components/editor/GhostBracketLayer.svelte +391 -0
  104. package/dist/components/editor/GhostBracketLayer.svelte.d.ts +24 -0
  105. package/dist/components/editor/GitBlameLayer.svelte +436 -0
  106. package/dist/components/editor/GitBlameLayer.svelte.d.ts +18 -0
  107. package/dist/components/editor/InlineDiagnosticsLayer.svelte +540 -0
  108. package/dist/components/editor/InlineDiagnosticsLayer.svelte.d.ts +35 -0
  109. package/dist/components/editor/InlineDiffLayer.svelte +337 -0
  110. package/dist/components/editor/InlineDiffLayer.svelte.d.ts +31 -0
  111. package/dist/components/editor/MinimalEditor.svelte +75 -0
  112. package/dist/components/editor/MinimalEditor.svelte.d.ts +6 -0
  113. package/dist/components/editor/MinimalEditor2.svelte +84 -0
  114. package/dist/components/editor/MinimalEditor2.svelte.d.ts +6 -0
  115. package/dist/components/editor/Minimap.svelte +327 -0
  116. package/dist/components/editor/Minimap.svelte.d.ts +34 -0
  117. package/dist/components/editor/PluginPreviewSandbox.svelte +793 -0
  118. package/dist/components/editor/PluginPreviewSandbox.svelte.d.ts +49 -0
  119. package/dist/components/editor/ProblemsPanel.svelte +628 -0
  120. package/dist/components/editor/ProblemsPanel.svelte.d.ts +25 -0
  121. package/dist/components/editor/QuickActionsMenu.svelte +403 -0
  122. package/dist/components/editor/QuickActionsMenu.svelte.d.ts +18 -0
  123. package/dist/components/editor/SnippetPalette.svelte +530 -0
  124. package/dist/components/editor/SnippetPalette.svelte.d.ts +16 -0
  125. package/dist/components/editor/StructureMap.svelte +431 -0
  126. package/dist/components/editor/StructureMap.svelte.d.ts +37 -0
  127. package/dist/components/editor/SymbolOutline.svelte +722 -0
  128. package/dist/components/editor/SymbolOutline.svelte.d.ts +44 -0
  129. package/dist/components/editor/TimelineScrubber.svelte +470 -0
  130. package/dist/components/editor/TimelineScrubber.svelte.d.ts +40 -0
  131. package/dist/components/editor/TokenRenderer.svelte +69 -0
  132. package/dist/components/editor/TokenRenderer.svelte.d.ts +15 -0
  133. package/dist/components/editor/constants.d.ts +32 -0
  134. package/dist/components/editor/constants.js +36 -0
  135. package/dist/components/editor/core/ai-awareness.d.ts +176 -0
  136. package/dist/components/editor/core/ai-awareness.js +210 -0
  137. package/dist/components/editor/core/bracket-healer.d.ts +189 -0
  138. package/dist/components/editor/core/bracket-healer.js +406 -0
  139. package/dist/components/editor/core/breakpoints.d.ts +203 -0
  140. package/dist/components/editor/core/breakpoints.js +414 -0
  141. package/dist/components/editor/core/commands.d.ts +108 -0
  142. package/dist/components/editor/core/commands.js +246 -0
  143. package/dist/components/editor/core/complexity-analyzer.d.ts +123 -0
  144. package/dist/components/editor/core/complexity-analyzer.js +376 -0
  145. package/dist/components/editor/core/conflict-predictor.d.ts +135 -0
  146. package/dist/components/editor/core/conflict-predictor.js +316 -0
  147. package/dist/components/editor/core/crdt-binding.d.ts +118 -0
  148. package/dist/components/editor/core/crdt-binding.js +286 -0
  149. package/dist/components/editor/core/diagnostics.d.ts +210 -0
  150. package/dist/components/editor/core/diagnostics.js +335 -0
  151. package/dist/components/editor/core/echo-cursor.d.ts +201 -0
  152. package/dist/components/editor/core/echo-cursor.js +267 -0
  153. package/dist/components/editor/core/folding.d.ts +124 -0
  154. package/dist/components/editor/core/folding.js +672 -0
  155. package/dist/components/editor/core/ghost-pair.d.ts +122 -0
  156. package/dist/components/editor/core/ghost-pair.js +221 -0
  157. package/dist/components/editor/core/git-blame.d.ts +170 -0
  158. package/dist/components/editor/core/git-blame.js +324 -0
  159. package/dist/components/editor/core/index.d.ts +26 -0
  160. package/dist/components/editor/core/index.js +24 -0
  161. package/dist/components/editor/core/keybindings.d.ts +79 -0
  162. package/dist/components/editor/core/keybindings.js +357 -0
  163. package/dist/components/editor/core/multi-cursor.d.ts +196 -0
  164. package/dist/components/editor/core/multi-cursor.js +521 -0
  165. package/dist/components/editor/core/navigation.d.ts +107 -0
  166. package/dist/components/editor/core/navigation.js +408 -0
  167. package/dist/components/editor/core/quick-actions.d.ts +189 -0
  168. package/dist/components/editor/core/quick-actions.js +427 -0
  169. package/dist/components/editor/core/search.d.ts +88 -0
  170. package/dist/components/editor/core/search.js +192 -0
  171. package/dist/components/editor/core/semantic-analyzer.d.ts +77 -0
  172. package/dist/components/editor/core/semantic-analyzer.js +424 -0
  173. package/dist/components/editor/core/snippet-manager.d.ts +202 -0
  174. package/dist/components/editor/core/snippet-manager.js +565 -0
  175. package/dist/components/editor/core/state.d.ts +367 -0
  176. package/dist/components/editor/core/state.js +900 -0
  177. package/dist/components/editor/core/timeline.d.ts +204 -0
  178. package/dist/components/editor/core/timeline.js +349 -0
  179. package/dist/components/editor/editor-find.d.ts +56 -0
  180. package/dist/components/editor/editor-find.js +148 -0
  181. package/dist/components/editor/editor-input.d.ts +77 -0
  182. package/dist/components/editor/editor-input.js +445 -0
  183. package/dist/components/editor/editor-multicursor.d.ts +21 -0
  184. package/dist/components/editor/editor-multicursor.js +196 -0
  185. package/dist/components/editor/editor-scroll.d.ts +14 -0
  186. package/dist/components/editor/editor-scroll.js +34 -0
  187. package/dist/components/editor/index.d.ts +15 -0
  188. package/dist/components/editor/index.js +21 -0
  189. package/dist/components/editor/languages.d.ts +62 -0
  190. package/dist/components/editor/languages.js +285 -0
  191. package/dist/components/editor/theme.d.ts +88 -0
  192. package/dist/components/editor/theme.js +139 -0
  193. package/dist/components/editor/tokenizer/base.d.ts +40 -0
  194. package/dist/components/editor/tokenizer/base.js +203 -0
  195. package/dist/components/editor/tokenizer/index.d.ts +56 -0
  196. package/dist/components/editor/tokenizer/index.js +215 -0
  197. package/dist/components/editor/tokenizer/languages/css.d.ts +17 -0
  198. package/dist/components/editor/tokenizer/languages/css.js +194 -0
  199. package/dist/components/editor/tokenizer/languages/go.d.ts +17 -0
  200. package/dist/components/editor/tokenizer/languages/go.js +220 -0
  201. package/dist/components/editor/tokenizer/languages/html.d.ts +24 -0
  202. package/dist/components/editor/tokenizer/languages/html.js +145 -0
  203. package/dist/components/editor/tokenizer/languages/javascript.d.ts +56 -0
  204. package/dist/components/editor/tokenizer/languages/javascript.js +452 -0
  205. package/dist/components/editor/tokenizer/languages/json.d.ts +12 -0
  206. package/dist/components/editor/tokenizer/languages/json.js +91 -0
  207. package/dist/components/editor/tokenizer/languages/markdown.d.ts +16 -0
  208. package/dist/components/editor/tokenizer/languages/markdown.js +156 -0
  209. package/dist/components/editor/tokenizer/languages/python.d.ts +20 -0
  210. package/dist/components/editor/tokenizer/languages/python.js +227 -0
  211. package/dist/components/editor/tokenizer/languages/svelte.d.ts +40 -0
  212. package/dist/components/editor/tokenizer/languages/svelte.js +326 -0
  213. package/dist/components/editor/tokenizer/types.d.ts +86 -0
  214. package/dist/components/editor/tokenizer/types.js +4 -0
  215. package/dist/components/layout/IDELayout.svelte +274 -0
  216. package/dist/components/layout/IDELayout.svelte.d.ts +29 -0
  217. package/dist/components/layout/StatusBar.svelte +511 -0
  218. package/dist/components/layout/StatusBar.svelte.d.ts +47 -0
  219. package/dist/components/layout/index.d.ts +2 -0
  220. package/dist/components/layout/index.js +3 -0
  221. package/dist/components/lsp/AutocompleteWidget.svelte +364 -0
  222. package/dist/components/lsp/AutocompleteWidget.svelte.d.ts +33 -0
  223. package/dist/components/lsp/DiagnosticMarker.svelte +166 -0
  224. package/dist/components/lsp/DiagnosticMarker.svelte.d.ts +19 -0
  225. package/dist/components/lsp/DiagnosticsPanel.svelte +388 -0
  226. package/dist/components/lsp/DiagnosticsPanel.svelte.d.ts +21 -0
  227. package/dist/components/lsp/HoverTooltip.svelte +274 -0
  228. package/dist/components/lsp/HoverTooltip.svelte.d.ts +24 -0
  229. package/dist/components/lsp/LSPEditor.svelte +486 -0
  230. package/dist/components/lsp/LSPEditor.svelte.d.ts +39 -0
  231. package/dist/components/lsp/SignatureHelpWidget.svelte +216 -0
  232. package/dist/components/lsp/SignatureHelpWidget.svelte.d.ts +22 -0
  233. package/dist/components/lsp/index.d.ts +6 -0
  234. package/dist/components/lsp/index.js +7 -0
  235. package/dist/components/plugins/PluginCard.svelte +153 -0
  236. package/dist/components/plugins/PluginCard.svelte.d.ts +19 -0
  237. package/dist/components/plugins/PluginPanel.svelte +280 -0
  238. package/dist/components/plugins/PluginPanel.svelte.d.ts +8 -0
  239. package/dist/components/plugins/PluginProposalForm.svelte +250 -0
  240. package/dist/components/plugins/PluginProposalForm.svelte.d.ts +6 -0
  241. package/dist/components/plugins/PluginStatusBadge.svelte +14 -0
  242. package/dist/components/plugins/PluginStatusBadge.svelte.d.ts +8 -0
  243. package/dist/components/plugins/index.d.ts +4 -0
  244. package/dist/components/plugins/index.js +5 -0
  245. package/dist/components/vfs/LockConflictDialog.svelte +705 -0
  246. package/dist/components/vfs/LockConflictDialog.svelte.d.ts +21 -0
  247. package/dist/components/vfs/LockIndicator.svelte +194 -0
  248. package/dist/components/vfs/LockIndicator.svelte.d.ts +29 -0
  249. package/dist/components/vfs/LockOverlay.svelte +344 -0
  250. package/dist/components/vfs/LockOverlay.svelte.d.ts +17 -0
  251. package/dist/components/vfs/VersionConflictDialog.svelte +549 -0
  252. package/dist/components/vfs/VersionConflictDialog.svelte.d.ts +24 -0
  253. package/dist/components/vfs/index.d.ts +4 -0
  254. package/dist/components/vfs/index.js +5 -0
  255. package/dist/crdt/awareness.d.ts +42 -0
  256. package/dist/crdt/awareness.js +109 -0
  257. package/dist/crdt/document.d.ts +101 -0
  258. package/dist/crdt/document.js +187 -0
  259. package/dist/crdt/index.d.ts +9 -0
  260. package/dist/crdt/index.js +8 -0
  261. package/dist/crdt/provider.d.ts +85 -0
  262. package/dist/crdt/provider.js +150 -0
  263. package/dist/crdt/types.d.ts +61 -0
  264. package/dist/crdt/types.js +4 -0
  265. package/dist/crdt/undo.d.ts +34 -0
  266. package/dist/crdt/undo.js +70 -0
  267. package/dist/index.d.ts +277 -0
  268. package/dist/index.js +280 -0
  269. package/dist/plugins/index.d.ts +103 -0
  270. package/dist/plugins/index.js +153 -0
  271. package/dist/services/error-handling.d.ts +95 -0
  272. package/dist/services/error-handling.js +413 -0
  273. package/dist/services/ide-integration.d.ts +83 -0
  274. package/dist/services/ide-integration.js +367 -0
  275. package/dist/services/lsp-client.d.ts +69 -0
  276. package/dist/services/lsp-client.js +667 -0
  277. package/dist/services/mock-ai.d.ts +37 -0
  278. package/dist/services/mock-ai.js +318 -0
  279. package/dist/services/optimistic.d.ts +141 -0
  280. package/dist/services/optimistic.js +367 -0
  281. package/dist/services/vfs-client.d.ts +81 -0
  282. package/dist/services/vfs-client.js +348 -0
  283. package/dist/stores/agents.svelte.d.ts +85 -0
  284. package/dist/stores/agents.svelte.js +459 -0
  285. package/dist/stores/ai-persistence.svelte.d.ts +76 -0
  286. package/dist/stores/ai-persistence.svelte.js +334 -0
  287. package/dist/stores/ai.svelte.d.ts +140 -0
  288. package/dist/stores/ai.svelte.js +383 -0
  289. package/dist/stores/collaboration.svelte.d.ts +164 -0
  290. package/dist/stores/collaboration.svelte.js +334 -0
  291. package/dist/stores/editor.svelte.d.ts +131 -0
  292. package/dist/stores/editor.svelte.js +250 -0
  293. package/dist/stores/index.d.ts +10 -0
  294. package/dist/stores/index.js +29 -0
  295. package/dist/stores/layout.svelte.d.ts +171 -0
  296. package/dist/stores/layout.svelte.js +351 -0
  297. package/dist/stores/plugin.svelte.d.ts +121 -0
  298. package/dist/stores/plugin.svelte.js +410 -0
  299. package/dist/stores/vfs.svelte.d.ts +123 -0
  300. package/dist/stores/vfs.svelte.js +680 -0
  301. package/dist/styles/theme.css +623 -0
  302. package/dist/types/agents.d.ts +127 -0
  303. package/dist/types/agents.js +5 -0
  304. package/dist/types/ai.d.ts +137 -0
  305. package/dist/types/ai.js +4 -0
  306. package/dist/types/crdt.d.ts +222 -0
  307. package/dist/types/crdt.js +5 -0
  308. package/dist/types/editor.d.ts +52 -0
  309. package/dist/types/editor.js +18 -0
  310. package/dist/types/events.d.ts +133 -0
  311. package/dist/types/events.js +4 -0
  312. package/dist/types/filesystem.d.ts +77 -0
  313. package/dist/types/filesystem.js +4 -0
  314. package/dist/types/index.d.ts +9 -0
  315. package/dist/types/index.js +12 -0
  316. package/dist/types/lsp.d.ts +691 -0
  317. package/dist/types/lsp.js +108 -0
  318. package/dist/types/plugin.d.ts +239 -0
  319. package/dist/types/plugin.js +5 -0
  320. package/dist/types/vfs.d.ts +191 -0
  321. package/dist/types/vfs.js +18 -0
  322. package/dist/utils/format.d.ts +55 -0
  323. package/dist/utils/format.js +152 -0
  324. package/dist/utils/index.d.ts +3 -0
  325. package/dist/utils/index.js +4 -0
  326. package/dist/utils/keybindings.d.ts +33 -0
  327. package/dist/utils/keybindings.js +171 -0
  328. package/dist/utils/language.d.ts +27 -0
  329. package/dist/utils/language.js +222 -0
  330. 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;