@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.
Files changed (133) hide show
  1. package/dist/components/AssetPanel.d.ts.map +1 -1
  2. package/dist/components/AssetPanel.js +10 -54
  3. package/dist/components/AssetPanel.js.map +1 -1
  4. package/dist/components/Canvas.d.ts.map +1 -1
  5. package/dist/components/Canvas.js +4 -4
  6. package/dist/components/Canvas.js.map +1 -1
  7. package/dist/components/CompareSlider.d.ts +4 -3
  8. package/dist/components/CompareSlider.d.ts.map +1 -1
  9. package/dist/components/CompareSlider.js +5 -4
  10. package/dist/components/CompareSlider.js.map +1 -1
  11. package/dist/components/DownloadPanel.d.ts.map +1 -1
  12. package/dist/components/DownloadPanel.js +1 -8
  13. package/dist/components/DownloadPanel.js.map +1 -1
  14. package/dist/components/ErrorBoundary.d.ts +40 -0
  15. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  16. package/dist/components/ErrorBoundary.js +52 -0
  17. package/dist/components/ErrorBoundary.js.map +1 -0
  18. package/dist/components/ExifPanel.js +1 -1
  19. package/dist/components/ExifPanel.js.map +1 -1
  20. package/dist/components/GlobalDropzone.d.ts.map +1 -1
  21. package/dist/components/GlobalDropzone.js +10 -3
  22. package/dist/components/GlobalDropzone.js.map +1 -1
  23. package/dist/components/Inspector.d.ts.map +1 -1
  24. package/dist/components/Inspector.js +10 -7
  25. package/dist/components/Inspector.js.map +1 -1
  26. package/dist/components/ParamForm.d.ts.map +1 -1
  27. package/dist/components/ParamForm.js +8 -5
  28. package/dist/components/ParamForm.js.map +1 -1
  29. package/dist/components/PipelineBar.d.ts.map +1 -1
  30. package/dist/components/PipelineBar.js +17 -26
  31. package/dist/components/PipelineBar.js.map +1 -1
  32. package/dist/components/StatusBar.d.ts.map +1 -1
  33. package/dist/components/StatusBar.js +3 -12
  34. package/dist/components/StatusBar.js.map +1 -1
  35. package/dist/components/StatusDot.d.ts +12 -0
  36. package/dist/components/StatusDot.d.ts.map +1 -0
  37. package/dist/components/StatusDot.js +15 -0
  38. package/dist/components/StatusDot.js.map +1 -0
  39. package/dist/components/ThemeToggle.js +1 -1
  40. package/dist/components/ThemeToggle.js.map +1 -1
  41. package/dist/components/ToolRunner.d.ts +53 -0
  42. package/dist/components/ToolRunner.d.ts.map +1 -0
  43. package/dist/components/ToolRunner.js +142 -0
  44. package/dist/components/ToolRunner.js.map +1 -0
  45. package/dist/components/Toolbar.js +2 -2
  46. package/dist/components/Toolbar.js.map +1 -1
  47. package/dist/components/WorkflowEditor.d.ts.map +1 -1
  48. package/dist/components/WorkflowEditor.js +31 -40
  49. package/dist/components/WorkflowEditor.js.map +1 -1
  50. package/dist/components/WorkflowTemplates.d.ts.map +1 -1
  51. package/dist/components/WorkflowTemplates.js +15 -5
  52. package/dist/components/WorkflowTemplates.js.map +1 -1
  53. package/dist/components/Workspace.d.ts +23 -1
  54. package/dist/components/Workspace.d.ts.map +1 -1
  55. package/dist/components/Workspace.js +60 -13
  56. package/dist/components/Workspace.js.map +1 -1
  57. package/dist/hooks/useCustomPresets.d.ts +98 -0
  58. package/dist/hooks/useCustomPresets.d.ts.map +1 -0
  59. package/dist/hooks/useCustomPresets.js +210 -0
  60. package/dist/hooks/useCustomPresets.js.map +1 -0
  61. package/dist/hooks/useLokvis.d.ts +19 -1
  62. package/dist/hooks/useLokvis.d.ts.map +1 -1
  63. package/dist/hooks/useLokvis.js +30 -9
  64. package/dist/hooks/useLokvis.js.map +1 -1
  65. package/dist/index.d.ts +3 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/store/assets-slice.d.ts +8 -1
  70. package/dist/store/assets-slice.d.ts.map +1 -1
  71. package/dist/store/assets-slice.js +101 -54
  72. package/dist/store/assets-slice.js.map +1 -1
  73. package/dist/store/capabilities-slice.d.ts +1 -1
  74. package/dist/store/capabilities-slice.d.ts.map +1 -1
  75. package/dist/store/capabilities-slice.js +8 -1
  76. package/dist/store/capabilities-slice.js.map +1 -1
  77. package/dist/store/index.d.ts +1 -1
  78. package/dist/store/index.d.ts.map +1 -1
  79. package/dist/store/index.js +1 -1
  80. package/dist/store/index.js.map +1 -1
  81. package/dist/store/runtime-slice.d.ts.map +1 -1
  82. package/dist/store/runtime-slice.js +22 -16
  83. package/dist/store/runtime-slice.js.map +1 -1
  84. package/dist/store/subscribe-utils.d.ts +45 -0
  85. package/dist/store/subscribe-utils.d.ts.map +1 -0
  86. package/dist/store/subscribe-utils.js +69 -0
  87. package/dist/store/subscribe-utils.js.map +1 -0
  88. package/dist/store/types.d.ts +19 -11
  89. package/dist/store/types.d.ts.map +1 -1
  90. package/dist/store/types.js +0 -10
  91. package/dist/store/types.js.map +1 -1
  92. package/dist/store/workflow-slice.d.ts +1 -1
  93. package/dist/store/workflow-slice.d.ts.map +1 -1
  94. package/dist/store/workflow-slice.js +19 -51
  95. package/dist/store/workflow-slice.js.map +1 -1
  96. package/dist/utils.d.ts +24 -0
  97. package/dist/utils.d.ts.map +1 -0
  98. package/dist/utils.js +31 -0
  99. package/dist/utils.js.map +1 -0
  100. package/package.json +7 -6
  101. package/src/components/AssetPanel.tsx +18 -58
  102. package/src/components/Canvas.tsx +11 -7
  103. package/src/components/CompareSlider.tsx +13 -10
  104. package/src/components/DownloadPanel.tsx +1 -7
  105. package/src/components/ErrorBoundary.tsx +101 -0
  106. package/src/components/ExifPanel.tsx +1 -1
  107. package/src/components/GlobalDropzone.tsx +8 -3
  108. package/src/components/Inspector.tsx +24 -16
  109. package/src/components/ParamForm.tsx +12 -9
  110. package/src/components/PipelineBar.tsx +20 -27
  111. package/src/components/StatusBar.tsx +3 -10
  112. package/src/components/StatusDot.tsx +27 -0
  113. package/src/components/ThemeToggle.tsx +1 -1
  114. package/src/components/ToolRunner.tsx +352 -0
  115. package/src/components/Toolbar.tsx +2 -2
  116. package/src/components/WorkflowEditor.tsx +50 -43
  117. package/src/components/WorkflowTemplates.tsx +27 -4
  118. package/src/components/Workspace.tsx +97 -10
  119. package/src/hooks/useCustomPresets.ts +284 -0
  120. package/src/hooks/useLokvis.ts +43 -10
  121. package/src/index.ts +3 -0
  122. package/src/store/assets-slice.ts +106 -52
  123. package/src/store/capabilities-slice.ts +10 -2
  124. package/src/store/index.ts +1 -1
  125. package/src/store/runtime-slice.ts +20 -15
  126. package/src/store/subscribe-utils.ts +82 -0
  127. package/src/store/types.ts +19 -12
  128. package/src/store/workflow-slice.ts +19 -53
  129. package/src/utils.ts +41 -0
  130. package/dist/store.d.ts +0 -76
  131. package/dist/store.d.ts.map +0 -1
  132. package/dist/store.js +0 -217
  133. package/dist/store.js.map +0 -1
