@molecule/app-ide-react 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/LICENSE +115 -0
  2. package/dist/chatTimelineOrdering.d.ts +50 -0
  3. package/dist/chatTimelineOrdering.d.ts.map +1 -0
  4. package/dist/chatTimelineOrdering.js +46 -0
  5. package/dist/chatTimelineOrdering.js.map +1 -0
  6. package/dist/command-metadata.d.ts +78 -0
  7. package/dist/command-metadata.d.ts.map +1 -0
  8. package/dist/command-metadata.js +214 -0
  9. package/dist/command-metadata.js.map +1 -0
  10. package/dist/components/ActivityCard.d.ts +28 -0
  11. package/dist/components/ActivityCard.d.ts.map +1 -0
  12. package/dist/components/ActivityCard.js +62 -0
  13. package/dist/components/ActivityCard.js.map +1 -0
  14. package/dist/components/AutoCommitBadge.d.ts +58 -0
  15. package/dist/components/AutoCommitBadge.d.ts.map +1 -0
  16. package/dist/components/AutoCommitBadge.js +78 -0
  17. package/dist/components/AutoCommitBadge.js.map +1 -0
  18. package/dist/components/ChatPanel.d.ts +184 -0
  19. package/dist/components/ChatPanel.d.ts.map +1 -0
  20. package/dist/components/ChatPanel.js +6691 -0
  21. package/dist/components/ChatPanel.js.map +1 -0
  22. package/dist/components/CommandPalette.d.ts +18 -0
  23. package/dist/components/CommandPalette.d.ts.map +1 -0
  24. package/dist/components/CommandPalette.js +33 -0
  25. package/dist/components/CommandPalette.js.map +1 -0
  26. package/dist/components/DeviceFrameSelector.d.ts +60 -0
  27. package/dist/components/DeviceFrameSelector.d.ts.map +1 -0
  28. package/dist/components/DeviceFrameSelector.js +230 -0
  29. package/dist/components/DeviceFrameSelector.js.map +1 -0
  30. package/dist/components/EditorPanel.d.ts +17 -0
  31. package/dist/components/EditorPanel.d.ts.map +1 -0
  32. package/dist/components/EditorPanel.js +241 -0
  33. package/dist/components/EditorPanel.js.map +1 -0
  34. package/dist/components/FileExplorer.d.ts +64 -0
  35. package/dist/components/FileExplorer.d.ts.map +1 -0
  36. package/dist/components/FileExplorer.js +1111 -0
  37. package/dist/components/FileExplorer.js.map +1 -0
  38. package/dist/components/FileExplorerContextMenu.d.ts +37 -0
  39. package/dist/components/FileExplorerContextMenu.d.ts.map +1 -0
  40. package/dist/components/FileExplorerContextMenu.js +241 -0
  41. package/dist/components/FileExplorerContextMenu.js.map +1 -0
  42. package/dist/components/HelpCard.d.ts +34 -0
  43. package/dist/components/HelpCard.d.ts.map +1 -0
  44. package/dist/components/HelpCard.js +28 -0
  45. package/dist/components/HelpCard.js.map +1 -0
  46. package/dist/components/Icon.d.ts +50 -0
  47. package/dist/components/Icon.d.ts.map +1 -0
  48. package/dist/components/Icon.js +25 -0
  49. package/dist/components/Icon.js.map +1 -0
  50. package/dist/components/KeyboardShortcutsPanel.d.ts +19 -0
  51. package/dist/components/KeyboardShortcutsPanel.d.ts.map +1 -0
  52. package/dist/components/KeyboardShortcutsPanel.js +187 -0
  53. package/dist/components/KeyboardShortcutsPanel.js.map +1 -0
  54. package/dist/components/MarkdownContent.d.ts +52 -0
  55. package/dist/components/MarkdownContent.d.ts.map +1 -0
  56. package/dist/components/MarkdownContent.js +303 -0
  57. package/dist/components/MarkdownContent.js.map +1 -0
  58. package/dist/components/ModelsTable.d.ts +38 -0
  59. package/dist/components/ModelsTable.d.ts.map +1 -0
  60. package/dist/components/ModelsTable.js +96 -0
  61. package/dist/components/ModelsTable.js.map +1 -0
  62. package/dist/components/PreviewPanel.d.ts +66 -0
  63. package/dist/components/PreviewPanel.d.ts.map +1 -0
  64. package/dist/components/PreviewPanel.js +1752 -0
  65. package/dist/components/PreviewPanel.js.map +1 -0
  66. package/dist/components/QuickOpen.d.ts +20 -0
  67. package/dist/components/QuickOpen.d.ts.map +1 -0
  68. package/dist/components/QuickOpen.js +72 -0
  69. package/dist/components/QuickOpen.js.map +1 -0
  70. package/dist/components/QuickPicker.d.ts +21 -0
  71. package/dist/components/QuickPicker.d.ts.map +1 -0
  72. package/dist/components/QuickPicker.js +174 -0
  73. package/dist/components/QuickPicker.js.map +1 -0
  74. package/dist/components/RelevantSkillSuggestion.d.ts +41 -0
  75. package/dist/components/RelevantSkillSuggestion.d.ts.map +1 -0
  76. package/dist/components/RelevantSkillSuggestion.js +85 -0
  77. package/dist/components/RelevantSkillSuggestion.js.map +1 -0
  78. package/dist/components/ReportModal.d.ts +35 -0
  79. package/dist/components/ReportModal.d.ts.map +1 -0
  80. package/dist/components/ReportModal.js +112 -0
  81. package/dist/components/ReportModal.js.map +1 -0
  82. package/dist/components/ResizeHandle.d.ts +21 -0
  83. package/dist/components/ResizeHandle.d.ts.map +1 -0
  84. package/dist/components/ResizeHandle.js +109 -0
  85. package/dist/components/ResizeHandle.js.map +1 -0
  86. package/dist/components/ScriptsCard.d.ts +37 -0
  87. package/dist/components/ScriptsCard.d.ts.map +1 -0
  88. package/dist/components/ScriptsCard.js +177 -0
  89. package/dist/components/ScriptsCard.js.map +1 -0
  90. package/dist/components/SearchPanel.d.ts +18 -0
  91. package/dist/components/SearchPanel.d.ts.map +1 -0
  92. package/dist/components/SearchPanel.js +449 -0
  93. package/dist/components/SearchPanel.js.map +1 -0
  94. package/dist/components/SettingsCard.d.ts +49 -0
  95. package/dist/components/SettingsCard.d.ts.map +1 -0
  96. package/dist/components/SettingsCard.js +59 -0
  97. package/dist/components/SettingsCard.js.map +1 -0
  98. package/dist/components/ShareModal.d.ts +32 -0
  99. package/dist/components/ShareModal.d.ts.map +1 -0
  100. package/dist/components/ShareModal.js +126 -0
  101. package/dist/components/ShareModal.js.map +1 -0
  102. package/dist/components/SidebarTabs.d.ts +18 -0
  103. package/dist/components/SidebarTabs.d.ts.map +1 -0
  104. package/dist/components/SidebarTabs.js +20 -0
  105. package/dist/components/SidebarTabs.js.map +1 -0
  106. package/dist/components/SkillsCard.d.ts +86 -0
  107. package/dist/components/SkillsCard.d.ts.map +1 -0
  108. package/dist/components/SkillsCard.js +227 -0
  109. package/dist/components/SkillsCard.js.map +1 -0
  110. package/dist/components/StreamingIndicator.d.ts +50 -0
  111. package/dist/components/StreamingIndicator.d.ts.map +1 -0
  112. package/dist/components/StreamingIndicator.js +142 -0
  113. package/dist/components/StreamingIndicator.js.map +1 -0
  114. package/dist/components/TabBar.d.ts +37 -0
  115. package/dist/components/TabBar.d.ts.map +1 -0
  116. package/dist/components/TabBar.js +187 -0
  117. package/dist/components/TabBar.js.map +1 -0
  118. package/dist/components/TipCard.d.ts +22 -0
  119. package/dist/components/TipCard.d.ts.map +1 -0
  120. package/dist/components/TipCard.js +73 -0
  121. package/dist/components/TipCard.js.map +1 -0
  122. package/dist/components/ToolCallCard.d.ts +18 -0
  123. package/dist/components/ToolCallCard.d.ts.map +1 -0
  124. package/dist/components/ToolCallCard.js +716 -0
  125. package/dist/components/ToolCallCard.js.map +1 -0
  126. package/dist/components/UserAvatar.d.ts +45 -0
  127. package/dist/components/UserAvatar.d.ts.map +1 -0
  128. package/dist/components/UserAvatar.js +80 -0
  129. package/dist/components/UserAvatar.js.map +1 -0
  130. package/dist/components/WorkspaceLayout.d.ts +19 -0
  131. package/dist/components/WorkspaceLayout.d.ts.map +1 -0
  132. package/dist/components/WorkspaceLayout.js +56 -0
  133. package/dist/components/WorkspaceLayout.js.map +1 -0
  134. package/dist/components/activity-utilities.d.ts +107 -0
  135. package/dist/components/activity-utilities.d.ts.map +1 -0
  136. package/dist/components/activity-utilities.js +154 -0
  137. package/dist/components/activity-utilities.js.map +1 -0
  138. package/dist/components/chat-autocommit-utilities.d.ts +172 -0
  139. package/dist/components/chat-autocommit-utilities.d.ts.map +1 -0
  140. package/dist/components/chat-autocommit-utilities.js +185 -0
  141. package/dist/components/chat-autocommit-utilities.js.map +1 -0
  142. package/dist/components/chat-card-style.d.ts +64 -0
  143. package/dist/components/chat-card-style.d.ts.map +1 -0
  144. package/dist/components/chat-card-style.js +74 -0
  145. package/dist/components/chat-card-style.js.map +1 -0
  146. package/dist/components/chat-commands.d.ts +17 -0
  147. package/dist/components/chat-commands.d.ts.map +1 -0
  148. package/dist/components/chat-commands.js +17 -0
  149. package/dist/components/chat-commands.js.map +1 -0
  150. package/dist/components/chat-commit-utilities.d.ts +29 -0
  151. package/dist/components/chat-commit-utilities.d.ts.map +1 -0
  152. package/dist/components/chat-commit-utilities.js +31 -0
  153. package/dist/components/chat-commit-utilities.js.map +1 -0
  154. package/dist/components/chat-cost-utilities.d.ts +62 -0
  155. package/dist/components/chat-cost-utilities.d.ts.map +1 -0
  156. package/dist/components/chat-cost-utilities.js +66 -0
  157. package/dist/components/chat-cost-utilities.js.map +1 -0
  158. package/dist/components/chat-effort-utilities.d.ts +96 -0
  159. package/dist/components/chat-effort-utilities.d.ts.map +1 -0
  160. package/dist/components/chat-effort-utilities.js +97 -0
  161. package/dist/components/chat-effort-utilities.js.map +1 -0
  162. package/dist/components/chat-help-utilities.d.ts +89 -0
  163. package/dist/components/chat-help-utilities.d.ts.map +1 -0
  164. package/dist/components/chat-help-utilities.js +131 -0
  165. package/dist/components/chat-help-utilities.js.map +1 -0
  166. package/dist/components/chat-model-mode-utilities.d.ts +143 -0
  167. package/dist/components/chat-model-mode-utilities.d.ts.map +1 -0
  168. package/dist/components/chat-model-mode-utilities.js +191 -0
  169. package/dist/components/chat-model-mode-utilities.js.map +1 -0
  170. package/dist/components/chat-models-utilities.d.ts +98 -0
  171. package/dist/components/chat-models-utilities.d.ts.map +1 -0
  172. package/dist/components/chat-models-utilities.js +136 -0
  173. package/dist/components/chat-models-utilities.js.map +1 -0
  174. package/dist/components/chat-report-utilities.d.ts +149 -0
  175. package/dist/components/chat-report-utilities.d.ts.map +1 -0
  176. package/dist/components/chat-report-utilities.js +151 -0
  177. package/dist/components/chat-report-utilities.js.map +1 -0
  178. package/dist/components/chat-scripts-utilities.d.ts +140 -0
  179. package/dist/components/chat-scripts-utilities.d.ts.map +1 -0
  180. package/dist/components/chat-scripts-utilities.js +158 -0
  181. package/dist/components/chat-scripts-utilities.js.map +1 -0
  182. package/dist/components/chat-settings-utilities.d.ts +72 -0
  183. package/dist/components/chat-settings-utilities.d.ts.map +1 -0
  184. package/dist/components/chat-settings-utilities.js +56 -0
  185. package/dist/components/chat-settings-utilities.js.map +1 -0
  186. package/dist/components/chat-share-utilities.d.ts +104 -0
  187. package/dist/components/chat-share-utilities.d.ts.map +1 -0
  188. package/dist/components/chat-share-utilities.js +90 -0
  189. package/dist/components/chat-share-utilities.js.map +1 -0
  190. package/dist/components/chat-skills-utilities.d.ts +242 -0
  191. package/dist/components/chat-skills-utilities.d.ts.map +1 -0
  192. package/dist/components/chat-skills-utilities.js +433 -0
  193. package/dist/components/chat-skills-utilities.js.map +1 -0
  194. package/dist/components/chat-stream-utilities.d.ts +74 -0
  195. package/dist/components/chat-stream-utilities.d.ts.map +1 -0
  196. package/dist/components/chat-stream-utilities.js +103 -0
  197. package/dist/components/chat-stream-utilities.js.map +1 -0
  198. package/dist/components/chat-tips-utilities.d.ts +108 -0
  199. package/dist/components/chat-tips-utilities.d.ts.map +1 -0
  200. package/dist/components/chat-tips-utilities.js +137 -0
  201. package/dist/components/chat-tips-utilities.js.map +1 -0
  202. package/dist/components/device-cycle.d.ts +84 -0
  203. package/dist/components/device-cycle.d.ts.map +1 -0
  204. package/dist/components/device-cycle.js +77 -0
  205. package/dist/components/device-cycle.js.map +1 -0
  206. package/dist/components/index.d.ts +36 -0
  207. package/dist/components/index.d.ts.map +1 -0
  208. package/dist/components/index.js +33 -0
  209. package/dist/components/index.js.map +1 -0
  210. package/dist/components/tool-call-utilities.d.ts +69 -0
  211. package/dist/components/tool-call-utilities.d.ts.map +1 -0
  212. package/dist/components/tool-call-utilities.js +368 -0
  213. package/dist/components/tool-call-utilities.js.map +1 -0
  214. package/dist/components/user-avatar-utilities.d.ts +41 -0
  215. package/dist/components/user-avatar-utilities.d.ts.map +1 -0
  216. package/dist/components/user-avatar-utilities.js +56 -0
  217. package/dist/components/user-avatar-utilities.js.map +1 -0
  218. package/dist/components/workspace-layout-utilities.d.ts +37 -0
  219. package/dist/components/workspace-layout-utilities.d.ts.map +1 -0
  220. package/dist/components/workspace-layout-utilities.js +58 -0
  221. package/dist/components/workspace-layout-utilities.js.map +1 -0
  222. package/dist/customEventCards.d.ts +117 -0
  223. package/dist/customEventCards.d.ts.map +1 -0
  224. package/dist/customEventCards.js +36 -0
  225. package/dist/customEventCards.js.map +1 -0
  226. package/dist/hooks/index.d.ts +8 -0
  227. package/dist/hooks/index.d.ts.map +1 -0
  228. package/dist/hooks/index.js +8 -0
  229. package/dist/hooks/index.js.map +1 -0
  230. package/dist/hooks/useKeyboardShortcuts.d.ts +48 -0
  231. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  232. package/dist/hooks/useKeyboardShortcuts.js +112 -0
  233. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  234. package/dist/hooks/useViewport.d.ts +42 -0
  235. package/dist/hooks/useViewport.d.ts.map +1 -0
  236. package/dist/hooks/useViewport.js +61 -0
  237. package/dist/hooks/useViewport.js.map +1 -0
  238. package/dist/index.d.ts +75 -0
  239. package/dist/index.d.ts.map +1 -0
  240. package/dist/index.js +74 -0
  241. package/dist/index.js.map +1 -0
  242. package/dist/settings-metadata.d.ts +78 -0
  243. package/dist/settings-metadata.d.ts.map +1 -0
  244. package/dist/settings-metadata.js +131 -0
  245. package/dist/settings-metadata.js.map +1 -0
  246. package/dist/types.d.ts +751 -0
  247. package/dist/types.d.ts.map +1 -0
  248. package/dist/types.js +25 -0
  249. package/dist/types.js.map +1 -0
  250. package/package.json +90 -0
