import { idFromName } from './builderIdUtils' import { defaultFlowControls, normalizeFlowControl, normalizeFlowMarker, } from './flowNormalizers' import { createTemplateEnvelope } from './templateEnvelopes' import { validateFlowCytometryPanelData } from './templateValidators' import type { CreateFlowCytometryPanelTemplateOptions, FlowCytometryPanelTemplate, FlowCytometryPanelTemplateData, FlowPanelControl, FlowPanelMarker, } from './types' /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function createFlowCytometryPanelTemplate( options: CreateFlowCytometryPanelTemplateOptions ): FlowCytometryPanelTemplate { const markers = options.markers.map((marker, index): FlowPanelMarker => { if (typeof marker !== 'string') return normalizeFlowMarker(marker, index) return { id: idFromName(marker, `marker-${index + 1}`), marker, fluorophore: 'unassigned', purpose: 'phenotype', compensationRequired: true, metadata: {}, } }) const controls = options.controls === undefined ? options.includeDefaultControls === false ? [] : defaultFlowControls(markers) : options.controls.map((control, index): FlowPanelControl => { if (typeof control !== 'string') return normalizeFlowControl(control, index) return { id: idFromName(control, `control-${index + 1}`), name: control, kind: 'other', required: true, metadata: {}, } }) const data: FlowCytometryPanelTemplateData = { markers, controls, instrument: options.instrument, metadata: options.metadata ?? {}, } validateFlowCytometryPanelData(data) return createTemplateEnvelope('flow-cytometry-panel', data, options.metadata ?? {}) }