feat: update project structure for Vite and React Router, remove deprecated sources, and enhance Docker deployment

This commit is contained in:
HouYunFei
2026-07-05 11:38:42 +08:00
parent 443afab7bd
commit cebc3dc5c2
16 changed files with 60 additions and 50 deletions
@@ -9,6 +9,7 @@ export type InsertAssetPayload = { kind: "text"; content: string; title: string
type Props = {
open: boolean;
defaultTab?: string;
onInsert: (payload: InsertAssetPayload) => void;
onClose: () => void;
};
@@ -805,7 +805,7 @@ function OnlineAgentLogView({ logs, theme, context, onClear }: { logs: OnlineAge
const content = mode === "text" ? formatOnlineLogText(logs, context) : formatOnlineLogJson(logs, context);
const lastError = [...logs].reverse().find((item) => /错误|失败|error/i.test(`${item.title}\n${stringifyLog(item.data)}`));
const copy = async (value = content) => {
if (copyToClipboard(value)) return;
if (await copyToClipboard(value)) return;
textareaRef.current?.focus();
textareaRef.current?.select();
};
@@ -1266,7 +1266,7 @@ async function buildToolAgentMessages(snapshot: CanvasAgentSnapshot, history: Ca
...history
.filter((message) => message.role === "user" || message.role === "assistant" || message.role === "system")
.slice(-8)
.map((message): ResponseInputMessage => ({ role: message.role, content: message.text })),
.map((message): ResponseInputMessage => ({ role: message.role as "system" | "user" | "assistant", content: message.text })),
{
role: "user",
content: [
@@ -100,10 +100,12 @@ export function ImageToolSettingsModal({
frames.push(firstFrame);
const timer = window.setTimeout(sync, 120);
const resizeObserver = typeof ResizeObserver !== "undefined" && toolbar ? new ResizeObserver(sync) : null;
resizeObserver?.observe(toolbar);
toolbar?.childNodes.forEach((child) => {
if (child instanceof Element) resizeObserver?.observe(child);
});
if (resizeObserver && toolbar) {
resizeObserver.observe(toolbar);
toolbar.childNodes.forEach((child) => {
if (child instanceof Element) resizeObserver.observe(child);
});
}
sync();
window.addEventListener("resize", syncPreviewScroll);
return () => {
@@ -100,6 +100,7 @@ export function CanvasNodeHoverToolbar({
if (!node) return null;
const activeNode = node;
const left = viewport.x + (node.position.x + node.width / 2) * viewport.k;
const top = viewport.y + node.position.y * viewport.k - 14;
const isImage = node.type === CanvasNodeType.Image;
@@ -124,7 +125,7 @@ export function CanvasNodeHoverToolbar({
const imageTools = buildImageToolbarTools(node, { onUpload, onToggleFreeResize, onMaskEdit, onCrop, onSplit, onUpscale, onSuperResolve, onAngle, onViewImage, onCopyPrompt: copyImagePrompt, onReversePrompt });
function openImageToolSettings() {
onKeep(node.id);
onKeep(activeNode.id);
setDraftImageToolIds(quickImageToolIds);
setDraftShowImageToolLabels(showImageToolLabels);
setImageToolSettingsOpen(true);
@@ -280,7 +281,7 @@ export function CanvasNodeInfoModal({ node, open, onClose }: { node: CanvasNodeD
function ToolbarAction({ title, label, icon, onClick, showLabel, active = false, danger = false }: ToolbarTool & { showLabel: boolean }) {
const hasText = showLabel && Boolean(label);
return (
<Tooltip title={title} placement="top" mouseEnterDelay={0.2} color="#ffffff" styles={{ body: { color: "#242529", boxShadow: "0 8px 24px rgba(15,23,42,.16)", fontSize: 13, fontWeight: 500 } }}>
<Tooltip title={title} placement="top" mouseEnterDelay={0.2} color="#ffffff" styles={{ root: { color: "#242529", boxShadow: "0 8px 24px rgba(15,23,42,.16)", fontSize: 13, fontWeight: 500 } }}>
<button type="button" className={`group relative flex h-12 items-center whitespace-nowrap px-1.5 ${danger ? "text-[#ef4444]" : ""}`} onClick={onClick} aria-label={title}>
<span className={`flex h-9 items-center ${hasText ? "gap-2 px-2.5" : "justify-center px-2"} rounded-lg transition group-hover:bg-[#f0f0f1] ${active ? "bg-[#eeeeef]" : ""}`}>
{icon}
@@ -43,7 +43,7 @@ export function CanvasNodeMaskEditDialog({ dataUrl, open, onClose, onConfirm }:
const point = readCanvasPoint(event.currentTarget, event.clientX, event.clientY);
const maskCanvas = maskCanvasRef.current;
const context = maskCanvas?.getContext("2d");
if (!context) return;
if (!maskCanvas || !context) return;
context.lineCap = "round";
context.lineJoin = "round";
context.lineWidth = brushSize;