/* ─── BOM Detail Expansion ─── */ function renderBomDetails(b) { let html = '
'; if (b.cutTemplate) { const ct = b.cutTemplate; const displayName = ct.dxfFilePath?.split(/[/\\]/).pop() || ''; html += `
${icons.laser} Cut Template
File${esc(displayName)}
Thickness${fmtThickness(ct.thickness)}
K-Factor${ct.kFactor != null ? ct.kFactor : '\u2014'}
Bend Radius${ct.defaultBendRadius != null ? ct.defaultBendRadius.toFixed(4) + '"' : '\u2014'}
`; if (ct.contentHash) { html += `
${icons.download} Download DXF ${esc(displayName)}
`; } } if (b.formProgram) { const fp = b.formProgram; html += `
${icons.bend} Form Program
Program${esc(fp.programName)}
Thickness${fmtThickness(fp.thickness)}
Material${esc(fp.materialType)}
K-Factor${fp.kFactor != null ? fp.kFactor : '\u2014'}
Bends${fp.bendCount}
Upper Tools${esc(fp.upperToolNames) || '\u2014'}
Lower Tools${esc(fp.lowerToolNames) || '\u2014'}
${fp.setupNotes ? `
Setup Notes${esc(fp.setupNotes)}
` : ''}`; } html += '
'; return html; } function toggleEquipGroup(id) { const group = document.getElementById(id); const icon = document.getElementById(id + '-icon'); if (!group) return; group.classList.toggle('collapsed'); if (icon) icon.classList.toggle('open', !group.classList.contains('collapsed')); } function toggleBomRow(id) { const row = document.getElementById(id); const icon = document.getElementById(id + '-icon'); if (!row) return; const visible = row.style.display !== 'none'; row.style.display = visible ? 'none' : ''; if (icon) icon.classList.toggle('open', !visible); }