@morscherlab/mint-sdk 1.2.10 → 1.3.0-beta.10
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/README.md +45 -137
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js +605 -0
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +1 -0
- package/dist/__stories__/experiment-helpers.d.ts +12 -1
- package/dist/__tests__/components/ScientificNumber.test.d.ts +1 -0
- package/dist/__tests__/components/SequenceInput.test.d.ts +1 -0
- package/dist/__tests__/components/Skeleton.test.d.ts +1 -0
- package/dist/__tests__/components/SmartGroupFieldRecipe.test.d.ts +1 -0
- package/dist/__tests__/components/SmartGroupModal.test.d.ts +1 -0
- package/dist/__tests__/components/StepWizard.test.d.ts +1 -0
- package/dist/__tests__/components/TimeRangeInput.test.d.ts +1 -0
- package/dist/__tests__/components/UnitInput.test.d.ts +1 -0
- package/dist/__tests__/components/WellPlate.keyboard.test.d.ts +1 -0
- package/dist/__tests__/components/WellPlate.sampleTypeIndicator.test.d.ts +1 -0
- package/dist/__tests__/composables/useChemicalFormula.test.d.ts +1 -0
- package/dist/__tests__/composables/useRackEditor.test.d.ts +1 -0
- package/dist/__tests__/composables/useSequenceUtils.test.d.ts +1 -0
- package/dist/__tests__/styles/baseControlsRules.test.d.ts +1 -0
- package/dist/__tests__/styles/controlRefreshRules.test.d.ts +1 -0
- package/dist/__tests__/styles/darkModeRules.test.d.ts +1 -0
- package/dist/__tests__/styles/menusShellRefresh.test.d.ts +1 -0
- package/dist/__tests__/templates/templatesDeprecation.test.d.ts +1 -0
- package/dist/__tests__/utils/plotlyTemplate.test.d.ts +1 -0
- package/dist/__tests__/utils/sampleTypeMarker.test.d.ts +1 -0
- package/dist/{analysisArtifactTypes-DQ0MjwHZ.js → analysisArtifactTypes-Cy3D0Ipg.js} +1 -1
- package/dist/{analysisArtifactTypes-DQ0MjwHZ.js.map → analysisArtifactTypes-Cy3D0Ipg.js.map} +1 -1
- package/dist/components/ActionMenu.vue.d.ts +17 -5
- package/dist/components/AdductText.vue.d.ts +3 -2
- package/dist/components/AlertBox.vue.d.ts +11 -14
- package/dist/components/AppAvatarMenu.vue.d.ts +18 -28
- package/dist/components/AppContainer.vue.d.ts +7 -11
- package/dist/components/AppLayout.vue.d.ts +11 -13
- package/dist/components/AppSidebar.vue.d.ts +30 -28
- package/dist/components/AppToastContainer.vue.d.ts +2 -1
- package/dist/components/AppTopBar.vue.d.ts +45 -44
- package/dist/components/ArtifactSaveDialog.vue.d.ts +3 -2
- package/dist/components/ArtifactSelectorModal.vue.d.ts +5 -6
- package/dist/components/AuditTrail.vue.d.ts +17 -18
- package/dist/components/AutoGroupModal.vue.d.ts +4 -3
- package/dist/components/Avatar.vue.d.ts +2 -1
- package/dist/components/BaseButton.vue.d.ts +11 -13
- package/dist/components/BaseCheckbox.vue.d.ts +7 -1
- package/dist/components/BaseInput.vue.d.ts +15 -2
- package/dist/components/BaseModal.vue.d.ts +20 -23
- package/dist/components/BasePill.vue.d.ts +10 -13
- package/dist/components/BaseRadioGroup.vue.d.ts +2 -1
- package/dist/components/BaseSelect.vue.d.ts +3 -2
- package/dist/components/BaseSlider.vue.d.ts +18 -1
- package/dist/components/BaseTabs.vue.d.ts +2 -1
- package/dist/components/BaseTextarea.vue.d.ts +2 -1
- package/dist/components/BaseToggle.vue.d.ts +2 -1
- package/dist/components/BatchProgressList.vue.d.ts +22 -26
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +7 -14
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +6 -13
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +7 -14
- package/dist/components/BioTemplateRenderer.vue.d.ts +2 -1
- package/dist/components/Breadcrumb.vue.d.ts +13 -16
- package/dist/components/Calendar.vue.d.ts +21 -23
- package/dist/components/ChartContainer.vue.d.ts +19 -25
- package/dist/components/ChemicalFormula.vue.d.ts +7 -11
- package/dist/components/CollapsibleCard.vue.d.ts +7 -11
- package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -1
- package/dist/components/ConcentrationInput.vue.d.ts +2 -1
- package/dist/components/ConfirmDialog.vue.d.ts +10 -13
- package/dist/components/ControlWorkspaceView.vue.d.ts +9 -18
- package/dist/components/DataFrame.vue.d.ts +27 -24
- package/dist/components/DatePicker.vue.d.ts +3 -6
- package/dist/components/DateTimePicker.vue.d.ts +3 -6
- package/dist/components/Divider.vue.d.ts +3 -2
- package/dist/components/DoseCalculator.vue.d.ts +2 -1
- package/dist/components/DoseCalculatorVolumeField.vue.d.ts +2 -1
- package/dist/components/DoseDesignWorkspaceView.vue.d.ts +9 -18
- package/dist/components/EmptyState.vue.d.ts +9 -12
- package/dist/components/ExperimentCodeBadge.vue.d.ts +2 -1
- package/dist/components/ExperimentDataViewer.vue.d.ts +13 -15
- package/dist/components/ExperimentPopover.vue.d.ts +3 -5
- package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -4
- package/dist/components/ExperimentTimeline.vue.d.ts +13 -15
- package/dist/components/FilePicker.vue.d.ts +10 -5
- package/dist/components/FileUploader.vue.d.ts +8 -16
- package/dist/components/FitPanel.vue.d.ts +26 -16
- package/dist/components/FormActions.vue.d.ts +2 -1
- package/dist/components/FormBuilder.vue.d.ts +54 -250
- package/dist/components/FormField.vue.d.ts +14 -16
- package/dist/components/FormulaInput.vue.d.ts +2 -1
- package/dist/components/GeneratedPathInput.vue.d.ts +6 -5
- package/dist/components/GeneratedPlotlyResult.vue.d.ts +2 -1
- package/dist/components/GeneratedPluginView.vue.d.ts +2 -1
- package/dist/components/GeneratedResultRenderer.vue.d.ts +2 -1
- package/dist/components/GroupAssigner.vue.d.ts +2 -1
- package/dist/components/IconButton.vue.d.ts +7 -11
- package/dist/components/InstrumentStateBadge.vue.d.ts +4 -3
- package/dist/components/JobsStatusTray.vue.d.ts +13 -29
- package/dist/components/LayoutResizeHandle.vue.d.ts +2 -1
- package/dist/components/LoadingSpinner.vue.d.ts +2 -1
- package/dist/components/MobileSupportGate.vue.d.ts +5 -13
- package/dist/components/MoleculeInput.vue.d.ts +3 -4
- package/dist/components/MultiSelect.vue.d.ts +2 -1
- package/dist/components/NumberInput.vue.d.ts +2 -1
- package/dist/components/PlateEditor.vue.d.ts +147 -0
- package/dist/components/PlotlyChart.vue.d.ts +21 -31
- package/dist/components/PluginIcon.vue.d.ts +2 -1
- package/dist/components/PluginWorkspaceView.props.d.ts +2 -6
- package/dist/components/PluginWorkspaceView.vue.d.ts +23 -51
- package/dist/components/ProgressBar.vue.d.ts +4 -9
- package/dist/components/ProtocolStepEditor.vue.d.ts +7 -5
- package/dist/components/ProtocolStepParameterField.vue.d.ts +2 -1
- package/dist/components/ReagentEditor.vue.d.ts +2 -1
- package/dist/components/ReagentList.presentation.d.ts +2 -1
- package/dist/components/ReagentList.vue.d.ts +15 -17
- package/dist/components/ResourceCard.vue.d.ts +18 -17
- package/dist/components/RuntimeUpdateNotice.vue.d.ts +3 -2
- package/dist/components/SampleHierarchyTree.vue.d.ts +21 -15
- package/dist/components/SampleLegend.vue.d.ts +2 -1
- package/dist/components/SampleSelector.vue.d.ts +15 -21
- package/dist/components/SampleSelectorGroupNode.vue.d.ts +2 -1
- package/dist/components/SampleSelectorSampleRow.vue.d.ts +2 -5
- package/dist/components/ScheduleCalendar.vue.d.ts +34 -36
- package/dist/components/ScientificNumber.vue.d.ts +3 -2
- package/dist/components/SearchableSelect.vue.d.ts +14 -32
- package/dist/components/SecretInput.vue.d.ts +2 -1
- package/dist/components/SectionCard.vue.d.ts +13 -14
- package/dist/components/SegmentedControl.vue.d.ts +2 -1
- package/dist/components/SequenceInput.vue.d.ts +10 -21
- package/dist/components/SequenceProgressBar.vue.d.ts +2 -1
- package/dist/components/SettingsModal.schema.d.ts +1 -1
- package/dist/components/SettingsModal.vue.d.ts +28 -25
- package/dist/components/Skeleton.vue.d.ts +2 -1
- package/dist/components/SmartGroup.types.d.ts +2 -2
- package/dist/components/SmartGroupFieldRecipe.groups.d.ts +2 -0
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +4 -7
- package/dist/components/SmartGroupManual.vue.d.ts +3 -2
- package/dist/components/SmartGroupModal.vue.d.ts +6 -4
- package/dist/components/StatusIndicator.vue.d.ts +2 -1
- package/dist/components/StepWizard.vue.d.ts +26 -27
- package/dist/components/TagsInput.vue.d.ts +3 -5
- package/dist/components/ThemeToggle.vue.d.ts +2 -1
- package/dist/components/TimePicker.vue.d.ts +6 -6
- package/dist/components/TimeRangeInput.vue.d.ts +9 -2
- package/dist/components/Tooltip.vue.d.ts +8 -18
- package/dist/components/UnitInput.vue.d.ts +2 -1
- package/dist/components/WellPlate.colors.d.ts +2 -4
- package/dist/components/WellPlate.rendering.d.ts +7 -1
- package/dist/components/WellPlate.sampleDrop.d.ts +2 -0
- package/dist/components/WellPlate.vue.d.ts +22 -39
- package/dist/components/index.d.ts +34 -31
- package/dist/components/index.js +5 -8
- package/dist/components/internal/ActionItemInternal.vue.d.ts +11 -13
- package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +14 -23
- package/dist/components/internal/AppTopBarPillNavInternal.vue.d.ts +2 -1
- package/dist/components/internal/CalendarGridPanelInternal.vue.d.ts +2 -1
- package/dist/components/internal/DataStateInternal.vue.d.ts +7 -11
- package/dist/components/internal/{FilePickerTreeInternal.vue.d.ts → FilePickerListInternal.vue.d.ts} +9 -6
- package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +4 -3
- package/dist/components/internal/FormFieldRendererInternal.vue.d.ts +16 -18
- package/dist/components/internal/FormSectionRenderer.vue.d.ts +36 -32
- package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +8 -0
- package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +65 -0
- package/dist/components/internal/SettingsPaneHeadInternal.vue.d.ts +15 -0
- package/dist/components/internal/WellEditPopupInternal.vue.d.ts +12 -4
- package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +6 -13
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +19 -42
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +9 -19
- package/dist/components/internal/filePickerPresentation.d.ts +8 -0
- package/dist/components/internal/generatedJobsApi.d.ts +9 -0
- package/dist/{components-Bbg_gtzF.js → components-GDDvof8D.js} +7088 -5955
- package/dist/components-GDDvof8D.js.map +1 -0
- package/dist/composables/controlSchemaTypes.d.ts +4 -43
- package/dist/composables/createFilePickerAdapter.d.ts +5 -1
- package/dist/composables/filePicker/usePickerNavigation.d.ts +7 -2
- package/dist/composables/index.d.ts +2 -13
- package/dist/composables/index.js +7 -11
- package/dist/composables/pluginWorkspaceModel.d.ts +1 -3
- package/dist/composables/useAutoGroup.d.ts +10 -0
- package/dist/composables/useBioTemplateComponents.d.ts +15 -3
- package/dist/composables/useBioTemplateControls.d.ts +5 -1
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
- package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
- package/dist/composables/useChemicalFormula.d.ts +2 -1
- package/dist/composables/useDropdownState.d.ts +5 -0
- package/dist/composables/useExperimentSave.d.ts +5 -1
- package/dist/composables/useFileBrowser.d.ts +3 -2
- package/dist/composables/useFilePicker.d.ts +25 -13
- package/dist/composables/useFocusTrap.d.ts +2 -1
- package/dist/composables/useGroupAssignment.d.ts +5 -1
- package/dist/composables/useJobsStatusTray.d.ts +5 -5
- package/dist/composables/useMenuKeyboard.d.ts +3 -3
- package/dist/composables/usePlatformContext.d.ts +3 -0
- package/dist/composables/usePluginClient.d.ts +1 -1
- package/dist/composables/useRackEditor.d.ts +36 -1
- package/dist/composables/useSequenceUtils.d.ts +8 -0
- package/dist/composables/useTemplateCollection.d.ts +5 -1
- package/dist/composables/workspaceRecipes.d.ts +1 -0
- package/dist/composables-D6uqp0UF.js +591 -0
- package/dist/composables-D6uqp0UF.js.map +1 -0
- package/dist/{errors-BLuqMee5.js → experiment-DgllIc3I.js} +89 -333
- package/dist/experiment-DgllIc3I.js.map +1 -0
- package/dist/{experiment-utils-CV2Wza3z.js → experiment-utils-DTANyVKV.js} +68 -37
- package/dist/experiment-utils-DTANyVKV.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +122 -17
- package/dist/index.js.map +1 -1
- package/dist/install.js +1 -2
- package/dist/install.js.map +1 -1
- package/dist/instrument.d.ts +6 -0
- package/dist/lcms.d.ts +11 -0
- package/dist/permissions.d.ts +2 -47
- package/dist/permissions.js +2 -26
- package/dist/permissions.js.map +1 -1
- package/dist/settings-BLr8lzw6.js +341 -0
- package/dist/settings-BLr8lzw6.js.map +1 -0
- package/dist/stores/auth.d.ts +2 -150
- package/dist/stores/experiment.d.ts +2 -106
- package/dist/stores/index.js +2 -2
- package/dist/stores/settings.d.ts +2 -44
- package/dist/styles.css +8608 -6950
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/adapters.d.ts +3 -0
- package/dist/templates/assayMatrixAdapters.d.ts +8 -1
- package/dist/templates/assayMatrixBuilder.d.ts +1 -0
- package/dist/templates/builderPresetControls.d.ts +1 -0
- package/dist/templates/calibrationCurveAdapters.d.ts +3 -0
- package/dist/templates/calibrationCurveBuilder.d.ts +1 -0
- package/dist/templates/catalog.d.ts +6 -2
- package/dist/templates/componentBindings.d.ts +31 -5
- package/dist/templates/componentPlateHelpers.d.ts +7 -1
- package/dist/templates/controlSchemas.d.ts +9 -0
- package/dist/templates/defaultBioTemplateBuilder.d.ts +1 -0
- package/dist/templates/doseResponseAdapters.d.ts +2 -0
- package/dist/templates/doseResponseBuilder.d.ts +1 -0
- package/dist/templates/elisaAssayCollectionBuilder.d.ts +1 -0
- package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +1 -0
- package/dist/templates/flowCytometryPanelBuilder.d.ts +1 -0
- package/dist/templates/flowPanelAdapters.d.ts +3 -0
- package/dist/templates/index.d.ts +1 -1
- package/dist/templates/index.js +2 -3
- package/dist/templates/instrumentRunAdapters.d.ts +13 -2
- package/dist/templates/instrumentRunBuilder.d.ts +1 -0
- package/dist/templates/lcmsBatchCollectionBuilder.d.ts +1 -0
- package/dist/templates/packs.d.ts +4 -0
- package/dist/templates/plateMapAdapters.d.ts +2 -0
- package/dist/templates/plateMapBuilder.d.ts +1 -0
- package/dist/templates/presets.d.ts +6 -2
- package/dist/templates/protocolAdapters.d.ts +4 -0
- package/dist/templates/protocolStepsBuilder.d.ts +1 -0
- package/dist/templates/qpcrAdapters.d.ts +4 -0
- package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +1 -0
- package/dist/templates/qpcrPlateBuilder.d.ts +1 -0
- package/dist/templates/reagentAdapters.d.ts +4 -0
- package/dist/templates/reagentListBuilder.d.ts +1 -0
- package/dist/templates/samplePrepAdapters.d.ts +3 -0
- package/dist/templates/samplePrepBuilder.d.ts +1 -0
- package/dist/templates/sampleSheetAdapters.d.ts +4 -0
- package/dist/templates/sampleSheetBuilder.d.ts +1 -0
- package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +1 -0
- package/dist/templates/templateEnvelopes.d.ts +8 -0
- package/dist/templates/templatePackCollectionBuilder.d.ts +1 -0
- package/dist/templates/templatePresetCollectionBuilder.d.ts +2 -0
- package/dist/templates/templateValidators.d.ts +12 -0
- package/dist/templates/timeCourseAdapters.d.ts +4 -0
- package/dist/templates/timeCourseBuilder.d.ts +1 -0
- package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +1 -0
- package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +1 -0
- package/dist/templates-BU1pet28.js +12304 -0
- package/dist/templates-BU1pet28.js.map +1 -0
- package/dist/types/auth.d.ts +0 -27
- package/dist/types/componentLabTypes.d.ts +14 -7
- package/dist/types/componentWorkflowTypes.d.ts +26 -0
- package/dist/types/components.d.ts +40 -17
- package/dist/types/fileBrowserTypes.d.ts +13 -0
- package/dist/types/filePicker.d.ts +19 -1
- package/dist/types/generated-ui.d.ts +13 -0
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +1 -1
- package/dist/types/instrument.d.ts +43 -15
- package/dist/types/platform.d.ts +2 -0
- package/dist/utils/color.d.ts +6 -1
- package/dist/utils/formModelSync.d.ts +1 -0
- package/dist/utils/plotlyTemplate.d.ts +3 -0
- package/dist/utils/rack.d.ts +16 -0
- package/dist/utils/sampleTypeMarker.d.ts +23 -0
- package/dist/{validation-ChMyixAf.js → validation-Dmp9Q5W0.js} +3032 -838
- package/dist/validation-Dmp9Q5W0.js.map +1 -0
- package/package.json +17 -23
- package/src/__stories__/experiment-helpers.ts +8 -4
- package/src/__tests__/components/ActionMenu.test.ts +66 -0
- package/src/__tests__/components/AlertBox.test.ts +21 -0
- package/src/__tests__/components/AppAvatarMenu.test.ts +25 -0
- package/src/__tests__/components/AppTopBar.test.ts +79 -0
- package/src/__tests__/components/AppTopBarPageSelector.test.ts +20 -0
- package/src/__tests__/components/AppTopBarPillNav.test.ts +74 -0
- package/src/__tests__/components/ArtifactSelectorModal.test.ts +20 -6
- package/src/__tests__/components/AuditTrail.test.ts +38 -0
- package/src/__tests__/components/BaseCheckbox.test.ts +43 -0
- package/src/__tests__/components/BaseInput.test.ts +43 -0
- package/src/__tests__/components/BaseModal.test.ts +90 -0
- package/src/__tests__/components/BaseRadioGroup.test.ts +8 -0
- package/src/__tests__/components/BaseSlider.test.ts +116 -0
- package/src/__tests__/components/BaseToggle.test.ts +7 -0
- package/src/__tests__/components/BatchProgressList.test.ts +22 -14
- package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +4 -4
- package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +1 -1
- package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +8 -8
- package/src/__tests__/components/BioTemplateRenderer.test.ts +2 -2
- package/src/__tests__/components/Breadcrumb.test.ts +45 -0
- package/src/__tests__/components/CalendarGridPanel.test.ts +14 -0
- package/src/__tests__/components/ChartContainer.test.ts +23 -0
- package/src/__tests__/components/ChemicalFormula.test.ts +15 -0
- package/src/__tests__/components/CollapsibleCard.test.ts +12 -9
- package/src/__tests__/components/ComponentBindingRenderer.test.ts +45 -17
- package/src/__tests__/components/ConcentrationInput.test.ts +17 -2
- package/src/__tests__/components/DataFrame.test.ts +107 -4
- package/src/__tests__/components/DataStates.test.ts +0 -16
- package/src/__tests__/components/DatePicker.test.ts +10 -0
- package/src/__tests__/components/DoseCalculator.test.ts +47 -0
- package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +37 -34
- package/src/__tests__/components/EmptyState.test.ts +16 -1
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +31 -3
- package/src/__tests__/components/ExperimentTimeline.test.ts +45 -0
- package/src/__tests__/components/FilePicker.state.test.ts +2 -2
- package/src/__tests__/components/FilePicker.test.ts +360 -13
- package/src/__tests__/components/FileUploader.test.ts +15 -0
- package/src/__tests__/components/FitPanel.test.ts +96 -0
- package/src/__tests__/components/FormulaInput.test.ts +97 -0
- package/src/__tests__/components/GeneratedPathInput.test.ts +168 -41
- package/src/__tests__/components/GeneratedPlotlyResult.test.ts +1 -1
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +47 -2
- package/src/__tests__/components/InstrumentStateBadge.test.ts +50 -0
- package/src/__tests__/components/JobsStatusTray.test.ts +27 -0
- package/src/__tests__/components/MoleculeInput.test.ts +78 -0
- package/src/__tests__/components/MultiSelect.test.ts +6 -0
- package/src/__tests__/components/PlateEditor.test.ts +1134 -0
- package/src/__tests__/components/PlateEditorBindingInternal.test.ts +64 -0
- package/src/__tests__/components/PlotlyChart.test.ts +147 -1
- package/src/__tests__/components/ProgressBar.test.ts +18 -0
- package/src/__tests__/components/ProtocolStepEditor.test.ts +106 -18
- package/src/__tests__/components/ProtocolStepParameterField.test.ts +74 -29
- package/src/__tests__/components/ReagentList.presentation.test.ts +10 -5
- package/src/__tests__/components/ReagentList.test.ts +23 -0
- package/src/__tests__/components/ResourcePickerListInternal.test.ts +141 -0
- package/src/__tests__/components/RetiredStyles.test.ts +0 -6
- package/src/__tests__/components/SampleHierarchyTree.test.ts +102 -0
- package/src/__tests__/components/SampleLegend.test.ts +18 -0
- package/src/__tests__/components/SampleSelector.test.ts +92 -1
- package/src/__tests__/components/SampleSelectorSampleRow.test.ts +5 -2
- package/src/__tests__/components/ScheduleCalendar.test.ts +32 -0
- package/src/__tests__/components/ScientificNumber.test.ts +113 -0
- package/src/__tests__/components/SearchableSelect.test.ts +21 -0
- package/src/__tests__/components/SecretInput.test.ts +6 -0
- package/src/__tests__/components/SegmentedControl.test.ts +14 -0
- package/src/__tests__/components/SequenceInput.test.ts +81 -0
- package/src/__tests__/components/SettingsModal.schema.test.ts +5 -5
- package/src/__tests__/components/SettingsModal.test.ts +371 -23
- package/src/__tests__/components/Skeleton.test.ts +23 -0
- package/src/__tests__/components/SmartGroupFieldRecipe.test.ts +12 -0
- package/src/__tests__/components/SmartGroupModal.test.ts +69 -0
- package/src/__tests__/components/StepWizard.test.ts +75 -0
- package/src/__tests__/components/TagsInput.test.ts +16 -0
- package/src/__tests__/components/TimePicker.test.ts +66 -0
- package/src/__tests__/components/TimeRangeInput.test.ts +83 -0
- package/src/__tests__/components/UnitInput.test.ts +147 -0
- package/src/__tests__/components/WellEditPopupInternal.test.ts +434 -2
- package/src/__tests__/components/WellPlate.decoration.test.ts +18 -0
- package/src/__tests__/components/WellPlate.geometry.test.ts +13 -0
- package/src/__tests__/components/WellPlate.interaction.test.ts +213 -0
- package/src/__tests__/components/WellPlate.keyboard.test.ts +24 -0
- package/src/__tests__/components/WellPlate.rendering.test.ts +38 -19
- package/src/__tests__/components/WellPlate.sampleDrop.test.ts +19 -0
- package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +58 -0
- package/src/__tests__/composables/createFilePickerAdapter.test.ts +114 -1
- package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +1 -1
- package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +1 -1
- package/src/__tests__/composables/useChemicalFormula.test.ts +60 -0
- package/src/__tests__/composables/useControlSchema.test.ts +15 -5
- package/src/__tests__/composables/useDropdownState.test.ts +20 -1
- package/src/__tests__/composables/useGeneratedAnalysis.test.ts +52 -0
- package/src/__tests__/composables/usePickerNavigation.test.ts +61 -1
- package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +18 -6
- package/src/__tests__/composables/useRackEditor.test.ts +270 -0
- package/src/__tests__/composables/useSequenceUtils.test.ts +28 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +44 -9
- package/src/__tests__/styles/baseControlsRules.test.ts +115 -0
- package/src/__tests__/styles/controlRefreshRules.test.ts +218 -0
- package/src/__tests__/styles/cssTokens.test.ts +7 -5
- package/src/__tests__/styles/darkModeRules.test.ts +47 -0
- package/src/__tests__/styles/menusShellRefresh.test.ts +75 -0
- package/src/__tests__/templates/templates.test.ts +65 -15
- package/src/__tests__/templates/templatesDeprecation.test.ts +78 -0
- package/src/__tests__/utils/permissions.test.ts +0 -68
- package/src/__tests__/utils/plotlyTemplate.test.ts +69 -0
- package/src/__tests__/utils/sampleTypeMarker.test.ts +54 -0
- package/src/components/ActionMenu.vue +44 -23
- package/src/components/AdductText.story.vue +18 -0
- package/src/components/AdductText.vue +7 -1
- package/src/components/AlertBox.vue +3 -7
- package/src/components/AppAvatarMenu.vue +12 -10
- package/src/components/AppSidebar.vue +1 -1
- package/src/components/AppTopBar.story.vue +47 -4
- package/src/components/AppTopBar.vue +16 -22
- package/src/components/ArtifactSelectorModal.story.vue +1 -1
- package/src/components/ArtifactSelectorModal.vue +48 -160
- package/src/components/AuditTrail.vue +26 -12
- package/src/components/AutoGroupModal.vue +1 -1
- package/src/components/BaseCheckbox.story.vue +58 -2
- package/src/components/BaseCheckbox.vue +21 -3
- package/src/components/BaseInput.story.vue +51 -0
- package/src/components/BaseInput.vue +62 -1
- package/src/components/BaseModal.story.vue +55 -0
- package/src/components/BaseModal.vue +83 -50
- package/src/components/BaseRadioGroup.vue +1 -1
- package/src/components/BaseSlider.story.vue +36 -0
- package/src/components/BaseSlider.vue +56 -8
- package/src/components/BaseToggle.vue +1 -7
- package/src/components/BatchProgressList.vue +50 -52
- package/src/components/BioTemplatePresetWorkspaceView.vue +1 -1
- package/src/components/Breadcrumb.story.vue +1 -1
- package/src/components/Breadcrumb.vue +50 -15
- package/src/components/ChartContainer.story.vue +42 -0
- package/src/components/ChartContainer.vue +22 -1
- package/src/components/ChemicalFormula.story.vue +11 -11
- package/src/components/ChemicalFormula.vue +1 -0
- package/src/components/CollapsibleCard.vue +12 -32
- package/src/components/ComponentBindingRenderer.vue +6 -8
- package/src/components/ConcentrationInput.story.vue +1 -1
- package/src/components/ConcentrationInput.vue +8 -14
- package/src/components/ControlWorkspaceView.vue +1 -1
- package/src/components/DataFrame.story.vue +45 -2
- package/src/components/DataFrame.vue +28 -13
- package/src/components/DatePicker.story.vue +11 -0
- package/src/components/DatePicker.vue +5 -5
- package/src/components/DateTimePicker.story.vue +1 -1
- package/src/components/DateTimePicker.vue +8 -5
- package/src/components/Divider.story.vue +1 -1
- package/src/components/DoseCalculator.vue +44 -51
- package/src/components/DoseCalculatorVolumeField.vue +22 -35
- package/src/components/DoseDesignWorkspaceView.vue +1 -1
- package/src/components/EmptyState.story.vue +4 -4
- package/src/components/EmptyState.vue +4 -2
- package/src/components/ExperimentPopover.story.vue +2 -2
- package/src/components/ExperimentPopover.vue +6 -4
- package/src/components/ExperimentSelectorModal.story.vue +2 -1
- package/src/components/ExperimentSelectorModal.vue +91 -261
- package/src/components/ExperimentTimeline.story.vue +29 -0
- package/src/components/ExperimentTimeline.vue +20 -0
- package/src/components/FilePicker.story.vue +65 -10
- package/src/components/FilePicker.vue +203 -121
- package/src/components/FitPanel.story.vue +72 -6
- package/src/components/FitPanel.vue +70 -18
- package/src/components/FormField.vue +2 -0
- package/src/components/FormulaInput.story.vue +6 -0
- package/src/components/FormulaInput.vue +49 -70
- package/src/components/GeneratedPathInput.story.vue +121 -8
- package/src/components/GeneratedPathInput.vue +155 -86
- package/src/components/GeneratedPlotlyResult.vue +1 -1
- package/src/components/GeneratedPluginView.vue +4 -4
- package/src/components/GeneratedResultRenderer.vue +19 -0
- package/src/components/InstrumentStateBadge.story.vue +41 -0
- package/src/components/InstrumentStateBadge.vue +24 -14
- package/src/components/JobsStatusTray.vue +30 -8
- package/src/components/MoleculeInput.vue +12 -7
- package/src/components/MultiSelect.vue +3 -3
- package/src/components/PlateEditor.story.vue +333 -0
- package/src/components/PlateEditor.vue +793 -0
- package/src/components/PlotlyChart.story.vue +37 -1
- package/src/components/PlotlyChart.vue +86 -16
- package/src/components/PluginWorkspaceView.props.ts +1 -7
- package/src/components/PluginWorkspaceView.vue +0 -4
- package/src/components/ProgressBar.story.vue +0 -30
- package/src/components/ProgressBar.vue +3 -53
- package/src/components/ProtocolStepEditor.story.vue +8 -0
- package/src/components/ProtocolStepEditor.vue +55 -145
- package/src/components/ProtocolStepParameterField.vue +55 -93
- package/src/components/ReagentList.presentation.ts +7 -6
- package/src/components/ReagentList.vue +18 -17
- package/src/components/SampleHierarchyTree.story.vue +19 -0
- package/src/components/SampleHierarchyTree.vue +47 -14
- package/src/components/SampleLegend.vue +12 -4
- package/src/components/SampleSelector.story.vue +5 -1
- package/src/components/SampleSelector.vue +25 -15
- package/src/components/SampleSelectorGroupNode.vue +10 -20
- package/src/components/SampleSelectorSampleRow.vue +7 -18
- package/src/components/ScheduleCalendar.story.vue +14 -0
- package/src/components/ScheduleCalendar.vue +13 -1
- package/src/components/ScientificNumber.story.vue +15 -2
- package/src/components/ScientificNumber.vue +22 -26
- package/src/components/SearchableSelect.vue +14 -9
- package/src/components/SecretInput.vue +1 -1
- package/src/components/SegmentedControl.story.vue +23 -0
- package/src/components/SegmentedControl.vue +6 -1
- package/src/components/SequenceInput.story.vue +27 -5
- package/src/components/SequenceInput.vue +74 -29
- package/src/components/SequenceProgressBar.vue +0 -1
- package/src/components/SettingsModal.schema.ts +4 -2
- package/src/components/SettingsModal.story.vue +83 -22
- package/src/components/SettingsModal.vue +338 -79
- package/src/components/Skeleton.vue +6 -35
- package/src/components/SmartGroup.types.ts +2 -2
- package/src/components/SmartGroupFieldRecipe.groups.ts +4 -1
- package/src/components/SmartGroupFieldRecipe.vue +14 -8
- package/src/components/SmartGroupManual.vue +14 -11
- package/src/components/StepWizard.vue +16 -19
- package/src/components/TagsInput.story.vue +16 -11
- package/src/components/TagsInput.vue +20 -3
- package/src/components/TimePicker.story.vue +38 -3
- package/src/components/TimePicker.vue +26 -11
- package/src/components/TimeRangeInput.story.vue +50 -1
- package/src/components/TimeRangeInput.vue +36 -17
- package/src/components/UnitInput.story.vue +1 -1
- package/src/components/UnitInput.vue +173 -107
- package/src/components/WellPlate.colors.ts +7 -6
- package/src/components/WellPlate.geometry.ts +3 -0
- package/src/components/WellPlate.interaction.ts +39 -5
- package/src/components/WellPlate.rendering.ts +21 -27
- package/src/components/WellPlate.sampleDrop.ts +20 -12
- package/src/components/WellPlate.story.vue +18 -7
- package/src/components/WellPlate.vue +28 -22
- package/src/components/index.ts +34 -31
- package/src/components/internal/AppTopBarPageSelectorInternal.vue +13 -7
- package/src/components/internal/AppTopBarPillNavInternal.vue +12 -7
- package/src/components/internal/CalendarGridPanelInternal.vue +1 -1
- package/src/components/internal/FilePickerListInternal.vue +318 -0
- package/src/components/internal/FilePickerPreviewInternal.vue +54 -52
- package/src/components/internal/PlateEditorBindingInternal.vue +37 -0
- package/src/components/internal/ResourcePickerListInternal.vue +237 -0
- package/src/components/internal/SettingsPaneHeadInternal.vue +41 -0
- package/src/components/internal/WellEditPopupInternal.vue +219 -146
- package/src/components/internal/WorkspaceShellInternal.vue +0 -6
- package/src/components/internal/filePickerPresentation.ts +30 -0
- package/src/components/internal/generatedJobsApi.ts +12 -0
- package/src/composables/autoGroup/index.ts +3 -0
- package/src/composables/controlSchemaAdapters.ts +0 -4
- package/src/composables/controlSchemaFormFields.ts +0 -4
- package/src/composables/controlSchemaTypes.ts +4 -43
- package/src/composables/createFilePickerAdapter.ts +90 -22
- package/src/composables/filePicker/localFiles.ts +1 -0
- package/src/composables/filePicker/usePickerNavigation.ts +29 -2
- package/src/composables/index.ts +2 -71
- package/src/composables/pluginWorkspaceModel.ts +0 -3
- package/src/composables/useAutoGroup.ts +10 -0
- package/src/composables/useBioTemplateComponents.ts +15 -3
- package/src/composables/useBioTemplateControls.ts +5 -1
- package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
- package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
- package/src/composables/useBioTemplateWorkspace.ts +5 -1
- package/src/composables/useChemicalFormula.ts +39 -13
- package/src/composables/useDropdownState.ts +6 -1
- package/src/composables/useExperimentSave.ts +5 -1
- package/src/composables/useFileBrowser.ts +3 -2
- package/src/composables/useFilePicker.ts +98 -13
- package/src/composables/useFocusTrap.ts +9 -6
- package/src/composables/useGeneratedAnalysis.ts +38 -0
- package/src/composables/useGroupAssignment.ts +5 -1
- package/src/composables/useJobsStatusTray.ts +5 -5
- package/src/composables/useMenuKeyboard.ts +5 -3
- package/src/composables/usePlatformFilePickerAdapter.ts +26 -4
- package/src/composables/usePluginClient.ts +1 -1
- package/src/composables/usePluginWorkspace.ts +0 -1
- package/src/composables/useRackEditor.ts +202 -12
- package/src/composables/useSequenceUtils.ts +20 -2
- package/src/composables/useTemplateCollection.ts +5 -1
- package/src/composables/workspaceRecipes.ts +1 -0
- package/src/index.ts +9 -3
- package/src/instrument.ts +6 -0
- package/src/lcms.ts +11 -0
- package/src/permissions.ts +2 -59
- package/src/styles/components/action-menu.css +9 -38
- package/src/styles/components/adduct-text.css +15 -3
- package/src/styles/components/alert-box.css +19 -70
- package/src/styles/components/app-avatar-menu.css +22 -57
- package/src/styles/components/app-container.css +4 -4
- package/src/styles/components/app-layout.css +18 -18
- package/src/styles/components/app-page-selector.css +50 -105
- package/src/styles/components/app-pill-nav.css +24 -42
- package/src/styles/components/app-sidebar.css +2 -2
- package/src/styles/components/app-top-bar.css +78 -55
- package/src/styles/components/artifact-selector-modal.css +1 -211
- package/src/styles/components/audit-trail.css +45 -38
- package/src/styles/components/avatar.css +1 -1
- package/src/styles/components/batch-progress-list.css +179 -95
- package/src/styles/components/breadcrumb.css +34 -15
- package/src/styles/components/calendar.css +2 -8
- package/src/styles/components/chart-container.css +81 -38
- package/src/styles/components/checkbox.css +8 -6
- package/src/styles/components/chemical-formula.css +8 -6
- package/src/styles/components/collapsible-card.css +6 -46
- package/src/styles/components/concentration-input.css +1 -10
- package/src/styles/components/dataframe.css +48 -67
- package/src/styles/components/date-picker.css +124 -62
- package/src/styles/components/datetime-picker.css +81 -47
- package/src/styles/components/divider.css +2 -4
- package/src/styles/components/dose-calculator.css +9 -135
- package/src/styles/components/empty-state.css +26 -35
- package/src/styles/components/experiment-code-badge.css +1 -1
- package/src/styles/components/experiment-popover.css +16 -83
- package/src/styles/components/experiment-selector-modal.css +9 -226
- package/src/styles/components/experiment-timeline.css +120 -50
- package/src/styles/components/file-picker.css +323 -299
- package/src/styles/components/file-uploader.css +4 -6
- package/src/styles/components/fit-panel.css +108 -22
- package/src/styles/components/form-field.css +6 -4
- package/src/styles/components/formula-input.css +121 -48
- package/src/styles/components/group-assigner.css +1 -3
- package/src/styles/components/icon-button.css +15 -37
- package/src/styles/components/input.css +91 -2
- package/src/styles/components/instrument-monitor.css +37 -447
- package/src/styles/components/jobs-status-tray.css +82 -61
- package/src/styles/components/loading-spinner.css +18 -0
- package/src/styles/components/mobile-support-gate.css +15 -17
- package/src/styles/components/modal.css +44 -33
- package/src/styles/components/molecule-input.css +31 -16
- package/src/styles/components/multi-select.css +33 -29
- package/src/styles/components/number-input.css +1 -1
- package/src/styles/components/plate-editor.css +497 -0
- package/src/styles/components/popover.css +162 -0
- package/src/styles/components/progress-bar.css +1 -70
- package/src/styles/components/protocol-step-editor.css +21 -333
- package/src/styles/components/radio-group.css +9 -18
- package/src/styles/components/reagent-editor.css +3 -7
- package/src/styles/components/reagent-list.css +63 -69
- package/src/styles/components/resource-card.css +4 -6
- package/src/styles/components/resource-picker-list.css +212 -0
- package/src/styles/components/sample-hierarchy-tree.css +83 -65
- package/src/styles/components/sample-legend.css +18 -7
- package/src/styles/components/sample-selector.css +41 -68
- package/src/styles/components/schedule-calendar.css +59 -54
- package/src/styles/components/scientific-number.css +72 -18
- package/src/styles/components/searchable-select.css +17 -26
- package/src/styles/components/secret-input.css +20 -23
- package/src/styles/components/section-card.css +3 -5
- package/src/styles/components/segmented-control.css +14 -1
- package/src/styles/components/select.css +19 -8
- package/src/styles/components/sequence-input.css +85 -37
- package/src/styles/components/sequence-progress-bar.css +18 -37
- package/src/styles/components/settings-modal.css +683 -34
- package/src/styles/components/skeleton.css +24 -23
- package/src/styles/components/slider.css +74 -8
- package/src/styles/components/smart-group.css +27 -39
- package/src/styles/components/status-indicator.css +1 -1
- package/src/styles/components/step-wizard.css +62 -99
- package/src/styles/components/tabs.css +2 -6
- package/src/styles/components/tags-input.css +64 -54
- package/src/styles/components/textarea.css +2 -2
- package/src/styles/components/time-picker.css +67 -38
- package/src/styles/components/time-range-input.css +16 -18
- package/src/styles/components/toast.css +1 -1
- package/src/styles/components/toggle.css +21 -31
- package/src/styles/components/tooltip.css +13 -15
- package/src/styles/components/unit-input.css +86 -36
- package/src/styles/components/well-edit-popup.css +111 -189
- package/src/styles/components/well-plate.css +7 -7
- package/src/styles/index.css +5 -7
- package/src/styles/variables.css +35 -7
- package/src/templates/adapters.ts +4 -0
- package/src/templates/assayMatrixAdapters.ts +8 -1
- package/src/templates/assayMatrixBuilder.ts +1 -0
- package/src/templates/builderPresetControls.ts +1 -0
- package/src/templates/calibrationCurveAdapters.ts +3 -0
- package/src/templates/calibrationCurveBuilder.ts +1 -0
- package/src/templates/catalog.ts +6 -2
- package/src/templates/componentBindingCatalog.ts +1 -1
- package/src/templates/componentBindings.ts +31 -5
- package/src/templates/componentDoseResponseProps.ts +0 -1
- package/src/templates/componentPlateHelpers.ts +22 -1
- package/src/templates/componentPlateMapProps.ts +7 -5
- package/src/templates/componentQpcrPlateProps.ts +0 -1
- package/src/templates/controlSchemas.ts +9 -0
- package/src/templates/defaultBioTemplateBuilder.ts +1 -0
- package/src/templates/doseResponseAdapters.ts +2 -0
- package/src/templates/doseResponseBuilder.ts +1 -0
- package/src/templates/elisaAssayCollectionBuilder.ts +1 -0
- package/src/templates/flowCytometryAssayCollectionBuilder.ts +1 -0
- package/src/templates/flowCytometryPanelBuilder.ts +1 -0
- package/src/templates/flowPanelAdapters.ts +3 -0
- package/src/templates/index.ts +4 -0
- package/src/templates/instrumentRunAdapters.ts +13 -2
- package/src/templates/instrumentRunBuilder.ts +1 -0
- package/src/templates/lcmsBatchCollectionBuilder.ts +1 -0
- package/src/templates/packs.ts +4 -0
- package/src/templates/plateMapAdapters.ts +2 -0
- package/src/templates/plateMapBuilder.ts +1 -0
- package/src/templates/presets.ts +6 -2
- package/src/templates/protocolAdapters.ts +4 -0
- package/src/templates/protocolStepsBuilder.ts +1 -0
- package/src/templates/qpcrAdapters.ts +4 -0
- package/src/templates/qpcrExpressionCollectionBuilder.ts +1 -0
- package/src/templates/qpcrPlateBuilder.ts +1 -0
- package/src/templates/reagentAdapters.ts +4 -0
- package/src/templates/reagentListBuilder.ts +1 -0
- package/src/templates/samplePrepAdapters.ts +3 -0
- package/src/templates/samplePrepBuilder.ts +1 -0
- package/src/templates/sampleSheetAdapters.ts +4 -0
- package/src/templates/sampleSheetBuilder.ts +1 -0
- package/src/templates/targetedMetabolomicsCollectionBuilder.ts +1 -0
- package/src/templates/templateEnvelopes.ts +8 -0
- package/src/templates/templatePackCollectionBuilder.ts +1 -0
- package/src/templates/templatePresetCollectionBuilder.ts +2 -0
- package/src/templates/templateValidators.ts +12 -0
- package/src/templates/timeCourseAdapters.ts +4 -0
- package/src/templates/timeCourseBuilder.ts +1 -0
- package/src/templates/wellPlateScreenCollectionBuilder.ts +1 -0
- package/src/templates/westernBlotAssayCollectionBuilder.ts +1 -0
- package/src/types/auth.ts +0 -37
- package/src/types/componentLabTypes.ts +16 -13
- package/src/types/componentWorkflowTypes.ts +29 -0
- package/src/types/components.ts +43 -20
- package/src/types/fileBrowserTypes.ts +15 -0
- package/src/types/filePicker.ts +19 -1
- package/src/types/generated-ui.ts +15 -0
- package/src/types/index.ts +12 -11
- package/src/types/instrument.ts +47 -15
- package/src/types/platform.ts +2 -0
- package/src/utils/color.ts +16 -1
- package/src/utils/formModelSync.ts +1 -1
- package/src/utils/plotlyTemplate.ts +39 -0
- package/src/utils/rack.ts +16 -0
- package/src/utils/sampleTypeMarker.ts +44 -0
- package/dist/ExperimentPopover-CJdNlCZb.js +0 -451
- package/dist/ExperimentPopover-CJdNlCZb.js.map +0 -1
- package/dist/ExperimentSelectorModal-DHE9k8TP.js +0 -507
- package/dist/ExperimentSelectorModal-DHE9k8TP.js.map +0 -1
- package/dist/SettingsModal-DELMkUFR.js +0 -492
- package/dist/SettingsModal-DELMkUFR.js.map +0 -1
- package/dist/Skeleton-jhF9wUkU.js +0 -485
- package/dist/Skeleton-jhF9wUkU.js.map +0 -1
- package/dist/__tests__/composables/usePluginConfig.test.d.ts +0 -15
- package/dist/chunk-BoAXSpZd.js +0 -33
- package/dist/components/AppPluginSwitcher.vue.d.ts +0 -40
- package/dist/components/ColorSlider.vue.d.ts +0 -34
- package/dist/components/DropdownButton.vue.d.ts +0 -49
- package/dist/components/FileBrowserModal.vue.d.ts +0 -99
- package/dist/components/InstrumentAlertLog.vue.d.ts +0 -22
- package/dist/components/InstrumentStatusCard.vue.d.ts +0 -13
- package/dist/components/LcmsSequenceTable.vue.d.ts +0 -54
- package/dist/components/PlateMapEditor.vue.d.ts +0 -50
- package/dist/components/RackEditor.vue.d.ts +0 -78
- package/dist/components/fileBrowserPresentation.d.ts +0 -10
- package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +0 -34
- package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +0 -25
- package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +0 -26
- package/dist/components/internal/PlateMapEditorToolbarInternal.vue.d.ts +0 -28
- package/dist/components-Bbg_gtzF.js.map +0 -1
- package/dist/composables/useAsync.d.ts +0 -132
- package/dist/composables/useAuth.d.ts +0 -47
- package/dist/composables/useCommandHistory.d.ts +0 -33
- package/dist/composables/useOptimisticMutation.d.ts +0 -32
- package/dist/composables/usePasskey.d.ts +0 -10
- package/dist/composables/usePluginConfig.d.ts +0 -27
- package/dist/composables/useResourceCrud.d.ts +0 -44
- package/dist/composables/useWellPainting.d.ts +0 -39
- package/dist/composables/useWellPlateAdapter.d.ts +0 -40
- package/dist/composables/useWellPlateEditor.d.ts +0 -33
- package/dist/composables/useWellPlateValidation.d.ts +0 -31
- package/dist/composables-BCbYb2lA.js +0 -2356
- package/dist/composables-BCbYb2lA.js.map +0 -1
- package/dist/errors-BLuqMee5.js.map +0 -1
- package/dist/experiment-CVDRAnqp.js +0 -90
- package/dist/experiment-CVDRAnqp.js.map +0 -1
- package/dist/experiment-utils-CV2Wza3z.js.map +0 -1
- package/dist/plotly.min-c2Sez60c.js +0 -180634
- package/dist/plotly.min-c2Sez60c.js.map +0 -1
- package/dist/templates-NuaNHohp.js +0 -5260
- package/dist/templates-NuaNHohp.js.map +0 -1
- package/dist/useControlSchema-vLiRPUmj.js +0 -7301
- package/dist/useControlSchema-vLiRPUmj.js.map +0 -1
- package/dist/useDropdownState-C7hRiVQf.js +0 -63
- package/dist/useDropdownState-C7hRiVQf.js.map +0 -1
- package/dist/useExperimentSelector-G_CAOFTX.js +0 -328
- package/dist/useExperimentSelector-G_CAOFTX.js.map +0 -1
- package/dist/useFormBuilder-D37ajgS8.js +0 -729
- package/dist/useFormBuilder-D37ajgS8.js.map +0 -1
- package/dist/validation-ChMyixAf.js.map +0 -1
- package/src/__tests__/components/AppPluginSwitcher.test.ts +0 -44
- package/src/__tests__/components/DropdownButton.test.ts +0 -628
- package/src/__tests__/components/FileBrowserModal.test.ts +0 -460
- package/src/__tests__/components/InstrumentAlertLog.test.ts +0 -59
- package/src/__tests__/components/LcmsSequenceTable.test.ts +0 -79
- package/src/__tests__/components/PlateMapEditorToolbarInternal.test.ts +0 -54
- package/src/__tests__/components/RackEditor.test.ts +0 -169
- package/src/__tests__/composables/useAuth.test.ts +0 -233
- package/src/__tests__/composables/useCommandHistory.test.ts +0 -43
- package/src/__tests__/composables/useOptimisticMutation.test.ts +0 -40
- package/src/__tests__/composables/usePluginConfig.test.ts +0 -497
- package/src/__tests__/composables/useResourceCrud.test.ts +0 -56
- package/src/__tests__/composables/useWellPainting.test.ts +0 -52
- package/src/__tests__/composables/useWellPlateAdapter.test.ts +0 -50
- package/src/__tests__/composables/useWellPlateValidation.test.ts +0 -42
- package/src/components/AppPluginSwitcher.story.vue +0 -87
- package/src/components/AppPluginSwitcher.vue +0 -134
- package/src/components/ColorSlider.story.vue +0 -120
- package/src/components/ColorSlider.vue +0 -160
- package/src/components/DropdownButton.story.vue +0 -102
- package/src/components/DropdownButton.vue +0 -181
- package/src/components/FileBrowserModal.story.vue +0 -203
- package/src/components/FileBrowserModal.vue +0 -384
- package/src/components/InstrumentAlertLog.vue +0 -187
- package/src/components/InstrumentStatusCard.vue +0 -184
- package/src/components/LcmsSequenceTable.vue +0 -222
- package/src/components/PlateMapEditor.story.vue +0 -92
- package/src/components/PlateMapEditor.vue +0 -423
- package/src/components/RackEditor.story.vue +0 -100
- package/src/components/RackEditor.vue +0 -429
- package/src/components/fileBrowserPresentation.ts +0 -39
- package/src/components/internal/FileBrowserDialogInternal.vue +0 -75
- package/src/components/internal/FileBrowserListingInternal.vue +0 -197
- package/src/components/internal/FileBrowserToolbarInternal.vue +0 -136
- package/src/components/internal/FilePickerTreeInternal.vue +0 -238
- package/src/components/internal/PlateMapEditorToolbarInternal.vue +0 -128
- package/src/composables/useAsync.ts +0 -327
- package/src/composables/useAuth.ts +0 -458
- package/src/composables/useCommandHistory.ts +0 -117
- package/src/composables/useOptimisticMutation.ts +0 -97
- package/src/composables/usePasskey.ts +0 -216
- package/src/composables/usePluginConfig.ts +0 -252
- package/src/composables/useResourceCrud.ts +0 -235
- package/src/composables/useWellPainting.ts +0 -167
- package/src/composables/useWellPlateAdapter.ts +0 -151
- package/src/composables/useWellPlateEditor.ts +0 -415
- package/src/composables/useWellPlateValidation.ts +0 -89
- package/src/plotly-dist.d.ts +0 -3
- package/src/styles/components/app-plugin-switcher.css +0 -196
- package/src/styles/components/color-slider.css +0 -110
- package/src/styles/components/dropdown-button.css +0 -280
- package/src/styles/components/file-browser-modal.css +0 -489
- package/src/styles/components/lcms-sequence-table.css +0 -204
- package/src/styles/components/plate-map-editor.css +0 -464
- package/src/styles/components/rack-editor.css +0 -287
- /package/dist/__tests__/components/{AppPluginSwitcher.test.d.ts → AlertBox.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DropdownButton.test.d.ts → AuditTrail.test.d.ts} +0 -0
- /package/dist/__tests__/components/{FileBrowserModal.test.d.ts → BaseCheckbox.test.d.ts} +0 -0
- /package/dist/__tests__/components/{InstrumentAlertLog.test.d.ts → BaseSlider.test.d.ts} +0 -0
- /package/dist/__tests__/components/{LcmsSequenceTable.test.d.ts → DoseCalculator.test.d.ts} +0 -0
- /package/dist/__tests__/components/{PlateMapEditorToolbarInternal.test.d.ts → FileUploader.test.d.ts} +0 -0
- /package/dist/__tests__/components/{RackEditor.test.d.ts → FitPanel.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useAuth.test.d.ts → components/FormulaInput.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useCommandHistory.test.d.ts → components/InstrumentStateBadge.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useOptimisticMutation.test.d.ts → components/MoleculeInput.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useResourceCrud.test.d.ts → components/PlateEditor.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useWellPainting.test.d.ts → components/PlateEditorBindingInternal.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useWellPlateAdapter.test.d.ts → components/ResourcePickerListInternal.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useWellPlateValidation.test.d.ts → components/SampleLegend.test.d.ts} +0 -0
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
import type { PickerAdapter, PickerNode, PickerRequest } from '../types/filePicker'
|
|
2
|
-
import type {
|
|
1
|
+
import type { PickerAdapter, PickerNode, PickerRequest, PickerSearchResult } from '../types/filePicker'
|
|
2
|
+
import type {
|
|
3
|
+
FileBrowserLocation,
|
|
4
|
+
FileDirectoryListing,
|
|
5
|
+
FileDirectoryTree,
|
|
6
|
+
FileEntry,
|
|
7
|
+
FileSearchResult,
|
|
8
|
+
ServerMount,
|
|
9
|
+
} from '../types/fileBrowserTypes'
|
|
3
10
|
import { pickerFormat } from './filePicker/validation'
|
|
4
11
|
|
|
5
12
|
export interface FilePickerTransport {
|
|
6
13
|
listMounts(request?: PickerRequest): Promise<ServerMount[]>
|
|
7
14
|
browse(location: FileBrowserLocation, request?: PickerRequest): Promise<FileDirectoryListing>
|
|
15
|
+
/** `GET …/filesystem/tree`: one request fills the cache for the subfolders too. */
|
|
16
|
+
tree?(location: FileBrowserLocation, request?: PickerRequest): Promise<FileDirectoryTree>
|
|
17
|
+
/** `GET …/filesystem/search`: replaces the folder-by-folder search walk. */
|
|
18
|
+
search?(
|
|
19
|
+
location: FileBrowserLocation,
|
|
20
|
+
query: string,
|
|
21
|
+
recursive: boolean,
|
|
22
|
+
request?: PickerRequest,
|
|
23
|
+
): Promise<FileSearchResult>
|
|
8
24
|
}
|
|
9
25
|
export interface FilePickerAdapterOptions {
|
|
10
26
|
/** Show this directory's contents directly and prevent navigation outside it. */
|
|
@@ -82,36 +98,90 @@ export function createFilePickerAdapter(
|
|
|
82
98
|
unavailableReason: mount.available === false ? 'This mount is offline.' : undefined,
|
|
83
99
|
}
|
|
84
100
|
})
|
|
101
|
+
} else if (transport.tree) {
|
|
102
|
+
const tree = await transport.tree(location, request)
|
|
103
|
+
check(request, token)
|
|
104
|
+
for (const listing of tree.listings ?? []) {
|
|
105
|
+
const at = { mount_id: listing.mount_id, path: listing.path }
|
|
106
|
+
validateLocation(at)
|
|
107
|
+
if (at.mount_id !== location.mount_id) throw new Error('Invalid file picker directory entry.')
|
|
108
|
+
// A capped subfolder is read on its own when opened, and reports the cap then.
|
|
109
|
+
if (!listing.truncated) listings.set(encodePlatformPickerPath(at.mount_id, at.path), toNodes(at, listing))
|
|
110
|
+
}
|
|
111
|
+
const cached = listings.get(key)
|
|
112
|
+
if (!cached)
|
|
113
|
+
throw new Error('This directory exceeds the server listing limit. Choose a smaller data directory.')
|
|
114
|
+
return cached
|
|
85
115
|
} else {
|
|
86
116
|
const listing = await transport.browse(location, request)
|
|
87
117
|
check(request, token)
|
|
88
118
|
if (listing.truncated)
|
|
89
119
|
throw new Error('This directory exceeds the server listing limit. Choose a smaller data directory.')
|
|
90
|
-
|
|
91
|
-
nodes = (listing.entries ?? []).map((entry): PickerNode => {
|
|
92
|
-
if (!isRelativePath(entry.path) || !entry.name ||
|
|
93
|
-
entry.path !== `${location.path ? `${location.path}/` : ''}${entry.name}` ||
|
|
94
|
-
entry.name.includes('/')) throw new Error('Invalid file picker directory entry.')
|
|
95
|
-
const common = {
|
|
96
|
-
path: encodePlatformPickerPath(location.mount_id, entry.path),
|
|
97
|
-
parentPath: atRoot ? null : key,
|
|
98
|
-
parentName: `${mountLabels.get(location.mount_id) ?? location.mount_id}${location.path ? ` / ${location.path}` : ''}`,
|
|
99
|
-
name: entry.name, bytes: entry.size_bytes,
|
|
100
|
-
}
|
|
101
|
-
return entry.kind === 'directory'
|
|
102
|
-
// Counts may include only matching formats, not nested directories.
|
|
103
|
-
? { ...common, kind: 'folder' }
|
|
104
|
-
: { ...common, kind: 'file', format: pickerFormat(entry.name) }
|
|
105
|
-
})
|
|
120
|
+
nodes = toNodes(location, listing)
|
|
106
121
|
}
|
|
107
122
|
listings.set(key, nodes)
|
|
108
123
|
return nodes
|
|
109
124
|
}
|
|
125
|
+
function toNodes(location: FileBrowserLocation, listing: FileDirectoryListing): PickerNode[] {
|
|
126
|
+
return (listing.entries ?? []).map((entry) => {
|
|
127
|
+
if (entry.path !== `${location.path ? `${location.path}/` : ''}${entry.name}`)
|
|
128
|
+
throw new Error('Invalid file picker directory entry.')
|
|
129
|
+
return toNode(location.mount_id, entry)
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
/** One entry, parented on the folder its mount-relative path names. */
|
|
133
|
+
function toNode(mountId: string, entry: FileEntry): PickerNode {
|
|
134
|
+
if (!isRelativePath(entry.path) || !entry.name || entry.name.includes('/') ||
|
|
135
|
+
(entry.path !== entry.name && !entry.path.endsWith(`/${entry.name}`)))
|
|
136
|
+
throw new Error('Invalid file picker directory entry.')
|
|
137
|
+
const parent = entry.path.slice(0, Math.max(0, entry.path.length - entry.name.length - 1))
|
|
138
|
+
const atRoot = root && mountId === root.mount_id && parent === root.path
|
|
139
|
+
const common = {
|
|
140
|
+
path: encodePlatformPickerPath(mountId, entry.path),
|
|
141
|
+
parentPath: atRoot ? null : encodePlatformPickerPath(mountId, parent),
|
|
142
|
+
parentName: `${mountLabels.get(mountId) ?? mountId}${parent ? ` / ${parent}` : ''}`,
|
|
143
|
+
name: entry.name, bytes: entry.size_bytes, modifiedAt: entry.modified_at,
|
|
144
|
+
}
|
|
145
|
+
return entry.kind === 'directory'
|
|
146
|
+
// Counts may include only matching formats, not nested directories.
|
|
147
|
+
? { ...common, kind: 'folder' }
|
|
148
|
+
: { ...common, kind: 'file', format: pickerFormat(entry.name) }
|
|
149
|
+
}
|
|
150
|
+
async function serverSearch(
|
|
151
|
+
query: string,
|
|
152
|
+
scope: { path: string; recursive: boolean },
|
|
153
|
+
request: PickerRequest | undefined,
|
|
154
|
+
): Promise<PickerNode[] | PickerSearchResult> {
|
|
155
|
+
const token = begin(request)
|
|
156
|
+
const decoded = scope.path ? decodePlatformPickerPath(scope.path) : undefined
|
|
157
|
+
const location = decoded ? { mount_id: decoded.mountId, path: decoded.path } : root!
|
|
158
|
+
validateLocation(location)
|
|
159
|
+
const result = await transport.search!(location, query, scope.recursive, request)
|
|
160
|
+
check(request, token)
|
|
161
|
+
const prefix = location.path ? `${location.path}/` : ''
|
|
162
|
+
const nodes = (result.entries ?? []).map((entry) => {
|
|
163
|
+
// "This folder" searches may return direct children only.
|
|
164
|
+
if (!entry.path.startsWith(prefix) || (!scope.recursive && entry.path.slice(prefix.length).includes('/')))
|
|
165
|
+
throw new Error('Invalid file picker directory entry.')
|
|
166
|
+
return toNode(location.mount_id, entry)
|
|
167
|
+
})
|
|
168
|
+
return result.truncated ? { nodes, truncated: true } : nodes
|
|
169
|
+
}
|
|
110
170
|
return {
|
|
171
|
+
mounts: !root,
|
|
172
|
+
mountOf(path) {
|
|
173
|
+
try {
|
|
174
|
+
return encodePlatformPickerPath(decodePlatformPickerPath(path).mountId)
|
|
175
|
+
} catch {
|
|
176
|
+
return undefined // initialPath is caller input; the listing reports a bad one.
|
|
177
|
+
}
|
|
178
|
+
},
|
|
111
179
|
invalidate,
|
|
112
180
|
listRoot: async (request) => read('', request, begin(request)),
|
|
113
181
|
listChildren: async (path, request) => read(path, request, begin(request)),
|
|
114
182
|
async search(query, scope, request) {
|
|
183
|
+
// The mount list itself has no server to search, so it keeps the walk.
|
|
184
|
+
if (transport.search && (scope.path || root)) return serverSearch(query, scope, request)
|
|
115
185
|
const token = begin(request)
|
|
116
186
|
const matches: PickerNode[] = []
|
|
117
187
|
const queue = [scope.path]
|
|
@@ -123,8 +193,7 @@ export function createFilePickerAdapter(
|
|
|
123
193
|
const path = queue.shift()!
|
|
124
194
|
if (visited.has(path)) continue
|
|
125
195
|
visited.add(path)
|
|
126
|
-
if (visited.size > 500)
|
|
127
|
-
throw new Error('Search reached its folder limit. Search a smaller location or turn off Subfolders.')
|
|
196
|
+
if (visited.size > 500) return { nodes: matches, truncated: true }
|
|
128
197
|
const nodes = await read(path, currentRequest, token)
|
|
129
198
|
check(request, token)
|
|
130
199
|
if (currentRequest?.refresh) {
|
|
@@ -136,8 +205,7 @@ export function createFilePickerAdapter(
|
|
|
136
205
|
if (scope.recursive && node.kind === 'folder' && !node.unavailableReason)
|
|
137
206
|
queue.push(node.path)
|
|
138
207
|
}
|
|
139
|
-
if (matches.length > 10000)
|
|
140
|
-
throw new Error('Too many search results. Use a more specific search.')
|
|
208
|
+
if (matches.length > 10000) return { nodes: matches.slice(0, 10000), truncated: true }
|
|
141
209
|
}
|
|
142
210
|
return matches
|
|
143
211
|
},
|
|
@@ -3,13 +3,33 @@ import type {
|
|
|
3
3
|
PickerAdapter,
|
|
4
4
|
PickerNode,
|
|
5
5
|
PickerRequest,
|
|
6
|
+
PickerSort,
|
|
6
7
|
PickerTreeRow,
|
|
7
8
|
} from '../../types/filePicker'
|
|
8
9
|
|
|
10
|
+
const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare
|
|
11
|
+
/** Folders first; undated rows go last in either time order. */
|
|
12
|
+
function ordered(items: PickerNode[], sort: PickerSort | undefined): PickerNode[] {
|
|
13
|
+
if (!sort) return items
|
|
14
|
+
// Parse each timestamp once rather than on every comparison.
|
|
15
|
+
const times = new Map(items.map((node) => [node, node.modifiedAt ? Date.parse(node.modifiedAt) : NaN]))
|
|
16
|
+
const time = (node: PickerNode) => times.get(node)!
|
|
17
|
+
return [...items].sort((a, b) => {
|
|
18
|
+
if (a.kind !== b.kind) return a.kind === 'folder' ? -1 : 1
|
|
19
|
+
if (sort === 'name') return byName(a.name, b.name)
|
|
20
|
+
if (sort === 'name-desc') return byName(b.name, a.name)
|
|
21
|
+
const [ta, tb] = [time(a), time(b)]
|
|
22
|
+
if (Number.isNaN(ta) || Number.isNaN(tb))
|
|
23
|
+
return Number.isNaN(ta) === Number.isNaN(tb) ? byName(a.name, b.name) : Number.isNaN(ta) ? 1 : -1
|
|
24
|
+
return (sort === 'newest' ? tb - ta : ta - tb) || byName(a.name, b.name)
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
9
28
|
export function usePickerNavigation(
|
|
10
29
|
adapter: () => PickerAdapter,
|
|
11
30
|
request: () => PickerRequest,
|
|
12
31
|
systemFilter: (node: PickerNode) => boolean = () => true,
|
|
32
|
+
sort: () => PickerSort | undefined = () => undefined,
|
|
13
33
|
) {
|
|
14
34
|
const path = shallowRef('')
|
|
15
35
|
const trail = ref<{ path: string; label: string }[]>([])
|
|
@@ -21,6 +41,8 @@ export function usePickerNavigation(
|
|
|
21
41
|
const expansionErrors = ref(new Map<string, string>())
|
|
22
42
|
const loading = shallowRef(false)
|
|
23
43
|
const error = shallowRef('')
|
|
44
|
+
/** True when the current search results stopped at an adapter limit. */
|
|
45
|
+
const truncated = shallowRef(false)
|
|
24
46
|
let epoch = 0
|
|
25
47
|
let navigation = 0
|
|
26
48
|
let controller: AbortController | undefined
|
|
@@ -154,14 +176,17 @@ export function usePickerNavigation(
|
|
|
154
176
|
const options = { ...request(), ...(refresh && { refresh }), signal: controller.signal }
|
|
155
177
|
loading.value = true
|
|
156
178
|
error.value = ''
|
|
179
|
+
truncated.value = false
|
|
157
180
|
entries.value = []
|
|
158
181
|
try {
|
|
159
|
-
const
|
|
182
|
+
const found = query.trim()
|
|
160
183
|
? await adapter().search(query.trim(), { path: path.value, recursive }, options)
|
|
161
184
|
: path.value
|
|
162
185
|
? await loadChildren(path.value, [], refresh)
|
|
163
186
|
: await adapter().listRoot(options)
|
|
164
187
|
if (token !== navigation) return
|
|
188
|
+
const items = Array.isArray(found) ? found : found.nodes
|
|
189
|
+
truncated.value = !Array.isArray(found) && found.truncated
|
|
165
190
|
register(items, query.trim() ? undefined : path.value)
|
|
166
191
|
entries.value = items
|
|
167
192
|
if (!query.trim()) prefetch(items)
|
|
@@ -215,8 +240,9 @@ export function usePickerNavigation(
|
|
|
215
240
|
}
|
|
216
241
|
const rows = computed(() => {
|
|
217
242
|
const result: PickerTreeRow[] = []
|
|
243
|
+
const order = sort()
|
|
218
244
|
function visit(items: PickerNode[], depth: number, ancestors: Set<string>) {
|
|
219
|
-
for (const item of items) {
|
|
245
|
+
for (const item of ordered(items, order)) {
|
|
220
246
|
if (ancestors.has(item.path) || depth > 30) continue
|
|
221
247
|
const node = nodes.value.get(item.path) ?? item
|
|
222
248
|
if (!isAllowed(node)) continue
|
|
@@ -246,6 +272,7 @@ export function usePickerNavigation(
|
|
|
246
272
|
expansionErrors,
|
|
247
273
|
loading,
|
|
248
274
|
error,
|
|
275
|
+
truncated,
|
|
249
276
|
rows,
|
|
250
277
|
isAllowed,
|
|
251
278
|
clear,
|
package/src/composables/index.ts
CHANGED
|
@@ -4,8 +4,6 @@ export {
|
|
|
4
4
|
type ApiClientOptions,
|
|
5
5
|
type UseApiReturn,
|
|
6
6
|
} from './useApi'
|
|
7
|
-
export { useAuth } from './useAuth'
|
|
8
|
-
export { usePasskey } from './usePasskey'
|
|
9
7
|
export { useTheme } from './useTheme'
|
|
10
8
|
export { useToast } from './useToast'
|
|
11
9
|
export { usePlatformContext } from './usePlatformContext'
|
|
@@ -32,19 +30,6 @@ export {
|
|
|
32
30
|
type FieldState,
|
|
33
31
|
type UseFormReturn,
|
|
34
32
|
} from './useForm'
|
|
35
|
-
export {
|
|
36
|
-
useAsync,
|
|
37
|
-
useAsyncBatch,
|
|
38
|
-
type AsyncError,
|
|
39
|
-
type AsyncState,
|
|
40
|
-
type UseAsyncReturn,
|
|
41
|
-
type UseAsyncOptions,
|
|
42
|
-
} from './useAsync'
|
|
43
|
-
export {
|
|
44
|
-
useWellPlateEditor,
|
|
45
|
-
type UseWellPlateEditorOptions,
|
|
46
|
-
type UseWellPlateEditorReturn,
|
|
47
|
-
} from './useWellPlateEditor'
|
|
48
33
|
export {
|
|
49
34
|
useConcentrationUnits,
|
|
50
35
|
type ConcentrationValue,
|
|
@@ -79,6 +64,7 @@ export {
|
|
|
79
64
|
useRackEditor,
|
|
80
65
|
type UseRackEditorOptions,
|
|
81
66
|
type UseRackEditorReturn,
|
|
67
|
+
type PlateEditorListeners,
|
|
82
68
|
} from './useRackEditor'
|
|
83
69
|
export {
|
|
84
70
|
useChemicalFormula,
|
|
@@ -92,6 +78,7 @@ export {
|
|
|
92
78
|
useSequenceUtils,
|
|
93
79
|
type SequenceType,
|
|
94
80
|
type SequenceStats,
|
|
81
|
+
type SequenceProblems,
|
|
95
82
|
} from './useSequenceUtils'
|
|
96
83
|
export {
|
|
97
84
|
useTimeUtils,
|
|
@@ -163,7 +150,6 @@ export {
|
|
|
163
150
|
type UseGeneratedAnalysisReturn,
|
|
164
151
|
} from './useGeneratedAnalysis'
|
|
165
152
|
export { useAutoGroup, DEFAULT_COLORS, extractSamplesFromDesignData } from './useAutoGroup'
|
|
166
|
-
export { usePluginConfig, type UsePluginConfigReturn } from './usePluginConfig'
|
|
167
153
|
export {
|
|
168
154
|
useReagentSeries,
|
|
169
155
|
generateDilutionSeries,
|
|
@@ -257,29 +243,6 @@ export {
|
|
|
257
243
|
type RequestSyncSuccessKind,
|
|
258
244
|
type UseRequestSyncStateReturn,
|
|
259
245
|
} from './useRequestSyncState'
|
|
260
|
-
export {
|
|
261
|
-
useCommandHistory,
|
|
262
|
-
type CommandHistoryCommand,
|
|
263
|
-
type CommandHistoryExecuteOptions,
|
|
264
|
-
type CommandHistoryResult,
|
|
265
|
-
type UseCommandHistoryOptions,
|
|
266
|
-
type UseCommandHistoryReturn,
|
|
267
|
-
} from './useCommandHistory'
|
|
268
|
-
export {
|
|
269
|
-
useOptimisticMutation,
|
|
270
|
-
type OptimisticMutationContext,
|
|
271
|
-
type UseOptimisticMutationOptions,
|
|
272
|
-
type UseOptimisticMutationReturn,
|
|
273
|
-
} from './useOptimisticMutation'
|
|
274
|
-
export {
|
|
275
|
-
createPluginResourceClient,
|
|
276
|
-
useResourceCrud,
|
|
277
|
-
type PluginResourceClientOptions,
|
|
278
|
-
type ResourceCrudAdapter,
|
|
279
|
-
type ResourceKey,
|
|
280
|
-
type UseResourceCrudOptions,
|
|
281
|
-
type UseResourceCrudReturn,
|
|
282
|
-
} from './useResourceCrud'
|
|
283
246
|
export {
|
|
284
247
|
detectDelimiter,
|
|
285
248
|
parseDelimitedText,
|
|
@@ -350,38 +313,6 @@ export {
|
|
|
350
313
|
type UseTextSearchOptions,
|
|
351
314
|
type UseTextSearchReturn,
|
|
352
315
|
} from './useTextSearch'
|
|
353
|
-
export {
|
|
354
|
-
coordinateToWellId,
|
|
355
|
-
useWellPainting,
|
|
356
|
-
wellIdToCoordinate,
|
|
357
|
-
wellIdsInRectangle,
|
|
358
|
-
type UseWellPaintingOptions,
|
|
359
|
-
type UseWellPaintingReturn,
|
|
360
|
-
type WellCoordinate,
|
|
361
|
-
type WellPaintResult,
|
|
362
|
-
type WellPlateSource,
|
|
363
|
-
} from './useWellPainting'
|
|
364
|
-
export {
|
|
365
|
-
createColumnConditions,
|
|
366
|
-
createRowConditions,
|
|
367
|
-
createWellPlateWells,
|
|
368
|
-
useWellPlateAdapter,
|
|
369
|
-
type AxisConditionEntry,
|
|
370
|
-
type UseWellPlateAdapterReturn,
|
|
371
|
-
type WellPlateAdapterOptions,
|
|
372
|
-
type WellPlateAdapterSource,
|
|
373
|
-
type WellPlateEntry,
|
|
374
|
-
} from './useWellPlateAdapter'
|
|
375
|
-
export {
|
|
376
|
-
runWellPlateValidation,
|
|
377
|
-
useWellPlateValidation,
|
|
378
|
-
type UseWellPlateValidationOptions,
|
|
379
|
-
type UseWellPlateValidationReturn,
|
|
380
|
-
type WellPlateValidationRule,
|
|
381
|
-
type WellPlateValidationSeverity,
|
|
382
|
-
type WellPlateValidationSource,
|
|
383
|
-
type WellPlateValidationWarning,
|
|
384
|
-
} from './useWellPlateValidation'
|
|
385
316
|
export {
|
|
386
317
|
controlsToFormSchema,
|
|
387
318
|
controlsToSectionFormSchema,
|
|
@@ -2,7 +2,6 @@ import type {
|
|
|
2
2
|
AccountMenuItem,
|
|
3
3
|
PageSelectorItemInput,
|
|
4
4
|
PillNavItemInput,
|
|
5
|
-
PluginSwitcherInfo,
|
|
6
5
|
SidebarToolSection,
|
|
7
6
|
TopBarSettingsConfig,
|
|
8
7
|
TopBarVariant,
|
|
@@ -74,8 +73,6 @@ export interface PluginWorkspaceShellModel {
|
|
|
74
73
|
pageSelector?: PageSelectorItemInput[]
|
|
75
74
|
/** Resolved active page selector id. */
|
|
76
75
|
currentPageSelectorId: string
|
|
77
|
-
/** Optional plugin switcher shown in the left navigation position. */
|
|
78
|
-
pluginSwitcher?: PluginSwitcherInfo
|
|
79
76
|
/** Resolved centered pill navigation, generated from the control schema when omitted. */
|
|
80
77
|
pillNav?: PillNavItemInput[]
|
|
81
78
|
/** Resolved active centered pill id. */
|
|
@@ -59,6 +59,11 @@ function warnDeprecated(api: string) {
|
|
|
59
59
|
// Re-export `parseCSV` for callers that imported it from this file.
|
|
60
60
|
export { parseCSV } from './autoGroup/csv-shim'
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Sample-grouping engine behind `AutoGroupModal`.
|
|
64
|
+
*
|
|
65
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
66
|
+
*/
|
|
62
67
|
export function useAutoGroup() {
|
|
63
68
|
const inputMode = ref<InputMode>('paste')
|
|
64
69
|
const rawText = ref('')
|
|
@@ -597,6 +602,11 @@ export function useAutoGroup() {
|
|
|
597
602
|
}
|
|
598
603
|
}
|
|
599
604
|
|
|
605
|
+
/**
|
|
606
|
+
* Reads experiment `design_data` samples into the `useAutoGroup` CSV shape.
|
|
607
|
+
*
|
|
608
|
+
* @deprecated Scheduled for removal in MINT 1.4 together with `useAutoGroup`.
|
|
609
|
+
*/
|
|
600
610
|
export function extractSamplesFromDesignData(
|
|
601
611
|
rawData: Record<string, unknown>,
|
|
602
612
|
options: LoadExperimentDataOptions = {},
|
|
@@ -67,14 +67,22 @@ export interface UseBioTemplateComponentsReturn {
|
|
|
67
67
|
) => Record<string, unknown> | undefined
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding.
|
|
72
|
+
*
|
|
73
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
74
|
+
*/
|
|
71
75
|
export function toBioTemplateComponentPropsByComponent(
|
|
72
76
|
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
73
77
|
): BioTemplateComponentPropsByComponent {
|
|
74
78
|
return toTemplateComponentPropsByComponent(target)
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Return the first props object for an SDK component, optionally restricted by template id or binding id.
|
|
83
|
+
*
|
|
84
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
85
|
+
*/
|
|
78
86
|
export function getBioTemplateComponentProps(
|
|
79
87
|
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
80
88
|
component: string,
|
|
@@ -83,7 +91,11 @@ export function getBioTemplateComponentProps(
|
|
|
83
91
|
return getTemplateComponentProps(target, component, options)
|
|
84
92
|
}
|
|
85
93
|
|
|
86
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateEditor.
|
|
96
|
+
*
|
|
97
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
98
|
+
*/
|
|
87
99
|
export function useBioTemplateComponents(
|
|
88
100
|
target: BioTemplateComponentTarget
|
|
89
101
|
): UseBioTemplateComponentsReturn {
|
|
@@ -21,7 +21,11 @@ export type {
|
|
|
21
21
|
BioTemplateControlTarget,
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset.
|
|
26
|
+
*
|
|
27
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
28
|
+
*/
|
|
25
29
|
export function useBioTemplateControls(
|
|
26
30
|
target: BioTemplateControlTarget,
|
|
27
31
|
options: ControlWorkspaceOptions = {},
|
|
@@ -90,6 +90,8 @@ export interface UseBioTemplatePackWorkspaceReturn {
|
|
|
90
90
|
* const pack = useBioTemplatePackWorkspace('cell-culture-screen')
|
|
91
91
|
* await pack.loadCurrent()
|
|
92
92
|
* ```
|
|
93
|
+
*
|
|
94
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
93
95
|
*/
|
|
94
96
|
export function useBioTemplatePackWorkspace(
|
|
95
97
|
packId: TemplatePackId | string,
|
|
@@ -119,7 +119,11 @@ export interface BioTemplatePresetWorkspaceBindings {
|
|
|
119
119
|
getComponentProps: UseBioTemplateWorkspaceReturn['getComponentProps']
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* Create a complete editable WellPlate/DoseCalculator workspace for dose design from a built-in biology template preset with current-experiment save wiring.
|
|
124
|
+
*
|
|
125
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
126
|
+
*/
|
|
123
127
|
export function useBioTemplatePresetWorkspace(
|
|
124
128
|
presetId: TemplatePresetId,
|
|
125
129
|
options: UseBioTemplatePresetWorkspaceOptions = {},
|
|
@@ -60,7 +60,11 @@ export interface UseBioTemplateWorkspaceReturn extends BioTemplateWorkspaceCompo
|
|
|
60
60
|
renderer: BioTemplateRendererBinding | null
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components.
|
|
65
|
+
*
|
|
66
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
67
|
+
*/
|
|
64
68
|
export function useBioTemplateWorkspace(
|
|
65
69
|
target: BioTemplateWorkspaceTarget,
|
|
66
70
|
options: ControlWorkspaceOptions = {}
|
|
@@ -10,21 +10,40 @@ export interface FormulaParseResult {
|
|
|
10
10
|
error?: string
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/** `coefficient` is a full-size multiplier at the start of a hydrate segment (the 5 in CuSO4·5H2O). */
|
|
14
|
+
export type FormulaPartType = 'element' | 'subscript' | 'superscript' | 'paren' | 'dot' | 'charge' | 'coefficient'
|
|
14
15
|
|
|
15
16
|
export interface FormulaPart {
|
|
16
17
|
type: FormulaPartType
|
|
17
18
|
text: string
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
//
|
|
21
|
+
// Every element with its standard atomic weight (mass number of the most stable isotope when none is defined)
|
|
21
22
|
export const ATOMIC_WEIGHTS: Record<string, number> = {
|
|
22
23
|
H: 1.008, He: 4.003, Li: 6.941, Be: 9.012, B: 10.81,
|
|
23
24
|
C: 12.011, N: 14.007, O: 15.999, F: 18.998, Ne: 20.180,
|
|
24
25
|
Na: 22.990, Mg: 24.305, Al: 26.982, Si: 28.086, P: 30.974,
|
|
25
26
|
S: 32.065, Cl: 35.453, Ar: 39.948, K: 39.098, Ca: 40.078,
|
|
27
|
+
Sc: 44.956, Ti: 47.867, V: 50.942, Cr: 51.996,
|
|
26
28
|
Mn: 54.938, Fe: 55.845, Co: 58.933, Ni: 58.693, Cu: 63.546,
|
|
27
|
-
Zn: 65.38,
|
|
29
|
+
Zn: 65.38, Ga: 69.723, Ge: 72.630, As: 74.922, Se: 78.971,
|
|
30
|
+
Br: 79.904, Kr: 83.798, Rb: 85.468, Sr: 87.62, Y: 88.906,
|
|
31
|
+
Zr: 91.224, Nb: 92.906, Mo: 95.95, Tc: 98, Ru: 101.07,
|
|
32
|
+
Rh: 102.906, Pd: 106.42, Ag: 107.868, Cd: 112.414, In: 114.818,
|
|
33
|
+
Sn: 118.710, Sb: 121.760, Te: 127.60, I: 126.904, Xe: 131.293,
|
|
34
|
+
Cs: 132.905, Ba: 137.327, La: 138.905, Ce: 140.116, Pr: 140.908,
|
|
35
|
+
Nd: 144.242, Pm: 145, Sm: 150.36, Eu: 151.964, Gd: 157.25,
|
|
36
|
+
Tb: 158.925, Dy: 162.500, Ho: 164.930, Er: 167.259, Tm: 168.934,
|
|
37
|
+
Yb: 173.045, Lu: 174.967, Hf: 178.49, Ta: 180.948, W: 183.84,
|
|
38
|
+
Re: 186.207, Os: 190.23, Ir: 192.217, Pt: 195.084, Au: 196.967,
|
|
39
|
+
Hg: 200.592, Tl: 204.38, Pb: 207.2, Bi: 208.980, Po: 209,
|
|
40
|
+
At: 210, Rn: 222, Fr: 223, Ra: 226, Ac: 227,
|
|
41
|
+
Th: 232.038, Pa: 231.036, U: 238.029, Np: 237, Pu: 244,
|
|
42
|
+
Am: 243, Cm: 247, Bk: 247, Cf: 251, Es: 252,
|
|
43
|
+
Fm: 257, Md: 258, No: 259, Lr: 266, Rf: 267,
|
|
44
|
+
Db: 268, Sg: 269, Bh: 270, Hs: 277, Mt: 278,
|
|
45
|
+
Ds: 281, Rg: 282, Cn: 285, Nh: 286, Fl: 289,
|
|
46
|
+
Mc: 290, Lv: 293, Ts: 294, Og: 294,
|
|
28
47
|
}
|
|
29
48
|
|
|
30
49
|
function parseFormulaSegment(formula: string): FormulaParseResult {
|
|
@@ -97,8 +116,15 @@ export function useChemicalFormula() {
|
|
|
97
116
|
return { elements: {}, valid: false, error: 'Empty formula' }
|
|
98
117
|
}
|
|
99
118
|
|
|
100
|
-
//
|
|
101
|
-
|
|
119
|
+
// A trailing charge (SO4^2-, Fe2+, NH4+) does not change the composition. Like renderFormulaParts,
|
|
120
|
+
// digits before a bare sign are the charge only on a lone element (Fe2+); otherwise they are a
|
|
121
|
+
// subscript and the sign a unit charge (NH4+). Write Hg2^2+ for any other multiple charge.
|
|
122
|
+
const body = trimmed.replace(/^([A-Z][a-z]?)\d*[+-]$/, '$1').replace(/(\^\d*)?[+-]$/, '')
|
|
123
|
+
if (!body) {
|
|
124
|
+
return { elements: {}, valid: false, error: 'Empty formula' }
|
|
125
|
+
}
|
|
126
|
+
// Split on hydrate separator (·, . or *)
|
|
127
|
+
const parts = body.split(/[·.*]/)
|
|
102
128
|
const combined: Record<string, number> = {}
|
|
103
129
|
|
|
104
130
|
for (const part of parts) {
|
|
@@ -206,13 +232,10 @@ export function useChemicalFormula() {
|
|
|
206
232
|
}
|
|
207
233
|
parts.push({ type: 'subscript', text: numStr })
|
|
208
234
|
|
|
209
|
-
//
|
|
210
|
-
|
|
235
|
+
// On a lone element the digits before a trailing sign are the charge (Fe2+);
|
|
236
|
+
// elsewhere they stay a subscript and the sign renders as a unit charge (NH4+).
|
|
237
|
+
if (parts.length === 2 && i === trimmed.length - 1 && (trimmed[i] === '+' || trimmed[i] === '-')) {
|
|
211
238
|
parts.push({ type: 'charge', text: numStr + trimmed[i] })
|
|
212
|
-
// Remove the subscript we just added since it's actually part of charge
|
|
213
|
-
// Actually, for cases like Fe2+, the 2+ is the charge, not a subscript
|
|
214
|
-
// But for H2O the 2 is a subscript. We need context.
|
|
215
|
-
// Simplification: if followed by +/-, treat trailing digits as part of charge
|
|
216
239
|
parts.splice(parts.length - 2, 1) // Remove the subscript
|
|
217
240
|
i++
|
|
218
241
|
continue
|
|
@@ -231,9 +254,12 @@ export function useChemicalFormula() {
|
|
|
231
254
|
// Could be a subscript or coefficient depending on context
|
|
232
255
|
// If next char is uppercase, it's a coefficient (render as element-like text)
|
|
233
256
|
// If at end or followed by +/-, it's a charge component
|
|
257
|
+
const prev = parts[parts.length - 1]
|
|
234
258
|
if (i < trimmed.length && (trimmed[i] === '+' || trimmed[i] === '-')) {
|
|
235
259
|
parts.push({ type: 'charge', text: numStr + trimmed[i] })
|
|
236
260
|
i++
|
|
261
|
+
} else if (!prev || prev.type === 'dot') {
|
|
262
|
+
parts.push({ type: 'coefficient', text: numStr })
|
|
237
263
|
} else {
|
|
238
264
|
parts.push({ type: 'subscript', text: numStr })
|
|
239
265
|
}
|
|
@@ -247,8 +273,8 @@ export function useChemicalFormula() {
|
|
|
247
273
|
continue
|
|
248
274
|
}
|
|
249
275
|
|
|
250
|
-
// Dot as hydrate separator
|
|
251
|
-
if (ch === '.') {
|
|
276
|
+
// Dot or asterisk as hydrate separator
|
|
277
|
+
if (ch === '.' || ch === '*') {
|
|
252
278
|
parts.push({ type: 'dot', text: '·' })
|
|
253
279
|
i++
|
|
254
280
|
continue
|
|
@@ -7,6 +7,11 @@ export interface UseDropdownStateOptions {
|
|
|
7
7
|
/** Close the panel when the page scrolls or the viewport resizes. Default `false`. */
|
|
8
8
|
closeOnScroll?: boolean
|
|
9
9
|
insideRefs?: Array<Ref<HTMLElement | null>>
|
|
10
|
+
/**
|
|
11
|
+
* Element that counts as "inside" for outside-click closing, typically a
|
|
12
|
+
* `useTemplateRef()`. Without one, bind the returned `rootRef` instead.
|
|
13
|
+
*/
|
|
14
|
+
rootRef?: Ref<HTMLElement | null>
|
|
10
15
|
/**
|
|
11
16
|
* Element focus returns to when the panel closes with `close(true)` (Escape).
|
|
12
17
|
* Pass one when the trigger lives outside `rootRef`; otherwise bind the
|
|
@@ -38,7 +43,7 @@ export interface UseDropdownStateReturn {
|
|
|
38
43
|
*/
|
|
39
44
|
export function useDropdownState(options: UseDropdownStateOptions = {}): UseDropdownStateReturn {
|
|
40
45
|
const isOpen = ref(false)
|
|
41
|
-
const rootRef = ref<HTMLElement | null>(null)
|
|
46
|
+
const rootRef = options.rootRef ?? ref<HTMLElement | null>(null)
|
|
42
47
|
const triggerRef = options.triggerRef ?? ref<HTMLElement | null>(null)
|
|
43
48
|
const closeOnOutsideClick = options.closeOnOutsideClick ?? true
|
|
44
49
|
const closeOnEscape = options.closeOnEscape ?? true
|
|
@@ -86,7 +86,11 @@ export interface UseExperimentSaveReturn {
|
|
|
86
86
|
requireCurrentExperimentId: () => number
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Persists experiment design, analysis, and built-in template preset data through the platform API.
|
|
91
|
+
*
|
|
92
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
93
|
+
*/
|
|
90
94
|
export function useExperimentSave(
|
|
91
95
|
options: UseExperimentSaveOptions = {},
|
|
92
96
|
): UseExperimentSaveReturn {
|
|
@@ -53,7 +53,7 @@ export interface UseFileBrowserReturn {
|
|
|
53
53
|
truncated: Ref<boolean>
|
|
54
54
|
search: Ref<string>
|
|
55
55
|
sort: Ref<FileBrowserSortKey>
|
|
56
|
-
/**
|
|
56
|
+
/** Paths the user has picked, keyed by mount and path. */
|
|
57
57
|
selected: Ref<FileSelection[]>
|
|
58
58
|
isLoading: ComputedRef<boolean>
|
|
59
59
|
error: Ref<string | null>
|
|
@@ -69,7 +69,8 @@ export interface UseFileBrowserReturn {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
*
|
|
72
|
+
* Browses the platform's `/api/filesystem` routes for a custom file UI. For the
|
|
73
|
+
* ready-made dialog, use `FilePicker` with `usePlatformFilePickerAdapter()`.
|
|
73
74
|
*
|
|
74
75
|
* Requires the `filesystem.browse` permission and a deployment that declares
|
|
75
76
|
* mounts; with none configured the routes are absent and `mounts` stays empty.
|