@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,417 @@
1
+ <script lang="ts">
2
+ /**
3
+ * AgentAvatar - Premium avatar with AI presence
4
+ *
5
+ * Visual hierarchy:
6
+ * - Status ring: Immediate state awareness
7
+ * - Progress ring: Work completion with gradient glow
8
+ * - Type badge: Agent role at a glance with premium AI treatment
9
+ * - Micro-animations: Every state change feels intentional
10
+ */
11
+
12
+ import type { Agent, AgentStatus } from '../../types';
13
+ import { Avatar } from '../core';
14
+
15
+ interface Props {
16
+ agent: Agent;
17
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
+ showStatus?: boolean;
19
+ showBadge?: boolean;
20
+ showProgress?: boolean;
21
+ /** Show phase label below avatar */
22
+ showPhase?: boolean;
23
+ class?: string;
24
+ }
25
+
26
+ let {
27
+ agent,
28
+ size = 'md',
29
+ showStatus = true,
30
+ showBadge = true,
31
+ showProgress = true,
32
+ showPhase = false,
33
+ class: className = ''
34
+ }: Props = $props();
35
+
36
+ const sizeMap = { xs: 20, sm: 24, md: 32, lg: 40, xl: 48 };
37
+ const badgeSizeMap = { xs: 10, sm: 12, md: 14, lg: 16, xl: 20 };
38
+ const strokeWidthMap = { xs: 1.5, sm: 2, md: 2, lg: 2.5, xl: 3 };
39
+
40
+ let avatarSize = $derived(sizeMap[size]);
41
+ let badgeSize = $derived(badgeSizeMap[size]);
42
+ let strokeWidth = $derived(strokeWidthMap[size]);
43
+
44
+ // Progress calculations
45
+ let progress = $derived(agent.currentTask?.progress.percentage ?? 0);
46
+ let radius = $derived(avatarSize / 2 + 2);
47
+ let circumference = $derived(2 * Math.PI * radius);
48
+ let strokeDashoffset = $derived(circumference - (progress / 100) * circumference);
49
+
50
+ // Phase display
51
+ let phaseLabel = $derived.by(() => {
52
+ if (!agent.currentTask?.progress.phase) return null;
53
+ const phase = agent.currentTask.progress.phase;
54
+ switch (phase) {
55
+ case 'planning': return 'Planning...';
56
+ case 'implementing': return 'Coding...';
57
+ case 'testing': return 'Testing...';
58
+ case 'complete': return 'Done';
59
+ default: return phase;
60
+ }
61
+ });
62
+
63
+ // Is this an AI agent?
64
+ let isAI = $derived(
65
+ agent.type === 'coder' ||
66
+ agent.type === 'reviewer' ||
67
+ agent.type === 'tester' ||
68
+ agent.type === 'architect'
69
+ );
70
+
71
+ // Unique ID for SVG gradients
72
+ let gradientId = $derived(`progress-gradient-${agent.id.slice(0, 8)}`);
73
+
74
+ function getStatusClass(status: AgentStatus): string {
75
+ return `agent-avatar__ring--${status}`;
76
+ }
77
+ </script>
78
+
79
+ <div
80
+ class="agent-avatar agent-avatar--{size} {className}"
81
+ class:agent-avatar--ai={isAI}
82
+ class:agent-avatar--busy={agent.status === 'busy'}
83
+ style="--avatar-size: {avatarSize}px"
84
+ >
85
+ <!-- SVG Definitions for gradients -->
86
+ <svg class="agent-avatar__defs" aria-hidden="true">
87
+ <defs>
88
+ <!-- AI Progress Gradient -->
89
+ <linearGradient id={gradientId} x1="0%" y1="0%" x2="100%" y2="100%">
90
+ <stop offset="0%" stop-color="var(--ide-agent-ai-primary)" />
91
+ <stop offset="50%" stop-color="var(--color-nocturnium-flame)" />
92
+ <stop offset="100%" stop-color="var(--ide-agent-ai-secondary)" />
93
+ </linearGradient>
94
+ <!-- Glow filter -->
95
+ <filter id="glow-{agent.id.slice(0, 8)}" x="-50%" y="-50%" width="200%" height="200%">
96
+ <feGaussianBlur stdDeviation="2" result="coloredBlur"/>
97
+ <feMerge>
98
+ <feMergeNode in="coloredBlur"/>
99
+ <feMergeNode in="SourceGraphic"/>
100
+ </feMerge>
101
+ </filter>
102
+ </defs>
103
+ </svg>
104
+
105
+ <!-- Base Avatar -->
106
+ <div class="agent-avatar__inner">
107
+ <Avatar name={agent.name} src={agent.avatar} {size} status={agent.status} />
108
+ </div>
109
+
110
+ <!-- Status Ring -->
111
+ {#if showStatus && agent.status !== 'offline'}
112
+ <div class="agent-avatar__ring {getStatusClass(agent.status)}" aria-hidden="true"></div>
113
+ {/if}
114
+
115
+ <!-- Progress Ring (for busy agents with tasks) -->
116
+ {#if showProgress && agent.status === 'busy' && agent.currentTask}
117
+ <svg
118
+ class="agent-avatar__progress"
119
+ viewBox="0 0 {avatarSize + 8} {avatarSize + 8}"
120
+ aria-label="Progress: {progress}%"
121
+ >
122
+ <!-- Background track -->
123
+ <circle
124
+ cx={(avatarSize + 8) / 2}
125
+ cy={(avatarSize + 8) / 2}
126
+ r={radius}
127
+ fill="none"
128
+ stroke="var(--ide-progress-track)"
129
+ stroke-width={strokeWidth}
130
+ opacity="0.3"
131
+ />
132
+ <!-- Progress arc with gradient -->
133
+ <circle
134
+ class="agent-avatar__progress-arc"
135
+ cx={(avatarSize + 8) / 2}
136
+ cy={(avatarSize + 8) / 2}
137
+ r={radius}
138
+ fill="none"
139
+ stroke="url(#{gradientId})"
140
+ stroke-width={strokeWidth}
141
+ stroke-linecap="round"
142
+ stroke-dasharray={circumference}
143
+ stroke-dashoffset={strokeDashoffset}
144
+ transform="rotate(-90 {(avatarSize + 8) / 2} {(avatarSize + 8) / 2})"
145
+ filter="url(#glow-{agent.id.slice(0, 8)})"
146
+ />
147
+ </svg>
148
+ {/if}
149
+
150
+ <!-- Type Badge with Premium AI Treatment -->
151
+ {#if showBadge}
152
+ <div
153
+ class="agent-avatar__badge"
154
+ class:agent-avatar__badge--ai={isAI}
155
+ style="--badge-size: {badgeSize}px"
156
+ title={agent.type}
157
+ aria-label="{agent.type} agent"
158
+ >
159
+ <div class="agent-avatar__badge-inner">
160
+ {#if agent.type === 'coder'}
161
+ <!-- Code brackets icon -->
162
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
163
+ <polyline points="16 18 22 12 16 6" />
164
+ <polyline points="8 6 2 12 8 18" />
165
+ </svg>
166
+ {:else if agent.type === 'reviewer'}
167
+ <!-- Checkmark icon -->
168
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
169
+ <polyline points="20 6 9 17 4 12" />
170
+ </svg>
171
+ {:else if agent.type === 'tester'}
172
+ <!-- Flask icon -->
173
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
174
+ <path d="M9 3h6v6l4 9H5l4-9V3z" />
175
+ <path d="M9 3h6" />
176
+ </svg>
177
+ {:else if agent.type === 'architect'}
178
+ <!-- Blueprint/compass icon -->
179
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
180
+ <circle cx="12" cy="12" r="10" />
181
+ <polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76" />
182
+ </svg>
183
+ {:else}
184
+ <!-- User icon -->
185
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
186
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />
187
+ <circle cx="12" cy="7" r="4" />
188
+ </svg>
189
+ {/if}
190
+ </div>
191
+ <!-- AI Glow effect -->
192
+ {#if isAI}
193
+ <div class="agent-avatar__badge-glow" aria-hidden="true"></div>
194
+ {/if}
195
+ </div>
196
+ {/if}
197
+
198
+ <!-- Phase Label -->
199
+ {#if showPhase && phaseLabel}
200
+ <div class="agent-avatar__phase">
201
+ {phaseLabel}
202
+ </div>
203
+ {/if}
204
+ </div>
205
+
206
+ <style>
207
+ .agent-avatar {
208
+ position: relative;
209
+ display: inline-flex;
210
+ flex-direction: column;
211
+ align-items: center;
212
+ gap: 4px;
213
+ }
214
+
215
+ .agent-avatar__defs {
216
+ position: absolute;
217
+ width: 0;
218
+ height: 0;
219
+ overflow: hidden;
220
+ }
221
+
222
+ .agent-avatar__inner {
223
+ position: relative;
224
+ transition: transform var(--ide-transition-bounce);
225
+ }
226
+
227
+ /* Subtle scale on busy */
228
+ .agent-avatar--busy .agent-avatar__inner {
229
+ animation: avatar-breathe 3s ease-in-out infinite;
230
+ }
231
+
232
+ @keyframes avatar-breathe {
233
+ 0%, 100% { transform: scale(1); }
234
+ 50% { transform: scale(1.02); }
235
+ }
236
+
237
+ /* Status Ring */
238
+ .agent-avatar__ring {
239
+ position: absolute;
240
+ inset: -3px;
241
+ border: 2px solid transparent;
242
+ border-radius: 50%;
243
+ pointer-events: none;
244
+ transition: all var(--ide-transition-normal);
245
+ }
246
+
247
+ .agent-avatar__ring--online {
248
+ border-color: var(--ide-agent-online);
249
+ box-shadow: 0 0 8px color-mix(in srgb, var(--ide-agent-online) 40%, transparent);
250
+ animation: ring-pulse 2.5s ease-in-out infinite;
251
+ }
252
+
253
+ .agent-avatar__ring--busy {
254
+ border-color: var(--ide-agent-busy);
255
+ border-style: dashed;
256
+ animation: ring-spin 4s linear infinite;
257
+ }
258
+
259
+ .agent-avatar__ring--error {
260
+ border-color: var(--ide-agent-error);
261
+ box-shadow: 0 0 8px color-mix(in srgb, var(--ide-agent-error) 50%, transparent);
262
+ animation: ring-error 0.6s ease-in-out infinite;
263
+ }
264
+
265
+ .agent-avatar__ring--stalled {
266
+ border-color: var(--ide-agent-stalled);
267
+ animation: ring-stalled 1.2s ease-in-out infinite;
268
+ }
269
+
270
+ .agent-avatar__ring--offline {
271
+ border-color: var(--ide-agent-offline);
272
+ border-style: dotted;
273
+ opacity: 0.5;
274
+ }
275
+
276
+ @keyframes ring-pulse {
277
+ 0%, 100% {
278
+ opacity: 1;
279
+ box-shadow: 0 0 8px color-mix(in srgb, var(--ide-agent-online) 40%, transparent);
280
+ }
281
+ 50% {
282
+ opacity: 0.7;
283
+ box-shadow: 0 0 16px color-mix(in srgb, var(--ide-agent-online) 60%, transparent);
284
+ }
285
+ }
286
+
287
+ @keyframes ring-spin {
288
+ from { transform: rotate(0deg); }
289
+ to { transform: rotate(360deg); }
290
+ }
291
+
292
+ @keyframes ring-error {
293
+ 0%, 100% { opacity: 1; transform: scale(1); }
294
+ 50% { opacity: 0.6; transform: scale(1.05); }
295
+ }
296
+
297
+ @keyframes ring-stalled {
298
+ 0%, 100% { opacity: 0.8; }
299
+ 50% { opacity: 0.3; }
300
+ }
301
+
302
+ /* Progress Ring */
303
+ .agent-avatar__progress {
304
+ position: absolute;
305
+ inset: -4px;
306
+ pointer-events: none;
307
+ }
308
+
309
+ .agent-avatar__progress-arc {
310
+ transition: stroke-dashoffset 0.3s ease-out;
311
+ }
312
+
313
+ /* Type Badge */
314
+ .agent-avatar__badge {
315
+ position: absolute;
316
+ bottom: -2px;
317
+ right: -2px;
318
+ width: var(--badge-size);
319
+ height: var(--badge-size);
320
+ border-radius: 50%;
321
+ display: flex;
322
+ align-items: center;
323
+ justify-content: center;
324
+ background: var(--ide-bg-secondary);
325
+ border: 1.5px solid var(--ide-border);
326
+ color: var(--ide-text-secondary);
327
+ transition: all var(--ide-transition-normal);
328
+ z-index: 2;
329
+ }
330
+
331
+ .agent-avatar__badge-inner {
332
+ width: 60%;
333
+ height: 60%;
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ position: relative;
338
+ z-index: 1;
339
+ }
340
+
341
+ .agent-avatar__badge-inner svg {
342
+ width: 100%;
343
+ height: 100%;
344
+ }
345
+
346
+ /* Premium AI Badge */
347
+ .agent-avatar__badge--ai {
348
+ background: linear-gradient(
349
+ 135deg,
350
+ var(--ide-agent-ai-primary) 0%,
351
+ var(--color-nocturnium-flame) 50%,
352
+ var(--ide-agent-ai-secondary) 100%
353
+ );
354
+ background-size: 200% 200%;
355
+ border: none;
356
+ color: white;
357
+ box-shadow:
358
+ 0 2px 8px color-mix(in srgb, var(--ide-agent-ai-primary) 50%, transparent),
359
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
360
+ animation: badge-shimmer 3s ease-in-out infinite;
361
+ }
362
+
363
+ @keyframes badge-shimmer {
364
+ 0%, 100% { background-position: 0% 50%; }
365
+ 50% { background-position: 100% 50%; }
366
+ }
367
+
368
+ /* Badge Glow */
369
+ .agent-avatar__badge-glow {
370
+ position: absolute;
371
+ inset: -3px;
372
+ border-radius: 50%;
373
+ background: radial-gradient(
374
+ circle,
375
+ color-mix(in srgb, var(--ide-agent-ai-primary) 30%, transparent) 0%,
376
+ transparent 70%
377
+ );
378
+ animation: glow-pulse 2s ease-in-out infinite;
379
+ pointer-events: none;
380
+ }
381
+
382
+ @keyframes glow-pulse {
383
+ 0%, 100% { opacity: 0.5; transform: scale(1); }
384
+ 50% { opacity: 1; transform: scale(1.3); }
385
+ }
386
+
387
+ /* Phase Label */
388
+ .agent-avatar__phase {
389
+ font-size: 10px;
390
+ font-weight: 500;
391
+ color: var(--ide-text-secondary);
392
+ white-space: nowrap;
393
+ animation: phase-fade-in 0.3s ease-out;
394
+ }
395
+
396
+ @keyframes phase-fade-in {
397
+ from { opacity: 0; transform: translateY(-4px); }
398
+ to { opacity: 1; transform: translateY(0); }
399
+ }
400
+
401
+ /* Size-specific adjustments */
402
+ .agent-avatar--xs .agent-avatar__ring { inset: -2px; border-width: 1.5px; }
403
+ .agent-avatar--sm .agent-avatar__ring { inset: -2px; border-width: 1.5px; }
404
+ .agent-avatar--lg .agent-avatar__ring { inset: -4px; border-width: 2.5px; }
405
+ .agent-avatar--xl .agent-avatar__ring { inset: -4px; border-width: 3px; }
406
+
407
+ /* Hover state */
408
+ .agent-avatar:hover .agent-avatar__inner {
409
+ transform: scale(1.05);
410
+ }
411
+
412
+ .agent-avatar:hover .agent-avatar__badge--ai {
413
+ box-shadow:
414
+ 0 4px 12px color-mix(in srgb, var(--ide-agent-ai-primary) 60%, transparent),
415
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
416
+ }
417
+ </style>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AgentAvatar - Premium avatar with AI presence
3
+ *
4
+ * Visual hierarchy:
5
+ * - Status ring: Immediate state awareness
6
+ * - Progress ring: Work completion with gradient glow
7
+ * - Type badge: Agent role at a glance with premium AI treatment
8
+ * - Micro-animations: Every state change feels intentional
9
+ */
10
+ import type { Agent } from '../../types';
11
+ interface Props {
12
+ agent: Agent;
13
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
14
+ showStatus?: boolean;
15
+ showBadge?: boolean;
16
+ showProgress?: boolean;
17
+ /** Show phase label below avatar */
18
+ showPhase?: boolean;
19
+ class?: string;
20
+ }
21
+ declare const AgentAvatar: import("svelte").Component<Props, {}, "">;
22
+ type AgentAvatar = ReturnType<typeof AgentAvatar>;
23
+ export default AgentAvatar;
@@ -0,0 +1,224 @@
1
+ <script lang="ts">
2
+ /**
3
+ * AgentCursor - Remote cursor indicator for collaborative editing
4
+ *
5
+ * Shows:
6
+ * - Colored cursor line
7
+ * - Agent name label
8
+ * - Selection highlight (if any)
9
+ * - Typing indicator animation
10
+ */
11
+
12
+ import type { Agent, AgentCursor as AgentCursorType, CursorPosition, CursorSelection } from '../../types';
13
+
14
+ interface Props {
15
+ /** The agent this cursor belongs to */
16
+ agent: Agent;
17
+ /** Cursor position */
18
+ position: CursorPosition;
19
+ /** Selection range (optional) */
20
+ selection?: CursorSelection;
21
+ /** Whether agent is currently typing */
22
+ isTyping?: boolean;
23
+ /** Character width in pixels */
24
+ charWidth: number;
25
+ /** Line height in pixels */
26
+ lineHeight: number;
27
+ /** Scroll offset X */
28
+ scrollX?: number;
29
+ /** Scroll offset Y */
30
+ scrollY?: number;
31
+ /** Gutter width offset */
32
+ gutterWidth?: number;
33
+ /** Additional CSS class */
34
+ class?: string;
35
+ }
36
+
37
+ let {
38
+ agent,
39
+ position,
40
+ selection,
41
+ isTyping = false,
42
+ charWidth,
43
+ lineHeight,
44
+ scrollX = 0,
45
+ scrollY = 0,
46
+ gutterWidth = 50,
47
+ class: className = ''
48
+ }: Props = $props();
49
+
50
+ // Calculate pixel positions
51
+ let cursorX = $derived(gutterWidth + position.column * charWidth - scrollX);
52
+ let cursorY = $derived((position.line - 1) * lineHeight - scrollY);
53
+
54
+ // Get agent color or use default
55
+ let cursorColor = $derived(agent.color ?? 'var(--ide-agent-ai-primary)');
56
+
57
+ // Calculate selection dimensions if present
58
+ let hasSelection = $derived(
59
+ selection && (selection.start.line !== selection.end.line || selection.start.column !== selection.end.column)
60
+ );
61
+
62
+ function getSelectionStyle() {
63
+ if (!selection) return '';
64
+
65
+ const startLine = Math.min(selection.start.line, selection.end.line);
66
+ const endLine = Math.max(selection.start.line, selection.end.line);
67
+ const startCol = selection.start.line < selection.end.line ? selection.start.column :
68
+ (selection.start.line === selection.end.line ? Math.min(selection.start.column, selection.end.column) : selection.end.column);
69
+ const endCol = selection.start.line < selection.end.line ? selection.end.column :
70
+ (selection.start.line === selection.end.line ? Math.max(selection.start.column, selection.end.column) : selection.start.column);
71
+
72
+ // For single line selection
73
+ if (startLine === endLine) {
74
+ return `
75
+ top: ${(startLine - 1) * lineHeight - scrollY}px;
76
+ left: ${gutterWidth + startCol * charWidth - scrollX}px;
77
+ width: ${(endCol - startCol) * charWidth}px;
78
+ height: ${lineHeight}px;
79
+ `;
80
+ }
81
+
82
+ // Multi-line selections need multiple elements (simplified for now)
83
+ return `
84
+ top: ${(startLine - 1) * lineHeight - scrollY}px;
85
+ left: ${gutterWidth - scrollX}px;
86
+ width: calc(100% - ${gutterWidth}px);
87
+ height: ${(endLine - startLine + 1) * lineHeight}px;
88
+ `;
89
+ }
90
+ </script>
91
+
92
+ <div
93
+ class="agent-cursor {className}"
94
+ class:agent-cursor--typing={isTyping}
95
+ style="
96
+ --cursor-color: {cursorColor};
97
+ --cursor-x: {cursorX}px;
98
+ --cursor-y: {cursorY}px;
99
+ --line-height: {lineHeight}px;
100
+ "
101
+ aria-hidden="true"
102
+ >
103
+ <!-- Selection highlight -->
104
+ {#if hasSelection}
105
+ <div class="agent-cursor__selection" style={getSelectionStyle()}></div>
106
+ {/if}
107
+
108
+ <!-- Cursor line -->
109
+ <div class="agent-cursor__line"></div>
110
+
111
+ <!-- Label -->
112
+ <div class="agent-cursor__label">
113
+ {#if agent.type !== 'coordinator'}
114
+ <span class="agent-cursor__badge">AI</span>
115
+ {/if}
116
+ <span class="agent-cursor__name">{agent.name}</span>
117
+ {#if isTyping}
118
+ <span class="agent-cursor__typing">
119
+ <span></span>
120
+ <span></span>
121
+ <span></span>
122
+ </span>
123
+ {/if}
124
+ </div>
125
+ </div>
126
+
127
+ <style>
128
+ .agent-cursor {
129
+ position: absolute;
130
+ top: var(--cursor-y);
131
+ left: var(--cursor-x);
132
+ pointer-events: none;
133
+ z-index: 50;
134
+ animation: ide-cursor-appear 0.2s ease-out;
135
+ }
136
+
137
+ .agent-cursor__line {
138
+ position: absolute;
139
+ top: 0;
140
+ left: 0;
141
+ width: 2px;
142
+ height: var(--line-height);
143
+ background: var(--cursor-color);
144
+ box-shadow: 0 0 8px color-mix(in srgb, var(--cursor-color) 50%, transparent);
145
+ }
146
+
147
+ .agent-cursor__line::before {
148
+ content: '';
149
+ position: absolute;
150
+ top: -4px;
151
+ left: -1px;
152
+ width: 4px;
153
+ height: 4px;
154
+ background: var(--cursor-color);
155
+ border-radius: 50%;
156
+ }
157
+
158
+ .agent-cursor__selection {
159
+ position: absolute;
160
+ background: color-mix(in srgb, var(--cursor-color) 20%, transparent);
161
+ pointer-events: none;
162
+ }
163
+
164
+ .agent-cursor__label {
165
+ position: absolute;
166
+ top: -20px;
167
+ left: 0;
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 4px;
171
+ padding: 2px 6px;
172
+ background: var(--cursor-color);
173
+ border-radius: var(--ide-radius-sm);
174
+ font-size: 10px;
175
+ font-weight: 500;
176
+ color: white;
177
+ white-space: nowrap;
178
+ transform-origin: bottom left;
179
+ animation: ide-slide-down 0.2s ease-out;
180
+ }
181
+
182
+ .agent-cursor__badge {
183
+ padding: 0 3px;
184
+ background: rgba(255, 255, 255, 0.2);
185
+ border-radius: 2px;
186
+ font-size: 8px;
187
+ font-weight: 700;
188
+ letter-spacing: 0.5px;
189
+ }
190
+
191
+ .agent-cursor__name {
192
+ max-width: 100px;
193
+ overflow: hidden;
194
+ text-overflow: ellipsis;
195
+ }
196
+
197
+ .agent-cursor__typing {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 2px;
201
+ margin-left: 4px;
202
+ }
203
+
204
+ .agent-cursor__typing span {
205
+ width: 3px;
206
+ height: 3px;
207
+ background: rgba(255, 255, 255, 0.8);
208
+ border-radius: 50%;
209
+ animation: ide-typing-pulse 0.6s infinite;
210
+ }
211
+
212
+ .agent-cursor__typing span:nth-child(2) {
213
+ animation-delay: 0.1s;
214
+ }
215
+
216
+ .agent-cursor__typing span:nth-child(3) {
217
+ animation-delay: 0.2s;
218
+ }
219
+
220
+ /* Typing state animations */
221
+ .agent-cursor--typing .agent-cursor__line {
222
+ animation: ide-pulse 0.5s infinite;
223
+ }
224
+ </style>
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AgentCursor - Remote cursor indicator for collaborative editing
3
+ *
4
+ * Shows:
5
+ * - Colored cursor line
6
+ * - Agent name label
7
+ * - Selection highlight (if any)
8
+ * - Typing indicator animation
9
+ */
10
+ import type { Agent, CursorPosition, CursorSelection } from '../../types';
11
+ interface Props {
12
+ /** The agent this cursor belongs to */
13
+ agent: Agent;
14
+ /** Cursor position */
15
+ position: CursorPosition;
16
+ /** Selection range (optional) */
17
+ selection?: CursorSelection;
18
+ /** Whether agent is currently typing */
19
+ isTyping?: boolean;
20
+ /** Character width in pixels */
21
+ charWidth: number;
22
+ /** Line height in pixels */
23
+ lineHeight: number;
24
+ /** Scroll offset X */
25
+ scrollX?: number;
26
+ /** Scroll offset Y */
27
+ scrollY?: number;
28
+ /** Gutter width offset */
29
+ gutterWidth?: number;
30
+ /** Additional CSS class */
31
+ class?: string;
32
+ }
33
+ declare const AgentCursor: import("svelte").Component<Props, {}, "">;
34
+ type AgentCursor = ReturnType<typeof AgentCursor>;
35
+ export default AgentCursor;