{#if !started} {:else}
Protocol
BICORDER
{#if viewMode === 'list'}

A diagnostic tool for the study of protocols

{#each data.diagnostic as diagnosticSet, setIndex}
{diagnosticSet.set_name.toUpperCase()}
{diagnosticSet.set_description}
{#each diagnosticSet.gradients as gradient, gradientIndex} {#if !data.metadata.shortform || gradient.shortform} { data.diagnostic[setIndex].gradients[gradientIndex].value = e.detail ?? null; data = data; }} on:notes={(e) => { data.diagnostic[setIndex].gradients[gradientIndex].notes = e.detail; data = data; }} /> {/if} {/each}
{/each}
ANALYSIS
{#each data.analysis as analysisItem, index} { if (!analysisItem.automated) { data.analysis[index].value = e.detail ?? null; data = data; } }} on:notes={(e) => { data.analysis[index].notes = e.detail; data = data; }} /> {/each}
{:else}
{#if currentScreenData.type === 'metadata'}
{:else if currentScreenData.type === 'gradient'} {@const screen = currentScreenData}
{screen.setName.toUpperCase()}
← {screen.gradient.term_left}
{screen.gradient.term_left_description}
{#key refreshKey} { data.diagnostic[screen.setIndex].gradients[screen.gradientIndex].value = e.detail ?? null; data = data; refreshKey++; // Force component refresh }} on:notes={(e) => { data.diagnostic[screen.setIndex].gradients[screen.gradientIndex].notes = e.detail; data = data; refreshKey++; // Force component refresh }} /> {/key}
{screen.gradient.term_right} →
{screen.gradient.term_right_description}
{:else if currentScreenData.type === 'analysis'} {@const screen = currentScreenData}
ANALYSIS
{#if screen.gradient.automated}
auto-calculated
{/if} {#if isFirstAnalysisScreen} { // Jump to the export screen (last screen) currentScreen = screens.length - 1; }} on:updateAnalysis={(e) => { data.analysis[e.detail.index].value = e.detail.value; data = data; }} on:updateAnalysisNotes={(e) => { data.analysis[e.detail.index].notes = e.detail.notes; data = data; }} /> {/if}
← {screen.gradient.term_left}
{screen.gradient.term_left_description}
{#key refreshKey} { if (!screen.gradient.automated) { data.analysis[screen.index].value = e.detail ?? null; data = data; refreshKey++; // Force component refresh } }} on:notes={(e) => { data.analysis[screen.index].notes = e.detail; data = data; refreshKey++; // Force component refresh }} /> {/key}
{screen.gradient.term_right} →
{screen.gradient.term_right_description}
{:else if currentScreenData.type === 'export'}
{/if}
{progressBar}
{diagnosticProgress} / {diagnosticScreenCount}
{/if}
{/if}