@@ -0,0 +1,112 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from 'react';
3
+ import { t } from '@molecule/app-i18n';
4
+ import { getLogger } from '@molecule/app-logger';
5
+ import { DEFAULT_PRODUCT_NAME, useHttpClient, useThemeMode } from '@molecule/app-react';
6
+ import { getClassMap } from '@molecule/app-ui';
7
+ import { useCoarsePointer, useNarrowViewport } from '../hooks/useViewport.js';
8
+ import { buildReportPayload, collectClientInfo, EMPTY_REPORT_FORM, isReportFormValid, } from './chat-report-utilities.js';
9
+ const logger = getLogger('report-modal');
10
+ /**
11
+ * The bug-report / feedback modal opened by `/report`, `/bug`, and the header
12
+ * bug-report button.
13
+ *
14
+ * @param props - Component props.
15
+ * @returns The rendered report modal.
16
+ */
17
+ export function ReportModal({ projectId, conversationId, initialTitle, onClose, onSubmitted, productName = DEFAULT_PRODUCT_NAME, appVersion, }) {
18
+ const cm = getClassMap();
19
+ const http = useHttpClient();
20
+ const isLight = useThemeMode() === 'light';
21
+ const [form, setForm] = useState({
22
+ ...EMPTY_REPORT_FORM,
23
+ title: initialTitle ?? '',
24
+ });
25
+ const [submitting, setSubmitting] = useState(false);
26
+ const [error, setError] = useState(null);
27
+ // Escape closes the modal.
28
+ useEffect(() => {
29
+ const handler = (e) => {
30
+ if (e.key === 'Escape')
31
+ onClose();
32
+ };
33
+ window.addEventListener('keydown', handler);
34
+ return () => window.removeEventListener('keydown', handler);
35
+ }, [onClose]);
36
+ const isNarrow = useNarrowViewport();
37
+ const isCoarse = useCoarsePointer();
38
+ const valid = isReportFormValid(form);
39
+ const border = isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)';
40
+ const fieldStyle = {
41
+ width: '100%',
42
+ padding: '6px 8px',
43
+ borderRadius: 4,
44
+ border: `1px solid ${border}`,
45
+ background: 'transparent',
46
+ color: 'inherit',
47
+ outline: 'none',
48
+ // ≥16px on phones/touch so iOS Safari doesn't zoom the page on focus.
49
+ ...(isNarrow || isCoarse ? { fontSize: 16 } : {}),
50
+ };
51
+ const handleSubmit = useCallback(async () => {
52
+ if (!isReportFormValid(form) || submitting)
53
+ return;
54
+ setSubmitting(true);
55
+ setError(null);
56
+ try {
57
+ const url = conversationId
58
+ ? `/projects/${projectId}/report?conversationId=${encodeURIComponent(conversationId)}`
59
+ : `/projects/${projectId}/report`;
60
+ const clientInfo = collectClientInfo({
61
+ appVersion,
62
+ theme: isLight ? 'light' : 'dark',
63
+ });
64
+ const res = await http.post(url, buildReportPayload(form, clientInfo));
65
+ onSubmitted(res.data);
66
+ }
67
+ catch (err) {
68
+ logger.warn('Failed to submit bug report', { error: err });
69
+ setError(t('ide.chat.report.error', undefined, {
70
+ defaultValue: 'Could not submit your report. Please try again.',
71
+ }));
72
+ setSubmitting(false);
73
+ }
74
+ }, [form, submitting, conversationId, projectId, http, onSubmitted, appVersion, isLight]);
75
+ return (_jsx("div", { "data-mol-id": "report-modal-backdrop", onClick: onClose, style: {
76
+ position: 'fixed',
77
+ inset: 0,
78
+ // Dialog layer (1300) — must paint above ambient status chrome like the
79
+ // host's HealthBanner (z 1100), which otherwise overlaps this on phones.
80
+ zIndex: 1300,
81
+ display: 'flex',
82
+ alignItems: 'center',
83
+ justifyContent: 'center',
84
+ background: 'rgba(0,0,0,0.45)',
85
+ padding: 16,
86
+ }, children: _jsxs("div", { "data-mol-id": "report-modal", role: "dialog", "aria-modal": "true", "aria-label": t('ide.chat.report.heading', undefined, { defaultValue: 'Report a bug' }), onClick: (e) => e.stopPropagation(), className: cm.cn(cm.surface, cm.borderAll, cm.textSize('sm')), style: {
87
+ width: '100%',
88
+ maxWidth: 460,
89
+ maxHeight: '85vh',
90
+ overflowY: 'auto',
91
+ borderRadius: 8,
92
+ padding: 16,
93
+ boxShadow: '0 10px 40px rgba(0,0,0,0.35)',
94
+ }, children: [_jsx("div", { className: cm.cn(cm.fontWeight('medium'), cm.textSize('lg')), style: { marginBottom: 4 }, children: t('ide.chat.report.heading', undefined, { defaultValue: 'Report a bug' }) }), _jsx("div", { className: cm.textMuted, style: { marginBottom: 12, lineHeight: 1.4 }, children: t('ide.chat.report.subheading', { productName }, {
95
+ defaultValue: 'Tell us what went wrong or what you’d like to see. Goes to {{productName}}’s team.',
96
+ }) }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: [_jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.report.titleLabel', undefined, { defaultValue: 'Title' }) }), _jsx("input", { value: form.title, "data-mol-id": "report-title", autoFocus: true, onChange: (e) => setForm((f) => ({ ...f, title: e.target.value })), placeholder: t('ide.chat.report.titlePlaceholder', undefined, {
97
+ defaultValue: 'Brief summary',
98
+ }), className: cm.textSize('sm'), style: fieldStyle })] }), _jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.report.descriptionLabel', undefined, { defaultValue: 'Description' }) }), _jsx("textarea", { value: form.description, "data-mol-id": "report-description", onChange: (e) => setForm((f) => ({ ...f, description: e.target.value })), placeholder: t('ide.chat.report.descriptionPlaceholder', undefined, {
99
+ defaultValue: 'What happened? What did you expect?',
100
+ }), rows: 4, className: cm.textSize('sm'), style: { ...fieldStyle, resize: 'vertical' } })] }), _jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.report.stepsLabel', undefined, {
101
+ defaultValue: 'Steps to reproduce (optional)',
102
+ }) }), _jsx("textarea", { value: form.steps, "data-mol-id": "report-steps", onChange: (e) => setForm((f) => ({ ...f, steps: e.target.value })), placeholder: t('ide.chat.report.stepsPlaceholder', undefined, {
103
+ defaultValue: '1. …\n2. …',
104
+ }), rows: 3, className: cm.textSize('sm'), style: { ...fieldStyle, resize: 'vertical' } })] }), _jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }, children: [_jsx("input", { type: "checkbox", "data-mol-id": "report-include-chat", checked: form.includeChat, onChange: (e) => setForm((f) => ({ ...f, includeChat: e.target.checked })) }), _jsx("span", { children: t('ide.chat.report.includeChat', undefined, {
105
+ defaultValue: 'Include recent chat for context',
106
+ }) })] }), error && (_jsx("div", { className: cm.textError, style: { lineHeight: 1.4 }, children: error }))] }), _jsx("div", { "data-mol-id": "report-diagnostics-note", className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { marginTop: 12, lineHeight: 1.4 }, children: t('ide.chat.report.diagnosticsNote', undefined, {
107
+ defaultValue: 'Your app version, browser, and screen size are attached to help us debug.',
108
+ }) }), _jsxs("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, marginTop: 16 }, children: [_jsx("button", { type: "button", "data-mol-id": "report-cancel", onClick: onClose, className: cm.cn(cm.button({ variant: 'ghost', size: 'sm' })), children: t('common.cancel', undefined, { defaultValue: 'Cancel' }) }), _jsx("button", { type: "button", "data-mol-id": "report-submit", onClick: () => void handleSubmit(), disabled: !valid || submitting, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), style: { opacity: !valid || submitting ? 0.6 : 1 }, children: submitting
109
+ ? t('ide.chat.report.submitting', undefined, { defaultValue: 'Submitting…' })
110
+ : t('ide.chat.report.submit', undefined, { defaultValue: 'Submit report' }) })] })] }) }));
111
+ }
112
+ //# sourceMappingURL=ReportModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportModal.js","sourceRoot":"","sources":["../../src/components/ReportModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Drag handle for resizing panels.
3
+ *
4
+ * @module
5
+ */
6
+ import type { JSX } from 'react';
7
+ import type { ResizeHandleProps } from '../types.js';
8
+ /**
9
+ * Draggable handle for resizing adjacent panels. Uses Pointer Events so it works
10
+ * with mouse, touch, and pen (an iPad drag resizes just like a desktop drag); a
11
+ * wide invisible grab zone wraps a thin visible line that brightens to the
12
+ * primary color on hover/drag for a clear affordance. Arrow keys nudge the split
13
+ * for keyboard users.
14
+ * @param props - Component props.
15
+ * @returns The rendered resize handle element.
16
+ */
17
+ export declare function ResizeHandle({ onResize, direction, className, }: ResizeHandleProps): JSX.Element;
18
+ export declare namespace ResizeHandle {
19
+ var displayName: string;
20
+ }
21
+ //# sourceMappingURL=ResizeHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../src/components/ResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,GAAG,EAGJ,MAAM,OAAO,CAAA;AAMd,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAcpD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAwB,EACxB,SAAS,GACV,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA4HjC;yBAhIe,YAAY"}
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import { t } from '@molecule/app-i18n';
4
+ import { getClassMap } from '@molecule/app-ui';
5
+ /**
6
+ * Width (px) of the invisible grab zone — far wider than the visible line so it
7
+ * is a comfortable target for both a mouse and a finger (WCAG 2.5.5).
8
+ */
9
+ const GRAB_PX = 11;
10
+ /** Visible line thickness (px) at rest. */
11
+ const LINE_PX = 1;
12
+ /** Visible line thickness (px) while hovered or actively dragging. */
13
+ const LINE_ACTIVE_PX = 3;
14
+ /** Pixels moved per arrow-key press for keyboard resize. */
15
+ const KEYBOARD_STEP_PX = 24;
16
+ /**
17
+ * Draggable handle for resizing adjacent panels. Uses Pointer Events so it works
18
+ * with mouse, touch, and pen (an iPad drag resizes just like a desktop drag); a
19
+ * wide invisible grab zone wraps a thin visible line that brightens to the
20
+ * primary color on hover/drag for a clear affordance. Arrow keys nudge the split
21
+ * for keyboard users.
22
+ * @param props - Component props.
23
+ * @returns The rendered resize handle element.
24
+ */
25
+ export function ResizeHandle({ onResize, direction = 'horizontal', className, }) {
26
+ const cm = getClassMap();
27
+ const startRef = useRef(0);
28
+ const draggingRef = useRef(false);
29
+ const [dragging, setDragging] = useState(false);
30
+ const [hovered, setHovered] = useState(false);
31
+ const isHorizontal = direction === 'horizontal';
32
+ const onPointerDown = useCallback((e) => {
33
+ e.preventDefault();
34
+ draggingRef.current = true;
35
+ setDragging(true);
36
+ startRef.current = isHorizontal ? e.clientX : e.clientY;
37
+ // Capture the pointer so move/up keep firing on THIS element even when the
38
+ // cursor leaves it mid-drag — the touch-safe replacement for global
39
+ // document mousemove/mouseup listeners.
40
+ e.currentTarget.setPointerCapture(e.pointerId);
41
+ document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';
42
+ document.body.style.userSelect = 'none';
43
+ }, [isHorizontal]);
44
+ const onPointerMove = useCallback((e) => {
45
+ if (!draggingRef.current)
46
+ return;
47
+ const current = isHorizontal ? e.clientX : e.clientY;
48
+ const delta = current - startRef.current;
49
+ if (delta === 0)
50
+ return;
51
+ startRef.current = current;
52
+ onResize(delta);
53
+ }, [isHorizontal, onResize]);
54
+ const endDrag = useCallback((e) => {
55
+ if (!draggingRef.current)
56
+ return;
57
+ draggingRef.current = false;
58
+ setDragging(false);
59
+ if (e.currentTarget.hasPointerCapture(e.pointerId)) {
60
+ e.currentTarget.releasePointerCapture(e.pointerId);
61
+ }
62
+ document.body.style.cursor = '';
63
+ document.body.style.userSelect = '';
64
+ }, []);
65
+ const onKeyDown = useCallback((e) => {
66
+ const decreaseKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';
67
+ const increaseKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';
68
+ if (e.key === decreaseKey) {
69
+ e.preventDefault();
70
+ onResize(-KEYBOARD_STEP_PX);
71
+ }
72
+ else if (e.key === increaseKey) {
73
+ e.preventDefault();
74
+ onResize(KEYBOARD_STEP_PX);
75
+ }
76
+ }, [isHorizontal, onResize]);
77
+ const highlighted = dragging || hovered;
78
+ const lineThickness = highlighted ? LINE_ACTIVE_PX : LINE_PX;
79
+ return (_jsx("div", { "data-mol-id": "workspace-resize-handle", role: "separator", "aria-orientation": isHorizontal ? 'vertical' : 'horizontal', "aria-label": t('ide.resizeHandle.label', undefined, { defaultValue: 'Resize panels' }), tabIndex: 0, className: cm.cn(cm.flex({ direction: 'col', align: 'center', justify: 'center' }), cm.shrink0, className), style: {
80
+ cursor: isHorizontal ? 'col-resize' : 'row-resize',
81
+ // Stop the browser claiming the gesture for scroll/zoom on touch devices.
82
+ touchAction: 'none',
83
+ // Keep the comfortable GRAB_PX touch target, but collapse its LAYOUT
84
+ // footprint to the 1px line with symmetric negative margins, so the divider
85
+ // reads as a single flush line between the panels (no gap) while the extra
86
+ // grab width overflows onto the panel edges. Raised above the panes so that
87
+ // overflow stays grabbable.
88
+ position: 'relative',
89
+ zIndex: 1,
90
+ width: isHorizontal ? GRAB_PX : '100%',
91
+ height: isHorizontal ? '100%' : GRAB_PX,
92
+ ...(isHorizontal
93
+ ? {
94
+ marginLeft: -(GRAB_PX - LINE_PX) / 2,
95
+ marginRight: -(GRAB_PX - LINE_PX) / 2,
96
+ }
97
+ : {
98
+ marginTop: -(GRAB_PX - LINE_PX) / 2,
99
+ marginBottom: -(GRAB_PX - LINE_PX) / 2,
100
+ }),
101
+ }, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: endDrag, onPointerCancel: endDrag, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), onKeyDown: onKeyDown, children: _jsx("div", { "aria-hidden": "true", className: cm.cn(highlighted ? cm.bgPrimary : cm.bgBorder), style: {
102
+ width: isHorizontal ? lineThickness : '100%',
103
+ height: isHorizontal ? '100%' : lineThickness,
104
+ borderRadius: 9999,
105
+ transition: 'background-color 150ms ease, width 150ms ease, height 150ms ease',
106
+ } }) }));
107
+ }
108
+ ResizeHandle.displayName = 'ResizeHandle';
109
+ //# sourceMappingURL=ResizeHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResizeHandle.js","sourceRoot":"","sources":["../../src/components/ResizeHandle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `/scripts` browser.
3
+ *
4
+ * Renders an in-timeline card listing the project's saved scripts (shell files
5
+ * under `.agents/scripts/` with `name`/`description`/`createdAt` frontmatter),
6
+ * loaded via `GET /projects/:id/scripts`. A search box filters by name or
7
+ * description (seeded from `/scripts <query>`), each row has a "Run" action that
8
+ * `POST`s to the run endpoint and shows the captured output inline, and a
9
+ * collapsible "New script" creator `POST`s a script the user (or the agent) just
10
+ * authored back to `POST /projects/:id/scripts`.
11
+ *
12
+ * Styling uses `getClassMap()` (`cm.*`); the only inline styles are layout the
13
+ * ClassMap can't express. All user-facing text goes through `t()`.
14
+ *
15
+ * @module
16
+ */
17
+ import type { JSX } from 'react';
18
+ /**
19
+ * The scripts browser shown by `/scripts`.
20
+ *
21
+ * @param props - Component props.
22
+ * (which already provides the `cm.surface` background + border + a header bar with the title and
23
+ * ✕). The card then renders transparent — dropping its own `cm.surfaceSecondary` fill, outer
24
+ * margin, border-radius, and its redundant "Scripts" heading — so the overlay reads as ONE clean
25
+ * surface (like the /sounds popup) instead of a nested gray card. The inner padding is kept so
26
+ * content isn't flush to the edge. When `false`/omitted (the inline-timeline render path) the
27
+ * card keeps its full card chrome unchanged.
28
+ * @returns The rendered scripts card.
29
+ */
30
+ export declare function ScriptsCard({ projectId, initialQuery, isLight, agentName, embedded, }: {
31
+ projectId: string;
32
+ initialQuery: string;
33
+ isLight: boolean;
34
+ agentName?: string;
35
+ embedded?: boolean;
36
+ }): JSX.Element;
37
+ //# sourceMappingURL=ScriptsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptsCard.d.ts","sourceRoot":"","sources":["../../src/components/ScriptsCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AA0BhC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,YAAY,EACZ,OAAO,EACP,SAA8B,EAC9B,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,GAAG,CAAC,OAAO,CA4Wd"}
@@ -0,0 +1,177 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { t } from '@molecule/app-i18n';
4
+ import { getLogger } from '@molecule/app-logger';
5
+ import { DEFAULT_AGENT_NAME, useHttpClient } from '@molecule/app-react';
6
+ import { getClassMap } from '@molecule/app-ui';
7
+ import { chatCardStyle } from './chat-card-style.js';
8
+ import { buildSaveScriptPayload, filterScripts, formatRunOutput, isSaveScriptValid, runSucceeded, } from './chat-scripts-utilities.js';
9
+ const logger = getLogger('scripts-card');
10
+ /**
11
+ * The scripts browser shown by `/scripts`.
12
+ *
13
+ * @param props - Component props.
14
+ * (which already provides the `cm.surface` background + border + a header bar with the title and
15
+ * ✕). The card then renders transparent — dropping its own `cm.surfaceSecondary` fill, outer
16
+ * margin, border-radius, and its redundant "Scripts" heading — so the overlay reads as ONE clean
17
+ * surface (like the /sounds popup) instead of a nested gray card. The inner padding is kept so
18
+ * content isn't flush to the edge. When `false`/omitted (the inline-timeline render path) the
19
+ * card keeps its full card chrome unchanged.
20
+ * @returns The rendered scripts card.
21
+ */
22
+ export function ScriptsCard({ projectId, initialQuery, isLight, agentName = DEFAULT_AGENT_NAME, embedded, }) {
23
+ const cm = getClassMap();
24
+ const http = useHttpClient();
25
+ const [status, setStatus] = useState('loading');
26
+ const [scripts, setScripts] = useState([]);
27
+ const [query, setQuery] = useState(initialQuery);
28
+ const [runStates, setRunStates] = useState({});
29
+ const [creating, setCreating] = useState(false);
30
+ const [newName, setNewName] = useState('');
31
+ const [newDescription, setNewDescription] = useState('');
32
+ const [newBody, setNewBody] = useState('');
33
+ const [saving, setSaving] = useState(false);
34
+ const [saveError, setSaveError] = useState(null);
35
+ const loadScripts = useCallback(async () => {
36
+ setStatus('loading');
37
+ try {
38
+ const res = await http.get(`/projects/${projectId}/scripts`);
39
+ setScripts(res.data.scripts ?? []);
40
+ setStatus('ready');
41
+ }
42
+ catch (error) {
43
+ logger.warn('Failed to load project scripts', { error });
44
+ setStatus('error');
45
+ }
46
+ }, [http, projectId]);
47
+ useEffect(() => {
48
+ void loadScripts();
49
+ }, [loadScripts]);
50
+ const handleRun = useCallback(async (name) => {
51
+ setRunStates((prev) => ({ ...prev, [name]: 'running' }));
52
+ try {
53
+ const res = await http.post(`/projects/${projectId}/scripts/${encodeURIComponent(name)}/run`);
54
+ setRunStates((prev) => ({ ...prev, [name]: res.data }));
55
+ }
56
+ catch (error) {
57
+ logger.warn('Failed to run project script', { error, name });
58
+ setRunStates((prev) => ({
59
+ ...prev,
60
+ [name]: { stdout: '', stderr: '', exitCode: 1 },
61
+ }));
62
+ }
63
+ }, [http, projectId]);
64
+ const handleSave = useCallback(async () => {
65
+ const payload = buildSaveScriptPayload({
66
+ name: newName,
67
+ description: newDescription,
68
+ body: newBody,
69
+ });
70
+ if (!isSaveScriptValid(payload)) {
71
+ setSaveError(t('ide.chat.scripts.invalid', undefined, {
72
+ defaultValue: 'A script needs a name and a non-empty body.',
73
+ }));
74
+ return;
75
+ }
76
+ setSaving(true);
77
+ setSaveError(null);
78
+ try {
79
+ await http.post(`/projects/${projectId}/scripts`, payload);
80
+ setNewName('');
81
+ setNewDescription('');
82
+ setNewBody('');
83
+ setCreating(false);
84
+ await loadScripts();
85
+ }
86
+ catch (error) {
87
+ logger.warn('Failed to save project script', { error });
88
+ setSaveError(t('ide.chat.scripts.saveError', undefined, {
89
+ defaultValue: 'Could not save the script. Please try again.',
90
+ }));
91
+ }
92
+ finally {
93
+ setSaving(false);
94
+ }
95
+ }, [http, projectId, newName, newDescription, newBody, loadScripts]);
96
+ const filtered = useMemo(() => filterScripts(scripts, query), [scripts, query]);
97
+ const rowBorder = isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)';
98
+ // A subtle neutral inset so the text inputs/textarea READ as fields on the
99
+ // clean overlay surface (not just a faint border). Theme-aware, matching the
100
+ // SettingsCard toggle inset; the SAME value is used in SkillsCard's fields.
101
+ const fieldBg = isLight ? 'rgba(0,0,0,0.05)' : 'rgba(255,255,255,0.06)';
102
+ const fieldStyle = {
103
+ width: '100%',
104
+ padding: '4px 6px',
105
+ borderRadius: 4,
106
+ border: `1px solid ${rowBorder}`,
107
+ background: fieldBg,
108
+ color: 'inherit',
109
+ outline: 'none',
110
+ };
111
+ return (_jsxs("div", { "data-mol-id": "scripts-card", className: cm.textSize('xs'),
112
+ // Non-embedded (inline in the chat timeline) shares the same card chrome as
113
+ // every other info card: subtle primary tint + a uniform 1px border on all
114
+ // sides (chat-card-style). Embedded in an overlay it stays chrome-less.
115
+ style: embedded ? { padding: '10px 12px' } : { ...chatCardStyle(), marginBottom: 16 }, children: [_jsxs("div", { style: {
116
+ display: 'flex',
117
+ alignItems: 'center',
118
+ justifyContent: 'space-between',
119
+ gap: 8,
120
+ marginBottom: 6,
121
+ }, children: [_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: 8, flexShrink: 0 }, children: !embedded && (_jsx("div", { className: cm.cn(cm.fontWeight('medium'), cm.textSize('sm')), style: { flexShrink: 0 }, children: t('ide.chat.scripts.heading', undefined, { defaultValue: 'Scripts' }) })) }), !creating && (_jsx("button", { type: "button", "data-mol-id": "scripts-new-toggle", onClick: () => setCreating(true), className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.scripts.new', undefined, { defaultValue: 'New script' }) }))] }), creating && (_jsxs("div", { "data-mol-id": "scripts-creator", className: cm.borderT, style: {
122
+ display: 'flex',
123
+ flexDirection: 'column',
124
+ gap: 6,
125
+ padding: '8px 0',
126
+ marginTop: 6,
127
+ borderColor: rowBorder,
128
+ }, children: [_jsx("input", { value: newName, "data-mol-id": "scripts-new-name", onChange: (e) => setNewName(e.target.value), placeholder: t('ide.chat.scripts.namePlaceholder', undefined, {
129
+ defaultValue: 'Script name (e.g. run-tests)',
130
+ }), className: cm.textSize('xs'), style: fieldStyle }), _jsx("input", { value: newDescription, "data-mol-id": "scripts-new-description", onChange: (e) => setNewDescription(e.target.value), placeholder: t('ide.chat.scripts.descriptionPlaceholder', undefined, {
131
+ defaultValue: 'What does it do?',
132
+ }), className: cm.textSize('xs'), style: fieldStyle }), _jsx("textarea", { value: newBody, "data-mol-id": "scripts-new-body", onChange: (e) => setNewBody(e.target.value), placeholder: t('ide.chat.scripts.bodyPlaceholder', undefined, {
133
+ defaultValue: '#!/bin/sh\nnpm test',
134
+ }), rows: 4, className: cm.textSize('xs'), style: {
135
+ ...fieldStyle,
136
+ resize: 'vertical',
137
+ fontFamily: 'var(--mol-font-mono, monospace)',
138
+ } }), saveError && (_jsx("div", { className: cm.textError, style: { lineHeight: 1.4 }, children: saveError })), _jsxs("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 6 }, children: [_jsx("button", { type: "button", "data-mol-id": "scripts-cancel", onClick: () => setCreating(false), className: cm.cn(cm.button({ variant: 'ghost', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.scripts.cancelNew', undefined, { defaultValue: 'Cancel' }) }), _jsx("button", { type: "button", "data-mol-id": "scripts-save", onClick: () => void handleSave(), disabled: saving, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0, opacity: saving ? 0.6 : 1 }, children: saving
139
+ ? t('ide.chat.scripts.saving', undefined, { defaultValue: 'Saving…' })
140
+ : t('ide.chat.scripts.save', undefined, { defaultValue: 'Save script' }) })] })] })), _jsx("input", { value: query, "data-mol-id": "scripts-search", onChange: (e) => setQuery(e.target.value), placeholder: t('ide.chat.scripts.searchPlaceholder', undefined, {
141
+ defaultValue: 'Filter scripts…',
142
+ }), className: cm.textSize('xs'), style: { ...fieldStyle, marginBottom: 6 } }), status === 'loading' && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: t('ide.chat.scripts.loading', undefined, { defaultValue: 'Loading scripts…' }) })), status === 'error' && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: t('ide.chat.scripts.error', undefined, {
143
+ defaultValue: 'Could not load scripts for this project.',
144
+ }) })), status === 'ready' && filtered.length === 0 && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: query.trim()
145
+ ? t('ide.chat.scripts.noMatch', { query: query.trim() }, { defaultValue: 'No scripts match “{{query}}”.' })
146
+ : t('ide.chat.scripts.empty', { agentName }, {
147
+ defaultValue: 'No saved scripts yet. Create one above, or ask {{agentName}} to write and save one.',
148
+ }) })), status === 'ready' &&
149
+ filtered.map((script) => {
150
+ const run = runStates[script.name];
151
+ return (_jsxs("div", { "data-mol-id": `script-row-${script.name}`, className: cm.borderT, style: { padding: '6px 0', borderColor: rowBorder }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: 8 }, children: [_jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { className: cm.fontWeight('medium'), children: script.name }), script.description && (_jsx("div", { className: cm.textMuted, style: { marginTop: 2, lineHeight: 1.4 }, children: script.description }))] }), _jsx("button", { type: "button", "data-mol-id": `script-run-${script.name}`, onClick: () => void handleRun(script.name), disabled: run === 'running',
152
+ // Primary per-row action → solid blue, matching SkillsCard's blue "Load"
153
+ // button (a real button, never plain text on transparent). Self-
154
+ // explanatory, so no delayed touch-blind native `title` (consistent with
155
+ // SkillsCard's row actions which carry no native title — P5-09).
156
+ className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0, opacity: run === 'running' ? 0.6 : 1 }, children: run === 'running'
157
+ ? t('ide.chat.scripts.running', undefined, { defaultValue: 'Running…' })
158
+ : t('ide.chat.scripts.run', undefined, { defaultValue: 'Run' }) })] }), run && run !== 'running' && (_jsxs("div", { "data-mol-id": `script-output-${script.name}`, style: { marginTop: 6 }, children: [_jsx("div", { className: cm.textSize('xs'), style: {
159
+ fontWeight: 600,
160
+ color: runSucceeded(run) ? '#3fb950' : '#f85149',
161
+ marginBottom: 2,
162
+ }, children: runSucceeded(run)
163
+ ? t('ide.chat.scripts.exitOk', undefined, { defaultValue: 'Exited 0' })
164
+ : t('ide.chat.scripts.exitFail', { code: run.exitCode }, { defaultValue: 'Exited {{code}}' }) }), formatRunOutput(run) ? (_jsx("pre", { className: cm.textSize('xs'), style: {
165
+ margin: 0,
166
+ padding: '6px 8px',
167
+ borderRadius: 4,
168
+ border: `1px solid ${rowBorder}`,
169
+ whiteSpace: 'pre-wrap',
170
+ wordBreak: 'break-word',
171
+ maxHeight: 200,
172
+ overflow: 'auto',
173
+ fontFamily: 'var(--mol-font-mono, monospace)',
174
+ }, children: formatRunOutput(run) })) : (_jsx("div", { className: cm.textMuted, children: t('ide.chat.scripts.noOutput', undefined, { defaultValue: '(no output)' }) }))] }))] }, script.name));
175
+ })] }));
176
+ }
177
+ //# sourceMappingURL=ScriptsCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptsCard.js","sourceRoot":"","sources":["../../src/components/ScriptsCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Search-in-files panel — provides grep-like search and replace across the project sandbox.
3
+ *
4
+ * @module
5
+ */
6
+ import type { JSX } from 'react';
7
+ import type { SearchPanelProps } from '../types.js';
8
+ /**
9
+ * Search-in-files panel for the IDE sidebar with find-and-replace support.
10
+ *
11
+ * @param props - Component props.
12
+ * @returns The search panel element.
13
+ */
14
+ export declare function SearchPanel({ projectId, onResultClick, className, excludedDirs, onExcludedDirsChange, }: SearchPanelProps): JSX.Element;
15
+ export declare namespace SearchPanel {
16
+ var displayName: string;
17
+ }
18
+ //# sourceMappingURL=SearchPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchPanel.d.ts","sourceRoot":"","sources":["../../src/components/SearchPanel.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAShC,OAAO,KAAK,EAAE,gBAAgB,EAAgC,MAAM,aAAa,CAAA;AAkRjF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,aAAa,EACb,SAAS,EACT,YAAY,EACZ,oBAAoB,GACrB,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA4ehC;yBAlfe,WAAW"}