@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,32 @@
1
+ /**
2
+ * `/share` link modal.
3
+ *
4
+ * A centered modal that creates a public share link for the current project. The
5
+ * user picks a role (viewer / commenter / editor / owner — default viewer) and
6
+ * the modal POSTs `{ role }` to `POST /projects/:projectId/shares`. The backend
7
+ * (wired in the host app) mints a slug-bearing link and returns it; the modal
8
+ * then renders the resulting URL in a read-only field with a copy-to-clipboard
9
+ * button so the user can hand it out. Opening `GET /share/:slug` grants that
10
+ * role (a `viewer` link is an unauthenticated read).
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
+ import type { ShareLinkResult, ShareRole } from './chat-share-utilities.js';
19
+ /**
20
+ * The share-link modal opened by `/share`, `/share <role>`, and the header
21
+ * share button.
22
+ *
23
+ * @param props - Component props.
24
+ * @returns The rendered share modal.
25
+ */
26
+ export declare function ShareModal({ projectId, initialRole, onClose, onCreated, }: {
27
+ projectId: string;
28
+ initialRole?: ShareRole;
29
+ onClose: () => void;
30
+ onCreated?: (result: ShareLinkResult) => void;
31
+ }): JSX.Element;
32
+ //# sourceMappingURL=ShareModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareModal.d.ts","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAShC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAY3E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,WAAgC,EAChC,OAAO,EACP,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAC9C,GAAG,GAAG,CAAC,OAAO,CAqOd"}
@@ -0,0 +1,126 @@
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 { useHttpClient, useThemeMode } from '@molecule/app-react';
6
+ import { getClassMap } from '@molecule/app-ui';
7
+ import { useCoarsePointer, useNarrowViewport } from '../hooks/useViewport.js';
8
+ import { buildSharePayload, buildShareUrl, DEFAULT_SHARE_ROLE, SHARE_ROLE_LABELS, SHARE_ROLES, } from './chat-share-utilities.js';
9
+ import { Icon } from './Icon.js';
10
+ const logger = getLogger('share-modal');
11
+ /**
12
+ * The share-link modal opened by `/share`, `/share <role>`, and the header
13
+ * share button.
14
+ *
15
+ * @param props - Component props.
16
+ * @returns The rendered share modal.
17
+ */
18
+ export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, onClose, onCreated, }) {
19
+ const cm = getClassMap();
20
+ const http = useHttpClient();
21
+ const isLight = useThemeMode() === 'light';
22
+ const [role, setRole] = useState(initialRole);
23
+ const [creating, setCreating] = useState(false);
24
+ const [created, setCreated] = useState(null);
25
+ const [copied, setCopied] = 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 border = isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)';
39
+ const fieldStyle = {
40
+ width: '100%',
41
+ padding: '6px 8px',
42
+ borderRadius: 4,
43
+ border: `1px solid ${border}`,
44
+ background: 'transparent',
45
+ color: 'inherit',
46
+ outline: 'none',
47
+ // ≥16px on phones/touch so iOS Safari doesn't zoom the page on focus
48
+ // (the role <select> and the focus-selecting link input both zoom below
49
+ // 16px; the inline size deliberately overrides cm.textSize('sm') there).
50
+ ...(isNarrow || isCoarse ? { fontSize: 16 } : {}),
51
+ };
52
+ const shareUrl = created
53
+ ? buildShareUrl(created, typeof window !== 'undefined' ? window.location.origin : '')
54
+ : '';
55
+ const handleCreate = useCallback(async () => {
56
+ if (creating)
57
+ return;
58
+ setCreating(true);
59
+ setError(null);
60
+ try {
61
+ const res = await http.post(`/projects/${projectId}/shares`, buildSharePayload(role));
62
+ setCreated(res.data);
63
+ setCopied(false);
64
+ onCreated?.(res.data);
65
+ }
66
+ catch (err) {
67
+ logger.warn('Failed to create share link', { error: err });
68
+ setError(t('ide.chat.share.error', undefined, {
69
+ defaultValue: 'Could not create a share link. Please try again.',
70
+ }));
71
+ }
72
+ finally {
73
+ setCreating(false);
74
+ }
75
+ }, [creating, http, projectId, role, onCreated]);
76
+ const handleCopy = useCallback(() => {
77
+ if (!shareUrl)
78
+ return;
79
+ void navigator.clipboard.writeText(shareUrl).then(() => {
80
+ setCopied(true);
81
+ setTimeout(() => setCopied(false), 1500);
82
+ }, (err) => {
83
+ // Clipboard can be blocked (permissions / insecure context); the link
84
+ // is still visible and selectable in the field, so this is recoverable.
85
+ logger.warn('Clipboard write failed', { error: err });
86
+ });
87
+ }, [shareUrl]);
88
+ return (_jsx("div", { "data-mol-id": "share-modal-backdrop", onClick: onClose, style: {
89
+ position: 'fixed',
90
+ inset: 0,
91
+ // Dialog layer (1300) — must paint above ambient status chrome like the
92
+ // host's HealthBanner (z 1100), which otherwise overlaps this on phones.
93
+ zIndex: 1300,
94
+ display: 'flex',
95
+ alignItems: 'center',
96
+ justifyContent: 'center',
97
+ background: 'rgba(0,0,0,0.45)',
98
+ padding: 16,
99
+ }, children: _jsxs("div", { "data-mol-id": "share-modal", role: "dialog", "aria-modal": "true", "aria-label": t('ide.chat.share.heading', undefined, { defaultValue: 'Share project' }), onClick: (e) => e.stopPropagation(), className: cm.cn(cm.surface, cm.borderAll, cm.textSize('sm')), style: {
100
+ width: '100%',
101
+ maxWidth: 460,
102
+ maxHeight: '85vh',
103
+ overflowY: 'auto',
104
+ borderRadius: 8,
105
+ padding: 16,
106
+ boxShadow: '0 10px 40px rgba(0,0,0,0.35)',
107
+ }, children: [_jsx("div", { className: cm.cn(cm.fontWeight('medium'), cm.textSize('lg')), style: { marginBottom: 4 }, children: t('ide.chat.share.heading', undefined, { defaultValue: 'Share project' }) }), _jsx("div", { className: cm.textMuted, style: { marginBottom: 12, lineHeight: 1.4 }, children: t('ide.chat.share.subheading', undefined, {
108
+ defaultValue: 'Create a public link. Anyone with the link gets the role you choose — a viewer link is read-only.',
109
+ }) }), _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.share.roleLabel', undefined, { defaultValue: 'Role' }) }), _jsx("select", { value: role, "data-mol-id": "share-role", onChange: (e) => setRole(e.target.value), className: cm.textSize('sm'), style: fieldStyle, children: SHARE_ROLES.map((r) => (_jsx("option", { value: r, children: t(`ide.chat.share.role.${r}`, undefined, { defaultValue: SHARE_ROLE_LABELS[r] }) }, r))) })] }), created && (_jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.share.linkLabel', undefined, { defaultValue: 'Public link' }) }), _jsxs("div", { style: { display: 'flex', gap: 8, alignItems: 'stretch' }, children: [_jsx("input", { value: shareUrl, "data-mol-id": "share-link", readOnly: true, onFocus: (e) => e.currentTarget.select(), className: cm.textSize('sm'), style: { ...fieldStyle, flex: 1 } }), _jsxs("button", { type: "button", "data-mol-id": "share-copy", onClick: handleCopy, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), title: t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), "aria-label": t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), style: { flexShrink: 0, display: 'inline-flex', alignItems: 'center', gap: 6 }, children: [_jsx(Icon, { name: copied ? 'check' : 'copy', size: 14, "aria-hidden": "true" }), copied
110
+ ? t('ide.chat.share.copied', undefined, { defaultValue: 'Copied' })
111
+ : t('ide.chat.share.copyShort', undefined, { defaultValue: 'Copy' })] })] }), _jsx("span", { className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { lineHeight: 1.4 }, children: t(`ide.chat.share.grants.${created.role}`, { role: created.role }, {
112
+ defaultValue: 'Anyone with this link can act as {{role}}.',
113
+ }) })] })), error && (_jsx("div", { "data-mol-id": "share-error", className: cm.textError, style: { lineHeight: 1.4 }, children: error }))] }), _jsxs("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, marginTop: 16 }, children: [_jsx("button", { type: "button", "data-mol-id": "share-close", onClick: onClose, className: cm.cn(cm.button({ variant: 'ghost', size: 'sm' })), children: created
114
+ ? t('common.done', undefined, { defaultValue: 'Done' })
115
+ : t('common.cancel', undefined, { defaultValue: 'Cancel' }) }), _jsxs("button", { type: "button", "data-mol-id": "share-create", onClick: () => void handleCreate(), disabled: creating, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), style: {
116
+ opacity: creating ? 0.6 : 1,
117
+ display: 'inline-flex',
118
+ alignItems: 'center',
119
+ gap: 6,
120
+ }, children: [_jsx(Icon, { name: "share", size: 14, "aria-hidden": "true" }), creating
121
+ ? t('ide.chat.share.creating', undefined, { defaultValue: 'Creating…' })
122
+ : created
123
+ ? t('ide.chat.share.createAnother', undefined, { defaultValue: 'Create new link' })
124
+ : t('ide.chat.share.create', undefined, { defaultValue: 'Create link' })] })] })] }) }));
125
+ }
126
+ //# sourceMappingURL=ShareModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareModal.js","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Sidebar tab switcher — toggles between file explorer and search panel.
3
+ *
4
+ * @module
5
+ */
6
+ import type { JSX } from 'react';
7
+ import type { SidebarTabsProps } from '../types.js';
8
+ /**
9
+ * Sidebar tab strip with file explorer and search icons.
10
+ *
11
+ * @param props - Component props.
12
+ * @returns The sidebar tabs element.
13
+ */
14
+ export declare function SidebarTabs({ activeTab, onTabChange, children, className, }: SidebarTabsProps): JSX.Element;
15
+ export declare namespace SidebarTabs {
16
+ var displayName: string;
17
+ }
18
+ //# sourceMappingURL=SidebarTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarTabs.d.ts","sourceRoot":"","sources":["../../src/components/SidebarTabs.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAsEhC;yBA3Ee,WAAW"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { t } from '@molecule/app-i18n';
3
+ import { getClassMap } from '@molecule/app-ui';
4
+ import { useCoarsePointer } from '../hooks/useViewport.js';
5
+ import { Icon } from './Icon.js';
6
+ /**
7
+ * Sidebar tab strip with file explorer and search icons.
8
+ *
9
+ * @param props - Component props.
10
+ * @returns The sidebar tabs element.
11
+ */
12
+ export function SidebarTabs({ activeTab, onTabChange, children, className, }) {
13
+ const cm = getClassMap();
14
+ // ≥44px tab buttons on touch-first devices (WCAG tap-target floor for
15
+ // standalone controls); compact 32px on pointer devices (unchanged).
16
+ const tabHeight = useCoarsePointer() ? '44px' : '32px';
17
+ return (_jsxs("div", { className: cm.cn(cm.h('full'), cm.borderR, className), style: { display: 'flex', flexDirection: 'column' }, children: [_jsxs("div", { className: cm.cn(cm.flex({ direction: 'row', align: 'center' }), cm.shrink0, cm.surfaceSecondary, cm.borderB), children: [_jsx("button", { type: "button", onClick: () => onTabChange('files'), title: t('ide.sidebar.files', undefined, { defaultValue: 'Explorer' }), "aria-label": t('ide.sidebar.files', undefined, { defaultValue: 'Explorer' }), style: { userSelect: 'none', height: tabHeight, flex: 1, justifyContent: 'center' }, className: cm.cn(cm.flex({ direction: 'row', align: 'center', gap: 'xs' }), cm.sp('px', 3), cm.textSize('sm'), cm.shrink0, cm.cursorPointer, cm.borderR, activeTab === 'files' && cm.surface, activeTab === 'files' && cm.borderBPrimary), children: _jsx(Icon, { name: "folder", size: 16, "aria-hidden": "true", style: { opacity: activeTab === 'files' ? 1 : 0.6 } }) }), _jsx("button", { type: "button", onClick: () => onTabChange('search'), title: t('ide.sidebar.search', undefined, { defaultValue: 'Search' }), "aria-label": t('ide.sidebar.search', undefined, { defaultValue: 'Search' }), style: { userSelect: 'none', height: tabHeight, flex: 1, justifyContent: 'center' }, className: cm.cn(cm.flex({ direction: 'row', align: 'center', gap: 'xs' }), cm.sp('px', 3), cm.textSize('sm'), cm.shrink0, cm.cursorPointer, activeTab === 'search' && cm.surface, activeTab === 'search' && cm.borderBPrimary), children: _jsx(Icon, { name: "search", size: 16, "aria-hidden": "true", style: { opacity: activeTab === 'search' ? 1 : 0.6 } }) })] }), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto' }, children: children })] }));
18
+ }
19
+ SidebarTabs.displayName = 'SidebarTabs';
20
+ //# sourceMappingURL=SidebarTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarTabs.js","sourceRoot":"","sources":["../../src/components/SidebarTabs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * `/skills` browser + skill authoring.
3
+ *
4
+ * Renders an in-timeline card listing the project's skills (Markdown files
5
+ * under `.agents/skills/` with `name`/`description` frontmatter), discovered
6
+ * via the SAME file-list / file-content API the chat uses for `@`-mentions.
7
+ * A search box filters by name/description/path (seeded from `/skills <query>`),
8
+ * and the skill NAME itself is a clickable link that opens the skill in the editor
9
+ * (it does NOT attach it as message context — the agent already sees every skill's
10
+ * name + description and reads bodies on demand). A not-yet-loaded skill also shows
11
+ * a blue "Load" button (the same open action) in its right-hand action group; a
12
+ * skill that's ALREADY loaded — default-loaded (always-on) or opened this session —
13
+ * HIDES that Load button and shows a blue "Loaded" pill next to its name instead.
14
+ * Each row also shows a green "Default" badge for skills in the persisted
15
+ * per-project default-loaded set, and offers a star toggle (the rightmost element
16
+ * of the action group) to add/remove a skill from that set — whose full body the
17
+ * backend then injects into every conversation. When that set has been narrowed to an explicit
18
+ * subset, a header "Load all by default" control resets it to the implicit
19
+ * all-skills-default state (the only way back through the one-way door the first
20
+ * explicit toggle would otherwise be).
21
+ *
22
+ * It also hosts the skill-authoring affordance: a "New skill" button that, when
23
+ * clicked, opens a create form BELOW the header (the "New skill" button hides
24
+ * while the form is open) — a column with the name input on its OWN row at full
25
+ * width, then a right-aligned bottom action row `[Cancel] [Create]` (matching
26
+ * ScriptsCard's create form for a consistent layout across both overlay cards).
27
+ * Submit calls `onCreate`, and the freshly created skill is added to the list
28
+ * immediately. The card can also mount with that form already open
29
+ * (`startCreating`).
30
+ *
31
+ * The "New skill" button carries a hint via the framework's REAL styled
32
+ * {@link Tooltip} (instant, theme-aware, focus/hover-aware) — never the delayed,
33
+ * touch-blind native `title`. The per-row actions are self-explanatory and carry
34
+ * NO hover hint: "Load" is a solid blue (`solid`/`primary`) button (shown only
35
+ * while the skill is NOT yet loaded — once loaded it's hidden in favour of the
36
+ * blue "Loaded" pill by the name), and the default toggle is a star {@link Icon}
37
+ * that renders FILLED ({@link Icon} `star`) when the skill is in the default-loaded
38
+ * set and HOLLOW (`star-outline`) when it is not — so seeded defaults read as
39
+ * default on first view, no click required. The icon-only toggle carries an
40
+ * `aria-label` for accessibility. Glyphs are always real SVGs from the bonded
41
+ * icon set, never unicode characters.
42
+ *
43
+ * Styling uses `getClassMap()` (`cm.*`); the only inline styles are layout the
44
+ * ClassMap can't express.
45
+ *
46
+ * @module
47
+ */
48
+ import type { JSX } from 'react';
49
+ import type { SkillInfo } from './chat-skills-utilities.js';
50
+ /**
51
+ * The skills browser shown by `/skills`, with the skill-authoring create form.
52
+ *
53
+ * @param props - Component props.
54
+ * skill (or `null` on failure). When omitted, the "New skill" affordance is hidden.
55
+ * open.
56
+ * hides its "Load" button and shows the blue "Loaded" pill by its name (same as a
57
+ * default-loaded skill). Defaults to empty.
58
+ * set (`settings.defaultSkills`) — each shows a green "Default" badge and a filled star toggle.
59
+ * Defaults to empty.
60
+ * omitted the per-row default toggle is hidden.
61
+ * "all skills are default" state (P3-11); when omitted the reset affordance is hidden.
62
+ * set (vs the implicit unset→all). The header reset affordance shows only when this is `true`,
63
+ * so there's a visible way back from the otherwise one-way door of the first explicit toggle.
64
+ * (which already provides the `cm.surface` background + border + a header bar with the title and
65
+ * ✕). The card then renders transparent — dropping its own `cm.surfaceSecondary` fill, outer
66
+ * margin, border-radius, and its redundant "Skills" heading — so the overlay reads as ONE clean
67
+ * surface (like the /sounds popup) instead of a nested gray card. The inner padding is kept so
68
+ * content isn't flush to the edge. When `false`/omitted (the inline-timeline render path) the
69
+ * card keeps its full card chrome unchanged.
70
+ * @returns The rendered skills card.
71
+ */
72
+ export declare function SkillsCard({ projectId, initialQuery, onLoad, onCreate, startCreating, loadedSkillPaths, defaultSkillPaths, onToggleDefault, onResetDefault, defaultsExplicit, isLight, embedded, }: {
73
+ projectId: string;
74
+ initialQuery: string;
75
+ onLoad: (skill: SkillInfo) => void;
76
+ onCreate?: (name: string) => Promise<SkillInfo | null>;
77
+ startCreating?: boolean;
78
+ loadedSkillPaths?: ReadonlySet<string>;
79
+ defaultSkillPaths?: ReadonlySet<string>;
80
+ onToggleDefault?: (skill: SkillInfo, next: boolean) => void;
81
+ onResetDefault?: () => void;
82
+ defaultsExplicit?: boolean;
83
+ isLight: boolean;
84
+ embedded?: boolean;
85
+ }): JSX.Element;
86
+ //# sourceMappingURL=SkillsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillsCard.d.ts","sourceRoot":"","sources":["../../src/components/SkillsCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EAAiB,GAAG,EAAE,MAAM,OAAO,CAAA;AAU/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAuC3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IACtD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACtC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3D,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,GAAG,CAAC,OAAO,CA0Yd"}
@@ -0,0 +1,227 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { t } from '@molecule/app-i18n';
4
+ import { getLogger } from '@molecule/app-logger';
5
+ import { useHttpClient } from '@molecule/app-react';
6
+ import { getClassMap } from '@molecule/app-ui';
7
+ import { Tooltip } from '@molecule/app-ui-react/components/Tooltip.js';
8
+ import { chatCardStyle } from './chat-card-style.js';
9
+ import { filterSkills, loadProjectSkillsResilient } from './chat-skills-utilities.js';
10
+ import { Icon } from './Icon.js';
11
+ const logger = getLogger('skills-card');
12
+ /**
13
+ * Inline pill style for the row badges, tinted with the given theme color var via
14
+ * `color-mix` (the hex in the var is only the CSS-var fallback, the established
15
+ * TipCard convention) — never a hardcoded color. It's an inline style because a
16
+ * tinted pill is layout/tint ClassMap can't express. The blue "Loaded" pill passes
17
+ * `var(--mol-color-primary, …)` and the green "Default" pill passes
18
+ * `var(--mol-color-success, …)`, so the two badges read as distinct at a glance.
19
+ *
20
+ * @param baseColor - The CSS color (a theme var with hex fallback) to tint the pill
21
+ * text, border, and background with.
22
+ * @returns The badge's inline style.
23
+ */
24
+ function skillBadgeStyle(baseColor) {
25
+ return {
26
+ flexShrink: 0,
27
+ padding: '0 6px',
28
+ borderRadius: 999,
29
+ fontSize: 10,
30
+ lineHeight: '15px',
31
+ fontWeight: 600,
32
+ color: baseColor,
33
+ border: `1px solid color-mix(in srgb, ${baseColor} 45%, transparent)`,
34
+ background: `color-mix(in srgb, ${baseColor} 16%, transparent)`,
35
+ };
36
+ }
37
+ /**
38
+ * The skills browser shown by `/skills`, with the skill-authoring create form.
39
+ *
40
+ * @param props - Component props.
41
+ * skill (or `null` on failure). When omitted, the "New skill" affordance is hidden.
42
+ * open.
43
+ * hides its "Load" button and shows the blue "Loaded" pill by its name (same as a
44
+ * default-loaded skill). Defaults to empty.
45
+ * set (`settings.defaultSkills`) — each shows a green "Default" badge and a filled star toggle.
46
+ * Defaults to empty.
47
+ * omitted the per-row default toggle is hidden.
48
+ * "all skills are default" state (P3-11); when omitted the reset affordance is hidden.
49
+ * set (vs the implicit unset→all). The header reset affordance shows only when this is `true`,
50
+ * so there's a visible way back from the otherwise one-way door of the first explicit toggle.
51
+ * (which already provides the `cm.surface` background + border + a header bar with the title and
52
+ * ✕). The card then renders transparent — dropping its own `cm.surfaceSecondary` fill, outer
53
+ * margin, border-radius, and its redundant "Skills" heading — so the overlay reads as ONE clean
54
+ * surface (like the /sounds popup) instead of a nested gray card. The inner padding is kept so
55
+ * content isn't flush to the edge. When `false`/omitted (the inline-timeline render path) the
56
+ * card keeps its full card chrome unchanged.
57
+ * @returns The rendered skills card.
58
+ */
59
+ export function SkillsCard({ projectId, initialQuery, onLoad, onCreate, startCreating, loadedSkillPaths, defaultSkillPaths, onToggleDefault, onResetDefault, defaultsExplicit, isLight, embedded, }) {
60
+ const cm = getClassMap();
61
+ const http = useHttpClient();
62
+ const [status, setStatus] = useState('loading');
63
+ const [skills, setSkills] = useState([]);
64
+ const [query, setQuery] = useState(initialQuery);
65
+ const [creating, setCreating] = useState(!!startCreating && !!onCreate);
66
+ const [newName, setNewName] = useState('');
67
+ const [busy, setBusy] = useState(false);
68
+ useEffect(() => {
69
+ let cancelled = false;
70
+ setStatus('loading');
71
+ void (async () => {
72
+ try {
73
+ const { skills: loaded, stillBooting } = await loadProjectSkillsResilient(async () => (await http.get(`/projects/${projectId}/files-list`)).data.files ??
74
+ [], async (relativePath) => (await http.get(`/projects/${projectId}/files/${relativePath}`))
75
+ .data.content, {
76
+ isCancelled: () => cancelled,
77
+ // First empty/failed try → flip to the honest "waiting for the sandbox"
78
+ // state while we keep retrying, instead of a misleading "No skills found".
79
+ onRetry: () => {
80
+ if (!cancelled)
81
+ setStatus('waiting');
82
+ },
83
+ });
84
+ if (cancelled)
85
+ return;
86
+ setSkills(loaded);
87
+ // A bounded retry that still came back empty means the sandbox never
88
+ // finished scaffolding skills in our window — keep the "waiting" state so
89
+ // the user sees an honest "still starting" message, not "no skills found".
90
+ setStatus(loaded.length === 0 && stillBooting ? 'waiting' : 'ready');
91
+ }
92
+ catch (error) {
93
+ logger.warn('Failed to load project skills', { error });
94
+ if (!cancelled)
95
+ setStatus('error');
96
+ }
97
+ })();
98
+ return () => {
99
+ cancelled = true;
100
+ };
101
+ }, [http, projectId]);
102
+ const filtered = useMemo(() => filterSkills(skills, query), [skills, query]);
103
+ const rowBorder = isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)';
104
+ // A subtle neutral inset so the text inputs READ as fields on the clean
105
+ // overlay surface (not just a faint border). Theme-aware, matching the
106
+ // SettingsCard toggle inset; the SAME value is used in ScriptsCard's fields.
107
+ const fieldBg = isLight ? 'rgba(0,0,0,0.05)' : 'rgba(255,255,255,0.06)';
108
+ /**
109
+ * Submits the inline "New skill" form: delegates creation to `onCreate`, and on
110
+ * success adds the new skill to the list (so it appears without a re-fetch),
111
+ * clears any active filter so it's visible, and closes the form.
112
+ */
113
+ async function submitNewSkill() {
114
+ const name = newName.trim();
115
+ if (!name || !onCreate || busy)
116
+ return;
117
+ setBusy(true);
118
+ try {
119
+ const created = await onCreate(name);
120
+ if (created) {
121
+ setSkills((prev) => prev.some((s) => s.path === created.path)
122
+ ? prev
123
+ : [...prev, created].sort((a, b) => a.name.localeCompare(b.name)));
124
+ setQuery('');
125
+ setNewName('');
126
+ setCreating(false);
127
+ }
128
+ }
129
+ finally {
130
+ setBusy(false);
131
+ }
132
+ }
133
+ return (_jsxs("div", { "data-mol-id": "skills-card", className: cm.textSize('xs'),
134
+ // Non-embedded (inline in the chat timeline) shares the same card chrome as
135
+ // every other info card: subtle primary tint + a uniform 1px border on all
136
+ // sides (chat-card-style). Embedded in an overlay it stays chrome-less.
137
+ style: embedded ? { padding: '10px 12px' } : { ...chatCardStyle(), marginBottom: 16 }, children: [_jsxs("div", { style: {
138
+ display: 'flex',
139
+ alignItems: 'center',
140
+ justifyContent: 'space-between',
141
+ gap: 8,
142
+ marginBottom: 6,
143
+ }, children: [_jsxs("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.skills.heading', undefined, { defaultValue: 'Skills' }) })), onResetDefault && defaultsExplicit && (_jsx("button", { type: "button", "data-mol-id": "skill-reset-defaults", onClick: () => onResetDefault(), className: cm.cn(cm.button({ variant: 'ghost', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.skills.resetDefaults', undefined, {
144
+ defaultValue: 'Load all by default',
145
+ }) }))] }), onCreate && !creating && (_jsx(Tooltip, { content: t('ide.chat.skills.newTitle', undefined, {
146
+ defaultValue: 'Create a new project skill',
147
+ }), placement: "top", children: _jsx("button", { type: "button", "data-mol-id": "skill-new", onClick: () => setCreating(true), className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.skills.new', undefined, { defaultValue: 'New skill' }) }) }))] }), onCreate && creating && (_jsxs("form", { "data-mol-id": "skill-create-form", onSubmit: (e) => {
148
+ e.preventDefault();
149
+ void submitNewSkill();
150
+ }, className: cm.borderT, style: {
151
+ display: 'flex',
152
+ flexDirection: 'column',
153
+ gap: 6,
154
+ padding: '8px 0',
155
+ marginTop: 6,
156
+ borderColor: rowBorder,
157
+ }, children: [_jsx("input", { autoFocus: true, value: newName, "data-mol-id": "skill-create-name", onChange: (e) => setNewName(e.target.value), placeholder: t('ide.chat.skills.newPlaceholder', undefined, {
158
+ defaultValue: 'New skill name…',
159
+ }), className: cm.cn(cm.textSize('xs')), style: {
160
+ width: '100%',
161
+ padding: '4px 6px',
162
+ borderRadius: 4,
163
+ border: `1px solid ${rowBorder}`,
164
+ background: fieldBg,
165
+ color: 'inherit',
166
+ outline: 'none',
167
+ } }), _jsxs("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 6 }, children: [_jsx("button", { type: "button", "data-mol-id": "skill-create-cancel", onClick: () => {
168
+ setCreating(false);
169
+ setNewName('');
170
+ }, className: cm.cn(cm.button({ variant: 'ghost', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.skills.cancel', undefined, { defaultValue: 'Cancel' }) }), _jsx("button", { type: "submit", "data-mol-id": "skill-create-submit", disabled: !newName.trim() || busy, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.skills.create', undefined, { defaultValue: 'Create' }) })] })] })), _jsx("input", { value: query, "data-mol-id": "skills-search", onChange: (e) => setQuery(e.target.value), placeholder: t('ide.chat.skills.searchPlaceholder', undefined, {
171
+ defaultValue: 'Filter skills…',
172
+ }), className: cm.cn(cm.textSize('xs')), style: {
173
+ width: '100%',
174
+ padding: '4px 6px',
175
+ marginBottom: 6,
176
+ borderRadius: 4,
177
+ border: `1px solid ${rowBorder}`,
178
+ background: fieldBg,
179
+ color: 'inherit',
180
+ outline: 'none',
181
+ } }), status === 'loading' && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: t('ide.chat.skills.loading', undefined, { defaultValue: 'Loading skills…' }) })), status === 'waiting' && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: t('ide.chat.skills.waitingForSandbox', undefined, {
182
+ defaultValue: 'Waiting for the sandbox to finish starting…',
183
+ }) })), status === 'error' && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: t('ide.chat.skills.error', undefined, {
184
+ defaultValue: 'Could not load skills for this project.',
185
+ }) })), status === 'ready' && filtered.length === 0 && (_jsx("div", { className: cm.textMuted, style: { padding: '6px 0' }, children: query.trim()
186
+ ? t('ide.chat.skills.noMatch', { query: query.trim() }, { defaultValue: 'No skills match “{{query}}”.' })
187
+ : t('ide.chat.skills.empty', undefined, {
188
+ defaultValue: 'No skills found in .agents/skills/ for this project.',
189
+ }) })), status === 'ready' &&
190
+ filtered.map((skill) => {
191
+ const isLoaded = loadedSkillPaths?.has(skill.path) ?? false;
192
+ const isDefault = defaultSkillPaths?.has(skill.path) ?? false;
193
+ // "Loaded" = already in context: either default-loaded (always-on) or opened
194
+ // this session. The Load action is then done, so the right-hand "Load" button
195
+ // is HIDDEN and a blue "Loaded" pill surfaces next to the name instead.
196
+ const alreadyLoaded = isLoaded || isDefault;
197
+ return (_jsxs("div", { "data-mol-id": `skill-row-${skill.name}`, className: cm.borderT, style: {
198
+ display: 'flex',
199
+ alignItems: 'flex-start',
200
+ gap: 8,
201
+ padding: '6px 0',
202
+ borderColor: rowBorder,
203
+ }, children: [_jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 6, flexWrap: 'wrap' }, children: [_jsx("button", { type: "button", "data-mol-id": `skill-open-${skill.name}`, onClick: () => onLoad(skill), className: cm.fontWeight('medium'), style: {
204
+ padding: 0,
205
+ margin: 0,
206
+ border: 'none',
207
+ background: 'transparent',
208
+ font: 'inherit',
209
+ fontWeight: 500,
210
+ textAlign: 'left',
211
+ color: 'var(--mol-color-primary, #6366f1)',
212
+ cursor: 'pointer',
213
+ }, children: skill.name }), isDefault && (_jsx("span", { "data-mol-id": `skill-default-badge-${skill.name}`, style: skillBadgeStyle('var(--mol-color-success, #22c55e)'), children: t('ide.chat.skills.defaultBadge', undefined, { defaultValue: 'Default' }) })), alreadyLoaded && (_jsx("span", { "data-mol-id": `skill-loaded-badge-${skill.name}`, style: skillBadgeStyle('var(--mol-color-primary, #6366f1)'), children: t('ide.chat.skills.loadedBadge', undefined, { defaultValue: 'Loaded' }) }))] }), skill.description && (_jsx("div", { className: cm.textMuted, style: { marginTop: 2, lineHeight: 1.4 }, children: skill.description }))] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 6, flexShrink: 0 }, children: [!alreadyLoaded && (_jsx("button", { type: "button", "data-mol-id": `skill-load-${skill.name}`, onClick: () => onLoad(skill), className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' })), style: { flexShrink: 0 }, children: t('ide.chat.skills.load', undefined, { defaultValue: 'Load' }) })), onToggleDefault && (_jsx("button", { type: "button", "data-mol-id": `skill-default-${skill.name}`, "aria-pressed": isDefault, "aria-label": isDefault
214
+ ? t('ide.chat.skills.unsetDefault', undefined, {
215
+ defaultValue: 'Stop loading by default',
216
+ })
217
+ : t('ide.chat.skills.setDefault', undefined, {
218
+ defaultValue: 'Load by default',
219
+ }), onClick: () => onToggleDefault(skill, !isDefault), className: cm.cn(cm.button({ variant: 'ghost', size: 'xs' })), style: {
220
+ flexShrink: 0,
221
+ display: 'inline-flex',
222
+ alignItems: 'center',
223
+ justifyContent: 'center',
224
+ }, children: _jsx(Icon, { name: isDefault ? 'star' : 'star-outline', size: 13, "aria-hidden": "true", style: { color: 'var(--mol-color-primary, #6366f1)' } }) }))] })] }, skill.path));
225
+ })] }));
226
+ }
227
+ //# sourceMappingURL=SkillsCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillsCard.js","sourceRoot":"","sources":["../../src/components/SkillsCard.tsx"],"names":[],"mappings":"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"}