@morscherlab/mint-sdk 1.3.11 → 1.4.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -177
- package/dist/AlertBox-B2Bgr3ei.js +276 -0
- package/dist/AlertBox-B2Bgr3ei.js.map +1 -0
- package/dist/AppSidebar-mvm--GxN.js +3565 -0
- package/dist/AppSidebar-mvm--GxN.js.map +1 -0
- package/dist/ConfirmDialog-nbJj51is.js +102 -0
- package/dist/ConfirmDialog-nbJj51is.js.map +1 -0
- package/dist/ExperimentPopover-5T1fAq2L.js +337 -0
- package/dist/ExperimentPopover-5T1fAq2L.js.map +1 -0
- package/dist/ExperimentSelectorModal-65peG4Up.js +544 -0
- package/dist/ExperimentSelectorModal-65peG4Up.js.map +1 -0
- package/dist/SegmentedControl-BtnnjWzs.js +129 -0
- package/dist/SegmentedControl-BtnnjWzs.js.map +1 -0
- package/dist/SettingsModal-DO3IZ7qz.js +666 -0
- package/dist/SettingsModal-DO3IZ7qz.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 +15 -95
- package/dist/components/AppTopBar.vue.d.ts +16 -70
- package/dist/components/ArtifactSaveDialog.vue.d.ts +13 -5
- 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 +4 -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/ExperimentPopover.vue.d.ts +18 -0
- package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -7
- package/dist/components/FilePicker.vue.d.ts +1 -1
- package/dist/components/FileUploader.vue.d.ts +2 -2
- 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 +8 -8
- 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/SequenceProgressBar.vue.d.ts +3 -0
- 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/StepWizard.vue.d.ts +3 -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/{MultiSelect.vue.d.ts → internal/DatePickerDateInternal.vue.d.ts} +11 -9
- 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} +4 -4
- 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 +5 -10
- package/dist/components/internal/SelectMultipleInternal.vue.d.ts +27 -0
- 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} +22 -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 +7 -59
- package/dist/composables/platformContextHelpers.d.ts +0 -11
- package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
- package/dist/composables/pluginIdentity.d.ts +24 -0
- package/dist/composables/pluginWorkspaceModel.d.ts +16 -99
- package/dist/composables/useApi.d.ts +1 -3
- package/dist/composables/useAppExperiment.d.ts +9 -1
- package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
- package/dist/composables/useCalendarGrid.d.ts +1 -1
- package/dist/composables/useExperiment.d.ts +30 -0
- package/dist/composables/useExperimentSelector.d.ts +6 -2
- 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 +64 -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-B8CTXagP.js +95 -0
- package/dist/controlSchemaModel-B8CTXagP.js.map +1 -0
- package/dist/data-CgILxDLW.js +3865 -0
- package/dist/data-CgILxDLW.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-Cqp6qNrR.js +60 -0
- package/dist/experimentStatus-Cqp6qNrR.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-CsPFJSx3.js +669 -0
- package/dist/install-CsPFJSx3.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-MHzp-_J8.js +7494 -0
- package/dist/lab-MHzp-_J8.js.map +1 -0
- package/dist/lab.d.ts +42 -0
- package/dist/lab.js +5 -0
- package/dist/permissions.d.ts +0 -4
- package/dist/permissions.js +1 -20
- package/dist/permissions.js.map +1 -1
- package/dist/records-B6gpM_3e.js +3268 -0
- package/dist/records-B6gpM_3e.js.map +1 -0
- package/dist/runtime-8bs8EogX.js +1491 -0
- package/dist/runtime-8bs8EogX.js.map +1 -0
- package/dist/runtime.d.ts +25 -0
- package/dist/runtime.js +8 -0
- package/dist/shell-CywENwBT.js +197 -0
- package/dist/shell-CywENwBT.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 +12161 -15036
- 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 +2 -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 +53 -0
- package/dist/types/generated-ui.d.ts +6 -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/{experiment-utils-DTANyVKV.js → useDropdownState-8yWMu-7_.js} +127 -144
- package/dist/useDropdownState-8yWMu-7_.js.map +1 -0
- package/dist/useExpansionSet-CvoNMZJi.js +68 -0
- package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
- package/dist/useExperimentSamples-DHnxKFAF.js +366 -0
- package/dist/useExperimentSamples-DHnxKFAF.js.map +1 -0
- package/dist/useListReorder-BitdUhxn.js +5294 -0
- package/dist/useListReorder-BitdUhxn.js.map +1 -0
- package/dist/useRackEditor-DiwCt77M.js +5930 -0
- package/dist/useRackEditor-DiwCt77M.js.map +1 -0
- package/dist/useRealtime-C3iy9QkU.js +699 -0
- package/dist/useRealtime-C3iy9QkU.js.map +1 -0
- package/dist/useRequest-D506eHi8.js +244 -0
- package/dist/useRequest-D506eHi8.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} +7 -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 +230 -176
- package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +83 -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/BaseSelect.multiple.test.ts +118 -0
- package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
- package/src/__tests__/components/BaseSelect.test.ts +11 -0
- package/src/__tests__/components/BaseTabs.test.ts +13 -13
- package/src/__tests__/components/BatchProgressList.test.ts +16 -0
- package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
- package/src/__tests__/components/ChartContainer.test.ts +11 -0
- package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
- 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} +15 -7
- package/src/__tests__/components/DatePicker.test.ts +21 -0
- package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +20 -19
- package/src/__tests__/components/DoseCalculator.test.ts +12 -7
- package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
- package/src/__tests__/components/EmptyState.test.ts +1 -1
- package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +134 -28
- 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 +60 -25
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
- package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -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 +183 -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 -22
- package/src/__tests__/components/RetiredStyles.test.ts +0 -18
- package/src/__tests__/components/SampleSelector.test.ts +30 -25
- package/src/__tests__/components/SecretInput.test.ts +14 -19
- package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
- package/src/__tests__/components/SettingsModal.test.ts +76 -84
- package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
- package/src/__tests__/components/StepWizard.test.ts +11 -0
- package/src/__tests__/components/ThemeToggle.test.ts +1 -1
- package/src/__tests__/components/WellPlate.decoration.test.ts +20 -11
- 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 +46 -3
- 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/useCalendarGrid.test.ts +4 -2
- package/src/__tests__/composables/useControlSchema.test.ts +41 -99
- package/src/__tests__/composables/useExperiment.test.ts +63 -0
- package/src/__tests__/composables/useExperimentSelector.test.ts +111 -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 +7 -3
- package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
- package/src/__tests__/styles/cssTokens.test.ts +2 -2
- package/src/__tests__/styles/darkModeRules.test.ts +0 -6
- package/src/__tests__/styles/menusShellRefresh.test.ts +14 -10
- 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 +20 -5
- package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +18 -8
- package/src/components/ActionMenu.vue +7 -13
- package/src/components/AdductText.story.vue +7 -0
- package/src/components/AdductText.vue +1 -1
- package/src/components/AlertBox.story.vue +27 -27
- package/src/components/AlertBox.vue +22 -20
- package/src/components/AppLayout.story.vue +33 -44
- package/src/components/AppLayout.vue +1 -1
- package/src/components/AppSidebar.story.vue +40 -101
- package/src/components/AppSidebar.vue +66 -147
- package/src/components/AppToastContainer.story.vue +1 -1
- package/src/components/AppTopBar.story.vue +97 -111
- package/src/components/AppTopBar.vue +170 -290
- package/src/components/ArtifactSaveDialog.story.vue +32 -9
- package/src/components/ArtifactSaveDialog.vue +125 -38
- package/src/components/ArtifactSelectorModal.story.vue +4 -4
- package/src/components/ArtifactSelectorModal.vue +10 -10
- package/src/components/AuditTrail.story.vue +6 -5
- package/src/components/AuditTrail.vue +5 -24
- package/src/components/Avatar.story.vue +2 -3
- package/src/components/Avatar.vue +11 -16
- 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} +33 -16
- 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 +118 -22
- package/src/components/BaseTabs.story.vue +20 -20
- package/src/components/BaseTabs.vue +17 -9
- package/src/components/BatchProgressList.vue +38 -28
- package/src/components/ChartContainer.story.vue +9 -13
- package/src/components/ChartContainer.vue +10 -8
- 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 +22 -22
- 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 +6 -5
- package/src/components/ExperimentPopover.story.vue +165 -53
- package/src/components/ExperimentPopover.vue +172 -190
- package/src/components/ExperimentSelectorModal.story.vue +43 -39
- package/src/components/ExperimentSelectorModal.vue +134 -122
- 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 +9 -50
- 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 +29 -22
- package/src/components/GeneratedResultRenderer.vue +16 -17
- package/src/components/InstrumentStateBadge.vue +1 -1
- 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 +5 -20
- package/src/components/LoadingSpinner.story.vue +11 -11
- package/src/components/LoadingSpinner.vue +7 -5
- 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 +83 -24
- 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 +6 -11
- 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 +65 -63
- 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/RuntimeUpdateNotice.vue +1 -1
- package/src/components/SampleSelector.colors.ts +1 -1
- package/src/components/SampleSelector.story.vue +1 -1
- package/src/components/SampleSelector.vue +33 -43
- package/src/components/SampleSelectorGroupNode.vue +1 -1
- 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/SectionCard.story.vue +2 -2
- 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/SequenceProgressBar.story.vue +9 -0
- package/src/components/SequenceProgressBar.vue +6 -1
- package/src/components/SettingsModal.schema.ts +1 -1
- package/src/components/SettingsModal.story.vue +13 -14
- package/src/components/SettingsModal.vue +31 -49
- package/src/components/SmartGroup.types.ts +4 -6
- package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
- package/src/components/SmartGroupFieldRecipe.vue +7 -5
- package/src/components/SmartGroupManual.story.vue +1 -1
- package/src/components/StaleFormBanner.story.vue +90 -0
- package/src/components/StaleFormBanner.vue +83 -0
- package/src/components/StepWizard.story.vue +33 -0
- package/src/components/StepWizard.vue +8 -1
- 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 +64 -51
- package/src/components/WellPlate.vue +68 -87
- package/src/components/index.ts +3 -105
- package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
- 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 +219 -0
- package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +12 -22
- package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +12 -15
- 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 +48 -88
- package/src/components/internal/SelectMultipleInternal.vue +242 -0
- package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +26 -11
- 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} +54 -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 +17 -480
- package/src/composables/platformContextHelpers.ts +0 -57
- package/src/composables/pluginEndpointBuilder.ts +8 -10
- package/src/composables/pluginIdentity.ts +31 -0
- package/src/composables/pluginWorkspaceModel.ts +16 -107
- package/src/composables/useApi.ts +18 -30
- package/src/composables/useAppExperiment.ts +26 -5
- package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
- package/src/composables/useCalendarGrid.ts +4 -3
- 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 +82 -36
- 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/adduct-text.css +13 -5
- package/src/styles/components/alert-box.css +39 -40
- package/src/styles/components/app-layout.css +6 -5
- package/src/styles/components/app-page-selector.css +3 -1
- package/src/styles/components/app-pill-nav.css +11 -12
- package/src/styles/components/app-sidebar.css +9 -18
- package/src/styles/components/app-top-bar.css +64 -103
- package/src/styles/components/artifact-save-dialog.css +153 -2
- package/src/styles/components/audit-trail.css +16 -19
- package/src/styles/components/avatar.css +6 -4
- package/src/styles/components/batch-progress-list.css +38 -36
- package/src/styles/components/button.css +40 -59
- package/src/styles/components/calendar.css +12 -12
- package/src/styles/components/chart-container.css +34 -23
- package/src/styles/components/checkbox.css +3 -13
- package/src/styles/components/collapsible-card.css +28 -30
- package/src/styles/components/confirm-dialog.css +31 -16
- package/src/styles/components/dataframe.css +12 -4
- package/src/styles/components/date-picker.css +80 -92
- package/src/styles/components/datetime-picker.css +31 -43
- package/src/styles/components/divider.css +20 -20
- package/src/styles/components/dose-calculator.css +3 -3
- package/src/styles/components/empty-state.css +23 -18
- package/src/styles/components/experiment-code-badge.css +2 -0
- package/src/styles/components/experiment-popover.css +174 -329
- package/src/styles/components/experiment-selector-modal.css +75 -56
- package/src/styles/components/file-picker.css +4 -4
- package/src/styles/components/file-uploader.css +38 -49
- package/src/styles/components/form-builder.css +3 -3
- package/src/styles/components/formula-input.css +1 -1
- package/src/styles/components/icon-button.css +19 -25
- package/src/styles/components/input.css +5 -4
- package/src/styles/components/instrument-monitor.css +13 -15
- package/src/styles/components/jobs-status-tray.css +31 -25
- package/src/styles/components/loading-spinner.css +9 -12
- package/src/styles/components/modal.css +2 -4
- package/src/styles/components/molecule-input.css +2 -2
- package/src/styles/components/multi-select.css +65 -112
- package/src/styles/components/number-input.css +26 -19
- package/src/styles/components/pill.css +43 -37
- package/src/styles/components/plate-editor.css +0 -1
- package/src/styles/components/plugin-icon.css +34 -22
- package/src/styles/components/popover.css +2 -2
- package/src/styles/components/presence-avatars.css +194 -0
- package/src/styles/components/progress-bar.css +2 -0
- package/src/styles/components/protocol-step-editor.css +1 -3
- package/src/styles/components/resource-card.css +2 -2
- package/src/styles/components/resource-picker-list.css +6 -57
- package/src/styles/components/sample-hierarchy-tree.css +4 -4
- package/src/styles/components/sample-selector.css +95 -79
- package/src/styles/components/schedule-calendar.css +8 -8
- package/src/styles/components/searchable-select.css +15 -12
- package/src/styles/components/section-card.css +28 -47
- package/src/styles/components/segmented-control.css +18 -15
- package/src/styles/components/select.css +3 -3
- package/src/styles/components/sequence-input.css +2 -2
- package/src/styles/components/sequence-progress-bar.css +17 -8
- package/src/styles/components/smart-group.css +19 -24
- package/src/styles/components/step-wizard.css +52 -16
- package/src/styles/components/tabs.css +2 -2
- package/src/styles/components/textarea.css +4 -4
- package/src/styles/components/time-picker.css +36 -21
- package/src/styles/components/toast.css +12 -10
- package/src/styles/components/toggle.css +3 -13
- package/src/styles/components/tooltip.css +10 -9
- package/src/styles/components/unit-input.css +8 -7
- package/src/styles/components/version-conflict.css +122 -0
- package/src/styles/components/well-plate.css +8 -8
- package/src/styles/index.css +2 -11
- package/src/styles/variables.css +107 -602
- 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 +4 -33
- package/src/types/components.ts +148 -114
- package/src/types/form-builder.ts +4 -0
- package/src/types/generated/platformContext.ts +60 -0
- package/src/types/generated-ui.ts +6 -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} +21 -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/MultiSelect.test.ts +0 -54
- 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/MultiSelect.vue +0 -119
- 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
|
@@ -5,25 +5,24 @@ import { createPinia } from 'pinia'
|
|
|
5
5
|
import AppTopBar from '../../components/AppTopBar.vue'
|
|
6
6
|
import ExperimentPopover from '../../components/ExperimentPopover.vue'
|
|
7
7
|
import ExperimentSelectorModal from '../../components/ExperimentSelectorModal.vue'
|
|
8
|
-
import {
|
|
8
|
+
import { usePlatform } from '../../composables/usePlatform'
|
|
9
|
+
import { providePluginIdentity } from '../../composables/pluginIdentity'
|
|
9
10
|
import { APP_EXPERIMENT_KEY, type AppExperimentState } from '../../composables/useAppExperiment'
|
|
10
11
|
import { defineControlModel, defineControls } from '../../composables/useControlSchema'
|
|
11
12
|
import ThemeToggle from '../../components/ThemeToggle.vue'
|
|
12
13
|
import SettingsModal from '../../components/SettingsModal.vue'
|
|
13
14
|
import type { TopBarSettingsConfig } from '../../types/components'
|
|
14
15
|
|
|
15
|
-
// Mock the
|
|
16
|
-
vi.mock('../../composables/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
// Mock the usePlatform composable
|
|
17
|
+
vi.mock('../../composables/usePlatform', () => ({
|
|
18
|
+
usePlatform: vi.fn(() => ({
|
|
19
|
+
integrated: computed(() => false),
|
|
20
|
+
isAdmin: computed(() => true),
|
|
21
|
+
can: () => true,
|
|
20
22
|
plugin: computed(() => undefined),
|
|
21
23
|
user: computed(() => undefined),
|
|
22
24
|
theme: computed(() => 'system' as const),
|
|
23
25
|
features: computed(() => undefined),
|
|
24
|
-
navigate: vi.fn(),
|
|
25
|
-
notify: vi.fn(),
|
|
26
|
-
sendToPlatform: vi.fn(),
|
|
27
26
|
})),
|
|
28
27
|
}))
|
|
29
28
|
|
|
@@ -117,19 +116,19 @@ describe('AppTopBar', () => {
|
|
|
117
116
|
})
|
|
118
117
|
})
|
|
119
118
|
|
|
120
|
-
describe('
|
|
121
|
-
it('should not render ThemeToggle when
|
|
119
|
+
describe('spec.themeToggle', () => {
|
|
120
|
+
it('should not render ThemeToggle when spec.themeToggle is false', () => {
|
|
122
121
|
const wrapper = createWrapper({
|
|
122
|
+
spec: { themeToggle: false },
|
|
123
123
|
title: 'Test App',
|
|
124
|
-
showThemeToggle: false,
|
|
125
124
|
})
|
|
126
125
|
expect(wrapper.findComponent(ThemeToggle).exists()).toBe(false)
|
|
127
126
|
})
|
|
128
127
|
|
|
129
|
-
it('should render ThemeToggle when
|
|
128
|
+
it('should render ThemeToggle when spec.themeToggle is true', () => {
|
|
130
129
|
const wrapper = createWrapper({
|
|
130
|
+
spec: { themeToggle: true },
|
|
131
131
|
title: 'Test App',
|
|
132
|
-
showThemeToggle: true,
|
|
133
132
|
})
|
|
134
133
|
const themeToggle = wrapper.findComponent(ThemeToggle)
|
|
135
134
|
expect(themeToggle.exists()).toBe(true)
|
|
@@ -137,8 +136,8 @@ describe('AppTopBar', () => {
|
|
|
137
136
|
|
|
138
137
|
it('should pass size="sm" to ThemeToggle', () => {
|
|
139
138
|
const wrapper = createWrapper({
|
|
139
|
+
spec: { themeToggle: true },
|
|
140
140
|
title: 'Test App',
|
|
141
|
-
showThemeToggle: true,
|
|
142
141
|
})
|
|
143
142
|
const themeToggle = wrapper.findComponent(ThemeToggle)
|
|
144
143
|
expect(themeToggle.props('size')).toBe('sm')
|
|
@@ -146,36 +145,48 @@ describe('AppTopBar', () => {
|
|
|
146
145
|
|
|
147
146
|
it('should render ThemeToggle in right section', () => {
|
|
148
147
|
const wrapper = createWrapper({
|
|
148
|
+
spec: { themeToggle: true },
|
|
149
149
|
title: 'Test App',
|
|
150
|
-
showThemeToggle: true,
|
|
151
150
|
})
|
|
152
151
|
const rightSection = wrapper.find('.mint-topbar__right')
|
|
153
152
|
expect(rightSection.findComponent(ThemeToggle).exists()).toBe(true)
|
|
154
153
|
})
|
|
155
154
|
})
|
|
156
155
|
|
|
157
|
-
describe('
|
|
158
|
-
it('should not render settings button when
|
|
156
|
+
describe('spec.settings', () => {
|
|
157
|
+
it('should not render settings button when spec.settings is false', () => {
|
|
159
158
|
const wrapper = createWrapper({
|
|
159
|
+
spec: { settings: false },
|
|
160
160
|
title: 'Test App',
|
|
161
|
-
showSettings: false,
|
|
162
161
|
})
|
|
163
162
|
expect(wrapper.find('.mint-topbar__settings-btn').exists()).toBe(false)
|
|
164
163
|
})
|
|
165
164
|
|
|
166
|
-
it('should render settings button when
|
|
165
|
+
it('should render settings button when spec.settings is set', () => {
|
|
167
166
|
const wrapper = createWrapper({
|
|
167
|
+
spec: { settings: {} },
|
|
168
168
|
title: 'Test App',
|
|
169
|
-
showSettings: true,
|
|
170
169
|
})
|
|
171
170
|
const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
|
|
172
171
|
expect(settingsBtn.exists()).toBe(true)
|
|
173
172
|
})
|
|
174
173
|
|
|
174
|
+
it('should follow a spec.settings getter', async () => {
|
|
175
|
+
const canConfigure = ref(true)
|
|
176
|
+
const wrapper = createWrapper({
|
|
177
|
+
spec: { settings: () => (canConfigure.value ? {} : false) },
|
|
178
|
+
title: 'Test App',
|
|
179
|
+
})
|
|
180
|
+
canConfigure.value = false
|
|
181
|
+
await wrapper.vm.$nextTick()
|
|
182
|
+
|
|
183
|
+
expect(wrapper.find('.mint-topbar__settings-btn').exists()).toBe(false)
|
|
184
|
+
})
|
|
185
|
+
|
|
175
186
|
it('should render SettingsModal after settings is opened', async () => {
|
|
176
187
|
const wrapper = createWrapper({
|
|
188
|
+
spec: { settings: {} },
|
|
177
189
|
title: 'Test App',
|
|
178
|
-
showSettings: true,
|
|
179
190
|
})
|
|
180
191
|
expect(wrapper.findComponent(SettingsModal).exists()).toBe(false)
|
|
181
192
|
|
|
@@ -185,8 +196,8 @@ describe('AppTopBar', () => {
|
|
|
185
196
|
|
|
186
197
|
it('should have aria-label on settings button', () => {
|
|
187
198
|
const wrapper = createWrapper({
|
|
199
|
+
spec: { settings: {} },
|
|
188
200
|
title: 'Test App',
|
|
189
|
-
showSettings: true,
|
|
190
201
|
})
|
|
191
202
|
const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
|
|
192
203
|
expect(settingsBtn.attributes('aria-label')).toBe('Open settings')
|
|
@@ -194,8 +205,8 @@ describe('AppTopBar', () => {
|
|
|
194
205
|
|
|
195
206
|
it('should render settings icon SVG', () => {
|
|
196
207
|
const wrapper = createWrapper({
|
|
208
|
+
spec: { settings: {} },
|
|
197
209
|
title: 'Test App',
|
|
198
|
-
showSettings: true,
|
|
199
210
|
})
|
|
200
211
|
const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
|
|
201
212
|
const icon = settingsBtn.find('.mint-topbar__settings-icon')
|
|
@@ -207,34 +218,33 @@ describe('AppTopBar', () => {
|
|
|
207
218
|
describe('settings button interaction', () => {
|
|
208
219
|
it('should open SettingsModal when settings button is clicked', async () => {
|
|
209
220
|
const wrapper = createWrapper({
|
|
221
|
+
spec: { settings: {} },
|
|
210
222
|
title: 'Test App',
|
|
211
|
-
showSettings: true,
|
|
212
223
|
})
|
|
213
224
|
|
|
214
225
|
const settingsModal = await openSettingsModal(wrapper)
|
|
215
|
-
expect(settingsModal.props('
|
|
226
|
+
expect(settingsModal.props('open')).toBe(true)
|
|
216
227
|
})
|
|
217
228
|
|
|
218
229
|
it('should not mount SettingsModal while closed', () => {
|
|
219
230
|
const wrapper = createWrapper({
|
|
231
|
+
spec: { settings: {} },
|
|
220
232
|
title: 'Test App',
|
|
221
|
-
showSettings: true,
|
|
222
233
|
})
|
|
223
234
|
|
|
224
235
|
expect(wrapper.findComponent(SettingsModal).exists()).toBe(false)
|
|
225
236
|
})
|
|
226
237
|
})
|
|
227
238
|
|
|
228
|
-
describe('
|
|
239
|
+
describe('spec.settings config', () => {
|
|
229
240
|
it('should pass title to SettingsModal', async () => {
|
|
230
241
|
const settingsConfig: TopBarSettingsConfig = {
|
|
231
242
|
title: 'Custom Settings',
|
|
232
243
|
}
|
|
233
244
|
|
|
234
245
|
const wrapper = createWrapper({
|
|
246
|
+
spec: { settings: settingsConfig },
|
|
235
247
|
title: 'Test App',
|
|
236
|
-
showSettings: true,
|
|
237
|
-
settingsConfig,
|
|
238
248
|
})
|
|
239
249
|
|
|
240
250
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -250,9 +260,8 @@ describe('AppTopBar', () => {
|
|
|
250
260
|
}
|
|
251
261
|
|
|
252
262
|
const wrapper = createWrapper({
|
|
263
|
+
spec: { settings: settingsConfig },
|
|
253
264
|
title: 'Test App',
|
|
254
|
-
showSettings: true,
|
|
255
|
-
settingsConfig,
|
|
256
265
|
})
|
|
257
266
|
|
|
258
267
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -261,12 +270,13 @@ describe('AppTopBar', () => {
|
|
|
261
270
|
|
|
262
271
|
it('should normalize shorthand settings tabs for SettingsModal', async () => {
|
|
263
272
|
const wrapper = createWrapper({
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
273
|
+
spec: {
|
|
274
|
+
settings: {
|
|
275
|
+
tabs: ['General', 'Advanced'],
|
|
276
|
+
showAppearance: false,
|
|
277
|
+
},
|
|
269
278
|
},
|
|
279
|
+
title: 'Test App',
|
|
270
280
|
})
|
|
271
281
|
|
|
272
282
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -301,21 +311,22 @@ describe('AppTopBar', () => {
|
|
|
301
311
|
}
|
|
302
312
|
const settingsConfig: TopBarSettingsConfig = {
|
|
303
313
|
showAppearance: false,
|
|
304
|
-
schema,
|
|
314
|
+
spec: schema,
|
|
305
315
|
values: { threshold: 0.25, method: 'linear', externalContext: 'experiment-1' },
|
|
306
316
|
}
|
|
307
317
|
|
|
308
318
|
const wrapper = createWrapper({
|
|
319
|
+
spec: { settings: settingsConfig },
|
|
309
320
|
title: 'Test App',
|
|
310
|
-
showSettings: true,
|
|
311
|
-
settingsConfig,
|
|
312
321
|
})
|
|
313
322
|
|
|
314
323
|
await openSettingsModal(wrapper)
|
|
315
324
|
await wrapper.setProps({
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
325
|
+
spec: {
|
|
326
|
+
settings: {
|
|
327
|
+
...settingsConfig,
|
|
328
|
+
values: { threshold: 0.75, method: 'logistic', externalContext: 'experiment-2' },
|
|
329
|
+
},
|
|
319
330
|
},
|
|
320
331
|
})
|
|
321
332
|
await waitForAsyncComponents(wrapper)
|
|
@@ -324,7 +335,7 @@ describe('AppTopBar', () => {
|
|
|
324
335
|
expect((wrapper.find('select').element as HTMLSelectElement).value).toBe('logistic')
|
|
325
336
|
})
|
|
326
337
|
|
|
327
|
-
it('should
|
|
338
|
+
it('should pass a control model built from controls to SettingsModal', async () => {
|
|
328
339
|
const controls = defineControls({
|
|
329
340
|
threshold: {
|
|
330
341
|
label: 'Threshold',
|
|
@@ -333,19 +344,19 @@ describe('AppTopBar', () => {
|
|
|
333
344
|
sectionLabel: 'Parameters',
|
|
334
345
|
},
|
|
335
346
|
})
|
|
347
|
+
const model = defineControlModel({ controls })
|
|
336
348
|
const settingsConfig: TopBarSettingsConfig = {
|
|
337
349
|
showAppearance: false,
|
|
338
|
-
|
|
350
|
+
spec: model,
|
|
339
351
|
}
|
|
340
352
|
|
|
341
353
|
const wrapper = createWrapper({
|
|
354
|
+
spec: { settings: settingsConfig },
|
|
342
355
|
title: 'Test App',
|
|
343
|
-
showSettings: true,
|
|
344
|
-
settingsConfig,
|
|
345
356
|
})
|
|
346
357
|
|
|
347
358
|
const settingsModal = await openSettingsModal(wrapper)
|
|
348
|
-
expect(settingsModal.props('
|
|
359
|
+
expect(settingsModal.props('spec')).toStrictEqual(model)
|
|
349
360
|
expect(wrapper.text()).toContain('Threshold')
|
|
350
361
|
expect((wrapper.find('input').element as HTMLInputElement).value).toBe('0.25')
|
|
351
362
|
})
|
|
@@ -363,17 +374,16 @@ describe('AppTopBar', () => {
|
|
|
363
374
|
})
|
|
364
375
|
const settingsConfig: TopBarSettingsConfig = {
|
|
365
376
|
showAppearance: false,
|
|
366
|
-
model,
|
|
377
|
+
spec: model,
|
|
367
378
|
}
|
|
368
379
|
|
|
369
380
|
const wrapper = createWrapper({
|
|
381
|
+
spec: { settings: settingsConfig },
|
|
370
382
|
title: 'Test App',
|
|
371
|
-
showSettings: true,
|
|
372
|
-
settingsConfig,
|
|
373
383
|
})
|
|
374
384
|
|
|
375
385
|
const settingsModal = await openSettingsModal(wrapper)
|
|
376
|
-
expect(settingsModal.props('
|
|
386
|
+
expect(settingsModal.props('spec')).toStrictEqual(model)
|
|
377
387
|
expect(wrapper.text()).toContain('Threshold')
|
|
378
388
|
expect((wrapper.find('input').element as HTMLInputElement).value).toBe('0.25')
|
|
379
389
|
})
|
|
@@ -384,9 +394,8 @@ describe('AppTopBar', () => {
|
|
|
384
394
|
}
|
|
385
395
|
|
|
386
396
|
const wrapper = createWrapper({
|
|
397
|
+
spec: { settings: settingsConfig },
|
|
387
398
|
title: 'Test App',
|
|
388
|
-
showSettings: true,
|
|
389
|
-
settingsConfig,
|
|
390
399
|
})
|
|
391
400
|
|
|
392
401
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -399,9 +408,8 @@ describe('AppTopBar', () => {
|
|
|
399
408
|
}
|
|
400
409
|
|
|
401
410
|
const wrapper = createWrapper({
|
|
411
|
+
spec: { settings: settingsConfig },
|
|
402
412
|
title: 'Test App',
|
|
403
|
-
showSettings: true,
|
|
404
|
-
settingsConfig,
|
|
405
413
|
})
|
|
406
414
|
|
|
407
415
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -410,9 +418,8 @@ describe('AppTopBar', () => {
|
|
|
410
418
|
|
|
411
419
|
it('should default showAppearance to true when not specified', async () => {
|
|
412
420
|
const wrapper = createWrapper({
|
|
421
|
+
spec: { settings: {} },
|
|
413
422
|
title: 'Test App',
|
|
414
|
-
showSettings: true,
|
|
415
|
-
settingsConfig: {},
|
|
416
423
|
})
|
|
417
424
|
|
|
418
425
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -425,9 +432,8 @@ describe('AppTopBar', () => {
|
|
|
425
432
|
}
|
|
426
433
|
|
|
427
434
|
const wrapper = createWrapper({
|
|
435
|
+
spec: { settings: settingsConfig },
|
|
428
436
|
title: 'Test App',
|
|
429
|
-
showSettings: true,
|
|
430
|
-
settingsConfig,
|
|
431
437
|
})
|
|
432
438
|
|
|
433
439
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -436,8 +442,8 @@ describe('AppTopBar', () => {
|
|
|
436
442
|
|
|
437
443
|
it('should use default size when not specified', async () => {
|
|
438
444
|
const wrapper = createWrapper({
|
|
445
|
+
spec: { settings: {} },
|
|
439
446
|
title: 'Test App',
|
|
440
|
-
showSettings: true,
|
|
441
447
|
})
|
|
442
448
|
|
|
443
449
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -453,9 +459,8 @@ describe('AppTopBar', () => {
|
|
|
453
459
|
}
|
|
454
460
|
|
|
455
461
|
const wrapper = createWrapper({
|
|
462
|
+
spec: { settings: settingsConfig },
|
|
456
463
|
title: 'Test App',
|
|
457
|
-
showSettings: true,
|
|
458
|
-
settingsConfig,
|
|
459
464
|
}, {
|
|
460
465
|
'settings-tab-general': '<div class="custom-tab-content">Custom General Tab</div>',
|
|
461
466
|
})
|
|
@@ -466,12 +471,13 @@ describe('AppTopBar', () => {
|
|
|
466
471
|
|
|
467
472
|
it('should forward shorthand settings-tab slots to SettingsModal', async () => {
|
|
468
473
|
const wrapper = createWrapper({
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
+
spec: {
|
|
475
|
+
settings: {
|
|
476
|
+
tabs: ['General'],
|
|
477
|
+
showAppearance: false,
|
|
478
|
+
},
|
|
474
479
|
},
|
|
480
|
+
title: 'Test App',
|
|
475
481
|
}, {
|
|
476
482
|
'settings-tab-General': '<div>General Content</div>',
|
|
477
483
|
})
|
|
@@ -489,9 +495,8 @@ describe('AppTopBar', () => {
|
|
|
489
495
|
}
|
|
490
496
|
|
|
491
497
|
const wrapper = createWrapper({
|
|
498
|
+
spec: { settings: settingsConfig },
|
|
492
499
|
title: 'Test App',
|
|
493
|
-
showSettings: true,
|
|
494
|
-
settingsConfig,
|
|
495
500
|
}, {
|
|
496
501
|
'settings-tab-general': '<div>General Content</div>',
|
|
497
502
|
'settings-tab-advanced': '<div>Advanced Content</div>',
|
|
@@ -504,8 +509,8 @@ describe('AppTopBar', () => {
|
|
|
504
509
|
|
|
505
510
|
it('should forward settings-appearance slot', async () => {
|
|
506
511
|
const wrapper = createWrapper({
|
|
512
|
+
spec: { settings: {} },
|
|
507
513
|
title: 'Test App',
|
|
508
|
-
showSettings: true,
|
|
509
514
|
}, {
|
|
510
515
|
'settings-appearance': '<div class="custom-appearance">Custom Appearance</div>',
|
|
511
516
|
})
|
|
@@ -515,25 +520,36 @@ describe('AppTopBar', () => {
|
|
|
515
520
|
})
|
|
516
521
|
})
|
|
517
522
|
|
|
518
|
-
describe('
|
|
519
|
-
it('should show standalone badge
|
|
523
|
+
describe('spec.standaloneLabel visibility', () => {
|
|
524
|
+
it('should show standalone badge by default', () => {
|
|
520
525
|
const wrapper = createWrapper({
|
|
521
526
|
title: 'Test App',
|
|
522
|
-
showStandaloneLabel: true,
|
|
523
527
|
})
|
|
524
528
|
expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(true)
|
|
525
529
|
})
|
|
526
530
|
|
|
527
|
-
it('should hide standalone badge when
|
|
531
|
+
it('should hide standalone badge when spec.standaloneLabel is false', () => {
|
|
528
532
|
const wrapper = createWrapper({
|
|
533
|
+
spec: { standaloneLabel: false },
|
|
529
534
|
title: 'Test App',
|
|
530
|
-
|
|
535
|
+
})
|
|
536
|
+
expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(false)
|
|
537
|
+
})
|
|
538
|
+
|
|
539
|
+
it('should hide standalone badge when spec.standaloneLabel is false and an app experiment is provided', () => {
|
|
540
|
+
const wrapper = mount(AppTopBar, {
|
|
541
|
+
props: { title: 'Test App', spec: { standaloneLabel: false } },
|
|
542
|
+
global: {
|
|
543
|
+
plugins: [createPinia()],
|
|
544
|
+
provide: { [APP_EXPERIMENT_KEY as symbol]: {} as AppExperimentState },
|
|
545
|
+
stubs: { 'router-link': { template: '<a><slot /></a>' } },
|
|
546
|
+
},
|
|
531
547
|
})
|
|
532
548
|
expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(false)
|
|
533
549
|
})
|
|
534
550
|
})
|
|
535
551
|
|
|
536
|
-
describe('standaloneLabel
|
|
552
|
+
describe('spec.standaloneLabel text', () => {
|
|
537
553
|
it('should display default "Standalone" label', () => {
|
|
538
554
|
const wrapper = createWrapper({
|
|
539
555
|
title: 'Test App',
|
|
@@ -544,8 +560,8 @@ describe('AppTopBar', () => {
|
|
|
544
560
|
|
|
545
561
|
it('should display custom standalone label', () => {
|
|
546
562
|
const wrapper = createWrapper({
|
|
563
|
+
spec: { standaloneLabel: 'Demo Mode' },
|
|
547
564
|
title: 'Test App',
|
|
548
|
-
standaloneLabel: 'Demo Mode',
|
|
549
565
|
})
|
|
550
566
|
const badge = wrapper.find('.mint-topbar__standalone-badge')
|
|
551
567
|
expect(badge.text()).toBe('Demo Mode')
|
|
@@ -553,8 +569,8 @@ describe('AppTopBar', () => {
|
|
|
553
569
|
|
|
554
570
|
it('should support empty string as label', () => {
|
|
555
571
|
const wrapper = createWrapper({
|
|
572
|
+
spec: { standaloneLabel: '' },
|
|
556
573
|
title: 'Test App',
|
|
557
|
-
standaloneLabel: '',
|
|
558
574
|
})
|
|
559
575
|
const badge = wrapper.find('.mint-topbar__standalone-badge')
|
|
560
576
|
expect(badge.text()).toBe('')
|
|
@@ -568,7 +584,6 @@ describe('AppTopBar', () => {
|
|
|
568
584
|
// The component code correctly checks isStandalone computed property
|
|
569
585
|
const wrapper = createWrapper({
|
|
570
586
|
title: 'Test App',
|
|
571
|
-
showStandaloneLabel: true,
|
|
572
587
|
})
|
|
573
588
|
|
|
574
589
|
// In non-integrated mode (default mock), badge should be visible
|
|
@@ -578,9 +593,10 @@ describe('AppTopBar', () => {
|
|
|
578
593
|
|
|
579
594
|
describe('combined features', () => {
|
|
580
595
|
it('does not bind an experiment when the integrated plugin is static', async () => {
|
|
581
|
-
vi.mocked(
|
|
582
|
-
|
|
583
|
-
|
|
596
|
+
vi.mocked(usePlatform).mockReturnValueOnce({
|
|
597
|
+
integrated: computed(() => true),
|
|
598
|
+
isAdmin: computed(() => true),
|
|
599
|
+
can: () => true,
|
|
584
600
|
plugin: computed(() => ({
|
|
585
601
|
id: 'hmdb',
|
|
586
602
|
name: 'HMDB',
|
|
@@ -588,13 +604,12 @@ describe('AppTopBar', () => {
|
|
|
588
604
|
route_prefix: '/hmdb',
|
|
589
605
|
api_prefix: '/api/hmdb',
|
|
590
606
|
plugin_type: 'static',
|
|
607
|
+
display_name: 'HMDB',
|
|
608
|
+
settings_api: 'platform' as const,
|
|
591
609
|
})),
|
|
592
610
|
user: computed(() => undefined),
|
|
593
611
|
theme: computed(() => 'system' as const),
|
|
594
612
|
features: computed(() => undefined),
|
|
595
|
-
navigate: vi.fn(),
|
|
596
|
-
notify: vi.fn(),
|
|
597
|
-
sendToPlatform: vi.fn(),
|
|
598
613
|
})
|
|
599
614
|
const wrapper = mount(AppTopBar, {
|
|
600
615
|
props: { title: 'HMDB' },
|
|
@@ -618,16 +633,14 @@ describe('AppTopBar', () => {
|
|
|
618
633
|
})
|
|
619
634
|
|
|
620
635
|
it('passes injected app experiment bindings to the popover and selector modal', async () => {
|
|
621
|
-
vi.mocked(
|
|
622
|
-
|
|
623
|
-
|
|
636
|
+
vi.mocked(usePlatform).mockReturnValueOnce({
|
|
637
|
+
integrated: computed(() => true),
|
|
638
|
+
isAdmin: computed(() => true),
|
|
639
|
+
can: () => true,
|
|
624
640
|
plugin: computed(() => undefined),
|
|
625
641
|
user: computed(() => undefined),
|
|
626
642
|
theme: computed(() => 'system' as const),
|
|
627
643
|
features: computed(() => undefined),
|
|
628
|
-
navigate: vi.fn(),
|
|
629
|
-
notify: vi.fn(),
|
|
630
|
-
sendToPlatform: vi.fn(),
|
|
631
644
|
})
|
|
632
645
|
const appExperiment: AppExperimentState = {
|
|
633
646
|
experimentName: computed(() => 'Dose response'),
|
|
@@ -657,7 +670,7 @@ describe('AppTopBar', () => {
|
|
|
657
670
|
saveSuccessMessage: 'Saved',
|
|
658
671
|
})),
|
|
659
672
|
selectorModal: computed(() => ({
|
|
660
|
-
|
|
673
|
+
open: true,
|
|
661
674
|
currentExperimentId: 12,
|
|
662
675
|
})),
|
|
663
676
|
openModal: vi.fn(),
|
|
@@ -697,16 +710,15 @@ describe('AppTopBar', () => {
|
|
|
697
710
|
saveSuccessMessage: 'Saved',
|
|
698
711
|
})
|
|
699
712
|
expect(wrapper.findComponent(ExperimentSelectorModal).props()).toMatchObject({
|
|
700
|
-
|
|
713
|
+
open: true,
|
|
701
714
|
currentExperimentId: 12,
|
|
702
715
|
})
|
|
703
716
|
})
|
|
704
717
|
|
|
705
718
|
it('should render ThemeToggle and settings button together', () => {
|
|
706
719
|
const wrapper = createWrapper({
|
|
720
|
+
spec: { themeToggle: true, settings: {} },
|
|
707
721
|
title: 'Test App',
|
|
708
|
-
showThemeToggle: true,
|
|
709
|
-
showSettings: true,
|
|
710
722
|
})
|
|
711
723
|
|
|
712
724
|
expect(wrapper.findComponent(ThemeToggle).exists()).toBe(true)
|
|
@@ -715,11 +727,8 @@ describe('AppTopBar', () => {
|
|
|
715
727
|
|
|
716
728
|
it('should render standalone badge, ThemeToggle, and settings button together', () => {
|
|
717
729
|
const wrapper = createWrapper({
|
|
730
|
+
spec: { themeToggle: true, standaloneLabel: 'Offline', settings: {} },
|
|
718
731
|
title: 'Test App',
|
|
719
|
-
showThemeToggle: true,
|
|
720
|
-
showSettings: true,
|
|
721
|
-
showStandaloneLabel: true,
|
|
722
|
-
standaloneLabel: 'Offline',
|
|
723
732
|
})
|
|
724
733
|
|
|
725
734
|
expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(true)
|
|
@@ -730,11 +739,9 @@ describe('AppTopBar', () => {
|
|
|
730
739
|
|
|
731
740
|
it('should maintain existing topbar functionality with new features', () => {
|
|
732
741
|
const wrapper = createWrapper({
|
|
742
|
+
spec: { themeToggle: true, settings: {} },
|
|
733
743
|
title: 'My Plugin',
|
|
734
744
|
subtitle: 'Version 1.0',
|
|
735
|
-
showThemeToggle: true,
|
|
736
|
-
showSettings: true,
|
|
737
|
-
showStandaloneLabel: true,
|
|
738
745
|
})
|
|
739
746
|
|
|
740
747
|
// Verify title and subtitle still render
|
|
@@ -749,10 +756,8 @@ describe('AppTopBar', () => {
|
|
|
749
756
|
|
|
750
757
|
it('should render all elements in correct order in right section', () => {
|
|
751
758
|
const wrapper = createWrapper({
|
|
759
|
+
spec: { themeToggle: true, settings: {} },
|
|
752
760
|
title: 'Test App',
|
|
753
|
-
showThemeToggle: true,
|
|
754
|
-
showSettings: true,
|
|
755
|
-
showStandaloneLabel: true,
|
|
756
761
|
}, {
|
|
757
762
|
actions: '<button class="custom-action">Action</button>',
|
|
758
763
|
})
|
|
@@ -784,19 +789,21 @@ describe('AppTopBar', () => {
|
|
|
784
789
|
|
|
785
790
|
it('composes page selector, pill nav, theme, and settings controls', () => {
|
|
786
791
|
const wrapper = createWrapper({
|
|
792
|
+
spec: {
|
|
793
|
+
themeToggle: true,
|
|
794
|
+
pills: [
|
|
795
|
+
{ id: 'overview', label: 'Overview' },
|
|
796
|
+
{ id: 'details', label: 'Details' },
|
|
797
|
+
],
|
|
798
|
+
settings: {},
|
|
799
|
+
},
|
|
800
|
+
pill: 'overview',
|
|
787
801
|
title: 'Dashboard',
|
|
788
802
|
pageSelector: [
|
|
789
803
|
{ id: 'dashboard', label: 'Dashboard' },
|
|
790
804
|
{ id: 'settings', label: 'Settings' },
|
|
791
805
|
],
|
|
792
806
|
currentPageSelectorId: 'dashboard',
|
|
793
|
-
pillNav: [
|
|
794
|
-
{ id: 'overview', label: 'Overview' },
|
|
795
|
-
{ id: 'details', label: 'Details' },
|
|
796
|
-
],
|
|
797
|
-
currentPillId: 'overview',
|
|
798
|
-
showThemeToggle: true,
|
|
799
|
-
showSettings: true,
|
|
800
807
|
})
|
|
801
808
|
|
|
802
809
|
expect(wrapper.find('.mint-page-selector__label').text()).toBe('Dashboard')
|
|
@@ -812,11 +819,13 @@ describe('AppTopBar', () => {
|
|
|
812
819
|
it('renders pill nav items with icon metadata', async () => {
|
|
813
820
|
const runIcon = 'M8 5v14l11-7z'
|
|
814
821
|
const wrapper = createWrapper({
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
822
|
+
spec: {
|
|
823
|
+
pills: [
|
|
824
|
+
{ id: 'analysis', label: 'Run', icon: runIcon },
|
|
825
|
+
{ id: 'results', label: 'Results' },
|
|
826
|
+
],
|
|
827
|
+
},
|
|
828
|
+
pill: 'analysis',
|
|
820
829
|
})
|
|
821
830
|
|
|
822
831
|
const pills = wrapper.findAll('.mint-pill-nav__item')
|
|
@@ -829,6 +838,17 @@ describe('AppTopBar', () => {
|
|
|
829
838
|
expect(wrapper.emitted('pill-select')?.[0][0]).toMatchObject({ id: 'results', label: 'Results' })
|
|
830
839
|
})
|
|
831
840
|
|
|
841
|
+
it('emits update:pill with the id of the selected pill', async () => {
|
|
842
|
+
const wrapper = createWrapper({
|
|
843
|
+
spec: { pills: ['Run', 'Results'] },
|
|
844
|
+
pill: 'Run',
|
|
845
|
+
})
|
|
846
|
+
|
|
847
|
+
await wrapper.findAll('.mint-pill-nav__item')[1].trigger('click')
|
|
848
|
+
|
|
849
|
+
expect(wrapper.emitted('update:pill')).toEqual([['Results']])
|
|
850
|
+
})
|
|
851
|
+
|
|
832
852
|
it('uses shared dropdown state for the page selector menu', async () => {
|
|
833
853
|
const wrapper = createWrapper({
|
|
834
854
|
pageSelector: [
|
|
@@ -893,11 +913,10 @@ describe('AppTopBar', () => {
|
|
|
893
913
|
})
|
|
894
914
|
|
|
895
915
|
describe('edge cases', () => {
|
|
896
|
-
it('should handle empty
|
|
916
|
+
it('should handle empty spec.settings object', async () => {
|
|
897
917
|
const wrapper = createWrapper({
|
|
918
|
+
spec: { settings: {} },
|
|
898
919
|
title: 'Test App',
|
|
899
|
-
showSettings: true,
|
|
900
|
-
settingsConfig: {},
|
|
901
920
|
})
|
|
902
921
|
|
|
903
922
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -908,15 +927,14 @@ describe('AppTopBar', () => {
|
|
|
908
927
|
expect(settingsModal.props('size')).toBe('lg')
|
|
909
928
|
})
|
|
910
929
|
|
|
911
|
-
it('should handle
|
|
930
|
+
it('should handle spec.settings with only some fields', async () => {
|
|
912
931
|
const settingsConfig: TopBarSettingsConfig = {
|
|
913
932
|
title: 'Partial Config',
|
|
914
933
|
}
|
|
915
934
|
|
|
916
935
|
const wrapper = createWrapper({
|
|
936
|
+
spec: { settings: settingsConfig },
|
|
917
937
|
title: 'Test App',
|
|
918
|
-
showSettings: true,
|
|
919
|
-
settingsConfig,
|
|
920
938
|
})
|
|
921
939
|
|
|
922
940
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -930,8 +948,8 @@ describe('AppTopBar', () => {
|
|
|
930
948
|
|
|
931
949
|
it('should handle standalone label with special characters', () => {
|
|
932
950
|
const wrapper = createWrapper({
|
|
951
|
+
spec: { standaloneLabel: '🚀 Preview' },
|
|
933
952
|
title: 'Test App',
|
|
934
|
-
standaloneLabel: '🚀 Preview',
|
|
935
953
|
})
|
|
936
954
|
|
|
937
955
|
const badge = wrapper.find('.mint-topbar__standalone-badge')
|
|
@@ -941,8 +959,8 @@ describe('AppTopBar', () => {
|
|
|
941
959
|
it('should handle very long standalone label', () => {
|
|
942
960
|
const longLabel = 'This is a very long standalone mode label text'
|
|
943
961
|
const wrapper = createWrapper({
|
|
962
|
+
spec: { standaloneLabel: longLabel },
|
|
944
963
|
title: 'Test App',
|
|
945
|
-
standaloneLabel: longLabel,
|
|
946
964
|
})
|
|
947
965
|
|
|
948
966
|
const badge = wrapper.find('.mint-topbar__standalone-badge')
|
|
@@ -951,7 +969,7 @@ describe('AppTopBar', () => {
|
|
|
951
969
|
})
|
|
952
970
|
|
|
953
971
|
describe('type safety', () => {
|
|
954
|
-
it('should accept valid
|
|
972
|
+
it('should accept valid spec.settings with all fields', async () => {
|
|
955
973
|
const settingsConfig: TopBarSettingsConfig = {
|
|
956
974
|
title: 'Complete Settings',
|
|
957
975
|
tabs: [
|
|
@@ -963,9 +981,8 @@ describe('AppTopBar', () => {
|
|
|
963
981
|
}
|
|
964
982
|
|
|
965
983
|
const wrapper = createWrapper({
|
|
984
|
+
spec: { settings: settingsConfig },
|
|
966
985
|
title: 'Test App',
|
|
967
|
-
showSettings: true,
|
|
968
|
-
settingsConfig,
|
|
969
986
|
})
|
|
970
987
|
|
|
971
988
|
expect((await openSettingsModal(wrapper)).exists()).toBe(true)
|
|
@@ -976,9 +993,8 @@ describe('AppTopBar', () => {
|
|
|
976
993
|
|
|
977
994
|
for (const size of sizes) {
|
|
978
995
|
const wrapper = createWrapper({
|
|
996
|
+
spec: { settings: { size } },
|
|
979
997
|
title: 'Test App',
|
|
980
|
-
showSettings: true,
|
|
981
|
-
settingsConfig: { size },
|
|
982
998
|
})
|
|
983
999
|
|
|
984
1000
|
const settingsModal = await openSettingsModal(wrapper)
|
|
@@ -997,16 +1013,14 @@ describe('AppTopBar', () => {
|
|
|
997
1013
|
features: undefined as unknown,
|
|
998
1014
|
}
|
|
999
1015
|
const merged = { ...defaults, ...overrides }
|
|
1000
|
-
vi.mocked(
|
|
1001
|
-
|
|
1002
|
-
|
|
1016
|
+
vi.mocked(usePlatform).mockReturnValue({
|
|
1017
|
+
integrated: computed(() => merged.isIntegrated as boolean),
|
|
1018
|
+
isAdmin: computed(() => true),
|
|
1019
|
+
can: () => true,
|
|
1003
1020
|
plugin: computed(() => merged.plugin as any),
|
|
1004
1021
|
user: computed(() => merged.user as any),
|
|
1005
1022
|
theme: computed(() => merged.theme as any),
|
|
1006
1023
|
features: computed(() => merged.features as any),
|
|
1007
|
-
navigate: vi.fn(),
|
|
1008
|
-
notify: vi.fn(),
|
|
1009
|
-
sendToPlatform: vi.fn(),
|
|
1010
1024
|
})
|
|
1011
1025
|
}
|
|
1012
1026
|
|
|
@@ -1045,7 +1059,7 @@ describe('AppTopBar', () => {
|
|
|
1045
1059
|
expect(wrapper.find('.mint-topbar__identity').exists()).toBe(true)
|
|
1046
1060
|
})
|
|
1047
1061
|
|
|
1048
|
-
it('should pass
|
|
1062
|
+
it('should not pass the manifest color to PluginIcon when the plugin declares one', () => {
|
|
1049
1063
|
const iconPath = 'M13 10V3L4 14h7v7l9-11h-7z'
|
|
1050
1064
|
mockPlatformCtx({
|
|
1051
1065
|
isIntegrated: true,
|
|
@@ -1058,7 +1072,7 @@ describe('AppTopBar', () => {
|
|
|
1058
1072
|
|
|
1059
1073
|
const wrapper = createWrapper({ title: 'Test App' })
|
|
1060
1074
|
|
|
1061
|
-
expect(wrapper.findComponent({ name: 'PluginIcon' }).props('
|
|
1075
|
+
expect(wrapper.findComponent({ name: 'PluginIcon' }).props('color')).toBeUndefined()
|
|
1062
1076
|
})
|
|
1063
1077
|
|
|
1064
1078
|
it('should ignore the custom icon slot when integrated', () => {
|
|
@@ -1124,44 +1138,34 @@ describe('AppTopBar', () => {
|
|
|
1124
1138
|
expect(wrapper.findComponent({ name: 'PluginIcon' }).exists()).toBe(true)
|
|
1125
1139
|
})
|
|
1126
1140
|
|
|
1127
|
-
it('
|
|
1128
|
-
const
|
|
1129
|
-
|
|
1141
|
+
it('should hand the platform page selector an element when pageSelector is omitted', () => {
|
|
1142
|
+
const unmount = vi.fn()
|
|
1143
|
+
const mountPageSelector = vi.fn((_element: HTMLElement) => unmount)
|
|
1144
|
+
const integratedWindow = window as Window & { __MINT_INTEGRATION__?: unknown }
|
|
1145
|
+
integratedWindow.__MINT_INTEGRATION__ = { mountPageSelector, bindExperimentStore: vi.fn() }
|
|
1130
1146
|
try {
|
|
1131
|
-
const pluginIcon = 'M13 10V3L4 14h7v7l9-11h-7z'
|
|
1132
|
-
const analysisIcon = 'M4 19h16M7 16V8m5 8V4m5 12v-6'
|
|
1133
1147
|
mockPlatformCtx({
|
|
1134
1148
|
isIntegrated: true,
|
|
1135
1149
|
plugin: {
|
|
1136
1150
|
id: 'test',
|
|
1137
1151
|
name: 'Dose Designer',
|
|
1138
1152
|
version: '1.0',
|
|
1139
|
-
icon: pluginIcon,
|
|
1140
1153
|
route_prefix: '/test',
|
|
1141
1154
|
api_prefix: '/api/test',
|
|
1142
1155
|
nav_items: [
|
|
1143
1156
|
{ path: '/', label: 'Dashboard' },
|
|
1144
|
-
{ path: '/analysis', label: 'Analysis'
|
|
1157
|
+
{ path: '/analysis', label: 'Analysis' },
|
|
1145
1158
|
],
|
|
1146
1159
|
},
|
|
1147
1160
|
})
|
|
1148
1161
|
|
|
1149
1162
|
const wrapper = createWrapper()
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
expect(
|
|
1154
|
-
'Dashboard',
|
|
1155
|
-
'Analysis',
|
|
1156
|
-
])
|
|
1157
|
-
expect(wrapper.find('.mint-page-selector__item-hint').exists()).toBe(false)
|
|
1158
|
-
const dropdownIcons = wrapper
|
|
1159
|
-
.findAllComponents({ name: 'PluginIcon' })
|
|
1160
|
-
.filter(icon => icon.classes().includes('mint-page-selector__metadata-icon'))
|
|
1161
|
-
expect(dropdownIcons.map(icon => icon.props('icon'))).toEqual([pluginIcon, analysisIcon])
|
|
1162
|
-
expect(wrapper.findAll('.mint-page-selector__item')[1].classes()).toContain('mint-page-selector__item--active')
|
|
1163
|
+
const host = wrapper.get('.mint-topbar__platform-page-selector').element
|
|
1164
|
+
wrapper.unmount()
|
|
1165
|
+
|
|
1166
|
+
expect([mountPageSelector.mock.calls[0]?.[0], unmount.mock.calls.length]).toEqual([host, 1])
|
|
1163
1167
|
} finally {
|
|
1164
|
-
|
|
1168
|
+
delete integratedWindow.__MINT_INTEGRATION__
|
|
1165
1169
|
}
|
|
1166
1170
|
})
|
|
1167
1171
|
|
|
@@ -1265,6 +1269,54 @@ describe('AppTopBar', () => {
|
|
|
1265
1269
|
|
|
1266
1270
|
expect(wrapper.find('.mint-topbar__title-only').exists()).toBe(false)
|
|
1267
1271
|
})
|
|
1272
|
+
|
|
1273
|
+
it.each([
|
|
1274
|
+
{ fields: { subtitle: 'Peak Review', description: 'Reviews LC-MS peaks' }, expected: 'Peak Review' },
|
|
1275
|
+
{ fields: { description: 'Reviews LC-MS peaks' }, expected: 'Reviews LC-MS peaks' },
|
|
1276
|
+
{ fields: {}, expected: null },
|
|
1277
|
+
])('should show $expected under the integrated name when the plugin has $fields', ({ fields, expected }) => {
|
|
1278
|
+
mockPlatformCtx({ isIntegrated: true, plugin: { ...integratedPlugin, ...fields } })
|
|
1279
|
+
|
|
1280
|
+
const wrapper = createWrapper()
|
|
1281
|
+
|
|
1282
|
+
const subtitle = wrapper.find('.mint-topbar__plugin-subtitle')
|
|
1283
|
+
expect(subtitle.exists() ? subtitle.text() : null).toBe(expected)
|
|
1284
|
+
})
|
|
1285
|
+
})
|
|
1286
|
+
|
|
1287
|
+
describe('seeded standalone identity', () => {
|
|
1288
|
+
const seedIcon = 'M13 10V3L4 14h7v7l9-11h-7z'
|
|
1289
|
+
|
|
1290
|
+
beforeEach(() => {
|
|
1291
|
+
providePluginIdentity({
|
|
1292
|
+
plugin: { name: 'ms-planner', displayName: 'MS Planner', subtitle: 'Experiment Scheduler', icon: seedIcon },
|
|
1293
|
+
})
|
|
1294
|
+
})
|
|
1295
|
+
|
|
1296
|
+
afterEach(() => providePluginIdentity({ plugin: { name: '' } }))
|
|
1297
|
+
|
|
1298
|
+
it('should show the seeded name, subtitle and icon when standalone', () => {
|
|
1299
|
+
const wrapper = createWrapper()
|
|
1300
|
+
|
|
1301
|
+
expect(wrapper.get('.mint-topbar-title').text()).toBe('MS Planner')
|
|
1302
|
+
expect(wrapper.get('.mint-topbar-subtitle').text()).toBe('Experiment Scheduler')
|
|
1303
|
+
expect(wrapper.findComponent({ name: 'PluginIcon' }).props('icon')).toBe(seedIcon)
|
|
1304
|
+
})
|
|
1305
|
+
|
|
1306
|
+
it.each([
|
|
1307
|
+
{ slot: 'icon' },
|
|
1308
|
+
{ slot: 'logo' },
|
|
1309
|
+
])('should keep the title props and the #$slot slot over the seed', ({ slot }) => {
|
|
1310
|
+
const wrapper = createWrapper(
|
|
1311
|
+
{ title: 'Planner Dev', subtitle: 'Local build' },
|
|
1312
|
+
{ [slot]: '<span class="custom-brand">P</span>' },
|
|
1313
|
+
)
|
|
1314
|
+
|
|
1315
|
+
expect(wrapper.get('.mint-topbar-title').text()).toBe('Planner Dev')
|
|
1316
|
+
expect(wrapper.get('.mint-topbar-subtitle').text()).toBe('Local build')
|
|
1317
|
+
expect(wrapper.find('.custom-brand').exists()).toBe(true)
|
|
1318
|
+
expect(wrapper.findComponent({ name: 'PluginIcon' }).exists()).toBe(false)
|
|
1319
|
+
})
|
|
1268
1320
|
})
|
|
1269
1321
|
})
|
|
1270
1322
|
|
|
@@ -1285,10 +1337,10 @@ describe('AppTopBar', () => {
|
|
|
1285
1337
|
])
|
|
1286
1338
|
})
|
|
1287
1339
|
|
|
1288
|
-
it('accepts string shorthand for
|
|
1340
|
+
it('accepts string shorthand for spec.pills', async () => {
|
|
1289
1341
|
const wrapper = createWrapper({
|
|
1290
|
-
|
|
1291
|
-
|
|
1342
|
+
spec: { pills: ['Run', 'Results'] },
|
|
1343
|
+
pill: 'Run',
|
|
1292
1344
|
})
|
|
1293
1345
|
|
|
1294
1346
|
expect(wrapper.findAll('.mint-pill-nav__item').map(item => item.text())).toEqual([
|
|
@@ -1303,20 +1355,22 @@ describe('AppTopBar', () => {
|
|
|
1303
1355
|
])
|
|
1304
1356
|
})
|
|
1305
1357
|
|
|
1306
|
-
it('emits pill-option-select for
|
|
1358
|
+
it('emits pill-option-select for spec.pills dropdown children', async () => {
|
|
1307
1359
|
const wrapper = createWrapper({
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1360
|
+
spec: {
|
|
1361
|
+
pills: [
|
|
1362
|
+
{ id: 'charts', label: 'Charts' },
|
|
1363
|
+
{
|
|
1364
|
+
id: 'visualize',
|
|
1365
|
+
label: 'Visualize',
|
|
1366
|
+
children: [
|
|
1367
|
+
{ id: 'pca', label: 'PCA', description: 'Principal component analysis' },
|
|
1368
|
+
{ id: 'heatmap', label: 'Heatmap', description: 'Metabolite heatmap' },
|
|
1369
|
+
],
|
|
1370
|
+
},
|
|
1371
|
+
],
|
|
1372
|
+
},
|
|
1373
|
+
pill: 'pca',
|
|
1320
1374
|
})
|
|
1321
1375
|
|
|
1322
1376
|
await wrapper.findAll('.mint-pill-nav__item')[1].trigger('click')
|