@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":"AssetPanel.d.ts","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,UAAU,CAAC,EAAE,SAAc,EAAE,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"AssetPanel.d.ts","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,UAAU,CAAC,EAAE,SAAc,EAAE,EAAE,eAAe,qBAiO7D"}
|
|
@@ -6,7 +6,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* 支持拖拽导入、点击选择、缩略图预览、按类型/关键词筛选、删除(W6.5)。
|
|
7
7
|
*/
|
|
8
8
|
import * as React from 'react';
|
|
9
|
-
import { Icon } from '@lokvis/ui-core';
|
|
9
|
+
import { FOCUS_RING, Icon, Input } from '@lokvis/ui-core';
|
|
10
10
|
import { useWorkspaceStore } from '../store/index.js';
|
|
11
11
|
/** 类型筛选 chip 显示名 */
|
|
12
12
|
const TYPE_LABEL = {
|
|
@@ -25,14 +25,11 @@ export function AssetPanel({ className = '' }) {
|
|
|
25
25
|
const importFiles = useWorkspaceStore((s) => s.importFiles);
|
|
26
26
|
const selectAsset = useWorkspaceStore((s) => s.selectAsset);
|
|
27
27
|
const removeAsset = useWorkspaceStore((s) => s.removeAsset);
|
|
28
|
-
const
|
|
29
|
-
const runtime = useWorkspaceStore((s) => s.runtime);
|
|
28
|
+
const ensureThumbnails = useWorkspaceStore((s) => s.ensureThumbnails);
|
|
30
29
|
const [dragging, setDragging] = React.useState(false);
|
|
31
30
|
// W6.5 筛选:类型 + 关键词(纯 UI 状态,不入 store)
|
|
32
31
|
const [filterType, setFilterType] = React.useState('all');
|
|
33
32
|
const [searchQuery, setSearchQuery] = React.useState('');
|
|
34
|
-
// B2 修复:跟踪 in-flight exportAsset,避免同一 asset 跨 effect 重跑并发发起
|
|
35
|
-
const inflightRef = React.useRef(new Set());
|
|
36
33
|
async function handleFiles(files) {
|
|
37
34
|
if (!files)
|
|
38
35
|
return;
|
|
@@ -40,52 +37,11 @@ export function AssetPanel({ className = '' }) {
|
|
|
40
37
|
if (arr.length > 0)
|
|
41
38
|
await importFiles(arr);
|
|
42
39
|
}
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
// - cancelled flag:effect 重跑/卸载时,await 完成的 exportAsset 不再创建
|
|
46
|
-
// ObjectURL 也不 setThumbnail,避免覆盖更新值与孤儿 URL
|
|
47
|
-
// - inflightRef:同一 asset 在上一轮 effect 还在 await 时,新一轮 effect
|
|
48
|
-
// 不再重复发起(批量导入 assets 频繁变化场景)
|
|
40
|
+
// TD-5.1:缩略图生成统一在 store.ensureThumbnails 中管理(创建/替换/释放闭环)。
|
|
41
|
+
// 组件只需在 assets 变化时触发一次,inflight 去重 + 资产存在性检查在 store 内完成。
|
|
49
42
|
React.useEffect(() => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
let cancelled = false;
|
|
53
|
-
const inflight = inflightRef.current;
|
|
54
|
-
for (const asset of assets) {
|
|
55
|
-
if (thumbnails[asset.id])
|
|
56
|
-
continue;
|
|
57
|
-
if (asset.type !== 'image')
|
|
58
|
-
continue;
|
|
59
|
-
if (inflight.has(asset.id))
|
|
60
|
-
continue;
|
|
61
|
-
inflight.add(asset.id);
|
|
62
|
-
(async () => {
|
|
63
|
-
try {
|
|
64
|
-
const blob = await runtime.exportAsset(asset.id);
|
|
65
|
-
// effect 已过期或资产已删除:不创建 ObjectURL(零泄漏)
|
|
66
|
-
if (cancelled)
|
|
67
|
-
return;
|
|
68
|
-
const url = URL.createObjectURL(blob);
|
|
69
|
-
if (cancelled) {
|
|
70
|
-
// 双重检查:await 与 createObjectURL 之间可能被取消
|
|
71
|
-
URL.revokeObjectURL(url);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
setThumbnail(asset.id, url);
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
// ignore export 失败
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
inflight.delete(asset.id);
|
|
81
|
-
}
|
|
82
|
-
})();
|
|
83
|
-
}
|
|
84
|
-
return () => {
|
|
85
|
-
cancelled = true;
|
|
86
|
-
};
|
|
87
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
|
-
}, [assets, runtime]);
|
|
43
|
+
ensureThumbnails();
|
|
44
|
+
}, [assets, ensureThumbnails]);
|
|
89
45
|
// 资产中实际存在的类型(仅展示有意义的 chip,避免空类型噪音)
|
|
90
46
|
const availableTypes = React.useMemo(() => {
|
|
91
47
|
const set = new Set();
|
|
@@ -113,15 +69,15 @@ export function AssetPanel({ className = '' }) {
|
|
|
113
69
|
e.preventDefault();
|
|
114
70
|
setDragging(false);
|
|
115
71
|
void handleFiles(e.dataTransfer.files);
|
|
116
|
-
}, children: [_jsxs("div", { className: "flex items-center justify-between px-3 h-
|
|
72
|
+
}, 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: "Assets" }), _jsx("span", { className: "text-[11px] tabular-nums text-[var(--lokvis-fg-subtle)]", children: filterType === 'all' && !searchQuery
|
|
117
73
|
? assets.length
|
|
118
74
|
: `${filteredAssets.length}/${assets.length}` })] }), _jsxs("label", { className: `m-2 block cursor-pointer rounded-lg border border-dashed px-2 py-3 text-center transition-all ${dragging
|
|
119
75
|
? 'border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10 text-[var(--lokvis-primary)]'
|
|
120
|
-
: 'border-[var(--lokvis-border)] text-[var(--lokvis-fg-subtle)] hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-primary)]/
|
|
76
|
+
: 'border-[var(--lokvis-border)] text-[var(--lokvis-fg-subtle)] hover:border-[var(--lokvis-primary)]/50 hover:bg-[var(--lokvis-primary)]/5 hover:text-[var(--lokvis-primary)]'}`, children: [_jsx("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => handleFiles(e.target.files) }), _jsx(Icon, { size: 16, className: "mx-auto", children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), _jsx("span", { className: "mt-1 block text-[10px] font-medium", children: dragging ? 'Drop here' : 'Add files' })] }), assets.length > 0 && (_jsxs("div", { className: "px-2 pb-2 space-y-1.5", children: [_jsxs("div", { role: "radiogroup", "aria-label": "Filter by type", className: "flex flex-wrap gap-1", children: [_jsx("button", { type: "button", role: "radio", "aria-checked": filterType === 'all', onClick: () => setFilterType('all'), className: `rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${filterType === 'all'
|
|
121
77
|
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
122
78
|
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: "All" }), availableTypes.map((t) => (_jsx("button", { type: "button", role: "radio", "aria-checked": filterType === t, onClick: () => setFilterType(t), className: `rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${filterType === t
|
|
123
79
|
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
124
|
-
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: TYPE_LABEL[t] }, t)))] }),
|
|
80
|
+
: 'bg-[var(--lokvis-surface-muted)] text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-border)]'}`, children: TYPE_LABEL[t] }, t)))] }), _jsx(Input, { size: "sm", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Filter by type...", "aria-label": "Filter assets by format", className: "bg-[var(--lokvis-surface-muted)] hover:bg-[var(--lokvis-border)]/50", leadingIcon: _jsxs(Icon, { size: 11, children: [_jsx("circle", { cx: "10", cy: "10", r: "6" }), _jsx("path", { d: "m20 20-5-5" })] }) })] })), _jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: assets.length === 0 ? (_jsx("p", { className: "px-1 py-4 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "No assets imported" })) : filteredAssets.length === 0 ? (_jsx("p", { className: "px-1 py-4 text-center text-[10px] text-[var(--lokvis-fg-subtle)]", children: "No assets match filter" })) : (_jsx("ul", { className: "space-y-1", children: filteredAssets.map((asset) => {
|
|
125
81
|
const selected = asset.id === selectedAssetId;
|
|
126
82
|
const thumb = thumbnails[asset.id];
|
|
127
83
|
return (_jsxs("li", {
|
|
@@ -131,7 +87,7 @@ export function AssetPanel({ className = '' }) {
|
|
|
131
87
|
e.preventDefault();
|
|
132
88
|
selectAsset(asset.id);
|
|
133
89
|
}
|
|
134
|
-
}, className: `group flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-xs transition-all
|
|
90
|
+
}, className: `group flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-xs transition-all ${FOCUS_RING} ${selected
|
|
135
91
|
? 'bg-[var(--lokvis-primary)]/10 ring-1 ring-[var(--lokvis-primary)]/40'
|
|
136
92
|
: 'hover:bg-[var(--lokvis-surface)]'}`, children: [_jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded bg-[var(--lokvis-surface-muted)]", children: thumb ? (_jsx("img", { src: thumb, alt: "", className: "h-full w-full object-cover" })) : (_jsx("span", { className: "text-[10px] font-medium text-[var(--lokvis-fg-subtle)]", children: asset.metadata.format.slice(0, 3).toUpperCase() })) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-[11px] font-medium", children: asset.metadata.format }), _jsxs("div", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: [(asset.metadata.size / 1024).toFixed(1), " KB"] })] }), _jsx("button", { type: "button", onClick: (e) => {
|
|
137
93
|
e.stopPropagation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPanel.js","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"AssetPanel.js","sourceRoot":"","sources":["../../src/components/AssetPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;MAGE;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAc,EAAE,aAAoB,EAAE,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;MAGE;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAc,EAAE,aAAoB,EAAE,EAAE,WAAW,qBAoL3E"}
|
|
@@ -57,15 +57,15 @@ export function Canvas({ className = '', enableCompare = true }) {
|
|
|
57
57
|
void importFiles(Array.from(e.dataTransfer.files));
|
|
58
58
|
}
|
|
59
59
|
}, children: _jsxs("div", { className: "relative flex flex-1 items-center justify-center bg-[var(--lokvis-surface)]", children: [_jsx("div", { className: "absolute inset-0 opacity-[0.35]", style: {
|
|
60
|
-
backgroundImage: 'radial-gradient(circle,
|
|
60
|
+
backgroundImage: 'radial-gradient(circle, var(--lokvis-border) 1px, transparent 1px)',
|
|
61
61
|
backgroundSize: '20px 20px',
|
|
62
|
-
} }), canCompare && (_jsxs("div", { className: "absolute top-2 right-2 z-20 flex items-center gap-1 rounded-md bg-[var(--lokvis-surface)]/90 p-0.5 shadow-
|
|
62
|
+
} }), canCompare && (_jsxs("div", { role: "group", "aria-label": "\u5BF9\u6BD4\u6A21\u5F0F\u5207\u6362", className: "absolute top-2 right-2 z-20 flex items-center gap-1 rounded-md bg-[var(--lokvis-surface)]/90 p-0.5 shadow-[var(--lokvis-elevation-1)] backdrop-blur-sm", children: [_jsx("button", { type: "button", onClick: () => setCompareMode(false), "aria-pressed": !compareMode, className: `rounded px-2 py-1 text-[10px] font-medium transition-colors ${!compareMode
|
|
63
63
|
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
64
64
|
: 'text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)]'}`, children: "Single" }), _jsx("button", { type: "button", onClick: () => setCompareMode(true), "aria-pressed": compareMode, className: `rounded px-2 py-1 text-[10px] font-medium transition-colors ${compareMode
|
|
65
65
|
? 'bg-[var(--lokvis-primary)]/15 text-[var(--lokvis-primary)]'
|
|
66
|
-
: 'text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)]'}`, children: "Compare" })] })), dragOver && (_jsx("div", { className: "absolute inset-4 z-10 rounded-xl border-2 border-dashed border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10
|
|
66
|
+
: 'text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)]'}`, children: "Compare" })] })), dragOver && (_jsx("div", { className: "absolute inset-4 z-10 rounded-xl border-2 border-dashed border-[var(--lokvis-primary)] bg-[var(--lokvis-primary)]/10 flex items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx(Icon, { size: 32, className: "mx-auto text-[var(--lokvis-primary)]", strokeWidth: 1.5, children: _jsx("path", { d: "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5" }) }), _jsx("p", { className: "mt-2 text-sm font-medium text-[var(--lokvis-primary)]", children: "Drop files to import" })] }) })), compareMode && canCompare ? (_jsx("div", { className: "relative flex max-h-[calc(100%-4rem)] max-w-[calc(100%-4rem)] items-center justify-center", children: _jsx(CompareSlider, { className: "max-h-[calc(100vh-12rem)] max-w-full" }) })) : selected ? (preview ? (_jsxs("div", { className: "relative", children: [_jsx("img", { src: preview, alt: selected.metadata.format, className: "max-h-[calc(100%-4rem)] max-w-[calc(100%-4rem)] rounded-lg object-contain shadow-[var(--lokvis-elevation-3)] ring-1 ring-[var(--lokvis-border)]/50" }), _jsx("div", { className: "absolute bottom-2 left-2 rounded-lg bg-[var(--lokvis-surface)]/90 px-2.5 py-1 text-[11px] text-[var(--lokvis-fg-muted)] shadow-[var(--lokvis-elevation-1)] backdrop-blur-sm", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: selected.metadata.format.toUpperCase() }), selected.metadata.dimensions && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", children: "\u00B7" }), _jsxs("span", { children: [selected.metadata.dimensions.width, " x ", selected.metadata.dimensions.height] })] })), _jsx("span", { className: "text-[var(--lokvis-fg-subtle)]", children: "\u00B7" }), _jsxs("span", { children: [(selected.metadata.size / 1024).toFixed(1), " KB"] })] }) })] })) : (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsx("div", { className: "h-28 w-28 animate-pulse rounded-xl bg-[var(--lokvis-border)]" }), _jsx("span", { className: "text-xs text-[var(--lokvis-fg-subtle)]", children: "Loading preview..." })] }))) : (_jsxs("div", { className: "relative flex flex-col items-center gap-5 px-6 text-center", children: [_jsx("div", { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-[var(--lokvis-surface)] shadow-[var(--lokvis-elevation-1)] ring-1 ring-[var(--lokvis-border)]/80", children: _jsx(Icon, { size: 36, className: "text-[var(--lokvis-fg-subtle)]", strokeWidth: 1.5, children: _jsx("path", { d: "m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z" }) }) }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg-muted)]", children: "No asset selected" }), _jsx("p", { className: "mt-1.5 text-xs text-[var(--lokvis-fg-subtle)]", children: assets.length === 0
|
|
67
67
|
? 'Import files to get started, or drag them here'
|
|
68
|
-
: 'Select an asset from the left panel' })] }), assets.length === 0 && (_jsxs("label", { className: "mt-2 inline-flex items-center gap-1.5 rounded-lg bg-[var(--lokvis-primary-hover)] px-4 py-2 text-xs font-medium text-[var(--lokvis-primary-fg)] shadow-
|
|
68
|
+
: 'Select an asset from the left panel' })] }), assets.length === 0 && (_jsxs("label", { className: "mt-2 inline-flex items-center gap-1.5 rounded-lg bg-[var(--lokvis-primary-hover)] px-4 py-2 text-xs font-medium text-[var(--lokvis-primary-fg)] shadow-[var(--lokvis-elevation-1)] cursor-pointer transition-colors hover:bg-[var(--lokvis-primary)]", children: [_jsx(Icon, { size: 14, children: _jsx("path", { d: "M12 4.5v15m7.5-7.5h-15" }) }), "Import Files", _jsx("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => {
|
|
69
69
|
if (e.target.files)
|
|
70
70
|
void importFiles(Array.from(e.target.files));
|
|
71
71
|
} })] }))] }))] }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.js","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Canvas.js","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
* - 键盘:← → 调整 5% 步长(聚焦分隔条时)
|
|
11
11
|
*
|
|
12
12
|
* 数据来源:
|
|
13
|
-
* - before: `store.selectedAssetId` 对应的 thumbnails(由
|
|
13
|
+
* - before: `store.selectedAssetId` 对应的 thumbnails(由 store.ensureThumbnails 生成)
|
|
14
14
|
* - after: `store.selectedOutputId` 对应的 thumbnails
|
|
15
15
|
* - 任一缺失则不渲染(返回 null)
|
|
16
16
|
*
|
|
17
|
-
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由
|
|
18
|
-
*
|
|
17
|
+
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由 store.ensureThumbnails
|
|
18
|
+
* 统一生成(TD-5.1:创建/替换/释放在 store 内闭环)并存入 store.thumbnails,
|
|
19
|
+
* 本组件按 assetId 取用。
|
|
19
20
|
*/
|
|
20
21
|
import * as React from 'react';
|
|
21
22
|
export interface CompareSliderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompareSlider.d.ts","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CompareSlider.d.ts","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,kBAAkB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAc,EAAE,EAAE,kBAAkB,4BA+JnE"}
|
|
@@ -11,12 +11,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
* - 键盘:← → 调整 5% 步长(聚焦分隔条时)
|
|
12
12
|
*
|
|
13
13
|
* 数据来源:
|
|
14
|
-
* - before: `store.selectedAssetId` 对应的 thumbnails(由
|
|
14
|
+
* - before: `store.selectedAssetId` 对应的 thumbnails(由 store.ensureThumbnails 生成)
|
|
15
15
|
* - after: `store.selectedOutputId` 对应的 thumbnails
|
|
16
16
|
* - 任一缺失则不渲染(返回 null)
|
|
17
17
|
*
|
|
18
|
-
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由
|
|
19
|
-
*
|
|
18
|
+
* 注:本组件只负责"展示对比",不负责生成缩略图。缩略图由 store.ensureThumbnails
|
|
19
|
+
* 统一生成(TD-5.1:创建/替换/释放在 store 内闭环)并存入 store.thumbnails,
|
|
20
|
+
* 本组件按 assetId 取用。
|
|
20
21
|
*/
|
|
21
22
|
import * as React from 'react';
|
|
22
23
|
import { Icon } from '@lokvis/ui-core';
|
|
@@ -101,6 +102,6 @@ export function CompareSlider({ className = '' }) {
|
|
|
101
102
|
};
|
|
102
103
|
if (!beforeUrl || !afterUrl)
|
|
103
104
|
return null;
|
|
104
|
-
return (_jsxs("div", { ref: containerRef, className: `relative select-none overflow-hidden rounded-lg ring-1 ring-
|
|
105
|
+
return (_jsxs("div", { ref: containerRef, role: "group", "aria-label": "\u524D\u540E\u5BF9\u6BD4\u6ED1\u5757", className: `relative select-none overflow-hidden rounded-lg ring-1 ring-[var(--lokvis-border)]/50 ${className}`, onMouseDown: handleMouseDown, onTouchStart: handleTouchStart, children: [_jsx("img", { src: afterUrl, alt: "After", draggable: false, className: "block max-h-full max-w-full object-contain pointer-events-none" }), _jsx("div", { className: "absolute inset-0", style: { clipPath: `inset(0 ${100 - pos}% 0 0)` }, children: _jsx("img", { src: beforeUrl, alt: "Before", draggable: false, className: "block max-h-full max-w-full object-contain pointer-events-none" }) }), _jsx("span", { className: "absolute top-2 left-2 rounded bg-[var(--lokvis-scrim)] px-1.5 py-0.5 text-[10px] font-medium text-[var(--lokvis-primary-fg)]", children: "Before" }), _jsx("span", { className: "absolute top-2 right-2 rounded bg-[var(--lokvis-scrim)] px-1.5 py-0.5 text-[10px] font-medium text-[var(--lokvis-primary-fg)]", children: "After" }), _jsxs("div", { className: "absolute top-0 bottom-0 z-10 cursor-ew-resize", style: { left: `${pos}%`, transform: 'translateX(-50%)' }, role: "separator", "aria-valuenow": Math.round(pos), "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": "Comparison slider position", tabIndex: 0, onKeyDown: handleKeyDown, children: [_jsx("div", { className: "absolute inset-y-0 left-1/2 w-0.5 -translate-x-1/2 bg-[var(--lokvis-surface)] shadow-[var(--lokvis-elevation-1)]" }), _jsx("div", { className: "absolute top-1/2 left-1/2 flex h-8 w-8 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-[var(--lokvis-surface)] shadow-[var(--lokvis-elevation-2)] ring-1 ring-[var(--lokvis-border)]", children: _jsx(Icon, { size: 14, className: "text-[var(--lokvis-fg-muted)]", children: _jsx("path", { d: "M9 5l-5 7 5 7M15 5l5 7-5 7" }) }) })] }), (beforeAsset || afterAsset) && (_jsxs("div", { className: "absolute bottom-2 inset-x-2 flex justify-between text-[10px] text-[var(--lokvis-primary-fg)]", children: [beforeAsset?.metadata.dimensions && (_jsxs("span", { className: "rounded bg-[var(--lokvis-scrim)] px-1.5 py-0.5", children: [beforeAsset.metadata.dimensions.width, "\u00D7", beforeAsset.metadata.dimensions.height] })), afterAsset?.metadata.dimensions && (_jsxs("span", { className: "rounded bg-[var(--lokvis-scrim)] px-1.5 py-0.5", children: [afterAsset.metadata.dimensions.width, "\u00D7", afterAsset.metadata.dimensions.height] }))] }))] }));
|
|
105
106
|
}
|
|
106
107
|
//# sourceMappingURL=CompareSlider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompareSlider.js","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"CompareSlider.js","sourceRoot":"","sources":["../../src/components/CompareSlider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadPanel.d.ts","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DownloadPanel.d.ts","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,kBAAkB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAqCD,wBAAgB,aAAa,CAAC,EAAE,SAAc,EAAE,EAAE,kBAAkB,4BA0LnE"}
|
|
@@ -16,14 +16,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
16
16
|
import * as React from 'react';
|
|
17
17
|
import { Icon } from '@lokvis/ui-core';
|
|
18
18
|
import { useWorkspaceStore } from '../store/index.js';
|
|
19
|
-
|
|
20
|
-
function formatBytes(bytes) {
|
|
21
|
-
if (bytes < 1024)
|
|
22
|
-
return `${bytes} B`;
|
|
23
|
-
if (bytes < 1024 * 1024)
|
|
24
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
25
|
-
return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
26
|
-
}
|
|
19
|
+
import { formatBytes } from '../utils.js';
|
|
27
20
|
/**
|
|
28
21
|
* 批量下载时每项之间的延迟毫秒数。
|
|
29
22
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadPanel.js","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"DownloadPanel.js","sourceRoot":"","sources":["../../src/components/DownloadPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ErrorBoundary - React 错误边界(D6)
|
|
3
|
+
*
|
|
4
|
+
* 捕获子组件树渲染期间的运行时异常,避免整个 Workspace 白屏。
|
|
5
|
+
* 必须是 class 组件(React 错误边界 API 仅支持 class)。
|
|
6
|
+
*
|
|
7
|
+
* 设计:
|
|
8
|
+
* - 默认 fallback 使用 lokvis token,与 Workspace 错误态视觉一致
|
|
9
|
+
* - 可选 fallback 渲染 prop(消费方自定义 UI)
|
|
10
|
+
* - 可选 onError 回调(上报等);默认 console.error,不引入 sentry 等
|
|
11
|
+
* app 层依赖,保持 ui-react 包架构纯净(不反向依赖消费方)
|
|
12
|
+
* - reset() 清空 error 状态,尝试重新渲染子树
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <ErrorBoundary>
|
|
17
|
+
* <Workspace plugins={[...]} />
|
|
18
|
+
* </ErrorBoundary>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
export interface ErrorBoundaryProps {
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
/** 自定义 fallback;不传则用默认 UI */
|
|
25
|
+
fallback?: (error: Error, reset: () => void) => React.ReactNode;
|
|
26
|
+
/** 错误回调(上报等),不传则 console.error */
|
|
27
|
+
onError?: (error: Error, info: React.ErrorInfo) => void;
|
|
28
|
+
}
|
|
29
|
+
interface State {
|
|
30
|
+
error: Error | null;
|
|
31
|
+
}
|
|
32
|
+
export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, State> {
|
|
33
|
+
state: State;
|
|
34
|
+
static getDerivedStateFromError(error: Error): State;
|
|
35
|
+
componentDidCatch(error: Error, info: React.ErrorInfo): void;
|
|
36
|
+
reset: () => void;
|
|
37
|
+
render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=ErrorBoundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAChE,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;CACxD;AAED,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC;IAC5E,KAAK,EAAE,KAAK,CAAmB;IAE/B,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAIpD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;IAQrD,KAAK,aAEH;IAEF,MAAM;CASN"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ErrorBoundary - React 错误边界(D6)
|
|
4
|
+
*
|
|
5
|
+
* 捕获子组件树渲染期间的运行时异常,避免整个 Workspace 白屏。
|
|
6
|
+
* 必须是 class 组件(React 错误边界 API 仅支持 class)。
|
|
7
|
+
*
|
|
8
|
+
* 设计:
|
|
9
|
+
* - 默认 fallback 使用 lokvis token,与 Workspace 错误态视觉一致
|
|
10
|
+
* - 可选 fallback 渲染 prop(消费方自定义 UI)
|
|
11
|
+
* - 可选 onError 回调(上报等);默认 console.error,不引入 sentry 等
|
|
12
|
+
* app 层依赖,保持 ui-react 包架构纯净(不反向依赖消费方)
|
|
13
|
+
* - reset() 清空 error 状态,尝试重新渲染子树
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <ErrorBoundary>
|
|
18
|
+
* <Workspace plugins={[...]} />
|
|
19
|
+
* </ErrorBoundary>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import * as React from 'react';
|
|
23
|
+
export class ErrorBoundary extends React.Component {
|
|
24
|
+
state = { error: null };
|
|
25
|
+
static getDerivedStateFromError(error) {
|
|
26
|
+
return { error };
|
|
27
|
+
}
|
|
28
|
+
componentDidCatch(error, info) {
|
|
29
|
+
if (this.props.onError) {
|
|
30
|
+
this.props.onError(error, info);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error('[lokvis ErrorBoundary]', error, info.componentStack);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
reset = () => {
|
|
37
|
+
this.setState({ error: null });
|
|
38
|
+
};
|
|
39
|
+
render() {
|
|
40
|
+
if (this.state.error) {
|
|
41
|
+
if (this.props.fallback) {
|
|
42
|
+
return this.props.fallback(this.state.error, this.reset);
|
|
43
|
+
}
|
|
44
|
+
return _jsx(DefaultFallback, { error: this.state.error, onReset: this.reset });
|
|
45
|
+
}
|
|
46
|
+
return this.props.children;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function DefaultFallback({ error, onReset }) {
|
|
50
|
+
return (_jsx("div", { className: "flex h-full w-full items-center justify-center p-6", role: "alert", children: _jsxs("div", { className: "max-w-md rounded-xl border border-[var(--lokvis-danger)]/30 bg-[var(--lokvis-surface)] p-6 text-center shadow-[var(--lokvis-elevation-2)]", children: [_jsx("div", { className: "mx-auto mb-3 flex h-10 w-10 items-center justify-center rounded-full bg-[var(--lokvis-danger)]/15", children: _jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-[var(--lokvis-danger)]", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }), _jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })] }) }), _jsx("p", { className: "font-semibold text-[var(--lokvis-fg)]", children: "Something went wrong" }), _jsx("p", { className: "mt-1.5 break-words text-sm text-[var(--lokvis-fg-muted)]", children: error.message || 'An unexpected error occurred while rendering this panel.' }), _jsx("button", { type: "button", onClick: onReset, className: "mt-4 inline-flex items-center justify-center 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: "Try again" })] }) }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAoC;IAC5E,KAAK,GAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE/B,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC5C,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,IAAqB;QACrD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACpE,CAAC;IACD,CAAC;IAED,KAAK,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM;QACN,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,KAAC,eAAe,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,GAAI,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC3B,CAAC;CACD;AAED,SAAS,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAyC;IACjF,OAAO,CACP,cAAK,SAAS,EAAC,oDAAoD,EAAC,IAAI,EAAC,OAAO,YAChF,eAAK,SAAS,EAAC,2IAA2I,aAC1J,cAAK,SAAS,EAAC,mGAAmG,YAClH,eACA,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,6BAA6B,aAEvC,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAG,EACjC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,GAAG,IACrC,GACA,EACN,YAAG,SAAS,EAAC,uCAAuC,qCAAyB,EAC7E,YAAG,SAAS,EAAC,0DAA0D,YACtE,KAAK,CAAC,OAAO,IAAI,0DAA0D,GACxE,EACJ,iBACA,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,2MAA2M,0BAG5M,IACH,GACA,CACL,CAAC;AACH,CAAC"}
|
|
@@ -99,6 +99,6 @@ export function ExifPanel({ className = '' }) {
|
|
|
99
99
|
if (!isImage || !selectedAsset)
|
|
100
100
|
return null;
|
|
101
101
|
const rows = exif ? formatExifRows(exif) : [];
|
|
102
|
-
return (_jsxs("div", { className: `shrink-0 border-b border-[var(--lokvis-border)] ${className}`, children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: "flex w-full items-center justify-between px-3 h-
|
|
102
|
+
return (_jsxs("div", { className: `shrink-0 border-b border-[var(--lokvis-border)] ${className}`, children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), 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)]", "aria-expanded": open, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Icon, { size: 12, className: `text-[var(--lokvis-fg-subtle)] transition-transform ${open ? '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: "EXIF" })] }), loading ? (_jsx("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: "loading\u2026" })) : exif ? (_jsxs("span", { className: "font-mono text-[10px] text-[var(--lokvis-success)] bg-[var(--lokvis-success)]/10 px-1.5 py-0.5 rounded", children: [rows.length, " fields"] })) : error ? (_jsx("span", { className: "text-[10px] text-[var(--lokvis-danger)]", children: "error" })) : (_jsx("span", { className: "text-[10px] text-[var(--lokvis-fg-subtle)]", children: "none" }))] }), open && (_jsx("div", { className: "px-3 pb-3 max-h-60 overflow-y-auto", children: loading ? (_jsx("div", { className: "py-4 text-center text-[11px] text-[var(--lokvis-fg-subtle)]", children: "Reading EXIF\u2026" })) : error ? (_jsx("div", { className: "py-3 text-center", children: _jsx("p", { className: "text-[11px] text-[var(--lokvis-danger)]", children: error }) })) : rows.length === 0 ? (_jsxs("div", { className: "py-4 text-center", children: [_jsx("p", { className: "text-[11px] text-[var(--lokvis-fg-subtle)]", children: "No EXIF data" }), _jsx("p", { className: "mt-1 text-[10px] text-[var(--lokvis-fg-muted)]", children: "This image has no embedded metadata" })] })) : (_jsx("dl", { className: "space-y-1", children: rows.map((row) => (_jsxs("div", { className: "flex items-baseline justify-between gap-3 text-[11px]", children: [_jsx("dt", { className: "shrink-0 text-[var(--lokvis-fg-subtle)]", children: row.label }), _jsx("dd", { className: "truncate text-right font-mono text-[var(--lokvis-fg-muted)]", children: row.value })] }, row.label))) })) }))] }));
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=ExifPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifPanel.js","sourceRoot":"","sources":["../../src/components/ExifPanel.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ExifPanel.js","sourceRoot":"","sources":["../../src/components/ExifPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalDropzone.d.ts","sourceRoot":"","sources":["../../src/components/GlobalDropzone.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,mBAAmB;IACnC,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAgB,cAAc,CAAC,EAC9B,MAAuB,EACvB,SAAc,GACd,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GlobalDropzone.d.ts","sourceRoot":"","sources":["../../src/components/GlobalDropzone.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,mBAAmB;IACnC,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAgB,cAAc,CAAC,EAC9B,MAAuB,EACvB,SAAc,GACd,EAAE,mBAAmB,4BA0JrB"}
|
|
@@ -65,6 +65,8 @@ export function GlobalDropzone({ accept = DEFAULT_ACCEPT, className = '', }) {
|
|
|
65
65
|
// dragCounter:用计数器而非布尔,避免子元素 dragenter/dragleave 触发抖动
|
|
66
66
|
const [dragCounter, setDragCounter] = React.useState(0);
|
|
67
67
|
const [rejectedFiles, setRejectedFiles] = React.useState([]);
|
|
68
|
+
// W21.6: 持有 rejectedFiles 自动清除定时器,unmount 时 cleanup
|
|
69
|
+
const rejectTimerRef = React.useRef(null);
|
|
68
70
|
React.useEffect(() => {
|
|
69
71
|
// 阻止浏览器默认行为(打开文件 / 下载),否则 drop 不会触发
|
|
70
72
|
const preventDefault = (e) => {
|
|
@@ -123,8 +125,10 @@ export function GlobalDropzone({ accept = DEFAULT_ACCEPT, className = '', }) {
|
|
|
123
125
|
}
|
|
124
126
|
if (rejected.length > 0) {
|
|
125
127
|
setRejectedFiles(rejected);
|
|
126
|
-
// 5
|
|
127
|
-
|
|
128
|
+
// W21.6: 5 秒后自动清空拒绝提示,clear 旧 timer 避免重叠
|
|
129
|
+
if (rejectTimerRef.current)
|
|
130
|
+
clearTimeout(rejectTimerRef.current);
|
|
131
|
+
rejectTimerRef.current = setTimeout(() => setRejectedFiles([]), 5000);
|
|
128
132
|
}
|
|
129
133
|
if (accepted.length > 0) {
|
|
130
134
|
void importFiles(accepted);
|
|
@@ -143,12 +147,15 @@ export function GlobalDropzone({ accept = DEFAULT_ACCEPT, className = '', }) {
|
|
|
143
147
|
window.removeEventListener('dragover', onDragOver);
|
|
144
148
|
window.removeEventListener('dragleave', onDragLeave);
|
|
145
149
|
window.removeEventListener('drop', onDrop);
|
|
150
|
+
// W21.6: 清理 rejectedFiles 自动清除定时器
|
|
151
|
+
if (rejectTimerRef.current)
|
|
152
|
+
clearTimeout(rejectTimerRef.current);
|
|
146
153
|
};
|
|
147
154
|
}, [accept, importFiles, setStatus, setError]);
|
|
148
155
|
const isDragging = dragCounter > 0;
|
|
149
156
|
const hasRejections = rejectedFiles.length > 0;
|
|
150
157
|
if (!isDragging && !hasRejections)
|
|
151
158
|
return null;
|
|
152
|
-
return (_jsxs("div", { className: `pointer-events-none fixed inset-0 z-40 flex items-center justify-center p-8 ${className}`, role: "alertdialog", "aria-live": "polite", children: [_jsx("div", { className: "absolute inset-0 bg-[var(--lokvis-primary)]/10/80 backdrop-blur-sm" }), _jsx("div", { className: `relative w-full max-w-md rounded-2xl border-2 border-dashed p-8 text-center bg-[var(--lokvis-surface)] shadow-
|
|
159
|
+
return (_jsxs("div", { className: `pointer-events-none fixed inset-0 z-40 flex items-center justify-center p-8 ${className}`, role: "alertdialog", "aria-live": "polite", children: [_jsx("div", { className: "absolute inset-0 bg-[var(--lokvis-primary)]/10/80 backdrop-blur-sm" }), _jsx("div", { className: `relative w-full max-w-md rounded-2xl border-2 border-dashed p-8 text-center bg-[var(--lokvis-surface)] shadow-[var(--lokvis-elevation-overlay)] ${hasRejections ? 'border-[var(--lokvis-danger)]' : 'border-[var(--lokvis-primary)]'}`, children: hasRejections ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-[var(--lokvis-danger)]/15", children: _jsxs(Icon, { size: 24, className: "text-[var(--lokvis-danger)]", strokeWidth: 2, children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("line", { x1: "15", y1: "9", x2: "9", y2: "15" }), _jsx("line", { x1: "9", y1: "9", x2: "15", y2: "15" })] }) }), _jsx("p", { className: "mt-3 text-sm font-semibold text-[var(--lokvis-danger)]", children: "Unsupported file type" }), _jsx("p", { className: "mt-1.5 text-xs text-[var(--lokvis-danger)]/80", children: rejectedFiles.join(', ') }), _jsxs("p", { className: "mt-2 text-[10px] text-[var(--lokvis-fg-muted)]", children: ["Accepted: ", accept || 'all files'] })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-[var(--lokvis-primary)]/15", children: _jsx(Icon, { size: 24, className: "text-[var(--lokvis-primary)]", strokeWidth: 1.5, children: _jsx("path", { d: "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5" }) }) }), _jsx("p", { className: "mt-3 text-sm font-semibold text-[var(--lokvis-primary)]", children: "Drop files to import" }), _jsx("p", { className: "mt-1 text-xs text-[var(--lokvis-fg-muted)]", children: "Files are processed locally in your browser" }), _jsxs("p", { className: "mt-2 text-[10px] text-[var(--lokvis-fg-subtle)]", children: ["Accepted: ", accept || 'all files'] })] })) })] }));
|
|
153
160
|
}
|
|
154
161
|
//# sourceMappingURL=GlobalDropzone.js.map
|