@agi-cli/web-sdk 0.1.61

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 (266) hide show
  1. package/README.md +187 -0
  2. package/dist/components/chat/ChatInput.d.ts +10 -0
  3. package/dist/components/chat/ChatInput.d.ts.map +1 -0
  4. package/dist/components/chat/ChatInput.js +53 -0
  5. package/dist/components/chat/ChatInput.js.map +1 -0
  6. package/dist/components/chat/ChatInputContainer.d.ts +9 -0
  7. package/dist/components/chat/ChatInputContainer.d.ts.map +1 -0
  8. package/dist/components/chat/ChatInputContainer.js +52 -0
  9. package/dist/components/chat/ChatInputContainer.js.map +1 -0
  10. package/dist/components/chat/ConfigModal.d.ts +13 -0
  11. package/dist/components/chat/ConfigModal.d.ts.map +1 -0
  12. package/dist/components/chat/ConfigModal.js +51 -0
  13. package/dist/components/chat/ConfigModal.js.map +1 -0
  14. package/dist/components/chat/ConfigSelector.d.ts +11 -0
  15. package/dist/components/chat/ConfigSelector.d.ts.map +1 -0
  16. package/dist/components/chat/ConfigSelector.js +47 -0
  17. package/dist/components/chat/ConfigSelector.js.map +1 -0
  18. package/dist/components/chat/StopButton.d.ts +8 -0
  19. package/dist/components/chat/StopButton.d.ts.map +1 -0
  20. package/dist/components/chat/StopButton.js +25 -0
  21. package/dist/components/chat/StopButton.js.map +1 -0
  22. package/dist/components/git/GitCommitModal.d.ts +2 -0
  23. package/dist/components/git/GitCommitModal.d.ts.map +1 -0
  24. package/dist/components/git/GitCommitModal.js +44 -0
  25. package/dist/components/git/GitCommitModal.js.map +1 -0
  26. package/dist/components/git/GitDiffPanel.d.ts +2 -0
  27. package/dist/components/git/GitDiffPanel.d.ts.map +1 -0
  28. package/dist/components/git/GitDiffPanel.js +69 -0
  29. package/dist/components/git/GitDiffPanel.js.map +1 -0
  30. package/dist/components/git/GitDiffViewer.d.ts +7 -0
  31. package/dist/components/git/GitDiffViewer.d.ts.map +1 -0
  32. package/dist/components/git/GitDiffViewer.js +136 -0
  33. package/dist/components/git/GitDiffViewer.js.map +1 -0
  34. package/dist/components/git/GitFileItem.d.ts +9 -0
  35. package/dist/components/git/GitFileItem.d.ts.map +1 -0
  36. package/dist/components/git/GitFileItem.js +90 -0
  37. package/dist/components/git/GitFileItem.js.map +1 -0
  38. package/dist/components/git/GitFileList.d.ts +7 -0
  39. package/dist/components/git/GitFileList.d.ts.map +1 -0
  40. package/dist/components/git/GitFileList.js +24 -0
  41. package/dist/components/git/GitFileList.js.map +1 -0
  42. package/dist/components/git/GitSidebar.d.ts +2 -0
  43. package/dist/components/git/GitSidebar.d.ts.map +1 -0
  44. package/dist/components/git/GitSidebar.js +38 -0
  45. package/dist/components/git/GitSidebar.js.map +1 -0
  46. package/dist/components/git/GitSidebarToggle.d.ts +2 -0
  47. package/dist/components/git/GitSidebarToggle.d.ts.map +1 -0
  48. package/dist/components/git/GitSidebarToggle.js +18 -0
  49. package/dist/components/git/GitSidebarToggle.js.map +1 -0
  50. package/dist/components/index.d.ts +28 -0
  51. package/dist/components/index.d.ts.map +1 -0
  52. package/dist/components/index.js +34 -0
  53. package/dist/components/index.js.map +1 -0
  54. package/dist/components/messages/AssistantMessageGroup.d.ts +10 -0
  55. package/dist/components/messages/AssistantMessageGroup.d.ts.map +1 -0
  56. package/dist/components/messages/AssistantMessageGroup.js +85 -0
  57. package/dist/components/messages/AssistantMessageGroup.js.map +1 -0
  58. package/dist/components/messages/MessagePartItem.d.ts +11 -0
  59. package/dist/components/messages/MessagePartItem.d.ts.map +1 -0
  60. package/dist/components/messages/MessagePartItem.js +290 -0
  61. package/dist/components/messages/MessagePartItem.js.map +1 -0
  62. package/dist/components/messages/MessageThread.d.ts +9 -0
  63. package/dist/components/messages/MessageThread.d.ts.map +1 -0
  64. package/dist/components/messages/MessageThread.js +88 -0
  65. package/dist/components/messages/MessageThread.js.map +1 -0
  66. package/dist/components/messages/MessageThreadContainer.d.ts +6 -0
  67. package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -0
  68. package/dist/components/messages/MessageThreadContainer.js +18 -0
  69. package/dist/components/messages/MessageThreadContainer.js.map +1 -0
  70. package/dist/components/messages/UserMessageGroup.d.ts +8 -0
  71. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -0
  72. package/dist/components/messages/UserMessageGroup.js +43 -0
  73. package/dist/components/messages/UserMessageGroup.js.map +1 -0
  74. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts +3 -0
  75. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts.map +1 -0
  76. package/dist/components/messages/renderers/ApplyPatchRenderer.js +36 -0
  77. package/dist/components/messages/renderers/ApplyPatchRenderer.js.map +1 -0
  78. package/dist/components/messages/renderers/BashRenderer.d.ts +3 -0
  79. package/dist/components/messages/renderers/BashRenderer.d.ts.map +1 -0
  80. package/dist/components/messages/renderers/BashRenderer.js +48 -0
  81. package/dist/components/messages/renderers/BashRenderer.js.map +1 -0
  82. package/dist/components/messages/renderers/DebugRenderer.d.ts +5 -0
  83. package/dist/components/messages/renderers/DebugRenderer.d.ts.map +1 -0
  84. package/dist/components/messages/renderers/DebugRenderer.js +5 -0
  85. package/dist/components/messages/renderers/DebugRenderer.js.map +1 -0
  86. package/dist/components/messages/renderers/DiffView.d.ts +6 -0
  87. package/dist/components/messages/renderers/DiffView.d.ts.map +1 -0
  88. package/dist/components/messages/renderers/DiffView.js +186 -0
  89. package/dist/components/messages/renderers/DiffView.js.map +1 -0
  90. package/dist/components/messages/renderers/EditRenderer.d.ts +3 -0
  91. package/dist/components/messages/renderers/EditRenderer.d.ts.map +1 -0
  92. package/dist/components/messages/renderers/EditRenderer.js +15 -0
  93. package/dist/components/messages/renderers/EditRenderer.js.map +1 -0
  94. package/dist/components/messages/renderers/ErrorRenderer.d.ts +8 -0
  95. package/dist/components/messages/renderers/ErrorRenderer.d.ts.map +1 -0
  96. package/dist/components/messages/renderers/ErrorRenderer.js +118 -0
  97. package/dist/components/messages/renderers/ErrorRenderer.js.map +1 -0
  98. package/dist/components/messages/renderers/FinishRenderer.d.ts +3 -0
  99. package/dist/components/messages/renderers/FinishRenderer.d.ts.map +1 -0
  100. package/dist/components/messages/renderers/FinishRenderer.js +7 -0
  101. package/dist/components/messages/renderers/FinishRenderer.js.map +1 -0
  102. package/dist/components/messages/renderers/GenericRenderer.d.ts +3 -0
  103. package/dist/components/messages/renderers/GenericRenderer.d.ts.map +1 -0
  104. package/dist/components/messages/renderers/GenericRenderer.js +42 -0
  105. package/dist/components/messages/renderers/GenericRenderer.js.map +1 -0
  106. package/dist/components/messages/renderers/GitCommitRenderer.d.ts +3 -0
  107. package/dist/components/messages/renderers/GitCommitRenderer.d.ts.map +1 -0
  108. package/dist/components/messages/renderers/GitCommitRenderer.js +18 -0
  109. package/dist/components/messages/renderers/GitCommitRenderer.js.map +1 -0
  110. package/dist/components/messages/renderers/GitDiffRenderer.d.ts +3 -0
  111. package/dist/components/messages/renderers/GitDiffRenderer.d.ts.map +1 -0
  112. package/dist/components/messages/renderers/GitDiffRenderer.js +25 -0
  113. package/dist/components/messages/renderers/GitDiffRenderer.js.map +1 -0
  114. package/dist/components/messages/renderers/GitStatusRenderer.d.ts +3 -0
  115. package/dist/components/messages/renderers/GitStatusRenderer.d.ts.map +1 -0
  116. package/dist/components/messages/renderers/GitStatusRenderer.js +56 -0
  117. package/dist/components/messages/renderers/GitStatusRenderer.js.map +1 -0
  118. package/dist/components/messages/renderers/ListRenderer.d.ts +3 -0
  119. package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -0
  120. package/dist/components/messages/renderers/ListRenderer.js +14 -0
  121. package/dist/components/messages/renderers/ListRenderer.js.map +1 -0
  122. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts +3 -0
  123. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts.map +1 -0
  124. package/dist/components/messages/renderers/ProgressUpdateRenderer.js +9 -0
  125. package/dist/components/messages/renderers/ProgressUpdateRenderer.js.map +1 -0
  126. package/dist/components/messages/renderers/ReadRenderer.d.ts +3 -0
  127. package/dist/components/messages/renderers/ReadRenderer.d.ts.map +1 -0
  128. package/dist/components/messages/renderers/ReadRenderer.js +59 -0
  129. package/dist/components/messages/renderers/ReadRenderer.js.map +1 -0
  130. package/dist/components/messages/renderers/SearchRenderer.d.ts +3 -0
  131. package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -0
  132. package/dist/components/messages/renderers/SearchRenderer.js +62 -0
  133. package/dist/components/messages/renderers/SearchRenderer.js.map +1 -0
  134. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts +12 -0
  135. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts.map +1 -0
  136. package/dist/components/messages/renderers/ToolErrorDisplay.js +10 -0
  137. package/dist/components/messages/renderers/ToolErrorDisplay.js.map +1 -0
  138. package/dist/components/messages/renderers/TreeRenderer.d.ts +3 -0
  139. package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -0
  140. package/dist/components/messages/renderers/TreeRenderer.js +20 -0
  141. package/dist/components/messages/renderers/TreeRenderer.js.map +1 -0
  142. package/dist/components/messages/renderers/UpdatePlanRenderer.d.ts +3 -0
  143. package/dist/components/messages/renderers/UpdatePlanRenderer.d.ts.map +1 -0
  144. package/dist/components/messages/renderers/UpdatePlanRenderer.js +13 -0
  145. package/dist/components/messages/renderers/UpdatePlanRenderer.js.map +1 -0
  146. package/dist/components/messages/renderers/WebSearchRenderer.d.ts +3 -0
  147. package/dist/components/messages/renderers/WebSearchRenderer.d.ts.map +1 -0
  148. package/dist/components/messages/renderers/WebSearchRenderer.js +35 -0
  149. package/dist/components/messages/renderers/WebSearchRenderer.js.map +1 -0
  150. package/dist/components/messages/renderers/WriteRenderer.d.ts +3 -0
  151. package/dist/components/messages/renderers/WriteRenderer.d.ts.map +1 -0
  152. package/dist/components/messages/renderers/WriteRenderer.js +18 -0
  153. package/dist/components/messages/renderers/WriteRenderer.js.map +1 -0
  154. package/dist/components/messages/renderers/index.d.ts +10 -0
  155. package/dist/components/messages/renderers/index.d.ts.map +1 -0
  156. package/dist/components/messages/renderers/index.js +72 -0
  157. package/dist/components/messages/renderers/index.js.map +1 -0
  158. package/dist/components/messages/renderers/types.d.ts +77 -0
  159. package/dist/components/messages/renderers/types.d.ts.map +1 -0
  160. package/dist/components/messages/renderers/types.js +2 -0
  161. package/dist/components/messages/renderers/types.js.map +1 -0
  162. package/dist/components/messages/renderers/utils.d.ts +11 -0
  163. package/dist/components/messages/renderers/utils.d.ts.map +1 -0
  164. package/dist/components/messages/renderers/utils.js +18 -0
  165. package/dist/components/messages/renderers/utils.js.map +1 -0
  166. package/dist/components/sessions/LeanHeader.d.ts +9 -0
  167. package/dist/components/sessions/LeanHeader.d.ts.map +1 -0
  168. package/dist/components/sessions/LeanHeader.js +28 -0
  169. package/dist/components/sessions/LeanHeader.js.map +1 -0
  170. package/dist/components/sessions/SessionHeader.d.ts +7 -0
  171. package/dist/components/sessions/SessionHeader.d.ts.map +1 -0
  172. package/dist/components/sessions/SessionHeader.js +49 -0
  173. package/dist/components/sessions/SessionHeader.js.map +1 -0
  174. package/dist/components/sessions/SessionItem.d.ts +9 -0
  175. package/dist/components/sessions/SessionItem.d.ts.map +1 -0
  176. package/dist/components/sessions/SessionItem.js +27 -0
  177. package/dist/components/sessions/SessionItem.js.map +1 -0
  178. package/dist/components/sessions/SessionListContainer.d.ts +7 -0
  179. package/dist/components/sessions/SessionListContainer.d.ts.map +1 -0
  180. package/dist/components/sessions/SessionListContainer.js +32 -0
  181. package/dist/components/sessions/SessionListContainer.js.map +1 -0
  182. package/dist/components/ui/Button.d.ts +8 -0
  183. package/dist/components/ui/Button.d.ts.map +1 -0
  184. package/dist/components/ui/Button.js +19 -0
  185. package/dist/components/ui/Button.js.map +1 -0
  186. package/dist/components/ui/Card.d.ts +6 -0
  187. package/dist/components/ui/Card.d.ts.map +1 -0
  188. package/dist/components/ui/Card.js +7 -0
  189. package/dist/components/ui/Card.js.map +1 -0
  190. package/dist/components/ui/Input.d.ts +6 -0
  191. package/dist/components/ui/Input.d.ts.map +1 -0
  192. package/dist/components/ui/Input.js +7 -0
  193. package/dist/components/ui/Input.js.map +1 -0
  194. package/dist/components/ui/Textarea.d.ts +6 -0
  195. package/dist/components/ui/Textarea.d.ts.map +1 -0
  196. package/dist/components/ui/Textarea.js +7 -0
  197. package/dist/components/ui/Textarea.js.map +1 -0
  198. package/dist/hooks/index.d.ts +8 -0
  199. package/dist/hooks/index.d.ts.map +1 -0
  200. package/dist/hooks/index.js +9 -0
  201. package/dist/hooks/index.js.map +1 -0
  202. package/dist/hooks/useConfig.d.ts +18 -0
  203. package/dist/hooks/useConfig.d.ts.map +1 -0
  204. package/dist/hooks/useConfig.js +16 -0
  205. package/dist/hooks/useConfig.js.map +1 -0
  206. package/dist/hooks/useGit.d.ts +8 -0
  207. package/dist/hooks/useGit.d.ts.map +1 -0
  208. package/dist/hooks/useGit.js +71 -0
  209. package/dist/hooks/useGit.js.map +1 -0
  210. package/dist/hooks/useMessages.d.ts +4 -0
  211. package/dist/hooks/useMessages.d.ts.map +1 -0
  212. package/dist/hooks/useMessages.js +25 -0
  213. package/dist/hooks/useMessages.js.map +1 -0
  214. package/dist/hooks/useSessionStream.d.ts +2 -0
  215. package/dist/hooks/useSessionStream.d.ts.map +1 -0
  216. package/dist/hooks/useSessionStream.js +332 -0
  217. package/dist/hooks/useSessionStream.js.map +1 -0
  218. package/dist/hooks/useSessions.d.ts +4 -0
  219. package/dist/hooks/useSessions.d.ts.map +1 -0
  220. package/dist/hooks/useSessions.js +19 -0
  221. package/dist/hooks/useSessions.js.map +1 -0
  222. package/dist/hooks/useTheme.d.ts +8 -0
  223. package/dist/hooks/useTheme.d.ts.map +1 -0
  224. package/dist/hooks/useTheme.js +40 -0
  225. package/dist/hooks/useTheme.js.map +1 -0
  226. package/dist/hooks/useWorkingDirectory.d.ts +2 -0
  227. package/dist/hooks/useWorkingDirectory.d.ts.map +1 -0
  228. package/dist/hooks/useWorkingDirectory.js +34 -0
  229. package/dist/hooks/useWorkingDirectory.js.map +1 -0
  230. package/dist/index.d.ts +6 -0
  231. package/dist/index.d.ts.map +1 -0
  232. package/dist/index.js +7 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/lib/api-client.d.ts +44 -0
  235. package/dist/lib/api-client.d.ts.map +1 -0
  236. package/dist/lib/api-client.js +195 -0
  237. package/dist/lib/api-client.js.map +1 -0
  238. package/dist/lib/config.d.ts +5 -0
  239. package/dist/lib/config.d.ts.map +1 -0
  240. package/dist/lib/config.js +22 -0
  241. package/dist/lib/config.js.map +1 -0
  242. package/dist/lib/index.d.ts +4 -0
  243. package/dist/lib/index.d.ts.map +1 -0
  244. package/dist/lib/index.js +5 -0
  245. package/dist/lib/index.js.map +1 -0
  246. package/dist/lib/sse-client.d.ts +13 -0
  247. package/dist/lib/sse-client.d.ts.map +1 -0
  248. package/dist/lib/sse-client.js +111 -0
  249. package/dist/lib/sse-client.js.map +1 -0
  250. package/dist/stores/gitStore.d.ts +20 -0
  251. package/dist/stores/gitStore.d.ts.map +1 -0
  252. package/dist/stores/gitStore.js +35 -0
  253. package/dist/stores/gitStore.js.map +1 -0
  254. package/dist/stores/index.d.ts +3 -0
  255. package/dist/stores/index.d.ts.map +1 -0
  256. package/dist/stores/index.js +3 -0
  257. package/dist/stores/index.js.map +1 -0
  258. package/dist/stores/sidebarStore.d.ts +26 -0
  259. package/dist/stores/sidebarStore.d.ts.map +1 -0
  260. package/dist/stores/sidebarStore.js +16 -0
  261. package/dist/stores/sidebarStore.js.map +1 -0
  262. package/dist/types/api.d.ts +128 -0
  263. package/dist/types/api.d.ts.map +1 -0
  264. package/dist/types/api.js +2 -0
  265. package/dist/types/api.js.map +1 -0
  266. package/package.json +90 -0
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronDown, ChevronRight, ExternalLink } from 'lucide-react';
3
+ import { useState } from 'react';
4
+ import { formatDuration } from './utils';
5
+ export function WebSearchRenderer({ contentJson, toolDurationMs, isExpanded, onToggle, }) {
6
+ const result = contentJson.result || {};
7
+ const [expandedContent, setExpandedContent] = useState(new Set());
8
+ const toggleContent = (index) => {
9
+ setExpandedContent((prev) => {
10
+ const next = new Set(prev);
11
+ if (next.has(index)) {
12
+ next.delete(index);
13
+ }
14
+ else {
15
+ next.add(index);
16
+ }
17
+ return next;
18
+ });
19
+ };
20
+ // Check if it's a search query or URL fetch
21
+ const isSearch = 'results' in result;
22
+ const searchResults = result.results || [];
23
+ const webContent = result;
24
+ if (isSearch) {
25
+ const timeStr = formatDuration(toolDurationMs);
26
+ return (_jsxs("div", { className: "text-xs", children: [_jsxs("button", { type: "button", onClick: onToggle, className: "flex items-center gap-2 text-purple-700 dark:text-purple-300 transition-colors hover:text-purple-600 dark:hover:text-purple-200", children: [isExpanded ? (_jsx(ChevronDown, { className: "h-3 w-3" })) : (_jsx(ChevronRight, { className: "h-3 w-3" })), _jsx("span", { className: "font-medium", children: "web search" }), _jsx("span", { className: "text-muted-foreground/70", children: "\u00B7" }), _jsxs("span", { className: "text-foreground/70", children: [searchResults.length, ' ', searchResults.length === 1 ? 'result' : 'results'] }), _jsxs("span", { className: "text-muted-foreground/80", children: ["\u00B7 ", timeStr] })] }), isExpanded && (_jsx("div", { className: "mt-2 ml-5 space-y-2 max-h-96 overflow-y-auto", children: searchResults.map((item, i) => (_jsxs("div", { className: "bg-card/60 border border-border rounded-lg p-3 space-y-1", children: [_jsxs("a", { href: item.url, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-1 text-blue-600 dark:text-blue-400 hover:underline font-medium", children: [item.title, _jsx(ExternalLink, { className: "h-3 w-3" })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: item.snippet }), _jsx("p", { className: "text-xs text-muted-foreground/70 truncate", children: item.url })] }, `${item.url}-${i}`))) }))] }));
27
+ }
28
+ // URL fetch rendering
29
+ const timeStr = formatDuration(toolDurationMs);
30
+ const displayUrl = webContent.url && webContent.url.length > 60
31
+ ? `${webContent.url.slice(0, 60)}...`
32
+ : webContent.url;
33
+ return (_jsxs("div", { className: "text-xs", children: [_jsxs("button", { type: "button", onClick: () => toggleContent(0), className: "flex items-center gap-2 text-purple-700 dark:text-purple-300 transition-colors hover:text-purple-600 dark:hover:text-purple-200 w-full text-left", children: [expandedContent.has(0) ? (_jsx(ChevronDown, { className: "h-3 w-3 flex-shrink-0" })) : (_jsx(ChevronRight, { className: "h-3 w-3 flex-shrink-0" })), _jsx("span", { className: "font-medium flex-shrink-0", children: "web fetch" }), _jsx("span", { className: "text-muted-foreground/70 flex-shrink-0", children: "\u00B7" }), _jsx("a", { href: webContent.url, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 dark:text-blue-400 hover:underline truncate flex-1 min-w-0", onClick: (e) => e.stopPropagation(), children: displayUrl }), _jsxs("span", { className: "text-muted-foreground/80 flex-shrink-0", children: ["\u00B7 ", timeStr] })] }), expandedContent.has(0) && webContent.content && (_jsx("div", { className: "mt-2 ml-5 bg-card/60 border border-border rounded-lg p-3 max-h-96 overflow-y-auto", children: _jsx("div", { className: "text-xs text-foreground/80 whitespace-pre-wrap break-words", children: webContent.content }) }))] }));
34
+ }
35
+ //# sourceMappingURL=WebSearchRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSearchRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/WebSearchRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RendererProps } from './types';
2
+ export declare function WriteRenderer({ contentJson, toolDurationMs, isExpanded, onToggle, }: RendererProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=WriteRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WriteRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/WriteRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,wBAAgB,aAAa,CAAC,EAC7B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACR,EAAE,aAAa,2CA0Cf"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronRight } from 'lucide-react';
3
+ import { DiffView } from './DiffView';
4
+ import { formatDuration } from './utils';
5
+ export function WriteRenderer({ contentJson, toolDurationMs, isExpanded, onToggle, }) {
6
+ const result = contentJson.result || {};
7
+ const artifact = contentJson.artifact;
8
+ const path = String(result.path || '');
9
+ const bytes = Number(result.bytes || 0);
10
+ const patch = artifact?.patch ? String(artifact.patch) : '';
11
+ const timeStr = formatDuration(toolDurationMs);
12
+ return (_jsxs("div", { className: "text-xs", children: [_jsxs("button", { type: "button", onClick: onToggle, className: "flex items-center gap-2 text-emerald-700 dark:text-emerald-300 transition-colors hover:text-emerald-600 dark:hover:text-emerald-200 min-w-0 w-full", children: [_jsx(ChevronRight, { className: `h-3 w-3 flex-shrink-0 transition-transform ${isExpanded ? 'rotate-90' : ''}` }), _jsx("span", { className: "font-medium flex-shrink-0", children: "write" }), _jsx("span", { className: "text-muted-foreground/70 flex-shrink-0", children: "\u00B7" }), _jsx("span", { className: "text-foreground/70 min-w-0 flex-shrink overflow-hidden", style: {
13
+ direction: 'rtl',
14
+ textAlign: 'left',
15
+ unicodeBidi: 'plaintext',
16
+ }, title: path, children: path }), _jsxs("span", { className: "text-muted-foreground/80 whitespace-nowrap flex-shrink-0", children: ["\u00B7 ", bytes, " bytes \u00B7 ", timeStr] })] }), isExpanded && patch && (_jsx("div", { className: "mt-2 ml-5", children: _jsx(DiffView, { patch: patch }) }))] }));
17
+ }
18
+ //# sourceMappingURL=WriteRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WriteRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/WriteRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,EAC7B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACO;IACf,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAE/C,OAAO,CACN,eAAK,SAAS,EAAC,SAAS,aACvB,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,oJAAoJ,aAE9J,KAAC,YAAY,IACZ,SAAS,EAAE,8CAA8C,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,GACvF,EACF,eAAM,SAAS,EAAC,2BAA2B,sBAAa,EACxD,eAAM,SAAS,EAAC,wCAAwC,uBAAS,EACjE,eACC,SAAS,EAAC,wDAAwD,EAClE,KAAK,EAAE;4BACN,SAAS,EAAE,KAAK;4BAChB,SAAS,EAAE,MAAM;4BACjB,WAAW,EAAE,WAAW;yBACxB,EACD,KAAK,EAAE,IAAI,YAEV,IAAI,GACC,EACP,gBAAM,SAAS,EAAC,0DAA0D,wBACtE,KAAK,oBAAW,OAAO,IACpB,IACC,EACR,UAAU,IAAI,KAAK,IAAI,CACvB,cAAK,SAAS,EAAC,WAAW,YACzB,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,GAAI,GACrB,CACN,IACI,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ContentJson } from './types';
2
+ interface ToolResultRendererProps {
3
+ toolName: string;
4
+ contentJson: ContentJson;
5
+ toolDurationMs?: number | null;
6
+ debug?: boolean;
7
+ }
8
+ export declare function ToolResultRenderer({ toolName, contentJson, toolDurationMs, debug, }: ToolResultRendererProps): import("react/jsx-runtime").JSX.Element;
9
+ export * from './types';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAoB3C,UAAU,uBAAuB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,EAClC,QAAQ,EACR,WAAW,EACX,cAAc,EACd,KAAK,GACL,EAAE,uBAAuB,2CAoDzB;AAED,cAAc,SAAS,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { ReadRenderer } from './ReadRenderer';
4
+ import { WriteRenderer } from './WriteRenderer';
5
+ import { EditRenderer } from './EditRenderer';
6
+ import { BashRenderer } from './BashRenderer';
7
+ import { GitStatusRenderer } from './GitStatusRenderer';
8
+ import { GitDiffRenderer } from './GitDiffRenderer';
9
+ import { GitCommitRenderer } from './GitCommitRenderer';
10
+ import { ApplyPatchRenderer } from './ApplyPatchRenderer';
11
+ import { ListRenderer } from './ListRenderer';
12
+ import { TreeRenderer } from './TreeRenderer';
13
+ import { SearchRenderer } from './SearchRenderer';
14
+ import { FinishRenderer } from './FinishRenderer';
15
+ import { GenericRenderer } from './GenericRenderer';
16
+ import { DebugRenderer } from './DebugRenderer';
17
+ import { UpdatePlanRenderer } from './UpdatePlanRenderer';
18
+ import { ProgressUpdateRenderer } from './ProgressUpdateRenderer';
19
+ import { WebSearchRenderer } from './WebSearchRenderer';
20
+ import { ErrorRenderer } from './ErrorRenderer';
21
+ export function ToolResultRenderer({ toolName, contentJson, toolDurationMs, debug, }) {
22
+ const [isExpanded, setIsExpanded] = useState(false);
23
+ const props = {
24
+ contentJson,
25
+ toolDurationMs: toolDurationMs ?? undefined,
26
+ isExpanded,
27
+ onToggle: () => setIsExpanded(!isExpanded),
28
+ };
29
+ if (debug) {
30
+ return _jsx(DebugRenderer, { ...props, toolName: toolName });
31
+ }
32
+ switch (toolName) {
33
+ case 'read':
34
+ return _jsx(ReadRenderer, { ...props });
35
+ case 'write':
36
+ return _jsx(WriteRenderer, { ...props });
37
+ case 'edit':
38
+ return _jsx(EditRenderer, { ...props });
39
+ case 'bash':
40
+ return _jsx(BashRenderer, { ...props });
41
+ case 'git_status':
42
+ return _jsx(GitStatusRenderer, { ...props });
43
+ case 'git_diff':
44
+ return _jsx(GitDiffRenderer, { ...props });
45
+ case 'git_commit':
46
+ return _jsx(GitCommitRenderer, { ...props });
47
+ case 'apply_patch':
48
+ return _jsx(ApplyPatchRenderer, { ...props });
49
+ case 'ls':
50
+ return _jsx(ListRenderer, { ...props });
51
+ case 'tree':
52
+ return _jsx(TreeRenderer, { ...props });
53
+ case 'ripgrep':
54
+ case 'grep':
55
+ case 'glob':
56
+ return _jsx(SearchRenderer, { ...props });
57
+ case 'websearch':
58
+ return _jsx(WebSearchRenderer, { ...props });
59
+ case 'finish':
60
+ return _jsx(FinishRenderer, { ...props });
61
+ case 'update_plan':
62
+ return _jsx(UpdatePlanRenderer, { ...props });
63
+ case 'progress_update':
64
+ return _jsx(ProgressUpdateRenderer, { ...props });
65
+ case 'error':
66
+ return _jsx(ErrorRenderer, { ...props });
67
+ default:
68
+ return _jsx(GenericRenderer, { ...props, toolName: toolName });
69
+ }
70
+ }
71
+ export * from './types';
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ export interface ToolCallArgs {
2
+ text?: string;
3
+ message?: string;
4
+ amend?: boolean;
5
+ signoff?: boolean;
6
+ pct?: number;
7
+ stage?: string;
8
+ all?: boolean;
9
+ cmd?: string;
10
+ cwd?: string;
11
+ command?: string;
12
+ script?: string;
13
+ input?: string;
14
+ }
15
+ export interface ToolResultData {
16
+ done?: boolean;
17
+ text?: string;
18
+ result?: string | Record<string, unknown>;
19
+ ok?: boolean;
20
+ message?: string;
21
+ pct?: number;
22
+ stage?: string;
23
+ all?: boolean;
24
+ patch?: string;
25
+ staged?: number;
26
+ unstaged?: number;
27
+ raw?: string[];
28
+ path?: string;
29
+ content?: string;
30
+ bytes?: number;
31
+ opsApplied?: number;
32
+ stdout?: string;
33
+ stderr?: string;
34
+ exitCode?: number;
35
+ entries?: Array<{
36
+ name: string;
37
+ type: string;
38
+ }>;
39
+ tree?: string;
40
+ matches?: unknown[];
41
+ files?: unknown[];
42
+ cwd?: string;
43
+ output?: string;
44
+ diff?: string;
45
+ summary?: string;
46
+ results?: unknown[];
47
+ }
48
+ export interface ContentJson {
49
+ text?: string;
50
+ name?: string;
51
+ args?: ToolCallArgs;
52
+ callId?: string;
53
+ result?: ToolResultData;
54
+ artifact?: {
55
+ patch?: string;
56
+ summary?: {
57
+ files?: number;
58
+ additions?: number;
59
+ deletions?: number;
60
+ };
61
+ };
62
+ error?: Record<string, unknown>;
63
+ details?: Record<string, unknown>;
64
+ message?: string;
65
+ type?: string;
66
+ isAborted?: boolean;
67
+ }
68
+ export interface RendererProps {
69
+ contentJson: ContentJson;
70
+ toolDurationMs?: number;
71
+ isExpanded: boolean;
72
+ onToggle: () => void;
73
+ }
74
+ export interface GenericRendererProps extends RendererProps {
75
+ toolName: string;
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Format a duration in milliseconds to a human-readable string.
3
+ * Shows seconds (with 1 decimal) if >= 1000ms, otherwise shows ms.
4
+ *
5
+ * @example
6
+ * formatDuration(450) // "450ms"
7
+ * formatDuration(1234) // "1.2s"
8
+ * formatDuration(5678) // "5.7s"
9
+ */
10
+ export declare function formatDuration(ms: number | undefined): string;
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7D"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Format a duration in milliseconds to a human-readable string.
3
+ * Shows seconds (with 1 decimal) if >= 1000ms, otherwise shows ms.
4
+ *
5
+ * @example
6
+ * formatDuration(450) // "450ms"
7
+ * formatDuration(1234) // "1.2s"
8
+ * formatDuration(5678) // "5.7s"
9
+ */
10
+ export function formatDuration(ms) {
11
+ if (!ms)
12
+ return '';
13
+ if (ms >= 1000) {
14
+ return `${(ms / 1000).toFixed(1)}s`;
15
+ }
16
+ return `${ms}ms`;
17
+ }
18
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,EAAsB;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,EAAE,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Session } from '../../types/api';
2
+ interface LeanHeaderProps {
3
+ session: Session;
4
+ isVisible: boolean;
5
+ isGenerating?: boolean;
6
+ }
7
+ export declare function LeanHeader({ session, isVisible, isGenerating, }: LeanHeaderProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=LeanHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeanHeader.d.ts","sourceRoot":"","sources":["../../../src/components/sessions/LeanHeader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,UAAU,eAAe;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,YAAY,GACZ,EAAE,eAAe,2CA8DjB"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Hash, DollarSign } from 'lucide-react';
4
+ import { StopButton } from '../chat/StopButton';
5
+ export function LeanHeader({ session, isVisible, isGenerating, }) {
6
+ // Calculate total tokens
7
+ const totalTokens = useMemo(() => {
8
+ const input = session.totalInputTokens || 0;
9
+ const output = session.totalOutputTokens || 0;
10
+ return input + output;
11
+ }, [session.totalInputTokens, session.totalOutputTokens]);
12
+ // Calculate estimated cost
13
+ const estimatedCost = useMemo(() => {
14
+ const input = session.totalInputTokens || 0;
15
+ const output = session.totalOutputTokens || 0;
16
+ const inputCostPer1M = 30;
17
+ const outputCostPer1M = 60;
18
+ const inputCost = (input / 1_000_000) * inputCostPer1M;
19
+ const outputCost = (output / 1_000_000) * outputCostPer1M;
20
+ return inputCost + outputCost;
21
+ }, [session.totalInputTokens, session.totalOutputTokens]);
22
+ // Format number with commas
23
+ const formatNumber = (num) => {
24
+ return num.toLocaleString('en-US');
25
+ };
26
+ return (_jsx("div", { className: `absolute top-0 left-0 right-0 h-14 border-b border-border bg-background/95 backdrop-blur-sm z-30 transition-transform duration-200 ${isVisible ? 'translate-y-0' : '-translate-y-full'}`, children: _jsxs("div", { className: "h-full px-6 flex items-center justify-between gap-6 text-sm", children: [_jsx("div", { className: "flex-shrink-0", children: isGenerating && _jsx(StopButton, { sessionId: session.id }) }), _jsxs("div", { className: "flex items-center gap-6", children: [_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Hash, { className: "w-4 h-4" }), _jsx("span", { className: "text-foreground font-medium", children: formatNumber(totalTokens) })] }), estimatedCost > 0 && (_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(DollarSign, { className: "w-4 h-4" }), _jsxs("span", { className: "text-foreground font-medium", children: ["$", estimatedCost.toFixed(4)] })] }))] })] }) }));
27
+ }
28
+ //# sourceMappingURL=LeanHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeanHeader.js","sourceRoot":"","sources":["../../../src/components/sessions/LeanHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhD,MAAM,UAAU,UAAU,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,YAAY,GACK;IACjB,yBAAyB;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC9C,OAAO,KAAK,GAAG,MAAM,CAAC;IACvB,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAE1D,2BAA2B;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAE9C,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,cAAc,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,eAAe,CAAC;QAE1D,OAAO,SAAS,GAAG,UAAU,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAE1D,4BAA4B;IAC5B,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;QACpC,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,CACN,cACC,SAAS,EAAE,sIACV,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAC/B,EAAE,YAEF,eAAK,SAAS,EAAC,6DAA6D,aAE3E,cAAK,SAAS,EAAC,eAAe,YAC5B,YAAY,IAAI,KAAC,UAAU,IAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAI,GACjD,EAGN,eAAK,SAAS,EAAC,yBAAyB,aAEvC,eAAK,SAAS,EAAC,+CAA+C,aAC7D,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,EAC5B,eAAM,SAAS,EAAC,6BAA6B,YAC3C,YAAY,CAAC,WAAW,CAAC,GACpB,IACF,EAGL,aAAa,GAAG,CAAC,IAAI,CACrB,eAAK,SAAS,EAAC,+CAA+C,aAC7D,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAG,EAClC,gBAAM,SAAS,EAAC,6BAA6B,kBAC1C,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IACpB,IACF,CACN,IACI,IACD,GACD,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Session } from '../../types/api';
2
+ interface SessionHeaderProps {
3
+ session: Session;
4
+ }
5
+ export declare function SessionHeader({ session }: SessionHeaderProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=SessionHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionHeader.d.ts","sourceRoot":"","sources":["../../../src/components/sessions/SessionHeader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,UAAU,kBAAkB;IAC3B,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CA8H5D"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Clock, DollarSign, Hash } from 'lucide-react';
4
+ export function SessionHeader({ session }) {
5
+ // Calculate total tokens
6
+ const totalTokens = useMemo(() => {
7
+ const input = session.totalInputTokens || 0;
8
+ const output = session.totalOutputTokens || 0;
9
+ return input + output;
10
+ }, [session.totalInputTokens, session.totalOutputTokens]);
11
+ // Calculate estimated cost (example rates for GPT-4)
12
+ // These should be adjusted based on the actual model
13
+ const estimatedCost = useMemo(() => {
14
+ const input = session.totalInputTokens || 0;
15
+ const output = session.totalOutputTokens || 0;
16
+ // Example rates (per 1M tokens):
17
+ // GPT-4: $30 input, $60 output
18
+ // GPT-3.5: $0.50 input, $1.50 output
19
+ // These are approximate and should be updated based on actual model
20
+ const inputCostPer1M = 30;
21
+ const outputCostPer1M = 60;
22
+ const inputCost = (input / 1_000_000) * inputCostPer1M;
23
+ const outputCost = (output / 1_000_000) * outputCostPer1M;
24
+ return inputCost + outputCost;
25
+ }, [session.totalInputTokens, session.totalOutputTokens]);
26
+ // Format time duration
27
+ const formatDuration = (ms) => {
28
+ if (!ms)
29
+ return '0s';
30
+ const seconds = Math.floor(ms / 1000);
31
+ const minutes = Math.floor(seconds / 60);
32
+ const hours = Math.floor(minutes / 60);
33
+ if (hours > 0) {
34
+ const remainingMinutes = minutes % 60;
35
+ return `${hours}h ${remainingMinutes}m`;
36
+ }
37
+ if (minutes > 0) {
38
+ const remainingSeconds = seconds % 60;
39
+ return `${minutes}m ${remainingSeconds}s`;
40
+ }
41
+ return `${seconds}s`;
42
+ };
43
+ // Format number with commas
44
+ const formatNumber = (num) => {
45
+ return num.toLocaleString('en-US');
46
+ };
47
+ return (_jsx("div", { className: "border-b border-border bg-background/95 backdrop-blur-sm", children: _jsxs("div", { className: "max-w-3xl mx-auto px-6 py-6", children: [_jsx("h1", { className: "text-2xl font-semibold text-foreground mb-4", children: session.title || 'Untitled Session' }), _jsxs("div", { className: "flex flex-wrap gap-6 text-sm", children: [_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Hash, { className: "w-4 h-4" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs uppercase tracking-wide opacity-70", children: "Total Tokens" }), _jsx("span", { className: "text-foreground font-medium", children: formatNumber(totalTokens) }), (session.totalInputTokens || session.totalOutputTokens) && (_jsxs("span", { className: "text-xs opacity-60", children: [formatNumber(session.totalInputTokens || 0), " in /", ' ', formatNumber(session.totalOutputTokens || 0), " out"] }))] })] }), _jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Clock, { className: "w-4 h-4" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs uppercase tracking-wide opacity-70", children: "Tool Time" }), _jsx("span", { className: "text-foreground font-medium", children: formatDuration(session.totalToolTimeMs) })] })] }), estimatedCost > 0 && (_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(DollarSign, { className: "w-4 h-4" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs uppercase tracking-wide opacity-70", children: "Est. Cost" }), _jsxs("span", { className: "text-foreground font-medium", children: ["$", estimatedCost.toFixed(4)] })] })] })), _jsx("div", { className: "flex items-center gap-2 text-muted-foreground ml-auto", children: _jsxs("div", { className: "flex flex-col items-end", children: [_jsx("span", { className: "text-xs uppercase tracking-wide opacity-70", children: "Model" }), _jsx("span", { className: "text-foreground font-medium", children: session.model }), _jsxs("span", { className: "text-xs opacity-60", children: [session.provider, " \u00B7 ", session.agent] })] }) })] })] }) }));
48
+ }
49
+ //# sourceMappingURL=SessionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionHeader.js","sourceRoot":"","sources":["../../../src/components/sessions/SessionHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAMvD,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAsB;IAC5D,yBAAyB;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC9C,OAAO,KAAK,GAAG,MAAM,CAAC;IACvB,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAE1D,qDAAqD;IACrD,qDAAqD;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAE9C,iCAAiC;QACjC,+BAA+B;QAC/B,qCAAqC;QACrC,oEAAoE;QACpE,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,cAAc,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,eAAe,CAAC;QAE1D,OAAO,SAAS,GAAG,UAAU,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAE1D,uBAAuB;IACvB,MAAM,cAAc,GAAG,CAAC,EAAiB,EAAE,EAAE;QAC5C,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAEvC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;YACtC,OAAO,GAAG,KAAK,KAAK,gBAAgB,GAAG,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,KAAK,gBAAgB,GAAG,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,OAAO,GAAG,CAAC;IACtB,CAAC,CAAC;IAEF,4BAA4B;IAC5B,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;QACpC,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,CACN,cAAK,SAAS,EAAC,0DAA0D,YACxE,eAAK,SAAS,EAAC,6BAA6B,aAE3C,aAAI,SAAS,EAAC,6CAA6C,YACzD,OAAO,CAAC,KAAK,IAAI,kBAAkB,GAChC,EAGL,eAAK,SAAS,EAAC,8BAA8B,aAE5C,eAAK,SAAS,EAAC,+CAA+C,aAC7D,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,EAC5B,eAAK,SAAS,EAAC,eAAe,aAC7B,eAAM,SAAS,EAAC,4CAA4C,6BAErD,EACP,eAAM,SAAS,EAAC,6BAA6B,YAC3C,YAAY,CAAC,WAAW,CAAC,GACpB,EACN,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAC3D,gBAAM,SAAS,EAAC,oBAAoB,aAClC,YAAY,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,WAAO,GAAG,EACrD,YAAY,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC,YACvC,CACP,IACI,IACD,EAGN,eAAK,SAAS,EAAC,+CAA+C,aAC7D,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,EAC7B,eAAK,SAAS,EAAC,eAAe,aAC7B,eAAM,SAAS,EAAC,4CAA4C,0BAErD,EACP,eAAM,SAAS,EAAC,6BAA6B,YAC3C,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,GAClC,IACF,IACD,EAGL,aAAa,GAAG,CAAC,IAAI,CACrB,eAAK,SAAS,EAAC,+CAA+C,aAC7D,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAG,EAClC,eAAK,SAAS,EAAC,eAAe,aAC7B,eAAM,SAAS,EAAC,4CAA4C,0BAErD,EACP,gBAAM,SAAS,EAAC,6BAA6B,kBAC1C,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IACpB,IACF,IACD,CACN,EAGD,cAAK,SAAS,EAAC,uDAAuD,YACrE,eAAK,SAAS,EAAC,yBAAyB,aACvC,eAAM,SAAS,EAAC,4CAA4C,sBAErD,EACP,eAAM,SAAS,EAAC,6BAA6B,YAC3C,OAAO,CAAC,KAAK,GACR,EACP,gBAAM,SAAS,EAAC,oBAAoB,aAClC,OAAO,CAAC,QAAQ,cAAK,OAAO,CAAC,KAAK,IAC7B,IACF,GACD,IACD,IACD,GACD,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Session } from '../../types/api';
2
+ interface SessionItemProps {
3
+ session: Session;
4
+ isActive: boolean;
5
+ onClick: () => void;
6
+ }
7
+ export declare const SessionItem: import("react").NamedExoticComponent<SessionItemProps>;
8
+ export {};
9
+ //# sourceMappingURL=SessionItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionItem.d.ts","sourceRoot":"","sources":["../../../src/components/sessions/SessionItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,UAAU,gBAAgB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,wDAoDtB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { MessageSquare } from 'lucide-react';
4
+ export const SessionItem = memo(function SessionItem({ session, isActive, onClick, }) {
5
+ const formatDate = (timestamp) => {
6
+ const date = new Date(timestamp);
7
+ const now = new Date();
8
+ const diffMs = now.getTime() - date.getTime();
9
+ const diffMins = Math.floor(diffMs / 60000);
10
+ const diffHours = Math.floor(diffMins / 60);
11
+ const diffDays = Math.floor(diffHours / 24);
12
+ if (diffMins < 1)
13
+ return 'just now';
14
+ if (diffMins < 60)
15
+ return `${diffMins}m ago`;
16
+ if (diffHours < 24)
17
+ return `${diffHours}h ago`;
18
+ if (diffDays < 7)
19
+ return `${diffDays}d ago`;
20
+ return date.toLocaleDateString();
21
+ };
22
+ const baseStyles = 'group w-full rounded-lg px-3 py-3 text-left transition-colors duration-150';
23
+ const activeStyles = 'bg-primary/10';
24
+ const inactiveStyles = 'hover:bg-muted/20';
25
+ return (_jsx("button", { type: "button", onClick: onClick, className: `${baseStyles} ${isActive ? activeStyles : inactiveStyles}`, children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(MessageSquare, { className: `h-4 w-4 shrink-0 mt-1 text-muted-foreground ${isActive ? 'text-primary' : ''}` }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx("h3", { className: "truncate text-sm font-semibold text-foreground", children: session.title || `Session ${session.id.slice(0, 8)}` }) }), _jsxs("div", { className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground/80", children: [session.agent && (_jsx("span", { className: "uppercase", children: session.agent })), session.agent && _jsx("span", { children: "\u2022" }), _jsx("span", { children: formatDate(session.lastActiveAt || session.createdAt) })] })] })] }) }));
26
+ });
27
+ //# sourceMappingURL=SessionItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionItem.js","sourceRoot":"","sources":["../../../src/components/sessions/SessionItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,EACpD,OAAO,EACP,QAAQ,EACR,OAAO,GACW;IAClB,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAE5C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACpC,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,GAAG,SAAS,OAAO,CAAC;QAC/C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC5C,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,UAAU,GACf,4EAA4E,CAAC;IAC9E,MAAM,YAAY,GAAG,eAAe,CAAC;IACrC,MAAM,cAAc,GAAG,mBAAmB,CAAC;IAE3C,OAAO,CACN,iBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,EAAE,YAEtE,eAAK,SAAS,EAAC,wBAAwB,aACtC,KAAC,aAAa,IACb,SAAS,EAAE,+CAA+C,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,GACzF,EACF,eAAK,SAAS,EAAC,gBAAgB,aAC9B,cAAK,SAAS,EAAC,yBAAyB,YACvC,aAAI,SAAS,EAAC,gDAAgD,YAC5D,OAAO,CAAC,KAAK,IAAI,WAAW,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GACjD,GACA,EACN,eAAK,SAAS,EAAC,+DAA+D,aAC5E,OAAO,CAAC,KAAK,IAAI,CACjB,eAAM,SAAS,EAAC,WAAW,YAAE,OAAO,CAAC,KAAK,GAAQ,CAClD,EACA,OAAO,CAAC,KAAK,IAAI,oCAAc,EAChC,yBAAO,UAAU,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,GAAQ,IAC/D,IACD,IACD,GACE,CACT,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface SessionListContainerProps {
2
+ activeSessionId?: string;
3
+ onSelectSession: (sessionId: string) => void;
4
+ }
5
+ export declare const SessionListContainer: import("react").NamedExoticComponent<SessionListContainerProps>;
6
+ export {};
7
+ //# sourceMappingURL=SessionListContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionListContainer.d.ts","sourceRoot":"","sources":["../../../src/components/sessions/SessionListContainer.tsx"],"names":[],"mappings":"AAIA,UAAU,yBAAyB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,oBAAoB,iEAwD/B,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo, useMemo, useCallback } from 'react';
3
+ import { useSessions } from '../../hooks/useSessions';
4
+ import { SessionItem } from './SessionItem';
5
+ export const SessionListContainer = memo(function SessionListContainer({ activeSessionId, onSelectSession, }) {
6
+ const { data: sessions = [], isLoading } = useSessions();
7
+ const handleSessionClick = useCallback((sessionId) => {
8
+ onSelectSession(sessionId);
9
+ }, [onSelectSession]);
10
+ // Create a stable reference that only changes when session count, titles, or agents change
11
+ const sessionSnapshot = useMemo(() => {
12
+ return sessions.map((s) => ({
13
+ id: s.id,
14
+ title: s.title,
15
+ agent: s.agent,
16
+ createdAt: s.createdAt,
17
+ }));
18
+ }, [sessions]);
19
+ if (isLoading) {
20
+ return (_jsx("div", { className: "px-4 py-8 text-center text-sm text-muted-foreground/80", children: "Loading sessions..." }));
21
+ }
22
+ if (sessionSnapshot.length === 0) {
23
+ return (_jsx("div", { className: "px-4 py-8 text-center text-sm text-muted-foreground/80", children: "No sessions yet. Create one to get started." }));
24
+ }
25
+ return (_jsx("div", { className: "flex flex-col gap-1 px-2 py-2 overflow-y-auto scrollbar-hide", children: sessionSnapshot.map((session) => {
26
+ const fullSession = sessions.find((s) => s.id === session.id);
27
+ if (!fullSession)
28
+ return null;
29
+ return (_jsx(SessionItem, { session: fullSession, isActive: session.id === activeSessionId, onClick: () => handleSessionClick(session.id) }, session.id));
30
+ }) }));
31
+ });
32
+ //# sourceMappingURL=SessionListContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionListContainer.js","sourceRoot":"","sources":["../../../src/components/sessions/SessionListContainer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,oBAAoB,CAAC,EACtE,eAAe,EACf,eAAe,GACY;IAC3B,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzD,MAAM,kBAAkB,GAAG,WAAW,CACrC,CAAC,SAAiB,EAAE,EAAE;QACrB,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC,EACD,CAAC,eAAe,CAAC,CACjB,CAAC;IAEF,2FAA2F;IAC3F,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;SACtB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,CACN,cAAK,SAAS,EAAC,wDAAwD,oCAEjE,CACN,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CACN,cAAK,SAAS,EAAC,wDAAwD,4DAEjE,CACN,CAAC;IACH,CAAC;IAED,OAAO,CACN,cAAK,SAAS,EAAC,8DAA8D,YAC3E,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YAE9B,OAAO,CACN,KAAC,WAAW,IAEX,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,eAAe,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,IAHxC,OAAO,CAAC,EAAE,CAId,CACF,CAAC;QACH,CAAC,CAAC,GACG,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ButtonHTMLAttributes } from 'react';
2
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
+ variant?: 'primary' | 'secondary' | 'ghost';
4
+ size?: 'sm' | 'md' | 'lg' | 'icon';
5
+ }
6
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ export {};
8
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,UAAU,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACpE,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC5C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;CACnC;AAED,eAAO,MAAM,MAAM,2GA2BlB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ export const Button = forwardRef(({ className = '', variant = 'primary', size = 'md', ...props }, ref) => {
4
+ const baseStyles = 'inline-flex items-center justify-center rounded font-medium transition-colors focus-visible:outline-none disabled:opacity-50 disabled:cursor-not-allowed';
5
+ const variants = {
6
+ primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
7
+ secondary: 'bg-muted text-foreground hover:bg-muted/80 border border-border',
8
+ ghost: 'text-muted-foreground hover:text-foreground hover:bg-muted/50',
9
+ };
10
+ const sizes = {
11
+ sm: 'px-3 py-1.5 text-sm',
12
+ md: 'px-4 py-2 text-sm',
13
+ lg: 'px-6 py-3 text-base',
14
+ icon: 'w-10 h-10 p-0',
15
+ };
16
+ return (_jsx("button", { ref: ref, className: `${baseStyles} ${variants[variant]} ${sizes[size]} ${className}`, ...props }));
17
+ });
18
+ Button.displayName = 'Button';
19
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAQnC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAC/B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACvE,MAAM,UAAU,GACf,0JAA0J,CAAC;IAE5J,MAAM,QAAQ,GAAG;QAChB,OAAO,EAAE,wDAAwD;QACjE,SAAS,EACR,iEAAiE;QAClE,KAAK,EAAE,+DAA+D;KACtE,CAAC;IAEF,MAAM,KAAK,GAAG;QACb,EAAE,EAAE,qBAAqB;QACzB,EAAE,EAAE,mBAAmB;QACvB,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,eAAe;KACrB,CAAC;IAEF,OAAO,CACN,iBACC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,KACvE,KAAK,GACR,CACF,CAAC;AACH,CAAC,CACD,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ interface CardProps extends HTMLAttributes<HTMLDivElement> {
3
+ }
4
+ export declare const Card: import("react").ForwardRefExoticComponent<CardProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ export {};
6
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,UAAU,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;CAAG;AAE7D,eAAO,MAAM,IAAI,sGAYhB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ export const Card = forwardRef(({ className = '', children, ...props }, ref) => {
4
+ return (_jsx("div", { ref: ref, className: `bg-card text-card-foreground border border-border rounded-lg ${className}`, ...props, children: children }));
5
+ });
6
+ Card.displayName = 'Card';
7
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/ui/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKnC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC7B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/C,OAAO,CACN,cACC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,gEAAgE,SAAS,EAAE,KAClF,KAAK,YAER,QAAQ,GACJ,CACN,CAAC;AACH,CAAC,CACD,CAAC;AAEF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { InputHTMLAttributes } from 'react';
2
+ interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
3
+ }
4
+ export declare const Input: import("react").ForwardRefExoticComponent<InputProps & import("react").RefAttributes<HTMLInputElement>>;
5
+ export {};
6
+ //# sourceMappingURL=Input.d.ts.map