import { useShallow } from 'zustand/react/shallow'; import { useMachineStore } from '../stores/useMachineStore'; import { usePatternStore } from '../stores/usePatternStore'; import { canDeletePattern } from '../utils/machineStateHelpers'; import { DocumentTextIcon, TrashIcon } from '@heroicons/react/24/solid'; export function PatternSummaryCard() { // Machine store const { machineStatus, isDeleting, deletePattern, } = useMachineStore( useShallow((state) => ({ machineStatus: state.machineStatus, isDeleting: state.isDeleting, deletePattern: state.deletePattern, })) ); // Pattern store const { pesData, currentFileName, } = usePatternStore( useShallow((state) => ({ pesData: state.pesData, currentFileName: state.currentFileName, })) ); if (!pesData) return null; const canDelete = canDeletePattern(machineStatus); return (

Active Pattern

{currentFileName}

Size {((pesData.bounds.maxX - pesData.bounds.minX) / 10).toFixed(1)} x{' '} {((pesData.bounds.maxY - pesData.bounds.minY) / 10).toFixed(1)} mm
Stitches {pesData.stitchCount.toLocaleString()}
Colors {pesData.uniqueColors.length}
Colors:
{pesData.uniqueColors.slice(0, 8).map((color, idx) => { // Primary metadata: brand and catalog number const primaryMetadata = [ color.brand, color.catalogNumber ? `#${color.catalogNumber}` : null ].filter(Boolean).join(" "); // Secondary metadata: chart and description const secondaryMetadata = [ color.chart, color.description ].filter(Boolean).join(" "); const metadata = [primaryMetadata, secondaryMetadata].filter(Boolean).join(" • "); // Show which thread blocks use this color const threadNumbers = color.threadIndices.map(i => i + 1).join(", "); const tooltipText = metadata ? `Color ${idx + 1}: ${color.hex}\n${metadata}\nUsed in thread blocks: ${threadNumbers}` : `Color ${idx + 1}: ${color.hex}\nUsed in thread blocks: ${threadNumbers}`; return (
); })} {pesData.uniqueColors.length > 8 && (
+{pesData.uniqueColors.length - 8}
)}
{canDelete && ( )}
); }