import type { ProtocolStepType } from '../types' // Parameter definition for step templates export interface ParameterDefinition { key: string label: string type: 'number' | 'text' | 'select' | 'concentration' | 'temperature' | 'duration' | 'reagent' unit?: string options?: Array<{ value: string; label: string }> required?: boolean default?: unknown min?: number max?: number placeholder?: string } // Step template definition export interface StepTemplate { id: string type: ProtocolStepType name: string description?: string defaultDuration?: number parameters: ParameterDefinition[] isBuiltIn?: boolean } export const BUILT_IN_PROTOCOL_TEMPLATES: StepTemplate[] = [ { id: 'builtin-incubation', type: 'incubation', name: 'Incubation', description: 'Incubate samples at specified conditions', defaultDuration: 60, isBuiltIn: true, parameters: [ { key: 'temperature', label: 'Temperature', type: 'temperature', unit: '°C', required: true, default: 37, min: -80, max: 100, }, { key: 'duration', label: 'Duration', type: 'duration', unit: 'hours', required: true, default: 24, min: 0, }, { key: 'co2', label: 'CO2', type: 'number', unit: '%', required: false, default: 5, min: 0, max: 100, }, { key: 'humidity', label: 'Humidity', type: 'number', unit: '%', required: false, default: 95, min: 0, max: 100, }, ], }, { id: 'builtin-wash', type: 'wash', name: 'Wash', description: 'Wash samples with buffer', defaultDuration: 5, isBuiltIn: true, parameters: [ { key: 'buffer', label: 'Buffer', type: 'select', required: true, default: 'PBS', options: [ { value: 'PBS', label: 'PBS' }, { value: 'PBST', label: 'PBST' }, { value: 'TBS', label: 'TBS' }, { value: 'TBST', label: 'TBST' }, { value: 'Water', label: 'Water' }, { value: 'Other', label: 'Other' }, ], }, { key: 'volume', label: 'Volume', type: 'number', unit: 'µL', required: true, default: 200, min: 0, }, { key: 'cycles', label: 'Wash Cycles', type: 'number', required: true, default: 3, min: 1, max: 10, }, ], }, { id: 'builtin-addition', type: 'addition', name: 'Addition', description: 'Add reagent or compound to samples', defaultDuration: 5, isBuiltIn: true, parameters: [ { key: 'reagent', label: 'Reagent', type: 'text', required: true, placeholder: 'Enter reagent name', }, { key: 'volume', label: 'Volume', type: 'number', unit: 'µL', required: true, default: 100, min: 0, }, { key: 'concentration', label: 'Concentration', type: 'concentration', required: false, }, ], }, { id: 'builtin-measurement', type: 'measurement', name: 'Measurement', description: 'Take measurements using specified instrument', defaultDuration: 15, isBuiltIn: true, parameters: [ { key: 'instrument', label: 'Instrument', type: 'select', required: true, options: [ { value: 'plate_reader', label: 'Plate Reader' }, { value: 'microscope', label: 'Microscope' }, { value: 'flow_cytometer', label: 'Flow Cytometer' }, { value: 'spectrophotometer', label: 'Spectrophotometer' }, { value: 'other', label: 'Other' }, ], }, { key: 'readout', label: 'Readout Type', type: 'text', required: false, placeholder: 'e.g., Absorbance 450nm', }, { key: 'notes', label: 'Parameters', type: 'text', required: false, placeholder: 'Additional parameters', }, ], }, { id: 'builtin-centrifuge', type: 'centrifuge', name: 'Centrifuge', description: 'Centrifuge samples', defaultDuration: 10, isBuiltIn: true, parameters: [ { key: 'speed', label: 'Speed', type: 'number', unit: 'RPM', required: true, default: 1000, min: 100, max: 20000, }, { key: 'duration', label: 'Duration', type: 'number', unit: 'min', required: true, default: 5, min: 1, }, { key: 'temperature', label: 'Temperature', type: 'temperature', unit: '°C', required: false, default: 4, min: -10, max: 40, }, ], }, { id: 'builtin-transfer', type: 'transfer', name: 'Transfer', description: 'Transfer samples between containers', defaultDuration: 10, isBuiltIn: true, parameters: [ { key: 'source', label: 'Source', type: 'text', required: true, placeholder: 'Source container', }, { key: 'destination', label: 'Destination', type: 'text', required: true, placeholder: 'Destination container', }, { key: 'volume', label: 'Volume', type: 'number', unit: 'µL', required: true, default: 100, min: 0, }, ], }, { id: 'builtin-mix', type: 'mix', name: 'Mix', description: 'Mix samples', defaultDuration: 5, isBuiltIn: true, parameters: [ { key: 'method', label: 'Method', type: 'select', required: true, default: 'pipette', options: [ { value: 'pipette', label: 'Pipette mixing' }, { value: 'vortex', label: 'Vortex' }, { value: 'shaker', label: 'Orbital shaker' }, { value: 'inversion', label: 'Inversion' }, ], }, { key: 'duration', label: 'Duration', type: 'number', unit: 'sec', required: false, default: 30, min: 1, }, { key: 'speed', label: 'Speed/Intensity', type: 'text', required: false, placeholder: 'e.g., 300 RPM', }, ], }, { id: 'builtin-custom', type: 'custom', name: 'Custom Step', description: 'Custom protocol step', defaultDuration: 15, isBuiltIn: true, parameters: [ { key: 'description', label: 'Description', type: 'text', required: true, placeholder: 'Describe the step', }, { key: 'notes', label: 'Notes', type: 'text', required: false, placeholder: 'Additional notes', }, ], }, ]