@hanzo/ui 8.27.11 → 8.27.13
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-APACHE +205 -0
- package/LICENSE-MIT +21 -0
- package/LICENSE.md +5 -18
- package/NOTICE +6 -0
- package/dist/agents/ChannelMembers.cjs +10 -2
- package/dist/agents/ChannelMembers.d.ts +3 -2
- package/dist/agents/ChannelMembers.d.ts.map +1 -1
- package/dist/agents/ChannelMembers.js +10 -2
- package/dist/agents/ChannelMembers.js.map +1 -1
- package/dist/agents/ChannelNotes.cjs +10 -2
- package/dist/agents/ChannelNotes.d.ts +1 -0
- package/dist/agents/ChannelNotes.d.ts.map +1 -1
- package/dist/agents/ChannelNotes.js +10 -2
- package/dist/agents/ChannelNotes.js.map +1 -1
- package/dist/agents/DiffViewer.cjs +19 -7
- package/dist/agents/DiffViewer.d.ts +1 -0
- package/dist/agents/DiffViewer.d.ts.map +1 -1
- package/dist/agents/DiffViewer.js +19 -7
- package/dist/agents/DiffViewer.js.map +1 -1
- package/dist/agents/DirectoryModal.cjs +97 -0
- package/dist/agents/DirectoryModal.d.ts +29 -0
- package/dist/agents/DirectoryModal.d.ts.map +1 -0
- package/dist/agents/DirectoryModal.js +94 -0
- package/dist/agents/DirectoryModal.js.map +1 -0
- package/dist/agents/DriveViewer.cjs +78 -0
- package/dist/agents/DriveViewer.d.ts +30 -0
- package/dist/agents/DriveViewer.d.ts.map +1 -0
- package/dist/agents/DriveViewer.js +42 -0
- package/dist/agents/DriveViewer.js.map +1 -0
- package/dist/agents/LiveVoiceCall.cjs +55 -39
- package/dist/agents/LiveVoiceCall.d.ts +7 -7
- package/dist/agents/LiveVoiceCall.d.ts.map +1 -1
- package/dist/agents/LiveVoiceCall.js +56 -40
- package/dist/agents/LiveVoiceCall.js.map +1 -1
- package/dist/agents/MCPHub.cjs +19 -8
- package/dist/agents/MCPHub.d.ts +5 -10
- package/dist/agents/MCPHub.d.ts.map +1 -1
- package/dist/agents/MCPHub.js +19 -8
- package/dist/agents/MCPHub.js.map +1 -1
- package/dist/agents/ShortcutsSheet.cjs +34 -14
- package/dist/agents/ShortcutsSheet.d.ts +7 -6
- package/dist/agents/ShortcutsSheet.d.ts.map +1 -1
- package/dist/agents/ShortcutsSheet.js +34 -14
- package/dist/agents/ShortcutsSheet.js.map +1 -1
- package/dist/agents/SwarmBar.cjs +34 -13
- package/dist/agents/SwarmBar.d.ts +7 -8
- package/dist/agents/SwarmBar.d.ts.map +1 -1
- package/dist/agents/SwarmBar.js +34 -13
- package/dist/agents/SwarmBar.js.map +1 -1
- package/dist/agents/TerminalViewer.cjs +71 -0
- package/dist/agents/TerminalViewer.d.ts +20 -0
- package/dist/agents/TerminalViewer.d.ts.map +1 -0
- package/dist/agents/TerminalViewer.js +68 -0
- package/dist/agents/TerminalViewer.js.map +1 -0
- package/dist/agents/ThemeCustomizer.cjs +29 -6
- package/dist/agents/ThemeCustomizer.d.ts +1 -0
- package/dist/agents/ThemeCustomizer.d.ts.map +1 -1
- package/dist/agents/ThemeCustomizer.js +29 -6
- package/dist/agents/ThemeCustomizer.js.map +1 -1
- package/dist/agents/index.cjs +7 -1
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +3 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/backends/gui/3d-card.d.ts +8 -8
- package/dist/backends/gui/3d-marquee.d.ts +7 -8
- package/dist/backends/gui/3d-marquee.d.ts.map +1 -1
- package/dist/backends/gui/3d-pin.d.ts +1 -1
- package/dist/backends/gui/alert.d.ts +3 -3
- package/dist/backends/gui/android.d.ts +1 -1
- package/dist/backends/gui/animated-testimonials.d.ts +1 -1
- package/dist/backends/gui/animated-tooltip.d.ts +1 -1
- package/dist/backends/gui/announcement.d.ts +1 -1
- package/dist/backends/gui/banner.d.ts +1 -1
- package/dist/backends/gui/button.d.ts +9 -1
- package/dist/backends/gui/button.d.ts.map +1 -1
- package/dist/backends/gui/button.js.map +1 -1
- package/dist/backends/gui/calendar.js.map +1 -1
- package/dist/backends/gui/card.d.ts +9 -9
- package/dist/backends/gui/command.d.ts +5 -5
- package/dist/backends/gui/command.d.ts.map +1 -1
- package/dist/backends/gui/context-menu.d.ts +17 -17
- package/dist/backends/gui/context-menu.d.ts.map +1 -1
- package/dist/backends/gui/context-menu.js.map +1 -1
- package/dist/backends/gui/credit-card.d.ts +1 -1
- package/dist/backends/gui/desktop.d.ts +1 -1
- package/dist/backends/gui/dock.d.ts +3 -3
- package/dist/backends/gui/dropdown-menu.cjs +2 -2
- package/dist/backends/gui/dropdown-menu.d.ts +19 -19
- package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
- package/dist/backends/gui/dropdown-menu.js +2 -2
- package/dist/backends/gui/dropdown-menu.js.map +1 -1
- package/dist/backends/gui/empty.d.ts +8 -8
- package/dist/backends/gui/field.d.ts +3 -3
- package/dist/backends/gui/gantt.d.ts +1 -1
- package/dist/backends/gui/glimpse.cjs +0 -4
- package/dist/backends/gui/glimpse.d.ts.map +1 -1
- package/dist/backends/gui/glimpse.js +0 -4
- package/dist/backends/gui/glimpse.js.map +1 -1
- package/dist/backends/gui/grid-pattern.d.ts +1 -2
- package/dist/backends/gui/grid-pattern.d.ts.map +1 -1
- package/dist/backends/gui/image-zoom.d.ts +1 -1
- package/dist/backends/gui/iphone-15-pro.d.ts +1 -1
- package/dist/backends/gui/item.d.ts +10 -10
- package/dist/backends/gui/list.d.ts +2 -2
- package/dist/backends/gui/macos-dock.d.ts +2 -2
- package/dist/backends/gui/magnetic.d.ts +1 -1
- package/dist/backends/gui/marquee.d.ts +1 -15
- package/dist/backends/gui/marquee.d.ts.map +1 -1
- package/dist/backends/gui/menu-dock.d.ts +1 -1
- package/dist/backends/gui/menubar.d.ts +18 -18
- package/dist/backends/gui/menubar.d.ts.map +1 -1
- package/dist/backends/gui/message-dock.d.ts +1 -1
- package/dist/backends/gui/motion-highlight.d.ts +1 -12
- package/dist/backends/gui/motion-highlight.d.ts.map +1 -1
- package/dist/backends/gui/order-entry.cjs +1 -10
- package/dist/backends/gui/order-entry.d.ts.map +1 -1
- package/dist/backends/gui/order-entry.js +1 -10
- package/dist/backends/gui/order-entry.js.map +1 -1
- package/dist/backends/gui/orders-history.cjs +1 -1
- package/dist/backends/gui/orders-history.js +1 -1
- package/dist/backends/gui/orders-history.js.map +1 -1
- package/dist/backends/gui/pagination.d.ts +4 -4
- package/dist/backends/gui/qr-code.d.ts +1 -2
- package/dist/backends/gui/qr-code.d.ts.map +1 -1
- package/dist/backends/gui/scroll-area.d.ts +3 -14
- package/dist/backends/gui/scroll-area.d.ts.map +1 -1
- package/dist/backends/gui/select.cjs +1 -1
- package/dist/backends/gui/select.d.ts +1 -1
- package/dist/backends/gui/select.d.ts.map +1 -1
- package/dist/backends/gui/select.js +1 -1
- package/dist/backends/gui/select.js.map +1 -1
- package/dist/backends/gui/sheet.d.ts +3 -3
- package/dist/backends/gui/sheet.d.ts.map +1 -1
- package/dist/backends/gui/status.d.ts +1 -1
- package/dist/backends/gui/table.d.ts +8 -8
- package/dist/backends/gui/toaster.d.ts +1 -15
- package/dist/backends/gui/toaster.d.ts.map +1 -1
- package/dist/backends/gui/toggle-group.cjs +3 -3
- package/dist/backends/gui/toggle-group.d.ts +1 -1
- package/dist/backends/gui/toggle-group.d.ts.map +1 -1
- package/dist/backends/gui/toggle-group.js +3 -3
- package/dist/backends/gui/toggle-group.js.map +1 -1
- package/dist/backends/gui/toggle.d.ts +1 -1
- package/dist/backends/gui/video-player.d.ts +1 -1
- package/dist/chat/Composer.cjs +10 -10
- package/dist/chat/Composer.d.ts +17 -16
- package/dist/chat/Composer.d.ts.map +1 -1
- package/dist/chat/Composer.js +11 -11
- package/dist/chat/Composer.js.map +1 -1
- package/dist/chat/Thread.d.ts +2 -8
- package/dist/chat/Thread.d.ts.map +1 -1
- package/dist/gallery.cjs +1 -180
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +308 -641
- package/dist/gallery.js +2 -181
- package/dist/gallery.js.map +1 -1
- package/dist/gui-config.cjs +5 -0
- package/dist/gui-config.d.ts +18 -3
- package/dist/gui-config.d.ts.map +1 -1
- package/dist/gui-config.js +5 -0
- package/dist/gui-config.js.map +1 -1
- package/dist/styles/motion.css +57 -2
- package/dist/styles.css +181 -482
- package/package.json +21 -19
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DirectoryModal = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
8
|
+
const index_1 = require("../index.cjs");
|
|
9
|
+
const TABS = [
|
|
10
|
+
{ id: 'apps', label: 'Apps' },
|
|
11
|
+
{ id: 'channels', label: 'Channels' },
|
|
12
|
+
{ id: 'plugins', label: 'Plugins' },
|
|
13
|
+
{ id: 'skills', label: 'Skills' },
|
|
14
|
+
];
|
|
15
|
+
const DirectoryModal = ({ open, onOpenChange, activeTab = 'apps', onTabChange, items, loading = false, error = null, onInstall, onConnect, consoleUrl = 'https://console.hanzo.ai', authRequired = false, onSignIn, }) => {
|
|
16
|
+
const [tab, setTab] = (0, react_1.useState)(activeTab);
|
|
17
|
+
const [query, setQuery] = (0, react_1.useState)('');
|
|
18
|
+
const [acting, setActing] = (0, react_1.useState)(null);
|
|
19
|
+
const currentTab = onTabChange ? activeTab : tab;
|
|
20
|
+
const handleTabChange = (t) => {
|
|
21
|
+
if (onTabChange)
|
|
22
|
+
onTabChange(t);
|
|
23
|
+
else
|
|
24
|
+
setTab(t);
|
|
25
|
+
};
|
|
26
|
+
const filtered = (0, react_1.useMemo)(() => {
|
|
27
|
+
const q = query.trim().toLowerCase();
|
|
28
|
+
if (!q)
|
|
29
|
+
return items;
|
|
30
|
+
return items.filter((i) => i.name.toLowerCase().includes(q) ||
|
|
31
|
+
i.description.toLowerCase().includes(q) ||
|
|
32
|
+
i.publisher.toLowerCase().includes(q));
|
|
33
|
+
}, [items, query]);
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(index_1.Dialog, { open: open, onOpenChange: onOpenChange, children: (0, jsx_runtime_1.jsxs)(index_1.DialogContent, { style: { maxWidth: 760, padding: 0, overflow: 'hidden', borderRadius: 16, backgroundColor: 'var(--background)', border: '1px solid var(--borderColor)' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { padding: 20, borderBottom: '1px solid var(--borderColor)' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(index_1.DialogTitle, { style: { fontSize: 18, fontWeight: 600, letterSpacing: '-0.02em', margin: 0 }, children: "Directory" }), (0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--color10)', marginTop: 2 }, children: "Extend your workspace with integrations, channels, plugins, and skills." })] }), (0, jsx_runtime_1.jsxs)("a", { href: consoleUrl, target: "_blank", rel: "noreferrer", style: {
|
|
35
|
+
display: 'inline-flex',
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
gap: 6,
|
|
38
|
+
fontSize: 12,
|
|
39
|
+
color: 'var(--color11)',
|
|
40
|
+
padding: '6px 10px',
|
|
41
|
+
borderRadius: 8,
|
|
42
|
+
border: '1px solid var(--borderColor)',
|
|
43
|
+
textDecoration: 'none',
|
|
44
|
+
}, children: [(0, jsx_runtime_1.jsx)("span", { children: "Console" }), (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowUpRight, { size: 14 })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 12 }, children: [(0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', padding: 4, backgroundColor: 'var(--color3)', borderRadius: 10, border: '1px solid var(--borderColor)' }, children: TABS.map((t) => ((0, jsx_runtime_1.jsx)("button", { onClick: () => handleTabChange(t.id), style: {
|
|
45
|
+
padding: '4px 12px',
|
|
46
|
+
fontSize: 12,
|
|
47
|
+
fontWeight: 500,
|
|
48
|
+
borderRadius: 6,
|
|
49
|
+
border: 'none',
|
|
50
|
+
cursor: 'pointer',
|
|
51
|
+
backgroundColor: currentTab === t.id ? 'var(--background)' : 'transparent',
|
|
52
|
+
color: currentTab === t.id ? 'var(--color12)' : 'var(--color10)',
|
|
53
|
+
boxShadow: currentTab === t.id ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',
|
|
54
|
+
}, children: t.label }, t.id))) }), (0, jsx_runtime_1.jsxs)("div", { style: { position: 'relative', flex: 1 }, children: [(0, jsx_runtime_1.jsx)("span", { style: { position: 'absolute', left: 10, top: '50%', transform: 'translateY(-50%)', color: 'var(--color9)', pointerEvents: 'none', display: 'flex' }, children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Search, { size: 14 }) }), (0, jsx_runtime_1.jsx)(index_1.Input, { value: query, onChange: (e) => setQuery(e.target.value), placeholder: `Search ${currentTab}...`, style: { paddingLeft: 32, height: 34, fontSize: 12, borderRadius: 10, backgroundColor: 'var(--color2)', borderColor: 'var(--borderColor)' } }), query && ((0, jsx_runtime_1.jsx)("button", { onClick: () => setQuery(''), style: { position: 'absolute', right: 10, top: '50%', transform: 'translateY(-50%)', background: 'none', border: 'none', color: 'var(--color9)', cursor: 'pointer', display: 'flex' }, children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, { size: 12 }) }))] })] })] }), (0, jsx_runtime_1.jsx)(index_1.ScrollArea, { style: { height: 420, padding: 20 }, children: authRequired ? ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: [(0, jsx_runtime_1.jsxs)(index_1.Text, { style: { fontSize: 14, fontWeight: 500, color: 'var(--color11)' }, children: ["Sign in required to manage ", currentTab] }), (0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--color9)', maxWidth: 320, marginTop: 4, marginBottom: 16 }, children: "Access your organization's custom plugins, connected accounts and private skills." }), onSignIn && ((0, jsx_runtime_1.jsx)("button", { onClick: onSignIn, style: { padding: '8px 16px', fontSize: 12, fontWeight: 600, borderRadius: 8, backgroundColor: 'var(--color12)', color: 'var(--background)', border: 'none', cursor: 'pointer' }, children: "Sign In" }))] })) : loading ? ((0, jsx_runtime_1.jsx)("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: 12 }, children: Array.from({ length: 6 }).map((_, i) => ((0, jsx_runtime_1.jsx)("div", { style: { height: 110, borderRadius: 12, border: '1px solid var(--borderColor)', backgroundColor: 'var(--color2)' } }, i))) })) : error ? ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--red10)', marginBottom: 8 }, children: error }), (0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--color9)' }, children: "Check console connection or network availability." })] })) : filtered.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: (0, jsx_runtime_1.jsxs)(index_1.Text, { style: { fontSize: 12, color: 'var(--color10)' }, children: ["No ", currentTab, " match \"", query, "\"."] }) })) : ((0, jsx_runtime_1.jsx)("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: 12 }, children: filtered.map((item) => {
|
|
55
|
+
const isWorking = acting === item.id;
|
|
56
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
57
|
+
display: 'flex',
|
|
58
|
+
flexDirection: 'column',
|
|
59
|
+
justifyContent: 'space-between',
|
|
60
|
+
padding: 16,
|
|
61
|
+
borderRadius: 12,
|
|
62
|
+
border: '1px solid var(--borderColor)',
|
|
63
|
+
backgroundColor: 'var(--color2)',
|
|
64
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: 8, marginBottom: 6 }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontWeight: 600, fontSize: 13, color: 'var(--color12)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: item.name }), (0, jsx_runtime_1.jsx)("span", { style: {
|
|
65
|
+
fontSize: 10,
|
|
66
|
+
padding: '2px 6px',
|
|
67
|
+
borderRadius: 4,
|
|
68
|
+
fontFamily: 'monospace',
|
|
69
|
+
fontWeight: 600,
|
|
70
|
+
backgroundColor: item.kind === 'MCP' ? 'var(--blue3)' : 'var(--color4)',
|
|
71
|
+
color: item.kind === 'MCP' ? 'var(--blue11)' : 'var(--color11)',
|
|
72
|
+
border: item.kind === 'MCP' ? '1px solid var(--blue6)' : 'none',
|
|
73
|
+
}, children: item.kind })] }), (0, jsx_runtime_1.jsxs)("div", { style: { fontSize: 11, color: 'var(--color9)', marginBottom: 4 }, children: ["by ", item.publisher] }), (0, jsx_runtime_1.jsx)("p", { style: { fontSize: 12, color: 'var(--color10)', margin: 0, lineHeight: 1.4, display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }, children: item.description })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginTop: 12, paddingTop: 10, borderTop: '1px solid var(--borderColor)' }, children: [(0, jsx_runtime_1.jsx)("span", { style: { fontSize: 11, color: 'var(--color9)' }, children: item.installs !== undefined ? `${item.installs.toLocaleString()} installs` : '' }), item.connected ? ((0, jsx_runtime_1.jsxs)("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, color: 'var(--green11)', fontWeight: 600 }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14 }), (0, jsx_runtime_1.jsx)("span", { children: "Connected" })] })) : item.installed ? ((0, jsx_runtime_1.jsxs)("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, color: 'var(--color11)', fontWeight: 600 }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14 }), (0, jsx_runtime_1.jsx)("span", { children: "Installed" })] })) : ((0, jsx_runtime_1.jsx)("button", { disabled: isWorking, onClick: async () => {
|
|
74
|
+
setActing(item.id);
|
|
75
|
+
try {
|
|
76
|
+
if (onConnect && currentTab === 'apps')
|
|
77
|
+
await onConnect(item);
|
|
78
|
+
else if (onInstall)
|
|
79
|
+
await onInstall(item);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
setActing(null);
|
|
83
|
+
}
|
|
84
|
+
}, style: {
|
|
85
|
+
padding: '4px 10px',
|
|
86
|
+
fontSize: 11,
|
|
87
|
+
fontWeight: 600,
|
|
88
|
+
borderRadius: 6,
|
|
89
|
+
backgroundColor: 'var(--color4)',
|
|
90
|
+
color: 'var(--color12)',
|
|
91
|
+
border: '1px solid var(--borderColor)',
|
|
92
|
+
cursor: 'pointer',
|
|
93
|
+
opacity: isWorking ? 0.5 : 1,
|
|
94
|
+
}, children: isWorking ? 'Adding...' : currentTab === 'apps' ? 'Connect' : 'Install' }))] })] }, item.id));
|
|
95
|
+
}) })) })] }) }));
|
|
96
|
+
};
|
|
97
|
+
exports.DirectoryModal = DirectoryModal;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type DirectoryTab = 'apps' | 'channels' | 'plugins' | 'skills';
|
|
3
|
+
export interface DirectoryItem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
publisher: string;
|
|
7
|
+
description: string;
|
|
8
|
+
kind: 'MCP' | 'native';
|
|
9
|
+
installs?: number;
|
|
10
|
+
connected?: boolean;
|
|
11
|
+
installed?: boolean;
|
|
12
|
+
iconUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DirectoryModalProps {
|
|
15
|
+
open: boolean;
|
|
16
|
+
onOpenChange: (open: boolean) => void;
|
|
17
|
+
activeTab?: DirectoryTab;
|
|
18
|
+
onTabChange?: (tab: DirectoryTab) => void;
|
|
19
|
+
items: DirectoryItem[];
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
error?: string | null;
|
|
22
|
+
onInstall?: (item: DirectoryItem) => Promise<void> | void;
|
|
23
|
+
onConnect?: (item: DirectoryItem) => Promise<void> | void;
|
|
24
|
+
consoleUrl?: string;
|
|
25
|
+
authRequired?: boolean;
|
|
26
|
+
onSignIn?: () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare const DirectoryModal: React.FC<DirectoryModalProps>;
|
|
29
|
+
//# sourceMappingURL=DirectoryModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectoryModal.d.ts","sourceRoot":"","sources":["../../src/agents/DirectoryModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAWhD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAErE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AASD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyPxD,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useState } from 'react';
|
|
4
|
+
import { ArrowUpRight, Check, Search, X } from '@hanzogui/lucide-icons-2';
|
|
5
|
+
import { Dialog, DialogContent, DialogTitle, Input, ScrollArea, Text, } from '../index.js';
|
|
6
|
+
const TABS = [
|
|
7
|
+
{ id: 'apps', label: 'Apps' },
|
|
8
|
+
{ id: 'channels', label: 'Channels' },
|
|
9
|
+
{ id: 'plugins', label: 'Plugins' },
|
|
10
|
+
{ id: 'skills', label: 'Skills' },
|
|
11
|
+
];
|
|
12
|
+
export const DirectoryModal = ({ open, onOpenChange, activeTab = 'apps', onTabChange, items, loading = false, error = null, onInstall, onConnect, consoleUrl = 'https://console.hanzo.ai', authRequired = false, onSignIn, }) => {
|
|
13
|
+
const [tab, setTab] = useState(activeTab);
|
|
14
|
+
const [query, setQuery] = useState('');
|
|
15
|
+
const [acting, setActing] = useState(null);
|
|
16
|
+
const currentTab = onTabChange ? activeTab : tab;
|
|
17
|
+
const handleTabChange = (t) => {
|
|
18
|
+
if (onTabChange)
|
|
19
|
+
onTabChange(t);
|
|
20
|
+
else
|
|
21
|
+
setTab(t);
|
|
22
|
+
};
|
|
23
|
+
const filtered = useMemo(() => {
|
|
24
|
+
const q = query.trim().toLowerCase();
|
|
25
|
+
if (!q)
|
|
26
|
+
return items;
|
|
27
|
+
return items.filter((i) => i.name.toLowerCase().includes(q) ||
|
|
28
|
+
i.description.toLowerCase().includes(q) ||
|
|
29
|
+
i.publisher.toLowerCase().includes(q));
|
|
30
|
+
}, [items, query]);
|
|
31
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { style: { maxWidth: 760, padding: 0, overflow: 'hidden', borderRadius: 16, backgroundColor: 'var(--background)', border: '1px solid var(--borderColor)' }, children: [_jsxs("div", { style: { padding: 20, borderBottom: '1px solid var(--borderColor)' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }, children: [_jsxs("div", { children: [_jsx(DialogTitle, { style: { fontSize: 18, fontWeight: 600, letterSpacing: '-0.02em', margin: 0 }, children: "Directory" }), _jsx(Text, { style: { fontSize: 12, color: 'var(--color10)', marginTop: 2 }, children: "Extend your workspace with integrations, channels, plugins, and skills." })] }), _jsxs("a", { href: consoleUrl, target: "_blank", rel: "noreferrer", style: {
|
|
32
|
+
display: 'inline-flex',
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
gap: 6,
|
|
35
|
+
fontSize: 12,
|
|
36
|
+
color: 'var(--color11)',
|
|
37
|
+
padding: '6px 10px',
|
|
38
|
+
borderRadius: 8,
|
|
39
|
+
border: '1px solid var(--borderColor)',
|
|
40
|
+
textDecoration: 'none',
|
|
41
|
+
}, children: [_jsx("span", { children: "Console" }), _jsx(ArrowUpRight, { size: 14 })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 12 }, children: [_jsx("div", { style: { display: 'flex', padding: 4, backgroundColor: 'var(--color3)', borderRadius: 10, border: '1px solid var(--borderColor)' }, children: TABS.map((t) => (_jsx("button", { onClick: () => handleTabChange(t.id), style: {
|
|
42
|
+
padding: '4px 12px',
|
|
43
|
+
fontSize: 12,
|
|
44
|
+
fontWeight: 500,
|
|
45
|
+
borderRadius: 6,
|
|
46
|
+
border: 'none',
|
|
47
|
+
cursor: 'pointer',
|
|
48
|
+
backgroundColor: currentTab === t.id ? 'var(--background)' : 'transparent',
|
|
49
|
+
color: currentTab === t.id ? 'var(--color12)' : 'var(--color10)',
|
|
50
|
+
boxShadow: currentTab === t.id ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',
|
|
51
|
+
}, children: t.label }, t.id))) }), _jsxs("div", { style: { position: 'relative', flex: 1 }, children: [_jsx("span", { style: { position: 'absolute', left: 10, top: '50%', transform: 'translateY(-50%)', color: 'var(--color9)', pointerEvents: 'none', display: 'flex' }, children: _jsx(Search, { size: 14 }) }), _jsx(Input, { value: query, onChange: (e) => setQuery(e.target.value), placeholder: `Search ${currentTab}...`, style: { paddingLeft: 32, height: 34, fontSize: 12, borderRadius: 10, backgroundColor: 'var(--color2)', borderColor: 'var(--borderColor)' } }), query && (_jsx("button", { onClick: () => setQuery(''), style: { position: 'absolute', right: 10, top: '50%', transform: 'translateY(-50%)', background: 'none', border: 'none', color: 'var(--color9)', cursor: 'pointer', display: 'flex' }, children: _jsx(X, { size: 12 }) }))] })] })] }), _jsx(ScrollArea, { style: { height: 420, padding: 20 }, children: authRequired ? (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: [_jsxs(Text, { style: { fontSize: 14, fontWeight: 500, color: 'var(--color11)' }, children: ["Sign in required to manage ", currentTab] }), _jsx(Text, { style: { fontSize: 12, color: 'var(--color9)', maxWidth: 320, marginTop: 4, marginBottom: 16 }, children: "Access your organization's custom plugins, connected accounts and private skills." }), onSignIn && (_jsx("button", { onClick: onSignIn, style: { padding: '8px 16px', fontSize: 12, fontWeight: 600, borderRadius: 8, backgroundColor: 'var(--color12)', color: 'var(--background)', border: 'none', cursor: 'pointer' }, children: "Sign In" }))] })) : loading ? (_jsx("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: 12 }, children: Array.from({ length: 6 }).map((_, i) => (_jsx("div", { style: { height: 110, borderRadius: 12, border: '1px solid var(--borderColor)', backgroundColor: 'var(--color2)' } }, i))) })) : error ? (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: [_jsx(Text, { style: { fontSize: 12, color: 'var(--red10)', marginBottom: 8 }, children: error }), _jsx(Text, { style: { fontSize: 12, color: 'var(--color9)' }, children: "Check console connection or network availability." })] })) : filtered.length === 0 ? (_jsx("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 260, textAlign: 'center' }, children: _jsxs(Text, { style: { fontSize: 12, color: 'var(--color10)' }, children: ["No ", currentTab, " match \"", query, "\"."] }) })) : (_jsx("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: 12 }, children: filtered.map((item) => {
|
|
52
|
+
const isWorking = acting === item.id;
|
|
53
|
+
return (_jsxs("div", { style: {
|
|
54
|
+
display: 'flex',
|
|
55
|
+
flexDirection: 'column',
|
|
56
|
+
justifyContent: 'space-between',
|
|
57
|
+
padding: 16,
|
|
58
|
+
borderRadius: 12,
|
|
59
|
+
border: '1px solid var(--borderColor)',
|
|
60
|
+
backgroundColor: 'var(--color2)',
|
|
61
|
+
}, children: [_jsxs("div", { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: 8, marginBottom: 6 }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 13, color: 'var(--color12)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: item.name }), _jsx("span", { style: {
|
|
62
|
+
fontSize: 10,
|
|
63
|
+
padding: '2px 6px',
|
|
64
|
+
borderRadius: 4,
|
|
65
|
+
fontFamily: 'monospace',
|
|
66
|
+
fontWeight: 600,
|
|
67
|
+
backgroundColor: item.kind === 'MCP' ? 'var(--blue3)' : 'var(--color4)',
|
|
68
|
+
color: item.kind === 'MCP' ? 'var(--blue11)' : 'var(--color11)',
|
|
69
|
+
border: item.kind === 'MCP' ? '1px solid var(--blue6)' : 'none',
|
|
70
|
+
}, children: item.kind })] }), _jsxs("div", { style: { fontSize: 11, color: 'var(--color9)', marginBottom: 4 }, children: ["by ", item.publisher] }), _jsx("p", { style: { fontSize: 12, color: 'var(--color10)', margin: 0, lineHeight: 1.4, display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }, children: item.description })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginTop: 12, paddingTop: 10, borderTop: '1px solid var(--borderColor)' }, children: [_jsx("span", { style: { fontSize: 11, color: 'var(--color9)' }, children: item.installs !== undefined ? `${item.installs.toLocaleString()} installs` : '' }), item.connected ? (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, color: 'var(--green11)', fontWeight: 600 }, children: [_jsx(Check, { size: 14 }), _jsx("span", { children: "Connected" })] })) : item.installed ? (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, color: 'var(--color11)', fontWeight: 600 }, children: [_jsx(Check, { size: 14 }), _jsx("span", { children: "Installed" })] })) : (_jsx("button", { disabled: isWorking, onClick: async () => {
|
|
71
|
+
setActing(item.id);
|
|
72
|
+
try {
|
|
73
|
+
if (onConnect && currentTab === 'apps')
|
|
74
|
+
await onConnect(item);
|
|
75
|
+
else if (onInstall)
|
|
76
|
+
await onInstall(item);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
setActing(null);
|
|
80
|
+
}
|
|
81
|
+
}, style: {
|
|
82
|
+
padding: '4px 10px',
|
|
83
|
+
fontSize: 11,
|
|
84
|
+
fontWeight: 600,
|
|
85
|
+
borderRadius: 6,
|
|
86
|
+
backgroundColor: 'var(--color4)',
|
|
87
|
+
color: 'var(--color12)',
|
|
88
|
+
border: '1px solid var(--borderColor)',
|
|
89
|
+
cursor: 'pointer',
|
|
90
|
+
opacity: isWorking ? 0.5 : 1,
|
|
91
|
+
}, children: isWorking ? 'Adding...' : currentTab === 'apps' ? 'Connect' : 'Install' }))] })] }, item.id));
|
|
92
|
+
}) })) })] }) }));
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=DirectoryModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectoryModal.js","sourceRoot":"","sources":["../../src/agents/DirectoryModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.DriveViewer = void 0;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
41
|
+
const index_1 = require("../index.cjs");
|
|
42
|
+
const weigh = (bytes) => {
|
|
43
|
+
if (!bytes)
|
|
44
|
+
return '';
|
|
45
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
46
|
+
const step = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
|
|
47
|
+
const size = bytes / 1024 ** step;
|
|
48
|
+
return `${size < 10 && step > 0 ? size.toFixed(1) : Math.round(size)} ${units[step]}`;
|
|
49
|
+
};
|
|
50
|
+
const DriveViewer = ({ buckets, currentBucket, prefix, entries, loading = false, uploading = false, error = null, onSelectBucket, onNavigatePrefix, onUploadFile, onCreateFolder, onDownloadFile, onDeleteEntry, onRefresh, }) => {
|
|
51
|
+
const fileInputRef = (0, react_1.useRef)(null);
|
|
52
|
+
const [newFolderName, setNewFolderName] = (0, react_1.useState)('');
|
|
53
|
+
const [isCreatingFolder, setIsCreatingFolder] = (0, react_1.useState)(false);
|
|
54
|
+
const segments = prefix.split('/').filter(Boolean);
|
|
55
|
+
const handleCreateFolder = async (e) => {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
if (!newFolderName.trim() || !onCreateFolder)
|
|
58
|
+
return;
|
|
59
|
+
await onCreateFolder(newFolderName.trim());
|
|
60
|
+
setNewFolderName('');
|
|
61
|
+
setIsCreatingFolder(false);
|
|
62
|
+
};
|
|
63
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', backgroundColor: 'var(--background)', borderRadius: 12, border: '1px solid var(--borderColor)', overflow: 'hidden' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '10px 16px', borderBottom: '1px solid var(--borderColor)', backgroundColor: 'var(--color2)' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 6, fontWeight: 600, color: 'var(--color12)' }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.HardDrive, { size: 16 }), buckets.length > 1 ? ((0, jsx_runtime_1.jsx)("select", { value: currentBucket ?? '', onChange: (e) => onSelectBucket(e.target.value), style: { backgroundColor: 'transparent', border: '1px solid var(--borderColor)', borderRadius: 6, padding: '2px 6px', fontSize: 12, color: 'var(--color12)', outline: 'none' }, children: buckets.map((b) => ((0, jsx_runtime_1.jsx)("option", { value: b.name, style: { backgroundColor: 'var(--background)' }, children: b.name }, b.name))) })) : ((0, jsx_runtime_1.jsx)("span", { children: currentBucket ?? 'Drive' }))] }), currentBucket && ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 4, color: 'var(--color10)' }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: 14 }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onNavigatePrefix(''), style: { background: 'none', border: 'none', color: 'inherit', cursor: 'pointer', padding: 0 }, children: "root" }), segments.map((seg, idx) => {
|
|
64
|
+
const stepPrefix = segments.slice(0, idx + 1).join('/') + '/';
|
|
65
|
+
const isLast = idx === segments.length - 1;
|
|
66
|
+
return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: 12 }), (0, jsx_runtime_1.jsx)("button", { disabled: isLast, onClick: () => onNavigatePrefix(stepPrefix), style: { background: 'none', border: 'none', color: isLast ? 'var(--color12)' : 'inherit', fontWeight: isLast ? 600 : 400, cursor: isLast ? 'default' : 'pointer', padding: 0 }, children: seg })] }, stepPrefix));
|
|
67
|
+
})] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [onRefresh && ((0, jsx_runtime_1.jsx)("button", { onClick: onRefresh, style: { padding: 6, borderRadius: 6, border: '1px solid var(--borderColor)', background: 'none', color: 'var(--color10)', cursor: 'pointer', display: 'flex' }, title: "Refresh", children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.RefreshCw, { size: 14 }) })), currentBucket && onUploadFile && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", multiple: true, style: { display: 'none' }, onChange: (e) => {
|
|
68
|
+
if (e.target.files && e.target.files.length > 0) {
|
|
69
|
+
onUploadFile(e.target.files);
|
|
70
|
+
}
|
|
71
|
+
} }), (0, jsx_runtime_1.jsxs)("button", { disabled: uploading, onClick: () => fileInputRef.current?.click(), style: { display: 'inline-flex', alignItems: 'center', gap: 6, padding: '6px 10px', borderRadius: 8, backgroundColor: 'var(--color12)', color: 'var(--background)', fontSize: 12, fontWeight: 600, border: 'none', cursor: 'pointer', opacity: uploading ? 0.5 : 1 }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Upload, { size: 14 }), (0, jsx_runtime_1.jsx)("span", { children: uploading ? 'Uploading...' : 'Upload' })] })] }))] })] }), (0, jsx_runtime_1.jsx)("div", { style: { flex: 1, overflowY: 'auto' }, children: error ? ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 200, textAlign: 'center', padding: 16 }, children: [(0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--red10)', marginBottom: 4 }, children: error }), (0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--color9)' }, children: "Ensure you have sufficient storage permissions." })] })) : loading && entries.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { style: { padding: 16, display: 'flex', flexDirection: 'column', gap: 8 }, children: Array.from({ length: 5 }).map((_, i) => ((0, jsx_runtime_1.jsx)("div", { style: { height: 38, borderRadius: 8, backgroundColor: 'var(--color2)', border: '1px solid var(--borderColor)' } }, i))) })) : entries.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 200, textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Folder, { size: 32 }), (0, jsx_runtime_1.jsx)(index_1.Text, { style: { fontSize: 12, color: 'var(--color10)', marginTop: 8 }, children: "This folder is empty." })] })) : ((0, jsx_runtime_1.jsxs)("table", { style: { width: '100%', textAlign: 'left', fontSize: 12, borderCollapse: 'collapse' }, children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { style: { borderBottom: '1px solid var(--borderColor)', color: 'var(--color9)' }, children: [(0, jsx_runtime_1.jsx)("th", { style: { padding: '10px 16px', fontWeight: 500 }, children: "Name" }), (0, jsx_runtime_1.jsx)("th", { style: { padding: '10px 16px', fontWeight: 500, width: 110, textAlign: 'right' }, children: "Size" }), (0, jsx_runtime_1.jsx)("th", { style: { padding: '10px 16px', fontWeight: 500, width: 140, textAlign: 'right' }, children: "Modified" }), (0, jsx_runtime_1.jsx)("th", { style: { padding: '10px 16px', fontWeight: 500, width: 80, textAlign: 'right' }, children: "Actions" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: entries.map((entry) => {
|
|
72
|
+
const displayName = entry.key.replace(prefix, '').replace(/\/$/, '');
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)("tr", { style: { borderBottom: '1px solid var(--borderColor)', transition: 'background-color 0.15s ease' }, children: [(0, jsx_runtime_1.jsx)("td", { style: { padding: '10px 16px' }, children: entry.isDir ? ((0, jsx_runtime_1.jsxs)("button", { onClick: () => onNavigatePrefix(entry.key), style: { display: 'inline-flex', alignItems: 'center', gap: 8, color: 'var(--color12)', fontWeight: 600, background: 'none', border: 'none', cursor: 'pointer', padding: 0 }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Folder, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { children: displayName })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 8, color: 'var(--color11)' }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.File, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: 300 }, children: displayName })] })) }), (0, jsx_runtime_1.jsx)("td", { style: { padding: '10px 16px', textAlign: 'right', color: 'var(--color9)', fontFamily: 'monospace', fontSize: 11 }, children: entry.isDir ? '—' : weigh(entry.size) }), (0, jsx_runtime_1.jsx)("td", { style: { padding: '10px 16px', textAlign: 'right', color: 'var(--color9)', fontSize: 11 }, children: entry.lastModified
|
|
74
|
+
? new Date(entry.lastModified).toLocaleDateString()
|
|
75
|
+
: '—' }), (0, jsx_runtime_1.jsx)("td", { style: { padding: '10px 16px', textAlign: 'right' }, children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end', gap: 4 }, children: [!entry.isDir && onDownloadFile && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onDownloadFile(entry), style: { padding: 4, borderRadius: 4, background: 'none', border: 'none', color: 'var(--color10)', cursor: 'pointer' }, title: "Download", children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Download, { size: 14 }) })), onDeleteEntry && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onDeleteEntry(entry), style: { padding: 4, borderRadius: 4, background: 'none', border: 'none', color: 'var(--color10)', cursor: 'pointer' }, title: "Delete", children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Trash2, { size: 14 }) }))] }) })] }, entry.key));
|
|
76
|
+
}) })] })) })] }));
|
|
77
|
+
};
|
|
78
|
+
exports.DriveViewer = DriveViewer;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface StorageBucket {
|
|
3
|
+
name: string;
|
|
4
|
+
createdAt?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface StorageEntry {
|
|
7
|
+
key: string;
|
|
8
|
+
isDir: boolean;
|
|
9
|
+
size: number;
|
|
10
|
+
lastModified: number;
|
|
11
|
+
contentType?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DriveViewerProps {
|
|
14
|
+
buckets: StorageBucket[];
|
|
15
|
+
currentBucket: string | null;
|
|
16
|
+
prefix: string;
|
|
17
|
+
entries: StorageEntry[];
|
|
18
|
+
loading?: boolean;
|
|
19
|
+
uploading?: boolean;
|
|
20
|
+
error?: string | null;
|
|
21
|
+
onSelectBucket: (bucket: string) => void;
|
|
22
|
+
onNavigatePrefix: (prefix: string) => void;
|
|
23
|
+
onUploadFile?: (files: FileList) => Promise<void> | void;
|
|
24
|
+
onCreateFolder?: (name: string) => Promise<void> | void;
|
|
25
|
+
onDownloadFile?: (entry: StorageEntry) => Promise<void> | void;
|
|
26
|
+
onDeleteEntry?: (entry: StorageEntry) => Promise<void> | void;
|
|
27
|
+
onRefresh?: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare const DriveViewer: React.FC<DriveViewerProps>;
|
|
30
|
+
//# sourceMappingURL=DriveViewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DriveViewer.d.ts","sourceRoot":"","sources":["../../src/agents/DriveViewer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAc/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC9D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAUD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAwNlD,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useRef, useState } from 'react';
|
|
4
|
+
import { ChevronRight, Folder, File as FileIcon, Upload, Download, Trash2, HardDrive, RefreshCw, } from '@hanzogui/lucide-icons-2';
|
|
5
|
+
import { Text } from '../index.js';
|
|
6
|
+
const weigh = (bytes) => {
|
|
7
|
+
if (!bytes)
|
|
8
|
+
return '';
|
|
9
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
10
|
+
const step = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
|
|
11
|
+
const size = bytes / 1024 ** step;
|
|
12
|
+
return `${size < 10 && step > 0 ? size.toFixed(1) : Math.round(size)} ${units[step]}`;
|
|
13
|
+
};
|
|
14
|
+
export const DriveViewer = ({ buckets, currentBucket, prefix, entries, loading = false, uploading = false, error = null, onSelectBucket, onNavigatePrefix, onUploadFile, onCreateFolder, onDownloadFile, onDeleteEntry, onRefresh, }) => {
|
|
15
|
+
const fileInputRef = useRef(null);
|
|
16
|
+
const [newFolderName, setNewFolderName] = useState('');
|
|
17
|
+
const [isCreatingFolder, setIsCreatingFolder] = useState(false);
|
|
18
|
+
const segments = prefix.split('/').filter(Boolean);
|
|
19
|
+
const handleCreateFolder = async (e) => {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
if (!newFolderName.trim() || !onCreateFolder)
|
|
22
|
+
return;
|
|
23
|
+
await onCreateFolder(newFolderName.trim());
|
|
24
|
+
setNewFolderName('');
|
|
25
|
+
setIsCreatingFolder(false);
|
|
26
|
+
};
|
|
27
|
+
return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', backgroundColor: 'var(--background)', borderRadius: 12, border: '1px solid var(--borderColor)', overflow: 'hidden' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '10px 16px', borderBottom: '1px solid var(--borderColor)', backgroundColor: 'var(--color2)' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 6, fontWeight: 600, color: 'var(--color12)' }, children: [_jsx(HardDrive, { size: 16 }), buckets.length > 1 ? (_jsx("select", { value: currentBucket ?? '', onChange: (e) => onSelectBucket(e.target.value), style: { backgroundColor: 'transparent', border: '1px solid var(--borderColor)', borderRadius: 6, padding: '2px 6px', fontSize: 12, color: 'var(--color12)', outline: 'none' }, children: buckets.map((b) => (_jsx("option", { value: b.name, style: { backgroundColor: 'var(--background)' }, children: b.name }, b.name))) })) : (_jsx("span", { children: currentBucket ?? 'Drive' }))] }), currentBucket && (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 4, color: 'var(--color10)' }, children: [_jsx(ChevronRight, { size: 14 }), _jsx("button", { onClick: () => onNavigatePrefix(''), style: { background: 'none', border: 'none', color: 'inherit', cursor: 'pointer', padding: 0 }, children: "root" }), segments.map((seg, idx) => {
|
|
28
|
+
const stepPrefix = segments.slice(0, idx + 1).join('/') + '/';
|
|
29
|
+
const isLast = idx === segments.length - 1;
|
|
30
|
+
return (_jsxs(React.Fragment, { children: [_jsx(ChevronRight, { size: 12 }), _jsx("button", { disabled: isLast, onClick: () => onNavigatePrefix(stepPrefix), style: { background: 'none', border: 'none', color: isLast ? 'var(--color12)' : 'inherit', fontWeight: isLast ? 600 : 400, cursor: isLast ? 'default' : 'pointer', padding: 0 }, children: seg })] }, stepPrefix));
|
|
31
|
+
})] }))] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [onRefresh && (_jsx("button", { onClick: onRefresh, style: { padding: 6, borderRadius: 6, border: '1px solid var(--borderColor)', background: 'none', color: 'var(--color10)', cursor: 'pointer', display: 'flex' }, title: "Refresh", children: _jsx(RefreshCw, { size: 14 }) })), currentBucket && onUploadFile && (_jsxs(_Fragment, { children: [_jsx("input", { ref: fileInputRef, type: "file", multiple: true, style: { display: 'none' }, onChange: (e) => {
|
|
32
|
+
if (e.target.files && e.target.files.length > 0) {
|
|
33
|
+
onUploadFile(e.target.files);
|
|
34
|
+
}
|
|
35
|
+
} }), _jsxs("button", { disabled: uploading, onClick: () => fileInputRef.current?.click(), style: { display: 'inline-flex', alignItems: 'center', gap: 6, padding: '6px 10px', borderRadius: 8, backgroundColor: 'var(--color12)', color: 'var(--background)', fontSize: 12, fontWeight: 600, border: 'none', cursor: 'pointer', opacity: uploading ? 0.5 : 1 }, children: [_jsx(Upload, { size: 14 }), _jsx("span", { children: uploading ? 'Uploading...' : 'Upload' })] })] }))] })] }), _jsx("div", { style: { flex: 1, overflowY: 'auto' }, children: error ? (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 200, textAlign: 'center', padding: 16 }, children: [_jsx(Text, { style: { fontSize: 12, color: 'var(--red10)', marginBottom: 4 }, children: error }), _jsx(Text, { style: { fontSize: 12, color: 'var(--color9)' }, children: "Ensure you have sufficient storage permissions." })] })) : loading && entries.length === 0 ? (_jsx("div", { style: { padding: 16, display: 'flex', flexDirection: 'column', gap: 8 }, children: Array.from({ length: 5 }).map((_, i) => (_jsx("div", { style: { height: 38, borderRadius: 8, backgroundColor: 'var(--color2)', border: '1px solid var(--borderColor)' } }, i))) })) : entries.length === 0 ? (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 200, textAlign: 'center' }, children: [_jsx(Folder, { size: 32 }), _jsx(Text, { style: { fontSize: 12, color: 'var(--color10)', marginTop: 8 }, children: "This folder is empty." })] })) : (_jsxs("table", { style: { width: '100%', textAlign: 'left', fontSize: 12, borderCollapse: 'collapse' }, children: [_jsx("thead", { children: _jsxs("tr", { style: { borderBottom: '1px solid var(--borderColor)', color: 'var(--color9)' }, children: [_jsx("th", { style: { padding: '10px 16px', fontWeight: 500 }, children: "Name" }), _jsx("th", { style: { padding: '10px 16px', fontWeight: 500, width: 110, textAlign: 'right' }, children: "Size" }), _jsx("th", { style: { padding: '10px 16px', fontWeight: 500, width: 140, textAlign: 'right' }, children: "Modified" }), _jsx("th", { style: { padding: '10px 16px', fontWeight: 500, width: 80, textAlign: 'right' }, children: "Actions" })] }) }), _jsx("tbody", { children: entries.map((entry) => {
|
|
36
|
+
const displayName = entry.key.replace(prefix, '').replace(/\/$/, '');
|
|
37
|
+
return (_jsxs("tr", { style: { borderBottom: '1px solid var(--borderColor)', transition: 'background-color 0.15s ease' }, children: [_jsx("td", { style: { padding: '10px 16px' }, children: entry.isDir ? (_jsxs("button", { onClick: () => onNavigatePrefix(entry.key), style: { display: 'inline-flex', alignItems: 'center', gap: 8, color: 'var(--color12)', fontWeight: 600, background: 'none', border: 'none', cursor: 'pointer', padding: 0 }, children: [_jsx(Folder, { size: 16 }), _jsx("span", { children: displayName })] })) : (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, color: 'var(--color11)' }, children: [_jsx(FileIcon, { size: 16 }), _jsx("span", { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: 300 }, children: displayName })] })) }), _jsx("td", { style: { padding: '10px 16px', textAlign: 'right', color: 'var(--color9)', fontFamily: 'monospace', fontSize: 11 }, children: entry.isDir ? '—' : weigh(entry.size) }), _jsx("td", { style: { padding: '10px 16px', textAlign: 'right', color: 'var(--color9)', fontSize: 11 }, children: entry.lastModified
|
|
38
|
+
? new Date(entry.lastModified).toLocaleDateString()
|
|
39
|
+
: '—' }), _jsx("td", { style: { padding: '10px 16px', textAlign: 'right' }, children: _jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end', gap: 4 }, children: [!entry.isDir && onDownloadFile && (_jsx("button", { onClick: () => onDownloadFile(entry), style: { padding: 4, borderRadius: 4, background: 'none', border: 'none', color: 'var(--color10)', cursor: 'pointer' }, title: "Download", children: _jsx(Download, { size: 14 }) })), onDeleteEntry && (_jsx("button", { onClick: () => onDeleteEntry(entry), style: { padding: 4, borderRadius: 4, background: 'none', border: 'none', color: 'var(--color10)', cursor: 'pointer' }, title: "Delete", children: _jsx(Trash2, { size: 14 }) }))] }) })] }, entry.key));
|
|
40
|
+
}) })] })) })] }));
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=DriveViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DriveViewer.js","sourceRoot":"","sources":["../../src/agents/DriveViewer.tsx"],"names":[],"mappings":"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"}
|