task(F8): SVG import as block - path parser (M/L/H/V/C/S/Q/T/A/Z, bezier flattening, arc endpoint-center), rect/circle convention fixes, ellipse polygon, geometry payload for library

This commit is contained in:
Agent Zero
2026-08-29 02:31:02 +02:00
parent 9013d72c03
commit 09948bc587
3 changed files with 400 additions and 16 deletions
+5 -2
View File
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef, useCallback } from 'react';
import type { GlobalBlockFolder, GlobalBlock } from '../services/api';
import { importSVGAsBlockPayload } from '../services/importService';
import {
getGlobalFolders,
createGlobalFolder,
@@ -305,10 +306,11 @@ const BlockLibraryTree: React.FC<BlockLibraryTreeProps> = ({ token, onBlockDragS
reader.onload = async (ev) => {
const svgContent = ev.target?.result as string;
try {
const svgPayload = importSVGAsBlockPayload(svgContent);
const created = await createGlobalBlock(token, {
name: file.name.replace(/\.svg$/i, ''),
folder_id: folderId,
block_data: JSON.stringify({ type: 'svg', svg: svgContent }),
block_data: svgPayload.blockData ?? JSON.stringify({ type: 'svg', svg: svgContent }),
svg_data: svgContent,
});
setBlocks(prev => [...prev, created]);
@@ -343,9 +345,10 @@ const BlockLibraryTree: React.FC<BlockLibraryTreeProps> = ({ token, onBlockDragS
reader.onload = async (ev) => {
const svgContent = ev.target?.result as string;
try {
const svgPayload = importSVGAsBlockPayload(svgContent);
const created = await createGlobalBlock(token, {
name: file.name.replace(/\.svg$/i, ''),
block_data: JSON.stringify({ type: 'svg', svg: svgContent }),
block_data: svgPayload.blockData ?? JSON.stringify({ type: 'svg', svg: svgContent }),
svg_data: svgContent,
});
setBlocks(prev => [...prev, created]);