embroidery-qc-image 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -84
- package/dist/components/EmbroideryQCImage.d.ts +9 -1
- package/dist/components/EmbroideryQCImage.d.ts.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +802 -628
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +803 -627
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/EmbroideryQCImage.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { EmbroideryQCImageProps, Position } from \"../types\";\r\nimport \"./EmbroideryQCImage.css\";\r\n\r\n// Color mapping\r\nconst COLOR_MAP: Record<string, string> = {\r\n \"Army (1394)\": \"#4B5320\",\r\n Army: \"#4B5320\",\r\n \"Black (8)\": \"#000000\",\r\n Black: \"#000000\",\r\n \"Bubblegum (1309)\": \"#FFC1CC\",\r\n Bubblegum: \"#FFC1CC\",\r\n \"Carolina Blue (1274)\": \"#7BAFD4\",\r\n \"Carolina Blue\": \"#7BAFD4\",\r\n \"Celadon (1098)\": \"#ACE1AF\",\r\n Celadon: \"#ACE1AF\",\r\n \"Coffee Bean (1145)\": \"#6F4E37\",\r\n \"Coffee Bean\": \"#6F4E37\",\r\n \"Daffodil (1180)\": \"#FFFF31\",\r\n Daffodil: \"#FFFF31\",\r\n \"Dark Gray (1131)\": \"#A9A9A9\",\r\n \"Dark Gray\": \"#A9A9A9\",\r\n \"Doe Skin Beige (1344)\": \"#F5E6D3\",\r\n \"Doe Skin Beige\": \"#F5E6D3\",\r\n \"Dusty Blue (1373)\": \"#6699CC\",\r\n \"Dusty Blue\": \"#6699CC\",\r\n \"Forest Green (1397)\": \"#228B22\",\r\n \"Forest Green\": \"#228B22\",\r\n \"Gold (1425)\": \"#FFD700\",\r\n Gold: \"#FFD700\",\r\n \"Gray (1118)\": \"#808080\",\r\n Gray: \"#808080\",\r\n \"Ivory (1072)\": \"#FFFFF0\",\r\n Ivory: \"#FFFFF0\",\r\n \"Lavender (1032)\": \"#E6E6FA\",\r\n Lavender: \"#E6E6FA\",\r\n \"Light Denim (1133)\": \"#B0C4DE\",\r\n \"Light Denim\": \"#B0C4DE\",\r\n \"Light Salmon (1018)\": \"#FFA07A\",\r\n \"Light Salmon\": \"#FFA07A\",\r\n \"Maroon (1374)\": \"#800000\",\r\n Maroon: \"#800000\",\r\n \"Navy Blue (1044)\": \"#000080\",\r\n \"Navy Blue\": \"#000080\",\r\n \"Olive Green (1157)\": \"#556B2F\",\r\n \"Olive Green\": \"#556B2F\",\r\n \"Orange (1278)\": \"#FFA500\",\r\n Orange: \"#FFA500\",\r\n \"Peach Blush (1053)\": \"#FFCCCB\",\r\n \"Peach Blush\": \"#FFCCCB\",\r\n \"Pink (1148)\": \"#FFC0CB\",\r\n Pink: \"#FFC0CB\",\r\n \"Purple (1412)\": \"#800080\",\r\n Purple: \"#800080\",\r\n \"Red (1037)\": \"#FF0000\",\r\n Red: \"#FF0000\",\r\n \"Silver Sage (1396)\": \"#A8A8A8\",\r\n \"Silver Sage\": \"#A8A8A8\",\r\n \"Summer Sky (1432)\": \"#87CEEB\",\r\n \"Summer Sky\": \"#87CEEB\",\r\n \"Terra Cotta (1477)\": \"#E2725B\",\r\n \"Terra Cotta\": \"#E2725B\",\r\n \"Sand (1055)\": \"#F4A460\",\r\n Sand: \"#F4A460\",\r\n \"White (9)\": \"#FFFFFF\",\r\n White: \"#FFFFFF\",\r\n};\r\n\r\nconst FONT_BASE_URL =\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/fonts\";\r\nconst ICON_BASE_URL =\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/icons\";\r\nconst FLORAL_BASE_URL =\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/florals\";\r\nconst THREAD_COLOR_BASE_URL =\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/thread-colors\";\r\n\r\nconst EmbroideryQCImage: React.FC<EmbroideryQCImageProps> = ({\r\n config,\r\n className = \"\",\r\n style = {},\r\n}) => {\r\n const [canvasSize] = useState({ width: 4200, height: 4800 });\r\n const [loadedFonts, setLoadedFonts] = useState<Set<string>>(new Set());\r\n const [imagesLoaded, setImagesLoaded] = useState(0);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const imageRefs = useRef<Map<string, HTMLImageElement>>(new Map());\r\n\r\n // Load fonts\r\n useEffect(() => {\r\n const loadFonts = async () => {\r\n if (!config.sides || config.sides.length === 0) return;\r\n\r\n const fontsToLoad = new Set<string>();\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"TEXT\" && position.font) {\r\n fontsToLoad.add(position.font);\r\n }\r\n });\r\n });\r\n\r\n for (const fontName of fontsToLoad) {\r\n if (loadedFonts.has(fontName)) continue;\r\n\r\n try {\r\n await loadFont(fontName);\r\n setLoadedFonts((prev) => new Set(prev).add(fontName));\r\n } catch (error) {\r\n console.warn(`Could not load font ${fontName}:`, error);\r\n }\r\n }\r\n };\r\n\r\n loadFonts();\r\n }, [config.sides, loadedFonts]);\r\n\r\n // Load images\r\n useEffect(() => {\r\n const loadImages = async () => {\r\n if (!config.sides || config.sides.length === 0) return;\r\n\r\n // Load mockup image (not background). It will be drawn at bottom-right.\r\n if (config.image_url) {\r\n // Try with CORS first. If it fails (no CORS headers), retry without CORS\r\n const loadMockup = (useCors: boolean) => {\r\n const img = new Image();\r\n if (useCors) img.crossOrigin = \"anonymous\";\r\n img.onload = () => {\r\n imageRefs.current.set(\"mockup\", img);\r\n setImagesLoaded((prev) => prev + 1);\r\n };\r\n img.onerror = () => {\r\n if (useCors) {\r\n // Retry without CORS; canvas may become tainted on export\r\n loadMockup(false);\r\n }\r\n };\r\n img.src = config.image_url as string;\r\n };\r\n loadMockup(true);\r\n }\r\n\r\n // Load icons\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"ICON\" && position.icon !== 0) {\r\n const iconUrl = `${ICON_BASE_URL}/Icon ${position.icon}.png`;\r\n if (!imageRefs.current.has(iconUrl)) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = iconUrl;\r\n img.onload = () => setImagesLoaded((prev) => prev + 1);\r\n imageRefs.current.set(iconUrl, img);\r\n }\r\n }\r\n\r\n if (position.type === \"TEXT\" && position.floral_pattern) {\r\n const floralUrl = `${FLORAL_BASE_URL}/${position.floral_pattern}.png`;\r\n if (!imageRefs.current.has(floralUrl)) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = floralUrl;\r\n img.onload = () => setImagesLoaded((prev) => prev + 1);\r\n imageRefs.current.set(floralUrl, img);\r\n }\r\n }\r\n\r\n // Load thread color images for TEXT positions\r\n if (position.type === \"TEXT\") {\r\n // Load color image if position has color\r\n if (position.color) {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${position.color}.png`;\r\n if (!imageRefs.current.has(threadColorUrl)) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = threadColorUrl;\r\n img.onload = () => setImagesLoaded((prev) => prev + 1);\r\n imageRefs.current.set(threadColorUrl, img);\r\n }\r\n }\r\n\r\n // Load character color images\r\n if (\r\n position.character_colors &&\r\n position.character_colors.length > 0\r\n ) {\r\n position.character_colors.forEach((color) => {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${color}.png`;\r\n if (!imageRefs.current.has(threadColorUrl)) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = threadColorUrl;\r\n img.onload = () => setImagesLoaded((prev) => prev + 1);\r\n imageRefs.current.set(threadColorUrl, img);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Load thread color images for ICON positions\r\n if (position.type === \"ICON\" && position.layer_colors) {\r\n position.layer_colors.forEach((color) => {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${color}.png`;\r\n if (!imageRefs.current.has(threadColorUrl)) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = threadColorUrl;\r\n img.onload = () => setImagesLoaded((prev) => prev + 1);\r\n imageRefs.current.set(threadColorUrl, img);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n loadImages();\r\n }, [config]);\r\n\r\n // Render canvas\r\n useEffect(() => {\r\n const renderCanvas = () => {\r\n if (!canvasRef.current || !config.sides || config.sides.length === 0) {\r\n return;\r\n }\r\n\r\n const canvas = canvasRef.current;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvas.width = canvasSize.width;\r\n canvas.height = canvasSize.height;\r\n\r\n // Clear with white background\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n // Collect floral images (for later drawing)\r\n const floralAssets: HTMLImageElement[] = [];\r\n const seenFlorals = new Set<string>();\r\n if (config.sides) {\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"TEXT\" && position.floral_pattern) {\r\n const floralUrl = `${FLORAL_BASE_URL}/${position.floral_pattern}.png`;\r\n if (!seenFlorals.has(floralUrl)) {\r\n const img = imageRefs.current.get(floralUrl);\r\n if (img && img.complete && img.naturalWidth > 0) {\r\n floralAssets.push(img);\r\n seenFlorals.add(floralUrl);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Helper function to draw mockup and florals\r\n const drawMockupAndFlorals = () => {\r\n const mockupImg = imageRefs.current.get(\"mockup\");\r\n const margin = 40; // small padding\r\n let mockupBox: { x: number; y: number; w: number; h: number } | null =\r\n null;\r\n if (mockupImg && mockupImg.complete && mockupImg.naturalWidth > 0) {\r\n const maxTargetWidth = Math.min(1800, canvas.width * 0.375);\r\n const maxTargetHeight = canvas.height * 0.375;\r\n const scale = Math.min(\r\n maxTargetWidth / mockupImg.naturalWidth,\r\n maxTargetHeight / mockupImg.naturalHeight\r\n );\r\n const targetWidth = Math.max(\r\n 1,\r\n Math.floor(mockupImg.naturalWidth * scale)\r\n );\r\n const targetHeight = Math.max(\r\n 1,\r\n Math.floor(mockupImg.naturalHeight * scale)\r\n );\r\n const targetX = canvas.width - margin - targetWidth;\r\n const targetY = canvas.height - margin - targetHeight;\r\n mockupBox = {\r\n x: targetX,\r\n y: targetY,\r\n w: targetWidth,\r\n h: targetHeight,\r\n };\r\n ctx.drawImage(mockupImg, targetX, targetY, targetWidth, targetHeight);\r\n }\r\n\r\n // Draw florals to the left of mockup\r\n if (mockupBox && floralAssets.length > 0) {\r\n const spacing = 300;\r\n const targetHeight = mockupBox.h;\r\n const floralFixedH = Math.min(900, targetHeight);\r\n let currentX = mockupBox.x - spacing;\r\n for (let i = floralAssets.length - 1; i >= 0; i--) {\r\n const img = floralAssets[i];\r\n const ratio = img.naturalWidth / Math.max(1, img.naturalHeight);\r\n const h = floralFixedH;\r\n const w = Math.max(1, Math.floor(h * ratio));\r\n currentX -= w;\r\n const y = mockupBox.y + (targetHeight - h);\r\n ctx.drawImage(img, currentX, y, w, h);\r\n currentX -= spacing;\r\n }\r\n }\r\n };\r\n\r\n // New approach: Draw images first (bottom layer), then text on top\r\n // This allows text to overlay images when needed\r\n\r\n // Pass 1: Measure actual height with original size (use offscreen canvas for measurement)\r\n const measureCanvas = document.createElement(\"canvas\");\r\n measureCanvas.width = canvas.width;\r\n measureCanvas.height = canvas.height;\r\n const measureCtx = measureCanvas.getContext(\"2d\");\r\n if (!measureCtx) return;\r\n\r\n // Set up measurement context\r\n measureCtx.font = ctx.font;\r\n measureCtx.textAlign = ctx.textAlign;\r\n measureCtx.textBaseline = ctx.textBaseline;\r\n\r\n let measureY = 40;\r\n const measureSpacing = 100;\r\n config.sides.forEach((side) => {\r\n const sideHeight = renderSide(\r\n measureCtx,\r\n side,\r\n measureY,\r\n canvas.width,\r\n 1\r\n );\r\n measureY += sideHeight + measureSpacing;\r\n });\r\n const totalMeasuredHeight = measureY; // Total height used\r\n\r\n // Calculate scale factor - only scale down when necessary\r\n // Keep original font sizes (no scale up) - font size is the maximum\r\n const topPadding = 40;\r\n // No bottom padding - content can go to bottom, mockup will overlay\r\n const targetContentHeight = canvas.height - topPadding;\r\n\r\n // Only scale down if content exceeds canvas height\r\n // Never scale up - preserve original font sizes\r\n let scaleFactor = 1;\r\n if (totalMeasuredHeight > targetContentHeight) {\r\n // Scale down to fit exactly\r\n scaleFactor = targetContentHeight / totalMeasuredHeight;\r\n scaleFactor = Math.max(0.5, scaleFactor); // Minimum scale to prevent tiny fonts\r\n }\r\n // If content fits, keep scaleFactor = 1 (original font sizes)\r\n\r\n // Draw mockup and florals first (bottom layer)\r\n drawMockupAndFlorals();\r\n\r\n // Draw content on top (top layer) - text will overlay images if needed\r\n let currentY = topPadding * scaleFactor;\r\n config.sides.forEach((side) => {\r\n const sideHeight = renderSide(\r\n ctx,\r\n side,\r\n currentY,\r\n canvas.width,\r\n scaleFactor\r\n );\r\n currentY += sideHeight + measureSpacing * scaleFactor;\r\n });\r\n };\r\n\r\n // Delay rendering to ensure fonts and images are loaded\r\n const timer = setTimeout(renderCanvas, 100);\r\n return () => clearTimeout(timer);\r\n }, [config, canvasSize, loadedFonts, imagesLoaded]);\r\n\r\n // Helper function to wrap and draw text with word wrapping\r\n // Returns: { height: number, lastLineWidth: number, lastLineY: number }\r\n const fillTextWrapped = (\r\n ctx: CanvasRenderingContext2D,\r\n text: string,\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n lineHeight: number\r\n ): { height: number; lastLineWidth: number; lastLineY: number } => {\r\n const words = text.split(\" \");\r\n const lines: string[] = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n const word = words[i];\r\n const testLine = currentLine + \" \" + word;\r\n const metrics = ctx.measureText(testLine);\r\n if (metrics.width > maxWidth && currentLine.length > 0) {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n } else {\r\n currentLine = testLine;\r\n }\r\n }\r\n lines.push(currentLine);\r\n\r\n let currentY = y;\r\n lines.forEach((line) => {\r\n ctx.fillText(line, x, currentY);\r\n currentY += lineHeight;\r\n });\r\n\r\n const lastLineWidth = ctx.measureText(lines[lines.length - 1]).width;\r\n const lastLineY = y + (lines.length - 1) * lineHeight;\r\n\r\n return {\r\n height: lines.length * lineHeight,\r\n lastLineWidth,\r\n lastLineY,\r\n };\r\n };\r\n\r\n // Helper to wrap and draw multi-color text (for character_colors)\r\n const fillTextWrappedMultiColor = (\r\n ctx: CanvasRenderingContext2D,\r\n text: string,\r\n colors: string[],\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n lineHeight: number\r\n ): number => {\r\n const words = text.split(\" \");\r\n const lines: string[] = [];\r\n const lineStartIndices: number[] = [0];\r\n let currentLine = words[0];\r\n let currentCharIndex = words[0].length;\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n const word = words[i];\r\n const testLine = currentLine + \" \" + word;\r\n const metrics = ctx.measureText(testLine);\r\n if (metrics.width > maxWidth && currentLine.length > 0) {\r\n lines.push(currentLine);\r\n lineStartIndices.push(currentCharIndex + 1); // +1 for space\r\n currentLine = word;\r\n currentCharIndex += word.length + 1;\r\n } else {\r\n currentLine = testLine;\r\n currentCharIndex += word.length + 1;\r\n }\r\n }\r\n lines.push(currentLine);\r\n\r\n let currentY = y;\r\n lines.forEach((line, lineIdx) => {\r\n let currentX = x;\r\n const startCharIdx = lineIdx > 0 ? lineStartIndices[lineIdx] : 0;\r\n for (let i = 0; i < line.length; i++) {\r\n const char = line[i];\r\n const globalCharIdx = startCharIdx + i;\r\n const colorIndex = globalCharIdx % colors.length;\r\n const color = colors[colorIndex];\r\n ctx.fillStyle = COLOR_MAP[color] || \"#000000\";\r\n ctx.fillText(char, currentX, currentY);\r\n currentX += ctx.measureText(char).width;\r\n }\r\n currentY += lineHeight;\r\n });\r\n\r\n return lines.length * lineHeight;\r\n };\r\n\r\n const renderSide = (\r\n ctx: CanvasRenderingContext2D,\r\n side: any,\r\n startY: number,\r\n width: number,\r\n scaleFactor: number = 1\r\n ): number => {\r\n let currentY = startY;\r\n const padding = 40 * scaleFactor;\r\n const sideWidth = width - 2 * padding;\r\n const sectionHeight = 200 * scaleFactor;\r\n\r\n // No background section anymore - just white background\r\n\r\n // Group positions by common properties for optimization\r\n const textGroups: Array<{\r\n positions: Array<Position & { type: \"TEXT\" }>;\r\n properties: any;\r\n }> = [];\r\n let currentGroup: Array<Position & { type: \"TEXT\" }> | null = null;\r\n let currentProps: any = null;\r\n\r\n side.positions.forEach((position: Position) => {\r\n if (position.type === \"TEXT\") {\r\n if (\r\n !currentGroup ||\r\n currentProps.font !== position.font ||\r\n currentProps.text_shape !== position.text_shape ||\r\n currentProps.color !== position.color ||\r\n currentProps.character_colors?.join(\",\") !==\r\n position.character_colors?.join(\",\")\r\n ) {\r\n // Start new group\r\n if (currentGroup) {\r\n textGroups.push({\r\n positions: currentGroup,\r\n properties: currentProps,\r\n });\r\n }\r\n currentGroup = [position];\r\n currentProps = {\r\n font: position.font,\r\n text_shape: position.text_shape,\r\n color: position.color,\r\n character_colors: position.character_colors,\r\n };\r\n } else {\r\n currentGroup.push(position);\r\n }\r\n }\r\n });\r\n\r\n if (currentGroup) {\r\n textGroups.push({ positions: currentGroup, properties: currentProps });\r\n }\r\n\r\n // Draw side header\r\n ctx.save();\r\n const headerFontSize = 200 * scaleFactor;\r\n ctx.font = `bold ${headerFontSize}px Times New Roman`;\r\n ctx.fillStyle = \"#000000\";\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"top\";\r\n const headerResult = fillTextWrapped(\r\n ctx,\r\n side.print_side.toUpperCase(),\r\n padding,\r\n currentY,\r\n sideWidth,\r\n headerFontSize\r\n );\r\n currentY += headerResult.height + 50 * scaleFactor;\r\n ctx.restore();\r\n\r\n // Compute side-level uniform properties across all TEXT positions\r\n const allTextPositions: Array<Position & { type: \"TEXT\" }> = [];\r\n side.positions.forEach((position: Position) => {\r\n if (position.type === \"TEXT\") allTextPositions.push(position as any);\r\n });\r\n\r\n const sideFonts = new Set(allTextPositions.map((p) => (p as any).font));\r\n const sideShapes = new Set(\r\n allTextPositions.map((p) => (p as any).text_shape)\r\n );\r\n const sideFlorals = new Set(\r\n allTextPositions.map((p) => (p as any).floral_pattern ?? \"None\")\r\n );\r\n const colorKeyOf = (p: any) =>\r\n p.character_colors && p.character_colors.length > 0\r\n ? p.character_colors.join(\",\")\r\n : p.color ?? \"None\";\r\n const sideColors = new Set(allTextPositions.map((p) => colorKeyOf(p)));\r\n\r\n const sideUniform = {\r\n font: sideFonts.size === 1,\r\n shape: sideShapes.size === 1,\r\n floral: sideFlorals.size === 1,\r\n color: sideColors.size === 1,\r\n };\r\n\r\n // Render side-level labels once for uniform properties\r\n currentY += renderSideUniformLabels(\r\n ctx,\r\n {\r\n font: sideUniform.font ? [...sideFonts][0] : null,\r\n shape: sideUniform.shape ? [...sideShapes][0] : null,\r\n floral: sideUniform.floral ? [...sideFlorals][0] : null,\r\n color: sideUniform.color ? [...sideColors][0] : null,\r\n },\r\n padding,\r\n currentY,\r\n sideWidth,\r\n scaleFactor\r\n );\r\n\r\n // Render text groups first\r\n let sideTextCounter = 1;\r\n textGroups.forEach((group, groupIndex) => {\r\n group.positions.forEach((position, index) => {\r\n if (index === 0 && groupIndex !== 0) currentY += 50 * scaleFactor;\r\n const drawnHeight = renderText(\r\n ctx,\r\n position,\r\n padding,\r\n currentY,\r\n sideWidth,\r\n sideTextCounter,\r\n {\r\n font: !sideUniform.font,\r\n shape: !sideUniform.shape,\r\n floral: !sideUniform.floral,\r\n color: !sideUniform.color,\r\n },\r\n scaleFactor\r\n );\r\n sideTextCounter += 1;\r\n // add padding only if something was actually drawn\r\n if (drawnHeight > 0) {\r\n currentY += drawnHeight + 40 * scaleFactor;\r\n }\r\n });\r\n });\r\n\r\n // Render ICON titles/values (no images here)\r\n currentY += 30 * scaleFactor; // minimal spacing before icon labels\r\n side.positions.forEach((position: Position) => {\r\n if (position.type === \"ICON\") {\r\n currentY += renderIconLabels(\r\n ctx,\r\n position as any,\r\n padding,\r\n currentY,\r\n sideWidth,\r\n scaleFactor\r\n );\r\n currentY += 10 * scaleFactor;\r\n }\r\n });\r\n\r\n return Math.max(currentY - startY, sectionHeight);\r\n };\r\n\r\n const renderSideUniformLabels = (\r\n ctx: CanvasRenderingContext2D,\r\n values: {\r\n font: string | null;\r\n shape: string | null;\r\n floral: string | null;\r\n color: string | null;\r\n },\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n scaleFactor: number = 1\r\n ): number => {\r\n const labelFontFamily = \"Arial\";\r\n const fontSize = 180 * scaleFactor;\r\n const lineGap = 20 * scaleFactor;\r\n ctx.save();\r\n ctx.font = `${fontSize}px ${labelFontFamily}`;\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"top\";\r\n ctx.fillStyle = \"#444444\";\r\n\r\n let cursorY = y;\r\n let rendered = 0;\r\n if (values.font) {\r\n const fontText = `Font: ${values.font}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n fontText,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n if (values.shape && values.shape !== \"None\") {\r\n const shapeText = `Kiểu chữ: ${values.shape}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n shapeText,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n if (values.color && values.color !== \"None\") {\r\n const colorText = `Màu chỉ: ${values.color}`;\r\n // Reserve space for swatches (estimate: max 5 swatches × 200px each = 1000px)\r\n const swatchReserved = 1000 * scaleFactor;\r\n const textMaxWidth = Math.max(\r\n 400 * scaleFactor,\r\n maxWidth - swatchReserved\r\n );\r\n const result = fillTextWrapped(\r\n ctx,\r\n colorText,\r\n x,\r\n cursorY,\r\n textMaxWidth,\r\n fontSize + lineGap\r\n );\r\n // Draw swatches inline for side-level color, preserving aspect ratio; 75% of previous size\r\n // Position swatches after the last line of wrapped text\r\n const swatchH = Math.floor(fontSize * 2.025);\r\n let swatchX = x + Math.ceil(result.lastLineWidth) + 100 * scaleFactor;\r\n const swatchY = result.lastLineY + Math.floor(fontSize / 2 - swatchH / 2);\r\n const colorTokens = values.color.includes(\",\")\r\n ? values.color.split(\",\").map((s) => s.trim())\r\n : [values.color];\r\n colorTokens.forEach((color) => {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${color}.png`;\r\n const img = imageRefs.current.get(threadColorUrl);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchH * ratio));\r\n ctx.drawImage(img, swatchX, swatchY, swatchW, swatchH);\r\n swatchX += swatchW + 25 * scaleFactor;\r\n }\r\n });\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n if (values.floral && values.floral !== \"None\") {\r\n const floralText = `Mẫu hoa: ${values.floral}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n floralText,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n if (rendered > 0) cursorY += 50 * scaleFactor; // extra gap before first text line\r\n\r\n ctx.restore();\r\n return cursorY - y;\r\n };\r\n\r\n const renderText = (\r\n ctx: CanvasRenderingContext2D,\r\n position: Position & { type: \"TEXT\" },\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n displayIndex: number,\r\n showLabels: {\r\n font: boolean;\r\n shape: boolean;\r\n floral: boolean;\r\n color: boolean;\r\n },\r\n scaleFactor: number = 1\r\n ): number => {\r\n ctx.save();\r\n\r\n // Info labels\r\n // Unified font sizing for labels and content (side title uses its own larger size)\r\n const infoLineGap = 30 * scaleFactor;\r\n const labelFontFamily = \"Arial\";\r\n // Use a unified content font size for both labels and text content\r\n const fontSize = 180 * scaleFactor;\r\n const infoFontSize = fontSize;\r\n ctx.font = `${infoFontSize}px ${labelFontFamily}`;\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"top\";\r\n ctx.fillStyle = \"#444444\";\r\n\r\n let currentYCursor = y;\r\n let drawnHeight = 0; // accumulate only when something is actually drawn\r\n\r\n // Text value with unified font size\r\n const displayText = position.text;\r\n\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"top\";\r\n\r\n // Label for text line\r\n const textLabel = `Text ${displayIndex}: `;\r\n ctx.font = `bold ${fontSize}px ${labelFontFamily}`;\r\n const labelWidth = ctx.measureText(textLabel).width;\r\n ctx.fillStyle = \"#444444\";\r\n ctx.fillText(textLabel, x, currentYCursor);\r\n\r\n // Calculate available width for text content\r\n const textMaxWidth = maxWidth - labelWidth;\r\n\r\n // Handle character_colors (alternating colors)\r\n if (position.character_colors && position.character_colors.length > 0) {\r\n // Switch to content font\r\n ctx.font = `${fontSize}px ${position.font}`;\r\n const textHeight = fillTextWrappedMultiColor(\r\n ctx,\r\n displayText,\r\n position.character_colors,\r\n x + labelWidth,\r\n currentYCursor,\r\n textMaxWidth,\r\n fontSize\r\n );\r\n currentYCursor += textHeight;\r\n drawnHeight += textHeight;\r\n } else {\r\n // No color specified\r\n // Draw text in content font, black (non-bold)\r\n ctx.font = `${fontSize}px ${position.font}`;\r\n ctx.fillStyle = COLOR_MAP[position.color ?? \"None\"] || \"#000000\";\r\n const textResult = fillTextWrapped(\r\n ctx,\r\n displayText,\r\n x + labelWidth,\r\n currentYCursor,\r\n textMaxWidth,\r\n fontSize\r\n );\r\n currentYCursor += textResult.height;\r\n drawnHeight += textResult.height;\r\n }\r\n\r\n // After text, print Kiểu chữ (when not uniform), then Font and Color as needed\r\n currentYCursor += infoLineGap;\r\n ctx.font = `${infoFontSize}px ${labelFontFamily}`;\r\n ctx.fillStyle = \"#444444\";\r\n if (showLabels.shape && position.text_shape) {\r\n const shapeLabelAfter = `Kiểu chữ: ${position.text_shape}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n shapeLabelAfter,\r\n x,\r\n currentYCursor,\r\n maxWidth,\r\n infoFontSize + infoLineGap\r\n );\r\n currentYCursor += result.height;\r\n drawnHeight += result.height;\r\n }\r\n if (showLabels.font && position.font) {\r\n const fontLabel = `Font: ${position.font}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n fontLabel,\r\n x,\r\n currentYCursor,\r\n maxWidth,\r\n infoFontSize + infoLineGap\r\n );\r\n currentYCursor += result.height;\r\n drawnHeight += result.height;\r\n }\r\n if (showLabels.color) {\r\n let colorLabelValue = \"None\";\r\n if (position.character_colors && position.character_colors.length > 0) {\r\n colorLabelValue = position.character_colors.join(\", \");\r\n } else if (position.color) {\r\n colorLabelValue = position.color;\r\n }\r\n if (colorLabelValue !== \"None\") {\r\n const colorLabel = `Màu chỉ: ${colorLabelValue}`;\r\n // Reserve space for swatches\r\n const swatchReserved = 1000 * scaleFactor;\r\n const textMaxWidth = Math.max(\r\n 400 * scaleFactor,\r\n maxWidth - swatchReserved\r\n );\r\n const result = fillTextWrapped(\r\n ctx,\r\n colorLabel,\r\n x,\r\n currentYCursor,\r\n textMaxWidth,\r\n infoFontSize + infoLineGap\r\n );\r\n\r\n // Draw color swatch images inline with Color label for TEXT, preserve aspect ratio; 75% of previous size\r\n // Position swatches after the last line of wrapped text\r\n const swatchH = Math.floor(infoFontSize * 2.025);\r\n let swatchX = x + Math.ceil(result.lastLineWidth) + 100 * scaleFactor; // spacing after text\r\n const swatchY =\r\n result.lastLineY + Math.floor(infoFontSize / 2 - swatchH / 2);\r\n if (position.character_colors && position.character_colors.length > 0) {\r\n position.character_colors.forEach((color) => {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${color}.png`;\r\n const img = imageRefs.current.get(threadColorUrl);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchH * ratio));\r\n ctx.drawImage(img, swatchX, swatchY, swatchW, swatchH);\r\n swatchX += swatchW + 25 * scaleFactor;\r\n }\r\n });\r\n } else if (position.color) {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${position.color}.png`;\r\n const img = imageRefs.current.get(threadColorUrl);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchH * ratio));\r\n ctx.drawImage(img, swatchX, swatchY, swatchW, swatchH);\r\n }\r\n }\r\n\r\n currentYCursor += result.height;\r\n drawnHeight += result.height;\r\n }\r\n }\r\n\r\n // Show floral label after color block when not uniform at side level\r\n if (showLabels.floral && position.floral_pattern) {\r\n const floralText = `Mẫu hoa: ${position.floral_pattern}`;\r\n const result = fillTextWrapped(\r\n ctx,\r\n floralText,\r\n x,\r\n currentYCursor,\r\n maxWidth,\r\n infoFontSize + infoLineGap\r\n );\r\n currentYCursor += result.height;\r\n drawnHeight += result.height;\r\n }\r\n\r\n // (Floral per-position label is printed above the text when needed; avoid duplicate after text)\r\n\r\n ctx.restore();\r\n return drawnHeight;\r\n };\r\n\r\n const renderIconLabels = (\r\n ctx: CanvasRenderingContext2D,\r\n position: Position & { type: \"ICON\" },\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n scaleFactor: number = 1\r\n ): number => {\r\n const labelFontFamily = \"Arial\";\r\n const fontSize = 180 * scaleFactor;\r\n const lineGap = 30 * scaleFactor;\r\n ctx.save();\r\n ctx.font = `${fontSize}px ${labelFontFamily}`;\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"top\";\r\n ctx.fillStyle = \"#444444\";\r\n\r\n let cursorY = y;\r\n const iconText = position.icon === 0 \r\n ? `Icon: icon mặc định theo file thêu` \r\n : `Icon: ${position.icon}`;\r\n const iconResult = fillTextWrapped(\r\n ctx,\r\n iconText,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n // draw icon image inline with text, preserve aspect ratio; match line height\r\n if (position.icon !== 0) {\r\n const iconUrl = `${ICON_BASE_URL}/Icon ${position.icon}.png`;\r\n const img = imageRefs.current.get(iconUrl);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const swatchH = fontSize;\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchH * ratio));\r\n // Put icon on last line of wrapped text\r\n const iconX =\r\n x + Math.ceil(iconResult.lastLineWidth) + 100 * scaleFactor;\r\n const iconY =\r\n iconResult.lastLineY + Math.floor(fontSize / 2 - swatchH / 2);\r\n ctx.drawImage(img, iconX, iconY, swatchW, swatchH);\r\n }\r\n }\r\n cursorY += iconResult.height;\r\n\r\n // Draw color line only when there are layer colors\r\n if (position.layer_colors && position.layer_colors.length > 0) {\r\n const colorLabelValue = position.layer_colors.join(\", \");\r\n const colorText = `Màu chỉ: ${colorLabelValue}`;\r\n // Reserve space for swatches\r\n const swatchReserved = 1000 * scaleFactor;\r\n const textMaxWidth = Math.max(\r\n 400 * scaleFactor,\r\n maxWidth - swatchReserved\r\n );\r\n const colorResult = fillTextWrapped(\r\n ctx,\r\n colorText,\r\n x,\r\n cursorY,\r\n textMaxWidth,\r\n fontSize + lineGap\r\n );\r\n\r\n // Draw color swatch images (only for icon)\r\n // Position swatches after the last line of wrapped text\r\n const swatchH = Math.floor(fontSize * 2.025); // 75% of previous size\r\n let swatchX =\r\n x + Math.ceil(colorResult.lastLineWidth) + 100 * scaleFactor; // spacing after text\r\n const swatchY =\r\n colorResult.lastLineY + Math.floor(fontSize / 2 - swatchH / 2);\r\n position.layer_colors.forEach((color) => {\r\n const threadColorUrl = `${THREAD_COLOR_BASE_URL}/${color}.png`;\r\n const img = imageRefs.current.get(threadColorUrl);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchH * ratio));\r\n ctx.drawImage(img, swatchX, swatchY, swatchW, swatchH);\r\n swatchX += swatchW + 25 * scaleFactor; // spacing between swatches\r\n }\r\n });\r\n cursorY += colorResult.height;\r\n }\r\n\r\n ctx.restore();\r\n return cursorY - y;\r\n };\r\n\r\n const loadFont = (fontName: string): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n // Try to load from CDN\r\n const fontUrl = `${FONT_BASE_URL}/${encodeURIComponent(fontName)}.woff2`;\r\n const fontFace = new FontFace(fontName, `url(${fontUrl})`);\r\n\r\n fontFace\r\n .load()\r\n .then((loadedFont) => {\r\n document.fonts.add(loadedFont);\r\n resolve();\r\n })\r\n .catch(() => {\r\n // Font loading failed, will use fallback\r\n console.warn(`Could not load font ${fontName} from CDN`);\r\n resolve(); // Still resolve to not block rendering\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <div className={`render-embroidery${className ? ` ${className}` : \"\"}`} style={style}>\r\n <canvas ref={canvasRef} className=\"render-embroidery-canvas\" />\r\n </div>\r\n );\r\n};\r\n\r\nexport default EmbroideryQCImage;\r\n"],"names":["useState","useRef","useEffect","_jsx"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/EmbroideryQCImage.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { EmbroideryQCConfig, EmbroideryQCImageProps, Position } from \"../types\";\r\nimport \"./EmbroideryQCImage.css\";\r\n\r\n// ============================================================================\r\n// CONSTANTS\r\n// ============================================================================\r\n\r\nconst COLOR_MAP: Record<string, string> = {\r\n \"Army (1394)\": \"#4B5320\",\r\n Army: \"#4B5320\",\r\n \"Black (8)\": \"#000000\",\r\n Black: \"#000000\",\r\n \"Bubblegum (1309)\": \"#FFC1CC\",\r\n Bubblegum: \"#FFC1CC\",\r\n \"Carolina Blue (1274)\": \"#7BAFD4\",\r\n \"Carolina Blue\": \"#7BAFD4\",\r\n \"Celadon (1098)\": \"#ACE1AF\",\r\n Celadon: \"#ACE1AF\",\r\n \"Coffee Bean (1145)\": \"#6F4E37\",\r\n \"Coffee Bean\": \"#6F4E37\",\r\n \"Daffodil (1180)\": \"#FFFF31\",\r\n Daffodil: \"#FFFF31\",\r\n \"Dark Gray (1131)\": \"#A9A9A9\",\r\n \"Dark Gray\": \"#A9A9A9\",\r\n \"Doe Skin Beige (1344)\": \"#F5E6D3\",\r\n \"Doe Skin Beige\": \"#F5E6D3\",\r\n \"Dusty Blue (1373)\": \"#6699CC\",\r\n \"Dusty Blue\": \"#6699CC\",\r\n \"Forest Green (1397)\": \"#228B22\",\r\n \"Forest Green\": \"#228B22\",\r\n \"Gold (1425)\": \"#FFD700\",\r\n Gold: \"#FFD700\",\r\n \"Gray (1118)\": \"#808080\",\r\n Gray: \"#808080\",\r\n \"Ivory (1072)\": \"#FFFFF0\",\r\n Ivory: \"#FFFFF0\",\r\n \"Lavender (1032)\": \"#E6E6FA\",\r\n Lavender: \"#E6E6FA\",\r\n \"Light Denim (1133)\": \"#B0C4DE\",\r\n \"Light Denim\": \"#B0C4DE\",\r\n \"Light Salmon (1018)\": \"#FFA07A\",\r\n \"Light Salmon\": \"#FFA07A\",\r\n \"Maroon (1374)\": \"#800000\",\r\n Maroon: \"#800000\",\r\n \"Navy Blue (1044)\": \"#000080\",\r\n \"Navy Blue\": \"#000080\",\r\n \"Olive Green (1157)\": \"#556B2F\",\r\n \"Olive Green\": \"#556B2F\",\r\n \"Orange (1278)\": \"#FFA500\",\r\n Orange: \"#FFA500\",\r\n \"Peach Blush (1053)\": \"#FFCCCB\",\r\n \"Peach Blush\": \"#FFCCCB\",\r\n \"Pink (1148)\": \"#FFC0CB\",\r\n Pink: \"#FFC0CB\",\r\n \"Purple (1412)\": \"#800080\",\r\n Purple: \"#800080\",\r\n \"Red (1037)\": \"#FF0000\",\r\n Red: \"#FF0000\",\r\n \"Silver Sage (1396)\": \"#A8A8A8\",\r\n \"Silver Sage\": \"#A8A8A8\",\r\n \"Summer Sky (1432)\": \"#87CEEB\",\r\n \"Summer Sky\": \"#87CEEB\",\r\n \"Terra Cotta (1477)\": \"#E2725B\",\r\n \"Terra Cotta\": \"#E2725B\",\r\n \"Sand (1055)\": \"#F4A460\",\r\n Sand: \"#F4A460\",\r\n \"White (9)\": \"#FFFFFF\",\r\n White: \"#FFFFFF\",\r\n};\r\n\r\nconst DEFAULT_ERROR_COLOR = \"#CC1F1A\";\r\n\r\nconst BASE_URLS = {\r\n FONT: \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/fonts\",\r\n ICON: \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/icons\",\r\n FLORAL:\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/florals\",\r\n THREAD_COLOR:\r\n \"https://s3.hn-1.cloud.cmctelecom.vn/god-system-images/embroidery/thread-colors\",\r\n};\r\n\r\nconst LAYOUT = {\r\n // Font families\r\n HEADER_FONT_FAMILY: \"Times New Roman\",\r\n FONT_FAMILY: \"Arial\",\r\n\r\n // Font sizes (base values, will be multiplied by scaleFactor)\r\n HEADER_FONT_SIZE: 220,\r\n TEXT_FONT_SIZE: 200,\r\n OTHER_FONT_SIZE: 160,\r\n\r\n // Colors\r\n HEADER_COLOR: \"#000000\",\r\n LABEL_COLOR: \"#444444\",\r\n BACKGROUND_COLOR: \"#FFFFFF\",\r\n\r\n // Text alignment\r\n TEXT_ALIGN: \"left\" as CanvasTextAlign,\r\n TEXT_BASELINE: \"top\" as CanvasTextBaseline,\r\n\r\n // Spacing\r\n LINE_GAP: 40,\r\n PADDING: 40,\r\n SECTION_SPACING: 60,\r\n ELEMENT_SPACING: 100,\r\n SWATCH_SPACING: 25,\r\n FLORAL_SPACING: 300,\r\n\r\n // Visual styling\r\n SWATCH_HEIGHT_RATIO: 2.025,\r\n UNDERLINE_POSITION: 0.9,\r\n UNDERLINE_WIDTH: 10,\r\n\r\n // Swatch reserved space\r\n SWATCH_RESERVED_SPACE: 1000,\r\n MIN_TEXT_WIDTH: 400,\r\n};\r\n\r\n// ============================================================================\r\n// HELPER FUNCTIONS\r\n// ============================================================================\r\n\r\nconst loadFont = (fontName: string): Promise<void> => {\r\n return new Promise((resolve) => {\r\n const fontUrl = `${BASE_URLS.FONT}/${encodeURIComponent(fontName)}.woff2`;\r\n const fontFace = new FontFace(fontName, `url(${fontUrl})`);\r\n\r\n fontFace\r\n .load()\r\n .then((loadedFont) => {\r\n document.fonts.add(loadedFont);\r\n resolve();\r\n })\r\n .catch(() => {\r\n console.warn(`Could not load font ${fontName} from CDN`);\r\n resolve();\r\n });\r\n });\r\n};\r\n\r\nconst getImageUrl = (\r\n type: \"icon\" | \"floral\" | \"threadColor\",\r\n value: string | number\r\n): string => {\r\n if (type === \"icon\") return `${BASE_URLS.ICON}/Icon ${value}.png`;\r\n if (type === \"floral\") return `${BASE_URLS.FLORAL}/${value}.png`;\r\n return `${BASE_URLS.THREAD_COLOR}/${value}.png`;\r\n};\r\n\r\ntype ImageMapRef = {\r\n current: Map<string, HTMLImageElement>;\r\n};\r\n\r\nexport interface EmbroideryQCImageRenderOptions {\r\n width?: number;\r\n height?: number;\r\n mimeType?: \"image/png\" | \"image/jpeg\" | \"image/webp\";\r\n quality?: number;\r\n}\r\n\r\nconst getProxyUrl = (url: string): string =>\r\n `https://proxy-img.c8p.workers.dev?url=${encodeURIComponent(url)}`;\r\n\r\nconst ensureImage = (existing?: HTMLImageElement | null): HTMLImageElement => {\r\n if (existing && existing.crossOrigin === \"anonymous\") {\r\n return existing;\r\n }\r\n\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.decoding = \"async\";\r\n return img;\r\n};\r\n\r\nconst loadImage = (url: string, imageRefs: ImageMapRef, onLoad: () => void) => {\r\n const existing = imageRefs.current.get(url);\r\n if (\r\n existing?.complete &&\r\n existing.naturalWidth > 0 &&\r\n existing.crossOrigin === \"anonymous\"\r\n ) {\r\n return;\r\n }\r\n\r\n const img = ensureImage(existing);\r\n imageRefs.current.set(url, img);\r\n\r\n let attemptedProxy = existing?.dataset?.proxyUsed === \"true\";\r\n\r\n const cleanup = () => {\r\n img.onload = null;\r\n img.onerror = null;\r\n };\r\n\r\n img.onload = () => {\r\n img.dataset.proxyUsed = attemptedProxy ? \"true\" : \"false\";\r\n cleanup();\r\n onLoad();\r\n };\r\n\r\n img.onerror = () => {\r\n if (!attemptedProxy) {\r\n attemptedProxy = true;\r\n img.src = getProxyUrl(url);\r\n return;\r\n }\r\n img.dataset.proxyUsed = attemptedProxy ? \"true\" : \"false\";\r\n cleanup();\r\n onLoad();\r\n };\r\n\r\n img.src = attemptedProxy ? getProxyUrl(url) : url;\r\n};\r\n\r\nconst loadImageAsync = (\r\n url: string,\r\n imageRefs: ImageMapRef,\r\n cacheKey?: string\r\n): Promise<HTMLImageElement> => {\r\n const key = cacheKey ?? url;\r\n const existing = imageRefs.current.get(key) ?? imageRefs.current.get(url);\r\n\r\n if (\r\n existing?.complete &&\r\n existing.naturalWidth > 0 &&\r\n existing.crossOrigin === \"anonymous\" &&\r\n existing.dataset?.proxyUsed !== undefined\r\n ) {\r\n if (existing !== imageRefs.current.get(key)) {\r\n imageRefs.current.set(key, existing);\r\n }\r\n if (existing !== imageRefs.current.get(url)) {\r\n imageRefs.current.set(url, existing);\r\n }\r\n return Promise.resolve(existing);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n const target = ensureImage(existing);\r\n if (target !== existing) {\r\n imageRefs.current.set(key, target);\r\n imageRefs.current.set(url, target);\r\n }\r\n let attemptedProxy = target.dataset.proxyUsed === \"true\";\r\n\r\n const finalize = () => {\r\n target.onload = null;\r\n target.onerror = null;\r\n if (target.complete && target.naturalWidth > 0) {\r\n imageRefs.current.set(key, target);\r\n imageRefs.current.set(url, target);\r\n }\r\n target.dataset.proxyUsed = attemptedProxy ? \"true\" : \"false\";\r\n resolve(target);\r\n };\r\n\r\n target.onload = finalize;\r\n target.onerror = () => {\r\n if (!attemptedProxy) {\r\n attemptedProxy = true;\r\n target.src = getProxyUrl(url);\r\n return;\r\n }\r\n target.dataset.proxyUsed = attemptedProxy ? \"true\" : \"false\";\r\n finalize();\r\n };\r\n\r\n const desiredSrc = attemptedProxy ? getProxyUrl(url) : url;\r\n\r\n if (target.src !== desiredSrc) {\r\n target.src = desiredSrc;\r\n } else if (target.complete && target.naturalWidth > 0) {\r\n finalize();\r\n }\r\n });\r\n};\r\n\r\nconst preloadFonts = async (config: EmbroideryQCConfig) => {\r\n if (config.error || !config.sides?.length) return;\r\n\r\n const fonts = new Set<string>();\r\n\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"TEXT\" && position.font) {\r\n fonts.add(position.font);\r\n }\r\n });\r\n });\r\n\r\n if (fonts.size === 0) return;\r\n\r\n await Promise.all([...fonts].map((font) => loadFont(font)));\r\n};\r\n\r\nconst preloadImages = async (\r\n config: EmbroideryQCConfig,\r\n imageRefs: ImageMapRef\r\n) => {\r\n const entries: Array<{ url: string; cacheKey?: string }> = [];\r\n const seen = new Set<string>();\r\n\r\n if (config.image_url) {\r\n entries.push({ url: config.image_url, cacheKey: \"mockup\" });\r\n seen.add(config.image_url);\r\n }\r\n\r\n if (!config.sides?.length) {\r\n await Promise.all(\r\n entries.map(({ url, cacheKey }) =>\r\n loadImageAsync(url, imageRefs, cacheKey)\r\n )\r\n );\r\n return;\r\n }\r\n\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"ICON\") {\r\n if (position.icon !== 0) {\r\n const iconUrl = getImageUrl(\"icon\", position.icon);\r\n if (!seen.has(iconUrl)) {\r\n entries.push({ url: iconUrl });\r\n seen.add(iconUrl);\r\n }\r\n }\r\n position.layer_colors?.forEach((color) => {\r\n const colorUrl = getImageUrl(\"threadColor\", color);\r\n if (!seen.has(colorUrl)) {\r\n entries.push({ url: colorUrl });\r\n seen.add(colorUrl);\r\n }\r\n });\r\n }\r\n\r\n if (position.type === \"TEXT\") {\r\n if (position.floral_pattern) {\r\n const floralUrl = getImageUrl(\"floral\", position.floral_pattern);\r\n if (!seen.has(floralUrl)) {\r\n entries.push({ url: floralUrl });\r\n seen.add(floralUrl);\r\n }\r\n }\r\n\r\n if (position.color) {\r\n const threadUrl = getImageUrl(\"threadColor\", position.color);\r\n if (!seen.has(threadUrl)) {\r\n entries.push({ url: threadUrl });\r\n seen.add(threadUrl);\r\n }\r\n }\r\n\r\n position.character_colors?.forEach((color) => {\r\n const characterColorUrl = getImageUrl(\"threadColor\", color);\r\n if (!seen.has(characterColorUrl)) {\r\n entries.push({ url: characterColorUrl });\r\n seen.add(characterColorUrl);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n if (entries.length === 0) return;\r\n\r\n await Promise.all(\r\n entries.map(({ url, cacheKey }) => loadImageAsync(url, imageRefs, cacheKey))\r\n );\r\n};\r\n\r\nconst wrapText = (\r\n ctx: CanvasRenderingContext2D,\r\n text: string,\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n lineHeight: number\r\n): { height: number; lastLineWidth: number; lastLineY: number } => {\r\n const words = text.split(\" \");\r\n const lines: string[] = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n const testLine = currentLine + \" \" + words[i];\r\n if (ctx.measureText(testLine).width > maxWidth && currentLine.length > 0) {\r\n lines.push(currentLine);\r\n currentLine = words[i];\r\n } else {\r\n currentLine = testLine;\r\n }\r\n }\r\n lines.push(currentLine);\r\n\r\n let currentY = y;\r\n lines.forEach((line) => {\r\n ctx.fillText(line, x, currentY);\r\n currentY += lineHeight;\r\n });\r\n\r\n return {\r\n height: lines.length * lineHeight,\r\n lastLineWidth: ctx.measureText(lines[lines.length - 1]).width,\r\n lastLineY: y + (lines.length - 1) * lineHeight,\r\n };\r\n};\r\n\r\nconst buildWrappedLines = (\r\n ctx: CanvasRenderingContext2D,\r\n text: string,\r\n maxWidth: number\r\n): string[] => {\r\n const words = text.split(\" \").filter((word) => word.length > 0);\r\n if (words.length === 0) return [\"\"];\r\n\r\n const lines: string[] = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n const testLine = `${currentLine} ${words[i]}`;\r\n if (ctx.measureText(testLine).width > maxWidth && currentLine.length > 0) {\r\n lines.push(currentLine);\r\n currentLine = words[i];\r\n } else {\r\n currentLine = testLine;\r\n }\r\n }\r\n\r\n lines.push(currentLine);\r\n return lines;\r\n};\r\n\r\nconst wrapTextMultiColor = (\r\n ctx: CanvasRenderingContext2D,\r\n text: string,\r\n colors: string[],\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n lineHeight: number\r\n): number => {\r\n const words = text.split(\" \");\r\n const lines: string[] = [];\r\n const lineStartIndices: number[] = [0];\r\n let currentLine = words[0];\r\n let currentCharIndex = words[0].length;\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n const testLine = currentLine + \" \" + words[i];\r\n if (ctx.measureText(testLine).width > maxWidth && currentLine.length > 0) {\r\n lines.push(currentLine);\r\n lineStartIndices.push(currentCharIndex + 1);\r\n currentLine = words[i];\r\n currentCharIndex += words[i].length + 1;\r\n } else {\r\n currentLine = testLine;\r\n currentCharIndex += words[i].length + 1;\r\n }\r\n }\r\n lines.push(currentLine);\r\n\r\n let currentY = y;\r\n lines.forEach((line, lineIdx) => {\r\n let currentX = x;\r\n const startCharIdx = lineIdx > 0 ? lineStartIndices[lineIdx] : 0;\r\n for (let i = 0; i < line.length; i++) {\r\n const char = line[i];\r\n const globalCharIdx = startCharIdx + i;\r\n const colorIndex = globalCharIdx % colors.length;\r\n const color = colors[colorIndex];\r\n ctx.fillStyle = COLOR_MAP[color] || \"#000000\";\r\n ctx.fillText(char, currentX, currentY);\r\n currentX += ctx.measureText(char).width;\r\n }\r\n currentY += lineHeight;\r\n });\r\n\r\n return lines.length * lineHeight;\r\n};\r\n\r\nconst drawSwatches = (\r\n ctx: CanvasRenderingContext2D,\r\n colors: string[],\r\n startX: number,\r\n startY: number,\r\n swatchHeight: number,\r\n scaleFactor: number,\r\n imageRefs: ImageMapRef\r\n) => {\r\n let swatchX = startX;\r\n colors.forEach((color) => {\r\n const url = getImageUrl(\"threadColor\", color);\r\n const img = imageRefs.current.get(url);\r\n if (img && img.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(swatchHeight * ratio));\r\n ctx.drawImage(img, swatchX, startY, swatchW, swatchHeight);\r\n swatchX += swatchW + LAYOUT.SWATCH_SPACING * scaleFactor;\r\n }\r\n });\r\n};\r\n\r\n// ============================================================================\r\n// MAIN COMPONENT\r\n// ============================================================================\r\n\r\nconst EmbroideryQCImage: React.FC<EmbroideryQCImageProps> = ({\r\n config,\r\n className = \"\",\r\n style = {},\r\n}) => {\r\n const [canvasSize] = useState({ width: 4200, height: 4800 });\r\n const [loadedFonts, setLoadedFonts] = useState<Set<string>>(new Set());\r\n const [imagesLoaded, setImagesLoaded] = useState(0);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const imageRefs = useRef<Map<string, HTMLImageElement>>(new Map());\r\n\r\n // Load fonts\r\n useEffect(() => {\r\n const loadFonts = async () => {\r\n if (config.error || !config.sides?.length) return;\r\n\r\n const fontsToLoad = new Set<string>();\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"TEXT\" && position.font) {\r\n fontsToLoad.add(position.font);\r\n }\r\n });\r\n });\r\n\r\n for (const fontName of fontsToLoad) {\r\n if (!loadedFonts.has(fontName)) {\r\n try {\r\n await loadFont(fontName);\r\n setLoadedFonts((prev) => new Set(prev).add(fontName));\r\n } catch (error) {\r\n console.warn(`Could not load font ${fontName}:`, error);\r\n }\r\n }\r\n }\r\n };\r\n\r\n loadFonts();\r\n }, [config.sides, loadedFonts]);\r\n\r\n // Load images\r\n useEffect(() => {\r\n if (config.error || !config.sides?.length) return;\r\n\r\n const incrementCounter = () => setImagesLoaded((prev) => prev + 1);\r\n\r\n // Load mockup\r\n if (config.image_url) {\r\n loadImage(config.image_url, imageRefs, incrementCounter);\r\n }\r\n\r\n // Load all other images\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"ICON\") {\r\n if (position.icon !== 0) {\r\n loadImage(\r\n getImageUrl(\"icon\", position.icon),\r\n imageRefs,\r\n incrementCounter\r\n );\r\n }\r\n position.layer_colors?.forEach((color) => {\r\n loadImage(\r\n getImageUrl(\"threadColor\", color),\r\n imageRefs,\r\n incrementCounter\r\n );\r\n });\r\n }\r\n\r\n if (position.type === \"TEXT\") {\r\n if (position.floral_pattern) {\r\n loadImage(\r\n getImageUrl(\"floral\", position.floral_pattern),\r\n imageRefs,\r\n incrementCounter\r\n );\r\n }\r\n if (position.color) {\r\n loadImage(\r\n getImageUrl(\"threadColor\", position.color),\r\n imageRefs,\r\n incrementCounter\r\n );\r\n }\r\n position.character_colors?.forEach((color) => {\r\n loadImage(\r\n getImageUrl(\"threadColor\", color),\r\n imageRefs,\r\n incrementCounter\r\n );\r\n });\r\n }\r\n });\r\n });\r\n }, [config]);\r\n\r\n // Render canvas\r\n useEffect(() => {\r\n const renderCanvas = () => {\r\n if (!canvasRef.current) return;\r\n renderEmbroideryCanvas(canvasRef.current, config, canvasSize, imageRefs);\r\n };\r\n\r\n const timer = setTimeout(renderCanvas, 100);\r\n return () => clearTimeout(timer);\r\n }, [config, canvasSize, loadedFonts, imagesLoaded]);\r\n\r\n return (\r\n <div\r\n className={`render-embroidery${className ? ` ${className}` : \"\"}`}\r\n style={style}\r\n >\r\n <canvas ref={canvasRef} className=\"render-embroidery-canvas\" />\r\n </div>\r\n );\r\n};\r\n\r\n// ============================================================================\r\n// RENDERING FUNCTIONS\r\n// ============================================================================\r\n\r\nconst renderEmbroideryCanvas = (\r\n canvas: HTMLCanvasElement,\r\n config: EmbroideryQCConfig,\r\n canvasSize: { width: number; height: number },\r\n imageRefs: ImageMapRef\r\n) => {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvas.width = canvasSize.width;\r\n canvas.height = canvasSize.height;\r\n\r\n ctx.fillStyle = LAYOUT.BACKGROUND_COLOR;\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (config.error) {\r\n renderErrorState(ctx, canvas, config.error);\r\n return;\r\n }\r\n\r\n if (!config.sides?.length) return;\r\n\r\n ctx.textAlign = LAYOUT.TEXT_ALIGN;\r\n ctx.textBaseline = LAYOUT.TEXT_BASELINE;\r\n\r\n if (config.image_url) {\r\n const mockupImage = imageRefs.current.get(config.image_url);\r\n if (mockupImage) {\r\n imageRefs.current.set(\"mockup\", mockupImage);\r\n }\r\n }\r\n\r\n const floralAssets: HTMLImageElement[] = [];\r\n const seenFlorals = new Set<string>();\r\n config.sides.forEach((side) => {\r\n side.positions.forEach((position) => {\r\n if (position.type === \"TEXT\" && position.floral_pattern) {\r\n const url = getImageUrl(\"floral\", position.floral_pattern);\r\n if (!seenFlorals.has(url)) {\r\n const img = imageRefs.current.get(url);\r\n if (img?.complete && img.naturalWidth > 0) {\r\n floralAssets.push(img);\r\n seenFlorals.add(url);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n const measureCanvas = document.createElement(\"canvas\");\r\n measureCanvas.width = canvas.width;\r\n measureCanvas.height = canvas.height;\r\n const measureCtx = measureCanvas.getContext(\"2d\");\r\n if (!measureCtx) return;\r\n\r\n measureCtx.textAlign = LAYOUT.TEXT_ALIGN;\r\n measureCtx.textBaseline = LAYOUT.TEXT_BASELINE;\r\n\r\n let measureY = LAYOUT.PADDING;\r\n const measureSpacing = LAYOUT.ELEMENT_SPACING;\r\n\r\n config.sides.forEach((side) => {\r\n const sideHeight = renderSide(\r\n measureCtx,\r\n side,\r\n measureY,\r\n canvas.width,\r\n 1,\r\n imageRefs\r\n );\r\n measureY += sideHeight + measureSpacing;\r\n });\r\n\r\n const scaleFactor = Math.max(\r\n 0.5,\r\n Math.min(1, (canvas.height - LAYOUT.PADDING) / measureY)\r\n );\r\n\r\n drawMockupAndFlorals(ctx, canvas, floralAssets, imageRefs);\r\n\r\n let currentY = LAYOUT.PADDING * scaleFactor;\r\n config.sides.forEach((side) => {\r\n const sideHeight = renderSide(\r\n ctx,\r\n side,\r\n currentY,\r\n canvas.width,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n currentY += sideHeight + measureSpacing * scaleFactor;\r\n });\r\n};\r\n\r\nconst renderErrorState = (\r\n ctx: CanvasRenderingContext2D,\r\n canvas: HTMLCanvasElement,\r\n message: string\r\n) => {\r\n const sanitizedMessage = message.trim() || \"Đã xảy ra lỗi\";\r\n const horizontalPadding = LAYOUT.PADDING * 3;\r\n const maxWidth = canvas.width - horizontalPadding * 2;\r\n const baseFontSize = LAYOUT.HEADER_FONT_SIZE;\r\n const minFontSize = 60;\r\n const centerX = canvas.width / 2;\r\n\r\n ctx.save();\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"top\";\r\n ctx.fillStyle = DEFAULT_ERROR_COLOR;\r\n\r\n let fontSize = baseFontSize;\r\n let lineGap = LAYOUT.LINE_GAP;\r\n let lineHeight = fontSize + lineGap;\r\n\r\n const adjustMetrics = () => {\r\n ctx.font = `bold ${fontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n lineGap = LAYOUT.LINE_GAP * (fontSize / baseFontSize);\r\n lineHeight = fontSize + lineGap;\r\n };\r\n\r\n adjustMetrics();\r\n let lines = buildWrappedLines(ctx, sanitizedMessage, maxWidth);\r\n let longestLineWidth = Math.max(\r\n ...lines.map((line) => ctx.measureText(line).width)\r\n );\r\n\r\n while (longestLineWidth > maxWidth && fontSize > minFontSize) {\r\n fontSize = Math.max(minFontSize, Math.floor(fontSize * 0.9));\r\n adjustMetrics();\r\n lines = buildWrappedLines(ctx, sanitizedMessage, maxWidth);\r\n longestLineWidth = Math.max(\r\n ...lines.map((line) => ctx.measureText(line).width)\r\n );\r\n }\r\n\r\n const totalHeight = lines.length * lineHeight;\r\n const startY = Math.max(\r\n LAYOUT.PADDING * 2,\r\n canvas.height / 2 - totalHeight / 2\r\n );\r\n\r\n lines.forEach((line, index) => {\r\n const y = startY + index * lineHeight;\r\n ctx.fillText(line, centerX, y);\r\n });\r\n\r\n ctx.restore();\r\n};\r\n\r\nconst drawMockupAndFlorals = (\r\n ctx: CanvasRenderingContext2D,\r\n canvas: HTMLCanvasElement,\r\n floralAssets: HTMLImageElement[],\r\n imageRefs: ImageMapRef\r\n) => {\r\n const mockupImg = imageRefs.current.get(\"mockup\");\r\n if (!mockupImg?.complete || !mockupImg.naturalWidth) return;\r\n\r\n const margin = LAYOUT.PADDING;\r\n const maxWidth = Math.min(1800, canvas.width * 0.375);\r\n const maxHeight = canvas.height * 0.375;\r\n const scale = Math.min(\r\n maxWidth / mockupImg.naturalWidth,\r\n maxHeight / mockupImg.naturalHeight\r\n );\r\n const width = Math.max(1, Math.floor(mockupImg.naturalWidth * scale));\r\n const height = Math.max(1, Math.floor(mockupImg.naturalHeight * scale));\r\n const x = canvas.width - margin - width;\r\n const y = canvas.height - margin - height;\r\n\r\n ctx.drawImage(mockupImg, x, y, width, height);\r\n\r\n // Draw florals\r\n if (floralAssets.length > 0) {\r\n const floralH = Math.min(900, height);\r\n let currentX = x - LAYOUT.FLORAL_SPACING;\r\n\r\n for (let i = floralAssets.length - 1; i >= 0; i--) {\r\n const img = floralAssets[i];\r\n const ratio = img.naturalWidth / Math.max(1, img.naturalHeight);\r\n const w = Math.max(1, Math.floor(floralH * ratio));\r\n currentX -= w;\r\n ctx.drawImage(img, currentX, y + height - floralH, w, floralH);\r\n currentX -= LAYOUT.FLORAL_SPACING;\r\n }\r\n }\r\n};\r\n\r\nconst renderSide = (\r\n ctx: CanvasRenderingContext2D,\r\n side: any,\r\n startY: number,\r\n width: number,\r\n scaleFactor: number,\r\n imageRefs: ImageMapRef\r\n): number => {\r\n let currentY = startY;\r\n const padding = LAYOUT.PADDING * scaleFactor;\r\n const sideWidth = width - 2 * padding;\r\n\r\n // Draw header\r\n ctx.save();\r\n const headerFontSize = LAYOUT.HEADER_FONT_SIZE * scaleFactor;\r\n ctx.font = `bold ${headerFontSize}px ${LAYOUT.HEADER_FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.HEADER_COLOR;\r\n\r\n const headerResult = wrapText(\r\n ctx,\r\n side.print_side.toUpperCase(),\r\n padding,\r\n currentY,\r\n sideWidth,\r\n headerFontSize\r\n );\r\n\r\n // Draw underline\r\n const underlineY =\r\n headerResult.lastLineY + headerFontSize * LAYOUT.UNDERLINE_POSITION;\r\n ctx.strokeStyle = LAYOUT.HEADER_COLOR;\r\n ctx.lineWidth = LAYOUT.UNDERLINE_WIDTH * scaleFactor;\r\n ctx.beginPath();\r\n ctx.moveTo(padding, underlineY);\r\n ctx.lineTo(padding + headerResult.lastLineWidth, underlineY);\r\n ctx.stroke();\r\n\r\n currentY += headerResult.height + LAYOUT.SECTION_SPACING * scaleFactor;\r\n ctx.restore();\r\n\r\n // Compute uniform properties\r\n const textPositions = side.positions.filter(\r\n (p: Position) => p.type === \"TEXT\"\r\n );\r\n const uniformProps = computeUniformProperties(textPositions);\r\n\r\n // Render uniform labels (only if more than 1 TEXT position)\r\n if (textPositions.length > 1) {\r\n currentY += renderUniformLabels(\r\n ctx,\r\n uniformProps,\r\n padding,\r\n currentY,\r\n sideWidth,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n }\r\n\r\n // Group text positions by common properties\r\n const textGroups = groupTextPositions(textPositions);\r\n\r\n // Render text positions (with proper spacing between groups)\r\n let textCounter = 1;\r\n textGroups.forEach((group, groupIndex) => {\r\n group.forEach((position, index) => {\r\n // Add extra spacing between different groups\r\n if (index === 0 && groupIndex !== 0) {\r\n currentY += LAYOUT.SECTION_SPACING * scaleFactor;\r\n }\r\n\r\n // If only 1 TEXT position, show all labels (no uniform labels rendered)\r\n const showLabels =\r\n textPositions.length === 1\r\n ? { font: true, shape: true, floral: true, color: true }\r\n : {\r\n font: !uniformProps.isUniform.font,\r\n shape: !uniformProps.isUniform.shape,\r\n floral: !uniformProps.isUniform.floral,\r\n color: !uniformProps.isUniform.color,\r\n };\r\n const height = renderTextPosition(\r\n ctx,\r\n position as any,\r\n padding,\r\n currentY,\r\n sideWidth,\r\n textCounter,\r\n showLabels,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n if (height > 0) {\r\n currentY += height + LAYOUT.PADDING * scaleFactor;\r\n textCounter++;\r\n }\r\n });\r\n });\r\n\r\n // Render icon positions\r\n currentY += LAYOUT.LINE_GAP * scaleFactor;\r\n side.positions.forEach((position: Position) => {\r\n if (position.type === \"ICON\") {\r\n currentY += renderIconPosition(\r\n ctx,\r\n position as any,\r\n padding,\r\n currentY,\r\n sideWidth,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n currentY += (LAYOUT.LINE_GAP / 3) * scaleFactor;\r\n }\r\n });\r\n\r\n return currentY - startY;\r\n};\r\n\r\nconst groupTextPositions = (\r\n textPositions: Array<Position & { type: \"TEXT\" }>\r\n): Array<Array<Position & { type: \"TEXT\" }>> => {\r\n const groups: Array<Array<Position & { type: \"TEXT\" }>> = [];\r\n let currentGroup: Array<Position & { type: \"TEXT\" }> | null = null;\r\n let currentProps: any = null;\r\n\r\n textPositions.forEach((position) => {\r\n const posProps = {\r\n font: position.font,\r\n text_shape: position.text_shape,\r\n color: position.color,\r\n character_colors: position.character_colors?.join(\",\"),\r\n };\r\n\r\n if (\r\n !currentGroup ||\r\n currentProps.font !== posProps.font ||\r\n currentProps.text_shape !== posProps.text_shape ||\r\n currentProps.color !== posProps.color ||\r\n currentProps.character_colors !== posProps.character_colors\r\n ) {\r\n if (currentGroup) {\r\n groups.push(currentGroup);\r\n }\r\n currentGroup = [position];\r\n currentProps = posProps;\r\n } else {\r\n currentGroup.push(position);\r\n }\r\n });\r\n\r\n if (currentGroup) {\r\n groups.push(currentGroup);\r\n }\r\n\r\n return groups;\r\n};\r\n\r\nconst computeUniformProperties = (\r\n textPositions: Array<Position & { type: \"TEXT\" }>\r\n) => {\r\n if (textPositions.length === 0) {\r\n return {\r\n values: { font: null, shape: null, floral: null, color: null },\r\n isUniform: { font: false, shape: false, floral: false, color: false },\r\n };\r\n }\r\n\r\n const fonts = new Set(textPositions.map((p) => p.font));\r\n const shapes = new Set(textPositions.map((p) => p.text_shape));\r\n const florals = new Set(textPositions.map((p) => p.floral_pattern ?? \"None\"));\r\n const colors = new Set(\r\n textPositions.map((p) =>\r\n p.character_colors?.length\r\n ? p.character_colors.join(\",\")\r\n : p.color ?? \"None\"\r\n )\r\n );\r\n\r\n return {\r\n values: {\r\n font: fonts.size === 1 ? [...fonts][0] : null,\r\n shape: shapes.size === 1 ? [...shapes][0] : null,\r\n floral: florals.size === 1 ? [...florals][0] : null,\r\n color: colors.size === 1 ? [...colors][0] : null,\r\n },\r\n isUniform: {\r\n font: fonts.size === 1,\r\n shape: shapes.size === 1,\r\n floral: florals.size === 1,\r\n color: colors.size === 1,\r\n },\r\n };\r\n};\r\n\r\nconst renderUniformLabels = (\r\n ctx: CanvasRenderingContext2D,\r\n uniformProps: ReturnType<typeof computeUniformProperties>,\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n scaleFactor: number,\r\n imageRefs: ImageMapRef\r\n): number => {\r\n const { values } = uniformProps;\r\n const fontSize = LAYOUT.OTHER_FONT_SIZE * scaleFactor;\r\n const lineGap = LAYOUT.LINE_GAP * scaleFactor;\r\n\r\n ctx.save();\r\n ctx.font = `${fontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.LABEL_COLOR;\r\n\r\n let cursorY = y;\r\n let rendered = 0;\r\n\r\n if (values.font) {\r\n const result = wrapText(\r\n ctx,\r\n `Font: ${values.font}`,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n\r\n if (values.shape && values.shape !== \"None\") {\r\n const result = wrapText(\r\n ctx,\r\n `Kiểu chữ: ${values.shape}`,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n\r\n if (values.color && values.color !== \"None\") {\r\n const textMaxWidth = Math.max(\r\n LAYOUT.MIN_TEXT_WIDTH * scaleFactor,\r\n maxWidth - LAYOUT.SWATCH_RESERVED_SPACE * scaleFactor\r\n );\r\n const result = wrapText(\r\n ctx,\r\n `Màu chỉ: ${values.color}`,\r\n x,\r\n cursorY,\r\n textMaxWidth,\r\n fontSize + lineGap\r\n );\r\n\r\n const swatchH = Math.floor(fontSize * LAYOUT.SWATCH_HEIGHT_RATIO);\r\n const swatchX =\r\n x +\r\n Math.ceil(result.lastLineWidth) +\r\n LAYOUT.ELEMENT_SPACING * scaleFactor;\r\n const swatchY = result.lastLineY + Math.floor(fontSize / 2 - swatchH / 2);\r\n const colors = values.color.includes(\",\")\r\n ? values.color.split(\",\").map((s) => s.trim())\r\n : [values.color];\r\n\r\n drawSwatches(\r\n ctx,\r\n colors,\r\n swatchX,\r\n swatchY,\r\n swatchH,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n\r\n if (values.floral && values.floral !== \"None\") {\r\n const result = wrapText(\r\n ctx,\r\n `Mẫu hoa: ${values.floral}`,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n fontSize + lineGap\r\n );\r\n cursorY += result.height;\r\n rendered++;\r\n }\r\n\r\n if (rendered > 0) cursorY += LAYOUT.SECTION_SPACING * scaleFactor;\r\n\r\n ctx.restore();\r\n return cursorY - y;\r\n};\r\n\r\nconst renderTextPosition = (\r\n ctx: CanvasRenderingContext2D,\r\n position: Position & { type: \"TEXT\" },\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n displayIndex: number,\r\n showLabels: {\r\n font: boolean;\r\n shape: boolean;\r\n floral: boolean;\r\n color: boolean;\r\n },\r\n scaleFactor: number,\r\n imageRefs: ImageMapRef\r\n): number => {\r\n ctx.save();\r\n\r\n const textFontSize = LAYOUT.TEXT_FONT_SIZE * scaleFactor;\r\n const otherFontSize = LAYOUT.OTHER_FONT_SIZE * scaleFactor;\r\n const lineGap = LAYOUT.LINE_GAP * scaleFactor;\r\n\r\n let currentY = y;\r\n let drawnHeight = 0;\r\n\r\n // Draw label\r\n const textLabel = `Text ${displayIndex}: `;\r\n ctx.font = `bold ${textFontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.LABEL_COLOR;\r\n const labelWidth = ctx.measureText(textLabel).width;\r\n ctx.fillText(textLabel, x, currentY);\r\n\r\n const textMaxWidth = maxWidth - labelWidth;\r\n\r\n // Get display text (handle empty/null/undefined)\r\n const isEmptyText = !position.text || position.text.trim() === \"\";\r\n\r\n // Draw text content\r\n if (isEmptyText) {\r\n ctx.font = `${textFontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.LABEL_COLOR;\r\n const textResult = wrapText(\r\n ctx,\r\n \"không thay đổi\",\r\n x + labelWidth,\r\n currentY,\r\n textMaxWidth,\r\n textFontSize\r\n );\r\n currentY += textResult.height;\r\n drawnHeight += textResult.height;\r\n } else if (position.character_colors?.length) {\r\n ctx.font = `${textFontSize}px ${position.font}`;\r\n const textHeight = wrapTextMultiColor(\r\n ctx,\r\n position.text,\r\n position.character_colors,\r\n x + labelWidth,\r\n currentY,\r\n textMaxWidth,\r\n textFontSize\r\n );\r\n currentY += textHeight;\r\n drawnHeight += textHeight;\r\n } else {\r\n ctx.font = `${textFontSize}px ${position.font}`;\r\n ctx.fillStyle = COLOR_MAP[position.color ?? \"None\"] || \"#000000\";\r\n const textResult = wrapText(\r\n ctx,\r\n position.text,\r\n x + labelWidth,\r\n currentY,\r\n textMaxWidth,\r\n textFontSize\r\n );\r\n currentY += textResult.height;\r\n drawnHeight += textResult.height;\r\n }\r\n\r\n // Draw additional labels\r\n currentY += lineGap;\r\n ctx.font = `${otherFontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.LABEL_COLOR;\r\n\r\n if (showLabels.shape && position.text_shape) {\r\n const result = wrapText(\r\n ctx,\r\n `Kiểu chữ: ${position.text_shape}`,\r\n x,\r\n currentY,\r\n maxWidth,\r\n otherFontSize + lineGap\r\n );\r\n currentY += result.height;\r\n drawnHeight += result.height;\r\n }\r\n\r\n if (showLabels.font && position.font) {\r\n const result = wrapText(\r\n ctx,\r\n `Font: ${position.font}`,\r\n x,\r\n currentY,\r\n maxWidth,\r\n otherFontSize + lineGap\r\n );\r\n currentY += result.height;\r\n drawnHeight += result.height;\r\n }\r\n\r\n if (showLabels.color) {\r\n const colorValue = position.character_colors?.join(\", \") || position.color;\r\n if (colorValue) {\r\n const textMaxWidth = Math.max(\r\n LAYOUT.MIN_TEXT_WIDTH * scaleFactor,\r\n maxWidth - LAYOUT.SWATCH_RESERVED_SPACE * scaleFactor\r\n );\r\n const result = wrapText(\r\n ctx,\r\n `Màu chỉ: ${colorValue}`,\r\n x,\r\n currentY,\r\n textMaxWidth,\r\n otherFontSize + lineGap\r\n );\r\n\r\n const swatchH = Math.floor(otherFontSize * LAYOUT.SWATCH_HEIGHT_RATIO);\r\n const swatchX =\r\n x +\r\n Math.ceil(result.lastLineWidth) +\r\n LAYOUT.ELEMENT_SPACING * scaleFactor;\r\n const swatchY =\r\n result.lastLineY + Math.floor(otherFontSize / 2 - swatchH / 2);\r\n const colors = position.character_colors || [position.color!];\r\n\r\n drawSwatches(\r\n ctx,\r\n colors,\r\n swatchX,\r\n swatchY,\r\n swatchH,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n currentY += result.height;\r\n drawnHeight += result.height;\r\n }\r\n }\r\n\r\n if (showLabels.floral && position.floral_pattern) {\r\n const result = wrapText(\r\n ctx,\r\n `Mẫu hoa: ${position.floral_pattern}`,\r\n x,\r\n currentY,\r\n maxWidth,\r\n otherFontSize + lineGap\r\n );\r\n currentY += result.height;\r\n drawnHeight += result.height;\r\n }\r\n\r\n ctx.restore();\r\n return drawnHeight;\r\n};\r\n\r\nconst renderIconPosition = (\r\n ctx: CanvasRenderingContext2D,\r\n position: Position & { type: \"ICON\" },\r\n x: number,\r\n y: number,\r\n maxWidth: number,\r\n scaleFactor: number,\r\n imageRefs: ImageMapRef\r\n): number => {\r\n const iconFontSize = LAYOUT.OTHER_FONT_SIZE * scaleFactor;\r\n const lineGap = LAYOUT.LINE_GAP * scaleFactor;\r\n\r\n ctx.save();\r\n ctx.font = `${iconFontSize}px ${LAYOUT.FONT_FAMILY}`;\r\n ctx.fillStyle = LAYOUT.LABEL_COLOR;\r\n\r\n let cursorY = y;\r\n const iconText =\r\n position.icon === 0\r\n ? `Icon: icon mặc định theo file thêu`\r\n : `Icon: ${position.icon}`;\r\n const iconResult = wrapText(\r\n ctx,\r\n iconText,\r\n x,\r\n cursorY,\r\n maxWidth,\r\n iconFontSize + lineGap\r\n );\r\n\r\n // Draw icon image\r\n if (position.icon !== 0) {\r\n const url = getImageUrl(\"icon\", position.icon);\r\n const img = imageRefs.current.get(url);\r\n if (img?.complete && img.naturalHeight > 0) {\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const swatchW = Math.max(1, Math.floor(iconFontSize * ratio));\r\n const iconX =\r\n x +\r\n Math.ceil(iconResult.lastLineWidth) +\r\n LAYOUT.ELEMENT_SPACING * scaleFactor;\r\n const iconY =\r\n iconResult.lastLineY + Math.floor(iconFontSize / 2 - iconFontSize / 2);\r\n ctx.drawImage(img, iconX, iconY, swatchW, iconFontSize);\r\n }\r\n }\r\n\r\n cursorY += iconResult.height;\r\n\r\n // Draw color swatches\r\n if (position.layer_colors?.length) {\r\n const textMaxWidth = Math.max(\r\n LAYOUT.MIN_TEXT_WIDTH * scaleFactor,\r\n maxWidth - LAYOUT.SWATCH_RESERVED_SPACE * scaleFactor\r\n );\r\n const colorResult = wrapText(\r\n ctx,\r\n `Màu chỉ: ${position.layer_colors.join(\", \")}`,\r\n x,\r\n cursorY,\r\n textMaxWidth,\r\n iconFontSize + lineGap\r\n );\r\n\r\n const swatchH = Math.floor(iconFontSize * LAYOUT.SWATCH_HEIGHT_RATIO);\r\n const swatchX =\r\n x +\r\n Math.ceil(colorResult.lastLineWidth) +\r\n LAYOUT.ELEMENT_SPACING * scaleFactor;\r\n const swatchY =\r\n colorResult.lastLineY + Math.floor(iconFontSize / 2 - swatchH / 2);\r\n\r\n drawSwatches(\r\n ctx,\r\n position.layer_colors,\r\n swatchX,\r\n swatchY,\r\n swatchH,\r\n scaleFactor,\r\n imageRefs\r\n );\r\n cursorY += colorResult.height;\r\n }\r\n\r\n ctx.restore();\r\n return cursorY - y;\r\n};\r\n\r\nconst prepareExportCanvas = async (\r\n config: EmbroideryQCConfig,\r\n options: EmbroideryQCImageRenderOptions = {}\r\n): Promise<HTMLCanvasElement | null> => {\r\n const { width = 4200, height = 4800 } = options;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const imageRefs: ImageMapRef = {\r\n current: new Map<string, HTMLImageElement>(),\r\n };\r\n\r\n await preloadFonts(config);\r\n await preloadImages(config, imageRefs);\r\n\r\n renderEmbroideryCanvas(canvas, config, { width, height }, imageRefs);\r\n\r\n if (!canvas.width || !canvas.height) {\r\n return null;\r\n }\r\n\r\n return canvas;\r\n};\r\n\r\nexport const generateEmbroideryQCImageBlob = async (\r\n config: EmbroideryQCConfig,\r\n options: EmbroideryQCImageRenderOptions = {}\r\n): Promise<Blob | null> => {\r\n if (typeof document === \"undefined\") {\r\n throw new Error(\r\n \"generateEmbroideryQCImageBlob requires a browser environment.\"\r\n );\r\n }\r\n\r\n const { mimeType = \"image/png\", quality } = options;\r\n\r\n const canvas = await prepareExportCanvas(config, options);\r\n if (!canvas || typeof canvas.toBlob !== \"function\") {\r\n return null;\r\n }\r\n\r\n const blob = await new Promise<Blob | null>((resolve) => {\r\n canvas.toBlob((result) => resolve(result), mimeType, quality);\r\n });\r\n\r\n return blob;\r\n};\r\n\r\nexport const generateEmbroideryQCImageData = async (\r\n config: EmbroideryQCConfig,\r\n options: EmbroideryQCImageRenderOptions = {}\r\n): Promise<string | null> => {\r\n if (typeof document === \"undefined\") {\r\n throw new Error(\r\n \"generateEmbroideryQCImageData requires a browser environment.\"\r\n );\r\n }\r\n\r\n const { mimeType = \"image/png\", quality } = options;\r\n\r\n const canvas = await prepareExportCanvas(config, options);\r\n if (!canvas) {\r\n return null;\r\n }\r\n\r\n if (mimeType === \"image/png\" || typeof quality === \"undefined\") {\r\n return canvas.toDataURL(mimeType);\r\n }\r\n\r\n return canvas.toDataURL(mimeType, quality);\r\n};\r\n\r\nexport default EmbroideryQCImage;\r\n"],"names":["useState","useRef","useEffect","_jsx"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B"}
|