@lokvis/ui-react 0.2.1 → 0.2.2
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/dist/components/AssetPanel.d.ts.map +1 -1
- package/dist/components/AssetPanel.js +14 -14
- package/dist/components/AssetPanel.js.map +1 -1
- package/dist/components/Canvas.d.ts +4 -4
- package/dist/components/Canvas.d.ts.map +1 -1
- package/dist/components/Canvas.js +8 -8
- package/dist/components/Canvas.js.map +1 -1
- package/dist/components/CommandPalette.d.ts +7 -7
- package/dist/components/CommandPalette.d.ts.map +1 -1
- package/dist/components/CommandPalette.js +10 -10
- package/dist/components/CommandPalette.js.map +1 -1
- package/dist/components/CompareSlider.d.ts +6 -6
- package/dist/components/CompareSlider.d.ts.map +1 -1
- package/dist/components/CompareSlider.js +7 -7
- package/dist/components/CompareSlider.js.map +1 -1
- package/dist/components/DownloadPanel.d.ts +3 -3
- package/dist/components/DownloadPanel.d.ts.map +1 -1
- package/dist/components/DownloadPanel.js +9 -9
- package/dist/components/DownloadPanel.js.map +1 -1
- package/dist/components/ErrorBanner.d.ts +2 -2
- package/dist/components/ErrorBanner.d.ts.map +1 -1
- package/dist/components/ErrorBanner.js +3 -3
- package/dist/components/ErrorBanner.js.map +1 -1
- package/dist/components/ExifPanel.d.ts +1 -1
- package/dist/components/ExifPanel.d.ts.map +1 -1
- package/dist/components/ExifPanel.js +2 -2
- package/dist/components/ExifPanel.js.map +1 -1
- package/dist/components/GlobalDropzone.d.ts +5 -5
- package/dist/components/GlobalDropzone.d.ts.map +1 -1
- package/dist/components/GlobalDropzone.js +6 -6
- package/dist/components/GlobalDropzone.js.map +1 -1
- package/dist/components/HistoryPanel.d.ts +2 -2
- package/dist/components/HistoryPanel.d.ts.map +1 -1
- package/dist/components/HistoryPanel.js +23 -23
- package/dist/components/HistoryPanel.js.map +1 -1
- package/dist/components/Inspector.d.ts.map +1 -1
- package/dist/components/Inspector.js +6 -6
- package/dist/components/Inspector.js.map +1 -1
- package/dist/components/ParamForm.d.ts.map +1 -1
- package/dist/components/ParamForm.js +7 -7
- package/dist/components/ParamForm.js.map +1 -1
- package/dist/components/PipelineBar.d.ts.map +1 -1
- package/dist/components/PipelineBar.js +13 -13
- package/dist/components/PipelineBar.js.map +1 -1
- package/dist/components/ProgressBar.d.ts +4 -4
- package/dist/components/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar.js +8 -8
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/StatusBar.d.ts +3 -3
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar.js +11 -11
- package/dist/components/StatusBar.js.map +1 -1
- package/dist/components/ThemeToggle.d.ts +4 -4
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/ThemeToggle.js +7 -7
- package/dist/components/ThemeToggle.js.map +1 -1
- package/dist/components/Toolbar.d.ts.map +1 -1
- package/dist/components/Toolbar.js +2 -2
- package/dist/components/Toolbar.js.map +1 -1
- package/dist/components/WorkflowEditor.d.ts +6 -6
- package/dist/components/WorkflowEditor.d.ts.map +1 -1
- package/dist/components/WorkflowEditor.js +25 -25
- package/dist/components/WorkflowEditor.js.map +1 -1
- package/dist/components/WorkflowTemplates.d.ts +2 -2
- package/dist/components/WorkflowTemplates.d.ts.map +1 -1
- package/dist/components/WorkflowTemplates.js +3 -3
- package/dist/components/WorkflowTemplates.js.map +1 -1
- package/dist/components/Workspace.d.ts +22 -22
- package/dist/components/Workspace.d.ts.map +1 -1
- package/dist/components/Workspace.js +30 -30
- package/dist/components/Workspace.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/components/AssetPanel.tsx +263 -263
- package/src/components/Canvas.tsx +174 -174
- package/src/components/CommandPalette.tsx +242 -242
- package/src/components/CompareSlider.tsx +163 -163
- package/src/components/DownloadPanel.tsx +203 -203
- package/src/components/ErrorBanner.tsx +64 -64
- package/src/components/ExifPanel.tsx +154 -154
- package/src/components/GlobalDropzone.tsx +170 -170
- package/src/components/HistoryPanel.tsx +219 -219
- package/src/components/Inspector.tsx +136 -136
- package/src/components/ParamForm.tsx +136 -136
- package/src/components/PipelineBar.tsx +98 -98
- package/src/components/ProgressBar.tsx +78 -78
- package/src/components/StatusBar.tsx +148 -148
- package/src/components/ThemeToggle.tsx +98 -98
- package/src/components/Toolbar.tsx +65 -65
- package/src/components/WorkflowEditor.tsx +321 -321
- package/src/components/WorkflowTemplates.tsx +77 -77
- package/src/components/Workspace.tsx +223 -223
- package/src/css-modules.d.ts +3 -0
- package/src/index.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPanel.d.ts","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;
|
|
1
|
+
{"version":3,"file":"AssetPanel.d.ts","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,UAAU,CAAC,EAAE,SAAc,EAAE,EAAE,eAAe,qBAyQ7D"}
|
|
@@ -43,9 +43,9 @@ export function AssetPanel({ className = '' }) {
|
|
|
43
43
|
// 自动生成缩略图
|
|
44
44
|
// B2 修复:
|
|
45
45
|
// - cancelled flag:effect 重跑/卸载时,await 完成的 exportAsset 不再创建
|
|
46
|
-
//
|
|
46
|
+
// ObjectURL 也不 setThumbnail,避免覆盖更新值与孤儿 URL
|
|
47
47
|
// - inflightRef:同一 asset 在上一轮 effect 还在 await 时,新一轮 effect
|
|
48
|
-
//
|
|
48
|
+
// 不再重复发起(批量导入 assets 频繁变化场景)
|
|
49
49
|
React.useEffect(() => {
|
|
50
50
|
if (!runtime)
|
|
51
51
|
return;
|
|
@@ -106,22 +106,22 @@ export function AssetPanel({ className = '' }) {
|
|
|
106
106
|
}
|
|
107
107
|
return result;
|
|
108
108
|
}, [assets, filterType, searchQuery]);
|
|
109
|
-
return (_jsxs("aside", { className: `flex w-56 shrink-0 flex-col border-r border-
|
|
109
|
+
return (_jsxs("aside", { className: `flex w-56 shrink-0 flex-col border-r border-[var(--lokvis-border)] ${className}`, onDragOver: (e) => {
|
|
110
110
|
e.preventDefault();
|
|
111
111
|
setDragging(true);
|
|
112
112
|
}, onDragLeave: () => setDragging(false), onDrop: (e) => {
|
|
113
113
|
e.preventDefault();
|
|
114
114
|
setDragging(false);
|
|
115
115
|
void handleFiles(e.dataTransfer.files);
|
|
116
|
-
}, children: [_jsxs("div", { className: "flex items-center justify-between px-3 h-10 shrink-0 border-b border-
|
|
116
|
+
}, children: [_jsxs("div", { className: "flex items-center justify-between px-3 h-10 shrink-0 border-b border-[var(--lokvis-border)]", children: [_jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Assets" }), _jsx("span", { className: "text-[11px] tabular-nums text-[var(--lokvis-fg-subtle)]", children: filterType === 'all' && !searchQuery
|
|
117
117
|
? assets.length
|
|
118
118
|
: `${filteredAssets.length}/${assets.length}` })] }), _jsxs("label", { className: `m-2 block cursor-pointer rounded-lg border border-dashed px-2 py-3 text-center transition-all ${dragging
|
|
119
|
-
? 'border-
|
|
120
|
-
: 'border-
|
|
121
|
-
? 'bg-
|
|
122
|
-
: 'bg-
|
|
123
|
-
? 'bg-
|
|
124
|
-
: 'bg-
|
|
119
|
+
? 'border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10 text-[var(--lokvis-primary)]'
|
|
120
|
+
: 'border-[var(--lokvis-border)] text-[var(--lokvis-fg-subtle)] hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-primary)]/10/50 hover:text-[var(--lokvis-primary)]'}`, children: [_jsx("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => handleFiles(e.target.files) }), _jsx(Icon, { size: 16, className: "mx-auto", children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), _jsx("span", { className: "mt-1 block text-[10px] font-medium", children: dragging ? 'Drop here' : 'Add files' })] }), assets.length > 0 && (_jsxs("div", { className: "px-2 pb-2 space-y-1.5", children: [_jsxs("div", { role: "radiogroup", "aria-label": "Filter by type", className: "flex flex-wrap gap-1", children: [_jsx("button", { type: "button", role: "radio", "aria-checked": filterType === 'all', onClick: () => setFilterType('all'), className: `rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${filterType === 'all'
|
|
121
|
+
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
122
|
+
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: "All" }), availableTypes.map((t) => (_jsx("button", { type: "button", role: "radio", "aria-checked": filterType === t, onClick: () => setFilterType(t), className: `rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${filterType === t
|
|
123
|
+
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
124
|
+
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: TYPE_LABEL[t] }, t)))] }), _jsxs("div", { className: "relative", children: [_jsxs(Icon, { size: 11, className: "absolute left-1.5 top-1/2 -translate-y-1/2 text-[var(--lokvis-fg-subtle)] pointer-events-none", children: [_jsx("circle", { cx: "10", cy: "10", r: "6" }), _jsx("path", { d: "m20 20-5-5" })] }), _jsx("input", { type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Filter by type...", "aria-label": "Filter assets by format", className: "w-full rounded bg-[var(--lokvis-surface-muted)] py-1 pl-6 pr-1.5 text-[10px] text-[var(--lokvis-fg-muted)] placeholder:text-[var(--lokvis-fg-subtle)] focus:outline-none focus:ring-1 focus:ring-[var(--lokvis-primary)]/50" })] })] })), _jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: assets.length === 0 ? (_jsx("p", { className: "px-1 py-4 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "No assets imported" })) : filteredAssets.length === 0 ? (_jsx("p", { className: "px-1 py-4 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "No assets match filter" })) : (_jsx("ul", { className: "space-y-1", children: filteredAssets.map((asset) => {
|
|
125
125
|
const selected = asset.id === selectedAssetId;
|
|
126
126
|
const thumb = thumbnails[asset.id];
|
|
127
127
|
return (_jsxs("li", {
|
|
@@ -131,12 +131,12 @@ export function AssetPanel({ className = '' }) {
|
|
|
131
131
|
e.preventDefault();
|
|
132
132
|
selectAsset(asset.id);
|
|
133
133
|
}
|
|
134
|
-
}, className: `group flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-xs transition-all focus:outline-none focus:ring-2 focus:ring-
|
|
135
|
-
? 'bg-
|
|
136
|
-
: 'hover:bg-
|
|
134
|
+
}, className: `group flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-xs transition-all focus:outline-none focus:ring-2 focus:ring-[var(--lokvis-primary)]/50 ${selected
|
|
135
|
+
? 'bg-[var(--lokvis-primary)]/10 ring-1 ring-[var(--lokvis-primary)]/40'
|
|
136
|
+
: 'hover:bg-[var(--lokvis-surface)]'}`, children: [_jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded bg-[var(--lokvis-surface-muted)]", children: thumb ? (_jsx("img", { src: thumb, alt: "", className: "h-full w-full object-cover" })) : (_jsx("span", { className: "text-[10px] font-medium text-[var(--lokvis-fg-subtle)]", children: asset.metadata.format.slice(0, 3).toUpperCase() })) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-[11px] font-medium", children: asset.metadata.format }), _jsxs("div", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [(asset.metadata.size / 1024).toFixed(1), " KB"] })] }), _jsx("button", { type: "button", onClick: (e) => {
|
|
137
137
|
e.stopPropagation();
|
|
138
138
|
void removeAsset(asset.id);
|
|
139
|
-
}, className: "shrink-0 rounded p-0.5 text-
|
|
139
|
+
}, className: "shrink-0 rounded p-0.5 text-[var(--lokvis-fg-subtle)] opacity-0 transition-all hover:bg-[var(--lokvis-danger)]/10 hover:text-[var(--lokvis-danger)] focus:opacity-100 group-hover:opacity-100", "aria-label": `Remove asset ${asset.metadata.format}`, children: _jsx(Icon, { size: 12, children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }) })] }, asset.id));
|
|
140
140
|
}) })) })] }));
|
|
141
141
|
}
|
|
142
142
|
//# sourceMappingURL=AssetPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPanel.js","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMtD,oBAAoB;AACpB,MAAM,UAAU,GAA8B;
|
|
1
|
+
{"version":3,"file":"AssetPanel.js","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
* 工作流节点链已移至独立的 PipelineBar 组件。
|
|
6
6
|
*
|
|
7
7
|
* W9.4: 当存在 lastOutputIds 时,可切换到 CompareSlider 模式,
|
|
8
|
-
*
|
|
8
|
+
* 并排展示 before/after。
|
|
9
9
|
*/
|
|
10
10
|
import * as React from 'react';
|
|
11
11
|
export interface CanvasProps {
|
|
12
12
|
className?: string;
|
|
13
13
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
* 是否启用 before/after 对比模式(W9.4)。
|
|
15
|
+
* 默认 true;关闭后即使有 outputs 也只显示单图预览。
|
|
16
|
+
*/
|
|
17
17
|
enableCompare?: boolean;
|
|
18
18
|
}
|
|
19
19
|
export declare function Canvas({ className, enableCompare }: CanvasProps): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;MAGE;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAc,EAAE,aAAoB,EAAE,EAAE,WAAW,qBAgL3E"}
|
|
@@ -6,7 +6,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
6
6
|
* 工作流节点链已移至独立的 PipelineBar 组件。
|
|
7
7
|
*
|
|
8
8
|
* W9.4: 当存在 lastOutputIds 时,可切换到 CompareSlider 模式,
|
|
9
|
-
*
|
|
9
|
+
* 并排展示 before/after。
|
|
10
10
|
*/
|
|
11
11
|
import * as React from 'react';
|
|
12
12
|
import { Icon } from '@lokvis/ui-core';
|
|
@@ -56,16 +56,16 @@ export function Canvas({ className = '', enableCompare = true }) {
|
|
|
56
56
|
if (e.dataTransfer.files.length > 0) {
|
|
57
57
|
void importFiles(Array.from(e.dataTransfer.files));
|
|
58
58
|
}
|
|
59
|
-
}, children: _jsxs("div", { className: "relative flex flex-1 items-center justify-center bg-
|
|
59
|
+
}, children: _jsxs("div", { className: "relative flex flex-1 items-center justify-center bg-[var(--lokvis-surface)]", children: [_jsx("div", { className: "absolute inset-0 opacity-[0.35]", style: {
|
|
60
60
|
backgroundImage: 'radial-gradient(circle, #d4d4d8 1px, transparent 1px)',
|
|
61
61
|
backgroundSize: '20px 20px',
|
|
62
|
-
} }), canCompare && (_jsxs("div", { className: "absolute top-2 right-2 z-20 flex items-center gap-1 rounded-md bg-
|
|
63
|
-
? 'bg-
|
|
64
|
-
: 'text-
|
|
65
|
-
? 'bg-
|
|
66
|
-
: 'text-
|
|
62
|
+
} }), canCompare && (_jsxs("div", { className: "absolute top-2 right-2 z-20 flex items-center gap-1 rounded-md bg-[var(--lokvis-surface)]/90 p-0.5 shadow-sm backdrop-blur-sm", children: [_jsx("button", { type: "button", onClick: () => setCompareMode(false), "aria-pressed": !compareMode, className: `rounded px-2 py-1 text-[10px] font-medium transition-colors ${!compareMode
|
|
63
|
+
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
64
|
+
: 'text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)]'}`, children: "Single" }), _jsx("button", { type: "button", onClick: () => setCompareMode(true), "aria-pressed": compareMode, className: `rounded px-2 py-1 text-[10px] font-medium transition-colors ${compareMode
|
|
65
|
+
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
66
|
+
: 'text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)]'}`, children: "Compare" })] })), dragOver && (_jsx("div", { className: "absolute inset-4 z-10 rounded-xl border-2 border-dashed border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10/80 flex items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx(Icon, { size: 32, className: "mx-auto text-[var(--lokvis-primary)]", strokeWidth: 1.5, children: _jsx("path", { d: "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5" }) }), _jsx("p", { className: "mt-2 text-sm font-medium text-[var(--lokvis-primary)]", children: "Drop files to import" })] }) })), compareMode && canCompare ? (_jsx("div", { className: "relative flex max-h-[calc(100%-4rem)] max-w-[calc(100%-4rem)] items-center justify-center", children: _jsx(CompareSlider, { className: "max-h-[calc(100vh-12rem)] max-w-full" }) })) : selected ? (preview ? (_jsxs("div", { className: "relative", children: [_jsx("img", { src: preview, alt: selected.metadata.format, className: "max-h-[calc(100%-4rem)] max-w-[calc(100%-4rem)] rounded-lg object-contain shadow-2xl shadow-black/10 ring-1 ring-black/5" }), _jsx("div", { className: "absolute bottom-2 left-2 rounded-lg bg-[var(--lokvis-surface)]/90 px-2.5 py-1 text-[11px] text-[var(--lokvis-fg-muted)] shadow-sm backdrop-blur-sm", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: selected.metadata.format.toUpperCase() }), selected.metadata.dimensions && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", children: "\u00B7" }), _jsxs("span", { children: [selected.metadata.dimensions.width, " x ", selected.metadata.dimensions.height] })] })), _jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", children: "\u00B7" }), _jsxs("span", { children: [(selected.metadata.size / 1024).toFixed(1), " KB"] })] }) })] })) : (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsx("div", { className: "h-28 w-28 animate-pulse rounded-xl bg-[var(--lokvis-border)]" }), _jsx("span", { className: "text-xs text-[var(--lokvis-fg-subtle)]", children: "Loading preview..." })] }))) : (_jsxs("div", { className: "relative flex flex-col items-center gap-5 px-6 text-center", children: [_jsx("div", { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-[var(--lokvis-surface)] shadow-sm ring-1 ring-[var(--lokvis-border)]/80", children: _jsx(Icon, { size: 36, className: "text-[var(--lokvis-fg-subtle)]", strokeWidth: 1.5, children: _jsx("path", { d: "m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z" }) }) }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg-muted)]", children: "No asset selected" }), _jsx("p", { className: "mt-1.5 text-xs text-[var(--lokvis-fg-subtle)]", children: assets.length === 0
|
|
67
67
|
? 'Import files to get started, or drag them here'
|
|
68
|
-
: 'Select an asset from the left panel' })] }), assets.length === 0 && (_jsxs("label", { className: "mt-2 inline-flex items-center gap-1.5 rounded-lg bg-
|
|
68
|
+
: 'Select an asset from the left panel' })] }), assets.length === 0 && (_jsxs("label", { className: "mt-2 inline-flex items-center gap-1.5 rounded-lg bg-[var(--lokvis-primary-hover)] px-4 py-2 text-xs font-medium text-[var(--lokvis-primary-fg)] shadow-sm cursor-pointer transition-colors hover:bg-[var(--lokvis-primary)]", children: [_jsx(Icon, { size: 14, children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), "Import Files", _jsx("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => {
|
|
69
69
|
if (e.target.files)
|
|
70
70
|
void importFiles(Array.from(e.target.files));
|
|
71
71
|
} })] }))] }))] }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.js","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWnD,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,aAAa,GAAG,IAAI,EAAe;
|
|
1
|
+
{"version":3,"file":"Canvas.js","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* CommandPalette - ⌘K 工具选择器(W9.2)
|
|
3
3
|
*
|
|
4
4
|
* Command Palette 风格的快捷工具入口:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* - ⌘K / Ctrl+K 打开
|
|
6
|
+
* - ESC 关闭
|
|
7
|
+
* - 输入关键词过滤能力列表
|
|
8
|
+
* - ↑↓ 选择,Enter 添加到工作流,or 鼠标点击
|
|
9
9
|
*
|
|
10
10
|
* 数据源:`store.capabilities`,与 Inspector 右侧能力列表同源。
|
|
11
11
|
* 选中后调用 `store.addNode(cap.name)` 添加到工作流,并关闭面板。
|
|
@@ -34,9 +34,9 @@ export declare function CommandPalette({ open, onClose, className }: CommandPale
|
|
|
34
34
|
* // 或禁用快捷键(仍可受控使用 open/setOpen):
|
|
35
35
|
* const [open, setOpen] = useCommandPalette({ enabled: false });
|
|
36
36
|
* return (
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
37
|
+
* <>
|
|
38
|
+
* <CommandPalette open={open} onClose={() => setOpen(false)} />
|
|
39
|
+
* </>
|
|
40
40
|
* );
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,mBAAmB;IACnC,eAAe;IACf,IAAI,EAAE,OAAO,CAAC;IACd,WAAW;IACX,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAc,EAAE,EAAE,mBAAmB,qBAiOpF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,wBAAwB;IACxC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAkB1D"}
|
|
@@ -3,10 +3,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* CommandPalette - ⌘K 工具选择器(W9.2)
|
|
4
4
|
*
|
|
5
5
|
* Command Palette 风格的快捷工具入口:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* - ⌘K / Ctrl+K 打开
|
|
7
|
+
* - ESC 关闭
|
|
8
|
+
* - 输入关键词过滤能力列表
|
|
9
|
+
* - ↑↓ 选择,Enter 添加到工作流,or 鼠标点击
|
|
10
10
|
*
|
|
11
11
|
* 数据源:`store.capabilities`,与 Inspector 右侧能力列表同源。
|
|
12
12
|
* 选中后调用 `store.addNode(cap.name)` 添加到工作流,并关闭面板。
|
|
@@ -120,18 +120,18 @@ export function CommandPalette({ open, onClose, className = '' }) {
|
|
|
120
120
|
handleSelect(cmd);
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
|
-
return (_jsx(Dialog, { open: open, onClose: onClose, size: "md", closeOnOverlay: true, children: _jsxs("div", { className: `-mx-5 -my-5 ${className}`, children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-
|
|
123
|
+
return (_jsx(Dialog, { open: open, onClose: onClose, size: "md", closeOnOverlay: true, children: _jsxs("div", { className: `-mx-5 -my-5 ${className}`, children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--lokvis-border)] px-4 py-3", children: [_jsxs(Icon, { size: 16, className: "text-[var(--lokvis-fg-subtle)]", children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }), _jsx("input", { ref: inputRef, type: "text", value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: handleKeyDown, placeholder: "Search commands or capabilities...", "aria-label": "Search commands", className: "flex-1 bg-transparent text-sm text-[var(--lokvis-fg)] placeholder:text-[var(--lokvis-fg-subtle)] focus:outline-none", autoComplete: "off", spellCheck: false }), _jsx("kbd", { className: "rounded border border-[var(--lokvis-border)] px-1.5 py-0.5 text-[9px] font-medium text-[var(--lokvis-fg-subtle)]", children: "ESC" })] }), _jsx("ul", { ref: listRef, className: "max-h-80 overflow-y-auto py-1", role: "listbox", "aria-label": "Available commands", children: filtered.length === 0 ? (_jsx("li", { className: "px-4 py-6 text-center text-xs text-[var(--lokvis-fg-subtle)]", children: "No matching commands" })) : (filtered.map((cmd, i) => {
|
|
124
124
|
const isActive = i === activeIndex;
|
|
125
125
|
const isCap = cmd.kind === 'capability';
|
|
126
126
|
const primary = isCap ? cmd.cap.name : cmd.label;
|
|
127
127
|
const secondary = isCap ? cmd.cap.description : cmd.description;
|
|
128
128
|
const disabled = !isCap && cmd.disabled;
|
|
129
129
|
return (_jsx("li", { "data-index": i, role: "option", "aria-selected": isActive, "aria-disabled": disabled, children: _jsxs("button", { type: "button", onMouseEnter: () => setActiveIndex(i), onClick: () => !disabled && handleSelect(cmd), disabled: disabled, className: `flex w-full items-center gap-3 px-4 py-2 text-left transition-colors ${isActive && !disabled
|
|
130
|
-
? 'bg-
|
|
131
|
-
: ''} ${disabled ? 'cursor-not-allowed opacity-40' : 'hover:bg-
|
|
132
|
-
? 'bg-
|
|
133
|
-
: 'bg-
|
|
134
|
-
})) }), _jsxs("div", { className: "flex items-center justify-between border-t border-
|
|
130
|
+
? 'bg-[var(--lokvis-primary)]/10'
|
|
131
|
+
: ''} ${disabled ? 'cursor-not-allowed opacity-40' : 'hover:bg-[var(--lokvis-surface)]'}`, children: [_jsx("span", { className: `flex h-6 w-6 shrink-0 items-center justify-center rounded ${isCap
|
|
132
|
+
? 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)]'
|
|
133
|
+
: 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'}`, children: _jsx(Icon, { size: 12, strokeWidth: 2, children: isCap ? (_jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" })) : (_jsx("path", { d: "M13 2L3 14h7l-1 8 10-12h-7l1-8z" })) }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className: "truncate text-xs font-medium text-[var(--lokvis-fg)]", children: primary }), isCap && (_jsx("span", { className: "shrink-0 rounded px-1 py-0.5 text-[9px] font-medium uppercase bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)]", children: cmd.cap.performance }))] }), _jsx("p", { className: "truncate text-[10px] text-[var(--lokvis-fg-muted)]", children: secondary })] })] }) }, isCap ? `cap:${cmd.cap.name}` : `act:${cmd.id}`));
|
|
134
|
+
})) }), _jsxs("div", { className: "flex items-center justify-between border-t border-[var(--lokvis-border)] px-4 py-2 text-[10px] text-[var(--lokvis-fg-subtle)]", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "rounded border border-[var(--lokvis-border)] px-1", children: "\u2191\u2193" }), _jsx("span", { children: "navigate" }), _jsx("kbd", { className: "ml-2 rounded border border-[var(--lokvis-border)] px-1", children: "\u21B5" }), _jsx("span", { children: "select" })] }), _jsxs("span", { children: [filtered.length, " command", filtered.length !== 1 ? 's' : ''] })] })] }) }));
|
|
135
135
|
}
|
|
136
136
|
export function useCommandPalette(options = {}) {
|
|
137
137
|
const { enabled = true } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUtD,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAuB;
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* before / after 两张图。用于直观展示工作流处理效果。
|
|
6
6
|
*
|
|
7
7
|
* 交互:
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* - 鼠标拖拽分隔条(或点击容器任意位置)调整揭示比例
|
|
9
|
+
* - 触摸:touchmove 同步
|
|
10
|
+
* - 键盘:← → 调整 5% 步长(聚焦分隔条时)
|
|
11
11
|
*
|
|
12
12
|
* 数据来源:
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* - before: `store.selectedAssetId` 对应的 thumbnails(由 AssetPanel 自动生成)
|
|
14
|
+
* - after: `store.selectedOutputId` 对应的 thumbnails
|
|
15
|
+
* - 任一缺失则不渲染(返回 null)
|
|
16
16
|
*
|
|
17
17
|
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由 AssetPanel
|
|
18
18
|
* 的 effect 统一生成并存入 store.thumbnails,本组件按 assetId 取用。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompareSlider.d.ts","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"CompareSlider.d.ts","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,kBAAkB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAc,EAAE,EAAE,kBAAkB,4BA6JnE"}
|
|
@@ -6,14 +6,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* before / after 两张图。用于直观展示工作流处理效果。
|
|
7
7
|
*
|
|
8
8
|
* 交互:
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* - 鼠标拖拽分隔条(或点击容器任意位置)调整揭示比例
|
|
10
|
+
* - 触摸:touchmove 同步
|
|
11
|
+
* - 键盘:← → 调整 5% 步长(聚焦分隔条时)
|
|
12
12
|
*
|
|
13
13
|
* 数据来源:
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* - before: `store.selectedAssetId` 对应的 thumbnails(由 AssetPanel 自动生成)
|
|
15
|
+
* - after: `store.selectedOutputId` 对应的 thumbnails
|
|
16
|
+
* - 任一缺失则不渲染(返回 null)
|
|
17
17
|
*
|
|
18
18
|
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由 AssetPanel
|
|
19
19
|
* 的 effect 统一生成并存入 store.thumbnails,本组件按 assetId 取用。
|
|
@@ -101,6 +101,6 @@ export function CompareSlider({ className = '' }) {
|
|
|
101
101
|
};
|
|
102
102
|
if (!beforeUrl || !afterUrl)
|
|
103
103
|
return null;
|
|
104
|
-
return (_jsxs("div", { ref: containerRef, className: `relative select-none overflow-hidden rounded-lg ring-1 ring-black/5
|
|
104
|
+
return (_jsxs("div", { ref: containerRef, className: `relative select-none overflow-hidden rounded-lg ring-1 ring-black/5 ${className}`, onMouseDown: handleMouseDown, onTouchStart: handleTouchStart, children: [_jsx("img", { src: afterUrl, alt: "After", draggable: false, className: "block max-h-full max-w-full object-contain pointer-events-none" }), _jsx("div", { className: "absolute inset-0", style: { clipPath: `inset(0 ${100 - pos}% 0 0)` }, children: _jsx("img", { src: beforeUrl, alt: "Before", draggable: false, className: "block max-h-full max-w-full object-contain pointer-events-none" }) }), _jsx("span", { className: "absolute top-2 left-2 rounded bg-black/60 px-1.5 py-0.5 text-[10px] font-medium text-[var(--lokvis-primary-fg)]", children: "Before" }), _jsx("span", { className: "absolute top-2 right-2 rounded bg-black/60 px-1.5 py-0.5 text-[10px] font-medium text-[var(--lokvis-primary-fg)]", children: "After" }), _jsxs("div", { className: "absolute top-0 bottom-0 z-10 cursor-ew-resize", style: { left: `${pos}%`, transform: 'translateX(-50%)' }, role: "separator", "aria-valuenow": Math.round(pos), "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": "Comparison slider position", tabIndex: 0, onKeyDown: handleKeyDown, children: [_jsx("div", { className: "absolute inset-y-0 left-1/2 w-0.5 -translate-x-1/2 bg-[var(--lokvis-surface)] shadow-md" }), _jsx("div", { className: "absolute top-1/2 left-1/2 flex h-8 w-8 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-[var(--lokvis-surface)] shadow-lg ring-1 ring-black/10", children: _jsx(Icon, { size: 14, className: "text-[var(--lokvis-fg-muted)]", children: _jsx("path", { d: "M9 5l-5 7 5 7M15 5l5 7-5 7" }) }) })] }), (beforeAsset || afterAsset) && (_jsxs("div", { className: "absolute bottom-2 inset-x-2 flex justify-between text-[10px] text-[var(--lokvis-primary-fg)]", children: [beforeAsset?.metadata.dimensions && (_jsxs("span", { className: "rounded bg-black/60 px-1.5 py-0.5", children: [beforeAsset.metadata.dimensions.width, "\u00D7", beforeAsset.metadata.dimensions.height] })), afterAsset?.metadata.dimensions && (_jsxs("span", { className: "rounded bg-black/60 px-1.5 py-0.5", children: [afterAsset.metadata.dimensions.width, "\u00D7", afterAsset.metadata.dimensions.height] }))] }))] }));
|
|
105
105
|
}
|
|
106
106
|
//# sourceMappingURL=CompareSlider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompareSlider.js","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMtD,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,GAAG,EAAE,EAAsB;
|
|
1
|
+
{"version":3,"file":"CompareSlider.js","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* DownloadPanel - 工作流输出下载面板(W9.5)
|
|
3
3
|
*
|
|
4
4
|
* 展示上次工作流执行的输出资产,提供:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* - 单项下载(从 runtime.exportAsset 取 blob,触发浏览器下载)
|
|
6
|
+
* - 全部下载(逐项触发,BATCH_DOWNLOAD_DELAY_MS 间隔,避免浏览器拦截;长期方案见该常量注释)
|
|
7
|
+
* - 清空输出列表
|
|
8
8
|
*
|
|
9
9
|
* 与 apps/playground 的 DownloadManager(独立工具页)不同:本组件是 Workspace
|
|
10
10
|
* 内嵌的轻量面板,数据来自 store.lastOutputIds(由 workflow-slice.run 写入)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadPanel.d.ts","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"DownloadPanel.d.ts","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,kBAAkB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD,wBAAgB,aAAa,CAAC,EAAE,SAAc,EAAE,EAAE,kBAAkB,4BA0LnE"}
|
|
@@ -3,9 +3,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* DownloadPanel - 工作流输出下载面板(W9.5)
|
|
4
4
|
*
|
|
5
5
|
* 展示上次工作流执行的输出资产,提供:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* - 单项下载(从 runtime.exportAsset 取 blob,触发浏览器下载)
|
|
7
|
+
* - 全部下载(逐项触发,BATCH_DOWNLOAD_DELAY_MS 间隔,避免浏览器拦截;长期方案见该常量注释)
|
|
8
|
+
* - 清空输出列表
|
|
9
9
|
*
|
|
10
10
|
* 与 apps/playground 的 DownloadManager(独立工具页)不同:本组件是 Workspace
|
|
11
11
|
* 内嵌的轻量面板,数据来自 store.lastOutputIds(由 workflow-slice.run 写入)。
|
|
@@ -115,7 +115,7 @@ export function DownloadPanel({ className = '' }) {
|
|
|
115
115
|
setStatus('Downloading outputs...');
|
|
116
116
|
// 用本地 Set 跟踪本次循环已下载 id,避免 downloaded 闭包快照与 state 不同步
|
|
117
117
|
// (review 反馈:循环中 setDownloaded 更新 state 但闭包 downloaded 不变,
|
|
118
|
-
//
|
|
118
|
+
// 虽有 batchDownloading guard 阻止并发,逻辑上仍应读取最新已下载集合)
|
|
119
119
|
const localDownloaded = new Set(downloaded);
|
|
120
120
|
try {
|
|
121
121
|
for (const asset of outputAssets) {
|
|
@@ -158,12 +158,12 @@ export function DownloadPanel({ className = '' }) {
|
|
|
158
158
|
}
|
|
159
159
|
if (outputAssets.length === 0)
|
|
160
160
|
return null;
|
|
161
|
-
return (_jsxs("div", { className: `flex flex-col border-t border-
|
|
161
|
+
return (_jsxs("div", { className: `flex flex-col border-t border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] ${className}`, "aria-label": "Outputs panel", children: [_jsxs("div", { className: "flex items-center justify-between px-3 h-9 shrink-0 border-b border-[var(--lokvis-border)]", children: [_jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Outputs" }), _jsxs("span", { className: "text-[11px] tabular-nums text-[var(--lokvis-fg-subtle)]", children: [downloadedCount, "/", outputAssets.length, " \u00B7 ", formatBytes(totalSize)] })] }), _jsxs("div", { className: "flex items-center gap-2 px-3 py-2 overflow-x-auto", children: [outputAssets.map((asset) => {
|
|
162
162
|
const isDownloaded = downloaded.has(asset.id);
|
|
163
163
|
const dims = asset.metadata.dimensions;
|
|
164
|
-
return (_jsxs("div", { className: "flex shrink-0 flex-col gap-1 rounded-md border border-
|
|
165
|
-
? 'bg-
|
|
166
|
-
: 'bg-
|
|
167
|
-
}), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => void handleDownloadAll(), disabled: batchDownloading || allDownloaded, className: "rounded-md bg-
|
|
164
|
+
return (_jsxs("div", { className: "flex shrink-0 flex-col gap-1 rounded-md border border-[var(--lokvis-border)] p-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "rounded bg-[var(--lokvis-surface-muted)] px-1 py-0.5 text-[9px] font-medium text-[var(--lokvis-fg-muted)]", children: asset.metadata.format.toUpperCase() }), dims && (_jsxs("span", { className: "text-[10px] text-[var(--lokvis-fg-muted)] tabular-nums", children: [dims.width, "\u00D7", dims.height] })), _jsx("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)] tabular-nums", children: formatBytes(asset.metadata.size) })] }), _jsx("div", { className: "flex items-center gap-1", children: _jsxs("button", { type: "button", onClick: () => void handleDownloadOne(asset.id), className: `flex items-center gap-1 rounded px-2 py-0.5 text-[10px] font-medium transition-colors ${isDownloaded
|
|
165
|
+
? 'bg-[var(--lokvis-success)]/15 text-[var(--lokvis-success)]'
|
|
166
|
+
: 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)] hover:bg-[var(--lokvis-primary)]/25'}`, children: [_jsx(Icon, { size: 10, strokeWidth: 2, children: _jsx("path", { d: "M12 3v12m0 0l-4-4m4 4l4-4M3 17v2a2 2 0 002 2h14a2 2 0 002-2v-2" }) }), isDownloaded ? 'Downloaded' : 'Download'] }) })] }, asset.id));
|
|
167
|
+
}), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => void handleDownloadAll(), disabled: batchDownloading || allDownloaded, className: "rounded-md bg-[var(--lokvis-primary-hover)] px-2.5 py-1 text-[10px] font-medium text-[var(--lokvis-primary-fg)] hover:bg-[var(--lokvis-primary)] disabled:cursor-not-allowed disabled:opacity-50", children: batchDownloading ? 'Downloading...' : 'Download All' }), _jsx("button", { type: "button", onClick: handleClear, className: "rounded-md px-2 py-1 text-[10px] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: "Clear" })] })] }), error && (_jsx("p", { className: "px-3 pb-2 text-[10px] text-[var(--lokvis-danger)]", role: "alert", children: error }))] }));
|
|
168
168
|
}
|
|
169
169
|
//# sourceMappingURL=DownloadPanel.js.map
|