export function sampleIdFromName(name: string, index: number): string { return idFromName(name, `sample-${index + 1}`) } export function compoundIdFromName(name: string, index: number): string { return idFromName(name, `compound-${index + 1}`) } export function idFromName(name: string, fallback: string): string { const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') return slug || fallback } export function timepointId(value: number, unit: string, index: number): string { const raw = Number.isInteger(value) ? String(value) : String(value).replace(/0+$/, '').replace(/\.$/, '') const token = raw.replace('.', 'p') return token ? `t${token}-${unit}` : `timepoint-${index + 1}` }