import { createAssayMatrixTemplate } from './assayMatrixBuilder' import { SAMPLE_COLOR_SCALE } from '../utils/color' import { idFromName } from './builderIdUtils' import { createCalibrationCurveTemplate } from './calibrationCurveBuilder' import { createPlateMapTemplate } from './plateMapBuilder' import { createSampleSheetTemplate } from './sampleSheetBuilder' import { presetSampleRecords } from './sampleNormalizers' import { createTemplateCollection } from './templateEnvelopes' import type { CreateElisaAssayCollectionOptions, TemplateCollectionEnvelope, } 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 createElisaAssayCollection( options: CreateElisaAssayCollectionOptions = {} ): TemplateCollectionEnvelope { const sampleRecords = presetSampleRecords(options.samples ?? ['Control', 'Treatment']) const analyte = options.analyte ?? 'Analyte' const responseUnit = options.responseUnit ?? 'OD450' const plate = createPlateMapTemplate({ name: options.plateName ?? 'ELISA plate', format: options.plateFormat ?? 96, samples: [ { id: 'blank', name: 'Blank' }, { id: 'standard', name: 'Standards' }, { id: 'qc', name: 'QC' }, ...sampleRecords.map((sample, index) => ({ id: sample.sampleId, name: sample.name ?? sample.sampleId, color: SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length], })), ], }) const sampleSheet = createSampleSheetTemplate({ samples: sampleRecords }) const calibrationCurve = createCalibrationCurveTemplate({ concentrations: options.standardConcentrations ?? [1000, 100, 10, 1], analyte, unit: options.unit ?? 'pg/mL', responseUnit, model: 'four-parameter-logistic', }) const assayMatrix = createAssayMatrixTemplate({ samples: sampleRecords.map(sample => ({ sampleId: sample.sampleId, name: sample.name, group: sample.group, metadata: sample.metadata ?? {}, })), features: [{ id: idFromName(analyte, 'analyte'), name: analyte, type: 'protein', unit: responseUnit, metadata: {}, }], metadata: { analyte, responseUnit }, }) return createTemplateCollection( [plate, sampleSheet, calibrationCurve, assayMatrix], { preset: 'elisa-assay', ...(options.metadata ?? {}) } ) }