@morscherlab/mint-sdk 1.0.27 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as SampleLegend_default, A as ReagentEditor_default, B as ProgressBar_default, C as formatSequenceRemaining, Ct as BaseTabs_default, D as ScientificNumber_default, E as ChemicalFormula_default, F as BioTemplateExperimentWorkspaceView_default, G as ControlWorkspaceView_default, H as Divider_default, I as BioTemplateRenderer_default, J as SampleSelector_default, K as ComponentBindingRenderer_default, L as ChartContainer_default, M as RackEditor_default, N as BioTemplatePresetWorkspaceView_default, O as ProtocolStepEditor_default, P as BioTemplatePackWorkspaceView_default, Q as PlateMapEditor_default, R as Breadcrumb_default, S as formatSequenceEta, St as SegmentedControl_default, T as sequenceSamplesRemaining, U as AppContainer_default, V as StatusIndicator_default, W as DoseDesignWorkspaceView_default, X as LoadingSpinner_default, Y as AutoGroupModal_default, Z as ReagentList_default, _ as InstrumentStateBadge_default, _t as AppToastContainer_default, a as ExperimentDataViewer_default, at as AppLayout_default, b as estimateSequenceFinishDate, bt as Calendar_default, c as LcmsSequenceTable_default, ct as FormActions_default, d as extractLcmsCommonPrefix, dt as AppPluginSwitcher_default, et as WellPlate_default, f as extractLcmsSampleName, ft as AppAvatarMenu_default, g as InstrumentStatusCard_default, gt as IconButton_default, h as reconstructLcmsPlateCellsFromSequenceItems, ht as ThemeToggle_default, i as TimeRangeInput_default, it as MobileSupportGate_default, j as GroupAssigner_default, k as SampleHierarchyTree_default, l as DEFAULT_LCMS_SEQUENCE_COLUMNS, lt as StepWizard_default, m as lcmsWellIdFromPosition, mt as CollapsibleCard_default, n as FitPanel_default, nt as DoseCalculator_default, o as BatchProgressList_default, ot as AppSidebar_default, p as inferLcmsPlateTypeFromWellIds, pt as PluginIcon_default, q as ScheduleCalendar_default, r as ResourceCard_default, rt as PluginWorkspaceView_default, s as AuditTrail_default, st as FormBuilder_default, tt as ExperimentTimeline_default, u as basenameFromWindowsPath, ut as AppTopBar_default, v as InstrumentAlertLog_default, vt as AlertBox_default, w as sequenceProgressPercent, wt as ColorSlider_default, x as estimateSequenceRemainingSeconds, xt as DropdownButton_default, y as SequenceProgressBar_default, yt as DataFrame_default, z as Avatar_default } from "./components-BT_uVU5B.js";
1
+ import { $ as SampleLegend_default, A as ReagentEditor_default, B as ProgressBar_default, C as formatSequenceRemaining, Ct as BaseTabs_default, D as ScientificNumber_default, E as ChemicalFormula_default, F as BioTemplateExperimentWorkspaceView_default, G as ControlWorkspaceView_default, H as Divider_default, I as BioTemplateRenderer_default, J as SampleSelector_default, K as ComponentBindingRenderer_default, L as ChartContainer_default, M as RackEditor_default, N as BioTemplatePresetWorkspaceView_default, O as ProtocolStepEditor_default, P as BioTemplatePackWorkspaceView_default, Q as PlateMapEditor_default, R as Breadcrumb_default, S as formatSequenceEta, St as SegmentedControl_default, T as sequenceSamplesRemaining, U as AppContainer_default, V as StatusIndicator_default, W as DoseDesignWorkspaceView_default, X as LoadingSpinner_default, Y as AutoGroupModal_default, Z as ReagentList_default, _ as InstrumentStateBadge_default, _t as AppToastContainer_default, a as ExperimentDataViewer_default, at as AppLayout_default, b as estimateSequenceFinishDate, bt as Calendar_default, c as LcmsSequenceTable_default, ct as FormActions_default, d as extractLcmsCommonPrefix, dt as AppPluginSwitcher_default, et as WellPlate_default, f as extractLcmsSampleName, ft as AppAvatarMenu_default, g as InstrumentStatusCard_default, gt as IconButton_default, h as reconstructLcmsPlateCellsFromSequenceItems, ht as ThemeToggle_default, i as TimeRangeInput_default, it as MobileSupportGate_default, j as GroupAssigner_default, k as SampleHierarchyTree_default, l as DEFAULT_LCMS_SEQUENCE_COLUMNS, lt as StepWizard_default, m as lcmsWellIdFromPosition, mt as CollapsibleCard_default, n as FitPanel_default, nt as DoseCalculator_default, o as BatchProgressList_default, ot as AppSidebar_default, p as inferLcmsPlateTypeFromWellIds, pt as PluginIcon_default, q as ScheduleCalendar_default, r as ResourceCard_default, rt as PluginWorkspaceView_default, s as AuditTrail_default, st as FormBuilder_default, tt as ExperimentTimeline_default, u as basenameFromWindowsPath, ut as AppTopBar_default, v as InstrumentAlertLog_default, vt as AlertBox_default, w as sequenceProgressPercent, wt as ColorSlider_default, x as estimateSequenceRemainingSeconds, xt as DropdownButton_default, y as SequenceProgressBar_default, yt as DataFrame_default, z as Avatar_default } from "./components-CzE7YHWY.js";
2
2
  import { t as BaseButton_default } from "./BaseButton-Dgqrze41.js";
