From adc2ab64f6c96f0f58268650097afb9c6d721660 Mon Sep 17 00:00:00 2001 From: ShiboSoftwareDev Date: Sun, 12 Oct 2025 17:12:36 +0200 Subject: [PATCH 1/7] Switch 3D SVG to PNG vectorization (@neplex/vectorizer) + add benchmarks --- bun.lock | 31 ++ handlers/three-d-svg.ts | 30 +- .../convertCircuitJsonToSimple3dSvg.ts | 13 + lib/render3dPng.ts | 15 +- lib/renderCircuitToSvg.ts | 41 +- package.json | 3 +- tests/3d-benchmark.test.ts | 59 +++ tests/3d-svg.test.ts | 2 +- tests/__snapshots__/3d-all-params.snap.svg | 465 ++--------------- tests/__snapshots__/3d-bg-color.snap.svg | 465 ++--------------- tests/__snapshots__/3d-post.snap.svg | 462 ++--------------- tests/__snapshots__/3d-svg.snap.svg | 465 ++--------------- tests/__snapshots__/3d-zoom.snap.svg | 466 ++---------------- tests/__snapshots__/assembly-svg.snap.svg | 2 +- tests/__snapshots__/async-footprint.snap.svg | 2 +- .../no-board-wrapper-pcb.snap.svg | 2 +- .../no-board-wrapper-schematic.snap.svg | 2 +- tests/__snapshots__/pcb-svg.snap.svg | 2 +- tests/__snapshots__/pcb-view.snap.svg | 2 +- tests/__snapshots__/pinout-svg.snap.svg | 2 +- tests/__snapshots__/schematic-svg.snap.svg | 2 +- 21 files changed, 369 insertions(+), 2164 deletions(-) create mode 100644 lib/deprecated/convertCircuitJsonToSimple3dSvg.ts create mode 100644 tests/3d-benchmark.test.ts diff --git a/bun.lock b/bun.lock index 031fdd43..8de96385 100644 --- a/bun.lock +++ b/bun.lock @@ -4,6 +4,7 @@ "": { "name": "svg.tscircuit.com", "dependencies": { + "@neplex/vectorizer": "^0.0.5", "@tscircuit/simple-3d-svg": "^0.0.41", "circuit-json-to-gltf": "^0.0.23", "circuit-json-to-simple-3d": "^0.0.9", @@ -181,6 +182,34 @@ "@lume/kiwi": ["@lume/kiwi@0.4.4", "", {}, "sha512-ie0YTKgiZqD4TXlJ4eUbfi4UEoKs6YlLRYNTfPm5eUXwfudTBmPRs7Qcxz2SWKDpVTwThv3sWG6zwtyAA0nPpw=="], + "@neplex/vectorizer": ["@neplex/vectorizer@0.0.5", "", { "dependencies": { "commander": "^13.0.0", "picocolors": "^1.1.1" }, "optionalDependencies": { "@neplex/vectorizer-android-arm-eabi": "0.0.5", "@neplex/vectorizer-android-arm64": "0.0.5", "@neplex/vectorizer-darwin-arm64": "0.0.5", "@neplex/vectorizer-darwin-x64": "0.0.5", "@neplex/vectorizer-freebsd-x64": "0.0.5", "@neplex/vectorizer-linux-arm-gnueabihf": "0.0.5", "@neplex/vectorizer-linux-arm64-gnu": "0.0.5", "@neplex/vectorizer-linux-arm64-musl": "0.0.5", "@neplex/vectorizer-linux-x64-gnu": "0.0.5", "@neplex/vectorizer-linux-x64-musl": "0.0.5", "@neplex/vectorizer-win32-arm64-msvc": "0.0.5", "@neplex/vectorizer-win32-ia32-msvc": "0.0.5", "@neplex/vectorizer-win32-x64-msvc": "0.0.5" }, "bin": { "vectorizer": "cli/index.mjs" } }, "sha512-lGXsEYK3xqAQ1U/kKNr3m7ml5cFZMYPfuCD3gj/g+1fqRjO7ornjS39TjY89EgvZFLWOWQEUzo2QCEgIUPlGyg=="], + + "@neplex/vectorizer-android-arm-eabi": ["@neplex/vectorizer-android-arm-eabi@0.0.5", "", { "os": "android", "cpu": "arm" }, "sha512-UqT68l9qjG1w5qeZ8g9FMGZ1YKkejyE7mHIh4otIj2lXYWQ0z0cfH1gZn4SQb47l2SLGEGJsGdqQLEM1nKdIwQ=="], + + "@neplex/vectorizer-android-arm64": ["@neplex/vectorizer-android-arm64@0.0.5", "", { "os": "android", "cpu": "arm64" }, "sha512-OFdfqI00O1oOokeREv0EzKRQVok3Pngsrk9AbUwkV/kpoKY0bYNaRIK1JnddW3nCwgQQxzXxUnahyhPXhoL0xA=="], + + "@neplex/vectorizer-darwin-arm64": ["@neplex/vectorizer-darwin-arm64@0.0.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1Z3PjAufy20eZsy8BOq6u32Gz2JNAWgaqNO1IDhZpA5CBZzGvpk77GM7FtcOsC/O1Tb3Q/puKHIDCYs8tKFYyQ=="], + + "@neplex/vectorizer-darwin-x64": ["@neplex/vectorizer-darwin-x64@0.0.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-rOASaDXqbTvipNFk2DjTjaiiqXteE54Y9DyWz4OfEDT8oOdOL66qqKM6rfn5fUEiDstxPmb30BzPDKz74JCJ3g=="], + + "@neplex/vectorizer-freebsd-x64": ["@neplex/vectorizer-freebsd-x64@0.0.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jVC1v3645mSLwqBVuXeEY9FWas9253zwV5CsFcDNPL8Eues81m2npt/FBMD/+MluaASAAXrQG0Ree41ACBbwzw=="], + + "@neplex/vectorizer-linux-arm-gnueabihf": ["@neplex/vectorizer-linux-arm-gnueabihf@0.0.5", "", { "os": "linux", "cpu": "arm" }, "sha512-iF6npMyuJv75860m7Pb8mwvcBpzoVLddSPJoIpq9ocxeABgWiqt8oaxLnt9fby+OheRLMAu/+hRGT9Kvkf7Pfg=="], + + "@neplex/vectorizer-linux-arm64-gnu": ["@neplex/vectorizer-linux-arm64-gnu@0.0.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-qByFaIeOecgoywgyYc5KyvfeQVtTvazjSZkOegdWDCyK9KmuFps9NHS2gJIYcd/gIUnlwnkkXWCYgd7ClSBM8g=="], + + "@neplex/vectorizer-linux-arm64-musl": ["@neplex/vectorizer-linux-arm64-musl@0.0.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-r2a85bAkgwSxAbQTSHnzXaDZCyABgVTYf6f0OSh1oGHHIc9pC97VUZbmQLtGFeIQLQR9j4nKjF1MlOHmnV4EDA=="], + + "@neplex/vectorizer-linux-x64-gnu": ["@neplex/vectorizer-linux-x64-gnu@0.0.5", "", { "os": "linux", "cpu": "x64" }, "sha512-8pdPe27RNXHwkvYiK3vj5b3/Yi8rWgJzUsBdT/Jm2bjk5c32wiV454yT0fLZQjRB1DCAK2DvyHjf6eZ0R9HaJg=="], + + "@neplex/vectorizer-linux-x64-musl": ["@neplex/vectorizer-linux-x64-musl@0.0.5", "", { "os": "linux", "cpu": "x64" }, "sha512-VP/DHuX40I/9KzSFRctxksXzJBGwbPE/E30NCAcPA1mS6iApovWsZe3la5dA9A5kStaKh9wTJcZuVEGL8tGIMg=="], + + "@neplex/vectorizer-win32-arm64-msvc": ["@neplex/vectorizer-win32-arm64-msvc@0.0.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-VfQRITnqvjABiIcnx5b/9XjyktTbpDHzY2nVt5wplOqGM88f6fPn2JYiia7IEdv2BA/1+oN/Bcw75eq12mW8Ug=="], + + "@neplex/vectorizer-win32-ia32-msvc": ["@neplex/vectorizer-win32-ia32-msvc@0.0.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-q1R7Hnz3DK6Ls/XqRoanWEmRj3Goj5BKeayroaIzJy0uMAvpBhzcKw8hbkwIo0Cusm71Pnuninl+8MzfeQRo1w=="], + + "@neplex/vectorizer-win32-x64-msvc": ["@neplex/vectorizer-win32-x64-msvc@0.0.5", "", { "os": "win32", "cpu": "x64" }, "sha512-At6NLzjv5pXHnXAgDjhhC7qV4suuCWK+lYBH05mdxY4dnvPyhIA3J+uvqNbvI2D5951fTXkF8JoLf6TyAQleVQ=="], + "@next/env": ["@next/env@14.2.30", "", {}, "sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug=="], "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@14.2.30", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g=="], @@ -921,6 +950,8 @@ "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + "@neplex/vectorizer/commander": ["commander@13.1.0", "", {}, "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="], + "@tscircuit/circuit-json-flex/@tscircuit/miniflex": ["@tscircuit/miniflex@0.0.3", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-oRC0up2psp8dJD1CzXyUiFuhQZUWLdZNl9EAqOf/hHqXDhPKMU6wM79S+XQuaB0gdWNRnwcURHPPaKLw/ka3DQ=="], "@tscircuit/core/nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], diff --git a/handlers/three-d-svg.ts b/handlers/three-d-svg.ts index 75cb7e5c..aae8c4a6 100644 --- a/handlers/three-d-svg.ts +++ b/handlers/three-d-svg.ts @@ -14,16 +14,26 @@ export const threeDSvgHandler = async ( ctx.url.searchParams.get("background_color") || ctx.backgroundColor || "#fff" - const backgroundOpacity = parseFloat( - ctx.url.searchParams.get("background_opacity") || - String(ctx.backgroundOpacity) || - "0.0", - ) - const zoomMultiplier = parseFloat( - ctx.url.searchParams.get("zoom_multiplier") || - String(ctx.zoomMultiplier) || - "1.2", - ) + + const rawBgOpacity = ctx.url.searchParams.get("background_opacity") + let backgroundOpacity = + rawBgOpacity != null + ? Number(rawBgOpacity) + : typeof ctx.backgroundOpacity === "number" + ? ctx.backgroundOpacity + : 0.0 + if (!Number.isFinite(backgroundOpacity)) backgroundOpacity = 0.0 + if (backgroundOpacity < 0) backgroundOpacity = 0 + if (backgroundOpacity > 1) backgroundOpacity = 1 + + const rawZoom = ctx.url.searchParams.get("zoom_multiplier") + let zoomMultiplier = + rawZoom != null + ? Number(rawZoom) + : typeof ctx.zoomMultiplier === "number" + ? ctx.zoomMultiplier + : 1.2 + if (!Number.isFinite(zoomMultiplier)) zoomMultiplier = 1.2 const svgContent = await renderCircuitToSvg(circuitJson, "3d", { backgroundColor, diff --git a/lib/deprecated/convertCircuitJsonToSimple3dSvg.ts b/lib/deprecated/convertCircuitJsonToSimple3dSvg.ts new file mode 100644 index 00000000..f3618d32 --- /dev/null +++ b/lib/deprecated/convertCircuitJsonToSimple3dSvg.ts @@ -0,0 +1,13 @@ +/** + * DEPRECATED: prefer vectorizing 3D PNGs via @neplex/vectorizer. + * + * This wrapper exposes convertCircuitJsonToSimple3dSvg from circuit-json-to-simple-3d + * for benchmarking and backward-compatibility purposes only. + */ +import { convertCircuitJsonToSimple3dSvg as upstreamConvertCircuitJsonToSimple3dSvg } from "circuit-json-to-simple-3d" + +/** + * @deprecated Use the 3D PNG + vectorizer pipeline instead. + */ +export const convertCircuitJsonToSimple3dSvg = + upstreamConvertCircuitJsonToSimple3dSvg diff --git a/lib/render3dPng.ts b/lib/render3dPng.ts index 6ceeb0d4..d70dd0e3 100644 --- a/lib/render3dPng.ts +++ b/lib/render3dPng.ts @@ -4,6 +4,7 @@ import { renderGLTFToPNGBufferFromGLBBuffer } from "poppygl" export interface Render3dPngOptions { width?: number height?: number + zoomMultiplier?: number } export async function render3dPng( @@ -49,8 +50,18 @@ export async function render3dPng( } } - const yHeight = maxDim * 1.4 - const xzOffset = maxDim * 0.75 + const baseY = maxDim * 1.4 + const baseXZ = maxDim * 0.75 + + // Apply zoom: keep previous default framing when zoomMultiplier === 1.2 + const zoomInput = options.zoomMultiplier + const zoom = Number.isFinite(zoomInput as number) + ? (zoomInput as number) + : 1.2 + const effectiveScale = 1.2 / zoom + + const yHeight = baseY * effectiveScale + const xzOffset = baseXZ * effectiveScale const camPos: [number, number, number] = [xzOffset, yHeight, xzOffset] const lookAt: [number, number, number] = [0, 0, 0] diff --git a/lib/renderCircuitToSvg.ts b/lib/renderCircuitToSvg.ts index 1fb53275..5ee65c1f 100644 --- a/lib/renderCircuitToSvg.ts +++ b/lib/renderCircuitToSvg.ts @@ -5,7 +5,9 @@ import { convertCircuitJsonToPinoutSvg, convertCircuitJsonToSchematicSimulationSvg, } from "circuit-to-svg" -import { convertCircuitJsonToSimple3dSvg } from "circuit-json-to-simple-3d/dist/index.js" +import { render3dPng } from "./render3dPng" +import { Buffer } from "node:buffer" +import * as vectorizerMod from "@neplex/vectorizer" export interface RenderOptions { backgroundColor?: string @@ -35,6 +37,9 @@ export async function renderCircuitToSvg( zoomMultiplier = 1.2, } = options + const bgOpacity = Number.isFinite(backgroundOpacity) ? backgroundOpacity : 0.0 + const zoom = Number.isFinite(zoomMultiplier) ? zoomMultiplier : 1.2 + if (svgType === "assembly") { return convertCircuitJsonToAssemblySvg(circuitJson) } @@ -68,13 +73,35 @@ export async function renderCircuitToSvg( } if (svgType === "3d") { - return await convertCircuitJsonToSimple3dSvg(circuitJson, { - background: { - color: backgroundColor, - opacity: backgroundOpacity, - }, - defaultZoomMultiplier: zoomMultiplier, + const pngBinary = await render3dPng(circuitJson, { + width: 1024, + height: 1024, + zoomMultiplier: zoom, }) + + try { + const vectorize = ((vectorizerMod as any).vectorize || + (vectorizerMod as any).default) as + | ((bytes: Uint8Array, opts?: any) => Promise | string) + | undefined + + if (!vectorize) { + throw new Error("Vectorizer function not found in @neplex/vectorizer") + } + + const svgResult = await vectorize(pngBinary) + + if (bgOpacity > 0) { + return svgResult.replace( + /]*)>/, + ``, + ) + } + return svgResult + } catch { + const base64 = Buffer.from(pngBinary).toString("base64") + return `` + } } throw new Error(`Invalid SVG type: ${svgType}`) diff --git a/package.json b/package.json index c686cddc..42e22332 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "circuit-to-svg": "^0.0.229", "jscad-fiber": "^0.0.85", "poppygl": "^0.0.14", - "sharp": "^0.34.4" + "sharp": "^0.34.4", + "@neplex/vectorizer": "^0.0.5" } } diff --git a/tests/3d-benchmark.test.ts b/tests/3d-benchmark.test.ts new file mode 100644 index 00000000..d85e25e1 --- /dev/null +++ b/tests/3d-benchmark.test.ts @@ -0,0 +1,59 @@ +import { expect, test } from "bun:test" +import { Buffer } from "node:buffer" +import testCircuitJson from "./fixtures/test-circuit.json" +import { renderCircuitToSvg } from "../lib/renderCircuitToSvg" +import { convertCircuitJsonToSimple3dSvg } from "../lib/deprecated/convertCircuitJsonToSimple3dSvg" + +test( + "3d rendering benchmark and size comparison", + async () => { + // Vectorized 3D (PNG -> @neplex/vectorizer) + const startVectorized = performance.now() + const vectorizedSvg = await renderCircuitToSvg( + testCircuitJson as any, + "3d", + { + backgroundColor: "#ffffff", + backgroundOpacity: 0.0, + zoomMultiplier: 1.2, + }, + ) + const durationVectorized = performance.now() - startVectorized + + expect(typeof vectorizedSvg).toBe("string") + expect(vectorizedSvg).toContain(" { headers: { "Content-Type": "application/json" }, body: JSON.stringify({ circuit_json: testCircuitJson, - background_color: "#00ff00", + background_color: "#0000ff", background_opacity: 0.7, zoom_multiplier: 1.8, }), diff --git a/tests/__snapshots__/3d-all-params.snap.svg b/tests/__snapshots__/3d-all-params.snap.svg index debb9a5a..b72a9c96 100644 --- a/tests/__snapshots__/3d-all-params.snap.svg +++ b/tests/__snapshots__/3d-all-params.snap.svg @@ -1,427 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R1 - C1 - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/3d-bg-color.snap.svg b/tests/__snapshots__/3d-bg-color.snap.svg index 31fa3f57..ba371d76 100644 --- a/tests/__snapshots__/3d-bg-color.snap.svg +++ b/tests/__snapshots__/3d-bg-color.snap.svg @@ -1,427 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R1 - C1 - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/3d-post.snap.svg b/tests/__snapshots__/3d-post.snap.svg index 29d832b6..55738815 100644 --- a/tests/__snapshots__/3d-post.snap.svg +++ b/tests/__snapshots__/3d-post.snap.svg @@ -1,427 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R1 - C1 - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/3d-svg.snap.svg b/tests/__snapshots__/3d-svg.snap.svg index 367232dc..83368924 100644 --- a/tests/__snapshots__/3d-svg.snap.svg +++ b/tests/__snapshots__/3d-svg.snap.svg @@ -1,427 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R1 - C1 - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/3d-zoom.snap.svg b/tests/__snapshots__/3d-zoom.snap.svg index 0d60c972..c80786c6 100644 --- a/tests/__snapshots__/3d-zoom.snap.svg +++ b/tests/__snapshots__/3d-zoom.snap.svg @@ -1,427 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R1 - C1 - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/assembly-svg.snap.svg b/tests/__snapshots__/assembly-svg.snap.svg index aaeb0509..51bb2ccf 100644 --- a/tests/__snapshots__/assembly-svg.snap.svg +++ b/tests/__snapshots__/assembly-svg.snap.svg @@ -1,4 +1,4 @@ -