/* ─── 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 += `
`;
}
}
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);
}