@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.
- package/LICENSE +115 -0
- package/dist/chatTimelineOrdering.d.ts +50 -0
- package/dist/chatTimelineOrdering.d.ts.map +1 -0
- package/dist/chatTimelineOrdering.js +46 -0
- package/dist/chatTimelineOrdering.js.map +1 -0
- package/dist/command-metadata.d.ts +78 -0
- package/dist/command-metadata.d.ts.map +1 -0
- package/dist/command-metadata.js +214 -0
- package/dist/command-metadata.js.map +1 -0
- package/dist/components/ActivityCard.d.ts +28 -0
- package/dist/components/ActivityCard.d.ts.map +1 -0
- package/dist/components/ActivityCard.js +62 -0
- package/dist/components/ActivityCard.js.map +1 -0
- package/dist/components/AutoCommitBadge.d.ts +58 -0
- package/dist/components/AutoCommitBadge.d.ts.map +1 -0
- package/dist/components/AutoCommitBadge.js +78 -0
- package/dist/components/AutoCommitBadge.js.map +1 -0
- package/dist/components/ChatPanel.d.ts +184 -0
- package/dist/components/ChatPanel.d.ts.map +1 -0
- package/dist/components/ChatPanel.js +6691 -0
- package/dist/components/ChatPanel.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +18 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +33 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/DeviceFrameSelector.d.ts +60 -0
- package/dist/components/DeviceFrameSelector.d.ts.map +1 -0
- package/dist/components/DeviceFrameSelector.js +230 -0
- package/dist/components/DeviceFrameSelector.js.map +1 -0
- package/dist/components/EditorPanel.d.ts +17 -0
- package/dist/components/EditorPanel.d.ts.map +1 -0
- package/dist/components/EditorPanel.js +241 -0
- package/dist/components/EditorPanel.js.map +1 -0
- package/dist/components/FileExplorer.d.ts +64 -0
- package/dist/components/FileExplorer.d.ts.map +1 -0
- package/dist/components/FileExplorer.js +1111 -0
- package/dist/components/FileExplorer.js.map +1 -0
- package/dist/components/FileExplorerContextMenu.d.ts +37 -0
- package/dist/components/FileExplorerContextMenu.d.ts.map +1 -0
- package/dist/components/FileExplorerContextMenu.js +241 -0
- package/dist/components/FileExplorerContextMenu.js.map +1 -0
- package/dist/components/HelpCard.d.ts +34 -0
- package/dist/components/HelpCard.d.ts.map +1 -0
- package/dist/components/HelpCard.js +28 -0
- package/dist/components/HelpCard.js.map +1 -0
- package/dist/components/Icon.d.ts +50 -0
- package/dist/components/Icon.d.ts.map +1 -0
- package/dist/components/Icon.js +25 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/KeyboardShortcutsPanel.d.ts +19 -0
- package/dist/components/KeyboardShortcutsPanel.d.ts.map +1 -0
- package/dist/components/KeyboardShortcutsPanel.js +187 -0
- package/dist/components/KeyboardShortcutsPanel.js.map +1 -0
- package/dist/components/MarkdownContent.d.ts +52 -0
- package/dist/components/MarkdownContent.d.ts.map +1 -0
- package/dist/components/MarkdownContent.js +303 -0
- package/dist/components/MarkdownContent.js.map +1 -0
- package/dist/components/ModelsTable.d.ts +38 -0
- package/dist/components/ModelsTable.d.ts.map +1 -0
- package/dist/components/ModelsTable.js +96 -0
- package/dist/components/ModelsTable.js.map +1 -0
- package/dist/components/PreviewPanel.d.ts +66 -0
- package/dist/components/PreviewPanel.d.ts.map +1 -0
- package/dist/components/PreviewPanel.js +1752 -0
- package/dist/components/PreviewPanel.js.map +1 -0
- package/dist/components/QuickOpen.d.ts +20 -0
- package/dist/components/QuickOpen.d.ts.map +1 -0
- package/dist/components/QuickOpen.js +72 -0
- package/dist/components/QuickOpen.js.map +1 -0
- package/dist/components/QuickPicker.d.ts +21 -0
- package/dist/components/QuickPicker.d.ts.map +1 -0
- package/dist/components/QuickPicker.js +174 -0
- package/dist/components/QuickPicker.js.map +1 -0
- package/dist/components/RelevantSkillSuggestion.d.ts +41 -0
- package/dist/components/RelevantSkillSuggestion.d.ts.map +1 -0
- package/dist/components/RelevantSkillSuggestion.js +85 -0
- package/dist/components/RelevantSkillSuggestion.js.map +1 -0
- package/dist/components/ReportModal.d.ts +35 -0
- package/dist/components/ReportModal.d.ts.map +1 -0
- package/dist/components/ReportModal.js +112 -0
- package/dist/components/ReportModal.js.map +1 -0
- package/dist/components/ResizeHandle.d.ts +21 -0
- package/dist/components/ResizeHandle.d.ts.map +1 -0
- package/dist/components/ResizeHandle.js +109 -0
- package/dist/components/ResizeHandle.js.map +1 -0
- package/dist/components/ScriptsCard.d.ts +37 -0
- package/dist/components/ScriptsCard.d.ts.map +1 -0
- package/dist/components/ScriptsCard.js +177 -0
- package/dist/components/ScriptsCard.js.map +1 -0
- package/dist/components/SearchPanel.d.ts +18 -0
- package/dist/components/SearchPanel.d.ts.map +1 -0
- package/dist/components/SearchPanel.js +449 -0
- package/dist/components/SearchPanel.js.map +1 -0
- package/dist/components/SettingsCard.d.ts +49 -0
- package/dist/components/SettingsCard.d.ts.map +1 -0
- package/dist/components/SettingsCard.js +59 -0
- package/dist/components/SettingsCard.js.map +1 -0
- package/dist/components/ShareModal.d.ts +32 -0
- package/dist/components/ShareModal.d.ts.map +1 -0
- package/dist/components/ShareModal.js +126 -0
- package/dist/components/ShareModal.js.map +1 -0
- package/dist/components/SidebarTabs.d.ts +18 -0
- package/dist/components/SidebarTabs.d.ts.map +1 -0
- package/dist/components/SidebarTabs.js +20 -0
- package/dist/components/SidebarTabs.js.map +1 -0
- package/dist/components/SkillsCard.d.ts +86 -0
- package/dist/components/SkillsCard.d.ts.map +1 -0
- package/dist/components/SkillsCard.js +227 -0
- package/dist/components/SkillsCard.js.map +1 -0
- package/dist/components/StreamingIndicator.d.ts +50 -0
- package/dist/components/StreamingIndicator.d.ts.map +1 -0
- package/dist/components/StreamingIndicator.js +142 -0
- package/dist/components/StreamingIndicator.js.map +1 -0
- package/dist/components/TabBar.d.ts +37 -0
- package/dist/components/TabBar.d.ts.map +1 -0
- package/dist/components/TabBar.js +187 -0
- package/dist/components/TabBar.js.map +1 -0
- package/dist/components/TipCard.d.ts +22 -0
- package/dist/components/TipCard.d.ts.map +1 -0
- package/dist/components/TipCard.js +73 -0
- package/dist/components/TipCard.js.map +1 -0
- package/dist/components/ToolCallCard.d.ts +18 -0
- package/dist/components/ToolCallCard.d.ts.map +1 -0
- package/dist/components/ToolCallCard.js +716 -0
- package/dist/components/ToolCallCard.js.map +1 -0
- package/dist/components/UserAvatar.d.ts +45 -0
- package/dist/components/UserAvatar.d.ts.map +1 -0
- package/dist/components/UserAvatar.js +80 -0
- package/dist/components/UserAvatar.js.map +1 -0
- package/dist/components/WorkspaceLayout.d.ts +19 -0
- package/dist/components/WorkspaceLayout.d.ts.map +1 -0
- package/dist/components/WorkspaceLayout.js +56 -0
- package/dist/components/WorkspaceLayout.js.map +1 -0
- package/dist/components/activity-utilities.d.ts +107 -0
- package/dist/components/activity-utilities.d.ts.map +1 -0
- package/dist/components/activity-utilities.js +154 -0
- package/dist/components/activity-utilities.js.map +1 -0
- package/dist/components/chat-autocommit-utilities.d.ts +172 -0
- package/dist/components/chat-autocommit-utilities.d.ts.map +1 -0
- package/dist/components/chat-autocommit-utilities.js +185 -0
- package/dist/components/chat-autocommit-utilities.js.map +1 -0
- package/dist/components/chat-card-style.d.ts +64 -0
- package/dist/components/chat-card-style.d.ts.map +1 -0
- package/dist/components/chat-card-style.js +74 -0
- package/dist/components/chat-card-style.js.map +1 -0
- package/dist/components/chat-commands.d.ts +17 -0
- package/dist/components/chat-commands.d.ts.map +1 -0
- package/dist/components/chat-commands.js +17 -0
- package/dist/components/chat-commands.js.map +1 -0
- package/dist/components/chat-commit-utilities.d.ts +29 -0
- package/dist/components/chat-commit-utilities.d.ts.map +1 -0
- package/dist/components/chat-commit-utilities.js +31 -0
- package/dist/components/chat-commit-utilities.js.map +1 -0
- package/dist/components/chat-cost-utilities.d.ts +62 -0
- package/dist/components/chat-cost-utilities.d.ts.map +1 -0
- package/dist/components/chat-cost-utilities.js +66 -0
- package/dist/components/chat-cost-utilities.js.map +1 -0
- package/dist/components/chat-effort-utilities.d.ts +96 -0
- package/dist/components/chat-effort-utilities.d.ts.map +1 -0
- package/dist/components/chat-effort-utilities.js +97 -0
- package/dist/components/chat-effort-utilities.js.map +1 -0
- package/dist/components/chat-help-utilities.d.ts +89 -0
- package/dist/components/chat-help-utilities.d.ts.map +1 -0
- package/dist/components/chat-help-utilities.js +131 -0
- package/dist/components/chat-help-utilities.js.map +1 -0
- package/dist/components/chat-model-mode-utilities.d.ts +143 -0
- package/dist/components/chat-model-mode-utilities.d.ts.map +1 -0
- package/dist/components/chat-model-mode-utilities.js +191 -0
- package/dist/components/chat-model-mode-utilities.js.map +1 -0
- package/dist/components/chat-models-utilities.d.ts +98 -0
- package/dist/components/chat-models-utilities.d.ts.map +1 -0
- package/dist/components/chat-models-utilities.js +136 -0
- package/dist/components/chat-models-utilities.js.map +1 -0
- package/dist/components/chat-report-utilities.d.ts +149 -0
- package/dist/components/chat-report-utilities.d.ts.map +1 -0
- package/dist/components/chat-report-utilities.js +151 -0
- package/dist/components/chat-report-utilities.js.map +1 -0
- package/dist/components/chat-scripts-utilities.d.ts +140 -0
- package/dist/components/chat-scripts-utilities.d.ts.map +1 -0
- package/dist/components/chat-scripts-utilities.js +158 -0
- package/dist/components/chat-scripts-utilities.js.map +1 -0
- package/dist/components/chat-settings-utilities.d.ts +72 -0
- package/dist/components/chat-settings-utilities.d.ts.map +1 -0
- package/dist/components/chat-settings-utilities.js +56 -0
- package/dist/components/chat-settings-utilities.js.map +1 -0
- package/dist/components/chat-share-utilities.d.ts +104 -0
- package/dist/components/chat-share-utilities.d.ts.map +1 -0
- package/dist/components/chat-share-utilities.js +90 -0
- package/dist/components/chat-share-utilities.js.map +1 -0
- package/dist/components/chat-skills-utilities.d.ts +242 -0
- package/dist/components/chat-skills-utilities.d.ts.map +1 -0
- package/dist/components/chat-skills-utilities.js +433 -0
- package/dist/components/chat-skills-utilities.js.map +1 -0
- package/dist/components/chat-stream-utilities.d.ts +74 -0
- package/dist/components/chat-stream-utilities.d.ts.map +1 -0
- package/dist/components/chat-stream-utilities.js +103 -0
- package/dist/components/chat-stream-utilities.js.map +1 -0
- package/dist/components/chat-tips-utilities.d.ts +108 -0
- package/dist/components/chat-tips-utilities.d.ts.map +1 -0
- package/dist/components/chat-tips-utilities.js +137 -0
- package/dist/components/chat-tips-utilities.js.map +1 -0
- package/dist/components/device-cycle.d.ts +84 -0
- package/dist/components/device-cycle.d.ts.map +1 -0
- package/dist/components/device-cycle.js +77 -0
- package/dist/components/device-cycle.js.map +1 -0
- package/dist/components/index.d.ts +36 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +33 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/tool-call-utilities.d.ts +69 -0
- package/dist/components/tool-call-utilities.d.ts.map +1 -0
- package/dist/components/tool-call-utilities.js +368 -0
- package/dist/components/tool-call-utilities.js.map +1 -0
- package/dist/components/user-avatar-utilities.d.ts +41 -0
- package/dist/components/user-avatar-utilities.d.ts.map +1 -0
- package/dist/components/user-avatar-utilities.js +56 -0
- package/dist/components/user-avatar-utilities.js.map +1 -0
- package/dist/components/workspace-layout-utilities.d.ts +37 -0
- package/dist/components/workspace-layout-utilities.d.ts.map +1 -0
- package/dist/components/workspace-layout-utilities.js +58 -0
- package/dist/components/workspace-layout-utilities.js.map +1 -0
- package/dist/customEventCards.d.ts +117 -0
- package/dist/customEventCards.d.ts.map +1 -0
- package/dist/customEventCards.js +36 -0
- package/dist/customEventCards.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +48 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +112 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/hooks/useViewport.d.ts +42 -0
- package/dist/hooks/useViewport.d.ts.map +1 -0
- package/dist/hooks/useViewport.js +61 -0
- package/dist/hooks/useViewport.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/settings-metadata.d.ts +78 -0
- package/dist/settings-metadata.d.ts.map +1 -0
- package/dist/settings-metadata.js +131 -0
- package/dist/settings-metadata.js.map +1 -0
- package/dist/types.d.ts +751 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- 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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"}
|