@lucablockltd/ultimate-packaging 1.0.1 → 1.0.3
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/LICENSE +8 -0
- package/README.md +1 -1019
- package/dist/index.js +404 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +404 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -15
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/dieline/tuck-end-boxes/becf-1010a/generate.ts","../src/statics/modelThemeConfig.ts","../src/statics/autoLayoutThemeConfig.ts","../src/config.ts","../src/components/canvas/baseCanvas/index.tsx","../src/utils/autoLayout/svgPathToPdf.ts","../src/utils/exportDimension.ts","../src/components/dieline/tuck-end-boxes/becf-1010a/index.tsx","../src/components/model/tuck-end-boxes/becf-1010a/index.tsx","../src/components/dieline/tuck-end-boxes/becf-1030a/generate.ts","../src/components/dieline/tuck-end-boxes/becf-1030a/index.tsx","../src/components/model/tuck-end-boxes/becf-1030a/index.tsx","../src/components/dieline/tuck-end-boxes/becf-1040a/generate.ts","../src/components/dieline/tuck-end-boxes/becf-1040a/index.tsx","../src/components/model/tuck-end-boxes/becf-1040a/index.tsx","../src/components/dieline/standard-boxes/becf-11d01/generate.ts","../src/components/dieline/standard-boxes/becf-11d01/index.tsx","../src/components/model/standard-boxes/becf-11d01/index.tsx","../src/utils/autoLayout/rasterize.ts","../src/utils/autoLayout/calculate/shared.ts","../src/utils/autoLayout/calculate/tuck-end-boxes/becf-1010a/index.ts","../src/utils/autoLayout/calculate/tuck-end-boxes/becf-1030a/index.ts","../src/utils/autoLayout/calculate/index.ts","../src/utils/autoLayout/polygonCollision.ts","../src/components/shared/auto-layout/colorbar/index.tsx","../src/components/shared/auto-layout/gripper/index.tsx","../src/components/shared/auto-layout/modifyLayout/index.tsx","../src/components/shared/auto-layout/main.tsx","../src/components/shared/die-line-layout/index.tsx","../src/statics/tuck-end-boxes/becf-1010a/DEFAULT_ATTRIBUTES.ts","../src/statics/tuck-end-boxes/becf-1030a/DEFAULT_ATTRIBUTES.ts","../src/statics/tuck-end-boxes/becf-1040a/DEFAULT_ATTRIBUTES.ts","../src/statics/standard-boxes/becf-11d01/DEFAULT_ATTRIBUTES.ts","../src/statics/modelList.ts"],"names":["forwardRef","useRef","useState","useCallback","useImperativeHandle","useEffect","jsx","useMemo","jsxs","Fragment","MT","ARC_R","GLUE_TAPER_RATIO","verticalCreases","horizontalCreases","line","glueAreaPath","topTuckStructure","topTuckTip","bottomTuckStructure","bottomTuckTip","topDustFlaps","bottomDustFlaps","dustFlapPath","generateOuterContour","offsetContour","contourToPath","generateDimensions","MODEL_ID","UNIT_FACTOR","PX_PER_MM","renderDimension","prepareRotation","computeLayoutForPaper","isHorizontal","renderDieLine","getOpposite","getSpacingRects","getDielineTransform","BASE_COLORS","FADE_LEVELS","fadeToWhite","hexToRgb","ARROW_SIZE","ARROW_SPACING"],"mappings":"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","file":"index.js","sourcesContent":["export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1010a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 8;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap / 3, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.2, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.4, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yBody2),\n tuckFoldCrease(xRear, xSide1, tabWidth, yFold1),\n tuckFoldCrease(xFront, xSide2, tabWidth, yFold2)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xSide1, yBody2, xRear, yBody2),\n ...topTuckStructure(xRear, xSide1, yBody1, yFold1, yTop, tabWidth, tabStep),\n ...topTuckTip(xRear, xSide1, yFold1, yTop, tabStep),\n ...bottomTuckStructure(xFront, xSide2, yBody2, yFold2, yBot, tabWidth, tabStep),\n ...bottomTuckTip(xFront, xSide2, yFold2, yBot, tabStep),\n line(xFront, yBody1, xSide2, yBody1),\n line(xFront - MT, yBody1, xFront, yBody1),\n line(xSide2, yBody1, xSide2 + MT, yBody1),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xSide1, yBody1 - MT, xRear, yBody1 - MT),\n line(xSide1, yBody1, xFront - MT, yBody1),\n line(xEnd, yBody1, xSide2 + MT, yBody1),\n line(xFront, yBody2, xSide1 + MT, yBody2),\n line(xSide2, yBody2, xEnd, yBody2),\n line(xFront, yBody2 + MT, xSide2, yBody2 + MT),\n ];\n}\n\nfunction tuckFoldCrease(\n panelLeft: number, panelRight: number, tabWidth: number, yFold: number\n): string {\n return line(panelLeft + tabWidth, yFold, panelRight - tabWidth, yFold);\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xRear: number, xSide1: number,\n yBody1: number, yFold1: number, _yTop: number,\n tabWidth: number, tabStep: number\n): string[] {\n const yStep = yFold1 + tabStep;\n return [\n line(xRear, yBody1, xRear, yStep),\n line(xRear, yStep, xRear + tabWidth, yStep),\n line(xRear + tabWidth, yStep, xRear + tabWidth, yFold1),\n line(xSide1 - tabWidth, yFold1, xSide1 - tabWidth, yStep),\n line(xSide1 - tabWidth, yStep, xSide1, yStep),\n line(xSide1, yStep, xSide1, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xRear: number, xSide1: number,\n yFold1: number, yTop: number, tabStep: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n const yStart = yFold1 + tabStep;\n return [\n `M${left} ${yStart}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yStart}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xFront: number, xSide2: number,\n yBody2: number, yFold2: number, _yBot: number,\n tabWidth: number, tabStep: number\n): string[] {\n const yStep = yFold2 - tabStep;\n return [\n line(xFront, yBody2, xFront, yStep),\n line(xFront, yStep, xFront + tabWidth, yStep),\n line(xFront + tabWidth, yStep, xFront + tabWidth, yFold2),\n line(xSide2 - tabWidth, yFold2, xSide2 - tabWidth, yStep),\n line(xSide2 - tabWidth, yStep, xSide2, yStep),\n line(xSide2, yStep, xSide2, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xFront: number, xSide2: number,\n yFold2: number, yBot: number, tabStep: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n const yStart = yFold2 - tabStep;\n return [\n `M${left} ${yStart}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yStart}`,\n ];\n}\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: boolean, rightOffset: boolean\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset) {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset) {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, false, false),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap / 3, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.2, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.4, dustFlap - dfCorner);\n const tabStep = 1;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n points.push({ x: xRear, y: yFold1 + tabStep });\n points.push({ x: xRear + MT, y: yFold1 + tabStep });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide1 - MT, y: yFold1 + tabStep });\n points.push({ x: xSide1, y: yFold1 + tabStep });\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - MT - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xFront - MT, y: yBody1 - dfVertical });\n points.push({ x: xFront - MT, y: yBody1 });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + MT, y: yBody1 });\n points.push({ x: xSide2 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xSide2, y: yFold2 - tabStep });\n points.push({ x: xSide2 - MT, y: yFold2 - tabStep });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xFront + MT, y: yFold2 - tabStep });\n points.push({ x: xFront, y: yFold2 - tabStep });\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide1 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide1 + MT, y: yBody2 });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide1,\n y1: yTop,\n x2: xSide1,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yFold1,\n x2: xSide1,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -14,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","export interface ModelThemeConfig {\n colorBackground: string;\n colorDieLine: string;\n colorFoldLine: string;\n}\n\nexport const MODEL_THEME_CONFIG: ModelThemeConfig = {\n colorBackground: \"#FAFAFA\",\n colorDieLine: \"#FF0000\",\n colorFoldLine: \"#00FF00\",\n};\n","export interface AutoLayoutThemeConfig {\n colorBackground: string;\n colorPaperFill: string;\n colorPaperStroke: string;\n colorGriper: string;\n colorSpacing: string;\n colorDistanceLine: string;\n colorDieLine: string;\n colorFoldLine: string;\n colorLabel: string;\n}\n\nexport const AUTO_LAYOUT_THEME_CONFIG: AutoLayoutThemeConfig = {\n colorBackground: \"#F5F5F5\",\n colorPaperFill: \"#FFFFFF\",\n colorPaperStroke: \"#999999\",\n colorGriper: \"#228B22\",\n colorSpacing: \"#f54278\",\n colorDistanceLine: \"#0088FF\",\n colorDieLine: \"#FF0000\",\n colorFoldLine: \"#00FF00\",\n colorLabel: \"#333333\",\n};\n","import {\n MODEL_THEME_CONFIG,\n type ModelThemeConfig,\n} from \"./statics/modelThemeConfig\";\nimport {\n AUTO_LAYOUT_THEME_CONFIG,\n type AutoLayoutThemeConfig,\n} from \"./statics/autoLayoutThemeConfig\";\n\nexport interface UltimatePackagingConfig {\n modelTheme?: Partial<ModelThemeConfig>;\n autoLayoutTheme?: Partial<AutoLayoutThemeConfig>;\n}\n\nlet globalConfig: UltimatePackagingConfig = {};\n\nexport function configurePackaging(config: UltimatePackagingConfig): void {\n globalConfig = config;\n}\n\nexport function getModelTheme(): ModelThemeConfig {\n return { ...MODEL_THEME_CONFIG, ...globalConfig.modelTheme };\n}\n\nexport function getAutoLayoutTheme(): AutoLayoutThemeConfig {\n return { ...AUTO_LAYOUT_THEME_CONFIG, ...globalConfig.autoLayoutTheme };\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n type CSSProperties,\n type PointerEvent as ReactPointerEvent,\n} from \"react\";\n\nexport interface BaseCanvasViewBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface BaseCanvasProps {\n children: ReactNode;\n viewBox: BaseCanvasViewBox;\n style?: CSSProperties;\n className?: string;\n backgroundColor?: string;\n minZoom?: number;\n maxZoom?: number;\n fitPadding?: number;\n}\n\nexport interface BaseCanvasRef {\n resetView: () => void;\n fitView: () => void;\n getSvgElement: () => SVGSVGElement | null;\n}\n\nconst DEFAULT_MIN_ZOOM = 0.2;\nconst DEFAULT_MAX_ZOOM = 10;\nconst DEFAULT_FIT_PADDING = 0.9;\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nexport const BaseCanvas = forwardRef<BaseCanvasRef, BaseCanvasProps>(\n (\n {\n children,\n viewBox: initialViewBox,\n style,\n className,\n backgroundColor,\n minZoom = DEFAULT_MIN_ZOOM,\n maxZoom = DEFAULT_MAX_ZOOM,\n fitPadding = DEFAULT_FIT_PADDING,\n },\n ref\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const dragRef = useRef<{ pointerId: number; x: number; y: number } | null>(null);\n const hasInitialFit = useRef(false);\n\n const [zoom, setZoom] = useState(1);\n const [panX, setPanX] = useState(0);\n const [panY, setPanY] = useState(0);\n const [dragging, setDragging] = useState(false);\n\n const vbWidth = initialViewBox.width / zoom;\n const vbHeight = initialViewBox.height / zoom;\n const centerX = initialViewBox.x + initialViewBox.width / 2;\n const centerY = initialViewBox.y + initialViewBox.height / 2;\n const vbX = centerX - vbWidth / 2 - panX;\n const vbY = centerY - vbHeight / 2 - panY;\n\n const fitView = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n setZoom(clamp(fitPadding, minZoom, maxZoom));\n setPanX(0);\n setPanY(0);\n }, [initialViewBox.width, initialViewBox.height, fitPadding, minZoom, maxZoom]);\n\n const resetView = useCallback(() => {\n fitView();\n }, [fitView]);\n\n useImperativeHandle(ref, () => ({\n resetView,\n fitView,\n getSvgElement: () => svgRef.current,\n }), [resetView, fitView]);\n\n useEffect(() => {\n if (hasInitialFit.current) return;\n hasInitialFit.current = true;\n fitView();\n }, [fitView]);\n\n useEffect(() => {\n if (!hasInitialFit.current) return;\n fitView();\n }, [initialViewBox.width, initialViewBox.height, fitView]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const rect = svg.getBoundingClientRect();\n const cursorXRatio = (e.clientX - rect.left) / rect.width;\n const cursorYRatio = (e.clientY - rect.top) / rect.height;\n\n const zoomFactor = Math.exp(-e.deltaY * 0.002);\n\n setZoom((prevZoom) => {\n const nextZoom = clamp(prevZoom * zoomFactor, minZoom, maxZoom);\n const prevW = initialViewBox.width / prevZoom;\n const prevH = initialViewBox.height / prevZoom;\n const nextW = initialViewBox.width / nextZoom;\n const nextH = initialViewBox.height / nextZoom;\n\n const dx = (prevW - nextW) * (cursorXRatio - 0.5);\n const dy = (prevH - nextH) * (cursorYRatio - 0.5);\n\n setPanX((prev) => prev + dx);\n setPanY((prev) => prev + dy);\n\n return nextZoom;\n });\n };\n\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }, [initialViewBox.width, initialViewBox.height, minZoom, maxZoom]);\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n dragRef.current = { pointerId: e.pointerId, x: e.clientX, y: e.clientY };\n setDragging(true);\n e.currentTarget.setPointerCapture(e.pointerId);\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragRef.current || dragRef.current.pointerId !== e.pointerId) return;\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const rect = svg.getBoundingClientRect();\n const scaleX = vbWidth / rect.width;\n const scaleY = vbHeight / rect.height;\n\n const dx = (e.clientX - dragRef.current.x) * scaleX;\n const dy = (e.clientY - dragRef.current.y) * scaleY;\n\n setPanX((prev) => prev + dx);\n setPanY((prev) => prev + dy);\n\n dragRef.current = { pointerId: e.pointerId, x: e.clientX, y: e.clientY };\n };\n\n const onPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragRef.current || dragRef.current.pointerId !== e.pointerId) return;\n dragRef.current = null;\n setDragging(false);\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId);\n }\n };\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n cursor: dragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n ...style,\n }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n >\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbWidth} ${vbHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n backgroundColor,\n }}\n >\n {children}\n </svg>\n </div>\n );\n }\n);\n","export interface PdfPathCommand {\n type: \"M\" | \"L\" | \"C\" | \"Q\" | \"Z\";\n x?: number;\n y?: number;\n x1?: number;\n y1?: number;\n x2?: number;\n y2?: number;\n}\n\nfunction arcToLines(\n cx: number, cy: number,\n rx: number, ry: number,\n startAngle: number, endAngle: number,\n steps: number\n): { x: number; y: number }[] {\n const pts: { x: number; y: number }[] = [];\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const angle = startAngle + (endAngle - startAngle) * t;\n pts.push({\n x: cx + rx * Math.cos(angle),\n y: cy + ry * Math.sin(angle),\n });\n }\n return pts;\n}\n\nfunction svgArcToCenterParam(\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n fA: number, fS: number,\n x2: number, y2: number\n): { cx: number; cy: number; startAngle: number; endAngle: number } {\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n const dx2 = (x1 - x2) / 2;\n const dy2 = (y1 - y2) / 2;\n\n const x1p = cosPhi * dx2 + sinPhi * dy2;\n const y1p = -sinPhi * dx2 + cosPhi * dy2;\n\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n let lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const s = Math.sqrt(lambda);\n rx *= s;\n ry *= s;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const root = Math.sqrt(sq) * (fA === fS ? -1 : 1);\n\n const cxp = root * (rx * y1p) / ry;\n const cyp = root * -(ry * x1p) / rx;\n\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n const startAngle = Math.atan2((y1p - cyp) / ry, (x1p - cxp) / rx);\n let dTheta = Math.atan2((-y1p - cyp) / ry, (-x1p - cxp) / rx) - startAngle;\n\n if (fS === 0 && dTheta > 0) dTheta -= 2 * Math.PI;\n if (fS === 1 && dTheta < 0) dTheta += 2 * Math.PI;\n\n return { cx, cy, startAngle, endAngle: startAngle + dTheta };\n}\n\nexport function parseSvgPath(d: string): PdfPathCommand[] {\n const commands: PdfPathCommand[] = [];\n const tokens = d.match(/[MmLlHhVvCcQqAaZz]|[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/g);\n if (!tokens) return commands;\n\n let i = 0;\n let curX = 0;\n let curY = 0;\n let startX = 0;\n let startY = 0;\n let lastCommand = \"\";\n\n const num = (): number => parseFloat(tokens[i++]);\n\n while (i < tokens.length) {\n const token = tokens[i];\n let cmd: string;\n\n if (/[MmLlHhVvCcQqAaZz]/.test(token)) {\n cmd = token;\n i++;\n } else {\n cmd = lastCommand;\n }\n\n switch (cmd) {\n case \"M\": {\n const x = num();\n const y = num();\n commands.push({ type: \"M\", x, y });\n curX = x;\n curY = y;\n startX = x;\n startY = y;\n lastCommand = \"L\";\n break;\n }\n case \"m\": {\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"M\", x, y });\n curX = x;\n curY = y;\n startX = x;\n startY = y;\n lastCommand = \"l\";\n break;\n }\n case \"L\": {\n const x = num();\n const y = num();\n commands.push({ type: \"L\", x, y });\n curX = x;\n curY = y;\n lastCommand = \"L\";\n break;\n }\n case \"l\": {\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"L\", x, y });\n curX = x;\n curY = y;\n lastCommand = \"l\";\n break;\n }\n case \"H\": {\n const x = num();\n commands.push({ type: \"L\", x, y: curY });\n curX = x;\n lastCommand = \"H\";\n break;\n }\n case \"h\": {\n const x = curX + num();\n commands.push({ type: \"L\", x, y: curY });\n curX = x;\n lastCommand = \"h\";\n break;\n }\n case \"V\": {\n const y = num();\n commands.push({ type: \"L\", x: curX, y });\n curY = y;\n lastCommand = \"V\";\n break;\n }\n case \"v\": {\n const y = curY + num();\n commands.push({ type: \"L\", x: curX, y });\n curY = y;\n lastCommand = \"v\";\n break;\n }\n case \"C\": {\n const x1 = num();\n const y1 = num();\n const x2 = num();\n const y2 = num();\n const x = num();\n const y = num();\n commands.push({ type: \"C\", x1, y1, x2, y2, x, y });\n curX = x;\n curY = y;\n lastCommand = \"C\";\n break;\n }\n case \"c\": {\n const x1 = curX + num();\n const y1 = curY + num();\n const x2 = curX + num();\n const y2 = curY + num();\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"C\", x1, y1, x2, y2, x, y });\n curX = x;\n curY = y;\n lastCommand = \"c\";\n break;\n }\n case \"Q\": {\n const x1 = num();\n const y1 = num();\n const x = num();\n const y = num();\n commands.push({ type: \"Q\", x1, y1, x, y });\n curX = x;\n curY = y;\n lastCommand = \"Q\";\n break;\n }\n case \"q\": {\n const x1 = curX + num();\n const y1 = curY + num();\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"Q\", x1, y1, x, y });\n curX = x;\n curY = y;\n lastCommand = \"q\";\n break;\n }\n case \"A\":\n case \"a\": {\n const rx = Math.abs(num());\n const ry = Math.abs(num());\n const rotation = num() * Math.PI / 180;\n const fA = num();\n const fS = num();\n const rawX = num();\n const rawY = num();\n const ex = cmd === \"a\" ? curX + rawX : rawX;\n const ey = cmd === \"a\" ? curY + rawY : rawY;\n\n if (rx === 0 || ry === 0) {\n commands.push({ type: \"L\", x: ex, y: ey });\n } else {\n const { cx, cy, startAngle, endAngle } = svgArcToCenterParam(\n curX, curY, rx, ry, rotation, fA, fS, ex, ey\n );\n const pts = arcToLines(cx, cy, rx, ry, startAngle, endAngle, 16);\n for (let j = 1; j < pts.length; j++) {\n commands.push({ type: \"L\", x: pts[j].x, y: pts[j].y });\n }\n }\n\n curX = ex;\n curY = ey;\n lastCommand = cmd;\n break;\n }\n case \"Z\":\n case \"z\": {\n commands.push({ type: \"Z\" });\n curX = startX;\n curY = startY;\n lastCommand = \"Z\";\n break;\n }\n default:\n i++;\n break;\n }\n }\n\n return commands;\n}\n\nexport function drawSvgPathToPdf(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n offsetX: number,\n offsetY: number\n): void {\n const commands = parseSvgPath(d);\n let startX = 0;\n let startY = 0;\n let curX = 0;\n let curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\":\n curX = cmd.x! + offsetX;\n curY = cmd.y! + offsetY;\n startX = curX;\n startY = curY;\n break;\n case \"L\": {\n const nx = cmd.x! + offsetX;\n const ny = cmd.y! + offsetY;\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const x0 = curX;\n const y0 = curY;\n const x1 = cmd.x1! + offsetX;\n const y1 = cmd.y1! + offsetY;\n const x2 = cmd.x2! + offsetX;\n const y2 = cmd.y2! + offsetY;\n const x3 = cmd.x! + offsetX;\n const y3 = cmd.y! + offsetY;\n const steps = 20;\n let prevX = x0;\n let prevY = y0;\n for (let si = 1; si <= steps; si++) {\n const t = si / steps;\n const mt = 1 - t;\n const nx =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n const ny =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = x3;\n curY = y3;\n break;\n }\n case \"Q\": {\n const qx0 = curX;\n const qy0 = curY;\n const qx1 = cmd.x1! + offsetX;\n const qy1 = cmd.y1! + offsetY;\n const qx2 = cmd.x! + offsetX;\n const qy2 = cmd.y! + offsetY;\n const qSteps = 16;\n let qPrevX = qx0;\n let qPrevY = qy0;\n for (let si = 1; si <= qSteps; si++) {\n const t = si / qSteps;\n const mt = 1 - t;\n const nx = mt * mt * qx0 + 2 * mt * t * qx1 + t * t * qx2;\n const ny = mt * mt * qy0 + 2 * mt * t * qy1 + t * t * qy2;\n doc.line(qPrevX, qPrevY, nx, ny);\n qPrevX = nx;\n qPrevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n","import { parseSvgPath } from \"./autoLayout/svgPathToPdf\";\nimport type { ModelThemeConfig } from \"../statics/modelThemeConfig\";\n\ninterface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\ninterface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport interface ExportDimensionParams {\n modelId: string;\n dieline: DielinePaths;\n dimensions: DimensionLine[];\n attributes: Record<string, number>;\n unit: string;\n factor: number;\n theme: ModelThemeConfig;\n}\n\nconst A4_W = 210;\nconst A4_H = 297;\nconst MARGIN = 10;\nconst FOOTER_H = 40;\nconst DIM_PADDING = 15;\n\nfunction camelToCapitalize(str: string): string {\n return str\n .replace(/([A-Z])/g, \" $1\")\n .replace(/^./, (s) => s.toUpperCase());\n}\n\nfunction hexToRgb(hex: string) {\n return {\n r: parseInt(hex.slice(1, 3), 16),\n g: parseInt(hex.slice(3, 5), 16),\n b: parseInt(hex.slice(5, 7), 16),\n };\n}\n\nfunction drawScaledPath(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n scale: number,\n ox: number,\n oy: number,\n) {\n const commands = parseSvgPath(d);\n let startX = 0;\n let startY = 0;\n let curX = 0;\n let curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\":\n curX = cmd.x! * scale + ox;\n curY = cmd.y! * scale + oy;\n startX = curX;\n startY = curY;\n break;\n case \"L\": {\n const nx = cmd.x! * scale + ox;\n const ny = cmd.y! * scale + oy;\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const x0 = curX;\n const y0 = curY;\n const x1 = cmd.x1! * scale + ox;\n const y1 = cmd.y1! * scale + oy;\n const x2 = cmd.x2! * scale + ox;\n const y2 = cmd.y2! * scale + oy;\n const x3 = cmd.x! * scale + ox;\n const y3 = cmd.y! * scale + oy;\n const steps = 20;\n let prevX = x0;\n let prevY = y0;\n for (let si = 1; si <= steps; si++) {\n const t = si / steps;\n const mt = 1 - t;\n const nx =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n const ny =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = x3;\n curY = y3;\n break;\n }\n case \"Q\": {\n const qx0 = curX;\n const qy0 = curY;\n const qx1 = cmd.x1! * scale + ox;\n const qy1 = cmd.y1! * scale + oy;\n const qx2 = cmd.x! * scale + ox;\n const qy2 = cmd.y! * scale + oy;\n const qSteps = 16;\n let qPrevX = qx0;\n let qPrevY = qy0;\n for (let si = 1; si <= qSteps; si++) {\n const t = si / qSteps;\n const mt = 1 - t;\n const nx = mt * mt * qx0 + 2 * mt * t * qx1 + t * t * qx2;\n const ny = mt * mt * qy0 + 2 * mt * t * qy1 + t * t * qy2;\n doc.line(qPrevX, qPrevY, nx, ny);\n qPrevX = nx;\n qPrevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n\nexport async function exportDimensionPdf(\n params: ExportDimensionParams,\n): Promise<Blob> {\n const { modelId, dieline, dimensions, attributes, unit, factor, theme } =\n params;\n\n const availW = A4_W - MARGIN * 2;\n const availH = A4_H - MARGIN - FOOTER_H - MARGIN;\n\n const { width: vw, height: vh } = dieline.viewBox;\n const totalDieW = vw + DIM_PADDING * 2;\n const totalDieH = vh + DIM_PADDING * 2;\n\n const scale = Math.min(availW / totalDieW, availH / totalDieH);\n\n const { jsPDF } = await import(\"jspdf\");\n const doc = new jsPDF({\n orientation: \"portrait\",\n unit: \"mm\",\n format: \"a4\",\n });\n\n const scaledW = totalDieW * scale;\n const scaledH = totalDieH * scale;\n const ox = MARGIN + (availW - scaledW) / 2 + DIM_PADDING * scale;\n const oy = MARGIN + (availH - scaledH) / 2 + DIM_PADDING * scale;\n\n const creaseRgb = hexToRgb(theme.colorFoldLine);\n doc.setDrawColor(creaseRgb.r, creaseRgb.g, creaseRgb.b);\n doc.setLineWidth(0.3);\n for (const d of dieline.crease) {\n drawScaledPath(doc, d, scale, ox, oy);\n }\n\n const cutRgb = hexToRgb(theme.colorDieLine);\n doc.setDrawColor(cutRgb.r, cutRgb.g, cutRgb.b);\n doc.setLineWidth(0.3);\n for (const d of dieline.cut) {\n drawScaledPath(doc, d, scale, ox, oy);\n }\n\n const tick = 1.5 * scale;\n\n for (const dim of dimensions) {\n if (dim.orientation === \"horizontal\") {\n const y = (dim.y1 + dim.offset) * scale + oy;\n const x1 = dim.x1 * scale + ox;\n const x2 = dim.x2 * scale + ox;\n\n doc.setDrawColor(0, 0, 0);\n doc.setLineWidth(0.2 * scale);\n doc.line(x1, y, x2, y);\n\n doc.setLineWidth(0.3 * scale);\n doc.line(x1, y - tick, x1, y + tick);\n doc.line(x2, y - tick, x2, y + tick);\n\n const midX = (x1 + x2) / 2;\n doc.setFontSize(3.5 * scale * 2.83);\n doc.setTextColor(0, 0, 0);\n doc.text(dim.label, midX, y - 1.5 * scale, { align: \"center\" });\n } else {\n const x = (dim.x1 + dim.offset) * scale + ox;\n const y1 = dim.y1 * scale + oy;\n const y2 = dim.y2 * scale + oy;\n\n doc.setDrawColor(0, 0, 0);\n doc.setLineWidth(0.2 * scale);\n doc.line(x, y1, x, y2);\n\n doc.setLineWidth(0.3 * scale);\n doc.line(x - tick, y1, x + tick, y1);\n doc.line(x - tick, y2, x + tick, y2);\n\n const midY = (y1 + y2) / 2;\n const fontSize = 3.5 * scale * 2.83;\n doc.setFontSize(fontSize);\n doc.setTextColor(0, 0, 0);\n const textX = x - 1.5 * scale;\n const tw = doc.getTextWidth(dim.label);\n doc.text(dim.label, textX, midY + tw / 2, { angle: 90 });\n }\n }\n\n const footerY = A4_H - FOOTER_H;\n const halfW = (A4_W - MARGIN * 2) / 2;\n const centerX = MARGIN + halfW;\n\n doc.setDrawColor(180, 180, 180);\n doc.setLineWidth(0.3);\n doc.line(MARGIN, footerY, A4_W - MARGIN, footerY);\n doc.line(centerX, footerY, centerX, A4_H - MARGIN);\n\n doc.setTextColor(0, 0, 0);\n doc.setFontSize(9);\n doc.text(\"Luca Block Co.,Ltd.\", MARGIN + 3, footerY + 6);\n doc.text(\n `Cartons-Tuck end boxes-${modelId}`,\n A4_W - MARGIN - 3,\n footerY + 6,\n { align: \"right\" },\n );\n\n const attrEntries = Object.entries(attributes);\n const col1X = MARGIN + 3;\n const col2X = MARGIN + 3 + halfW / 2;\n const attrStartY = footerY + 14;\n const lineH = 5;\n\n doc.setFontSize(7);\n const half = Math.ceil(attrEntries.length / 2);\n for (let i = 0; i < half; i++) {\n const [key, val] = attrEntries[i];\n doc.text(\n `${camelToCapitalize(key)}: ${(val * factor).toFixed(1)} ${unit}`,\n col1X,\n attrStartY + i * lineH,\n );\n\n const j = i + half;\n if (j < attrEntries.length) {\n const [key2, val2] = attrEntries[j];\n doc.text(\n `${camelToCapitalize(key2)}: ${(val2 * factor).toFixed(1)} ${unit}`,\n col2X,\n attrStartY + i * lineH,\n );\n }\n }\n\n const arrayBuffer = doc.output(\"arraybuffer\");\n return new Blob([arrayBuffer], { type: \"application/pdf\" });\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1010a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1010a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1010A\";\n\nexport interface DieLineBecf1010aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1010aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={3.5}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={3.5}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1010A = forwardRef<DieLineBecf1010aRef, DieLineBecf1010aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1010a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1010aProps extends DieLineBecf1010aProps {}\n\nexport interface CanvasBecf1010aRef extends DieLineBecf1010aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1010A = forwardRef<CanvasBecf1010aRef, CanvasBecf1010aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1010aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1010a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1010A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1010A,\n DIE_LINE_BECF_1010A,\n CanvasBecf1010aRef,\n DieLineBecf1010aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nexport type { CanvasBecf1010aRef as ModelBecf1010aRef } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\n\nexport interface ModelBecf1010aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1010A = forwardRef<CanvasBecf1010aRef | DieLineBecf1010aRef, ModelBecf1010aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1010A ref={ref as React.Ref<CanvasBecf1010aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1010A ref={ref as React.Ref<DieLineBecf1010aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1030a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 9;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap * 0.2, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.12, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.28, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yBody2, tabWidth, yFold1, yFold2, tabStep)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xFront, yBody1, xSide2, yBody1),\n line(xFront, yBody2, xSide2, yBody2),\n line(xFront - MT, yBody1, xFront, yBody1),\n line(xSide2, yBody1, xSide2 + MT, yBody1),\n line(xFront - MT, yBody2, xFront, yBody2),\n line(xSide2, yBody2, xSide2 + MT, yBody2),\n ...topTuckStructure(xRear, xSide1, yBody1, yFold1, tabWidth, tabStep),\n ...topTuckTip(xRear, xSide1, yFold1, yTop),\n ...bottomTuckStructure(xRear, xSide1, yBody2, yFold2, tabWidth, tabStep),\n ...bottomTuckTip(xRear, xSide1, yFold2, yBot),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xRear: number, xSide1: number, _xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number,\n tabWidth: number, yFold1: number, yFold2: number, tabStep: number\n): string[] {\n return [\n line(xSide1, yBody1 - MT, xRear, yBody1 - MT),\n line(xSide1, yBody2 + MT, xRear, yBody2 + MT),\n line(xSide1, yBody1, _xFront - MT, yBody1),\n line(xSide1, yBody2, _xFront - MT, yBody2),\n line(xEnd, yBody1, xSide2 + MT, yBody1),\n line(xEnd, yBody2, xSide2 + MT, yBody2),\n line(xRear + tabWidth, yFold1 + tabStep, xSide1 - tabWidth, yFold1 + tabStep),\n line(xRear + tabWidth, yFold2 - tabStep, xSide1 - tabWidth, yFold2 - tabStep),\n ];\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xRear: number, xSide1: number,\n yBody1: number, yFold1: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yFold1),\n line(xRear, yFold1, xRear + tabWidth, yFold1),\n line(xRear + tabWidth, yFold1, xRear + tabWidth, yFold1 + tabStep),\n line(xSide1 - tabWidth, yFold1 + tabStep, xSide1 - tabWidth, yFold1),\n line(xSide1 - tabWidth, yFold1, xSide1, yFold1),\n line(xSide1, yFold1, xSide1, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xRear: number, xSide1: number,\n yFold1: number, yTop: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n return [\n `M${left} ${yFold1}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yFold1}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xRear: number, xSide1: number,\n yBody2: number, yFold2: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xRear, yBody2, xRear, yFold2),\n line(xRear, yFold2, xRear + tabWidth, yFold2),\n line(xRear + tabWidth, yFold2, xRear + tabWidth, yFold2 - tabStep),\n line(xSide1 - tabWidth, yFold2 - tabStep, xSide1 - tabWidth, yFold2),\n line(xSide1 - tabWidth, yFold2, xSide1, yFold2),\n line(xSide1, yFold2, xSide1, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xRear: number, xSide1: number,\n yFold2: number, yBot: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n return [\n `M${left} ${yFold2}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yFold2}`,\n ];\n}\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: boolean, rightOffset: boolean\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset) {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset) {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap * 0.2, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.12, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.28, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n points.push({ x: xRear, y: yFold1 });\n points.push({ x: xRear + MT, y: yFold1 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide1 - MT, y: yFold1 });\n points.push({ x: xSide1, y: yFold1 });\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - MT - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xFront - MT, y: yBody1 - dfVertical });\n points.push({ x: xFront - MT, y: yBody1 });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + MT, y: yBody1 });\n points.push({ x: xSide2 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide2 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide2 + MT, y: yBody2 });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - MT, y: yBody2 });\n points.push({ x: xFront - MT, y: yBody2 + dfVertical });\n points.push({ x: xFront - MT - dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xSide1, y: yFold2 });\n points.push({ x: xSide1 - MT, y: yFold2 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xRear + MT, y: yFold2 });\n points.push({ x: xRear, y: yFold2 });\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide1,\n y1: yTop,\n x2: xSide1,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yFold1,\n x2: xSide1,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -14,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xSide1 + width,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1030a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1030a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1030A\";\n\nexport interface DieLineBecf1030aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1030aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1030A = forwardRef<DieLineBecf1030aRef, DieLineBecf1030aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1030a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1030aProps extends DieLineBecf1030aProps {}\n\nexport interface CanvasBecf1030aRef extends DieLineBecf1030aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1030A = forwardRef<CanvasBecf1030aRef, CanvasBecf1030aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1030aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1030a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1030A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1030A,\n DIE_LINE_BECF_1030A,\n CanvasBecf1030aRef,\n DieLineBecf1030aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nexport type { CanvasBecf1030aRef as ModelBecf1030aRef } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\n\nexport interface ModelBecf1030aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1030A = forwardRef<CanvasBecf1030aRef | DieLineBecf1030aRef, ModelBecf1030aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1030A ref={ref as React.Ref<CanvasBecf1030aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1030A ref={ref as React.Ref<DieLineBecf1030aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1040a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 7;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap / 6, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.1, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap / 6, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xSide1, xFront, xSide2, xEnd, yBody1, yBody2, tabWidth, yFold1, yFold2, tabStep)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xSide1, yBody1, xRear, yBody1),\n line(xSide1, yBody2, xRear, yBody2),\n line(xSide1, yBody1, xSide1 + MT, yBody1),\n line(xSide1, yBody2, xSide1 + MT, yBody2),\n ...topTuckStructure(xFront, xSide2, yBody1, yFold1, tabWidth, tabStep),\n ...topTuckTip(xFront, xSide2, yFold1, 0),\n ...bottomTuckStructure(xFront, xSide2, yBody2, yFold2, tabWidth, tabStep),\n ...bottomTuckTip(xFront, xSide2, yFold2, yBot),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number,\n tabWidth: number, yFold1: number, yFold2: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody1, xSide1 + MT, yBody1),\n line(xFront, yBody2, xSide1 + MT, yBody2),\n line(xFront, yBody1 - MT, xSide2, yBody1 - MT),\n line(xFront, yBody2 + MT, xSide2, yBody2 + MT),\n line(xSide2, yBody1, xEnd, yBody1),\n line(xSide2, yBody2, xEnd, yBody2),\n line(xFront + tabWidth, yFold1 + tabStep, xSide2 - tabWidth, yFold1 + tabStep),\n line(xFront + tabWidth, yFold2 - tabStep, xSide2 - tabWidth, yFold2 - tabStep),\n ];\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xFront: number, xSide2: number,\n yBody1: number, yFold1: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody1, xFront, yFold1),\n line(xFront, yFold1, xFront + tabWidth, yFold1),\n line(xFront + tabWidth, yFold1, xFront + tabWidth, yFold1 + tabStep),\n line(xSide2 - tabWidth, yFold1 + tabStep, xSide2 - tabWidth, yFold1),\n line(xSide2 - tabWidth, yFold1, xSide2, yFold1),\n line(xSide2, yFold1, xSide2, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xFront: number, xSide2: number,\n yFold1: number, yTop: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n return [\n `M${left} ${yFold1}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yFold1}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xFront: number, xSide2: number,\n yBody2: number, yFold2: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody2, xFront, yFold2),\n line(xFront, yFold2, xFront + tabWidth, yFold2),\n line(xFront + tabWidth, yFold2, xFront + tabWidth, yFold2 - tabStep),\n line(xSide2 - tabWidth, yFold2 - tabStep, xSide2 - tabWidth, yFold2),\n line(xSide2 - tabWidth, yFold2, xSide2, yFold2),\n line(xSide2, yFold2, xSide2, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xFront: number, xSide2: number,\n yFold2: number, yBot: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n return [\n `M${left} ${yFold2}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yFold2}`,\n ];\n}\n\ntype DustFlapOffset = \"none\" | \"mt\" | \"edge\";\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: DustFlapOffset, rightOffset: DustFlapOffset\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset === \"mt\") {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else if (leftOffset === \"edge\") {\n d += ` L${panelLeft} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset === \"mt\") {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else if (rightOffset === \"edge\") {\n d += ` L${panelRight - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, \"mt\", \"none\"),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, \"none\", \"edge\"),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, \"mt\", \"none\"),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, \"none\", \"edge\"),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap / 6, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.1, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap / 6, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + MT, y: yBody1 });\n points.push({ x: xSide1 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xFront, y: yFold1 });\n points.push({ x: xFront + MT, y: yFold1 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide2 - MT, y: yFold1 });\n points.push({ x: xSide2, y: yFold1 });\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xEnd, y: yBody1 - dfVertical });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd, y: yBody2 + dfVertical });\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xSide2, y: yFold2 });\n points.push({ x: xSide2 - MT, y: yFold2 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xFront + MT, y: yFold2 });\n points.push({ x: xFront, y: yFold2 });\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide1 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide1 + MT, y: yBody2 });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide2,\n y1: yTop,\n x2: xSide2,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide2,\n y1: yFold1,\n x2: xSide2,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1040a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1040a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1040A\";\n\nexport interface DieLineBecf1040aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1040aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1040A = forwardRef<DieLineBecf1040aRef, DieLineBecf1040aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1040a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1040aProps extends DieLineBecf1040aProps {}\n\nexport interface CanvasBecf1040aRef extends DieLineBecf1040aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1040A = forwardRef<CanvasBecf1040aRef, CanvasBecf1040aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1040aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1040a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1040A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1040A,\n DIE_LINE_BECF_1040A,\n CanvasBecf1040aRef,\n DieLineBecf1040aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nexport type { CanvasBecf1040aRef as ModelBecf1040aRef } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\n\nexport interface ModelBecf1040aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1040A = forwardRef<CanvasBecf1040aRef | DieLineBecf1040aRef, ModelBecf1040aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1040A ref={ref as React.Ref<CanvasBecf1040aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1040A ref={ref as React.Ref<DieLineBecf1040aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface StandardBoxAttributes {\n length: number;\n width: number;\n height: number;\n flapHeight: number;\n glueArea: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\nconst FLAP_INSET = 2;\n\nexport function generateBecf11d01(attr: StandardBoxAttributes): DielinePaths {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n const yBot = 2 * flapHeight + height;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n // ── Vertical creases (panel boundaries through body) ──\n crease.push(\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n );\n\n // ── Horizontal creases at top (yBody1) ──\n // Rear dust flap crease (with MT offset inward)\n crease.push(line(xRear + FLAP_INSET, yBody1 + MT, xSide1 - FLAP_INSET, yBody1 + MT));\n // Side1 full-width flap crease\n crease.push(line(xSide1, yBody1, xFront, yBody1));\n // Front dust flap crease (with MT offset inward)\n crease.push(line(xFront + FLAP_INSET, yBody1 + MT, xSide2 - FLAP_INSET, yBody1 + MT));\n // Side2 full-width flap crease\n crease.push(line(xSide2, yBody1, xEnd, yBody1));\n\n // ── Horizontal creases at bottom (yBody2) ──\n crease.push(line(xRear + FLAP_INSET, yBody2 - MT, xSide1 - FLAP_INSET, yBody2 - MT));\n crease.push(line(xSide1, yBody2, xFront, yBody2));\n crease.push(line(xFront + FLAP_INSET, yBody2 - MT, xSide2 - FLAP_INSET, yBody2 - MT));\n crease.push(line(xSide2, yBody2, xEnd, yBody2));\n\n // ── Right edge (body) ──\n cut.push(line(xEnd, yBody1, xEnd, yBody2));\n\n // ── Glue area (trapezoid on left) ──\n cut.push(glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea));\n\n // ── Top flaps ──\n cut.push(...topFlaps(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yTop));\n // ── Bottom flaps ──\n cut.push(...bottomFlaps(xRear, xSide1, xFront, xSide2, xEnd, yBody2, yBot));\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topFlaps(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yTop: number\n): string[] {\n const paths: string[] = [];\n\n // Rear dust flap (inset)\n const rL = xRear + FLAP_INSET;\n const rR = xSide1 - FLAP_INSET;\n paths.push(\n line(rL, yBody1, rL, yTop),\n line(rL, yTop, rR, yTop),\n line(rR, yTop, rR, yBody1),\n );\n // Base connectors for rear dust flap\n paths.push(\n line(xRear, yBody1, rL, yBody1),\n line(rR, yBody1, xSide1, yBody1),\n );\n\n // Side1 full-width flap\n paths.push(\n line(xSide1, yBody1, xSide1, yTop),\n line(xSide1, yTop, xFront, yTop),\n line(xFront, yTop, xFront, yBody1),\n );\n\n // Front dust flap (inset)\n const fL = xFront + FLAP_INSET;\n const fR = xSide2 - FLAP_INSET;\n paths.push(\n line(fL, yBody1, fL, yTop),\n line(fL, yTop, fR, yTop),\n line(fR, yTop, fR, yBody1),\n );\n // Base connectors for front dust flap\n paths.push(\n line(xFront, yBody1, fL, yBody1),\n line(fR, yBody1, xSide2, yBody1),\n );\n\n // Side2 full-width flap\n paths.push(\n line(xSide2, yBody1, xSide2, yTop),\n line(xSide2, yTop, xEnd, yTop),\n line(xEnd, yTop, xEnd, yBody1),\n );\n\n return paths;\n}\n\nfunction bottomFlaps(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, yBot: number\n): string[] {\n const paths: string[] = [];\n\n // Rear dust flap (inset)\n const rL = xRear + FLAP_INSET;\n const rR = xSide1 - FLAP_INSET;\n paths.push(\n line(rL, yBody2, rL, yBot),\n line(rL, yBot, rR, yBot),\n line(rR, yBot, rR, yBody2),\n );\n paths.push(\n line(xRear, yBody2, rL, yBody2),\n line(rR, yBody2, xSide1, yBody2),\n );\n\n // Side1 full-width flap\n paths.push(\n line(xSide1, yBody2, xSide1, yBot),\n line(xSide1, yBot, xFront, yBot),\n line(xFront, yBot, xFront, yBody2),\n );\n\n // Front dust flap (inset)\n const fL = xFront + FLAP_INSET;\n const fR = xSide2 - FLAP_INSET;\n paths.push(\n line(fL, yBody2, fL, yBot),\n line(fL, yBot, fR, yBot),\n line(fR, yBot, fR, yBody2),\n );\n paths.push(\n line(xFront, yBody2, fL, yBody2),\n line(fR, yBody2, xSide2, yBody2),\n );\n\n // Side2 full-width flap\n paths.push(\n line(xSide2, yBody2, xSide2, yBot),\n line(xSide2, yBot, xEnd, yBot),\n line(xEnd, yBot, xEnd, yBody2),\n );\n\n return paths;\n}\n\n// ── Outer contour ──\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: StandardBoxAttributes): Point[] {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n const yBot = 2 * flapHeight + height;\n\n const points: Point[] = [];\n\n // Start at glue tab bottom-left, go UP (CCW winding)\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n // Top: Rear dust flap\n points.push({ x: xRear + FLAP_INSET, y: yBody1 });\n points.push({ x: xRear + FLAP_INSET, y: yTop });\n points.push({ x: xSide1 - FLAP_INSET, y: yTop });\n points.push({ x: xSide1 - FLAP_INSET, y: yBody1 });\n\n // Top: Side1 full-width flap\n points.push({ x: xSide1, y: yBody1 });\n points.push({ x: xSide1, y: yTop });\n points.push({ x: xFront, y: yTop });\n points.push({ x: xFront, y: yBody1 });\n\n // Top: Front dust flap\n points.push({ x: xFront + FLAP_INSET, y: yBody1 });\n points.push({ x: xFront + FLAP_INSET, y: yTop });\n points.push({ x: xSide2 - FLAP_INSET, y: yTop });\n points.push({ x: xSide2 - FLAP_INSET, y: yBody1 });\n\n // Top: Side2 full-width flap\n points.push({ x: xSide2, y: yBody1 });\n points.push({ x: xSide2, y: yTop });\n points.push({ x: xEnd, y: yTop });\n points.push({ x: xEnd, y: yBody1 });\n\n // Right edge (body)\n points.push({ x: xEnd, y: yBody2 });\n\n // Bottom: Side2 full-width flap\n points.push({ x: xEnd, y: yBot });\n points.push({ x: xSide2, y: yBot });\n points.push({ x: xSide2, y: yBody2 });\n\n // Bottom: Front dust flap\n points.push({ x: xSide2 - FLAP_INSET, y: yBody2 });\n points.push({ x: xSide2 - FLAP_INSET, y: yBot });\n points.push({ x: xFront + FLAP_INSET, y: yBot });\n points.push({ x: xFront + FLAP_INSET, y: yBody2 });\n\n // Bottom: Side1 full-width flap\n points.push({ x: xFront, y: yBody2 });\n points.push({ x: xFront, y: yBot });\n points.push({ x: xSide1, y: yBot });\n points.push({ x: xSide1, y: yBody2 });\n\n // Bottom: Rear dust flap\n points.push({ x: xSide1 - FLAP_INSET, y: yBody2 });\n points.push({ x: xSide1 - FLAP_INSET, y: yBot });\n points.push({ x: xRear + FLAP_INSET, y: yBot });\n points.push({ x: xRear + FLAP_INSET, y: yBody2 });\n\n // Back to glue tab\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: StandardBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * flapHeight + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yTop,\n x2: xEnd,\n y2: yBody1,\n label: fmt(flapHeight),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf11d01,\n generateDimensions,\n StandardBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { StandardBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf11d01, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-11D01\";\n\nexport interface DieLineBecf11d01Props {\n attributes: StandardBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n flapHeight: number;\n glueArea: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf11d01Ref {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY - 1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_11D01 = forwardRef<DieLineBecf11d01Ref, DieLineBecf11d01Props>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf11d01(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n flapHeight: attributes.flapHeight * factor,\n glueArea: attributes.glueArea * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf11d01Props extends DieLineBecf11d01Props {}\n\nexport interface CanvasBecf11d01Ref extends DieLineBecf11d01Ref {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_11D01 = forwardRef<CanvasBecf11d01Ref, CanvasBecf11d01Props>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf11d01Ref>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf11d01(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_11D01 ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_11D01,\n DIE_LINE_BECF_11D01,\n CanvasBecf11d01Ref,\n DieLineBecf11d01Ref,\n StandardBoxAttributes,\n} from \"../../../dieline/standard-boxes/becf-11d01\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { StandardBoxAttributes } from \"../../../dieline/standard-boxes/becf-11d01\";\nexport type { CanvasBecf11d01Ref as ModelBecf11d01Ref } from \"../../../dieline/standard-boxes/becf-11d01\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/standard-boxes/becf-11d01\";\n\nexport interface ModelBecf11d01Props {\n attributes: StandardBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_11D01 = forwardRef<CanvasBecf11d01Ref | DieLineBecf11d01Ref, ModelBecf11d01Props>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_11D01 ref={ref as React.Ref<CanvasBecf11d01Ref>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_11D01 ref={ref as React.Ref<DieLineBecf11d01Ref>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","import type { Point } from \"../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\n\nexport interface Bitmap {\n data: Uint8Array;\n width: number;\n height: number;\n offsetX: number;\n offsetY: number;\n}\n\nexport function rasterizePolygon(points: Point[], resolution: number): Bitmap {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const p of points) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n\n const offsetX = Math.floor(minX / resolution);\n const offsetY = Math.floor(minY / resolution);\n const w = Math.ceil((maxX - offsetX * resolution) / resolution) + 1;\n const h = Math.ceil((maxY - offsetY * resolution) / resolution) + 1;\n const data = new Uint8Array(w * h);\n\n for (let gy = 0; gy < h; gy++) {\n const worldY = (offsetY + gy) * resolution + resolution / 2;\n const crossings: number[] = [];\n\n for (let i = 0, j = points.length - 1; i < points.length; j = i++) {\n const yi = points[i].y, yj = points[j].y;\n if ((yi <= worldY && yj > worldY) || (yj <= worldY && yi > worldY)) {\n const t = (worldY - yi) / (yj - yi);\n crossings.push(points[i].x + t * (points[j].x - points[i].x));\n }\n }\n\n crossings.sort((a, b) => a - b);\n\n for (let c = 0; c < crossings.length - 1; c += 2) {\n const startGx = Math.max(0, Math.floor((crossings[c] - offsetX * resolution) / resolution));\n const endGx = Math.min(w - 1, Math.ceil((crossings[c + 1] - offsetX * resolution) / resolution));\n for (let gx = startGx; gx <= endGx; gx++) {\n data[gy * w + gx] = 1;\n }\n }\n }\n\n return { data, width: w, height: h, offsetX, offsetY };\n}\n\nexport function rotateBitmap(bitmap: Bitmap, degrees: number): Bitmap {\n if (degrees === 0) return bitmap;\n\n const { data, width: w, height: h, offsetX, offsetY } = bitmap;\n\n if (degrees === 90) {\n const nw = h, nh = w;\n const nData = new Uint8Array(nw * nh);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n const nx = h - 1 - y;\n const ny = x;\n nData[ny * nw + nx] = 1;\n }\n }\n }\n return { data: nData, width: nw, height: nh, offsetX: -offsetY - h + 1, offsetY: offsetX };\n }\n\n if (degrees === 180) {\n const nData = new Uint8Array(w * h);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n nData[(h - 1 - y) * w + (w - 1 - x)] = 1;\n }\n }\n }\n return { data: nData, width: w, height: h, offsetX: -offsetX - w + 1, offsetY: -offsetY - h + 1 };\n }\n\n if (degrees === 270) {\n const nw = h, nh = w;\n const nData = new Uint8Array(nw * nh);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n const nx = y;\n const ny = w - 1 - x;\n nData[ny * nw + nx] = 1;\n }\n }\n }\n return { data: nData, width: nw, height: nh, offsetX: offsetY, offsetY: -offsetX - w + 1 };\n }\n\n return bitmap;\n}\n\nexport function canPlace(\n paperGrid: Uint8Array,\n paperW: number,\n paperH: number,\n piece: Bitmap,\n px: number,\n py: number\n): boolean {\n for (let y = 0; y < piece.height; y++) {\n const paperY = py + y;\n if (paperY < 0 || paperY >= paperH) {\n for (let x = 0; x < piece.width; x++) {\n if (piece.data[y * piece.width + x]) return false;\n }\n continue;\n }\n for (let x = 0; x < piece.width; x++) {\n if (!piece.data[y * piece.width + x]) continue;\n const paperX = px + x;\n if (paperX < 0 || paperX >= paperW) return false;\n if (paperGrid[paperY * paperW + paperX]) return false;\n }\n }\n return true;\n}\n\nexport function placePiece(\n paperGrid: Uint8Array,\n paperW: number,\n piece: Bitmap,\n px: number,\n py: number\n): void {\n for (let y = 0; y < piece.height; y++) {\n for (let x = 0; x < piece.width; x++) {\n if (piece.data[y * piece.width + x]) {\n paperGrid[(py + y) * paperW + (px + x)] = 1;\n }\n }\n }\n}\n","import type {\n AutoLayoutPlacement,\n GripperSide,\n} from \"../../../types/autoLayout\";\nimport type { Point } from \"../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport {\n rasterizePolygon,\n canPlace,\n placePiece,\n} from \"../rasterize\";\n\nexport const RESOLUTION = 1;\n\nexport interface UsableBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlacementCandidate {\n rotation: number;\n placements: AutoLayoutPlacement[];\n producedPerSheet: number;\n}\n\nexport function resolveGripperSide(paperWidth: number, paperHeight: number): GripperSide {\n if (paperWidth >= paperHeight) return \"bottom\";\n return \"left\";\n}\n\nexport function computeUsableBounds(\n paperWidth: number,\n paperHeight: number,\n gripperSide: GripperSide,\n spacing: number,\n griper: number,\n colorbarDepth: number\n): UsableBounds {\n switch (gripperSide) {\n case \"bottom\":\n return {\n top: colorbarDepth + spacing,\n bottom: paperHeight - griper,\n left: spacing,\n right: paperWidth - spacing,\n };\n case \"top\":\n return {\n top: griper,\n bottom: paperHeight - colorbarDepth - spacing,\n left: spacing,\n right: paperWidth - spacing,\n };\n case \"left\":\n return {\n top: spacing,\n bottom: paperHeight - spacing,\n left: griper,\n right: paperWidth - colorbarDepth - spacing,\n };\n case \"right\":\n return {\n top: spacing,\n bottom: paperHeight - spacing,\n left: colorbarDepth + spacing,\n right: paperWidth - griper,\n };\n }\n}\n\nexport function normalizePoints(points: Point[], degrees: number): Point[] {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const rotated = points.map((p) => ({\n x: p.x * cos - p.y * sin,\n y: p.x * sin + p.y * cos,\n }));\n let minX = Infinity, minY = Infinity;\n for (const p of rotated) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n }\n return rotated.map((p) => ({ x: p.x - minX, y: p.y - minY }));\n}\n\nexport function computeDielineBBOffset(\n offsetContourPoints: Point[],\n dielineW: number,\n dielineH: number,\n degrees: number\n): { dx: number; dy: number } {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n\n let ocMinX = Infinity, ocMinY = Infinity;\n for (const p of offsetContourPoints) {\n const rx = p.x * cos - p.y * sin;\n const ry = p.x * sin + p.y * cos;\n if (rx < ocMinX) ocMinX = rx;\n if (ry < ocMinY) ocMinY = ry;\n }\n\n const corners = [[0, 0], [dielineW, 0], [0, dielineH], [dielineW, dielineH]];\n let dlMinX = Infinity, dlMinY = Infinity;\n for (const [cx, cy] of corners) {\n const rx = cx * cos - cy * sin;\n const ry = cx * sin + cy * cos;\n if (rx < dlMinX) dlMinX = rx;\n if (ry < dlMinY) dlMinY = ry;\n }\n\n return { dx: dlMinX - ocMinX, dy: dlMinY - ocMinY };\n}\n\nexport function computeLayoutForPaperDefault(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n paperWidth: number,\n paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const usableLeft = Math.ceil(bounds.left / RESOLUTION);\n const usableTop = Math.ceil(bounds.top / RESOLUTION);\n const usableRight = Math.floor(bounds.right / RESOLUTION);\n const usableBottom = Math.floor(bounds.bottom / RESOLUTION);\n\n const paperW = Math.floor(paperWidth / RESOLUTION);\n const paperH = Math.floor(paperHeight / RESOLUTION);\n\n let bestCandidate: PlacementCandidate = { rotation: 0, placements: [], producedPerSheet: 0 };\n let bestGridPositions: { px: number; py: number }[] = [];\n let bestBitmapW = 0;\n let bestBitmapH = 0;\n\n for (const deg of [0, 90, 180, 270]) {\n const rotatedContour = normalizePoints(contourPoints, deg);\n const pieceBitmap = rasterizePolygon(rotatedContour, RESOLUTION);\n const bbOffset = computeDielineBBOffset(contourPoints, dielineW, dielineH, deg);\n\n const paperGrid = new Uint8Array(paperW * paperH);\n const placements: AutoLayoutPlacement[] = [];\n const gridPositions: { px: number; py: number }[] = [];\n\n for (let py = usableTop; py <= usableBottom - pieceBitmap.height; py++) {\n for (let px = usableLeft; px <= usableRight - pieceBitmap.width; px++) {\n if (canPlace(paperGrid, paperW, paperH, pieceBitmap, px, py)) {\n placePiece(paperGrid, paperW, pieceBitmap, px, py);\n gridPositions.push({ px, py });\n\n placements.push({\n x: px * RESOLUTION + bbOffset.dx,\n y: py * RESOLUTION + bbOffset.dy,\n rotation: deg,\n });\n }\n }\n }\n\n if (placements.length > bestCandidate.producedPerSheet) {\n bestCandidate = { rotation: deg, placements, producedPerSheet: placements.length };\n bestGridPositions = gridPositions;\n bestBitmapW = pieceBitmap.width;\n bestBitmapH = pieceBitmap.height;\n }\n }\n\n if (bestCandidate.placements.length > 0) {\n let gridMinX = Infinity;\n let gridMinY = Infinity;\n let gridMaxX = -Infinity;\n let gridMaxY = -Infinity;\n for (const { px, py } of bestGridPositions) {\n if (px < gridMinX) gridMinX = px;\n if (py < gridMinY) gridMinY = py;\n if (px + bestBitmapW > gridMaxX) gridMaxX = px + bestBitmapW;\n if (py + bestBitmapH > gridMaxY) gridMaxY = py + bestBitmapH;\n }\n\n const groupW = gridMaxX - gridMinX;\n const groupH = gridMaxY - gridMinY;\n const usableW = usableRight - usableLeft;\n const usableH = usableBottom - usableTop;\n\n const offsetX = ((usableW - groupW) / 2 - (gridMinX - usableLeft)) * RESOLUTION;\n const offsetY = ((usableH - groupH) / 2 - (gridMinY - usableTop)) * RESOLUTION;\n\n for (const p of bestCandidate.placements) {\n p.x += offsetX;\n p.y += offsetY;\n }\n }\n\n return bestCandidate;\n}\n","import type { AutoLayoutPlacement } from \"../../../../../types/autoLayout\";\nimport type { Point } from \"../../../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { PlacementCandidate, UsableBounds } from \"../../shared\";\nimport {\n normalizePoints,\n computeDielineBBOffset,\n} from \"../../shared\";\n\n/* ------------------------------------------------------------------ */\n/* Polygon-based edge profiles */\n/* ------------------------------------------------------------------ */\n\nexport const SAMPLE_STEP = 0.1;\n\nexport interface ShapeProfile {\n width: number;\n height: number;\n nY: number;\n nX: number;\n rightX: Float64Array;\n leftX: Float64Array;\n bottomY: Float64Array;\n topY: Float64Array;\n}\n\nexport function buildProfile(points: Point[]): ShapeProfile {\n let maxX = 0, maxY = 0;\n for (const p of points) {\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n const width = maxX, height = maxY;\n const nY = Math.ceil(height / SAMPLE_STEP) + 1;\n const nX = Math.ceil(width / SAMPLE_STEP) + 1;\n const rightX = new Float64Array(nY).fill(-Infinity);\n const leftX = new Float64Array(nY).fill(Infinity);\n const bottomY = new Float64Array(nX).fill(-Infinity);\n const topY = new Float64Array(nX).fill(Infinity);\n const nPts = points.length;\n\n for (let iy = 0; iy < nY; iy++) {\n const y = iy * SAMPLE_STEP;\n for (let j = 0, k = nPts - 1; j < nPts; k = j++) {\n const yj = points[j].y, yk = points[k].y;\n if ((yj <= y && yk > y) || (yk <= y && yj > y)) {\n const t = (y - yj) / (yk - yj);\n const x = points[j].x + t * (points[k].x - points[j].x);\n if (x > rightX[iy]) rightX[iy] = x;\n if (x < leftX[iy]) leftX[iy] = x;\n }\n }\n }\n for (let ix = 0; ix < nX; ix++) {\n const x = ix * SAMPLE_STEP;\n for (let j = 0, k = nPts - 1; j < nPts; k = j++) {\n const xj = points[j].x, xk = points[k].x;\n if ((xj <= x && xk > x) || (xk <= x && xj > x)) {\n const t = (x - xj) / (xk - xj);\n const y = points[j].y + t * (points[k].y - points[j].y);\n if (y > bottomY[ix]) bottomY[ix] = y;\n if (y < topY[ix]) topY[ix] = y;\n }\n }\n }\n return { width, height, nY, nX, rightX, leftX, bottomY, topY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Rotation data */\n/* ------------------------------------------------------------------ */\n\nexport interface RotationData {\n profile: ShapeProfile;\n bbOffset: { dx: number; dy: number };\n deg: number;\n}\n\nexport function prepareRotation(\n contourPoints: Point[], dielineW: number, dielineH: number, deg: number\n): RotationData {\n const rotated = normalizePoints(contourPoints, deg);\n return {\n profile: buildProfile(rotated),\n bbOffset: computeDielineBBOffset(contourPoints, dielineW, dielineH, deg),\n deg,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Profile-based step calculations */\n/* ------------------------------------------------------------------ */\n\nexport function findMinStepX(a: ShapeProfile, b: ShapeProfile, dyMm: number): number {\n const dySamples = Math.round(dyMm / SAMPLE_STEP);\n let maxOverlap = -Infinity;\n for (let ia = 0; ia < a.nY; ia++) {\n const ib = ia - dySamples;\n if (ib < 0 || ib >= b.nY) continue;\n if (a.rightX[ia] === -Infinity || b.leftX[ib] === Infinity) continue;\n const overlap = a.rightX[ia] - b.leftX[ib];\n if (overlap > maxOverlap) maxOverlap = overlap;\n }\n return maxOverlap <= -Infinity ? 0 : maxOverlap;\n}\n\nexport function findMinStepY(a: ShapeProfile, b: ShapeProfile, dxMm: number): number {\n const dxSamples = Math.round(dxMm / SAMPLE_STEP);\n let maxOverlap = -Infinity;\n for (let ia = 0; ia < a.nX; ia++) {\n const ib = ia - dxSamples;\n if (ib < 0 || ib >= b.nX) continue;\n if (a.bottomY[ia] === -Infinity || b.topY[ib] === Infinity) continue;\n const overlap = a.bottomY[ia] - b.topY[ib];\n if (overlap > maxOverlap) maxOverlap = overlap;\n }\n return maxOverlap <= -Infinity ? 0 : maxOverlap;\n}\n\nexport function findMinStepY_multi(\n profA: ShapeProfile, stepX_A: number,\n profB: ShapeProfile, offsetX: number\n): number {\n const reach = Math.max(profA.width, profB.width);\n let maxStep = 0;\n const nMin = Math.floor((offsetX - reach) / stepX_A);\n const nMax = Math.ceil((offsetX + reach) / stepX_A);\n for (let n = nMin; n <= nMax; n++) {\n const s = findMinStepY(profA, profB, offsetX - n * stepX_A);\n if (s > maxStep) maxStep = s;\n }\n return maxStep;\n}\n\n/* ------------------------------------------------------------------ */\n/* Strategy result */\n/* ------------------------------------------------------------------ */\n\nexport interface StrategyResult {\n placements: AutoLayoutPlacement[];\n count: number;\n minX: number; minY: number; maxX: number; maxY: number;\n}\n\nexport function emptyResult(): StrategyResult {\n return { placements: [], count: 0, minX: 0, minY: 0, maxX: 0, maxY: 0 };\n}\n\n/* ------------------------------------------------------------------ */\n/* Grid strategies */\n/* ------------------------------------------------------------------ */\n\nexport function singleRotGrid(rd: RotationData, bounds: UsableBounds): StrategyResult {\n const p = rd.profile;\n const stepX = findMinStepX(p, p, 0);\n const stepY = findMinStepY(p, p, 0);\n if (stepX <= 0 || stepY <= 0) return emptyResult();\n\n const cols = Math.max(0, Math.floor((bounds.right - bounds.left - p.width) / stepX) + 1);\n const rows = Math.max(0, Math.floor((bounds.bottom - bounds.top - p.height) / stepY) + 1);\n if (cols === 0 || rows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const ox = bounds.left + c * stepX;\n const oy = bounds.top + r * stepY;\n placements.push({ x: ox + rd.bbOffset.dx, y: oy + rd.bbOffset.dy, rotation: rd.deg });\n if (ox < minX) minX = ox; if (oy < minY) minY = oy;\n if (ox + p.width > maxX) maxX = ox + p.width;\n if (oy + p.height > maxY) maxY = oy + p.height;\n }\n }\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\nexport function dualRotGrid(\n rdA: RotationData, rdB: RotationData, offsetX: number, bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n const stepX_A = findMinStepX(pA, pA, 0);\n const stepX_B = findMinStepX(pB, pB, 0);\n if (stepX_A <= 0 || stepX_B <= 0) return emptyResult();\n\n const stepY_AB = findMinStepY_multi(pA, stepX_A, pB, offsetX);\n const stepY_BA = findMinStepY_multi(pB, stepX_B, pA, -offsetX);\n if (stepY_AB + stepY_BA <= 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n let oy = bounds.top;\n let isRowA = true;\n\n while (true) {\n const rd = isRowA ? rdA : rdB;\n const p = rd.profile;\n const stepX = isRowA ? stepX_A : stepX_B;\n if (oy + p.height > bounds.bottom) break;\n\n let sx = isRowA ? bounds.left : bounds.left + offsetX;\n if (sx < bounds.left) sx += stepX * Math.ceil((bounds.left - sx) / stepX);\n\n for (let ox = sx; ox + p.width <= bounds.right; ox += stepX) {\n placements.push({ x: ox + rd.bbOffset.dx, y: oy + rd.bbOffset.dy, rotation: rd.deg });\n if (ox < minX) minX = ox; if (oy < minY) minY = oy;\n if (ox + p.width > maxX) maxX = ox + p.width;\n if (oy + p.height > maxY) maxY = oy + p.height;\n }\n oy += isRowA ? stepY_AB : stepY_BA;\n isRowA = !isRowA;\n }\n if (placements.length === 0) return emptyResult();\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Centering */\n/* ------------------------------------------------------------------ */\n\nexport function centerLayout(result: StrategyResult, bounds: UsableBounds): void {\n if (result.count === 0) return;\n const offX = (bounds.right - bounds.left - (result.maxX - result.minX)) / 2 - (result.minX - bounds.left);\n const offY = (bounds.bottom - bounds.top - (result.maxY - result.minY)) / 2 - (result.minY - bounds.top);\n for (const p of result.placements) { p.x += offX; p.y += offY; }\n}\n\n/* ------------------------------------------------------------------ */\n/* Main entry — BECF-1010A */\n/* ------------------------------------------------------------------ */\n\nexport function computeLayoutForPaper(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n _paperWidth: number,\n _paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const rots = [0, 90, 180, 270] as const;\n const rd = new Map<number, RotationData>();\n for (const deg of rots) {\n rd.set(deg, prepareRotation(contourPoints, dielineW, dielineH, deg));\n }\n\n const results: StrategyResult[] = [];\n\n // Single rotation (4)\n for (const deg of rots) {\n results.push(singleRotGrid(rd.get(deg)!, bounds));\n }\n\n // Dual-row with offsets\n const pairs: [number, number][] = [\n [0, 180], [90, 270], [0, 90], [0, 270], [90, 180], [180, 270],\n ];\n for (const [a, b] of pairs) {\n const rdA = rd.get(a)!, rdB = rd.get(b)!;\n const stepA = findMinStepX(rdA.profile, rdA.profile, 0);\n if (stepA <= 0) continue;\n for (let off = 0; off < stepA; off += 1) {\n results.push(dualRotGrid(rdA, rdB, off, bounds));\n results.push(dualRotGrid(rdB, rdA, off, bounds));\n }\n }\n\n // Pick best\n let best = results[0];\n for (const r of results) {\n if (r.count > best.count) best = r;\n }\n\n centerLayout(best, bounds);\n\n return {\n rotation: best.placements[0]?.rotation ?? 0,\n placements: best.placements,\n producedPerSheet: best.count,\n };\n}\n","import type { AutoLayoutPlacement } from \"../../../../../types/autoLayout\";\nimport type { Point } from \"../../../../../components/dieline/tuck-end-boxes/becf-1030a/generate\";\nimport type { PlacementCandidate, UsableBounds } from \"../../shared\";\nimport {\n normalizePoints,\n computeDielineBBOffset,\n} from \"../../shared\";\n\n// Re-use base engine from BECF-1010A\nimport {\n buildProfile,\n findMinStepX,\n findMinStepY,\n singleRotGrid,\n dualRotGrid,\n centerLayout,\n emptyResult,\n type RotationData,\n type StrategyResult,\n} from \"../becf-1010a\";\n\n/* ------------------------------------------------------------------ */\n/* Prepare rotation */\n/* ------------------------------------------------------------------ */\n\nfunction prepareRotation(\n contourPoints: Point[], dielineW: number, dielineH: number, deg: number\n): RotationData {\n const rotated = normalizePoints(contourPoints, deg);\n return {\n profile: buildProfile(rotated),\n bbOffset: computeDielineBBOffset(contourPoints, dielineW, dielineH, deg),\n deg,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* BECF-1030A specific: Pair placement */\n/* */\n/* Place [0°][180°] as a horizontal pair → grid of pairs */\n/* Then try to fit extra singles in remaining gaps */\n/* ------------------------------------------------------------------ */\n\nfunction pairGrid(\n rdA: RotationData,\n rdB: RotationData,\n bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n\n // Step between A and B within the pair (touching horizontally)\n const gapAB = findMinStepX(pA, pB, 0);\n if (gapAB <= 0) return emptyResult();\n\n // Pair bounding box\n const pairW = gapAB + pB.width;\n const pairH = Math.max(pA.height, pB.height);\n\n // Step between pairs in X (pair next to pair)\n // Right profile of B (second piece) to left profile of A (first piece of next pair)\n const pairStepX = gapAB + findMinStepX(pB, pA, 0);\n\n // Step between pair rows in Y\n // Must check all 4 combinations: A↓A, A↓B, B↓A, B↓B\n const pairStepY = Math.max(\n findMinStepY(pA, pA, 0),\n findMinStepY(pA, pB, gapAB),\n findMinStepY(pB, pA, -gapAB),\n findMinStepY(pB, pB, 0),\n );\n\n if (pairStepX <= 0 || pairStepY <= 0) return emptyResult();\n\n const usableW = bounds.right - bounds.left;\n const usableH = bounds.bottom - bounds.top;\n\n const pairCols = Math.max(0, Math.floor((usableW - pairW) / pairStepX) + 1);\n const pairRows = Math.max(0, Math.floor((usableH - pairH) / pairStepY) + 1);\n if (pairCols === 0 || pairRows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n // Place pairs\n for (let r = 0; r < pairRows; r++) {\n for (let c = 0; c < pairCols; c++) {\n const baseX = bounds.left + c * pairStepX;\n const baseY = bounds.top + r * pairStepY;\n\n // Piece A (0° side)\n const oxA = baseX;\n const oyA = baseY;\n placements.push({ x: oxA + rdA.bbOffset.dx, y: oyA + rdA.bbOffset.dy, rotation: rdA.deg });\n if (oxA < minX) minX = oxA; if (oyA < minY) minY = oyA;\n if (oxA + pA.width > maxX) maxX = oxA + pA.width;\n if (oyA + pA.height > maxY) maxY = oyA + pA.height;\n\n // Piece B (180° side)\n const oxB = baseX + gapAB;\n const oyB = baseY;\n placements.push({ x: oxB + rdB.bbOffset.dx, y: oyB + rdB.bbOffset.dy, rotation: rdB.deg });\n if (oxB < minX) minX = oxB; if (oyB < minY) minY = oyB;\n if (oxB + pB.width > maxX) maxX = oxB + pB.width;\n if (oyB + pB.height > maxY) maxY = oyB + pB.height;\n }\n }\n\n // Try fitting extra singles in remaining gaps\n const pairsRightEdge = bounds.left + (pairCols - 1) * pairStepX + pairW;\n const pairsBottomEdge = bounds.top + (pairRows - 1) * pairStepY + pairH;\n const gapRight = bounds.right - pairsRightEdge;\n const gapBottom = bounds.bottom - pairsBottomEdge;\n\n // Try single pieces in the right gap (for each row)\n const extraRotations = [rdA, rdB];\n for (const rdExtra of extraRotations) {\n const pe = rdExtra.profile;\n if (pe.width <= gapRight) {\n // Can fit one column of singles to the right\n for (let r = 0; r < pairRows; r++) {\n const ox = pairsRightEdge;\n const oy = bounds.top + r * pairStepY;\n if (ox + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: ox + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (ox + pe.width > maxX) maxX = ox + pe.width;\n }\n }\n break; // only add one type of extra\n }\n }\n\n // Try single pieces in the bottom gap (for each column)\n for (const rdExtra of extraRotations) {\n const pe = rdExtra.profile;\n if (pe.height <= gapBottom) {\n for (let c = 0; c < pairCols; c++) {\n // Try fitting A-side single\n const oxA = bounds.left + c * pairStepX;\n const oy = pairsBottomEdge;\n if (oxA + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: oxA + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (oy + pe.height > maxY) maxY = oy + pe.height;\n }\n }\n break;\n }\n }\n\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Main entry — BECF-1030A */\n/* ------------------------------------------------------------------ */\n\nexport function computeLayoutForPaper(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n _paperWidth: number,\n _paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const rots = [0, 90, 180, 270] as const;\n const rd = new Map<number, RotationData>();\n for (const deg of rots) {\n rd.set(deg, prepareRotation(contourPoints, dielineW, dielineH, deg));\n }\n\n const results: StrategyResult[] = [];\n\n // === Base strategies (from BECF-1010A engine) ===\n\n // Single rotation (4)\n for (const deg of rots) {\n results.push(singleRotGrid(rd.get(deg)!, bounds));\n }\n\n // Dual-row with offsets\n const allPairs: [number, number][] = [\n [0, 180], [90, 270], [0, 90], [0, 270], [90, 180], [180, 270],\n ];\n for (const [a, b] of allPairs) {\n const rdA = rd.get(a)!, rdB = rd.get(b)!;\n const stepA = findMinStepX(rdA.profile, rdA.profile, 0);\n if (stepA <= 0) continue;\n for (let off = 0; off < stepA; off += 1) {\n results.push(dualRotGrid(rdA, rdB, off, bounds));\n results.push(dualRotGrid(rdB, rdA, off, bounds));\n }\n }\n\n // === BECF-1030A specific: Pair placement ===\n\n // Try all rotation pairs as horizontal pairs\n for (const [a, b] of allPairs) {\n results.push(pairGrid(rd.get(a)!, rd.get(b)!, bounds));\n results.push(pairGrid(rd.get(b)!, rd.get(a)!, bounds));\n }\n\n // Separate single vs multi-rotation results\n const singleResults: StrategyResult[] = [];\n const multiResults: StrategyResult[] = [];\n for (const r of results) {\n if (r.count === 0) continue;\n const rotations = new Set(r.placements.map(p => p.rotation));\n if (rotations.size > 1) {\n multiResults.push(r);\n } else {\n singleResults.push(r);\n }\n }\n\n // Pick best by count, then tightest packing (smallest bounding box area)\n function pickBest(arr: StrategyResult[]): StrategyResult {\n let b = arr[0] ?? emptyResult();\n let bArea = (b.maxX - b.minX) * (b.maxY - b.minY);\n for (const r of arr) {\n const area = (r.maxX - r.minX) * (r.maxY - r.minY);\n if (r.count > b.count || (r.count === b.count && area < bArea)) {\n b = r;\n bArea = area;\n }\n }\n return b;\n }\n\n const bestSingle = pickBest(singleResults);\n const bestMulti = pickBest(multiResults);\n\n // Prefer multi-rotation (interlock) when count >= single\n const best = bestMulti.count >= bestSingle.count && bestMulti.count > 0\n ? bestMulti\n : bestSingle;\n\n centerLayout(best, bounds);\n\n return {\n rotation: best.placements[0]?.rotation ?? 0,\n placements: best.placements,\n producedPerSheet: best.count,\n };\n}\n","import type {\n AutoLayoutConfig,\n AutoLayoutResult,\n AutoLayoutPaperResult,\n} from \"../../../types/autoLayout\";\n\nimport {\n generateBecf1010a,\n generateOuterContour as generateOuterContour1010a,\n offsetContour as offsetContour1010a,\n type TuckEndBoxAttributes,\n} from \"../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport {\n generateBecf1030a,\n generateOuterContour as generateOuterContour1030a,\n offsetContour as offsetContour1030a,\n type TuckEndBoxAttributes as TuckEndBoxAttributes1030a,\n} from \"../../../components/dieline/tuck-end-boxes/becf-1030a/generate\";\nimport {\n generateBecf11d01,\n generateOuterContour as generateOuterContour11d01,\n offsetContour as offsetContour11d01,\n type StandardBoxAttributes,\n} from \"../../../components/dieline/standard-boxes/becf-11d01/generate\";\n\nimport {\n resolveGripperSide,\n computeUsableBounds,\n computeLayoutForPaperDefault,\n} from \"./shared\";\n\nimport { computeLayoutForPaper as computeLayoutBecf1010a } from \"./tuck-end-boxes/becf-1010a\";\nimport { computeLayoutForPaper as computeLayoutBecf1030a } from \"./tuck-end-boxes/becf-1030a\";\n\nfunction resolveModelFunctions(modelId: string, attrs: Record<string, number>) {\n switch (modelId) {\n case \"BECF-1030A\": {\n const a = attrs as unknown as TuckEndBoxAttributes1030a;\n return {\n contour: generateOuterContour1030a(a),\n dieline: generateBecf1030a(a),\n offsetContour: offsetContour1030a,\n };\n }\n case \"BECF-11D01\": {\n const a = attrs as unknown as StandardBoxAttributes;\n return {\n contour: generateOuterContour11d01(a),\n dieline: generateBecf11d01(a),\n offsetContour: offsetContour11d01,\n };\n }\n case \"BECF-1010A\":\n default: {\n const a = attrs as unknown as TuckEndBoxAttributes;\n return {\n contour: generateOuterContour1010a(a),\n dieline: generateBecf1010a(a),\n offsetContour: offsetContour1010a,\n };\n }\n }\n}\n\nfunction resolveLayoutCalculator(modelId: string) {\n switch (modelId) {\n case \"BECF-1010A\":\n return computeLayoutBecf1010a;\n case \"BECF-1030A\":\n return computeLayoutBecf1030a;\n default:\n return computeLayoutForPaperDefault;\n }\n}\n\nexport function calculateAutoLayout(config: AutoLayoutConfig): AutoLayoutResult {\n const { contour, dieline, offsetContour } = resolveModelFunctions(\n config.model.modelId,\n config.model.attributes\n );\n const offsetContourPoints = config.layoutDistance > 0\n ? offsetContour(contour, config.layoutDistance / 2)\n : contour;\n\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n\n const computeLayout = resolveLayoutCalculator(config.model.modelId);\n\n const paperResults: AutoLayoutPaperResult[] = [];\n let totalProduced = 0;\n let totalSheets = 0;\n\n for (const paper of config.papers) {\n const gripperSide = resolveGripperSide(paper.paperWidth, paper.paperHeight);\n const bounds = computeUsableBounds(\n paper.paperWidth,\n paper.paperHeight,\n gripperSide,\n config.spacing,\n config.griper,\n cbDepth\n );\n\n const candidate = computeLayout(\n offsetContourPoints,\n dieline.viewBox.width,\n dieline.viewBox.height,\n paper.paperWidth,\n paper.paperHeight,\n bounds\n );\n\n const producedPerSheet = candidate.producedPerSheet;\n\n const paperArea = paper.paperWidth * paper.paperHeight;\n\n if (producedPerSheet === 0) {\n paperResults.push({\n paperId: paper.paperId,\n paperName: paper.paperName,\n paperWidth: paper.paperWidth,\n paperHeight: paper.paperHeight,\n producedPerSheet: 0,\n totalSheets: 0,\n totalProduced: 0,\n excessCount: 0,\n wastePercent: 100,\n independentSheets: 0,\n independentTotalArea: 0,\n placements: [],\n gripperSide,\n });\n continue;\n }\n\n const remaining = Math.max(0, config.quantity - totalProduced);\n const sheetsNeeded = remaining > 0 ? Math.ceil(remaining / producedPerSheet) : 0;\n const produced = sheetsNeeded * producedPerSheet;\n\n const pieceArea = dieline.viewBox.width * dieline.viewBox.height;\n const usedArea = producedPerSheet * pieceArea;\n const wastePercent = ((paperArea - usedArea) / paperArea) * 100;\n\n const indSheets = Math.ceil(config.quantity / producedPerSheet);\n const indTotalArea = indSheets * paperArea;\n\n totalProduced += produced;\n totalSheets += sheetsNeeded;\n\n paperResults.push({\n paperId: paper.paperId,\n paperName: paper.paperName,\n paperWidth: paper.paperWidth,\n paperHeight: paper.paperHeight,\n producedPerSheet,\n totalSheets: sheetsNeeded,\n totalProduced: produced,\n excessCount: Math.max(0, produced - remaining),\n wastePercent: Math.round(wastePercent * 100) / 100,\n independentSheets: indSheets,\n independentTotalArea: Math.round(indTotalArea),\n placements: candidate.placements,\n gripperSide,\n });\n }\n\n paperResults.sort((a, b) => {\n if (a.producedPerSheet === 0 && b.producedPerSheet === 0) return 0;\n if (a.producedPerSheet === 0) return 1;\n if (b.producedPerSheet === 0) return -1;\n return a.independentTotalArea - b.independentTotalArea;\n });\n\n const recommendedPaperId = paperResults.find((p) => p.producedPerSheet > 0)?.paperId ?? null;\n\n return {\n papers: paperResults,\n quantity: config.quantity,\n totalProduced,\n totalSheets,\n remainingNeeded: Math.max(0, config.quantity - totalProduced),\n recommendedPaperId,\n };\n}\n","export interface Vec2 {\n x: number;\n y: number;\n}\n\nexport function rotatePolygon(points: Vec2[], degrees: number, cx: number, cy: number): Vec2[] {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n return points.map((p) => ({\n x: cos * (p.x - cx) - sin * (p.y - cy) + cx,\n y: sin * (p.x - cx) + cos * (p.y - cy) + cy,\n }));\n}\n\nexport function translatePolygon(points: Vec2[], dx: number, dy: number): Vec2[] {\n return points.map((p) => ({ x: p.x + dx, y: p.y + dy }));\n}\n\nfunction segmentsIntersect(\n a1: Vec2, a2: Vec2,\n b1: Vec2, b2: Vec2\n): boolean {\n const d1x = a2.x - a1.x;\n const d1y = a2.y - a1.y;\n const d2x = b2.x - b1.x;\n const d2y = b2.y - b1.y;\n\n const cross = d1x * d2y - d1y * d2x;\n if (Math.abs(cross) < 1e-10) return false;\n\n const dx = b1.x - a1.x;\n const dy = b1.y - a1.y;\n\n const t = (dx * d2y - dy * d2x) / cross;\n const u = (dx * d1y - dy * d1x) / cross;\n\n return t > 0 && t < 1 && u > 0 && u < 1;\n}\n\nfunction pointInPolygon(point: Vec2, poly: Vec2[]): boolean {\n let inside = false;\n for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) {\n const yi = poly[i].y, yj = poly[j].y;\n const xi = poly[i].x, xj = poly[j].x;\n if ((yi > point.y) !== (yj > point.y) &&\n point.x < (xj - xi) * (point.y - yi) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n return inside;\n}\n\nexport function polygonsCollide(polyA: Vec2[], polyB: Vec2[]): boolean {\n if (polyA.length < 3 || polyB.length < 3) return false;\n\n for (let i = 0; i < polyA.length; i++) {\n const a1 = polyA[i];\n const a2 = polyA[(i + 1) % polyA.length];\n for (let j = 0; j < polyB.length; j++) {\n const b1 = polyB[j];\n const b2 = polyB[(j + 1) % polyB.length];\n if (segmentsIntersect(a1, a2, b1, b2)) return true;\n }\n }\n\n if (pointInPolygon(polyA[0], polyB)) return true;\n if (pointInPolygon(polyB[0], polyA)) return true;\n\n return false;\n}\n\nexport function polygonInsideBounds(\n poly: Vec2[],\n boundsWidth: number,\n boundsHeight: number\n): boolean {\n for (const p of poly) {\n if (p.x < 0 || p.x > boundsWidth || p.y < 0 || p.y > boundsHeight) {\n return false;\n }\n }\n return true;\n}\n","import type { GripperSide } from \"../../../../types/autoLayout\";\n\nconst BASE_COLORS = [\"#02FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\nconst FADE_LEVELS = [1.0, 0.8, 0.6, 0.4, 0.2];\n\nfunction fadeToWhite(hex: string, opacity: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n const fr = Math.round(r + (255 - r) * (1 - opacity));\n const fg = Math.round(g + (255 - g) * (1 - opacity));\n const fb = Math.round(b + (255 - b) * (1 - opacity));\n return `#${fr.toString(16).padStart(2, \"0\")}${fg.toString(16).padStart(2, \"0\")}${fb.toString(16).padStart(2, \"0\")}`;\n}\n\nconst COLORBAR_COLORS = BASE_COLORS.flatMap((base) =>\n FADE_LEVELS.map((level) => fadeToWhite(base, level))\n);\n\nexport interface ColorbarProps {\n side: GripperSide;\n colorbarHeight: number;\n paperWidth: number;\n paperHeight: number;\n}\n\nexport function Colorbar({ side, colorbarHeight, paperWidth, paperHeight }: ColorbarProps) {\n const count = COLORBAR_COLORS.length;\n const isHorizontal = side === \"top\" || side === \"bottom\";\n\n if (isHorizontal) {\n const w = paperWidth / count;\n const y = side === \"top\" ? 0 : paperHeight - colorbarHeight;\n return (\n <g>\n {COLORBAR_COLORS.map((color, i) => (\n <rect key={i} x={i * w} y={y} width={w} height={colorbarHeight} fill={color} />\n ))}\n </g>\n );\n }\n\n const h = paperHeight / count;\n const x = side === \"left\" ? 0 : paperWidth - colorbarHeight;\n return (\n <g>\n {COLORBAR_COLORS.map((color, i) => (\n <rect key={i} x={x} y={i * h} width={colorbarHeight} height={h} fill={color} />\n ))}\n </g>\n );\n}\n\nexport function appendColorbarToSvg(\n svg: SVGSVGElement,\n svgNs: string,\n side: GripperSide,\n colorbarHeight: number,\n paperWidth: number,\n paperHeight: number\n): void {\n const count = COLORBAR_COLORS.length;\n const isHorizontal = side === \"top\" || side === \"bottom\";\n\n COLORBAR_COLORS.forEach((color, i) => {\n const bar = document.createElementNS(svgNs, \"rect\");\n\n if (isHorizontal) {\n const w = paperWidth / count;\n const y = side === \"top\" ? 0 : paperHeight - colorbarHeight;\n bar.setAttribute(\"x\", String(i * w));\n bar.setAttribute(\"y\", String(y));\n bar.setAttribute(\"width\", String(w));\n bar.setAttribute(\"height\", String(colorbarHeight));\n } else {\n const h = paperHeight / count;\n const x = side === \"left\" ? 0 : paperWidth - colorbarHeight;\n bar.setAttribute(\"x\", String(x));\n bar.setAttribute(\"y\", String(i * h));\n bar.setAttribute(\"width\", String(colorbarHeight));\n bar.setAttribute(\"height\", String(h));\n }\n\n bar.setAttribute(\"fill\", color);\n svg.appendChild(bar);\n });\n}\n","import type { GripperSide } from \"../../../../types/autoLayout\";\n\nconst ARROW_COLORS = [\"#00FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\nconst ARROW_SIZE = 2;\nconst ARROW_SPACING = 8;\n\nexport interface GripperProps {\n side: GripperSide;\n paperWidth: number;\n paperHeight: number;\n depth: number;\n fillColor: string;\n}\n\nfunction getRect(side: GripperSide, paperWidth: number, paperHeight: number, depth: number) {\n switch (side) {\n case \"bottom\":\n return { x: 0, y: paperHeight - depth, w: paperWidth, h: depth };\n case \"top\":\n return { x: 0, y: 0, w: paperWidth, h: depth };\n case \"left\":\n return { x: 0, y: 0, w: depth, h: paperHeight };\n case \"right\":\n return { x: paperWidth - depth, y: 0, w: depth, h: paperHeight };\n }\n}\n\nfunction isHorizontal(side: GripperSide) {\n return side === \"top\" || side === \"bottom\";\n}\n\nfunction getArrowPositions(side: GripperSide, rect: { x: number; y: number; w: number; h: number }) {\n const totalMarks = (ARROW_COLORS.length - 1) * ARROW_SPACING;\n if (isHorizontal(side)) {\n const startX = rect.x + (rect.w - totalMarks) / 2;\n const cy = rect.y + rect.h / 2;\n return ARROW_COLORS.map((_, i) => ({ cx: startX + i * ARROW_SPACING, cy }));\n }\n const startY = rect.y + (rect.h - totalMarks) / 2;\n const cx = rect.x + rect.w / 2;\n return ARROW_COLORS.map((_, i) => ({ cx, cy: startY + i * ARROW_SPACING }));\n}\n\nfunction getArrowDirection(side: GripperSide): \"up\" | \"down\" | \"left\" | \"right\" {\n switch (side) {\n case \"bottom\":\n return \"down\";\n case \"top\":\n return \"up\";\n case \"left\":\n return \"left\";\n case \"right\":\n return \"right\";\n }\n}\n\nfunction arrowPoints(cx: number, cy: number, direction: \"up\" | \"down\" | \"left\" | \"right\") {\n const s = ARROW_SIZE;\n switch (direction) {\n case \"up\":\n return `${cx - s},${cy + s} ${cx + s},${cy + s} ${cx},${cy - s}`;\n case \"down\":\n return `${cx - s},${cy - s} ${cx + s},${cy - s} ${cx},${cy + s}`;\n case \"right\":\n return `${cx - s},${cy - s} ${cx - s},${cy + s} ${cx + s},${cy}`;\n case \"left\":\n return `${cx + s},${cy - s} ${cx + s},${cy + s} ${cx - s},${cy}`;\n }\n}\n\nexport function Gripper({ side, paperWidth, paperHeight, depth, fillColor }: GripperProps) {\n const rect = getRect(side, paperWidth, paperHeight, depth);\n const positions = getArrowPositions(side, rect);\n const direction = getArrowDirection(side);\n\n return (\n <g>\n <rect x={rect.x} y={rect.y} width={rect.w} height={rect.h} fill={fillColor} />\n {ARROW_COLORS.map((color, i) => {\n const { cx, cy } = positions[i];\n return (\n <polygon\n key={i}\n points={arrowPoints(cx, cy, direction)}\n fill={color}\n />\n );\n })}\n </g>\n );\n}\n\nexport function appendGripperToSvg(\n svg: SVGSVGElement,\n svgNs: string,\n side: GripperSide,\n paperWidth: number,\n paperHeight: number,\n depth: number,\n fillColor: string\n): void {\n const rect = getRect(side, paperWidth, paperHeight, depth);\n const positions = getArrowPositions(side, rect);\n const direction = getArrowDirection(side);\n\n const gripperRect = document.createElementNS(svgNs, \"rect\");\n gripperRect.setAttribute(\"x\", String(rect.x));\n gripperRect.setAttribute(\"y\", String(rect.y));\n gripperRect.setAttribute(\"width\", String(rect.w));\n gripperRect.setAttribute(\"height\", String(rect.h));\n gripperRect.setAttribute(\"fill\", fillColor);\n svg.appendChild(gripperRect);\n\n ARROW_COLORS.forEach((color, i) => {\n const { cx, cy } = positions[i];\n const arrow = document.createElementNS(svgNs, \"polygon\");\n arrow.setAttribute(\"points\", arrowPoints(cx, cy, direction));\n arrow.setAttribute(\"fill\", color);\n svg.appendChild(arrow);\n });\n}\n","import {\n useState,\n useRef,\n useCallback,\n useMemo,\n useEffect,\n} from \"react\";\nimport type {\n AutoLayoutConfig,\n AutoLayoutPaperResult,\n AutoLayoutPlacement,\n ModifyPlacement,\n GripperSide,\n} from \"../../../../types/autoLayout\";\nimport type { Vec2 } from \"../../../../utils/autoLayout/polygonCollision\";\nimport {\n rotatePolygon,\n translatePolygon,\n polygonsCollide,\n polygonInsideBounds,\n} from \"../../../../utils/autoLayout/polygonCollision\";\nimport { getAutoLayoutTheme } from \"../../../../config\";\nimport { Colorbar } from \"../colorbar\";\nimport { Gripper } from \"../gripper\";\nimport {\n DIE_LINE_BECF_1010A,\n} from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n DIE_LINE_BECF_1030A,\n} from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nimport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1030a } from \"../../../dieline/tuck-end-boxes/becf-1030a/generate\";\n\nexport interface ModifyLayoutProps {\n paperResult: AutoLayoutPaperResult;\n config: AutoLayoutConfig;\n modelId: string;\n attrs: Record<string, number>;\n offsetContourPoints: Vec2[];\n contourPath: string;\n dielineViewBox: { width: number; height: number };\n onSubmit: (modifiedPaper: AutoLayoutPaperResult) => void;\n onCancel: () => void;\n}\n\nconst ROTATIONS = [0, 90, 180, 270] as const;\n\nlet nextItemId = 1;\n\nfunction getOpposite(side: GripperSide): GripperSide {\n switch (side) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n }\n}\n\nfunction getSpacingRects(\n gripperSide: GripperSide,\n paperWidth: number,\n paperHeight: number,\n spacing: number,\n griper: number,\n cbDepth: number\n): { x: number; y: number; w: number; h: number }[] {\n switch (gripperSide) {\n case \"bottom\":\n return [\n { x: 0, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n { x: paperWidth - spacing, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n ];\n case \"top\":\n return [\n { x: 0, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n { x: paperWidth - spacing, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n ];\n case \"left\":\n return [\n { x: griper, y: 0, w: paperWidth - griper - cbDepth, h: spacing },\n { x: griper, y: paperHeight - spacing, w: paperWidth - griper - cbDepth, h: spacing },\n ];\n case \"right\":\n return [\n { x: cbDepth, y: 0, w: paperWidth - cbDepth - griper, h: spacing },\n { x: cbDepth, y: paperHeight - spacing, w: paperWidth - cbDepth - griper, h: spacing },\n ];\n }\n}\n\nfunction renderDieLine(modelId: string, attrs: Record<string, number>) {\n switch (modelId) {\n case \"BECF-1030A\":\n return (\n <DIE_LINE_BECF_1030A\n attributes={attrs as unknown as TuckEndBoxAttributes1030a}\n renderAs=\"group\"\n />\n );\n case \"BECF-1010A\":\n default:\n return (\n <DIE_LINE_BECF_1010A\n attributes={attrs as unknown as TuckEndBoxAttributes}\n renderAs=\"group\"\n />\n );\n }\n}\n\nfunction getDielineTransform(\n x: number,\n y: number,\n rotation: number,\n w: number,\n h: number\n): string {\n switch (rotation) {\n case 90:\n return `translate(${x + h}, ${y}) rotate(90)`;\n case 180:\n return `translate(${x + w}, ${y + h}) rotate(180)`;\n case 270:\n return `translate(${x}, ${y + w}) rotate(270)`;\n case 45:\n return `translate(${x}, ${y}) rotate(45, ${w / 2}, ${h / 2})`;\n default:\n return `translate(${x}, ${y})`;\n }\n}\n\nfunction normalizeContour(contourPoints: Vec2[]): Vec2[] {\n let minX = Infinity, minY = Infinity;\n for (const p of contourPoints) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n }\n return contourPoints.map((p) => ({ x: p.x - minX, y: p.y - minY }));\n}\n\nfunction getTransformedContour(\n normalizedPoints: Vec2[],\n x: number,\n y: number,\n rotation: number\n): Vec2[] {\n let maxCX = 0, maxCY = 0;\n for (const p of normalizedPoints) {\n if (p.x > maxCX) maxCX = p.x;\n if (p.y > maxCY) maxCY = p.y;\n }\n const cx = maxCX / 2;\n const cy = maxCY / 2;\n\n const rotated = rotatePolygon(normalizedPoints, rotation, cx, cy);\n\n let rMinX = Infinity, rMinY = Infinity;\n for (const p of rotated) {\n if (p.x < rMinX) rMinX = p.x;\n if (p.y < rMinY) rMinY = p.y;\n }\n\n return translatePolygon(rotated, x - rMinX, y - rMinY);\n}\n\nfunction checkCollisions(\n items: ModifyPlacement[],\n normalizedOffsetContour: Vec2[],\n paperWidth: number,\n paperHeight: number\n): ModifyPlacement[] {\n const polys = items.map((item) =>\n getTransformedContour(normalizedOffsetContour, item.x, item.y, item.rotation)\n );\n\n return items.map((item, i) => {\n let colliding = false;\n\n if (!polygonInsideBounds(polys[i], paperWidth, paperHeight)) {\n colliding = true;\n }\n\n if (!colliding) {\n for (let j = 0; j < items.length; j++) {\n if (i === j) continue;\n if (polygonsCollide(polys[i], polys[j])) {\n colliding = true;\n break;\n }\n }\n }\n\n return { ...item, isColliding: colliding };\n });\n}\n\nfunction screenToSvg(svg: SVGSVGElement, clientX: number, clientY: number): Vec2 {\n const ctm = svg.getScreenCTM();\n if (!ctm) return { x: 0, y: 0 };\n const inv = ctm.inverse();\n return {\n x: inv.a * clientX + inv.c * clientY + inv.e,\n y: inv.b * clientX + inv.d * clientY + inv.f,\n };\n}\n\nexport function ModifyLayout({\n paperResult,\n config,\n modelId,\n attrs,\n offsetContourPoints,\n contourPath,\n dielineViewBox,\n onSubmit,\n onCancel,\n}: ModifyLayoutProps) {\n const svgRef = useRef<SVGSVGElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [items, setItems] = useState<ModifyPlacement[]>(() =>\n paperResult.placements.map((p) => ({\n id: `item-${nextItemId++}`,\n x: p.x,\n y: p.y,\n rotation: p.rotation,\n isColliding: false,\n }))\n );\n\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const dragRef = useRef<{\n itemId: string;\n offsetX: number;\n offsetY: number;\n } | null>(null);\n const panRef = useRef<{ x: number; y: number } | null>(null);\n\n const [zoom, setZoom] = useState(0.9);\n const [panX, setPanX] = useState(0);\n const [panY, setPanY] = useState(0);\n\n const theme = useMemo(() => getAutoLayoutTheme(), []);\n\n const normalizedOffsetContour = useMemo(() => normalizeContour(offsetContourPoints), [offsetContourPoints]);\n\n const pw = paperResult.paperWidth;\n const ph = paperResult.paperHeight;\n const padding = 20;\n\n const vbWidth = (pw + padding * 2) / zoom;\n const vbHeight = (ph + padding * 2) / zoom;\n const vbX = -padding + (pw + padding * 2) / 2 - vbWidth / 2 - panX;\n const vbY = -padding + (ph + padding * 2) / 2 - vbHeight / 2 - panY;\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n const layoutDistance = config.layoutDistance;\n\n useEffect(() => {\n setItems((prev) => checkCollisions(prev, normalizedOffsetContour, pw, ph));\n }, []);\n\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n useEffect(() => {\n const handleMouseMove = (e: PointerEvent) => {\n const svg = svgRef.current;\n if (!svg) return;\n\n if (dragRef.current) {\n const svgPt = screenToSvg(svg, e.clientX, e.clientY);\n const newX = svgPt.x - dragRef.current.offsetX;\n const newY = svgPt.y - dragRef.current.offsetY;\n const dragItemId = dragRef.current.itemId;\n\n setItems((prev) => {\n const updated = prev.map((it) =>\n it.id === dragItemId ? { ...it, x: newX, y: newY } : it\n );\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n return;\n }\n\n if (panRef.current) {\n const rect = svg.getBoundingClientRect();\n const currentVbWidth = (pw + padding * 2) / zoom;\n const currentVbHeight = (ph + padding * 2) / zoom;\n const scaleX = currentVbWidth / rect.width;\n const scaleY = currentVbHeight / rect.height;\n const dx = (e.clientX - panRef.current.x) * scaleX;\n const dy = (e.clientY - panRef.current.y) * scaleY;\n setPanX((p) => p + dx);\n setPanY((p) => p + dy);\n panRef.current = { x: e.clientX, y: e.clientY };\n }\n };\n\n const handleMouseUp = () => {\n if (dragRef.current) {\n dragRef.current = null;\n setIsDragging(false);\n }\n if (panRef.current) {\n panRef.current = null;\n }\n };\n\n window.addEventListener(\"pointermove\", handleMouseMove);\n window.addEventListener(\"pointerup\", handleMouseUp);\n window.addEventListener(\"pointercancel\", handleMouseUp);\n return () => {\n window.removeEventListener(\"pointermove\", handleMouseMove);\n window.removeEventListener(\"pointerup\", handleMouseUp);\n window.removeEventListener(\"pointercancel\", handleMouseUp);\n };\n }, [normalizedOffsetContour, pw, ph, zoom, padding]);\n\n const handleItemMouseDown = useCallback((e: React.PointerEvent, itemId: string) => {\n e.stopPropagation();\n e.preventDefault();\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const svgPt = screenToSvg(svg, e.clientX, e.clientY);\n const item = itemsRef.current.find((it) => it.id === itemId);\n if (!item) return;\n\n setSelectedId(itemId);\n setIsDragging(true);\n dragRef.current = {\n itemId,\n offsetX: svgPt.x - item.x,\n offsetY: svgPt.y - item.y,\n };\n }, []);\n\n const handleSvgMouseDown = useCallback((e: React.PointerEvent) => {\n if (dragRef.current) return;\n setSelectedId(null);\n panRef.current = { x: e.clientX, y: e.clientY };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n const factor = Math.exp(-e.deltaY * 0.002);\n setZoom((prev) => Math.min(10, Math.max(0.1, prev * factor)));\n };\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }, []);\n\n const handleRotate = useCallback((degrees: number) => {\n if (!selectedId) return;\n setItems((prev) => {\n const updated = prev.map((it) =>\n it.id === selectedId ? { ...it, rotation: degrees } : it\n );\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n }, [selectedId, normalizedOffsetContour, pw, ph]);\n\n const handleAdd = useCallback(() => {\n const newItem: ModifyPlacement = {\n id: `item-${nextItemId++}`,\n x: pw / 2 - dielineViewBox.width / 2,\n y: ph / 2 - dielineViewBox.height / 2,\n rotation: 0,\n isColliding: false,\n };\n setItems((prev) => {\n const updated = [...prev, newItem];\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n setSelectedId(newItem.id);\n }, [pw, ph, dielineViewBox, normalizedOffsetContour]);\n\n const handleRemove = useCallback((itemId: string) => {\n setItems((prev) => {\n const filtered = prev.filter((it) => it.id !== itemId);\n return checkCollisions(filtered, normalizedOffsetContour, pw, ph);\n });\n if (selectedId === itemId) setSelectedId(null);\n }, [selectedId, normalizedOffsetContour, pw, ph]);\n\n const handleSubmit = useCallback(() => {\n const validItems = items.filter((it) => !it.isColliding);\n const placements: AutoLayoutPlacement[] = validItems.map((it) => ({\n x: it.x,\n y: it.y,\n rotation: it.rotation,\n }));\n\n const modifiedPaper: AutoLayoutPaperResult = {\n ...paperResult,\n paperId: `modify-${paperResult.paperId}`,\n paperName: `modify-${paperResult.paperName}`,\n producedPerSheet: placements.length,\n totalSheets: placements.length > 0 ? Math.ceil(config.quantity / placements.length) : 0,\n totalProduced: placements.length > 0 ? Math.ceil(config.quantity / placements.length) * placements.length : 0,\n excessCount: placements.length > 0 ? Math.ceil(config.quantity / placements.length) * placements.length - config.quantity : 0,\n wastePercent: Math.round(\n ((pw * ph - placements.length * dielineViewBox.width * dielineViewBox.height) /\n (pw * ph)) *\n 10000\n ) / 100,\n independentSheets: placements.length > 0 ? Math.ceil(config.quantity / placements.length) : 0,\n independentTotalArea: placements.length > 0\n ? Math.ceil(config.quantity / placements.length) * pw * ph\n : 0,\n placements,\n gripperSide: paperResult.gripperSide,\n };\n onSubmit(modifiedPaper);\n }, [items, paperResult, config, pw, ph, dielineViewBox, onSubmit]);\n\n const selectedItem = items.find((it) => it.id === selectedId);\n const collidingCount = items.filter((it) => it.isColliding).length;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\", width: \"100%\" }}>\n <div className=\"modify-header\">\n <h3>Modify: {paperResult.paperName}</h3>\n <div className=\"modify-actions\">\n <button type=\"button\" className=\"cancel\" onClick={onCancel}>Cancel</button>\n <button type=\"button\" className=\"primary\" onClick={handleSubmit}>\n Submit ({items.length - collidingCount} pcs)\n </button>\n </div>\n </div>\n\n <div className=\"modify-layout-shell\">\n <div className=\"modify-canvas\" ref={containerRef}>\n {selectedItem && (\n <div className=\"modify-toolbar\">\n {ROTATIONS.map((deg) => (\n <button\n key={deg}\n type=\"button\"\n className={selectedItem.rotation === deg ? \"active\" : \"\"}\n onClick={() => handleRotate(deg)}\n >\n {deg}°\n </button>\n ))}\n </div>\n )}\n\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbWidth} ${vbHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n backgroundColor: theme.colorBackground,\n cursor: isDragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n onPointerDown={handleSvgMouseDown}\n >\n <rect\n width={pw}\n height={ph}\n fill={theme.colorPaperFill}\n stroke={theme.colorPaperStroke}\n strokeWidth={0.5}\n />\n\n {config.isShowColorbar && (\n <Colorbar\n side={colorbarSide}\n colorbarHeight={config.colorbarHeight}\n paperWidth={pw}\n paperHeight={ph}\n />\n )}\n\n {config.spacing > 0 &&\n getSpacingRects(gripperSide, pw, ph, config.spacing, config.griper, cbDepth).map(\n (r, i) => (\n <rect\n key={`sp-${i}`}\n x={r.x}\n y={r.y}\n width={r.w}\n height={r.h}\n fill={theme.colorSpacing}\n />\n )\n )}\n\n {config.griper > 0 && (\n <Gripper\n side={gripperSide}\n paperWidth={pw}\n paperHeight={ph}\n depth={config.griper}\n fillColor={theme.colorGriper}\n />\n )}\n\n {contourPath && layoutDistance > 0 && (\n <defs>\n {items.map((item) => {\n const maskId = `modify-dist-mask-${item.id}`;\n const d = layoutDistance / 2;\n const pad = d + 2;\n return (\n <mask key={maskId} id={maskId}>\n <rect x={-pad} y={-pad} width={dielineViewBox.width + pad * 2} height={dielineViewBox.height + pad * 2} fill=\"white\" />\n <path\n d={contourPath}\n fill=\"black\"\n stroke=\"black\"\n strokeWidth={Math.max(0, (d - 0.25) * 2)}\n strokeLinejoin=\"round\"\n />\n </mask>\n );\n })}\n </defs>\n )}\n\n {items.map((item) => {\n const transform = getDielineTransform(\n item.x,\n item.y,\n item.rotation,\n dielineViewBox.width,\n dielineViewBox.height\n );\n const isSelected = item.id === selectedId;\n\n return (\n <g\n key={item.id}\n transform={transform}\n style={{ cursor: \"move\" }}\n onPointerDown={(e) => handleItemMouseDown(e, item.id)}\n >\n <rect\n x={0}\n y={0}\n width={dielineViewBox.width}\n height={dielineViewBox.height}\n fill=\"none\"\n pointerEvents=\"all\"\n />\n\n {contourPath && layoutDistance > 0 && (\n <g mask={`url(#modify-dist-mask-${item.id})`}>\n <path\n d={contourPath}\n fill=\"none\"\n stroke={item.isColliding ? \"#FF0000\" : theme.colorDistanceLine}\n strokeWidth={(layoutDistance / 2 + 0.25) * 2}\n strokeLinejoin=\"round\"\n opacity={item.isColliding ? 0.6 : 1}\n style={{ pointerEvents: \"none\" }}\n />\n </g>\n )}\n\n {item.isColliding && (\n <path\n d={contourPath}\n fill=\"#FF0000\"\n opacity={0.2}\n style={{ pointerEvents: \"none\" }}\n />\n )}\n\n {isSelected && (\n <path\n d={contourPath}\n fill=\"none\"\n stroke=\"#3b82f6\"\n strokeWidth={0.8}\n strokeDasharray=\"3,2\"\n style={{ pointerEvents: \"none\" }}\n />\n )}\n\n {renderDieLine(modelId, attrs)}\n </g>\n );\n })}\n </svg>\n </div>\n\n <div className=\"modify-control\">\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>\n Items ({items.length})\n </div>\n\n <div className=\"modify-item-list\">\n {items.map((item, idx) => {\n const cls = [\n \"modify-item-entry\",\n item.id === selectedId ? \"selected\" : \"\",\n item.isColliding ? \"colliding\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n key={item.id}\n className={cls}\n onClick={() => setSelectedId(item.id === selectedId ? null : item.id)}\n >\n <span>#{idx} ({item.rotation}°)</span>\n <button\n type=\"button\"\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#ef4444\",\n cursor: \"pointer\",\n fontSize: 16,\n padding: \"0 4px\",\n lineHeight: 1,\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.id);\n }}\n >\n x\n </button>\n </div>\n );\n })}\n </div>\n\n <button\n type=\"button\"\n style={{\n padding: \"8px 12px\",\n border: \"1px solid #d4dce7\",\n borderRadius: 8,\n background: \"#f8fafc\",\n cursor: \"pointer\",\n fontWeight: 600,\n fontSize: 13,\n marginTop: 8,\n }}\n onClick={handleAdd}\n >\n + Add Piece\n </button>\n\n {collidingCount > 0 && (\n <div\n style={{\n marginTop: 12,\n padding: \"8px 10px\",\n background: \"#fef2f2\",\n border: \"1px solid #fca5a5\",\n borderRadius: 8,\n fontSize: 12,\n color: \"#dc2626\",\n }}\n >\n {collidingCount} item(s) colliding — will be excluded on submit\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n useMemo,\n useCallback,\n useEffect,\n} from \"react\";\nimport { BaseCanvas, type BaseCanvasRef } from \"../../canvas/baseCanvas\";\nimport type {\n AutoLayoutConfig,\n AutoLayoutPackedResult,\n AutoLayoutPaperResult,\n AutoLayoutResult,\n GripperSide,\n} from \"../../../types/autoLayout\";\nimport { calculateAutoLayout } from \"../../../utils/autoLayout\";\nimport type { AutoLayoutThemeConfig } from \"../../../statics/autoLayoutThemeConfig\";\nimport { getAutoLayoutTheme } from \"../../../config\";\nimport { Colorbar, appendColorbarToSvg } from \"./colorbar\";\nimport { Gripper, appendGripperToSvg } from \"./gripper\";\nimport {\n DIE_LINE_BECF_1010A,\n generateBecf1010a,\n generateOuterContour,\n contourToPath,\n} from \"../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n DIE_LINE_BECF_1030A,\n generateBecf1030a,\n generateOuterContour as generateOuterContour1030a,\n contourToPath as contourToPath1030a,\n} from \"../../dieline/tuck-end-boxes/becf-1030a\";\nimport type { TuckEndBoxAttributes } from \"../../dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1030a } from \"../../dieline/tuck-end-boxes/becf-1030a/generate\";\nimport { parseSvgPath } from \"../../../utils/autoLayout/svgPathToPdf\";\nimport {\n offsetContour as offsetContour1010a,\n} from \"../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n offsetContour as offsetContour1030a,\n} from \"../../dieline/tuck-end-boxes/becf-1030a\";\nimport {\n DIE_LINE_BECF_11D01,\n generateBecf11d01,\n generateOuterContour as generateOuterContour11d01,\n contourToPath as contourToPath11d01,\n offsetContour as offsetContour11d01,\n} from \"../../dieline/standard-boxes/becf-11d01\";\nimport type { StandardBoxAttributes } from \"../../dieline/standard-boxes/becf-11d01/generate\";\nimport { ModifyLayout } from \"./modifyLayout\";\n\ninterface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\n// เพิ่ม MODEL ใหม่ที่นี่\nfunction resolveModel(modelId: string, attrs: Record<string, number>, layoutDistance: number): {\n dieline: DielinePaths;\n contourPath: string;\n offsetContourPoints: Point[];\n generate: (a: Record<string, number>) => DielinePaths;\n generateContour: (a: Record<string, number>) => Point[];\n} | null {\n switch (modelId) {\n case \"BECF-1030A\": {\n const typedAttrs = attrs as unknown as TuckEndBoxAttributes1030a;\n const contour = generateOuterContour1030a(typedAttrs);\n return {\n dieline: generateBecf1030a(typedAttrs),\n contourPath: contourToPath1030a(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour1030a(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf1030a(a as unknown as TuckEndBoxAttributes1030a),\n generateContour: (a) => generateOuterContour1030a(a as unknown as TuckEndBoxAttributes1030a),\n };\n }\n case \"BECF-11D01\": {\n const typedAttrs = attrs as unknown as StandardBoxAttributes;\n const contour = generateOuterContour11d01(typedAttrs);\n return {\n dieline: generateBecf11d01(typedAttrs),\n contourPath: contourToPath11d01(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour11d01(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf11d01(a as unknown as StandardBoxAttributes),\n generateContour: (a) => generateOuterContour11d01(a as unknown as StandardBoxAttributes),\n };\n }\n case \"BECF-1010A\":\n default: {\n const typedAttrs = attrs as unknown as TuckEndBoxAttributes;\n const contour = generateOuterContour(typedAttrs);\n return {\n dieline: generateBecf1010a(typedAttrs),\n contourPath: contourToPath(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour1010a(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf1010a(a as unknown as TuckEndBoxAttributes),\n generateContour: (a) => generateOuterContour(a as unknown as TuckEndBoxAttributes),\n };\n }\n }\n}\n\nfunction renderDieLine(modelId: string, attrs: Record<string, number>) {\n return (() => {\n switch (modelId) {\n case \"BECF-1030A\":\n return (\n <DIE_LINE_BECF_1030A\n attributes={attrs as unknown as TuckEndBoxAttributes1030a}\n renderAs=\"group\"\n />\n );\n case \"BECF-11D01\":\n return (\n <DIE_LINE_BECF_11D01\n attributes={attrs as unknown as StandardBoxAttributes}\n renderAs=\"group\"\n />\n );\n case \"BECF-1010A\":\n default:\n return (\n <DIE_LINE_BECF_1010A\n attributes={attrs as unknown as TuckEndBoxAttributes}\n renderAs=\"group\"\n />\n );\n }\n })();\n}\n\nconst PAPER_GAP = 20;\nconst PX_PER_MM = 96 / 25.4;\nconst RESULT_PANEL_HEIGHT = 55;\nconst RESULT_GAP = 5;\n\nfunction getOpposite(side: GripperSide): GripperSide {\n switch (side) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n }\n}\n\nfunction getSpacingRects(\n gripperSide: GripperSide,\n paperWidth: number,\n paperHeight: number,\n spacing: number,\n griper: number,\n cbDepth: number\n): { x: number; y: number; w: number; h: number }[] {\n switch (gripperSide) {\n case \"bottom\":\n return [\n { x: 0, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n { x: paperWidth - spacing, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n ];\n case \"top\":\n return [\n { x: 0, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n { x: paperWidth - spacing, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n ];\n case \"left\":\n return [\n { x: griper, y: 0, w: paperWidth - griper - cbDepth, h: spacing },\n { x: griper, y: paperHeight - spacing, w: paperWidth - griper - cbDepth, h: spacing },\n ];\n case \"right\":\n return [\n { x: cbDepth, y: 0, w: paperWidth - cbDepth - griper, h: spacing },\n { x: cbDepth, y: paperHeight - spacing, w: paperWidth - cbDepth - griper, h: spacing },\n ];\n }\n}\n\nfunction drawTransformed(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n tx: (x: number, y: number) => number,\n ty: (x: number, y: number) => number\n) {\n const commands = parseSvgPath(d);\n let startX = 0, startY = 0;\n let curX = 0, curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\": {\n curX = tx(cmd.x!, cmd.y!);\n curY = ty(cmd.x!, cmd.y!);\n startX = curX;\n startY = curY;\n break;\n }\n case \"L\": {\n const nx = tx(cmd.x!, cmd.y!);\n const ny = ty(cmd.x!, cmd.y!);\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const cx1 = tx(cmd.x1!, cmd.y1!);\n const cy1 = ty(cmd.x1!, cmd.y1!);\n const cx2 = tx(cmd.x2!, cmd.y2!);\n const cy2 = ty(cmd.x2!, cmd.y2!);\n const cx3 = tx(cmd.x!, cmd.y!);\n const cy3 = ty(cmd.x!, cmd.y!);\n const x0 = curX, y0 = curY;\n const steps = 20;\n let prevX = x0, prevY = y0;\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n const nx = mt*mt*mt*x0 + 3*mt*mt*t*cx1 + 3*mt*t*t*cx2 + t*t*t*cx3;\n const ny = mt*mt*mt*y0 + 3*mt*mt*t*cy1 + 3*mt*t*t*cy2 + t*t*t*cy3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = cx3;\n curY = cy3;\n break;\n }\n case \"Q\": {\n const qx1 = tx(cmd.x1!, cmd.y1!);\n const qy1 = ty(cmd.x1!, cmd.y1!);\n const qx2 = tx(cmd.x!, cmd.y!);\n const qy2 = ty(cmd.x!, cmd.y!);\n const qx0 = curX, qy0 = curY;\n const steps = 16;\n let prevX = qx0, prevY = qy0;\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n const nx = mt*mt*qx0 + 2*mt*t*qx1 + t*t*qx2;\n const ny = mt*mt*qy0 + 2*mt*t*qy1 + t*t*qy2;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n\nexport interface AutoLayoutProps {\n config: AutoLayoutConfig | null;\n onResult?: (result: AutoLayoutResult | null) => void;\n onModifiedPapers?: (papers: AutoLayoutPaperResult[]) => void;\n}\n\nexport interface AutoLayoutRef {\n getResult: () => AutoLayoutResult | null;\n getPackedResult: (paperIndex: number) => Promise<AutoLayoutPackedResult>;\n exportDielineImage: () => Promise<Blob>;\n exportImage: (paperIndex: number) => Promise<Blob>;\n exportPdf: (paperIndex: number) => Promise<Blob>;\n}\n\nfunction getDielineTransform(\n x: number,\n y: number,\n rotation: number,\n w: number,\n h: number\n): string {\n switch (rotation) {\n case 90:\n return `translate(${x + h}, ${y}) rotate(90)`;\n case 180:\n return `translate(${x + w}, ${y + h}) rotate(180)`;\n case 270:\n return `translate(${x}, ${y + w}) rotate(270)`;\n case 45:\n return `translate(${x}, ${y}) rotate(45, ${w / 2}, ${h / 2})`;\n default:\n return `translate(${x}, ${y})`;\n }\n}\n\nexport const AUTO_LAYOUT = forwardRef<AutoLayoutRef, AutoLayoutProps>(\n ({ config, onResult, onModifiedPapers }, ref) => {\n const canvasRef = useRef<BaseCanvasRef>(null);\n const [result, setResult] = useState<AutoLayoutResult | null>(null);\n const [modifiedPapers, setModifiedPapers] = useState<AutoLayoutPaperResult[]>([]);\n const [modifyingPaper, setModifyingPaper] = useState<AutoLayoutPaperResult | null>(null);\n\n useEffect(() => {\n if (!config) {\n setResult(null);\n onResult?.(null);\n return;\n }\n const res = calculateAutoLayout(config);\n setResult(res);\n onResult?.(res);\n setModifiedPapers([]);\n setModifyingPaper(null);\n }, [config]);\n\n const theme = useMemo<AutoLayoutThemeConfig>(\n () => getAutoLayoutTheme(),\n []\n );\n\n const modelId = config?.model.modelId ?? \"\";\n const attrs = config?.model.attributes;\n const layoutDistance = config?.layoutDistance ?? 0;\n\n const resolved = useMemo(\n () => (modelId && attrs ? resolveModel(modelId, attrs, layoutDistance) : null),\n [modelId, attrs, layoutDistance]\n );\n\n const dieline = resolved?.dieline ?? null;\n const contourPath = resolved?.contourPath ?? null;\n\n const allPapers = useMemo(() => {\n const base = result?.papers ?? [];\n return [...base, ...modifiedPapers];\n }, [result, modifiedPapers]);\n\n const handleModifySubmit = useCallback((paper: AutoLayoutPaperResult) => {\n setModifiedPapers((prev) => {\n const next = [...prev, paper];\n onModifiedPapers?.(next);\n return next;\n });\n setModifyingPaper(null);\n }, [onModifiedPapers]);\n\n const exportDielineImage = useCallback(async (): Promise<Blob> => {\n if (!resolved || !attrs) throw new Error(\"No dieline to export\");\n\n const dl = resolved.generate(attrs);\n const { width: vw, height: vh } = dl.viewBox;\n\n const svgNs = \"http://www.w3.org/2000/svg\";\n const svg = document.createElementNS(svgNs, \"svg\");\n svg.setAttribute(\"xmlns\", svgNs);\n svg.setAttribute(\"viewBox\", `0 0 ${vw} ${vh}`);\n svg.setAttribute(\"width\", String(Math.round(vw * PX_PER_MM)));\n svg.setAttribute(\"height\", String(Math.round(vh * PX_PER_MM)));\n\n const bg = document.createElementNS(svgNs, \"rect\");\n bg.setAttribute(\"width\", String(vw));\n bg.setAttribute(\"height\", String(vh));\n bg.setAttribute(\"fill\", \"#ffffff\");\n svg.appendChild(bg);\n\n for (const d of dl.crease) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorFoldLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n path.setAttribute(\"stroke-dasharray\", \"2,1\");\n svg.appendChild(path);\n }\n for (const d of dl.cut) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorDieLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n svg.appendChild(path);\n }\n\n const svgStr = new XMLSerializer().serializeToString(svg);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.round(vw * PX_PER_MM);\n canvas.height = Math.round(vh * PX_PER_MM);\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n }, [resolved, attrs, theme]);\n\n const exportImage = useCallback(async (paperIndex: number): Promise<Blob> => {\n if (!result || !config || !resolved || !attrs) throw new Error(\"No results to export\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const dl = resolved.generate(attrs);\n const cPath = contourToPath(resolved.generateContour(attrs));\n const dist = config.layoutDistance;\n\n const svgNs = \"http://www.w3.org/2000/svg\";\n const svg = document.createElementNS(svgNs, \"svg\");\n svg.setAttribute(\"xmlns\", svgNs);\n svg.setAttribute(\"viewBox\", `0 0 ${paperResult.paperWidth} ${paperResult.paperHeight}`);\n svg.setAttribute(\"width\", String(Math.round(paperResult.paperWidth * PX_PER_MM)));\n svg.setAttribute(\"height\", String(Math.round(paperResult.paperHeight * PX_PER_MM)));\n\n const bg = document.createElementNS(svgNs, \"rect\");\n bg.setAttribute(\"width\", String(paperResult.paperWidth));\n bg.setAttribute(\"height\", String(paperResult.paperHeight));\n bg.setAttribute(\"fill\", theme.colorPaperFill);\n bg.setAttribute(\"stroke\", theme.colorPaperStroke);\n bg.setAttribute(\"stroke-width\", \"0.5\");\n svg.appendChild(bg);\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n\n if (config.isShowColorbar) {\n appendColorbarToSvg(svg, svgNs, colorbarSide, config.colorbarHeight, paperResult.paperWidth, paperResult.paperHeight);\n }\n\n if (config.spacing > 0) {\n const rects = getSpacingRects(gripperSide, paperResult.paperWidth, paperResult.paperHeight, config.spacing, config.griper, cbDepth);\n for (const sr of rects) {\n const r = document.createElementNS(svgNs, \"rect\");\n r.setAttribute(\"x\", String(sr.x));\n r.setAttribute(\"y\", String(sr.y));\n r.setAttribute(\"width\", String(sr.w));\n r.setAttribute(\"height\", String(sr.h));\n r.setAttribute(\"fill\", theme.colorSpacing);\n svg.appendChild(r);\n }\n }\n\n if (config.griper > 0) {\n appendGripperToSvg(svg, svgNs, gripperSide, paperResult.paperWidth, paperResult.paperHeight, config.griper, theme.colorGriper);\n }\n\n if (dist > 0) {\n const defs = document.createElementNS(svgNs, \"defs\");\n paperResult.placements.forEach((_, idx) => {\n const mask = document.createElementNS(svgNs, \"mask\");\n mask.setAttribute(\"id\", `exp-dist-mask-${idx}`);\n const pad = dist + 2;\n const maskRect = document.createElementNS(svgNs, \"rect\");\n maskRect.setAttribute(\"x\", String(-pad));\n maskRect.setAttribute(\"y\", String(-pad));\n maskRect.setAttribute(\"width\", String(dl.viewBox.width + pad * 2));\n maskRect.setAttribute(\"height\", String(dl.viewBox.height + pad * 2));\n maskRect.setAttribute(\"fill\", \"white\");\n mask.appendChild(maskRect);\n const maskPath = document.createElementNS(svgNs, \"path\");\n maskPath.setAttribute(\"d\", cPath);\n maskPath.setAttribute(\"fill\", \"black\");\n maskPath.setAttribute(\"stroke\", \"black\");\n maskPath.setAttribute(\"stroke-width\", String(Math.max(0, (dist - 0.25) * 2)));\n maskPath.setAttribute(\"stroke-linejoin\", \"round\");\n mask.appendChild(maskPath);\n defs.appendChild(mask);\n });\n svg.appendChild(defs);\n }\n\n paperResult.placements.forEach((placement, idx) => {\n const g = document.createElementNS(svgNs, \"g\");\n g.setAttribute(\n \"transform\",\n getDielineTransform(placement.x, placement.y, placement.rotation, dl.viewBox.width, dl.viewBox.height)\n );\n\n if (dist > 0) {\n const distGroup = document.createElementNS(svgNs, \"g\");\n distGroup.setAttribute(\"mask\", `url(#exp-dist-mask-${idx})`);\n const distPath = document.createElementNS(svgNs, \"path\");\n distPath.setAttribute(\"d\", cPath);\n distPath.setAttribute(\"fill\", \"none\");\n distPath.setAttribute(\"stroke\", theme.colorDistanceLine);\n distPath.setAttribute(\"stroke-width\", String((dist + 0.25) * 2));\n distPath.setAttribute(\"stroke-linejoin\", \"round\");\n distGroup.appendChild(distPath);\n g.appendChild(distGroup);\n }\n\n for (const d of dl.crease) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorFoldLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n path.setAttribute(\"stroke-dasharray\", \"2,1\");\n g.appendChild(path);\n }\n for (const d of dl.cut) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorDieLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n g.appendChild(path);\n }\n svg.appendChild(g);\n });\n\n const svgStr = new XMLSerializer().serializeToString(svg);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.round(paperResult.paperWidth * PX_PER_MM);\n canvas.height = Math.round(paperResult.paperHeight * PX_PER_MM);\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = theme.colorPaperFill;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n }, [result, config, theme, resolved, attrs, allPapers]);\n\n const exportPdf = useCallback(async (paperIndex: number): Promise<Blob> => {\n if (!result || !config || !resolved || !attrs) throw new Error(\"No results to export\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const dl = resolved.generate(attrs);\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n\n const pw = paperResult.paperWidth;\n const ph = paperResult.paperHeight;\n\n const { jsPDF } = await import(\"jspdf\");\n const doc = new jsPDF({\n orientation: pw >= ph ? \"landscape\" : \"portrait\",\n unit: \"mm\",\n format: [pw, ph],\n });\n\n if (config.isShowColorbar) {\n const BASE_COLORS = [\"#02FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\n const FADE_LEVELS = [1.0, 0.8, 0.6, 0.4, 0.2];\n const fadeToWhite = (hex: string, opacity: number) => {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return {\n r: Math.round(r + (255 - r) * (1 - opacity)),\n g: Math.round(g + (255 - g) * (1 - opacity)),\n b: Math.round(b + (255 - b) * (1 - opacity)),\n };\n };\n const colors = BASE_COLORS.flatMap((base) =>\n FADE_LEVELS.map((level) => fadeToWhite(base, level))\n );\n const count = colors.length;\n const isHoriz = colorbarSide === \"top\" || colorbarSide === \"bottom\";\n const cbH = config.colorbarHeight;\n\n colors.forEach((c, i) => {\n doc.setFillColor(c.r, c.g, c.b);\n if (isHoriz) {\n const w = pw / count;\n const y = colorbarSide === \"top\" ? 0 : ph - cbH;\n doc.rect(i * w, y, w, cbH, \"F\");\n } else {\n const h = ph / count;\n const x = colorbarSide === \"left\" ? 0 : pw - cbH;\n doc.rect(x, i * h, cbH, h, \"F\");\n }\n });\n }\n\n if (config.griper > 0) {\n const hexToRgb = (hex: string) => ({\n r: parseInt(hex.slice(1, 3), 16),\n g: parseInt(hex.slice(3, 5), 16),\n b: parseInt(hex.slice(5, 7), 16),\n });\n const gc = hexToRgb(theme.colorGriper);\n doc.setFillColor(gc.r, gc.g, gc.b);\n\n const depth = config.griper;\n switch (gripperSide) {\n case \"bottom\": doc.rect(0, ph - depth, pw, depth, \"F\"); break;\n case \"top\": doc.rect(0, 0, pw, depth, \"F\"); break;\n case \"left\": doc.rect(0, 0, depth, ph, \"F\"); break;\n case \"right\": doc.rect(pw - depth, 0, depth, ph, \"F\"); break;\n }\n\n const ARROW_COLORS_HEX = [\"#00FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\n const ARROW_SIZE = 2;\n const ARROW_SPACING = 8;\n const totalMarks = (ARROW_COLORS_HEX.length - 1) * ARROW_SPACING;\n const isHoriz = gripperSide === \"top\" || gripperSide === \"bottom\";\n\n ARROW_COLORS_HEX.forEach((hex, idx) => {\n const ac = hexToRgb(hex);\n doc.setFillColor(ac.r, ac.g, ac.b);\n\n if (isHoriz) {\n const cx = (pw - totalMarks) / 2 + idx * ARROW_SPACING;\n const cy = gripperSide === \"bottom\" ? ph - depth / 2 : depth / 2;\n const s = ARROW_SIZE;\n if (gripperSide === \"bottom\") {\n doc.triangle(cx - s, cy - s, cx + s, cy - s, cx, cy + s, \"F\");\n } else {\n doc.triangle(cx - s, cy + s, cx + s, cy + s, cx, cy - s, \"F\");\n }\n } else {\n const cy = (ph - totalMarks) / 2 + idx * ARROW_SPACING;\n const cx = gripperSide === \"left\" ? depth / 2 : pw - depth / 2;\n const s = ARROW_SIZE;\n if (gripperSide === \"left\") {\n doc.triangle(cx + s, cy - s, cx + s, cy + s, cx - s, cy, \"F\");\n } else {\n doc.triangle(cx - s, cy - s, cx - s, cy + s, cx + s, cy, \"F\");\n }\n }\n });\n }\n\n for (const placement of paperResult.placements) {\n const rad = (placement.rotation * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n\n const w = dl.viewBox.width;\n const h = dl.viewBox.height;\n\n let tx: number, ty: number;\n switch (placement.rotation) {\n case 90: tx = placement.x + h; ty = placement.y; break;\n case 180: tx = placement.x + w; ty = placement.y + h; break;\n case 270: tx = placement.x; ty = placement.y + w; break;\n default: tx = placement.x; ty = placement.y; break;\n }\n\n const transformX = (x: number, y: number) => cos * x - sin * y + tx;\n const transformY = (x: number, y: number) => sin * x + cos * y + ty;\n\n doc.setDrawColor(0, 255, 0);\n doc.setLineWidth(0.3);\n for (const d of dl.crease) {\n drawTransformed(doc, d, transformX, transformY);\n }\n\n doc.setDrawColor(255, 0, 0);\n doc.setLineWidth(0.3);\n for (const d of dl.cut) {\n drawTransformed(doc, d, transformX, transformY);\n }\n }\n\n const arrayBuffer = doc.output(\"arraybuffer\");\n return new Blob([arrayBuffer], { type: \"application/pdf\" });\n }, [result, config, theme, resolved, attrs, allPapers]);\n\n const handleExportImage = useCallback(async (paperIndex: number) => {\n const blob = await exportImage(paperIndex);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `layout-${allPapers[paperIndex]?.paperName ?? paperIndex}.png`;\n a.click();\n URL.revokeObjectURL(url);\n }, [exportImage, allPapers]);\n\n const handleExportPdf = useCallback(async (paperIndex: number) => {\n const blob = await exportPdf(paperIndex);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `layout-${allPapers[paperIndex]?.paperName ?? paperIndex}.pdf`;\n a.click();\n URL.revokeObjectURL(url);\n }, [exportPdf, allPapers]);\n\n const getPackedResult = useCallback(async (paperIndex: number): Promise<AutoLayoutPackedResult> => {\n if (!result || !config) throw new Error(\"No results\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const [dielineBlob, layoutBlob] = await Promise.all([\n exportDielineImage(),\n exportImage(paperIndex),\n ]);\n\n return {\n ...paperResult,\n quantity: result.quantity,\n dielineFile: new File([dielineBlob], \"dieline.png\", { type: \"image/png\" }),\n layoutFile: new File([layoutBlob], \"layout.png\", { type: \"image/png\" }),\n };\n }, [result, config, allPapers, exportDielineImage, exportImage]);\n\n useImperativeHandle(ref, () => ({\n getResult: () => result,\n getPackedResult,\n exportDielineImage,\n exportImage,\n exportPdf,\n }), [result, getPackedResult, exportDielineImage, exportImage, exportPdf]);\n\n const paperOriginY = RESULT_PANEL_HEIGHT + RESULT_GAP;\n\n const viewBox = useMemo(() => {\n if (allPapers.length === 0) {\n return { x: 0, y: 0, width: 400, height: 300 };\n }\n let totalW = 0;\n let maxH = 0;\n for (const p of allPapers) {\n totalW += p.paperWidth;\n if (p.paperHeight > maxH) maxH = p.paperHeight;\n }\n totalW += (allPapers.length - 1) * PAPER_GAP;\n const padding = 20;\n return {\n x: -padding,\n y: -padding,\n width: totalW + padding * 2,\n height: maxH + paperOriginY + padding * 2,\n };\n }, [allPapers, paperOriginY]);\n\n if (modifyingPaper && config && resolved) {\n return (\n <ModifyLayout\n paperResult={modifyingPaper}\n config={config}\n modelId={config.model.modelId}\n attrs={config.model.attributes}\n offsetContourPoints={resolved.offsetContourPoints}\n contourPath={resolved.contourPath}\n dielineViewBox={resolved.dieline.viewBox}\n onSubmit={handleModifySubmit}\n onCancel={() => setModifyingPaper(null)}\n />\n );\n }\n\n return (\n <BaseCanvas ref={canvasRef} viewBox={viewBox} backgroundColor={theme.colorBackground}>\n {result && attrs && dieline && allPapers.map((paperResult, paperIdx) => {\n let offsetX = 0;\n for (let i = 0; i < paperIdx; i++) {\n offsetX += allPapers[i].paperWidth + PAPER_GAP;\n }\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config!.isShowColorbar ? config!.colorbarHeight : 0;\n const panelW = paperResult.paperWidth;\n const fontSize = Math.min(4, panelW / 30);\n const padX = fontSize * 1.2;\n const padY = padX;\n const gap = fontSize * 1.4;\n const rank = paperIdx + 1;\n const exportBtnW = fontSize * 14;\n const exportBtnH = fontSize * 1.8;\n\n let curY = padY + fontSize;\n const titleY = curY; curY += gap;\n const recY = curY; curY += gap;\n const perSheetY = curY; curY += gap;\n const sheetsY = curY; curY += gap;\n const producedY = curY; curY += gap;\n const wasteY = curY; curY += gap;\n const exportBtnY = curY;\n\n return (\n <g key={paperResult.paperId} transform={`translate(${offsetX}, 0)`}>\n <rect\n x={0}\n y={0}\n width={panelW}\n height={RESULT_PANEL_HEIGHT}\n rx={2}\n ry={2}\n fill=\"#f8fafc\"\n stroke=\"#d4dce7\"\n strokeWidth={0.3}\n />\n <text x={padX} y={titleY} fontSize={fontSize + 1} fontWeight=\"bold\" fill=\"#0f172a\">\n {paperResult.paperName}\n </text>\n <text x={padX} y={recY} fontSize={fontSize} fontWeight=\"bold\" fill={rank === 1 ? \"#10b981\" : \"#475569\"}>\n Recommended: #{rank}\n </text>\n <text x={padX} y={perSheetY} fontSize={fontSize} fill=\"#475569\">\n Produced per sheet: {paperResult.producedPerSheet} pcs\n </text>\n <text x={padX} y={sheetsY} fontSize={fontSize} fill=\"#475569\">\n Sheets needed: {paperResult.independentSheets}\n </text>\n <text x={padX} y={producedY} fontSize={fontSize} fill=\"#475569\">\n Produced: {paperResult.independentSheets * paperResult.producedPerSheet} pcs (excess {paperResult.independentSheets * paperResult.producedPerSheet - (config?.quantity ?? 0)})\n </text>\n <text x={padX} y={wasteY} fontSize={fontSize} fill=\"#475569\">\n Waste per sheet: {paperResult.wastePercent}%\n </text>\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => handleExportImage(paperIdx)}\n >\n <rect\n x={padX}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#0f172a\"\n />\n <text\n x={padX + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Export Sheet\n </text>\n </g>\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => handleExportPdf(paperIdx)}\n >\n <rect\n x={padX + exportBtnW + fontSize * 2}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#1e40af\"\n />\n <text\n x={padX + exportBtnW + fontSize * 2 + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Export PDF\n </text>\n </g>\n {paperResult.producedPerSheet > 0 && (\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => setModifyingPaper(paperResult)}\n >\n <rect\n x={padX + (exportBtnW + fontSize * 2) * 2}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#7c3aed\"\n />\n <text\n x={padX + (exportBtnW + fontSize * 2) * 2 + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Modify Layout\n </text>\n </g>\n )}\n\n <g transform={`translate(0, ${paperOriginY})`}>\n <rect\n width={paperResult.paperWidth}\n height={paperResult.paperHeight}\n fill={theme.colorPaperFill}\n stroke={theme.colorPaperStroke}\n strokeWidth={0.5}\n />\n\n {config!.isShowColorbar && (\n <Colorbar\n side={colorbarSide}\n colorbarHeight={config!.colorbarHeight}\n paperWidth={paperResult.paperWidth}\n paperHeight={paperResult.paperHeight}\n />\n )}\n\n {config!.spacing > 0 && getSpacingRects(\n gripperSide,\n paperResult.paperWidth,\n paperResult.paperHeight,\n config!.spacing,\n config!.griper,\n cbDepth\n ).map((r, i) => (\n <rect key={`sp-${i}`} x={r.x} y={r.y} width={r.w} height={r.h} fill={theme.colorSpacing} />\n ))}\n\n {config!.griper > 0 && (\n <Gripper\n side={gripperSide}\n paperWidth={paperResult.paperWidth}\n paperHeight={paperResult.paperHeight}\n depth={config!.griper}\n fillColor={theme.colorGriper}\n />\n )}\n\n {contourPath && layoutDistance > 0 && (\n <defs>\n {paperResult.placements.map((_, i) => {\n const maskId = `dist-mask-${paperIdx}-${i}`;\n const d = layoutDistance / 2;\n const pad = d + 2;\n return (\n <mask key={maskId} id={maskId}>\n <rect x={-pad} y={-pad} width={dieline.viewBox.width + pad * 2} height={dieline.viewBox.height + pad * 2} fill=\"white\" />\n <path\n d={contourPath}\n fill=\"black\"\n stroke=\"black\"\n strokeWidth={Math.max(0, (d - 0.25) * 2)}\n strokeLinejoin=\"round\"\n />\n </mask>\n );\n })}\n </defs>\n )}\n\n {paperResult.placements.map((placement, i) => {\n const transform = getDielineTransform(\n placement.x,\n placement.y,\n placement.rotation,\n dieline.viewBox.width,\n dieline.viewBox.height\n );\n return (\n <g key={`piece-${i}`} transform={transform}>\n {contourPath && layoutDistance > 0 && (\n <g mask={`url(#dist-mask-${paperIdx}-${i})`}>\n <path\n d={contourPath}\n fill=\"none\"\n stroke={theme.colorDistanceLine}\n strokeWidth={(layoutDistance / 2 + 0.25) * 2}\n strokeLinejoin=\"round\"\n />\n </g>\n )}\n {renderDieLine(config!.model.modelId, attrs)}\n </g>\n );\n })}\n\n </g>\n </g>\n );\n })}\n\n {!result && (\n <text x={200} y={150} textAnchor=\"middle\" fontSize={8} fill=\"#999\">\n Press Calculate to generate layout\n </text>\n )}\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport { MODEL_BECF_1010A } from \"../../model/tuck-end-boxes/becf-1010a\";\nimport { MODEL_BECF_1030A } from \"../../model/tuck-end-boxes/becf-1030a\";\nimport { MODEL_BECF_1040A } from \"../../model/tuck-end-boxes/becf-1040a\";\nimport { MODEL_BECF_11D01 } from \"../../model/standard-boxes/becf-11d01\";\nimport type { ModelMode } from \"../../../statics/modelList\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface DieLineLayoutProps {\n modelId: string;\n attributes: { [key: string]: number } & any;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport interface DieLineLayoutRef {\n getAttributes: () => Record<string, unknown>;\n exportImage: (options?: { isShowDimension?: boolean; originalSize?: boolean }) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nexport const DIE_LINE_LAYOUT = forwardRef<DieLineLayoutRef, DieLineLayoutProps>(\n ({ modelId, ...props }, ref) => {\n switch (modelId) {\n case \"BECF-1010A\":\n return <MODEL_BECF_1010A ref={ref as any} {...props as any} />;\n case \"BECF-1030A\":\n return <MODEL_BECF_1030A ref={ref as any} {...props as any} />;\n case \"BECF-1040A\":\n return <MODEL_BECF_1040A ref={ref as any} {...props as any} />;\n case \"BECF-11D01\":\n return <MODEL_BECF_11D01 ref={ref as any} {...props as any} />;\n default:\n return null;\n }\n }\n);\n","export const BECF_1010A_DEFAULT_ATTRIBUTES = {\n length: 60,\n width: 25,\n height: 100,\n glueArea: 15,\n dustFlap: 15,\n tuckFlap: 15,\n};","export const BECF_1030A_DEFAULT_ATTRIBUTES = {\n length: 105,\n width: 50,\n height: 155,\n glueArea: 15,\n dustFlap: 25,\n tuckFlap: 14,\n};\n","export const BECF_1040A_DEFAULT_ATTRIBUTES = {\n length: 56,\n width: 56,\n height: 150,\n glueArea: 15,\n dustFlap: 30,\n tuckFlap: 14,\n};\n","export const BECF_11D01_DEFAULT_ATTRIBUTES = {\n length: 100,\n width: 50,\n height: 150,\n flapHeight: 50,\n glueArea: 13,\n};\n","import { BECF_1010A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1010a/DEFAULT_ATTRIBUTES\";\nimport { BECF_1030A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1030a/DEFAULT_ATTRIBUTES\";\nimport { BECF_1040A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1040a/DEFAULT_ATTRIBUTES\";\nimport { BECF_11D01_DEFAULT_ATTRIBUTES } from \"./standard-boxes/becf-11d01/DEFAULT_ATTRIBUTES\";\n\nexport type ModelMode = \"DIE_LINE\" | \"3D\" | \"AUTO_LAYOUT\";\n\nexport interface PackagingModel {\n id: string;\n nameEN: string;\n nameTH: string;\n dimension: ModelMode[];\n attributes: Record<string, number>;\n}\n\nexport const modelList: PackagingModel[] = [\n {\n id: \"BECF-1010A\",\n nameEN: \"TUCK END BOXES TYPE A\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ A\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1010A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-1040A\",\n nameEN: \"TUCK END BOXES TYPE B\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ B\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1040A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-1030A\",\n nameEN: \"TUCK END BOXES TYPE C\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ C\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1030A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-11D01\",\n nameEN: \"Standard Box BECF-11D01\",\n nameTH: \"กล่องทั่วไป BECF-11D01\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_11D01_DEFAULT_ATTRIBUTES },\n },\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/dieline/tuck-end-boxes/becf-1010a/generate.ts","../src/statics/modelThemeConfig.ts","../src/statics/autoLayoutThemeConfig.ts","../src/config.ts","../src/components/canvas/baseCanvas/index.tsx","../src/utils/autoLayout/svgPathToPdf.ts","../src/utils/exportDimension.ts","../src/components/dieline/tuck-end-boxes/becf-1010a/index.tsx","../src/components/model/tuck-end-boxes/becf-1010a/index.tsx","../src/components/dieline/tuck-end-boxes/becf-1030a/generate.ts","../src/components/dieline/tuck-end-boxes/becf-1030a/index.tsx","../src/components/model/tuck-end-boxes/becf-1030a/index.tsx","../src/components/dieline/tuck-end-boxes/becf-1040a/generate.ts","../src/components/dieline/tuck-end-boxes/becf-1040a/index.tsx","../src/components/model/tuck-end-boxes/becf-1040a/index.tsx","../src/components/dieline/standard-boxes/becf-11d01/generate.ts","../src/components/dieline/standard-boxes/becf-11d01/index.tsx","../src/components/model/standard-boxes/becf-11d01/index.tsx","../src/utils/autoLayout/rasterize.ts","../src/utils/autoLayout/calculate/shared.ts","../src/utils/autoLayout/calculate/tuck-end-boxes/becf-1010a/index.ts","../src/utils/autoLayout/calculate/tuck-end-boxes/becf-1030a/index.ts","../src/utils/autoLayout/calculate/tuck-end-boxes/becf-1040a/index.ts","../src/utils/autoLayout/calculate/index.ts","../src/utils/autoLayout/polygonCollision.ts","../src/components/shared/auto-layout/colorbar/index.tsx","../src/components/shared/auto-layout/gripper/index.tsx","../src/components/shared/auto-layout/modifyLayout/index.tsx","../src/components/shared/auto-layout/main.tsx","../src/components/shared/die-line-layout/index.tsx","../src/statics/tuck-end-boxes/becf-1010a/DEFAULT_ATTRIBUTES.ts","../src/statics/tuck-end-boxes/becf-1030a/DEFAULT_ATTRIBUTES.ts","../src/statics/tuck-end-boxes/becf-1040a/DEFAULT_ATTRIBUTES.ts","../src/statics/standard-boxes/becf-11d01/DEFAULT_ATTRIBUTES.ts","../src/statics/modelList.ts"],"names":["forwardRef","useRef","useState","useCallback","useImperativeHandle","useEffect","jsx","useMemo","jsxs","Fragment","MT","ARC_R","GLUE_TAPER_RATIO","verticalCreases","horizontalCreases","line","glueAreaPath","topTuckStructure","topTuckTip","bottomTuckStructure","bottomTuckTip","topDustFlaps","bottomDustFlaps","dustFlapPath","generateOuterContour","offsetContour","contourToPath","generateDimensions","MODEL_ID","UNIT_FACTOR","PX_PER_MM","renderDimension","prepareRotation","computeLayoutForPaper","pairGrid","isHorizontal","renderDieLine","getOpposite","getSpacingRects","getDielineTransform","BASE_COLORS","FADE_LEVELS","fadeToWhite","hexToRgb","ARROW_SIZE","ARROW_SPACING"],"mappings":"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","file":"index.js","sourcesContent":["export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1010a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 8;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap / 3, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.2, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.4, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yBody2),\n tuckFoldCrease(xRear, xSide1, tabWidth, yFold1),\n tuckFoldCrease(xFront, xSide2, tabWidth, yFold2)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xSide1, yBody2, xRear, yBody2),\n ...topTuckStructure(xRear, xSide1, yBody1, yFold1, yTop, tabWidth, tabStep),\n ...topTuckTip(xRear, xSide1, yFold1, yTop, tabStep),\n ...bottomTuckStructure(xFront, xSide2, yBody2, yFold2, yBot, tabWidth, tabStep),\n ...bottomTuckTip(xFront, xSide2, yFold2, yBot, tabStep),\n line(xFront, yBody1, xSide2, yBody1),\n line(xFront - MT, yBody1, xFront, yBody1),\n line(xSide2, yBody1, xSide2 + MT, yBody1),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xSide1, yBody1 - MT, xRear, yBody1 - MT),\n line(xSide1, yBody1, xFront - MT, yBody1),\n line(xEnd, yBody1, xSide2 + MT, yBody1),\n line(xFront, yBody2, xSide1 + MT, yBody2),\n line(xSide2, yBody2, xEnd, yBody2),\n line(xFront, yBody2 + MT, xSide2, yBody2 + MT),\n ];\n}\n\nfunction tuckFoldCrease(\n panelLeft: number, panelRight: number, tabWidth: number, yFold: number\n): string {\n return line(panelLeft + tabWidth, yFold, panelRight - tabWidth, yFold);\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xRear: number, xSide1: number,\n yBody1: number, yFold1: number, _yTop: number,\n tabWidth: number, tabStep: number\n): string[] {\n const yStep = yFold1 + tabStep;\n return [\n line(xRear, yBody1, xRear, yStep),\n line(xRear, yStep, xRear + tabWidth, yStep),\n line(xRear + tabWidth, yStep, xRear + tabWidth, yFold1),\n line(xSide1 - tabWidth, yFold1, xSide1 - tabWidth, yStep),\n line(xSide1 - tabWidth, yStep, xSide1, yStep),\n line(xSide1, yStep, xSide1, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xRear: number, xSide1: number,\n yFold1: number, yTop: number, tabStep: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n const yStart = yFold1 + tabStep;\n return [\n `M${left} ${yStart}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yStart}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xFront: number, xSide2: number,\n yBody2: number, yFold2: number, _yBot: number,\n tabWidth: number, tabStep: number\n): string[] {\n const yStep = yFold2 - tabStep;\n return [\n line(xFront, yBody2, xFront, yStep),\n line(xFront, yStep, xFront + tabWidth, yStep),\n line(xFront + tabWidth, yStep, xFront + tabWidth, yFold2),\n line(xSide2 - tabWidth, yFold2, xSide2 - tabWidth, yStep),\n line(xSide2 - tabWidth, yStep, xSide2, yStep),\n line(xSide2, yStep, xSide2, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xFront: number, xSide2: number,\n yFold2: number, yBot: number, tabStep: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n const yStart = yFold2 - tabStep;\n return [\n `M${left} ${yStart}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yStart}`,\n ];\n}\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: boolean, rightOffset: boolean\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset) {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset) {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, false, false),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap / 3, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.2, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.4, dustFlap - dfCorner);\n const tabStep = 1;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n points.push({ x: xRear, y: yFold1 + tabStep });\n points.push({ x: xRear + MT, y: yFold1 + tabStep });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide1 - MT, y: yFold1 + tabStep });\n points.push({ x: xSide1, y: yFold1 + tabStep });\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - MT - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xFront - MT, y: yBody1 - dfVertical });\n points.push({ x: xFront - MT, y: yBody1 });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + MT, y: yBody1 });\n points.push({ x: xSide2 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xSide2, y: yFold2 - tabStep });\n points.push({ x: xSide2 - MT, y: yFold2 - tabStep });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xFront + MT, y: yFold2 - tabStep });\n points.push({ x: xFront, y: yFold2 - tabStep });\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide1 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide1 + MT, y: yBody2 });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide1,\n y1: yTop,\n x2: xSide1,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yFold1,\n x2: xSide1,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -14,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","export interface ModelThemeConfig {\n colorBackground: string;\n colorDieLine: string;\n colorFoldLine: string;\n}\n\nexport const MODEL_THEME_CONFIG: ModelThemeConfig = {\n colorBackground: \"#FAFAFA\",\n colorDieLine: \"#FF0000\",\n colorFoldLine: \"#00FF00\",\n};\n","export interface AutoLayoutThemeConfig {\n colorBackground: string;\n colorPaperFill: string;\n colorPaperStroke: string;\n colorGriper: string;\n colorSpacing: string;\n colorDistanceLine: string;\n colorDieLine: string;\n colorFoldLine: string;\n colorLabel: string;\n}\n\nexport const AUTO_LAYOUT_THEME_CONFIG: AutoLayoutThemeConfig = {\n colorBackground: \"#F5F5F5\",\n colorPaperFill: \"#FFFFFF\",\n colorPaperStroke: \"#999999\",\n colorGriper: \"#228B22\",\n colorSpacing: \"#f54278\",\n colorDistanceLine: \"#0088FF\",\n colorDieLine: \"#FF0000\",\n colorFoldLine: \"#00FF00\",\n colorLabel: \"#333333\",\n};\n","import {\n MODEL_THEME_CONFIG,\n type ModelThemeConfig,\n} from \"./statics/modelThemeConfig\";\nimport {\n AUTO_LAYOUT_THEME_CONFIG,\n type AutoLayoutThemeConfig,\n} from \"./statics/autoLayoutThemeConfig\";\n\nexport interface UltimatePackagingConfig {\n modelTheme?: Partial<ModelThemeConfig>;\n autoLayoutTheme?: Partial<AutoLayoutThemeConfig>;\n}\n\nlet globalConfig: UltimatePackagingConfig = {};\n\nexport function configurePackaging(config: UltimatePackagingConfig): void {\n globalConfig = config;\n}\n\nexport function getModelTheme(): ModelThemeConfig {\n return { ...MODEL_THEME_CONFIG, ...globalConfig.modelTheme };\n}\n\nexport function getAutoLayoutTheme(): AutoLayoutThemeConfig {\n return { ...AUTO_LAYOUT_THEME_CONFIG, ...globalConfig.autoLayoutTheme };\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n type CSSProperties,\n type PointerEvent as ReactPointerEvent,\n} from \"react\";\n\nexport interface BaseCanvasViewBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface BaseCanvasProps {\n children: ReactNode;\n viewBox: BaseCanvasViewBox;\n style?: CSSProperties;\n className?: string;\n backgroundColor?: string;\n minZoom?: number;\n maxZoom?: number;\n fitPadding?: number;\n}\n\nexport interface BaseCanvasRef {\n resetView: () => void;\n fitView: () => void;\n getSvgElement: () => SVGSVGElement | null;\n}\n\nconst DEFAULT_MIN_ZOOM = 0.2;\nconst DEFAULT_MAX_ZOOM = 10;\nconst DEFAULT_FIT_PADDING = 0.9;\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nexport const BaseCanvas = forwardRef<BaseCanvasRef, BaseCanvasProps>(\n (\n {\n children,\n viewBox: initialViewBox,\n style,\n className,\n backgroundColor,\n minZoom = DEFAULT_MIN_ZOOM,\n maxZoom = DEFAULT_MAX_ZOOM,\n fitPadding = DEFAULT_FIT_PADDING,\n },\n ref\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const dragRef = useRef<{ pointerId: number; x: number; y: number } | null>(null);\n const hasInitialFit = useRef(false);\n\n const [zoom, setZoom] = useState(1);\n const [panX, setPanX] = useState(0);\n const [panY, setPanY] = useState(0);\n const [dragging, setDragging] = useState(false);\n\n const vbWidth = initialViewBox.width / zoom;\n const vbHeight = initialViewBox.height / zoom;\n const centerX = initialViewBox.x + initialViewBox.width / 2;\n const centerY = initialViewBox.y + initialViewBox.height / 2;\n const vbX = centerX - vbWidth / 2 - panX;\n const vbY = centerY - vbHeight / 2 - panY;\n\n const fitView = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n setZoom(clamp(fitPadding, minZoom, maxZoom));\n setPanX(0);\n setPanY(0);\n }, [initialViewBox.width, initialViewBox.height, fitPadding, minZoom, maxZoom]);\n\n const resetView = useCallback(() => {\n fitView();\n }, [fitView]);\n\n useImperativeHandle(ref, () => ({\n resetView,\n fitView,\n getSvgElement: () => svgRef.current,\n }), [resetView, fitView]);\n\n useEffect(() => {\n if (hasInitialFit.current) return;\n hasInitialFit.current = true;\n fitView();\n }, [fitView]);\n\n useEffect(() => {\n if (!hasInitialFit.current) return;\n fitView();\n }, [initialViewBox.width, initialViewBox.height, fitView]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const rect = svg.getBoundingClientRect();\n const cursorXRatio = (e.clientX - rect.left) / rect.width;\n const cursorYRatio = (e.clientY - rect.top) / rect.height;\n\n const zoomFactor = Math.exp(-e.deltaY * 0.002);\n\n setZoom((prevZoom) => {\n const nextZoom = clamp(prevZoom * zoomFactor, minZoom, maxZoom);\n const prevW = initialViewBox.width / prevZoom;\n const prevH = initialViewBox.height / prevZoom;\n const nextW = initialViewBox.width / nextZoom;\n const nextH = initialViewBox.height / nextZoom;\n\n const dx = (prevW - nextW) * (cursorXRatio - 0.5);\n const dy = (prevH - nextH) * (cursorYRatio - 0.5);\n\n setPanX((prev) => prev + dx);\n setPanY((prev) => prev + dy);\n\n return nextZoom;\n });\n };\n\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }, [initialViewBox.width, initialViewBox.height, minZoom, maxZoom]);\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n dragRef.current = { pointerId: e.pointerId, x: e.clientX, y: e.clientY };\n setDragging(true);\n e.currentTarget.setPointerCapture(e.pointerId);\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragRef.current || dragRef.current.pointerId !== e.pointerId) return;\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const rect = svg.getBoundingClientRect();\n const scaleX = vbWidth / rect.width;\n const scaleY = vbHeight / rect.height;\n\n const dx = (e.clientX - dragRef.current.x) * scaleX;\n const dy = (e.clientY - dragRef.current.y) * scaleY;\n\n setPanX((prev) => prev + dx);\n setPanY((prev) => prev + dy);\n\n dragRef.current = { pointerId: e.pointerId, x: e.clientX, y: e.clientY };\n };\n\n const onPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragRef.current || dragRef.current.pointerId !== e.pointerId) return;\n dragRef.current = null;\n setDragging(false);\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId);\n }\n };\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n cursor: dragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n ...style,\n }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n >\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbWidth} ${vbHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n backgroundColor,\n }}\n >\n {children}\n </svg>\n </div>\n );\n }\n);\n","export interface PdfPathCommand {\n type: \"M\" | \"L\" | \"C\" | \"Q\" | \"Z\";\n x?: number;\n y?: number;\n x1?: number;\n y1?: number;\n x2?: number;\n y2?: number;\n}\n\nfunction arcToLines(\n cx: number, cy: number,\n rx: number, ry: number,\n startAngle: number, endAngle: number,\n steps: number\n): { x: number; y: number }[] {\n const pts: { x: number; y: number }[] = [];\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const angle = startAngle + (endAngle - startAngle) * t;\n pts.push({\n x: cx + rx * Math.cos(angle),\n y: cy + ry * Math.sin(angle),\n });\n }\n return pts;\n}\n\nfunction svgArcToCenterParam(\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n fA: number, fS: number,\n x2: number, y2: number\n): { cx: number; cy: number; startAngle: number; endAngle: number } {\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n const dx2 = (x1 - x2) / 2;\n const dy2 = (y1 - y2) / 2;\n\n const x1p = cosPhi * dx2 + sinPhi * dy2;\n const y1p = -sinPhi * dx2 + cosPhi * dy2;\n\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n let lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const s = Math.sqrt(lambda);\n rx *= s;\n ry *= s;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const root = Math.sqrt(sq) * (fA === fS ? -1 : 1);\n\n const cxp = root * (rx * y1p) / ry;\n const cyp = root * -(ry * x1p) / rx;\n\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n const startAngle = Math.atan2((y1p - cyp) / ry, (x1p - cxp) / rx);\n let dTheta = Math.atan2((-y1p - cyp) / ry, (-x1p - cxp) / rx) - startAngle;\n\n if (fS === 0 && dTheta > 0) dTheta -= 2 * Math.PI;\n if (fS === 1 && dTheta < 0) dTheta += 2 * Math.PI;\n\n return { cx, cy, startAngle, endAngle: startAngle + dTheta };\n}\n\nexport function parseSvgPath(d: string): PdfPathCommand[] {\n const commands: PdfPathCommand[] = [];\n const tokens = d.match(/[MmLlHhVvCcQqAaZz]|[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/g);\n if (!tokens) return commands;\n\n let i = 0;\n let curX = 0;\n let curY = 0;\n let startX = 0;\n let startY = 0;\n let lastCommand = \"\";\n\n const num = (): number => parseFloat(tokens[i++]);\n\n while (i < tokens.length) {\n const token = tokens[i];\n let cmd: string;\n\n if (/[MmLlHhVvCcQqAaZz]/.test(token)) {\n cmd = token;\n i++;\n } else {\n cmd = lastCommand;\n }\n\n switch (cmd) {\n case \"M\": {\n const x = num();\n const y = num();\n commands.push({ type: \"M\", x, y });\n curX = x;\n curY = y;\n startX = x;\n startY = y;\n lastCommand = \"L\";\n break;\n }\n case \"m\": {\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"M\", x, y });\n curX = x;\n curY = y;\n startX = x;\n startY = y;\n lastCommand = \"l\";\n break;\n }\n case \"L\": {\n const x = num();\n const y = num();\n commands.push({ type: \"L\", x, y });\n curX = x;\n curY = y;\n lastCommand = \"L\";\n break;\n }\n case \"l\": {\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"L\", x, y });\n curX = x;\n curY = y;\n lastCommand = \"l\";\n break;\n }\n case \"H\": {\n const x = num();\n commands.push({ type: \"L\", x, y: curY });\n curX = x;\n lastCommand = \"H\";\n break;\n }\n case \"h\": {\n const x = curX + num();\n commands.push({ type: \"L\", x, y: curY });\n curX = x;\n lastCommand = \"h\";\n break;\n }\n case \"V\": {\n const y = num();\n commands.push({ type: \"L\", x: curX, y });\n curY = y;\n lastCommand = \"V\";\n break;\n }\n case \"v\": {\n const y = curY + num();\n commands.push({ type: \"L\", x: curX, y });\n curY = y;\n lastCommand = \"v\";\n break;\n }\n case \"C\": {\n const x1 = num();\n const y1 = num();\n const x2 = num();\n const y2 = num();\n const x = num();\n const y = num();\n commands.push({ type: \"C\", x1, y1, x2, y2, x, y });\n curX = x;\n curY = y;\n lastCommand = \"C\";\n break;\n }\n case \"c\": {\n const x1 = curX + num();\n const y1 = curY + num();\n const x2 = curX + num();\n const y2 = curY + num();\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"C\", x1, y1, x2, y2, x, y });\n curX = x;\n curY = y;\n lastCommand = \"c\";\n break;\n }\n case \"Q\": {\n const x1 = num();\n const y1 = num();\n const x = num();\n const y = num();\n commands.push({ type: \"Q\", x1, y1, x, y });\n curX = x;\n curY = y;\n lastCommand = \"Q\";\n break;\n }\n case \"q\": {\n const x1 = curX + num();\n const y1 = curY + num();\n const x = curX + num();\n const y = curY + num();\n commands.push({ type: \"Q\", x1, y1, x, y });\n curX = x;\n curY = y;\n lastCommand = \"q\";\n break;\n }\n case \"A\":\n case \"a\": {\n const rx = Math.abs(num());\n const ry = Math.abs(num());\n const rotation = num() * Math.PI / 180;\n const fA = num();\n const fS = num();\n const rawX = num();\n const rawY = num();\n const ex = cmd === \"a\" ? curX + rawX : rawX;\n const ey = cmd === \"a\" ? curY + rawY : rawY;\n\n if (rx === 0 || ry === 0) {\n commands.push({ type: \"L\", x: ex, y: ey });\n } else {\n const { cx, cy, startAngle, endAngle } = svgArcToCenterParam(\n curX, curY, rx, ry, rotation, fA, fS, ex, ey\n );\n const pts = arcToLines(cx, cy, rx, ry, startAngle, endAngle, 16);\n for (let j = 1; j < pts.length; j++) {\n commands.push({ type: \"L\", x: pts[j].x, y: pts[j].y });\n }\n }\n\n curX = ex;\n curY = ey;\n lastCommand = cmd;\n break;\n }\n case \"Z\":\n case \"z\": {\n commands.push({ type: \"Z\" });\n curX = startX;\n curY = startY;\n lastCommand = \"Z\";\n break;\n }\n default:\n i++;\n break;\n }\n }\n\n return commands;\n}\n\nexport function drawSvgPathToPdf(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n offsetX: number,\n offsetY: number\n): void {\n const commands = parseSvgPath(d);\n let startX = 0;\n let startY = 0;\n let curX = 0;\n let curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\":\n curX = cmd.x! + offsetX;\n curY = cmd.y! + offsetY;\n startX = curX;\n startY = curY;\n break;\n case \"L\": {\n const nx = cmd.x! + offsetX;\n const ny = cmd.y! + offsetY;\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const x0 = curX;\n const y0 = curY;\n const x1 = cmd.x1! + offsetX;\n const y1 = cmd.y1! + offsetY;\n const x2 = cmd.x2! + offsetX;\n const y2 = cmd.y2! + offsetY;\n const x3 = cmd.x! + offsetX;\n const y3 = cmd.y! + offsetY;\n const steps = 20;\n let prevX = x0;\n let prevY = y0;\n for (let si = 1; si <= steps; si++) {\n const t = si / steps;\n const mt = 1 - t;\n const nx =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n const ny =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = x3;\n curY = y3;\n break;\n }\n case \"Q\": {\n const qx0 = curX;\n const qy0 = curY;\n const qx1 = cmd.x1! + offsetX;\n const qy1 = cmd.y1! + offsetY;\n const qx2 = cmd.x! + offsetX;\n const qy2 = cmd.y! + offsetY;\n const qSteps = 16;\n let qPrevX = qx0;\n let qPrevY = qy0;\n for (let si = 1; si <= qSteps; si++) {\n const t = si / qSteps;\n const mt = 1 - t;\n const nx = mt * mt * qx0 + 2 * mt * t * qx1 + t * t * qx2;\n const ny = mt * mt * qy0 + 2 * mt * t * qy1 + t * t * qy2;\n doc.line(qPrevX, qPrevY, nx, ny);\n qPrevX = nx;\n qPrevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n","import { parseSvgPath } from \"./autoLayout/svgPathToPdf\";\nimport type { ModelThemeConfig } from \"../statics/modelThemeConfig\";\n\ninterface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\ninterface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport interface ExportDimensionParams {\n modelId: string;\n dieline: DielinePaths;\n dimensions: DimensionLine[];\n attributes: Record<string, number>;\n unit: string;\n factor: number;\n theme: ModelThemeConfig;\n}\n\nconst A4_W = 210;\nconst A4_H = 297;\nconst MARGIN = 10;\nconst FOOTER_H = 40;\nconst DIM_PADDING = 15;\n\nfunction camelToCapitalize(str: string): string {\n return str\n .replace(/([A-Z])/g, \" $1\")\n .replace(/^./, (s) => s.toUpperCase());\n}\n\nfunction hexToRgb(hex: string) {\n return {\n r: parseInt(hex.slice(1, 3), 16),\n g: parseInt(hex.slice(3, 5), 16),\n b: parseInt(hex.slice(5, 7), 16),\n };\n}\n\nfunction drawScaledPath(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n scale: number,\n ox: number,\n oy: number,\n) {\n const commands = parseSvgPath(d);\n let startX = 0;\n let startY = 0;\n let curX = 0;\n let curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\":\n curX = cmd.x! * scale + ox;\n curY = cmd.y! * scale + oy;\n startX = curX;\n startY = curY;\n break;\n case \"L\": {\n const nx = cmd.x! * scale + ox;\n const ny = cmd.y! * scale + oy;\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const x0 = curX;\n const y0 = curY;\n const x1 = cmd.x1! * scale + ox;\n const y1 = cmd.y1! * scale + oy;\n const x2 = cmd.x2! * scale + ox;\n const y2 = cmd.y2! * scale + oy;\n const x3 = cmd.x! * scale + ox;\n const y3 = cmd.y! * scale + oy;\n const steps = 20;\n let prevX = x0;\n let prevY = y0;\n for (let si = 1; si <= steps; si++) {\n const t = si / steps;\n const mt = 1 - t;\n const nx =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n const ny =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = x3;\n curY = y3;\n break;\n }\n case \"Q\": {\n const qx0 = curX;\n const qy0 = curY;\n const qx1 = cmd.x1! * scale + ox;\n const qy1 = cmd.y1! * scale + oy;\n const qx2 = cmd.x! * scale + ox;\n const qy2 = cmd.y! * scale + oy;\n const qSteps = 16;\n let qPrevX = qx0;\n let qPrevY = qy0;\n for (let si = 1; si <= qSteps; si++) {\n const t = si / qSteps;\n const mt = 1 - t;\n const nx = mt * mt * qx0 + 2 * mt * t * qx1 + t * t * qx2;\n const ny = mt * mt * qy0 + 2 * mt * t * qy1 + t * t * qy2;\n doc.line(qPrevX, qPrevY, nx, ny);\n qPrevX = nx;\n qPrevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n\nexport async function exportDimensionPdf(\n params: ExportDimensionParams,\n): Promise<Blob> {\n const { modelId, dieline, dimensions, attributes, unit, factor, theme } =\n params;\n\n const availW = A4_W - MARGIN * 2;\n const availH = A4_H - MARGIN - FOOTER_H - MARGIN;\n\n const { width: vw, height: vh } = dieline.viewBox;\n const totalDieW = vw + DIM_PADDING * 2;\n const totalDieH = vh + DIM_PADDING * 2;\n\n const scale = Math.min(availW / totalDieW, availH / totalDieH);\n\n const { jsPDF } = await import(\"jspdf\");\n const doc = new jsPDF({\n orientation: \"portrait\",\n unit: \"mm\",\n format: \"a4\",\n });\n\n const scaledW = totalDieW * scale;\n const scaledH = totalDieH * scale;\n const ox = MARGIN + (availW - scaledW) / 2 + DIM_PADDING * scale;\n const oy = MARGIN + (availH - scaledH) / 2 + DIM_PADDING * scale;\n\n const creaseRgb = hexToRgb(theme.colorFoldLine);\n doc.setDrawColor(creaseRgb.r, creaseRgb.g, creaseRgb.b);\n doc.setLineWidth(0.3);\n for (const d of dieline.crease) {\n drawScaledPath(doc, d, scale, ox, oy);\n }\n\n const cutRgb = hexToRgb(theme.colorDieLine);\n doc.setDrawColor(cutRgb.r, cutRgb.g, cutRgb.b);\n doc.setLineWidth(0.3);\n for (const d of dieline.cut) {\n drawScaledPath(doc, d, scale, ox, oy);\n }\n\n const tick = 1.5 * scale;\n\n for (const dim of dimensions) {\n if (dim.orientation === \"horizontal\") {\n const y = (dim.y1 + dim.offset) * scale + oy;\n const x1 = dim.x1 * scale + ox;\n const x2 = dim.x2 * scale + ox;\n\n doc.setDrawColor(0, 0, 0);\n doc.setLineWidth(0.2 * scale);\n doc.line(x1, y, x2, y);\n\n doc.setLineWidth(0.3 * scale);\n doc.line(x1, y - tick, x1, y + tick);\n doc.line(x2, y - tick, x2, y + tick);\n\n const midX = (x1 + x2) / 2;\n doc.setFontSize(3.5 * scale * 2.83);\n doc.setTextColor(0, 0, 0);\n doc.text(dim.label, midX, y - 1.5 * scale, { align: \"center\" });\n } else {\n const x = (dim.x1 + dim.offset) * scale + ox;\n const y1 = dim.y1 * scale + oy;\n const y2 = dim.y2 * scale + oy;\n\n doc.setDrawColor(0, 0, 0);\n doc.setLineWidth(0.2 * scale);\n doc.line(x, y1, x, y2);\n\n doc.setLineWidth(0.3 * scale);\n doc.line(x - tick, y1, x + tick, y1);\n doc.line(x - tick, y2, x + tick, y2);\n\n const midY = (y1 + y2) / 2;\n const fontSize = 3.5 * scale * 2.83;\n doc.setFontSize(fontSize);\n doc.setTextColor(0, 0, 0);\n const textX = x - 1.5 * scale;\n const tw = doc.getTextWidth(dim.label);\n doc.text(dim.label, textX, midY + tw / 2, { angle: 90 });\n }\n }\n\n const footerY = A4_H - FOOTER_H;\n const halfW = (A4_W - MARGIN * 2) / 2;\n const centerX = MARGIN + halfW;\n\n doc.setDrawColor(180, 180, 180);\n doc.setLineWidth(0.3);\n doc.line(MARGIN, footerY, A4_W - MARGIN, footerY);\n doc.line(centerX, footerY, centerX, A4_H - MARGIN);\n\n doc.setTextColor(0, 0, 0);\n doc.setFontSize(9);\n doc.text(\"Luca Block Co.,Ltd.\", MARGIN + 3, footerY + 6);\n doc.text(\n `Cartons-Tuck end boxes-${modelId}`,\n A4_W - MARGIN - 3,\n footerY + 6,\n { align: \"right\" },\n );\n\n const attrEntries = Object.entries(attributes);\n const col1X = MARGIN + 3;\n const col2X = MARGIN + 3 + halfW / 2;\n const attrStartY = footerY + 14;\n const lineH = 5;\n\n doc.setFontSize(7);\n const half = Math.ceil(attrEntries.length / 2);\n for (let i = 0; i < half; i++) {\n const [key, val] = attrEntries[i];\n doc.text(\n `${camelToCapitalize(key)}: ${(val * factor).toFixed(1)} ${unit}`,\n col1X,\n attrStartY + i * lineH,\n );\n\n const j = i + half;\n if (j < attrEntries.length) {\n const [key2, val2] = attrEntries[j];\n doc.text(\n `${camelToCapitalize(key2)}: ${(val2 * factor).toFixed(1)} ${unit}`,\n col2X,\n attrStartY + i * lineH,\n );\n }\n }\n\n const arrayBuffer = doc.output(\"arraybuffer\");\n return new Blob([arrayBuffer], { type: \"application/pdf\" });\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1010a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1010a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1010A\";\n\nexport interface DieLineBecf1010aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1010aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={3.5}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={3.5}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1010A = forwardRef<DieLineBecf1010aRef, DieLineBecf1010aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1010a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1010aProps extends DieLineBecf1010aProps {}\n\nexport interface CanvasBecf1010aRef extends DieLineBecf1010aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1010A = forwardRef<CanvasBecf1010aRef, CanvasBecf1010aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1010aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1010a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1010A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1010A,\n DIE_LINE_BECF_1010A,\n CanvasBecf1010aRef,\n DieLineBecf1010aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nexport type { CanvasBecf1010aRef as ModelBecf1010aRef } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1010a\";\n\nexport interface ModelBecf1010aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1010A = forwardRef<CanvasBecf1010aRef | DieLineBecf1010aRef, ModelBecf1010aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1010A ref={ref as React.Ref<CanvasBecf1010aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1010A ref={ref as React.Ref<DieLineBecf1010aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1030a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 9;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap * 0.2, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.12, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.28, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yBody2, tabWidth, yFold1, yFold2, tabStep)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xFront, yBody1, xSide2, yBody1),\n line(xFront, yBody2, xSide2, yBody2),\n line(xFront - MT, yBody1, xFront, yBody1),\n line(xSide2, yBody1, xSide2 + MT, yBody1),\n line(xFront - MT, yBody2, xFront, yBody2),\n line(xSide2, yBody2, xSide2 + MT, yBody2),\n ...topTuckStructure(xRear, xSide1, yBody1, yFold1, tabWidth, tabStep),\n ...topTuckTip(xRear, xSide1, yFold1, yTop),\n ...bottomTuckStructure(xRear, xSide1, yBody2, yFold2, tabWidth, tabStep),\n ...bottomTuckTip(xRear, xSide1, yFold2, yBot),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xRear: number, xSide1: number, _xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number,\n tabWidth: number, yFold1: number, yFold2: number, tabStep: number\n): string[] {\n return [\n line(xSide1, yBody1 - MT, xRear, yBody1 - MT),\n line(xSide1, yBody2 + MT, xRear, yBody2 + MT),\n line(xSide1, yBody1, _xFront - MT, yBody1),\n line(xSide1, yBody2, _xFront - MT, yBody2),\n line(xEnd, yBody1, xSide2 + MT, yBody1),\n line(xEnd, yBody2, xSide2 + MT, yBody2),\n line(xRear + tabWidth, yFold1 + tabStep, xSide1 - tabWidth, yFold1 + tabStep),\n line(xRear + tabWidth, yFold2 - tabStep, xSide1 - tabWidth, yFold2 - tabStep),\n ];\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xRear: number, xSide1: number,\n yBody1: number, yFold1: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yFold1),\n line(xRear, yFold1, xRear + tabWidth, yFold1),\n line(xRear + tabWidth, yFold1, xRear + tabWidth, yFold1 + tabStep),\n line(xSide1 - tabWidth, yFold1 + tabStep, xSide1 - tabWidth, yFold1),\n line(xSide1 - tabWidth, yFold1, xSide1, yFold1),\n line(xSide1, yFold1, xSide1, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xRear: number, xSide1: number,\n yFold1: number, yTop: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n return [\n `M${left} ${yFold1}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yFold1}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xRear: number, xSide1: number,\n yBody2: number, yFold2: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xRear, yBody2, xRear, yFold2),\n line(xRear, yFold2, xRear + tabWidth, yFold2),\n line(xRear + tabWidth, yFold2, xRear + tabWidth, yFold2 - tabStep),\n line(xSide1 - tabWidth, yFold2 - tabStep, xSide1 - tabWidth, yFold2),\n line(xSide1 - tabWidth, yFold2, xSide1, yFold2),\n line(xSide1, yFold2, xSide1, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xRear: number, xSide1: number,\n yFold2: number, yBot: number\n): string[] {\n const left = xRear + MT;\n const right = xSide1 - MT;\n return [\n `M${left} ${yFold2}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yFold2}`,\n ];\n}\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: boolean, rightOffset: boolean\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset) {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset) {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, false, true),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, true, false),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap * 0.2, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.12, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap * 0.28, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n points.push({ x: xRear, y: yFold1 });\n points.push({ x: xRear + MT, y: yFold1 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide1 - MT, y: yFold1 });\n points.push({ x: xSide1, y: yFold1 });\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - MT - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xFront - MT, y: yBody1 - dfVertical });\n points.push({ x: xFront - MT, y: yBody1 });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + MT, y: yBody1 });\n points.push({ x: xSide2 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide2 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide2 + MT, y: yBody2 });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - MT, y: yBody2 });\n points.push({ x: xFront - MT, y: yBody2 + dfVertical });\n points.push({ x: xFront - MT - dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xSide1, y: yFold2 });\n points.push({ x: xSide1 - MT, y: yFold2 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide1 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xRear + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xRear + MT, y: yFold2 });\n points.push({ x: xRear, y: yFold2 });\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide1,\n y1: yTop,\n x2: xSide1,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yFold1,\n x2: xSide1,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -14,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xSide1 + width,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1030a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1030a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1030A\";\n\nexport interface DieLineBecf1030aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1030aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1030A = forwardRef<DieLineBecf1030aRef, DieLineBecf1030aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1030a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1030aProps extends DieLineBecf1030aProps {}\n\nexport interface CanvasBecf1030aRef extends DieLineBecf1030aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1030A = forwardRef<CanvasBecf1030aRef, CanvasBecf1030aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1030aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1030a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1030A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1030A,\n DIE_LINE_BECF_1030A,\n CanvasBecf1030aRef,\n DieLineBecf1030aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nexport type { CanvasBecf1030aRef as ModelBecf1030aRef } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1030a\";\n\nexport interface ModelBecf1030aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1030A = forwardRef<CanvasBecf1030aRef | DieLineBecf1030aRef, ModelBecf1030aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1030A ref={ref as React.Ref<CanvasBecf1030aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1030A ref={ref as React.Ref<DieLineBecf1030aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface TuckEndBoxAttributes {\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst ARC_R = 5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\n\nexport function generateBecf1040a(attr: TuckEndBoxAttributes): DielinePaths {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const tabWidth = 7;\n const tabStep = 1;\n\n const dfInset = Math.min(dustFlap / 6, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.1, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap / 6, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n crease.push(\n ...verticalCreases(xRear, xSide1, xFront, xSide2, yBody1, yBody2),\n ...horizontalCreases(xSide1, xFront, xSide2, xEnd, yBody1, yBody2, tabWidth, yFold1, yFold2, tabStep)\n );\n\n cut.push(\n line(xEnd, yBody1, xEnd, yBody2),\n glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea),\n line(xSide1, yBody1, xRear, yBody1),\n line(xSide1, yBody2, xRear, yBody2),\n line(xSide1, yBody1, xSide1 + MT, yBody1),\n line(xSide1, yBody2, xSide1 + MT, yBody2),\n ...topTuckStructure(xFront, xSide2, yBody1, yFold1, tabWidth, tabStep),\n ...topTuckTip(xFront, xSide2, yFold1, 0),\n ...bottomTuckStructure(xFront, xSide2, yBody2, yFold2, tabWidth, tabStep),\n ...bottomTuckTip(xFront, xSide2, yFold2, yBot),\n ...topDustFlaps(xSide1, xFront, xSide2, xEnd, yBody1, dustFlap, dfCorner, dfInset, dfVertical),\n ...bottomDustFlaps(xSide1, xFront, xSide2, xEnd, yBody2, dustFlap, dfCorner, dfInset, dfVertical)\n );\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction verticalCreases(\n xRear: number, xSide1: number, xFront: number, xSide2: number,\n yBody1: number, yBody2: number\n): string[] {\n return [\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n ];\n}\n\nfunction horizontalCreases(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yBody2: number,\n tabWidth: number, yFold1: number, yFold2: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody1, xSide1 + MT, yBody1),\n line(xFront, yBody2, xSide1 + MT, yBody2),\n line(xFront, yBody1 - MT, xSide2, yBody1 - MT),\n line(xFront, yBody2 + MT, xSide2, yBody2 + MT),\n line(xSide2, yBody1, xEnd, yBody1),\n line(xSide2, yBody2, xEnd, yBody2),\n line(xFront + tabWidth, yFold1 + tabStep, xSide2 - tabWidth, yFold1 + tabStep),\n line(xFront + tabWidth, yFold2 - tabStep, xSide2 - tabWidth, yFold2 - tabStep),\n ];\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topTuckStructure(\n xFront: number, xSide2: number,\n yBody1: number, yFold1: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody1, xFront, yFold1),\n line(xFront, yFold1, xFront + tabWidth, yFold1),\n line(xFront + tabWidth, yFold1, xFront + tabWidth, yFold1 + tabStep),\n line(xSide2 - tabWidth, yFold1 + tabStep, xSide2 - tabWidth, yFold1),\n line(xSide2 - tabWidth, yFold1, xSide2, yFold1),\n line(xSide2, yFold1, xSide2, yBody1),\n ];\n}\n\nfunction topTuckTip(\n xFront: number, xSide2: number,\n yFold1: number, yTop: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n return [\n `M${left} ${yFold1}` +\n ` L${left} ${yTop + ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${left + ARC_R} ${yTop}` +\n ` L${right - ARC_R} ${yTop}` +\n ` A${ARC_R} ${ARC_R} 0 0 1 ${right} ${yTop + ARC_R}` +\n ` L${right} ${yFold1}`,\n ];\n}\n\nfunction bottomTuckStructure(\n xFront: number, xSide2: number,\n yBody2: number, yFold2: number,\n tabWidth: number, tabStep: number\n): string[] {\n return [\n line(xFront, yBody2, xFront, yFold2),\n line(xFront, yFold2, xFront + tabWidth, yFold2),\n line(xFront + tabWidth, yFold2, xFront + tabWidth, yFold2 - tabStep),\n line(xSide2 - tabWidth, yFold2 - tabStep, xSide2 - tabWidth, yFold2),\n line(xSide2 - tabWidth, yFold2, xSide2, yFold2),\n line(xSide2, yFold2, xSide2, yBody2),\n ];\n}\n\nfunction bottomTuckTip(\n xFront: number, xSide2: number,\n yFold2: number, yBot: number\n): string[] {\n const left = xFront + MT;\n const right = xSide2 - MT;\n return [\n `M${left} ${yFold2}` +\n ` L${left} ${yBot - ARC_R}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${left + ARC_R} ${yBot}` +\n ` L${right - ARC_R} ${yBot}` +\n ` A${ARC_R} ${ARC_R} 0 0 0 ${right} ${yBot - ARC_R}` +\n ` L${right} ${yFold2}`,\n ];\n}\n\ntype DustFlapOffset = \"none\" | \"mt\" | \"edge\";\n\nfunction dustFlapPath(\n panelLeft: number, panelRight: number,\n yBase: number, dir: number,\n dustFlap: number, dfCorner: number, dfInset: number, dfVertical: number,\n leftOffset: DustFlapOffset, rightOffset: DustFlapOffset\n): string {\n let d = `M${panelLeft} ${yBase}`;\n\n if (leftOffset === \"mt\") {\n d += ` L${panelLeft + MT} ${yBase}`;\n d += ` L${panelLeft + MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + MT + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else if (leftOffset === \"edge\") {\n d += ` L${panelLeft} ${yBase + dir * dfVertical}`;\n d += ` L${panelLeft + dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n } else {\n d += ` L${panelLeft + dfCorner} ${yBase + dir * dfCorner}`;\n }\n d += ` L${panelLeft + dfInset} ${yBase + dir * dustFlap}`;\n\n d += ` L${panelRight - dfInset} ${yBase + dir * dustFlap}`;\n\n if (rightOffset === \"mt\") {\n d += ` L${panelRight - MT - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight - MT} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight - MT} ${yBase}`;\n d += ` L${panelRight} ${yBase}`;\n } else if (rightOffset === \"edge\") {\n d += ` L${panelRight - dfCorner} ${yBase + dir * (dfVertical + dfCorner)}`;\n d += ` L${panelRight} ${yBase + dir * dfVertical}`;\n d += ` L${panelRight} ${yBase}`;\n } else {\n d += ` L${panelRight - dfCorner} ${yBase + dir * dfCorner}`;\n d += ` L${panelRight} ${yBase}`;\n }\n\n return d;\n}\n\nfunction topDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, \"mt\", \"none\"),\n dustFlapPath(xSide2, xEnd, yBody1, -1, dustFlap, dfCorner, dfInset, dfVertical, \"none\", \"edge\"),\n ];\n}\n\nfunction bottomDustFlaps(\n xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, dustFlap: number,\n dfCorner: number, dfInset: number, dfVertical: number\n): string[] {\n return [\n dustFlapPath(xSide1, xFront, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, \"mt\", \"none\"),\n dustFlapPath(xSide2, xEnd, yBody2, 1, dustFlap, dfCorner, dfInset, dfVertical, \"none\", \"edge\"),\n ];\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: TuckEndBoxAttributes): Point[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n const dfInset = Math.min(dustFlap / 6, width * 0.2);\n const dfCorner = Math.min(dustFlap * 0.1, dfInset * 0.6);\n const dfVertical = Math.min(dustFlap / 6, dustFlap - dfCorner);\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n const yFold2 = tuckFlap + width + height + width;\n const yBot = tuckFlap + 2 * width + height + tuckFlap;\n\n const arcSteps = 8;\n const points: Point[] = [];\n\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n points.push({ x: xSide1, y: yBody1 });\n\n points.push({ x: xSide1 + MT, y: yBody1 });\n points.push({ x: xSide1 + MT, y: yBody1 - dfVertical });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xSide1 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xFront - dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xFront, y: yBody1 });\n\n points.push({ x: xFront, y: yFold1 });\n points.push({ x: xFront + MT, y: yFold1 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = Math.PI + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = -Math.PI / 2 + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yTop + ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xSide2 - MT, y: yFold1 });\n points.push({ x: xSide2, y: yFold1 });\n points.push({ x: xSide2, y: yBody1 });\n\n points.push({ x: xSide2 + dfCorner, y: yBody1 - dfCorner });\n points.push({ x: xSide2 + dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfInset, y: yBody1 - dustFlap });\n points.push({ x: xEnd - dfCorner, y: yBody1 - dfVertical - dfCorner });\n points.push({ x: xEnd, y: yBody1 - dfVertical });\n points.push({ x: xEnd, y: yBody1 });\n\n points.push({ x: xEnd, y: yBody2 });\n\n points.push({ x: xEnd, y: yBody2 + dfVertical });\n points.push({ x: xEnd - dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xEnd - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide2 + dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xSide2, y: yBody2 });\n\n points.push({ x: xSide2, y: yFold2 });\n points.push({ x: xSide2 - MT, y: yFold2 });\n\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xSide2 - MT - ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n for (let i = 0; i <= arcSteps; i++) {\n const a = (Math.PI / 2) + (Math.PI / 2) * (i / arcSteps);\n points.push({\n x: xFront + MT + ARC_R + ARC_R * Math.cos(a),\n y: yBot - ARC_R + ARC_R * Math.sin(a),\n });\n }\n\n points.push({ x: xFront + MT, y: yFold2 });\n points.push({ x: xFront, y: yFold2 });\n points.push({ x: xFront, y: yBody2 });\n\n points.push({ x: xFront - dfCorner, y: yBody2 + dfCorner });\n points.push({ x: xFront - dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + dfInset, y: yBody2 + dustFlap });\n points.push({ x: xSide1 + MT + dfCorner, y: yBody2 + dfVertical + dfCorner });\n points.push({ x: xSide1 + MT, y: yBody2 + dfVertical });\n points.push({ x: xSide1 + MT, y: yBody2 });\n points.push({ x: xSide1, y: yBody2 });\n\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: TuckEndBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, glueArea, dustFlap, tuckFlap } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yFold1 = tuckFlap;\n const yBody1 = tuckFlap + width;\n const yBody2 = tuckFlap + width + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * tuckFlap + 2 * width + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide2,\n y1: yTop,\n x2: xSide2,\n y2: yFold1,\n label: fmt(tuckFlap),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xSide2,\n y1: yFold1,\n x2: xSide2,\n y2: yBody1,\n label: fmt(width),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yBody1 - dustFlap,\n x2: xEnd,\n y2: yBody1,\n label: fmt(dustFlap),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf1040a,\n generateDimensions,\n TuckEndBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { TuckEndBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf1040a, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-1040A\";\n\nexport interface DieLineBecf1040aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n glueArea: number;\n dustFlap: number;\n tuckFlap: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf1040aRef {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY-1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_1040A = forwardRef<DieLineBecf1040aRef, DieLineBecf1040aProps>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf1040a(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n glueArea: attributes.glueArea * factor,\n dustFlap: attributes.dustFlap * factor,\n tuckFlap: attributes.tuckFlap * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf1040aProps extends DieLineBecf1040aProps {}\n\nexport interface CanvasBecf1040aRef extends DieLineBecf1040aRef {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_1040A = forwardRef<CanvasBecf1040aRef, CanvasBecf1040aProps>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf1040aRef>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf1040a(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_1040A ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_1040A,\n DIE_LINE_BECF_1040A,\n CanvasBecf1040aRef,\n DieLineBecf1040aRef,\n TuckEndBoxAttributes,\n} from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nexport type { CanvasBecf1040aRef as ModelBecf1040aRef } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/tuck-end-boxes/becf-1040a\";\n\nexport interface ModelBecf1040aProps {\n attributes: TuckEndBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_1040A = forwardRef<CanvasBecf1040aRef | DieLineBecf1040aRef, ModelBecf1040aProps>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_1040A ref={ref as React.Ref<CanvasBecf1040aRef>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_1040A ref={ref as React.Ref<DieLineBecf1040aRef>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","export interface StandardBoxAttributes {\n length: number;\n width: number;\n height: number;\n flapHeight: number;\n glueArea: number;\n}\n\nexport interface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\nconst MT = 0.5;\nconst GLUE_TAPER_RATIO = Math.tan((15 * Math.PI) / 180);\nconst FLAP_INSET = 2;\n\nexport function generateBecf11d01(attr: StandardBoxAttributes): DielinePaths {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n const yBot = 2 * flapHeight + height;\n\n const totalWidth = xEnd;\n const totalHeight = yBot;\n\n const cut: string[] = [];\n const crease: string[] = [];\n\n // ── Vertical creases (panel boundaries through body) ──\n crease.push(\n line(xRear, yBody1, xRear, yBody2),\n line(xSide1, yBody1, xSide1, yBody2),\n line(xFront, yBody1, xFront, yBody2),\n line(xSide2, yBody1, xSide2, yBody2),\n );\n\n // ── Horizontal creases at top (yBody1) ──\n // Rear dust flap crease (with MT offset inward)\n crease.push(line(xRear + FLAP_INSET, yBody1 + MT, xSide1 - FLAP_INSET, yBody1 + MT));\n // Side1 full-width flap crease\n crease.push(line(xSide1, yBody1, xFront, yBody1));\n // Front dust flap crease (with MT offset inward)\n crease.push(line(xFront + FLAP_INSET, yBody1 + MT, xSide2 - FLAP_INSET, yBody1 + MT));\n // Side2 full-width flap crease\n crease.push(line(xSide2, yBody1, xEnd, yBody1));\n\n // ── Horizontal creases at bottom (yBody2) ──\n crease.push(line(xRear + FLAP_INSET, yBody2 - MT, xSide1 - FLAP_INSET, yBody2 - MT));\n crease.push(line(xSide1, yBody2, xFront, yBody2));\n crease.push(line(xFront + FLAP_INSET, yBody2 - MT, xSide2 - FLAP_INSET, yBody2 - MT));\n crease.push(line(xSide2, yBody2, xEnd, yBody2));\n\n // ── Right edge (body) ──\n cut.push(line(xEnd, yBody1, xEnd, yBody2));\n\n // ── Glue area (trapezoid on left) ──\n cut.push(glueAreaPath(xRear, yBody1, yBody2, glueTaper, glueArea));\n\n // ── Top flaps ──\n cut.push(...topFlaps(xRear, xSide1, xFront, xSide2, xEnd, yBody1, yTop));\n // ── Bottom flaps ──\n cut.push(...bottomFlaps(xRear, xSide1, xFront, xSide2, xEnd, yBody2, yBot));\n\n return { cut, crease, viewBox: { width: totalWidth, height: totalHeight } };\n}\n\nfunction line(x1: number, y1: number, x2: number, y2: number): string {\n return `M${x1} ${y1} L${x2} ${y2}`;\n}\n\nfunction glueAreaPath(\n xRear: number, yBody1: number, yBody2: number,\n glueTaper: number, glueArea: number\n): string {\n const xOuter = xRear - glueArea;\n return (\n `M${xRear} ${yBody2}` +\n ` L${xOuter} ${yBody2 - glueTaper}` +\n ` L${xOuter} ${yBody1 + glueTaper}` +\n ` L${xRear} ${yBody1}`\n );\n}\n\nfunction topFlaps(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody1: number, yTop: number\n): string[] {\n const paths: string[] = [];\n\n // Rear dust flap (inset)\n const rL = xRear + FLAP_INSET;\n const rR = xSide1 - FLAP_INSET;\n paths.push(\n line(rL, yBody1, rL, yTop),\n line(rL, yTop, rR, yTop),\n line(rR, yTop, rR, yBody1),\n );\n // Base connectors for rear dust flap\n paths.push(\n line(xRear, yBody1, rL, yBody1),\n line(rR, yBody1, xSide1, yBody1),\n );\n\n // Side1 full-width flap\n paths.push(\n line(xSide1, yBody1, xSide1, yTop),\n line(xSide1, yTop, xFront, yTop),\n line(xFront, yTop, xFront, yBody1),\n );\n\n // Front dust flap (inset)\n const fL = xFront + FLAP_INSET;\n const fR = xSide2 - FLAP_INSET;\n paths.push(\n line(fL, yBody1, fL, yTop),\n line(fL, yTop, fR, yTop),\n line(fR, yTop, fR, yBody1),\n );\n // Base connectors for front dust flap\n paths.push(\n line(xFront, yBody1, fL, yBody1),\n line(fR, yBody1, xSide2, yBody1),\n );\n\n // Side2 full-width flap\n paths.push(\n line(xSide2, yBody1, xSide2, yTop),\n line(xSide2, yTop, xEnd, yTop),\n line(xEnd, yTop, xEnd, yBody1),\n );\n\n return paths;\n}\n\nfunction bottomFlaps(\n xRear: number, xSide1: number, xFront: number, xSide2: number, xEnd: number,\n yBody2: number, yBot: number\n): string[] {\n const paths: string[] = [];\n\n // Rear dust flap (inset)\n const rL = xRear + FLAP_INSET;\n const rR = xSide1 - FLAP_INSET;\n paths.push(\n line(rL, yBody2, rL, yBot),\n line(rL, yBot, rR, yBot),\n line(rR, yBot, rR, yBody2),\n );\n paths.push(\n line(xRear, yBody2, rL, yBody2),\n line(rR, yBody2, xSide1, yBody2),\n );\n\n // Side1 full-width flap\n paths.push(\n line(xSide1, yBody2, xSide1, yBot),\n line(xSide1, yBot, xFront, yBot),\n line(xFront, yBot, xFront, yBody2),\n );\n\n // Front dust flap (inset)\n const fL = xFront + FLAP_INSET;\n const fR = xSide2 - FLAP_INSET;\n paths.push(\n line(fL, yBody2, fL, yBot),\n line(fL, yBot, fR, yBot),\n line(fR, yBot, fR, yBody2),\n );\n paths.push(\n line(xFront, yBody2, fL, yBody2),\n line(fR, yBody2, xSide2, yBody2),\n );\n\n // Side2 full-width flap\n paths.push(\n line(xSide2, yBody2, xSide2, yBot),\n line(xSide2, yBot, xEnd, yBot),\n line(xEnd, yBot, xEnd, yBody2),\n );\n\n return paths;\n}\n\n// ── Outer contour ──\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function generateOuterContour(attr: StandardBoxAttributes): Point[] {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const glueTaper = glueArea * GLUE_TAPER_RATIO;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n const yBot = 2 * flapHeight + height;\n\n const points: Point[] = [];\n\n // Start at glue tab bottom-left, go UP (CCW winding)\n points.push({ x: 0, y: yBody2 - glueTaper });\n points.push({ x: 0, y: yBody1 + glueTaper });\n points.push({ x: xRear, y: yBody1 });\n\n // Top: Rear dust flap\n points.push({ x: xRear + FLAP_INSET, y: yBody1 });\n points.push({ x: xRear + FLAP_INSET, y: yTop });\n points.push({ x: xSide1 - FLAP_INSET, y: yTop });\n points.push({ x: xSide1 - FLAP_INSET, y: yBody1 });\n\n // Top: Side1 full-width flap\n points.push({ x: xSide1, y: yBody1 });\n points.push({ x: xSide1, y: yTop });\n points.push({ x: xFront, y: yTop });\n points.push({ x: xFront, y: yBody1 });\n\n // Top: Front dust flap\n points.push({ x: xFront + FLAP_INSET, y: yBody1 });\n points.push({ x: xFront + FLAP_INSET, y: yTop });\n points.push({ x: xSide2 - FLAP_INSET, y: yTop });\n points.push({ x: xSide2 - FLAP_INSET, y: yBody1 });\n\n // Top: Side2 full-width flap\n points.push({ x: xSide2, y: yBody1 });\n points.push({ x: xSide2, y: yTop });\n points.push({ x: xEnd, y: yTop });\n points.push({ x: xEnd, y: yBody1 });\n\n // Right edge (body)\n points.push({ x: xEnd, y: yBody2 });\n\n // Bottom: Side2 full-width flap\n points.push({ x: xEnd, y: yBot });\n points.push({ x: xSide2, y: yBot });\n points.push({ x: xSide2, y: yBody2 });\n\n // Bottom: Front dust flap\n points.push({ x: xSide2 - FLAP_INSET, y: yBody2 });\n points.push({ x: xSide2 - FLAP_INSET, y: yBot });\n points.push({ x: xFront + FLAP_INSET, y: yBot });\n points.push({ x: xFront + FLAP_INSET, y: yBody2 });\n\n // Bottom: Side1 full-width flap\n points.push({ x: xFront, y: yBody2 });\n points.push({ x: xFront, y: yBot });\n points.push({ x: xSide1, y: yBot });\n points.push({ x: xSide1, y: yBody2 });\n\n // Bottom: Rear dust flap\n points.push({ x: xSide1 - FLAP_INSET, y: yBody2 });\n points.push({ x: xSide1 - FLAP_INSET, y: yBot });\n points.push({ x: xRear + FLAP_INSET, y: yBot });\n points.push({ x: xRear + FLAP_INSET, y: yBody2 });\n\n // Back to glue tab\n points.push({ x: xRear, y: yBody2 });\n\n return points;\n}\n\nexport function offsetContour(points: Point[], distance: number): Point[] {\n const n = points.length;\n const result: Point[] = [];\n\n for (let i = 0; i < n; i++) {\n const prev = points[(i - 1 + n) % n];\n const curr = points[i];\n const next = points[(i + 1) % n];\n\n const e1x = curr.x - prev.x;\n const e1y = curr.y - prev.y;\n const e2x = next.x - curr.x;\n const e2y = next.y - curr.y;\n\n const len1 = Math.sqrt(e1x * e1x + e1y * e1y);\n const len2 = Math.sqrt(e2x * e2x + e2y * e2y);\n\n if (len1 === 0 || len2 === 0) {\n result.push(curr);\n continue;\n }\n\n const n1x = e1y / len1;\n const n1y = -e1x / len1;\n const n2x = e2y / len2;\n const n2y = -e2x / len2;\n\n const ax = n1x + n2x;\n const ay = n1y + n2y;\n const aLen = Math.sqrt(ax * ax + ay * ay);\n\n if (aLen < 0.001) {\n result.push({ x: curr.x + n1x * distance, y: curr.y + n1y * distance });\n continue;\n }\n\n const nx = ax / aLen;\n const ny = ay / aLen;\n const dot = n1x * nx + n1y * ny;\n const d = distance / Math.max(dot, 0.1);\n\n result.push({ x: curr.x + nx * d, y: curr.y + ny * d });\n }\n\n return result;\n}\n\nexport function contourToPath(points: Point[]): string {\n if (points.length === 0) return \"\";\n let d = `M${points[0].x} ${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L${points[i].x} ${points[i].y}`;\n }\n d += \" Z\";\n return d;\n}\n\nexport interface DimensionLine {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n orientation: \"horizontal\" | \"vertical\";\n offset: number;\n}\n\nexport function generateDimensions(\n attr: StandardBoxAttributes,\n unit: \"mm\" | \"cm\" | \"in\"\n): DimensionLine[] {\n const { length, width, height, flapHeight, glueArea } = attr;\n\n const factor = unit === \"cm\" ? 0.1 : unit === \"in\" ? 1 / 25.4 : 1;\n const suffix = unit;\n const fmt = (v: number) => `${(v * factor).toFixed(2)} ${suffix}`;\n\n const xRear = glueArea;\n const xSide1 = glueArea + length;\n const xFront = glueArea + length + width;\n const xSide2 = glueArea + length + width + length;\n const xEnd = glueArea + 2 * length + 2 * width;\n\n const yTop = 0;\n const yBody1 = flapHeight;\n const yBody2 = flapHeight + height;\n\n const totalWidth = xEnd;\n const totalHeight = 2 * flapHeight + height;\n\n return [\n {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: totalHeight,\n label: `Overall Height : ${fmt(totalHeight)}`,\n orientation: \"vertical\",\n offset: -12,\n },\n {\n x1: 0,\n y1: 0,\n x2: totalWidth,\n y2: 0,\n label: `Overall Width : ${fmt(totalWidth)}`,\n orientation: \"horizontal\",\n offset: -12,\n },\n {\n x1: xSide2,\n y1: yBody1,\n x2: xSide2,\n y2: yBody2,\n label: fmt(height),\n orientation: \"vertical\",\n offset: -20,\n },\n {\n x1: xEnd,\n y1: yTop,\n x2: xEnd,\n y2: yBody1,\n label: fmt(flapHeight),\n orientation: \"vertical\",\n offset: -10,\n },\n {\n x1: 0,\n y1: yBody2,\n x2: xRear,\n y2: yBody2,\n label: fmt(glueArea),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xRear,\n y1: yBody2,\n x2: xSide1,\n y2: yBody2,\n label: fmt(length),\n orientation: \"horizontal\",\n offset: -20,\n },\n {\n x1: xSide1,\n y1: yBody2,\n x2: xFront,\n y2: yBody2,\n label: fmt(width),\n orientation: \"horizontal\",\n offset: -20,\n },\n ];\n}\n","import { forwardRef, useImperativeHandle, useRef, useMemo, useCallback } from \"react\";\nimport {\n generateBecf11d01,\n generateDimensions,\n StandardBoxAttributes,\n DimensionLine,\n} from \"./generate\";\nimport type { ModelThemeConfig } from \"../../../../statics/modelThemeConfig\";\nimport { getModelTheme } from \"../../../../config\";\nimport { BaseCanvas, BaseCanvasRef } from \"../../../canvas/baseCanvas\";\nimport { exportDimensionPdf } from \"../../../../utils/exportDimension\";\n\nexport type { StandardBoxAttributes, DimensionLine } from \"./generate\";\nexport { generateBecf11d01, generateOuterContour, offsetContour, contourToPath, generateDimensions } from \"./generate\";\n\nconst MODEL_ID = \"BECF-11D01\";\n\nexport interface DieLineBecf11d01Props {\n attributes: StandardBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n isShowDimensions?: boolean;\n renderAs?: \"svg\" | \"group\";\n}\n\nexport interface GetAttributesResult {\n modelId: string;\n overallWidth: number;\n overallHeight: number;\n length: number;\n width: number;\n height: number;\n flapHeight: number;\n glueArea: number;\n}\n\nexport interface ExportImageOptions {\n isShowDimension: boolean;\n originalSize: boolean;\n}\n\nexport interface DieLineBecf11d01Ref {\n getAttributes: () => GetAttributesResult;\n exportImage: (options: ExportImageOptions) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nconst UNIT_FACTOR: Record<string, number> = {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n};\n\nconst PX_PER_MM = 96 / 25.4;\n\nfunction renderDimension(dim: DimensionLine, i: number) {\n const { x1, y1, x2, y2, label, orientation, offset } = dim;\n const tick = 1.5;\n\n if (orientation === \"horizontal\") {\n const y = y1 + offset;\n const midX = (x1 + x2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x1} y1={y} x2={x2} y2={y} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x1} y1={y - tick} x2={x1} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x2} y1={y - tick} x2={x2} y2={y + tick} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={midX}\n y={y - 1.5}\n textAnchor=\"middle\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n >\n {label}\n </text>\n </g>\n );\n }\n\n const x = x1 + offset;\n const midY = (y1 + y2) / 2;\n return (\n <g key={`dim-${i}`}>\n <line x1={x} y1={y1} x2={x} y2={y2} stroke=\"#000\" strokeWidth={0.2} />\n <line x1={x - tick} y1={y1} x2={x + tick} y2={y1} stroke=\"#000\" strokeWidth={0.3} />\n <line x1={x - tick} y1={y2} x2={x + tick} y2={y2} stroke=\"#000\" strokeWidth={0.3} />\n <text\n x={x - 1.5}\n y={midY - 1}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={4.2}\n fontFamily=\"sans-serif\"\n fill=\"#000\"\n transform={`rotate(-90, ${x - 1.5}, ${midY})`}\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport const DIE_LINE_BECF_11D01 = forwardRef<DieLineBecf11d01Ref, DieLineBecf11d01Props>(\n (\n {\n attributes,\n unit = \"mm\",\n isShowDimensions = false,\n renderAs = \"svg\",\n },\n ref\n ) => {\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const dieline = useMemo(() => generateBecf11d01(attributes), [attributes]);\n\n const dimensions = useMemo(\n () => generateDimensions(attributes, unit),\n [attributes, unit]\n );\n\n const factor = UNIT_FACTOR[unit] ?? 1;\n\n const serializeSvg = useCallback(\n (showDimensions: boolean) => {\n const svg = svgRef.current;\n if (!svg) throw new Error(\"SVG not mounted\");\n\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n },\n []\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getAttributes: () => ({\n modelId: MODEL_ID,\n overallWidth: dieline.viewBox.width * factor,\n overallHeight: dieline.viewBox.height * factor,\n length: attributes.length * factor,\n width: attributes.width * factor,\n height: attributes.height * factor,\n flapHeight: attributes.flapHeight * factor,\n glueArea: attributes.glueArea * factor,\n }),\n\n exportImage: async (options) => {\n const svgStr = serializeSvg(options.isShowDimension);\n const blob = new Blob([svgStr], {\n type: \"image/svg+xml;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n\n exportDimension: async () => {\n const dimData = generateDimensions(attributes, unit);\n return exportDimensionPdf({\n modelId: MODEL_ID,\n dieline,\n dimensions: dimData,\n attributes: attributes as unknown as Record<string, number>,\n unit,\n factor,\n theme,\n });\n },\n }),\n [attributes, dieline, factor, unit, serializeSvg, theme]\n );\n\n const padding = isShowDimensions ? 15 : 0;\n const vbX = -padding;\n const vbY = -padding;\n const vbW = dieline.viewBox.width + padding * 2;\n const vbH = dieline.viewBox.height + padding * 2;\n\n const svgChildren = (\n <>\n <g id=\"crease\">\n {dieline.crease.map((d, i) => (\n <path key={`c-${i}`} d={d} fill=\"none\" stroke={theme.colorFoldLine} strokeWidth={0.5} strokeDasharray=\"2,1\" />\n ))}\n </g>\n\n <g id=\"cut\">\n {dieline.cut.map((d, i) => (\n <path key={`t-${i}`} d={d} fill=\"none\" stroke={theme.colorDieLine} strokeWidth={0.5} />\n ))}\n </g>\n\n {isShowDimensions && (\n <g id=\"dimensions\">{dimensions.map(renderDimension)}</g>\n )}\n </>\n );\n\n if (renderAs === \"group\") {\n return <g>{svgChildren}</g>;\n }\n\n return (\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ backgroundColor: theme.colorBackground }}\n >\n {svgChildren}\n </svg>\n );\n }\n);\n\nexport interface CanvasBecf11d01Props extends DieLineBecf11d01Props {}\n\nexport interface CanvasBecf11d01Ref extends DieLineBecf11d01Ref {\n resetView: () => void;\n fitView: () => void;\n}\n\nexport const CANVAS_BECF_11D01 = forwardRef<CanvasBecf11d01Ref, CanvasBecf11d01Props>(\n (props, ref) => {\n const dieLineRef = useRef<DieLineBecf11d01Ref>(null);\n const canvasRef = useRef<BaseCanvasRef>(null);\n\n const {\n attributes,\n } = props;\n\n const theme = useMemo<ModelThemeConfig>(\n () => getModelTheme(),\n []\n );\n\n const dieline = useMemo(() => generateBecf11d01(attributes), [attributes]);\n\n const stablePadding = 15;\n const viewBox = useMemo(\n () => ({\n x: -stablePadding,\n y: -stablePadding,\n width: dieline.viewBox.width + stablePadding * 2,\n height: dieline.viewBox.height + stablePadding * 2,\n }),\n [dieline.viewBox.width, dieline.viewBox.height]\n );\n\n const serializeCanvasSvg = useCallback((showDimensions: boolean) => {\n const svg = canvasRef.current?.getSvgElement();\n if (!svg) throw new Error(\"SVG not mounted\");\n const clone = svg.cloneNode(true) as SVGSVGElement;\n if (!showDimensions) {\n const dimGroup = clone.querySelector(\"#dimensions\");\n dimGroup?.remove();\n }\n return new XMLSerializer().serializeToString(clone);\n }, []);\n\n useImperativeHandle(ref, () => ({\n getAttributes: () => dieLineRef.current!.getAttributes(),\n exportImage: async (options) => {\n const svgStr = serializeCanvasSvg(options.isShowDimension);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n if (options.originalSize) {\n canvas.width = Math.round(dieline.viewBox.width * PX_PER_MM);\n canvas.height = Math.round(dieline.viewBox.height * PX_PER_MM);\n } else {\n canvas.width = 1920;\n canvas.height = 1080;\n }\n\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n },\n exportDimension: () => dieLineRef.current!.exportDimension(),\n resetView: () => canvasRef.current?.resetView(),\n fitView: () => canvasRef.current?.fitView(),\n }), [serializeCanvasSvg, dieline.viewBox.width, dieline.viewBox.height]);\n\n return (\n <BaseCanvas\n ref={canvasRef}\n viewBox={viewBox}\n backgroundColor={theme.colorBackground}\n >\n <DIE_LINE_BECF_11D01 ref={dieLineRef} {...props} renderAs=\"group\" />\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport {\n CANVAS_BECF_11D01,\n DIE_LINE_BECF_11D01,\n CanvasBecf11d01Ref,\n DieLineBecf11d01Ref,\n StandardBoxAttributes,\n} from \"../../../dieline/standard-boxes/becf-11d01\";\nimport { ModelMode } from \"../../../../statics/modelList\";\n\nexport type { StandardBoxAttributes } from \"../../../dieline/standard-boxes/becf-11d01\";\nexport type { CanvasBecf11d01Ref as ModelBecf11d01Ref } from \"../../../dieline/standard-boxes/becf-11d01\";\nexport type { GetAttributesResult, ExportImageOptions } from \"../../../dieline/standard-boxes/becf-11d01\";\n\nexport interface ModelBecf11d01Props {\n attributes: StandardBoxAttributes;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport const MODEL_BECF_11D01 = forwardRef<CanvasBecf11d01Ref | DieLineBecf11d01Ref, ModelBecf11d01Props>(\n ({ mode = \"DIE_LINE\", ...props }, ref) => {\n return (\n <>\n {(() => {\n switch (mode) {\n case \"DIE_LINE\":\n return <CANVAS_BECF_11D01 ref={ref as React.Ref<CanvasBecf11d01Ref>} {...props} />;\n case \"3D\":\n return null;\n case \"AUTO_LAYOUT\":\n return <DIE_LINE_BECF_11D01 ref={ref as React.Ref<DieLineBecf11d01Ref>} {...props} />;\n default:\n return null;\n }\n })()}\n </>\n );\n }\n);\n","import type { Point } from \"../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\n\nexport interface Bitmap {\n data: Uint8Array;\n width: number;\n height: number;\n offsetX: number;\n offsetY: number;\n}\n\nexport function rasterizePolygon(points: Point[], resolution: number): Bitmap {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const p of points) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n\n const offsetX = Math.floor(minX / resolution);\n const offsetY = Math.floor(minY / resolution);\n const w = Math.ceil((maxX - offsetX * resolution) / resolution) + 1;\n const h = Math.ceil((maxY - offsetY * resolution) / resolution) + 1;\n const data = new Uint8Array(w * h);\n\n for (let gy = 0; gy < h; gy++) {\n const worldY = (offsetY + gy) * resolution + resolution / 2;\n const crossings: number[] = [];\n\n for (let i = 0, j = points.length - 1; i < points.length; j = i++) {\n const yi = points[i].y, yj = points[j].y;\n if ((yi <= worldY && yj > worldY) || (yj <= worldY && yi > worldY)) {\n const t = (worldY - yi) / (yj - yi);\n crossings.push(points[i].x + t * (points[j].x - points[i].x));\n }\n }\n\n crossings.sort((a, b) => a - b);\n\n for (let c = 0; c < crossings.length - 1; c += 2) {\n const startGx = Math.max(0, Math.floor((crossings[c] - offsetX * resolution) / resolution));\n const endGx = Math.min(w - 1, Math.ceil((crossings[c + 1] - offsetX * resolution) / resolution));\n for (let gx = startGx; gx <= endGx; gx++) {\n data[gy * w + gx] = 1;\n }\n }\n }\n\n return { data, width: w, height: h, offsetX, offsetY };\n}\n\nexport function rotateBitmap(bitmap: Bitmap, degrees: number): Bitmap {\n if (degrees === 0) return bitmap;\n\n const { data, width: w, height: h, offsetX, offsetY } = bitmap;\n\n if (degrees === 90) {\n const nw = h, nh = w;\n const nData = new Uint8Array(nw * nh);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n const nx = h - 1 - y;\n const ny = x;\n nData[ny * nw + nx] = 1;\n }\n }\n }\n return { data: nData, width: nw, height: nh, offsetX: -offsetY - h + 1, offsetY: offsetX };\n }\n\n if (degrees === 180) {\n const nData = new Uint8Array(w * h);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n nData[(h - 1 - y) * w + (w - 1 - x)] = 1;\n }\n }\n }\n return { data: nData, width: w, height: h, offsetX: -offsetX - w + 1, offsetY: -offsetY - h + 1 };\n }\n\n if (degrees === 270) {\n const nw = h, nh = w;\n const nData = new Uint8Array(nw * nh);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n if (data[y * w + x]) {\n const nx = y;\n const ny = w - 1 - x;\n nData[ny * nw + nx] = 1;\n }\n }\n }\n return { data: nData, width: nw, height: nh, offsetX: offsetY, offsetY: -offsetX - w + 1 };\n }\n\n return bitmap;\n}\n\nexport function canPlace(\n paperGrid: Uint8Array,\n paperW: number,\n paperH: number,\n piece: Bitmap,\n px: number,\n py: number\n): boolean {\n for (let y = 0; y < piece.height; y++) {\n const paperY = py + y;\n if (paperY < 0 || paperY >= paperH) {\n for (let x = 0; x < piece.width; x++) {\n if (piece.data[y * piece.width + x]) return false;\n }\n continue;\n }\n for (let x = 0; x < piece.width; x++) {\n if (!piece.data[y * piece.width + x]) continue;\n const paperX = px + x;\n if (paperX < 0 || paperX >= paperW) return false;\n if (paperGrid[paperY * paperW + paperX]) return false;\n }\n }\n return true;\n}\n\nexport function placePiece(\n paperGrid: Uint8Array,\n paperW: number,\n piece: Bitmap,\n px: number,\n py: number\n): void {\n for (let y = 0; y < piece.height; y++) {\n for (let x = 0; x < piece.width; x++) {\n if (piece.data[y * piece.width + x]) {\n paperGrid[(py + y) * paperW + (px + x)] = 1;\n }\n }\n }\n}\n","import type {\n AutoLayoutPlacement,\n GripperSide,\n} from \"../../../types/autoLayout\";\nimport type { Point } from \"../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport {\n rasterizePolygon,\n canPlace,\n placePiece,\n} from \"../rasterize\";\n\nexport const RESOLUTION = 1;\n\nexport interface UsableBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlacementCandidate {\n rotation: number;\n placements: AutoLayoutPlacement[];\n producedPerSheet: number;\n}\n\nexport function resolveGripperSide(paperWidth: number, paperHeight: number): GripperSide {\n if (paperWidth >= paperHeight) return \"bottom\";\n return \"left\";\n}\n\nexport function computeUsableBounds(\n paperWidth: number,\n paperHeight: number,\n gripperSide: GripperSide,\n spacing: number,\n griper: number,\n colorbarDepth: number\n): UsableBounds {\n switch (gripperSide) {\n case \"bottom\":\n return {\n top: colorbarDepth + spacing,\n bottom: paperHeight - griper,\n left: spacing,\n right: paperWidth - spacing,\n };\n case \"top\":\n return {\n top: griper,\n bottom: paperHeight - colorbarDepth - spacing,\n left: spacing,\n right: paperWidth - spacing,\n };\n case \"left\":\n return {\n top: spacing,\n bottom: paperHeight - spacing,\n left: griper,\n right: paperWidth - colorbarDepth - spacing,\n };\n case \"right\":\n return {\n top: spacing,\n bottom: paperHeight - spacing,\n left: colorbarDepth + spacing,\n right: paperWidth - griper,\n };\n }\n}\n\nexport function normalizePoints(points: Point[], degrees: number): Point[] {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const rotated = points.map((p) => ({\n x: p.x * cos - p.y * sin,\n y: p.x * sin + p.y * cos,\n }));\n let minX = Infinity, minY = Infinity;\n for (const p of rotated) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n }\n return rotated.map((p) => ({ x: p.x - minX, y: p.y - minY }));\n}\n\nexport function computeDielineBBOffset(\n offsetContourPoints: Point[],\n dielineW: number,\n dielineH: number,\n degrees: number\n): { dx: number; dy: number } {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n\n let ocMinX = Infinity, ocMinY = Infinity;\n for (const p of offsetContourPoints) {\n const rx = p.x * cos - p.y * sin;\n const ry = p.x * sin + p.y * cos;\n if (rx < ocMinX) ocMinX = rx;\n if (ry < ocMinY) ocMinY = ry;\n }\n\n const corners = [[0, 0], [dielineW, 0], [0, dielineH], [dielineW, dielineH]];\n let dlMinX = Infinity, dlMinY = Infinity;\n for (const [cx, cy] of corners) {\n const rx = cx * cos - cy * sin;\n const ry = cx * sin + cy * cos;\n if (rx < dlMinX) dlMinX = rx;\n if (ry < dlMinY) dlMinY = ry;\n }\n\n return { dx: dlMinX - ocMinX, dy: dlMinY - ocMinY };\n}\n\nexport function computeLayoutForPaperDefault(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n paperWidth: number,\n paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const usableLeft = Math.ceil(bounds.left / RESOLUTION);\n const usableTop = Math.ceil(bounds.top / RESOLUTION);\n const usableRight = Math.floor(bounds.right / RESOLUTION);\n const usableBottom = Math.floor(bounds.bottom / RESOLUTION);\n\n const paperW = Math.floor(paperWidth / RESOLUTION);\n const paperH = Math.floor(paperHeight / RESOLUTION);\n\n let bestCandidate: PlacementCandidate = { rotation: 0, placements: [], producedPerSheet: 0 };\n let bestGridPositions: { px: number; py: number }[] = [];\n let bestBitmapW = 0;\n let bestBitmapH = 0;\n\n for (const deg of [0, 90, 180, 270]) {\n const rotatedContour = normalizePoints(contourPoints, deg);\n const pieceBitmap = rasterizePolygon(rotatedContour, RESOLUTION);\n const bbOffset = computeDielineBBOffset(contourPoints, dielineW, dielineH, deg);\n\n const paperGrid = new Uint8Array(paperW * paperH);\n const placements: AutoLayoutPlacement[] = [];\n const gridPositions: { px: number; py: number }[] = [];\n\n for (let py = usableTop; py <= usableBottom - pieceBitmap.height; py++) {\n for (let px = usableLeft; px <= usableRight - pieceBitmap.width; px++) {\n if (canPlace(paperGrid, paperW, paperH, pieceBitmap, px, py)) {\n placePiece(paperGrid, paperW, pieceBitmap, px, py);\n gridPositions.push({ px, py });\n\n placements.push({\n x: px * RESOLUTION + bbOffset.dx,\n y: py * RESOLUTION + bbOffset.dy,\n rotation: deg,\n });\n }\n }\n }\n\n if (placements.length > bestCandidate.producedPerSheet) {\n bestCandidate = { rotation: deg, placements, producedPerSheet: placements.length };\n bestGridPositions = gridPositions;\n bestBitmapW = pieceBitmap.width;\n bestBitmapH = pieceBitmap.height;\n }\n }\n\n if (bestCandidate.placements.length > 0) {\n let gridMinX = Infinity;\n let gridMinY = Infinity;\n let gridMaxX = -Infinity;\n let gridMaxY = -Infinity;\n for (const { px, py } of bestGridPositions) {\n if (px < gridMinX) gridMinX = px;\n if (py < gridMinY) gridMinY = py;\n if (px + bestBitmapW > gridMaxX) gridMaxX = px + bestBitmapW;\n if (py + bestBitmapH > gridMaxY) gridMaxY = py + bestBitmapH;\n }\n\n const groupW = gridMaxX - gridMinX;\n const groupH = gridMaxY - gridMinY;\n const usableW = usableRight - usableLeft;\n const usableH = usableBottom - usableTop;\n\n const offsetX = ((usableW - groupW) / 2 - (gridMinX - usableLeft)) * RESOLUTION;\n const offsetY = ((usableH - groupH) / 2 - (gridMinY - usableTop)) * RESOLUTION;\n\n for (const p of bestCandidate.placements) {\n p.x += offsetX;\n p.y += offsetY;\n }\n }\n\n return bestCandidate;\n}\n","import type { AutoLayoutPlacement } from \"../../../../../types/autoLayout\";\nimport type { Point } from \"../../../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { PlacementCandidate, UsableBounds } from \"../../shared\";\nimport {\n normalizePoints,\n computeDielineBBOffset,\n} from \"../../shared\";\n\n/* ------------------------------------------------------------------ */\n/* Polygon-based edge profiles */\n/* ------------------------------------------------------------------ */\n\nexport const SAMPLE_STEP = 0.1;\n\nexport interface ShapeProfile {\n width: number;\n height: number;\n nY: number;\n nX: number;\n rightX: Float64Array;\n leftX: Float64Array;\n bottomY: Float64Array;\n topY: Float64Array;\n}\n\nexport function buildProfile(points: Point[]): ShapeProfile {\n let maxX = 0, maxY = 0;\n for (const p of points) {\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n const width = maxX, height = maxY;\n const nY = Math.ceil(height / SAMPLE_STEP) + 1;\n const nX = Math.ceil(width / SAMPLE_STEP) + 1;\n const rightX = new Float64Array(nY).fill(-Infinity);\n const leftX = new Float64Array(nY).fill(Infinity);\n const bottomY = new Float64Array(nX).fill(-Infinity);\n const topY = new Float64Array(nX).fill(Infinity);\n const nPts = points.length;\n\n for (let iy = 0; iy < nY; iy++) {\n const y = iy * SAMPLE_STEP;\n for (let j = 0, k = nPts - 1; j < nPts; k = j++) {\n const yj = points[j].y, yk = points[k].y;\n if ((yj <= y && yk > y) || (yk <= y && yj > y)) {\n const t = (y - yj) / (yk - yj);\n const x = points[j].x + t * (points[k].x - points[j].x);\n if (x > rightX[iy]) rightX[iy] = x;\n if (x < leftX[iy]) leftX[iy] = x;\n }\n }\n }\n for (let ix = 0; ix < nX; ix++) {\n const x = ix * SAMPLE_STEP;\n for (let j = 0, k = nPts - 1; j < nPts; k = j++) {\n const xj = points[j].x, xk = points[k].x;\n if ((xj <= x && xk > x) || (xk <= x && xj > x)) {\n const t = (x - xj) / (xk - xj);\n const y = points[j].y + t * (points[k].y - points[j].y);\n if (y > bottomY[ix]) bottomY[ix] = y;\n if (y < topY[ix]) topY[ix] = y;\n }\n }\n }\n return { width, height, nY, nX, rightX, leftX, bottomY, topY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Rotation data */\n/* ------------------------------------------------------------------ */\n\nexport interface RotationData {\n profile: ShapeProfile;\n bbOffset: { dx: number; dy: number };\n deg: number;\n}\n\nexport function prepareRotation(\n contourPoints: Point[], dielineW: number, dielineH: number, deg: number\n): RotationData {\n const rotated = normalizePoints(contourPoints, deg);\n return {\n profile: buildProfile(rotated),\n bbOffset: computeDielineBBOffset(contourPoints, dielineW, dielineH, deg),\n deg,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Profile-based step calculations */\n/* ------------------------------------------------------------------ */\n\nexport function findMinStepX(a: ShapeProfile, b: ShapeProfile, dyMm: number): number {\n const dySamples = Math.round(dyMm / SAMPLE_STEP);\n let maxOverlap = -Infinity;\n for (let ia = 0; ia < a.nY; ia++) {\n const ib = ia - dySamples;\n if (ib < 0 || ib >= b.nY) continue;\n if (a.rightX[ia] === -Infinity || b.leftX[ib] === Infinity) continue;\n const overlap = a.rightX[ia] - b.leftX[ib];\n if (overlap > maxOverlap) maxOverlap = overlap;\n }\n return maxOverlap <= -Infinity ? 0 : maxOverlap;\n}\n\nexport function findMinStepY(a: ShapeProfile, b: ShapeProfile, dxMm: number): number {\n const dxSamples = Math.round(dxMm / SAMPLE_STEP);\n let maxOverlap = -Infinity;\n for (let ia = 0; ia < a.nX; ia++) {\n const ib = ia - dxSamples;\n if (ib < 0 || ib >= b.nX) continue;\n if (a.bottomY[ia] === -Infinity || b.topY[ib] === Infinity) continue;\n const overlap = a.bottomY[ia] - b.topY[ib];\n if (overlap > maxOverlap) maxOverlap = overlap;\n }\n return maxOverlap <= -Infinity ? 0 : maxOverlap;\n}\n\nexport function findMinStepY_multi(\n profA: ShapeProfile, stepX_A: number,\n profB: ShapeProfile, offsetX: number\n): number {\n const reach = Math.max(profA.width, profB.width);\n let maxStep = 0;\n const nMin = Math.floor((offsetX - reach) / stepX_A);\n const nMax = Math.ceil((offsetX + reach) / stepX_A);\n for (let n = nMin; n <= nMax; n++) {\n const s = findMinStepY(profA, profB, offsetX - n * stepX_A);\n if (s > maxStep) maxStep = s;\n }\n return maxStep;\n}\n\n/* ------------------------------------------------------------------ */\n/* Strategy result */\n/* ------------------------------------------------------------------ */\n\nexport interface StrategyResult {\n placements: AutoLayoutPlacement[];\n count: number;\n minX: number; minY: number; maxX: number; maxY: number;\n}\n\nexport function emptyResult(): StrategyResult {\n return { placements: [], count: 0, minX: 0, minY: 0, maxX: 0, maxY: 0 };\n}\n\n/* ------------------------------------------------------------------ */\n/* Grid strategies */\n/* ------------------------------------------------------------------ */\n\nexport function singleRotGrid(rd: RotationData, bounds: UsableBounds): StrategyResult {\n const p = rd.profile;\n const stepX = findMinStepX(p, p, 0);\n const stepY = findMinStepY(p, p, 0);\n if (stepX <= 0 || stepY <= 0) return emptyResult();\n\n const cols = Math.max(0, Math.floor((bounds.right - bounds.left - p.width) / stepX) + 1);\n const rows = Math.max(0, Math.floor((bounds.bottom - bounds.top - p.height) / stepY) + 1);\n if (cols === 0 || rows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const ox = bounds.left + c * stepX;\n const oy = bounds.top + r * stepY;\n placements.push({ x: ox + rd.bbOffset.dx, y: oy + rd.bbOffset.dy, rotation: rd.deg });\n if (ox < minX) minX = ox; if (oy < minY) minY = oy;\n if (ox + p.width > maxX) maxX = ox + p.width;\n if (oy + p.height > maxY) maxY = oy + p.height;\n }\n }\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\nexport function dualRotGrid(\n rdA: RotationData, rdB: RotationData, offsetX: number, bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n const stepX_A = findMinStepX(pA, pA, 0);\n const stepX_B = findMinStepX(pB, pB, 0);\n if (stepX_A <= 0 || stepX_B <= 0) return emptyResult();\n\n const stepY_AB = findMinStepY_multi(pA, stepX_A, pB, offsetX);\n const stepY_BA = findMinStepY_multi(pB, stepX_B, pA, -offsetX);\n if (stepY_AB + stepY_BA <= 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n let oy = bounds.top;\n let isRowA = true;\n\n while (true) {\n const rd = isRowA ? rdA : rdB;\n const p = rd.profile;\n const stepX = isRowA ? stepX_A : stepX_B;\n if (oy + p.height > bounds.bottom) break;\n\n let sx = isRowA ? bounds.left : bounds.left + offsetX;\n if (sx < bounds.left) sx += stepX * Math.ceil((bounds.left - sx) / stepX);\n\n for (let ox = sx; ox + p.width <= bounds.right; ox += stepX) {\n placements.push({ x: ox + rd.bbOffset.dx, y: oy + rd.bbOffset.dy, rotation: rd.deg });\n if (ox < minX) minX = ox; if (oy < minY) minY = oy;\n if (ox + p.width > maxX) maxX = ox + p.width;\n if (oy + p.height > maxY) maxY = oy + p.height;\n }\n oy += isRowA ? stepY_AB : stepY_BA;\n isRowA = !isRowA;\n }\n if (placements.length === 0) return emptyResult();\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Centering */\n/* ------------------------------------------------------------------ */\n\nexport function centerLayout(result: StrategyResult, bounds: UsableBounds): void {\n if (result.count === 0) return;\n const offX = (bounds.right - bounds.left - (result.maxX - result.minX)) / 2 - (result.minX - bounds.left);\n const offY = (bounds.bottom - bounds.top - (result.maxY - result.minY)) / 2 - (result.minY - bounds.top);\n for (const p of result.placements) { p.x += offX; p.y += offY; }\n}\n\n/* ------------------------------------------------------------------ */\n/* Main entry — BECF-1010A */\n/* ------------------------------------------------------------------ */\n\nexport function computeLayoutForPaper(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n _paperWidth: number,\n _paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const rots = [0, 90, 180, 270] as const;\n const rd = new Map<number, RotationData>();\n for (const deg of rots) {\n rd.set(deg, prepareRotation(contourPoints, dielineW, dielineH, deg));\n }\n\n const results: StrategyResult[] = [];\n\n // Single rotation (4)\n for (const deg of rots) {\n results.push(singleRotGrid(rd.get(deg)!, bounds));\n }\n\n // Dual-row with offsets\n const pairs: [number, number][] = [\n [0, 180], [90, 270], [0, 90], [0, 270], [90, 180], [180, 270],\n ];\n for (const [a, b] of pairs) {\n const rdA = rd.get(a)!, rdB = rd.get(b)!;\n const stepA = findMinStepX(rdA.profile, rdA.profile, 0);\n if (stepA <= 0) continue;\n for (let off = 0; off < stepA; off += 1) {\n results.push(dualRotGrid(rdA, rdB, off, bounds));\n results.push(dualRotGrid(rdB, rdA, off, bounds));\n }\n }\n\n // Pick best\n let best = results[0];\n for (const r of results) {\n if (r.count > best.count) best = r;\n }\n\n centerLayout(best, bounds);\n\n return {\n rotation: best.placements[0]?.rotation ?? 0,\n placements: best.placements,\n producedPerSheet: best.count,\n };\n}\n","import type { AutoLayoutPlacement } from \"../../../../../types/autoLayout\";\nimport type { Point } from \"../../../../../components/dieline/tuck-end-boxes/becf-1030a/generate\";\nimport type { PlacementCandidate, UsableBounds } from \"../../shared\";\nimport {\n normalizePoints,\n computeDielineBBOffset,\n} from \"../../shared\";\n\n// Re-use base engine from BECF-1010A\nimport {\n buildProfile,\n findMinStepX,\n findMinStepY,\n singleRotGrid,\n dualRotGrid,\n centerLayout,\n emptyResult,\n type RotationData,\n type StrategyResult,\n} from \"../becf-1010a\";\n\n/* ------------------------------------------------------------------ */\n/* Prepare rotation */\n/* ------------------------------------------------------------------ */\n\nfunction prepareRotation(\n contourPoints: Point[], dielineW: number, dielineH: number, deg: number\n): RotationData {\n const rotated = normalizePoints(contourPoints, deg);\n return {\n profile: buildProfile(rotated),\n bbOffset: computeDielineBBOffset(contourPoints, dielineW, dielineH, deg),\n deg,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* BECF-1030A specific: Pair placement */\n/* */\n/* Place [0°][180°] as a horizontal pair → grid of pairs */\n/* Then try to fit extra singles in remaining gaps */\n/* ------------------------------------------------------------------ */\n\nfunction pairGrid(\n rdA: RotationData,\n rdB: RotationData,\n bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n\n // Step between A and B within the pair (touching horizontally)\n const gapAB = findMinStepX(pA, pB, 0);\n if (gapAB <= 0) return emptyResult();\n\n // Pair bounding box\n const pairW = gapAB + pB.width;\n const pairH = Math.max(pA.height, pB.height);\n\n // Step between pairs in X (pair next to pair)\n // Right profile of B (second piece) to left profile of A (first piece of next pair)\n const pairStepX = gapAB + findMinStepX(pB, pA, 0);\n\n // Step between pair rows in Y\n // Must check all 4 combinations: A↓A, A↓B, B↓A, B↓B\n const pairStepY = Math.max(\n findMinStepY(pA, pA, 0),\n findMinStepY(pA, pB, gapAB),\n findMinStepY(pB, pA, -gapAB),\n findMinStepY(pB, pB, 0),\n );\n\n if (pairStepX <= 0 || pairStepY <= 0) return emptyResult();\n\n const usableW = bounds.right - bounds.left;\n const usableH = bounds.bottom - bounds.top;\n\n const pairCols = Math.max(0, Math.floor((usableW - pairW) / pairStepX) + 1);\n const pairRows = Math.max(0, Math.floor((usableH - pairH) / pairStepY) + 1);\n if (pairCols === 0 || pairRows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n // Place pairs\n for (let r = 0; r < pairRows; r++) {\n for (let c = 0; c < pairCols; c++) {\n const baseX = bounds.left + c * pairStepX;\n const baseY = bounds.top + r * pairStepY;\n\n // Piece A (0° side)\n const oxA = baseX;\n const oyA = baseY;\n placements.push({ x: oxA + rdA.bbOffset.dx, y: oyA + rdA.bbOffset.dy, rotation: rdA.deg });\n if (oxA < minX) minX = oxA; if (oyA < minY) minY = oyA;\n if (oxA + pA.width > maxX) maxX = oxA + pA.width;\n if (oyA + pA.height > maxY) maxY = oyA + pA.height;\n\n // Piece B (180° side)\n const oxB = baseX + gapAB;\n const oyB = baseY;\n placements.push({ x: oxB + rdB.bbOffset.dx, y: oyB + rdB.bbOffset.dy, rotation: rdB.deg });\n if (oxB < minX) minX = oxB; if (oyB < minY) minY = oyB;\n if (oxB + pB.width > maxX) maxX = oxB + pB.width;\n if (oyB + pB.height > maxY) maxY = oyB + pB.height;\n }\n }\n\n // Try fitting extra singles in remaining gaps\n const pairsRightEdge = bounds.left + (pairCols - 1) * pairStepX + pairW;\n const pairsBottomEdge = bounds.top + (pairRows - 1) * pairStepY + pairH;\n const gapRight = bounds.right - pairsRightEdge;\n const gapBottom = bounds.bottom - pairsBottomEdge;\n\n // Try single pieces in the right gap (for each row)\n const extraRotations = [rdA, rdB];\n for (const rdExtra of extraRotations) {\n const pe = rdExtra.profile;\n if (pe.width <= gapRight) {\n // Can fit one column of singles to the right\n for (let r = 0; r < pairRows; r++) {\n const ox = pairsRightEdge;\n const oy = bounds.top + r * pairStepY;\n if (ox + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: ox + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (ox + pe.width > maxX) maxX = ox + pe.width;\n }\n }\n break; // only add one type of extra\n }\n }\n\n // Try single pieces in the bottom gap (for each column)\n for (const rdExtra of extraRotations) {\n const pe = rdExtra.profile;\n if (pe.height <= gapBottom) {\n for (let c = 0; c < pairCols; c++) {\n // Try fitting A-side single\n const oxA = bounds.left + c * pairStepX;\n const oy = pairsBottomEdge;\n if (oxA + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: oxA + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (oy + pe.height > maxY) maxY = oy + pe.height;\n }\n }\n break;\n }\n }\n\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Main entry — BECF-1030A */\n/* ------------------------------------------------------------------ */\n\nexport function computeLayoutForPaper(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n _paperWidth: number,\n _paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const rots = [0, 90, 180, 270] as const;\n const rd = new Map<number, RotationData>();\n for (const deg of rots) {\n rd.set(deg, prepareRotation(contourPoints, dielineW, dielineH, deg));\n }\n\n const results: StrategyResult[] = [];\n\n // === Base strategies (from BECF-1010A engine) ===\n\n // Single rotation (4)\n for (const deg of rots) {\n results.push(singleRotGrid(rd.get(deg)!, bounds));\n }\n\n // Dual-row with offsets\n const allPairs: [number, number][] = [\n [0, 180], [90, 270], [0, 90], [0, 270], [90, 180], [180, 270],\n ];\n for (const [a, b] of allPairs) {\n const rdA = rd.get(a)!, rdB = rd.get(b)!;\n const stepA = findMinStepX(rdA.profile, rdA.profile, 0);\n if (stepA <= 0) continue;\n for (let off = 0; off < stepA; off += 1) {\n results.push(dualRotGrid(rdA, rdB, off, bounds));\n results.push(dualRotGrid(rdB, rdA, off, bounds));\n }\n }\n\n // === BECF-1030A specific: Pair placement ===\n\n // Try all rotation pairs as horizontal pairs\n for (const [a, b] of allPairs) {\n results.push(pairGrid(rd.get(a)!, rd.get(b)!, bounds));\n results.push(pairGrid(rd.get(b)!, rd.get(a)!, bounds));\n }\n\n // Separate single vs multi-rotation results\n const singleResults: StrategyResult[] = [];\n const multiResults: StrategyResult[] = [];\n for (const r of results) {\n if (r.count === 0) continue;\n const rotations = new Set(r.placements.map(p => p.rotation));\n if (rotations.size > 1) {\n multiResults.push(r);\n } else {\n singleResults.push(r);\n }\n }\n\n // Pick best by count, then tightest packing (smallest bounding box area)\n function pickBest(arr: StrategyResult[]): StrategyResult {\n let b = arr[0] ?? emptyResult();\n let bArea = (b.maxX - b.minX) * (b.maxY - b.minY);\n for (const r of arr) {\n const area = (r.maxX - r.minX) * (r.maxY - r.minY);\n if (r.count > b.count || (r.count === b.count && area < bArea)) {\n b = r;\n bArea = area;\n }\n }\n return b;\n }\n\n const bestSingle = pickBest(singleResults);\n const bestMulti = pickBest(multiResults);\n\n // Prefer multi-rotation (interlock) when count >= single\n const best = bestMulti.count >= bestSingle.count && bestMulti.count > 0\n ? bestMulti\n : bestSingle;\n\n centerLayout(best, bounds);\n\n return {\n rotation: best.placements[0]?.rotation ?? 0,\n placements: best.placements,\n producedPerSheet: best.count,\n };\n}\n","import type { AutoLayoutPlacement } from \"../../../../../types/autoLayout\";\nimport type { Point } from \"../../../../../components/dieline/tuck-end-boxes/becf-1040a/generate\";\nimport type { PlacementCandidate, UsableBounds } from \"../../shared\";\nimport {\n normalizePoints,\n computeDielineBBOffset,\n} from \"../../shared\";\n\n// Re-use base engine from BECF-1010A\nimport {\n buildProfile,\n findMinStepX,\n findMinStepY,\n singleRotGrid,\n dualRotGrid,\n centerLayout,\n emptyResult,\n type ShapeProfile,\n type RotationData,\n type StrategyResult,\n} from \"../becf-1010a\";\n\n/* ------------------------------------------------------------------ */\n/* Prepare rotation */\n/* ------------------------------------------------------------------ */\n\nfunction prepareRotation(\n contourPoints: Point[], dielineW: number, dielineH: number, deg: number\n): RotationData {\n const rotated = normalizePoints(contourPoints, deg);\n return {\n profile: buildProfile(rotated),\n bbOffset: computeDielineBBOffset(contourPoints, dielineW, dielineH, deg),\n deg,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Thorough pair-row Y step calculation */\n/* */\n/* Accounts for ALL cross-column interactions in a pair row: */\n/* A↔A (dx = n*stepX), A↔B (dx = n*stepX + gapAB), */\n/* B↔A (dx = n*stepX - gapAB), B↔B (dx = n*stepX) */\n/* ------------------------------------------------------------------ */\n\nfunction findPairRowStepY(\n pA: ShapeProfile, pB: ShapeProfile,\n gapAB: number, pairStepX: number\n): number {\n const reach = Math.max(pA.width, pB.width) + Math.abs(gapAB);\n const nMin = Math.floor(-reach / pairStepX) - 1;\n const nMax = Math.ceil(reach / pairStepX) + 1;\n\n let maxStep = 0;\n for (let n = nMin; n <= nMax; n++) {\n const dx = n * pairStepX;\n // A_row0 vs A_row1\n const s1 = findMinStepY(pA, pA, dx);\n if (s1 > maxStep) maxStep = s1;\n // A_row0 vs B_row1\n const s2 = findMinStepY(pA, pB, dx + gapAB);\n if (s2 > maxStep) maxStep = s2;\n // B_row0 vs A_row1\n const s3 = findMinStepY(pB, pA, dx - gapAB);\n if (s3 > maxStep) maxStep = s3;\n // B_row0 vs B_row1\n const s4 = findMinStepY(pB, pB, dx);\n if (s4 > maxStep) maxStep = s4;\n }\n return maxStep;\n}\n\n/* ------------------------------------------------------------------ */\n/* BECF-1040A: Horizontal pair placement */\n/* */\n/* Place [A][B] as a horizontal pair → grid of pairs */\n/* ------------------------------------------------------------------ */\n\nfunction pairGrid(\n rdA: RotationData,\n rdB: RotationData,\n bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n\n // Step between A and B within the pair\n const gapAB = findMinStepX(pA, pB, 0);\n if (gapAB <= 0) return emptyResult();\n\n // Pair bounding box\n const pairW = gapAB + pB.width;\n const pairH = Math.max(pA.height, pB.height);\n\n // Step between pairs in X\n const pairStepX = gapAB + findMinStepX(pB, pA, 0);\n if (pairStepX <= 0) return emptyResult();\n\n // Thorough Y step — checks ALL cross-column interactions\n const pairStepY = findPairRowStepY(pA, pB, gapAB, pairStepX);\n if (pairStepY <= 0) return emptyResult();\n\n const usableW = bounds.right - bounds.left;\n const usableH = bounds.bottom - bounds.top;\n\n const pairCols = Math.max(0, Math.floor((usableW - pairW) / pairStepX) + 1);\n const pairRows = Math.max(0, Math.floor((usableH - pairH) / pairStepY) + 1);\n if (pairCols === 0 || pairRows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (let r = 0; r < pairRows; r++) {\n for (let c = 0; c < pairCols; c++) {\n const baseX = bounds.left + c * pairStepX;\n const baseY = bounds.top + r * pairStepY;\n\n // Piece A\n placements.push({ x: baseX + rdA.bbOffset.dx, y: baseY + rdA.bbOffset.dy, rotation: rdA.deg });\n if (baseX < minX) minX = baseX; if (baseY < minY) minY = baseY;\n if (baseX + pA.width > maxX) maxX = baseX + pA.width;\n if (baseY + pA.height > maxY) maxY = baseY + pA.height;\n\n // Piece B\n const bx = baseX + gapAB;\n placements.push({ x: bx + rdB.bbOffset.dx, y: baseY + rdB.bbOffset.dy, rotation: rdB.deg });\n if (bx < minX) minX = bx;\n if (bx + pB.width > maxX) maxX = bx + pB.width;\n if (baseY + pB.height > maxY) maxY = baseY + pB.height;\n }\n }\n\n // Try extras in right gap — with proper collision checking\n const pairsRightEdge = bounds.left + (pairCols - 1) * pairStepX + pairW;\n const gapRight = bounds.right - pairsRightEdge;\n\n for (const rdExtra of [rdA, rdB]) {\n const pe = rdExtra.profile;\n if (pe.width > gapRight) continue;\n\n // Check Y step between extra and the nearest pair pieces\n const dxFromB = pairsRightEdge - (bounds.left + (pairCols - 1) * pairStepX + gapAB);\n const dxFromA = pairsRightEdge - bounds.left - (pairCols - 1) * pairStepX;\n const extraStepY = Math.max(\n findMinStepY(pA, pe, dxFromA),\n findMinStepY(pB, pe, dxFromB),\n findMinStepY(pe, pe, 0),\n );\n if (extraStepY <= 0) continue;\n\n const effectiveStepY = Math.max(pairStepY, extraStepY);\n const extraRows = Math.max(0, Math.floor((usableH - pe.height) / effectiveStepY) + 1);\n\n for (let r = 0; r < extraRows; r++) {\n const ox = pairsRightEdge;\n const oy = bounds.top + r * effectiveStepY;\n if (ox + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: ox + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (ox + pe.width > maxX) maxX = ox + pe.width;\n if (oy + pe.height > maxY) maxY = oy + pe.height;\n }\n }\n break;\n }\n\n // Try extras in bottom gap\n const pairsBottomEdge = bounds.top + (pairRows - 1) * pairStepY + pairH;\n const gapBottom = bounds.bottom - pairsBottomEdge;\n\n for (const rdExtra of [rdA, rdB]) {\n const pe = rdExtra.profile;\n if (pe.height > gapBottom) continue;\n\n const extraStepX = findMinStepX(pe, pe, 0);\n if (extraStepX <= 0) continue;\n\n // Check Y step between bottom extra and the pair row above\n const dyFromPairRow = pairsBottomEdge - (bounds.top + (pairRows - 1) * pairStepY);\n const stepFromA = findMinStepY(pA, pe, 0);\n const stepFromB = findMinStepY(pB, pe, gapAB);\n if (dyFromPairRow < stepFromA || dyFromPairRow < stepFromB) continue;\n\n const extraCols = Math.max(0, Math.floor((usableW - pe.width) / extraStepX) + 1);\n for (let c = 0; c < extraCols; c++) {\n const ox = bounds.left + c * extraStepX;\n const oy = pairsBottomEdge;\n if (ox + pe.width <= bounds.right && oy + pe.height <= bounds.bottom) {\n placements.push({ x: ox + rdExtra.bbOffset.dx, y: oy + rdExtra.bbOffset.dy, rotation: rdExtra.deg });\n if (ox + pe.width > maxX) maxX = ox + pe.width;\n if (oy + pe.height > maxY) maxY = oy + pe.height;\n }\n }\n break;\n }\n\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* BECF-1040A: Vertical pair placement */\n/* */\n/* Place [A] on top of [B] → grid of vertical pairs */\n/* ------------------------------------------------------------------ */\n\nfunction verticalPairGrid(\n rdA: RotationData,\n rdB: RotationData,\n bounds: UsableBounds\n): StrategyResult {\n const pA = rdA.profile, pB = rdB.profile;\n\n // Step between A and B vertically (A on top, B below)\n const gapAB_Y = findMinStepY(pA, pB, 0);\n if (gapAB_Y <= 0) return emptyResult();\n\n // Vertical pair bounding box\n const vpairH = gapAB_Y + pB.height;\n const vpairW = Math.max(pA.width, pB.width);\n\n // Step between columns in X — check all 4 combos\n const reach = Math.max(pA.height, pB.height) + Math.abs(gapAB_Y);\n let vpairStepX = 0;\n {\n // Check A↔A, A↔B, B↔A, B↔B at various dy offsets\n const stepXAA = findMinStepX(pA, pA, 0);\n const stepXAB = findMinStepX(pA, pB, -gapAB_Y);\n const stepXBA = findMinStepX(pB, pA, gapAB_Y);\n const stepXBB = findMinStepX(pB, pB, 0);\n vpairStepX = Math.max(stepXAA, stepXAB, stepXBA, stepXBB);\n }\n if (vpairStepX <= 0) return emptyResult();\n\n // Step between pair rows in Y\n const vpairStepY = gapAB_Y + findMinStepY(pB, pA, 0);\n if (vpairStepY <= 0) return emptyResult();\n\n const usableW = bounds.right - bounds.left;\n const usableH = bounds.bottom - bounds.top;\n\n const cols = Math.max(0, Math.floor((usableW - vpairW) / vpairStepX) + 1);\n const rows = Math.max(0, Math.floor((usableH - vpairH) / vpairStepY) + 1);\n if (cols === 0 || rows === 0) return emptyResult();\n\n const placements: AutoLayoutPlacement[] = [];\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const baseX = bounds.left + c * vpairStepX;\n const baseY = bounds.top + r * vpairStepY;\n\n // Piece A (top)\n placements.push({ x: baseX + rdA.bbOffset.dx, y: baseY + rdA.bbOffset.dy, rotation: rdA.deg });\n if (baseX < minX) minX = baseX; if (baseY < minY) minY = baseY;\n if (baseX + pA.width > maxX) maxX = baseX + pA.width;\n if (baseY + pA.height > maxY) maxY = baseY + pA.height;\n\n // Piece B (bottom)\n const by = baseY + gapAB_Y;\n placements.push({ x: baseX + rdB.bbOffset.dx, y: by + rdB.bbOffset.dy, rotation: rdB.deg });\n if (by + pB.height > maxY) maxY = by + pB.height;\n }\n }\n\n return { placements, count: placements.length, minX, minY, maxX, maxY };\n}\n\n/* ------------------------------------------------------------------ */\n/* Main entry — BECF-1040A */\n/* ------------------------------------------------------------------ */\n\nexport function computeLayoutForPaper(\n contourPoints: Point[],\n dielineW: number,\n dielineH: number,\n _paperWidth: number,\n _paperHeight: number,\n bounds: UsableBounds\n): PlacementCandidate {\n const rots = [0, 90, 180, 270] as const;\n const rd = new Map<number, RotationData>();\n for (const deg of rots) {\n rd.set(deg, prepareRotation(contourPoints, dielineW, dielineH, deg));\n }\n\n const results: StrategyResult[] = [];\n\n // === Single rotation (4 strategies) ===\n for (const deg of rots) {\n results.push(singleRotGrid(rd.get(deg)!, bounds));\n }\n\n // === Dual-row with offsets ===\n const allPairs: [number, number][] = [\n [0, 180], [90, 270], [0, 90], [0, 270], [90, 180], [180, 270],\n ];\n for (const [a, b] of allPairs) {\n const rdA = rd.get(a)!, rdB = rd.get(b)!;\n const stepA = findMinStepX(rdA.profile, rdA.profile, 0);\n if (stepA <= 0) continue;\n for (let off = 0; off < stepA; off += 1) {\n results.push(dualRotGrid(rdA, rdB, off, bounds));\n results.push(dualRotGrid(rdB, rdA, off, bounds));\n }\n }\n\n // === Horizontal pair placement ===\n for (const [a, b] of allPairs) {\n results.push(pairGrid(rd.get(a)!, rd.get(b)!, bounds));\n results.push(pairGrid(rd.get(b)!, rd.get(a)!, bounds));\n }\n\n // === Vertical pair placement (1040A specific — tuck interlock) ===\n for (const [a, b] of allPairs) {\n results.push(verticalPairGrid(rd.get(a)!, rd.get(b)!, bounds));\n results.push(verticalPairGrid(rd.get(b)!, rd.get(a)!, bounds));\n }\n\n // Separate single vs multi-rotation results\n const singleResults: StrategyResult[] = [];\n const multiResults: StrategyResult[] = [];\n for (const r of results) {\n if (r.count === 0) continue;\n const rotations = new Set(r.placements.map(p => p.rotation));\n if (rotations.size > 1) {\n multiResults.push(r);\n } else {\n singleResults.push(r);\n }\n }\n\n // Pick best by count, then tightest packing\n function pickBest(arr: StrategyResult[]): StrategyResult {\n let b = arr[0] ?? emptyResult();\n let bArea = (b.maxX - b.minX) * (b.maxY - b.minY);\n for (const r of arr) {\n const area = (r.maxX - r.minX) * (r.maxY - r.minY);\n if (r.count > b.count || (r.count === b.count && area < bArea)) {\n b = r;\n bArea = area;\n }\n }\n return b;\n }\n\n const bestSingle = pickBest(singleResults);\n const bestMulti = pickBest(multiResults);\n\n // Prefer multi-rotation (interlock) when count >= single\n const best = bestMulti.count >= bestSingle.count && bestMulti.count > 0\n ? bestMulti\n : bestSingle;\n\n centerLayout(best, bounds);\n\n return {\n rotation: best.placements[0]?.rotation ?? 0,\n placements: best.placements,\n producedPerSheet: best.count,\n };\n}\n","import type {\n AutoLayoutConfig,\n AutoLayoutResult,\n AutoLayoutPaperResult,\n} from \"../../../types/autoLayout\";\n\nimport {\n generateBecf1010a,\n generateOuterContour as generateOuterContour1010a,\n offsetContour as offsetContour1010a,\n type TuckEndBoxAttributes,\n} from \"../../../components/dieline/tuck-end-boxes/becf-1010a/generate\";\nimport {\n generateBecf1030a,\n generateOuterContour as generateOuterContour1030a,\n offsetContour as offsetContour1030a,\n type TuckEndBoxAttributes as TuckEndBoxAttributes1030a,\n} from \"../../../components/dieline/tuck-end-boxes/becf-1030a/generate\";\nimport {\n generateBecf1040a,\n generateOuterContour as generateOuterContour1040a,\n offsetContour as offsetContour1040a,\n type TuckEndBoxAttributes as TuckEndBoxAttributes1040a,\n} from \"../../../components/dieline/tuck-end-boxes/becf-1040a/generate\";\nimport {\n generateBecf11d01,\n generateOuterContour as generateOuterContour11d01,\n offsetContour as offsetContour11d01,\n type StandardBoxAttributes,\n} from \"../../../components/dieline/standard-boxes/becf-11d01/generate\";\n\nimport {\n resolveGripperSide,\n computeUsableBounds,\n computeLayoutForPaperDefault,\n} from \"./shared\";\n\nimport { computeLayoutForPaper as computeLayoutBecf1010a } from \"./tuck-end-boxes/becf-1010a\";\nimport { computeLayoutForPaper as computeLayoutBecf1030a } from \"./tuck-end-boxes/becf-1030a\";\nimport { computeLayoutForPaper as computeLayoutBecf1040a } from \"./tuck-end-boxes/becf-1040a\";\n\nfunction resolveModelFunctions(modelId: string, attrs: Record<string, number>) {\n switch (modelId) {\n case \"BECF-1040A\": {\n const a = attrs as unknown as TuckEndBoxAttributes1040a;\n return {\n contour: generateOuterContour1040a(a),\n dieline: generateBecf1040a(a),\n offsetContour: offsetContour1040a,\n };\n }\n case \"BECF-1030A\": {\n const a = attrs as unknown as TuckEndBoxAttributes1030a;\n return {\n contour: generateOuterContour1030a(a),\n dieline: generateBecf1030a(a),\n offsetContour: offsetContour1030a,\n };\n }\n case \"BECF-11D01\": {\n const a = attrs as unknown as StandardBoxAttributes;\n return {\n contour: generateOuterContour11d01(a),\n dieline: generateBecf11d01(a),\n offsetContour: offsetContour11d01,\n };\n }\n case \"BECF-1010A\":\n default: {\n const a = attrs as unknown as TuckEndBoxAttributes;\n return {\n contour: generateOuterContour1010a(a),\n dieline: generateBecf1010a(a),\n offsetContour: offsetContour1010a,\n };\n }\n }\n}\n\nfunction resolveLayoutCalculator(modelId: string) {\n switch (modelId) {\n case \"BECF-1010A\":\n return computeLayoutBecf1010a;\n case \"BECF-1030A\":\n return computeLayoutBecf1030a;\n case \"BECF-1040A\":\n return computeLayoutBecf1040a;\n default:\n return computeLayoutForPaperDefault;\n }\n}\n\nexport function calculateAutoLayout(config: AutoLayoutConfig): AutoLayoutResult {\n const { contour, dieline, offsetContour } = resolveModelFunctions(\n config.model.modelId,\n config.model.attributes\n );\n const offsetContourPoints = config.layoutDistance > 0\n ? offsetContour(contour, config.layoutDistance / 2)\n : contour;\n\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n\n const computeLayout = resolveLayoutCalculator(config.model.modelId);\n\n const paperResults: AutoLayoutPaperResult[] = [];\n let totalProduced = 0;\n let totalSheets = 0;\n\n for (const paper of config.papers) {\n const gripperSide = resolveGripperSide(paper.paperWidth, paper.paperHeight);\n const bounds = computeUsableBounds(\n paper.paperWidth,\n paper.paperHeight,\n gripperSide,\n config.spacing,\n config.griper,\n cbDepth\n );\n\n const candidate = computeLayout(\n offsetContourPoints,\n dieline.viewBox.width,\n dieline.viewBox.height,\n paper.paperWidth,\n paper.paperHeight,\n bounds\n );\n\n const producedPerSheet = candidate.producedPerSheet;\n\n const paperArea = paper.paperWidth * paper.paperHeight;\n\n if (producedPerSheet === 0) {\n paperResults.push({\n paperId: paper.paperId,\n paperName: paper.paperName,\n paperWidth: paper.paperWidth,\n paperHeight: paper.paperHeight,\n producedPerSheet: 0,\n totalSheets: 0,\n totalProduced: 0,\n excessCount: 0,\n wastePercent: 100,\n independentSheets: 0,\n independentTotalArea: 0,\n placements: [],\n gripperSide,\n });\n continue;\n }\n\n const remaining = Math.max(0, config.quantity - totalProduced);\n const sheetsNeeded = remaining > 0 ? Math.ceil(remaining / producedPerSheet) : 0;\n const produced = sheetsNeeded * producedPerSheet;\n\n const pieceArea = dieline.viewBox.width * dieline.viewBox.height;\n const usedArea = producedPerSheet * pieceArea;\n const wastePercent = ((paperArea - usedArea) / paperArea) * 100;\n\n const indSheets = Math.ceil(config.quantity / producedPerSheet);\n const indTotalArea = indSheets * paperArea;\n\n totalProduced += produced;\n totalSheets += sheetsNeeded;\n\n paperResults.push({\n paperId: paper.paperId,\n paperName: paper.paperName,\n paperWidth: paper.paperWidth,\n paperHeight: paper.paperHeight,\n producedPerSheet,\n totalSheets: sheetsNeeded,\n totalProduced: produced,\n excessCount: Math.max(0, produced - remaining),\n wastePercent: Math.round(wastePercent * 100) / 100,\n independentSheets: indSheets,\n independentTotalArea: Math.round(indTotalArea),\n placements: candidate.placements,\n gripperSide,\n });\n }\n\n paperResults.sort((a, b) => {\n if (a.producedPerSheet === 0 && b.producedPerSheet === 0) return 0;\n if (a.producedPerSheet === 0) return 1;\n if (b.producedPerSheet === 0) return -1;\n return a.independentTotalArea - b.independentTotalArea;\n });\n\n const recommendedPaperId = paperResults.find((p) => p.producedPerSheet > 0)?.paperId ?? null;\n\n return {\n papers: paperResults,\n quantity: config.quantity,\n totalProduced,\n totalSheets,\n remainingNeeded: Math.max(0, config.quantity - totalProduced),\n recommendedPaperId,\n };\n}\n","export interface Vec2 {\n x: number;\n y: number;\n}\n\nexport function rotatePolygon(points: Vec2[], degrees: number, cx: number, cy: number): Vec2[] {\n const rad = (degrees * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n return points.map((p) => ({\n x: cos * (p.x - cx) - sin * (p.y - cy) + cx,\n y: sin * (p.x - cx) + cos * (p.y - cy) + cy,\n }));\n}\n\nexport function translatePolygon(points: Vec2[], dx: number, dy: number): Vec2[] {\n return points.map((p) => ({ x: p.x + dx, y: p.y + dy }));\n}\n\nfunction segmentsIntersect(\n a1: Vec2, a2: Vec2,\n b1: Vec2, b2: Vec2\n): boolean {\n const d1x = a2.x - a1.x;\n const d1y = a2.y - a1.y;\n const d2x = b2.x - b1.x;\n const d2y = b2.y - b1.y;\n\n const cross = d1x * d2y - d1y * d2x;\n if (Math.abs(cross) < 1e-10) return false;\n\n const dx = b1.x - a1.x;\n const dy = b1.y - a1.y;\n\n const t = (dx * d2y - dy * d2x) / cross;\n const u = (dx * d1y - dy * d1x) / cross;\n\n return t > 0 && t < 1 && u > 0 && u < 1;\n}\n\nfunction pointInPolygon(point: Vec2, poly: Vec2[]): boolean {\n let inside = false;\n for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) {\n const yi = poly[i].y, yj = poly[j].y;\n const xi = poly[i].x, xj = poly[j].x;\n if ((yi > point.y) !== (yj > point.y) &&\n point.x < (xj - xi) * (point.y - yi) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n return inside;\n}\n\nexport function polygonsCollide(polyA: Vec2[], polyB: Vec2[]): boolean {\n if (polyA.length < 3 || polyB.length < 3) return false;\n\n for (let i = 0; i < polyA.length; i++) {\n const a1 = polyA[i];\n const a2 = polyA[(i + 1) % polyA.length];\n for (let j = 0; j < polyB.length; j++) {\n const b1 = polyB[j];\n const b2 = polyB[(j + 1) % polyB.length];\n if (segmentsIntersect(a1, a2, b1, b2)) return true;\n }\n }\n\n if (pointInPolygon(polyA[0], polyB)) return true;\n if (pointInPolygon(polyB[0], polyA)) return true;\n\n return false;\n}\n\nexport function polygonInsideBounds(\n poly: Vec2[],\n boundsWidth: number,\n boundsHeight: number\n): boolean {\n for (const p of poly) {\n if (p.x < 0 || p.x > boundsWidth || p.y < 0 || p.y > boundsHeight) {\n return false;\n }\n }\n return true;\n}\n","import type { GripperSide } from \"../../../../types/autoLayout\";\n\nconst BASE_COLORS = [\"#02FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\nconst FADE_LEVELS = [1.0, 0.8, 0.6, 0.4, 0.2];\n\nfunction fadeToWhite(hex: string, opacity: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n const fr = Math.round(r + (255 - r) * (1 - opacity));\n const fg = Math.round(g + (255 - g) * (1 - opacity));\n const fb = Math.round(b + (255 - b) * (1 - opacity));\n return `#${fr.toString(16).padStart(2, \"0\")}${fg.toString(16).padStart(2, \"0\")}${fb.toString(16).padStart(2, \"0\")}`;\n}\n\nconst COLORBAR_COLORS = BASE_COLORS.flatMap((base) =>\n FADE_LEVELS.map((level) => fadeToWhite(base, level))\n);\n\nexport interface ColorbarProps {\n side: GripperSide;\n colorbarHeight: number;\n paperWidth: number;\n paperHeight: number;\n}\n\nexport function Colorbar({ side, colorbarHeight, paperWidth, paperHeight }: ColorbarProps) {\n const count = COLORBAR_COLORS.length;\n const isHorizontal = side === \"top\" || side === \"bottom\";\n\n if (isHorizontal) {\n const w = paperWidth / count;\n const y = side === \"top\" ? 0 : paperHeight - colorbarHeight;\n return (\n <g>\n {COLORBAR_COLORS.map((color, i) => (\n <rect key={i} x={i * w} y={y} width={w} height={colorbarHeight} fill={color} />\n ))}\n </g>\n );\n }\n\n const h = paperHeight / count;\n const x = side === \"left\" ? 0 : paperWidth - colorbarHeight;\n return (\n <g>\n {COLORBAR_COLORS.map((color, i) => (\n <rect key={i} x={x} y={i * h} width={colorbarHeight} height={h} fill={color} />\n ))}\n </g>\n );\n}\n\nexport function appendColorbarToSvg(\n svg: SVGSVGElement,\n svgNs: string,\n side: GripperSide,\n colorbarHeight: number,\n paperWidth: number,\n paperHeight: number\n): void {\n const count = COLORBAR_COLORS.length;\n const isHorizontal = side === \"top\" || side === \"bottom\";\n\n COLORBAR_COLORS.forEach((color, i) => {\n const bar = document.createElementNS(svgNs, \"rect\");\n\n if (isHorizontal) {\n const w = paperWidth / count;\n const y = side === \"top\" ? 0 : paperHeight - colorbarHeight;\n bar.setAttribute(\"x\", String(i * w));\n bar.setAttribute(\"y\", String(y));\n bar.setAttribute(\"width\", String(w));\n bar.setAttribute(\"height\", String(colorbarHeight));\n } else {\n const h = paperHeight / count;\n const x = side === \"left\" ? 0 : paperWidth - colorbarHeight;\n bar.setAttribute(\"x\", String(x));\n bar.setAttribute(\"y\", String(i * h));\n bar.setAttribute(\"width\", String(colorbarHeight));\n bar.setAttribute(\"height\", String(h));\n }\n\n bar.setAttribute(\"fill\", color);\n svg.appendChild(bar);\n });\n}\n","import type { GripperSide } from \"../../../../types/autoLayout\";\n\nconst ARROW_COLORS = [\"#00FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\nconst ARROW_SIZE = 2;\nconst ARROW_SPACING = 8;\n\nexport interface GripperProps {\n side: GripperSide;\n paperWidth: number;\n paperHeight: number;\n depth: number;\n fillColor: string;\n}\n\nfunction getRect(side: GripperSide, paperWidth: number, paperHeight: number, depth: number) {\n switch (side) {\n case \"bottom\":\n return { x: 0, y: paperHeight - depth, w: paperWidth, h: depth };\n case \"top\":\n return { x: 0, y: 0, w: paperWidth, h: depth };\n case \"left\":\n return { x: 0, y: 0, w: depth, h: paperHeight };\n case \"right\":\n return { x: paperWidth - depth, y: 0, w: depth, h: paperHeight };\n }\n}\n\nfunction isHorizontal(side: GripperSide) {\n return side === \"top\" || side === \"bottom\";\n}\n\nfunction getArrowPositions(side: GripperSide, rect: { x: number; y: number; w: number; h: number }) {\n const totalMarks = (ARROW_COLORS.length - 1) * ARROW_SPACING;\n if (isHorizontal(side)) {\n const startX = rect.x + (rect.w - totalMarks) / 2;\n const cy = rect.y + rect.h / 2;\n return ARROW_COLORS.map((_, i) => ({ cx: startX + i * ARROW_SPACING, cy }));\n }\n const startY = rect.y + (rect.h - totalMarks) / 2;\n const cx = rect.x + rect.w / 2;\n return ARROW_COLORS.map((_, i) => ({ cx, cy: startY + i * ARROW_SPACING }));\n}\n\nfunction getArrowDirection(side: GripperSide): \"up\" | \"down\" | \"left\" | \"right\" {\n switch (side) {\n case \"bottom\":\n return \"down\";\n case \"top\":\n return \"up\";\n case \"left\":\n return \"left\";\n case \"right\":\n return \"right\";\n }\n}\n\nfunction arrowPoints(cx: number, cy: number, direction: \"up\" | \"down\" | \"left\" | \"right\") {\n const s = ARROW_SIZE;\n switch (direction) {\n case \"up\":\n return `${cx - s},${cy + s} ${cx + s},${cy + s} ${cx},${cy - s}`;\n case \"down\":\n return `${cx - s},${cy - s} ${cx + s},${cy - s} ${cx},${cy + s}`;\n case \"right\":\n return `${cx - s},${cy - s} ${cx - s},${cy + s} ${cx + s},${cy}`;\n case \"left\":\n return `${cx + s},${cy - s} ${cx + s},${cy + s} ${cx - s},${cy}`;\n }\n}\n\nexport function Gripper({ side, paperWidth, paperHeight, depth, fillColor }: GripperProps) {\n const rect = getRect(side, paperWidth, paperHeight, depth);\n const positions = getArrowPositions(side, rect);\n const direction = getArrowDirection(side);\n\n return (\n <g>\n <rect x={rect.x} y={rect.y} width={rect.w} height={rect.h} fill={fillColor} />\n {ARROW_COLORS.map((color, i) => {\n const { cx, cy } = positions[i];\n return (\n <polygon\n key={i}\n points={arrowPoints(cx, cy, direction)}\n fill={color}\n />\n );\n })}\n </g>\n );\n}\n\nexport function appendGripperToSvg(\n svg: SVGSVGElement,\n svgNs: string,\n side: GripperSide,\n paperWidth: number,\n paperHeight: number,\n depth: number,\n fillColor: string\n): void {\n const rect = getRect(side, paperWidth, paperHeight, depth);\n const positions = getArrowPositions(side, rect);\n const direction = getArrowDirection(side);\n\n const gripperRect = document.createElementNS(svgNs, \"rect\");\n gripperRect.setAttribute(\"x\", String(rect.x));\n gripperRect.setAttribute(\"y\", String(rect.y));\n gripperRect.setAttribute(\"width\", String(rect.w));\n gripperRect.setAttribute(\"height\", String(rect.h));\n gripperRect.setAttribute(\"fill\", fillColor);\n svg.appendChild(gripperRect);\n\n ARROW_COLORS.forEach((color, i) => {\n const { cx, cy } = positions[i];\n const arrow = document.createElementNS(svgNs, \"polygon\");\n arrow.setAttribute(\"points\", arrowPoints(cx, cy, direction));\n arrow.setAttribute(\"fill\", color);\n svg.appendChild(arrow);\n });\n}\n","import {\n useState,\n useRef,\n useCallback,\n useMemo,\n useEffect,\n} from \"react\";\nimport type {\n AutoLayoutConfig,\n AutoLayoutPaperResult,\n AutoLayoutPlacement,\n ModifyPlacement,\n GripperSide,\n} from \"../../../../types/autoLayout\";\nimport type { Vec2 } from \"../../../../utils/autoLayout/polygonCollision\";\nimport {\n rotatePolygon,\n translatePolygon,\n polygonsCollide,\n polygonInsideBounds,\n} from \"../../../../utils/autoLayout/polygonCollision\";\nimport { getAutoLayoutTheme } from \"../../../../config\";\nimport { Colorbar } from \"../colorbar\";\nimport { Gripper } from \"../gripper\";\nimport {\n DIE_LINE_BECF_1010A,\n} from \"../../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n DIE_LINE_BECF_1030A,\n} from \"../../../dieline/tuck-end-boxes/becf-1030a\";\nimport {\n DIE_LINE_BECF_1040A,\n} from \"../../../dieline/tuck-end-boxes/becf-1040a\";\nimport type { TuckEndBoxAttributes } from \"../../../dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1030a } from \"../../../dieline/tuck-end-boxes/becf-1030a/generate\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1040a } from \"../../../dieline/tuck-end-boxes/becf-1040a/generate\";\n\nexport interface ModifyLayoutProps {\n paperResult: AutoLayoutPaperResult;\n config: AutoLayoutConfig;\n modelId: string;\n attrs: Record<string, number>;\n offsetContourPoints: Vec2[];\n contourPath: string;\n dielineViewBox: { width: number; height: number };\n onSubmit: (modifiedPaper: AutoLayoutPaperResult) => void;\n onCancel: () => void;\n}\n\nconst ROTATIONS = [0, 90, 180, 270] as const;\n\nlet nextItemId = 1;\n\nfunction getOpposite(side: GripperSide): GripperSide {\n switch (side) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n }\n}\n\nfunction getSpacingRects(\n gripperSide: GripperSide,\n paperWidth: number,\n paperHeight: number,\n spacing: number,\n griper: number,\n cbDepth: number\n): { x: number; y: number; w: number; h: number }[] {\n switch (gripperSide) {\n case \"bottom\":\n return [\n { x: 0, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n { x: paperWidth - spacing, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n ];\n case \"top\":\n return [\n { x: 0, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n { x: paperWidth - spacing, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n ];\n case \"left\":\n return [\n { x: griper, y: 0, w: paperWidth - griper - cbDepth, h: spacing },\n { x: griper, y: paperHeight - spacing, w: paperWidth - griper - cbDepth, h: spacing },\n ];\n case \"right\":\n return [\n { x: cbDepth, y: 0, w: paperWidth - cbDepth - griper, h: spacing },\n { x: cbDepth, y: paperHeight - spacing, w: paperWidth - cbDepth - griper, h: spacing },\n ];\n }\n}\n\nfunction renderDieLine(modelId: string, attrs: Record<string, number>) {\n switch (modelId) {\n case \"BECF-1030A\":\n return (\n <DIE_LINE_BECF_1030A\n attributes={attrs as unknown as TuckEndBoxAttributes1030a}\n renderAs=\"group\"\n />\n );\n case \"BECF-1040A\":\n return (\n <DIE_LINE_BECF_1040A\n attributes={attrs as unknown as TuckEndBoxAttributes1040a}\n renderAs=\"group\"\n />\n );\n case \"BECF-1010A\":\n default:\n return (\n <DIE_LINE_BECF_1010A\n attributes={attrs as unknown as TuckEndBoxAttributes}\n renderAs=\"group\"\n />\n );\n }\n}\n\nfunction getDielineTransform(\n x: number,\n y: number,\n rotation: number,\n w: number,\n h: number\n): string {\n switch (rotation) {\n case 90:\n return `translate(${x + h}, ${y}) rotate(90)`;\n case 180:\n return `translate(${x + w}, ${y + h}) rotate(180)`;\n case 270:\n return `translate(${x}, ${y + w}) rotate(270)`;\n case 45:\n return `translate(${x}, ${y}) rotate(45, ${w / 2}, ${h / 2})`;\n default:\n return `translate(${x}, ${y})`;\n }\n}\n\nfunction normalizeContour(contourPoints: Vec2[]): Vec2[] {\n let minX = Infinity, minY = Infinity;\n for (const p of contourPoints) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n }\n return contourPoints.map((p) => ({ x: p.x - minX, y: p.y - minY }));\n}\n\nfunction getTransformedContour(\n normalizedPoints: Vec2[],\n x: number,\n y: number,\n rotation: number\n): Vec2[] {\n let maxCX = 0, maxCY = 0;\n for (const p of normalizedPoints) {\n if (p.x > maxCX) maxCX = p.x;\n if (p.y > maxCY) maxCY = p.y;\n }\n const cx = maxCX / 2;\n const cy = maxCY / 2;\n\n const rotated = rotatePolygon(normalizedPoints, rotation, cx, cy);\n\n let rMinX = Infinity, rMinY = Infinity;\n for (const p of rotated) {\n if (p.x < rMinX) rMinX = p.x;\n if (p.y < rMinY) rMinY = p.y;\n }\n\n return translatePolygon(rotated, x - rMinX, y - rMinY);\n}\n\nfunction checkCollisions(\n items: ModifyPlacement[],\n normalizedOffsetContour: Vec2[],\n paperWidth: number,\n paperHeight: number\n): ModifyPlacement[] {\n const polys = items.map((item) =>\n getTransformedContour(normalizedOffsetContour, item.x, item.y, item.rotation)\n );\n\n return items.map((item, i) => {\n let colliding = false;\n\n if (!polygonInsideBounds(polys[i], paperWidth, paperHeight)) {\n colliding = true;\n }\n\n if (!colliding) {\n for (let j = 0; j < items.length; j++) {\n if (i === j) continue;\n if (polygonsCollide(polys[i], polys[j])) {\n colliding = true;\n break;\n }\n }\n }\n\n return { ...item, isColliding: colliding };\n });\n}\n\nfunction screenToSvg(svg: SVGSVGElement, clientX: number, clientY: number): Vec2 {\n const ctm = svg.getScreenCTM();\n if (!ctm) return { x: 0, y: 0 };\n const inv = ctm.inverse();\n return {\n x: inv.a * clientX + inv.c * clientY + inv.e,\n y: inv.b * clientX + inv.d * clientY + inv.f,\n };\n}\n\nexport function ModifyLayout({\n paperResult,\n config,\n modelId,\n attrs,\n offsetContourPoints,\n contourPath,\n dielineViewBox,\n onSubmit,\n onCancel,\n}: ModifyLayoutProps) {\n const svgRef = useRef<SVGSVGElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [items, setItems] = useState<ModifyPlacement[]>(() =>\n paperResult.placements.map((p) => ({\n id: `item-${nextItemId++}`,\n x: p.x,\n y: p.y,\n rotation: p.rotation,\n isColliding: false,\n }))\n );\n\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const dragRef = useRef<{\n itemId: string;\n offsetX: number;\n offsetY: number;\n } | null>(null);\n const panRef = useRef<{ x: number; y: number } | null>(null);\n\n const [zoom, setZoom] = useState(0.9);\n const [panX, setPanX] = useState(0);\n const [panY, setPanY] = useState(0);\n\n const theme = useMemo(() => getAutoLayoutTheme(), []);\n\n const normalizedOffsetContour = useMemo(() => normalizeContour(offsetContourPoints), [offsetContourPoints]);\n\n const pw = paperResult.paperWidth;\n const ph = paperResult.paperHeight;\n const padding = 20;\n\n const vbWidth = (pw + padding * 2) / zoom;\n const vbHeight = (ph + padding * 2) / zoom;\n const vbX = -padding + (pw + padding * 2) / 2 - vbWidth / 2 - panX;\n const vbY = -padding + (ph + padding * 2) / 2 - vbHeight / 2 - panY;\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n const layoutDistance = config.layoutDistance;\n\n useEffect(() => {\n setItems((prev) => checkCollisions(prev, normalizedOffsetContour, pw, ph));\n }, []);\n\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n useEffect(() => {\n const handleMouseMove = (e: PointerEvent) => {\n const svg = svgRef.current;\n if (!svg) return;\n\n if (dragRef.current) {\n const svgPt = screenToSvg(svg, e.clientX, e.clientY);\n const newX = svgPt.x - dragRef.current.offsetX;\n const newY = svgPt.y - dragRef.current.offsetY;\n const dragItemId = dragRef.current.itemId;\n\n setItems((prev) => {\n const updated = prev.map((it) =>\n it.id === dragItemId ? { ...it, x: newX, y: newY } : it\n );\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n return;\n }\n\n if (panRef.current) {\n const rect = svg.getBoundingClientRect();\n const currentVbWidth = (pw + padding * 2) / zoom;\n const currentVbHeight = (ph + padding * 2) / zoom;\n const scaleX = currentVbWidth / rect.width;\n const scaleY = currentVbHeight / rect.height;\n const dx = (e.clientX - panRef.current.x) * scaleX;\n const dy = (e.clientY - panRef.current.y) * scaleY;\n setPanX((p) => p + dx);\n setPanY((p) => p + dy);\n panRef.current = { x: e.clientX, y: e.clientY };\n }\n };\n\n const handleMouseUp = () => {\n if (dragRef.current) {\n dragRef.current = null;\n setIsDragging(false);\n }\n if (panRef.current) {\n panRef.current = null;\n }\n };\n\n window.addEventListener(\"pointermove\", handleMouseMove);\n window.addEventListener(\"pointerup\", handleMouseUp);\n window.addEventListener(\"pointercancel\", handleMouseUp);\n return () => {\n window.removeEventListener(\"pointermove\", handleMouseMove);\n window.removeEventListener(\"pointerup\", handleMouseUp);\n window.removeEventListener(\"pointercancel\", handleMouseUp);\n };\n }, [normalizedOffsetContour, pw, ph, zoom, padding]);\n\n const handleItemMouseDown = useCallback((e: React.PointerEvent, itemId: string) => {\n e.stopPropagation();\n e.preventDefault();\n\n const svg = svgRef.current;\n if (!svg) return;\n\n const svgPt = screenToSvg(svg, e.clientX, e.clientY);\n const item = itemsRef.current.find((it) => it.id === itemId);\n if (!item) return;\n\n setSelectedId(itemId);\n setIsDragging(true);\n dragRef.current = {\n itemId,\n offsetX: svgPt.x - item.x,\n offsetY: svgPt.y - item.y,\n };\n }, []);\n\n const handleSvgMouseDown = useCallback((e: React.PointerEvent) => {\n if (dragRef.current) return;\n setSelectedId(null);\n panRef.current = { x: e.clientX, y: e.clientY };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n const factor = Math.exp(-e.deltaY * 0.002);\n setZoom((prev) => Math.min(10, Math.max(0.1, prev * factor)));\n };\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }, []);\n\n const handleRotate = useCallback((degrees: number) => {\n if (!selectedId) return;\n setItems((prev) => {\n const updated = prev.map((it) =>\n it.id === selectedId ? { ...it, rotation: degrees } : it\n );\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n }, [selectedId, normalizedOffsetContour, pw, ph]);\n\n const handleAdd = useCallback(() => {\n const newItem: ModifyPlacement = {\n id: `item-${nextItemId++}`,\n x: pw / 2 - dielineViewBox.width / 2,\n y: ph / 2 - dielineViewBox.height / 2,\n rotation: 0,\n isColliding: false,\n };\n setItems((prev) => {\n const updated = [...prev, newItem];\n return checkCollisions(updated, normalizedOffsetContour, pw, ph);\n });\n setSelectedId(newItem.id);\n }, [pw, ph, dielineViewBox, normalizedOffsetContour]);\n\n const handleRemove = useCallback((itemId: string) => {\n setItems((prev) => {\n const filtered = prev.filter((it) => it.id !== itemId);\n return checkCollisions(filtered, normalizedOffsetContour, pw, ph);\n });\n if (selectedId === itemId) setSelectedId(null);\n }, [selectedId, normalizedOffsetContour, pw, ph]);\n\n const handleSubmit = useCallback(() => {\n const validItems = items.filter((it) => !it.isColliding);\n const placements: AutoLayoutPlacement[] = validItems.map((it) => ({\n x: it.x,\n y: it.y,\n rotation: it.rotation,\n }));\n\n const modifiedPaper: AutoLayoutPaperResult = {\n ...paperResult,\n paperId: `modify-${paperResult.paperId}`,\n paperName: `modify-${paperResult.paperName}`,\n producedPerSheet: placements.length,\n totalSheets: placements.length > 0 ? Math.ceil(config.quantity / placements.length) : 0,\n totalProduced: placements.length > 0 ? Math.ceil(config.quantity / placements.length) * placements.length : 0,\n excessCount: placements.length > 0 ? Math.ceil(config.quantity / placements.length) * placements.length - config.quantity : 0,\n wastePercent: Math.round(\n ((pw * ph - placements.length * dielineViewBox.width * dielineViewBox.height) /\n (pw * ph)) *\n 10000\n ) / 100,\n independentSheets: placements.length > 0 ? Math.ceil(config.quantity / placements.length) : 0,\n independentTotalArea: placements.length > 0\n ? Math.ceil(config.quantity / placements.length) * pw * ph\n : 0,\n placements,\n gripperSide: paperResult.gripperSide,\n };\n onSubmit(modifiedPaper);\n }, [items, paperResult, config, pw, ph, dielineViewBox, onSubmit]);\n\n const selectedItem = items.find((it) => it.id === selectedId);\n const collidingCount = items.filter((it) => it.isColliding).length;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\", width: \"100%\" }}>\n <div className=\"modify-header\">\n <h3>Modify: {paperResult.paperName}</h3>\n <div className=\"modify-actions\">\n <button type=\"button\" className=\"cancel\" onClick={onCancel}>Cancel</button>\n <button type=\"button\" className=\"primary\" onClick={handleSubmit}>\n Submit ({items.length - collidingCount} pcs)\n </button>\n </div>\n </div>\n\n <div className=\"modify-layout-shell\">\n <div className=\"modify-canvas\" ref={containerRef}>\n {selectedItem && (\n <div className=\"modify-toolbar\">\n {ROTATIONS.map((deg) => (\n <button\n key={deg}\n type=\"button\"\n className={selectedItem.rotation === deg ? \"active\" : \"\"}\n onClick={() => handleRotate(deg)}\n >\n {deg}°\n </button>\n ))}\n </div>\n )}\n\n <svg\n ref={svgRef}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`${vbX} ${vbY} ${vbWidth} ${vbHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n backgroundColor: theme.colorBackground,\n cursor: isDragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n onPointerDown={handleSvgMouseDown}\n >\n <rect\n width={pw}\n height={ph}\n fill={theme.colorPaperFill}\n stroke={theme.colorPaperStroke}\n strokeWidth={0.5}\n />\n\n {config.isShowColorbar && (\n <Colorbar\n side={colorbarSide}\n colorbarHeight={config.colorbarHeight}\n paperWidth={pw}\n paperHeight={ph}\n />\n )}\n\n {config.spacing > 0 &&\n getSpacingRects(gripperSide, pw, ph, config.spacing, config.griper, cbDepth).map(\n (r, i) => (\n <rect\n key={`sp-${i}`}\n x={r.x}\n y={r.y}\n width={r.w}\n height={r.h}\n fill={theme.colorSpacing}\n />\n )\n )}\n\n {config.griper > 0 && (\n <Gripper\n side={gripperSide}\n paperWidth={pw}\n paperHeight={ph}\n depth={config.griper}\n fillColor={theme.colorGriper}\n />\n )}\n\n {contourPath && layoutDistance > 0 && (\n <defs>\n {items.map((item) => {\n const maskId = `modify-dist-mask-${item.id}`;\n const d = layoutDistance / 2;\n const pad = d + 2;\n return (\n <mask key={maskId} id={maskId}>\n <rect x={-pad} y={-pad} width={dielineViewBox.width + pad * 2} height={dielineViewBox.height + pad * 2} fill=\"white\" />\n <path\n d={contourPath}\n fill=\"black\"\n stroke=\"black\"\n strokeWidth={Math.max(0, (d - 0.25) * 2)}\n strokeLinejoin=\"round\"\n />\n </mask>\n );\n })}\n </defs>\n )}\n\n {items.map((item) => {\n const transform = getDielineTransform(\n item.x,\n item.y,\n item.rotation,\n dielineViewBox.width,\n dielineViewBox.height\n );\n const isSelected = item.id === selectedId;\n\n return (\n <g\n key={item.id}\n transform={transform}\n style={{ cursor: \"move\" }}\n onPointerDown={(e) => handleItemMouseDown(e, item.id)}\n >\n <rect\n x={0}\n y={0}\n width={dielineViewBox.width}\n height={dielineViewBox.height}\n fill=\"none\"\n pointerEvents=\"all\"\n />\n\n {contourPath && layoutDistance > 0 && (\n <g mask={`url(#modify-dist-mask-${item.id})`}>\n <path\n d={contourPath}\n fill=\"none\"\n stroke={item.isColliding ? \"#FF0000\" : theme.colorDistanceLine}\n strokeWidth={(layoutDistance / 2 + 0.25) * 2}\n strokeLinejoin=\"round\"\n opacity={item.isColliding ? 0.6 : 1}\n style={{ pointerEvents: \"none\" }}\n />\n </g>\n )}\n\n {item.isColliding && (\n <path\n d={contourPath}\n fill=\"#FF0000\"\n opacity={0.2}\n style={{ pointerEvents: \"none\" }}\n />\n )}\n\n {isSelected && (\n <path\n d={contourPath}\n fill=\"none\"\n stroke=\"#3b82f6\"\n strokeWidth={0.8}\n strokeDasharray=\"3,2\"\n style={{ pointerEvents: \"none\" }}\n />\n )}\n\n {renderDieLine(modelId, attrs)}\n </g>\n );\n })}\n </svg>\n </div>\n\n <div className=\"modify-control\">\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>\n Items ({items.length})\n </div>\n\n <div className=\"modify-item-list\">\n {items.map((item, idx) => {\n const cls = [\n \"modify-item-entry\",\n item.id === selectedId ? \"selected\" : \"\",\n item.isColliding ? \"colliding\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n key={item.id}\n className={cls}\n onClick={() => setSelectedId(item.id === selectedId ? null : item.id)}\n >\n <span>#{idx} ({item.rotation}°)</span>\n <button\n type=\"button\"\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#ef4444\",\n cursor: \"pointer\",\n fontSize: 16,\n padding: \"0 4px\",\n lineHeight: 1,\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.id);\n }}\n >\n x\n </button>\n </div>\n );\n })}\n </div>\n\n <button\n type=\"button\"\n style={{\n padding: \"8px 12px\",\n border: \"1px solid #d4dce7\",\n borderRadius: 8,\n background: \"#f8fafc\",\n cursor: \"pointer\",\n fontWeight: 600,\n fontSize: 13,\n marginTop: 8,\n }}\n onClick={handleAdd}\n >\n + Add Piece\n </button>\n\n {collidingCount > 0 && (\n <div\n style={{\n marginTop: 12,\n padding: \"8px 10px\",\n background: \"#fef2f2\",\n border: \"1px solid #fca5a5\",\n borderRadius: 8,\n fontSize: 12,\n color: \"#dc2626\",\n }}\n >\n {collidingCount} item(s) colliding — will be excluded on submit\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n useMemo,\n useCallback,\n useEffect,\n} from \"react\";\nimport { BaseCanvas, type BaseCanvasRef } from \"../../canvas/baseCanvas\";\nimport type {\n AutoLayoutConfig,\n AutoLayoutPackedResult,\n AutoLayoutPaperResult,\n AutoLayoutResult,\n GripperSide,\n} from \"../../../types/autoLayout\";\nimport { calculateAutoLayout } from \"../../../utils/autoLayout\";\nimport type { AutoLayoutThemeConfig } from \"../../../statics/autoLayoutThemeConfig\";\nimport { getAutoLayoutTheme } from \"../../../config\";\nimport { Colorbar, appendColorbarToSvg } from \"./colorbar\";\nimport { Gripper, appendGripperToSvg } from \"./gripper\";\nimport {\n DIE_LINE_BECF_1010A,\n generateBecf1010a,\n generateOuterContour,\n contourToPath,\n} from \"../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n DIE_LINE_BECF_1030A,\n generateBecf1030a,\n generateOuterContour as generateOuterContour1030a,\n contourToPath as contourToPath1030a,\n} from \"../../dieline/tuck-end-boxes/becf-1030a\";\nimport type { TuckEndBoxAttributes } from \"../../dieline/tuck-end-boxes/becf-1010a/generate\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1030a } from \"../../dieline/tuck-end-boxes/becf-1030a/generate\";\nimport { parseSvgPath } from \"../../../utils/autoLayout/svgPathToPdf\";\nimport {\n offsetContour as offsetContour1010a,\n} from \"../../dieline/tuck-end-boxes/becf-1010a\";\nimport {\n offsetContour as offsetContour1030a,\n} from \"../../dieline/tuck-end-boxes/becf-1030a\";\nimport {\n DIE_LINE_BECF_1040A,\n generateBecf1040a,\n generateOuterContour as generateOuterContour1040a,\n contourToPath as contourToPath1040a,\n offsetContour as offsetContour1040a,\n} from \"../../dieline/tuck-end-boxes/becf-1040a\";\nimport type { TuckEndBoxAttributes as TuckEndBoxAttributes1040a } from \"../../dieline/tuck-end-boxes/becf-1040a/generate\";\nimport {\n DIE_LINE_BECF_11D01,\n generateBecf11d01,\n generateOuterContour as generateOuterContour11d01,\n contourToPath as contourToPath11d01,\n offsetContour as offsetContour11d01,\n} from \"../../dieline/standard-boxes/becf-11d01\";\nimport type { StandardBoxAttributes } from \"../../dieline/standard-boxes/becf-11d01/generate\";\nimport { ModifyLayout } from \"./modifyLayout\";\n\ninterface DielinePaths {\n cut: string[];\n crease: string[];\n viewBox: { width: number; height: number };\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\n// เพิ่ม MODEL ใหม่ที่นี่\nfunction resolveModel(modelId: string, attrs: Record<string, number>, layoutDistance: number): {\n dieline: DielinePaths;\n contourPath: string;\n offsetContourPoints: Point[];\n generate: (a: Record<string, number>) => DielinePaths;\n generateContour: (a: Record<string, number>) => Point[];\n} | null {\n switch (modelId) {\n case \"BECF-1030A\": {\n const typedAttrs = attrs as unknown as TuckEndBoxAttributes1030a;\n const contour = generateOuterContour1030a(typedAttrs);\n return {\n dieline: generateBecf1030a(typedAttrs),\n contourPath: contourToPath1030a(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour1030a(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf1030a(a as unknown as TuckEndBoxAttributes1030a),\n generateContour: (a) => generateOuterContour1030a(a as unknown as TuckEndBoxAttributes1030a),\n };\n }\n case \"BECF-1040A\": {\n const typedAttrs = attrs as unknown as TuckEndBoxAttributes1040a;\n const contour = generateOuterContour1040a(typedAttrs);\n return {\n dieline: generateBecf1040a(typedAttrs),\n contourPath: contourToPath1040a(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour1040a(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf1040a(a as unknown as TuckEndBoxAttributes1040a),\n generateContour: (a) => generateOuterContour1040a(a as unknown as TuckEndBoxAttributes1040a),\n };\n }\n case \"BECF-11D01\": {\n const typedAttrs = attrs as unknown as StandardBoxAttributes;\n const contour = generateOuterContour11d01(typedAttrs);\n return {\n dieline: generateBecf11d01(typedAttrs),\n contourPath: contourToPath11d01(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour11d01(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf11d01(a as unknown as StandardBoxAttributes),\n generateContour: (a) => generateOuterContour11d01(a as unknown as StandardBoxAttributes),\n };\n }\n case \"BECF-1010A\":\n default: {\n const typedAttrs = attrs as unknown as TuckEndBoxAttributes;\n const contour = generateOuterContour(typedAttrs);\n return {\n dieline: generateBecf1010a(typedAttrs),\n contourPath: contourToPath(contour),\n offsetContourPoints: layoutDistance > 0 ? offsetContour1010a(contour, layoutDistance / 2) : contour,\n generate: (a) => generateBecf1010a(a as unknown as TuckEndBoxAttributes),\n generateContour: (a) => generateOuterContour(a as unknown as TuckEndBoxAttributes),\n };\n }\n }\n}\n\nfunction renderDieLine(modelId: string, attrs: Record<string, number>) {\n return (() => {\n switch (modelId) {\n case \"BECF-1030A\":\n return (\n <DIE_LINE_BECF_1030A\n attributes={attrs as unknown as TuckEndBoxAttributes1030a}\n renderAs=\"group\"\n />\n );\n case \"BECF-1040A\":\n return (\n <DIE_LINE_BECF_1040A\n attributes={attrs as unknown as TuckEndBoxAttributes1040a}\n renderAs=\"group\"\n />\n );\n case \"BECF-11D01\":\n return (\n <DIE_LINE_BECF_11D01\n attributes={attrs as unknown as StandardBoxAttributes}\n renderAs=\"group\"\n />\n );\n case \"BECF-1010A\":\n default:\n return (\n <DIE_LINE_BECF_1010A\n attributes={attrs as unknown as TuckEndBoxAttributes}\n renderAs=\"group\"\n />\n );\n }\n })();\n}\n\nconst PAPER_GAP = 20;\nconst PX_PER_MM = 96 / 25.4;\nconst RESULT_PANEL_HEIGHT = 55;\nconst RESULT_GAP = 5;\n\nfunction getOpposite(side: GripperSide): GripperSide {\n switch (side) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n }\n}\n\nfunction getSpacingRects(\n gripperSide: GripperSide,\n paperWidth: number,\n paperHeight: number,\n spacing: number,\n griper: number,\n cbDepth: number\n): { x: number; y: number; w: number; h: number }[] {\n switch (gripperSide) {\n case \"bottom\":\n return [\n { x: 0, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n { x: paperWidth - spacing, y: cbDepth, w: spacing, h: paperHeight - cbDepth - griper },\n ];\n case \"top\":\n return [\n { x: 0, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n { x: paperWidth - spacing, y: griper, w: spacing, h: paperHeight - griper - cbDepth },\n ];\n case \"left\":\n return [\n { x: griper, y: 0, w: paperWidth - griper - cbDepth, h: spacing },\n { x: griper, y: paperHeight - spacing, w: paperWidth - griper - cbDepth, h: spacing },\n ];\n case \"right\":\n return [\n { x: cbDepth, y: 0, w: paperWidth - cbDepth - griper, h: spacing },\n { x: cbDepth, y: paperHeight - spacing, w: paperWidth - cbDepth - griper, h: spacing },\n ];\n }\n}\n\nfunction drawTransformed(\n doc: { line: (x1: number, y1: number, x2: number, y2: number) => void },\n d: string,\n tx: (x: number, y: number) => number,\n ty: (x: number, y: number) => number\n) {\n const commands = parseSvgPath(d);\n let startX = 0, startY = 0;\n let curX = 0, curY = 0;\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case \"M\": {\n curX = tx(cmd.x!, cmd.y!);\n curY = ty(cmd.x!, cmd.y!);\n startX = curX;\n startY = curY;\n break;\n }\n case \"L\": {\n const nx = tx(cmd.x!, cmd.y!);\n const ny = ty(cmd.x!, cmd.y!);\n doc.line(curX, curY, nx, ny);\n curX = nx;\n curY = ny;\n break;\n }\n case \"C\": {\n const cx1 = tx(cmd.x1!, cmd.y1!);\n const cy1 = ty(cmd.x1!, cmd.y1!);\n const cx2 = tx(cmd.x2!, cmd.y2!);\n const cy2 = ty(cmd.x2!, cmd.y2!);\n const cx3 = tx(cmd.x!, cmd.y!);\n const cy3 = ty(cmd.x!, cmd.y!);\n const x0 = curX, y0 = curY;\n const steps = 20;\n let prevX = x0, prevY = y0;\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n const nx = mt*mt*mt*x0 + 3*mt*mt*t*cx1 + 3*mt*t*t*cx2 + t*t*t*cx3;\n const ny = mt*mt*mt*y0 + 3*mt*mt*t*cy1 + 3*mt*t*t*cy2 + t*t*t*cy3;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = cx3;\n curY = cy3;\n break;\n }\n case \"Q\": {\n const qx1 = tx(cmd.x1!, cmd.y1!);\n const qy1 = ty(cmd.x1!, cmd.y1!);\n const qx2 = tx(cmd.x!, cmd.y!);\n const qy2 = ty(cmd.x!, cmd.y!);\n const qx0 = curX, qy0 = curY;\n const steps = 16;\n let prevX = qx0, prevY = qy0;\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n const nx = mt*mt*qx0 + 2*mt*t*qx1 + t*t*qx2;\n const ny = mt*mt*qy0 + 2*mt*t*qy1 + t*t*qy2;\n doc.line(prevX, prevY, nx, ny);\n prevX = nx;\n prevY = ny;\n }\n curX = qx2;\n curY = qy2;\n break;\n }\n case \"Z\":\n doc.line(curX, curY, startX, startY);\n curX = startX;\n curY = startY;\n break;\n }\n }\n}\n\nexport interface AutoLayoutProps {\n config: AutoLayoutConfig | null;\n onResult?: (result: AutoLayoutResult | null) => void;\n onModifiedPapers?: (papers: AutoLayoutPaperResult[]) => void;\n}\n\nexport interface AutoLayoutRef {\n getResult: () => AutoLayoutResult | null;\n getPackedResult: (paperIndex: number) => Promise<AutoLayoutPackedResult>;\n exportDielineImage: () => Promise<Blob>;\n exportImage: (paperIndex: number) => Promise<Blob>;\n exportPdf: (paperIndex: number) => Promise<Blob>;\n}\n\nfunction getDielineTransform(\n x: number,\n y: number,\n rotation: number,\n w: number,\n h: number\n): string {\n switch (rotation) {\n case 90:\n return `translate(${x + h}, ${y}) rotate(90)`;\n case 180:\n return `translate(${x + w}, ${y + h}) rotate(180)`;\n case 270:\n return `translate(${x}, ${y + w}) rotate(270)`;\n case 45:\n return `translate(${x}, ${y}) rotate(45, ${w / 2}, ${h / 2})`;\n default:\n return `translate(${x}, ${y})`;\n }\n}\n\nexport const AUTO_LAYOUT = forwardRef<AutoLayoutRef, AutoLayoutProps>(\n ({ config, onResult, onModifiedPapers }, ref) => {\n const canvasRef = useRef<BaseCanvasRef>(null);\n const [result, setResult] = useState<AutoLayoutResult | null>(null);\n const [modifiedPapers, setModifiedPapers] = useState<AutoLayoutPaperResult[]>([]);\n const [modifyingPaper, setModifyingPaper] = useState<AutoLayoutPaperResult | null>(null);\n\n useEffect(() => {\n if (!config) {\n setResult(null);\n onResult?.(null);\n return;\n }\n const res = calculateAutoLayout(config);\n setResult(res);\n onResult?.(res);\n setModifiedPapers([]);\n setModifyingPaper(null);\n }, [config]);\n\n const theme = useMemo<AutoLayoutThemeConfig>(\n () => getAutoLayoutTheme(),\n []\n );\n\n const modelId = config?.model.modelId ?? \"\";\n const attrs = config?.model.attributes;\n const layoutDistance = config?.layoutDistance ?? 0;\n\n const resolved = useMemo(\n () => (modelId && attrs ? resolveModel(modelId, attrs, layoutDistance) : null),\n [modelId, attrs, layoutDistance]\n );\n\n const dieline = resolved?.dieline ?? null;\n const contourPath = resolved?.contourPath ?? null;\n\n const allPapers = useMemo(() => {\n const base = result?.papers ?? [];\n return [...base, ...modifiedPapers];\n }, [result, modifiedPapers]);\n\n const handleModifySubmit = useCallback((paper: AutoLayoutPaperResult) => {\n setModifiedPapers((prev) => {\n const next = [...prev, paper];\n onModifiedPapers?.(next);\n return next;\n });\n setModifyingPaper(null);\n }, [onModifiedPapers]);\n\n const exportDielineImage = useCallback(async (): Promise<Blob> => {\n if (!resolved || !attrs) throw new Error(\"No dieline to export\");\n\n const dl = resolved.generate(attrs);\n const { width: vw, height: vh } = dl.viewBox;\n\n const svgNs = \"http://www.w3.org/2000/svg\";\n const svg = document.createElementNS(svgNs, \"svg\");\n svg.setAttribute(\"xmlns\", svgNs);\n svg.setAttribute(\"viewBox\", `0 0 ${vw} ${vh}`);\n svg.setAttribute(\"width\", String(Math.round(vw * PX_PER_MM)));\n svg.setAttribute(\"height\", String(Math.round(vh * PX_PER_MM)));\n\n const bg = document.createElementNS(svgNs, \"rect\");\n bg.setAttribute(\"width\", String(vw));\n bg.setAttribute(\"height\", String(vh));\n bg.setAttribute(\"fill\", \"#ffffff\");\n svg.appendChild(bg);\n\n for (const d of dl.crease) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorFoldLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n path.setAttribute(\"stroke-dasharray\", \"2,1\");\n svg.appendChild(path);\n }\n for (const d of dl.cut) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorDieLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n svg.appendChild(path);\n }\n\n const svgStr = new XMLSerializer().serializeToString(svg);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.round(vw * PX_PER_MM);\n canvas.height = Math.round(vh * PX_PER_MM);\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n }, [resolved, attrs, theme]);\n\n const exportImage = useCallback(async (paperIndex: number): Promise<Blob> => {\n if (!result || !config || !resolved || !attrs) throw new Error(\"No results to export\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const dl = resolved.generate(attrs);\n const cPath = contourToPath(resolved.generateContour(attrs));\n const dist = config.layoutDistance;\n\n const svgNs = \"http://www.w3.org/2000/svg\";\n const svg = document.createElementNS(svgNs, \"svg\");\n svg.setAttribute(\"xmlns\", svgNs);\n svg.setAttribute(\"viewBox\", `0 0 ${paperResult.paperWidth} ${paperResult.paperHeight}`);\n svg.setAttribute(\"width\", String(Math.round(paperResult.paperWidth * PX_PER_MM)));\n svg.setAttribute(\"height\", String(Math.round(paperResult.paperHeight * PX_PER_MM)));\n\n const bg = document.createElementNS(svgNs, \"rect\");\n bg.setAttribute(\"width\", String(paperResult.paperWidth));\n bg.setAttribute(\"height\", String(paperResult.paperHeight));\n bg.setAttribute(\"fill\", theme.colorPaperFill);\n bg.setAttribute(\"stroke\", theme.colorPaperStroke);\n bg.setAttribute(\"stroke-width\", \"0.5\");\n svg.appendChild(bg);\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config.isShowColorbar ? config.colorbarHeight : 0;\n\n if (config.isShowColorbar) {\n appendColorbarToSvg(svg, svgNs, colorbarSide, config.colorbarHeight, paperResult.paperWidth, paperResult.paperHeight);\n }\n\n if (config.spacing > 0) {\n const rects = getSpacingRects(gripperSide, paperResult.paperWidth, paperResult.paperHeight, config.spacing, config.griper, cbDepth);\n for (const sr of rects) {\n const r = document.createElementNS(svgNs, \"rect\");\n r.setAttribute(\"x\", String(sr.x));\n r.setAttribute(\"y\", String(sr.y));\n r.setAttribute(\"width\", String(sr.w));\n r.setAttribute(\"height\", String(sr.h));\n r.setAttribute(\"fill\", theme.colorSpacing);\n svg.appendChild(r);\n }\n }\n\n if (config.griper > 0) {\n appendGripperToSvg(svg, svgNs, gripperSide, paperResult.paperWidth, paperResult.paperHeight, config.griper, theme.colorGriper);\n }\n\n if (dist > 0) {\n const defs = document.createElementNS(svgNs, \"defs\");\n paperResult.placements.forEach((_, idx) => {\n const mask = document.createElementNS(svgNs, \"mask\");\n mask.setAttribute(\"id\", `exp-dist-mask-${idx}`);\n const pad = dist + 2;\n const maskRect = document.createElementNS(svgNs, \"rect\");\n maskRect.setAttribute(\"x\", String(-pad));\n maskRect.setAttribute(\"y\", String(-pad));\n maskRect.setAttribute(\"width\", String(dl.viewBox.width + pad * 2));\n maskRect.setAttribute(\"height\", String(dl.viewBox.height + pad * 2));\n maskRect.setAttribute(\"fill\", \"white\");\n mask.appendChild(maskRect);\n const maskPath = document.createElementNS(svgNs, \"path\");\n maskPath.setAttribute(\"d\", cPath);\n maskPath.setAttribute(\"fill\", \"black\");\n maskPath.setAttribute(\"stroke\", \"black\");\n maskPath.setAttribute(\"stroke-width\", String(Math.max(0, (dist - 0.25) * 2)));\n maskPath.setAttribute(\"stroke-linejoin\", \"round\");\n mask.appendChild(maskPath);\n defs.appendChild(mask);\n });\n svg.appendChild(defs);\n }\n\n paperResult.placements.forEach((placement, idx) => {\n const g = document.createElementNS(svgNs, \"g\");\n g.setAttribute(\n \"transform\",\n getDielineTransform(placement.x, placement.y, placement.rotation, dl.viewBox.width, dl.viewBox.height)\n );\n\n if (dist > 0) {\n const distGroup = document.createElementNS(svgNs, \"g\");\n distGroup.setAttribute(\"mask\", `url(#exp-dist-mask-${idx})`);\n const distPath = document.createElementNS(svgNs, \"path\");\n distPath.setAttribute(\"d\", cPath);\n distPath.setAttribute(\"fill\", \"none\");\n distPath.setAttribute(\"stroke\", theme.colorDistanceLine);\n distPath.setAttribute(\"stroke-width\", String((dist + 0.25) * 2));\n distPath.setAttribute(\"stroke-linejoin\", \"round\");\n distGroup.appendChild(distPath);\n g.appendChild(distGroup);\n }\n\n for (const d of dl.crease) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorFoldLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n path.setAttribute(\"stroke-dasharray\", \"2,1\");\n g.appendChild(path);\n }\n for (const d of dl.cut) {\n const path = document.createElementNS(svgNs, \"path\");\n path.setAttribute(\"d\", d);\n path.setAttribute(\"fill\", \"none\");\n path.setAttribute(\"stroke\", theme.colorDieLine);\n path.setAttribute(\"stroke-width\", \"0.3\");\n g.appendChild(path);\n }\n svg.appendChild(g);\n });\n\n const svgStr = new XMLSerializer().serializeToString(svg);\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n\n const img = new Image();\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n img.src = url;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.round(paperResult.paperWidth * PX_PER_MM);\n canvas.height = Math.round(paperResult.paperHeight * PX_PER_MM);\n const ctx = canvas.getContext(\"2d\")!;\n ctx.fillStyle = theme.colorPaperFill;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (b) => (b ? resolve(b) : reject(new Error(\"Export failed\"))),\n \"image/png\"\n );\n });\n }, [result, config, theme, resolved, attrs, allPapers]);\n\n const exportPdf = useCallback(async (paperIndex: number): Promise<Blob> => {\n if (!result || !config || !resolved || !attrs) throw new Error(\"No results to export\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const dl = resolved.generate(attrs);\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n\n const pw = paperResult.paperWidth;\n const ph = paperResult.paperHeight;\n\n const { jsPDF } = await import(\"jspdf\");\n const doc = new jsPDF({\n orientation: pw >= ph ? \"landscape\" : \"portrait\",\n unit: \"mm\",\n format: [pw, ph],\n });\n\n if (config.isShowColorbar) {\n const BASE_COLORS = [\"#02FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\n const FADE_LEVELS = [1.0, 0.8, 0.6, 0.4, 0.2];\n const fadeToWhite = (hex: string, opacity: number) => {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return {\n r: Math.round(r + (255 - r) * (1 - opacity)),\n g: Math.round(g + (255 - g) * (1 - opacity)),\n b: Math.round(b + (255 - b) * (1 - opacity)),\n };\n };\n const colors = BASE_COLORS.flatMap((base) =>\n FADE_LEVELS.map((level) => fadeToWhite(base, level))\n );\n const count = colors.length;\n const isHoriz = colorbarSide === \"top\" || colorbarSide === \"bottom\";\n const cbH = config.colorbarHeight;\n\n colors.forEach((c, i) => {\n doc.setFillColor(c.r, c.g, c.b);\n if (isHoriz) {\n const w = pw / count;\n const y = colorbarSide === \"top\" ? 0 : ph - cbH;\n doc.rect(i * w, y, w, cbH, \"F\");\n } else {\n const h = ph / count;\n const x = colorbarSide === \"left\" ? 0 : pw - cbH;\n doc.rect(x, i * h, cbH, h, \"F\");\n }\n });\n }\n\n if (config.griper > 0) {\n const hexToRgb = (hex: string) => ({\n r: parseInt(hex.slice(1, 3), 16),\n g: parseInt(hex.slice(3, 5), 16),\n b: parseInt(hex.slice(5, 7), 16),\n });\n const gc = hexToRgb(theme.colorGriper);\n doc.setFillColor(gc.r, gc.g, gc.b);\n\n const depth = config.griper;\n switch (gripperSide) {\n case \"bottom\": doc.rect(0, ph - depth, pw, depth, \"F\"); break;\n case \"top\": doc.rect(0, 0, pw, depth, \"F\"); break;\n case \"left\": doc.rect(0, 0, depth, ph, \"F\"); break;\n case \"right\": doc.rect(pw - depth, 0, depth, ph, \"F\"); break;\n }\n\n const ARROW_COLORS_HEX = [\"#00FFFF\", \"#FF00FF\", \"#FFFF00\", \"#000000\"];\n const ARROW_SIZE = 2;\n const ARROW_SPACING = 8;\n const totalMarks = (ARROW_COLORS_HEX.length - 1) * ARROW_SPACING;\n const isHoriz = gripperSide === \"top\" || gripperSide === \"bottom\";\n\n ARROW_COLORS_HEX.forEach((hex, idx) => {\n const ac = hexToRgb(hex);\n doc.setFillColor(ac.r, ac.g, ac.b);\n\n if (isHoriz) {\n const cx = (pw - totalMarks) / 2 + idx * ARROW_SPACING;\n const cy = gripperSide === \"bottom\" ? ph - depth / 2 : depth / 2;\n const s = ARROW_SIZE;\n if (gripperSide === \"bottom\") {\n doc.triangle(cx - s, cy - s, cx + s, cy - s, cx, cy + s, \"F\");\n } else {\n doc.triangle(cx - s, cy + s, cx + s, cy + s, cx, cy - s, \"F\");\n }\n } else {\n const cy = (ph - totalMarks) / 2 + idx * ARROW_SPACING;\n const cx = gripperSide === \"left\" ? depth / 2 : pw - depth / 2;\n const s = ARROW_SIZE;\n if (gripperSide === \"left\") {\n doc.triangle(cx + s, cy - s, cx + s, cy + s, cx - s, cy, \"F\");\n } else {\n doc.triangle(cx - s, cy - s, cx - s, cy + s, cx + s, cy, \"F\");\n }\n }\n });\n }\n\n for (const placement of paperResult.placements) {\n const rad = (placement.rotation * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n\n const w = dl.viewBox.width;\n const h = dl.viewBox.height;\n\n let tx: number, ty: number;\n switch (placement.rotation) {\n case 90: tx = placement.x + h; ty = placement.y; break;\n case 180: tx = placement.x + w; ty = placement.y + h; break;\n case 270: tx = placement.x; ty = placement.y + w; break;\n default: tx = placement.x; ty = placement.y; break;\n }\n\n const transformX = (x: number, y: number) => cos * x - sin * y + tx;\n const transformY = (x: number, y: number) => sin * x + cos * y + ty;\n\n doc.setDrawColor(0, 255, 0);\n doc.setLineWidth(0.3);\n for (const d of dl.crease) {\n drawTransformed(doc, d, transformX, transformY);\n }\n\n doc.setDrawColor(255, 0, 0);\n doc.setLineWidth(0.3);\n for (const d of dl.cut) {\n drawTransformed(doc, d, transformX, transformY);\n }\n }\n\n const arrayBuffer = doc.output(\"arraybuffer\");\n return new Blob([arrayBuffer], { type: \"application/pdf\" });\n }, [result, config, theme, resolved, attrs, allPapers]);\n\n const handleExportImage = useCallback(async (paperIndex: number) => {\n const blob = await exportImage(paperIndex);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `layout-${allPapers[paperIndex]?.paperName ?? paperIndex}.png`;\n a.click();\n URL.revokeObjectURL(url);\n }, [exportImage, allPapers]);\n\n const handleExportPdf = useCallback(async (paperIndex: number) => {\n const blob = await exportPdf(paperIndex);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `layout-${allPapers[paperIndex]?.paperName ?? paperIndex}.pdf`;\n a.click();\n URL.revokeObjectURL(url);\n }, [exportPdf, allPapers]);\n\n const getPackedResult = useCallback(async (paperIndex: number): Promise<AutoLayoutPackedResult> => {\n if (!result || !config) throw new Error(\"No results\");\n const paperResult = allPapers[paperIndex];\n if (!paperResult) throw new Error(\"Invalid paper index\");\n\n const [dielineBlob, layoutBlob] = await Promise.all([\n exportDielineImage(),\n exportImage(paperIndex),\n ]);\n\n return {\n ...paperResult,\n quantity: result.quantity,\n dielineFile: new File([dielineBlob], \"dieline.png\", { type: \"image/png\" }),\n layoutFile: new File([layoutBlob], \"layout.png\", { type: \"image/png\" }),\n };\n }, [result, config, allPapers, exportDielineImage, exportImage]);\n\n useImperativeHandle(ref, () => ({\n getResult: () => result,\n getPackedResult,\n exportDielineImage,\n exportImage,\n exportPdf,\n }), [result, getPackedResult, exportDielineImage, exportImage, exportPdf]);\n\n const paperOriginY = RESULT_PANEL_HEIGHT + RESULT_GAP;\n\n const viewBox = useMemo(() => {\n if (allPapers.length === 0) {\n return { x: 0, y: 0, width: 400, height: 300 };\n }\n let totalW = 0;\n let maxH = 0;\n for (const p of allPapers) {\n totalW += p.paperWidth;\n if (p.paperHeight > maxH) maxH = p.paperHeight;\n }\n totalW += (allPapers.length - 1) * PAPER_GAP;\n const padding = 20;\n return {\n x: -padding,\n y: -padding,\n width: totalW + padding * 2,\n height: maxH + paperOriginY + padding * 2,\n };\n }, [allPapers, paperOriginY]);\n\n if (modifyingPaper && config && resolved) {\n return (\n <ModifyLayout\n paperResult={modifyingPaper}\n config={config}\n modelId={config.model.modelId}\n attrs={config.model.attributes}\n offsetContourPoints={resolved.offsetContourPoints}\n contourPath={resolved.contourPath}\n dielineViewBox={resolved.dieline.viewBox}\n onSubmit={handleModifySubmit}\n onCancel={() => setModifyingPaper(null)}\n />\n );\n }\n\n return (\n <BaseCanvas ref={canvasRef} viewBox={viewBox} backgroundColor={theme.colorBackground}>\n {result && attrs && dieline && allPapers.map((paperResult, paperIdx) => {\n let offsetX = 0;\n for (let i = 0; i < paperIdx; i++) {\n offsetX += allPapers[i].paperWidth + PAPER_GAP;\n }\n\n const gripperSide = paperResult.gripperSide;\n const colorbarSide = getOpposite(gripperSide);\n const cbDepth = config!.isShowColorbar ? config!.colorbarHeight : 0;\n const panelW = paperResult.paperWidth;\n const fontSize = Math.min(4, panelW / 30);\n const padX = fontSize * 1.2;\n const padY = padX;\n const gap = fontSize * 1.4;\n const rank = paperIdx + 1;\n const exportBtnW = fontSize * 14;\n const exportBtnH = fontSize * 1.8;\n\n let curY = padY + fontSize;\n const titleY = curY; curY += gap;\n const recY = curY; curY += gap;\n const perSheetY = curY; curY += gap;\n const sheetsY = curY; curY += gap;\n const producedY = curY; curY += gap;\n const wasteY = curY; curY += gap;\n const exportBtnY = curY;\n\n return (\n <g key={paperResult.paperId} transform={`translate(${offsetX}, 0)`}>\n <rect\n x={0}\n y={0}\n width={panelW}\n height={RESULT_PANEL_HEIGHT}\n rx={2}\n ry={2}\n fill=\"#f8fafc\"\n stroke=\"#d4dce7\"\n strokeWidth={0.3}\n />\n <text x={padX} y={titleY} fontSize={fontSize + 1} fontWeight=\"bold\" fill=\"#0f172a\">\n {paperResult.paperName}\n </text>\n <text x={padX} y={recY} fontSize={fontSize} fontWeight=\"bold\" fill={rank === 1 ? \"#10b981\" : \"#475569\"}>\n Recommended: #{rank}\n </text>\n <text x={padX} y={perSheetY} fontSize={fontSize} fill=\"#475569\">\n Produced per sheet: {paperResult.producedPerSheet} pcs\n </text>\n <text x={padX} y={sheetsY} fontSize={fontSize} fill=\"#475569\">\n Sheets needed: {paperResult.independentSheets}\n </text>\n <text x={padX} y={producedY} fontSize={fontSize} fill=\"#475569\">\n Produced: {paperResult.independentSheets * paperResult.producedPerSheet} pcs (excess {paperResult.independentSheets * paperResult.producedPerSheet - (config?.quantity ?? 0)})\n </text>\n <text x={padX} y={wasteY} fontSize={fontSize} fill=\"#475569\">\n Waste per sheet: {paperResult.wastePercent}%\n </text>\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => handleExportImage(paperIdx)}\n >\n <rect\n x={padX}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#0f172a\"\n />\n <text\n x={padX + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Export Sheet\n </text>\n </g>\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => handleExportPdf(paperIdx)}\n >\n <rect\n x={padX + exportBtnW + fontSize * 2}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#1e40af\"\n />\n <text\n x={padX + exportBtnW + fontSize * 2 + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Export PDF\n </text>\n </g>\n {paperResult.producedPerSheet > 0 && (\n <g\n style={{ cursor: \"pointer\" }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => setModifyingPaper(paperResult)}\n >\n <rect\n x={padX + (exportBtnW + fontSize * 2) * 2}\n y={exportBtnY}\n width={exportBtnW}\n height={exportBtnH}\n rx={1.5}\n ry={1.5}\n fill=\"#7c3aed\"\n />\n <text\n x={padX + (exportBtnW + fontSize * 2) * 2 + exportBtnW / 2}\n y={exportBtnY + exportBtnH / 2 + fontSize * 0.35}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fill=\"#fff\"\n style={{ pointerEvents: \"none\" }}\n >\n Modify Layout\n </text>\n </g>\n )}\n\n <g transform={`translate(0, ${paperOriginY})`}>\n <rect\n width={paperResult.paperWidth}\n height={paperResult.paperHeight}\n fill={theme.colorPaperFill}\n stroke={theme.colorPaperStroke}\n strokeWidth={0.5}\n />\n\n {config!.isShowColorbar && (\n <Colorbar\n side={colorbarSide}\n colorbarHeight={config!.colorbarHeight}\n paperWidth={paperResult.paperWidth}\n paperHeight={paperResult.paperHeight}\n />\n )}\n\n {config!.spacing > 0 && getSpacingRects(\n gripperSide,\n paperResult.paperWidth,\n paperResult.paperHeight,\n config!.spacing,\n config!.griper,\n cbDepth\n ).map((r, i) => (\n <rect key={`sp-${i}`} x={r.x} y={r.y} width={r.w} height={r.h} fill={theme.colorSpacing} />\n ))}\n\n {config!.griper > 0 && (\n <Gripper\n side={gripperSide}\n paperWidth={paperResult.paperWidth}\n paperHeight={paperResult.paperHeight}\n depth={config!.griper}\n fillColor={theme.colorGriper}\n />\n )}\n\n {contourPath && layoutDistance > 0 && (\n <defs>\n {paperResult.placements.map((_, i) => {\n const maskId = `dist-mask-${paperIdx}-${i}`;\n const d = layoutDistance / 2;\n const pad = d + 2;\n return (\n <mask key={maskId} id={maskId}>\n <rect x={-pad} y={-pad} width={dieline.viewBox.width + pad * 2} height={dieline.viewBox.height + pad * 2} fill=\"white\" />\n <path\n d={contourPath}\n fill=\"black\"\n stroke=\"black\"\n strokeWidth={Math.max(0, (d - 0.25) * 2)}\n strokeLinejoin=\"round\"\n />\n </mask>\n );\n })}\n </defs>\n )}\n\n {paperResult.placements.map((placement, i) => {\n const transform = getDielineTransform(\n placement.x,\n placement.y,\n placement.rotation,\n dieline.viewBox.width,\n dieline.viewBox.height\n );\n return (\n <g key={`piece-${i}`} transform={transform}>\n {contourPath && layoutDistance > 0 && (\n <g mask={`url(#dist-mask-${paperIdx}-${i})`}>\n <path\n d={contourPath}\n fill=\"none\"\n stroke={theme.colorDistanceLine}\n strokeWidth={(layoutDistance / 2 + 0.25) * 2}\n strokeLinejoin=\"round\"\n />\n </g>\n )}\n {renderDieLine(config!.model.modelId, attrs)}\n </g>\n );\n })}\n\n </g>\n </g>\n );\n })}\n\n {!result && (\n <text x={200} y={150} textAnchor=\"middle\" fontSize={8} fill=\"#999\">\n Press Calculate to generate layout\n </text>\n )}\n </BaseCanvas>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport { MODEL_BECF_1010A } from \"../../model/tuck-end-boxes/becf-1010a\";\nimport { MODEL_BECF_1030A } from \"../../model/tuck-end-boxes/becf-1030a\";\nimport { MODEL_BECF_1040A } from \"../../model/tuck-end-boxes/becf-1040a\";\nimport { MODEL_BECF_11D01 } from \"../../model/standard-boxes/becf-11d01\";\nimport type { ModelMode } from \"../../../statics/modelList\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface DieLineLayoutProps {\n modelId: string;\n attributes: { [key: string]: number } & any;\n unit?: \"mm\" | \"cm\" | \"in\";\n mode?: ModelMode;\n isShowDimensions?: boolean;\n}\n\nexport interface DieLineLayoutRef {\n getAttributes: () => Record<string, unknown>;\n exportImage: (options?: { isShowDimension?: boolean; originalSize?: boolean }) => Promise<Blob>;\n exportDimension: () => Promise<Blob>;\n}\n\nexport const DIE_LINE_LAYOUT = forwardRef<DieLineLayoutRef, DieLineLayoutProps>(\n ({ modelId, ...props }, ref) => {\n switch (modelId) {\n case \"BECF-1010A\":\n return <MODEL_BECF_1010A ref={ref as any} {...props as any} />;\n case \"BECF-1030A\":\n return <MODEL_BECF_1030A ref={ref as any} {...props as any} />;\n case \"BECF-1040A\":\n return <MODEL_BECF_1040A ref={ref as any} {...props as any} />;\n case \"BECF-11D01\":\n return <MODEL_BECF_11D01 ref={ref as any} {...props as any} />;\n default:\n return null;\n }\n }\n);\n","export const BECF_1010A_DEFAULT_ATTRIBUTES = {\n length: 60,\n width: 25,\n height: 100,\n glueArea: 15,\n dustFlap: 15,\n tuckFlap: 15,\n};","export const BECF_1030A_DEFAULT_ATTRIBUTES = {\n length: 105,\n width: 50,\n height: 155,\n glueArea: 15,\n dustFlap: 25,\n tuckFlap: 14,\n};\n","export const BECF_1040A_DEFAULT_ATTRIBUTES = {\n length: 56,\n width: 56,\n height: 150,\n glueArea: 15,\n dustFlap: 30,\n tuckFlap: 14,\n};\n","export const BECF_11D01_DEFAULT_ATTRIBUTES = {\n length: 100,\n width: 50,\n height: 150,\n flapHeight: 50,\n glueArea: 13,\n};\n","import { BECF_1010A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1010a/DEFAULT_ATTRIBUTES\";\nimport { BECF_1030A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1030a/DEFAULT_ATTRIBUTES\";\nimport { BECF_1040A_DEFAULT_ATTRIBUTES } from \"./tuck-end-boxes/becf-1040a/DEFAULT_ATTRIBUTES\";\nimport { BECF_11D01_DEFAULT_ATTRIBUTES } from \"./standard-boxes/becf-11d01/DEFAULT_ATTRIBUTES\";\n\nexport type ModelMode = \"DIE_LINE\" | \"3D\" | \"AUTO_LAYOUT\";\n\nexport interface PackagingModel {\n id: string;\n nameEN: string;\n nameTH: string;\n dimension: ModelMode[];\n attributes: Record<string, number>;\n}\n\nexport const modelList: PackagingModel[] = [\n {\n id: \"BECF-1010A\",\n nameEN: \"TUCK END BOXES TYPE A\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ A\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1010A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-1040A\",\n nameEN: \"TUCK END BOXES TYPE B\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ B\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1040A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-1030A\",\n nameEN: \"TUCK END BOXES TYPE C\",\n nameTH: \"กล่องฝาเสียบ ก้นเสียบ C\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_1030A_DEFAULT_ATTRIBUTES },\n },\n {\n id: \"BECF-11D01\",\n nameEN: \"Standard Box BECF-11D01\",\n nameTH: \"กล่องทั่วไป BECF-11D01\",\n dimension: [\"DIE_LINE\"],\n attributes: { ...BECF_11D01_DEFAULT_ATTRIBUTES },\n },\n];\n"]}
|