import {useState} from 'react'; import presetData from './promptPresets.json'; const presets=presetData.map(p=>({...p,fields:Object.fromEntries(Object.entries(p.fields).filter((entry):entry is [string,string]=>typeof entry[1]==='string'))})); export const FIELDS=['similarity','function','subunit','catalytic activity','pathway','cofactor','tissue specificity','domain','subcellular location','PTM','miscellaneous','induction','disruption phenotype','activity regulation','developmental stage','sequence caution','caution','biophysicochemical properties','disease','alternative products','online information','biotechnology','polymorphism','mass spectrometry','allergen','toxic dose','RNA editing','pharmaceutical','interaction']; const hints:Record={similarity:'e.g. Belongs to the MurCDEF family.',function:'e.g. Cell wall formation.',subunit:'e.g. Homodimer.','catalytic activity':'Describe the reaction catalyzed by the protein.',cofactor:'e.g. Binds 1 zinc ion.',pathway:'e.g. Peptidoglycan biosynthesis.','subcellular location':'e.g. Cytoplasm.'}; export const assemblePrompt=(fields:Record)=>FIELDS.map(f=>(fields[f]||'').trim()).filter(Boolean).join(''); export function PromptBuilder({fields,setFields,onApply,busy,input}:{fields:Record;setFields:(f:Record)=>void;onApply:(text:string)=>void;busy:boolean;input:string}){ const [extra,setExtra]=useState('catalytic activity'); const shown=FIELDS.filter(f=>f==='similarity'||f==='function'||f in fields); const available=FIELDS.filter(f=>!shown.includes(f)); const selected=available.includes(extra)?extra:available[0]||''; const assembled=assemblePrompt(fields); const preset=presets.find(p=>assemblePrompt(p.fields as Record)===assembled); const choose=(p:typeof presets[number])=>{const next={...p.fields} as Record;setFields(next);onApply(assemblePrompt(next));}; return
BUILD YOUR PROMPTStart from annotations or an example
{presets.map(p=>)}
{preset?`Original demo example · ${preset.id}`:'Editable examples from the original demo'}
{shown.map(f=>
{!['similarity','function'].includes(f)&&}