3
3
  import { r as BaseInput_default, t as BaseSelect_default } from "./BaseSelect-ekgr9fDo.js";
4
4
  import { $ as parseTime, A as useConcentrationUnits, B as TagsInput_default, C as controlsToViewIds, D as getTypeDefault, E as getFieldRegistryEntry, F as ATOMIC_WEIGHTS, G as findAvailableSlots, H as addMinutes, I as useChemicalFormula, J as formatTime, K as findNearestTimeSlotIndex, L as DateTimePicker_default, M as SequenceInput_default, N as useSequenceUtils, O as ConcentrationInput_default, P as FormulaInput_default, Q as isTimeInRange, R as FileUploader_default, S as controlsToTopBarSettingsConfig, T as getDefaultControlView, U as compareTime, V as TimePicker_default, W as durationMinutes, X as fromMinutes, Y as formatTimeSlot, Z as generateTimeSlots, _ as controlsToFormSchema, a as defineDoseCalculatorControlProps, at as MultiSelect_default, b as controlsToSettingsSchema, c as defineWellPlateDoseComponentBindings, ct as BaseSlider_default, d as defineControlModel, dt as BaseCheckbox_default, et as rangesOverlap, ft as Tooltip_default, h as controlValuesToComponentProps, i as useControlSchema, it as DatePicker_default, j as MoleculeInput_default, k as UnitInput_default, l as defineWellPlateDoseControlProps, lt as BaseRadioGroup_default, m as controlValuesToComponentBindingsById, n as defineControls, nt as toMinutes, o as defineDoseDesignControlModel, ot as useListSelection, p as controlValuesToComponentBindings, pt as BaseTextarea_default, q as formatDuration, r as getControlDefaults, rt as useTimeUtils, s as defineWellPlateControlProps, st as useSelectionLimit, t as defineControlComponentBindings, tt as snapToSlot, u as useControlWorkspace, ut as BaseToggle_default, v as controlsToSectionFormSchema, w as controlsToViewItems, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as NumberInput_default } from "./useControlSchema-BZNdalmL.js";
@@ -6,7 +6,7 @@ import { t as useEventListener } from "./useEventListener-CfVkP9Xz.js";
6
6
  import { o as FormField_default, t as SettingsModal_default } from "./SettingsModal-CJgLadsN.js";
