diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d586fe8..ca2f967 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1857,10 +1857,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "license": "MIT", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dependencies": { "balanced-match": "^4.0.2" }, @@ -3180,12 +3179,11 @@ } }, "node_modules/express-rate-limit": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.0.tgz", - "integrity": "sha512-XKhFohWaSBdVJNTi5TaHziqnPkv04I9UQV6q1Wy7Ui6GGQZVW12ojDFwqer14EvCXxjvPG0CyWXx7cAXpALB4Q==", - "license": "MIT", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", "dependencies": { - "ip-address": "10.1.0" + "ip-address": "^10.2.0" }, "engines": { "node": ">= 16" @@ -3637,10 +3635,9 @@ } }, "node_modules/hono": { - "version": "4.12.17", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.17.tgz", - "integrity": "sha512-FbJJNb/XgX7YW0hX/V8w5oYLztKEsRLykCMZWt1WdLtsfjzMvmoqWBA4H4t5norinq8/rh20oiZYr+WSl4UzAQ==", - "license": "MIT", + "version": "4.12.23", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.23.tgz", + "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==", "engines": { "node": ">=16.9.0" } @@ -3786,10 +3783,9 @@ "optional": true }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "license": "MIT", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "engines": { "node": ">= 12" } @@ -5309,10 +5305,9 @@ } }, "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "dependencies": { "side-channel": "^1.1.0" }, diff --git a/frontend/package.json.md5 b/frontend/package.json.md5 index 1a8838f..0ca859f 100755 --- a/frontend/package.json.md5 +++ b/frontend/package.json.md5 @@ -1 +1 @@ -edac85e67d049bbe42b2202df93191c4 \ No newline at end of file +edac85e67d049bbe42b2202df93191c4 diff --git a/frontend/src/components/Workspace.tsx b/frontend/src/components/Workspace.tsx index 8327351..d3412ba 100644 --- a/frontend/src/components/Workspace.tsx +++ b/frontend/src/components/Workspace.tsx @@ -78,6 +78,7 @@ const Workspace = forwardRef(({ activeLaser, onCol const lowerCanvas = fabricCanvas.current.getElement(); const upperCanvas = (fabricCanvas.current as any).upperCanvasEl as HTMLCanvasElement | undefined; + fabricCanvas.current.backgroundColor = background as any; fabricCanvas.current.requestRenderAll(); @@ -200,12 +201,14 @@ const Workspace = forwardRef(({ activeLaser, onCol if (!obj) return; obj.setCoords(); - if (!obj.aCoords) return; + const coords = obj.getCoords(); + if (!coords || coords.length < 4) return; + const [tl, tr, br, bl] = coords; - const minX = Math.min(obj.aCoords.tl.x, obj.aCoords.tr.x, obj.aCoords.bl.x, obj.aCoords.br.x); - const minY = Math.min(obj.aCoords.tl.y, obj.aCoords.tr.y, obj.aCoords.bl.y, obj.aCoords.br.y); - const maxX = Math.max(obj.aCoords.tl.x, obj.aCoords.tr.x, obj.aCoords.bl.x, obj.aCoords.br.x); - const maxY = Math.max(obj.aCoords.tl.y, obj.aCoords.tr.y, obj.aCoords.bl.y, obj.aCoords.br.y); + const minX = Math.min(tl.x, tr.x, bl.x, br.x); + const minY = Math.min(tl.y, tr.y, bl.y, br.y); + const maxX = Math.max(tl.x, tr.x, bl.x, br.x); + const maxY = Math.max(tl.y, tr.y, bl.y, br.y); let left = obj.left || 0; let top = obj.top || 0; @@ -316,14 +319,14 @@ const Workspace = forwardRef(({ activeLaser, onCol } catch {} } }; - extractHex(obj.stroke); - extractHex(obj.fill); + extractHex(obj?.stroke as string | undefined); + extractHex(obj?.fill as string | fabric.TFiller | undefined); }); onColorsDetected(Array.from(uniqueColors)); } - const obj = fabric.util.groupSVGElements(objects, options); - + const obj = fabric.util.groupSVGElements(objects.filter((o): o is fabric.FabricObject => o !== null), options); + obj.set({ left: 0, top: 0,