diff --git a/package-lock.json b/package-lock.json index b48b18d..b435498 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "web", "version": "0.0.0", "dependencies": { + "@heroicons/react": "^2.2.0", "@tailwindcss/vite": "^4.1.17", "konva": "^10.0.12", "pyodide": "^0.27.4", @@ -831,6 +832,15 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@heroicons/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", + "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==", + "license": "MIT", + "peerDependencies": { + "react": ">= 16 || ^19.0.0-rc" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", diff --git a/package.json b/package.json index 4458565..6cd6f4c 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "@heroicons/react": "^2.2.0", "@tailwindcss/vite": "^4.1.17", "konva": "^10.0.12", "pyodide": "^0.27.4", diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx index e0fff6d..f5ada47 100644 --- a/src/components/ConfirmDialog.tsx +++ b/src/components/ConfirmDialog.tsx @@ -55,14 +55,14 @@ export function ConfirmDialog({
diff --git a/src/components/FileUpload.tsx b/src/components/FileUpload.tsx index b2dcccc..a924145 100644 --- a/src/components/FileUpload.tsx +++ b/src/components/FileUpload.tsx @@ -74,7 +74,7 @@ export function FileUpload({ className="hidden" disabled={!pyodideReady || isLoading} /> -
@@ -122,10 +122,10 @@ export function MachineConnection({ )}
- -
diff --git a/src/components/PatternCanvas.tsx b/src/components/PatternCanvas.tsx index 58c3fcf..028354e 100644 --- a/src/components/PatternCanvas.tsx +++ b/src/components/PatternCanvas.tsx @@ -1,6 +1,7 @@ import { useEffect, useRef, useState, useCallback } from 'react'; import { Stage, Layer, Group } from 'react-konva'; import Konva from 'konva'; +import { PlusIcon, MinusIcon, ArrowPathIcon } from '@heroicons/react/24/solid'; import type { PesPatternData } from '../utils/pystitchConverter'; import type { SewingProgress, MachineInfo } from '../types/machine'; import { calculateInitialScale } from '../utils/konvaRenderers'; @@ -298,15 +299,15 @@ export function PatternCanvas({ pesData, sewingProgress, machineInfo, initialPat {/* Zoom Controls Overlay */}
- {Math.round(stageScale * 100)}% - -
diff --git a/src/components/ProgressMonitor.tsx b/src/components/ProgressMonitor.tsx index 2e3632c..5254714 100644 --- a/src/components/ProgressMonitor.tsx +++ b/src/components/ProgressMonitor.tsx @@ -1,3 +1,4 @@ +import { CheckCircleIcon, ArrowRightIcon, CircleStackIcon, PlayIcon } from '@heroicons/react/24/solid'; import type { PatternInfo, SewingProgress } from '../types/machine'; import { MachineStatus } from '../types/machine'; import type { PesPatternData } from '../utils/pystitchConverter'; @@ -161,9 +162,13 @@ export function ProgressMonitor({ Thread {block.colorIndex + 1} - - {isCompleted ? '✓' : isCurrent ? '→' : '○'} - + {isCompleted ? ( + + ) : isCurrent ? ( + + ) : ( + + )} {block.stitchCount} stitches @@ -249,12 +254,12 @@ export function ProgressMonitor({ Mask trace complete! {canStartSewing(machineStatus) && ( - )} {canStartMaskTrace(machineStatus) && ( - )} @@ -268,7 +273,7 @@ export function ProgressMonitor({ Pattern uploaded successfully {canStartMaskTrace(machineStatus) && ( - )} @@ -279,12 +284,12 @@ export function ProgressMonitor({ {machineStatus === MachineStatus.SEWING_WAIT && ( <> {canStartMaskTrace(machineStatus) && ( - )} {canStartSewing(machineStatus) && ( - )} @@ -293,8 +298,9 @@ export function ProgressMonitor({ {/* Resume sewing for interrupted states */} {canResumeSewing(machineStatus) && ( - )} @@ -321,7 +327,7 @@ export function ProgressMonitor({ {/* Delete pattern button - ONLY show when safe */} {patternInfo && canDeletePattern(machineStatus) && ( - )}