7
7
  import { t as BaseModal_default } from "./BaseModal-B9UA8Y_I.js";
8
8
  import { a as BasePill_default, i as Skeleton_default, n as ExperimentCodeBadge_default, r as EmptyState_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-CKV5w9IR.js";
9
- import { B as APP_EXPERIMENT_KEY, C as useExpansionSet, D as hslToHex, E as hexToHsl, G as normalizeSearchQuery, H as useTheme, I as useWellPlateEditor, J as useSortedItems, K as useTextSearch, L as useDoseCalculator, M as extractSampleOptionsFromDesignData, N as unwrapExperimentDesignData, O as extractSamplesFromDesignData, P as DEFAULT_COLORS, R as DEFAULT_MOBILE_VIEWPORT_QUERY, T as deriveShade, U as useToast, V as useAppExperiment, W as candidateMatchesSearch, _ as useScheduleDrag, a as useReagentSeries, c as useBioTemplatePresetWorkspace, d as getBioTemplateComponentProps, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, j as extractSampleNamesFromDesignData, k as useAutoGroup, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, o as useGroupAssignment, p as useBioTemplateComponents, q as compareSortValues, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, u as useBioTemplateWorkspace, v as useExperimentSamples, w as useSampleGroups, y as useExperimentData, z as useMobileSupportGate } from "./useProtocolTemplates-COIsmhsZ.js";
9
+ import { B as APP_EXPERIMENT_KEY, C as useExpansionSet, D as hslToHex, E as hexToHsl, G as normalizeSearchQuery, H as useTheme, I as useWellPlateEditor, J as useSortedItems, K as useTextSearch, L as useDoseCalculator, M as extractSampleOptionsFromDesignData, N as unwrapExperimentDesignData, O as extractSamplesFromDesignData, P as DEFAULT_COLORS, R as DEFAULT_MOBILE_VIEWPORT_QUERY, T as deriveShade, U as useToast, V as useAppExperiment, W as candidateMatchesSearch, _ as useScheduleDrag, a as useReagentSeries, c as useBioTemplatePresetWorkspace, d as getBioTemplateComponentProps, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, j as extractSampleNamesFromDesignData, k as useAutoGroup, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, o as useGroupAssignment, p as useBioTemplateComponents, q as compareSortValues, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, u as useBioTemplateWorkspace, v as useExperimentSamples, w as useSampleGroups, y as useExperimentData, z as useMobileSupportGate } from "./useProtocolTemplates-CXP2ZosM.js";
10
10
  import { n as colorPalettes, r as useSettingsStore, t as useAuthStore } from "./auth-DZAwEeis.js";
11
11
  import { i as usePlatformContext, n as evaluateCondition, r as useForm, t as useFormBuilder } from "./useFormBuilder-DKekvXRs.js";
12
12
  import { a as SORT_OPTIONS, c as formatExperimentStatus, i as EXPERIMENT_STATUS_VARIANT_MAP, l as getExperimentStatusVariant, n as EXPERIMENT_STATUS_LABELS, o as datePresetToISO, r as EXPERIMENT_STATUS_OPTIONS, s as formatExperimentDate, t as DATE_PRESET_OPTIONS, u as resolveExperimentCode } from "./experiment-utils-Bfa7CwPU.js";
@@ -15,7 +15,7 @@ import { i as useApi, n as useDebouncedWatch, r as useRequestSyncState, t as use
15
15
  import { n as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-mzmSfAUp.js";
16
16
  import { $ as toTimeCourseRows, $t as listBioTemplatePacks, A as createSamplePrepTemplate, At as toCalibrationCurveRows, B as toBioTemplateComponentProps, Bt as validatePlateMapData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunScheduleEvents, D as createTimeCourseTemplate, Dt as toFlowPanelRows, E as createProtocolStepsTemplate, Et as toFlowPanelDataFrame, Ft as validateAssayMatrixData, G as toTemplateDataFrame, Gt as validateSampleSheetData, H as toBioTemplateComponentPropsById, Ht as validateQpcrPlateData, I as listBioTemplateComponentBindings, It as validateCalibrationCurveData, J as toDoseLayoutState, Jt as getBioTemplatePresetInfo, K as toWellMapArray, Kt as validateTimeCourseData, L as toBioTemplateComponentBindings, Lt as validateDoseResponseData, M as createPlateMapTemplate, Mt as toAssayMatrixDataFrame, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixRows, O as createCalibrationCurveTemplate, Ot as toCalibrationCurveColumns, P as getBioTemplateComponentBindings, Pt as toAssayMatrixSampleOptions, Q as toTimeCourseDataFrame, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, Rt as validateFlowCytometryPanelData, S as createInstrumentRunTemplate, St as toInstrumentRunRows, T as createAssayMatrixTemplate, Tt as toFlowPanelColumns, U as toBioTemplateComponentSnippets, Ut as validateReagentListData, Vt as validateProtocolStepsData, W as toBioTemplateComponentUsage, Wt as validateSamplePrepData, X as toWellPlateWells, Xt as searchBioTemplatePresets, Y as toPlateMapEditorState, Yt as listBioTemplatePresets, Z as toTimeCourseColumns, Zt as bioTemplatePacks, _ as createElisaAssayCollection, _t as toProtocolDataFrame, a as getBioTemplateControlDefaults, an as TEMPLATE_COLLECTION_KEY, at as toSamplePrepColumns, b as createQpcrExpressionCollection, bt as toInstrumentRunColumns, c as listBioTemplatePresetControlSchemas, cn as createTemplateEnvelope, ct as toReagentColumns, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, dt as toReagentRows, en as searchBioTemplatePacks, et as toTimeCourseSteps, f as createWellPlateScreenCollection, fn as getTemplateData, ft as toQpcrColumns, g as createFlowCytometryAssayCollection, gt as toProtocolColumns, h as createWesternBlotAssayCollection, ht as toQpcrWellPlateWells, i as createBioTemplateControlToolkit, in as searchBioTemplateCatalog, it as toSampleRows, j as createSampleSheetTemplate, jt as toAssayMatrixColumns, k as createDoseResponseTemplate, kt as toCalibrationCurveDataFrame, l as requireBioTemplateControlSchema, ln as ensureTemplateEnvelope, lt as toReagentDataFrame, m as createDefaultBioTemplate, mt as toQpcrRows, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplateInfo, nt as toSampleDataFrame, o as getBioTemplateControlSchema, on as assertTemplateEnvelope, ot as toSamplePrepDataFrame, p as createBioTemplatePackCollection, pt as toQpcrDataFrame, q as toDoseConditions, qt as bioTemplatePresets, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplateCatalog, rt as toSampleOptions, s as listBioTemplateControlSchemas, sn as createTemplateCollection, st as toSamplePrepRows, t as bioTemplateControlsToFormSchema, tn as bioTemplateCatalog, tt as toSampleColumns, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, ut as toReagentListItems, v as createTargetedMetabolomicsCollection, vt as toProtocolRows, w as createReagentListTemplate, wt as toInstrumentRunSteps, x as createQpcrPlateTemplate, xt as toInstrumentRunDataFrame, y as createLcmsBatchCollection, yt as toProtocolSteps, z as toBioTemplateComponentImports, zt as validateInstrumentRunData } from "./templates-CNbPQNID.js";
17
17
  import { MINTSdk } from "./install.js";
18
- import { A as useCommandHistory, C as parseDelimitedText, D as createPluginResourceClient, E as validateImportFile, F as useAuth, M as useAsync, N as useAsyncBatch, O as useResourceCrud, P as usePasskey, S as detectDelimiter, T as useFileImport, _ as useWellPlateAdapter, a as pluginFormDataFromPayload, b as wellIdToCoordinate, c as usePluginClient, d as resolvePluginBaseUrl, f as runWellPlateValidation, g as createWellPlateWells, h as createRowConditions, i as getPluginPageSelectorItems, j as usePluginConfig, k as useOptimisticMutation, l as usePluginSettings, m as createColumnConditions, n as downloadBlob, o as uploadPluginEndpoint, p as useWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as buildPluginEndpointUrl, v as coordinateToWellId, w as readFileAsText, x as wellIdsInRectangle, y as useWellPainting } from "./composables-BNP5NZte.js";
18
+ import { A as useCommandHistory, C as parseDelimitedText, D as createPluginResourceClient, E as validateImportFile, F as useAuth, M as useAsync, N as useAsyncBatch, O as useResourceCrud, P as usePasskey, S as detectDelimiter, T as useFileImport, _ as useWellPlateAdapter, a as pluginFormDataFromPayload, b as wellIdToCoordinate, c as usePluginClient, d as resolvePluginBaseUrl, f as runWellPlateValidation, g as createWellPlateWells, h as createRowConditions, i as getPluginPageSelectorItems, j as usePluginConfig, k as useOptimisticMutation, l as usePluginSettings, m as createColumnConditions, n as downloadBlob, o as uploadPluginEndpoint, p as useWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as buildPluginEndpointUrl, v as coordinateToWellId, w as readFileAsText, x as wellIdsInRectangle, y as useWellPainting } from "./composables-BLLXhxKE.js";
19
19
  import "./stores/index.js";
20
20
  //#region src/utils/rack.ts
21
21
  var LCMS_DEFAULT_CONTROL_POSITIONS = {
package/dist/install.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as components_exports } from "./components-BT_uVU5B.js";
1
+ import { t as components_exports } from "./components-CzE7YHWY.js";
2
2
  import "./BaseButton-Dgqrze41.js";
3
3
  import "./BaseSelect-ekgr9fDo.js";
4
4
  import "./useControlSchema-BZNdalmL.js";
@@ -1384,7 +1384,9 @@ function composeGroups(input) {
1384
1384
  const col = colByIdx.get(idx);
1385
1385
  return fieldValues[col.displayName ?? col.name];
1386
1386
  }) : [cls.label];
1387
- const groupKey = cls.disposition === "group" && cls.kind !== "unknown" && keyParts.length > 0 ? `${cls.label} / ${keyParts.join(" / ")}` : keyParts.length > 0 ? keyParts.join(" / ") : cls.label;
1387
+ const hasMissingGroupPart = input.missingGroupName && cls.disposition === "group" && keyParts.some((part) => part.trim().length === 0);
1388
+ const useClassPrefix = input.prefixClassLabels !== false && cls.disposition === "group" && cls.kind !== "unknown" && keyParts.length > 0;
1389
+ const groupKey = hasMissingGroupPart ? input.missingGroupName : useClassPrefix ? `${cls.label} / ${keyParts.join(" / ")}` : keyParts.length > 0 ? keyParts.join(" / ") : cls.label;
1388
1390
  const bucket = groupMap.get(groupKey);
1389
1391
  if (bucket) bucket.samples.push(rowName);
1390
1392
  else groupMap.set(groupKey, {
@@ -1774,6 +1776,7 @@ function parseCSV(text) {
1774
1776
  }
1775
1777
  //#endregion
1776
1778
  //#region src/composables/useAutoGroup.ts
1779
+ var STRUCTURED_MISSING_GROUP = "Outlier";
1777
1780
  var deprecationWarned = false;
1778
1781
  var outlierDeprecationWarned = false;
1779
1782
  function warnDeprecated(api) {
@@ -1827,24 +1830,22 @@ function useAutoGroup() {
1827
1830
  }
1828
1831
  const tokens = csv.rows.map((r) => nonSampleCols.map((col) => r[col] ?? ""));
1829
1832
  tokenized.value = tokens;
1830
- const detected = detectClass(tokens, { sampleTypeHints: csv.rows.map((r) => {
1831
- const t = String(r["sample_type"] ?? "").toLowerCase();
1832
- if (t === "qc") return "qc";
1833
- if (t === "blank") return "blank";
1834
- }) });
1835
- classes.value = detected;
1836
- const newSchemas = {};
1837
- for (const cls of detected) {
1838
- const schema = buildClassSchema(cls.members.map((i) => tokens[i]), cls.kind, cls.subKind, cls.classTagPositions);
1839
- schema.columns = schema.columns.map((c, i) => ({
1840
- ...c,
1841
- name: nonSampleCols[i] ?? c.name,
1842
- originalName: nonSampleCols[i]
1843
- }));
1844
- newSchemas[classKey(cls)] = schema;
1845
- }
1846
- schemas.value = newSchemas;
1847
- if (detected.length > 0) activeClassKey.value = classKey(detected[0]);
1833
+ classes.value = [{
1834
+ kind: "unknown",
1835
+ label: "Unknown",
1836
+ members: csv.rows.map((_, i) => i),
1837
+ classTagPositions: [],
1838
+ disposition: "group"
1839
+ }];
1840
+ const schema = buildClassSchema(tokens, "unknown", void 0, []);
1841
+ schema.columns = schema.columns.map((c, i) => ({
1842
+ ...c,
1843
+ name: nonSampleCols[i] ?? c.name,
1844
+ originalName: nonSampleCols[i]
1845
+ }));
1846
+ schema.groupBy = schema.columns.map((c) => c.index);
1847
+ schemas.value = { unknown: schema };
1848
+ activeClassKey.value = "unknown";
1848
1849
  }
1849
1850
  function parseInputFromPaste() {
1850
1851
  const lines = samples.value;
@@ -1884,7 +1885,9 @@ function useAutoGroup() {
1884
1885
  tokenizedSamples: tokenized.value,
1885
1886
  sampleNames: pre ? pre.baseNames : samples.value,
1886
1887
  schemas: schemas.value,
1887
- classes: classes.value
1888
+ classes: classes.value,
1889
+ prefixClassLabels: !(csvData.value && (inputMode.value === "csv" || inputMode.value === "experiment")),
1890
+ missingGroupName: csvData.value && (inputMode.value === "csv" || inputMode.value === "experiment") ? STRUCTURED_MISSING_GROUP : void 0
1888
1891
  });
1889
1892
  if (!pre) return composed;
1890
1893
  return {
@@ -2066,8 +2069,8 @@ function useAutoGroup() {
2066
2069
  warnDeprecated("renameField");
2067
2070
  if (activeClassKey.value) setColumnName(activeClassKey.value, index, name);
2068
2071
  }
2069
- function loadExperimentData(rawData) {
2070
- const parsed = extractSamplesFromDesignData(rawData);
2072
+ function loadExperimentData(rawData, options = {}) {
2073
+ const parsed = extractSamplesFromDesignData(rawData, options);
2071
2074
  if (!parsed) return false;
2072
2075
  inputMode.value = "experiment";
2073
2076
  csvData.value = parsed;
@@ -2135,7 +2138,7 @@ function useAutoGroup() {
2135
2138
  renameField
2136
2139
  };
2137
2140
  }
2138
- function extractSamplesFromDesignData(rawData) {
2141
+ function extractSamplesFromDesignData(rawData, options = {}) {
2139
2142
  const designData = unwrapExperimentDesignData(rawData);
2140
2143
  if (!designData) return null;
2141
2144
  const samples = designData.samples;
@@ -2155,7 +2158,7 @@ function extractSamplesFromDesignData(rawData) {
2155
2158
  }
2156
2159
  }
2157
2160
  if (allConditionKeys.length === 0) return null;
2158
- return {
2161
+ return constrainParsedSamplesToInput({
2159
2162
  columns: [
2160
2163
  "sample_name",
2161
2164
  ...allConditionKeys,
@@ -2173,6 +2176,41 @@ function extractSamplesFromDesignData(rawData) {
2173
2176
  sampleColumn: "sample_name",
2174
2177
  delimiter: ",",
2175
2178
  sampleTypeHints
2179
+ }, options.samples);
2180
+ }
2181
+ function constrainParsedSamplesToInput(parsed, samples) {
2182
+ const requested = samples?.map((sample) => sample.trim()).filter((sample) => sample.length > 0);
2183
+ if (!requested || requested.length === 0) return parsed;
2184
+ const rowBySample = /* @__PURE__ */ new Map();
2185
+ parsed.rows.forEach((row, index) => {
2186
+ const sample = row[parsed.sampleColumn];
2187
+ if (sample && !rowBySample.has(sample)) rowBySample.set(sample, {
2188
+ row,
2189
+ hint: parsed.sampleTypeHints[index]
2190
+ });
2191
+ });
2192
+ const metadataColumns = parsed.columns.filter((column) => column !== parsed.sampleColumn && column !== "sample_type");
2193
+ const rows = [];
2194
+ const sampleTypeHints = [];
2195
+ for (const sample of requested) {
2196
+ const match = rowBySample.get(sample);
2197
+ if (match) {
2198
+ rows.push(match.row);
2199
+ sampleTypeHints.push(match.hint);
2200
+ continue;
2201
+ }
2202
+ const outlierRow = {
2203
+ [parsed.sampleColumn]: sample,
2204
+ sample_type: "sample"
2205
+ };
2206
+ for (const column of metadataColumns) outlierRow[column] = "";
2207
+ rows.push(outlierRow);
2208
+ sampleTypeHints.push(void 0);
2209
+ }
2210
+ return {
2211
+ ...parsed,
2212
+ rows,
2213
+ sampleTypeHints
2176
2214
  };
2177
2215
  }
2178
2216
  //#endregion
@@ -4184,4 +4222,4 @@ function useProtocolTemplates() {
4184
4222
  //#endregion
4185
4223
  export { parseCSV as A, APP_EXPERIMENT_KEY as B, useExpansionSet as C, hslToHex as D, hexToHsl as E, classKey as F, normalizeSearchQuery as G, useTheme as H, useWellPlateEditor as I, useSortedItems as J, useTextSearch as K, useDoseCalculator as L, extractSampleOptionsFromDesignData as M, unwrapExperimentDesignData as N, extractSamplesFromDesignData as O, DEFAULT_COLORS as P, DEFAULT_MOBILE_VIEWPORT_QUERY as R, resolveCurrentExperimentId as S, deriveShade as T, useToast as U, useAppExperiment as V, candidateMatchesSearch as W, useScheduleDrag as _, useReagentSeries as a, currentExperimentFromContext as b, useBioTemplatePresetWorkspace as c, getBioTemplateComponentProps as d, toBioTemplateComponentPropsByComponent as f, useExperimentSave as g, useTemplateCollection as h, generateDilutionSeries as i, extractSampleNamesFromDesignData as j, useAutoGroup as k, useBioTemplatePackWorkspace as l, useBioTemplateControls as m, DEFAULT_PRESETS as n, useGroupAssignment as o, useBioTemplateComponents as p, compareSortValues as q, DEFAULT_UNITS as r, useRackEditor as s, useProtocolTemplates as t, useBioTemplateWorkspace as u, useExperimentSamples as v, useSampleGroups as w, getInjectedPlatformContext as x, useExperimentData as y, useMobileSupportGate as z };
4186
4224
 
4187
- //# sourceMappingURL=useProtocolTemplates-COIsmhsZ.js.map
4225
+ //# sourceMappingURL=useProtocolTemplates-CXP2ZosM.js.map