@@ -0,0 +1,142 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ToolRunner - 单工具页组合组件
4
+ *
5
+ * 为单工具操作场景(压缩、裁剪、格式转换等)提供一站式 UI:
6
+ * 上传 → 调参 → 处理 → 对比 → 下载。
7
+ *
8
+ * 不依赖 Workspace Store(zustand),通过 engine prop 注入处理函数,
9
+ * 可在任何 React 应用中独立使用。
10
+ *
11
+ * 五层架构:UI 层不直接依赖 Engine 层,engine 函数由消费方传入。
12
+ * 消费方需自行实现按 capability.name 路由到对应 Blob↔Blob 操作的 wrapper
13
+ * (engine-image 已不再提供 runTool 统一入口,各 operation 需直接组合调用)。
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { ToolRunner } from '@lokvis/ui-react';
18
+ * import { IMAGE_COMPRESS, compress } from '@lokvis/engine-image';
19
+ *
20
+ * <ToolRunner
21
+ * capability={IMAGE_COMPRESS}
22
+ * engine={(name, input, params, opts) => compress(input, params, opts?.signal)}
23
+ * onOpenInWorkspace={(state) => { ... }}
24
+ * />
25
+ * ```
26
+ */
27
+ import * as React from 'react';
28
+ import { Button, Card } from '@lokvis/ui-core';
29
+ import { ParamForm } from './ParamForm.js';
30
+ /**
31
+ * ToolRunner - 单工具操作组件。
32
+ *
33
+ * 内部组合:上传区 + 参数表单 + 预览/对比 + 进度 + 下载。
34
+ * 所有状态自管理,不依赖外部 store。
35
+ */
36
+ export function ToolRunner({ capability, engine, onOpenInWorkspace, className = '', }) {
37
+ const [inputBlob, setInputBlob] = React.useState(null);
38
+ const [inputUrl, setInputUrl] = React.useState(null);
39
+ const [outputBlob, setOutputBlob] = React.useState(null);
40
+ const [outputUrl, setOutputUrl] = React.useState(null);
41
+ const [params, setParams] = React.useState(() => {
42
+ const defaults = {};
43
+ for (const p of capability.params) {
44
+ if (p.default !== undefined)
45
+ defaults[p.name] = p.default;
46
+ }
47
+ return defaults;
48
+ });
49
+ const [progress, setProgress] = React.useState(0);
50
+ const [processing, setProcessing] = React.useState(false);
51
+ const [error, setError] = React.useState(null);
52
+ const [dragging, setDragging] = React.useState(false);
53
+ const abortRef = React.useRef(null);
54
+ // 清理 ObjectURL
55
+ React.useEffect(() => {
56
+ return () => {
57
+ if (inputUrl)
58
+ URL.revokeObjectURL(inputUrl);
59
+ if (outputUrl)
60
+ URL.revokeObjectURL(outputUrl);
61
+ };
62
+ }, [inputUrl, outputUrl]);
63
+ // W21.6: unmount 时 abort 进行中的处理,防止后台泄漏
64
+ // (engine 函数持有 Worker/Canvas 资源,卸载后继续运行是浪费 + 潜在内存泄漏)
65
+ React.useEffect(() => {
66
+ return () => {
67
+ if (abortRef.current) {
68
+ abortRef.current.abort();
69
+ abortRef.current = null;
70
+ }
71
+ };
72
+ }, []);
73
+ const accept = capability.inputTypes.join(',');
74
+ function handleFiles(files) {
75
+ if (!files || files.length === 0)
76
+ return;
77
+ const file = files[0];
78
+ if (!file)
79
+ return;
80
+ setInputBlob(file);
81
+ if (inputUrl)
82
+ URL.revokeObjectURL(inputUrl);
83
+ setInputUrl(URL.createObjectURL(file));
84
+ // 重置输出
85
+ setOutputBlob(null);
86
+ if (outputUrl) {
87
+ URL.revokeObjectURL(outputUrl);
88
+ setOutputUrl(null);
89
+ }
90
+ }
91
+ async function handleProcess() {
92
+ if (!inputBlob)
93
+ return;
94
+ setProcessing(true);
95
+ setProgress(0);
96
+ setError(null);
97
+ abortRef.current = new AbortController();
98
+ try {
99
+ const result = await engine(capability.name, inputBlob, params, {
100
+ signal: abortRef.current.signal,
101
+ onProgress: setProgress,
102
+ });
103
+ setOutputBlob(result);
104
+ if (outputUrl)
105
+ URL.revokeObjectURL(outputUrl);
106
+ setOutputUrl(URL.createObjectURL(result));
107
+ }
108
+ catch (err) {
109
+ if (err instanceof Error && err.name === 'AbortError')
110
+ return;
111
+ setError(err instanceof Error ? err.message : String(err));
112
+ }
113
+ finally {
114
+ setProcessing(false);
115
+ abortRef.current = null;
116
+ }
117
+ }
118
+ function handleCancel() {
119
+ abortRef.current?.abort();
120
+ }
121
+ const downloadName = outputBlob
122
+ ? `output.${outputBlob.type.split('/')[1] ?? 'bin'}`
123
+ : 'output';
124
+ return (_jsxs("div", { className: `flex flex-col gap-6 ${className}`, children: [!inputBlob && (_jsxs("label", { className: `block cursor-pointer rounded-xl border-2 border-dashed p-10 text-center transition-all ${dragging
125
+ ? 'border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10'
126
+ : 'border-[var(--lokvis-border)] hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-surface-muted)]'}`, onDragOver: (e) => { e.preventDefault(); setDragging(true); }, onDragLeave: () => setDragging(false), onDrop: (e) => {
127
+ e.preventDefault();
128
+ setDragging(false);
129
+ handleFiles(e.dataTransfer.files);
130
+ }, children: [_jsx("input", { type: "file", accept: accept, className: "hidden", onChange: (e) => handleFiles(e.target.files) }), _jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--lokvis-surface-muted)]", children: _jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-[var(--lokvis-fg-subtle)]", children: [_jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4" }), _jsx("polyline", { points: "17 8 12 3 7 8" }), _jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }) }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg)]", children: "Drop file here or click to upload" }), _jsxs("p", { className: "mt-1 text-xs text-[var(--lokvis-fg-subtle)]", children: ["Accepted: ", accept || 'any file'] })] })] })] })), inputBlob && (_jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs(Card, { children: [_jsxs("div", { className: "mb-3 flex items-center justify-between", children: [_jsx("h3", { className: "text-sm font-semibold text-[var(--lokvis-fg)]", children: "Parameters" }), _jsx("span", { className: "rounded bg-[var(--lokvis-surface-muted)] px-2 py-0.5 font-mono text-xs text-[var(--lokvis-primary)]", children: capability.name })] }), _jsx(ParamForm, { capability: capability, values: params, onChange: setParams })] }), _jsxs("div", { className: "flex gap-3", children: [_jsx(Button, { variant: "primary", size: "md", onClick: handleProcess, loading: processing, disabled: !inputBlob, children: processing ? 'Processing...' : 'Process' }), _jsx(Button, { variant: "secondary", size: "md", onClick: () => {
131
+ setInputBlob(null);
132
+ if (inputUrl)
133
+ URL.revokeObjectURL(inputUrl);
134
+ setInputUrl(null);
135
+ setOutputBlob(null);
136
+ if (outputUrl) {
137
+ URL.revokeObjectURL(outputUrl);
138
+ setOutputUrl(null);
139
+ }
140
+ }, children: "Change file" }), onOpenInWorkspace && (_jsx(Button, { variant: "ghost", size: "md", onClick: () => onOpenInWorkspace({ inputBlob, outputBlob, params }), children: "Open in Workspace \u2192" }))] }), processing && (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between text-xs text-[var(--lokvis-fg-muted)]", children: [_jsx("span", { children: "Processing..." }), _jsxs("span", { className: "tabular-nums", children: [Math.round(progress), "%"] })] }), _jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-[var(--lokvis-border)]", children: _jsx("div", { className: "h-full rounded-full bg-[var(--lokvis-primary)] transition-all duration-200", style: { width: `${progress}%` } }) }), _jsx("button", { type: "button", onClick: handleCancel, className: "text-xs text-[var(--lokvis-danger)] hover:underline", children: "Cancel" })] })), error && (_jsx("div", { className: "rounded-lg border border-[var(--lokvis-danger)]/30 bg-[var(--lokvis-danger)]/10 px-4 py-3 text-sm text-[var(--lokvis-danger)]", children: error })), outputBlob && outputUrl && (_jsx(Card, { children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg)]", children: "Ready to download" }), _jsxs("p", { className: "mt-1 text-xs text-[var(--lokvis-fg-muted)]", children: [(outputBlob.size / 1024).toFixed(1), " KB \u00B7 ", outputBlob.type.split('/')[1] ?? 'file'] })] }), _jsxs("a", { href: outputUrl, download: downloadName, className: "inline-flex items-center gap-1.5 rounded-lg bg-[var(--lokvis-primary)] px-4 py-2 text-sm font-medium text-[var(--lokvis-primary-fg)] transition-colors hover:bg-[var(--lokvis-primary-hover)]", children: [_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4" }), _jsx("polyline", { points: "7 10 12 15 17 10" }), _jsx("line", { x1: "12", y1: "15", x2: "12", y2: "3" })] }), "Download"] })] }) }))] }), _jsxs("div", { className: "space-y-4", children: [inputUrl && (_jsxs(Card, { children: [_jsx("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Input" }), _jsx("img", { src: inputUrl, alt: "Input preview", className: "max-h-80 w-full rounded-lg object-contain" }), _jsxs("p", { className: "mt-2 text-xs text-[var(--lokvis-fg-muted)]", children: [(inputBlob.size / 1024).toFixed(1), " KB \u00B7 ", inputBlob.type.split('/')[1] ?? 'file'] })] })), outputUrl && (_jsxs(Card, { children: [_jsx("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Output" }), _jsx("img", { src: outputUrl, alt: "Output preview", className: "max-h-80 w-full rounded-lg object-contain" }), _jsxs("p", { className: "mt-2 text-xs text-[var(--lokvis-fg-muted)]", children: [(outputBlob.size / 1024).toFixed(1), " KB \u00B7 ", outputBlob.type.split('/')[1] ?? 'file'] })] }))] })] }))] }));
141
+ }
142
+ //# sourceMappingURL=ToolRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRunner.js","sourceRoot":"","sources":["../../src/components/ToolRunner.tsx"],"names":[],"mappings":"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"}
@@ -27,8 +27,8 @@ export function Toolbar({ title = 'Lokvis Workspace', rightExtra }) {
27
27
  setError(err instanceof Error ? err.message : String(err));
28
28
  }
29
29
  }
30
- return (_jsxs("header", { className: "flex h-12 shrink-0 items-center justify-between border-b border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-4", children: [_jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [_jsx("span", { className: "shrink-0 text-base font-bold leading-none", style: {
31
- background: 'linear-gradient(135deg, #6366f1, #a855f7)',
30
+ return (_jsxs("header", { className: "flex h-[var(--lokvis-toolbar-h)] shrink-0 items-center justify-between border-b border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-4", children: [_jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [_jsx("span", { className: "shrink-0 text-base font-bold leading-none", style: {
31
+ background: 'linear-gradient(135deg, var(--lokvis-primary), var(--lokvis-info))',
32
32
  WebkitBackgroundClip: 'text',
33
33
  WebkitTextFillColor: 'transparent',
34
34
  }, children: "\u25C6" }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: title })] }), _jsx("div", { className: "flex flex-1 items-center justify-center px-4 min-w-0", children: _jsx("span", { className: `truncate text-xs ${error ? 'text-[var(--lokvis-danger)]' : 'text-[var(--lokvis-fg-subtle)]'}`, children: statusMessage }) }), _jsxs("div", { className: "flex items-center gap-1.5 shrink-0", children: [rightExtra, nodes.length > 0 && (_jsx(Button, { variant: "ghost", size: "sm", onClick: clearWorkflow, disabled: running, children: "Clear" })), _jsx(Button, { variant: "primary", size: "sm", onClick: handleRun, loading: running, disabled: !canRun, children: "Run" })] })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,kBAAkB,EAAE,UAAU,EAAgB;IAC/E,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;IAEjE,KAAK,UAAU,SAAS;QACxB,IAAI,CAAC;YACL,MAAM,GAAG,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACD,CAAC;IAED,OAAO,CACP,kBAAQ,SAAS,EAAC,wHAAwH,aAE1I,eAAK,SAAS,EAAC,mCAAmC,aAClD,eACA,SAAS,EAAC,2CAA2C,EACrD,KAAK,EAAE;4BACP,UAAU,EAAE,2CAA2C;4BACvD,oBAAoB,EAAE,MAAM;4BAC5B,mBAAmB,EAAE,aAAa;yBACjC,uBAGM,EACP,eAAM,SAAS,EAAC,+CAA+C,YAAE,KAAK,GAAQ,IACxE,EAGN,cAAK,SAAS,EAAC,sDAAsD,YACrE,eAAM,SAAS,EAAE,oBAAoB,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,gCAAgC,EAAE,YAC9G,aAAa,GACP,GACD,EAGN,eAAK,SAAS,EAAC,oCAAoC,aAClD,UAAU,EACV,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACP,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,OAAO,sBAGR,CACR,EACD,KAAC,MAAM,IACP,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,MAAM,oBAGR,IACH,IACG,CACR,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,kBAAkB,EAAE,UAAU,EAAgB;IAC/E,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;IAEjE,KAAK,UAAU,SAAS;QACxB,IAAI,CAAC;YACL,MAAM,GAAG,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACD,CAAC;IAED,OAAO,CACP,kBAAQ,SAAS,EAAC,+IAA+I,aAEjK,eAAK,SAAS,EAAC,mCAAmC,aAClD,eACA,SAAS,EAAC,2CAA2C,EACrD,KAAK,EAAE;4BACP,UAAU,EAAE,oEAAoE;4BAChF,oBAAoB,EAAE,MAAM;4BAC5B,mBAAmB,EAAE,aAAa;yBACjC,uBAGM,EACP,eAAM,SAAS,EAAC,+CAA+C,YAAE,KAAK,GAAQ,IACxE,EAGN,cAAK,SAAS,EAAC,sDAAsD,YACrE,eAAM,SAAS,EAAE,oBAAoB,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,gCAAgC,EAAE,YAC9G,aAAa,GACP,GACD,EAGN,eAAK,SAAS,EAAC,oCAAoC,aAClD,UAAU,EACV,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACP,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,OAAO,sBAGR,CACR,EACD,KAAC,MAAM,IACP,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,MAAM,oBAGR,IACH,IACG,CACR,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowEditor.d.ts","sourceRoot":"","sources":["../../src/components/WorkflowEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,mBAAmB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAc,EAAE,EAAE,mBAAmB,qBAsNrE"}
1
+ {"version":3,"file":"WorkflowEditor.d.ts","sourceRoot":"","sources":["../../src/components/WorkflowEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,WAAW,mBAAmB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAc,EAAE,EAAE,mBAAmB,qBAmOrE"}
@@ -18,8 +18,10 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
18
18
  * @module WorkflowEditor
19
19
  */
20
20
  import * as React from 'react';
21
- import { Icon } from '@lokvis/ui-core';
21
+ import { ConfirmDialog, Icon, Input } from '@lokvis/ui-core';
22
22
  import { useWorkspaceStore, MAX_WORKFLOW_STEPS } from '../store/index.js';
23
+ import { filterCapabilities } from '../utils.js';
24
+ import { StatusDot } from './StatusDot.js';
23
25
  export function WorkflowEditor({ className = '' }) {
24
26
  const nodes = useWorkspaceStore((s) => s.nodes);
25
27
  const selectedNodeId = useWorkspaceStore((s) => s.selectedNodeId);
@@ -28,10 +30,13 @@ export function WorkflowEditor({ className = '' }) {
28
30
  const moveNode = useWorkspaceStore((s) => s.moveNode);
29
31
  const insertNodeAt = useWorkspaceStore((s) => s.insertNodeAt);
30
32
  const capabilities = useWorkspaceStore((s) => s.capabilities);
33
+ const stubCapabilities = useWorkspaceStore((s) => s.stubCapabilities);
31
34
  const clearWorkflow = useWorkspaceStore((s) => s.clearWorkflow);
32
35
  // 拖拽状态:被拖拽的节点索引 + 当前 hover 的插入位置
33
36
  const [dragIndex, setDragIndex] = React.useState(null);
34
37
  const [hoverIndex, setHoverIndex] = React.useState(null);
38
+ // 清空确认对话框
39
+ const [clearOpen, setClearOpen] = React.useState(false);
35
40
  const handleDragStart = (e, index) => {
36
41
  setDragIndex(index);
37
42
  e.dataTransfer.effectAllowed = 'move';
@@ -79,44 +84,27 @@ export function WorkflowEditor({ className = '' }) {
79
84
  const canAddMore = nodes.length < MAX_WORKFLOW_STEPS;
80
85
  return (_jsxs("div", { className: `flex flex-col border-b border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] ${className}`, role: "region", "aria-label": "\u5DE5\u4F5C\u6D41\u7F16\u8F91\u5668", children: [_jsxs("div", { className: "flex h-9 shrink-0 items-center justify-between border-b border-[var(--lokvis-border)] px-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Workflow Editor" }), _jsxs("span", { className: `rounded px-1.5 py-0.5 text-[10px] tabular-nums ${canAddMore
81
86
  ? 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)]'
