@lokvis/ui-react 0.2.2 → 0.4.1
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 +10 -54
- package/dist/components/AssetPanel.js.map +1 -1
- package/dist/components/Canvas.d.ts.map +1 -1
- package/dist/components/Canvas.js +4 -4
- package/dist/components/Canvas.js.map +1 -1
- package/dist/components/CompareSlider.d.ts +4 -3
- package/dist/components/CompareSlider.d.ts.map +1 -1
- package/dist/components/CompareSlider.js +5 -4
- package/dist/components/CompareSlider.js.map +1 -1
- package/dist/components/DownloadPanel.d.ts.map +1 -1
- package/dist/components/DownloadPanel.js +1 -8
- package/dist/components/DownloadPanel.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts +40 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +52 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/ExifPanel.js +1 -1
- package/dist/components/ExifPanel.js.map +1 -1
- package/dist/components/GlobalDropzone.d.ts.map +1 -1
- package/dist/components/GlobalDropzone.js +10 -3
- package/dist/components/GlobalDropzone.js.map +1 -1
- package/dist/components/Inspector.d.ts.map +1 -1
- package/dist/components/Inspector.js +10 -7
- package/dist/components/Inspector.js.map +1 -1
- package/dist/components/ParamForm.d.ts.map +1 -1
- package/dist/components/ParamForm.js +8 -5
- package/dist/components/ParamForm.js.map +1 -1
- package/dist/components/PipelineBar.d.ts.map +1 -1
- package/dist/components/PipelineBar.js +17 -26
- package/dist/components/PipelineBar.js.map +1 -1
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar.js +3 -12
- package/dist/components/StatusBar.js.map +1 -1
- package/dist/components/StatusDot.d.ts +12 -0
- package/dist/components/StatusDot.d.ts.map +1 -0
- package/dist/components/StatusDot.js +15 -0
- package/dist/components/StatusDot.js.map +1 -0
- package/dist/components/ThemeToggle.js +1 -1
- package/dist/components/ThemeToggle.js.map +1 -1
- package/dist/components/ToolRunner.d.ts +53 -0
- package/dist/components/ToolRunner.d.ts.map +1 -0
- package/dist/components/ToolRunner.js +142 -0
- package/dist/components/ToolRunner.js.map +1 -0
- package/dist/components/Toolbar.js +2 -2
- package/dist/components/Toolbar.js.map +1 -1
- package/dist/components/WorkflowEditor.d.ts.map +1 -1
- package/dist/components/WorkflowEditor.js +31 -40
- package/dist/components/WorkflowEditor.js.map +1 -1
- package/dist/components/WorkflowTemplates.d.ts.map +1 -1
- package/dist/components/WorkflowTemplates.js +15 -5
- package/dist/components/WorkflowTemplates.js.map +1 -1
- package/dist/components/Workspace.d.ts +23 -1
- package/dist/components/Workspace.d.ts.map +1 -1
- package/dist/components/Workspace.js +60 -13
- package/dist/components/Workspace.js.map +1 -1
- package/dist/hooks/useCustomPresets.d.ts +98 -0
- package/dist/hooks/useCustomPresets.d.ts.map +1 -0
- package/dist/hooks/useCustomPresets.js +210 -0
- package/dist/hooks/useCustomPresets.js.map +1 -0
- package/dist/hooks/useLokvis.d.ts +19 -1
- package/dist/hooks/useLokvis.d.ts.map +1 -1
- package/dist/hooks/useLokvis.js +30 -9
- package/dist/hooks/useLokvis.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/store/assets-slice.d.ts +8 -1
- package/dist/store/assets-slice.d.ts.map +1 -1
- package/dist/store/assets-slice.js +101 -54
- package/dist/store/assets-slice.js.map +1 -1
- package/dist/store/capabilities-slice.d.ts +1 -1
- package/dist/store/capabilities-slice.d.ts.map +1 -1
- package/dist/store/capabilities-slice.js +8 -1
- package/dist/store/capabilities-slice.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/runtime-slice.d.ts.map +1 -1
- package/dist/store/runtime-slice.js +22 -16
- package/dist/store/runtime-slice.js.map +1 -1
- package/dist/store/subscribe-utils.d.ts +45 -0
- package/dist/store/subscribe-utils.d.ts.map +1 -0
- package/dist/store/subscribe-utils.js +69 -0
- package/dist/store/subscribe-utils.js.map +1 -0
- package/dist/store/types.d.ts +19 -11
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/types.js +0 -10
- package/dist/store/types.js.map +1 -1
- package/dist/store/workflow-slice.d.ts +1 -1
- package/dist/store/workflow-slice.d.ts.map +1 -1
- package/dist/store/workflow-slice.js +19 -51
- package/dist/store/workflow-slice.js.map +1 -1
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +31 -0
- package/dist/utils.js.map +1 -0
- package/package.json +7 -6
- package/src/components/AssetPanel.tsx +18 -58
- package/src/components/Canvas.tsx +11 -7
- package/src/components/CompareSlider.tsx +13 -10
- package/src/components/DownloadPanel.tsx +1 -7
- package/src/components/ErrorBoundary.tsx +101 -0
- package/src/components/ExifPanel.tsx +1 -1
- package/src/components/GlobalDropzone.tsx +8 -3
- package/src/components/Inspector.tsx +24 -16
- package/src/components/ParamForm.tsx +12 -9
- package/src/components/PipelineBar.tsx +20 -27
- package/src/components/StatusBar.tsx +3 -10
- package/src/components/StatusDot.tsx +27 -0
- package/src/components/ThemeToggle.tsx +1 -1
- package/src/components/ToolRunner.tsx +352 -0
- package/src/components/Toolbar.tsx +2 -2
- package/src/components/WorkflowEditor.tsx +50 -43
- package/src/components/WorkflowTemplates.tsx +27 -4
- package/src/components/Workspace.tsx +97 -10
- package/src/hooks/useCustomPresets.ts +284 -0
- package/src/hooks/useLokvis.ts +43 -10
- package/src/index.ts +3 -0
- package/src/store/assets-slice.ts +106 -52
- package/src/store/capabilities-slice.ts +10 -2
- package/src/store/index.ts +1 -1
- package/src/store/runtime-slice.ts +20 -15
- package/src/store/subscribe-utils.ts +82 -0
- package/src/store/types.ts +19 -12
- package/src/store/workflow-slice.ts +19 -53
- package/src/utils.ts +41 -0
- package/dist/store.d.ts +0 -76
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -217
- package/dist/store.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalDropzone.js","sourceRoot":"","sources":["../../src/components/GlobalDropzone.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtD,kCAAkC;AAClC,MAAM,cAAc,GAAG,yCAAyC,CAAC;AAEjE,4BAA4B;AAC5B,SAAS,cAAc,CAAC,IAAU,EAAE,MAAc;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,iCAAiC;QACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,gCAAgC;QAChC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,yBAAyB;QACzB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC9B,MAAM,GAAG,cAAc,EACvB,SAAS,GAAG,EAAE,GACO;IACrB,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEtD,sDAAsD;IACtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"GlobalDropzone.js","sourceRoot":"","sources":["../../src/components/GlobalDropzone.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inspector.d.ts","sourceRoot":"","sources":["../../src/components/Inspector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Inspector.d.ts","sourceRoot":"","sources":["../../src/components/Inspector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,WAAW,cAAc;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAc,EAAE,EAAE,cAAc,qBAwJ3D"}
|
|
@@ -6,8 +6,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* 下半部分:可用 Capabilities 列表(点击添加到工作流)
|
|
7
7
|
*/
|
|
8
8
|
import * as React from 'react';
|
|
9
|
-
import { Icon } from '@lokvis/ui-core';
|
|
9
|
+
import { Icon, Input } from '@lokvis/ui-core';
|
|
10
10
|
import { useWorkspaceStore } from '../store/index.js';
|
|
11
|
+
import { filterCapabilities } from '../utils.js';
|
|
11
12
|
import { ParamForm } from './ParamForm.js';
|
|
12
13
|
import { ExifPanel } from './ExifPanel.js';
|
|
13
14
|
export function Inspector({ className = '' }) {
|
|
@@ -15,13 +16,13 @@ export function Inspector({ className = '' }) {
|
|
|
15
16
|
const nodes = useWorkspaceStore((s) => s.nodes);
|
|
16
17
|
const selectedNodeId = useWorkspaceStore((s) => s.selectedNodeId);
|
|
17
18
|
const capabilityMap = useWorkspaceStore((s) => s.capabilityMap);
|
|
19
|
+
const stubCapabilities = useWorkspaceStore((s) => s.stubCapabilities);
|
|
18
20
|
const addNode = useWorkspaceStore((s) => s.addNode);
|
|
19
21
|
const updateNodeParams = useWorkspaceStore((s) => s.updateNodeParams);
|
|
20
22
|
const selectedNode = nodes.find((n) => n.id === selectedNodeId);
|
|
21
23
|
const [filter, setFilter] = React.useState('');
|
|
22
24
|
const [configureOpen, setConfigureOpen] = React.useState(true);
|
|
23
|
-
const filtered = capabilities
|
|
24
|
-
c.description.toLowerCase().includes(filter.toLowerCase()));
|
|
25
|
+
const filtered = filterCapabilities(capabilities, filter);
|
|
25
26
|
// 按域分组
|
|
26
27
|
const grouped = React.useMemo(() => {
|
|
27
28
|
const map = new Map();
|
|
@@ -34,15 +35,17 @@ export function Inspector({ className = '' }) {
|
|
|
34
35
|
return map;
|
|
35
36
|
}, [filtered]);
|
|
36
37
|
const showConfigure = selectedNode && capabilityMap[selectedNode.capability];
|
|
37
|
-
return (_jsxs("aside", { className: `flex w-72 shrink-0 flex-col border-l border-[var(--lokvis-border)] ${className}`, children: [_jsx(ExifPanel, {}), showConfigure && (_jsxs("div", { className: "shrink-0 border-b border-[var(--lokvis-border)]", children: [_jsxs("button", { type: "button", onClick: () => setConfigureOpen(!configureOpen), className: "flex w-full items-center justify-between px-3 h-
|
|
38
|
+
return (_jsxs("aside", { className: `flex w-72 shrink-0 flex-col border-l border-[var(--lokvis-border)] ${className}`, children: [_jsx(ExifPanel, {}), showConfigure && (_jsxs("div", { className: "shrink-0 border-b border-[var(--lokvis-border)]", children: [_jsxs("button", { type: "button", onClick: () => setConfigureOpen(!configureOpen), "aria-expanded": configureOpen, "aria-controls": `configure-panel-${selectedNode.id}`, className: "flex w-full items-center justify-between px-3 h-[var(--lokvis-panel-header-h)] text-left transition-colors hover:bg-[var(--lokvis-surface)]", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Icon, { size: 12, className: `text-[var(--lokvis-fg-subtle)] transition-transform ${configureOpen ? 'rotate-90' : ''}`, children: _jsx("path", { d: "m9 5 7 7-7 7" }) }), _jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Configure" })] }), _jsx("span", { className: "font-mono text-[10px] text-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10 px-1.5 py-0.5 rounded", children: selectedNode.capability })] }), configureOpen && (_jsx("div", { id: `configure-panel-${selectedNode.id}`, className: "px-3 pb-3 max-h-60 overflow-y-auto", children: _jsx(ParamForm, { capability: capabilityMap[selectedNode.capability], values: selectedNode.params, onChange: (params) => updateNodeParams(selectedNode.id, params) }) }))] })), _jsxs("div", { className: "flex flex-1 flex-col overflow-hidden", children: [_jsxs("div", { className: "flex items-center justify-between px-3 h-[var(--lokvis-panel-header-h)] 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: "Capabilities" }), _jsx("span", { className: "text-[11px] tabular-nums text-[var(--lokvis-fg-subtle)]", children: filtered.length })] }), _jsx("div", { className: "px-2 py-2 border-b border-[var(--lokvis-border)]", children: _jsx(Input, { size: "sm", placeholder: "Search capabilities...", value: filter, onChange: (e) => setFilter(e.target.value), leadingIcon: _jsxs(Icon, { size: 12, children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }) }) }), _jsx("div", { className: "flex-1 overflow-y-auto p-2", children: capabilities.length === 0 ? (_jsxs("div", { className: "px-2 py-8 text-center", children: [_jsx("p", { className: "text-[11px] text-[var(--lokvis-fg-subtle)]", children: "No capabilities loaded" }), _jsx("p", { className: "mt-1 text-[10px] text-[var(--lokvis-fg-muted)]", children: "Load a plugin to get started" })] })) : filtered.length === 0 ? (_jsx("p", { className: "px-2 py-4 text-[11px] text-[var(--lokvis-fg-subtle)]", children: "No matching capabilities" })) : (_jsx("div", { className: "space-y-3", children: Array.from(grouped.entries()).map(([domain, caps]) => (_jsxs("div", { children: [_jsx("div", { className: "px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: domain }), _jsx("ul", { className: "space-y-0.5", children: caps.map((cap) => {
|
|
38
39
|
const isInPipeline = nodes.some((n) => n.capability === cap.name);
|
|
39
|
-
|
|
40
|
+
// A7: stub-only 能力显示 "Coming Soon" 标记(无可用引擎)
|
|
41
|
+
const isStubOnly = stubCapabilities.has(cap.name);
|
|
42
|
+
return (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => addNode(cap.name), title: isStubOnly ? 'Coming soon — no engine installed yet' : undefined, className: `group w-full rounded-md px-2 py-1.5 text-left transition-all ${isInPipeline
|
|
40
43
|
? 'bg-[var(--lokvis-primary)]/5 ring-1 ring-[var(--lokvis-primary)]/40'
|
|
41
|
-
: 'hover:bg-[var(--lokvis-surface)]'}`, children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className:
|
|
44
|
+
: 'hover:bg-[var(--lokvis-surface)]'}`, children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className: `truncate font-mono text-[11px] font-medium ${isStubOnly ? 'text-[var(--lokvis-fg-muted)]' : ''}`, children: cap.name }), isStubOnly ? (_jsx("span", { className: "shrink-0 rounded px-1 py-0.5 text-[9px] font-medium uppercase bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]", children: "Soon" })) : (_jsx("span", { className: `shrink-0 rounded px-1 py-0.5 text-[9px] font-medium uppercase ${cap.performance === 'fast'
|
|
42
45
|
? 'bg-[var(--lokvis-success)]/15 text-[var(--lokvis-success)]'
|
|
43
46
|
: cap.performance === 'medium'
|
|
44
47
|
? 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'
|
|
45
|
-
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)]'}`, children: cap.performance })] }), _jsx("p", { className: "mt-0.5 truncate text-[10px] text-[var(--lokvis-fg-muted)]", children: cap.description })] }) }, cap.name));
|
|
48
|
+
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)]'}`, children: cap.performance }))] }), _jsx("p", { className: "mt-0.5 truncate text-[10px] text-[var(--lokvis-fg-muted)]", children: cap.description })] }) }, cap.name));
|
|
46
49
|
}) })] }, domain))) })) })] })] }));
|
|
47
50
|
}
|
|
48
51
|
//# sourceMappingURL=Inspector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../src/components/Inspector.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../src/components/Inspector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParamForm.d.ts","sourceRoot":"","sources":["../../src/components/ParamForm.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ParamForm.d.ts","sourceRoot":"","sources":["../../src/components/ParamForm.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACpD;AAED,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,+BAyBzE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Input } from '@lokvis/ui-core';
|
|
2
3
|
export function ParamForm({ capability, values, onChange }) {
|
|
3
4
|
const set = (name, value) => {
|
|
4
5
|
onChange({ ...values, [name]: value });
|
|
@@ -8,21 +9,23 @@ export function ParamForm({ capability, values, onChange }) {
|
|
|
8
9
|
}
|
|
9
10
|
return (_jsx("div", { className: "space-y-2.5", children: capability.params.map((p) => (_jsx(ParamField, { param: p, value: values[p.name], onChange: (v) => set(p.name, v) }, p.name))) }));
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
// 仅用于 enum 的原生 <select>(Select 组件 API 不同,不在此迁移);
|
|
13
|
+
// 文本/数字输入已统一改用 <Input size="sm"> 组件,消除重复样式。
|
|
14
|
+
const selectBase = 'w-full rounded-md border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-2.5 py-1.5 text-[11px] transition-colors hover:border-[var(--lokvis-border-strong)] focus:border-[var(--lokvis-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--lokvis-primary)]/30 disabled:cursor-not-allowed disabled:opacity-50';
|
|
12
15
|
function ParamField({ param, value, onChange, }) {
|
|
13
16
|
if (param.type === 'boolean') {
|
|
14
17
|
return (_jsxs("label", { className: "flex cursor-pointer items-center gap-2 rounded-md px-1 py-1 transition-colors hover:bg-[var(--lokvis-surface)]", children: [_jsx("input", { type: "checkbox", checked: Boolean(value ?? param.default), onChange: (e) => onChange(e.target.checked), className: "h-3.5 w-3.5 rounded border-[var(--lokvis-border-strong)] text-[var(--lokvis-primary)] focus:ring-[var(--lokvis-primary)]" }), _jsx("span", { className: "flex-1 text-[11px] text-[var(--lokvis-fg-muted)]", children: param.name }), param.description && (_jsx("span", { className: "shrink-0 text-[10px] text-[var(--lokvis-fg-subtle)]", children: param.description }))] }));
|
|
15
18
|
}
|
|
16
19
|
if (param.type === 'enum' && param.values) {
|
|
17
|
-
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" })] }), _jsx("select", { value: value ?? param.default ?? '', onChange: (e) => onChange(e.target.value), className:
|
|
20
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" })] }), _jsx("select", { value: value ?? param.default ?? '', onChange: (e) => onChange(e.target.value), className: selectBase, children: param.values.map((v) => (_jsx("option", { value: v, children: v }, v))) })] }));
|
|
18
21
|
}
|
|
19
22
|
if (param.type === 'color') {
|
|
20
|
-
return (_jsxs("div", { children: [_jsx("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: param.name }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "color", value: value ?? param.default ?? '#ffffff', onChange: (e) => onChange(e.target.value), className: "h-7 w-7 shrink-0 cursor-pointer rounded border border-[var(--lokvis-border)]" }), _jsx(
|
|
23
|
+
return (_jsxs("div", { children: [_jsx("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: param.name }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "color", value: value ?? param.default ?? '#ffffff', onChange: (e) => onChange(e.target.value), className: "h-7 w-7 shrink-0 cursor-pointer rounded border border-[var(--lokvis-border)]" }), _jsx(Input, { type: "text", size: "sm", value: value ?? param.default ?? '#ffffff', onChange: (e) => onChange(e.target.value) })] })] }));
|
|
21
24
|
}
|
|
22
25
|
if (param.type === 'number') {
|
|
23
|
-
return (_jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsxs("label", { className: "text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" })] }), (param.min !== undefined || param.max !== undefined) && (_jsxs("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [param.min !== undefined ? param.min : '-', ' — ', param.max !== undefined ? param.max : '∞'] }))] }), _jsx(
|
|
26
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsxs("label", { className: "text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" })] }), (param.min !== undefined || param.max !== undefined) && (_jsxs("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [param.min !== undefined ? param.min : '-', ' — ', param.max !== undefined ? param.max : '∞'] }))] }), _jsx(Input, { type: "number", size: "sm", value: value === undefined ? param.default ?? '' : value, min: param.min, max: param.max, onChange: (e) => onChange(e.target.value === '' ? undefined : Number(e.target.value)) })] }));
|
|
24
27
|
}
|
|
25
28
|
// string / file / array / object → text input
|
|
26
|
-
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" }), param.description && (_jsx("span", { className: "ml-1 font-normal text-[var(--lokvis-fg-subtle)]", children: param.description }))] }), _jsx(
|
|
29
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: [param.name, param.required && _jsx("span", { className: "ml-0.5 text-[var(--lokvis-danger)]", children: "*" }), param.description && (_jsx("span", { className: "ml-1 font-normal text-[var(--lokvis-fg-subtle)]", children: param.description }))] }), _jsx(Input, { type: "text", size: "sm", value: value ?? param.default ?? '', onChange: (e) => onChange(e.target.value), placeholder: param.type === 'file' ? 'data URL or path' : '' })] }));
|
|
27
30
|
}
|
|
28
31
|
//# sourceMappingURL=ParamForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParamForm.js","sourceRoot":"","sources":["../../src/components/ParamForm.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"ParamForm.js","sourceRoot":"","sources":["../../src/components/ParamForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineBar.d.ts","sourceRoot":"","sources":["../../src/components/PipelineBar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PipelineBar.d.ts","sourceRoot":"","sources":["../../src/components/PipelineBar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAc,EAAE,EAAE,gBAAgB,qBAsG/D"}
|
|
@@ -6,8 +6,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* 位于 Canvas 下方、StatusBar 上方。
|
|
7
7
|
*/
|
|
8
8
|
import * as React from 'react';
|
|
9
|
-
import { Icon } from '@lokvis/ui-core';
|
|
9
|
+
import { FOCUS_RING, Icon } from '@lokvis/ui-core';
|
|
10
10
|
import { useWorkspaceStore } from '../store/index.js';
|
|
11
|
+
import { StatusDot } from './StatusDot.js';
|
|
11
12
|
export function PipelineBar({ className = '' }) {
|
|
12
13
|
const nodes = useWorkspaceStore((s) => s.nodes);
|
|
13
14
|
const selectedNodeId = useWorkspaceStore((s) => s.selectedNodeId);
|
|
@@ -15,31 +16,21 @@ export function PipelineBar({ className = '' }) {
|
|
|
15
16
|
const removeNode = useWorkspaceStore((s) => s.removeNode);
|
|
16
17
|
return (_jsxs("div", { className: `flex h-10 shrink-0 items-center gap-2 border-t border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-3 ${className}`, children: [_jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)] shrink-0", children: "Pipeline" }), nodes.length === 0 ? (_jsx("span", { className: "text-[11px] text-[var(--lokvis-fg-subtle)]", children: "Empty \u2014 add capabilities from the right panel" })) : (_jsxs("div", { className: "flex flex-1 items-center gap-1 overflow-x-auto min-w-0", children: [_jsxs("div", { className: "flex items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)] shrink-0", children: [_jsx(Icon, { size: 12, children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), "Source"] }), _jsx(Icon, { size: 12, className: "shrink-0 text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }), nodes.map((node, i) => {
|
|
17
18
|
const selected = node.id === selectedNodeId;
|
|
18
|
-
return (_jsxs(React.Fragment, { children: [_jsxs("button", { type: "button", onClick: () => selectNode(node.id),
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "group flex shrink-0 items-center gap-0.5", children: [_jsxs("button", { type: "button", onClick: () => selectNode(node.id), onKeyDown: (e) => {
|
|
20
|
+
// 键盘可达:Delete/Backspace 删除节点(与 WorkflowEditor 一致)
|
|
21
|
+
if (e.key === 'Delete' || e.key === 'Backspace') {
|
|
22
|
+
e.preventDefault();
|
|
23
|
+
removeNode(node.id);
|
|
24
|
+
}
|
|
25
|
+
}, "aria-label": `节点 ${node.capability},位置 ${i + 1},Delete 删除`, "aria-pressed": selected, className: `flex shrink-0 items-center gap-1.5 rounded-md px-2.5 py-1 text-[11px] font-medium transition-all ${FOCUS_RING} ${selected
|
|
26
|
+
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)] ring-1 ring-[var(--lokvis-primary)]/50'
|
|
27
|
+
: node.status === 'running'
|
|
28
|
+
? 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'
|
|
29
|
+
: node.status === 'success'
|
|
30
|
+
? 'bg-[var(--lokvis-success)]/15 text-[var(--lokvis-success)]'
|
|
31
|
+
: node.status === 'failed'
|
|
32
|
+
? 'bg-[var(--lokvis-danger)]/15 text-[var(--lokvis-danger)]'
|
|
33
|
+
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: [_jsx("span", { className: "font-mono", children: node.capability }), _jsx(StatusDot, { status: node.status })] }), _jsx("button", { type: "button", onClick: () => removeNode(node.id), className: "rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--lokvis-danger)] hover:bg-[var(--lokvis-danger)]/15 hover:text-[var(--lokvis-danger)]", "aria-label": "Remove step", children: _jsx(Icon, { size: 10, strokeWidth: 3, children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }) })] }), i < nodes.length - 1 && (_jsx(Icon, { size: 12, className: "shrink-0 text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }))] }, node.id));
|
|
30
34
|
}), _jsx(Icon, { size: 12, className: "shrink-0 text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }), _jsxs("div", { className: "flex items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)] shrink-0", children: [_jsx(Icon, { size: 12, 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.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3" }) }), "Output"] })] })), nodes.length > 0 && (_jsxs("span", { className: "shrink-0 text-[10px] tabular-nums text-[var(--lokvis-fg-subtle)]", children: [nodes.length, " step", nodes.length !== 1 ? 's' : ''] }))] }));
|
|
31
35
|
}
|
|
32
|
-
function StatusDot({ status }) {
|
|
33
|
-
const color = status === 'running'
|
|
34
|
-
? 'bg-[var(--lokvis-warning)]'
|
|
35
|
-
: status === 'success'
|
|
36
|
-
? 'bg-[var(--lokvis-success)]'
|
|
37
|
-
: status === 'failed'
|
|
38
|
-
? 'bg-[var(--lokvis-danger)]'
|
|
39
|
-
: status === 'pending'
|
|
40
|
-
? 'bg-[var(--lokvis-fg-subtle)]'
|
|
41
|
-
: 'bg-[var(--lokvis-fg-subtle)]';
|
|
42
|
-
const animate = status === 'running' ? 'animate-pulse' : '';
|
|
43
|
-
return _jsx("span", { className: `h-1.5 w-1.5 rounded-full shrink-0 ${color} ${animate}` });
|
|
44
|
-
}
|
|
45
36
|
//# sourceMappingURL=PipelineBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineBar.js","sourceRoot":"","sources":["../../src/components/PipelineBar.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"PipelineBar.js","sourceRoot":"","sources":["../../src/components/PipelineBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,cAAc;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAoBD,wBAAgB,SAAS,CAAC,EAAE,SAAc,EAAE,EAAE,cAAc,qBAwI3D"}
|
|
@@ -12,16 +12,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
12
12
|
import * as React from 'react';
|
|
13
13
|
import { useWorkspaceStore } from '../store/index.js';
|
|
14
14
|
import { useWorkflowProgress } from '../hooks/useWorkflowProgress.js';
|
|
15
|
-
|
|
16
|
-
function formatBytes(bytes) {
|
|
17
|
-
if (bytes < 1024)
|
|
18
|
-
return `${bytes} B`;
|
|
19
|
-
if (bytes < 1024 * 1024)
|
|
20
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
21
|
-
if (bytes < 1024 * 1024 * 1024)
|
|
22
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
23
|
-
return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
|
|
24
|
-
}
|
|
15
|
+
import { formatBytes } from '../utils.js';
|
|
25
16
|
/** useOnlineStatus - 监听 navigator.onLine + online/offline 事件(W9.6) */
|
|
26
17
|
function useOnlineStatus() {
|
|
27
18
|
const [online, setOnline] = React.useState(() => typeof navigator !== 'undefined' ? navigator.onLine : true);
|
|
@@ -56,11 +47,11 @@ export function StatusBar({ className = '' }) {
|
|
|
56
47
|
const ratio = storageUsage ? storageUsage.usage / storageUsage.quota : 0;
|
|
57
48
|
const storageCritical = ratio >= 0.95;
|
|
58
49
|
const storageWarning = ratio >= 0.8 && !storageCritical;
|
|
59
|
-
return (_jsxs("footer", { className: `flex h-
|
|
50
|
+
return (_jsxs("footer", { className: `flex h-[var(--lokvis-statusbar-h)] shrink-0 items-center justify-between border-t border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-3 ${className}`, children: [_jsxs("div", { className: "flex items-center gap-2 min-w-0", role: "status", "aria-live": "polite", children: [_jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full shrink-0 ${error
|
|
60
51
|
? 'bg-[var(--lokvis-danger)]'
|
|
61
52
|
: running
|
|
62
53
|
? 'bg-[var(--lokvis-warning)] animate-pulse'
|
|
63
|
-
: 'bg-[var(--lokvis-success)]'}`, "aria-hidden": "true" }), _jsx("span", { className: `truncate text-[10px] ${error ? 'text-[var(--lokvis-danger)]' : 'text-[var(--lokvis-fg-muted)]'}`, children: statusMessage })] }), selectedNode && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", "aria-hidden": "true", children: "\u00B7" }), _jsx("span", { className: "shrink-0 font-mono text-[10px] text-[var(--lokvis-primary)] truncate max-w-[120px]", children: selectedNode.capability })] })), running && totalNodes > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", "aria-hidden": "true", children: "\u00B7" }), _jsxs("span", { className: "shrink-0 tabular-nums text-[10px] text-[var(--lokvis-warning)]", children: [doneNodes, "/", totalNodes, " (", progressPct, "%)"] })] })), error && (_jsx("button", { type: "button", onClick: () => setError(null), className: "shrink-0 text-[10px] text-[var(--lokvis-danger)] underline decoration-
|
|
54
|
+
: 'bg-[var(--lokvis-success)]'}`, "aria-hidden": "true" }), _jsx("span", { className: `truncate text-[10px] ${error ? 'text-[var(--lokvis-danger)]' : 'text-[var(--lokvis-fg-muted)]'}`, children: statusMessage })] }), selectedNode && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", "aria-hidden": "true", children: "\u00B7" }), _jsx("span", { className: "shrink-0 font-mono text-[10px] text-[var(--lokvis-primary)] truncate max-w-[120px]", children: selectedNode.capability })] })), running && totalNodes > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", "aria-hidden": "true", children: "\u00B7" }), _jsxs("span", { className: "shrink-0 tabular-nums text-[10px] text-[var(--lokvis-warning)]", children: [doneNodes, "/", totalNodes, " (", progressPct, "%)"] })] })), error && (_jsx("button", { type: "button", onClick: () => setError(null), className: "shrink-0 text-[10px] text-[var(--lokvis-danger)] underline decoration-[var(--lokvis-danger)]/40 hover:text-[var(--lokvis-danger)]", children: "dismiss" }))] }), _jsxs("div", { className: "flex items-center gap-3 shrink-0 text-[10px] text-[var(--lokvis-fg-subtle)] tabular-nums", children: [_jsxs("span", { className: `flex items-center gap-1 ${online ? 'text-[var(--lokvis-success)]' : 'text-[var(--lokvis-warning)]'}`, title: online ? 'Online' : 'Offline — running locally, no upload needed', "aria-label": online ? 'Online' : 'Offline — files still processed locally', children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${online ? 'bg-[var(--lokvis-success)]' : 'bg-[var(--lokvis-warning)]'}`, "aria-hidden": "true" }), online ? 'Online' : 'Offline'] }), _jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", "aria-hidden": "true", children: "|" }), storageUsage && (_jsxs(_Fragment, { children: [_jsxs("span", { className: `flex items-center gap-1 ${storageCritical
|
|
64
55
|
? 'text-[var(--lokvis-danger)] font-semibold'
|
|
65
56
|
: storageWarning
|
|
66
57
|
? 'text-[var(--lokvis-warning)]'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatusDot - 节点状态指示圆点
|
|
3
|
+
*
|
|
4
|
+
* 根据 status 显示不同颜色,running 时带 pulse 动画。
|
|
5
|
+
* PipelineBar 与 WorkflowEditor 共享此组件。
|
|
6
|
+
*/
|
|
7
|
+
export interface StatusDotProps {
|
|
8
|
+
/** 节点状态(pending/running/success/failed/idle) */
|
|
9
|
+
status: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function StatusDot({ status }: StatusDotProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=StatusDot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusDot.d.ts","sourceRoot":"","sources":["../../src/components/StatusDot.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,+BAenD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export function StatusDot({ status }) {
|
|
3
|
+
const color = status === 'running'
|
|
4
|
+
? 'bg-[var(--lokvis-warning)]'
|
|
5
|
+
: status === 'success'
|
|
6
|
+
? 'bg-[var(--lokvis-success)]'
|
|
7
|
+
: status === 'failed'
|
|
8
|
+
? 'bg-[var(--lokvis-danger)]'
|
|
9
|
+
: status === 'pending'
|
|
10
|
+
? 'bg-[var(--lokvis-fg-subtle)]'
|
|
11
|
+
: 'bg-[var(--lokvis-fg-subtle)]';
|
|
12
|
+
const animate = status === 'running' ? 'animate-pulse' : '';
|
|
13
|
+
return _jsx("span", { className: `h-1.5 w-1.5 rounded-full shrink-0 ${color} ${animate}` });
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=StatusDot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusDot.js","sourceRoot":"","sources":["../../src/components/StatusDot.tsx"],"names":[],"mappings":";AAWA,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAkB;IAClD,MAAM,KAAK,GACT,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,MAAM,KAAK,SAAS;YACtB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,MAAM,KAAK,QAAQ;gBACrB,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,MAAM,KAAK,SAAS;oBACtB,CAAC,CAAC,8BAA8B;oBAChC,CAAC,CAAC,8BAA8B,CAAC;IAErC,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,OAAO,eAAM,SAAS,EAAE,qCAAqC,KAAK,IAAI,OAAO,EAAE,GAAI,CAAC;AACtF,CAAC"}
|
|
@@ -46,7 +46,7 @@ export function ThemeToggle({ className = '', showLabel = false }) {
|
|
|
46
46
|
return (_jsxs("div", { className: `relative ${className}`, children: [_jsxs("button", { ref: btnRef, type: "button", "aria-haspopup": "menu", "aria-expanded": menuOpen, onClick: () => toggleTheme(), onContextMenu: (e) => {
|
|
47
47
|
e.preventDefault();
|
|
48
48
|
setMenuOpen((v) => !v);
|
|
49
|
-
}, "aria-label": `Theme: ${label}. Click to toggle, right-click for options.`, title: `Theme: ${label} (right-click for options)`, className: "flex h-8 w-8 items-center justify-center rounded-md text-[var(--lokvis-fg-muted)] transition-colors hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: [icon, showLabel && _jsx("span", { className: "ml-1 text-xs", children: label })] }), menuOpen && (_jsx("div", { role: "menu", className: "absolute right-0 top-full z-50 mt-1 w-32 overflow-hidden rounded-md border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] py-1 shadow-
|
|
49
|
+
}, "aria-label": `Theme: ${label}. Click to toggle, right-click for options.`, title: `Theme: ${label} (right-click for options)`, className: "flex h-8 w-8 items-center justify-center rounded-md text-[var(--lokvis-fg-muted)] transition-colors hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: [icon, showLabel && _jsx("span", { className: "ml-1 text-xs", children: label })] }), menuOpen && (_jsx("div", { role: "menu", className: "absolute right-0 top-full z-50 mt-1 w-32 overflow-hidden rounded-md border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] py-1 shadow-[var(--lokvis-elevation-2)]", children: ['light', 'dark', null].map((mode) => {
|
|
50
50
|
const isActive = theme === mode;
|
|
51
51
|
const text = mode === null ? 'System' : mode === 'dark' ? 'Dark' : 'Light';
|
|
52
52
|
return (_jsxs("button", { type: "button", role: "menuitemradio", "aria-checked": isActive, onClick: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeToggle.js","sourceRoot":"","sources":["../../src/components/ThemeToggle.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ThemeToggle.js","sourceRoot":"","sources":["../../src/components/ThemeToggle.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolRunner - 单工具页组合组件
|
|
3
|
+
*
|
|
4
|
+
* 为单工具操作场景(压缩、裁剪、格式转换等)提供一站式 UI:
|
|
5
|
+
* 上传 → 调参 → 处理 → 对比 → 下载。
|
|
6
|
+
*
|
|
7
|
+
* 不依赖 Workspace Store(zustand),通过 engine prop 注入处理函数,
|
|
8
|
+
* 可在任何 React 应用中独立使用。
|
|
9
|
+
*
|
|
10
|
+
* 五层架构:UI 层不直接依赖 Engine 层,engine 函数由消费方传入。
|
|
11
|
+
* 消费方需自行实现按 capability.name 路由到对应 Blob↔Blob 操作的 wrapper
|
|
12
|
+
* (engine-image 已不再提供 runTool 统一入口,各 operation 需直接组合调用)。
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { ToolRunner } from '@lokvis/ui-react';
|
|
17
|
+
* import { IMAGE_COMPRESS, compress } from '@lokvis/engine-image';
|
|
18
|
+
*
|
|
19
|
+
* <ToolRunner
|
|
20
|
+
* capability={IMAGE_COMPRESS}
|
|
21
|
+
* engine={(name, input, params, opts) => compress(input, params, opts?.signal)}
|
|
22
|
+
* onOpenInWorkspace={(state) => { ... }}
|
|
23
|
+
* />
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import * as React from 'react';
|
|
27
|
+
import type { Capability } from '@lokvis/schema';
|
|
28
|
+
type EngineFn = (toolName: string, input: Blob, params: Record<string, unknown>, options?: {
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
onProgress?: (p: number) => void;
|
|
31
|
+
}) => Promise<Blob>;
|
|
32
|
+
export interface ToolRunnerProps {
|
|
33
|
+
/** 工具能力定义(决定参数表单和输入类型) */
|
|
34
|
+
capability: Capability;
|
|
35
|
+
/** 处理函数(按 capability.name 路由到对应 Blob↔Blob 操作的 wrapper) */
|
|
36
|
+
engine: EngineFn;
|
|
37
|
+
/** 在 Workspace 中打开的回调(携带当前状态) */
|
|
38
|
+
onOpenInWorkspace?: (state: {
|
|
39
|
+
inputBlob: Blob;
|
|
40
|
+
outputBlob: Blob | null;
|
|
41
|
+
params: Record<string, unknown>;
|
|
42
|
+
}) => void;
|
|
43
|
+
className?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* ToolRunner - 单工具操作组件。
|
|
47
|
+
*
|
|
48
|
+
* 内部组合:上传区 + 参数表单 + 预览/对比 + 进度 + 下载。
|
|
49
|
+
* 所有状态自管理,不依赖外部 store。
|
|
50
|
+
*/
|
|
51
|
+
export declare function ToolRunner({ capability, engine, onOpenInWorkspace, className, }: ToolRunnerProps): React.JSX.Element;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=ToolRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolRunner.d.ts","sourceRoot":"","sources":["../../src/components/ToolRunner.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,KAAK,QAAQ,GAAG,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,KAChE,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC/B,0BAA0B;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,0DAA0D;IACzD,MAAM,EAAE,QAAQ,CAAC;IAClB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC3B,SAAS,EAAE,IAAI,CAAC;QAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,KAAK,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAC1B,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,SAAc,GACd,EAAE,eAAe,qBAgSjB"}
|