import type { TemplateId, TemplatePresetId } from './types' import { templateIdentifierMatches, templateSearchMatches } from './lookup' export interface BioTemplatePresetEntry { name: TemplatePresetId label: string category: 'bio-template-preset' purpose: string templates: readonly TemplateId[] aliases: readonly string[] python_import: string python_example: string frontend_import: string frontend_adapters: readonly string[] components: readonly string[] } /** @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 const bioTemplatePresets = [ { name: 'wellplate-screen', label: 'Well-plate screen', category: 'bio-template-preset', purpose: 'Plate map, sample sheet, and dose-response payloads for plate-based screening assays.', templates: ['plate-map', 'sample-sheet', 'dose-response'], aliases: [ 'wellplate', 'well-plate screen', 'drug screen', 'plate screen', 'dose response plate', 'dose design', 'dose planner', ], python_import: 'from mint_sdk.templates import create_wellplate_screen_collection, save_template_collection', python_example: 'create_wellplate_screen_collection(samples=["Control", "Treatment"], compounds={"Drug A": [10, 1, 0.1]}, unit="uM")', frontend_import: "import { createWellPlateScreenCollection, toPlateMapEditorState, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toPlateMapEditorState', 'toTemplateDataFrame', 'toDoseConditions'], components: ['PlateEditor', 'WellPlate', 'DataFrame', 'DoseCalculator'], }, { name: 'qpcr-expression', label: 'qPCR expression', category: 'bio-template-preset', purpose: 'Sample metadata and qPCR/ddPCR plate layout for target-expression assays.', templates: ['sample-sheet', 'qpcr-plate'], aliases: ['qpcr', 'qPCR', 'rt-qpcr', 'ddpcr', 'gene expression', 'primer plate'], python_import: 'from mint_sdk.templates import create_qpcr_expression_collection, save_template_collection', python_example: 'create_qpcr_expression_collection(samples=["Control", "Treatment"], targets=["ACTB", "GAPDH"], replicates=3)', frontend_import: "import { createQpcrExpressionCollection, toQpcrWellPlateWells, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toTemplateDataFrame', 'toQpcrDataFrame', 'toQpcrWellPlateWells'], components: ['DataFrame', 'WellPlate', 'SampleSelector'], }, { name: 'lcms-batch', label: 'LC-MS batch', category: 'bio-template-preset', purpose: 'Sample metadata, instrument queue, and assay matrix payloads for omics acquisition batches.', templates: ['sample-sheet', 'instrument-run', 'assay-matrix'], aliases: [ 'lcms', 'lc-ms', 'mass spec batch', 'omics batch', 'metabolomics', 'metabolism', 'metabolite profiling', 'run queue', 'sequence table', ], python_import: 'from mint_sdk.templates import create_lcms_batch_collection, save_template_collection', python_example: 'create_lcms_batch_collection(samples=["S001", "S002"], features=["Glucose", "Lactate"], instrument="LC-MS")', frontend_import: "import { createLcmsBatchCollection, toAssayMatrixSampleOptions, toInstrumentRunDataFrame, toInstrumentRunScheduleEvents, toInstrumentRunSteps, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toTemplateDataFrame', 'toInstrumentRunDataFrame', 'toInstrumentRunSteps', 'toInstrumentRunScheduleEvents', 'toAssayMatrixDataFrame', 'toAssayMatrixSampleOptions'], components: ['DataFrame', 'ExperimentTimeline', 'ScheduleCalendar', 'ChartContainer', 'SampleSelector'], }, { name: 'targeted-metabolomics', label: 'Targeted metabolomics', category: 'bio-template-preset', purpose: 'Sample metadata, extraction prep, internal standards, LC/GC-MS sequence, calibration curve, and metabolite readout matrix for quantitative metabolomics.', templates: ['sample-sheet', 'sample-prep', 'reagent-list', 'instrument-run', 'calibration-curve', 'assay-matrix'], aliases: [ 'targeted metabolomics', 'quantitative metabolomics', 'lc-ms metabolomics', 'gc-ms metabolomics', 'targeted lcms', 'metabolite quantitation', 'mass spec quantitation', 'internal standards', 'peak area ratio', ], python_import: 'from mint_sdk.templates import create_targeted_metabolomics_collection, save_template_collection', python_example: 'create_targeted_metabolomics_collection(samples=["S001", "S002"], metabolites=["Glucose", "Lactate"], internal_standards=["13C Glucose"], instrument="LC-MS")', frontend_import: "import { createTargetedMetabolomicsCollection, toInstrumentRunDataFrame, toCalibrationCurveDataFrame, toAssayMatrixDataFrame, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toTemplateDataFrame', 'toSamplePrepDataFrame', 'toReagentDataFrame', 'toInstrumentRunDataFrame', 'toInstrumentRunSteps', 'toInstrumentRunScheduleEvents', 'toCalibrationCurveDataFrame', 'toAssayMatrixDataFrame', 'toAssayMatrixSampleOptions'], components: ['DataFrame', 'ReagentList', 'ExperimentTimeline', 'ScheduleCalendar', 'FitPanel', 'ChartContainer', 'SampleSelector'], }, { name: 'elisa-assay', label: 'ELISA assay', category: 'bio-template-preset', purpose: 'Plate layout, sample metadata, standard curve, and readout matrix for ELISA and plate-reader assays.', templates: ['plate-map', 'sample-sheet', 'calibration-curve', 'assay-matrix'], aliases: ['elisa', 'plate reader assay', 'standard curve plate', 'absorbance assay', 'immunoassay'], python_import: 'from mint_sdk.templates import create_elisa_assay_collection, save_template_collection', python_example: 'create_elisa_assay_collection(samples=["Control", "Treatment"], analyte="IL-6", standard_concentrations=[1000, 100, 10, 1], unit="pg/mL")', frontend_import: "import { createElisaAssayCollection, toPlateMapEditorState, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toPlateMapEditorState', 'toTemplateDataFrame', 'toCalibrationCurveDataFrame'], components: ['PlateEditor', 'WellPlate', 'DataFrame', 'FitPanel', 'ChartContainer'], }, { name: 'flow-cytometry-assay', label: 'Flow cytometry assay', category: 'bio-template-preset', purpose: 'Sample metadata, antibody marker panel, compensation controls, and readout matrix for flow-cytometry assays.', templates: ['sample-sheet', 'flow-cytometry-panel', 'assay-matrix'], aliases: [ 'flow cytometry', 'facs', 'facs panel', 'flow panel', 'immune phenotyping', 'immunophenotyping', ], python_import: 'from mint_sdk.templates import create_flow_cytometry_assay_collection, save_template_collection', python_example: 'create_flow_cytometry_assay_collection(samples=["Control", "Treatment"], markers=["CD3", "CD4", "CD8"], instrument="BD LSRFortessa")', frontend_import: "import { createFlowCytometryAssayCollection, toFlowPanelDataFrame, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toTemplateDataFrame', 'toFlowPanelDataFrame', 'toAssayMatrixDataFrame'], components: ['DataFrame', 'SampleSelector', 'ChartContainer'], }, { name: 'western-blot-assay', label: 'Western blot assay', category: 'bio-template-preset', purpose: 'Sample metadata, antibody/reagent list, protocol steps, and normalized protein readout matrix for Western blot assays.', templates: ['sample-sheet', 'reagent-list', 'protocol-steps', 'assay-matrix'], aliases: ['western blot', 'western-blot', 'immunoblot', 'protein blot', 'protein expression'], python_import: 'from mint_sdk.templates import create_western_blot_assay_collection, save_template_collection', python_example: 'create_western_blot_assay_collection(samples=["Control", "Treatment"], targets=["pERK", "ERK"], loading_control="ACTB")', frontend_import: "import { createWesternBlotAssayCollection, toReagentDataFrame, toProtocolDataFrame, toTemplateDataFrame } from '@morscherlab/mint-sdk/templates'", frontend_adapters: ['toTemplateDataFrame', 'toReagentDataFrame', 'toProtocolDataFrame'], components: ['DataFrame', 'ReagentList', 'ExperimentTimeline', 'SampleSelector'], }, ] as const satisfies readonly BioTemplatePresetEntry[] /** @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 listBioTemplatePresets(): readonly BioTemplatePresetEntry[] { return bioTemplatePresets } /** @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 getBioTemplatePresetInfo(name: string): BioTemplatePresetEntry | undefined { return bioTemplatePresets.find(entry => { const identifiers = [ entry.name, entry.label, ...entry.aliases, ] return templateIdentifierMatches(name, identifiers) }) } /** @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 searchBioTemplatePresets(query: string): readonly BioTemplatePresetEntry[] { const normalized = query.trim().toLowerCase() if (!normalized) return bioTemplatePresets return bioTemplatePresets.filter(entry => templateSearchMatches(normalized, [ entry.name, entry.label, entry.purpose, entry.python_import, entry.python_example, entry.frontend_import, ...entry.templates, ...entry.aliases, ...entry.frontend_adapters, ...entry.components, ])) }