82
- : 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'}`, children: [nodes.length, "/", MAX_WORKFLOW_STEPS] })] }), nodes.length > 0 && (_jsx("button", { type: "button", onClick: () => {
83
- if (window.confirm('清空当前工作流?所有节点将被移除。')) {
84
- clearWorkflow();
85
- }
86
- }, className: "text-[10px] text-[var(--lokvis-fg-subtle)] transition-colors hover:text-[var(--lokvis-danger)]", "aria-label": "\u6E05\u7A7A\u5DE5\u4F5C\u6D41", children: "Clear" }))] }), _jsx("div", { className: "flex min-h-[3rem] items-center gap-1 overflow-x-auto px-3 py-2", children: nodes.length === 0 ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-2 text-center", children: _jsxs("p", { className: "text-[11px] text-[var(--lokvis-fg-subtle)]", children: ["\u7A7A\u5DE5\u4F5C\u6D41 \u2014 \u4ECE\u53F3\u4FA7 ", _jsx("span", { className: "font-mono", children: "Capabilities" }), " \u9762\u677F\u70B9\u51FB\u6DFB\u52A0\u8282\u70B9"] }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex shrink-0 items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)]", children: [_jsx(Icon, { size: 12, children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), "Source"] }), _jsx(InsertConnector, { index: 0, capabilities: capabilities, onInsert: insertNodeAt, disabled: nodes.length >= MAX_WORKFLOW_STEPS }), nodes.map((node, i) => {
87
+ : 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'}`, children: [nodes.length, "/", MAX_WORKFLOW_STEPS] })] }), nodes.length > 0 && (_jsx("button", { type: "button", onClick: () => setClearOpen(true), className: "text-[10px] text-[var(--lokvis-fg-subtle)] transition-colors hover:text-[var(--lokvis-danger)]", "aria-label": "\u6E05\u7A7A\u5DE5\u4F5C\u6D41", children: "Clear" }))] }), _jsx("div", { className: "flex min-h-[3rem] items-center gap-1 overflow-x-auto px-3 py-2", children: nodes.length === 0 ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-2 text-center", children: _jsxs("p", { className: "text-[11px] text-[var(--lokvis-fg-subtle)]", children: ["\u7A7A\u5DE5\u4F5C\u6D41 \u2014 \u4ECE\u53F3\u4FA7 ", _jsx("span", { className: "font-mono", children: "Capabilities" }), " \u9762\u677F\u70B9\u51FB\u6DFB\u52A0\u8282\u70B9"] }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex shrink-0 items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)]", children: [_jsx(Icon, { size: 12, children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), "Source"] }), _jsx(InsertConnector, { index: 0, capabilities: capabilities, stubCapabilities: stubCapabilities, onInsert: insertNodeAt, disabled: nodes.length >= MAX_WORKFLOW_STEPS }), nodes.map((node, i) => {
87
88
  const selected = node.id === selectedNodeId;
88
89
  const isDragging = dragIndex === i;
89
90
  const isHoverTarget = hoverIndex === i && dragIndex !== null && dragIndex !== i;
90
- return (_jsxs(React.Fragment, { children: [_jsxs("button", { type: "button", draggable: true, onDragStart: (e) => handleDragStart(e, i), onDragOver: (e) => handleDragOver(e, i), onDragLeave: handleDragLeave, onDrop: (e) => handleDrop(e, i), onDragEnd: handleDragEnd, onClick: () => selectNode(node.id), onKeyDown: (e) => handleKeyDown(e, node.id, i), "aria-label": `节点 ${node.capability},位置 ${i + 1},拖拽或方向键重排,Delete 删除`, className: `group relative flex shrink-0 items-center gap-1.5 rounded-md px-2.5 py-1.5 text-[11px] font-medium transition-all ${isDragging
91
- ? 'opacity-40'
92
- : isHoverTarget
93
- ? 'ring-2 ring-[var(--lokvis-primary)] ring-offset-1'
94
- : selected
95
- ? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)] ring-1 ring-[var(--lokvis-primary)]/50'
96
- : node.status === 'running'
97
- ? 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'
98
- : node.status === 'success'
99
- ? 'bg-[var(--lokvis-success)]/15 text-[var(--lokvis-success)]'
100
- : node.status === 'failed'
101
- ? 'bg-[var(--lokvis-danger)]/15 text-[var(--lokvis-danger)]'
102
- : 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'} cursor-grab active:cursor-grabbing`, children: [_jsx("span", { className: "flex h-4 w-4 items-center justify-center rounded-full bg-[var(--lokvis-fg)]/5 text-[9px] tabular-nums", children: i + 1 }), _jsx("span", { className: "font-mono", children: node.capability }), _jsx(StatusDot, { status: node.status }), _jsx("button", { type: "button", onClick: (e) => {
103
- e.stopPropagation();
104
- removeNode(node.id);
105
- }, "aria-label": "\u5220\u9664\u8282\u70B9", tabIndex: -1, className: "absolute -right-1 -top-1 rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-[var(--lokvis-danger)]/15 hover:text-[var(--lokvis-danger)]", children: _jsx(Icon, { size: 10, strokeWidth: 3, children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsx(InsertConnector, { index: i + 1, capabilities: capabilities, onInsert: insertNodeAt, disabled: nodes.length >= MAX_WORKFLOW_STEPS })] }, node.id));
106
- }), nodes.length > 0 && (_jsxs("div", { className: "flex shrink-0 items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)]", 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("div", { className: "flex shrink-0 items-center gap-2 border-t border-[var(--lokvis-border)] px-3 py-1 text-[10px] text-[var(--lokvis-fg-subtle)]", children: [_jsx(Icon, { size: 10, children: _jsx("path", { d: "M13 5.5a1 1 0 1 1 2 0 1-1 0 0 0-.5.86L16.5 9l1.5-.5a1 1 0 1 1 0 2l-1.5-.5-1 1.5a1 1 0 1 1-2 0l1-1.5-1-1.5a1 1 0 0 1 0-2z" }) }), _jsx("span", { children: "\u62D6\u62FD\u91CD\u6392 \u00B7 \u65B9\u5411\u952E\u79FB\u52A8 \u00B7 Delete \u5220\u9664 \u00B7 hover \u7BAD\u5934\u5904\u63D2\u5165\u8282\u70B9" })] }))] }));
107
- }
108
- function StatusDot({ status }) {
109
- const color = status === 'running'
110
- ? 'bg-[var(--lokvis-warning)]'
111
- : status === 'success'
112
- ? 'bg-[var(--lokvis-success)]'
113
- : status === 'failed'
114
- ? 'bg-[var(--lokvis-danger)]'
115
- : status === 'pending'
116
- ? 'bg-[var(--lokvis-fg-subtle)]'
117
- : 'bg-[var(--lokvis-fg-subtle)]';
118
- const animate = status === 'running' ? 'animate-pulse' : '';
119
- return _jsx("span", { className: `h-1.5 w-1.5 rounded-full shrink-0 ${color} ${animate}` });
91
+ return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "group relative flex shrink-0 items-center", children: [_jsxs("button", { type: "button", draggable: true, onDragStart: (e) => handleDragStart(e, i), onDragOver: (e) => handleDragOver(e, i), onDragLeave: handleDragLeave, onDrop: (e) => handleDrop(e, i), onDragEnd: handleDragEnd, onClick: () => selectNode(node.id), onKeyDown: (e) => handleKeyDown(e, node.id, i), "aria-label": `节点 ${node.capability},位置 ${i + 1},拖拽或方向键重排,Delete 删除`, className: `flex shrink-0 items-center gap-1.5 rounded-md px-2.5 py-1.5 text-[11px] font-medium transition-all ${isDragging
92
+ ? 'opacity-40'
93
+ : isHoverTarget
94
+ ? 'ring-2 ring-[var(--lokvis-primary)] ring-offset-1'
95
+ : selected
96
+ ? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)] ring-1 ring-[var(--lokvis-primary)]/50'
97
+ : node.status === 'running'
98
+ ? 'bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]'
99
+ : node.status === 'success'
100
+ ? 'bg-[var(--lokvis-success)]/15 text-[var(--lokvis-success)]'
101
+ : node.status === 'failed'
102
+ ? 'bg-[var(--lokvis-danger)]/15 text-[var(--lokvis-danger)]'
103
+ : 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'} cursor-grab active:cursor-grabbing`, children: [_jsx("span", { className: "flex h-4 w-4 items-center justify-center rounded-full bg-[var(--lokvis-fg)]/5 text-[9px] tabular-nums", children: i + 1 }), _jsx("span", { className: "font-mono", children: node.capability }), _jsx(StatusDot, { status: node.status })] }), _jsx("button", { type: "button", onClick: () => removeNode(node.id), "aria-label": "\u5220\u9664\u8282\u70B9", tabIndex: -1, className: "absolute -right-1 -top-1 rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-[var(--lokvis-danger)]/15 hover:text-[var(--lokvis-danger)]", children: _jsx(Icon, { size: 10, strokeWidth: 3, children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsx(InsertConnector, { index: i + 1, capabilities: capabilities, stubCapabilities: stubCapabilities, onInsert: insertNodeAt, disabled: nodes.length >= MAX_WORKFLOW_STEPS })] }, node.id));
104
+ }), nodes.length > 0 && (_jsxs("div", { className: "flex shrink-0 items-center gap-1 rounded-md bg-[var(--lokvis-surface-muted)] px-2 py-1 text-[10px] font-medium text-[var(--lokvis-fg-muted)]", 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("div", { className: "flex shrink-0 items-center gap-2 border-t border-[var(--lokvis-border)] px-3 py-1 text-[10px] text-[var(--lokvis-fg-subtle)]", children: [_jsx(Icon, { size: 10, children: _jsx("path", { d: "M13 5.5a1 1 0 1 1 2 0 1-1 0 0 0-.5.86L16.5 9l1.5-.5a1 1 0 1 1 0 2l-1.5-.5-1 1.5a1 1 0 1 1-2 0l1-1.5-1-1.5a1 1 0 0 1 0-2z" }) }), _jsx("span", { children: "\u62D6\u62FD\u91CD\u6392 \u00B7 \u65B9\u5411\u952E\u79FB\u52A8 \u00B7 Delete \u5220\u9664 \u00B7 hover \u7BAD\u5934\u5904\u63D2\u5165\u8282\u70B9" })] })), _jsx(ConfirmDialog, { open: clearOpen, title: "\u6E05\u7A7A\u5DE5\u4F5C\u6D41", message: "\u6E05\u7A7A\u5F53\u524D\u5DE5\u4F5C\u6D41?\u6240\u6709\u8282\u70B9\u5C06\u88AB\u79FB\u9664\u3002", confirmText: "\u6E05\u7A7A", variant: "danger", onConfirm: () => {
105
+ clearWorkflow();
106
+ setClearOpen(false);
107
+ }, onClose: () => setClearOpen(false) })] }));
120
108
  }
121
109
  /**
122
110
  * InsertConnector - 节点之间的连接器 + 插入按钮(W11.1)
@@ -124,7 +112,7 @@ function StatusDot({ status }) {
124
112
  * 默认显示箭头;hover 时变为 + 按钮,点击弹出 capability 选择菜单。
125
113
  * 选择后调用 onInsert(index, capability)。
126
114
  */
127
- function InsertConnector({ index, capabilities, onInsert, disabled, }) {
115
+ function InsertConnector({ index, capabilities, stubCapabilities, onInsert, disabled, }) {
128
116
  const [open, setOpen] = React.useState(false);
129
117
  const [filter, setFilter] = React.useState('');
130
118
  const ref = React.useRef(null);
@@ -144,8 +132,7 @@ function InsertConnector({ index, capabilities, onInsert, disabled, }) {
144
132
  document.addEventListener('mousedown', handler);
145
133
  return () => document.removeEventListener('mousedown', handler);
146
134
  }, [open]);
147
- const filtered = React.useMemo(() => capabilities.filter((c) => c.name.toLowerCase().includes(filter.toLowerCase()) ||
148
- c.description.toLowerCase().includes(filter.toLowerCase())), [capabilities, filter]);
135
+ const filtered = React.useMemo(() => filterCapabilities(capabilities, filter), [capabilities, filter]);
149
136
  const handleSelect = (capName) => {
150
137
  onInsert(index, capName);
151
138
  setOpen(false);
@@ -155,6 +142,10 @@ function InsertConnector({ index, capabilities, onInsert, disabled, }) {
155
142
  // 5 步上限时只显示箭头,不显示 +
156
143
  return (_jsx(Icon, { size: 12, className: "shrink-0 text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }));
157
144
  }
158
- return (_jsxs("div", { ref: ref, className: "relative flex shrink-0 items-center", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), "aria-label": `在位置 ${index + 1} 插入节点`, title: "\u63D2\u5165\u8282\u70B9", className: "group flex h-5 w-5 items-center justify-center rounded text-[var(--lokvis-fg-subtle)] transition-colors hover:bg-[var(--lokvis-primary)]/15 hover:text-[var(--lokvis-primary)]", children: [_jsx(Icon, { size: 12, className: "group-hover:hidden", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }), _jsx(Icon, { size: 12, className: "hidden group-hover:block", strokeWidth: 2.5, children: _jsx("path", { d: "M12 5v14M5 12h14" }) })] }), open && (_jsxs("div", { className: "absolute top-full left-1/2 z-50 mt-1 w-56 -translate-x-1/2 rounded-lg border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] shadow-lg", children: [_jsx("div", { className: "border-b border-[var(--lokvis-border)] p-1.5", children: _jsx("input", { type: "text", autoFocus: true, placeholder: "\u641C\u7D22 capability...", value: filter, onChange: (e) => setFilter(e.target.value), className: "w-full rounded border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-2 py-1 text-[11px] placeholder-zinc-400 focus:border-[var(--lokvis-primary)] focus:outline-none" }) }), _jsx("div", { className: "max-h-48 overflow-y-auto p-1", children: filtered.length === 0 ? (_jsx("p", { className: "px-2 py-2 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "\u65E0\u5339\u914D capability" })) : (filtered.map((cap) => (_jsxs("button", { type: "button", onClick: () => handleSelect(cap.name), className: "block w-full rounded px-2 py-1 text-left transition-colors hover:bg-[var(--lokvis-primary)]/10", children: [_jsx("span", { className: "block font-mono text-[10px] font-medium text-[var(--lokvis-fg-muted)]", children: cap.name }), _jsx("span", { className: "block truncate text-[9px] text-[var(--lokvis-fg-muted)]", children: cap.description })] }, cap.name)))) })] }))] }));
145
+ return (_jsxs("div", { ref: ref, className: "relative flex shrink-0 items-center", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), "aria-label": `在位置 ${index + 1} 插入节点`, title: "\u63D2\u5165\u8282\u70B9", className: "group flex h-5 w-5 items-center justify-center rounded text-[var(--lokvis-fg-subtle)] transition-colors hover:bg-[var(--lokvis-primary)]/15 hover:text-[var(--lokvis-primary)]", children: [_jsx(Icon, { size: 12, className: "group-hover:hidden", children: _jsx("path", { d: "m9 5 7 7-7 7" }) }), _jsx(Icon, { size: 12, className: "hidden group-hover:block", strokeWidth: 2.5, children: _jsx("path", { d: "M12 5v14M5 12h14" }) })] }), open && (_jsxs("div", { className: "absolute top-full left-1/2 z-50 mt-1 w-56 -translate-x-1/2 rounded-lg border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] shadow-[var(--lokvis-elevation-2)]", children: [_jsx("div", { className: "border-b border-[var(--lokvis-border)] p-1.5", children: _jsx(Input, { type: "text", size: "sm", autoFocus: true, placeholder: "\u641C\u7D22 capability...", value: filter, onChange: (e) => setFilter(e.target.value) }) }), _jsx("div", { className: "max-h-48 overflow-y-auto p-1", children: filtered.length === 0 ? (_jsx("p", { className: "px-2 py-2 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "\u65E0\u5339\u914D capability" })) : (filtered.map((cap) => {
146
+ // A7: stub-only 能力显示 "Coming Soon" 标记
147
+ const isStubOnly = stubCapabilities.has(cap.name);
148
+ return (_jsxs("button", { type: "button", onClick: () => handleSelect(cap.name), title: isStubOnly ? 'Coming soon — no engine installed yet' : undefined, className: "block w-full rounded px-2 py-1 text-left transition-colors hover:bg-[var(--lokvis-primary)]/10", children: [_jsxs("span", { className: "flex items-center justify-between gap-1.5", children: [_jsx("span", { className: "block font-mono text-[10px] font-medium text-[var(--lokvis-fg-muted)]", children: cap.name }), isStubOnly && (_jsx("span", { className: "shrink-0 rounded px-1 py-0.5 text-[8px] font-medium uppercase bg-[var(--lokvis-warning)]/15 text-[var(--lokvis-warning)]", children: "Soon" }))] }), _jsx("span", { className: "block truncate text-[9px] text-[var(--lokvis-fg-muted)]", children: cap.description })] }, cap.name));
149
+ })) })] }))] }));
159
150
  }
160
151
  //# sourceMappingURL=WorkflowEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowEditor.js","sourceRoot":"","sources":["../../src/components/WorkflowEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowEditor.js","sourceRoot":"","sources":["../../src/components/WorkflowEditor.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowTemplates.d.ts","sourceRoot":"","sources":["../../src/components/WorkflowTemplates.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,MAAM,WAAW,sBAAsB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,EACjC,SAAc,EACd,iBAAwB,EACxB,OAAO,GACP,EAAE,sBAAsB,qBAsExB"}
1
+ {"version":3,"file":"WorkflowTemplates.d.ts","sourceRoot":"","sources":["../../src/components/WorkflowTemplates.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,MAAM,WAAW,sBAAsB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,EACjC,SAAc,EACd,iBAAwB,EACxB,OAAO,GACP,EAAE,sBAAsB,qBA6FxB"}
@@ -12,21 +12,31 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  * @module WorkflowTemplates
13
13
  */
14
14
  import * as React from 'react';
15
- import { Icon } from '@lokvis/ui-core';
15
+ import { ConfirmDialog, Icon } from '@lokvis/ui-core';
16
16
  import { useWorkspaceStore } from '../store/index.js';
17
17
  import { WORKFLOW_TEMPLATES } from '../data/workflow-templates.js';
18
18
  export function WorkflowTemplates({ className = '', confirmIfNotEmpty = true, onApply, }) {
19
19
  const loadWorkflowTemplate = useWorkspaceStore((s) => s.loadWorkflowTemplate);
20
20
  const nodes = useWorkspaceStore((s) => s.nodes);
21
+ // 待确认应用的模板(非空工作流替换前需用户确认)
22
+ const [pendingTpl, setPendingTpl] = React.useState(null);
21
23
  const handleApply = (tpl) => {
22
24
  if (confirmIfNotEmpty && nodes.length > 0) {
23
- if (!window.confirm(`应用模板「${tpl.name}」将替换当前 ${nodes.length} 个节点,继续?`)) {
24
- return;
25
- }
25
+ setPendingTpl(tpl);
26
+ return;
26
27
  }
28
+ applyTemplate(tpl);
29
+ };
30
+ const applyTemplate = (tpl) => {
27
31
  loadWorkflowTemplate(tpl.nodes.map((n) => ({ capability: n.capability, params: n.params })));
28
32
  onApply?.(tpl);
29
33
  };
30
- return (_jsxs("div", { className: `flex flex-col ${className}`, role: "region", "aria-label": "\u5DE5\u4F5C\u6D41\u6A21\u677F", children: [_jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-b border-[var(--lokvis-border)]", children: [_jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Templates" }), _jsxs("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [WORKFLOW_TEMPLATES.length, " \u5185\u7F6E"] })] }), _jsx("div", { className: "grid grid-cols-1 gap-1.5 p-2", children: WORKFLOW_TEMPLATES.map((tpl) => (_jsxs("button", { type: "button", onClick: () => handleApply(tpl), className: "group flex items-start gap-2 rounded-md border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-2.5 py-2 text-left transition-all hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-primary)]/10/50", children: [_jsx("span", { className: "mt-0.5 text-base leading-none", children: tpl.icon }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center justify-between gap-1", children: [_jsx("span", { className: "truncate text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: tpl.name }), _jsxs("span", { className: "shrink-0 rounded bg-[var(--lokvis-surface-muted)] px-1 py-0.5 text-[9px] font-medium uppercase text-[var(--lokvis-fg-muted)]", children: [tpl.nodes.length, " \u6B65"] })] }), _jsx("p", { className: "mt-0.5 truncate text-[10px] text-[var(--lokvis-fg-muted)]", children: tpl.description }), _jsx("div", { className: "mt-1 flex flex-wrap items-center gap-0.5", children: tpl.nodes.map((n, i) => (_jsxs(React.Fragment, { children: [i > 0 && (_jsx(Icon, { size: 8, className: "text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m5 5 5 5-5 5" }) })), _jsx("code", { className: "rounded bg-[var(--lokvis-surface-muted)] px-1 py-0.5 text-[9px] text-[var(--lokvis-fg-muted)]", children: n.capability })] }, i))) })] })] }, tpl.id))) })] }));
34
+ return (_jsxs("div", { className: `flex flex-col ${className}`, role: "region", "aria-label": "\u5DE5\u4F5C\u6D41\u6A21\u677F", children: [_jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-b border-[var(--lokvis-border)]", children: [_jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-[var(--lokvis-fg-subtle)]", children: "Templates" }), _jsxs("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [WORKFLOW_TEMPLATES.length, " \u5185\u7F6E"] })] }), _jsx("div", { className: "grid grid-cols-1 gap-1.5 p-2", children: WORKFLOW_TEMPLATES.map((tpl) => (_jsxs("button", { type: "button", onClick: () => handleApply(tpl), className: "group flex items-start gap-2 rounded-md border border-[var(--lokvis-border)] bg-[var(--lokvis-surface)] px-2.5 py-2 text-left transition-all hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-primary)]/10", children: [_jsx("span", { className: "mt-0.5 text-base leading-none", children: tpl.icon }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center justify-between gap-1", children: [_jsx("span", { className: "truncate text-[11px] font-medium text-[var(--lokvis-fg-muted)]", children: tpl.name }), _jsxs("span", { className: "shrink-0 rounded bg-[var(--lokvis-surface-muted)] px-1 py-0.5 text-[9px] font-medium uppercase text-[var(--lokvis-fg-muted)]", children: [tpl.nodes.length, " \u6B65"] })] }), _jsx("p", { className: "mt-0.5 truncate text-[10px] text-[var(--lokvis-fg-muted)]", children: tpl.description }), _jsx("div", { className: "mt-1 flex flex-wrap items-center gap-0.5", children: tpl.nodes.map((n, i) => (_jsxs(React.Fragment, { children: [i > 0 && (_jsx(Icon, { size: 8, className: "text-[var(--lokvis-fg-subtle)]", children: _jsx("path", { d: "m5 5 5 5-5 5" }) })), _jsx("code", { className: "rounded bg-[var(--lokvis-surface-muted)] px-1 py-0.5 text-[9px] text-[var(--lokvis-fg-muted)]", children: n.capability })] }, i))) })] })] }, tpl.id))) }), _jsx(ConfirmDialog, { open: pendingTpl !== null, title: "\u5E94\u7528\u6A21\u677F", message: pendingTpl
35
+ ? `应用模板「${pendingTpl.name}」将替换当前 ${nodes.length} 个节点,继续?`
36
+ : '', confirmText: "\u66FF\u6362", variant: "danger", onConfirm: () => {
37
+ if (pendingTpl)
38
+ applyTemplate(pendingTpl);
39
+ setPendingTpl(null);
40
+ }, onClose: () => setPendingTpl(null) })] }));
31
41
  }
32
42
  //# sourceMappingURL=WorkflowTemplates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowTemplates.js","sourceRoot":"","sources":["../../src/components/WorkflowTemplates.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;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,kBAAkB,EAAyB,MAAM,+BAA+B,CAAC;AAU1F,MAAM,UAAU,iBAAiB,CAAC,EACjC,SAAS,GAAG,EAAE,EACd,iBAAiB,GAAG,IAAI,EACxB,OAAO,GACiB;IACxB,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,CAAC,GAAqB,EAAE,EAAE;QAC9C,IAAI,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC;gBACxE,OAAO;YACP,CAAC;QACD,CAAC;QACD,oBAAoB,CACpB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CACrE,CAAC;QACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,CACP,eACA,SAAS,EAAE,iBAAiB,SAAS,EAAE,EACvC,IAAI,EAAC,QAAQ,gBACF,gCAAO,aAElB,eAAK,SAAS,EAAC,oFAAoF,aACnG,eAAM,SAAS,EAAC,mFAAmF,0BAE5F,EACP,gBAAM,SAAS,EAAC,4CAA4C,aAAE,kBAAkB,CAAC,MAAM,qBAAW,IAC5F,EACN,cAAK,SAAS,EAAC,8BAA8B,YAC5C,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjC,kBAEA,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAC/B,SAAS,EAAC,6NAA6N,aAEvO,eAAM,SAAS,EAAC,+BAA+B,YAAE,GAAG,CAAC,IAAI,GAAQ,EACjE,eAAK,SAAS,EAAC,gBAAgB,aAC/B,eAAK,SAAS,EAAC,yCAAyC,aACxD,eAAM,SAAS,EAAC,gEAAgE,YAC/E,GAAG,CAAC,IAAI,GACF,EACP,gBAAM,SAAS,EAAC,8HAA8H,aAC7I,GAAG,CAAC,KAAK,CAAC,MAAM,eACV,IACD,EACN,YAAG,SAAS,EAAC,2DAA2D,YACvE,GAAG,CAAC,WAAW,GACZ,EAEJ,cAAK,SAAS,EAAC,0CAA0C,YACxD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACzB,MAAC,KAAK,CAAC,QAAQ,eACd,CAAC,GAAG,CAAC,IAAI,CACV,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,gCAAgC,YACzD,eAAM,CAAC,EAAC,cAAc,GAAG,GAClB,CACN,EACD,eAAM,SAAS,EAAC,+FAA+F,YAC9G,CAAC,CAAC,UAAU,GACN,KARc,CAAC,CASL,CAChB,CAAC,GACI,IACA,KAjCD,GAAG,CAAC,EAAE,CAkCF,CACR,CAAC,GACI,IACA,CACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"WorkflowTemplates.js","sourceRoot":"","sources":["../../src/components/WorkflowTemplates.tsx"],"names":[],"mappings":"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"}
@@ -64,7 +64,29 @@ export interface WorkspaceProps extends UseLokvisOptions {
64
64
  enableErrorBanner?: boolean;
65
65
  /** 是否从 URL ?workflow= 参数加载分享工作流(默认 true,W11.5) */
66
66
  enableShareLink?: boolean;
67
+ /**
68
+ * 初始化时自动导入的资产列表。
69
+ * Runtime 就绪后,通过 runtime.importAsset() 逐个导入。
70
+ */
71
+ initialAssets?: Array<{
72
+ blob: Blob;
73
+ name: string;
74
+ }>;
75
+ /**
76
+ * 初始化时预选的能力名称(自动添加到工作流节点)。
77
+ */
78
+ initialCapability?: string;
79
+ /**
80
+ * 初始化时预填的参数(与 initialCapability 配合使用)。
81
+ */
82
+ initialParams?: Record<string, unknown>;
83
+ /**
84
+ * 布局模式:
85
+ * - 'full': 完整三栏布局(默认)
86
+ * - 'focused': 精简模式,隐藏 AssetPanel 和 PipelineBar,适合单工具页跳转进入
87
+ */
88
+ mode?: 'full' | 'focused';
67
89
  className?: string;
68
90
  }
69
- export declare function Workspace({ title, showStatusBar, showHistoryPanel, enableGlobalDropzone, enableCommandPalette, enableThemeToggle, enableCompare, enableDownloadPanel, enableWorkflowEditor, enableProgressBar, enableErrorBanner, enableShareLink, className, ...lokvisOptions }: WorkspaceProps): React.JSX.Element;
91
+ export declare function Workspace({ title, showStatusBar, showHistoryPanel, enableGlobalDropzone, enableCommandPalette, enableThemeToggle, enableCompare, enableDownloadPanel, enableWorkflowEditor, enableProgressBar, enableErrorBanner, enableShareLink, initialAssets, initialCapability, initialParams, mode, className, ...lokvisOptions }: WorkspaceProps): React.JSX.Element;
70
92
  //# sourceMappingURL=Workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/components/Workspace.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmBzE,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACvD,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,SAAS,CAAC,EACzB,KAAK,EACL,aAAoB,EACpB,gBAAuB,EACvB,oBAA2B,EAC3B,oBAA2B,EAC3B,iBAAwB,EACxB,aAAoB,EACpB,mBAA0B,EAC1B,oBAA4B,EAC5B,iBAAwB,EACxB,iBAAwB,EACxB,eAAsB,EACtB,SAAc,EACd,GAAG,aAAa,EAChB,EAAE,cAAc,qBAoLhB"}
1
+ {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/components/Workspace.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoBzE,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACvD,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,SAAS,CAAC,EACzB,KAAK,EACL,aAAoB,EACpB,gBAAuB,EACvB,oBAA2B,EAC3B,oBAA2B,EAC3B,iBAAwB,EACxB,aAAoB,EACpB,mBAA0B,EAC1B,oBAA4B,EAC5B,iBAAwB,EACxB,iBAAwB,EACxB,eAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,IAAa,EACb,SAAc,EACd,GAAG,aAAa,EAChB,EAAE,cAAc,qBAiPhB"}