{"version":3,"file":"jena-utilities.esm.min.js","sources":["../lib/form/fillForm.js","../lib/form/getStyle.js","../lib/instruments.js","../lib/form/getInstruments.js","../lib/form/updateIconNMR.js","../node_modules/screening/lib/generateIconNMRFile.js","../lib/form/ExperimentForm.js","../lib/form/getForm.js"],"sourcesContent":["function collectFormData(form) {\n    const formData = {};\n    const experimentsDiv = form.document.querySelector(`#${form.id}`);\n    const activeTab = experimentsDiv.querySelector('.tab-content.active');\n    const instrumentId = activeTab?.dataset.instrument;\n    if (!instrumentId)\n        return formData;\n    formData.instrument = instrumentId;\n    formData.experiments = [];\n    const experiments = activeTab.querySelectorAll('.experiment-item');\n    for (const exp of experiments) {\n        const checkbox = exp.querySelector('.experiment-toggle');\n        const experimentData = {\n            name: checkbox.dataset.experiment,\n            enabled: checkbox.checked,\n            parameters: {},\n        };\n        for (const input of exp.querySelectorAll('.parameter-input')) {\n            experimentData.parameters[input.dataset.label] = input.value;\n        }\n        formData.experiments.push(experimentData);\n    }\n    return formData;\n}\nfunction createExperimentElement(document, experiment) {\n    const div = document.createElement('div');\n    div.className = 'experiment-item';\n    const header = document.createElement('div');\n    header.className = 'experiment-header';\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.className = 'experiment-toggle';\n    checkbox.dataset.experiment = experiment.experiment;\n    checkbox.checked = experiment.enabled || false;\n    const label = document.createElement('label');\n    label.textContent = experiment.experiment;\n    label.style.cursor = 'pointer';\n    header.append(checkbox);\n    header.append(label);\n    const paramsDiv = document.createElement('div');\n    paramsDiv.className = 'experiment-parameters';\n    paramsDiv.style.display = experiment.enabled || false ? 'block' : 'none';\n    for (const param of experiment.parameters) {\n        const paramDiv = document.createElement('div');\n        paramDiv.className = 'parameter-item';\n        const paramLabel = document.createElement('label');\n        paramLabel.textContent = param.label;\n        const input = document.createElement('input');\n        input.type = 'text';\n        input.className = 'parameter-input';\n        input.dataset.label = param.label;\n        input.value = param.value;\n        paramDiv.append(paramLabel);\n        paramDiv.append(input);\n        paramsDiv.append(paramDiv);\n    }\n    div.append(header);\n    div.append(paramsDiv);\n    return div;\n}\nfunction createTabContent(form, instrumentId, instrumentData) {\n    const content = form.document.createElement('div');\n    content.className = 'tab-content';\n    content.dataset.instrument = instrumentId;\n    for (const experiment of instrumentData.experiments) {\n        content.append(createExperimentElement(form.document, experiment));\n    }\n    return content;\n}\nfunction switchTab(form, instrumentId) {\n    const experimentsDiv = form.document.querySelector(`#${form.id}`);\n    for (const tab of experimentsDiv.querySelectorAll('.tab')) {\n        tab.classList.toggle('active', tab.dataset.instrument === instrumentId);\n    }\n    for (const content of experimentsDiv.querySelectorAll('.tab-content')) {\n        content.classList.toggle('active', content.dataset.instrument === instrumentId);\n    }\n    form.onFormChange(collectFormData(form));\n}\nexport function fillForm(form, instruments) {\n    const experimentsDiv = form.document.querySelector(`#${form.id}`);\n    const tabsContainer = experimentsDiv.querySelector('#tabs');\n    const formContainer = experimentsDiv.querySelector('#form-container');\n    // Clear existing content\n    tabsContainer.innerHTML = '';\n    formContainer.innerHTML = '';\n    const instrumentIds = Object.keys(instruments);\n    for (const [index, instrumentId] of instrumentIds.entries()) {\n        const tab = form.document.createElement('button');\n        tab.className = 'tab';\n        tab.dataset.instrument = instrumentId;\n        tab.textContent = instrumentId;\n        if (index === 0)\n            tab.classList.add('active');\n        tabsContainer.append(tab);\n        const content = createTabContent(form, instrumentId, instruments[instrumentId]);\n        if (index === 0)\n            content.classList.add('active');\n        formContainer.append(content);\n    }\n    // Event delegation at experiments div level\n    experimentsDiv.addEventListener('click', (e) => {\n        if (e.target.classList.contains('tab')) {\n            switchTab(form, e.target.dataset.instrument);\n        }\n        else if (e.target.classList.contains('experiment-header') ||\n            e.target.closest('.experiment-header label')) {\n            const checkbox = e.currentTarget\n                .querySelector('.experiment-item')\n                ?.querySelector('.experiment-toggle');\n            if (checkbox &&\n                (e.target.tagName === 'LABEL' || e.target.closest('.experiment-header'))) {\n                const experimentItem = e.target.closest('.experiment-item');\n                if (experimentItem) {\n                    const checkboxInItem = experimentItem.querySelector('.experiment-toggle');\n                    if (checkboxInItem) {\n                        checkboxInItem.click();\n                    }\n                }\n            }\n        }\n    });\n    experimentsDiv.addEventListener('change', (e) => {\n        if (e.target.classList.contains('experiment-toggle')) {\n            const experimentItem = e.target.closest('.experiment-item');\n            const params = experimentItem.querySelector('.experiment-parameters');\n            params.style.display = e.target.checked ? 'block' : 'none';\n            form.onFormChange(collectFormData(form));\n        }\n    });\n    experimentsDiv.addEventListener('input', (e) => {\n        if (e.target.classList.contains('parameter-input')) {\n            form.onFormChange(collectFormData(form));\n        }\n    });\n    form.onFormChange(collectFormData(form));\n}\n//# sourceMappingURL=fillForm.js.map","export function getStyle(id) {\n    return `#${id} {\n  max-width: 800px;\n  margin: 0 auto;\n  background-color: white;\n  padding: 20px;\n  border-radius: 8px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n  box-sizing: border-box;\n}\n\n#${id} .tabs {\n  display: flex;\n  gap: 5px;\n  border-bottom: 2px solid #ddd;\n  margin-bottom: 20px;\n}\n\n#${id} .tab {\n  padding: 10px 20px;\n  background-color: #f0f0f0;\n  border: none;\n  border-radius: 5px 5px 0 0;\n  cursor: pointer;\n  font-size: 14px;\n  transition: background-color 0.3s;\n}\n\n#${id} .tab:hover {\n  background-color: #e0e0e0;\n}\n\n#${id} .tab.active {\n  background-color: #007bff;\n  color: white;\n}\n\n#${id} .tab-content {\n  display: none;\n}\n\n#${id} .tab-content.active {\n  display: block;\n}\n\n#${id} .experiment-item {\n  border: 1px solid #ddd;\n  border-radius: 5px;\n  padding: 15px;\n  margin-bottom: 10px;\n  background-color: #fafafa;\n}\n\n#${id} .experiment-header {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n#${id} .experiment-toggle {\n  width: 18px;\n  height: 18px;\n  cursor: pointer;\n}\n\n#${id} .experiment-header label {\n  font-weight: bold;\n  color: #333;\n  user-select: none;\n}\n\n#${id} .experiment-parameters {\n  margin-top: 15px;\n  padding-left: 28px;\n}\n\n#${id} .parameter-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n}\n\n#${id} .parameter-item label {\n  min-width: 150px;\n  color: #555;\n}\n\n#${id} .parameter-input {\n  flex: 1;\n  padding: 8px;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  font-size: 14px;\n}\n\n#${id} .parameter-input:focus {\n  outline: none;\n  border-color: #007bff;\n}\n`;\n}\n//# sourceMappingURL=getStyle.js.map","export const instruments = {\n    instrument1: {\n        solventMapping: {\n            CDCl3: 'CDCl3',\n            'DMSO-d6': 'DMSO-d6',\n        },\n        defaultExperiments: [\n            { key: '1H', isPolymer: false, experiment: '1H_CSE_LL' },\n            { key: '13C', isPolymer: false, experiment: '13C{1H}_CSE_LL' },\n            { key: 'COSY', isPolymer: false, experiment: 'COSY_NUS_CSE_LL' },\n            { key: 'HSQC', isPolymer: false, experiment: 'HSQCed_NUS_CSE_LL' },\n            { key: 'HMBC', isPolymer: false, experiment: 'HMBC_NUS_CSE_LL' },\n            { key: 'NOESY', isPolymer: false, experiment: 'NOESY' },\n            { key: '31P', isPolymer: false, experiment: '31P{1H}' },\n            { key: '11B', isPolymer: false, experiment: '11B{1H}' },\n            { key: '13C', isPolymer: true, experiment: '13C{1H}_POLYMER' },\n            { key: 'APT', isPolymer: true, experiment: '13C{1H}-APT-POLY' },\n            { key: 'DEPT135', isPolymer: true, experiment: 'DEPT135-POLYMER' },\n        ],\n        experiments: [\n            {\n                experiment: '1H_CSE_LL',\n                parameters: [\n                    { label: 'd1', value: '1.2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '6.5' },\n                    { label: 'sw', value: '20' },\n                    { label: 'ns', value: '16' },\n                    { label: 'ds', value: '2' },\n                ],\n            },\n            {\n                experiment: '13C{1H}_CSE_LL',\n                parameters: [\n                    { label: 'd1', value: '2.5' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '115' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '128' },\n                    { label: 'ds', value: '4' },\n                ],\n            },\n            {\n                experiment: 'DEPT135',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '115' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '128' },\n                    { label: 'ds', value: '8' },\n                ],\n            },\n            {\n                experiment: '13C_APT',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '100' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '256' },\n                    { label: 'ds', value: '4' },\n                    { label: 'cnst2', value: '145' },\n                ],\n            },\n            {\n                experiment: '1H_gradsup',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '4.7' },\n                    { label: 'sw', value: '24' },\n                    { label: 'ns', value: '32' },\n                    { label: 'ds', value: '26' },\n                ],\n            },\n            {\n                experiment: 'COSY_NUS_CSE_LL',\n                parameters: [\n                    { label: 'd1', value: '1.5' },\n                    { label: 'td', value: '2k' },\n                    { label: 'o1p', value: '6.5' },\n                    { label: 'sw', value: '15' },\n                    { label: 'ns', value: '4' },\n                    { label: 'ds', value: '16' },\n                ],\n            },\n            {\n                experiment: 'HSQCed_NUS_CSE_LL',\n                parameters: [\n                    { label: 'd1', value: '1.2' },\n                    { label: 'td', value: '2k' },\n                    { label: 'o1p', value: '6.5' },\n                    { label: 'sw', value: '15' },\n                    { label: 'ns', value: '4' },\n                    { label: 'ds', value: '16' },\n                    { label: 'cnst2', value: '145' },\n                ],\n            },\n            {\n                experiment: 'HMBC_NUS_CSE_LL',\n                parameters: [\n                    { label: 'd1', value: '1.5' },\n                    { label: 'td', value: '1k' },\n                    { label: 'o1p', value: '6.5' },\n                    { label: 'sw', value: '15' },\n                    { label: 'ns', value: '8' },\n                    { label: 'ds', value: '16' },\n                    { label: 'cnst6', value: '120' },\n                    { label: 'cnst7', value: '170' },\n                    { label: 'cnst13', value: '8' },\n                ],\n            },\n            {\n                experiment: 'NOESY',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '2k' },\n                    { label: 'o1p', value: '6.5' },\n                    { label: 'sw', value: '15' },\n                    { label: 'ns', value: '32' },\n                    { label: 'ds', value: '16' },\n                    { label: 'd8', value: '0.3' },\n                ],\n            },\n            {\n                experiment: '31P{1H}',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '0' },\n                    { label: 'sw', value: '400' },\n                    { label: 'ns', value: '256' },\n                    { label: 'ds', value: '4' },\n                ],\n            },\n            {\n                experiment: '11B{1H}',\n                parameters: [\n                    { label: 'd1', value: '2' },\n                    { label: 'td', value: '64k' },\n                    { label: 'o1p', value: '0' },\n                    { label: 'sw', value: '300' },\n                    { label: 'ns', value: '256' },\n                    { label: 'ds', value: '4' },\n                ],\n            },\n            {\n                experiment: '13C{1H}_POLYMER',\n                parameters: [\n                    { label: 'd1', value: '0.7' },\n                    { label: 'td', value: '16k' },\n                    { label: 'o1p', value: '115' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '10k' },\n                    { label: 'ds', value: '4' },\n                ],\n            },\n            {\n                experiment: '13C{1H}-APT-POLY',\n                parameters: [\n                    { label: 'd1', value: '0.7' },\n                    { label: 'td', value: '16k' },\n                    { label: 'o1p', value: '115' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '10k' },\n                    { label: 'ds', value: '4' },\n                    { label: 'cnst2', value: '145' },\n                ],\n            },\n            {\n                experiment: 'DEPT135-POLYMER',\n                parameters: [\n                    { label: 'd1', value: '0.75' },\n                    { label: 'td', value: '16k' },\n                    { label: 'o1p', value: '115' },\n                    { label: 'sw', value: '282' },\n                    { label: 'ns', value: '2500' },\n                    { label: 'ds', value: '8' },\n                ],\n            },\n        ],\n    },\n    instrument2: {\n        solventMapping: {\n            CDCl3: 'Chloroform-d',\n            'DMSO-d6': 'Dimethyl sulfoxide-d6',\n        },\n        defaultExperiments: [\n            { key: '1h', isPolymer: false, experiment: 'H1 NMR' },\n            { key: '13c', isPolymer: false, experiment: 'C13 NMR' },\n            { key: 'hsqc', isPolymer: false, experiment: 'HSQC' },\n        ],\n        experiments: [\n            {\n                experiment: 'H1 NMR',\n                parameters: [\n                    { label: 'd1', value: '' },\n                    { label: 'number of scans', value: '' },\n                ],\n            },\n            {\n                experiment: 'C13 NMR',\n                parameters: [\n                    { label: 'ds', value: '' },\n                    { label: 'ns', value: '' },\n                    { label: 'd1', value: '' },\n                ],\n            },\n            {\n                experiment: 'HSQC',\n                parameters: [],\n            },\n        ],\n    },\n};\n//# sourceMappingURL=instruments.js.map","import { instruments as originalInstruments } from \"../instruments.js\";\n/**\n * This method not only retrieve the list of instruments but also based on the user\n * request set some active experiments for all the instruments\n * @param preferences\n * @param request\n * @returns\n */\nexport function getInstruments(request) {\n    if (!request) {\n        return structuredClone(originalInstruments);\n    }\n    const isPolymer = request.analysis.data.isPolymer;\n    const requestedExperiments = new Set(Object.entries(request.analysis.data.experiments)\n        .filter(([_, value]) => value === true)\n        .map(([key, _]) => key));\n    console.log({ isPolymer, requestedExperiments });\n    const instruments = structuredClone(originalInstruments);\n    for (const instrumentKey in instruments) {\n        const instrument = instruments[String(instrumentKey)];\n        const selectedExperiments = new Set(instrument.defaultExperiments\n            .filter((exp) => {\n            return (exp.isPolymer === isPolymer && requestedExperiments.has(exp.key));\n        })\n            .map((exp) => exp.experiment));\n        for (const experiment of instrument.experiments) {\n            if (selectedExperiments.has(experiment.experiment)) {\n                experiment.enabled = true;\n            }\n            else {\n                experiment.enabled = false;\n            }\n        }\n    }\n    return instruments;\n}\n//# sourceMappingURL=getInstruments.js.map","import { generateIconNMRFile } from 'screening';\nexport function updateIconNMR(form) {\n    const { experiments, iconNMROptions } = form;\n    const { user, name, title, holder, solvent, deleteExistingHolder, autoSubmit, } = iconNMROptions;\n    const data = {\n        user,\n        name,\n        title,\n        holder,\n        experiments: [],\n    };\n    for (const experiment of experiments) {\n        const parameters = [];\n        for (const key in experiment.parameters) {\n            parameters.push({ label: key, value: experiment.parameters[key] });\n        }\n        data.experiments.push({\n            experiment: experiment.name,\n            solvent,\n            parameters,\n        });\n    }\n    form.iconNMR = generateIconNMRFile([data], {\n        deleteExistingHolder,\n        autoSubmit,\n    });\n}\n//# sourceMappingURL=updateIconNMR.js.map","/**\n * Generate iconNMR text file from requests\n * @param requests - array of PlateRequest objects\n * @param options - options for generating the file\n * @returns iconNMR text file\n */\nexport function generateIconNMRFile(requests, options = {}) {\n    const { eol = '\\r\\n', deleteExistingHolder = false, autoSubmit = false, } = options;\n    const textFile = [];\n    for (const request of requests) {\n        let experimentNumberCounter = 1;\n        const { holder } = request;\n        if (deleteExistingHolder) {\n            textFile.push(`USER ${request.user}`, `HOLDER ${holder}`, 'DELETE'); // this is required to delete already existing entries\n        }\n        textFile.push(`USER ${request.user}`, `HOLDER ${holder}`);\n        if (!autoSubmit)\n            textFile.push('NO_SUBMIT');\n        textFile.push(`NAME ${request.name}`, `TITLE ${request.title}`);\n        for (const experiment of request.experiments) {\n            let experimentNumber = experiment.experimentNumber || experimentNumberCounter++;\n            textFile.push(`EXPNO ${experimentNumber++}`, `SOLVENT ${experiment.solvent}`, `EXPERIMENT ${experiment.experiment}`);\n            if (experiment.parameters && experiment.parameters.length > 0) {\n                const parameters = [];\n                for (const parameter of experiment.parameters) {\n                    parameters.push(parameter.label, parameter.value);\n                }\n                textFile.push(`PARAMETERS ${parameters.join(',')}`);\n            }\n        }\n        textFile.push('');\n    }\n    return textFile.join(eol);\n}\n//# sourceMappingURL=generateIconNMRFile.js.map","/* eslint-disable unicorn/prefer-structured-clone */\nimport { fillForm } from './fillForm.js';\nimport { getForm } from \"./getForm.js\";\nimport { getInstruments } from \"./getInstruments.js\";\nimport { updateIconNMR } from \"./updateIconNMR.js\";\nexport class ExperimentForm {\n    document;\n    id;\n    html;\n    instrument = null;\n    experiments = [];\n    iconNMR;\n    iconNMROptions;\n    onFormChange;\n    constructor(document, options = {}) {\n        this.document = document;\n        const form = getForm(options);\n        this.id = options.id ?? form.id;\n        this.html = form.html;\n        this.iconNMR = '';\n        this.iconNMROptions = {\n            user: 'defaultUser',\n            name: 'defaultName',\n            title: 'defaultTitle',\n            holder: 0,\n            solvent: 'defaultSolvent',\n            deleteExistingHolder: false,\n            autoSubmit: false,\n        };\n        updateIconNMR(this);\n        this.onFormChange = (formData) => {\n            this.instrument = formData.instrument;\n            this.experiments = JSON.parse(JSON.stringify(formData.experiments)).filter((experiment) => experiment.enabled);\n            updateIconNMR(this);\n            if (options.onFormChange) {\n                options.onFormChange(formData);\n            }\n            else {\n                console.log('Form changed:', formData);\n            }\n        };\n    }\n    updateIconNMROptions(options) {\n        this.iconNMROptions = options;\n        updateIconNMR(this);\n    }\n    fillForm(request) {\n        const instruments = getInstruments(request);\n        console.log(instruments);\n        fillForm(this, instruments);\n    }\n}\n//# sourceMappingURL=ExperimentForm.js.map","import { getStyle } from \"./getStyle.js\";\nexport function getForm(options = {}) {\n    const { id = `instrument-${crypto.randomUUID()}` } = options;\n    return {\n        id,\n        html: `<style>${getStyle(id)}</style>\n<div id=\"${id}\">\n  <div id=\"tabs\" class=\"tabs\"></div>\n  <div id=\"form-container\" class=\"form-container\"></div>\n</div>`,\n    };\n}\n//# sourceMappingURL=getForm.js.map"],"names":["collectFormData","form","formData","activeTab","document","querySelector","id","instrumentId","dataset","instrument","experiments","querySelectorAll","exp","checkbox","experimentData","name","experiment","enabled","checked","parameters","input","label","value","push","createExperimentElement","div","createElement","className","header","type","textContent","style","cursor","append","paramsDiv","display","param","paramDiv","paramLabel","createTabContent","instrumentData","content","fillForm","instruments","experimentsDiv","tabsContainer","formContainer","innerHTML","instrumentIds","Object","keys","index","entries","tab","classList","add","addEventListener","e","target","contains","toggle","onFormChange","switchTab","closest","currentTarget","tagName","experimentItem","checkboxInItem","click","getStyle","instrument1","solventMapping","CDCl3","defaultExperiments","key","isPolymer","instrument2","getInstruments","request","structuredClone","originalInstruments","analysis","data","requestedExperiments","Set","filter","_","map","console","log","instrumentKey","String","selectedExperiments","has","updateIconNMR","iconNMROptions","user","title","holder","solvent","deleteExistingHolder","autoSubmit","iconNMR","requests","options","eol","textFile","experimentNumberCounter","experimentNumber","length","parameter","join","generateIconNMRFile","ExperimentForm","html","constructor","this","crypto","randomUUID","getForm","JSON","parse","stringify","updateIconNMROptions"],"mappings":"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","x_google_ignoreList":[5]}