@morscherlab/mint-sdk 1.0.56 → 1.0.58
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/__tests__/components/ArtifactSaveDialog.test.d.ts +1 -0
- package/dist/__tests__/components/ArtifactSelectorModal.test.d.ts +1 -0
- package/dist/__tests__/composables/useAnalysisArtifacts.test.d.ts +1 -0
- package/dist/analysisArtifactTypes-Cu40dzSG.js +7 -0
- package/dist/analysisArtifactTypes-Cu40dzSG.js.map +1 -0
- package/dist/components/ArtifactSaveDialog.vue.d.ts +59 -0
- package/dist/components/ArtifactSelectorModal.vue.d.ts +41 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +2 -2
- package/dist/{components-BQwOeyiy.js → components-CpnOaPbP.js} +1774 -1144
- package/dist/components-CpnOaPbP.js.map +1 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/index.js +4 -3
- package/dist/composables/useAnalysisArtifacts.d.ts +59 -0
- package/dist/{composables-TpXyhRZZ.js → composables-OYTD0Y3r.js} +2 -2
- package/dist/{composables-TpXyhRZZ.js.map → composables-OYTD0Y3r.js.map} +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/install.js +1 -1
- package/dist/styles.css +412 -0
- package/dist/types/analysisArtifactTypes.d.ts +133 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/{useJobsStatusTray-CVecN6Ao.js → useAnalysisArtifacts-Ob8UtVwl.js} +157 -2
- package/dist/useAnalysisArtifacts-Ob8UtVwl.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +566 -0
- package/src/__tests__/components/ArtifactSelectorModal.test.ts +178 -0
- package/src/__tests__/composables/useAnalysisArtifacts.test.ts +667 -0
- package/src/components/ArtifactSaveDialog.story.vue +319 -0
- package/src/components/ArtifactSaveDialog.vue +434 -0
- package/src/components/ArtifactSelectorModal.story.vue +295 -0
- package/src/components/ArtifactSelectorModal.vue +326 -0
- package/src/components/index.ts +2 -0
- package/src/composables/index.ts +6 -0
- package/src/composables/useAnalysisArtifacts.ts +305 -0
- package/src/styles/components/artifact-save-dialog.css +17 -0
- package/src/styles/components/artifact-selector-modal.css +216 -0
- package/src/styles/index.css +2 -0
- package/src/types/analysisArtifactTypes.ts +167 -0
- package/src/types/index.ts +24 -0
- package/dist/components-BQwOeyiy.js.map +0 -1
- package/dist/useJobsStatusTray-CVecN6Ao.js.map +0 -1
- /package/dist/{ExperimentPopover-8A4Rhffp.js → ExperimentPopover-Ryusjrhv.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as AutoGroupModal_default, A as ScientificNumber_default, At as ColorSlider_default, B as BioTemplateRenderer_default, C as estimateSequenceFinishDate, Ct as AppToastContainer_default, D as sequenceProgressPercent, Dt as DropdownButton_default, E as formatSequenceRemaining, Et as Calendar_default, F as GroupAssigner_default, G as StatusIndicator_default, H as Breadcrumb_default, I as RackEditor_default, J as DoseDesignWorkspaceView_default, K as Divider_default, L as BioTemplatePresetWorkspaceView_default, M as SampleHierarchyTree_default, N as ReagentEditor_default, O as sequenceSamplesRemaining, Ot as SegmentedControl_default, P as SmartGroupModal_default, Q as SampleSelector_default, R as BioTemplatePackWorkspaceView_default, S as SequenceProgressBar_default, St as IconButton_default, T as formatSequenceEta, Tt as DataFrame_default, U as Avatar_default, V as ChartContainer_default, W as ProgressBar_default, X as ComponentBindingRenderer_default, Y as ControlWorkspaceView_default, Z as ScheduleCalendar_default, _ as lcmsWellIdFromPosition, _t as AppPluginSwitcher_default, a as ResourceCard_default, at as SampleLegend_default, b as InstrumentStateBadge_default, bt as CollapsibleCard_default, c as JobsStatusTray_default, ct as DoseCalculator_default, d as LcmsSequenceTable_default, dt as AppLayout_default, et as SmartGroupManual_default, f as DEFAULT_LCMS_SEQUENCE_COLUMNS, ft as AppSidebar_default, g as inferLcmsPlateTypeFromWellIds, gt as AppTopBar_default, h as extractLcmsSampleName, ht as StepWizard_default, i as ArtifactSelectorModal_default, it as PlateMapEditor_default, j as ProtocolStepEditor_default, k as ChemicalFormula_default, kt as BaseTabs_default, l as BatchProgressList_default, lt as PluginWorkspaceView_default, m as extractLcmsCommonPrefix, mt as FormActions_default, n as FitPanel_default, nt as LoadingSpinner_default, o as TimeRangeInput_default, ot as WellPlate_default, p as basenameFromWindowsPath, pt as FormBuilder_default, q as AppContainer_default, r as ArtifactSaveDialog_default, rt as ReagentList_default, s as ExperimentDataViewer_default, st as ExperimentTimeline_default, tt as SmartGroupFieldRecipe_default, u as AuditTrail_default, ut as MobileSupportGate_default, v as reconstructLcmsPlateCellsFromSequenceItems, vt as AppAvatarMenu_default, w as estimateSequenceRemainingSeconds, wt as AlertBox_default, x as InstrumentAlertLog_default, xt as ThemeToggle_default, y as InstrumentStatusCard_default, yt as PluginIcon_default, z as BioTemplateExperimentWorkspaceView_default } from "./components-CpnOaPbP.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-DZeSd-yr.js";
|
|
9
|
-
import { $ as
|
|
9
|
+
import { $ as useAppExperiment, B as validateImportFile, C as useTemplateCollection, D as useExperimentData, E as useExperimentSamples, F as hslToHex, G as extractSampleOptionsFromDesignData, H as useAutoGroup, I as detectDelimiter, J as useWellPlateEditor, K as unwrapExperimentDesignData, L as parseDelimitedText, M as useSampleGroups, N as deriveShade, P as hexToHsl, Q as APP_EXPERIMENT_KEY, R as readFileAsText, S as useBioTemplateControls, T as useScheduleDrag, V as extractSamplesFromDesignData, W as extractSampleNamesFromDesignData, X as DEFAULT_MOBILE_VIEWPORT_QUERY, Y as useDoseCalculator, Z as useMobileSupportGate, _ as useBioTemplatePackWorkspace, a as jobStatusLabel, at as compareSortValues, b as toBioTemplateComponentPropsByComponent, c as resolveJobCapabilities, d as DEFAULT_UNITS, et as useTheme, f as generateDilutionSeries, g as useBioTemplatePresetWorkspace, h as useRackEditor, i as isTerminalJobStatus, it as useTextSearch, j as useExpansionSet, l as useProtocolTemplates, m as useGroupAssignment, n as useJobsStatusTray, nt as candidateMatchesSearch, o as normalizeJobPercent, ot as useSortedItems, p as useReagentSeries, q as DEFAULT_COLORS, r as isActiveJobStatus, rt as normalizeSearchQuery, s as normalizeJobState, t as useAnalysisArtifacts, tt as useToast, u as DEFAULT_PRESETS, v as useBioTemplateWorkspace, w as useExperimentSave, x as useBioTemplateComponents, y as getBioTemplateComponentProps, z as useFileImport } from "./useAnalysisArtifacts-Ob8UtVwl.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";
|
|
@@ -14,8 +14,9 @@ import { ADMIN_PANEL_PERMISSIONS, ADMIN_ROLE, canAccessAdmin, canAccessByPolicy,
|
|
|
14
14
|
import { i as AuthenticationRequiredError, n as useDebouncedWatch, o as useApi, r as useRequestSyncState, t as useExperimentSelector } from "./useExperimentSelector-DRbj6vse.js";
|
|
15
15
|
import { n as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-BbPkIFsI.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
|
+
import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-Cu40dzSG.js";
|
|
17
18
|
import { MINTSdk } from "./install.js";
|
|
18
|
-
import { A as resolvePluginFrontendBase, C as createPluginResourceClient, D as usePluginConfig, E as useCommandHistory, M as useAuth, O as useAsync, S as wellIdsInRectangle, T as useOptimisticMutation, _ as createWellPlateWells, a as pluginFormDataFromPayload, b as useWellPainting, c as usePluginClient, d as buildPluginEndpointUrl, f as resolvePluginBaseUrl, g as createRowConditions, h as createColumnConditions, i as getPluginPageSelectorItems, j as usePasskey, k as useAsyncBatch, l as usePluginEventStream, m as useWellPlateValidation, n as downloadBlob, o as uploadPluginEndpoint, p as runWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as usePluginSettings, v as useWellPlateAdapter, w as useResourceCrud, x as wellIdToCoordinate, y as coordinateToWellId } from "./composables-
|
|
19
|
+
import { A as resolvePluginFrontendBase, C as createPluginResourceClient, D as usePluginConfig, E as useCommandHistory, M as useAuth, O as useAsync, S as wellIdsInRectangle, T as useOptimisticMutation, _ as createWellPlateWells, a as pluginFormDataFromPayload, b as useWellPainting, c as usePluginClient, d as buildPluginEndpointUrl, f as resolvePluginBaseUrl, g as createRowConditions, h as createColumnConditions, i as getPluginPageSelectorItems, j as usePasskey, k as useAsyncBatch, l as usePluginEventStream, m as useWellPlateValidation, n as downloadBlob, o as uploadPluginEndpoint, p as runWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as usePluginSettings, v as useWellPlateAdapter, w as useResourceCrud, x as wellIdToCoordinate, y as coordinateToWellId } from "./composables-OYTD0Y3r.js";
|
|
19
20
|
import "./stores/index.js";
|
|
20
21
|
//#region src/utils/rack.ts
|
|
21
22
|
var LCMS_DEFAULT_CONTROL_POSITIONS = {
|
|
@@ -177,6 +178,6 @@ function comparePlateCells(a, b) {
|
|
|
177
178
|
return rowDiff === 0 ? a.column - b.column : rowDiff;
|
|
178
179
|
}
|
|
179
180
|
//#endregion
|
|
180
|
-
export { ADMIN_PANEL_PERMISSIONS, ADMIN_ROLE, APP_EXPERIMENT_KEY, ATOMIC_WEIGHTS, AlertBox_default as AlertBox, AppAvatarMenu_default as AppAvatarMenu, AppContainer_default as AppContainer, AppLayout_default as AppLayout, AppPluginSwitcher_default as AppPluginSwitcher, AppSidebar_default as AppSidebar, AppToastContainer_default as AppToastContainer, AppTopBar_default as AppTopBar, AuditTrail_default as AuditTrail, AuthenticationRequiredError, AutoGroupModal_default as AutoGroupModal, Avatar_default as Avatar, BaseButton_default as BaseButton, BaseCheckbox_default as BaseCheckbox, BaseInput_default as BaseInput, BaseModal_default as BaseModal, BasePill_default as BasePill, BaseRadioGroup_default as BaseRadioGroup, BaseSelect_default as BaseSelect, BaseSlider_default as BaseSlider, BaseTabs_default as BaseTabs, BaseTextarea_default as BaseTextarea, BaseToggle_default as BaseToggle, BatchProgressList_default as BatchProgressList, BioTemplateExperimentWorkspaceView_default as BioTemplateExperimentWorkspaceView, BioTemplatePackWorkspaceView_default as BioTemplatePackWorkspaceView, BioTemplatePresetWorkspaceView_default as BioTemplatePresetWorkspaceView, BioTemplateRenderer_default as BioTemplateRenderer, Breadcrumb_default as Breadcrumb, Calendar_default as Calendar, ChartContainer_default as ChartContainer, ChemicalFormula_default as ChemicalFormula, CollapsibleCard_default as CollapsibleCard, ColorSlider_default as ColorSlider, ComponentBindingRenderer_default as ComponentBindingRenderer, ConcentrationInput_default as ConcentrationInput, ConfirmDialog_default as ConfirmDialog, ControlWorkspaceView_default as ControlWorkspaceView, DATE_PRESET_OPTIONS, DEFAULT_COLORS, DEFAULT_LCMS_SEQUENCE_COLUMNS, DEFAULT_MOBILE_VIEWPORT_QUERY, DEFAULT_PRESETS, DEFAULT_UNITS, DataFrame_default as DataFrame, DatePicker_default as DatePicker, DateTimePicker_default as DateTimePicker, Divider_default as Divider, DoseCalculator_default as DoseCalculator, DoseDesignWorkspaceView_default as DoseDesignWorkspaceView, DropdownButton_default as DropdownButton, EXPERIMENT_STATUS_LABELS, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, EmptyState_default as EmptyState, ExperimentCodeBadge_default as ExperimentCodeBadge, ExperimentDataViewer_default as ExperimentDataViewer, ExperimentPopover_default as ExperimentPopover, ExperimentSelectorModal_default as ExperimentSelectorModal, ExperimentTimeline_default as ExperimentTimeline, FileUploader_default as FileUploader, FitPanel_default as FitPanel, FormActions_default as FormActions, FormBuilder_default as FormBuilder, FormField_default as FormField, FormulaInput_default as FormulaInput, GroupAssigner_default as GroupAssigner, IconButton_default as IconButton, InstrumentAlertLog_default as InstrumentAlertLog, InstrumentStateBadge_default as InstrumentStateBadge, InstrumentStatusCard_default as InstrumentStatusCard, JobsStatusTray_default as JobsStatusTray, LCMS_DEFAULT_CONTROL_POSITIONS, LcmsSequenceTable_default as LcmsSequenceTable, LoadingSpinner_default as LoadingSpinner, MINTSdk, MINTSdk as default, MobileSupportGate_default as MobileSupportGate, MoleculeInput_default as MoleculeInput, MultiSelect_default as MultiSelect, NumberInput_default as NumberInput, PlateMapEditor_default as PlateMapEditor, PluginIcon_default as PluginIcon, PluginWorkspaceView_default as PluginWorkspaceView, ProgressBar_default as ProgressBar, ProtocolStepEditor_default as ProtocolStepEditor, RackEditor_default as RackEditor, ReagentEditor_default as ReagentEditor, ReagentList_default as ReagentList, ResourceCard_default as ResourceCard, SORT_OPTIONS, SampleHierarchyTree_default as SampleHierarchyTree, SampleLegend_default as SampleLegend, SampleSelector_default as SampleSelector, ScheduleCalendar_default as ScheduleCalendar, ScientificNumber_default as ScientificNumber, SegmentedControl_default as SegmentedControl, SequenceInput_default as SequenceInput, SequenceProgressBar_default as SequenceProgressBar, SettingsModal_default as SettingsModal, Skeleton_default as Skeleton, SmartGroupFieldRecipe_default as SmartGroupFieldRecipe, SmartGroupManual_default as SmartGroupManual, SmartGroupModal_default as SmartGroupModal, StatusIndicator_default as StatusIndicator, StepWizard_default as StepWizard, TEMPLATE_COLLECTION_KEY, TagsInput_default as TagsInput, ThemeToggle_default as ThemeToggle, TimePicker_default as TimePicker, TimeRangeInput_default as TimeRangeInput, Tooltip_default as Tooltip, UnitInput_default as UnitInput, WellPlate_default as WellPlate, addMinutes, assertTemplateEnvelope, basenameFromWindowsPath, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, buildPluginEndpointUrl, canAccessAdmin, canAccessByPolicy, canAccessPlugin, candidateMatchesSearch, colorPalettes, compareSortValues, compareTime, controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, coordinateToWellId, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createColumnConditions, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createLcmsControlWellEditData, createPlateMapTemplate, createPluginClient, createPluginResourceClient, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createRowConditions, createSamplePrepTemplate, createSampleSheetTemplate, createTargetedMetabolomicsCollection, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWellPlateWells, createWesternBlotAssayCollection, datePresetToISO, defineControlComponentBindings, defineControlModel, defineControls, defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, deriveShade, detectDelimiter, downloadBlob, downloadPluginEndpoint, durationMinutes, ensureTemplateEnvelope, ensureTemplateFromCollection, estimateSequenceFinishDate, estimateSequenceRemainingSeconds, evaluateCondition, extractLcmsCommonPrefix, extractLcmsSampleName, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, extractSamplesFromDesignData, extractTemplateCollection, findAvailableSlots, findNearestTimeSlotIndex, formatDuration, formatExperimentDate, formatExperimentStatus, formatSequenceEta, formatSequenceRemaining, formatTime, formatTimeSlot, fromMinutes, generateDilutionSeries, generateTimeSlots, getAccessAudience, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getControlDefaults, getDefaultControlView, getExperimentStatusVariant, getFieldRegistryEntry, getLcmsDefaultControlWellId, getPluginPageSelectorItems, getRoleInfo, getTemplateData, getTypeDefault, getUserPermissions, hasAllPermissions, hasAnyPermission, hexToHsl, hslToHex, inferLcmsPlateTypeFromWellIds, isActiveJobStatus, isAdminRole, isAdminUser, isTerminalJobStatus, isTimeInRange, jobStatusLabel, lcmsPlateCellsToRack, lcmsPlateCellsToRacks, lcmsPlateTypeToRackFormat, lcmsWellId, lcmsWellIdFromPosition, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, normalizeAccessPolicy, normalizeJobPercent, normalizeJobState, normalizeSearchQuery, parseDelimitedText, parseLcmsWellId, parseTime, pluginFormDataFromPayload, rackFormatToLcmsPlateType, rackToLcmsPlateCells, racksToLcmsPlateCells, rangesOverlap, readFileAsText, reconstructLcmsPlateCellsFromSequenceItems, requireBioTemplateControlSchema, resolveExperimentCode, resolveJobCapabilities, resolvePluginBaseUrl, resolvePluginFrontendBase, runWellPlateValidation, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, sequenceProgressPercent, sequenceSamplesRemaining, snapToSlot, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toAssayMatrixSampleOptions, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toInstrumentRunScheduleEvents, toInstrumentRunSteps, toMinutes, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, unwrapExperimentDesignData, uploadPluginEndpoint, useApi, useAppExperiment, useAsync, useAsyncBatch, useAuth, useAuthStore, useAutoGroup, useBioTemplateComponents, useBioTemplateControls, useBioTemplatePackWorkspace, useBioTemplatePresetWorkspace, useBioTemplateWorkspace, useChemicalFormula, useCommandHistory, useConcentrationUnits, useControlSchema, useControlWorkspace, useCurrentExperiment, useDebouncedWatch, useDoseCalculator, useEventListener, useExpansionSet, useExperimentData, useExperimentSamples, useExperimentSave, useExperimentSelector, useFileImport, useForm, useFormBuilder, useGroupAssignment, useJobsStatusTray, useListSelection, useMobileSupportGate, useOptimisticMutation, usePasskey, usePlatformContext, usePluginClient, usePluginConfig, usePluginEventStream, usePluginSettings, useProtocolTemplates, useRackEditor, useReagentSeries, useRequestSyncState, useResourceCrud, useSampleGroups, useScheduleDrag, useSelectionLimit, useSequenceUtils, useSettingsStore, useSortedItems, useTemplateCollection, useTextSearch, useTheme, useTimeUtils, useToast, useWellPainting, useWellPlateAdapter, useWellPlateEditor, useWellPlateValidation, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateImportFile, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData, wellIdToCoordinate, wellIdsInRectangle };
|
|
181
|
+
export { ADMIN_PANEL_PERMISSIONS, ADMIN_ROLE, ANALYSIS_FILE_ARTIFACT_SCHEMA, APP_EXPERIMENT_KEY, ATOMIC_WEIGHTS, AlertBox_default as AlertBox, AppAvatarMenu_default as AppAvatarMenu, AppContainer_default as AppContainer, AppLayout_default as AppLayout, AppPluginSwitcher_default as AppPluginSwitcher, AppSidebar_default as AppSidebar, AppToastContainer_default as AppToastContainer, AppTopBar_default as AppTopBar, ArtifactSaveDialog_default as ArtifactSaveDialog, ArtifactSelectorModal_default as ArtifactSelectorModal, AuditTrail_default as AuditTrail, AuthenticationRequiredError, AutoGroupModal_default as AutoGroupModal, Avatar_default as Avatar, BaseButton_default as BaseButton, BaseCheckbox_default as BaseCheckbox, BaseInput_default as BaseInput, BaseModal_default as BaseModal, BasePill_default as BasePill, BaseRadioGroup_default as BaseRadioGroup, BaseSelect_default as BaseSelect, BaseSlider_default as BaseSlider, BaseTabs_default as BaseTabs, BaseTextarea_default as BaseTextarea, BaseToggle_default as BaseToggle, BatchProgressList_default as BatchProgressList, BioTemplateExperimentWorkspaceView_default as BioTemplateExperimentWorkspaceView, BioTemplatePackWorkspaceView_default as BioTemplatePackWorkspaceView, BioTemplatePresetWorkspaceView_default as BioTemplatePresetWorkspaceView, BioTemplateRenderer_default as BioTemplateRenderer, Breadcrumb_default as Breadcrumb, Calendar_default as Calendar, ChartContainer_default as ChartContainer, ChemicalFormula_default as ChemicalFormula, CollapsibleCard_default as CollapsibleCard, ColorSlider_default as ColorSlider, ComponentBindingRenderer_default as ComponentBindingRenderer, ConcentrationInput_default as ConcentrationInput, ConfirmDialog_default as ConfirmDialog, ControlWorkspaceView_default as ControlWorkspaceView, DATE_PRESET_OPTIONS, DEFAULT_COLORS, DEFAULT_LCMS_SEQUENCE_COLUMNS, DEFAULT_MOBILE_VIEWPORT_QUERY, DEFAULT_PRESETS, DEFAULT_UNITS, DataFrame_default as DataFrame, DatePicker_default as DatePicker, DateTimePicker_default as DateTimePicker, Divider_default as Divider, DoseCalculator_default as DoseCalculator, DoseDesignWorkspaceView_default as DoseDesignWorkspaceView, DropdownButton_default as DropdownButton, EXPERIMENT_STATUS_LABELS, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, EmptyState_default as EmptyState, ExperimentCodeBadge_default as ExperimentCodeBadge, ExperimentDataViewer_default as ExperimentDataViewer, ExperimentPopover_default as ExperimentPopover, ExperimentSelectorModal_default as ExperimentSelectorModal, ExperimentTimeline_default as ExperimentTimeline, FileUploader_default as FileUploader, FitPanel_default as FitPanel, FormActions_default as FormActions, FormBuilder_default as FormBuilder, FormField_default as FormField, FormulaInput_default as FormulaInput, GroupAssigner_default as GroupAssigner, IconButton_default as IconButton, InstrumentAlertLog_default as InstrumentAlertLog, InstrumentStateBadge_default as InstrumentStateBadge, InstrumentStatusCard_default as InstrumentStatusCard, JobsStatusTray_default as JobsStatusTray, LCMS_DEFAULT_CONTROL_POSITIONS, LcmsSequenceTable_default as LcmsSequenceTable, LoadingSpinner_default as LoadingSpinner, MINTSdk, MINTSdk as default, MobileSupportGate_default as MobileSupportGate, MoleculeInput_default as MoleculeInput, MultiSelect_default as MultiSelect, NumberInput_default as NumberInput, PlateMapEditor_default as PlateMapEditor, PluginIcon_default as PluginIcon, PluginWorkspaceView_default as PluginWorkspaceView, ProgressBar_default as ProgressBar, ProtocolStepEditor_default as ProtocolStepEditor, RackEditor_default as RackEditor, ReagentEditor_default as ReagentEditor, ReagentList_default as ReagentList, ResourceCard_default as ResourceCard, SORT_OPTIONS, SampleHierarchyTree_default as SampleHierarchyTree, SampleLegend_default as SampleLegend, SampleSelector_default as SampleSelector, ScheduleCalendar_default as ScheduleCalendar, ScientificNumber_default as ScientificNumber, SegmentedControl_default as SegmentedControl, SequenceInput_default as SequenceInput, SequenceProgressBar_default as SequenceProgressBar, SettingsModal_default as SettingsModal, Skeleton_default as Skeleton, SmartGroupFieldRecipe_default as SmartGroupFieldRecipe, SmartGroupManual_default as SmartGroupManual, SmartGroupModal_default as SmartGroupModal, StatusIndicator_default as StatusIndicator, StepWizard_default as StepWizard, TEMPLATE_COLLECTION_KEY, TagsInput_default as TagsInput, ThemeToggle_default as ThemeToggle, TimePicker_default as TimePicker, TimeRangeInput_default as TimeRangeInput, Tooltip_default as Tooltip, UnitInput_default as UnitInput, WellPlate_default as WellPlate, addMinutes, assertTemplateEnvelope, basenameFromWindowsPath, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, buildPluginEndpointUrl, canAccessAdmin, canAccessByPolicy, canAccessPlugin, candidateMatchesSearch, colorPalettes, compareSortValues, compareTime, controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, coordinateToWellId, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createColumnConditions, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createLcmsControlWellEditData, createPlateMapTemplate, createPluginClient, createPluginResourceClient, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createRowConditions, createSamplePrepTemplate, createSampleSheetTemplate, createTargetedMetabolomicsCollection, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWellPlateWells, createWesternBlotAssayCollection, datePresetToISO, defineControlComponentBindings, defineControlModel, defineControls, defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, deriveShade, detectDelimiter, downloadBlob, downloadPluginEndpoint, durationMinutes, ensureTemplateEnvelope, ensureTemplateFromCollection, estimateSequenceFinishDate, estimateSequenceRemainingSeconds, evaluateCondition, extractLcmsCommonPrefix, extractLcmsSampleName, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, extractSamplesFromDesignData, extractTemplateCollection, findAvailableSlots, findNearestTimeSlotIndex, formatDuration, formatExperimentDate, formatExperimentStatus, formatSequenceEta, formatSequenceRemaining, formatTime, formatTimeSlot, fromMinutes, generateDilutionSeries, generateTimeSlots, getAccessAudience, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getControlDefaults, getDefaultControlView, getExperimentStatusVariant, getFieldRegistryEntry, getLcmsDefaultControlWellId, getPluginPageSelectorItems, getRoleInfo, getTemplateData, getTypeDefault, getUserPermissions, hasAllPermissions, hasAnyPermission, hexToHsl, hslToHex, inferLcmsPlateTypeFromWellIds, isActiveJobStatus, isAdminRole, isAdminUser, isTerminalJobStatus, isTimeInRange, jobStatusLabel, lcmsPlateCellsToRack, lcmsPlateCellsToRacks, lcmsPlateTypeToRackFormat, lcmsWellId, lcmsWellIdFromPosition, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, normalizeAccessPolicy, normalizeJobPercent, normalizeJobState, normalizeSearchQuery, parseDelimitedText, parseLcmsWellId, parseTime, pluginFormDataFromPayload, rackFormatToLcmsPlateType, rackToLcmsPlateCells, racksToLcmsPlateCells, rangesOverlap, readFileAsText, reconstructLcmsPlateCellsFromSequenceItems, requireBioTemplateControlSchema, resolveExperimentCode, resolveJobCapabilities, resolvePluginBaseUrl, resolvePluginFrontendBase, runWellPlateValidation, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, sequenceProgressPercent, sequenceSamplesRemaining, snapToSlot, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toAssayMatrixSampleOptions, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toInstrumentRunScheduleEvents, toInstrumentRunSteps, toMinutes, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, unwrapExperimentDesignData, uploadPluginEndpoint, useAnalysisArtifacts, useApi, useAppExperiment, useAsync, useAsyncBatch, useAuth, useAuthStore, useAutoGroup, useBioTemplateComponents, useBioTemplateControls, useBioTemplatePackWorkspace, useBioTemplatePresetWorkspace, useBioTemplateWorkspace, useChemicalFormula, useCommandHistory, useConcentrationUnits, useControlSchema, useControlWorkspace, useCurrentExperiment, useDebouncedWatch, useDoseCalculator, useEventListener, useExpansionSet, useExperimentData, useExperimentSamples, useExperimentSave, useExperimentSelector, useFileImport, useForm, useFormBuilder, useGroupAssignment, useJobsStatusTray, useListSelection, useMobileSupportGate, useOptimisticMutation, usePasskey, usePlatformContext, usePluginClient, usePluginConfig, usePluginEventStream, usePluginSettings, useProtocolTemplates, useRackEditor, useReagentSeries, useRequestSyncState, useResourceCrud, useSampleGroups, useScheduleDrag, useSelectionLimit, useSequenceUtils, useSettingsStore, useSortedItems, useTemplateCollection, useTextSearch, useTheme, useTimeUtils, useToast, useWellPainting, useWellPlateAdapter, useWellPlateEditor, useWellPlateValidation, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateImportFile, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData, wellIdToCoordinate, wellIdsInRectangle };
|
|
181
182
|
|
|
182
183
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/utils/rack.ts"],"sourcesContent":["import type { Rack, SlotPosition, Well, WellEditData, WellPlateFormat } from '../types'\n\nexport type LcmsPlateType = '96well' | '54vial'\nexport type LcmsControlSampleType = 'blank' | 'qc' | 'iqc'\n\nexport interface LcmsPlateCell {\n row: string\n column: number\n sample_name: string\n sample_type?: string | null\n injection_volume?: number | null\n injection_count?: number | null\n custom_method?: string | null\n slot?: SlotPosition | null\n}\n\nexport interface LcmsPlateCellsToRackOptions {\n rackId?: string\n rackName?: string\n format?: WellPlateFormat\n plateType?: LcmsPlateType\n slot?: SlotPosition\n injectionVolume?: number\n}\n\nexport interface LcmsPlateCellsToRacksOptions extends Omit<LcmsPlateCellsToRackOptions, 'rackId' | 'rackName' | 'slot'> {\n defaultSlot?: SlotPosition\n rackId?: (slot: SlotPosition, index: number) => string\n rackName?: (slot: SlotPosition, index: number) => string\n}\n\nexport const LCMS_DEFAULT_CONTROL_POSITIONS: Record<LcmsPlateType, Record<LcmsControlSampleType, { row: string; column: number }>> = {\n '96well': {\n blank: { row: 'H', column: 12 },\n qc: { row: 'H', column: 11 },\n iqc: { row: 'H', column: 10 },\n },\n '54vial': {\n blank: { row: 'F', column: 9 },\n qc: { row: 'F', column: 8 },\n iqc: { row: 'F', column: 7 },\n },\n}\n\nconst SLOT_ORDER: SlotPosition[] = ['R', 'G', 'B', 'Y']\n\nexport function lcmsPlateTypeToRackFormat(plateType: LcmsPlateType): WellPlateFormat {\n return plateType === '96well' ? 96 : 54\n}\n\nexport function rackFormatToLcmsPlateType(format: WellPlateFormat): LcmsPlateType {\n if (format === 96) return '96well'\n if (format === 54) return '54vial'\n throw new Error(`LCMS plate cells support only 54-vial racks and 96-well plates; received format ${format}.`)\n}\n\nexport function lcmsWellId(row: string, column: number): string {\n return `${row.toUpperCase()}${column}`\n}\n\nexport function parseLcmsWellId(wellId: string): { row: string; column: number } {\n const match = /^([A-Za-z]+)(\\d+)$/.exec(wellId.trim())\n if (!match) {\n throw new Error(`Invalid well id \"${wellId}\". Expected a row letter followed by a column number, e.g. A1.`)\n }\n\n return {\n row: match[1].toUpperCase(),\n column: Number(match[2]),\n }\n}\n\nexport function lcmsPlateCellsToRack(cells: LcmsPlateCell[], options: LcmsPlateCellsToRackOptions = {}): Rack {\n const format = options.format ?? (options.plateType ? lcmsPlateTypeToRackFormat(options.plateType) : inferRackFormat(cells))\n const slot = options.slot ?? cells.find(cell => cell.slot)?.slot ?? 'R'\n const injectionVolume = options.injectionVolume ?? inferInjectionVolume(cells) ?? 5\n\n return {\n id: options.rackId ?? `rack-${slot}`,\n name: options.rackName ?? `Rack ${slot}`,\n format,\n slot,\n injectionVolume,\n wells: Object.fromEntries(\n cells\n .filter(cell => cell.sample_name.trim())\n .map((cell) => {\n const wellId = lcmsWellId(cell.row, cell.column)\n const well: Partial<Well> = {\n id: wellId,\n row: rowIndex(cell.row),\n col: cell.column - 1,\n state: 'filled',\n sampleType: cell.sample_type ?? 'sample',\n metadata: {\n label: cell.sample_name.trim(),\n injectionVolume: cell.injection_volume ?? injectionVolume,\n injectionCount: cell.injection_count ?? 1,\n customMethod: cell.custom_method ?? null,\n },\n }\n return [wellId, well]\n }),\n ),\n }\n}\n\nexport function lcmsPlateCellsToRacks(cells: LcmsPlateCell[], options: LcmsPlateCellsToRacksOptions = {}): Rack[] {\n const bySlot = new Map<SlotPosition, LcmsPlateCell[]>()\n const defaultSlot = options.defaultSlot ?? 'R'\n\n for (const cell of cells) {\n const slot = cell.slot ?? defaultSlot\n const slotCells = bySlot.get(slot) ?? []\n slotCells.push(cell)\n bySlot.set(slot, slotCells)\n }\n\n return Array.from(bySlot.entries())\n .sort(([a], [b]) => SLOT_ORDER.indexOf(a) - SLOT_ORDER.indexOf(b))\n .map(([slot, slotCells], index) => lcmsPlateCellsToRack(slotCells, {\n ...options,\n slot,\n rackId: options.rackId?.(slot, index) ?? `rack-${slot}`,\n rackName: options.rackName?.(slot, index) ?? `Rack ${slot}`,\n }))\n}\n\nexport function rackToLcmsPlateCells(rack: Rack): LcmsPlateCell[] {\n return Object.entries(rack.wells)\n .map(([wellId, well]) => wellToLcmsPlateCell(rack, wellId, well))\n .filter((cell): cell is LcmsPlateCell => cell !== null)\n .sort(comparePlateCells)\n}\n\nexport function racksToLcmsPlateCells(racks: Rack[]): LcmsPlateCell[] {\n return racks.flatMap(rackToLcmsPlateCells)\n}\n\nexport function getLcmsDefaultControlWellId(plateType: LcmsPlateType, sampleType: LcmsControlSampleType): string {\n const position = LCMS_DEFAULT_CONTROL_POSITIONS[plateType][sampleType]\n return lcmsWellId(position.row, position.column)\n}\n\nexport function createLcmsControlWellEditData(\n sampleType: LcmsControlSampleType,\n options: {\n wellId?: string\n plateType?: LcmsPlateType\n injectionVolume?: number\n } = {},\n): WellEditData {\n const plateType = options.plateType ?? '54vial'\n return {\n wellId: options.wellId ?? getLcmsDefaultControlWellId(plateType, sampleType),\n label: sampleType === 'blank' ? 'Blank' : sampleType.toUpperCase(),\n sampleType,\n injectionVolume: options.injectionVolume ?? 5,\n injectionCount: 1,\n customMethod: '',\n }\n}\n\nfunction wellToLcmsPlateCell(rack: Rack, wellId: string, well: Partial<Well>): LcmsPlateCell | null {\n const metadata = well.metadata ?? {}\n const label = getString(metadata.label)\n if (!label) return null\n\n const parsed = parseLcmsWellId(well.id ?? wellId)\n return {\n row: parsed.row,\n column: parsed.column,\n sample_name: label,\n sample_type: well.sampleType ?? null,\n injection_volume: getNumber(metadata.injectionVolume) ?? rack.injectionVolume,\n injection_count: getNumber(metadata.injectionCount) ?? 1,\n custom_method: getNullableString(metadata.customMethod),\n slot: rack.slot,\n }\n}\n\nfunction inferRackFormat(cells: LcmsPlateCell[]): WellPlateFormat {\n return cells.some(cell => rowIndex(cell.row) > 5 || cell.column > 9) ? 96 : 54\n}\n\nfunction inferInjectionVolume(cells: LcmsPlateCell[]): number | undefined {\n return cells.find(cell => typeof cell.injection_volume === 'number')?.injection_volume ?? undefined\n}\n\nfunction rowIndex(row: string): number {\n return row.toUpperCase().charCodeAt(0) - 65\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction getNullableString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction comparePlateCells(a: LcmsPlateCell, b: LcmsPlateCell): number {\n const rowDiff = rowIndex(a.row) - rowIndex(b.row)\n return rowDiff === 0 ? a.column - b.column : rowDiff\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+BA,IAAa,iCAAwH;CACnI,UAAU;EACR,OAAO;GAAE,KAAK;GAAK,QAAQ;GAAI;EAC/B,IAAI;GAAE,KAAK;GAAK,QAAQ;GAAI;EAC5B,KAAK;GAAE,KAAK;GAAK,QAAQ;GAAI;EAC9B;CACD,UAAU;EACR,OAAO;GAAE,KAAK;GAAK,QAAQ;GAAG;EAC9B,IAAI;GAAE,KAAK;GAAK,QAAQ;GAAG;EAC3B,KAAK;GAAE,KAAK;GAAK,QAAQ;GAAG;EAC7B;CACF;AAED,IAAM,aAA6B;CAAC;CAAK;CAAK;CAAK;CAAI;AAEvD,SAAgB,0BAA0B,WAA2C;AACnF,QAAO,cAAc,WAAW,KAAK;;AAGvC,SAAgB,0BAA0B,QAAwC;AAChF,KAAI,WAAW,GAAI,QAAO;AAC1B,KAAI,WAAW,GAAI,QAAO;AAC1B,OAAM,IAAI,MAAM,mFAAmF,OAAO,GAAG;;AAG/G,SAAgB,WAAW,KAAa,QAAwB;AAC9D,QAAO,GAAG,IAAI,aAAa,GAAG;;AAGhC,SAAgB,gBAAgB,QAAiD;CAC/E,MAAM,QAAQ,qBAAqB,KAAK,OAAO,MAAM,CAAC;AACtD,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,oBAAoB,OAAO,gEAAgE;AAG7G,QAAO;EACL,KAAK,MAAM,GAAG,aAAa;EAC3B,QAAQ,OAAO,MAAM,GAAG;EACzB;;AAGH,SAAgB,qBAAqB,OAAwB,UAAuC,EAAE,EAAQ;CAC5G,MAAM,SAAS,QAAQ,WAAW,QAAQ,YAAY,0BAA0B,QAAQ,UAAU,GAAG,gBAAgB,MAAM;CAC3H,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAK,SAAQ,KAAK,KAAK,EAAE,QAAQ;CACpE,MAAM,kBAAkB,QAAQ,mBAAmB,qBAAqB,MAAM,IAAI;AAElF,QAAO;EACL,IAAI,QAAQ,UAAU,QAAQ;EAC9B,MAAM,QAAQ,YAAY,QAAQ;EAClC;EACA;EACA;EACA,OAAO,OAAO,YACZ,MACG,QAAO,SAAQ,KAAK,YAAY,MAAM,CAAC,CACvC,KAAK,SAAS;GACb,MAAM,SAAS,WAAW,KAAK,KAAK,KAAK,OAAO;AAchD,UAAO,CAAC,QAboB;IAC1B,IAAI;IACJ,KAAK,SAAS,KAAK,IAAI;IACvB,KAAK,KAAK,SAAS;IACnB,OAAO;IACP,YAAY,KAAK,eAAe;IAChC,UAAU;KACR,OAAO,KAAK,YAAY,MAAM;KAC9B,iBAAiB,KAAK,oBAAoB;KAC1C,gBAAgB,KAAK,mBAAmB;KACxC,cAAc,KAAK,iBAAiB;KACrC;IACF,CACoB;IACrB,CACL;EACF;;AAGH,SAAgB,sBAAsB,OAAwB,UAAwC,EAAE,EAAU;CAChH,MAAM,yBAAS,IAAI,KAAoC;CACvD,MAAM,cAAc,QAAQ,eAAe;AAE3C,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,OAAO,KAAK,QAAQ;EAC1B,MAAM,YAAY,OAAO,IAAI,KAAK,IAAI,EAAE;AACxC,YAAU,KAAK,KAAK;AACpB,SAAO,IAAI,MAAM,UAAU;;AAG7B,QAAO,MAAM,KAAK,OAAO,SAAS,CAAC,CAChC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,QAAQ,EAAE,GAAG,WAAW,QAAQ,EAAE,CAAC,CACjE,KAAK,CAAC,MAAM,YAAY,UAAU,qBAAqB,WAAW;EACjE,GAAG;EACH;EACA,QAAQ,QAAQ,SAAS,MAAM,MAAM,IAAI,QAAQ;EACjD,UAAU,QAAQ,WAAW,MAAM,MAAM,IAAI,QAAQ;EACtD,CAAC,CAAC;;AAGP,SAAgB,qBAAqB,MAA6B;AAChE,QAAO,OAAO,QAAQ,KAAK,MAAM,CAC9B,KAAK,CAAC,QAAQ,UAAU,oBAAoB,MAAM,QAAQ,KAAK,CAAC,CAChE,QAAQ,SAAgC,SAAS,KAAK,CACtD,KAAK,kBAAkB;;AAG5B,SAAgB,sBAAsB,OAAgC;AACpE,QAAO,MAAM,QAAQ,qBAAqB;;AAG5C,SAAgB,4BAA4B,WAA0B,YAA2C;CAC/G,MAAM,WAAW,+BAA+B,WAAW;AAC3D,QAAO,WAAW,SAAS,KAAK,SAAS,OAAO;;AAGlD,SAAgB,8BACd,YACA,UAII,EAAE,EACQ;CACd,MAAM,YAAY,QAAQ,aAAa;AACvC,QAAO;EACL,QAAQ,QAAQ,UAAU,4BAA4B,WAAW,WAAW;EAC5E,OAAO,eAAe,UAAU,UAAU,WAAW,aAAa;EAClE;EACA,iBAAiB,QAAQ,mBAAmB;EAC5C,gBAAgB;EAChB,cAAc;EACf;;AAGH,SAAS,oBAAoB,MAAY,QAAgB,MAA2C;CAClG,MAAM,WAAW,KAAK,YAAY,EAAE;CACpC,MAAM,QAAQ,UAAU,SAAS,MAAM;AACvC,KAAI,CAAC,MAAO,QAAO;CAEnB,MAAM,SAAS,gBAAgB,KAAK,MAAM,OAAO;AACjD,QAAO;EACL,KAAK,OAAO;EACZ,QAAQ,OAAO;EACf,aAAa;EACb,aAAa,KAAK,cAAc;EAChC,kBAAkB,UAAU,SAAS,gBAAgB,IAAI,KAAK;EAC9D,iBAAiB,UAAU,SAAS,eAAe,IAAI;EACvD,eAAe,kBAAkB,SAAS,aAAa;EACvD,MAAM,KAAK;EACZ;;AAGH,SAAS,gBAAgB,OAAyC;AAChE,QAAO,MAAM,MAAK,SAAQ,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,SAAS,EAAE,GAAG,KAAK;;AAG9E,SAAS,qBAAqB,OAA4C;AACxE,QAAO,MAAM,MAAK,SAAQ,OAAO,KAAK,qBAAqB,SAAS,EAAE,oBAAoB,KAAA;;AAG5F,SAAS,SAAS,KAAqB;AACrC,QAAO,IAAI,aAAa,CAAC,WAAW,EAAE,GAAG;;AAG3C,SAAS,UAAU,OAAoC;AACrD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;AAGpE,SAAS,kBAAkB,OAA+B;AACxD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG;;AAGpE,SAAS,UAAU,OAAoC;AACrD,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,GAAG,QAAQ,KAAA;;AAGvE,SAAS,kBAAkB,GAAkB,GAA0B;CACrE,MAAM,UAAU,SAAS,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI;AACjD,QAAO,YAAY,IAAI,EAAE,SAAS,EAAE,SAAS"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/utils/rack.ts"],"sourcesContent":["import type { Rack, SlotPosition, Well, WellEditData, WellPlateFormat } from '../types'\n\nexport type LcmsPlateType = '96well' | '54vial'\nexport type LcmsControlSampleType = 'blank' | 'qc' | 'iqc'\n\nexport interface LcmsPlateCell {\n row: string\n column: number\n sample_name: string\n sample_type?: string | null\n injection_volume?: number | null\n injection_count?: number | null\n custom_method?: string | null\n slot?: SlotPosition | null\n}\n\nexport interface LcmsPlateCellsToRackOptions {\n rackId?: string\n rackName?: string\n format?: WellPlateFormat\n plateType?: LcmsPlateType\n slot?: SlotPosition\n injectionVolume?: number\n}\n\nexport interface LcmsPlateCellsToRacksOptions extends Omit<LcmsPlateCellsToRackOptions, 'rackId' | 'rackName' | 'slot'> {\n defaultSlot?: SlotPosition\n rackId?: (slot: SlotPosition, index: number) => string\n rackName?: (slot: SlotPosition, index: number) => string\n}\n\nexport const LCMS_DEFAULT_CONTROL_POSITIONS: Record<LcmsPlateType, Record<LcmsControlSampleType, { row: string; column: number }>> = {\n '96well': {\n blank: { row: 'H', column: 12 },\n qc: { row: 'H', column: 11 },\n iqc: { row: 'H', column: 10 },\n },\n '54vial': {\n blank: { row: 'F', column: 9 },\n qc: { row: 'F', column: 8 },\n iqc: { row: 'F', column: 7 },\n },\n}\n\nconst SLOT_ORDER: SlotPosition[] = ['R', 'G', 'B', 'Y']\n\nexport function lcmsPlateTypeToRackFormat(plateType: LcmsPlateType): WellPlateFormat {\n return plateType === '96well' ? 96 : 54\n}\n\nexport function rackFormatToLcmsPlateType(format: WellPlateFormat): LcmsPlateType {\n if (format === 96) return '96well'\n if (format === 54) return '54vial'\n throw new Error(`LCMS plate cells support only 54-vial racks and 96-well plates; received format ${format}.`)\n}\n\nexport function lcmsWellId(row: string, column: number): string {\n return `${row.toUpperCase()}${column}`\n}\n\nexport function parseLcmsWellId(wellId: string): { row: string; column: number } {\n const match = /^([A-Za-z]+)(\\d+)$/.exec(wellId.trim())\n if (!match) {\n throw new Error(`Invalid well id \"${wellId}\". Expected a row letter followed by a column number, e.g. A1.`)\n }\n\n return {\n row: match[1].toUpperCase(),\n column: Number(match[2]),\n }\n}\n\nexport function lcmsPlateCellsToRack(cells: LcmsPlateCell[], options: LcmsPlateCellsToRackOptions = {}): Rack {\n const format = options.format ?? (options.plateType ? lcmsPlateTypeToRackFormat(options.plateType) : inferRackFormat(cells))\n const slot = options.slot ?? cells.find(cell => cell.slot)?.slot ?? 'R'\n const injectionVolume = options.injectionVolume ?? inferInjectionVolume(cells) ?? 5\n\n return {\n id: options.rackId ?? `rack-${slot}`,\n name: options.rackName ?? `Rack ${slot}`,\n format,\n slot,\n injectionVolume,\n wells: Object.fromEntries(\n cells\n .filter(cell => cell.sample_name.trim())\n .map((cell) => {\n const wellId = lcmsWellId(cell.row, cell.column)\n const well: Partial<Well> = {\n id: wellId,\n row: rowIndex(cell.row),\n col: cell.column - 1,\n state: 'filled',\n sampleType: cell.sample_type ?? 'sample',\n metadata: {\n label: cell.sample_name.trim(),\n injectionVolume: cell.injection_volume ?? injectionVolume,\n injectionCount: cell.injection_count ?? 1,\n customMethod: cell.custom_method ?? null,\n },\n }\n return [wellId, well]\n }),\n ),\n }\n}\n\nexport function lcmsPlateCellsToRacks(cells: LcmsPlateCell[], options: LcmsPlateCellsToRacksOptions = {}): Rack[] {\n const bySlot = new Map<SlotPosition, LcmsPlateCell[]>()\n const defaultSlot = options.defaultSlot ?? 'R'\n\n for (const cell of cells) {\n const slot = cell.slot ?? defaultSlot\n const slotCells = bySlot.get(slot) ?? []\n slotCells.push(cell)\n bySlot.set(slot, slotCells)\n }\n\n return Array.from(bySlot.entries())\n .sort(([a], [b]) => SLOT_ORDER.indexOf(a) - SLOT_ORDER.indexOf(b))\n .map(([slot, slotCells], index) => lcmsPlateCellsToRack(slotCells, {\n ...options,\n slot,\n rackId: options.rackId?.(slot, index) ?? `rack-${slot}`,\n rackName: options.rackName?.(slot, index) ?? `Rack ${slot}`,\n }))\n}\n\nexport function rackToLcmsPlateCells(rack: Rack): LcmsPlateCell[] {\n return Object.entries(rack.wells)\n .map(([wellId, well]) => wellToLcmsPlateCell(rack, wellId, well))\n .filter((cell): cell is LcmsPlateCell => cell !== null)\n .sort(comparePlateCells)\n}\n\nexport function racksToLcmsPlateCells(racks: Rack[]): LcmsPlateCell[] {\n return racks.flatMap(rackToLcmsPlateCells)\n}\n\nexport function getLcmsDefaultControlWellId(plateType: LcmsPlateType, sampleType: LcmsControlSampleType): string {\n const position = LCMS_DEFAULT_CONTROL_POSITIONS[plateType][sampleType]\n return lcmsWellId(position.row, position.column)\n}\n\nexport function createLcmsControlWellEditData(\n sampleType: LcmsControlSampleType,\n options: {\n wellId?: string\n plateType?: LcmsPlateType\n injectionVolume?: number\n } = {},\n): WellEditData {\n const plateType = options.plateType ?? '54vial'\n return {\n wellId: options.wellId ?? getLcmsDefaultControlWellId(plateType, sampleType),\n label: sampleType === 'blank' ? 'Blank' : sampleType.toUpperCase(),\n sampleType,\n injectionVolume: options.injectionVolume ?? 5,\n injectionCount: 1,\n customMethod: '',\n }\n}\n\nfunction wellToLcmsPlateCell(rack: Rack, wellId: string, well: Partial<Well>): LcmsPlateCell | null {\n const metadata = well.metadata ?? {}\n const label = getString(metadata.label)\n if (!label) return null\n\n const parsed = parseLcmsWellId(well.id ?? wellId)\n return {\n row: parsed.row,\n column: parsed.column,\n sample_name: label,\n sample_type: well.sampleType ?? null,\n injection_volume: getNumber(metadata.injectionVolume) ?? rack.injectionVolume,\n injection_count: getNumber(metadata.injectionCount) ?? 1,\n custom_method: getNullableString(metadata.customMethod),\n slot: rack.slot,\n }\n}\n\nfunction inferRackFormat(cells: LcmsPlateCell[]): WellPlateFormat {\n return cells.some(cell => rowIndex(cell.row) > 5 || cell.column > 9) ? 96 : 54\n}\n\nfunction inferInjectionVolume(cells: LcmsPlateCell[]): number | undefined {\n return cells.find(cell => typeof cell.injection_volume === 'number')?.injection_volume ?? undefined\n}\n\nfunction rowIndex(row: string): number {\n return row.toUpperCase().charCodeAt(0) - 65\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction getNullableString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction comparePlateCells(a: LcmsPlateCell, b: LcmsPlateCell): number {\n const rowDiff = rowIndex(a.row) - rowIndex(b.row)\n return rowDiff === 0 ? a.column - b.column : rowDiff\n}\n"],"mappings":"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"}
|
package/dist/install.js
CHANGED
package/dist/styles.css
CHANGED
|
@@ -19374,6 +19374,216 @@ to { transform: rotate(360deg);
|
|
|
19374
19374
|
animation: none;
|
|
19375
19375
|
}
|
|
19376
19376
|
}
|
|
19377
|
+
/* ArtifactSelectorModal Component Styles */
|
|
19378
|
+
.mint-artifact-selector {
|
|
19379
|
+
display: flex;
|
|
19380
|
+
flex-direction: column;
|
|
19381
|
+
gap: 0.75rem;
|
|
19382
|
+
min-height: 0;
|
|
19383
|
+
}
|
|
19384
|
+
|
|
19385
|
+
/* Filter row */
|
|
19386
|
+
.mint-artifact-selector__filters-row {
|
|
19387
|
+
display: flex;
|
|
19388
|
+
align-items: center;
|
|
19389
|
+
gap: 0.5rem;
|
|
19390
|
+
flex-wrap: wrap;
|
|
19391
|
+
}
|
|
19392
|
+
.mint-artifact-selector__search {
|
|
19393
|
+
flex: 1;
|
|
19394
|
+
min-width: 10rem;
|
|
19395
|
+
}
|
|
19396
|
+
.mint-artifact-selector__filter-select {
|
|
19397
|
+
flex-shrink: 0;
|
|
19398
|
+
width: 10rem;
|
|
19399
|
+
}
|
|
19400
|
+
|
|
19401
|
+
/* Loading skeleton */
|
|
19402
|
+
.mint-artifact-selector__skeleton {
|
|
19403
|
+
display: flex;
|
|
19404
|
+
flex-direction: column;
|
|
19405
|
+
border: 1px solid var(--border-color);
|
|
19406
|
+
border-radius: var(--radius-md);
|
|
19407
|
+
overflow: hidden;
|
|
19408
|
+
}
|
|
19409
|
+
.mint-artifact-selector__skeleton-row {
|
|
19410
|
+
display: flex;
|
|
19411
|
+
align-items: center;
|
|
19412
|
+
gap: 0.75rem;
|
|
19413
|
+
padding: 0.75rem 1rem;
|
|
19414
|
+
background-color: var(--bg-primary);
|
|
19415
|
+
}
|
|
19416
|
+
.mint-artifact-selector__skeleton-content {
|
|
19417
|
+
flex: 1;
|
|
19418
|
+
display: flex;
|
|
19419
|
+
flex-direction: column;
|
|
19420
|
+
gap: 6px;
|
|
19421
|
+
}
|
|
19422
|
+
|
|
19423
|
+
/* Error */
|
|
19424
|
+
.mint-artifact-selector__error {
|
|
19425
|
+
padding: 0.75rem;
|
|
19426
|
+
border: 1px solid color-mix(in srgb, var(--mint-error) 30%, transparent);
|
|
19427
|
+
border-radius: var(--radius-md);
|
|
19428
|
+
background-color: var(--mint-error-bg);
|
|
19429
|
+
color: var(--mint-error);
|
|
19430
|
+
font-size: 0.875rem;
|
|
19431
|
+
}
|
|
19432
|
+
|
|
19433
|
+
/* Scrollable list */
|
|
19434
|
+
.mint-artifact-selector__list {
|
|
19435
|
+
max-height: min(28rem, calc(100vh - 16rem));
|
|
19436
|
+
overflow-y: auto;
|
|
19437
|
+
display: flex;
|
|
19438
|
+
flex-direction: column;
|
|
19439
|
+
border: 1px solid var(--border-color);
|
|
19440
|
+
border-radius: var(--radius-md);
|
|
19441
|
+
background-color: var(--bg-primary);
|
|
19442
|
+
scrollbar-width: thin;
|
|
19443
|
+
overscroll-behavior: contain;
|
|
19444
|
+
}
|
|
19445
|
+
.mint-artifact-selector__list::-webkit-scrollbar {
|
|
19446
|
+
width: 0.5rem;
|
|
19447
|
+
}
|
|
19448
|
+
.mint-artifact-selector__list::-webkit-scrollbar-track {
|
|
19449
|
+
background: transparent;
|
|
19450
|
+
}
|
|
19451
|
+
.mint-artifact-selector__list::-webkit-scrollbar-thumb {
|
|
19452
|
+
background-color: color-mix(in srgb, var(--text-muted) 30%, transparent);
|
|
19453
|
+
border: 2px solid transparent;
|
|
19454
|
+
border-radius: 9999px;
|
|
19455
|
+
background-clip: content-box;
|
|
19456
|
+
}
|
|
19457
|
+
|
|
19458
|
+
/* Row */
|
|
19459
|
+
.mint-artifact-selector__row {
|
|
19460
|
+
position: relative;
|
|
19461
|
+
display: flex;
|
|
19462
|
+
align-items: center;
|
|
19463
|
+
gap: 0.75rem;
|
|
19464
|
+
min-height: 4.125rem;
|
|
19465
|
+
padding: 0.75rem 1rem 0.75rem 1.125rem;
|
|
19466
|
+
cursor: pointer;
|
|
19467
|
+
border-left: 0 solid transparent;
|
|
19468
|
+
border-bottom: 1px solid var(--border-light);
|
|
19469
|
+
background-color: var(--bg-primary);
|
|
19470
|
+
transition:
|
|
19471
|
+
background-color 0.15s ease,
|
|
19472
|
+
box-shadow 0.15s ease;
|
|
19473
|
+
}
|
|
19474
|
+
.mint-artifact-selector__row:hover {
|
|
19475
|
+
background-color: var(--bg-hover);
|
|
19476
|
+
}
|
|
19477
|
+
.mint-artifact-selector__row--active {
|
|
19478
|
+
box-shadow: inset 3px 0 0 var(--color-primary);
|
|
19479
|
+
background-color: var(--color-primary-soft);
|
|
19480
|
+
}
|
|
19481
|
+
.mint-artifact-selector__row--active:hover {
|
|
19482
|
+
background-color: var(--color-primary-soft);
|
|
19483
|
+
}
|
|
19484
|
+
|
|
19485
|
+
/* Keyboard focused row */
|
|
19486
|
+
.mint-artifact-selector__row--focused {
|
|
19487
|
+
background-color: var(--bg-hover);
|
|
19488
|
+
outline: none;
|
|
19489
|
+
box-shadow:
|
|
19490
|
+
inset 0 0 0 2px var(--color-primary),
|
|
19491
|
+
inset 3px 0 0 var(--color-primary);
|
|
19492
|
+
}
|
|
19493
|
+
.mint-artifact-selector__row--active.mint-artifact-selector__row--focused {
|
|
19494
|
+
background-color: var(--color-primary-soft);
|
|
19495
|
+
}
|
|
19496
|
+
.mint-artifact-selector__row--archived .mint-artifact-selector__name,
|
|
19497
|
+
.mint-artifact-selector__row--archived .mint-artifact-selector__meta {
|
|
19498
|
+
opacity: var(--mint-disabled-opacity, 0.6);
|
|
19499
|
+
}
|
|
19500
|
+
|
|
19501
|
+
/* Row content */
|
|
19502
|
+
.mint-artifact-selector__row-content {
|
|
19503
|
+
flex: 1;
|
|
19504
|
+
min-width: 0;
|
|
19505
|
+
}
|
|
19506
|
+
.mint-artifact-selector__name {
|
|
19507
|
+
display: flex;
|
|
19508
|
+
align-items: center;
|
|
19509
|
+
gap: 0.5rem;
|
|
19510
|
+
font-size: 0.875rem;
|
|
19511
|
+
font-weight: 500;
|
|
19512
|
+
color: var(--text-primary);
|
|
19513
|
+
min-width: 0;
|
|
19514
|
+
}
|
|
19515
|
+
.mint-artifact-selector__key {
|
|
19516
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
19517
|
+
font-size: 0.6875rem;
|
|
19518
|
+
padding: 0.0625rem 0.375rem;
|
|
19519
|
+
border-radius: var(--radius-sm);
|
|
19520
|
+
background-color: var(--bg-secondary);
|
|
19521
|
+
color: var(--text-secondary);
|
|
19522
|
+
white-space: nowrap;
|
|
19523
|
+
}
|
|
19524
|
+
.mint-artifact-selector__meta {
|
|
19525
|
+
display: flex;
|
|
19526
|
+
align-items: center;
|
|
19527
|
+
gap: 0.5rem;
|
|
19528
|
+
flex-wrap: wrap;
|
|
19529
|
+
font-size: 0.75rem;
|
|
19530
|
+
color: var(--text-muted);
|
|
19531
|
+
margin-top: 0.125rem;
|
|
19532
|
+
}
|
|
19533
|
+
.mint-artifact-selector__plugin {
|
|
19534
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
19535
|
+
color: var(--text-secondary);
|
|
19536
|
+
}
|
|
19537
|
+
|
|
19538
|
+
/* Status pill + row actions */
|
|
19539
|
+
.mint-artifact-selector__row-side {
|
|
19540
|
+
display: flex;
|
|
19541
|
+
align-items: center;
|
|
19542
|
+
gap: 0.5rem;
|
|
19543
|
+
flex-shrink: 0;
|
|
19544
|
+
}
|
|
19545
|
+
.mint-artifact-selector__action {
|
|
19546
|
+
padding: 0.25rem 0.5rem;
|
|
19547
|
+
border: 1px solid var(--border-color);
|
|
19548
|
+
border-radius: var(--radius-sm);
|
|
19549
|
+
background: var(--bg-primary);
|
|
19550
|
+
color: var(--text-secondary);
|
|
19551
|
+
font-size: 0.75rem;
|
|
19552
|
+
cursor: pointer;
|
|
19553
|
+
white-space: nowrap;
|
|
19554
|
+
transition:
|
|
19555
|
+
background-color 0.15s ease,
|
|
19556
|
+
border-color 0.15s ease,
|
|
19557
|
+
color 0.15s ease;
|
|
19558
|
+
}
|
|
19559
|
+
.mint-artifact-selector__action:hover:not(:disabled) {
|
|
19560
|
+
border-color: var(--color-primary);
|
|
19561
|
+
color: var(--color-primary);
|
|
19562
|
+
background-color: var(--bg-hover);
|
|
19563
|
+
}
|
|
19564
|
+
.mint-artifact-selector__action:focus-visible {
|
|
19565
|
+
outline: none;
|
|
19566
|
+
box-shadow: var(--focus-ring);
|
|
19567
|
+
}
|
|
19568
|
+
.mint-artifact-selector__action:disabled {
|
|
19569
|
+
opacity: var(--mint-disabled-opacity, 0.6);
|
|
19570
|
+
cursor: not-allowed;
|
|
19571
|
+
}
|
|
19572
|
+
.mint-artifact-save-dialog {
|
|
19573
|
+
display: flex;
|
|
19574
|
+
flex-direction: column;
|
|
19575
|
+
gap: 1rem;
|
|
19576
|
+
}
|
|
19577
|
+
.mint-artifact-save-dialog__immutable {
|
|
19578
|
+
margin: 0;
|
|
19579
|
+
font-size: 0.8125rem;
|
|
19580
|
+
color: var(--text-muted);
|
|
19581
|
+
}
|
|
19582
|
+
.mint-artifact-save-dialog__immutable code {
|
|
19583
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
19584
|
+
font-size: 0.75rem;
|
|
19585
|
+
color: var(--text-secondary);
|
|
19586
|
+
}
|
|
19377
19587
|
/* FitPanel Component Styles */
|
|
19378
19588
|
.mint-fit-panel {
|
|
19379
19589
|
display: flex;
|
|
@@ -34668,6 +34878,208 @@ html.dark .mint-experiment-selector__filters-toggle--active {
|
|
|
34668
34878
|
box-shadow: var(--focus-ring);
|
|
34669
34879
|
border-radius: var(--radius-sm);
|
|
34670
34880
|
}
|
|
34881
|
+
/* ArtifactSelectorModal Component Styles */
|
|
34882
|
+
.mint-artifact-selector {
|
|
34883
|
+
display: flex;
|
|
34884
|
+
flex-direction: column;
|
|
34885
|
+
gap: 0.75rem;
|
|
34886
|
+
min-height: 0;
|
|
34887
|
+
}
|
|
34888
|
+
/* Filter row */
|
|
34889
|
+
.mint-artifact-selector__filters-row {
|
|
34890
|
+
display: flex;
|
|
34891
|
+
align-items: center;
|
|
34892
|
+
gap: 0.5rem;
|
|
34893
|
+
flex-wrap: wrap;
|
|
34894
|
+
}
|
|
34895
|
+
.mint-artifact-selector__search {
|
|
34896
|
+
flex: 1;
|
|
34897
|
+
min-width: 10rem;
|
|
34898
|
+
}
|
|
34899
|
+
.mint-artifact-selector__filter-select {
|
|
34900
|
+
flex-shrink: 0;
|
|
34901
|
+
width: 10rem;
|
|
34902
|
+
}
|
|
34903
|
+
/* Loading skeleton */
|
|
34904
|
+
.mint-artifact-selector__skeleton {
|
|
34905
|
+
display: flex;
|
|
34906
|
+
flex-direction: column;
|
|
34907
|
+
border: 1px solid var(--border-color);
|
|
34908
|
+
border-radius: var(--radius-md);
|
|
34909
|
+
overflow: hidden;
|
|
34910
|
+
}
|
|
34911
|
+
.mint-artifact-selector__skeleton-row {
|
|
34912
|
+
display: flex;
|
|
34913
|
+
align-items: center;
|
|
34914
|
+
gap: 0.75rem;
|
|
34915
|
+
padding: 0.75rem 1rem;
|
|
34916
|
+
background-color: var(--bg-primary);
|
|
34917
|
+
}
|
|
34918
|
+
.mint-artifact-selector__skeleton-content {
|
|
34919
|
+
flex: 1;
|
|
34920
|
+
display: flex;
|
|
34921
|
+
flex-direction: column;
|
|
34922
|
+
gap: 6px;
|
|
34923
|
+
}
|
|
34924
|
+
/* Error */
|
|
34925
|
+
.mint-artifact-selector__error {
|
|
34926
|
+
padding: 0.75rem;
|
|
34927
|
+
border: 1px solid color-mix(in srgb, var(--mint-error) 30%, transparent);
|
|
34928
|
+
border-radius: var(--radius-md);
|
|
34929
|
+
background-color: var(--mint-error-bg);
|
|
34930
|
+
color: var(--mint-error);
|
|
34931
|
+
font-size: 0.875rem;
|
|
34932
|
+
}
|
|
34933
|
+
/* Scrollable list */
|
|
34934
|
+
.mint-artifact-selector__list {
|
|
34935
|
+
max-height: min(28rem, calc(100vh - 16rem));
|
|
34936
|
+
overflow-y: auto;
|
|
34937
|
+
display: flex;
|
|
34938
|
+
flex-direction: column;
|
|
34939
|
+
border: 1px solid var(--border-color);
|
|
34940
|
+
border-radius: var(--radius-md);
|
|
34941
|
+
background-color: var(--bg-primary);
|
|
34942
|
+
scrollbar-width: thin;
|
|
34943
|
+
overscroll-behavior: contain;
|
|
34944
|
+
}
|
|
34945
|
+
.mint-artifact-selector__list::-webkit-scrollbar {
|
|
34946
|
+
width: 0.5rem;
|
|
34947
|
+
}
|
|
34948
|
+
.mint-artifact-selector__list::-webkit-scrollbar-track {
|
|
34949
|
+
background: transparent;
|
|
34950
|
+
}
|
|
34951
|
+
.mint-artifact-selector__list::-webkit-scrollbar-thumb {
|
|
34952
|
+
background-color: color-mix(in srgb, var(--text-muted) 30%, transparent);
|
|
34953
|
+
border: 2px solid transparent;
|
|
34954
|
+
border-radius: 9999px;
|
|
34955
|
+
background-clip: content-box;
|
|
34956
|
+
}
|
|
34957
|
+
/* Row */
|
|
34958
|
+
.mint-artifact-selector__row {
|
|
34959
|
+
position: relative;
|
|
34960
|
+
display: flex;
|
|
34961
|
+
align-items: center;
|
|
34962
|
+
gap: 0.75rem;
|
|
34963
|
+
min-height: 4.125rem;
|
|
34964
|
+
padding: 0.75rem 1rem 0.75rem 1.125rem;
|
|
34965
|
+
cursor: pointer;
|
|
34966
|
+
border-left: 0 solid transparent;
|
|
34967
|
+
border-bottom: 1px solid var(--border-light);
|
|
34968
|
+
background-color: var(--bg-primary);
|
|
34969
|
+
transition:
|
|
34970
|
+
background-color 0.15s ease,
|
|
34971
|
+
box-shadow 0.15s ease;
|
|
34972
|
+
}
|
|
34973
|
+
.mint-artifact-selector__row:hover {
|
|
34974
|
+
background-color: var(--bg-hover);
|
|
34975
|
+
}
|
|
34976
|
+
.mint-artifact-selector__row--active {
|
|
34977
|
+
box-shadow: inset 3px 0 0 var(--color-primary);
|
|
34978
|
+
background-color: var(--color-primary-soft);
|
|
34979
|
+
}
|
|
34980
|
+
.mint-artifact-selector__row--active:hover {
|
|
34981
|
+
background-color: var(--color-primary-soft);
|
|
34982
|
+
}
|
|
34983
|
+
/* Keyboard focused row */
|
|
34984
|
+
.mint-artifact-selector__row--focused {
|
|
34985
|
+
background-color: var(--bg-hover);
|
|
34986
|
+
outline: none;
|
|
34987
|
+
box-shadow:
|
|
34988
|
+
inset 0 0 0 2px var(--color-primary),
|
|
34989
|
+
inset 3px 0 0 var(--color-primary);
|
|
34990
|
+
}
|
|
34991
|
+
.mint-artifact-selector__row--active.mint-artifact-selector__row--focused {
|
|
34992
|
+
background-color: var(--color-primary-soft);
|
|
34993
|
+
}
|
|
34994
|
+
.mint-artifact-selector__row--archived .mint-artifact-selector__name,
|
|
34995
|
+
.mint-artifact-selector__row--archived .mint-artifact-selector__meta {
|
|
34996
|
+
opacity: var(--mint-disabled-opacity, 0.6);
|
|
34997
|
+
}
|
|
34998
|
+
/* Row content */
|
|
34999
|
+
.mint-artifact-selector__row-content {
|
|
35000
|
+
flex: 1;
|
|
35001
|
+
min-width: 0;
|
|
35002
|
+
}
|
|
35003
|
+
.mint-artifact-selector__name {
|
|
35004
|
+
display: flex;
|
|
35005
|
+
align-items: center;
|
|
35006
|
+
gap: 0.5rem;
|
|
35007
|
+
font-size: 0.875rem;
|
|
35008
|
+
font-weight: 500;
|
|
35009
|
+
color: var(--text-primary);
|
|
35010
|
+
min-width: 0;
|
|
35011
|
+
}
|
|
35012
|
+
.mint-artifact-selector__key {
|
|
35013
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
35014
|
+
font-size: 0.6875rem;
|
|
35015
|
+
padding: 0.0625rem 0.375rem;
|
|
35016
|
+
border-radius: var(--radius-sm);
|
|
35017
|
+
background-color: var(--bg-secondary);
|
|
35018
|
+
color: var(--text-secondary);
|
|
35019
|
+
white-space: nowrap;
|
|
35020
|
+
}
|
|
35021
|
+
.mint-artifact-selector__meta {
|
|
35022
|
+
display: flex;
|
|
35023
|
+
align-items: center;
|
|
35024
|
+
gap: 0.5rem;
|
|
35025
|
+
flex-wrap: wrap;
|
|
35026
|
+
font-size: 0.75rem;
|
|
35027
|
+
color: var(--text-muted);
|
|
35028
|
+
margin-top: 0.125rem;
|
|
35029
|
+
}
|
|
35030
|
+
.mint-artifact-selector__plugin {
|
|
35031
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
35032
|
+
color: var(--text-secondary);
|
|
35033
|
+
}
|
|
35034
|
+
/* Status pill + row actions */
|
|
35035
|
+
.mint-artifact-selector__row-side {
|
|
35036
|
+
display: flex;
|
|
35037
|
+
align-items: center;
|
|
35038
|
+
gap: 0.5rem;
|
|
35039
|
+
flex-shrink: 0;
|
|
35040
|
+
}
|
|
35041
|
+
.mint-artifact-selector__action {
|
|
35042
|
+
padding: 0.25rem 0.5rem;
|
|
35043
|
+
border: 1px solid var(--border-color);
|
|
35044
|
+
border-radius: var(--radius-sm);
|
|
35045
|
+
background: var(--bg-primary);
|
|
35046
|
+
color: var(--text-secondary);
|
|
35047
|
+
font-size: 0.75rem;
|
|
35048
|
+
cursor: pointer;
|
|
35049
|
+
white-space: nowrap;
|
|
35050
|
+
transition:
|
|
35051
|
+
background-color 0.15s ease,
|
|
35052
|
+
border-color 0.15s ease,
|
|
35053
|
+
color 0.15s ease;
|
|
35054
|
+
}
|
|
35055
|
+
.mint-artifact-selector__action:hover:not(:disabled) {
|
|
35056
|
+
border-color: var(--color-primary);
|
|
35057
|
+
color: var(--color-primary);
|
|
35058
|
+
background-color: var(--bg-hover);
|
|
35059
|
+
}
|
|
35060
|
+
.mint-artifact-selector__action:focus-visible {
|
|
35061
|
+
outline: none;
|
|
35062
|
+
box-shadow: var(--focus-ring);
|
|
35063
|
+
}
|
|
35064
|
+
.mint-artifact-selector__action:disabled {
|
|
35065
|
+
opacity: var(--mint-disabled-opacity, 0.6);
|
|
35066
|
+
cursor: not-allowed;
|
|
35067
|
+
}
|
|
35068
|
+
.mint-artifact-save-dialog {
|
|
35069
|
+
display: flex;
|
|
35070
|
+
flex-direction: column;
|
|
35071
|
+
gap: 1rem;
|
|
35072
|
+
}
|
|
35073
|
+
.mint-artifact-save-dialog__immutable {
|
|
35074
|
+
margin: 0;
|
|
35075
|
+
font-size: 0.8125rem;
|
|
35076
|
+
color: var(--text-muted);
|
|
35077
|
+
}
|
|
35078
|
+
.mint-artifact-save-dialog__immutable code {
|
|
35079
|
+
font-family: var(--font-mono, 'Fira Code', monospace);
|
|
35080
|
+
font-size: 0.75rem;
|
|
35081
|
+
color: var(--text-secondary);
|
|
35082
|
+
}
|
|
34671
35083
|
/* ExperimentPopover — aligned with refresh design (AppPluginSwitcher / AppTopBar page selector) */
|
|
34672
35084
|
/* Container */
|
|
34673
35085
|
.mint-experiment-popover {
|