@morscherlab/mint-sdk 1.3.8 → 1.4.0-beta.1
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 +152 -177
- package/dist/ActionMenu-CScINahU.js +445 -0
- package/dist/ActionMenu-CScINahU.js.map +1 -0
- package/dist/AppSidebar-BmiiPfz9.js +3514 -0
- package/dist/AppSidebar-BmiiPfz9.js.map +1 -0
- package/dist/{experiment-utils-DTANyVKV.js → BaseModal-DfRIuVoj.js} +74 -149
- package/dist/BaseModal-DfRIuVoj.js.map +1 -0
- package/dist/ConfirmDialog-CJ7hqYUP.js +102 -0
- package/dist/ConfirmDialog-CJ7hqYUP.js.map +1 -0
- package/dist/ExperimentPopover-C4sGw-is.js +359 -0
- package/dist/ExperimentPopover-C4sGw-is.js.map +1 -0
- package/dist/ExperimentSelectorModal-D-9z7cNx.js +527 -0
- package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +1 -0
- package/dist/SegmentedControl-DERBN-Xd.js +129 -0
- package/dist/SegmentedControl-DERBN-Xd.js.map +1 -0
- package/dist/SettingsModal-CSLE31yg.js +666 -0
- package/dist/SettingsModal-CSLE31yg.js.map +1 -0
- package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
- package/dist/auth-SliLnFre.js +65 -0
- package/dist/auth-SliLnFre.js.map +1 -0
- package/dist/components/ActionMenu.vue.d.ts +1 -1
- package/dist/components/AdductText.vue.d.ts +1 -1
- package/dist/components/AlertBox.vue.d.ts +3 -3
- package/dist/components/AppContainer.vue.d.ts +1 -1
- package/dist/components/AppSidebar.vue.d.ts +14 -94
- package/dist/components/AppTopBar.vue.d.ts +16 -70
- package/dist/components/ArtifactSaveDialog.vue.d.ts +4 -4
- package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
- package/dist/components/AuditTrail.vue.d.ts +2 -2
- package/dist/components/BaseButton.vue.d.ts +11 -4
- package/dist/components/BaseCheckbox.vue.d.ts +9 -3
- package/dist/components/BaseInput.vue.d.ts +13 -9
- package/dist/components/BaseModal.vue.d.ts +4 -4
- package/dist/components/BasePill.vue.d.ts +15 -8
- package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
- package/dist/components/BaseSelect.vue.d.ts +51 -19
- package/dist/components/BaseTabs.vue.d.ts +6 -5
- package/dist/components/BatchProgressList.vue.d.ts +2 -2
- package/dist/components/ChartContainer.vue.d.ts +2 -2
- package/dist/components/ChemicalFormula.vue.d.ts +2 -2
- package/dist/components/CollapsibleCard.vue.d.ts +3 -3
- package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
- package/dist/components/ConcentrationInput.vue.d.ts +2 -2
- package/dist/components/ConfirmDialog.vue.d.ts +8 -7
- package/dist/components/DataFrame.vue.d.ts +32 -74
- package/dist/components/DatePicker.vue.d.ts +24 -2
- package/dist/components/DoseCalculator.vue.d.ts +1 -1
- package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
- package/dist/components/EmptyState.vue.d.ts +3 -2
- package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -3
- package/dist/components/FormBuilder.vue.d.ts +17 -74
- package/dist/components/FormulaInput.vue.d.ts +2 -2
- package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
- package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
- package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
- package/dist/components/JobsStatusTray.vue.d.ts +2 -9
- package/dist/components/LoadingSpinner.vue.d.ts +3 -3
- package/dist/components/MoleculeInput.vue.d.ts +2 -2
- package/dist/components/NumberInput.vue.d.ts +19 -5
- package/dist/components/PlateEditor.vue.d.ts +11 -61
- package/dist/components/PlotlyChart.vue.d.ts +2 -2
- package/dist/components/PluginIcon.vue.d.ts +5 -1
- package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
- package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
- package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
- package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
- package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
- package/dist/components/PresenceAvatars.vue.d.ts +31 -0
- package/dist/components/ProgressBar.vue.d.ts +3 -2
- package/dist/components/ProtocolStep.presentation.d.ts +0 -1
- package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
- package/dist/components/SampleSelector.vue.d.ts +3 -3
- package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
- package/dist/components/ScientificNumber.vue.d.ts +1 -1
- package/dist/components/SecretInput.vue.d.ts +2 -2
- package/dist/components/SegmentedControl.vue.d.ts +2 -2
- package/dist/components/SequenceInput.vue.d.ts +2 -2
- package/dist/components/SettingsModal.vue.d.ts +12 -20
- package/dist/components/SmartGroup.types.d.ts +0 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
- package/dist/components/StaleFormBanner.vue.d.ts +20 -0
- package/dist/components/TagsInput.vue.d.ts +4 -3
- package/dist/components/TimeRangeInput.vue.d.ts +2 -2
- package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
- package/dist/components/WellPlate.geometry.d.ts +0 -6
- package/dist/components/WellPlate.rendering.d.ts +0 -2
- package/dist/components/WellPlate.vue.d.ts +7 -52
- package/dist/components/index.d.ts +0 -90
- package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
- package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
- package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
- package/dist/components/internal/DatePickerDateInternal.vue.d.ts +22 -0
- package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
- package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +3 -3
- package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
- package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
- package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
- package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
- package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +3 -3
- package/dist/components/{MultiSelect.vue.d.ts → internal/SelectMultipleInternal.vue.d.ts} +11 -8
- package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
- package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
- package/dist/components/internal/generatedJobsApi.d.ts +1 -1
- package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
- package/dist/composables/componentSpecs.d.ts +41 -0
- package/dist/composables/controlComponentBindings.d.ts +6 -0
- package/dist/composables/controlSchemaAdapters.d.ts +28 -2
- package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
- package/dist/composables/controlSchemaModel.d.ts +1 -1
- package/dist/composables/controlSchemaTypes.d.ts +35 -23
- package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +20 -49
- package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
- package/dist/composables/experiment-utils.d.ts +1 -6
- package/dist/composables/index.d.ts +6 -59
- package/dist/composables/platformContextHelpers.d.ts +0 -11
- package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
- package/dist/composables/pluginWorkspaceModel.d.ts +14 -97
- package/dist/composables/useApi.d.ts +1 -3
- package/dist/composables/useAppExperiment.d.ts +1 -1
- package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
- package/dist/composables/useExperiment.d.ts +30 -0
- package/dist/composables/useFilePicker.d.ts +2 -2
- package/dist/composables/useJobCenter.d.ts +63 -0
- package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
- package/dist/composables/useMenuKeyboard.d.ts +1 -1
- package/dist/composables/usePlatform.d.ts +63 -0
- package/dist/composables/usePluginWorkspace.d.ts +6 -11
- package/dist/composables/usePresence.d.ts +41 -0
- package/dist/composables/useRackEditor.d.ts +2 -2
- package/dist/composables/useRealtime.d.ts +71 -0
- package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
- package/dist/composables/useToast.d.ts +7 -5
- package/dist/composables/useVersionedSave.d.ts +76 -0
- package/dist/controlSchemaModel-CP5-_nAj.js +95 -0
- package/dist/controlSchemaModel-CP5-_nAj.js.map +1 -0
- package/dist/data-C2PwI_dn.js +3811 -0
- package/dist/data-C2PwI_dn.js.map +1 -0
- package/dist/data.d.ts +32 -0
- package/dist/data.js +10 -0
- package/dist/deprecatedRootExports.d.ts +191 -0
- package/dist/experiment-43OJtH7R.js +673 -0
- package/dist/experiment-43OJtH7R.js.map +1 -0
- package/dist/experimentStatus-BZmU4czV.js +60 -0
- package/dist/experimentStatus-BZmU4czV.js.map +1 -0
- package/dist/host.d.ts +10 -0
- package/dist/host.js +26 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +1 -12
- package/dist/index.js +65 -277
- package/dist/index.js.map +1 -1
- package/dist/install-DAID6c2-.js +668 -0
- package/dist/install-DAID6c2-.js.map +1 -0
- package/dist/install.d.ts +2 -1
- package/dist/install.js +1 -21
- package/dist/instrument.d.ts +0 -6
- package/dist/lab-DLwRl_Ql.js +7513 -0
- package/dist/lab-DLwRl_Ql.js.map +1 -0
- package/dist/lab.d.ts +42 -0
- package/dist/lab.js +4 -0
- package/dist/permissions.d.ts +0 -4
- package/dist/permissions.js +1 -20
- package/dist/permissions.js.map +1 -1
- package/dist/records-BzTcxekG.js +3070 -0
- package/dist/records-BzTcxekG.js.map +1 -0
- package/dist/runtime-D6gVat6r.js +1495 -0
- package/dist/runtime-D6gVat6r.js.map +1 -0
- package/dist/runtime.d.ts +25 -0
- package/dist/runtime.js +8 -0
- package/dist/shell-5ju97nOS.js +197 -0
- package/dist/shell-5ju97nOS.js.map +1 -0
- package/dist/shell.d.ts +16 -0
- package/dist/shell.js +8 -0
- package/dist/stores/auth.d.ts +13 -35
- package/dist/stores/experiment.d.ts +4 -0
- package/dist/stores/index.js +2 -2
- package/dist/styles.css +12030 -14845
- package/dist/types/analysisArtifactTypes.d.ts +1 -1
- package/dist/types/auth.d.ts +0 -8
- package/dist/types/componentLabTypes.d.ts +98 -34
- package/dist/types/componentWorkflowTypes.d.ts +0 -27
- package/dist/types/components.d.ts +145 -74
- package/dist/types/form-builder.d.ts +4 -0
- package/dist/types/generated/platformContext.d.ts +52 -0
- package/dist/types/generated-ui.d.ts +2 -2
- package/dist/types/index.d.ts +4 -5
- package/dist/types/instrument.d.ts +41 -0
- package/dist/types/platform.d.ts +20 -58
- package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
- package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
- package/dist/useExpansionSet-CvoNMZJi.js +68 -0
- package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
- package/dist/useExperimentSamples-CxcnxZ8h.js +366 -0
- package/dist/useExperimentSamples-CxcnxZ8h.js.map +1 -0
- package/dist/useListReorder-CcbEYxX-.js +5462 -0
- package/dist/useListReorder-CcbEYxX-.js.map +1 -0
- package/dist/useRackEditor-BD5NIo5s.js +5916 -0
- package/dist/useRackEditor-BD5NIo5s.js.map +1 -0
- package/dist/useRealtime-PalKue84.js +696 -0
- package/dist/useRealtime-PalKue84.js.map +1 -0
- package/dist/useRequest-D5JDfsgZ.js +76 -0
- package/dist/useRequest-D5JDfsgZ.js.map +1 -0
- package/dist/utils/color.d.ts +0 -5
- package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
- package/dist/utils/experimentStatus.d.ts +9 -0
- package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
- package/dist/utils/integrationHost.d.ts +18 -0
- package/dist/utils/plotlyTemplate.d.ts +2 -0
- package/dist/utils/pluginSecrets.d.ts +12 -12
- package/dist/utils/presenceAvatars.d.ts +30 -0
- package/dist/utils/records.d.ts +0 -2
- package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +0 -18
- package/package.json +20 -17
- package/src/__tests__/components/ActionMenu.test.ts +0 -13
- package/src/__tests__/components/AlertBox.test.ts +1 -1
- package/src/__tests__/components/AppSidebar.test.ts +119 -167
- package/src/__tests__/components/AppToastContainer.test.ts +2 -2
- package/src/__tests__/components/AppTopBar.test.ts +181 -176
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +5 -3
- package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
- package/src/__tests__/components/AuditTrail.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
- package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
- package/src/__tests__/components/BaseButton.test.ts +51 -0
- package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
- package/src/__tests__/components/BaseInput.test.ts +13 -34
- package/src/__tests__/components/BaseModal.test.ts +6 -6
- package/src/__tests__/components/BasePill.test.ts +33 -39
- package/src/__tests__/components/{MultiSelect.test.ts → BaseSelect.multiple.test.ts} +16 -7
- package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
- package/src/__tests__/components/BaseSelect.test.ts +10 -0
- package/src/__tests__/components/BaseTabs.test.ts +13 -13
- package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
- package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
- package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
- package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
- package/src/__tests__/components/DataFrame.test.ts +140 -142
- package/src/__tests__/components/DataStates.test.ts +6 -22
- package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +9 -7
- package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +18 -17
- package/src/__tests__/components/DoseCalculator.test.ts +12 -7
- package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +15 -15
- package/src/__tests__/components/FormBuilder.test.ts +49 -167
- package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
- package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
- package/src/__tests__/components/GeneratedPluginView.test.ts +38 -24
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
- package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
- package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
- package/src/__tests__/components/NumberInput.test.ts +28 -0
- package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
- package/src/__tests__/components/PlateEditor.test.ts +108 -108
- package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
- package/src/__tests__/components/PlotlyChart.test.ts +1 -1
- package/src/__tests__/components/PluginIcon.test.ts +9 -4
- package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
- package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
- package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
- package/src/__tests__/components/PluginWorkspaceView.test.ts +176 -155
- package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
- package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
- package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
- package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
- package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -2
- package/src/__tests__/components/RetiredStyles.test.ts +0 -18
- package/src/__tests__/components/SampleSelector.test.ts +17 -17
- package/src/__tests__/components/SecretInput.test.ts +14 -19
- package/src/__tests__/components/SettingsModal.test.ts +76 -84
- package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
- package/src/__tests__/components/ThemeToggle.test.ts +1 -1
- package/src/__tests__/components/WellPlate.decoration.test.ts +10 -8
- package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
- package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
- package/src/__tests__/components/deprecationTags.test.ts +90 -0
- package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
- package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
- package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
- package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
- package/src/__tests__/composables/experiment-utils.test.ts +13 -14
- package/src/__tests__/composables/useApi.test.ts +32 -21
- package/src/__tests__/composables/useAppExperiment.test.ts +19 -2
- package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
- package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
- package/src/__tests__/composables/useControlSchema.test.ts +41 -99
- package/src/__tests__/composables/useExperiment.test.ts +63 -0
- package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
- package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
- package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
- package/src/__tests__/composables/usePlatform.test.ts +102 -0
- package/src/__tests__/composables/usePresence.test.ts +164 -0
- package/src/__tests__/composables/useRackEditor.test.ts +2 -2
- package/src/__tests__/composables/useRealtime.test.ts +196 -0
- package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
- package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
- package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
- package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
- package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
- package/src/__tests__/styles/baseControlsRules.test.ts +1 -1
- package/src/__tests__/styles/darkModeRules.test.ts +0 -6
- package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
- package/src/__tests__/utils/permissions.test.ts +1 -36
- package/src/__tests__/utils/plotlyTemplate.test.ts +16 -1
- package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +2 -9
- package/src/components/ActionMenu.vue +7 -13
- package/src/components/AlertBox.story.vue +25 -25
- package/src/components/AlertBox.vue +8 -8
- package/src/components/AppLayout.story.vue +33 -44
- package/src/components/AppLayout.vue +1 -1
- package/src/components/AppSidebar.story.vue +40 -73
- package/src/components/AppSidebar.vue +66 -147
- package/src/components/AppToastContainer.story.vue +1 -1
- package/src/components/AppTopBar.story.vue +51 -100
- package/src/components/AppTopBar.vue +74 -198
- package/src/components/ArtifactSaveDialog.story.vue +9 -9
- package/src/components/ArtifactSaveDialog.vue +23 -26
- package/src/components/ArtifactSelectorModal.story.vue +4 -4
- package/src/components/ArtifactSelectorModal.vue +10 -10
- package/src/components/AuditTrail.story.vue +4 -4
- package/src/components/AuditTrail.vue +3 -3
- package/src/components/Avatar.story.vue +2 -3
- package/src/components/Avatar.vue +1 -2
- package/src/components/BaseButton.story.vue +25 -0
- package/src/components/BaseButton.vue +39 -10
- package/src/components/BaseCheckbox.story.vue +2 -2
- package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
- package/src/components/BaseCheckbox.vue +39 -7
- package/src/components/BaseInput.story.vue +3 -15
- package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
- package/src/components/BaseInput.vue +53 -26
- package/src/components/BaseModal.story.vue +11 -11
- package/src/components/BaseModal.vue +8 -8
- package/src/components/BasePill.story.vue +48 -28
- package/src/components/BasePill.vue +22 -11
- package/src/components/BaseRadioGroup.story.vue +4 -4
- package/src/components/BaseRadioGroup.vue +3 -3
- package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +20 -14
- package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
- package/src/components/BaseSelect.story.vue +2 -2
- package/src/components/BaseSelect.vue +117 -22
- package/src/components/BaseTabs.story.vue +20 -20
- package/src/components/BaseTabs.vue +17 -9
- package/src/components/BatchProgressList.vue +3 -3
- package/src/components/ChartContainer.story.vue +8 -13
- package/src/components/ChartContainer.vue +3 -3
- package/src/components/ChemicalFormula.vue +1 -2
- package/src/components/CollapsibleCard.vue +5 -4
- package/src/components/ComponentBindingRenderer.story.vue +0 -29
- package/src/components/ComponentBindingRenderer.vue +15 -39
- package/src/components/ConcentrationInput.story.vue +2 -2
- package/src/components/ConcentrationInput.vue +9 -9
- package/src/components/ConfirmDialog.story.vue +21 -21
- package/src/components/ConfirmDialog.vue +15 -14
- package/src/components/DataFrame.story.vue +28 -40
- package/src/components/DataFrame.vue +112 -128
- package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
- package/src/components/DatePicker.story.vue +2 -2
- package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
- package/src/components/DatePicker.vue +82 -220
- package/src/components/DoseCalculator.vue +13 -19
- package/src/components/DoseCalculatorVolumeField.vue +6 -6
- package/src/components/EmptyState.story.vue +17 -17
- package/src/components/EmptyState.vue +5 -4
- package/src/components/ExperimentPopover.story.vue +1 -1
- package/src/components/ExperimentPopover.vue +4 -4
- package/src/components/ExperimentSelectorModal.story.vue +5 -5
- package/src/components/ExperimentSelectorModal.vue +11 -13
- package/src/components/FilePicker.vue +1 -1
- package/src/components/FormBuilder.story.vue +9 -4
- package/src/components/FormBuilder.vue +46 -253
- package/src/components/FormField.story.vue +1 -2
- package/src/components/FormulaInput.story.vue +2 -2
- package/src/components/FormulaInput.vue +5 -6
- package/src/components/GeneratedPathInput.vue +8 -9
- package/src/components/GeneratedPluginView.story.vue +1 -1
- package/src/components/GeneratedPluginView.vue +23 -22
- package/src/components/GeneratedResultRenderer.vue +16 -17
- package/src/components/InstrumentStatusPanels.story.vue +64 -0
- package/src/components/InstrumentStatusPanels.vue +133 -0
- package/src/components/JobsStatusTray.story.vue +2 -2
- package/src/components/JobsStatusTray.vue +4 -19
- package/src/components/LoadingSpinner.story.vue +11 -11
- package/src/components/LoadingSpinner.vue +6 -4
- package/src/components/MoleculeInput.story.vue +2 -2
- package/src/components/MoleculeInput.vue +3 -3
- package/src/components/NumberInput.story.vue +55 -15
- package/src/components/NumberInput.vue +80 -18
- package/src/components/PlateEditor.story.vue +51 -43
- package/src/components/PlateEditor.vue +97 -128
- package/src/components/PlotlyChart.story.vue +1 -1
- package/src/components/PlotlyChart.vue +6 -4
- package/src/components/PluginIcon.story.vue +9 -6
- package/src/components/PluginIcon.vue +7 -2
- package/src/components/PluginWorkspaceView.controls.ts +9 -29
- package/src/components/PluginWorkspaceView.navigation.ts +2 -23
- package/src/components/PluginWorkspaceView.props.ts +17 -151
- package/src/components/PluginWorkspaceView.shell.ts +13 -24
- package/src/components/PluginWorkspaceView.story.vue +64 -62
- package/src/components/PluginWorkspaceView.vue +21 -78
- package/src/components/PresenceAvatars.story.vue +75 -0
- package/src/components/PresenceAvatars.vue +114 -0
- package/src/components/ProgressBar.story.vue +7 -7
- package/src/components/ProgressBar.vue +4 -3
- package/src/components/ProtocolStep.presentation.ts +0 -11
- package/src/components/ProtocolStepEditor.vue +6 -5
- package/src/components/ProtocolStepParameterField.vue +15 -12
- package/src/components/SampleSelector.colors.ts +1 -1
- package/src/components/SampleSelector.vue +6 -6
- package/src/components/ScheduleCalendar.vue +4 -4
- package/src/components/SecretInput.story.vue +1 -1
- package/src/components/SecretInput.vue +16 -25
- package/src/components/SegmentedControl.story.vue +7 -7
- package/src/components/SegmentedControl.vue +5 -3
- package/src/components/SequenceInput.story.vue +2 -2
- package/src/components/SequenceInput.vue +3 -3
- package/src/components/SettingsModal.story.vue +13 -14
- package/src/components/SettingsModal.vue +29 -47
- package/src/components/SmartGroup.types.ts +4 -6
- package/src/components/SmartGroupFieldRecipe.vue +7 -5
- package/src/components/StaleFormBanner.story.vue +90 -0
- package/src/components/StaleFormBanner.vue +83 -0
- package/src/components/TagsInput.story.vue +7 -7
- package/src/components/TagsInput.vue +7 -6
- package/src/components/ThemeToggle.vue +5 -30
- package/src/components/TimeRangeInput.story.vue +1 -1
- package/src/components/TimeRangeInput.vue +10 -8
- package/src/components/VersionConflictDialog.story.vue +60 -0
- package/src/components/VersionConflictDialog.vue +79 -0
- package/src/components/WellPlate.geometry.ts +0 -38
- package/src/components/WellPlate.rendering.ts +0 -13
- package/src/components/WellPlate.story.vue +61 -50
- package/src/components/WellPlate.vue +61 -87
- package/src/components/index.ts +3 -105
- package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
- package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
- package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
- package/src/components/internal/DataStateInternal.vue +1 -1
- package/src/components/internal/DatePickerDateInternal.vue +243 -0
- package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +9 -9
- package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +7 -7
- package/src/components/internal/FilePickerListInternal.vue +8 -14
- package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
- package/src/components/internal/FormFieldRendererInternal.vue +1 -1
- package/src/components/internal/FormSchemaInternal.vue +253 -0
- package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
- package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
- package/src/components/internal/ResourcePickerListInternal.vue +4 -4
- package/src/components/{MultiSelect.vue → internal/SelectMultipleInternal.vue} +21 -15
- package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +24 -8
- package/src/components/internal/WellEditPopupInternal.vue +4 -9
- package/src/components/internal/WorkspaceShellInternal.vue +3 -36
- package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
- package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
- package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
- package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
- package/src/components/internal/generatedJobsApi.ts +1 -1
- package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
- package/src/composables/componentSpecs.ts +62 -0
- package/src/composables/controlComponentBindings.ts +7 -0
- package/src/composables/controlSchemaAdapters.ts +45 -7
- package/src/composables/controlSchemaDoseDesign.ts +16 -5
- package/src/composables/controlSchemaModel.ts +1 -1
- package/src/composables/controlSchemaTypes.ts +31 -22
- package/src/composables/{usePluginClient.ts → createClient.ts} +52 -190
- package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
- package/src/composables/experiment-utils.ts +1 -39
- package/src/composables/formBuilderRegistry.ts +6 -12
- package/src/composables/index.ts +16 -480
- package/src/composables/platformContextHelpers.ts +0 -57
- package/src/composables/pluginEndpointBuilder.ts +8 -10
- package/src/composables/pluginWorkspaceModel.ts +14 -105
- package/src/composables/useApi.ts +18 -30
- package/src/composables/useAppExperiment.ts +6 -5
- package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
- package/src/composables/useControlSchema.ts +5 -9
- package/src/composables/useControlWorkspace.ts +4 -7
- package/src/composables/useExperiment.ts +49 -0
- package/src/composables/useExperimentData.ts +4 -4
- package/src/composables/useExperimentSelector.ts +5 -5
- package/src/composables/useFileBrowser.ts +5 -13
- package/src/composables/useFilePicker.ts +2 -2
- package/src/composables/useFormBuilder.ts +3 -4
- package/src/composables/useJobCenter.ts +324 -0
- package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
- package/src/composables/useMenuKeyboard.ts +1 -1
- package/src/composables/usePlatform.ts +95 -0
- package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
- package/src/composables/usePluginWorkspace.ts +62 -107
- package/src/composables/usePresence.ts +110 -0
- package/src/composables/useRackEditor.ts +3 -3
- package/src/composables/useRealtime.ts +194 -0
- package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
- package/src/composables/useScheduleCalendarLayout.ts +1 -1
- package/src/composables/useToast.ts +14 -11
- package/src/composables/useVersionedSave.ts +165 -0
- package/src/data.ts +130 -0
- package/src/deprecatedRootExports.ts +226 -0
- package/src/generated/schema.ts +1 -0
- package/src/host.ts +27 -0
- package/src/index.ts +2 -71
- package/src/install.ts +15 -2
- package/src/instrument.ts +1 -6
- package/src/lab.ts +128 -0
- package/src/permissions.ts +0 -27
- package/src/runtime.ts +145 -0
- package/src/shell.ts +103 -0
- package/src/stores/auth.ts +26 -162
- package/src/stores/experiment.ts +27 -1
- package/src/styles/components/action-menu.css +0 -5
- package/src/styles/components/alert-box.css +18 -0
- package/src/styles/components/app-top-bar.css +7 -48
- package/src/styles/components/button.css +12 -0
- package/src/styles/components/checkbox.css +1 -1
- package/src/styles/components/collapsible-card.css +1 -1
- package/src/styles/components/confirm-dialog.css +18 -2
- package/src/styles/components/empty-state.css +4 -2
- package/src/styles/components/file-picker.css +1 -1
- package/src/styles/components/icon-button.css +1 -1
- package/src/styles/components/loading-spinner.css +9 -12
- package/src/styles/components/multi-select.css +6 -1
- package/src/styles/components/pill.css +40 -35
- package/src/styles/components/plugin-icon.css +9 -0
- package/src/styles/components/presence-avatars.css +194 -0
- package/src/styles/components/progress-bar.css +2 -0
- package/src/styles/components/searchable-select.css +3 -0
- package/src/styles/components/smart-group.css +1 -6
- package/src/styles/components/textarea.css +1 -1
- package/src/styles/components/toggle.css +2 -2
- package/src/styles/components/version-conflict.css +122 -0
- package/src/styles/components/well-plate.css +0 -7
- package/src/styles/index.css +2 -11
- package/src/styles/variables.css +1 -527
- package/src/types/analysisArtifactTypes.ts +1 -1
- package/src/types/auth.ts +0 -10
- package/src/types/componentLabTypes.ts +103 -53
- package/src/types/componentWorkflowTypes.ts +2 -33
- package/src/types/components.ts +148 -114
- package/src/types/form-builder.ts +4 -0
- package/src/types/generated/platformContext.ts +59 -0
- package/src/types/generated-ui.ts +2 -2
- package/src/types/index.ts +15 -53
- package/src/types/instrument.ts +27 -0
- package/src/types/platform.ts +25 -89
- package/src/utils/color.ts +1 -12
- package/src/utils/dose.ts +335 -0
- package/src/utils/experimentStatus.ts +43 -0
- package/src/utils/formula.ts +292 -0
- package/src/utils/integrationHost.ts +27 -0
- package/src/utils/plotlyTemplate.ts +6 -0
- package/src/utils/pluginSecrets.ts +23 -23
- package/src/utils/presenceAvatars.ts +53 -0
- package/src/utils/records.ts +0 -5
- package/src/{composables/useTimeUtils.ts → utils/time.ts} +0 -21
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
- package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
- package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
- package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
- package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
- package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
- package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
- package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
- package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
- package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
- package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
- package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
- package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
- package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
- package/dist/__tests__/templates/templates.test.d.ts +0 -1
- package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
- package/dist/__tests__/utils/lcms.test.d.ts +0 -1
- package/dist/__tests__/utils/rack.test.d.ts +0 -1
- package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
- package/dist/components/AppTopBar.navigation.d.ts +0 -10
- package/dist/components/BaseTextarea.vue.d.ts +0 -31
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
- package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
- package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
- package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
- package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
- package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
- package/dist/components/FitPanel.vue.d.ts +0 -56
- package/dist/components/GroupAssigner.vue.d.ts +0 -26
- package/dist/components/IconButton.vue.d.ts +0 -30
- package/dist/components/MobileSupportGate.vue.d.ts +0 -32
- package/dist/components/ReagentEditor.vue.d.ts +0 -31
- package/dist/components/ReagentList.presentation.d.ts +0 -17
- package/dist/components/ReagentList.vue.d.ts +0 -58
- package/dist/components/SampleLegend.vue.d.ts +0 -33
- package/dist/components/SmartGroupModal.vue.d.ts +0 -29
- package/dist/components/index.js +0 -5
- package/dist/components-BOA5e7kb.js +0 -23137
- package/dist/components-BOA5e7kb.js.map +0 -1
- package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
- package/dist/composables/index.js +0 -7
- package/dist/composables/useBioTemplateComponents.d.ts +0 -34
- package/dist/composables/useBioTemplateControls.d.ts +0 -10
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
- package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
- package/dist/composables/useExperimentSave.d.ts +0 -69
- package/dist/composables/useGroupAssignment.d.ts +0 -35
- package/dist/composables/useJobsStatusTray.d.ts +0 -87
- package/dist/composables/useMobileSupportGate.d.ts +0 -14
- package/dist/composables/usePlatformContext.d.ts +0 -218
- package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
- package/dist/composables/useRuntimeAlignment.d.ts +0 -44
- package/dist/composables/useTemplateCollection.d.ts +0 -62
- package/dist/composables/workspaceRecipes.d.ts +0 -189
- package/dist/composables-izSQH8Ky.js +0 -591
- package/dist/composables-izSQH8Ky.js.map +0 -1
- package/dist/experiment-D49y_Kro.js +0 -459
- package/dist/experiment-D49y_Kro.js.map +0 -1
- package/dist/experiment-utils-DTANyVKV.js.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/lcms.d.ts +0 -38
- package/dist/settings-BG6v13Zq.js +0 -341
- package/dist/settings-BG6v13Zq.js.map +0 -1
- package/dist/tailwind.preset.d.ts +0 -63
- package/dist/tailwind.preset.js +0 -71
- package/dist/tailwind.preset.js.map +0 -1
- package/dist/templates/adapters.d.ts +0 -19
- package/dist/templates/assayLookups.d.ts +0 -3
- package/dist/templates/assayMatrixAdapters.d.ts +0 -13
- package/dist/templates/assayMatrixBuilder.d.ts +0 -3
- package/dist/templates/assayNormalizers.d.ts +0 -4
- package/dist/templates/builderIdUtils.d.ts +0 -4
- package/dist/templates/builderPresetControls.d.ts +0 -11
- package/dist/templates/builderReadUtils.d.ts +0 -8
- package/dist/templates/builders.d.ts +0 -26
- package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
- package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
- package/dist/templates/calibrationNormalizers.d.ts +0 -5
- package/dist/templates/catalog.d.ts +0 -192
- package/dist/templates/componentBindingCatalog.d.ts +0 -25
- package/dist/templates/componentBindingHelpers.d.ts +0 -17
- package/dist/templates/componentBindings.d.ts +0 -97
- package/dist/templates/componentDoseResponseProps.d.ts +0 -3
- package/dist/templates/componentGenericProps.d.ts +0 -8
- package/dist/templates/componentPlateHelpers.d.ts +0 -11
- package/dist/templates/componentPlateMapProps.d.ts +0 -3
- package/dist/templates/componentPropsFactory.d.ts +0 -3
- package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
- package/dist/templates/componentTargetResolvers.d.ts +0 -5
- package/dist/templates/componentTemplateProps.d.ts +0 -3
- package/dist/templates/controlSchemaClone.d.ts +0 -4
- package/dist/templates/controlSchemaConstants.d.ts +0 -10
- package/dist/templates/controlSchemaMerge.d.ts +0 -3
- package/dist/templates/controlSchemaTargets.d.ts +0 -17
- package/dist/templates/controlSchemaTypes.d.ts +0 -4
- package/dist/templates/controlSchemas.d.ts +0 -34
- package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
- package/dist/templates/doseResponseAdapters.d.ts +0 -6
- package/dist/templates/doseResponseBuilder.d.ts +0 -3
- package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
- package/dist/templates/flowNormalizers.d.ts +0 -8
- package/dist/templates/flowPanelAdapters.d.ts +0 -7
- package/dist/templates/index.d.ts +0 -15
- package/dist/templates/index.js +0 -2
- package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
- package/dist/templates/instrumentRunAdapters.d.ts +0 -19
- package/dist/templates/instrumentRunBuilder.d.ts +0 -3
- package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
- package/dist/templates/lookup.d.ts +0 -4
- package/dist/templates/packs.d.ts +0 -21
- package/dist/templates/plateMapAdapters.d.ts +0 -5
- package/dist/templates/plateMapBuilder.d.ts +0 -3
- package/dist/templates/presetControlSchemas.d.ts +0 -534
- package/dist/templates/presets.d.ts +0 -106
- package/dist/templates/protocolAdapters.d.ts +0 -9
- package/dist/templates/protocolNormalizers.d.ts +0 -6
- package/dist/templates/protocolStepsBuilder.d.ts +0 -3
- package/dist/templates/qpcrAdapters.d.ts +0 -9
- package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
- package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
- package/dist/templates/reagentAdapters.d.ts +0 -9
- package/dist/templates/reagentListBuilder.d.ts +0 -3
- package/dist/templates/runNormalizers.d.ts +0 -10
- package/dist/templates/sampleNormalizers.d.ts +0 -4
- package/dist/templates/samplePrepAdapters.d.ts +0 -7
- package/dist/templates/samplePrepBuilder.d.ts +0 -3
- package/dist/templates/sampleSheetAdapters.d.ts +0 -9
- package/dist/templates/sampleSheetBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
- package/dist/templates/templateAdapterTypes.d.ts +0 -48
- package/dist/templates/templateControlSchemas.d.ts +0 -400
- package/dist/templates/templateCreateOptions.d.ts +0 -165
- package/dist/templates/templateEnvelopes.d.ts +0 -17
- package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
- package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
- package/dist/templates/templateQpcrTypes.d.ts +0 -42
- package/dist/templates/templateValidators.d.ts +0 -25
- package/dist/templates/timeCourseAdapters.d.ts +0 -9
- package/dist/templates/timeCourseBuilder.d.ts +0 -3
- package/dist/templates/types.d.ts +0 -304
- package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
- package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates-B2DB0MCM.js +0 -12304
- package/dist/templates-B2DB0MCM.js.map +0 -1
- package/dist/utils/rack.d.ts +0 -63
- package/dist/validation-C_eH_vIg.js +0 -7999
- package/dist/validation-C_eH_vIg.js.map +0 -1
- package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
- package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
- package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
- package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
- package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
- package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
- package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
- package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
- package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
- package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
- package/src/__tests__/components/FitPanel.test.ts +0 -96
- package/src/__tests__/components/GroupAssigner.test.ts +0 -101
- package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
- package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
- package/src/__tests__/components/ReagentList.test.ts +0 -167
- package/src/__tests__/components/SampleLegend.test.ts +0 -18
- package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
- package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
- package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
- package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
- package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
- package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
- package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
- package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
- package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
- package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
- package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
- package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
- package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
- package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
- package/src/__tests__/fixtures/templates/dose-response.json +0 -81
- package/src/__tests__/fixtures/templates/plate-map.json +0 -54
- package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
- package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
- package/src/__tests__/templates/templates.test.ts +0 -1235
- package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
- package/src/__tests__/utils/lcms.test.ts +0 -73
- package/src/__tests__/utils/rack.test.ts +0 -120
- package/src/components/AppAvatarMenu.story.vue +0 -155
- package/src/components/AppAvatarMenu.vue +0 -154
- package/src/components/AppTopBar.navigation.ts +0 -60
- package/src/components/AutoGroupModal.story.vue +0 -458
- package/src/components/BaseTextarea.vue +0 -58
- package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
- package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
- package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
- package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
- package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
- package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
- package/src/components/BioTemplateRenderer.story.vue +0 -57
- package/src/components/BioTemplateRenderer.vue +0 -64
- package/src/components/ControlWorkspaceView.story.vue +0 -347
- package/src/components/ControlWorkspaceView.vue +0 -370
- package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
- package/src/components/DoseDesignWorkspaceView.vue +0 -243
- package/src/components/ExperimentDataViewer.story.vue +0 -177
- package/src/components/ExperimentDataViewer.vue +0 -313
- package/src/components/ExperimentTimeline.story.vue +0 -208
- package/src/components/ExperimentTimeline.vue +0 -383
- package/src/components/FitPanel.story.vue +0 -191
- package/src/components/FitPanel.vue +0 -168
- package/src/components/FormActions.story.vue +0 -96
- package/src/components/GroupAssigner.story.vue +0 -83
- package/src/components/GroupAssigner.vue +0 -319
- package/src/components/IconButton.story.vue +0 -140
- package/src/components/IconButton.vue +0 -69
- package/src/components/MobileSupportGate.story.vue +0 -52
- package/src/components/MobileSupportGate.vue +0 -111
- package/src/components/ReagentEditor.story.vue +0 -153
- package/src/components/ReagentEditor.vue +0 -414
- package/src/components/ReagentList.presentation.ts +0 -106
- package/src/components/ReagentList.story.vue +0 -155
- package/src/components/ReagentList.vue +0 -438
- package/src/components/SampleLegend.story.vue +0 -91
- package/src/components/SampleLegend.vue +0 -121
- package/src/components/SmartGroupModal.story.vue +0 -61
- package/src/components/SmartGroupModal.vue +0 -61
- package/src/components/StatusIndicator.story.vue +0 -99
- package/src/components/StatusIndicator.vue +0 -36
- package/src/components/UnitInput.story.vue +0 -194
- package/src/composables/flattenWorkspaceBindings.ts +0 -104
- package/src/composables/useBioTemplateComponents.ts +0 -117
- package/src/composables/useBioTemplateControls.ts +0 -45
- package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
- package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
- package/src/composables/useBioTemplateWorkspace.ts +0 -120
- package/src/composables/useChemicalFormula.ts +0 -301
- package/src/composables/useDoseCalculator.ts +0 -370
- package/src/composables/useExperimentSave.ts +0 -348
- package/src/composables/useGroupAssignment.ts +0 -152
- package/src/composables/useJobsStatusTray.ts +0 -493
- package/src/composables/useMobileSupportGate.ts +0 -80
- package/src/composables/usePlatformContext.ts +0 -299
- package/src/composables/usePresenceHeartbeat.ts +0 -201
- package/src/composables/useRuntimeAlignment.ts +0 -184
- package/src/composables/useTemplateCollection.ts +0 -233
- package/src/composables/workspaceRecipes.ts +0 -268
- package/src/lcms.ts +0 -119
- package/src/styles/components/app-avatar-menu.css +0 -121
- package/src/styles/components/experiment-data-viewer.css +0 -138
- package/src/styles/components/experiment-timeline.css +0 -572
- package/src/styles/components/fit-panel.css +0 -153
- package/src/styles/components/group-assigner.css +0 -198
- package/src/styles/components/mobile-support-gate.css +0 -117
- package/src/styles/components/reagent-editor.css +0 -501
- package/src/styles/components/reagent-list.css +0 -408
- package/src/styles/components/sample-legend.css +0 -212
- package/src/styles/components/status-indicator.css +0 -66
- package/src/styles/components/theme-toggle.css +0 -6
- package/src/tailwind.preset.ts +0 -66
- package/src/templates/adapters.ts +0 -141
- package/src/templates/assayLookups.ts +0 -33
- package/src/templates/assayMatrixAdapters.ts +0 -85
- package/src/templates/assayMatrixBuilder.ts +0 -60
- package/src/templates/assayNormalizers.ts +0 -34
- package/src/templates/builderIdUtils.ts +0 -20
- package/src/templates/builderPresetControls.ts +0 -166
- package/src/templates/builderReadUtils.ts +0 -55
- package/src/templates/builders.ts +0 -122
- package/src/templates/calibrationCurveAdapters.ts +0 -62
- package/src/templates/calibrationCurveBuilder.ts +0 -100
- package/src/templates/calibrationNormalizers.ts +0 -60
- package/src/templates/catalog.ts +0 -249
- package/src/templates/componentBindingCatalog.ts +0 -90
- package/src/templates/componentBindingHelpers.ts +0 -93
- package/src/templates/componentBindings.ts +0 -279
- package/src/templates/componentDoseResponseProps.ts +0 -41
- package/src/templates/componentGenericProps.ts +0 -77
- package/src/templates/componentPlateHelpers.ts +0 -52
- package/src/templates/componentPlateMapProps.ts +0 -34
- package/src/templates/componentPropsFactory.ts +0 -21
- package/src/templates/componentQpcrPlateProps.ts +0 -27
- package/src/templates/componentTargetResolvers.ts +0 -67
- package/src/templates/componentTemplateProps.ts +0 -78
- package/src/templates/controlSchemaClone.ts +0 -32
- package/src/templates/controlSchemaConstants.ts +0 -11
- package/src/templates/controlSchemaMerge.ts +0 -40
- package/src/templates/controlSchemaTargets.ts +0 -85
- package/src/templates/controlSchemaTypes.ts +0 -20
- package/src/templates/controlSchemas.ts +0 -113
- package/src/templates/defaultBioTemplateBuilder.ts +0 -125
- package/src/templates/doseResponseAdapters.ts +0 -36
- package/src/templates/doseResponseBuilder.ts +0 -45
- package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
- package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
- package/src/templates/flowCytometryPanelBuilder.ts +0 -54
- package/src/templates/flowNormalizers.ts +0 -58
- package/src/templates/flowPanelAdapters.ts +0 -61
- package/src/templates/index.ts +0 -330
- package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
- package/src/templates/instrumentRunAdapters.ts +0 -174
- package/src/templates/instrumentRunBuilder.ts +0 -98
- package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
- package/src/templates/lookup.ts +0 -18
- package/src/templates/packs.ts +0 -166
- package/src/templates/plateMapAdapters.ts +0 -38
- package/src/templates/plateMapBuilder.ts +0 -44
- package/src/templates/presetControlSchemas.ts +0 -258
- package/src/templates/presets.ts +0 -183
- package/src/templates/protocolAdapters.ts +0 -73
- package/src/templates/protocolNormalizers.ts +0 -37
- package/src/templates/protocolStepsBuilder.ts +0 -37
- package/src/templates/qpcrAdapters.ts +0 -108
- package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
- package/src/templates/qpcrPlateBuilder.ts +0 -97
- package/src/templates/reagentAdapters.ts +0 -81
- package/src/templates/reagentListBuilder.ts +0 -31
- package/src/templates/runNormalizers.ts +0 -63
- package/src/templates/sampleNormalizers.ts +0 -58
- package/src/templates/samplePrepAdapters.ts +0 -66
- package/src/templates/samplePrepBuilder.ts +0 -52
- package/src/templates/sampleSheetAdapters.ts +0 -79
- package/src/templates/sampleSheetBuilder.ts +0 -24
- package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
- package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
- package/src/templates/templateAdapterTypes.ts +0 -58
- package/src/templates/templateControlSchemas.ts +0 -320
- package/src/templates/templateCreateOptions.ts +0 -208
- package/src/templates/templateEnvelopes.ts +0 -145
- package/src/templates/templatePackCollectionBuilder.ts +0 -24
- package/src/templates/templatePresetCollectionBuilder.ts +0 -141
- package/src/templates/templateQpcrTypes.ts +0 -48
- package/src/templates/templateValidators.ts +0 -426
- package/src/templates/timeCourseAdapters.ts +0 -77
- package/src/templates/timeCourseBuilder.ts +0 -65
- package/src/templates/types.ts +0 -493
- package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
- package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
- package/src/utils/rack.ts +0 -225
- /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
- /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
- /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
- /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
- /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
- /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
- /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
- /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
- /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
|
@@ -76,7 +76,7 @@ describe('PlateEditor — controlled data', () => {
|
|
|
76
76
|
it('should leave modelValue untouched when a well is edited', async () => {
|
|
77
77
|
const racks = makeRacks()
|
|
78
78
|
const snapshot = structuredClone(racks)
|
|
79
|
-
const wrapper = mountEditor({
|
|
79
|
+
const wrapper = mountEditor({ spec: { sampleDrop: true, fillSeries: true, clear: 'undo' }, modelValue: racks })
|
|
80
80
|
|
|
81
81
|
plate(wrapper).vm.$emit('well-edit', 'A2', editData)
|
|
82
82
|
plate(wrapper).vm.$emit('well-move', 'A1', 'B1')
|
|
@@ -119,43 +119,43 @@ describe('PlateEditor — controlled data', () => {
|
|
|
119
119
|
})
|
|
120
120
|
|
|
121
121
|
it('should hide the toolbar in readonly mode', () => {
|
|
122
|
-
const wrapper = mountEditor({
|
|
122
|
+
const wrapper = mountEditor({ spec: { slots: true, fillSeries: true }, readonly: true })
|
|
123
123
|
|
|
124
124
|
expect(wrapper.find('.mint-plate-editor__toolbar').exists()).toBe(false)
|
|
125
125
|
})
|
|
126
126
|
})
|
|
127
127
|
|
|
128
128
|
describe('PlateEditor — plate tabs', () => {
|
|
129
|
-
it('should emit update:
|
|
129
|
+
it('should emit update:activeRack when a tab is clicked', async () => {
|
|
130
130
|
const wrapper = mountEditor()
|
|
131
131
|
|
|
132
132
|
await tabs(wrapper)[1].trigger('click')
|
|
133
133
|
|
|
134
|
-
expect(wrapper.emitted('update:
|
|
134
|
+
expect(wrapper.emitted('update:activeRack')?.[0]).toEqual(['rack-2'])
|
|
135
135
|
})
|
|
136
136
|
|
|
137
|
-
it('should show the second rack after its tab is clicked without a bound
|
|
137
|
+
it('should show the second rack after its tab is clicked without a bound activeRack', async () => {
|
|
138
138
|
const wrapper = mountEditor()
|
|
139
139
|
|
|
140
140
|
await tabs(wrapper)[1].trigger('click')
|
|
141
141
|
|
|
142
|
-
expect(plate(wrapper).props('
|
|
142
|
+
expect(plate(wrapper).props('spec')?.format).toBe(96)
|
|
143
143
|
})
|
|
144
144
|
|
|
145
145
|
it('should keep showing the bound rack when the parent ignores a tab change', async () => {
|
|
146
|
-
const wrapper = mountEditor({
|
|
146
|
+
const wrapper = mountEditor({ activeRack: 'rack-1', 'onUpdate:activeRack': () => {} })
|
|
147
147
|
|
|
148
148
|
await tabs(wrapper)[1].trigger('click')
|
|
149
149
|
|
|
150
|
-
expect(plate(wrapper).props('
|
|
150
|
+
expect(plate(wrapper).props('spec')?.format).toBe(54)
|
|
151
151
|
})
|
|
152
152
|
|
|
153
|
-
it('should show the rack named by a new
|
|
154
|
-
const wrapper = mountEditor({
|
|
153
|
+
it('should show the rack named by a new activeRack', async () => {
|
|
154
|
+
const wrapper = mountEditor({ activeRack: 'rack-1' })
|
|
155
155
|
|
|
156
|
-
await wrapper.setProps({
|
|
156
|
+
await wrapper.setProps({ activeRack: 'rack-2' })
|
|
157
157
|
|
|
158
|
-
expect(plate(wrapper).props('
|
|
158
|
+
expect(plate(wrapper).props('spec')?.format).toBe(96)
|
|
159
159
|
})
|
|
160
160
|
|
|
161
161
|
it('should render the well count as a bare mono count', () => {
|
|
@@ -185,7 +185,7 @@ describe('PlateEditor — plate tabs', () => {
|
|
|
185
185
|
})
|
|
186
186
|
|
|
187
187
|
it('should hide the close button at minRacks', () => {
|
|
188
|
-
const wrapper = mountEditor({ minRacks: 2 })
|
|
188
|
+
const wrapper = mountEditor({ spec: { minRacks: 2 } })
|
|
189
189
|
|
|
190
190
|
expect(wrapper.find('.mint-plate-editor__tab-close').exists()).toBe(false)
|
|
191
191
|
})
|
|
@@ -199,7 +199,7 @@ describe('PlateEditor — plate tabs', () => {
|
|
|
199
199
|
})
|
|
200
200
|
|
|
201
201
|
it('should hide the add button at maxRacks', () => {
|
|
202
|
-
const wrapper = mountEditor({ maxRacks: 2 })
|
|
202
|
+
const wrapper = mountEditor({ spec: { maxRacks: 2 } })
|
|
203
203
|
|
|
204
204
|
expect(wrapper.find('.mint-plate-editor__add').exists()).toBe(false)
|
|
205
205
|
})
|
|
@@ -213,7 +213,7 @@ describe('PlateEditor — plate tabs', () => {
|
|
|
213
213
|
})
|
|
214
214
|
|
|
215
215
|
it('should not reorder when reorder is off', async () => {
|
|
216
|
-
const wrapper = mountEditor({ reorder: false })
|
|
216
|
+
const wrapper = mountEditor({ spec: { reorder: false } })
|
|
217
217
|
|
|
218
218
|
await tabs(wrapper)[0].trigger('keydown', { key: 'ArrowRight', altKey: true })
|
|
219
219
|
|
|
@@ -243,13 +243,13 @@ describe('PlateEditor — toolbar', () => {
|
|
|
243
243
|
})
|
|
244
244
|
|
|
245
245
|
it('should hide the format control when only one format is allowed', () => {
|
|
246
|
-
const wrapper = mountEditor({ formats: [54] })
|
|
246
|
+
const wrapper = mountEditor({ spec: { formats: [54] } })
|
|
247
247
|
|
|
248
248
|
expect(wrapper.find('.mint-plate-editor__toolbar [role="radio"]').exists()).toBe(false)
|
|
249
249
|
})
|
|
250
250
|
|
|
251
251
|
it('should emit update:slot from a slot button', async () => {
|
|
252
|
-
const wrapper = mountEditor({ slots: true })
|
|
252
|
+
const wrapper = mountEditor({ spec: { slots: true } })
|
|
253
253
|
|
|
254
254
|
await wrapper.findAll('.mint-plate-editor__slot')[2].trigger('click')
|
|
255
255
|
|
|
@@ -257,19 +257,19 @@ describe('PlateEditor — toolbar', () => {
|
|
|
257
257
|
})
|
|
258
258
|
|
|
259
259
|
it('should limit slot buttons to the listed slots', () => {
|
|
260
|
-
const wrapper = mountEditor({ slots: ['R', 'G'] })
|
|
260
|
+
const wrapper = mountEditor({ spec: { slots: ['R', 'G'] } })
|
|
261
261
|
|
|
262
262
|
expect(wrapper.findAll('.mint-plate-editor__slot')).toHaveLength(2)
|
|
263
263
|
})
|
|
264
264
|
|
|
265
265
|
it('should mark the active slot as pressed', () => {
|
|
266
|
-
const wrapper = mountEditor({ slots: true })
|
|
266
|
+
const wrapper = mountEditor({ spec: { slots: true } })
|
|
267
267
|
|
|
268
268
|
expect(wrapper.get('.mint-plate-editor__slot--active').text()).toBe('R')
|
|
269
269
|
})
|
|
270
270
|
|
|
271
271
|
it('should emit fill-series from its button', async () => {
|
|
272
|
-
const wrapper = mountEditor({ fillSeries: true })
|
|
272
|
+
const wrapper = mountEditor({ spec: { fillSeries: true } })
|
|
273
273
|
|
|
274
274
|
await wrapper.get('[data-action="fill-series"]').trigger('click')
|
|
275
275
|
|
|
@@ -280,7 +280,7 @@ describe('PlateEditor — toolbar', () => {
|
|
|
280
280
|
const racks = makeRacks()
|
|
281
281
|
racks[0].format = 6
|
|
282
282
|
racks[0].wells = Object.fromEntries(['A1', 'A2', 'A3', 'B1', 'B2', 'B3'].map(id => [id, { sampleType: 'sample' }]))
|
|
283
|
-
const wrapper = mountEditor({
|
|
283
|
+
const wrapper = mountEditor({ spec: { fillSeries: true }, modelValue: racks })
|
|
284
284
|
|
|
285
285
|
expect(wrapper.get('[data-action="fill-series"]').attributes('disabled')).toBeDefined()
|
|
286
286
|
})
|
|
@@ -303,7 +303,7 @@ describe('PlateEditor — toolbar', () => {
|
|
|
303
303
|
})
|
|
304
304
|
|
|
305
305
|
it('should emit clear at once when clear is undo', async () => {
|
|
306
|
-
const wrapper = mountEditor({ clear: 'undo' })
|
|
306
|
+
const wrapper = mountEditor({ spec: { clear: 'undo' } })
|
|
307
307
|
|
|
308
308
|
await wrapper.get('.mint-plate-editor__action--danger').trigger('click')
|
|
309
309
|
|
|
@@ -311,7 +311,7 @@ describe('PlateEditor — toolbar', () => {
|
|
|
311
311
|
})
|
|
312
312
|
|
|
313
313
|
it('should emit undo from the undo button', async () => {
|
|
314
|
-
const wrapper = mountEditor({ clear: 'undo', canUndo: true })
|
|
314
|
+
const wrapper = mountEditor({ spec: { clear: 'undo' }, canUndo: true })
|
|
315
315
|
|
|
316
316
|
await wrapper.get('[aria-label="Undo"]').trigger('click')
|
|
317
317
|
|
|
@@ -319,7 +319,7 @@ describe('PlateEditor — toolbar', () => {
|
|
|
319
319
|
})
|
|
320
320
|
|
|
321
321
|
it('should emit undo on Ctrl+Z inside the editor', async () => {
|
|
322
|
-
const wrapper = mountEditor({ clear: 'undo', canUndo: true })
|
|
322
|
+
const wrapper = mountEditor({ spec: { clear: 'undo' }, canUndo: true })
|
|
323
323
|
|
|
324
324
|
await wrapper.get('.mint-plate-editor').trigger('keydown', { key: 'z', ctrlKey: true })
|
|
325
325
|
|
|
@@ -327,13 +327,13 @@ describe('PlateEditor — toolbar', () => {
|
|
|
327
327
|
})
|
|
328
328
|
|
|
329
329
|
it('should hide the clear button when clear is false', () => {
|
|
330
|
-
const wrapper = mountEditor({ clear: false })
|
|
330
|
+
const wrapper = mountEditor({ spec: { clear: false } })
|
|
331
331
|
|
|
332
332
|
expect(wrapper.find('.mint-plate-editor__action--danger').exists()).toBe(false)
|
|
333
333
|
})
|
|
334
334
|
|
|
335
335
|
it('should emit the chosen file from import', async () => {
|
|
336
|
-
const wrapper = mountEditor({ import: true })
|
|
336
|
+
const wrapper = mountEditor({ spec: { import: true } })
|
|
337
337
|
const file = new File(['a,b'], 'plate.csv')
|
|
338
338
|
const input = wrapper.get('input[type="file"]')
|
|
339
339
|
Object.defineProperty(input.element, 'files', { value: [file] })
|
|
@@ -352,15 +352,15 @@ describe('PlateEditor — toolbar', () => {
|
|
|
352
352
|
|
|
353
353
|
describe('PlateEditor — wells', () => {
|
|
354
354
|
it('should switch the plate into drag mode from the Drag toggle', async () => {
|
|
355
|
-
const wrapper = mountEditor({ wellDrag: true })
|
|
355
|
+
const wrapper = mountEditor({ spec: { wellDrag: true } })
|
|
356
356
|
|
|
357
357
|
await wrapper.get('[data-action="drag"]').trigger('click')
|
|
358
358
|
|
|
359
|
-
expect(plate(wrapper).props('
|
|
359
|
+
expect(plate(wrapper).props('spec')?.selectionMode).toBe('drag')
|
|
360
360
|
})
|
|
361
361
|
|
|
362
362
|
it('should show the hint prop in the footer until drag mode replaces it', async () => {
|
|
363
|
-
const wrapper = mountEditor({ wellDrag: true, hint: 'Drop samples here' })
|
|
363
|
+
const wrapper = mountEditor({ spec: { wellDrag: true }, hint: 'Drop samples here' })
|
|
364
364
|
|
|
365
365
|
expect(wrapper.get('.mint-plate-editor__hint').text()).toBe('Drop samples here')
|
|
366
366
|
|
|
@@ -370,7 +370,7 @@ describe('PlateEditor — wells', () => {
|
|
|
370
370
|
})
|
|
371
371
|
|
|
372
372
|
it('should emit well-move with the active rack id', () => {
|
|
373
|
-
const wrapper = mountEditor({ wellDrag: true })
|
|
373
|
+
const wrapper = mountEditor({ spec: { wellDrag: true } })
|
|
374
374
|
|
|
375
375
|
plate(wrapper).vm.$emit('well-move', 'A1', 'B2')
|
|
376
376
|
|
|
@@ -378,29 +378,29 @@ describe('PlateEditor — wells', () => {
|
|
|
378
378
|
})
|
|
379
379
|
|
|
380
380
|
it('should emit sample-drop for a JSON sample payload', () => {
|
|
381
|
-
const wrapper = mountEditor({ sampleDrop: true })
|
|
382
|
-
const parser = plate(wrapper).props('
|
|
381
|
+
const wrapper = mountEditor({ spec: { sampleDrop: true } })
|
|
382
|
+
const parser = plate(wrapper).props('spec')?.sampleDropParser as (e: DragEvent) => unknown
|
|
383
383
|
const data = parser(dropEvent({ 'application/json': JSON.stringify({ id: 's1', sampleName: 'Liver' }) }))
|
|
384
384
|
|
|
385
385
|
expect(data).toMatchObject({ id: 's1', sampleName: 'Liver' })
|
|
386
386
|
})
|
|
387
387
|
|
|
388
388
|
it('should reject a plain-text drop', () => {
|
|
389
|
-
const wrapper = mountEditor({ sampleDrop: true })
|
|
390
|
-
const parser = plate(wrapper).props('
|
|
389
|
+
const wrapper = mountEditor({ spec: { sampleDrop: true } })
|
|
390
|
+
const parser = plate(wrapper).props('spec')?.sampleDropParser as (e: DragEvent) => unknown
|
|
391
391
|
|
|
392
392
|
expect(parser(dropEvent({ 'text/plain': 'Liver' }))).toBeNull()
|
|
393
393
|
})
|
|
394
394
|
|
|
395
395
|
it('should pass a custom drop parser through', () => {
|
|
396
396
|
const custom = vi.fn(() => null)
|
|
397
|
-
const wrapper = mountEditor({ sampleDrop: custom })
|
|
397
|
+
const wrapper = mountEditor({ spec: { sampleDrop: custom } })
|
|
398
398
|
|
|
399
|
-
expect(plate(wrapper).props('
|
|
399
|
+
expect(plate(wrapper).props('spec')?.sampleDropParser).toBe(custom)
|
|
400
400
|
})
|
|
401
401
|
|
|
402
402
|
it('should forward sample-drop with the active rack id', () => {
|
|
403
|
-
const wrapper = mountEditor({ sampleDrop: true })
|
|
403
|
+
const wrapper = mountEditor({ spec: { sampleDrop: true } })
|
|
404
404
|
const event = dropEvent({})
|
|
405
405
|
|
|
406
406
|
plate(wrapper).vm.$emit('sample-drop', 'B1', { sampleName: 'Liver' }, event)
|
|
@@ -409,9 +409,9 @@ describe('PlateEditor — wells', () => {
|
|
|
409
409
|
})
|
|
410
410
|
|
|
411
411
|
it('should turn off the inspector when wellFields is false', () => {
|
|
412
|
-
const wrapper = mountEditor({ wellFields: false })
|
|
412
|
+
const wrapper = mountEditor({ spec: { wellFields: false } })
|
|
413
413
|
|
|
414
|
-
expect(plate(wrapper).props('
|
|
414
|
+
expect(plate(wrapper).props('spec')?.editable).toBe(false)
|
|
415
415
|
})
|
|
416
416
|
|
|
417
417
|
it('should pass rack-aware props to the #well-editor slot', async () => {
|
|
@@ -432,7 +432,7 @@ describe('PlateEditor — groups', () => {
|
|
|
432
432
|
]
|
|
433
433
|
|
|
434
434
|
it('should show the selection bar once wells are selected', async () => {
|
|
435
|
-
const wrapper = mountEditor({ groups })
|
|
435
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
436
436
|
|
|
437
437
|
plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
|
|
438
438
|
await nextTick()
|
|
@@ -441,7 +441,7 @@ describe('PlateEditor — groups', () => {
|
|
|
441
441
|
})
|
|
442
442
|
|
|
443
443
|
it('should emit assign with the chosen group', async () => {
|
|
444
|
-
const wrapper = mountEditor({ groups })
|
|
444
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
445
445
|
plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
|
|
446
446
|
await nextTick()
|
|
447
447
|
|
|
@@ -451,7 +451,7 @@ describe('PlateEditor — groups', () => {
|
|
|
451
451
|
})
|
|
452
452
|
|
|
453
453
|
it('should emit assign without a group from the clear button', async () => {
|
|
454
|
-
const wrapper = mountEditor({ groups })
|
|
454
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
455
455
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
456
456
|
await nextTick()
|
|
457
457
|
|
|
@@ -461,7 +461,7 @@ describe('PlateEditor — groups', () => {
|
|
|
461
461
|
})
|
|
462
462
|
|
|
463
463
|
it('should drop the selection bar on cancel', async () => {
|
|
464
|
-
const wrapper = mountEditor({ groups })
|
|
464
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
465
465
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
466
466
|
await nextTick()
|
|
467
467
|
|
|
@@ -471,13 +471,13 @@ describe('PlateEditor — groups', () => {
|
|
|
471
471
|
})
|
|
472
472
|
|
|
473
473
|
it('should color wells by group id', () => {
|
|
474
|
-
const wrapper = mountEditor({ groups })
|
|
474
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
475
475
|
|
|
476
|
-
expect(plate(wrapper).props('
|
|
476
|
+
expect(plate(wrapper).props('spec')?.sampleColors).toEqual({ ctrl: 'var(--mint-sample-1)', trt: 'var(--mint-sample-3)' })
|
|
477
477
|
})
|
|
478
478
|
|
|
479
479
|
it('should emit selection-change', () => {
|
|
480
|
-
const wrapper = mountEditor({ groups })
|
|
480
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
481
481
|
|
|
482
482
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
483
483
|
|
|
@@ -502,7 +502,7 @@ describe('PlateEditor — groups and the inspector', () => {
|
|
|
502
502
|
]
|
|
503
503
|
|
|
504
504
|
it('should keep a grouped well saved without a name', () => {
|
|
505
|
-
const wrapper = mountEditor({ modelValue: grouped()
|
|
505
|
+
const wrapper = mountEditor({ spec: { groups }, modelValue: grouped() })
|
|
506
506
|
|
|
507
507
|
plate(wrapper).vm.$emit('well-edit', 'A1', { ...editData, wellId: 'A1', label: '', sampleType: 'sample' })
|
|
508
508
|
|
|
@@ -510,13 +510,13 @@ describe('PlateEditor — groups and the inspector', () => {
|
|
|
510
510
|
})
|
|
511
511
|
|
|
512
512
|
it('should keep the type field in the inspector when there are groups', () => {
|
|
513
|
-
const wrapper = mountEditor({ groups })
|
|
513
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
514
514
|
|
|
515
|
-
expect(plate(wrapper).props('
|
|
515
|
+
expect(plate(wrapper).props('spec')?.editFields).toContain('sampleType')
|
|
516
516
|
})
|
|
517
517
|
|
|
518
518
|
it('should clear the selection when the plate format changes', async () => {
|
|
519
|
-
const wrapper = mountEditor({
|
|
519
|
+
const wrapper = mountEditor({ spec: { groups, formats: [96, 384] }, modelValue: grouped() })
|
|
520
520
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
521
521
|
await nextTick()
|
|
522
522
|
|
|
@@ -526,7 +526,7 @@ describe('PlateEditor — groups and the inspector', () => {
|
|
|
526
526
|
})
|
|
527
527
|
|
|
528
528
|
it('should report the cleared selection when switching plates', async () => {
|
|
529
|
-
const wrapper = mountEditor({ modelValue: grouped()
|
|
529
|
+
const wrapper = mountEditor({ spec: { groups }, modelValue: grouped() })
|
|
530
530
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
531
531
|
await nextTick()
|
|
532
532
|
|
|
@@ -544,19 +544,19 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
544
544
|
})
|
|
545
545
|
|
|
546
546
|
it('should show redo with history', () => {
|
|
547
|
-
const wrapper = mountEditor({ history: true })
|
|
547
|
+
const wrapper = mountEditor({ spec: { history: true } })
|
|
548
548
|
|
|
549
549
|
expect(wrapper.find('[aria-label="Redo"]').exists()).toBe(true)
|
|
550
550
|
})
|
|
551
551
|
|
|
552
552
|
it('should disable undo when canUndo is false', () => {
|
|
553
|
-
const wrapper = mountEditor({ history: true })
|
|
553
|
+
const wrapper = mountEditor({ spec: { history: true } })
|
|
554
554
|
|
|
555
555
|
expect(wrapper.get('[aria-label="Undo"]').attributes('disabled')).toBeDefined()
|
|
556
556
|
})
|
|
557
557
|
|
|
558
558
|
it('should keep focus in the editor when undo runs out of steps', async () => {
|
|
559
|
-
const wrapper = mountEditor({ history: true, canUndo: true }, { attachTo: document.body })
|
|
559
|
+
const wrapper = mountEditor({ spec: { history: true }, canUndo: true }, { attachTo: document.body })
|
|
560
560
|
;(wrapper.get('[aria-label="Undo"]').element as HTMLElement).focus()
|
|
561
561
|
|
|
562
562
|
await wrapper.setProps({ canUndo: false })
|
|
@@ -566,7 +566,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
566
566
|
})
|
|
567
567
|
|
|
568
568
|
it('should keep focus in the editor when redo runs out of steps', async () => {
|
|
569
|
-
const wrapper = mountEditor({ history: true, canRedo: true }, { attachTo: document.body })
|
|
569
|
+
const wrapper = mountEditor({ spec: { history: true }, canRedo: true }, { attachTo: document.body })
|
|
570
570
|
;(wrapper.get('[aria-label="Redo"]').element as HTMLElement).focus()
|
|
571
571
|
|
|
572
572
|
await wrapper.setProps({ canRedo: false })
|
|
@@ -576,7 +576,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
576
576
|
})
|
|
577
577
|
|
|
578
578
|
it('should emit redo from the redo button', async () => {
|
|
579
|
-
const wrapper = mountEditor({ history: true, canRedo: true })
|
|
579
|
+
const wrapper = mountEditor({ spec: { history: true }, canRedo: true })
|
|
580
580
|
|
|
581
581
|
await wrapper.get('[aria-label="Redo"]').trigger('click')
|
|
582
582
|
|
|
@@ -584,7 +584,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
584
584
|
})
|
|
585
585
|
|
|
586
586
|
it('should emit redo on Ctrl+Shift+Z inside the editor', async () => {
|
|
587
|
-
const wrapper = mountEditor({ history: true, canRedo: true })
|
|
587
|
+
const wrapper = mountEditor({ spec: { history: true }, canRedo: true })
|
|
588
588
|
|
|
589
589
|
await wrapper.get('.mint-plate-editor').trigger('keydown', { key: 'Z', ctrlKey: true, shiftKey: true })
|
|
590
590
|
|
|
@@ -592,7 +592,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
592
592
|
})
|
|
593
593
|
|
|
594
594
|
it('should leave Ctrl+Z in a text field to the field', async () => {
|
|
595
|
-
const wrapper = mountEditor({ history: true, canUndo: true }, {
|
|
595
|
+
const wrapper = mountEditor({ spec: { history: true }, canUndo: true }, {
|
|
596
596
|
slots: { 'toolbar-extra': () => h('input', { class: 'field' }) },
|
|
597
597
|
})
|
|
598
598
|
|
|
@@ -602,13 +602,13 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
602
602
|
})
|
|
603
603
|
|
|
604
604
|
it('should label the menu Import / Export when both are on', () => {
|
|
605
|
-
const wrapper = mountEditor({ import: true, export: ['csv'] })
|
|
605
|
+
const wrapper = mountEditor({ spec: { import: true, export: ['csv'] } })
|
|
606
606
|
|
|
607
607
|
expect(wrapper.get('[data-action="import-export"]').text()).toBe('Import / Export')
|
|
608
608
|
})
|
|
609
609
|
|
|
610
610
|
it('should emit export with the chosen format', () => {
|
|
611
|
-
const wrapper = mountEditor({ export: ['csv', 'json'] })
|
|
611
|
+
const wrapper = mountEditor({ spec: { export: ['csv', 'json'] } })
|
|
612
612
|
|
|
613
613
|
wrapper.findComponent(ActionMenu).vm.$emit('select', { id: 'export:json', label: 'Export JSON' })
|
|
614
614
|
|
|
@@ -616,7 +616,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
|
|
|
616
616
|
})
|
|
617
617
|
|
|
618
618
|
it('should open the file picker from the import menu item', () => {
|
|
619
|
-
const wrapper = mountEditor({ import: true, export: ['csv'] })
|
|
619
|
+
const wrapper = mountEditor({ spec: { import: true, export: ['csv'] } })
|
|
620
620
|
const click = vi.spyOn(HTMLInputElement.prototype, 'click').mockImplementation(() => {})
|
|
621
621
|
|
|
622
622
|
wrapper.findComponent(ActionMenu).vm.$emit('select', { id: 'import', label: 'Import file' })
|
|
@@ -637,33 +637,33 @@ describe('PlateEditor — paste import', () => {
|
|
|
637
637
|
}
|
|
638
638
|
|
|
639
639
|
it('should offer Paste in the menu when importMode is both', () => {
|
|
640
|
-
const wrapper = mountEditor({ import: true, importMode: 'both' })
|
|
640
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'both' } })
|
|
641
641
|
|
|
642
642
|
expect(wrapper.getComponent(ActionMenu).props('items').map((item: { id: string }) => item.id)).toEqual(['import', 'paste'])
|
|
643
643
|
})
|
|
644
644
|
|
|
645
645
|
it('should label the menu Import when only imports are offered', () => {
|
|
646
|
-
const wrapper = mountEditor({ import: true, importMode: 'both' })
|
|
646
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'both' } })
|
|
647
647
|
|
|
648
648
|
expect(wrapper.get('[data-action="import-export"]').text()).toBe('Import')
|
|
649
649
|
})
|
|
650
650
|
|
|
651
651
|
it('should drop the file picker when importMode is paste', () => {
|
|
652
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
652
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
653
653
|
|
|
654
654
|
expect(wrapper.find('input[type="file"]').exists()).toBe(false)
|
|
655
655
|
})
|
|
656
656
|
|
|
657
657
|
it('should open the paste dialog from the Paste menu item', async () => {
|
|
658
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
658
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
659
659
|
|
|
660
660
|
await openPaste(wrapper)
|
|
661
661
|
|
|
662
|
-
expect(pasteDialog(wrapper).props('
|
|
662
|
+
expect(pasteDialog(wrapper).props('open')).toBe(true)
|
|
663
663
|
})
|
|
664
664
|
|
|
665
665
|
it('should emit import-text with the pasted text on confirm', async () => {
|
|
666
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
666
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
667
667
|
await openPaste(wrapper)
|
|
668
668
|
await wrapper.get('textarea').setValue('A1\tS001')
|
|
669
669
|
|
|
@@ -676,7 +676,7 @@ describe('PlateEditor — paste import', () => {
|
|
|
676
676
|
const files: File[] = []
|
|
677
677
|
// Typed as the file-only listener callers had before paste existed; it must still type-check.
|
|
678
678
|
const wrapper = mount(PlateEditor, {
|
|
679
|
-
props: {
|
|
679
|
+
props: { spec: { import: true, importMode: 'both' }, modelValue: makeRacks(), onImport: (file: File) => { files.push(file) } },
|
|
680
680
|
global: { stubs: { teleport: true } },
|
|
681
681
|
})
|
|
682
682
|
await openPaste(wrapper)
|
|
@@ -688,7 +688,7 @@ describe('PlateEditor — paste import', () => {
|
|
|
688
688
|
})
|
|
689
689
|
|
|
690
690
|
it('should not emit import-text when the pasted text is blank', async () => {
|
|
691
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
691
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
692
692
|
await openPaste(wrapper)
|
|
693
693
|
await wrapper.get('textarea').setValue(' ')
|
|
694
694
|
|
|
@@ -698,18 +698,18 @@ describe('PlateEditor — paste import', () => {
|
|
|
698
698
|
})
|
|
699
699
|
|
|
700
700
|
it('should close the paste dialog on confirm', async () => {
|
|
701
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
701
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
702
702
|
await openPaste(wrapper)
|
|
703
703
|
await wrapper.get('textarea').setValue('A1')
|
|
704
704
|
|
|
705
705
|
pasteDialog(wrapper).vm.$emit('confirm')
|
|
706
706
|
await nextTick()
|
|
707
707
|
|
|
708
|
-
expect(pasteDialog(wrapper).props('
|
|
708
|
+
expect(pasteDialog(wrapper).props('open')).toBe(false)
|
|
709
709
|
})
|
|
710
710
|
|
|
711
711
|
it('should open an empty paste dialog when the previous paste was canceled', async () => {
|
|
712
|
-
const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
|
|
712
|
+
const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
|
|
713
713
|
await openPaste(wrapper)
|
|
714
714
|
await wrapper.get('textarea').setValue('A1\tS001')
|
|
715
715
|
pasteDialog(wrapper).vm.$emit('update:modelValue', false)
|
|
@@ -723,7 +723,7 @@ describe('PlateEditor — paste import', () => {
|
|
|
723
723
|
|
|
724
724
|
describe('PlateEditor — Shift-click range', () => {
|
|
725
725
|
it('should emit the range between the edited well and a Shift-clicked well', async () => {
|
|
726
|
-
const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }] })
|
|
726
|
+
const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
|
|
727
727
|
|
|
728
728
|
await cell(wrapper, 'A1').trigger('click')
|
|
729
729
|
await cell(wrapper, 'B2').trigger('click', { shiftKey: true })
|
|
@@ -732,10 +732,10 @@ describe('PlateEditor — Shift-click range', () => {
|
|
|
732
732
|
})
|
|
733
733
|
|
|
734
734
|
it('should not range from a well clicked on another rack', async () => {
|
|
735
|
-
const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }],
|
|
735
|
+
const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] }, activeRack: 'rack-1' })
|
|
736
736
|
|
|
737
737
|
await cell(wrapper, 'A1').trigger('click')
|
|
738
|
-
await wrapper.setProps({
|
|
738
|
+
await wrapper.setProps({ activeRack: 'rack-2' })
|
|
739
739
|
await cell(wrapper, 'C3').trigger('click', { shiftKey: true })
|
|
740
740
|
|
|
741
741
|
expect(wrapper.emitted('selection-change')?.at(-1)).toEqual([['C3']])
|
|
@@ -746,13 +746,13 @@ describe('PlateEditor — compact wells (7a)', () => {
|
|
|
746
746
|
it('should default to the xs well size', () => {
|
|
747
747
|
const wrapper = mountEditor()
|
|
748
748
|
|
|
749
|
-
expect(plate(wrapper).props('
|
|
749
|
+
expect(plate(wrapper).props('spec')?.size).toBe('xs')
|
|
750
750
|
})
|
|
751
751
|
|
|
752
752
|
it('should hide well labels at the xs size', () => {
|
|
753
753
|
const wrapper = mountEditor()
|
|
754
754
|
|
|
755
|
-
expect(plate(wrapper).props('
|
|
755
|
+
expect(plate(wrapper).props('spec')?.showWellLabels).toBe(false)
|
|
756
756
|
})
|
|
757
757
|
})
|
|
758
758
|
|
|
@@ -766,25 +766,25 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
766
766
|
]
|
|
767
767
|
|
|
768
768
|
it('should collapse the rail in a narrow container', () => {
|
|
769
|
-
const wrapper = mountEditor({ groups })
|
|
769
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
770
770
|
|
|
771
771
|
expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(false)
|
|
772
772
|
})
|
|
773
773
|
|
|
774
774
|
it('should show the rail in a wide container', async () => {
|
|
775
|
-
const wrapper = await mountWide({ groups })
|
|
775
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
776
776
|
|
|
777
777
|
expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(true)
|
|
778
778
|
})
|
|
779
779
|
|
|
780
780
|
it('should count the wells of each group in the rail', async () => {
|
|
781
|
-
const wrapper = await mountWide({ modelValue: grouped()
|
|
781
|
+
const wrapper = await mountWide({ spec: { groups }, modelValue: grouped() })
|
|
782
782
|
|
|
783
783
|
expect(wrapper.get('.mint-plate-editor__rail-row .mint-plate-editor__rail-count').text()).toBe('2')
|
|
784
784
|
})
|
|
785
785
|
|
|
786
786
|
it('should emit group-add from the New group row', async () => {
|
|
787
|
-
const wrapper = await mountWide({ groups })
|
|
787
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
788
788
|
|
|
789
789
|
await wrapper.get('[data-action="group-add"]').trigger('click')
|
|
790
790
|
|
|
@@ -792,7 +792,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
792
792
|
})
|
|
793
793
|
|
|
794
794
|
it('should hide New group when readonly', async () => {
|
|
795
|
-
const wrapper = await mountWide({ groups, readonly: true })
|
|
795
|
+
const wrapper = await mountWide({ spec: { groups }, readonly: true })
|
|
796
796
|
|
|
797
797
|
expect(wrapper.find('[data-action="group-add"]').exists()).toBe(false)
|
|
798
798
|
})
|
|
@@ -804,21 +804,21 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
804
804
|
})
|
|
805
805
|
|
|
806
806
|
it('should move the legend from under the plate into the rail', async () => {
|
|
807
|
-
const wrapper = await mountWide({ groups })
|
|
807
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
808
808
|
|
|
809
|
-
expect(plate(wrapper).props('
|
|
809
|
+
expect(plate(wrapper).props('spec')?.showLegend).toBe(false)
|
|
810
810
|
})
|
|
811
811
|
|
|
812
812
|
it('should keep the legend under the plate in a narrow container', () => {
|
|
813
|
-
const wrapper = mountEditor({ groups })
|
|
813
|
+
const wrapper = mountEditor({ spec: { groups } })
|
|
814
814
|
|
|
815
|
-
expect(plate(wrapper).props('
|
|
815
|
+
expect(plate(wrapper).props('spec')?.showLegend).toBe(true)
|
|
816
816
|
})
|
|
817
817
|
|
|
818
818
|
it('should not open the popover inspector beside a rail', async () => {
|
|
819
819
|
const wrapper = await mountWide()
|
|
820
820
|
|
|
821
|
-
expect(plate(wrapper).props('
|
|
821
|
+
expect(plate(wrapper).props('spec')?.editable).toBe(false)
|
|
822
822
|
})
|
|
823
823
|
|
|
824
824
|
it('should select only the clicked well on a plain click without groups', async () => {
|
|
@@ -840,7 +840,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
840
840
|
})
|
|
841
841
|
|
|
842
842
|
it('should add a well to the selection on Cmd-click beside the rail with groups', async () => {
|
|
843
|
-
const wrapper = await mountWide({ groups })
|
|
843
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
844
844
|
await cell(wrapper, 'A1').trigger('click')
|
|
845
845
|
|
|
846
846
|
await cell(wrapper, 'A2').trigger('click', { metaKey: true })
|
|
@@ -849,9 +849,9 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
849
849
|
})
|
|
850
850
|
|
|
851
851
|
it('should select wells by rectangle with groups', async () => {
|
|
852
|
-
const wrapper = await mountWide({ groups })
|
|
852
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
853
853
|
|
|
854
|
-
expect(plate(wrapper).props('
|
|
854
|
+
expect(plate(wrapper).props('spec')?.selectionMode).toBe('rectangle')
|
|
855
855
|
})
|
|
856
856
|
|
|
857
857
|
it('should show the inline inspector for one selected well', async () => {
|
|
@@ -937,7 +937,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
937
937
|
})
|
|
938
938
|
|
|
939
939
|
it('should not select a well on a plain click beside the rail when wellFields is false and there are no groups', async () => {
|
|
940
|
-
const wrapper = await mountWide({ wellFields: false })
|
|
940
|
+
const wrapper = await mountWide({ spec: { wellFields: false } })
|
|
941
941
|
|
|
942
942
|
await cell(wrapper, 'A1').trigger('click')
|
|
943
943
|
|
|
@@ -945,7 +945,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
945
945
|
})
|
|
946
946
|
|
|
947
947
|
it('should keep the selection bar for several wells', async () => {
|
|
948
|
-
const wrapper = await mountWide({ groups })
|
|
948
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
949
949
|
|
|
950
950
|
plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
|
|
951
951
|
await nextTick()
|
|
@@ -954,7 +954,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
954
954
|
})
|
|
955
955
|
|
|
956
956
|
it('should offer the group bar for one selected well beside the rail', async () => {
|
|
957
|
-
const wrapper = await mountWide({ groups })
|
|
957
|
+
const wrapper = await mountWide({ spec: { groups } })
|
|
958
958
|
plate(wrapper).vm.$emit('selection-change', ['D5'])
|
|
959
959
|
await nextTick()
|
|
960
960
|
|
|
@@ -992,7 +992,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
992
992
|
})
|
|
993
993
|
|
|
994
994
|
it('should show the rail beside a 96-well plate at size fill', async () => {
|
|
995
|
-
const wrapper = await mountWide({
|
|
995
|
+
const wrapper = await mountWide({ spec: { size: 'fill' }, modelValue: grouped() })
|
|
996
996
|
|
|
997
997
|
expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(true)
|
|
998
998
|
})
|
|
@@ -1012,7 +1012,7 @@ describe('PlateEditor — rail (7a)', () => {
|
|
|
1012
1012
|
describe('PlateEditor — inspector marker (7a)', () => {
|
|
1013
1013
|
it('should tint the rail inspector marker with the group color', async () => {
|
|
1014
1014
|
const racks: Rack[] = [{ id: 'rack-1', name: 'P1', format: 96, slot: 'R', injectionVolume: 5, wells: { A1: { sampleType: 'sample', group: 'trt', state: 'filled' } } }]
|
|
1015
|
-
const wrapper = await mountWide({
|
|
1015
|
+
const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] }, modelValue: racks })
|
|
1016
1016
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
1017
1017
|
await nextTick()
|
|
1018
1018
|
|
|
@@ -1021,7 +1021,7 @@ describe('PlateEditor — inspector marker (7a)', () => {
|
|
|
1021
1021
|
|
|
1022
1022
|
it('should name the group of the well in the rail inspector', async () => {
|
|
1023
1023
|
const racks: Rack[] = [{ id: 'rack-1', name: 'P1', format: 96, slot: 'R', injectionVolume: 5, wells: { A1: { sampleType: 'sample', group: 'trt', state: 'filled' } } }]
|
|
1024
|
-
const wrapper = await mountWide({
|
|
1024
|
+
const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] }, modelValue: racks })
|
|
1025
1025
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
1026
1026
|
await nextTick()
|
|
1027
1027
|
|
|
@@ -1029,7 +1029,7 @@ describe('PlateEditor — inspector marker (7a)', () => {
|
|
|
1029
1029
|
})
|
|
1030
1030
|
|
|
1031
1031
|
it('should give the rail inspector the Type field when there are groups', async () => {
|
|
1032
|
-
const wrapper = await mountWide({ groups: [{ id: 'ctrl', name: 'Control' }] })
|
|
1032
|
+
const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
|
|
1033
1033
|
plate(wrapper).vm.$emit('selection-change', ['A1'])
|
|
1034
1034
|
await nextTick()
|
|
1035
1035
|
|
|
@@ -1065,7 +1065,7 @@ describe('PlateEditor — modifier clicks in the popover mode', () => {
|
|
|
1065
1065
|
})
|
|
1066
1066
|
|
|
1067
1067
|
it('should not select a well on a plain click when wellFields is false and there are no groups', async () => {
|
|
1068
|
-
const wrapper = mountEditor({ wellFields: false })
|
|
1068
|
+
const wrapper = mountEditor({ spec: { wellFields: false } })
|
|
1069
1069
|
|
|
1070
1070
|
await cell(wrapper, 'A1').trigger('click')
|
|
1071
1071
|
|
|
@@ -1073,7 +1073,7 @@ describe('PlateEditor — modifier clicks in the popover mode', () => {
|
|
|
1073
1073
|
})
|
|
1074
1074
|
|
|
1075
1075
|
it('should add a well to the selection on Ctrl-click with groups', async () => {
|
|
1076
|
-
const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }] })
|
|
1076
|
+
const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
|
|
1077
1077
|
await cell(wrapper, 'A1').trigger('click', { ctrlKey: true })
|
|
1078
1078
|
|
|
1079
1079
|
await cell(wrapper, 'A2').trigger('click', { ctrlKey: true })
|
|
@@ -1093,27 +1093,27 @@ describe('PlateEditor — designer options', () => {
|
|
|
1093
1093
|
}]
|
|
1094
1094
|
|
|
1095
1095
|
it('should use the clearConfirm title in the confirmation', () => {
|
|
1096
|
-
const wrapper = mountEditor({ clearConfirm: { title: 'Unplace samples' } })
|
|
1096
|
+
const wrapper = mountEditor({ spec: { clearConfirm: { title: 'Unplace samples' } } })
|
|
1097
1097
|
|
|
1098
1098
|
expect(wrapper.getComponent(ConfirmDialog).props('title')).toBe('Unplace samples')
|
|
1099
1099
|
})
|
|
1100
1100
|
|
|
1101
1101
|
it('should use the clearConfirm message in the confirmation', () => {
|
|
1102
|
-
const wrapper = mountEditor({ clearConfirm: { message: 'All 1 placed samples go back to the Sample List unplaced.' } })
|
|
1102
|
+
const wrapper = mountEditor({ spec: { clearConfirm: { message: 'All 1 placed samples go back to the Sample List unplaced.' } } })
|
|
1103
1103
|
|
|
1104
1104
|
expect(wrapper.getComponent(ConfirmDialog).props('message')).toBe('All 1 placed samples go back to the Sample List unplaced.')
|
|
1105
1105
|
})
|
|
1106
1106
|
|
|
1107
1107
|
it('should use the clearConfirm confirm label in the confirmation', () => {
|
|
1108
|
-
const wrapper = mountEditor({ clearConfirm: { confirmLabel: 'Unplace all' } })
|
|
1108
|
+
const wrapper = mountEditor({ spec: { clearConfirm: { confirmLabel: 'Unplace all' } } })
|
|
1109
1109
|
|
|
1110
1110
|
expect(wrapper.getComponent(ConfirmDialog).props('confirmLabel')).toBe('Unplace all')
|
|
1111
1111
|
})
|
|
1112
1112
|
|
|
1113
|
-
it('should pass the clearConfirm
|
|
1114
|
-
const wrapper = mountEditor({ clearConfirm: {
|
|
1113
|
+
it('should pass the clearConfirm tone to the confirmation', () => {
|
|
1114
|
+
const wrapper = mountEditor({ spec: { clearConfirm: { tone: 'warning' } } })
|
|
1115
1115
|
|
|
1116
|
-
expect(wrapper.getComponent(ConfirmDialog).props('
|
|
1116
|
+
expect(wrapper.getComponent(ConfirmDialog).props('tone')).toBe('warning')
|
|
1117
1117
|
})
|
|
1118
1118
|
|
|
1119
1119
|
it('should keep the default clear message without clearConfirm', () => {
|
|
@@ -1123,13 +1123,13 @@ describe('PlateEditor — designer options', () => {
|
|
|
1123
1123
|
})
|
|
1124
1124
|
|
|
1125
1125
|
it('should keep fill-series enabled on a full plate when fillSeriesWhenFull is emit', () => {
|
|
1126
|
-
const wrapper = mountEditor({
|
|
1126
|
+
const wrapper = mountEditor({ spec: { fillSeries: true, fillSeriesWhenFull: 'emit' }, modelValue: fullRack() })
|
|
1127
1127
|
|
|
1128
1128
|
expect(wrapper.get('[data-action="fill-series"]').attributes('disabled')).toBeUndefined()
|
|
1129
1129
|
})
|
|
1130
1130
|
|
|
1131
1131
|
it('should emit fill-series on a full plate when fillSeriesWhenFull is emit', async () => {
|
|
1132
|
-
const wrapper = mountEditor({
|
|
1132
|
+
const wrapper = mountEditor({ spec: { fillSeries: true, fillSeriesWhenFull: 'emit' }, modelValue: fullRack() })
|
|
1133
1133
|
|
|
1134
1134
|
await wrapper.get('[data-action="fill-series"]').trigger('click')
|
|
1135
1135
|
|
|
@@ -1137,7 +1137,7 @@ describe('PlateEditor — designer options', () => {
|
|
|
1137
1137
|
})
|
|
1138
1138
|
|
|
1139
1139
|
it('should set the file input accept from importAccept', () => {
|
|
1140
|
-
const wrapper = mountEditor({ import: true, importAccept: '.csv,text/csv' })
|
|
1140
|
+
const wrapper = mountEditor({ spec: { import: true, importAccept: '.csv,text/csv' } })
|
|
1141
1141
|
|
|
1142
1142
|
expect(wrapper.get('input[type="file"]').attributes('accept')).toBe('.csv,text/csv')
|
|
1143
1143
|
})
|